Skip to content

Base math

Complete base mathematical formulation for a Calliope model. This math is always applied but can be overridden using custom math.

Download the base math formulation as a YAML file

Objective

min_cost_optimisation

Minimise the total cost of installing and operating all technologies in the system. If multiple cost classes are present (e.g., monetary and co2 emissions), the weighted sum of total costs is minimised. Cost class weights can be defined in the indexed parameter objective_cost_weights.

\[ \begin{array}{r} \min{} \end{array} \begin{cases} \sum\limits_{\text{cost} \in \text{costs}} (\sum\limits_{\text{[nodes,techs]} \in \text{[nodes,techs]}} (\textbf{cost}_\text{node,tech,cost}) \times \textit{objective\_cost\_weights}) + \sum\limits_{\text{timestep} \in \text{timesteps}} (\sum\limits_{\text{[carriers,nodes]} \in \text{[carriers,nodes]}} (\textbf{unmet\_demand}_\text{node,carrier,timestep} - \textbf{unused\_supply}_\text{node,carrier,timestep}) \times \textit{timestep\_weights}_\text{timestep}) \times \textit{bigM}&\quad \text{if } (\bigvee\limits_{\substack{\text{node} \in \text{nodes} \\ \text{tech} \in \text{techs} \\ \text{cost} \in \text{costs}}} (cost))\land{}(\text{config.ensure\_feasibility}\mathord{=}\text{true}) \\ \sum\limits_{\text{cost} \in \text{costs}} (\sum\limits_{\text{[nodes,techs]} \in \text{[nodes,techs]}} (\textbf{cost}_\text{node,tech,cost}) \times \textit{objective\_cost\_weights})&\quad \text{if } (\bigvee\limits_{\substack{\text{node} \in \text{nodes} \\ \text{tech} \in \text{techs} \\ \text{cost} \in \text{costs}}} (cost))\land{}(\neg (\text{config.ensure\_feasibility}\mathord{=}\text{true})) \\ \sum\limits_{\text{timestep} \in \text{timesteps}} (\sum\limits_{\text{[carriers,nodes]} \in \text{[carriers,nodes]}} (\textbf{unmet\_demand}_\text{node,carrier,timestep} - \textbf{unused\_supply}_\text{node,carrier,timestep}) \times \textit{timestep\_weights}_\text{timestep}) \times \textit{bigM}&\quad \text{if } (\neg (\bigvee\limits_{\substack{\text{node} \in \text{nodes} \\ \text{tech} \in \text{techs} \\ \text{cost} \in \text{costs}}} (cost)))\land{}(\text{config.ensure\_feasibility}\mathord{=}\text{true}) \\ 0&\quad \text{if } (\neg (\bigvee\limits_{\substack{\text{node} \in \text{nodes} \\ \text{tech} \in \text{techs} \\ \text{cost} \in \text{costs}}} (cost)))\land{}(\neg (\text{config.ensure\_feasibility}\mathord{=}\text{true})) \\ \end{cases} \]

Subject to

flow_capacity_per_storage_capacity_min

Set the lower bound of storage flow capacity relative to its storage capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textbf{storage\_cap}_\text{node,tech}) \land \exists (\textit{flow\_cap\_per\_storage\_cap\_min}_\text{tech})) \end{array} \begin{cases} \textbf{flow\_cap}_\text{node,tech,carrier} \geq \textbf{storage\_cap}_\text{node,tech} \times \textit{flow\_cap\_per\_storage\_cap\_min}_\text{tech}&\quad \\ \end{cases} \]

flow_capacity_per_storage_capacity_max

Set the upper bound of storage flow capacity relative to its storage capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textbf{storage\_cap}_\text{node,tech}) \land \exists (\textit{flow\_cap\_per\_storage\_cap\_max}_\text{tech})) \end{array} \begin{cases} \textbf{flow\_cap}_\text{node,tech,carrier} \leq \textbf{storage\_cap}_\text{node,tech} \times \textit{flow\_cap\_per\_storage\_cap\_max}_\text{tech}&\quad \\ \end{cases} \]

source_capacity_equals_flow_capacity

Set a supply technology's flow capacity to equal its source capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textbf{source\_cap}_\text{node,tech}) \land \textit{source\_cap\_equals\_flow\_cap}_\text{tech}\mathord{=}\text{true}) \end{array} \begin{cases} \textbf{source\_cap}_\text{node,tech} = \textbf{flow\_cap}_\text{node,tech,carrier}&\quad \\ \end{cases} \]

force_zero_area_use

Set a technology's area use to zero if its flow capacity upper bound is zero.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \text{if } (\exists (\textbf{area\_use}_\text{node,tech}) \land \textit{flow\_cap\_max}_\text{tech}\mathord{=}\text{0}) \end{array} \begin{cases} \textbf{area\_use}_\text{node,tech} = 0&\quad \\ \end{cases} \]

area_use_per_flow_capacity

Set a fixed relationship between a technology's flow capacity and its area use.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textbf{area\_use}_\text{node,tech}) \land \exists (\textit{area\_use\_per\_flow\_cap}_\text{tech})) \end{array} \begin{cases} \textbf{area\_use}_\text{node,tech} = \textbf{flow\_cap}_\text{node,tech,carrier} \times \textit{area\_use\_per\_flow\_cap}_\text{tech}&\quad \\ \end{cases} \]

area_use_capacity_per_loc

Set an upper bound on the total area that all technologies with area_use can occupy at a given node.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes } \\ \text{if } (\exists (\textbf{area\_use}_\text{node,tech}) \land \exists (\textit{available\_area}_\text{node})) \end{array} \begin{cases} \sum\limits_{\text{tech} \in \text{techs}} (\textbf{area\_use}_\text{node,tech}) \leq \textit{available\_area}_\text{node}&\quad \\ \end{cases} \]

flow_capacity_systemwide_max

Set an upper bound on flow capacity of a technology across all nodes in which the technology exists.

\[ \begin{array}{r} \forall{} \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textit{flow\_cap\_max\_systemwide}_\text{tech})) \end{array} \begin{cases} \sum\limits_{\text{node} \in \text{nodes}} (\textbf{flow\_cap}_\text{node,tech,carrier}) \leq \textit{flow\_cap\_max\_systemwide}_\text{tech}&\quad \\ \end{cases} \]

flow_capacity_systemwide_min

Set a lower bound on flow capacity of a technology across all nodes in which the technology exists.

\[ \begin{array}{r} \forall{} \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textit{flow\_cap\_min\_systemwide}_\text{tech})) \end{array} \begin{cases} \sum\limits_{\text{node} \in \text{nodes}} (\textbf{flow\_cap}_\text{node,tech,carrier}) \geq \textit{flow\_cap\_min\_systemwide}_\text{tech}&\quad \\ \end{cases} \]

balance_conversion

Fix the relationship between a conversion technology's outflow and consumption.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{conversion} \land \neg (\textit{include\_storage}_\text{tech}\mathord{=}\text{true})) \end{array} \begin{cases} \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_out\_inc\_eff}_\text{node,tech,carrier,timestep}) = \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep})&\quad \\ \end{cases} \]

flow_out_max

Set the upper bound of a technology's outflow.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textit{carrier\_out}_\text{node,tech,carrier}) \land \neg (\exists (\textbf{operating\_units}_\text{node,tech,timestep}))) \end{array} \begin{cases} \textbf{flow\_out}_\text{node,tech,carrier,timestep} \leq \textbf{flow\_cap}_\text{node,tech,carrier} \times \textit{timestep\_resolution}_\text{timestep} \times \textit{flow\_out\_parasitic\_eff}_\text{tech}&\quad \\ \end{cases} \]

flow_out_min

Set the lower bound of a technology's outflow.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textit{flow\_out\_min\_relative}_\text{tech}) \land \neg (\exists (\textbf{operating\_units}_\text{node,tech,timestep}))) \end{array} \begin{cases} \textbf{flow\_out}_\text{node,tech,carrier,timestep} \geq \textbf{flow\_cap}_\text{node,tech,carrier} \times \textit{timestep\_resolution}_\text{timestep} \times \textit{flow\_out\_min\_relative}_\text{tech}&\quad \\ \end{cases} \]

flow_in_max

Set the upper bound of a technology's inflow.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textit{carrier\_in}_\text{node,tech,carrier}) \land \neg (\exists (\textbf{operating\_units}_\text{node,tech,timestep}))) \end{array} \begin{cases} \textbf{flow\_in}_\text{node,tech,carrier,timestep} \leq \textbf{flow\_cap}_\text{node,tech,carrier} \times \textit{timestep\_resolution}_\text{timestep}&\quad \\ \end{cases} \]

source_max

Set the upper bound of a supply technology's source consumption.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{source\_cap}_\text{node,tech})) \end{array} \begin{cases} \textbf{source\_use}_\text{node,tech,timestep} \leq \textit{timestep\_resolution}_\text{timestep} \times \textbf{source\_cap}_\text{node,tech}&\quad \\ \end{cases} \]

storage_max

Set the upper bound of the amount of carrier a technology can store.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{storage}_\text{node,tech,timestep})) \end{array} \begin{cases} \textbf{storage}_\text{node,tech,timestep} \leq \textbf{storage\_cap}_\text{node,tech}&\quad \\ \end{cases} \]

storage_discharge_depth_limit

Set the lower bound of the stored carrier a technology must keep in reserve at all times.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{storage}_\text{node,tech,timestep}) \land \exists (\textit{storage\_discharge\_depth}_\text{tech})) \end{array} \begin{cases} \textbf{storage}_\text{node,tech,timestep} - (\textit{storage\_discharge\_depth}_\text{tech} \times \textbf{storage\_cap}_\text{node,tech}) \geq 0&\quad \\ \end{cases} \]

system_balance

Set the global carrier balance of the optimisation problem by fixing the total production of a given carrier to equal the total consumption of that carrier at every node in every timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \end{array} \begin{cases} \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_out}_\text{node,tech,carrier,timestep}) - \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_in}_\text{node,tech,carrier,timestep}) - \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_export}_\text{node,tech,carrier,timestep}) + \textbf{unmet\_demand}_\text{node,carrier,timestep} + \textbf{unused\_supply}_\text{node,carrier,timestep} = 0&\quad \text{if } (\text{config.ensure\_feasibility}\mathord{=}\text{true})\land{}(\bigvee\limits_{\text{tech} \in \text{techs}} (carrier_export)) \\ \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_out}_\text{node,tech,carrier,timestep}) - \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_in}_\text{node,tech,carrier,timestep}) + \textbf{unmet\_demand}_\text{node,carrier,timestep} + \textbf{unused\_supply}_\text{node,carrier,timestep} = 0&\quad \text{if } (\text{config.ensure\_feasibility}\mathord{=}\text{true})\land{}(\neg (\bigvee\limits_{\text{tech} \in \text{techs}} (carrier_export))) \\ \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_out}_\text{node,tech,carrier,timestep}) - \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_in}_\text{node,tech,carrier,timestep}) - \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_export}_\text{node,tech,carrier,timestep}) = 0&\quad \text{if } (\neg (\text{config.ensure\_feasibility}\mathord{=}\text{true}))\land{}(\bigvee\limits_{\text{tech} \in \text{techs}} (carrier_export)) \\ \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_out}_\text{node,tech,carrier,timestep}) - \sum\limits_{\text{tech} \in \text{techs}} (\textbf{flow\_in}_\text{node,tech,carrier,timestep}) = 0&\quad \text{if } (\neg (\text{config.ensure\_feasibility}\mathord{=}\text{true}))\land{}(\neg (\bigvee\limits_{\text{tech} \in \text{techs}} (carrier_export))) \\ \end{cases} \]

balance_demand

Set the upper bound on, or a fixed total of, that a demand technology must dump to its sink in each timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{demand}) \end{array} \begin{cases} \textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep} = \textit{sink\_use\_equals} \times \textbf{area\_use}_\text{node,tech}&\quad \text{if } (\exists (\textit{sink\_use\_equals}))\land{}(\textit{sink\_unit}_\text{tech}\mathord{=}\text{per\_area}) \\ \textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep} = \textit{sink\_use\_equals} \times \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_cap}_\text{node,tech,carrier})&\quad \text{if } (\exists (\textit{sink\_use\_equals}))\land{}(\textit{sink\_unit}_\text{tech}\mathord{=}\text{per\_cap}) \\ \textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep} = \textit{sink\_use\_equals} \times 1&\quad \text{if } (\exists (\textit{sink\_use\_equals}))\land{}(\textit{sink\_unit}_\text{tech}\mathord{=}\text{absolute}) \\ \textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep} \leq \textit{sink\_use\_max}_\text{tech,timestep} \times \textbf{area\_use}_\text{node,tech}&\quad \text{if } (\neg (\exists (\textit{sink\_use\_equals})) \land \exists (\textit{sink\_use\_max}_\text{tech,timestep}))\land{}(\textit{sink\_unit}_\text{tech}\mathord{=}\text{per\_area}) \\ \textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep} \leq \textit{sink\_use\_max}_\text{tech,timestep} \times \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_cap}_\text{node,tech,carrier})&\quad \text{if } (\neg (\exists (\textit{sink\_use\_equals})) \land \exists (\textit{sink\_use\_max}_\text{tech,timestep}))\land{}(\textit{sink\_unit}_\text{tech}\mathord{=}\text{per\_cap}) \\ \textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep} \leq \textit{sink\_use\_max}_\text{tech,timestep} \times 1&\quad \text{if } (\neg (\exists (\textit{sink\_use\_equals})) \land \exists (\textit{sink\_use\_max}_\text{tech,timestep}))\land{}(\textit{sink\_unit}_\text{tech}\mathord{=}\text{absolute}) \\ \end{cases} \]

balance_demand_min_use

Set the lower bound on the quantity of flow a demand technology must dump to its sink in each timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textit{sink\_use\_min}_\text{tech}) \land \neg (\exists (\textit{sink\_use\_equals})) \land \textit{base\_tech}_\text{tech}\mathord{=}\text{demand}) \end{array} \begin{cases} \textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep} \geq \textit{sink\_use\_min}_\text{tech} \times \textbf{area\_use}_\text{node,tech}&\quad \text{if } (\textit{sink\_unit}_\text{tech}\mathord{=}\text{per\_area}) \\ \textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep} \geq \textit{sink\_use\_min}_\text{tech} \times \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_cap}_\text{node,tech,carrier})&\quad \text{if } (\textit{sink\_unit}_\text{tech}\mathord{=}\text{per\_cap}) \\ \textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep} \geq \textit{sink\_use\_min}_\text{tech} \times 1&\quad \text{if } (\textit{sink\_unit}_\text{tech}\mathord{=}\text{absolute}) \\ \end{cases} \]

balance_supply_no_storage

Fix the outflow of a supply technology to its consumption of the available source.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{supply} \land \neg (\textit{include\_storage}_\text{tech}\mathord{=}\text{true})) \end{array} \begin{cases} \textbf{flow\_out\_inc\_eff}_\text{node,tech,carrier,timestep} = \textbf{source\_use}_\text{node,tech,timestep} \times \textit{source\_eff}_\text{tech}&\quad \\ \end{cases} \]

balance_supply_with_storage

Fix the outflow of a supply technology to its consumption of the available source, with a storage buffer to temporally offset the outflow from source consumption.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{storage}_\text{node,tech,timestep}) \land \textit{base\_tech}_\text{tech}\mathord{=}\text{supply}) \end{array} \begin{cases} \textbf{storage}_\text{node,tech,timestep} = \textit{storage\_initial}_\text{tech} \times \textbf{storage\_cap}_\text{node,tech} + (\textbf{source\_use}_\text{node,tech,timestep} \times \textit{source\_eff}_\text{tech}) - \textbf{flow\_out\_inc\_eff}_\text{node,tech,carrier,timestep}&\quad \text{if } (\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]} \land \neg (\textit{cyclic\_storage}\mathord{=}\text{true})) \\ \textbf{storage}_\text{node,tech,timestep} = ((1 - \textit{storage\_loss}_\text{tech})^{\textit{timestep\_resolution}_\text{timestep-1}}) \times \textbf{storage}_\text{node,tech,timestep-1} + (\textbf{source\_use}_\text{node,tech,timestep} \times \textit{source\_eff}_\text{tech}) - \textbf{flow\_out\_inc\_eff}_\text{node,tech,carrier,timestep}&\quad \text{if } (((\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]} \land \textit{cyclic\_storage}\mathord{=}\text{true}) \lor \neg (\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]})) \land \neg (\textit{lookup\_cluster\_first\_timestep}\mathord{=}\text{true})) \\ \textbf{storage}_\text{node,tech,timestep} = ((1 - \textit{storage\_loss}_\text{tech})^{\textit{timestep\_resolution}_\text{timestep=lookup\_cluster\_last\_timestep[timestep]}}) \times \textbf{storage}_\text{node,tech,timestep=lookup\_cluster\_last\_timestep[timestep]} + (\textbf{source\_use}_\text{node,tech,timestep} \times \textit{source\_eff}_\text{tech}) - \textbf{flow\_out\_inc\_eff}_\text{node,tech,carrier,timestep}&\quad \text{if } (\textit{lookup\_cluster\_first\_timestep}\mathord{=}\text{true} \land \neg (\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]} \land \neg (\textit{cyclic\_storage}\mathord{=}\text{true}))) \\ \end{cases} \]

source_availability_supply

Set the upper bound on, or a fixed total of, a supply technology's ability to consume its available resource.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{source\_use}_\text{node,tech,timestep}) \land (\exists (\textit{source\_use\_equals}) \lor \exists (\textit{source\_use\_max}_\text{tech}))) \end{array} \begin{cases} \textbf{source\_use}_\text{node,tech,timestep} = \textit{source\_use\_equals} \times \textbf{area\_use}_\text{node,tech}&\quad \text{if } (\exists (\textit{source\_use\_equals}))\land{}(\textit{source\_unit}_\text{tech}\mathord{=}\text{per\_area}) \\ \textbf{source\_use}_\text{node,tech,timestep} = \textit{source\_use\_equals} \times \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_cap}_\text{node,tech,carrier})&\quad \text{if } (\exists (\textit{source\_use\_equals}))\land{}(\textit{source\_unit}_\text{tech}\mathord{=}\text{per\_cap}) \\ \textbf{source\_use}_\text{node,tech,timestep} = \textit{source\_use\_equals} \times 1&\quad \text{if } (\exists (\textit{source\_use\_equals}))\land{}(\textit{source\_unit}_\text{tech}\mathord{=}\text{absolute}) \\ \textbf{source\_use}_\text{node,tech,timestep} \leq \textit{source\_use\_max}_\text{tech} \times \textbf{area\_use}_\text{node,tech}&\quad \text{if } (\neg (\exists (\textit{source\_use\_equals})) \land \exists (\textit{source\_use\_max}_\text{tech}))\land{}(\textit{source\_unit}_\text{tech}\mathord{=}\text{per\_area}) \\ \textbf{source\_use}_\text{node,tech,timestep} \leq \textit{source\_use\_max}_\text{tech} \times \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_cap}_\text{node,tech,carrier})&\quad \text{if } (\neg (\exists (\textit{source\_use\_equals})) \land \exists (\textit{source\_use\_max}_\text{tech}))\land{}(\textit{source\_unit}_\text{tech}\mathord{=}\text{per\_cap}) \\ \textbf{source\_use}_\text{node,tech,timestep} \leq \textit{source\_use\_max}_\text{tech} \times 1&\quad \text{if } (\neg (\exists (\textit{source\_use\_equals})) \land \exists (\textit{source\_use\_max}_\text{tech}))\land{}(\textit{source\_unit}_\text{tech}\mathord{=}\text{absolute}) \\ \end{cases} \]

balance_supply_min_use

Set the lower bound on the quantity of its source a supply technology must use in each timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textit{source\_use\_min}_\text{tech}) \land \neg (\exists (\textit{source\_use\_equals})) \land \textit{base\_tech}_\text{tech}\mathord{=}\text{supply}) \end{array} \begin{cases} \textbf{source\_use}_\text{node,tech,timestep} \geq \textit{source\_use\_min}_\text{tech} \times \textbf{area\_use}_\text{node,tech}&\quad \text{if } (\textit{source\_unit}_\text{tech}\mathord{=}\text{per\_area}) \\ \textbf{source\_use}_\text{node,tech,timestep} \geq \textit{source\_use\_min}_\text{tech} \times \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_cap}_\text{node,tech,carrier})&\quad \text{if } (\textit{source\_unit}_\text{tech}\mathord{=}\text{per\_cap}) \\ \textbf{source\_use}_\text{node,tech,timestep} \geq \textit{source\_use\_min}_\text{tech} \times 1&\quad \text{if } (\textit{source\_unit}_\text{tech}\mathord{=}\text{absolute}) \\ \end{cases} \]

balance_storage

Fix the quantity of carrier stored in a storage technology at the end of each timestep based on the net flow of carrier charged and discharged and the quantity of carrier stored at the start of the timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } ((\textit{include\_storage}_\text{tech}\mathord{=}\text{true} \lor \textit{base\_tech}_\text{tech}\mathord{=}\text{storage}) \land \neg (\textit{base\_tech}_\text{tech}\mathord{=}\text{supply} \lor \textit{base\_tech}_\text{tech}\mathord{=}\text{demand})) \end{array} \begin{cases} \textbf{storage}_\text{node,tech,timestep} = \textit{storage\_initial}_\text{tech} \times \textbf{storage\_cap}_\text{node,tech} - \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_out\_inc\_eff}_\text{node,tech,carrier,timestep}) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep})&\quad \text{if } (\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]} \land \neg (\textit{cyclic\_storage}\mathord{=}\text{true})) \\ \textbf{storage}_\text{node,tech,timestep} = ((1 - \textit{storage\_loss}_\text{tech})^{\textit{timestep\_resolution}_\text{timestep-1}}) \times \textbf{storage}_\text{node,tech,timestep-1} - \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_out\_inc\_eff}_\text{node,tech,carrier,timestep}) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep})&\quad \text{if } (((\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]} \land \textit{cyclic\_storage}\mathord{=}\text{true}) \lor \neg (\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]})) \land \neg (\textit{lookup\_cluster\_first\_timestep}\mathord{=}\text{true})) \\ \textbf{storage}_\text{node,tech,timestep} = ((1 - \textit{storage\_loss}_\text{tech})^{\textit{timestep\_resolution}_\text{timestep=lookup\_cluster\_last\_timestep[timestep]}}) \times \textbf{storage}_\text{node,tech,timestep=lookup\_cluster\_last\_timestep[timestep]} - \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_out\_inc\_eff}_\text{node,tech,carrier,timestep}) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep})&\quad \text{if } (\textit{lookup\_cluster\_first\_timestep}\mathord{=}\text{true} \land \neg (\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]} \land \neg (\textit{cyclic\_storage}\mathord{=}\text{true}))) \\ \end{cases} \]

set_storage_initial

Fix the relationship between carrier stored in a storage technology at the start and end of the whole model period.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \text{if } (\exists (\textbf{storage}_\text{node,tech,timestep}) \land \exists (\textit{storage\_initial}_\text{tech}) \land \textit{cyclic\_storage}\mathord{=}\text{true}) \end{array} \begin{cases} \textbf{storage}_\text{node,tech,timestep=timesteps[-1]} \times ((1 - \textit{storage\_loss}_\text{tech})^{\textit{timestep\_resolution}_\text{timestep=timesteps[-1]}}) = \textit{storage\_initial}_\text{tech} \times \textbf{storage\_cap}_\text{node,tech}&\quad \\ \end{cases} \]

balance_transmission

Fix the relationship between between carrier flowing into and out of a transmission link in each timestep.

\[ \begin{array}{r} \forall{} \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission}) \end{array} \begin{cases} \sum\limits_{\text{[nodes,carriers]} \in \text{[nodes,carriers]}} (\textbf{flow\_out\_inc\_eff}_\text{node,tech,carrier,timestep}) = \sum\limits_{\text{[nodes,carriers]} \in \text{[nodes,carriers]}} (\textbf{flow\_in\_inc\_eff}_\text{node,tech,carrier,timestep})&\quad \\ \end{cases} \]

symmetric_transmission

Fix the flow capacity of two transmission technologies representing the same link in the system.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission}) \end{array} \begin{cases} \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_cap}_\text{node,tech,carrier}) = \textbf{link\_flow\_cap}_\text{tech}&\quad \\ \end{cases} \]

export_balance

Set the lower bound of a technology's outflow to a technology's carrier export, for any technologies that can export carriers out of the system.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{flow\_export}_\text{node,tech,carrier,timestep})) \end{array} \begin{cases} \textbf{flow\_out}_\text{node,tech,carrier,timestep} \geq \textbf{flow\_export}_\text{node,tech,carrier,timestep}&\quad \\ \end{cases} \]

flow_export_max

Set the upper bound of a technology's carrier export, for any technologies that can export carriers out of the system.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{flow\_export}_\text{node,tech,carrier,timestep}) \land \exists (\textit{export\_max}_\text{tech})) \end{array} \begin{cases} \textbf{flow\_export}_\text{node,tech,carrier,timestep} \leq \textit{export\_max}_\text{tech} \times \textbf{operating\_units}_\text{node,tech,timestep}&\quad \text{if } (\exists (\textbf{operating\_units}_\text{node,tech,timestep})) \\ \textbf{flow\_export}_\text{node,tech,carrier,timestep} \leq \textit{export\_max}_\text{tech}&\quad \text{if } (\neg (\exists (\textbf{operating\_units}_\text{node,tech,timestep}))) \\ \end{cases} \]

unit_commitment_milp

Set the upper bound of the number of integer units of technology that can exist, for any technology using integer units to define its capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{operating\_units}_\text{node,tech,timestep}) \land \exists (\textbf{purchased\_units}_\text{node,tech})) \end{array} \begin{cases} \textbf{operating\_units}_\text{node,tech,timestep} \leq \textbf{purchased\_units}_\text{node,tech}&\quad \\ \end{cases} \]

available_flow_cap_binary

Limit flow capacity to zero if the technology is not operating in a given timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep})) \end{array} \begin{cases} \textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep} \leq \textit{flow\_cap\_max}_\text{tech} \times \textbf{operating\_units}_\text{node,tech,timestep}&\quad \\ \end{cases} \]

available_flow_cap_continuous

Limit flow capacity to the value of the flow_cap decision variable when the technology is operating in a given timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep})) \end{array} \begin{cases} \textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep} \leq \textbf{flow\_cap}_\text{node,tech,carrier}&\quad \\ \end{cases} \]

available_flow_cap_max_binary_continuous_switch

Force flow capacity to equal the value of the flow_cap decision variable if the technology is operating in a given timestep, zero otherwise.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep})) \end{array} \begin{cases} \textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep} \geq \textbf{flow\_cap}_\text{node,tech,carrier} + ((\textbf{operating\_units}_\text{node,tech,timestep} - \textbf{purchased\_units}_\text{node,tech}) \times \textit{flow\_cap\_max}_\text{tech})&\quad \\ \end{cases} \]

flow_out_max_milp

Set the upper bound of a technology's ability to produce carriers, for any technology using integer units to define its capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{flow\_out}_\text{node,tech,carrier,timestep}) \land \exists (\textbf{operating\_units}_\text{node,tech,timestep}) \land \exists (\textit{flow\_cap\_per\_unit}_\text{tech})) \end{array} \begin{cases} \textbf{flow\_out}_\text{node,tech,carrier,timestep} \leq \textbf{operating\_units}_\text{node,tech,timestep} \times \textit{timestep\_resolution}_\text{timestep} \times \textit{flow\_cap\_per\_unit}_\text{tech} \times \textit{flow\_out\_parasitic\_eff}_\text{tech}&\quad \\ \end{cases} \]

flow_in_max_milp

Set the upper bound of a technology's ability to consume carriers, for any technology using integer units to define its capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{flow\_in}_\text{node,tech,carrier,timestep}) \land \exists (\textbf{operating\_units}_\text{node,tech,timestep}) \land \exists (\textit{flow\_cap\_per\_unit}_\text{tech})) \end{array} \begin{cases} \textbf{flow\_in}_\text{node,tech,carrier,timestep} \leq \textbf{operating\_units}_\text{node,tech,timestep} \times \textit{timestep\_resolution}_\text{timestep} \times \textit{flow\_cap\_per\_unit}_\text{tech}&\quad \\ \end{cases} \]

flow_out_min_milp

Set the lower bound of a technology's ability to produce carriers, for any technology using integer units to define its capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{flow\_out}_\text{node,tech,carrier,timestep}) \land \exists (\textbf{operating\_units}_\text{node,tech,timestep}) \land \exists (\textit{flow\_out\_min\_relative}_\text{tech})) \end{array} \begin{cases} \textbf{flow\_out}_\text{node,tech,carrier,timestep} \geq \textbf{operating\_units}_\text{node,tech,timestep} \times \textit{timestep\_resolution}_\text{timestep} \times \textit{flow\_cap\_per\_unit}_\text{tech} \times \textit{flow\_out\_min\_relative}_\text{tech}&\quad \text{if } (\exists (\textit{flow\_cap\_per\_unit}_\text{tech})) \\ \textbf{flow\_out}_\text{node,tech,carrier,timestep} \geq \textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep} \times \textit{timestep\_resolution}_\text{timestep} \times \textit{flow\_out\_min\_relative}_\text{tech}&\quad \text{if } (\exists (\textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep})) \\ \end{cases} \]

storage_capacity_units_milp

Fix the storage capacity of any technology using integer units to define its capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textbf{storage}_\text{node,tech,timestep}) \land \exists (\textbf{purchased\_units}_\text{node,tech}) \land \exists (\textit{storage\_cap\_per\_unit}_\text{tech})) \end{array} \begin{cases} \textbf{storage\_cap}_\text{node,tech} = \textbf{purchased\_units}_\text{node,tech} \times \textit{storage\_cap\_per\_unit}_\text{tech}&\quad \\ \end{cases} \]

flow_capacity_units_milp

Fix the flow capacity of any technology using integer units to define its capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textbf{operating\_units}_\text{node,tech,timestep})) \end{array} \begin{cases} \textbf{flow\_cap}_\text{node,tech,carrier} = \textbf{purchased\_units}_\text{node,tech} \times \textit{flow\_cap\_per\_unit}_\text{tech}&\quad \text{if } (\exists (\textit{flow\_cap\_per\_unit}_\text{tech})) \\ \textbf{flow\_cap}_\text{node,tech,carrier} \leq \textbf{purchased\_units}_\text{node,tech} \times \textit{bigM}&\quad \text{if } (\neg (\exists (\textit{flow\_cap\_per\_unit}_\text{tech}))) \\ \end{cases} \]

flow_capacity_max_purchase_milp

Set the upper bound on a technology's flow capacity, for any technology with integer capacity purchasing.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textbf{purchased\_units}_\text{node,tech}) \land \exists (\textit{flow\_cap\_max}_\text{tech})) \end{array} \begin{cases} \textbf{flow\_cap}_\text{node,tech,carrier} \leq \textit{flow\_cap\_max}_\text{tech} \times \textbf{purchased\_units}_\text{node,tech}&\quad \\ \end{cases} \]

flow_capacity_min_purchase_milp

Set the lower bound on a technology's flow capacity, for any technology with integer capacity purchasing.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \text{if } (\exists (\textbf{purchased\_units}_\text{node,tech}) \land \exists (\textit{flow\_cap\_min}_\text{tech})) \end{array} \begin{cases} \textbf{flow\_cap}_\text{node,tech,carrier} \geq \textit{flow\_cap\_min}_\text{tech} \times \textbf{purchased\_units}_\text{node,tech}&\quad \\ \end{cases} \]

storage_capacity_max_purchase_milp

Set the upper bound on a technology's storage capacity, for any technology with integer capacity purchasing.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \text{if } (\exists (\textbf{purchased\_units}_\text{node,tech}) \land \exists (\textit{storage\_cap\_max}_\text{tech})) \end{array} \begin{cases} \textbf{storage\_cap}_\text{node,tech} \leq \textit{storage\_cap\_max}_\text{tech} \times \textbf{purchased\_units}_\text{node,tech}&\quad \\ \end{cases} \]

storage_capacity_min_purchase_milp

Set the lower bound on a technology's storage capacity, for any technology with integer capacity purchasing.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \text{if } (\exists (\textbf{purchased\_units}_\text{node,tech}) \land \exists (\textit{storage\_cap\_min}_\text{tech})) \end{array} \begin{cases} \textbf{storage\_cap}_\text{node,tech} \geq \textit{storage\_cap\_min}_\text{tech} \times \textbf{purchased\_units}_\text{node,tech}&\quad \\ \end{cases} \]

unit_capacity_max_systemwide_milp

Set the upper bound on the total number of units of a technology that can be purchased across all nodes where the technology can exist, for any technology using integer units to define its capacity.

\[ \begin{array}{r} \forall{} \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \text{if } (\exists (\textbf{purchased\_units}_\text{node,tech}) \land \exists (\textit{purchased\_units\_max\_systemwide})) \end{array} \begin{cases} \sum\limits_{\text{node} \in \text{nodes}} (\textbf{purchased\_units}_\text{node,tech}) \leq \textit{purchased\_units\_max\_systemwide}&\quad \\ \end{cases} \]

unit_capacity_min_systemwide_milp

Set the lower bound on the total number of units of a technology that can be purchased across all nodes where the technology can exist, for any technology using integer units to define its capacity.

\[ \begin{array}{r} \forall{} \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \text{if } (\exists (\textbf{purchased\_units}_\text{node,tech}) \land \exists (\textit{purchased\_units\_max\_systemwide})) \end{array} \begin{cases} \sum\limits_{\text{node} \in \text{nodes}} (\textbf{purchased\_units}_\text{node,tech}) \geq \textit{purchased\_units\_min\_systemwide}&\quad \\ \end{cases} \]

async_flow_in_milp

Set a technology's ability to have inflow in the same timestep that it has outflow, for any technology using the asynchronous flow binary switch.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{async\_flow\_switch}_\text{node,tech,timestep})) \end{array} \begin{cases} \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_in}_\text{node,tech,carrier,timestep}) \leq (1 - \textbf{async\_flow\_switch}_\text{node,tech,timestep}) \times \textit{bigM}&\quad \\ \end{cases} \]

async_flow_out_milp

Set a technology's ability to have outflow in the same timestep that it has inflow, for any technology using the asynchronous flow binary switch.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{async\_flow\_switch}_\text{node,tech,timestep})) \end{array} \begin{cases} \sum\limits_{\text{carrier} \in \text{carriers}} (\textbf{flow\_out}_\text{node,tech,carrier,timestep}) \leq \textbf{async\_flow\_switch}_\text{node,tech,timestep} \times \textit{bigM}&\quad \\ \end{cases} \]

ramping_up

Set the upper bound on a technology's ability to ramp outflow up beyond a certain percentage compared to the previous timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textit{flow\_ramping}_\text{tech}) \land \neg (\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]})) \end{array} \begin{cases} \frac{ \textbf{flow\_out}_\text{node,tech,carrier,timestep} }{ \textit{timestep\_resolution}_\text{timestep} } - \frac{ \textbf{flow\_out}_\text{node,tech,carrier,timestep-1} }{ \textit{timestep\_resolution}_\text{timestep-1} } \leq \textit{flow\_ramping}_\text{tech} \times \textbf{flow\_cap}_\text{node,tech,carrier}&\quad \text{if } (\exists (\textit{carrier\_out}_\text{node,tech,carrier}) \land \neg (\exists (\textit{carrier\_in}_\text{node,tech,carrier}))) \\ \frac{ \textbf{flow\_in}_\text{node,tech,carrier,timestep} }{ \textit{timestep\_resolution}_\text{timestep} } - \frac{ \textbf{flow\_in}_\text{node,tech,carrier,timestep-1} }{ \textit{timestep\_resolution}_\text{timestep-1} } \leq \textit{flow\_ramping}_\text{tech} \times \textbf{flow\_cap}_\text{node,tech,carrier}&\quad \text{if } (\exists (\textit{carrier\_in}_\text{node,tech,carrier}) \land \neg (\exists (\textit{carrier\_out}_\text{node,tech,carrier}))) \\ \frac{ (\textbf{flow\_out}_\text{node,tech,carrier,timestep} - \textbf{flow\_in}_\text{node,tech,carrier,timestep}) }{ \textit{timestep\_resolution}_\text{timestep} } - \frac{ (\textbf{flow\_out}_\text{node,tech,carrier,timestep-1} - \textbf{flow\_in}_\text{node,tech,carrier,timestep-1}) }{ \textit{timestep\_resolution}_\text{timestep-1} } \leq \textit{flow\_ramping}_\text{tech} \times \textbf{flow\_cap}_\text{node,tech,carrier}&\quad \text{if } (\exists (\textit{carrier\_in}_\text{node,tech,carrier}) \land \exists (\textit{carrier\_out}_\text{node,tech,carrier})) \\ \end{cases} \]

ramping_down

Set the upper bound on a technology's ability to ramp outflow down beyond a certain percentage compared to the previous timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textit{flow\_ramping}_\text{tech}) \land \neg (\textit{timesteps}_\text{timestep}\mathord{=}\text{timesteps[0]})) \end{array} \begin{cases} -1 \times \textit{flow\_ramping}_\text{tech} \times \textbf{flow\_cap}_\text{node,tech,carrier} \leq \frac{ \textbf{flow\_out}_\text{node,tech,carrier,timestep} }{ \textit{timestep\_resolution}_\text{timestep} } - \frac{ \textbf{flow\_out}_\text{node,tech,carrier,timestep-1} }{ \textit{timestep\_resolution}_\text{timestep-1} }&\quad \text{if } (\exists (\textit{carrier\_out}_\text{node,tech,carrier}) \land \neg (\exists (\textit{carrier\_in}_\text{node,tech,carrier}))) \\ -1 \times \textit{flow\_ramping}_\text{tech} \times \textbf{flow\_cap}_\text{node,tech,carrier} \leq \frac{ \textbf{flow\_in}_\text{node,tech,carrier,timestep} }{ \textit{timestep\_resolution}_\text{timestep} } - \frac{ \textbf{flow\_in}_\text{node,tech,carrier,timestep-1} }{ \textit{timestep\_resolution}_\text{timestep-1} }&\quad \text{if } (\exists (\textit{carrier\_in}_\text{node,tech,carrier}) \land \neg (\exists (\textit{carrier\_out}_\text{node,tech,carrier}))) \\ -1 \times \textit{flow\_ramping}_\text{tech} \times \textbf{flow\_cap}_\text{node,tech,carrier} \leq \frac{ (\textbf{flow\_out}_\text{node,tech,carrier,timestep} - \textbf{flow\_in}_\text{node,tech,carrier,timestep}) }{ \textit{timestep\_resolution}_\text{timestep} } - \frac{ (\textbf{flow\_out}_\text{node,tech,carrier,timestep-1} - \textbf{flow\_in}_\text{node,tech,carrier,timestep-1}) }{ \textit{timestep\_resolution}_\text{timestep-1} }&\quad \text{if } (\exists (\textit{carrier\_in}_\text{node,tech,carrier}) \land \exists (\textit{carrier\_out}_\text{node,tech,carrier})) \\ \end{cases} \]

Where

flow_out_inc_eff

Outflows after taking efficiency losses into account.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{flow\_out}_\text{node,tech,carrier,timestep})) \end{array} \begin{cases} \frac{ \textbf{flow\_out}_\text{node,tech,carrier,timestep} }{ (\textit{flow\_out\_eff}_\text{tech} \times \textit{flow\_out\_parasitic\_eff}_\text{tech} \times (\textit{flow\_out\_eff\_per\_distance}_\text{tech}^{(\textit{distance}\vee{}1)})) }&\quad \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission}) \\ \frac{ \textbf{flow\_out}_\text{node,tech,carrier,timestep} }{ (\textit{flow\_out\_eff}_\text{tech} \times \textit{flow\_out\_parasitic\_eff}_\text{tech}) }&\quad \text{if } (\neg (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission})) \\ \end{cases} \]

flow_in_inc_eff

Inflows after taking efficiency losses into account.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textbf{flow\_in}_\text{node,tech,carrier,timestep})) \end{array} \begin{cases} \textbf{flow\_in}_\text{node,tech,carrier,timestep} \times \textit{flow\_in\_eff}_\text{tech} \times (\textit{flow\_in\_eff\_per\_distance}_\text{tech}^{(\textit{distance}\vee{}1)})&\quad \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission}) \\ \textbf{flow\_in}_\text{node,tech,carrier,timestep} \times \textit{flow\_in\_eff}_\text{tech}&\quad \text{if } (\neg (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission})) \\ \end{cases} \]

cost_var

The operating costs per timestep of a technology.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ cost }\negthickspace \in \negthickspace\text{ costs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \text{if } (\exists (\textit{cost\_export}_\text{cost,tech}) \lor \exists (\textit{cost\_flow\_in}_\text{cost,tech}) \lor \exists (\textit{cost\_flow\_out}_\text{cost,tech})) \end{array} \begin{cases} \textit{timestep\_weights}_\text{timestep} \times (\sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_export}_\text{cost,tech} \times (\textbf{flow\_export}_\text{node,tech,carrier,timestep}\vee{}0)) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_flow\_out}_\text{cost,tech} \times (\textbf{flow\_out}_\text{node,tech,carrier,timestep}\vee{}0)) + \textit{cost\_flow\_in}_\text{cost,tech} \times \textbf{source\_use}_\text{node,tech,timestep})&\quad \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{supply})\land{}(\exists (\textbf{flow\_export}_\text{node,tech,carrier,timestep})) \\ \textit{timestep\_weights}_\text{timestep} \times (\sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_flow\_out}_\text{cost,tech} \times (\textbf{flow\_out}_\text{node,tech,carrier,timestep}\vee{}0)) + \textit{cost\_flow\_in}_\text{cost,tech} \times \textbf{source\_use}_\text{node,tech,timestep})&\quad \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{supply})\land{}(\neg (\exists (\textbf{flow\_export}_\text{node,tech,carrier,timestep}))) \\ \textit{timestep\_weights}_\text{timestep} \times (\sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_export}_\text{cost,tech} \times (\textbf{flow\_export}_\text{node,tech,carrier,timestep}\vee{}0)) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_flow\_out}_\text{cost,tech} \times (\textbf{flow\_out}_\text{node,tech,carrier,timestep}\vee{}0)) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_flow\_in}_\text{cost,tech} \times (\textbf{flow\_in}_\text{node,tech,carrier,timestep}\vee{}0)))&\quad \text{if } (\neg (\textit{base\_tech}_\text{tech}\mathord{=}\text{supply}))\land{}(\exists (\textbf{flow\_export}_\text{node,tech,carrier,timestep})) \\ \textit{timestep\_weights}_\text{timestep} \times (\sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_flow\_out}_\text{cost,tech} \times (\textbf{flow\_out}_\text{node,tech,carrier,timestep}\vee{}0)) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_flow\_in}_\text{cost,tech} \times (\textbf{flow\_in}_\text{node,tech,carrier,timestep}\vee{}0)))&\quad \text{if } (\neg (\textit{base\_tech}_\text{tech}\mathord{=}\text{supply}))\land{}(\neg (\exists (\textbf{flow\_export}_\text{node,tech,carrier,timestep}))) \\ \end{cases} \]

cost_investment_flow_cap

The investment costs associated with the nominal/rated capacity of a technology.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ cost }\negthickspace \in \negthickspace\text{ costs } \\ \text{if } (\exists (\textbf{flow\_cap}_\text{node,tech,carrier}) \land (\exists (\textit{cost\_flow\_cap}_\text{cost,tech}) \lor \exists (\textit{cost\_flow\_cap\_per\_distance}))) \end{array} \begin{cases} (\textit{cost\_flow\_cap}_\text{cost,tech} + (\textit{cost\_flow\_cap\_per\_distance} \times (\textit{distance}\vee{}0))) \times 0.5 \times \textbf{flow\_cap}_\text{node,tech,carrier}&\quad \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission}) \\ \textit{cost\_flow\_cap}_\text{cost,tech} \times \textbf{flow\_cap}_\text{node,tech,carrier}&\quad \text{if } (\neg (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission})) \\ \end{cases} \]

cost_investment_storage_cap

The investment costs associated with the storage capacity of a technology.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ cost }\negthickspace \in \negthickspace\text{ costs } \\ \text{if } (\exists (\textit{cost\_storage\_cap}_\text{cost,tech}) \land \exists (\textbf{storage\_cap}_\text{node,tech})) \end{array} \begin{cases} \textit{cost\_storage\_cap}_\text{cost,tech} \times \textbf{storage\_cap}_\text{node,tech}&\quad \\ \end{cases} \]

cost_investment_source_cap

The investment costs associated with the source consumption capacity of a technology.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ cost }\negthickspace \in \negthickspace\text{ costs } \\ \text{if } (\exists (\textit{cost\_source\_cap}_\text{cost,tech}) \land \exists (\textbf{source\_cap}_\text{node,tech})) \end{array} \begin{cases} \textit{cost\_source\_cap}_\text{cost,tech} \times \textbf{source\_cap}_\text{node,tech}&\quad \\ \end{cases} \]

cost_investment_area_use

The investment costs associated with the area used by a technology.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ cost }\negthickspace \in \negthickspace\text{ costs } \\ \text{if } (\exists (\textit{cost\_area\_use}_\text{cost,tech}) \land \exists (\textbf{area\_use}_\text{node,tech})) \end{array} \begin{cases} \textit{cost\_area\_use}_\text{cost,tech} \times \textbf{area\_use}_\text{node,tech}&\quad \\ \end{cases} \]

cost_investment_purchase

The investment costs associated with the binary purchase of a technology.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ cost }\negthickspace \in \negthickspace\text{ costs } \\ \text{if } (\exists (\textit{cost\_purchase}_\text{cost,tech}) \land \exists (\textbf{purchased\_units}_\text{node,tech})) \end{array} \begin{cases} ((\textit{cost\_purchase}_\text{cost,tech} + (\textit{cost\_purchase\_per\_distance} \times (\textit{distance}\vee{}0))) \times \textbf{purchased\_units}_\text{node,tech}) \times 0.5&\quad \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission}) \\ \textit{cost\_purchase}_\text{cost,tech} \times \textbf{purchased\_units}_\text{node,tech}&\quad \text{if } (\neg (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission})) \\ \end{cases} \]

cost_investment

The installation costs of a technology, including annualised investment costs and annual maintenance costs.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ cost }\negthickspace \in \negthickspace\text{ costs } \\ \text{if } (\exists (\textbf{cost\_investment\_flow\_cap}_\text{node,tech,carrier,cost}) \lor \exists (\textbf{cost\_investment\_storage\_cap}_\text{node,tech,cost}) \lor \exists (\textbf{cost\_investment\_source\_cap}_\text{node,tech,cost}) \lor \exists (\textbf{cost\_investment\_area\_use}_\text{node,tech,cost}) \lor \exists (\textbf{cost\_investment\_purchase}_\text{node,tech,cost})) \end{array} \begin{cases} \frac{ \sum\limits_{\text{timestep} \in \text{timesteps}} (\textit{timestep\_resolution}_\text{timestep} \times \textit{timestep\_weights}_\text{timestep}) }{ 8760 } \times ((\textit{cost\_depreciation\_rate}_\text{cost,tech} \times (\sum\limits_{\text{carrier} \in \text{carriers}} ((\textbf{cost\_investment\_flow\_cap}_\text{node,tech,carrier,cost}\vee{}0)) + (\textbf{cost\_investment\_storage\_cap}_\text{node,tech,cost}\vee{}0) + (\textbf{cost\_investment\_source\_cap}_\text{node,tech,cost}\vee{}0) + (\textbf{cost\_investment\_area\_use}_\text{node,tech,cost}\vee{}0) + (\textbf{cost\_investment\_purchase}_\text{node,tech,cost}\vee{}0)) \times (1 + \textit{cost\_om\_annual\_investment\_fraction}_\text{cost,tech})) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_om\_annual}_\text{cost,tech} \times (\textbf{flow\_cap}_\text{node,tech,carrier}\vee{}0)))&\quad \text{if } (\exists (\textit{cost\_depreciation\_rate}_\text{cost,tech})) \\ \frac{ \sum\limits_{\text{timestep} \in \text{timesteps}} (\textit{timestep\_resolution}_\text{timestep} \times \textit{timestep\_weights}_\text{timestep}) }{ 8760 } \times ((\frac{ 1 }{ \textit{lifetime}_\text{tech} } \times (\sum\limits_{\text{carrier} \in \text{carriers}} ((\textbf{cost\_investment\_flow\_cap}_\text{node,tech,carrier,cost}\vee{}0)) + (\textbf{cost\_investment\_storage\_cap}_\text{node,tech,cost}\vee{}0) + (\textbf{cost\_investment\_source\_cap}_\text{node,tech,cost}\vee{}0) + (\textbf{cost\_investment\_area\_use}_\text{node,tech,cost}\vee{}0) + (\textbf{cost\_investment\_purchase}_\text{node,tech,cost}\vee{}0)) \times (1 + \textit{cost\_om\_annual\_investment\_fraction}_\text{cost,tech})) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_om\_annual}_\text{cost,tech} \times (\textbf{flow\_cap}_\text{node,tech,carrier}\vee{}0)))&\quad \text{if } (\neg (\exists (\textit{cost\_depreciation\_rate}_\text{cost,tech})) \land \textit{cost\_interest\_rate}_\text{cost,tech}\mathord{=}\text{0}) \\ \frac{ \sum\limits_{\text{timestep} \in \text{timesteps}} (\textit{timestep\_resolution}_\text{timestep} \times \textit{timestep\_weights}_\text{timestep}) }{ 8760 } \times ((\frac{ (\textit{cost\_interest\_rate}_\text{cost,tech} \times ((1 + \textit{cost\_interest\_rate}_\text{cost,tech})^{\textit{lifetime}_\text{tech}})) }{ (((1 + \textit{cost\_interest\_rate}_\text{cost,tech})^{\textit{lifetime}_\text{tech}}) - 1) } \times (\sum\limits_{\text{carrier} \in \text{carriers}} ((\textbf{cost\_investment\_flow\_cap}_\text{node,tech,carrier,cost}\vee{}0)) + (\textbf{cost\_investment\_storage\_cap}_\text{node,tech,cost}\vee{}0) + (\textbf{cost\_investment\_source\_cap}_\text{node,tech,cost}\vee{}0) + (\textbf{cost\_investment\_area\_use}_\text{node,tech,cost}\vee{}0) + (\textbf{cost\_investment\_purchase}_\text{node,tech,cost}\vee{}0)) \times (1 + \textit{cost\_om\_annual\_investment\_fraction}_\text{cost,tech})) + \sum\limits_{\text{carrier} \in \text{carriers}} (\textit{cost\_om\_annual}_\text{cost,tech} \times (\textbf{flow\_cap}_\text{node,tech,carrier}\vee{}0)))&\quad \text{if } (\neg (\exists (\textit{cost\_depreciation\_rate}_\text{cost,tech})) \land \textit{cost\_interest\_rate}_\text{cost,tech}\mathord{>}\text{0}) \\ \end{cases} \]

cost

The total annualised costs of a technology, including installation and operation costs.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ cost }\negthickspace \in \negthickspace\text{ costs } \\ \text{if } (\exists (\textbf{cost\_investment}_\text{node,tech,cost}) \lor \exists (\textbf{cost\_var}_\text{node,tech,cost,timestep})) \end{array} \begin{cases} \textbf{cost\_investment}_\text{node,tech,cost} + \sum\limits_{\text{timestep} \in \text{timesteps}} (\textbf{cost\_var}_\text{node,tech,cost,timestep})&\quad \text{if } (\exists (\textbf{cost\_investment}_\text{node,tech,cost}))\land{}(\exists (\textbf{cost\_var}_\text{node,tech,cost,timestep})) \\ \textbf{cost\_investment}_\text{node,tech,cost}&\quad \text{if } (\exists (\textbf{cost\_investment}_\text{node,tech,cost}))\land{}(\neg (\exists (\textbf{cost\_var}_\text{node,tech,cost,timestep}))) \\ \sum\limits_{\text{timestep} \in \text{timesteps}} (\textbf{cost\_var}_\text{node,tech,cost,timestep})&\quad \text{if } (\neg (\exists (\textbf{cost\_investment}_\text{node,tech,cost})))\land{}(\exists (\textbf{cost\_var}_\text{node,tech,cost,timestep})) \\ 0&\quad \text{if } (\neg (\exists (\textbf{cost\_investment}_\text{node,tech,cost})))\land{}(\neg (\exists (\textbf{cost\_var}_\text{node,tech,cost,timestep}))) \\ \end{cases} \]

Decision Variables

flow_cap

A technology's flow capacity, also known as its nominal or nameplate capacity.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers } \\ \forall\mathbb{R}\; \end{array} \begin{cases} \textit{flow\_cap\_min}_\text{tech} \leq \textbf{flow\_cap}_\text{node,tech,carrier}&\quad \\ \textbf{flow\_cap}_\text{node,tech,carrier} \leq \textit{flow\_cap\_max}_\text{tech}&\quad \\ \end{cases} \]

A transmission technology's flow capacity, also known as its nominal or nameplate capacity.

\[ \begin{array}{r} \forall{} \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \forall\mathbb{R}\; \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{transmission}) \end{array} \begin{cases} 0 \leq \textbf{link\_flow\_cap}_\text{tech}&\quad \\ \textbf{link\_flow\_cap}_\text{tech} \leq inf&\quad \\ \end{cases} \]

flow_out

The outflow of a technology per timestep, also known as the flow discharged (from storage technologies) or the flow received (by transmission technologies) on a link.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{R}\; \text{if } (\exists (\textit{carrier\_out}_\text{node,tech,carrier})) \end{array} \begin{cases} 0 \leq \textbf{flow\_out}_\text{node,tech,carrier,timestep}&\quad \\ \textbf{flow\_out}_\text{node,tech,carrier,timestep} \leq inf&\quad \\ \end{cases} \]

flow_in

The inflow to a technology per timestep, also known as the flow consumed (by storage technologies) or the flow sent (by transmission technologies) on a link.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{R}\; \text{if } (\exists (\textit{carrier\_in}_\text{node,tech,carrier})) \end{array} \begin{cases} 0 \leq \textbf{flow\_in}_\text{node,tech,carrier,timestep}&\quad \\ \textbf{flow\_in}_\text{node,tech,carrier,timestep} \leq inf&\quad \\ \end{cases} \]

flow_export

The flow of a carrier exported outside the system boundaries by a technology per timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{R}\; \text{if } (\exists (\textit{carrier\_export})) \end{array} \begin{cases} 0 \leq \textbf{flow\_export}_\text{node,tech,carrier,timestep}&\quad \\ \textbf{flow\_export}_\text{node,tech,carrier,timestep} \leq inf&\quad \\ \end{cases} \]

area_use

The area in space utilised directly (e.g., solar PV panels) or indirectly (e.g., biofuel crops) by a technology.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \forall\mathbb{R}\; \text{if } (\exists (\textit{area\_use\_min}_\text{tech}) \lor \exists (\textit{area\_use\_max}_\text{tech}) \lor \exists (\textit{area\_use\_per\_flow\_cap}_\text{tech}) \lor \textit{sink\_unit}_\text{tech}\mathord{=}\text{per\_area} \lor \textit{source\_unit}_\text{tech}\mathord{=}\text{per\_area}) \end{array} \begin{cases} \textit{area\_use\_min}_\text{tech} \leq \textbf{area\_use}_\text{node,tech}&\quad \\ \textbf{area\_use}_\text{node,tech} \leq \textit{area\_use\_max}_\text{tech}&\quad \\ \end{cases} \]

source_use

The carrier flow consumed from outside the system boundaries by a supply technology.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{R}\; \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{supply}) \end{array} \begin{cases} 0 \leq \textbf{source\_use}_\text{node,tech,timestep}&\quad \\ \textbf{source\_use}_\text{node,tech,timestep} \leq inf&\quad \\ \end{cases} \]

source_cap

The upper limit on a flow that can be consumed from outside the system boundaries by a supply technology in each timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \forall\mathbb{R}\; \text{if } (\textit{base\_tech}_\text{tech}\mathord{=}\text{supply}) \end{array} \begin{cases} \textit{source\_cap\_min}_\text{tech} \leq \textbf{source\_cap}_\text{node,tech}&\quad \\ \textbf{source\_cap}_\text{node,tech} \leq \textit{source\_cap\_max}_\text{tech}&\quad \\ \end{cases} \]

storage_cap

The upper limit on a carrier that can be stored by a technology in any timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \forall\mathbb{R}\; \text{if } (\textit{include\_storage}_\text{tech}\mathord{=}\text{true} \lor \textit{base\_tech}_\text{tech}\mathord{=}\text{storage}) \end{array} \begin{cases} \textit{storage\_cap\_min}_\text{tech} \leq \textbf{storage\_cap}_\text{node,tech}&\quad \\ \textbf{storage\_cap}_\text{node,tech} \leq \textit{storage\_cap\_max}_\text{tech}&\quad \\ \end{cases} \]

storage

The carrier stored by a storage technology in each timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{R}\; \text{if } (\textit{include\_storage}_\text{tech}\mathord{=}\text{true} \lor \textit{base\_tech}_\text{tech}\mathord{=}\text{storage}) \end{array} \begin{cases} 0 \leq \textbf{storage}_\text{node,tech,timestep}&\quad \\ \textbf{storage}_\text{node,tech,timestep} \leq inf&\quad \\ \end{cases} \]

purchased_units

Integer number of a technology that has been purchased, for any technology set to require integer capacity purchasing. This is used to allow installation of fixed capacity units of technologies ( if flow_cap_max == flow_cap_min) and/or to set a fixed cost for a technology, irrespective of its installed capacity. On top of a fixed technology cost, a continuous cost for the quantity of installed capacity can still be applied.

Since technology capacity is no longer a continuous decision variable, it is possible for these technologies to have a lower bound set on outflow/consumption which will only be enforced in those timesteps that the technology is operating. Otherwise, the same lower bound forces the technology to produce/consume that minimum amount of carrier in every timestep.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs } \\ \forall\mathbb{Z}\; \text{if } (\textit{cap\_method}_\text{tech}\mathord{=}\text{integer}) \end{array} \begin{cases} \textit{purchased\_units\_min}_\text{tech} \leq \textbf{purchased\_units}_\text{node,tech}&\quad \\ \textbf{purchased\_units}_\text{node,tech} \leq \textit{purchased\_units\_max}_\text{tech}&\quad \\ \end{cases} \]

operating_units

Integer number of a technology that is operating in each timestep, for any technology set to require integer capacity purchasing.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{Z}\; \text{if } (\textit{integer\_dispatch}_\text{tech}\mathord{=}\text{true} \land \textit{cap\_method}_\text{tech}\mathord{=}\text{integer}) \end{array} \begin{cases} 0 \leq \textbf{operating\_units}_\text{node,tech,timestep}&\quad \\ \textbf{operating\_units}_\text{node,tech,timestep} \leq inf&\quad \\ \end{cases} \]

available_flow_cap

Flow capacity that will be set to zero if the technology is not operating in a given timestep and will be set to the value of the decision variable flow_cap otherwise.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{R}\; \text{if } (\textit{integer\_dispatch}_\text{tech}\mathord{=}\text{true} \land \exists (\textit{flow\_cap\_max}_\text{tech}) \land \neg (\exists (\textit{flow\_cap\_per\_unit}_\text{tech}))) \end{array} \begin{cases} 0 \leq \textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep}&\quad \\ \textbf{available\_flow\_cap}_\text{node,tech,carrier,timestep} \leq inf&\quad \\ \end{cases} \]

async_flow_switch

Binary switch to force asynchronous outflow/consumption of technologies with both flow_in and flow_out defined. This ensures that a technology with carrier flow efficiencies < 100% cannot produce and consume a flow simultaneously to remove unwanted carrier from the system.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ tech }\negthickspace \in \negthickspace\text{ techs, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{Z}\; \text{if } (\textit{force\_async\_flow}_\text{tech}\mathord{=}\text{true}) \end{array} \begin{cases} 0 \leq \textbf{async\_flow\_switch}_\text{node,tech,timestep}&\quad \\ \textbf{async\_flow\_switch}_\text{node,tech,timestep} \leq 1&\quad \\ \end{cases} \]

unmet_demand

Virtual source of carrier flow to ensure model feasibility. This should only be considered a debugging rather than a modelling tool as it may distort the model in other ways due to the large impact it has on the objective function value. When present in a model in which it has been requested, it indicates an inability for technologies in the model to reach a sufficient combined supply capacity to meet demand.

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{R}\; \text{if } (\text{config.ensure\_feasibility}\mathord{=}\text{true}) \end{array} \begin{cases} 0 \leq \textbf{unmet\_demand}_\text{node,carrier,timestep}&\quad \\ \textbf{unmet\_demand}_\text{node,carrier,timestep} \leq inf&\quad \\ \end{cases} \]

unused_supply

Virtual sink of carrier flow to ensure model feasibility. This should only be considered a debugging rather than a modelling tool as it may distort the model in other ways due to the large impact it has on the objective function value. In model results, the negation of this variable is combined with unmet_demand and presented as only one variable: unmet_demand. When present in a model in which it has been requested, it indicates an inability for technologies in the model to reach a sufficient combined consumption capacity to meet required outflow (e.g. from renewables without the possibility of curtailment).

\[ \begin{array}{r} \forall{} \text{ node }\negthickspace \in \negthickspace\text{ nodes, } \text{ carrier }\negthickspace \in \negthickspace\text{ carriers, } \text{ timestep }\negthickspace \in \negthickspace\text{ timesteps } \\ \forall\mathbb{R}\; \text{if } (\text{config.ensure\_feasibility}\mathord{=}\text{true}) \end{array} \begin{cases} -inf \leq \textbf{unused\_supply}_\text{node,carrier,timestep}&\quad \\ \textbf{unused\_supply}_\text{node,carrier,timestep} \leq 0&\quad \\ \end{cases} \]