Nodes
Index
EnergyModelsFlex.ActivationCostNodeEnergyModelsFlex.BinaryMultipleInputSinkStratEnergyModelsFlex.CapacityCostLinkEnergyModelsFlex.CombustionEnergyModelsFlex.ContinuousMultipleInputSinkStratEnergyModelsFlex.ElectricBatteryEnergyModelsFlex.FlexibleOutputEnergyModelsFlex.InflexibleSourceEnergyModelsFlex.LimitedFlexibleInputEnergyModelsFlex.LoadShiftingNodeEnergyModelsFlex.MinUpDownTimeNodeEnergyModelsFlex.MultipleInputSinkEnergyModelsFlex.PayAsProducedPPAEnergyModelsFlex.PeriodDemandSinkEnergyModelsFlex.StorageEfficiency
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_length should be 24. The demand for each day is then set as an array as 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.period_length::Intis the number of periods in which the period demand can be satisfied.period_demand::Array{<:Real}is the demand within each of the periods.cap::TimeProfileis the installed capacity.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{Data}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 independent 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{<:Data}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 the 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{<:Data}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{<:Data}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.LoadShiftingNode — Type
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 build for a case where the working shifts dictates when the batches may be initiated. Thus the timesteps where such a batch is allowed to be added/subtracted is 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 within the period defined byload_shift_times_per_periodthat can be performed for a given period (defined by the number of timeslots that can be shifted -n_loadshift).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 (from the loadshifttimes) that can be shifted.data::Vector{Data}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
Source Node types
The following source node type is implemented in the EnergyModelsFlex:
EnergyModelsFlex.PayAsProducedPPA — Type
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/identifyer 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{Data}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 cap as TimeProfile a FixedProfile or StrategicProfile.
Fields
idis the name/identifier of the node.cap::TimeProfileis the installed capacity.opex_var::TimeProfileis the variable operating expense per 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
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 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.minUpTime::Realis the minimum number of operational periods the unit must remain on after being started.minDownTime::Realis the minimum number of operational periods the unit must remain off after being stopped.minCapacity::Realis the minimum power output when the unit is on.maxCapacity::Realis the maximum power output when the unit is on (usually aligned withcap).data::Vector{Data}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.ActivationCostNode — Type
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 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::Real: Duration of activation effect (currently used to inform activation logic in customized formulations).activation_consumption::Dict{<:Resource,<:Real}are the additional input resources required when the unit switches on with their absolute demand.data::Vector{Data}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.LimitedFlexibleInput — Type
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 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 eachResources of 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{Data}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.Combustion — Type
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 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 eachResources of 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{Data}is the additional data (e.g., for investments). The fielddatais conditional through usage of a constructor.
EnergyModelsFlex.FlexibleOutput — Type
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 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{Data}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 <: EMB.StorageElectric battery node
- c_rate:
- coloumbic_eff:
EnergyModelsFlex.StorageEfficiency — Type
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 fast switch between different StorageBehaviors.
The current 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}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.
Link types
The following link types are implemented in the EnergyModelsFlex:
EnergyModelsFlex.CapacityCostLink — Type
CapacityCostLinkA link between two nodes with costs on the link usage for the resource cap_resource. All other resources have no costs associated with their usage (follows the Direct).
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_price_periods::Int64is the number of sub periods of a year.cap_resource::Resourceis the resource used byCapacityCostLinkformulation::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.