Nodes
Index
EnergyModelsFlex.ActivationCostNodeEnergyModelsFlex.BinaryMultipleInputSinkStratEnergyModelsFlex.CapacityCostLinkEnergyModelsFlex.CombustionEnergyModelsFlex.ContinuousMultipleInputSinkStratEnergyModelsFlex.ElectricBatteryEnergyModelsFlex.FlexibleOutputEnergyModelsFlex.InflexibleSourceEnergyModelsFlex.LimitedFlexibleInputEnergyModelsFlex.LoadShiftingNodeEnergyModelsFlex.MinUpDownTimeNodeEnergyModelsFlex.MultipleInputSinkEnergyModelsFlex.PayAsProducedPPAEnergyModelsFlex.PeriodDemandSinkEnergyModelsFlex.StorageEfficiencyEnergyModelsFlex.StratPeriodDemandSink
Sink Node types
The following sink node types are implemented in the EnergyModelsFlex:
EnergyModelsFlex.PeriodDemandSink — Type
struct PeriodDemandSink <: AbstractPeriodDemandSinkA PeriodDemandSink is a Sink that has a demand that can be satisfied any time during a period of defined length. If the chosen time structure has operational periods of a duration of 1 hour and the demand should be fulfilled daily, period_duration should be 24. The demand for each day is then set as a time profile in the period_demand field. The cap field is the maximum capacity that can be fulfilled in each operational period.
Fields
id::Anyis the name/identifier of the node.cap::TimeProfileis the installed capacity.period_duration::TimeProfileis the sum of the durations of the individual operational periods within a given demand period. Due to a constructor, it can either be specified as number (the same duration in all demand periods), as a vector (varying duration of each demand period), or as a time profile (e.g., varying period durations due to varying operational time structures). It cannot be specified asOperationalProfile.period_demand::TimeProfileis the demand within each of the periods as time profile. It cannot be specified asOperationalProfile.penalty::Dict{Symbol,<:TimeProfile}are penalties for surplus or deficits. The dictionary requires the fields:surplusand:deficit.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
The field period_length was replaced with the field period_duration with a change in meaning. In addition, the position was changed. This is explained in the documentation.
EnergyModelsFlex.StratPeriodDemandSink — Type
struct StratPeriodDemandSink <: AbstractPeriodDemandSinkA StratPeriodDemandSink is a Sink that has a total demand that can be specified for each strategic period through the field strat_demand. In addition, you can specify multiple demand periods, each with a minimum and maximum fraction of the total demand that can be satisfied within the demand period.
Fields
id::Anyis the name/identifier of the node.cap::TimeProfileis the installed capacity.strat_demand::TimeProfileis the demand within each strategic period that must be satisfied. It must be specified as either aFixedProfileorStrategicProfileas it is indexed over strategic periods.period_duration::TimeProfileis the sum of the durations of the individual operational periods within a given demand period. Due to a constructor, it can either be specified as number (the same duration in all demand periods), as a vector (varying duration of each demand period), or as a time profile (e.g., varying period durations due to varying operational time structures). It cannot be specified asOperationalProfile.period_min::TimeProfileis the relative fraction of the strategic demand that must be at least satisfied in each demand period.period_max::TimeProfileis the relative fraction of the strategic demand that can at most be satisfied in each demand period.penalty::Dict{Symbol,<:TimeProfile}are penalties for surplus or deficits. The dictionary requires the fields:surplusand:deficit. The same penalty is utilized for the strategic surplus/deficit and period surplus/deficit.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.MultipleInputSink — Type
struct MultipleInputSink <: AbstractMultipleInputSinkA Sink node with multiple inputs for satisfying the demand.
Contrary to a standard sink, it is possible to utilize the individual input resources independently of each other.
Fields
id::Anyis the name/identifier of the node.cap::TimeProfileis the demand.penalty::Dict{Symbol,<:TimeProfile}are penalties for surplus or deficits. The dictionary requires the fields:surplusand:deficit.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.BinaryMultipleInputSinkStrat — Type
struct BinaryMultipleInputSinkStrat <: AbstractMultipleInputSinkStratA Sink node with multiple inputs for satisfying the demand.
This type of node corresponds to an energy service demand where several different energy carriers can satisfy the demand, but only one resource at a time (for each strategic period).
Fields
id::Anyis the name/identifier of the node.cap::TimeProfileis the demand.penalty::Dict{Symbol,<:TimeProfile}are penalties for surplus or deficits. The dictionary requires the fields:surplusand:deficit.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.ContinuousMultipleInputSinkStrat — Type
struct ContinuousMultipleInputSinkStrat <: AbstractMultipleInputSinkStratA Sink node with multiple inputs for satisfying the demand.
This type of node corresponds to an energy service demand where several different energy carriers can satisfy the demand after the supplied energy. The fraction of the input resources are given as a variable to be optimized (for each strategic period).
Fields
id::Anyis the name/identifier of the node.cap::TimeProfileis the demand.penalty::Dict{Symbol,<:TimeProfile}are penalties for surplus or deficits. The dictionary requires the fields:surplusand:deficit.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.LoadShiftingNode — Type
struct LoadShiftingNode <: EMB.SinkA Sink node where the demand can be altered by load shifting. The load shifting is based on the assumption that the production happens in discrete batches. A representative batch is defined with a magnitude and a duration. A load shift will in this case mean subtracting the consumption of a representative batch from the original consumption at one time slot and adding it on another timeslot. The node is furthermore built for a case where the working shifts dictate when the batches may be initiated. Thus the timesteps where such a batch is allowed to be added/subtracted are defined by the load_shift_times field. The load_shift_times is further grouped together in groups of load_shift_times_per_period, for which the representative batches can only be shifted within this group.
The node uses indexing of the time steps and is as of now not made to handle timesteps of different durations.
Fields
id::Anyis the name/identifier of the node.cap::TimeProfileis the original Demand (before load shifting).penalty::Dict{Symbol, <:TimeProfile}(not used) are penalties for surplus or deficits. Requires the fields:surplusand:deficit.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.load_shift_times::Vector{<:Int}are the indices of the time structure that bulks of loads may be shifted from/to.load_shifts_per_period::Intthe upper limit of the number of load shifts that can be performed within each group ofload_shift_times_per_periodload shift times.load_shift_duration::Intthe number of operational periods in each load shift.load_shift_magnitude::Realthe magnitude for each operational period that is load shifted.load_shift_times_per_period::Intthe number of timeslots (fromload_shift_times) that can be shifted.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
Source Node types
The following source node type are implemented in the EnergyModelsFlex:
EnergyModelsFlex.PayAsProducedPPA — Type
struct PayAsProducedPPA <: AbstractNonDisRESA pay-as-produced PPA energy source. It extends the existing AbstractNonDisRES node through including a constraint on the opex_var such that curtailed energy is also included in the opex.
Fields
idis the name/identifier of the node.cap::TimeProfileis the installed capacity.profile::TimeProfileis the power production in each operational period as a ratio of the installed capacity at that time.opex_var::TimeProfileis the variable operating expense per energy unit produced.opex_fixed::TimeProfileis the fixed operating expense.output::Dict{<:Resource,<:Real}are the generatedResources, normally Power.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.InflexibleSource — Type
struct InflexibleSource <: EMB.SourceAn inflexible Source node with fixed capacity. The inflexible Source node represents a source with a fixed capacity usage. Note that if you include investments, you can only use a FixedProfile or StrategicProfile as TimeProfile for cap.
Fields
idis the name/identifier of the node.cap::TimeProfileis the installed capacity.opex_var::TimeProfileis the variable operating expense per capacity usage through the variable:cap_use.opex_fixed::TimeProfileis the fixed operating expense per installed capacity through the variable:cap_inst.output::Dict{<:Resource,<:Real}are the generatedResources with conversion valueReal.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
Network Node types
The following network node types are implemented in the EnergyModelsFlex:
EnergyModelsFlex.MinUpDownTimeNode — Type
struct MinUpDownTimeNode <: UnitCommitmentNodeMinUpDownTimeNode is a specialized NetworkNode type that introduces unit commitment logic including minimum up and down time constraints. It is useful for modeling dispatchable power plants or technologies where operation must adhere to minimum runtime constraints.
Fields
id: Identifier or name for the node.cap::TimeProfileis the installed capacity.opex_var::TimeProfileis the variable operating expense per capacity usage through the variable:cap_use.opex_fixed::TimeProfileis the fixed operating expense per installed capacity through the variable:cap_inst.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.output::Dict{<:Resource,<:Real}are the generatedResources with conversion valueReal.min_time_up::Realis the minimum duration the unit must remain on after being started, given in the time unit of the operational periods.min_time_down::Realis the minimum duration the unit must remain off after being stopped, given in the time unit of the operational periods.load_min::Realis the minimum capacity output when the unit is on.load_max::Realis the maximum capacity output when the unit is on (usually aligned withcap).data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.ActivationCostNode — Type
struct ActivationCostNode <: UnitCommitmentNodeActivationCostNode is a specialized NetworkNode that introduces unit commitment logic with additional fuel or resource costs incurred upon startup. It models technologies that consume extra input when switching on, such as combustion turbines or thermal boilers.
Fields
idis the name/identifier of the node.cap::TimeProfileis the installed capacity.opex_var::TimeProfileis the variable operating expense per capacity usage through the variable:cap_use.opex_fixed::TimeProfileis the fixed operating expense per installed capacity through the variable:cap_inst.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.output::Dict{<:Resource,<:Real}are the generatedResources with conversion valueReal.activation_time::Realis the duration of the activation effect. The field is currently not utilized in the constraints.activation_consumption::Dict{<:Resource,<:Real}are the additional input resources required when the unit switches on with their absolute demand.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.LimitedFlexibleInput — Type
struct LimitedFlexibleInput <: NetworkNodeA LimitedFlexibleInput node. The LimitedFlexibleInput utilizes a linear, time independent conversion rate of the input Resources to the output Resources, subject to the available capacity and limitation of the Resources given by the limit field.
As opposed to the RefNetworkNode in EnergyModelsBase, the LimitedFlexibleInput node introduces a limit on the fraction a given resource can contribute to the total inflow.
Fields
idis the name/identifier of the node.cap::TimeProfileis the installed capacity.opex_var::TimeProfileis the variable operating expense per capacity usage through the variable:cap_use.opex_fixed::TimeProfileis the fixed operating expense per installed capacity through the variable:cap_inst.limit::Dict{<:Resource, <:Real}are the limits for eachResourcerelative to the total input.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.output::Dict{<:Resource,<:Real}are the generatedResources with conversion valueReal.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.Combustion — Type
struct Combustion <: NetworkNodeA Combustion node. The Combustion is similar to LimitedFlexibleInputs but requires energy balances in the sense that the output heat_res captures the lost energy.
Fields
idis the name/identifier of the node.cap::TimeProfileis the installed capacity.opex_var::TimeProfileis the variable operating expense per capacity usage through the variable:cap_use.opex_fixed::TimeProfileis the fixed operating expense per installed capacity through the variable:cap_inst.limit::Dict{<:Resource, <:Real}are the limits for eachResourcerelative to the total input.heat_res::Resourcethe residual heat resource.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.output::Dict{<:Resource,<:Real}are the generatedResources with conversion valueReal.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.FlexibleOutput — Type
struct FlexibleOutput <: NetworkNodeA FlexibleOutput node.
The FlexibleOutput is similar to NetworkNodes but introduces flexibility in the output as the capacity use is given by the sum of these.
Fields
idis the name/identifier of the node.cap::TimeProfileis the installed capacity.opex_var::TimeProfileis the variable operating expense per capacity usage through the variable:cap_use.opex_fixed::TimeProfileis the fixed operating expense per installed capacity through the variable:cap_inst.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.output::Dict{<:Resource,<:Real}are the generatedResources with conversion valueReal.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
Storage Node types
The following storage node types are implemented in the EnergyModelsFlex:
EnergyModelsFlex.ElectricBattery — Type
ElectricBattery{T} <: EMB.Storage{T}Electric battery node. The node is deprecated and will be removed in v0.5.0.
- c_rate:
- coloumbic_eff:
EnergyModelsFlex.StorageEfficiency — Type
struct StorageEfficiency{T} <: EMB.Storage{T}A StorageEfficiency node which enables storage efficiency control compared to RefStorage{T}.
It is designed as a parametric type through the type parameter T to differentiate between different cyclic behaviours. Note that the parameter T is only used for dispatching, but does not carry any other information. Hence, it is simple to quickly switch between different StorageBehaviors.
The currently implemented cyclic behaviours are CyclicRepresentative and CyclicStrategic.
Fields
idis the name/identifier of the node.charge::UnionCapacityare the charging parameters of theStoragenode. Depending on the chosen type, the charge parameters can include variable OPEX and/or fixed OPEX. They must include a capacity.level::UnionCapacityare the level parameters of theStoragenode. Depending on the chosen type, the level parameters can include variable OPEX and/or fixed OPEX. They must include a capacity.stor_res::Resourceis the storedResource.input::Dict{<:Resource,<:Real}are the inputResources with conversion valueReal.output::Dict{<:Resource,<:Real}is the generatedResourcewith conversion valueReal. It can only include the storedResourcestor_res.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
Link types
The following link types are implemented in the EnergyModelsFlex:
EnergyModelsFlex.CapacityCostLink — Type
struct CapacityCostLink <: LinkA link between two nodes with costs on the maximum link usage for the resource cap_resource within specified price periods. The link only transports the resource cap_resource.
Fields
idis the name/identifier of the link.from::Nodeis the node from which there is flow into the link.to::Nodeis the node to which there is flow out of the link.cap::TimeProfileis the capacity of the link for thecap_resource.cap_price::TimeProfileis the price of capacity usage for thecap_resource.cap_period_duration::TimeProfileis a time profile describing the durations of the individual capacity price periods. Due to a constructor, it can either be specified as number (the same duration in all price periods), as a vector (varying duration of each price period), or as a time profile (e.g., varying period durations due to varying operational time structures). It cannot be specified asOperationalProfile.cap_resource::Resourceis the resource transported by theCapacityCostLink.formulation::Formulationis the used formulation of links. The fieldformulationis conditional through usage of a constructor.data::Vector{<:ExtensionData}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
The field cap_price_periods was replaced with the field cap_period_duration with a change in meaning. This is explained in the documentation.