Store - Inputs
Stores represent energy storage systems where energy capacity is the primary constraint. Below are all input attributes that you can set for store components.
Basic
| Attribute | Data Type | Unit | Default | Required | Storage Type | Description |
|---|---|---|---|---|---|---|
type | string | n/a | n/a | No | static | Placeholder for store type. Not yet implemented. |
carrier | string | n/a | (empty) | No | static | Carrier type for the store (e.g. heat, gas, hydrogen). Used for categorization and energy balance constraints. |
active | boolean | n/a | True | No | static | Whether this store is active and should be included in network calculations. Set to False to temporarily disable the store without deleting it. |
Capacity
| Attribute | Data Type | Unit | Default | Required | Storage Type | Description |
|---|---|---|---|---|---|---|
e_nom | float | MWh | 0 | Yes | static | The maximum energy storage capacity of the store in MWh. This sets the upper limit for the amount of energy that can be stored. |
e_nom_mod | float | MWh | 0 | No | static | The unit size for capacity expansion. When extending the nominal energy capacity (e_nom), it can only be increased in multiples of this module size. |
e_nom_extendable | boolean | n/a | False | No | static | Switch to allow the nominal energy capacity (e_nom) to be extended in optimization. |
e_nom_min | float | MWh | 0 | No | static | If the nominal energy capacity (e_nom) is extendable in optimization, set its minimum value. |
e_nom_max | float | MWh | inf | No | static | If the nominal energy capacity (e_nom) is extendable in optimization, set its maximum value (e.g. limited by technical potential). |
build_year | int | year | 0 | No | static | The year when the store can be built or commissioned. Essential for multi-year capacity expansion planning models, which determine optimal investment timing and store retirement schedules. |
lifetime | float | years | inf | No | static | The operational lifetime of the store in years. Essential for multi-year capacity expansion planning models, which use this to determine when stores retire (build year + lifetime). Set to "inf" for stores that never retire. |
Energy
| Attribute | Data Type | Unit | Default | Required | Storage Type | Description |
|---|---|---|---|---|---|---|
e_min_pu | float | per unit | 0 | No | static or timeseries | The minimum stored energy per unit of the nominal energy capacity (e_nom). Can be static or time-varying. |
e_max_pu | float | per unit | 1 | No | static or timeseries | The maximum stored energy per unit of the nominal energy capacity (e_nom). Can be static or time-varying. |
e_initial | float | MWh | 0 | No | static | The energy stored at the beginning of the optimization period, before the first snapshot. Ignored if cyclic energy (e_cyclic) is True. |
e_initial_per_period | boolean | n/a | False | No | static | If True, the initial energy (e_initial) is applied at the beginning of each investment period separately, rather than only at the start of the entire optimization horizon. |
e_cyclic | boolean | n/a | False | No | static | If True, the initial energy (e_initial) is ignored and the store must end with the same energy as it started (cyclic constraint). This ensures the store returns to its initial state at the end of the optimization period. |
e_cyclic_per_period | boolean | n/a | True | No | static | If True, the cyclic energy constraint (e_cyclic) is applied to each investment period separately, rather than only to the entire optimization horizon. |
standing_loss | float | per unit | 0 | No | static or timeseries | The self-discharge rate per hour, expressed as a fraction of the current stored energy. Represents energy losses that occur even when the store is idle (e.g., thermal losses, leakage). Can be time-varying. |
Power Limits
| Attribute | Data Type | Unit | Default | Required | Storage Type | Description |
|---|---|---|---|---|---|---|
p_set | float | MW | 0 | No | static or timeseries | Fixed active power flow that the store must maintain (positive for withdrawing energy from the bus, negative for injecting energy into the bus). Used when the power flow is predetermined rather than optimized. |
q_set | float | MVar | 0 | No | static or timeseries | Fixed reactive power flow that the store must maintain. Used when the reactive power flow is predetermined rather than optimized. |
sign | float | n/a | 1 | No | static | Power flow direction convention: 1 for generation/discharging (positive power flows into the network), -1 for consumption/charging (positive power flows out of the network). |
Costs
| Attribute | Data Type | Unit | Default | Required | Storage Type | Description |
|---|---|---|---|---|---|---|
marginal_cost | float | currency/MWh | 0 | No | static or timeseries | The variable cost applied to both charging and discharging 1 MWh of energy. Used by the optimizer to determine the economic dispatch order. |
marginal_cost_quadratic | float | currency/MWh² | 0 | No | static or timeseries | Quadratic term for non-linear cost curves. When set, the total cost includes a quadratic component that increases with the square of energy flow, modeling increasing marginal costs at higher flow levels. |
marginal_cost_storage | float | currency/MWh/h | 0 | No | static or timeseries | The variable cost of storing 1 MWh of energy for one hour. This represents the opportunity cost or wear-and-tear cost associated with storing energy in the store. |
capital_cost | float | currency/MWh | 0 | No | static | The cost per MWh of adding new storage capacity. Includes investment costs (spread over the planning period) and fixed operations & maintenance costs. Only relevant when e_nom_extendable is True. |

