Skip to content

Area#

One of the base fragments of Calliope in fragments. Area use, its limits, its tie to flow capacity, and its cost.

dimensions:
  nodes:
    description: Calliope's `nodes` — the places technologies stand at
  techs:
    description: Calliope's `techs` — technologies
  carriers:
    description: Calliope's `carriers` — energy and commodity carriers
  costs:
    description: Calliope's `costs` — cost classes, such as monetary and CO2

parameters:
  area_use_min:
    description: "`area_use_min` — least area use. Calliope's default is 0, and data prep fills it"
    dims: [nodes, techs]
  area_use_max:
    description: "`area_use_max` — most area use. Calliope's default is `.inf`, and data prep fills it"
    dims: [nodes, techs]
  area_use_per_flow_cap:
    description: "`area_use_per_flow_cap` — area use per unit of flow capacity; given only where set"
    dims: [nodes, techs]
  available_area:
    description: "`available_area` — the area every technology at a node may use; given only where set"
    dims: [nodes]
  cost_area_use:
    description: "`cost_area_use` — the cost of one unit of area use"
    dims: [nodes, techs, costs]

variables:
  area_use:
    description: >-
      `area_use` — the area a technology uses. Calliope builds it where
      `area_use_min` is given at all; the least area use is data here, so
      it is built where that is above zero
    dims: [nodes, techs]
    where: area_use_min > 0 OR area_use_max OR area_use_per_flow_cap OR sink_unit == per_area OR source_unit == per_area
    bounds: { lower: area_use_min, upper: area_use_max }
    absence: zero

expressions:
  cost_investment_area_use:
    description: "`cost_investment_area_use` — the investment cost of area use"
    expression: cost_area_use * area_use

given:
  parameters:
    flow_cap_max: { dims: [nodes, techs] }
    sink_unit: { dims: [nodes, techs], dtype: str }
    source_unit: { dims: [nodes, techs], dtype: str }
  variables:
    flow_cap: { dims: [nodes, techs, carriers] }
  expressions:
    cost_investment: { dims: [nodes, techs, costs], term: cost_investment_area_use }

constraints:
  force_zero_area_use:
    description: "`force_zero_area_use` — a technology with no flow capacity uses no area"
    dims: [nodes, techs]
    where: area_use AND flow_cap_max == 0
    expression: area_use == 0
  area_use_per_flow_capacity:
    description: "`area_use_per_flow_capacity` — area use follows flow capacity, where set"
    dims: [nodes, techs, carriers]
    where: flow_cap AND area_use AND area_use_per_flow_cap
    expression: area_use == flow_cap * area_use_per_flow_cap
  area_use_capacity_per_loc:
    description: >-
      `area_use_capacity_per_loc` — the technologies at a node use at most
      its available area. Calliope's `where: area_use` over a node reads as
      any technology there using area
    dims: [nodes]
    where: count(area_use, over=techs) >= 1 AND available_area
    expression: sum(area_use, over=techs) <= available_area

assumptions:
  unbounded_area_use_cost:
    description: Calliope's `unbounded_area_use_cost` — a negative area cost needs a finite maximum
    holds: NOT cost_area_use < 0 OR area_use_max

Sets#

Symbol Meaning
\(\mathcal{N}\) index \(n\) — nodes — Calliope's nodes — the places technologies stand at
\(\mathcal{I}\) index \(i\) — techs — Calliope's techs — technologies
\(\mathcal{C}\) index \(c\) — carriers — Calliope's carriers — energy and commodity carriers
\(\mathcal{K}\) index \(k\) — costs — Calliope's costs — cost classes, such as monetary and CO2

Parameters#

Symbol Meaning
\(\mathrm{area\_use\_min}\) area_use_min over \(\mathcal{N} \times \mathcal{I}\) — area_use_min — least area use. Calliope's default is 0, and data prep fills it
\(\mathrm{area\_use\_max}\) area_use_max over \(\mathcal{N} \times \mathcal{I}\) — area_use_max — most area use. Calliope's default is .inf, and data prep fills it
\(\mathrm{area\_use\_per\_flow\_cap}\) area_use_per_flow_cap over \(\mathcal{N} \times \mathcal{I}\) — area_use_per_flow_cap — area use per unit of flow capacity; given only where set
\(\mathrm{available\_area}\) available_area over \(\mathcal{N}\) — available_area — the area every technology at a node may use; given only where set
\(\mathrm{cost\_area\_use}\) cost_area_use over \(\mathcal{N} \times \mathcal{I} \times \mathcal{K}\) — cost_area_use — the cost of one unit of area use

Variables#

Symbol Meaning
\(\mathit{area\_use}\) area_use over \(\mathcal{N} \times \mathcal{I}\) — area_use — the area a technology uses. Calliope builds it where area_use_min is given at all; the least area use is data here, so it is built where that is above zero

Given#

Symbol Meaning
\(\mathrm{flow\_cap\_max}\) flow_cap_max over \(\mathcal{N} \times \mathcal{I}\), data another file declares
\(\mathrm{sink\_unit}\) sink_unit over \(\mathcal{N} \times \mathcal{I}\), data another file declares
\(\mathrm{source\_unit}\) source_unit over \(\mathcal{N} \times \mathcal{I}\), data another file declares
\(\mathit{flow\_cap}\) flow_cap over \(\mathcal{N} \times \mathcal{I} \times \mathcal{C}\)
\(\mathit{cost\_investment}\) cost_investment over \(\mathcal{N} \times \mathcal{I} \times \mathcal{K}\), an expression this file adds cost_investment_area_use to

Definitions#

Symbol Meaning
\(\mathit{cost\_investment\_area\_use}\) cost_investment_area_use over \(\mathcal{N} \times \mathcal{I} \times \mathcal{K}\) — cost_investment_area_use — the investment cost of area use

Upright is what the data supplies — a parameter such as \(\mathrm{area\_use\_min}\), a coordinate map, a label — and italic is what the solver chooses, such as \(\mathit{area\_use}\). An index is italic too, being what a quantifier chooses, and a set is script.

Subject to#

force_zero_area_use

\[ \mathit{area\_use}_{n,i} = 0 \qquad \forall\, n \in \mathcal{N},\ i \in \mathcal{I} \,:\, \mathit{area\_use}_{n,i} \text{ exists} \wedge \mathrm{flow\_cap\_max}_{n,i} = 0 \]

area_use_per_flow_capacity

\[ \mathit{area\_use}_{n,i} = \mathit{flow\_cap}_{n,i,c} \cdot \mathrm{area\_use\_per\_flow\_cap}_{n,i} \qquad \forall\, n \in \mathcal{N},\ i \in \mathcal{I},\ c \in \mathcal{C} \,:\, \mathit{flow\_cap}_{n,i,c} \text{ exists} \wedge \mathit{area\_use}_{n,i} \text{ exists} \wedge \mathrm{area\_use\_per\_flow\_cap}_{n,i} \text{ is defined} \]

area_use_capacity_per_loc

\[ \sum_{i \in \mathcal{I}} \mathit{area\_use}_{n,i} \le \mathrm{available\_area}_{n} \qquad \forall\, n \in \mathcal{N} \,:\, \lvert \{ i \in \mathcal{I} \,:\, \mathit{area\_use}_{n,i} \text{ exists} \} \rvert \ge 1 \wedge \mathrm{available\_area}_{n} \text{ is defined} \]

Definitions#

cost_investment_area_use

\[ \mathit{cost\_investment\_area\_use}_{n,i,k} = \mathrm{cost\_area\_use}_{n,i,k} \cdot \mathit{area\_use}_{n,i} \qquad \forall\, n \in \mathcal{N},\ i \in \mathcal{I},\ k \in \mathcal{K} \]

Variable domains#

area_use

\[ \mathrm{area\_use\_min}_{n,i} \le \mathit{area\_use}_{n,i} \le \mathrm{area\_use\_max}_{n,i} \qquad \forall\, n \in \mathcal{N},\ i \in \mathcal{I} \,:\, \mathrm{area\_use\_min}_{n,i} > 0 \vee \mathrm{area\_use\_max}_{n,i} \text{ is defined} \vee \mathrm{area\_use\_per\_flow\_cap}_{n,i} \text{ is defined} \vee \mathrm{sink\_unit}_{n,i} = \text{'}\mathrm{per\_area}\text{'} \vee \mathrm{source\_unit}_{n,i} = \text{'}\mathrm{per\_area}\text{'} \]

Assumptions#

unbounded_area_use_cost

\[ \neg \left( \mathrm{cost\_area\_use}_{n,i,k} < 0 \right) \vee \mathrm{area\_use\_max}_{n,i} \text{ is defined} \qquad \forall\, n \in \mathcal{N},\ i \in \mathcal{I},\ k \in \mathcal{K} \]