BioCHP

The BioCHP node represents a biomass-fired combined heat and power (CHP) plant.

Sampling CHP_modelling module

To use the constructor that samples the CHP_modelling module, follow the installation in the Use nodes section.

The BioCHP utilizes linear, time-independent conversion rates from the input Resources to the output Resources, subject to the available capacity. Compared to a standard NetworkNode, BioCHP differs in its outlet-flow constraints. The electric touput is enfoced based on the capacity usage while the heat output is bound to an upper value, but can also be 0.

Introduced types and their fields

The BioCHP is a subtype of the NetworkNode. It uses the standard NetworkNode functions from EnergyModelsBase.

Standard fields

  • id:
    The field id is only used for providing a name to the node. This is similar to the approach utilized in EnergyModelsBase.

  • cap::TimeProfile:
    The installed capacity corresponds to the nominal capacity of the node.
    If the node should contain investments through the application of EnergyModelsInvestments, it is important to note that you can only use FixedProfile or StrategicProfile for the capacity, but not RepresentativeProfile or OperationalProfile.
    In addition, all values have to be non-negative.

  • opex_var::TimeProfile:
    The variable operating expenses are based on the capacity utilization through the variable :cap_use. Hence, it is directly related to the specified output ratios. The variable operating expenses can be provided as OperationalProfile as well.

  • opex_fixed::TimeProfile:
    The fixed operating expenses are relative to the installed capacity (through the field cap) and the chosen duration of a strategic period as outlined on Utilize TimeStruct.
    It is important to note that you can only use FixedProfile or StrategicProfile for the fixed OPEX, but not RepresentativeProfile or OperationalProfile. In addition, all values have to be non-negative.

  • output::Dict{<:Resource, <:Real}:
    The field output includes the output Resources with their corresponding conversion factors as dictionaries. It must include the electricity_resource (see below). It is also possible to include other resources in addition to the chosen electricity_resource. All other Resources can be produced up to the specified value of the capacity utilization, but they do not need to be produced.

  • data::Vector{<:ExtensionData}:
    An entry for providing additional data to the model. In the current version, it is only relevant for additional investment data when EnergyModelsInvestments is used or for additional emission data through EmissionsProcess. The latter would correspond to uncaptured CO₂ that should be included in the analyses.

    Note

    The field data is not required as we include a constructor when the value is excluded.

New fields

  • electricity_resource::Resource:
    The electric power resource produced by the CHP plant. This field is used to distinguish electricity from (potential) heat outputs in the outlet-flow constraints.

  • input::Dict{<:ResourceBio, <:Real}:
    The biomass input resources (of type ResourceBio) and their conversion factors. These conversion factors are normalized to the capacity definition of the node.

    The difference to the standard RefNetworkNode is that the input must be a ResourceBio.

Default `data` constructor

The provided constructor assigns data = [EmissionsEnergy()] by default. This means the node includes energy-based emission accounting unless overwritten by explicitly constructing BioCHP with a custom data vector.

Mathematical description

In the following mathematical equations, we use the names 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

The BioCHP node uses standard NetworkNode variables, as described on the page Optimization variables. The variables include:

Constraints

The following sections omit the direct inclusion of the vector of heat pump nodes. Instead, it is implicitly assumed that the constraints are valid $\forall n ∈ N^{BioCHP}$ for all BioCHP nodes 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).

Standard constraints

BioCHP nodes utilize in general the standard constraints described on Constraint functions for NetworkNodes. These standard constraints are:

  • constraints_capacity:

    \[\texttt{cap\_use}[n, t] \leq \texttt{cap\_inst}[n, t]\]

  • constraints_capacity_installed:

    \[\texttt{cap\_inst}[n, t] = capacity(n, t)\]

    Using investments

    The function constraints_capacity_installed is also used in EnergyModelsInvestments to incorporate the potential for investment. Nodes with investments are then no longer constrained by the parameter capacity.

  • constraints_flow_out:

    \[\texttt{flow\_out}[n, t, p] = outputs(n, p) \times \texttt{cap\_use}[n, t] \qquad \forall p \in outputs(n) \setminus \{\text{CO}_2\}\]

  • constraints_opex_fixed:

    \[\texttt{opex\_fixed}[n, t_{inv}] = opex\_fixed(n, t_{inv}) \times \texttt{cap\_inst}[n, first(t_{inv})]\]

    Why do we use `first()`

    The variable $\texttt{cap\_inst}$ is declared over all operational periods (see the section on Capacity variables for further explanations). Hence, we use the function $first(t_{inv})$ to retrieve the installed capacity in the first operational period of a given strategic period $t_{inv}$ in the function constraints_opex_fixed.

  • constraints_opex_var:

    \[\texttt{opex\_var}[n, t_{inv}] = \sum_{t \in t_{inv}} opex\_var(n, t) \times \texttt{cap\_use}[n, t] \times scale\_op\_sp(t_{inv}, t)\]

    The function `scale_op_sp`

    The function $scale\_op\_sp(t_{inv}, t)$ calculates the scaling factor between operational and strategic periods. It also takes into account potential operational scenarios and their probability as well as representative periods.

  • constraints_ext_data:
    This function is only called for specified data of the BioCHP node, see above.

The function constraints_flow_out is extended with a new method for BioCHP nodes such that the outputs are flexible with respect to output resources not being the electricity_resource.

Let $\mathcal{P}^{out}(n)$ denote the set of output resources of node $n$ excluding CO₂ and electricity_resource. The implemented constraint is

\[\texttt{flow\_out}[n, t, p] = outputs(n, p) \times \texttt{cap\_use}[n, t] \qquad \forall p \in \mathcal{P}^{out}(n)\]

For the electricity_resource we still have

\[\texttt{flow\_out}[n, t, electricity_resource(n)] = outputs(n, electricity_resource(n)) \times \texttt{cap\_use}[n, t]\]

Additional constraints

BioCHP nodes do not add additional constraint functions or constraints in the create_node function.