AssetRef

Struct AssetRef 

Source
pub struct AssetRef(Rc<Asset>);
Expand description

A wrapper around Asset for storing references in maps.

If the asset has been commissioned, then comparison and hashing is done based on the asset ID, otherwise a combination of other parameters is used.

Ord is implemented for AssetRef, but it will panic for non-commissioned assets.

Tuple Fields§

§0: Rc<Asset>

Implementations§

Source§

impl AssetRef

Source

pub fn make_mut(&mut self) -> &mut Asset

Make a mutable reference to the underlying Asset

Methods from Deref<Target = Asset>§

Source

pub fn state(&self) -> &AssetState

Get the state of this asset

Source

pub fn process_parameter(&self) -> &ProcessParameter

The process parameter for this asset

Source

pub fn max_decommission_year(&self) -> u32

The last year in which this asset should be decommissioned

Source

pub fn get_activity_per_capacity_limits( &self, time_slice: &TimeSliceID, ) -> RangeInclusive<ActivityPerCapacity>

Get the activity limits per unit of capacity for this asset in a particular time slice

Source

pub fn get_activity_limits_for_selection( &self, time_slice_selection: &TimeSliceSelection, ) -> RangeInclusive<Activity>

Get the activity limits for this asset for a given time slice selection

Source

pub fn iter_activity_limits( &self, ) -> impl Iterator<Item = (TimeSliceSelection, RangeInclusive<Activity>)> + '_

Iterate over activity limits for this asset

Source

pub fn iter_activity_per_capacity_limits( &self, ) -> impl Iterator<Item = (TimeSliceSelection, RangeInclusive<ActivityPerCapacity>)> + '_

Iterate over activity per capacity limits for this asset

Source

pub fn get_total_output_per_activity(&self) -> FlowPerActivity

Gets the total SED/SVD output per unit of activity for this asset

Note: Since we are summing coefficients from different commodities, this ONLY makes sense if these commodities have the same units (e.g., all in PJ). Users are currently not made to give units for commodities, so we cannot possibly enforce this. Something to potentially address in future.

Source

pub fn get_operating_cost( &self, year: u32, time_slice: &TimeSliceID, ) -> MoneyPerActivity

Get the operating cost for this asset in a given year and time slice

Source

pub fn get_revenue_from_flows( &self, prices: &CommodityPrices, time_slice: &TimeSliceID, ) -> MoneyPerActivity

Get the total revenue from all flows for this asset.

If a price is missing, it is assumed to be zero.

Source

pub fn get_revenue_from_flows_excluding_primary( &self, prices: &CommodityPrices, time_slice: &TimeSliceID, ) -> MoneyPerActivity

Get the total revenue from all flows excluding the primary output.

If a price is missing, it is assumed to be zero.

Source

pub fn get_input_cost_from_prices( &self, prices: &CommodityPrices, time_slice: &TimeSliceID, ) -> MoneyPerActivity

Get the total cost of purchasing input commodities per unit of activity for this asset.

If a price is missing, there is assumed to be no cost.

Source

fn get_revenue_from_flows_with_filter<F>( &self, prices: &CommodityPrices, time_slice: &TimeSliceID, filter_for_flows: F, ) -> MoneyPerActivity
where F: FnMut(&ProcessFlow) -> bool,

Get the total revenue from a subset of flows.

Takes a function as an argument to filter the flows. If a price is missing, it is assumed to be zero.

Source

fn get_generic_activity_cost( &self, prices: &CommodityPrices, year: u32, time_slice: &TimeSliceID, ) -> MoneyPerActivity

Get the generic activity cost per unit of activity for this asset.

These are all activity-related costs that are not associated with specific SED/SVD outputs. Includes levies, flow costs, costs of inputs and variable operating costs

Source

pub fn iter_marginal_costs_with_filter<'a>( &'a self, prices: &'a CommodityPrices, year: u32, time_slice: &'a TimeSliceID, filter: impl Fn(&CommodityID) -> bool + 'a, ) -> Box<dyn Iterator<Item = (CommodityID, MoneyPerFlow)> + 'a>

Iterate over marginal costs for a filtered set of SED/SVD output commodities for this asset

For each SED/SVD output commodity, the marginal cost is calculated as the sum of:

  • Generic activity costs (variable operating costs, cost of purchasing inputs, plus all levies and flow costs not associated with specific SED/SVD outputs), which are shared equally over all SED/SVD outputs
  • Production levies and flow costs for the specific SED/SVD output commodity
Source

pub fn iter_marginal_costs<'a>( &'a self, prices: &'a CommodityPrices, year: u32, time_slice: &'a TimeSliceID, ) -> Box<dyn Iterator<Item = (CommodityID, MoneyPerFlow)> + 'a>

Iterate over marginal costs for all SED/SVD output commodities for this asset

See iter_marginal_costs_with_filter for details.

Source

pub fn get_annual_capital_cost_per_capacity(&self) -> MoneyPerCapacity

Get the annual capital cost per unit of capacity for this asset

Source

pub fn get_annual_capital_cost_per_activity( &self, annual_activity: Activity, ) -> MoneyPerActivity

Get the annual capital cost per unit of activity for this asset

Total capital costs (cost per capacity * capacity) are shared equally over the year in accordance with the annual activity.

Source

pub fn get_annual_capital_cost_per_flow( &self, annual_activity: Activity, ) -> MoneyPerFlow

Get the annual capital cost per unit of output flow for this asset

Total capital costs (cost per capacity * capacity) are shared equally across all output flows in accordance with the annual activity and total output per unit of activity.

Source

pub fn max_activity(&self) -> Activity

Maximum activity for this asset

Source

pub fn get_flow(&self, commodity_id: &CommodityID) -> Option<&ProcessFlow>

Get a specific process flow

Source

pub fn iter_flows(&self) -> impl Iterator<Item = &ProcessFlow>

Iterate over the asset’s flows

Source

pub fn iter_output_flows(&self) -> impl Iterator<Item = &ProcessFlow>

Iterate over the asset’s output SED/SVD flows

Source

pub fn primary_output(&self) -> Option<&ProcessFlow>

Get the primary output flow (if any) for this asset

Source

pub fn is_commissioned(&self) -> bool

Whether this asset has been commissioned

Source

pub fn commission_year(&self) -> u32

Get the commission year for this asset

Source

pub fn decommission_year(&self) -> Option<u32>

Get the decommission year for this asset

Source

pub fn region_id(&self) -> &RegionID

Get the region ID for this asset

Source

pub fn process(&self) -> &Process

Get the process for this asset

Source

pub fn process_id(&self) -> &ProcessID

Get the process ID for this asset

Source

pub fn id(&self) -> Option<AssetID>

Get the ID for this asset

Source

pub fn group_id(&self) -> Option<AssetGroupID>

Get the group ID for this asset

Source

pub fn agent_id(&self) -> Option<&AgentID>

Get the agent ID for this asset

Source

pub fn capacity(&self) -> AssetCapacity

Get the capacity for this asset

Source

pub fn get_mothballed_year(&self) -> Option<u32>

Get the mothballed year for the asset

Source

pub fn unit_size(&self) -> Option<Capacity>

Get the unit size for this asset’s capacity (if any)

Source

pub fn is_divisible(&self) -> bool

Checks if the asset corresponds to a process that has a unit_size and is therefore divisible.

Source

pub fn divide_asset(&self) -> Vec<AssetRef>

Divides an asset if it is divisible and returns a vector of children

Assets with capacity of type AssetCapacity::Discrete are divided into multiple assets each made up of a single unit of the original asset’s unit size. Will panic if the asset does not have a discrete capacity.

Only Future and Selected assets can be divided.

TODO: To be deleted

Trait Implementations§

Source§

impl Clone for AssetRef

Source§

fn clone(&self) -> AssetRef

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AssetRef

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for AssetRef

Source§

type Target = Asset

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl From<Asset> for AssetRef

Source§

fn from(value: Asset) -> Self

Converts to this type from the input type.
Source§

impl From<AssetRef> for Rc<Asset>

Source§

fn from(value: AssetRef) -> Self

Converts to this type from the input type.
Source§

impl From<Rc<Asset>> for AssetRef

Source§

fn from(value: Rc<Asset>) -> Self

Converts to this type from the input type.
Source§

impl Hash for AssetRef

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Hash an asset according to its state:

  • Commissioned assets are hashed based on their ID alone
  • Selected assets are hashed based on process_id, region_id, commission_year and agent_id
  • Candidate assets are hashed based on process_id, region_id and commission_year
  • Future and Decommissioned assets cannot currently be hashed
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for AssetRef

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for AssetRef

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for AssetRef

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Eq for AssetRef

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.