Carriers#
This file states the growth limits of each carrier. It is one of the 25 whole specs of one topic each (fragments) that merge composes into the spec of examples/pypsa.yaml. Its limits contain the sum Carrier_additions, which it lists under given. Carrier_growth_limit compares the additions of each period with those of the period before through shift. Its edge=0 leaves the first period its bare allowance.
given:
expressions:
Carrier_additions: { dims: [carrier, period] }
dimensions:
period:
description: investment periods. It is PyPSA's `investment_periods`
dtype: int
ordered: true
carrier:
description: energy carriers, what a growth limit is set per
parameters:
Carrier_max_growth:
description: >-
most capacity of a carrier that may be added in a period. No value means
no limit. It is the least over the scenarios, as PyPSA takes it
(`global_constraints.py:239-243`), data prep. PyPSA reads it only under
`multi_investment_periods` (`global_constraints.py:232-233`). Otherwise
you feed no value in data prep
dims: [carrier]
missing: absent
Carrier_max_relative_growth:
description: >-
share of the previous period's additions that may be added on top: the
least over the scenarios, as PyPSA takes it, data prep
dims: [carrier]
expressions:
Carrier_relative_growth:
description: >-
the share of the previous period's additions in a carrier's growth
limit, PyPSA's `max_relative_growth` clipped at zero. A negative share
thus adds nothing and never tightens the limit
dims: [carrier]
cases:
positive: { when: Carrier_max_relative_growth > 0, expression: Carrier_max_relative_growth }
otherwise: 0
constraints:
Carrier_growth_limit:
description: >-
`Carrier-growth_limit` — what a carrier adds in a period is at most its
allowance plus a share of what it added the period before. It counts
what its extendable components add, each build in the first period it
is active in. The first period has no predecessor, so `edge=0` leaves it
the bare allowance
dims: [carrier, period]
where: Carrier_max_growth
expression: >-
Carrier_additions
- shift(Carrier_additions, along=period, offset=1, edge=0) * Carrier_relative_growth
<= Carrier_max_growth
Given#
| Symbol | Meaning |
|---|---|
| \(\mathit{Carrier\_additions}\) | Carrier_additions over \(\mathcal{I} \times \mathcal{Y}\), an expression another file defines |
Sets#
| Symbol | Meaning |
|---|---|
| \(\mathcal{I}\) | index \(i\) — carrier — energy carriers, what a growth limit is set per |
| \(\mathcal{Y}\) | index \(y\) — period — investment periods. It is PyPSA's investment_periods |
Parameters#
| Symbol | Meaning |
|---|---|
| \(\overline{\Delta}\) | Carrier_max_growth over \(\mathcal{I}\), absent where the data has no row — most capacity of a carrier that may be added in a period. No value means no limit. It is the least over the scenarios, as PyPSA takes it (global_constraints.py:239-243), data prep. PyPSA reads it only under multi_investment_periods (global_constraints.py:232-233). Otherwise you feed no value in data prep |
| \(\mathrm{r}\) | Carrier_max_relative_growth over \(\mathcal{I}\) — share of the previous period's additions that may be added on top: the least over the scenarios, as PyPSA takes it, data prep |
Definitions#
| Symbol | Meaning |
|---|---|
| \(\mathrm{r}^{+}\) | Carrier_relative_growth over \(\mathcal{I}\) — the share of the previous period's additions in a carrier's growth limit, PyPSA's max_relative_growth clipped at zero. A negative share thus adds nothing and never tightens the limit |
Notation#
| Symbol | Meaning |
|---|---|
| \(t \boxminus_{v} k\) | edge=v — \(t-k\), and \(v\) past the edge |
Definitions#
Carrier_relative_growth
\[
\mathrm{r}^{+}_{i} = \begin{cases} \mathrm{r}_{i} & \text{if } \mathrm{r}_{i} > 0 \\ 0 & \text{otherwise} \end{cases} \qquad \forall\, i \in \mathcal{I}
\]
Subject to#
Carrier_growth_limit
\[
\mathit{Carrier\_additions}_{i,y} - \mathit{Carrier\_additions}_{i,y \boxminus_{0} 1} \cdot \mathrm{r}^{+}_{i} \le \overline{\Delta}_{i} \qquad \forall\, i \in \mathcal{I},\ y \in \mathcal{Y} \,:\, \overline{\Delta}_{i} \text{ is defined}
\]
See also
- PyPSA in 25 files, for how the fragments compose
- PyPSA in one file, for the same spec as one file, rung by rung