This type models both wind power, solar power, and run of river hydropower. These have in common that they generate power from an intermittent energy source, so they can have large variations in power output, based on the availability of the renewable source at the time. These power sources can be modelled using the same type NonDisRES
. The new type is a subtype of EMB.Source
. The new type only differs from its supertype through the field profile
.
The field profile::TimeProfile
is a dimensionless ratio (between 0 and 1) describing how much of the installed capacity is utilized at the current operational period. Therefore, when using NonDisRES
to model some renewable source, the data provided to this field is what defines the intermittent characteristics of the source.
The NonDisRES
node is modelled very similar to a regular EMB.Source}
node. The only difference is how the intermittent nature of the non-dispatchable source is handled. The maximum power generation of the source in the operational period $t$ depends on the time-dependent Profile
variable.
If not needed, the production does not need to run at full capacity. The amount of energy not produced is computed using the non-negative optimization variable $\texttt{curtailment}$ (declared for NonDisRES
nodes only).
The fields of the different types are listed below:
A non-dispatchable renewable energy source.
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 variational operational costs per energy unit produced.
opex_fixed::TimeProfile
is the fixed operational costs.
output::Dict{Resource, Real}
are the generated Resource
s, normally Power.
data::Vector{Data}
is the additional data (e.g. for investments). The field data
is conditional through usage of a constructor.
sourceA hydropower plant is much more flexible than, e.g., a wind farm since the water can be stored for later use. Energy can be produced (almost) whenever it is needed. Some hydropower plants also have pumps installed. These are used to pump water into the reservoir when excess and cheap energy is available in the network.
The field rate_cap
describes the installed production capacity of the (aggregated) hydropower plant. The variable level_init
represents the initial energy available in the reservoir in the beginning of each investment period, while stor_cap
is the installed storage capacity in the reservoir. The variable level_inflow
describes the inflow into the reservoir (measured in energy units), while level_min
is the allowed minimum storage level in the dam, given as a ratio of the installed storage capacity of the reservoir at every operational period. The required minimum level is enforced by NVE and varies over the year. The resources stored in the hydro storage is set as stor_res
, similar to a regular EMB.RefStorage
.
The five last parameters are used in the same way as in EMB.Storage
. In the implementation of PumpedHydroStor
, the values set in input
represents a loss of energy when using the pumps. A value of 1
means no energy loss, while a value of 0
represents 100% energy loss of that inflow variable. PumpedHydroStor
has in addition the field opex_var_pump::TimeProfile
. This field corresponds to the variable operational expenditures when pumping water into the storage reservoir.
Since we also want to be able to model hydropower plant nodes without pumps, we include the boolean has_pump
in the type describing hydropower. For combining the behavior of a hydropower plant with and without a pump, we can disable the inflow of energy by setting the constraint
$\texttt{flow\_in}[n, t, p_{\texttt{Power}}] = 0,$
for the stored resource $p_{\texttt{Power}}$ for the node $n$ ::HydroStor
. To access this variable, we therefore have to let the type HydroStorage
be a subtype of EMB.Storage
.
The fields of the different types are listed below:
An abstract type for hydro storage nodes, with or without pumping.
sourceA regulated hydropower storage, modelled as a Storage
node.
Fields
id
is the name/identifyer of the node.
rate_cap::TimeProfile
: installed capacity.
stor_cap::TimeProfile
Initial installed storage capacity in the dam.
level_init::TimeProfile
Initial energy stored in the dam, in units of power.
level_inflow::TimeProfile
Inflow of power per operational period.
level_min::TimeProfile
Minimum fraction of the reservoir capacity that can be left.
opex_var::TimeProfile
Operational cost per GWh produced.
opex_fixed::TimeProfile
Fixed operational costs.
stor_res::ResourceCarrier
is the stored Resource
.
input::Dict{Resource, Real}
the stored and used resources. The values in the Dict is a ratio describing the energy loss when using the pumps.
output::Dict{Resource, Real}
can only contain one entry, the stored resource.
data::Vector{Data}
additional data (e.g. for investments). The field data
is conditional through usage of a constructor.
sourceA regulated hydropower storage with pumping capabilities, modelled as a Storage
node.
Fields
id
is the name/identifyer of the node.
rate_cap::TimeProfile
: installed capacity.
stor_cap::TimeProfile
Initial installed storage capacity in the dam.
level_init::TimeProfile
Initial energy stored in the dam, in units of power.
level_inflow::TimeProfile
Inflow of power per operational period.
level_min::TimeProfile
Minimum fraction of the reservoir capacity that can be left.
opex_var::TimeProfile
Operational cost per GWh produced.
opex_var_pump::TimeProfile
Operational cost per GWh pumped into the reservoir.
opex_fixed::TimeProfile
Fixed operational costs.
stor_res::ResourceCarrier
is the stored Resource
.
input::Dict{Resource, Real}
the stored and used resources. The values in the Dict is a ratio describing the energy loss when using the pumps.
output::Dict{Resource, Real}
can only contain one entry, the stored resource.
data::Vector{Data}
additional data (e.g. for investments). The field data
is conditional through usage of a constructor.
sourceLegacy constructor for a regulated hydropower storage, with or without pumping capabilities. This version will be discontinued in the near future and is already replaced with the two new types HydroStor
and PumpedHydroStor
.
If you are creating a new model, it is advised to directly use the types HydroStor
and PumpedHydroStor
.
Fields
id
is the name/identifyer of the node.
rate_cap::TimeProfile
: installed capacity.
stor_cap::TimeProfile
Initial installed storage capacity in the dam.
has_pump::Bool
states wheter the stored resource can flow in.
level_init::TimeProfile
Initial energy stored in the dam, in units of power.
level_inflow::TimeProfile
Inflow of power per operational period.
level_min::TimeProfile
Minimum fraction of the reservoir capacity that can be left.
opex_var::TimeProfile
Operational cost per GWh produced.
opex_fixed::TimeProfile
Fixed operational costs.
stor_res::ResourceCarrier
is the stored Resource
.
input::Dict{Resource, Real}
the stored and used resources. The values in the Dict is a ratio describing the energy loss when using the pumps.
output::Dict{Resource, Real}
can only contain one entry, the stored resource.
data::Array{Data}
additional data (e.g. for investments).
source