Nodes
Index
EnergyModelsFlex.ActivationCostNode
EnergyModelsFlex.BinaryMultipleInputSinkStrat
EnergyModelsFlex.Combustion
EnergyModelsFlex.ContinuousMultipleInputSinkStrat
EnergyModelsFlex.ElectricBattery
EnergyModelsFlex.LimitedFlexibleInput
EnergyModelsFlex.LoadShiftingNode
EnergyModelsFlex.MinUpDownTimeNode
EnergyModelsFlex.MultipleInputSink
EnergyModelsFlex.PayAsProducedPPA
EnergyModelsFlex.PeriodDemandSink
EnergyModelsFlex.StorageEfficiency
Sink Node
types
The following sink node types are implemented in the EnergyModelsFlex
.
EnergyModelsFlex.PeriodDemandSink
— Typestruct PeriodDemandSink <: AbstractPeriodDemandSink
A 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::Any
is the name/identifier of the node.period_length::Int
is 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::TimeProfile
is the installed capacity.penalty::Dict{Symbol,<:TimeProfile}
are penalties for surplus or deficits. The dictionary requires the fields:surplus
and:deficit
.input::Dict{<:Resource,<:Real}
are the inputResource
s with conversion valueReal
.data::Vector{Data}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.
EnergyModelsFlex.MultipleInputSink
— Typestruct MultipleInputSink <: AbstractMultipleInputSink
A 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::Any
is the name/identifier of the node.cap::TimeProfile
is the demand.penalty::Dict{Symbol,<:TimeProfile}
are penalties for surplus or deficits. The dictionary requires the fields:surplus
and:deficit
.input::Dict{<:Resource,<:Real}
are the inputResource
s with conversion valueReal
.data::Vector{<:Data}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.
EnergyModelsFlex.BinaryMultipleInputSinkStrat
— Typestruct BinaryMultipleInputSinkStrat <: AbstractMultipleInputSinkStrat
A 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::Any
is the name/identifier of the node.cap::TimeProfile
is the demand.penalty::Dict{Symbol,<:TimeProfile}
are penalties for surplus or deficits. The dictionary requires the fields:surplus
and:deficit
.input::Dict{<:Resource,<:Real}
are the inputResource
s with conversion valueReal
.data::Vector{<:Data}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.
EnergyModelsFlex.ContinuousMultipleInputSinkStrat
— Typestruct ContinuousMultipleInputSinkStrat <: AbstractMultipleInputSinkStrat
A 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::Any
is the name/identifier of the node.cap::TimeProfile
is the demand.penalty::Dict{Symbol,<:TimeProfile}
are penalties for surplus or deficits. The dictionary requires the fields:surplus
and:deficit
.input::Dict{<:Resource,<:Real}
are the inputResource
s with conversion valueReal
.data::Vector{<:Data}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.
EnergyModelsFlex.LoadShiftingNode
— TypeLoadShiftingNode <: EMB.Sink
A 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::Any
is the name/identifier of the node.cap::TimeProfile
is the original Demand (before load shifting).penalty::Dict{Symbol, <:TimeProfile}
(not used) are penalties for surplus or deficits. Requires the fields:surplus
and:deficit
.input::Dict{<:Resource,<:Real}
are the inputResource
s 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::Int
the upper limit of the number of load shifts within the period defined byload_shift_times_per_period
that can be performed for a given period (defined by the number of timeslots that can be shifted -n_loadshift
).load_shift_duration::Int
the number of operational periods in each load shift.load_shift_magnitude::Real
the magnitude for each operational period that is load shifted.load_shift_times_per_period::Int
the number of timeslots (from the loadshifttimes) that can be shifted.data::Vector{Data}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.
Source Node
types
The following source node type is implemented in the EnergyModelsFlex
.
EnergyModelsFlex.PayAsProducedPPA
— TypePayAsProducedPPA <: AbstractNonDisRES
A 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
id
is the name/identifyer of the node.cap::TimeProfile
is the installed capacity.profile::TimeProfile
is the power production in each operational period as a ratio of the installed capacity at that time.opex_var::TimeProfile
is the variable operating expense per energy unit produced.opex_fixed::TimeProfile
is the fixed operating expense.output::Dict{Resource, Real}
are the generatedResource
s, normally Power.data::Vector{Data}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.
Network Node
types
The following network node types are implemented in the EnergyModelsFlex
.
EnergyModelsFlex.MinUpDownTimeNode
— TypeMinUpDownTimeNode{} <: UnitCommitmentNode
MinUpDownTimeNode
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::TimeProfile
is the installed capacity.opex_var::TimeProfile
is the variable operating expense per per capacity usage through the variable:cap_use
.opex_fixed::TimeProfile
is the fixed operating expense per installed capacity through the variable:cap_inst
.input::Dict{<:Resource,<:Real}
are the inputResource
s with conversion valueReal
.output::Dict{<:Resource,<:Real}
are the generatedResource
s with conversion valueReal
.minUpTime::Real
is the minimum number of operational periods the unit must remain on after being started.minDownTime::Real
is the minimum number of operational periods the unit must remain off after being stopped.minCapacity::Real
is the minimum power output when the unit is on.maxCapacity::Real
is the maximum power output when the unit is on (usually aligned withcap
).data::Vector{Data}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.
EnergyModelsFlex.ActivationCostNode
— TypeActivationCostNode{} <: UnitCommitmentNode
ActivationCostNode
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
id
is the name/identifier of the node.cap::TimeProfile
is the installed capacity.opex_var::TimeProfile
is the variable operating expense per per capacity usage through the variable:cap_use
.opex_fixed::TimeProfile
is the fixed operating expense per installed capacity through the variable:cap_inst
.input::Dict{<:Resource,<:Real}
are the inputResource
s with conversion valueReal
.output::Dict{<:Resource,<:Real}
are the generatedResource
s 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 fielddata
is conditional through usage of a constructor.
EnergyModelsFlex.LimitedFlexibleInput
— TypeLimitedFlexibleInput <: NetworkNode
A LimitedFlexibleInput
node. The LimitedFlexibleInput
utilizes a linear, time independent conversion rate of the input
Resource
s to the output Resource
s, subject to the available capacity and limitation of the Resource
s 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
id
is the name/identifier of the node.cap::TimeProfile
is the installed capacity.opex_var::TimeProfile
is the variable operating expense per per capacity usage through the variable:cap_use
.opex_fixed::TimeProfile
is the fixed operating expense per installed capacity through the variable:cap_inst
.limit::Dict{<:Resource, <:Real}
are the limits for eachResource
s of the total input.input::Dict{<:Resource,<:Real}
are the inputResource
s with conversion valueReal
.output::Dict{<:Resource,<:Real}
are the generatedResource
s with conversion valueReal
.data::Vector{Data}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.
EnergyModelsFlex.Combustion
— TypeCombustion <: NetworkNode
A Combustion
node. The Combustion
is similar to LimitedFlexibleInput
s but requires energy balances in the sense that the output heat_res
captures the lost energy.
Fields
id
is the name/identifier of the node.cap::TimeProfile
is the installed capacity.opex_var::TimeProfile
is the variable operating expense per per capacity usage through the variable:cap_use
.opex_fixed::TimeProfile
is the fixed operating expense per installed capacity through the variable:cap_inst
.limit::Dict{<:Resource, <:Real}
are the limits for eachResource
s of the total input.heat_res::Resource
the residual heat resource.input::Dict{<:Resource,<:Real}
are the inputResource
s with conversion valueReal
.output::Dict{<:Resource,<:Real}
are the generatedResource
s with conversion valueReal
.data::Vector{Data}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.
Storage Node
types
The following storage node types are implemented in the EnergyModelsFlex
.
EnergyModelsFlex.ElectricBattery
— TypeElectricBattery <: EMB.Storage
Electric battery node
- c_rate:
- coloumbic_eff:
EnergyModelsFlex.StorageEfficiency
— TypeStorageEfficiency{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 StorageBehavior
s.
The current implemented cyclic behaviours are CyclicRepresentative
and CyclicStrategic
.
Fields
id
is the name/identifier of the node.charge::UnionCapacity
are the charging parameters of theStorage
node. Depending on the chosen type, the charge parameters can include variable OPEX and/or fixed OPEX. They must include a capacity.level::UnionCapacity
are the level parameters of theStorage
node. Depending on the chosen type, the level parameters can include variable OPEX and/or fixed OPEX. They must include a capacity.stor_res::Resource
is the storedResource
.input::Dict{<:Resource,<:Real}
are the inputResource
s with conversion valueReal
.output::Dict{<:Resource,<:Real}
are the generatedResource
s with conversion valueReal
.data::Vector{<:ExtensionData}
is the additional data (e.g., for investments). The fielddata
is conditional through usage of a constructor.