PV and CSP source node
PV and CSP source nodes can generate multiple different resources simultaneously. The standard approach would be to include electricity and heat from solar power, both via solar PV and concentrated solar power. The implementation of the node is hence similar to that of NonDisRES but uses dictionaries for the fields cap, profile, opex_var and opex_fixed to facilitate multiple Resources (both electricity and heat outputs). The type is also used to enable a specialized constructor that samples the Tecnalia_Solar-Energy-Model module.
To use the constructor for CSPandPV that samples the Tecnalia_Solar-Energy-Model module, follow the installation in the Use nodes section.
Investments are currently not available for this node.
Introduced type and its field
The CSPandPV is a subtype of AbstractNonDisRES (the same is the case for NonDisRES) and is thus implemented as equivalent to a RefSource. Hence, it utilizes the same functions declared in EnergyModelsBase.
Standard fields
Standard fields (of an AbstractNonDisRES) being reused are given as:
id:
The fieldidis only used for providing a name to the node. This is similar to the approach utilized inEnergyModelsBase.output::Dict{<:Resource, <:Real}:
The fieldoutputincludesResources with their corresponding conversion factors as dictionaries. In the case of a PV and CSP energy source,outputshould always include your electricity resource and a heat resource. In practice, you should use a value of 1.
All values have to be non-negative.data::Vector{Data}:
An entry for providing additional data to the model. In the current version, it is not applicable. We intend to change this in future releases to enable investments.Constructor for `CSPandPV` The field
datais not required as we include a constructor when the value is excluded.
Additional fields
CSPandPV nodes alter the types of some fields compared to a AbstractNonDisRES:
cap::Dict{<:Resource,<:TimeProfile}:
The installed capacity corresponds to the nominal capacity of the node for each of the produced resources.
If the node should contain investments through the application ofEnergyModelsInvestments, it is important to note that you can only useFixedProfileorStrategicProfilefor the capacity, but notRepresentativeProfileorOperationalProfile. In addition, all values have to be non-negative.profile::Dict{<:Resource,<:TimeProfile}:
The profiles are used as a multiplier to the installed capacity to represent the maximum actual capacity in each operational period for each of the produced resources. The profiles should be provided asOperationalProfileor at least asRepresentativeProfile. In addition, all values should be in the range $[0, 1]$.opex_var::Dict{<:Resource,<:TimeProfile}:
The variable operating expenses are based on the capacity utilization through the variable:cap_usefor each of the produced resources. Hence, it is directly related to the specifiedoutputratios. The variable operating expenses can be provided asOperationalProfileas well.opex_fixed::Dict{<:Resource,<:TimeProfile}:
The fixed operating expenses are relative to the installed capacity (through the fieldcap) for each of the produced resources and the chosen duration of a strategic period as outlined on UtilizeTimeStruct.
It is important to note that you can only useFixedProfileorStrategicProfilefor the fixed OPEX, but notRepresentativeProfileorOperationalProfile. In addition, all values have to be non-negative.
Mathematical description
In the following mathematical equations, we use the name for variables and functions used in the model. Variables are in general represented as
$\texttt{var\_example}[index_1, index_2]$
with square brackets, while functions are represented as
$func\_example(index_1, index_2)$
with parantheses.
Variables
Standard variables
The PV and CSP source node types utilize all standard variables from the AbstractNonDisRES node type. The variables include:
- $\texttt{opex\_var}$
- $\texttt{opex\_fixed}$
- $\texttt{cap\_inst}$
- $\texttt{flow\_out}$
- $\texttt{emissions\_node}$ if
EmissionsDatais added to the fielddata. - $\texttt{curtailment}[n, t]$: For
CSPandPV, this variable is the sum of curtailed energy (as rate) of source $n$ in operational period $t$.
Non-dispatchable renewable energy source nodes are not compatible with CaptureData. Hence, you can only provide EmissionsProcess to the node. It is our aim to include the potential for construction emissions in a latter stage
Additional variables
CSPandPV replaces the variables $\texttt{cap\_use}$ and $\texttt{curtailment}$ variables with the following variables
- $\texttt{solar\_cap\_use}[n, t, p]$: The capacity usage of source $n$ in operational period $t$ for resource $p$.
- $\texttt{solar\_curtailment}[n, t, p]$: Curtailed capacity of source $n$ in operational period $t$ for resource $p$ with a typical unit of MW.
The curtailed resources specifies the unused generation capacity of sources. It is currently only used in the calculation, but not with a cost.
Constraints
The following sections omit the direct inclusion of the vector of PV and CSP source nodes. Instead, it is implicitly assumed that the constraints are valid $\forall n ∈ N^{\text{CSPandPV}\_source}$ for all CSPandPV types if not stated differently. In addition, all constraints are valid $\forall t \in T$ (that is in all operational periods) or $\forall t_{inv} \in T^{Inv}$ (that is in all strategic periods). Finally, all constraints are valid $\forall p \in outputs(n)$ (that is in all output resources).
Standard constraints
CSPandPV nodes utilize specialized constraint functions that extend the standard approach to accommodate multiple resources with per-resource tracking. These constraints are:
constraints_capacity:\[\texttt{solar\_cap\_use}[n, t, p] \leq capacity(n, t, p)\]
\[\texttt{solar\_cap\_use}[n, t, p] + \texttt{solar\_curtailment}[n, t, p] = profile(n, t, p) \times capacity(n, t, p) \qquad \forall p \in outputs(n)\]
\[\sum_{p \in outputs(n)} \texttt{solar\_curtailment}[n, t, p] = \texttt{curtailment}[n, t]\]
constraints_capacity_installed The function
constraints_capacity_installedis not used and the node thus currently does not support investments.constraints_flow_out:\[\texttt{flow\_out}[n, t, p] = \texttt{solar\_cap\_use}[n, t, p] \times outputs(n, p) \qquad \forall p \in outputs(n) \setminus \{\text{CO}_2\}\]
constraints_opex_fixed:\[\texttt{opex\_fixed}[n, t_{inv}] = \sum_{p \in outputs(n)} opex\_fixed(n, t_{inv}, p) \times capacity(n, first(t_{inv}), p)\]
constraints_opex_var:\[\texttt{opex\_var}[n, t_{inv}] = \sum_{t \in t_{inv},\, p \in outputs(n)} \texttt{solar\_cap\_use}[n, t, p] \times opex\_var(n, t, p) \times scale\_op\_sp(t_{inv}, t)\]
constraints_data:
This function is only called for specified data of the node, see above.
Additional constraints
CSPandPV nodes do not add additional constraints.