The Calliope model and backend objects¶
In this tutorial, we use the urban scale example model to go into a bit more detail on the public and non-public properties of the calliope.Model and calliope.Model.backend objects.
from pathlib import Path
import calliope
calliope.set_log_verbosity("INFO", include_solver_output=False)
Model input¶
# Initialise the model with the Urban Scale example model
m = calliope.examples.urban_scale()
[2024-09-10 15:51:43] INFO Model: initialising
[2024-09-10 15:51:43] INFO Model: preprocessing stage 1 (model_run)
[2024-09-10 15:51:49] INFO Model: preprocessing stage 2 (model_data)
[2024-09-10 15:51:49] INFO Model: preprocessing complete
# Get information on the model
print(m.info())
[2024-09-10 15:51:49] WARNING /home/docs/checkouts/readthedocs.org/user_builds/calliope/conda/v0.7.0.dev4/lib/python3.12/site-packages/calliope/model.py:529: FutureWarning: The return type of `Dataset.dims` will be changed to return a set of dimension names in future, in order to be more consistent with `DataArray.dims`. To access a mapping from dimension names to lengths, please use `Dataset.sizes`. msize = dict(self._model_data.dims)
Model name: Urban-scale example model
Model size: {'costs': 1, 'techs': 12, 'carriers': 3, 'nodes': 4, 'timesteps': 48} (30 valid node:tech:carrier combinations)
Model definition dictionary¶
m._model_def_dict is a python dictionary that holds all the data from the model definition YAML files, restructured into one dictionary.
The underscore before the method indicates that it defaults to being hidden (i.e. you wouldn't see it by trying a tab auto-complete and it isn't documented)
m._model_def_dict.keys()
dict_keys(['nodes', 'templates', 'techs', 'parameters'])
techs hold only the information about a technology that is specific to that node
m._model_def_dict["techs"]["pv"]
{'name': 'Solar photovoltaic power',
'color': '#F9D956',
'base_tech': 'supply',
'carrier_out': 'electricity',
'template': 'interest_rate_setter',
'carrier_export': 'electricity',
'source_unit': 'per_area',
'area_use_per_flow_cap': 7,
'flow_out_parasitic_eff': 0.85,
'flow_cap_max': 250,
'area_use_max': 1500,
'lifetime': 25,
'cost_flow_cap': {'data': 1350, 'index': 'monetary', 'dims': 'costs'}}
nodes hold only the information about a technology that is specific to that node
m._model_def_dict["nodes"]["X2"]["techs"]["pv"]
{'cost_flow_out': {'data': -0.0203, 'index': 'monetary', 'dims': 'costs'},
'cost_export': {'data': -0.0491, 'index': 'monetary', 'dims': 'costs'}}
Model data¶
m._model_data is an xarray Dataset.
Like _model_def_dict it is a hidden prperty of the Model as you are expected to access the data via the public property inputs
m.inputs
<xarray.Dataset> Size: 88kB
Dimensions: (costs: 1, techs: 12, carriers: 3, nodes: 4,
timesteps: 48)
Coordinates:
* costs (costs) object 8B 'monetary'
* techs (techs) object 96B 'N1_to_X2' ... 'supply_gri...
* carriers (carriers) object 24B 'electricity' 'gas' 'heat'
* nodes (nodes) object 32B 'N1' 'X1' 'X2' 'X3'
* timesteps (timesteps) datetime64[ns] 384B 2005-07-01 .....
Data variables: (12/35)
bigM float64 8B 1e+06
objective_cost_weights (costs) float64 8B 1.0
base_tech (techs) object 96B 'transmission' ... 'supply'
carrier_export (techs, carriers) float64 288B nan nan ... nan
carrier_in (nodes, techs, carriers) float64 1kB nan ... nan
carrier_out (nodes, techs, carriers) float64 1kB nan ... nan
... ...
longitude (nodes) float64 32B -0.1247 -0.1613 ... -0.1311
source_use_equals (techs, timesteps) float64 5kB nan nan ... nan
sink_use_equals (timesteps, techs, nodes) float64 18kB nan .....
definition_matrix (nodes, techs, carriers) bool 144B False ... ...
timestep_resolution (timesteps) float64 384B 1.0 1.0 1.0 ... 1.0 1.0
timestep_weights (timesteps) float64 384B 1.0 1.0 1.0 ... 1.0 1.0
Attributes:
calliope_version_defined: 0.7.0
calliope_version_initialised: 0.7.0.dev4
applied_overrides:
scenario: None
defaults: {'bigM': 1000000000.0, 'objective_cost_wei...
allow_operate_mode: 1
config: {'build': {'backend': 'pyomo', 'ensure_fea...
applied_additional_math: ['additional_math.yaml']
math: {'constraints': {'flow_capacity_per_storag...
name: Urban-scale example model
timestamp_model_creation: 1725983503.094077- costs: 1
- techs: 12
- carriers: 3
- nodes: 4
- timesteps: 48
- costs(costs)object'monetary'
array(['monetary'], dtype=object)
- techs(techs)object'N1_to_X2' ... 'supply_grid_power'
array(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype=object) - carriers(carriers)object'electricity' 'gas' 'heat'
array(['electricity', 'gas', 'heat'], dtype=object)
- nodes(nodes)object'N1' 'X1' 'X2' 'X3'
array(['N1', 'X1', 'X2', 'X3'], dtype=object)
- timesteps(timesteps)datetime64[ns]2005-07-01 ... 2005-07-02T23:00:00
array(['2005-07-01T00:00:00.000000000', '2005-07-01T01:00:00.000000000', '2005-07-01T02:00:00.000000000', '2005-07-01T03:00:00.000000000', '2005-07-01T04:00:00.000000000', '2005-07-01T05:00:00.000000000', '2005-07-01T06:00:00.000000000', '2005-07-01T07:00:00.000000000', '2005-07-01T08:00:00.000000000', '2005-07-01T09:00:00.000000000', '2005-07-01T10:00:00.000000000', '2005-07-01T11:00:00.000000000', '2005-07-01T12:00:00.000000000', '2005-07-01T13:00:00.000000000', '2005-07-01T14:00:00.000000000', '2005-07-01T15:00:00.000000000', '2005-07-01T16:00:00.000000000', '2005-07-01T17:00:00.000000000', '2005-07-01T18:00:00.000000000', '2005-07-01T19:00:00.000000000', '2005-07-01T20:00:00.000000000', '2005-07-01T21:00:00.000000000', '2005-07-01T22:00:00.000000000', '2005-07-01T23:00:00.000000000', '2005-07-02T00:00:00.000000000', '2005-07-02T01:00:00.000000000', '2005-07-02T02:00:00.000000000', '2005-07-02T03:00:00.000000000', '2005-07-02T04:00:00.000000000', '2005-07-02T05:00:00.000000000', '2005-07-02T06:00:00.000000000', '2005-07-02T07:00:00.000000000', '2005-07-02T08:00:00.000000000', '2005-07-02T09:00:00.000000000', '2005-07-02T10:00:00.000000000', '2005-07-02T11:00:00.000000000', '2005-07-02T12:00:00.000000000', '2005-07-02T13:00:00.000000000', '2005-07-02T14:00:00.000000000', '2005-07-02T15:00:00.000000000', '2005-07-02T16:00:00.000000000', '2005-07-02T17:00:00.000000000', '2005-07-02T18:00:00.000000000', '2005-07-02T19:00:00.000000000', '2005-07-02T20:00:00.000000000', '2005-07-02T21:00:00.000000000', '2005-07-02T22:00:00.000000000', '2005-07-02T23:00:00.000000000'], dtype='datetime64[ns]')
- bigM()float641e+06
- is_result :
- False
- default :
- 1000000000.0
array(1000000.)
- objective_cost_weights(costs)float641.0
- is_result :
- False
- default :
- 1
array([1.])
- base_tech(techs)object'transmission' ... 'supply'
- is_result :
- False
array(['transmission', 'transmission', 'transmission', 'transmission', 'transmission', 'conversion', 'conversion', 'demand', 'demand', 'supply', 'supply', 'supply'], dtype=object) - carrier_export(techs, carriers)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
array([[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, nan], [nan, nan, nan]]) - carrier_in(nodes, techs, carriers)float64nan nan 1.0 nan ... nan nan nan nan
- is_result :
- False
array([[[nan, nan, 1.], [nan, nan, 1.], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, 1.], [ 1., nan, nan], [ 1., nan, nan], [nan, nan, nan], [nan, 1., nan], ... [nan, 1., nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, 1., nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]]]) - carrier_out(nodes, techs, carriers)float64nan nan 1.0 nan ... nan nan nan nan
- is_result :
- False
array([[[nan, nan, 1.], [nan, nan, 1.], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, 1.], [ 1., nan, nan], [ 1., nan, nan], [nan, nan, nan], [ 1., nan, 1.], ... [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, 1., nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, 1., nan], [nan, nan, nan]]]) - color(techs)object'#823739' '#823739' ... '#C5ABE3'
- is_result :
- False
- default :
- nan
array(['#823739', '#823739', '#823739', '#6783E3', '#6783E3', '#8E2999', '#E4AB97', '#072486', '#660507', '#F9D956', '#C98AAD', '#C5ABE3'], dtype=object) - cost_flow_cap(nodes, techs, costs, carriers)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- 0
array([[[[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], ... [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, 7.80e+01]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[1.35e+03, nan, nan]], [[ nan, 1.00e+00, nan]], [[ nan, nan, nan]]]]) - cost_flow_out(techs, costs, carriers, nodes)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- 0
array([[[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], ... [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, -0.0203, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]]]) - cost_interest_rate(techs, costs)float640.1 0.1 0.1 0.1 ... nan 0.1 0.1 0.1
- is_result :
- False
- default :
- 0
array([[0.1], [0.1], [0.1], [0.1], [0.1], [0.1], [0.1], [nan], [nan], [0.1], [0.1], [0.1]]) - flow_cap_max(techs, carriers, nodes)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- inf
array([[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [2000., nan, 2000., nan]], [[ nan, nan, nan, nan], [ nan, nan, nan, nan], [2000., nan, nan, 2000.]], [[ nan, nan, nan, nan], [ nan, nan, nan, nan], [2000., 2000., nan, nan]], [[ nan, 2000., 2000., nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], [[ nan, 2000., nan, 2000.], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], ... [[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], [[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], [[ nan, 250., 250., 50.], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], [[ nan, nan, nan, nan], [ nan, 2000., 2000., 2000.], [ nan, nan, nan, nan]], [[ nan, 2000., nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]]) - flow_out_eff(techs, carriers)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- 1.0
array([[ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [0.98 , nan, nan], [0.98 , nan, nan], [ nan, 0.85 , 0.85 ], [0.405, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan]]) - heat_to_power_ratio(techs)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
array([nan, nan, nan, nan, nan, nan, 0.8, nan, nan, nan, nan, nan])
- lifetime(techs)float6425.0 25.0 25.0 ... 25.0 25.0 25.0
- is_result :
- False
- default :
- inf
array([25., 25., 25., 25., 25., 25., 25., nan, nan, 25., 25., 25.])
- name(techs)object'District heat distribution' ......
- is_result :
- False
- default :
- nan
array(['District heat distribution', 'District heat distribution', 'District heat distribution', 'Electrical power distribution', 'Electrical power distribution', 'Natural gas boiler', 'Combined heat and power', 'Electrical demand', 'Heat demand', 'Solar photovoltaic power', 'Natural gas import', 'National grid import'], dtype=object) - techs_inheritance(techs)object'interest_rate_setter,heat_pipes...
- is_result :
- False
array(['interest_rate_setter,heat_pipes', 'interest_rate_setter,heat_pipes', 'interest_rate_setter,heat_pipes', 'interest_rate_setter,power_lines', 'interest_rate_setter,power_lines', 'interest_rate_setter', 'interest_rate_setter', nan, nan, 'interest_rate_setter', 'interest_rate_setter', 'interest_rate_setter'], dtype=object) - area_use_max(techs)float64nan nan nan nan ... 1.5e+03 nan nan
- is_result :
- False
- default :
- inf
array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, 1500., nan, nan]) - area_use_per_flow_cap(techs)float64nan nan nan nan ... nan 7.0 nan nan
- is_result :
- False
- default :
- nan
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, 7., nan, nan])
- flow_out_parasitic_eff(techs)float64nan nan nan nan ... 0.85 nan nan
- is_result :
- False
- default :
- 1.0
array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.85, nan, nan]) - source_unit(techs)objectnan nan nan ... 'per_area' nan nan
- is_result :
- False
- default :
- absolute
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, 'per_area', nan, nan], dtype=object) - cost_flow_in(techs, costs)float64nan nan nan nan ... nan 0.025 0.1
- is_result :
- False
- default :
- 0
array([[ nan], [ nan], [ nan], [ nan], [ nan], [0.004], [ nan], [ nan], [ nan], [ nan], [0.025], [0.1 ]]) - source_use_max(techs)float64nan nan nan nan ... nan nan inf inf
- is_result :
- False
- default :
- inf
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, inf, inf])
- cost_flow_cap_per_distance(techs, costs)float640.3 0.3 0.3 0.01 ... nan nan nan
- is_result :
- False
- default :
- 0
array([[0.3 ], [0.3 ], [0.3 ], [0.01], [0.01], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan]]) - distance(techs)float643.0 4.0 3.0 10.0 ... nan nan nan
- is_result :
- False
- default :
- 1.0
array([ 3., 4., 3., 10., 5., nan, nan, nan, nan, nan, nan, nan])
- flow_out_eff_per_distance(techs)float640.975 0.975 0.975 ... nan nan nan
- is_result :
- False
- default :
- 1.0
array([0.975, 0.975, 0.975, nan, nan, nan, nan, nan, nan, nan, nan, nan]) - cost_export(nodes, techs, costs, carriers, timesteps)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- 0
array([[[[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], ..., [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], ..., [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]]]) - cost_om_annual(nodes, techs, costs)float64nan nan nan nan ... -80.5 nan nan
- is_result :
- False
- default :
- 0
array([[[ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan]], [[ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], ... [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan]], [[ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [-80.5], [ nan], [ nan]]]) - available_area(nodes)float64nan 500.0 1.3e+03 900.0
- is_result :
- False
- default :
- inf
array([ nan, 500., 1300., 900.])
- latitude(nodes)float6451.45 51.46 51.47 51.43
- is_result :
- False
array([51.4450766, 51.4596158, 51.4652373, 51.4287016])
- longitude(nodes)float64-0.1247 -0.1613 -0.1142 -0.1311
- is_result :
- False
array([-0.1247183, -0.1613446, -0.1141548, -0.1310635])
- source_use_equals(techs, timesteps)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- nan
array([[ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], ... [ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]]) - sink_use_equals(timesteps, techs, nodes)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- nan
array([[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., ... ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]]) - definition_matrix(nodes, techs, carriers)boolFalse False True ... False False
- is_result :
- False
array([[[False, False, True], [False, False, True], [False, False, True], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False]], [[False, False, False], [False, False, False], [False, False, True], [ True, False, False], [ True, False, False], [False, False, False], [ True, True, True], ... [False, True, True], [False, False, False], [ True, False, False], [False, False, True], [ True, False, False], [False, True, False], [False, False, False]], [[False, False, False], [False, False, True], [False, False, False], [False, False, False], [ True, False, False], [False, True, True], [False, False, False], [ True, False, False], [False, False, True], [ True, False, False], [False, True, False], [False, False, False]]]) - timestep_resolution(timesteps)float641.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0
- is_result :
- False
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) - timestep_weights(timesteps)float641.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0
- is_result :
- False
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
- costsPandasIndex
PandasIndex(Index(['monetary'], dtype='object', name='costs'))
- techsPandasIndex
PandasIndex(Index(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype='object', name='techs')) - carriersPandasIndex
PandasIndex(Index(['electricity', 'gas', 'heat'], dtype='object', name='carriers'))
- nodesPandasIndex
PandasIndex(Index(['N1', 'X1', 'X2', 'X3'], dtype='object', name='nodes'))
- timestepsPandasIndex
PandasIndex(DatetimeIndex(['2005-07-01 00:00:00', '2005-07-01 01:00:00', '2005-07-01 02:00:00', '2005-07-01 03:00:00', '2005-07-01 04:00:00', '2005-07-01 05:00:00', '2005-07-01 06:00:00', '2005-07-01 07:00:00', '2005-07-01 08:00:00', '2005-07-01 09:00:00', '2005-07-01 10:00:00', '2005-07-01 11:00:00', '2005-07-01 12:00:00', '2005-07-01 13:00:00', '2005-07-01 14:00:00', '2005-07-01 15:00:00', '2005-07-01 16:00:00', '2005-07-01 17:00:00', '2005-07-01 18:00:00', '2005-07-01 19:00:00', '2005-07-01 20:00:00', '2005-07-01 21:00:00', '2005-07-01 22:00:00', '2005-07-01 23:00:00', '2005-07-02 00:00:00', '2005-07-02 01:00:00', '2005-07-02 02:00:00', '2005-07-02 03:00:00', '2005-07-02 04:00:00', '2005-07-02 05:00:00', '2005-07-02 06:00:00', '2005-07-02 07:00:00', '2005-07-02 08:00:00', '2005-07-02 09:00:00', '2005-07-02 10:00:00', '2005-07-02 11:00:00', '2005-07-02 12:00:00', '2005-07-02 13:00:00', '2005-07-02 14:00:00', '2005-07-02 15:00:00', '2005-07-02 16:00:00', '2005-07-02 17:00:00', '2005-07-02 18:00:00', '2005-07-02 19:00:00', '2005-07-02 20:00:00', '2005-07-02 21:00:00', '2005-07-02 22:00:00', '2005-07-02 23:00:00'], dtype='datetime64[ns]', name='timesteps', freq=None))
- calliope_version_defined :
- 0.7.0
- calliope_version_initialised :
- 0.7.0.dev4
- applied_overrides :
- scenario :
- None
- defaults :
- {'bigM': 1000000000.0, 'objective_cost_weights': 1, 'color': nan, 'name': nan, 'cap_method': 'continuous', 'integer_dispatch': False, 'include_storage': False, 'force_async_flow': False, 'flow_cap_per_storage_cap_min': 0, 'flow_cap_per_storage_cap_max': inf, 'flow_cap': inf, 'flow_cap_max': inf, 'flow_cap_max_systemwide': inf, 'flow_cap_min': 0, 'flow_cap_min_systemwide': 0, 'flow_out_min_relative': 0, 'flow_cap_per_unit': nan, 'flow_in_eff': 1.0, 'flow_out_eff': 1.0, 'flow_out_parasitic_eff': 1.0, 'flow_ramping': 1.0, 'export_max': inf, 'lifetime': inf, 'area_use': inf, 'area_use_max': inf, 'area_use_min': 0, 'area_use_per_flow_cap': nan, 'storage_cap': inf, 'storage_cap_max': inf, 'storage_cap_min': 0, 'storage_cap_per_unit': nan, 'storage_discharge_depth': 0, 'storage_initial': 0, 'storage_loss': 0, 'cyclic_storage': True, 'purchased_units_min_systemwide': 0, 'purchased_units_max_systemwide': inf, 'purchased_units': inf, 'purchased_units_min': 0, 'purchased_units_max': inf, 'sink_unit': 'absolute', 'sink_use_min': 0, 'sink_use_max': inf, 'sink_use_equals': nan, 'source_unit': 'absolute', 'source_cap_equals_flow_cap': False, 'source_eff': 1.0, 'source_use_min': 0, 'source_use_max': inf, 'source_use_equals': nan, 'source_cap': inf, 'source_cap_max': inf, 'source_cap_min': 0, 'one_way': False, 'distance': 1.0, 'flow_in_eff_per_distance': 1.0, 'flow_out_eff_per_distance': 1.0, 'cost_flow_cap_per_distance': 0, 'cost_purchase_per_distance': 0, 'cost_flow_cap': 0, 'cost_export': 0, 'cost_interest_rate': 0, 'cost_om_annual': 0, 'cost_om_annual_investment_fraction': 0, 'cost_flow_in': 0, 'cost_flow_out': 0, 'cost_purchase': 0, 'cost_area_use': 0, 'cost_source_cap': 0, 'cost_storage_cap': 0, 'cost_depreciation_rate': 1, 'available_area': inf}
- allow_operate_mode :
- 1
- config :
- {'build': {'backend': 'pyomo', 'ensure_feasibility': True, 'mode': 'plan', 'objective': 'min_cost_optimisation', 'operate_use_cap_results': False}, 'solve': {'spores_number': 3, 'spores_score_cost_class': 'spores_score', 'spores_save_per_spore': False, 'spores_skip_cost_op': False, 'save_logs': None, 'solver_io': None, 'solver_options': None, 'solver': 'cbc', 'zero_threshold': 1e-10, 'shadow_prices': []}}
- applied_additional_math :
- ['additional_math.yaml']
- math :
- {'constraints': {'flow_capacity_per_storage_capacity_min': {'description': 'Set the lower bound of storage flow capacity relative to its storage capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'storage_cap AND flow_cap_per_storage_cap_min', 'equations': [{'expression': 'flow_cap >= storage_cap * flow_cap_per_storage_cap_min'}]}, 'flow_capacity_per_storage_capacity_max': {'description': 'Set the upper bound of storage flow capacity relative to its storage capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'storage_cap AND flow_cap_per_storage_cap_max', 'equations': [{'expression': 'flow_cap <= storage_cap * flow_cap_per_storage_cap_max'}]}, 'source_capacity_equals_flow_capacity': {'description': "Set a `supply` technology's flow capacity to equal its source capacity.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'source_cap AND source_cap_equals_flow_cap=True', 'equations': [{'expression': 'source_cap == flow_cap'}]}, 'force_zero_area_use': {'description': "Set a technology's area use to zero if its flow capacity upper bound is zero.", 'foreach': ['nodes', 'techs'], 'where': 'area_use AND flow_cap_max=0', 'equations': [{'expression': 'area_use == 0'}]}, 'area_use_per_flow_capacity': {'description': "Set a fixed relationship between a technology's flow capacity and its area use.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'area_use AND area_use_per_flow_cap', 'equations': [{'expression': 'area_use == flow_cap * area_use_per_flow_cap'}]}, 'area_use_capacity_per_loc': {'description': 'Set an upper bound on the total area that all technologies with `area_use` can occupy at a given node.', 'foreach': ['nodes'], 'where': 'area_use AND available_area', 'equations': [{'expression': 'sum(area_use, over=techs) <= available_area'}]}, 'flow_capacity_systemwide_max': {'description': 'Set an upper bound on flow capacity of a technology across all nodes in which the technology exists.', 'foreach': ['techs', 'carriers'], 'where': 'flow_cap_max_systemwide', 'equations': [{'expression': 'sum(flow_cap, over=nodes) <= flow_cap_max_systemwide'}]}, 'flow_capacity_systemwide_min': {'description': 'Set a lower bound on flow capacity of a technology across all nodes in which the technology exists.', 'foreach': ['techs', 'carriers'], 'where': 'flow_cap_min_systemwide', 'equations': [{'expression': 'sum(flow_cap, over=nodes) >= flow_cap_min_systemwide'}]}, 'balance_conversion': {'description': "Fix the relationship between a `conversion` technology's outflow and consumption.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'base_tech=conversion AND NOT include_storage=true', 'equations': [{'where': 'NOT [chp] in techs', 'expression': 'sum(flow_out_inc_eff, over=carriers) == sum(flow_in_inc_eff, over=carriers)'}, {'where': '[chp] in techs', 'expression': 'flow_out_inc_eff[carriers=electricity] == sum(flow_in_inc_eff, over=carriers)'}]}, 'flow_out_max': {'description': "Set the upper bound of a technology's outflow.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_out AND NOT operating_units', 'equations': [{'expression': 'flow_out <= flow_cap * timestep_resolution * flow_out_parasitic_eff'}]}, 'flow_out_min': {'description': "Set the lower bound of a technology's outflow.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out_min_relative AND NOT operating_units', 'equations': [{'expression': 'flow_out >= flow_cap * timestep_resolution * flow_out_min_relative'}]}, 'flow_in_max': {'description': "Set the upper bound of a technology's inflow.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_in AND NOT operating_units', 'equations': [{'expression': 'flow_in <= flow_cap * timestep_resolution'}]}, 'source_max': {'description': "Set the upper bound of a `supply` technology's source consumption.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'source_cap', 'equations': [{'expression': 'source_use <= timestep_resolution * source_cap'}]}, 'storage_max': {'description': 'Set the upper bound of the amount of carrier a technology can store.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'storage', 'equations': [{'expression': 'storage <= storage_cap'}]}, 'storage_discharge_depth_limit': {'description': 'Set the lower bound of the stored carrier a technology must keep in reserve at all times.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'storage AND storage_discharge_depth', 'equations': [{'expression': 'storage - storage_discharge_depth * storage_cap >= 0'}]}, 'system_balance': {'description': '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.', 'foreach': ['nodes', 'carriers', 'timesteps'], 'equations': [{'expression': 'sum(flow_out, over=techs) - sum(flow_in, over=techs) - $flow_export + $unmet_demand_and_unused_supply == 0'}], 'sub_expressions': {'flow_export': [{'where': 'any(carrier_export, over=techs)', 'expression': 'sum(flow_export, over=techs)'}, {'where': 'NOT any(carrier_export, over=techs)', 'expression': '0'}], 'unmet_demand_and_unused_supply': [{'where': 'config.ensure_feasibility=True', 'expression': 'unmet_demand + unused_supply'}, {'where': 'NOT config.ensure_feasibility=True', 'expression': '0'}]}}, 'balance_demand': {'description': 'Set the upper bound on, or a fixed total of, that a demand technology must dump to its sink in each timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'base_tech=demand', 'equations': [{'where': 'sink_use_equals', 'expression': 'flow_in_inc_eff == sink_use_equals * $sink_scaler'}, {'where': 'NOT sink_use_equals AND sink_use_max', 'expression': 'flow_in_inc_eff <= sink_use_max * $sink_scaler'}], 'sub_expressions': {'sink_scaler': [{'where': 'sink_unit=per_area', 'expression': 'area_use'}, {'where': 'sink_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'sink_unit=absolute', 'expression': '1'}]}}, 'balance_demand_min_use': {'description': 'Set the lower bound on the quantity of flow a `demand` technology must dump to its sink in each timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'sink_use_min AND NOT sink_use_equals AND base_tech=demand', 'equations': [{'expression': 'flow_in_inc_eff >= sink_use_min * $sink_scaler'}], 'sub_expressions': {'sink_scaler': [{'where': 'sink_unit=per_area', 'expression': 'area_use'}, {'where': 'sink_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'sink_unit=absolute', 'expression': '1'}]}}, 'balance_supply_no_storage': {'description': 'Fix the outflow of a `supply` technology to its consumption of the available source.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'base_tech=supply AND NOT include_storage=True', 'equations': [{'expression': 'flow_out_inc_eff == source_use * source_eff'}]}, 'balance_supply_with_storage': {'description': '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.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'storage AND base_tech=supply', 'equations': [{'expression': 'storage == $storage_previous_step + source_use * source_eff - flow_out_inc_eff'}], 'sub_expressions': {'storage_previous_step': [{'where': 'timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True', 'expression': 'storage_initial * storage_cap'}, {'where': '(\n (timesteps=get_val_at_index(timesteps=0) AND cyclic_storage=True)\n OR NOT timesteps=get_val_at_index(timesteps=0)\n) AND NOT lookup_cluster_first_timestep=True', 'expression': '(1 - storage_loss) ** roll(timestep_resolution, timesteps=1) * roll(storage, timesteps=1)'}, {'where': 'lookup_cluster_first_timestep=True AND NOT (timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True)', 'expression': '(1 - storage_loss) ** select_from_lookup_arrays(timestep_resolution, timesteps=lookup_cluster_last_timestep) * select_from_lookup_arrays(storage, timesteps=lookup_cluster_last_timestep)'}]}}, 'source_availability_supply': {'description': "Set the upper bound on, or a fixed total of, a `supply` technology's ability to consume its available resource.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'source_use AND (source_use_equals OR source_use_max)', 'equations': [{'where': 'source_use_equals', 'expression': 'source_use == source_use_equals * $source_scaler'}, {'where': 'NOT source_use_equals AND source_use_max', 'expression': 'source_use <= source_use_max * $source_scaler'}], 'sub_expressions': {'source_scaler': [{'where': 'source_unit=per_area', 'expression': 'area_use'}, {'where': 'source_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'source_unit=absolute', 'expression': '1'}]}}, 'balance_supply_min_use': {'description': 'Set the lower bound on the quantity of its source a `supply` technology must use in each timestep.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'source_use_min AND NOT source_use_equals AND base_tech=supply', 'equations': [{'expression': 'source_use >= source_use_min * $source_scaler'}], 'sub_expressions': {'source_scaler': [{'where': 'source_unit=per_area', 'expression': 'area_use'}, {'where': 'source_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'source_unit=absolute', 'expression': '1'}]}}, 'balance_storage': {'description': '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.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': '(include_storage=true or base_tech=storage) AND NOT (base_tech=supply OR base_tech=demand)', 'equations': [{'expression': 'storage == $storage_previous_step -\n sum(flow_out_inc_eff, over=carriers) + sum(flow_in_inc_eff, over=carriers)'}], 'sub_expressions': {'storage_previous_step': [{'where': 'timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True', 'expression': 'storage_initial * storage_cap'}, {'where': '(\n (timesteps=get_val_at_index(timesteps=0) AND cyclic_storage=True)\n OR NOT timesteps=get_val_at_index(timesteps=0)\n) AND NOT lookup_cluster_first_timestep=True', 'expression': '(1 - storage_loss) ** roll(timestep_resolution, timesteps=1) * roll(storage, timesteps=1)'}, {'where': 'lookup_cluster_first_timestep=True AND NOT (timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True)', 'expression': '(1 - storage_loss) ** select_from_lookup_arrays(timestep_resolution, timesteps=lookup_cluster_last_timestep) * select_from_lookup_arrays(storage, timesteps=lookup_cluster_last_timestep)'}]}}, 'set_storage_initial': {'description': 'Fix the relationship between carrier stored in a `storage` technology at the start and end of the whole model period.', 'foreach': ['nodes', 'techs'], 'where': 'storage AND storage_initial AND cyclic_storage=True', 'equations': [{'expression': 'storage[timesteps=$final_step] * (\n (1 - storage_loss) ** timestep_resolution[timesteps=$final_step]\n) == storage_initial * storage_cap'}], 'slices': {'final_step': [{'expression': 'get_val_at_index(timesteps=-1)'}]}, 'active': True}, 'balance_transmission': {'description': 'Fix the relationship between between carrier flowing into and out of a `transmission` link in each timestep.', 'foreach': ['techs', 'timesteps'], 'where': 'base_tech=transmission', 'equations': [{'expression': 'sum(flow_out_inc_eff, over=[nodes, carriers]) == sum(flow_in_inc_eff, over=[nodes, carriers])'}]}, 'symmetric_transmission': {'description': 'Fix the flow capacity of two `transmission` technologies representing the same link in the system.', 'foreach': ['nodes', 'techs'], 'where': 'base_tech=transmission', 'equations': [{'expression': 'sum(flow_cap, over=carriers) == link_flow_cap'}]}, 'export_balance': {'description': "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.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_export', 'equations': [{'expression': 'flow_out >= flow_export'}]}, 'flow_export_max': {'description': "Set the upper bound of a technology's carrier export, for any technologies that can export carriers out of the system.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_export AND export_max', 'equations': [{'where': 'operating_units', 'expression': 'flow_export <= export_max * operating_units'}, {'where': 'NOT operating_units', 'expression': 'flow_export <= export_max'}]}, 'unit_commitment_milp': {'description': '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.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'operating_units AND purchased_units', 'equations': [{'expression': 'operating_units <= purchased_units'}]}, 'available_flow_cap_binary': {'description': 'Limit flow capacity to zero if the technology is not operating in a given timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'available_flow_cap', 'equations': [{'expression': 'available_flow_cap <= flow_cap_max * operating_units'}]}, 'available_flow_cap_continuous': {'description': 'Limit flow capacity to the value of the `flow_cap` decision variable when the technology is operating in a given timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'available_flow_cap', 'equations': [{'expression': 'available_flow_cap <= flow_cap'}]}, 'available_flow_cap_max_binary_continuous_switch': {'description': 'Force flow capacity to equal the value of the `flow_cap` decision variable if the technology is operating in a given timestep, zero otherwise.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'available_flow_cap', 'equations': [{'expression': 'available_flow_cap >= flow_cap + ((operating_units - purchased_units) * flow_cap_max)'}]}, 'flow_out_max_milp': {'description': "Set the upper bound of a technology's ability to produce carriers, for any technology using integer units to define its capacity.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out AND operating_units AND flow_cap_per_unit', 'equations': [{'expression': 'flow_out <= operating_units * timestep_resolution * flow_cap_per_unit * flow_out_parasitic_eff'}]}, 'flow_in_max_milp': {'description': "Set the upper bound of a technology's ability to consume carriers, for any technology using integer units to define its capacity.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_in AND operating_units AND flow_cap_per_unit', 'equations': [{'expression': 'flow_in <= operating_units * timestep_resolution * flow_cap_per_unit'}]}, 'flow_out_min_milp': {'description': "Set the lower bound of a technology's ability to produce carriers, for any technology using integer units to define its capacity.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out AND operating_units AND flow_out_min_relative', 'equations': [{'where': 'flow_cap_per_unit', 'expression': 'flow_out >= operating_units * timestep_resolution * flow_cap_per_unit * flow_out_min_relative'}, {'where': 'available_flow_cap', 'expression': 'flow_out >= available_flow_cap * timestep_resolution * flow_out_min_relative'}]}, 'storage_capacity_units_milp': {'description': 'Fix the storage capacity of any technology using integer units to define its capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'storage AND purchased_units AND storage_cap_per_unit', 'equations': [{'expression': 'storage_cap == purchased_units * storage_cap_per_unit'}]}, 'flow_capacity_units_milp': {'description': 'Fix the flow capacity of any technology using integer units to define its capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'operating_units AND flow_cap_per_unit', 'equations': [{'expression': 'flow_cap == purchased_units * flow_cap_per_unit'}]}, 'flow_capacity_max_purchase_milp': {'description': "Set the upper bound on a technology's flow capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'purchased_units', 'equations': [{'where': 'flow_cap_max', 'expression': 'flow_cap <= flow_cap_max * purchased_units'}, {'where': 'NOT flow_cap_max', 'expression': 'flow_cap <= bigM * purchased_units'}]}, 'flow_capacity_min_purchase_milp': {'description': "Set the lower bound on a technology's flow capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'purchased_units AND flow_cap_min', 'equations': [{'expression': 'flow_cap >= flow_cap_min * purchased_units'}]}, 'storage_capacity_max_purchase_milp': {'description': "Set the upper bound on a technology's storage capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs'], 'where': 'purchased_units AND storage_cap_max', 'equations': [{'expression': 'storage_cap <= storage_cap_max * purchased_units'}]}, 'storage_capacity_min_purchase_milp': {'description': "Set the lower bound on a technology's storage capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs'], 'where': 'purchased_units AND storage_cap_min', 'equations': [{'expression': 'storage_cap >= storage_cap_min * purchased_units'}]}, 'unit_capacity_max_systemwide_milp': {'description': '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.', 'foreach': ['techs'], 'where': 'purchased_units AND purchased_units_max_systemwide', 'equations': [{'expression': 'sum(purchased_units, over=nodes) <= purchased_units_max_systemwide'}]}, 'unit_capacity_min_systemwide_milp': {'description': '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.', 'foreach': ['techs'], 'where': 'purchased_units AND purchased_units_max_systemwide', 'equations': [{'expression': 'sum(purchased_units, over=nodes) >= purchased_units_min_systemwide'}]}, 'async_flow_in_milp': {'description': "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.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'async_flow_switch', 'equations': [{'expression': 'sum(flow_in, over=carriers) <= (1 - async_flow_switch) * bigM'}]}, 'async_flow_out_milp': {'description': "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.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'async_flow_switch', 'equations': [{'expression': 'sum(flow_out, over=carriers) <= async_flow_switch * bigM'}]}, 'ramping_up': {'description': "Set the upper bound on a technology's ability to ramp outflow up beyond a certain percentage compared to the previous timestep.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_ramping AND NOT timesteps=get_val_at_index(timesteps=0)', 'equations': [{'expression': '$flow - roll($flow, timesteps=1) <= flow_ramping * flow_cap'}], 'sub_expressions': {'flow': [{'where': 'carrier_out AND NOT carrier_in', 'expression': 'flow_out / timestep_resolution'}, {'where': 'carrier_in AND NOT carrier_out', 'expression': 'flow_in / timestep_resolution'}, {'where': 'carrier_in AND carrier_out', 'expression': '(flow_out - flow_in) / timestep_resolution'}]}}, 'ramping_down': {'description': "Set the upper bound on a technology's ability to ramp outflow down beyond a certain percentage compared to the previous timestep.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_ramping AND NOT timesteps=get_val_at_index(timesteps=0)', 'equations': [{'expression': '-1 * flow_ramping * flow_cap <= $flow - roll($flow, timesteps=1)'}], 'sub_expressions': {'flow': [{'where': 'carrier_out AND NOT carrier_in', 'expression': 'flow_out / timestep_resolution'}, {'where': 'carrier_in AND NOT carrier_out', 'expression': 'flow_in / timestep_resolution'}, {'where': 'carrier_in AND carrier_out', 'expression': '(flow_out - flow_in) / timestep_resolution'}]}}, 'link_chp_outputs': {'description': 'Fix the relationship between heat and electricity output', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': '[chp] in techs', 'equations': [{'expression': 'flow_out[carriers=electricity] * heat_to_power_ratio == flow_out[carriers=heat]'}]}}, 'variables': {'flow_cap': {'title': 'Technology flow (a.k.a. nominal) capacity', 'description': "A technology's flow capacity, also known as its nominal or nameplate capacity.", 'default': 0, 'unit': 'power', 'foreach': ['nodes', 'techs', 'carriers'], 'bounds': {'min': 'flow_cap_min', 'max': 'flow_cap_max'}}, 'link_flow_cap': {'title': 'Link flow capacity', 'description': "A transmission technology's flow capacity, also known as its nominal or nameplate capacity.", 'default': 0, 'unit': 'power', 'foreach': ['techs'], 'where': 'base_tech=transmission', 'bounds': {'min': 0, 'max': inf}}, 'flow_out': {'title': 'Carrier outflow', 'description': '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.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_out', 'bounds': {'min': 0, 'max': inf}}, 'flow_in': {'title': 'Carrier inflow', 'description': '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.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_in', 'bounds': {'min': 0, 'max': inf}}, 'flow_export': {'title': 'Carrier export', 'description': 'The flow of a carrier exported outside the system boundaries by a technology per timestep.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_export', 'bounds': {'min': 0, 'max': inf}}, 'area_use': {'title': 'Area utilisation', 'description': 'The area in space utilised directly (e.g., solar PV panels) or indirectly (e.g., biofuel crops) by a technology.', 'default': 0, 'unit': 'area', 'foreach': ['nodes', 'techs'], 'where': '(area_use_min OR area_use_max OR area_use_per_flow_cap OR sink_unit=per_area OR source_unit=per_area)', 'bounds': {'min': 'area_use_min', 'max': 'area_use_max'}}, 'source_use': {'title': 'Source flow use', 'description': 'The carrier flow consumed from outside the system boundaries by a `supply` technology.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'base_tech=supply', 'bounds': {'min': 0, 'max': inf}}, 'source_cap': {'title': 'Source flow capacity', 'description': 'The upper limit on a flow that can be consumed from outside the system boundaries by a `supply` technology in each timestep.', 'default': 0, 'unit': 'power', 'foreach': ['nodes', 'techs'], 'where': 'base_tech=supply', 'bounds': {'min': 'source_cap_min', 'max': 'source_cap_max'}}, 'storage_cap': {'title': 'Stored carrier capacity', 'description': 'The upper limit on a carrier that can be stored by a technology in any timestep.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs'], 'where': 'include_storage=True OR base_tech=storage', 'domain': 'real', 'bounds': {'min': 'storage_cap_min', 'max': 'storage_cap_max'}, 'active': True}, 'storage': {'title': 'Stored carrier', 'description': 'The carrier stored by a `storage` technology in each timestep.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'include_storage=True OR base_tech=storage', 'bounds': {'min': 0, 'max': inf}}, 'purchased_units': {'title': 'Number of purchased units', 'description': 'Integer number of a technology that has been purchased,\nfor any technology set to require integer capacity purchasing.\nThis is used to allow installation of fixed capacity units of technologies (\nif `flow_cap_max` == `flow_cap_min`) and/or to set a fixed cost for a technology,\nirrespective of its installed capacity.\nOn top of a fixed technology cost,\na continuous cost for the quantity of installed capacity can still be applied.\n\nSince technology capacity is no longer a continuous decision variable,\nit is possible for these technologies to have a lower bound set on outflow/consumption\nwhich will only be enforced in those timesteps that the technology is operating.\nOtherwise, the same lower bound forces the technology to produce/consume\nthat minimum amount of carrier in *every* timestep.\n', 'default': 0, 'unit': 'integer', 'foreach': ['nodes', 'techs'], 'where': 'cap_method=integer', 'domain': 'integer', 'bounds': {'min': 'purchased_units_min', 'max': 'purchased_units_max'}}, 'operating_units': {'title': 'Number of operating units', 'description': 'Integer number of a technology that is operating in each timestep, for any technology set to require integer capacity purchasing.', 'default': 0, 'unit': 'integer', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'integer_dispatch=True AND cap_method=integer', 'domain': 'integer', 'bounds': {'min': 0, 'max': inf}}, 'available_flow_cap': {'title': 'Available carrier flow capacity', 'description': '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.', 'default': 0, 'unit': 'power', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'integer_dispatch=True AND flow_cap_max AND NOT flow_cap_per_unit', 'bounds': {'min': 0, 'max': inf}}, 'async_flow_switch': {'title': 'Asynchronous carrier flow switch', 'description': '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.', 'default': 0, 'unit': 'integer', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'force_async_flow=True', 'domain': 'integer', 'bounds': {'min': 0, 'max': 1}}, 'unmet_demand': {'title': 'Unmet demand (load shedding)', 'description': '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.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'carriers', 'timesteps'], 'where': 'config.ensure_feasibility=True', 'bounds': {'min': 0, 'max': inf}}, 'unused_supply': {'title': 'Unused supply (curtailment)', 'description': '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).', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'carriers', 'timesteps'], 'where': 'config.ensure_feasibility=True', 'bounds': {'min': -inf, 'max': 0}}}, 'objectives': {'min_cost_optimisation': {'description': '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`.', 'equations': [{'where': 'any(cost, over=[nodes, techs, costs])', 'expression': 'sum(\n sum(cost, over=[nodes, techs])\n * objective_cost_weights,\n over=costs\n) + $unmet_demand'}, {'where': 'NOT any(cost, over=[nodes, techs, costs])', 'expression': '$unmet_demand'}], 'sub_expressions': {'unmet_demand': [{'where': 'config.ensure_feasibility=True', 'expression': 'sum(\n sum(unmet_demand - unused_supply, over=[carriers, nodes])\n * timestep_weights,\n over=timesteps\n) * bigM'}, {'where': 'NOT config.ensure_feasibility=True', 'expression': '0'}]}, 'sense': 'minimise', 'active': True}}, 'global_expressions': {'flow_out_inc_eff': {'title': 'Carrier outflow including losses', 'description': 'Outflows after taking efficiency losses into account.', 'default': 0, 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out', 'equations': [{'where': 'base_tech=transmission', 'expression': 'flow_out / (\n flow_out_eff * flow_out_parasitic_eff *\n flow_out_eff_per_distance ** distance\n)'}, {'where': 'NOT base_tech=transmission', 'expression': 'flow_out / (flow_out_eff * flow_out_parasitic_eff)'}]}, 'flow_in_inc_eff': {'title': 'Carrier inflow including losses', 'description': 'Inflows after taking efficiency losses into account.', 'default': 0, 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_in', 'equations': [{'where': 'base_tech=transmission', 'expression': 'flow_in * flow_in_eff * flow_in_eff_per_distance ** distance'}, {'where': 'NOT base_tech=transmission', 'expression': 'flow_in * flow_in_eff'}]}, 'cost_var': {'title': 'Variable operating costs', 'description': 'The operating costs per timestep of a technology.', 'default': 0, 'unit': 'cost_per_time', 'foreach': ['nodes', 'techs', 'costs', 'timesteps'], 'where': 'cost_export OR cost_flow_in OR cost_flow_out', 'equations': [{'expression': 'timestep_weights * ($cost_export + $cost_flow_out + $cost_flow_in)'}], 'sub_expressions': {'cost_export': [{'where': 'any(carrier_export, over=carriers) AND any(cost_export, over=carriers)', 'expression': 'sum(cost_export * flow_export, over=carriers)'}, {'where': 'NOT (any(carrier_export, over=carriers) AND any(cost_export, over=carriers))', 'expression': '0'}], 'cost_flow_in': [{'where': 'base_tech=supply', 'expression': 'cost_flow_in * source_use'}, {'where': 'NOT base_tech=supply', 'expression': 'sum(cost_flow_in * flow_in, over=carriers)'}], 'cost_flow_out': [{'expression': 'sum(cost_flow_out * flow_out, over=carriers)'}]}}, 'cost_investment_flow_cap': {'title': 'Flow capacity investment costs', 'description': 'The investment costs associated with the nominal/rated capacity of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'carriers', 'costs'], 'where': 'flow_cap AND (cost_flow_cap OR cost_flow_cap_per_distance)', 'equations': [{'expression': '$cost_sum * flow_cap'}], 'sub_expressions': {'cost_sum': [{'where': 'base_tech=transmission', 'expression': '(cost_flow_cap + cost_flow_cap_per_distance * distance) * 0.5'}, {'where': 'NOT base_tech=transmission', 'expression': 'cost_flow_cap'}]}}, 'cost_investment_storage_cap': {'title': 'Storage capacity investment costs', 'description': 'The investment costs associated with the storage capacity of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_storage_cap AND storage_cap', 'equations': [{'expression': 'cost_storage_cap * storage_cap'}]}, 'cost_investment_source_cap': {'title': 'Source flow capacity investment costs', 'description': 'The investment costs associated with the source consumption capacity of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_source_cap AND source_cap', 'equations': [{'expression': 'cost_source_cap * source_cap'}]}, 'cost_investment_area_use': {'title': 'Area utilisation investment costs', 'description': 'The investment costs associated with the area used by a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_area_use AND area_use', 'equations': [{'expression': 'cost_area_use * area_use'}]}, 'cost_investment_purchase': {'title': 'Binary purchase investment costs', 'description': 'The investment costs associated with the binary purchase of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_purchase AND purchased_units', 'equations': [{'where': 'base_tech=transmission', 'expression': '(cost_purchase + cost_purchase_per_distance * distance) * purchased_units * 0.5'}, {'where': 'NOT base_tech=transmission', 'expression': 'cost_purchase * purchased_units'}]}, 'cost_investment': {'title': 'Total investment costs', 'description': 'The installation costs of a technology, including annualised investment costs and annual maintenance costs.', 'default': 0, 'unit': 'cost', 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_investment_flow_cap OR cost_investment_storage_cap OR cost_investment_source_cap OR cost_investment_area_use OR cost_investment_purchase', 'equations': [{'expression': '$annualisation_weight * (\n ($depreciation_rate + cost_om_annual_investment_fraction) * (\n sum(default_if_empty(cost_investment_flow_cap, 0), over=carriers) +\n default_if_empty(cost_investment_storage_cap, 0) +\n default_if_empty(cost_investment_source_cap, 0) +\n default_if_empty(cost_investment_area_use, 0) +\n default_if_empty(cost_investment_purchase, 0)\n )\n + sum(cost_om_annual * flow_cap, over=carriers)\n)\n'}], 'sub_expressions': {'annualisation_weight': [{'expression': 'sum(timestep_resolution * timestep_weights, over=timesteps) / 8760'}], 'depreciation_rate': [{'where': 'cost_depreciation_rate', 'expression': 'cost_depreciation_rate'}, {'where': 'NOT cost_depreciation_rate AND cost_interest_rate=0', 'expression': '1 / lifetime'}, {'where': 'NOT cost_depreciation_rate AND cost_interest_rate>0', 'expression': '(cost_interest_rate * ((1 + cost_interest_rate) ** lifetime)) / (((1 + cost_interest_rate) ** lifetime) - 1)'}]}}, 'cost': {'title': 'Total costs', 'description': 'The total annualised costs of a technology, including installation and operation costs.', 'default': 0, 'unit': 'cost', 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_investment OR cost_var', 'equations': [{'expression': '$cost_investment + $cost_var_sum'}], 'sub_expressions': {'cost_investment': [{'where': 'cost_investment', 'expression': 'cost_investment'}, {'where': 'NOT cost_investment', 'expression': '0'}], 'cost_var_sum': [{'where': 'cost_var', 'expression': 'sum(cost_var, over=timesteps)'}, {'where': 'NOT cost_var', 'expression': '0'}]}, 'active': True}}, 'piecewise_constraints': {}}
- name :
- Urban-scale example model
- timestamp_model_creation :
- 1725983503.094077
Until we solve the model, inputs is the same as _model_data
m._model_data
<xarray.Dataset> Size: 88kB
Dimensions: (costs: 1, techs: 12, carriers: 3, nodes: 4,
timesteps: 48)
Coordinates:
* costs (costs) object 8B 'monetary'
* techs (techs) object 96B 'N1_to_X2' ... 'supply_gri...
* carriers (carriers) object 24B 'electricity' 'gas' 'heat'
* nodes (nodes) object 32B 'N1' 'X1' 'X2' 'X3'
* timesteps (timesteps) datetime64[ns] 384B 2005-07-01 .....
Data variables: (12/35)
bigM float64 8B 1e+06
objective_cost_weights (costs) float64 8B 1.0
base_tech (techs) object 96B 'transmission' ... 'supply'
carrier_export (techs, carriers) float64 288B nan nan ... nan
carrier_in (nodes, techs, carriers) float64 1kB nan ... nan
carrier_out (nodes, techs, carriers) float64 1kB nan ... nan
... ...
longitude (nodes) float64 32B -0.1247 -0.1613 ... -0.1311
source_use_equals (techs, timesteps) float64 5kB nan nan ... nan
sink_use_equals (timesteps, techs, nodes) float64 18kB nan .....
definition_matrix (nodes, techs, carriers) bool 144B False ... ...
timestep_resolution (timesteps) float64 384B 1.0 1.0 1.0 ... 1.0 1.0
timestep_weights (timesteps) float64 384B 1.0 1.0 1.0 ... 1.0 1.0
Attributes:
calliope_version_defined: 0.7.0
calliope_version_initialised: 0.7.0.dev4
applied_overrides:
scenario: None
defaults: {'bigM': 1000000000.0, 'objective_cost_wei...
allow_operate_mode: 1
config: {'build': {'backend': 'pyomo', 'ensure_fea...
applied_additional_math: ['additional_math.yaml']
math: {'constraints': {'flow_capacity_per_storag...
name: Urban-scale example model
timestamp_model_creation: 1725983503.094077- costs: 1
- techs: 12
- carriers: 3
- nodes: 4
- timesteps: 48
- costs(costs)object'monetary'
array(['monetary'], dtype=object)
- techs(techs)object'N1_to_X2' ... 'supply_grid_power'
array(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype=object) - carriers(carriers)object'electricity' 'gas' 'heat'
array(['electricity', 'gas', 'heat'], dtype=object)
- nodes(nodes)object'N1' 'X1' 'X2' 'X3'
array(['N1', 'X1', 'X2', 'X3'], dtype=object)
- timesteps(timesteps)datetime64[ns]2005-07-01 ... 2005-07-02T23:00:00
array(['2005-07-01T00:00:00.000000000', '2005-07-01T01:00:00.000000000', '2005-07-01T02:00:00.000000000', '2005-07-01T03:00:00.000000000', '2005-07-01T04:00:00.000000000', '2005-07-01T05:00:00.000000000', '2005-07-01T06:00:00.000000000', '2005-07-01T07:00:00.000000000', '2005-07-01T08:00:00.000000000', '2005-07-01T09:00:00.000000000', '2005-07-01T10:00:00.000000000', '2005-07-01T11:00:00.000000000', '2005-07-01T12:00:00.000000000', '2005-07-01T13:00:00.000000000', '2005-07-01T14:00:00.000000000', '2005-07-01T15:00:00.000000000', '2005-07-01T16:00:00.000000000', '2005-07-01T17:00:00.000000000', '2005-07-01T18:00:00.000000000', '2005-07-01T19:00:00.000000000', '2005-07-01T20:00:00.000000000', '2005-07-01T21:00:00.000000000', '2005-07-01T22:00:00.000000000', '2005-07-01T23:00:00.000000000', '2005-07-02T00:00:00.000000000', '2005-07-02T01:00:00.000000000', '2005-07-02T02:00:00.000000000', '2005-07-02T03:00:00.000000000', '2005-07-02T04:00:00.000000000', '2005-07-02T05:00:00.000000000', '2005-07-02T06:00:00.000000000', '2005-07-02T07:00:00.000000000', '2005-07-02T08:00:00.000000000', '2005-07-02T09:00:00.000000000', '2005-07-02T10:00:00.000000000', '2005-07-02T11:00:00.000000000', '2005-07-02T12:00:00.000000000', '2005-07-02T13:00:00.000000000', '2005-07-02T14:00:00.000000000', '2005-07-02T15:00:00.000000000', '2005-07-02T16:00:00.000000000', '2005-07-02T17:00:00.000000000', '2005-07-02T18:00:00.000000000', '2005-07-02T19:00:00.000000000', '2005-07-02T20:00:00.000000000', '2005-07-02T21:00:00.000000000', '2005-07-02T22:00:00.000000000', '2005-07-02T23:00:00.000000000'], dtype='datetime64[ns]')
- bigM()float641e+06
- is_result :
- False
- default :
- 1000000000.0
array(1000000.)
- objective_cost_weights(costs)float641.0
- is_result :
- False
- default :
- 1
array([1.])
- base_tech(techs)object'transmission' ... 'supply'
- is_result :
- False
array(['transmission', 'transmission', 'transmission', 'transmission', 'transmission', 'conversion', 'conversion', 'demand', 'demand', 'supply', 'supply', 'supply'], dtype=object) - carrier_export(techs, carriers)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
array([[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, nan], [nan, nan, nan]]) - carrier_in(nodes, techs, carriers)float64nan nan 1.0 nan ... nan nan nan nan
- is_result :
- False
array([[[nan, nan, 1.], [nan, nan, 1.], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, 1.], [ 1., nan, nan], [ 1., nan, nan], [nan, nan, nan], [nan, 1., nan], ... [nan, 1., nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, 1., nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]]]) - carrier_out(nodes, techs, carriers)float64nan nan 1.0 nan ... nan nan nan nan
- is_result :
- False
array([[[nan, nan, 1.], [nan, nan, 1.], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, 1.], [ 1., nan, nan], [ 1., nan, nan], [nan, nan, nan], [ 1., nan, 1.], ... [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, 1., nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, nan, 1.], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [ 1., nan, nan], [nan, 1., nan], [nan, nan, nan]]]) - color(techs)object'#823739' '#823739' ... '#C5ABE3'
- is_result :
- False
- default :
- nan
array(['#823739', '#823739', '#823739', '#6783E3', '#6783E3', '#8E2999', '#E4AB97', '#072486', '#660507', '#F9D956', '#C98AAD', '#C5ABE3'], dtype=object) - cost_flow_cap(nodes, techs, costs, carriers)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- 0
array([[[[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], ... [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, 7.80e+01]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[ nan, nan, nan]], [[1.35e+03, nan, nan]], [[ nan, 1.00e+00, nan]], [[ nan, nan, nan]]]]) - cost_flow_out(techs, costs, carriers, nodes)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- 0
array([[[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], ... [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, -0.0203, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]], [[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]]]) - cost_interest_rate(techs, costs)float640.1 0.1 0.1 0.1 ... nan 0.1 0.1 0.1
- is_result :
- False
- default :
- 0
array([[0.1], [0.1], [0.1], [0.1], [0.1], [0.1], [0.1], [nan], [nan], [0.1], [0.1], [0.1]]) - flow_cap_max(techs, carriers, nodes)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- inf
array([[[ nan, nan, nan, nan], [ nan, nan, nan, nan], [2000., nan, 2000., nan]], [[ nan, nan, nan, nan], [ nan, nan, nan, nan], [2000., nan, nan, 2000.]], [[ nan, nan, nan, nan], [ nan, nan, nan, nan], [2000., 2000., nan, nan]], [[ nan, 2000., 2000., nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], [[ nan, 2000., nan, 2000.], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], ... [[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], [[ nan, nan, nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], [[ nan, 250., 250., 50.], [ nan, nan, nan, nan], [ nan, nan, nan, nan]], [[ nan, nan, nan, nan], [ nan, 2000., 2000., 2000.], [ nan, nan, nan, nan]], [[ nan, 2000., nan, nan], [ nan, nan, nan, nan], [ nan, nan, nan, nan]]]) - flow_out_eff(techs, carriers)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- 1.0
array([[ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [0.98 , nan, nan], [0.98 , nan, nan], [ nan, 0.85 , 0.85 ], [0.405, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan]]) - heat_to_power_ratio(techs)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
array([nan, nan, nan, nan, nan, nan, 0.8, nan, nan, nan, nan, nan])
- lifetime(techs)float6425.0 25.0 25.0 ... 25.0 25.0 25.0
- is_result :
- False
- default :
- inf
array([25., 25., 25., 25., 25., 25., 25., nan, nan, 25., 25., 25.])
- name(techs)object'District heat distribution' ......
- is_result :
- False
- default :
- nan
array(['District heat distribution', 'District heat distribution', 'District heat distribution', 'Electrical power distribution', 'Electrical power distribution', 'Natural gas boiler', 'Combined heat and power', 'Electrical demand', 'Heat demand', 'Solar photovoltaic power', 'Natural gas import', 'National grid import'], dtype=object) - techs_inheritance(techs)object'interest_rate_setter,heat_pipes...
- is_result :
- False
array(['interest_rate_setter,heat_pipes', 'interest_rate_setter,heat_pipes', 'interest_rate_setter,heat_pipes', 'interest_rate_setter,power_lines', 'interest_rate_setter,power_lines', 'interest_rate_setter', 'interest_rate_setter', nan, nan, 'interest_rate_setter', 'interest_rate_setter', 'interest_rate_setter'], dtype=object) - area_use_max(techs)float64nan nan nan nan ... 1.5e+03 nan nan
- is_result :
- False
- default :
- inf
array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, 1500., nan, nan]) - area_use_per_flow_cap(techs)float64nan nan nan nan ... nan 7.0 nan nan
- is_result :
- False
- default :
- nan
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, 7., nan, nan])
- flow_out_parasitic_eff(techs)float64nan nan nan nan ... 0.85 nan nan
- is_result :
- False
- default :
- 1.0
array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.85, nan, nan]) - source_unit(techs)objectnan nan nan ... 'per_area' nan nan
- is_result :
- False
- default :
- absolute
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, 'per_area', nan, nan], dtype=object) - cost_flow_in(techs, costs)float64nan nan nan nan ... nan 0.025 0.1
- is_result :
- False
- default :
- 0
array([[ nan], [ nan], [ nan], [ nan], [ nan], [0.004], [ nan], [ nan], [ nan], [ nan], [0.025], [0.1 ]]) - source_use_max(techs)float64nan nan nan nan ... nan nan inf inf
- is_result :
- False
- default :
- inf
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, inf, inf])
- cost_flow_cap_per_distance(techs, costs)float640.3 0.3 0.3 0.01 ... nan nan nan
- is_result :
- False
- default :
- 0
array([[0.3 ], [0.3 ], [0.3 ], [0.01], [0.01], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan]]) - distance(techs)float643.0 4.0 3.0 10.0 ... nan nan nan
- is_result :
- False
- default :
- 1.0
array([ 3., 4., 3., 10., 5., nan, nan, nan, nan, nan, nan, nan])
- flow_out_eff_per_distance(techs)float640.975 0.975 0.975 ... nan nan nan
- is_result :
- False
- default :
- 1.0
array([0.975, 0.975, 0.975, nan, nan, nan, nan, nan, nan, nan, nan, nan]) - cost_export(nodes, techs, costs, carriers, timesteps)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- 0
array([[[[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], ..., [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], ..., [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]], [[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]]]) - cost_om_annual(nodes, techs, costs)float64nan nan nan nan ... -80.5 nan nan
- is_result :
- False
- default :
- 0
array([[[ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan]], [[ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], ... [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan]], [[ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [-80.5], [ nan], [ nan]]]) - available_area(nodes)float64nan 500.0 1.3e+03 900.0
- is_result :
- False
- default :
- inf
array([ nan, 500., 1300., 900.])
- latitude(nodes)float6451.45 51.46 51.47 51.43
- is_result :
- False
array([51.4450766, 51.4596158, 51.4652373, 51.4287016])
- longitude(nodes)float64-0.1247 -0.1613 -0.1142 -0.1311
- is_result :
- False
array([-0.1247183, -0.1613446, -0.1141548, -0.1310635])
- source_use_equals(techs, timesteps)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- nan
array([[ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], ... [ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]]) - sink_use_equals(timesteps, techs, nodes)float64nan nan nan nan ... nan nan nan nan
- is_result :
- False
- default :
- nan
array([[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., ... ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]]) - definition_matrix(nodes, techs, carriers)boolFalse False True ... False False
- is_result :
- False
array([[[False, False, True], [False, False, True], [False, False, True], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False], [False, False, False]], [[False, False, False], [False, False, False], [False, False, True], [ True, False, False], [ True, False, False], [False, False, False], [ True, True, True], ... [False, True, True], [False, False, False], [ True, False, False], [False, False, True], [ True, False, False], [False, True, False], [False, False, False]], [[False, False, False], [False, False, True], [False, False, False], [False, False, False], [ True, False, False], [False, True, True], [False, False, False], [ True, False, False], [False, False, True], [ True, False, False], [False, True, False], [False, False, False]]]) - timestep_resolution(timesteps)float641.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0
- is_result :
- False
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) - timestep_weights(timesteps)float641.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0
- is_result :
- False
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
- costsPandasIndex
PandasIndex(Index(['monetary'], dtype='object', name='costs'))
- techsPandasIndex
PandasIndex(Index(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype='object', name='techs')) - carriersPandasIndex
PandasIndex(Index(['electricity', 'gas', 'heat'], dtype='object', name='carriers'))
- nodesPandasIndex
PandasIndex(Index(['N1', 'X1', 'X2', 'X3'], dtype='object', name='nodes'))
- timestepsPandasIndex
PandasIndex(DatetimeIndex(['2005-07-01 00:00:00', '2005-07-01 01:00:00', '2005-07-01 02:00:00', '2005-07-01 03:00:00', '2005-07-01 04:00:00', '2005-07-01 05:00:00', '2005-07-01 06:00:00', '2005-07-01 07:00:00', '2005-07-01 08:00:00', '2005-07-01 09:00:00', '2005-07-01 10:00:00', '2005-07-01 11:00:00', '2005-07-01 12:00:00', '2005-07-01 13:00:00', '2005-07-01 14:00:00', '2005-07-01 15:00:00', '2005-07-01 16:00:00', '2005-07-01 17:00:00', '2005-07-01 18:00:00', '2005-07-01 19:00:00', '2005-07-01 20:00:00', '2005-07-01 21:00:00', '2005-07-01 22:00:00', '2005-07-01 23:00:00', '2005-07-02 00:00:00', '2005-07-02 01:00:00', '2005-07-02 02:00:00', '2005-07-02 03:00:00', '2005-07-02 04:00:00', '2005-07-02 05:00:00', '2005-07-02 06:00:00', '2005-07-02 07:00:00', '2005-07-02 08:00:00', '2005-07-02 09:00:00', '2005-07-02 10:00:00', '2005-07-02 11:00:00', '2005-07-02 12:00:00', '2005-07-02 13:00:00', '2005-07-02 14:00:00', '2005-07-02 15:00:00', '2005-07-02 16:00:00', '2005-07-02 17:00:00', '2005-07-02 18:00:00', '2005-07-02 19:00:00', '2005-07-02 20:00:00', '2005-07-02 21:00:00', '2005-07-02 22:00:00', '2005-07-02 23:00:00'], dtype='datetime64[ns]', name='timesteps', freq=None))
- calliope_version_defined :
- 0.7.0
- calliope_version_initialised :
- 0.7.0.dev4
- applied_overrides :
- scenario :
- None
- defaults :
- {'bigM': 1000000000.0, 'objective_cost_weights': 1, 'color': nan, 'name': nan, 'cap_method': 'continuous', 'integer_dispatch': False, 'include_storage': False, 'force_async_flow': False, 'flow_cap_per_storage_cap_min': 0, 'flow_cap_per_storage_cap_max': inf, 'flow_cap': inf, 'flow_cap_max': inf, 'flow_cap_max_systemwide': inf, 'flow_cap_min': 0, 'flow_cap_min_systemwide': 0, 'flow_out_min_relative': 0, 'flow_cap_per_unit': nan, 'flow_in_eff': 1.0, 'flow_out_eff': 1.0, 'flow_out_parasitic_eff': 1.0, 'flow_ramping': 1.0, 'export_max': inf, 'lifetime': inf, 'area_use': inf, 'area_use_max': inf, 'area_use_min': 0, 'area_use_per_flow_cap': nan, 'storage_cap': inf, 'storage_cap_max': inf, 'storage_cap_min': 0, 'storage_cap_per_unit': nan, 'storage_discharge_depth': 0, 'storage_initial': 0, 'storage_loss': 0, 'cyclic_storage': True, 'purchased_units_min_systemwide': 0, 'purchased_units_max_systemwide': inf, 'purchased_units': inf, 'purchased_units_min': 0, 'purchased_units_max': inf, 'sink_unit': 'absolute', 'sink_use_min': 0, 'sink_use_max': inf, 'sink_use_equals': nan, 'source_unit': 'absolute', 'source_cap_equals_flow_cap': False, 'source_eff': 1.0, 'source_use_min': 0, 'source_use_max': inf, 'source_use_equals': nan, 'source_cap': inf, 'source_cap_max': inf, 'source_cap_min': 0, 'one_way': False, 'distance': 1.0, 'flow_in_eff_per_distance': 1.0, 'flow_out_eff_per_distance': 1.0, 'cost_flow_cap_per_distance': 0, 'cost_purchase_per_distance': 0, 'cost_flow_cap': 0, 'cost_export': 0, 'cost_interest_rate': 0, 'cost_om_annual': 0, 'cost_om_annual_investment_fraction': 0, 'cost_flow_in': 0, 'cost_flow_out': 0, 'cost_purchase': 0, 'cost_area_use': 0, 'cost_source_cap': 0, 'cost_storage_cap': 0, 'cost_depreciation_rate': 1, 'available_area': inf}
- allow_operate_mode :
- 1
- config :
- {'build': {'backend': 'pyomo', 'ensure_feasibility': True, 'mode': 'plan', 'objective': 'min_cost_optimisation', 'operate_use_cap_results': False}, 'solve': {'spores_number': 3, 'spores_score_cost_class': 'spores_score', 'spores_save_per_spore': False, 'spores_skip_cost_op': False, 'save_logs': None, 'solver_io': None, 'solver_options': None, 'solver': 'cbc', 'zero_threshold': 1e-10, 'shadow_prices': []}}
- applied_additional_math :
- ['additional_math.yaml']
- math :
- {'constraints': {'flow_capacity_per_storage_capacity_min': {'description': 'Set the lower bound of storage flow capacity relative to its storage capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'storage_cap AND flow_cap_per_storage_cap_min', 'equations': [{'expression': 'flow_cap >= storage_cap * flow_cap_per_storage_cap_min'}]}, 'flow_capacity_per_storage_capacity_max': {'description': 'Set the upper bound of storage flow capacity relative to its storage capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'storage_cap AND flow_cap_per_storage_cap_max', 'equations': [{'expression': 'flow_cap <= storage_cap * flow_cap_per_storage_cap_max'}]}, 'source_capacity_equals_flow_capacity': {'description': "Set a `supply` technology's flow capacity to equal its source capacity.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'source_cap AND source_cap_equals_flow_cap=True', 'equations': [{'expression': 'source_cap == flow_cap'}]}, 'force_zero_area_use': {'description': "Set a technology's area use to zero if its flow capacity upper bound is zero.", 'foreach': ['nodes', 'techs'], 'where': 'area_use AND flow_cap_max=0', 'equations': [{'expression': 'area_use == 0'}]}, 'area_use_per_flow_capacity': {'description': "Set a fixed relationship between a technology's flow capacity and its area use.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'area_use AND area_use_per_flow_cap', 'equations': [{'expression': 'area_use == flow_cap * area_use_per_flow_cap'}]}, 'area_use_capacity_per_loc': {'description': 'Set an upper bound on the total area that all technologies with `area_use` can occupy at a given node.', 'foreach': ['nodes'], 'where': 'area_use AND available_area', 'equations': [{'expression': 'sum(area_use, over=techs) <= available_area'}]}, 'flow_capacity_systemwide_max': {'description': 'Set an upper bound on flow capacity of a technology across all nodes in which the technology exists.', 'foreach': ['techs', 'carriers'], 'where': 'flow_cap_max_systemwide', 'equations': [{'expression': 'sum(flow_cap, over=nodes) <= flow_cap_max_systemwide'}]}, 'flow_capacity_systemwide_min': {'description': 'Set a lower bound on flow capacity of a technology across all nodes in which the technology exists.', 'foreach': ['techs', 'carriers'], 'where': 'flow_cap_min_systemwide', 'equations': [{'expression': 'sum(flow_cap, over=nodes) >= flow_cap_min_systemwide'}]}, 'balance_conversion': {'description': "Fix the relationship between a `conversion` technology's outflow and consumption.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'base_tech=conversion AND NOT include_storage=true', 'equations': [{'where': 'NOT [chp] in techs', 'expression': 'sum(flow_out_inc_eff, over=carriers) == sum(flow_in_inc_eff, over=carriers)'}, {'where': '[chp] in techs', 'expression': 'flow_out_inc_eff[carriers=electricity] == sum(flow_in_inc_eff, over=carriers)'}]}, 'flow_out_max': {'description': "Set the upper bound of a technology's outflow.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_out AND NOT operating_units', 'equations': [{'expression': 'flow_out <= flow_cap * timestep_resolution * flow_out_parasitic_eff'}]}, 'flow_out_min': {'description': "Set the lower bound of a technology's outflow.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out_min_relative AND NOT operating_units', 'equations': [{'expression': 'flow_out >= flow_cap * timestep_resolution * flow_out_min_relative'}]}, 'flow_in_max': {'description': "Set the upper bound of a technology's inflow.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_in AND NOT operating_units', 'equations': [{'expression': 'flow_in <= flow_cap * timestep_resolution'}]}, 'source_max': {'description': "Set the upper bound of a `supply` technology's source consumption.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'source_cap', 'equations': [{'expression': 'source_use <= timestep_resolution * source_cap'}]}, 'storage_max': {'description': 'Set the upper bound of the amount of carrier a technology can store.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'storage', 'equations': [{'expression': 'storage <= storage_cap'}]}, 'storage_discharge_depth_limit': {'description': 'Set the lower bound of the stored carrier a technology must keep in reserve at all times.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'storage AND storage_discharge_depth', 'equations': [{'expression': 'storage - storage_discharge_depth * storage_cap >= 0'}]}, 'system_balance': {'description': '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.', 'foreach': ['nodes', 'carriers', 'timesteps'], 'equations': [{'expression': 'sum(flow_out, over=techs) - sum(flow_in, over=techs) - $flow_export + $unmet_demand_and_unused_supply == 0'}], 'sub_expressions': {'flow_export': [{'where': 'any(carrier_export, over=techs)', 'expression': 'sum(flow_export, over=techs)'}, {'where': 'NOT any(carrier_export, over=techs)', 'expression': '0'}], 'unmet_demand_and_unused_supply': [{'where': 'config.ensure_feasibility=True', 'expression': 'unmet_demand + unused_supply'}, {'where': 'NOT config.ensure_feasibility=True', 'expression': '0'}]}}, 'balance_demand': {'description': 'Set the upper bound on, or a fixed total of, that a demand technology must dump to its sink in each timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'base_tech=demand', 'equations': [{'where': 'sink_use_equals', 'expression': 'flow_in_inc_eff == sink_use_equals * $sink_scaler'}, {'where': 'NOT sink_use_equals AND sink_use_max', 'expression': 'flow_in_inc_eff <= sink_use_max * $sink_scaler'}], 'sub_expressions': {'sink_scaler': [{'where': 'sink_unit=per_area', 'expression': 'area_use'}, {'where': 'sink_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'sink_unit=absolute', 'expression': '1'}]}}, 'balance_demand_min_use': {'description': 'Set the lower bound on the quantity of flow a `demand` technology must dump to its sink in each timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'sink_use_min AND NOT sink_use_equals AND base_tech=demand', 'equations': [{'expression': 'flow_in_inc_eff >= sink_use_min * $sink_scaler'}], 'sub_expressions': {'sink_scaler': [{'where': 'sink_unit=per_area', 'expression': 'area_use'}, {'where': 'sink_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'sink_unit=absolute', 'expression': '1'}]}}, 'balance_supply_no_storage': {'description': 'Fix the outflow of a `supply` technology to its consumption of the available source.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'base_tech=supply AND NOT include_storage=True', 'equations': [{'expression': 'flow_out_inc_eff == source_use * source_eff'}]}, 'balance_supply_with_storage': {'description': '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.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'storage AND base_tech=supply', 'equations': [{'expression': 'storage == $storage_previous_step + source_use * source_eff - flow_out_inc_eff'}], 'sub_expressions': {'storage_previous_step': [{'where': 'timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True', 'expression': 'storage_initial * storage_cap'}, {'where': '(\n (timesteps=get_val_at_index(timesteps=0) AND cyclic_storage=True)\n OR NOT timesteps=get_val_at_index(timesteps=0)\n) AND NOT lookup_cluster_first_timestep=True', 'expression': '(1 - storage_loss) ** roll(timestep_resolution, timesteps=1) * roll(storage, timesteps=1)'}, {'where': 'lookup_cluster_first_timestep=True AND NOT (timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True)', 'expression': '(1 - storage_loss) ** select_from_lookup_arrays(timestep_resolution, timesteps=lookup_cluster_last_timestep) * select_from_lookup_arrays(storage, timesteps=lookup_cluster_last_timestep)'}]}}, 'source_availability_supply': {'description': "Set the upper bound on, or a fixed total of, a `supply` technology's ability to consume its available resource.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'source_use AND (source_use_equals OR source_use_max)', 'equations': [{'where': 'source_use_equals', 'expression': 'source_use == source_use_equals * $source_scaler'}, {'where': 'NOT source_use_equals AND source_use_max', 'expression': 'source_use <= source_use_max * $source_scaler'}], 'sub_expressions': {'source_scaler': [{'where': 'source_unit=per_area', 'expression': 'area_use'}, {'where': 'source_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'source_unit=absolute', 'expression': '1'}]}}, 'balance_supply_min_use': {'description': 'Set the lower bound on the quantity of its source a `supply` technology must use in each timestep.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'source_use_min AND NOT source_use_equals AND base_tech=supply', 'equations': [{'expression': 'source_use >= source_use_min * $source_scaler'}], 'sub_expressions': {'source_scaler': [{'where': 'source_unit=per_area', 'expression': 'area_use'}, {'where': 'source_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'source_unit=absolute', 'expression': '1'}]}}, 'balance_storage': {'description': '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.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': '(include_storage=true or base_tech=storage) AND NOT (base_tech=supply OR base_tech=demand)', 'equations': [{'expression': 'storage == $storage_previous_step -\n sum(flow_out_inc_eff, over=carriers) + sum(flow_in_inc_eff, over=carriers)'}], 'sub_expressions': {'storage_previous_step': [{'where': 'timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True', 'expression': 'storage_initial * storage_cap'}, {'where': '(\n (timesteps=get_val_at_index(timesteps=0) AND cyclic_storage=True)\n OR NOT timesteps=get_val_at_index(timesteps=0)\n) AND NOT lookup_cluster_first_timestep=True', 'expression': '(1 - storage_loss) ** roll(timestep_resolution, timesteps=1) * roll(storage, timesteps=1)'}, {'where': 'lookup_cluster_first_timestep=True AND NOT (timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True)', 'expression': '(1 - storage_loss) ** select_from_lookup_arrays(timestep_resolution, timesteps=lookup_cluster_last_timestep) * select_from_lookup_arrays(storage, timesteps=lookup_cluster_last_timestep)'}]}}, 'set_storage_initial': {'description': 'Fix the relationship between carrier stored in a `storage` technology at the start and end of the whole model period.', 'foreach': ['nodes', 'techs'], 'where': 'storage AND storage_initial AND cyclic_storage=True', 'equations': [{'expression': 'storage[timesteps=$final_step] * (\n (1 - storage_loss) ** timestep_resolution[timesteps=$final_step]\n) == storage_initial * storage_cap'}], 'slices': {'final_step': [{'expression': 'get_val_at_index(timesteps=-1)'}]}, 'active': True}, 'balance_transmission': {'description': 'Fix the relationship between between carrier flowing into and out of a `transmission` link in each timestep.', 'foreach': ['techs', 'timesteps'], 'where': 'base_tech=transmission', 'equations': [{'expression': 'sum(flow_out_inc_eff, over=[nodes, carriers]) == sum(flow_in_inc_eff, over=[nodes, carriers])'}]}, 'symmetric_transmission': {'description': 'Fix the flow capacity of two `transmission` technologies representing the same link in the system.', 'foreach': ['nodes', 'techs'], 'where': 'base_tech=transmission', 'equations': [{'expression': 'sum(flow_cap, over=carriers) == link_flow_cap'}]}, 'export_balance': {'description': "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.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_export', 'equations': [{'expression': 'flow_out >= flow_export'}]}, 'flow_export_max': {'description': "Set the upper bound of a technology's carrier export, for any technologies that can export carriers out of the system.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_export AND export_max', 'equations': [{'where': 'operating_units', 'expression': 'flow_export <= export_max * operating_units'}, {'where': 'NOT operating_units', 'expression': 'flow_export <= export_max'}]}, 'unit_commitment_milp': {'description': '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.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'operating_units AND purchased_units', 'equations': [{'expression': 'operating_units <= purchased_units'}]}, 'available_flow_cap_binary': {'description': 'Limit flow capacity to zero if the technology is not operating in a given timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'available_flow_cap', 'equations': [{'expression': 'available_flow_cap <= flow_cap_max * operating_units'}]}, 'available_flow_cap_continuous': {'description': 'Limit flow capacity to the value of the `flow_cap` decision variable when the technology is operating in a given timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'available_flow_cap', 'equations': [{'expression': 'available_flow_cap <= flow_cap'}]}, 'available_flow_cap_max_binary_continuous_switch': {'description': 'Force flow capacity to equal the value of the `flow_cap` decision variable if the technology is operating in a given timestep, zero otherwise.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'available_flow_cap', 'equations': [{'expression': 'available_flow_cap >= flow_cap + ((operating_units - purchased_units) * flow_cap_max)'}]}, 'flow_out_max_milp': {'description': "Set the upper bound of a technology's ability to produce carriers, for any technology using integer units to define its capacity.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out AND operating_units AND flow_cap_per_unit', 'equations': [{'expression': 'flow_out <= operating_units * timestep_resolution * flow_cap_per_unit * flow_out_parasitic_eff'}]}, 'flow_in_max_milp': {'description': "Set the upper bound of a technology's ability to consume carriers, for any technology using integer units to define its capacity.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_in AND operating_units AND flow_cap_per_unit', 'equations': [{'expression': 'flow_in <= operating_units * timestep_resolution * flow_cap_per_unit'}]}, 'flow_out_min_milp': {'description': "Set the lower bound of a technology's ability to produce carriers, for any technology using integer units to define its capacity.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out AND operating_units AND flow_out_min_relative', 'equations': [{'where': 'flow_cap_per_unit', 'expression': 'flow_out >= operating_units * timestep_resolution * flow_cap_per_unit * flow_out_min_relative'}, {'where': 'available_flow_cap', 'expression': 'flow_out >= available_flow_cap * timestep_resolution * flow_out_min_relative'}]}, 'storage_capacity_units_milp': {'description': 'Fix the storage capacity of any technology using integer units to define its capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'storage AND purchased_units AND storage_cap_per_unit', 'equations': [{'expression': 'storage_cap == purchased_units * storage_cap_per_unit'}]}, 'flow_capacity_units_milp': {'description': 'Fix the flow capacity of any technology using integer units to define its capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'operating_units AND flow_cap_per_unit', 'equations': [{'expression': 'flow_cap == purchased_units * flow_cap_per_unit'}]}, 'flow_capacity_max_purchase_milp': {'description': "Set the upper bound on a technology's flow capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'purchased_units', 'equations': [{'where': 'flow_cap_max', 'expression': 'flow_cap <= flow_cap_max * purchased_units'}, {'where': 'NOT flow_cap_max', 'expression': 'flow_cap <= bigM * purchased_units'}]}, 'flow_capacity_min_purchase_milp': {'description': "Set the lower bound on a technology's flow capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'purchased_units AND flow_cap_min', 'equations': [{'expression': 'flow_cap >= flow_cap_min * purchased_units'}]}, 'storage_capacity_max_purchase_milp': {'description': "Set the upper bound on a technology's storage capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs'], 'where': 'purchased_units AND storage_cap_max', 'equations': [{'expression': 'storage_cap <= storage_cap_max * purchased_units'}]}, 'storage_capacity_min_purchase_milp': {'description': "Set the lower bound on a technology's storage capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs'], 'where': 'purchased_units AND storage_cap_min', 'equations': [{'expression': 'storage_cap >= storage_cap_min * purchased_units'}]}, 'unit_capacity_max_systemwide_milp': {'description': '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.', 'foreach': ['techs'], 'where': 'purchased_units AND purchased_units_max_systemwide', 'equations': [{'expression': 'sum(purchased_units, over=nodes) <= purchased_units_max_systemwide'}]}, 'unit_capacity_min_systemwide_milp': {'description': '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.', 'foreach': ['techs'], 'where': 'purchased_units AND purchased_units_max_systemwide', 'equations': [{'expression': 'sum(purchased_units, over=nodes) >= purchased_units_min_systemwide'}]}, 'async_flow_in_milp': {'description': "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.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'async_flow_switch', 'equations': [{'expression': 'sum(flow_in, over=carriers) <= (1 - async_flow_switch) * bigM'}]}, 'async_flow_out_milp': {'description': "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.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'async_flow_switch', 'equations': [{'expression': 'sum(flow_out, over=carriers) <= async_flow_switch * bigM'}]}, 'ramping_up': {'description': "Set the upper bound on a technology's ability to ramp outflow up beyond a certain percentage compared to the previous timestep.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_ramping AND NOT timesteps=get_val_at_index(timesteps=0)', 'equations': [{'expression': '$flow - roll($flow, timesteps=1) <= flow_ramping * flow_cap'}], 'sub_expressions': {'flow': [{'where': 'carrier_out AND NOT carrier_in', 'expression': 'flow_out / timestep_resolution'}, {'where': 'carrier_in AND NOT carrier_out', 'expression': 'flow_in / timestep_resolution'}, {'where': 'carrier_in AND carrier_out', 'expression': '(flow_out - flow_in) / timestep_resolution'}]}}, 'ramping_down': {'description': "Set the upper bound on a technology's ability to ramp outflow down beyond a certain percentage compared to the previous timestep.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_ramping AND NOT timesteps=get_val_at_index(timesteps=0)', 'equations': [{'expression': '-1 * flow_ramping * flow_cap <= $flow - roll($flow, timesteps=1)'}], 'sub_expressions': {'flow': [{'where': 'carrier_out AND NOT carrier_in', 'expression': 'flow_out / timestep_resolution'}, {'where': 'carrier_in AND NOT carrier_out', 'expression': 'flow_in / timestep_resolution'}, {'where': 'carrier_in AND carrier_out', 'expression': '(flow_out - flow_in) / timestep_resolution'}]}}, 'link_chp_outputs': {'description': 'Fix the relationship between heat and electricity output', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': '[chp] in techs', 'equations': [{'expression': 'flow_out[carriers=electricity] * heat_to_power_ratio == flow_out[carriers=heat]'}]}}, 'variables': {'flow_cap': {'title': 'Technology flow (a.k.a. nominal) capacity', 'description': "A technology's flow capacity, also known as its nominal or nameplate capacity.", 'default': 0, 'unit': 'power', 'foreach': ['nodes', 'techs', 'carriers'], 'bounds': {'min': 'flow_cap_min', 'max': 'flow_cap_max'}}, 'link_flow_cap': {'title': 'Link flow capacity', 'description': "A transmission technology's flow capacity, also known as its nominal or nameplate capacity.", 'default': 0, 'unit': 'power', 'foreach': ['techs'], 'where': 'base_tech=transmission', 'bounds': {'min': 0, 'max': inf}}, 'flow_out': {'title': 'Carrier outflow', 'description': '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.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_out', 'bounds': {'min': 0, 'max': inf}}, 'flow_in': {'title': 'Carrier inflow', 'description': '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.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_in', 'bounds': {'min': 0, 'max': inf}}, 'flow_export': {'title': 'Carrier export', 'description': 'The flow of a carrier exported outside the system boundaries by a technology per timestep.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_export', 'bounds': {'min': 0, 'max': inf}}, 'area_use': {'title': 'Area utilisation', 'description': 'The area in space utilised directly (e.g., solar PV panels) or indirectly (e.g., biofuel crops) by a technology.', 'default': 0, 'unit': 'area', 'foreach': ['nodes', 'techs'], 'where': '(area_use_min OR area_use_max OR area_use_per_flow_cap OR sink_unit=per_area OR source_unit=per_area)', 'bounds': {'min': 'area_use_min', 'max': 'area_use_max'}}, 'source_use': {'title': 'Source flow use', 'description': 'The carrier flow consumed from outside the system boundaries by a `supply` technology.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'base_tech=supply', 'bounds': {'min': 0, 'max': inf}}, 'source_cap': {'title': 'Source flow capacity', 'description': 'The upper limit on a flow that can be consumed from outside the system boundaries by a `supply` technology in each timestep.', 'default': 0, 'unit': 'power', 'foreach': ['nodes', 'techs'], 'where': 'base_tech=supply', 'bounds': {'min': 'source_cap_min', 'max': 'source_cap_max'}}, 'storage_cap': {'title': 'Stored carrier capacity', 'description': 'The upper limit on a carrier that can be stored by a technology in any timestep.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs'], 'where': 'include_storage=True OR base_tech=storage', 'domain': 'real', 'bounds': {'min': 'storage_cap_min', 'max': 'storage_cap_max'}, 'active': True}, 'storage': {'title': 'Stored carrier', 'description': 'The carrier stored by a `storage` technology in each timestep.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'include_storage=True OR base_tech=storage', 'bounds': {'min': 0, 'max': inf}}, 'purchased_units': {'title': 'Number of purchased units', 'description': 'Integer number of a technology that has been purchased,\nfor any technology set to require integer capacity purchasing.\nThis is used to allow installation of fixed capacity units of technologies (\nif `flow_cap_max` == `flow_cap_min`) and/or to set a fixed cost for a technology,\nirrespective of its installed capacity.\nOn top of a fixed technology cost,\na continuous cost for the quantity of installed capacity can still be applied.\n\nSince technology capacity is no longer a continuous decision variable,\nit is possible for these technologies to have a lower bound set on outflow/consumption\nwhich will only be enforced in those timesteps that the technology is operating.\nOtherwise, the same lower bound forces the technology to produce/consume\nthat minimum amount of carrier in *every* timestep.\n', 'default': 0, 'unit': 'integer', 'foreach': ['nodes', 'techs'], 'where': 'cap_method=integer', 'domain': 'integer', 'bounds': {'min': 'purchased_units_min', 'max': 'purchased_units_max'}}, 'operating_units': {'title': 'Number of operating units', 'description': 'Integer number of a technology that is operating in each timestep, for any technology set to require integer capacity purchasing.', 'default': 0, 'unit': 'integer', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'integer_dispatch=True AND cap_method=integer', 'domain': 'integer', 'bounds': {'min': 0, 'max': inf}}, 'available_flow_cap': {'title': 'Available carrier flow capacity', 'description': '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.', 'default': 0, 'unit': 'power', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'integer_dispatch=True AND flow_cap_max AND NOT flow_cap_per_unit', 'bounds': {'min': 0, 'max': inf}}, 'async_flow_switch': {'title': 'Asynchronous carrier flow switch', 'description': '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.', 'default': 0, 'unit': 'integer', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'force_async_flow=True', 'domain': 'integer', 'bounds': {'min': 0, 'max': 1}}, 'unmet_demand': {'title': 'Unmet demand (load shedding)', 'description': '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.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'carriers', 'timesteps'], 'where': 'config.ensure_feasibility=True', 'bounds': {'min': 0, 'max': inf}}, 'unused_supply': {'title': 'Unused supply (curtailment)', 'description': '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).', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'carriers', 'timesteps'], 'where': 'config.ensure_feasibility=True', 'bounds': {'min': -inf, 'max': 0}}}, 'objectives': {'min_cost_optimisation': {'description': '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`.', 'equations': [{'where': 'any(cost, over=[nodes, techs, costs])', 'expression': 'sum(\n sum(cost, over=[nodes, techs])\n * objective_cost_weights,\n over=costs\n) + $unmet_demand'}, {'where': 'NOT any(cost, over=[nodes, techs, costs])', 'expression': '$unmet_demand'}], 'sub_expressions': {'unmet_demand': [{'where': 'config.ensure_feasibility=True', 'expression': 'sum(\n sum(unmet_demand - unused_supply, over=[carriers, nodes])\n * timestep_weights,\n over=timesteps\n) * bigM'}, {'where': 'NOT config.ensure_feasibility=True', 'expression': '0'}]}, 'sense': 'minimise', 'active': True}}, 'global_expressions': {'flow_out_inc_eff': {'title': 'Carrier outflow including losses', 'description': 'Outflows after taking efficiency losses into account.', 'default': 0, 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out', 'equations': [{'where': 'base_tech=transmission', 'expression': 'flow_out / (\n flow_out_eff * flow_out_parasitic_eff *\n flow_out_eff_per_distance ** distance\n)'}, {'where': 'NOT base_tech=transmission', 'expression': 'flow_out / (flow_out_eff * flow_out_parasitic_eff)'}]}, 'flow_in_inc_eff': {'title': 'Carrier inflow including losses', 'description': 'Inflows after taking efficiency losses into account.', 'default': 0, 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_in', 'equations': [{'where': 'base_tech=transmission', 'expression': 'flow_in * flow_in_eff * flow_in_eff_per_distance ** distance'}, {'where': 'NOT base_tech=transmission', 'expression': 'flow_in * flow_in_eff'}]}, 'cost_var': {'title': 'Variable operating costs', 'description': 'The operating costs per timestep of a technology.', 'default': 0, 'unit': 'cost_per_time', 'foreach': ['nodes', 'techs', 'costs', 'timesteps'], 'where': 'cost_export OR cost_flow_in OR cost_flow_out', 'equations': [{'expression': 'timestep_weights * ($cost_export + $cost_flow_out + $cost_flow_in)'}], 'sub_expressions': {'cost_export': [{'where': 'any(carrier_export, over=carriers) AND any(cost_export, over=carriers)', 'expression': 'sum(cost_export * flow_export, over=carriers)'}, {'where': 'NOT (any(carrier_export, over=carriers) AND any(cost_export, over=carriers))', 'expression': '0'}], 'cost_flow_in': [{'where': 'base_tech=supply', 'expression': 'cost_flow_in * source_use'}, {'where': 'NOT base_tech=supply', 'expression': 'sum(cost_flow_in * flow_in, over=carriers)'}], 'cost_flow_out': [{'expression': 'sum(cost_flow_out * flow_out, over=carriers)'}]}}, 'cost_investment_flow_cap': {'title': 'Flow capacity investment costs', 'description': 'The investment costs associated with the nominal/rated capacity of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'carriers', 'costs'], 'where': 'flow_cap AND (cost_flow_cap OR cost_flow_cap_per_distance)', 'equations': [{'expression': '$cost_sum * flow_cap'}], 'sub_expressions': {'cost_sum': [{'where': 'base_tech=transmission', 'expression': '(cost_flow_cap + cost_flow_cap_per_distance * distance) * 0.5'}, {'where': 'NOT base_tech=transmission', 'expression': 'cost_flow_cap'}]}}, 'cost_investment_storage_cap': {'title': 'Storage capacity investment costs', 'description': 'The investment costs associated with the storage capacity of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_storage_cap AND storage_cap', 'equations': [{'expression': 'cost_storage_cap * storage_cap'}]}, 'cost_investment_source_cap': {'title': 'Source flow capacity investment costs', 'description': 'The investment costs associated with the source consumption capacity of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_source_cap AND source_cap', 'equations': [{'expression': 'cost_source_cap * source_cap'}]}, 'cost_investment_area_use': {'title': 'Area utilisation investment costs', 'description': 'The investment costs associated with the area used by a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_area_use AND area_use', 'equations': [{'expression': 'cost_area_use * area_use'}]}, 'cost_investment_purchase': {'title': 'Binary purchase investment costs', 'description': 'The investment costs associated with the binary purchase of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_purchase AND purchased_units', 'equations': [{'where': 'base_tech=transmission', 'expression': '(cost_purchase + cost_purchase_per_distance * distance) * purchased_units * 0.5'}, {'where': 'NOT base_tech=transmission', 'expression': 'cost_purchase * purchased_units'}]}, 'cost_investment': {'title': 'Total investment costs', 'description': 'The installation costs of a technology, including annualised investment costs and annual maintenance costs.', 'default': 0, 'unit': 'cost', 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_investment_flow_cap OR cost_investment_storage_cap OR cost_investment_source_cap OR cost_investment_area_use OR cost_investment_purchase', 'equations': [{'expression': '$annualisation_weight * (\n ($depreciation_rate + cost_om_annual_investment_fraction) * (\n sum(default_if_empty(cost_investment_flow_cap, 0), over=carriers) +\n default_if_empty(cost_investment_storage_cap, 0) +\n default_if_empty(cost_investment_source_cap, 0) +\n default_if_empty(cost_investment_area_use, 0) +\n default_if_empty(cost_investment_purchase, 0)\n )\n + sum(cost_om_annual * flow_cap, over=carriers)\n)\n'}], 'sub_expressions': {'annualisation_weight': [{'expression': 'sum(timestep_resolution * timestep_weights, over=timesteps) / 8760'}], 'depreciation_rate': [{'where': 'cost_depreciation_rate', 'expression': 'cost_depreciation_rate'}, {'where': 'NOT cost_depreciation_rate AND cost_interest_rate=0', 'expression': '1 / lifetime'}, {'where': 'NOT cost_depreciation_rate AND cost_interest_rate>0', 'expression': '(cost_interest_rate * ((1 + cost_interest_rate) ** lifetime)) / (((1 + cost_interest_rate) ** lifetime) - 1)'}]}}, 'cost': {'title': 'Total costs', 'description': 'The total annualised costs of a technology, including installation and operation costs.', 'default': 0, 'unit': 'cost', 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_investment OR cost_var', 'equations': [{'expression': '$cost_investment + $cost_var_sum'}], 'sub_expressions': {'cost_investment': [{'where': 'cost_investment', 'expression': 'cost_investment'}, {'where': 'NOT cost_investment', 'expression': '0'}], 'cost_var_sum': [{'where': 'cost_var', 'expression': 'sum(cost_var, over=timesteps)'}, {'where': 'NOT cost_var', 'expression': '0'}]}, 'active': True}}, 'piecewise_constraints': {}}
- name :
- Urban-scale example model
- timestamp_model_creation :
- 1725983503.094077
We can find the same PV flow_cap_max data as seen in m._model_run
m._model_data.flow_cap_max.sel(techs="pv").to_series().dropna()
carriers nodes
electricity X1 250.0
X2 250.0
X3 50.0
Name: flow_cap_max, dtype: float64
Building and checking the optimisation problem¶
Calling m.build allows us to build the optimisation problem, which creates arrays of Python objects from the YAML math formulation.
m.build()
[2024-09-10 15:51:49] INFO Model: backend build starting
[2024-09-10 15:51:50] INFO Optimisation Model | parameters | Generated.
[2024-09-10 15:51:51] INFO Optimisation Model | variables | Generated.
[2024-09-10 15:51:53] INFO Optimisation Model | global_expressions | Generated.
[2024-09-10 15:51:56] INFO Optimisation Model | constraints | Generated.
[2024-09-10 15:51:56] INFO Optimisation Model | piecewise_constraints | Generated.
[2024-09-10 15:51:56] INFO Optimisation Model | objectives | Generated.
[2024-09-10 15:51:56] INFO Model: backend build complete
As with the calliope Model, the backend has its own dataset containing all the arrays of backend objects
m.backend._dataset
<xarray.Dataset> Size: 777kB
Dimensions: (costs: 1, techs: 12, carriers: 3,
nodes: 4, timesteps: 48)
Coordinates:
* costs (costs) object 8B 'monetary'
* techs (techs) object 96B 'N1_to_X2' ... 'su...
* carriers (carriers) object 24B 'electricity' ....
* nodes (nodes) object 32B 'N1' 'X1' 'X2' 'X3'
* timesteps (timesteps) datetime64[ns] 384B 2005-...
Data variables: (12/109)
bigM object 8B parameters[bigM][0]
objective_cost_weights (costs) object 8B parameters[objectiv...
base_tech (techs) object 96B parameters[base_te...
carrier_export (techs, carriers) object 288B nan ......
carrier_in (nodes, techs, carriers) object 1kB n...
carrier_out (nodes, techs, carriers) object 1kB n...
... ...
source_availability_supply (nodes, techs, timesteps) object 18kB ...
balance_transmission (techs, timesteps) object 5kB constra...
symmetric_transmission (nodes, techs) object 384B constraint...
export_balance (nodes, techs, carriers, timesteps) object 55kB ...
link_chp_outputs (nodes, techs, timesteps) object 18kB ...
min_cost_optimisation object 8B objectives[min_cost_optimis...- costs: 1
- techs: 12
- carriers: 3
- nodes: 4
- timesteps: 48
- costs(costs)object'monetary'
array(['monetary'], dtype=object)
- techs(techs)object'N1_to_X2' ... 'supply_grid_power'
array(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype=object) - carriers(carriers)object'electricity' 'gas' 'heat'
array(['electricity', 'gas', 'heat'], dtype=object)
- nodes(nodes)object'N1' 'X1' 'X2' 'X3'
array(['N1', 'X1', 'X2', 'X3'], dtype=object)
- timesteps(timesteps)datetime64[ns]2005-07-01 ... 2005-07-02T23:00:00
array(['2005-07-01T00:00:00.000000000', '2005-07-01T01:00:00.000000000', '2005-07-01T02:00:00.000000000', '2005-07-01T03:00:00.000000000', '2005-07-01T04:00:00.000000000', '2005-07-01T05:00:00.000000000', '2005-07-01T06:00:00.000000000', '2005-07-01T07:00:00.000000000', '2005-07-01T08:00:00.000000000', '2005-07-01T09:00:00.000000000', '2005-07-01T10:00:00.000000000', '2005-07-01T11:00:00.000000000', '2005-07-01T12:00:00.000000000', '2005-07-01T13:00:00.000000000', '2005-07-01T14:00:00.000000000', '2005-07-01T15:00:00.000000000', '2005-07-01T16:00:00.000000000', '2005-07-01T17:00:00.000000000', '2005-07-01T18:00:00.000000000', '2005-07-01T19:00:00.000000000', '2005-07-01T20:00:00.000000000', '2005-07-01T21:00:00.000000000', '2005-07-01T22:00:00.000000000', '2005-07-01T23:00:00.000000000', '2005-07-02T00:00:00.000000000', '2005-07-02T01:00:00.000000000', '2005-07-02T02:00:00.000000000', '2005-07-02T03:00:00.000000000', '2005-07-02T04:00:00.000000000', '2005-07-02T05:00:00.000000000', '2005-07-02T06:00:00.000000000', '2005-07-02T07:00:00.000000000', '2005-07-02T08:00:00.000000000', '2005-07-02T09:00:00.000000000', '2005-07-02T10:00:00.000000000', '2005-07-02T11:00:00.000000000', '2005-07-02T12:00:00.000000000', '2005-07-02T13:00:00.000000000', '2005-07-02T14:00:00.000000000', '2005-07-02T15:00:00.000000000', '2005-07-02T16:00:00.000000000', '2005-07-02T17:00:00.000000000', '2005-07-02T18:00:00.000000000', '2005-07-02T19:00:00.000000000', '2005-07-02T20:00:00.000000000', '2005-07-02T21:00:00.000000000', '2005-07-02T22:00:00.000000000', '2005-07-02T23:00:00.000000000'], dtype='datetime64[ns]')
- bigM()objectparameters[bigM][0]
- obj_type :
- parameters
- references :
- {'min_cost_optimisation'}
- coords_in_name :
- False
- title :
- None
- description :
- BigM is a large value used to define certain optimisation problems. See https://en.wikipedia.org/wiki/Big_M_method for more information. This value should be larger than the largest values that any decision variables can take, but should not be **too** large (i.e., do not set it greater than 3 orders of magnitude above the numeric range of the model). If too large, numerical problems may arise in the optimisation.
- unit :
- None
- default :
- 1000000000.0
- original_dtype :
- float64
array(<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa7930>, dtype=object) - objective_cost_weights(costs)objectparameters[objective_cost_weight...
- obj_type :
- parameters
- references :
- {'min_cost_optimisation'}
- coords_in_name :
- False
- title :
- None
- description :
- Weightings for cost classes to apply in the objective function.
- unit :
- None
- default :
- 1
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa7f70>], dtype=object) - base_tech(techs)objectparameters[base_tech][0] ... par...
- obj_type :
- parameters
- references :
- {'balance_transmission', 'balance_supply_no_storage', 'balance_demand', 'cost_var', 'flow_out_inc_eff', 'source_use', 'source_cap', 'symmetric_transmission', 'cost_investment_flow_cap', 'balance_conversion', 'link_flow_cap', 'flow_in_inc_eff'}
- coords_in_name :
- False
- title :
- Abstract base technology name.
- description :
- Should be the name of one of the abstract base classes, from which some initial parameter defaults will be derived and with which certain base math will be triggered.
- unit :
- None
- default :
- nan
- original_dtype :
- object
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0280>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0320>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0460>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff04b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0500>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0550>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff05a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff05f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0640>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff03c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0690>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff06e0>], dtype=object) - carrier_export(techs, carriers)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'flow_export'}
- coords_in_name :
- False
- title :
- None
- description :
- Carrier(s) produced by this technology that can be exported out of the system boundaries without having to go to a pre-defined `sink` (i.e., via a `demand` technology). Must be a subset of `carrier_out`.
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0aa0>, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff09b0>, nan, nan], [nan, nan, nan], [nan, nan, nan]], dtype=object) - carrier_in(nodes, techs, carriers)objectnan nan ... nan nan
- obj_type :
- parameters
- references :
- {'flow_in_max', 'flow_in'}
- coords_in_name :
- False
- title :
- None
- description :
- Carrier(s) consumed by this technology. Only `transmission`, `conversion`, `storage`, and `demand` technologies can define this parameter
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[[nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1900>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff19a0>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1a40>], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1a90>], ... [nan, nan, nan]], [[nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff19f0>], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff11d0>, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1860>, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1540>, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1bd0>], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]]], dtype=object) - carrier_out(nodes, techs, carriers)objectnan nan ... nan nan
- obj_type :
- parameters
- references :
- {'flow_out_max', 'flow_out'}
- coords_in_name :
- False
- title :
- None
- description :
- Carrier(s) produced by this technology. Only `transmission`, `conversion`, `storage`, and `supply` technologies can define this parameter
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[[nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff26c0>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2760>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2800>], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2850>], ... [nan, nan, nan]], [[nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff27b0>], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1810>, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff28f0>], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2350>, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2670>, nan], [nan, nan, nan]]], dtype=object) - color(techs)objectparameters[color][0] ... paramet...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- None
- description :
- Color that can be used when plotting results.
- unit :
- None
- default :
- nan
- original_dtype :
- object
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1ef0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1c20>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0cd0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0e10>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2b70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2c60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2580>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2440>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2530>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff22b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2f30>], dtype=object) - cost_flow_cap(nodes, techs, costs, carriers)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'cost_investment_flow_cap'}
- coords_in_name :
- False
- title :
- Cost of flow capacity.
- description :
- Cost per unit of the decision variable `flow_cap`.
- unit :
- $\text{power}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[[[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], ... [[nan, nan, nan]], [[nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2d50>]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff3660>, nan, nan]], [[nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff33e0>, nan]], [[nan, nan, nan]]]], dtype=object) - cost_flow_out(techs, costs, carriers, nodes)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'cost_var'}
- coords_in_name :
- False
- title :
- Carrier outflow cost
- description :
- Cost per unit of `flow_in` in each timestep.
- unit :
- $\text{energy}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], ... [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff3d90>, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]]], dtype=object) - cost_interest_rate(techs, costs)objectparameters[cost_interest_rate][0...
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Interest rate.
- description :
- Used when computing levelized costs and technology depreciation_rate (relative to lifetime).
- unit :
- fraction
- default :
- 0
- original_dtype :
- float64
array([[<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff85a0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8870>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8780>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8140>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff81e0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8050>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8c30>], [nan], [nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8640>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8be0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9040>]], dtype=object) - flow_cap_max(techs, carriers, nodes)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'flow_cap'}
- coords_in_name :
- False
- title :
- Maximum rated flow capacity.
- description :
- Limits `flow_cap` to a maximum.
- unit :
- power.
- default :
- inf
- original_dtype :
- float64
array([[[nan, nan, nan, nan], [nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9bd0>, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9c20>, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9c70>, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff99f0>]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9cc0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9d10>, nan, nan]], [[nan, ... [[nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8c80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8d70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9810>], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff98b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9b30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9b80>], [nan, nan, nan, nan]], [[nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9860>, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], dtype=object) - flow_out_eff(techs, carriers)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'flow_out_inc_eff'}
- coords_in_name :
- False
- title :
- Outflow efficiency
- description :
- Conversion efficiency from the technology to `sink`/`flow_out` (tech dependent). Set as value between 1 (no loss) and 0 (all lost).
- unit :
- fraction.
- default :
- 1.0
- original_dtype :
- float64
array([[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9360>, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9270>, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa0d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9630>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8b90>, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], dtype=object) - heat_to_power_ratio(techs)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'link_chp_outputs'}
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa120>, nan, nan, nan, nan, nan], dtype=object) - lifetime(techs)objectparameters[lifetime][0] ... para...
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Technology lifetime
- description :
- Must be defined if fixed capital costs are defined. A reasonable value for many technologies is around 20-25 years.
- unit :
- years.
- default :
- inf
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa5d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffab70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffabc0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffac10>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffac60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffacb0>, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffad00>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffad50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffada0>], dtype=object) - name(techs)objectparameters[name][0] ... paramete...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Technology long-name.
- description :
- Long name of technology, which can be used in post-processing (e.g., plotting).
- unit :
- None
- default :
- nan
- original_dtype :
- object
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9f40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffae40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa300>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb200>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb250>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb2a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb2f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb390>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb3e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb430>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb4d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb520>], dtype=object) - techs_inheritance(techs)objectparameters[techs_inheritance][0]...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- object
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa7b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb5c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb9d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffba20>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffba70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffbac0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffbb10>, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb930>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffbb60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffbbb0>], dtype=object) - area_use_max(techs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'area_use'}
- coords_in_name :
- False
- title :
- Maximum usable area.
- description :
- If set to a finite value, limits the upper bound of the `area_use` decision variable to this value.
- unit :
- $\text{area}^{2}$.
- default :
- inf
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9e00>, nan, nan], dtype=object) - area_use_per_flow_cap(techs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'area_use_per_flow_capacity', 'area_use'}
- coords_in_name :
- False
- title :
- Area use per flow capacity
- description :
- If set, forces `area_use` to follow `flow_cap` with the given numerical ratio (e.g. setting to 1.5 means that `area_use == 1.5 * flow_cap`).
- unit :
- $\frac{\text{area}^{2}}{\text{power}}$.
- default :
- nan
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb890>, nan, nan], dtype=object) - flow_out_parasitic_eff(techs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'flow_out_max', 'flow_out_inc_eff'}
- coords_in_name :
- False
- title :
- Plant parasitic efficiency
- description :
- Additional losses as flow gets transferred from the plant to the carrier, e.g. due to plant parasitic consumption. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- fraction.
- default :
- 1.0
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4050>, nan, nan], dtype=object) - source_unit(techs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'source_availability_supply', 'area_use'}
- coords_in_name :
- False
- title :
- Source unit
- description :
- Sets the unit of `Source` to either `absolute` (unit: `energy`), `per_area` (unit: `energy/area`), or `per_cap` (unit: `energy/power`). `per_area` uses the `area_use` decision variable to scale the source while `per_cap` uses the `flow_cap` decision variable.
- unit :
- None
- default :
- absolute
- original_dtype :
- object
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4280>, nan, nan], dtype=object) - cost_flow_in(techs, costs)objectnan ... parameters[cost_flow_in][2]
- obj_type :
- parameters
- references :
- {'cost_var'}
- coords_in_name :
- False
- title :
- Carrier inflow cost.
- description :
- Cost per unit of `flow_in` in each timestep.
- unit :
- $\text{energy}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[nan], [nan], [nan], [nan], [nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4d20>], [nan], [nan], [nan], [nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4be0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4690>]], dtype=object) - source_use_max(techs)objectnan ... parameters[source_use_ma...
- obj_type :
- parameters
- references :
- {'source_availability_supply'}
- coords_in_name :
- False
- title :
- Maximum bound on sink.
- description :
- Maximum sink use to remove a carrier from the system (e.g., biofuel, coal, rainfall, wind flow). Unit dictated by `source_unit`.
- unit :
- None
- default :
- inf
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5040>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4aa0>], dtype=object) - cost_flow_cap_per_distance(techs, costs)objectparameters[cost_flow_cap_per_dis...
- obj_type :
- parameters
- references :
- {'cost_investment_flow_cap'}
- coords_in_name :
- False
- title :
- Cost of flow capacity, per unit distance
- description :
- Cost per unit of the decision variable `flow_cap` and per unit distance of a transmission link. Applied to transmission links only.
- unit :
- $(\text{power}\times\text{distance})^{-1}$
- default :
- 0
- original_dtype :
- float64
array([[<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5450>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4e10>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5310>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5c70>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5cc0>], [nan], [nan], [nan], [nan], [nan], [nan], [nan]], dtype=object) - distance(techs)objectparameters[distance][0] ... nan
- obj_type :
- parameters
- references :
- {'flow_out_inc_eff', 'cost_investment_flow_cap', 'flow_in_inc_eff'}
- coords_in_name :
- False
- title :
- Distance spanned by link.
- description :
- Used for `..._per_distance` constraints. If not defined, it will be automatically derived from latitude/longitude of nodes in a link.
- unit :
- None
- default :
- 1.0
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe54a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe54f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5b80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5720>, nan, nan, nan, nan, nan, nan, nan], dtype=object) - flow_out_eff_per_distance(techs)objectparameters[flow_out_eff_per_dist...
- obj_type :
- parameters
- references :
- {'flow_out_inc_eff'}
- coords_in_name :
- False
- title :
- Outflow (i.e., import from node) efficiency per distance of transmission links.
- description :
- Total link efficiency will be calculated as $\text{flow\_out\_eff}\times{}\text{flow\_out\_eff\_per\_distance}^\text{distance}$. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- None
- default :
- 1.0
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2166c60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2166f30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d21671b0>, nan, nan, nan, nan, nan, nan, nan, nan, nan], dtype=object) - cost_export(nodes, techs, costs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'cost_var'}
- coords_in_name :
- False
- title :
- Carrier export cost.
- description :
- Cost per unit of `flow_export` in each timestep. Usually used in the negative sense, as a subsidy.
- unit :
- $\text{energy}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], ..., [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], ..., [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]]], dtype=object) - cost_om_annual(nodes, techs, costs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Annual O&M costs
- description :
- Annual costs applied per unit `flow_cap`. These costs are not subject to being recalculated relative to technology lifetime, only scaled to reflect the fraction of one year that the model represents (e.g., 7 days ~= 0.02 of a year).
- unit :
- $\text{power}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[[nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan]], [[nan], [nan], [nan], [nan], [nan], [nan], [nan], ... [nan], [nan], [nan], [nan], [nan], [nan], [nan]], [[nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2165630>], [nan], [nan]]], dtype=object) - available_area(nodes)objectnan ... parameters[available_are...
- obj_type :
- parameters
- references :
- {'area_use_capacity_per_loc'}
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- inf
- original_dtype :
- float64
array([nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2146e40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2151d10>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2151130>], dtype=object) - latitude(nodes)objectparameters[latitude][0] ... para...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Latitude (WGS84 / EPSG4326).
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d213dc70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7f980>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7fa70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7efd0>], dtype=object) - longitude(nodes)objectparameters[longitude][0] ... par...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Longitude (WGS84 / EPSG4326).
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f1e530>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f1d2c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f89e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f89bd0>], dtype=object) - source_use_equals(techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'source_availability_supply'}
- coords_in_name :
- False
- title :
- Required sink use.
- description :
- Required amount of carrier removal from the system (e.g., biofuel, coal, rainfall, wind flow). Unit dictated by `source_unit`.
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], ... <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f72670>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa41e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4500>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4140>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4690>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4cd0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa44b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa5090>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4c80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa5450>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa54f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa5400>], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]], dtype=object) - sink_use_equals(timesteps, techs, nodes)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'balance_demand'}
- coords_in_name :
- False
- title :
- Required sink use.
- description :
- Required amount of carrier removal from the system (e.g., electricity demand, transport distance). Unit dictated by `sink_unit`.
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., ... ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], dtype=object) - definition_matrix(nodes, techs, carriers)objectparameters[definition_matrix][0]...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- bool
array([[[<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa62b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7fc00>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7fc50>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f89b30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f89d60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20094a0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009950>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009f40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009f90>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009fe0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a210>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a260>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a2b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a300>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a350>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a3a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a120>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a3f0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009db0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a440>, ... <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010640>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010690>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20106e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010730>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010780>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010870>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20108c0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010910>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010960>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010a00>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010a50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010aa0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010af0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010b40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010b90>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010be0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010c30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010c80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010cd0>]]], dtype=object) - timestep_resolution(timesteps)objectparameters[timestep_resolution][...
- obj_type :
- parameters
- references :
- {'cost_investment', 'flow_out_max', 'flow_in_max', 'source_max'}
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009b80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a170>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a0d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009c70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f1d360>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f74320>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f742d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f75c70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010e60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010dc0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010d20>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010fa0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20111d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011450>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010820>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20114a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20114f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011540>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011630>, ... <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20119a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20119f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011a40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011a90>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011b30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011b80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011bd0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011c20>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011c70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011cc0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011ae0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011d10>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011d60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011db0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011e00>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011ef0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011f40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012030>], dtype=object) - timestep_weights(timesteps)objectparameters[timestep_weights][0] ...
- obj_type :
- parameters
- references :
- {'cost_investment', 'cost_var', 'min_cost_optimisation'}
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010eb0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012440>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20124e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012580>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20125d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012620>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012670>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20126c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012710>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012760>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20127b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012800>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012850>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20128f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012940>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012990>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20129e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012a30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012a80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20128a0>, ... <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012e90>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012ee0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012da0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012f80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012d50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012fd0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20123a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013020>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013070>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20130c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20131b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013200>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013250>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20132a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013340>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013390>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20133e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013430>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013480>], dtype=object) - cap_method()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Capacity method switch.
- description :
- One of 'continuous' (LP model) or 'integer' (integer/binary unit capacity).
- unit :
- None
- default :
- continuous
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- integer_dispatch()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Integer dispatch switch.
- description :
- When true, will limit per-timestep out/inflows relative to the number of units of a technology that are in operation. Requires `cap_method=integer`.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- include_storage()float64nan
- obj_type :
- parameters
- references :
- {'balance_supply_no_storage', 'balance_conversion'}
- coords_in_name :
- False
- title :
- Storage method switch.
- description :
- When true, math will be triggered to allow discontinuous carrier inflow and outflows across timesteps.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- force_async_flow()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Force asynchronous out/inflow.
- description :
- If True, non-zero `flow_out` and `flow_in` cannot both occur in the same timestep.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_per_storage_cap_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum flow capacity per storage capacity
- description :
- ratio of minimum charge/discharge (kW) for a given storage capacity (kWh).
- unit :
- $\text{hour}^{-1}$
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_per_storage_cap_max()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Maximum flow capacity per storage capacity
- description :
- ratio of maximum charge/discharge (kW) for a given storage capacity (kWh).
- unit :
- $\text{hour}^{-1}$
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_max_systemwide()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- System-wide maximum rated flow capacity.
- description :
- Limits the sum of `flow_cap` over all nodes in the model to a maximum. If `cap_method=integer`, this will be scaled by the number of integer units of a technology purchased.
- unit :
- power or $\frac{\text{power}}{\text{unit}}$.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_min()float64nan
- obj_type :
- parameters
- references :
- {'flow_cap'}
- coords_in_name :
- False
- title :
- Minimum rated flow capacity.
- description :
- This acts as lower limit (lower bound) for flow_cap. If `cap_method` = integer, this will be scaled by the number of integer units of a technology purchased. !!! note If `cap_method` = continuous (which is set by default), then setting `flow_cap_min` to any value greater than 0 forces the model to always respect that limit, which in turn forces investment into the technology. Use this to enforce given investment plans, or to account for existing technologies that cannot be decommissioned. An example: If `cap_method` = continuous and `flow_cap_min` = 100, then flow_cap has to be at least 100. This means that going to 0 is not possible, unless you switch to `cap_method` = integer (see [cap_method][]).
- unit :
- power or $\frac{\text{power}}{\text{unit}}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_min_systemwide()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- System-wide minimum rated flow capacity.
- description :
- Limits the sum of `flow_cap` over all nodes in the model to a minimum. NOTE: this will _force_ the sum of `flow_cap` to a minimum value unless `cap_method` is set to `integer`.
- unit :
- power.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_out_min_relative()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum outflow
- description :
- Set to a value between 0 and 1 to force minimum `flow_out` as a fraction of the technology rated capacity. If non-zero and `cap_method` is `continuous`, this will force the technology to operate above its minimum value at every timestep.
- unit :
- fraction.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_per_unit()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Flow capacity per purchased unit
- description :
- Set the capacity of each integer unit of a technology purchased, if `cap_method` is `integer`.
- unit :
- $\frac{\text{power}}{\text{unit}}$.
- default :
- nan
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_in_eff()float64nan
- obj_type :
- parameters
- references :
- {'flow_in_inc_eff'}
- coords_in_name :
- False
- title :
- Inflow efficiency
- description :
- Conversion efficiency from `source`/`flow_in` (tech dependent) into the technology. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- fraction.
- default :
- 1.0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_ramping()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Ramping rate
- description :
- limit maximum outflow / inflow / outflow - inflow (technology base class dependent) to a fraction of maximum capacity, which increases by that fraction at each timestep.
- unit :
- $\frac{\text{fraction}}{\text{hour}}$.
- default :
- 1.0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- export_max()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Maximum allowed carrier export
- description :
- If `carrier_export` is defined, limit the allowed export of produced carrier for a technology.
- unit :
- power.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- area_use_min()float64nan
- obj_type :
- parameters
- references :
- {'area_use'}
- coords_in_name :
- False
- title :
- Minimum usable area.
- description :
- Limits the lower bound of the `area_use` decision variable to this value.
- unit :
- $\text{area}^{2}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_cap_max()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Maximum storage capacity.
- description :
- Limit upper bound of `storage_cap` decision variable.
- unit :
- energy.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_cap_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum storage capacity.
- description :
- Limit lower bound of `storage_cap` decision variable.
- unit :
- energy.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_cap_per_unit()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Storage capacity per purchased unit.
- description :
- Set the storage capacity of each integer unit of a technology purchased.
- unit :
- $\frac{\text{energy}}{\text{unit}}$.
- default :
- nan
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_discharge_depth()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Storage depth of discharge.
- description :
- Defines the minimum level of storage state of charge, as a fraction of total storage capacity.
- unit :
- fraction.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_initial()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Initial storage level.
- description :
- Set stored flow in device at the first timestep, as a fraction of total storage capacity.
- unit :
- fraction.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_loss()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Storage loss rate
- description :
- Rate of storage loss per hour, used to calculate lost stored flow as `(1 - storage_loss)^hours_per_timestep`.
- unit :
- $\frac{\text{fraction}}{\text{hour}}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cyclic_storage()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Cyclic storage switch.
- description :
- If true, link storage levels in the last model timestep with the first model timestep. `inter_cluster_storage` custom math must be included if using time clustering and setting this to `true`. This must be set to `false` if using `operate` mode.
- unit :
- boolean.
- default :
- True
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- purchased_units_min_systemwide()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- System-wide minimum installed integer units of a technology.
- description :
- sets the lower bound of the sum across all nodes of the decision variable `units` for a particular technology.
- unit :
- integer.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- purchased_units_max_systemwide()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- System-wide maximum installed integer units of a technology.
- description :
- sets the upper bound of the sum across all nodes of the decision variable `units` for a particular technology.
- unit :
- integer.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- purchased_units_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum number of purchased units
- description :
- Limits the lower bound of units purchased if `cap_method` is `integer`.
- unit :
- integer.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- purchased_units_max()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Maximum number of purchased units.
- description :
- Limits the upper bound of units purchased if `cap_method` is `integer`. If set to `1`, will effectively set the `purchased_units` to a binary decision variable.
- unit :
- integer.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- sink_unit()float64nan
- obj_type :
- parameters
- references :
- {'balance_demand', 'area_use'}
- coords_in_name :
- False
- title :
- Sink unit
- description :
- Sets the unit of `Sink` to either `absolute` (unit: `energy`), `per_area` (unit: `energy/area`), or `per_cap` (unit: `energy/power`). `per_area` uses the `area_use` decision variable to scale the sink while `per_cap` uses the `flow_cap` decision variable.
- unit :
- None
- default :
- absolute
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- sink_use_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum bound on sink.
- description :
- Minimum sink use to remove a carrier from the system (e.g., electricity demand, transport distance). Unit dictated by `sink_unit`.
- unit :
- None
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- sink_use_max()float64nan
- obj_type :
- parameters
- references :
- {'balance_demand'}
- coords_in_name :
- False
- title :
- Maximum bound on sink.
- description :
- Maximum sink use to remove a carrier from the system (e.g., electricity demand, transport distance). Unit dictated by `sink_unit`.
- unit :
- None
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_cap_equals_flow_cap()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Source capacity equals flow capacity.
- description :
- If true, the decision variables `source_cap` and `flow_cap` are forced to equal one another.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_eff()float64nan
- obj_type :
- parameters
- references :
- {'balance_supply_no_storage'}
- coords_in_name :
- False
- title :
- Source inflow efficiency
- description :
- Conversion efficiency from the technology from `source`. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- fraction.
- default :
- 1.0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_use_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum bound on source.
- description :
- Minimum source use to add a carrier from the system (e.g., biofuel, coal, rainfall, wind flow). Unit dictated by `source_unit`.
- unit :
- None
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_cap_max()float64nan
- obj_type :
- parameters
- references :
- {'source_cap'}
- coords_in_name :
- False
- title :
- Maximum installed source consumption capacity.
- description :
- Upper limit on `source_cap` decision variable.
- unit :
- power.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_cap_min()float64nan
- obj_type :
- parameters
- references :
- {'source_cap'}
- coords_in_name :
- False
- title :
- Minimum installed source consumption capacity
- description :
- Lower limit on `source_cap` decision variable.
- unit :
- power.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- one_way()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- One way transmission.
- description :
- Forces a transmission technology to only move flow in one direction on the link, i.e. from `from` to `to`.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_in_eff_per_distance()float64nan
- obj_type :
- parameters
- references :
- {'flow_in_inc_eff'}
- coords_in_name :
- False
- title :
- Inflow (i.e., export from node) efficiency per distance of transmission links.
- description :
- Total link efficiency will be calculated as $\text{flow\_in\_eff}\times{}\text{flow\_in\_eff\_per\_distance}^\text{distance}$. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- None
- default :
- 1.0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_purchase_per_distance()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Purchase cost per unit distance for transmission techs.
- description :
- Cost applied if the binary variable `purchased` is 1 or per unit of the integer variable `units`. Requires the parameter `cap_method` to be `integer`.
- unit :
- $(\text{purchased\_units}\times\text{distance})^{-1}$
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_om_annual_investment_fraction()float64nan
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Fractional annual O&M costs.
- description :
- Add a fraction of the sum of all investment costs except `cost_om_annual` as an additional cost, to represent fixed annual O&M costs. Warning: the sum of all investment costs includes not just those associated with `flow_cap` but also others like those associated with `area_use`!
- unit :
- fraction / total investment.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_purchase()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Purchase cost.
- description :
- Cost applied to the variable `purchased_units`. Requires the parameter `cap_method` to be `integer`.
- unit :
- $\text{purchased\_unit}^{-1}$
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_area_use()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Cost of area use.
- description :
- Cost per unit `area_use`.
- unit :
- $\text{area}^{-2}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_source_cap()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Cost of source flow capacity.
- description :
- Cost per unit `source_cap`.
- unit :
- $\text{power}^{-1}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_storage_cap()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Cost of storage capacity.
- description :
- Cost per unit `storage_cap`, i.e., the maximum available capacity of the storage technology's "reservoir".
- unit :
- $\text{energy}^{-1}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_depreciation_rate()float64nan
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Depreciation rate.
- description :
- Applied to "annualise" investment costs so they are comparable to variable costs. If not provided, this will be calculated using technology `lifetime` and `cost_interest_rate`.
- unit :
- fraction.
- default :
- 1
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap(nodes, techs, carriers)objectnan nan ... nan nan
- obj_type :
- variables
- references :
- {'flow_in_max', 'area_use_per_flow_capacity', 'symmetric_transmission', 'cost_investment_flow_cap', 'cost_investment', 'flow_out_max'}
- coords_in_name :
- False
- title :
- Technology flow (a.k.a. nominal) capacity
- description :
- A technology's flow capacity, also known as its nominal or nameplate capacity.
- default :
- 0
- unit :
- power
- yaml_snippet :
- foreach: - nodes - techs - carriers bounds: min: flow_cap_min max: flow_cap_max
array([[[nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d204b150>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d204a7d0>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d20495d0>], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d204b050>], ... [nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1f084d0>], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1f0a050>, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1f082d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1f09050>], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1f09cd0>, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1f088d0>], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1f0b950>, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1f09bd0>, nan], [nan, nan, nan]]], dtype=object) - link_flow_cap(techs)objectvariables[link_flow_cap][0] ... nan
- obj_type :
- variables
- references :
- {'symmetric_transmission'}
- coords_in_name :
- False
- title :
- Link flow capacity
- description :
- A transmission technology's flow capacity, also known as its nominal or nameplate capacity.
- default :
- 0
- unit :
- power
- yaml_snippet :
- foreach: - techs where: base_tech=transmission bounds: min: 0 max: .inf
array([<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0574cd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0574d50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05746d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0574150>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0574750>, nan, nan, nan, nan, nan, nan, nan], dtype=object) - flow_out(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- variables
- references :
- {'link_chp_outputs', 'cost_var', 'flow_out_inc_eff', 'system_balance', 'flow_out_max', 'export_balance'}
- coords_in_name :
- False
- title :
- Carrier outflow
- description :
- 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.
- default :
- 0
- unit :
- energy
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: carrier_out bounds: min: 0 max: .inf
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d201f4d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d201f2d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d201f750>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05762d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0576350>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05763d0>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0576450>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05764d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0576550>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0577ad0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0577b50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0577bd0>]], ... ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c2e50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c2ed0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c2f50>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c2fd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c3050>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c30d0>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c46d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c4750>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c47d0>], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - flow_in(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- variables
- references :
- {'cost_var', 'flow_in_max', 'system_balance', 'flow_in_inc_eff'}
- coords_in_name :
- False
- title :
- Carrier inflow
- description :
- 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.
- default :
- 0
- unit :
- energy
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: carrier_in bounds: min: 0 max: .inf
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c4dd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c4f50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c5550>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c6a50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c6ad0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c6b50>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c6bd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c6c50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c6cd0>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05ec2d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05ec350>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05ec3d0>]], ... <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d060bd50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d060bdd0>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - flow_export(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- variables
- references :
- {'cost_var', 'system_balance', 'export_balance'}
- coords_in_name :
- False
- title :
- Carrier export
- description :
- The flow of a carrier exported outside the system boundaries by a technology per timestep.
- default :
- 0
- unit :
- energy
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: carrier_export bounds: min: 0 max: .inf
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... ..., [[<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8d750>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8d7d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8d850>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8edd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8ee50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8eed0>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - area_use(nodes, techs)objectnan nan nan ... nan nan
- obj_type :
- variables
- references :
- {'area_use_per_flow_capacity', 'source_availability_supply', 'area_use_capacity_per_loc'}
- coords_in_name :
- False
- title :
- Area utilisation
- description :
- The area in space utilised directly (e.g., solar PV panels) or indirectly (e.g., biofuel crops) by a technology.
- default :
- 0
- unit :
- area
- yaml_snippet :
- foreach: - nodes - techs where: (area_use_min OR area_use_max OR area_use_per_flow_cap OR sink_unit=per_area OR source_unit=per_area) bounds: min: area_use_min max: area_use_max
array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064cc50>, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064d950>, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064d0d0>, nan, nan]], dtype=object) - source_use(nodes, techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- variables
- references :
- {'source_availability_supply', 'cost_var', 'source_max', 'balance_supply_no_storage'}
- coords_in_name :
- False
- title :
- Source flow use
- description :
- The carrier flow consumed from outside the system boundaries by a `supply` technology.
- default :
- 0
- unit :
- energy
- yaml_snippet :
- foreach: - nodes - techs - timesteps where: base_tech=supply bounds: min: 0 max: .inf
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064ddd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064da50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064e950>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064fcd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064fd50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064fdd0>], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064fe50>, ... [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0485e50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0485ed0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0485f50>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d04874d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0487550>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d04875d0>], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0487650>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d04876d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d0487750>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048cd50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048cdd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048ce50>], [nan, nan, nan, ..., nan, nan, nan]]], dtype=object) - source_cap(nodes, techs)objectnan nan ... nan
- obj_type :
- variables
- references :
- {'source_max'}
- coords_in_name :
- False
- title :
- Source flow capacity
- description :
- The upper limit on a flow that can be consumed from outside the system boundaries by a `supply` technology in each timestep.
- default :
- 0
- unit :
- power
- yaml_snippet :
- foreach: - nodes - techs where: base_tech=supply bounds: min: source_cap_min max: source_cap_max
array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8f350>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8f550>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8fa50>], [nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8f950>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d1e8f0d0>, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064c550>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064c2d0>, nan]], dtype=object) - unmet_demand(nodes, carriers, timesteps)objectnan ... variables[unmet_demand][...
- obj_type :
- variables
- references :
- {'system_balance', 'min_cost_optimisation'}
- coords_in_name :
- False
- title :
- Unmet demand (load shedding)
- description :
- 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.
- default :
- 0
- unit :
- energy
- yaml_snippet :
- foreach: - nodes - carriers - timesteps where: config.ensure_feasibility=True bounds: min: 0 max: .inf
array([[[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048e5d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048de50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048e850>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048e750>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048dd50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048e250>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048e3d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048d6d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048ec50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048eb50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048e7d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d048d850>, ... <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053cdd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053ce50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053ced0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053cf50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053cfd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d050>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d0d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d150>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d1d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d250>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d2d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d350>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d3d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d450>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d4d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d550>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d5d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d650>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d053d6d0>]]], dtype=object) - unused_supply(nodes, carriers, timesteps)objectnan ... variables[unused_supply]...
- obj_type :
- variables
- references :
- {'system_balance', 'min_cost_optimisation'}
- coords_in_name :
- False
- title :
- Unused supply (curtailment)
- description :
- 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).
- default :
- 0
- unit :
- energy
- yaml_snippet :
- foreach: - nodes - carriers - timesteps where: config.ensure_feasibility=True bounds: min: -.inf max: 0
array([[[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064c450>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064df50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064d550>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064e6d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064e5d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064c750>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064c0d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064e250>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064de50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064cd50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064eb50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d064c9d0>, ... <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055a5d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055a650>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055a6d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055a750>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055a7d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055a850>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055a8d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055a950>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055a9d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055aa50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055aad0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055ab50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055abd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055ac50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055acd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055ad50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055add0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055ae50>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d055aed0>]]], dtype=object) - flow_out_inc_eff(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- global_expressions
- references :
- {'balance_transmission', 'balance_supply_no_storage', 'balance_conversion'}
- coords_in_name :
- False
- title :
- Carrier outflow including losses
- description :
- Outflows after taking efficiency losses into account.
- default :
- 0
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: flow_out equations: - where: base_tech=transmission expression: "flow_out / (\n flow_out_eff * flow_out_parasitic_eff *\n flow_out_eff_per_distance ** distance\n)" - where: NOT base_tech=transmission expression: flow_out / (flow_out_eff * flow_out_parasitic_eff)
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d211e0b0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d211e680>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d211e2c0>, ..., <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fda08cd2290>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fda08cd0dc0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fda08cd1360>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d215d9f0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d215e710>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d215c220>, ..., <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d215d960>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d215d750>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d215fa60>]], ... ..., <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04d18a0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04d1930>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04d1a50>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c2fd0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c3050>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c30d0>, ..., <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c46d0>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c4750>, <calliope.backend.pyomo_backend_model.ObjVariable object at 0x7fd9d05c47d0>], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - flow_in_inc_eff(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- global_expressions
- references :
- {'balance_demand', 'balance_transmission', 'balance_conversion'}
- coords_in_name :
- False
- title :
- Carrier inflow including losses
- description :
- Inflows after taking efficiency losses into account.
- default :
- 0
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: flow_in equations: - where: base_tech=transmission expression: flow_in * flow_in_eff * flow_in_eff_per_distance ** distance - where: NOT base_tech=transmission expression: flow_in * flow_in_eff
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d20ca320>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d20caad0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d20cb9d0>, ..., <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04a11e0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04a32b0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04a33d0>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04a33a0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04a2aa0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04a2860>, ..., <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04a3f70>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04a3ee0>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d04a3fa0>]], ... <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d0512c20>, <pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d05120b0>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - cost_var(nodes, techs, costs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- global_expressions
- references :
- {'cost'}
- coords_in_name :
- False
- title :
- Variable operating costs
- description :
- The operating costs per timestep of a technology.
- default :
- 0
- unit :
- cost_per_time
- yaml_snippet :
- foreach: - nodes - techs - costs - timesteps where: cost_export OR cost_flow_in OR cost_flow_out equations: - expression: timestep_weights * ($cost_export + $cost_flow_out + $cost_flow_in) sub_expressions: cost_export: - where: any(carrier_export, over=carriers) AND any(cost_export, over=carriers) expression: sum(cost_export * flow_export, over=carriers) - where: NOT (any(carrier_export, over=carriers) AND any(cost_export, over=carriers)) expression: '0' cost_flow_in: - where: base_tech=supply expression: cost_flow_in * source_use - where: NOT base_tech=supply expression: sum(cost_flow_in * flow_in, over=carriers) cost_flow_out: - expression: sum(cost_flow_out * flow_out, over=carriers)
array([[[[nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan]]], [[[nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan]], ... [[[nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan]], [[<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d1ee4970>, <pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d03701f0>, <pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d0370b20>, ..., <pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d1ebe8c0>, <pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d1ebe980>, <pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d1ebea40>]], [[nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - cost_investment_flow_cap(nodes, techs, carriers, costs)objectnan nan ... nan nan
- obj_type :
- global_expressions
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Flow capacity investment costs
- description :
- The investment costs associated with the nominal/rated capacity of a technology.
- default :
- 0
- yaml_snippet :
- foreach: - nodes - techs - carriers - costs where: flow_cap AND (cost_flow_cap OR cost_flow_cap_per_distance) equations: - expression: $cost_sum * flow_cap sub_expressions: cost_sum: - where: base_tech=transmission expression: (cost_flow_cap + cost_flow_cap_per_distance * distance) * 0.5 - where: NOT base_tech=transmission expression: cost_flow_cap
array([[[[nan], [nan], [<pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d0425690>]], [[nan], [nan], [<pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d0425d20>]], [[nan], [nan], [<pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d0426290>]], [[nan], [nan], [nan]], [[nan], [nan], [nan]], ... [[nan], [nan], [nan]], [[nan], [nan], [nan]], [[<pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d0427d90>], [nan], [nan]], [[nan], [<pyomo.core.expr.numeric_expr.MonomialTermExpression object at 0x7fd9d0427d30>], [nan]], [[nan], [nan], [nan]]]], dtype=object) - cost_investment(nodes, techs, costs)object(parameters[timestep_resolution]...
- obj_type :
- global_expressions
- references :
- {'cost'}
- coords_in_name :
- False
- title :
- Total investment costs
- description :
- The installation costs of a technology, including annualised investment costs and annual maintenance costs.
- default :
- 0
- unit :
- cost
- yaml_snippet :
- foreach: - nodes - techs - costs where: cost_investment_flow_cap OR cost_investment_storage_cap OR cost_investment_source_cap OR cost_investment_area_use OR cost_investment_purchase equations: - expression: "$annualisation_weight * (\n ($depreciation_rate + cost_om_annual_investment_fraction) * (\n sum(default_if_empty(cost_investment_flow_cap, 0), over=carriers) +\n\ \ default_if_empty(cost_investment_storage_cap, 0) +\n default_if_empty(cost_investment_source_cap, 0) +\n default_if_empty(cost_investment_area_use, 0) +\n default_if_empty(cost_investment_purchase, 0)\n )\n + sum(cost_om_annual * flow_cap, over=carriers)\n)\n" sub_expressions: annualisation_weight: - expression: sum(timestep_resolution * timestep_weights, over=timesteps) / 8760 depreciation_rate: - where: cost_depreciation_rate expression: cost_depreciation_rate - where: NOT cost_depreciation_rate AND cost_interest_rate=0 expression: 1 / lifetime - where: NOT cost_depreciation_rate AND cost_interest_rate>0 expression: (cost_interest_rate * ((1 + cost_interest_rate) ** lifetime)) / (((1 + cost_interest_rate) ** lifetime) - 1)
array([[[<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d0581660>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d0582b90>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d0580d90>], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan]], [[nan], [nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d71c0>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d67a0>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d7430>], [nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d6d70>], ... [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d7010>], [nan], [nan], [nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d6080>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d69b0>], [nan]], [[nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d42e0>], [nan], [nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d4ee0>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d78b0>], [nan], [nan], [nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d7970>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d6f50>], [nan]]], dtype=object) - cost(nodes, techs, costs)object(parameters[timestep_resolution]...
- obj_type :
- global_expressions
- references :
- {'min_cost_optimisation'}
- coords_in_name :
- False
- title :
- Total costs
- description :
- The total annualised costs of a technology, including installation and operation costs.
- default :
- 0
- unit :
- cost
- yaml_snippet :
- foreach: - nodes - techs - costs where: cost_investment OR cost_var equations: - expression: $cost_investment + $cost_var_sum sub_expressions: cost_investment: - where: cost_investment expression: cost_investment - where: NOT cost_investment expression: '0' cost_var_sum: - where: cost_var expression: sum(cost_var, over=timesteps) - where: NOT cost_var expression: '0' active: true
array([[[<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d0581660>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d0582b90>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d0580d90>], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan]], [[nan], [nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d71c0>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d67a0>], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d7430>], [nan], [<pyomo.core.expr.numeric_expr.SumExpression object at 0x7fd9d05d60e0>], ... [<pyomo.core.expr.numeric_expr.SumExpression object at 0x7fd9d05d7ee0>], [nan], [nan], [nan], [<pyomo.core.expr.numeric_expr.SumExpression object at 0x7fd9d05d4fd0>], [<pyomo.core.expr.numeric_expr.SumExpression object at 0x7fd9d05d5f60>], [nan]], [[nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d42e0>], [nan], [nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d4ee0>], [<pyomo.core.expr.numeric_expr.SumExpression object at 0x7fd9d05d4a90>], [nan], [nan], [nan], [<pyomo.core.expr.numeric_expr.ProductExpression object at 0x7fd9d05d7970>], [<pyomo.core.expr.numeric_expr.SumExpression object at 0x7fd9d05d4190>], [nan]]], dtype=object) - area_use_per_flow_capacity(nodes, techs, carriers)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set a fixed relationship between a technology's flow capacity and its area use.
- yaml_snippet :
- foreach: - nodes - techs - carriers where: area_use AND area_use_per_flow_cap equations: - expression: area_use == flow_cap * area_use_per_flow_cap
array([[[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], ... [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d205b000>, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d04706e0>, nan, nan], [nan, nan, nan], [nan, nan, nan]]], dtype=object) - area_use_capacity_per_loc(nodes)objectnan ... constraints[area_use_cap...
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set an upper bound on the total area that all technologies with `area_use` can occupy at a given node.
- yaml_snippet :
- foreach: - nodes where: area_use AND available_area equations: - expression: sum(area_use, over=techs) <= available_area
array([nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d205b5b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d04717f0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0470980>], dtype=object) - balance_conversion(nodes, techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the relationship between a `conversion` technology's outflow and consumption.
- yaml_snippet :
- foreach: - nodes - techs - timesteps where: base_tech=conversion AND NOT include_storage=true equations: - where: NOT [chp] in techs expression: sum(flow_out_inc_eff, over=carriers) == sum(flow_in_inc_eff, over=carriers) - where: '[chp] in techs' expression: flow_out_inc_eff[carriers=electricity] == sum(flow_in_inc_eff, over=carriers)
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], dtype=object) - flow_out_max(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound of a technology's outflow.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: carrier_out AND NOT operating_units equations: - expression: flow_out <= flow_cap * timestep_resolution * flow_out_parasitic_eff
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d20e8050>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d20eb5b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1fe98d0>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5bd90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5b8c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5b380>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f59240>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f59da0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f58a60>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f588a0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5ad60>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5a200>]], ... ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1e10>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1e80>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1ef0>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1f60>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1fd0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d2040>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3310>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3380>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d33f0>], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - flow_in_max(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound of a technology's inflow.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: carrier_in AND NOT operating_units equations: - expression: flow_in <= flow_cap * timestep_resolution
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d37e0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3930>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3b60>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599b00>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599b70>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599be0>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599c50>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599cc0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599d30>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d059b000>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d059b070>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d059b0e0>]], ... <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d04f7cb0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d04f7d20>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - source_max(nodes, techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound of a `supply` technology's source consumption.
- yaml_snippet :
- foreach: - nodes - techs - timesteps where: source_cap equations: - expression: source_use <= timestep_resolution * source_cap
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598210>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d025aac0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d025a580>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0660360>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d06603d0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0660440>], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d06604b0>, ... [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018d940>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018d9b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018da20>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018ecf0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018ed60>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018edd0>], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018ee40>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018eeb0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018ef20>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01d0280>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01d02f0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01d0360>], [nan, nan, nan, ..., nan, nan, nan]]], dtype=object) - system_balance(nodes, carriers, timesteps)objectnan ... constraints[system_balan...
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- 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.
- yaml_snippet :
- foreach: - nodes - carriers - timesteps equations: - expression: sum(flow_out, over=techs) - sum(flow_in, over=techs) - $flow_export + $unmet_demand_and_unused_supply == 0 sub_expressions: flow_export: - where: any(carrier_export, over=techs) expression: sum(flow_export, over=techs) - where: NOT any(carrier_export, over=techs) expression: '0' unmet_demand_and_unused_supply: - where: config.ensure_feasibility=True expression: unmet_demand + unused_supply - where: NOT config.ensure_feasibility=True expression: '0'
array([[[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0072a50>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3a10>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05987c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598c90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598050>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598b40>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598670>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598910>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598130>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0472970>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0472430>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d025b000>, ... <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111780>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01117f0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111860>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01118d0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111940>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01119b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111a20>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111a90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111b00>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111b70>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111be0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111c50>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111cc0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111d30>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111da0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111e10>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111e80>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111ef0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111f60>]]], dtype=object) - balance_demand(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound on, or a fixed total of, that a demand technology must dump to its sink in each timestep.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: base_tech=demand equations: - where: sink_use_equals expression: flow_in_inc_eff == sink_use_equals * $sink_scaler - where: NOT sink_use_equals AND sink_use_max expression: flow_in_inc_eff <= sink_use_max * $sink_scaler sub_expressions: sink_scaler: - where: sink_unit=per_area expression: area_use - where: sink_unit=per_cap expression: sum(flow_cap, over=carriers) - where: sink_unit=absolute expression: '1'
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - balance_supply_no_storage(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the outflow of a `supply` technology to its consumption of the available source.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: base_tech=supply AND NOT include_storage=True equations: - expression: flow_out_inc_eff == source_use * source_eff
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bbd0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bc40>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bcb0>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bd20>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bd90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054be00>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0085160>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d00851d0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0085240>], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - source_availability_supply(nodes, techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound on, or a fixed total of, a `supply` technology's ability to consume its available resource.
- yaml_snippet :
- foreach: - nodes - techs - timesteps where: source_use AND (source_use_equals OR source_use_max) equations: - where: source_use_equals expression: source_use == source_use_equals * $source_scaler - where: NOT source_use_equals AND source_use_max expression: source_use <= source_use_max * $source_scaler sub_expressions: source_scaler: - where: source_unit=per_area expression: area_use - where: source_unit=per_cap expression: sum(flow_cap, over=carriers) - where: source_unit=absolute expression: '1'
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d00871c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01d30e0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4d70>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f5ef0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f5f60>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f5fd0>], [nan, nan, nan, ..., nan, nan, nan], ... ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086820>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086f20>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d00877e0>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086660>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0087310>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086f90>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0259550>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0259780>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d025ae40>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], dtype=object) - balance_transmission(techs, timesteps)objectconstraints[balance_transmission...
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the relationship between between carrier flowing into and out of a `transmission` link in each timestep.
- yaml_snippet :
- foreach: - techs - timesteps where: base_tech=transmission equations: - expression: sum(flow_out_inc_eff, over=[nodes, carriers]) == sum(flow_in_inc_eff, over=[nodes, carriers])
array([[<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086040>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d00872a0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4c90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7000>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4520>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7070>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f78c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7e70>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f71c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7bd0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f44b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4360>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4bb0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4ad0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7d90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4b40>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7310>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4ec0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7380>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7a80>, ... [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]], dtype=object) - symmetric_transmission(nodes, techs)objectconstraints[symmetric_transmissi...
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the flow capacity of two `transmission` technologies representing the same link in the system.
- yaml_snippet :
- foreach: - nodes - techs where: base_tech=transmission equations: - expression: sum(flow_cap, over=carriers) == link_flow_cap
array([[<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f77e0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec980>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec280>, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec520>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec210>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec9f0>, nan, nan, nan, nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec600>, nan, nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec2f0>, nan, nan, nan, nan, nan, nan, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ecde0>, nan, nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec1a0>, nan, nan, nan, nan, nan, nan, nan]], dtype=object) - export_balance(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- 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.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: flow_export equations: - expression: flow_out >= flow_export
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... ..., [[<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf79710>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf79780>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf797f0>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf7aac0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf7ab30>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf7aba0>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - link_chp_outputs(nodes, techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the relationship between heat and electricity output
- yaml_snippet :
- foreach: - nodes - techs - timesteps where: '[chp] in techs' equations: - expression: flow_out[carriers=electricity] * heat_to_power_ratio == flow_out[carriers=heat]
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], dtype=object) - min_cost_optimisation()objectobjectives[min_cost_optimisation...
- obj_type :
- objectives
- references :
- set()
- coords_in_name :
- False
- description :
- 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`.
- yaml_snippet :
- equations: - where: any(cost, over=[nodes, techs, costs]) expression: "sum(\n sum(cost, over=[nodes, techs])\n * objective_cost_weights,\n\ \ over=costs\n) + $unmet_demand" - where: NOT any(cost, over=[nodes, techs, costs]) expression: $unmet_demand sub_expressions: unmet_demand: - where: config.ensure_feasibility=True expression: "sum(\n sum(unmet_demand - unused_supply, over=[carriers, nodes])\n\ \ * timestep_weights,\n over=timesteps\n) * bigM" - where: NOT config.ensure_feasibility=True expression: '0' sense: minimise active: true
array(<pyomo.core.kernel.objective.objective object at 0x7fd9d200fd10>, dtype=object)
- costsPandasIndex
PandasIndex(Index(['monetary'], dtype='object', name='costs'))
- techsPandasIndex
PandasIndex(Index(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype='object', name='techs')) - carriersPandasIndex
PandasIndex(Index(['electricity', 'gas', 'heat'], dtype='object', name='carriers'))
- nodesPandasIndex
PandasIndex(Index(['N1', 'X1', 'X2', 'X3'], dtype='object', name='nodes'))
- timestepsPandasIndex
PandasIndex(DatetimeIndex(['2005-07-01 00:00:00', '2005-07-01 01:00:00', '2005-07-01 02:00:00', '2005-07-01 03:00:00', '2005-07-01 04:00:00', '2005-07-01 05:00:00', '2005-07-01 06:00:00', '2005-07-01 07:00:00', '2005-07-01 08:00:00', '2005-07-01 09:00:00', '2005-07-01 10:00:00', '2005-07-01 11:00:00', '2005-07-01 12:00:00', '2005-07-01 13:00:00', '2005-07-01 14:00:00', '2005-07-01 15:00:00', '2005-07-01 16:00:00', '2005-07-01 17:00:00', '2005-07-01 18:00:00', '2005-07-01 19:00:00', '2005-07-01 20:00:00', '2005-07-01 21:00:00', '2005-07-01 22:00:00', '2005-07-01 23:00:00', '2005-07-02 00:00:00', '2005-07-02 01:00:00', '2005-07-02 02:00:00', '2005-07-02 03:00:00', '2005-07-02 04:00:00', '2005-07-02 05:00:00', '2005-07-02 06:00:00', '2005-07-02 07:00:00', '2005-07-02 08:00:00', '2005-07-02 09:00:00', '2005-07-02 10:00:00', '2005-07-02 11:00:00', '2005-07-02 12:00:00', '2005-07-02 13:00:00', '2005-07-02 14:00:00', '2005-07-02 15:00:00', '2005-07-02 16:00:00', '2005-07-02 17:00:00', '2005-07-02 18:00:00', '2005-07-02 19:00:00', '2005-07-02 20:00:00', '2005-07-02 21:00:00', '2005-07-02 22:00:00', '2005-07-02 23:00:00'], dtype='datetime64[ns]', name='timesteps', freq=None))
There is then a public API to access filtered views on this dataset, e.g. input parameters...
m.backend.parameters
<xarray.Dataset> Size: 90kB
Dimensions: (costs: 1, techs: 12, carriers: 3,
nodes: 4, timesteps: 48)
Coordinates:
* costs (costs) object 8B 'monetary'
* techs (techs) object 96B 'N1_to_X2' ... 'su...
* carriers (carriers) object 24B 'electricity' ....
* nodes (nodes) object 32B 'N1' 'X1' 'X2' 'X3'
* timesteps (timesteps) datetime64[ns] 384B 2005-...
Data variables: (12/78)
bigM object 8B parameters[bigM][0]
objective_cost_weights (costs) object 8B parameters[objectiv...
base_tech (techs) object 96B parameters[base_te...
carrier_export (techs, carriers) object 288B nan ......
carrier_in (nodes, techs, carriers) object 1kB n...
carrier_out (nodes, techs, carriers) object 1kB n...
... ...
cost_om_annual_investment_fraction float64 8B nan
cost_purchase float64 8B nan
cost_area_use float64 8B nan
cost_source_cap float64 8B nan
cost_storage_cap float64 8B nan
cost_depreciation_rate float64 8B nan- costs: 1
- techs: 12
- carriers: 3
- nodes: 4
- timesteps: 48
- costs(costs)object'monetary'
array(['monetary'], dtype=object)
- techs(techs)object'N1_to_X2' ... 'supply_grid_power'
array(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype=object) - carriers(carriers)object'electricity' 'gas' 'heat'
array(['electricity', 'gas', 'heat'], dtype=object)
- nodes(nodes)object'N1' 'X1' 'X2' 'X3'
array(['N1', 'X1', 'X2', 'X3'], dtype=object)
- timesteps(timesteps)datetime64[ns]2005-07-01 ... 2005-07-02T23:00:00
array(['2005-07-01T00:00:00.000000000', '2005-07-01T01:00:00.000000000', '2005-07-01T02:00:00.000000000', '2005-07-01T03:00:00.000000000', '2005-07-01T04:00:00.000000000', '2005-07-01T05:00:00.000000000', '2005-07-01T06:00:00.000000000', '2005-07-01T07:00:00.000000000', '2005-07-01T08:00:00.000000000', '2005-07-01T09:00:00.000000000', '2005-07-01T10:00:00.000000000', '2005-07-01T11:00:00.000000000', '2005-07-01T12:00:00.000000000', '2005-07-01T13:00:00.000000000', '2005-07-01T14:00:00.000000000', '2005-07-01T15:00:00.000000000', '2005-07-01T16:00:00.000000000', '2005-07-01T17:00:00.000000000', '2005-07-01T18:00:00.000000000', '2005-07-01T19:00:00.000000000', '2005-07-01T20:00:00.000000000', '2005-07-01T21:00:00.000000000', '2005-07-01T22:00:00.000000000', '2005-07-01T23:00:00.000000000', '2005-07-02T00:00:00.000000000', '2005-07-02T01:00:00.000000000', '2005-07-02T02:00:00.000000000', '2005-07-02T03:00:00.000000000', '2005-07-02T04:00:00.000000000', '2005-07-02T05:00:00.000000000', '2005-07-02T06:00:00.000000000', '2005-07-02T07:00:00.000000000', '2005-07-02T08:00:00.000000000', '2005-07-02T09:00:00.000000000', '2005-07-02T10:00:00.000000000', '2005-07-02T11:00:00.000000000', '2005-07-02T12:00:00.000000000', '2005-07-02T13:00:00.000000000', '2005-07-02T14:00:00.000000000', '2005-07-02T15:00:00.000000000', '2005-07-02T16:00:00.000000000', '2005-07-02T17:00:00.000000000', '2005-07-02T18:00:00.000000000', '2005-07-02T19:00:00.000000000', '2005-07-02T20:00:00.000000000', '2005-07-02T21:00:00.000000000', '2005-07-02T22:00:00.000000000', '2005-07-02T23:00:00.000000000'], dtype='datetime64[ns]')
- bigM()objectparameters[bigM][0]
- obj_type :
- parameters
- references :
- {'min_cost_optimisation'}
- coords_in_name :
- False
- title :
- None
- description :
- BigM is a large value used to define certain optimisation problems. See https://en.wikipedia.org/wiki/Big_M_method for more information. This value should be larger than the largest values that any decision variables can take, but should not be **too** large (i.e., do not set it greater than 3 orders of magnitude above the numeric range of the model). If too large, numerical problems may arise in the optimisation.
- unit :
- None
- default :
- 1000000000.0
- original_dtype :
- float64
array(<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa7930>, dtype=object) - objective_cost_weights(costs)objectparameters[objective_cost_weight...
- obj_type :
- parameters
- references :
- {'min_cost_optimisation'}
- coords_in_name :
- False
- title :
- None
- description :
- Weightings for cost classes to apply in the objective function.
- unit :
- None
- default :
- 1
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa7f70>], dtype=object) - base_tech(techs)objectparameters[base_tech][0] ... par...
- obj_type :
- parameters
- references :
- {'balance_transmission', 'balance_supply_no_storage', 'balance_demand', 'cost_var', 'flow_out_inc_eff', 'source_use', 'source_cap', 'symmetric_transmission', 'cost_investment_flow_cap', 'balance_conversion', 'link_flow_cap', 'flow_in_inc_eff'}
- coords_in_name :
- False
- title :
- Abstract base technology name.
- description :
- Should be the name of one of the abstract base classes, from which some initial parameter defaults will be derived and with which certain base math will be triggered.
- unit :
- None
- default :
- nan
- original_dtype :
- object
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0280>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0320>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0460>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff04b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0500>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0550>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff05a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff05f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0640>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff03c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0690>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff06e0>], dtype=object) - carrier_export(techs, carriers)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'flow_export'}
- coords_in_name :
- False
- title :
- None
- description :
- Carrier(s) produced by this technology that can be exported out of the system boundaries without having to go to a pre-defined `sink` (i.e., via a `demand` technology). Must be a subset of `carrier_out`.
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0aa0>, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff09b0>, nan, nan], [nan, nan, nan], [nan, nan, nan]], dtype=object) - carrier_in(nodes, techs, carriers)objectnan nan ... nan nan
- obj_type :
- parameters
- references :
- {'flow_in_max', 'flow_in'}
- coords_in_name :
- False
- title :
- None
- description :
- Carrier(s) consumed by this technology. Only `transmission`, `conversion`, `storage`, and `demand` technologies can define this parameter
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[[nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1900>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff19a0>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1a40>], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1a90>], ... [nan, nan, nan]], [[nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff19f0>], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff11d0>, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1860>, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1540>, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1bd0>], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]]], dtype=object) - carrier_out(nodes, techs, carriers)objectnan nan ... nan nan
- obj_type :
- parameters
- references :
- {'flow_out_max', 'flow_out'}
- coords_in_name :
- False
- title :
- None
- description :
- Carrier(s) produced by this technology. Only `transmission`, `conversion`, `storage`, and `supply` technologies can define this parameter
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[[nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff26c0>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2760>], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2800>], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2850>], ... [nan, nan, nan]], [[nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff27b0>], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1810>, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff28f0>], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2350>, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2670>, nan], [nan, nan, nan]]], dtype=object) - color(techs)objectparameters[color][0] ... paramet...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- None
- description :
- Color that can be used when plotting results.
- unit :
- None
- default :
- nan
- original_dtype :
- object
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1ef0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff1c20>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0cd0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff0e10>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2b70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2c60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2580>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2440>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2530>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff22b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2f30>], dtype=object) - cost_flow_cap(nodes, techs, costs, carriers)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'cost_investment_flow_cap'}
- coords_in_name :
- False
- title :
- Cost of flow capacity.
- description :
- Cost per unit of the decision variable `flow_cap`.
- unit :
- $\text{power}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[[[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], ... [[nan, nan, nan]], [[nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff2d50>]], [[nan, nan, nan]], [[nan, nan, nan]], [[nan, nan, nan]], [[<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff3660>, nan, nan]], [[nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff33e0>, nan]], [[nan, nan, nan]]]], dtype=object) - cost_flow_out(techs, costs, carriers, nodes)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'cost_var'}
- coords_in_name :
- False
- title :
- Carrier outflow cost
- description :
- Cost per unit of `flow_in` in each timestep.
- unit :
- $\text{energy}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], ... [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff3d90>, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], [[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]]], dtype=object) - cost_interest_rate(techs, costs)objectparameters[cost_interest_rate][0...
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Interest rate.
- description :
- Used when computing levelized costs and technology depreciation_rate (relative to lifetime).
- unit :
- fraction
- default :
- 0
- original_dtype :
- float64
array([[<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff85a0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8870>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8780>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8140>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff81e0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8050>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8c30>], [nan], [nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8640>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8be0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9040>]], dtype=object) - flow_cap_max(techs, carriers, nodes)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'flow_cap'}
- coords_in_name :
- False
- title :
- Maximum rated flow capacity.
- description :
- Limits `flow_cap` to a maximum.
- unit :
- power.
- default :
- inf
- original_dtype :
- float64
array([[[nan, nan, nan, nan], [nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9bd0>, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9c20>, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9c70>, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff99f0>]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9cc0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9d10>, nan, nan]], [[nan, ... [[nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8c80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8d70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9810>], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff98b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9b30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9b80>], [nan, nan, nan, nan]], [[nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9860>, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], dtype=object) - flow_out_eff(techs, carriers)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'flow_out_inc_eff'}
- coords_in_name :
- False
- title :
- Outflow efficiency
- description :
- Conversion efficiency from the technology to `sink`/`flow_out` (tech dependent). Set as value between 1 (no loss) and 0 (all lost).
- unit :
- fraction.
- default :
- 1.0
- original_dtype :
- float64
array([[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9360>, nan, nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9270>, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa0d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9630>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff8b90>, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], dtype=object) - heat_to_power_ratio(techs)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'link_chp_outputs'}
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa120>, nan, nan, nan, nan, nan], dtype=object) - lifetime(techs)objectparameters[lifetime][0] ... para...
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Technology lifetime
- description :
- Must be defined if fixed capital costs are defined. A reasonable value for many technologies is around 20-25 years.
- unit :
- years.
- default :
- inf
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa5d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffab70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffabc0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffac10>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffac60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffacb0>, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffad00>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffad50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffada0>], dtype=object) - name(techs)objectparameters[name][0] ... paramete...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Technology long-name.
- description :
- Long name of technology, which can be used in post-processing (e.g., plotting).
- unit :
- None
- default :
- nan
- original_dtype :
- object
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9f40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffae40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa300>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb200>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb250>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb2a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb2f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb390>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb3e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb430>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb4d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb520>], dtype=object) - techs_inheritance(techs)objectparameters[techs_inheritance][0]...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- object
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffa7b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb5c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb9d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffba20>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffba70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffbac0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffbb10>, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb930>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffbb60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffbbb0>], dtype=object) - area_use_max(techs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'area_use'}
- coords_in_name :
- False
- title :
- Maximum usable area.
- description :
- If set to a finite value, limits the upper bound of the `area_use` decision variable to this value.
- unit :
- $\text{area}^{2}$.
- default :
- inf
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ff9e00>, nan, nan], dtype=object) - area_use_per_flow_cap(techs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'area_use_per_flow_capacity', 'area_use'}
- coords_in_name :
- False
- title :
- Area use per flow capacity
- description :
- If set, forces `area_use` to follow `flow_cap` with the given numerical ratio (e.g. setting to 1.5 means that `area_use == 1.5 * flow_cap`).
- unit :
- $\frac{\text{area}^{2}}{\text{power}}$.
- default :
- nan
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1ffb890>, nan, nan], dtype=object) - flow_out_parasitic_eff(techs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'flow_out_max', 'flow_out_inc_eff'}
- coords_in_name :
- False
- title :
- Plant parasitic efficiency
- description :
- Additional losses as flow gets transferred from the plant to the carrier, e.g. due to plant parasitic consumption. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- fraction.
- default :
- 1.0
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4050>, nan, nan], dtype=object) - source_unit(techs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'source_availability_supply', 'area_use'}
- coords_in_name :
- False
- title :
- Source unit
- description :
- Sets the unit of `Source` to either `absolute` (unit: `energy`), `per_area` (unit: `energy/area`), or `per_cap` (unit: `energy/power`). `per_area` uses the `area_use` decision variable to scale the source while `per_cap` uses the `flow_cap` decision variable.
- unit :
- None
- default :
- absolute
- original_dtype :
- object
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4280>, nan, nan], dtype=object) - cost_flow_in(techs, costs)objectnan ... parameters[cost_flow_in][2]
- obj_type :
- parameters
- references :
- {'cost_var'}
- coords_in_name :
- False
- title :
- Carrier inflow cost.
- description :
- Cost per unit of `flow_in` in each timestep.
- unit :
- $\text{energy}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[nan], [nan], [nan], [nan], [nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4d20>], [nan], [nan], [nan], [nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4be0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4690>]], dtype=object) - source_use_max(techs)objectnan ... parameters[source_use_ma...
- obj_type :
- parameters
- references :
- {'source_availability_supply'}
- coords_in_name :
- False
- title :
- Maximum bound on sink.
- description :
- Maximum sink use to remove a carrier from the system (e.g., biofuel, coal, rainfall, wind flow). Unit dictated by `source_unit`.
- unit :
- None
- default :
- inf
- original_dtype :
- float64
array([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5040>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4aa0>], dtype=object) - cost_flow_cap_per_distance(techs, costs)objectparameters[cost_flow_cap_per_dis...
- obj_type :
- parameters
- references :
- {'cost_investment_flow_cap'}
- coords_in_name :
- False
- title :
- Cost of flow capacity, per unit distance
- description :
- Cost per unit of the decision variable `flow_cap` and per unit distance of a transmission link. Applied to transmission links only.
- unit :
- $(\text{power}\times\text{distance})^{-1}$
- default :
- 0
- original_dtype :
- float64
array([[<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5450>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe4e10>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5310>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5c70>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5cc0>], [nan], [nan], [nan], [nan], [nan], [nan], [nan]], dtype=object) - distance(techs)objectparameters[distance][0] ... nan
- obj_type :
- parameters
- references :
- {'flow_out_inc_eff', 'cost_investment_flow_cap', 'flow_in_inc_eff'}
- coords_in_name :
- False
- title :
- Distance spanned by link.
- description :
- Used for `..._per_distance` constraints. If not defined, it will be automatically derived from latitude/longitude of nodes in a link.
- unit :
- None
- default :
- 1.0
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe54a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe54f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5b80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fe5720>, nan, nan, nan, nan, nan, nan, nan], dtype=object) - flow_out_eff_per_distance(techs)objectparameters[flow_out_eff_per_dist...
- obj_type :
- parameters
- references :
- {'flow_out_inc_eff'}
- coords_in_name :
- False
- title :
- Outflow (i.e., import from node) efficiency per distance of transmission links.
- description :
- Total link efficiency will be calculated as $\text{flow\_out\_eff}\times{}\text{flow\_out\_eff\_per\_distance}^\text{distance}$. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- None
- default :
- 1.0
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2166c60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2166f30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d21671b0>, nan, nan, nan, nan, nan, nan, nan, nan, nan], dtype=object) - cost_export(nodes, techs, costs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'cost_var'}
- coords_in_name :
- False
- title :
- Carrier export cost.
- description :
- Cost per unit of `flow_export` in each timestep. Usually used in the negative sense, as a subsidy.
- unit :
- $\text{energy}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], ..., [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], ..., [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], [[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]]], dtype=object) - cost_om_annual(nodes, techs, costs)objectnan nan nan ... nan nan
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Annual O&M costs
- description :
- Annual costs applied per unit `flow_cap`. These costs are not subject to being recalculated relative to technology lifetime, only scaled to reflect the fraction of one year that the model represents (e.g., 7 days ~= 0.02 of a year).
- unit :
- $\text{power}^{-1}$.
- default :
- 0
- original_dtype :
- float64
array([[[nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan]], [[nan], [nan], [nan], [nan], [nan], [nan], [nan], ... [nan], [nan], [nan], [nan], [nan], [nan], [nan]], [[nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [nan], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2165630>], [nan], [nan]]], dtype=object) - available_area(nodes)objectnan ... parameters[available_are...
- obj_type :
- parameters
- references :
- {'area_use_capacity_per_loc'}
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- inf
- original_dtype :
- float64
array([nan, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2146e40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2151d10>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2151130>], dtype=object) - latitude(nodes)objectparameters[latitude][0] ... para...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Latitude (WGS84 / EPSG4326).
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d213dc70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7f980>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7fa70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7efd0>], dtype=object) - longitude(nodes)objectparameters[longitude][0] ... par...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Longitude (WGS84 / EPSG4326).
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f1e530>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f1d2c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f89e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f89bd0>], dtype=object) - source_use_equals(techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'source_availability_supply'}
- coords_in_name :
- False
- title :
- Required sink use.
- description :
- Required amount of carrier removal from the system (e.g., biofuel, coal, rainfall, wind flow). Unit dictated by `source_unit`.
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], ... <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f72670>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa41e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4500>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4140>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4690>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4cd0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa44b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa5090>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa4c80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa5450>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa54f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa5400>], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]], dtype=object) - sink_use_equals(timesteps, techs, nodes)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- parameters
- references :
- {'balance_demand'}
- coords_in_name :
- False
- title :
- Required sink use.
- description :
- Required amount of carrier removal from the system (e.g., electricity demand, transport distance). Unit dictated by `sink_unit`.
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([[[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., ... ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]], [[nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan], ..., [nan, nan, nan, nan], [nan, nan, nan, nan], [nan, nan, nan, nan]]], dtype=object) - definition_matrix(nodes, techs, carriers)objectparameters[definition_matrix][0]...
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- bool
array([[[<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1fa62b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7fc00>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f7fc50>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f89b30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f89d60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20094a0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009950>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009f40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009f90>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009fe0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a210>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a260>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a2b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a300>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a350>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a3a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a120>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a3f0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009db0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a440>, ... <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010640>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010690>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20106e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010730>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010780>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010870>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20108c0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010910>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010960>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010a00>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010a50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010aa0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010af0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010b40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010b90>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010be0>], [<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010c30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010c80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010cd0>]]], dtype=object) - timestep_resolution(timesteps)objectparameters[timestep_resolution][...
- obj_type :
- parameters
- references :
- {'cost_investment', 'flow_out_max', 'flow_in_max', 'source_max'}
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009b80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a170>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d200a0d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2009c70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f1d360>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f74320>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f742d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d1f75c70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010e60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010dc0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010d20>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010fa0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20111d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011450>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010820>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20114a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20114f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011540>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011630>, ... <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20119a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20119f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011a40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011a90>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011b30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011b80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011bd0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011c20>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011c70>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011cc0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011ae0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011d10>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011d60>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011db0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011e00>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011e50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011ef0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2011f40>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012030>], dtype=object) - timestep_weights(timesteps)objectparameters[timestep_weights][0] ...
- obj_type :
- parameters
- references :
- {'cost_investment', 'cost_var', 'min_cost_optimisation'}
- coords_in_name :
- False
- title :
- None
- description :
- None
- unit :
- None
- default :
- nan
- original_dtype :
- float64
array([<calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2010eb0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012440>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20124e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012580>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20125d0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012620>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012670>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20126c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012710>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012760>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20127b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012800>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012850>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20128f0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012940>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012990>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20129e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012a30>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012a80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20128a0>, ... <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012e90>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012ee0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012da0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012f80>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012d50>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2012fd0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20123a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013020>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013070>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20130c0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20131b0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013200>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013250>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20132a0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013340>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013390>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d20133e0>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013430>, <calliope.backend.pyomo_backend_model.ObjParameter object at 0x7fd9d2013480>], dtype=object) - cap_method()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Capacity method switch.
- description :
- One of 'continuous' (LP model) or 'integer' (integer/binary unit capacity).
- unit :
- None
- default :
- continuous
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- integer_dispatch()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Integer dispatch switch.
- description :
- When true, will limit per-timestep out/inflows relative to the number of units of a technology that are in operation. Requires `cap_method=integer`.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- include_storage()float64nan
- obj_type :
- parameters
- references :
- {'balance_supply_no_storage', 'balance_conversion'}
- coords_in_name :
- False
- title :
- Storage method switch.
- description :
- When true, math will be triggered to allow discontinuous carrier inflow and outflows across timesteps.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- force_async_flow()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Force asynchronous out/inflow.
- description :
- If True, non-zero `flow_out` and `flow_in` cannot both occur in the same timestep.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_per_storage_cap_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum flow capacity per storage capacity
- description :
- ratio of minimum charge/discharge (kW) for a given storage capacity (kWh).
- unit :
- $\text{hour}^{-1}$
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_per_storage_cap_max()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Maximum flow capacity per storage capacity
- description :
- ratio of maximum charge/discharge (kW) for a given storage capacity (kWh).
- unit :
- $\text{hour}^{-1}$
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_max_systemwide()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- System-wide maximum rated flow capacity.
- description :
- Limits the sum of `flow_cap` over all nodes in the model to a maximum. If `cap_method=integer`, this will be scaled by the number of integer units of a technology purchased.
- unit :
- power or $\frac{\text{power}}{\text{unit}}$.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_min()float64nan
- obj_type :
- parameters
- references :
- {'flow_cap'}
- coords_in_name :
- False
- title :
- Minimum rated flow capacity.
- description :
- This acts as lower limit (lower bound) for flow_cap. If `cap_method` = integer, this will be scaled by the number of integer units of a technology purchased. !!! note If `cap_method` = continuous (which is set by default), then setting `flow_cap_min` to any value greater than 0 forces the model to always respect that limit, which in turn forces investment into the technology. Use this to enforce given investment plans, or to account for existing technologies that cannot be decommissioned. An example: If `cap_method` = continuous and `flow_cap_min` = 100, then flow_cap has to be at least 100. This means that going to 0 is not possible, unless you switch to `cap_method` = integer (see [cap_method][]).
- unit :
- power or $\frac{\text{power}}{\text{unit}}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_min_systemwide()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- System-wide minimum rated flow capacity.
- description :
- Limits the sum of `flow_cap` over all nodes in the model to a minimum. NOTE: this will _force_ the sum of `flow_cap` to a minimum value unless `cap_method` is set to `integer`.
- unit :
- power.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_out_min_relative()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum outflow
- description :
- Set to a value between 0 and 1 to force minimum `flow_out` as a fraction of the technology rated capacity. If non-zero and `cap_method` is `continuous`, this will force the technology to operate above its minimum value at every timestep.
- unit :
- fraction.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_cap_per_unit()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Flow capacity per purchased unit
- description :
- Set the capacity of each integer unit of a technology purchased, if `cap_method` is `integer`.
- unit :
- $\frac{\text{power}}{\text{unit}}$.
- default :
- nan
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_in_eff()float64nan
- obj_type :
- parameters
- references :
- {'flow_in_inc_eff'}
- coords_in_name :
- False
- title :
- Inflow efficiency
- description :
- Conversion efficiency from `source`/`flow_in` (tech dependent) into the technology. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- fraction.
- default :
- 1.0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_ramping()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Ramping rate
- description :
- limit maximum outflow / inflow / outflow - inflow (technology base class dependent) to a fraction of maximum capacity, which increases by that fraction at each timestep.
- unit :
- $\frac{\text{fraction}}{\text{hour}}$.
- default :
- 1.0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- export_max()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Maximum allowed carrier export
- description :
- If `carrier_export` is defined, limit the allowed export of produced carrier for a technology.
- unit :
- power.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- area_use_min()float64nan
- obj_type :
- parameters
- references :
- {'area_use'}
- coords_in_name :
- False
- title :
- Minimum usable area.
- description :
- Limits the lower bound of the `area_use` decision variable to this value.
- unit :
- $\text{area}^{2}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_cap_max()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Maximum storage capacity.
- description :
- Limit upper bound of `storage_cap` decision variable.
- unit :
- energy.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_cap_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum storage capacity.
- description :
- Limit lower bound of `storage_cap` decision variable.
- unit :
- energy.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_cap_per_unit()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Storage capacity per purchased unit.
- description :
- Set the storage capacity of each integer unit of a technology purchased.
- unit :
- $\frac{\text{energy}}{\text{unit}}$.
- default :
- nan
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_discharge_depth()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Storage depth of discharge.
- description :
- Defines the minimum level of storage state of charge, as a fraction of total storage capacity.
- unit :
- fraction.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_initial()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Initial storage level.
- description :
- Set stored flow in device at the first timestep, as a fraction of total storage capacity.
- unit :
- fraction.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- storage_loss()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Storage loss rate
- description :
- Rate of storage loss per hour, used to calculate lost stored flow as `(1 - storage_loss)^hours_per_timestep`.
- unit :
- $\frac{\text{fraction}}{\text{hour}}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cyclic_storage()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Cyclic storage switch.
- description :
- If true, link storage levels in the last model timestep with the first model timestep. `inter_cluster_storage` custom math must be included if using time clustering and setting this to `true`. This must be set to `false` if using `operate` mode.
- unit :
- boolean.
- default :
- True
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- purchased_units_min_systemwide()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- System-wide minimum installed integer units of a technology.
- description :
- sets the lower bound of the sum across all nodes of the decision variable `units` for a particular technology.
- unit :
- integer.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- purchased_units_max_systemwide()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- System-wide maximum installed integer units of a technology.
- description :
- sets the upper bound of the sum across all nodes of the decision variable `units` for a particular technology.
- unit :
- integer.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- purchased_units_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum number of purchased units
- description :
- Limits the lower bound of units purchased if `cap_method` is `integer`.
- unit :
- integer.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- purchased_units_max()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Maximum number of purchased units.
- description :
- Limits the upper bound of units purchased if `cap_method` is `integer`. If set to `1`, will effectively set the `purchased_units` to a binary decision variable.
- unit :
- integer.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- sink_unit()float64nan
- obj_type :
- parameters
- references :
- {'balance_demand', 'area_use'}
- coords_in_name :
- False
- title :
- Sink unit
- description :
- Sets the unit of `Sink` to either `absolute` (unit: `energy`), `per_area` (unit: `energy/area`), or `per_cap` (unit: `energy/power`). `per_area` uses the `area_use` decision variable to scale the sink while `per_cap` uses the `flow_cap` decision variable.
- unit :
- None
- default :
- absolute
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- sink_use_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum bound on sink.
- description :
- Minimum sink use to remove a carrier from the system (e.g., electricity demand, transport distance). Unit dictated by `sink_unit`.
- unit :
- None
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- sink_use_max()float64nan
- obj_type :
- parameters
- references :
- {'balance_demand'}
- coords_in_name :
- False
- title :
- Maximum bound on sink.
- description :
- Maximum sink use to remove a carrier from the system (e.g., electricity demand, transport distance). Unit dictated by `sink_unit`.
- unit :
- None
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_cap_equals_flow_cap()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Source capacity equals flow capacity.
- description :
- If true, the decision variables `source_cap` and `flow_cap` are forced to equal one another.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_eff()float64nan
- obj_type :
- parameters
- references :
- {'balance_supply_no_storage'}
- coords_in_name :
- False
- title :
- Source inflow efficiency
- description :
- Conversion efficiency from the technology from `source`. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- fraction.
- default :
- 1.0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_use_min()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Minimum bound on source.
- description :
- Minimum source use to add a carrier from the system (e.g., biofuel, coal, rainfall, wind flow). Unit dictated by `source_unit`.
- unit :
- None
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_cap_max()float64nan
- obj_type :
- parameters
- references :
- {'source_cap'}
- coords_in_name :
- False
- title :
- Maximum installed source consumption capacity.
- description :
- Upper limit on `source_cap` decision variable.
- unit :
- power.
- default :
- inf
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- source_cap_min()float64nan
- obj_type :
- parameters
- references :
- {'source_cap'}
- coords_in_name :
- False
- title :
- Minimum installed source consumption capacity
- description :
- Lower limit on `source_cap` decision variable.
- unit :
- power.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- one_way()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- One way transmission.
- description :
- Forces a transmission technology to only move flow in one direction on the link, i.e. from `from` to `to`.
- unit :
- None
- default :
- False
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- flow_in_eff_per_distance()float64nan
- obj_type :
- parameters
- references :
- {'flow_in_inc_eff'}
- coords_in_name :
- False
- title :
- Inflow (i.e., export from node) efficiency per distance of transmission links.
- description :
- Total link efficiency will be calculated as $\text{flow\_in\_eff}\times{}\text{flow\_in\_eff\_per\_distance}^\text{distance}$. Set as value between 1 (no loss) and 0 (all lost).
- unit :
- None
- default :
- 1.0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_purchase_per_distance()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Purchase cost per unit distance for transmission techs.
- description :
- Cost applied if the binary variable `purchased` is 1 or per unit of the integer variable `units`. Requires the parameter `cap_method` to be `integer`.
- unit :
- $(\text{purchased\_units}\times\text{distance})^{-1}$
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_om_annual_investment_fraction()float64nan
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Fractional annual O&M costs.
- description :
- Add a fraction of the sum of all investment costs except `cost_om_annual` as an additional cost, to represent fixed annual O&M costs. Warning: the sum of all investment costs includes not just those associated with `flow_cap` but also others like those associated with `area_use`!
- unit :
- fraction / total investment.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_purchase()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Purchase cost.
- description :
- Cost applied to the variable `purchased_units`. Requires the parameter `cap_method` to be `integer`.
- unit :
- $\text{purchased\_unit}^{-1}$
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_area_use()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Cost of area use.
- description :
- Cost per unit `area_use`.
- unit :
- $\text{area}^{-2}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_source_cap()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Cost of source flow capacity.
- description :
- Cost per unit `source_cap`.
- unit :
- $\text{power}^{-1}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_storage_cap()float64nan
- obj_type :
- parameters
- references :
- set()
- coords_in_name :
- False
- title :
- Cost of storage capacity.
- description :
- Cost per unit `storage_cap`, i.e., the maximum available capacity of the storage technology's "reservoir".
- unit :
- $\text{energy}^{-1}$.
- default :
- 0
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- cost_depreciation_rate()float64nan
- obj_type :
- parameters
- references :
- {'cost_investment'}
- coords_in_name :
- False
- title :
- Depreciation rate.
- description :
- Applied to "annualise" investment costs so they are comparable to variable costs. If not provided, this will be calculated using technology `lifetime` and `cost_interest_rate`.
- unit :
- fraction.
- default :
- 1
- original_dtype :
- float64
- is_result :
- 0
array(nan)
- costsPandasIndex
PandasIndex(Index(['monetary'], dtype='object', name='costs'))
- techsPandasIndex
PandasIndex(Index(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype='object', name='techs')) - carriersPandasIndex
PandasIndex(Index(['electricity', 'gas', 'heat'], dtype='object', name='carriers'))
- nodesPandasIndex
PandasIndex(Index(['N1', 'X1', 'X2', 'X3'], dtype='object', name='nodes'))
- timestepsPandasIndex
PandasIndex(DatetimeIndex(['2005-07-01 00:00:00', '2005-07-01 01:00:00', '2005-07-01 02:00:00', '2005-07-01 03:00:00', '2005-07-01 04:00:00', '2005-07-01 05:00:00', '2005-07-01 06:00:00', '2005-07-01 07:00:00', '2005-07-01 08:00:00', '2005-07-01 09:00:00', '2005-07-01 10:00:00', '2005-07-01 11:00:00', '2005-07-01 12:00:00', '2005-07-01 13:00:00', '2005-07-01 14:00:00', '2005-07-01 15:00:00', '2005-07-01 16:00:00', '2005-07-01 17:00:00', '2005-07-01 18:00:00', '2005-07-01 19:00:00', '2005-07-01 20:00:00', '2005-07-01 21:00:00', '2005-07-01 22:00:00', '2005-07-01 23:00:00', '2005-07-02 00:00:00', '2005-07-02 01:00:00', '2005-07-02 02:00:00', '2005-07-02 03:00:00', '2005-07-02 04:00:00', '2005-07-02 05:00:00', '2005-07-02 06:00:00', '2005-07-02 07:00:00', '2005-07-02 08:00:00', '2005-07-02 09:00:00', '2005-07-02 10:00:00', '2005-07-02 11:00:00', '2005-07-02 12:00:00', '2005-07-02 13:00:00', '2005-07-02 14:00:00', '2005-07-02 15:00:00', '2005-07-02 16:00:00', '2005-07-02 17:00:00', '2005-07-02 18:00:00', '2005-07-02 19:00:00', '2005-07-02 20:00:00', '2005-07-02 21:00:00', '2005-07-02 22:00:00', '2005-07-02 23:00:00'], dtype='datetime64[ns]', name='timesteps', freq=None))
... or constraints
m.backend.constraints
<xarray.Dataset> Size: 362kB
Dimensions: (nodes: 4, techs: 12, carriers: 3, timesteps: 48)
Coordinates:
* techs (techs) object 96B 'N1_to_X2' ... 'supply_gri...
* carriers (carriers) object 24B 'electricity' 'gas' 'heat'
* nodes (nodes) object 32B 'N1' 'X1' 'X2' 'X3'
* timesteps (timesteps) datetime64[ns] 384B 2005-07-01 .....
Data variables: (12/14)
area_use_per_flow_capacity (nodes, techs, carriers) object 1kB nan ... nan
area_use_capacity_per_loc (nodes) object 32B nan ... constraints[area_u...
balance_conversion (nodes, techs, timesteps) object 18kB nan ......
flow_out_max (nodes, techs, carriers, timesteps) object 55kB ...
flow_in_max (nodes, techs, carriers, timesteps) object 55kB ...
source_max (nodes, techs, timesteps) object 18kB nan ......
... ...
balance_supply_no_storage (nodes, techs, carriers, timesteps) object 55kB ...
source_availability_supply (nodes, techs, timesteps) object 18kB nan ......
balance_transmission (techs, timesteps) object 5kB constraints[bal...
symmetric_transmission (nodes, techs) object 384B constraints[symmet...
export_balance (nodes, techs, carriers, timesteps) object 55kB ...
link_chp_outputs (nodes, techs, timesteps) object 18kB nan ......- nodes: 4
- techs: 12
- carriers: 3
- timesteps: 48
- techs(techs)object'N1_to_X2' ... 'supply_grid_power'
array(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype=object) - carriers(carriers)object'electricity' 'gas' 'heat'
array(['electricity', 'gas', 'heat'], dtype=object)
- nodes(nodes)object'N1' 'X1' 'X2' 'X3'
array(['N1', 'X1', 'X2', 'X3'], dtype=object)
- timesteps(timesteps)datetime64[ns]2005-07-01 ... 2005-07-02T23:00:00
array(['2005-07-01T00:00:00.000000000', '2005-07-01T01:00:00.000000000', '2005-07-01T02:00:00.000000000', '2005-07-01T03:00:00.000000000', '2005-07-01T04:00:00.000000000', '2005-07-01T05:00:00.000000000', '2005-07-01T06:00:00.000000000', '2005-07-01T07:00:00.000000000', '2005-07-01T08:00:00.000000000', '2005-07-01T09:00:00.000000000', '2005-07-01T10:00:00.000000000', '2005-07-01T11:00:00.000000000', '2005-07-01T12:00:00.000000000', '2005-07-01T13:00:00.000000000', '2005-07-01T14:00:00.000000000', '2005-07-01T15:00:00.000000000', '2005-07-01T16:00:00.000000000', '2005-07-01T17:00:00.000000000', '2005-07-01T18:00:00.000000000', '2005-07-01T19:00:00.000000000', '2005-07-01T20:00:00.000000000', '2005-07-01T21:00:00.000000000', '2005-07-01T22:00:00.000000000', '2005-07-01T23:00:00.000000000', '2005-07-02T00:00:00.000000000', '2005-07-02T01:00:00.000000000', '2005-07-02T02:00:00.000000000', '2005-07-02T03:00:00.000000000', '2005-07-02T04:00:00.000000000', '2005-07-02T05:00:00.000000000', '2005-07-02T06:00:00.000000000', '2005-07-02T07:00:00.000000000', '2005-07-02T08:00:00.000000000', '2005-07-02T09:00:00.000000000', '2005-07-02T10:00:00.000000000', '2005-07-02T11:00:00.000000000', '2005-07-02T12:00:00.000000000', '2005-07-02T13:00:00.000000000', '2005-07-02T14:00:00.000000000', '2005-07-02T15:00:00.000000000', '2005-07-02T16:00:00.000000000', '2005-07-02T17:00:00.000000000', '2005-07-02T18:00:00.000000000', '2005-07-02T19:00:00.000000000', '2005-07-02T20:00:00.000000000', '2005-07-02T21:00:00.000000000', '2005-07-02T22:00:00.000000000', '2005-07-02T23:00:00.000000000'], dtype='datetime64[ns]')
- area_use_per_flow_capacity(nodes, techs, carriers)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set a fixed relationship between a technology's flow capacity and its area use.
- yaml_snippet :
- foreach: - nodes - techs - carriers where: area_use AND area_use_per_flow_cap equations: - expression: area_use == flow_cap * area_use_per_flow_cap
array([[[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], ... [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d205b000>, nan, nan], [nan, nan, nan], [nan, nan, nan]], [[nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d04706e0>, nan, nan], [nan, nan, nan], [nan, nan, nan]]], dtype=object) - area_use_capacity_per_loc(nodes)objectnan ... constraints[area_use_cap...
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set an upper bound on the total area that all technologies with `area_use` can occupy at a given node.
- yaml_snippet :
- foreach: - nodes where: area_use AND available_area equations: - expression: sum(area_use, over=techs) <= available_area
array([nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d205b5b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d04717f0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0470980>], dtype=object) - balance_conversion(nodes, techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the relationship between a `conversion` technology's outflow and consumption.
- yaml_snippet :
- foreach: - nodes - techs - timesteps where: base_tech=conversion AND NOT include_storage=true equations: - where: NOT [chp] in techs expression: sum(flow_out_inc_eff, over=carriers) == sum(flow_in_inc_eff, over=carriers) - where: '[chp] in techs' expression: flow_out_inc_eff[carriers=electricity] == sum(flow_in_inc_eff, over=carriers)
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], dtype=object) - flow_out_max(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound of a technology's outflow.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: carrier_out AND NOT operating_units equations: - expression: flow_out <= flow_cap * timestep_resolution * flow_out_parasitic_eff
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d20e8050>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d20eb5b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1fe98d0>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5bd90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5b8c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5b380>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f59240>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f59da0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f58a60>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f588a0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5ad60>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d1f5a200>]], ... ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1e10>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1e80>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1ef0>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1f60>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d1fd0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d2040>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3310>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3380>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d33f0>], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - flow_in_max(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound of a technology's inflow.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: carrier_in AND NOT operating_units equations: - expression: flow_in <= flow_cap * timestep_resolution
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d37e0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3930>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3b60>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599b00>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599b70>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599be0>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599c50>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599cc0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0599d30>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d059b000>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d059b070>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d059b0e0>]], ... <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d04f7cb0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d04f7d20>]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - source_max(nodes, techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound of a `supply` technology's source consumption.
- yaml_snippet :
- foreach: - nodes - techs - timesteps where: source_cap equations: - expression: source_use <= timestep_resolution * source_cap
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598210>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d025aac0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d025a580>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0660360>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d06603d0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0660440>], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d06604b0>, ... [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018d940>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018d9b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018da20>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018ecf0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018ed60>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018edd0>], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018ee40>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018eeb0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d018ef20>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01d0280>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01d02f0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01d0360>], [nan, nan, nan, ..., nan, nan, nan]]], dtype=object) - system_balance(nodes, carriers, timesteps)objectnan ... constraints[system_balan...
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- 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.
- yaml_snippet :
- foreach: - nodes - carriers - timesteps equations: - expression: sum(flow_out, over=techs) - sum(flow_in, over=techs) - $flow_export + $unmet_demand_and_unused_supply == 0 sub_expressions: flow_export: - where: any(carrier_export, over=techs) expression: sum(flow_export, over=techs) - where: NOT any(carrier_export, over=techs) expression: '0' unmet_demand_and_unused_supply: - where: config.ensure_feasibility=True expression: unmet_demand + unused_supply - where: NOT config.ensure_feasibility=True expression: '0'
array([[[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0072a50>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05d3a10>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d05987c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598c90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598050>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598b40>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598670>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598910>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0598130>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0472970>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0472430>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d025b000>, ... <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111780>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01117f0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111860>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01118d0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111940>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01119b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111a20>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111a90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111b00>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111b70>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111be0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111c50>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111cc0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111d30>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111da0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111e10>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111e80>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111ef0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0111f60>]]], dtype=object) - balance_demand(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound on, or a fixed total of, that a demand technology must dump to its sink in each timestep.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: base_tech=demand equations: - where: sink_use_equals expression: flow_in_inc_eff == sink_use_equals * $sink_scaler - where: NOT sink_use_equals AND sink_use_max expression: flow_in_inc_eff <= sink_use_max * $sink_scaler sub_expressions: sink_scaler: - where: sink_unit=per_area expression: area_use - where: sink_unit=per_cap expression: sum(flow_cap, over=carriers) - where: sink_unit=absolute expression: '1'
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - balance_supply_no_storage(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the outflow of a `supply` technology to its consumption of the available source.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: base_tech=supply AND NOT include_storage=True equations: - expression: flow_out_inc_eff == source_use * source_eff
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bbd0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bc40>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bcb0>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bd20>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054bd90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d054be00>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0085160>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d00851d0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0085240>], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - source_availability_supply(nodes, techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Set the upper bound on, or a fixed total of, a `supply` technology's ability to consume its available resource.
- yaml_snippet :
- foreach: - nodes - techs - timesteps where: source_use AND (source_use_equals OR source_use_max) equations: - where: source_use_equals expression: source_use == source_use_equals * $source_scaler - where: NOT source_use_equals AND source_use_max expression: source_use <= source_use_max * $source_scaler sub_expressions: source_scaler: - where: source_unit=per_area expression: area_use - where: source_unit=per_cap expression: sum(flow_cap, over=carriers) - where: source_unit=absolute expression: '1'
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d00871c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01d30e0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4d70>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f5ef0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f5f60>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f5fd0>], [nan, nan, nan, ..., nan, nan, nan], ... ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086820>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086f20>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d00877e0>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086660>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0087310>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086f90>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0259550>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0259780>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d025ae40>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], dtype=object) - balance_transmission(techs, timesteps)objectconstraints[balance_transmission...
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the relationship between between carrier flowing into and out of a `transmission` link in each timestep.
- yaml_snippet :
- foreach: - techs - timesteps where: base_tech=transmission equations: - expression: sum(flow_out_inc_eff, over=[nodes, carriers]) == sum(flow_in_inc_eff, over=[nodes, carriers])
array([[<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d0086040>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d00872a0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4c90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7000>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4520>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7070>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f78c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7e70>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f71c0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7bd0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f44b0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4360>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4bb0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4ad0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7d90>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4b40>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7310>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f4ec0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7380>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f7a80>, ... [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]], dtype=object) - symmetric_transmission(nodes, techs)objectconstraints[symmetric_transmissi...
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the flow capacity of two `transmission` technologies representing the same link in the system.
- yaml_snippet :
- foreach: - nodes - techs where: base_tech=transmission equations: - expression: sum(flow_cap, over=carriers) == link_flow_cap
array([[<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d01f77e0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec980>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec280>, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec520>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec210>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec9f0>, nan, nan, nan, nan, nan, nan, nan], [<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec600>, nan, nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec2f0>, nan, nan, nan, nan, nan, nan, nan, nan], [nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ecde0>, nan, nan, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9d02ec1a0>, nan, nan, nan, nan, nan, nan, nan]], dtype=object) - export_balance(nodes, techs, carriers, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- 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.
- yaml_snippet :
- foreach: - nodes - techs - carriers - timesteps where: flow_export equations: - expression: flow_out >= flow_export
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... ..., [[<calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf79710>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf79780>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf797f0>, ..., <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf7aac0>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf7ab30>, <calliope.backend.pyomo_backend_model.ObjConstraint object at 0x7fd9cbf7aba0>], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]], dtype=object) - link_chp_outputs(nodes, techs, timesteps)objectnan nan nan nan ... nan nan nan nan
- obj_type :
- constraints
- references :
- set()
- coords_in_name :
- False
- description :
- Fix the relationship between heat and electricity output
- yaml_snippet :
- foreach: - nodes - techs - timesteps where: '[chp] in techs' equations: - expression: flow_out[carriers=electricity] * heat_to_power_ratio == flow_out[carriers=heat]
array([[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]], dtype=object)
- techsPandasIndex
PandasIndex(Index(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype='object', name='techs')) - carriersPandasIndex
PandasIndex(Index(['electricity', 'gas', 'heat'], dtype='object', name='carriers'))
- nodesPandasIndex
PandasIndex(Index(['N1', 'X1', 'X2', 'X3'], dtype='object', name='nodes'))
- timestepsPandasIndex
PandasIndex(DatetimeIndex(['2005-07-01 00:00:00', '2005-07-01 01:00:00', '2005-07-01 02:00:00', '2005-07-01 03:00:00', '2005-07-01 04:00:00', '2005-07-01 05:00:00', '2005-07-01 06:00:00', '2005-07-01 07:00:00', '2005-07-01 08:00:00', '2005-07-01 09:00:00', '2005-07-01 10:00:00', '2005-07-01 11:00:00', '2005-07-01 12:00:00', '2005-07-01 13:00:00', '2005-07-01 14:00:00', '2005-07-01 15:00:00', '2005-07-01 16:00:00', '2005-07-01 17:00:00', '2005-07-01 18:00:00', '2005-07-01 19:00:00', '2005-07-01 20:00:00', '2005-07-01 21:00:00', '2005-07-01 22:00:00', '2005-07-01 23:00:00', '2005-07-02 00:00:00', '2005-07-02 01:00:00', '2005-07-02 02:00:00', '2005-07-02 03:00:00', '2005-07-02 04:00:00', '2005-07-02 05:00:00', '2005-07-02 06:00:00', '2005-07-02 07:00:00', '2005-07-02 08:00:00', '2005-07-02 09:00:00', '2005-07-02 10:00:00', '2005-07-02 11:00:00', '2005-07-02 12:00:00', '2005-07-02 13:00:00', '2005-07-02 14:00:00', '2005-07-02 15:00:00', '2005-07-02 16:00:00', '2005-07-02 17:00:00', '2005-07-02 18:00:00', '2005-07-02 19:00:00', '2005-07-02 20:00:00', '2005-07-02 21:00:00', '2005-07-02 22:00:00', '2005-07-02 23:00:00'], dtype='datetime64[ns]', name='timesteps', freq=None))
You can also access backend arrays in text format, to debug the problem:
m.backend.get_constraint(
"area_use_capacity_per_loc", as_backend_objs=False
).to_pandas().dropna(how="all", axis=0)
| lb | body | ub | |
|---|---|---|---|
| nodes | |||
| X1 | NaN | variables[area_use][0] | 500.0 |
| X2 | NaN | variables[area_use][1] | 1300.0 |
| X3 | NaN | variables[area_use][2] | 900.0 |
We can increase the verbosity of the constraint/global expression "body" by calling the backend method verbose_strings.
We do not do this automatically as it entails a memory/time overhead on building the model and is only necessary for debugging your optimisation problem.
m.backend.verbose_strings()
m.backend.get_constraint(
"area_use_capacity_per_loc", as_backend_objs=False
).to_pandas().dropna(how="all", axis=0)
| lb | body | ub | |
|---|---|---|---|
| nodes | |||
| X1 | NaN | variables[area_use][X1, pv] | 500.0 |
| X2 | NaN | variables[area_use][X2, pv] | 1300.0 |
| X3 | NaN | variables[area_use][X3, pv] | 900.0 |
Updating the optimisation problem in-place¶
If we want to update a parameter value or fix a decision variable, we can do so now that we have built the optimisation problem
m.backend.update_parameter("flow_cap_max", m.inputs.flow_cap_max * 2)
m.backend.get_parameter("flow_cap_max", as_backend_objs=False).sel(
techs="pv"
).to_series().dropna()
carriers nodes
electricity X1 500.0
X2 500.0
X3 100.0
Name: flow_cap_max, dtype: float64
Solve the optimisation problem¶
Once we have all of our optimisation problem components set up as we desire, we can solve the problem.
m.solve()
[2024-09-10 15:51:57] INFO Optimisation model | starting model in plan mode.
[2024-09-10 15:51:58] INFO Backend: solver finished running. Time since start of solving optimisation problem: 0:00:00.762237
[2024-09-10 15:51:58] INFO Postprocessing: zero threshold of 1e-10 not required
[2024-09-10 15:51:58] INFO Postprocessing: ended. Time since start of solving optimisation problem: 0:00:00.982148
[2024-09-10 15:51:58] INFO Backend: model solve completed. Time since start of solving optimisation problem: 0:00:00.989217
The results are stored in m._model_data and can be accessed by the public property m.results
m.results
<xarray.Dataset> Size: 378kB
Dimensions: (nodes: 4, techs: 12, carriers: 3,
timesteps: 48, costs: 1)
Coordinates:
* techs (techs) object 96B 'N1_to_X2' ... 'supply_gri...
* carriers (carriers) <U11 132B 'electricity' 'gas' 'heat'
* nodes (nodes) object 32B 'N1' 'X1' 'X2' 'X3'
* timesteps (timesteps) datetime64[ns] 384B 2005-07-01 .....
* costs (costs) object 8B 'monetary'
Data variables: (12/19)
flow_cap (nodes, techs, carriers) float64 1kB nan ... nan
link_flow_cap (techs) float64 96B 189.9 10.38 ... nan nan
flow_out (nodes, techs, carriers, timesteps) float64 55kB ...
flow_in (nodes, techs, carriers, timesteps) float64 55kB ...
flow_export (nodes, techs, carriers, timesteps) float64 55kB ...
area_use (nodes, techs) float64 384B nan nan ... nan nan
... ...
cost_investment (nodes, techs, costs) float64 384B 0.05158 .....
cost (nodes, techs, costs) float64 384B 0.05158 .....
capacity_factor (nodes, techs, carriers, timesteps) float64 55kB ...
systemwide_capacity_factor (techs, carriers) float64 288B 0.0 0.0 ... 0.0
systemwide_levelised_cost (carriers, techs, costs) float64 288B nan ......
total_levelised_cost (carriers, costs) float64 24B 0.08043 ... 0.0...
Attributes: (12/16)
termination_condition: optimal
calliope_version_defined: 0.7.0
calliope_version_initialised: 0.7.0.dev4
applied_overrides:
scenario: None
defaults: {'bigM': 1000000000.0, 'objective_cost_wei...
... ...
name: Urban-scale example model
timestamp_model_creation: 1725983503.094077
timestamp_build_start: 1725983509.438867
timestamp_build_complete: 1725983516.676667
timestamp_solve_start: 1725983517.926661
timestamp_solve_complete: 1725983518.915878- nodes: 4
- techs: 12
- carriers: 3
- timesteps: 48
- costs: 1
- techs(techs)object'N1_to_X2' ... 'supply_grid_power'
array(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype=object) - carriers(carriers)<U11'electricity' 'gas' 'heat'
array(['electricity', 'gas', 'heat'], dtype='<U11')
- nodes(nodes)object'N1' 'X1' 'X2' 'X3'
array(['N1', 'X1', 'X2', 'X3'], dtype=object)
- timesteps(timesteps)datetime64[ns]2005-07-01 ... 2005-07-02T23:00:00
array(['2005-07-01T00:00:00.000000000', '2005-07-01T01:00:00.000000000', '2005-07-01T02:00:00.000000000', '2005-07-01T03:00:00.000000000', '2005-07-01T04:00:00.000000000', '2005-07-01T05:00:00.000000000', '2005-07-01T06:00:00.000000000', '2005-07-01T07:00:00.000000000', '2005-07-01T08:00:00.000000000', '2005-07-01T09:00:00.000000000', '2005-07-01T10:00:00.000000000', '2005-07-01T11:00:00.000000000', '2005-07-01T12:00:00.000000000', '2005-07-01T13:00:00.000000000', '2005-07-01T14:00:00.000000000', '2005-07-01T15:00:00.000000000', '2005-07-01T16:00:00.000000000', '2005-07-01T17:00:00.000000000', '2005-07-01T18:00:00.000000000', '2005-07-01T19:00:00.000000000', '2005-07-01T20:00:00.000000000', '2005-07-01T21:00:00.000000000', '2005-07-01T22:00:00.000000000', '2005-07-01T23:00:00.000000000', '2005-07-02T00:00:00.000000000', '2005-07-02T01:00:00.000000000', '2005-07-02T02:00:00.000000000', '2005-07-02T03:00:00.000000000', '2005-07-02T04:00:00.000000000', '2005-07-02T05:00:00.000000000', '2005-07-02T06:00:00.000000000', '2005-07-02T07:00:00.000000000', '2005-07-02T08:00:00.000000000', '2005-07-02T09:00:00.000000000', '2005-07-02T10:00:00.000000000', '2005-07-02T11:00:00.000000000', '2005-07-02T12:00:00.000000000', '2005-07-02T13:00:00.000000000', '2005-07-02T14:00:00.000000000', '2005-07-02T15:00:00.000000000', '2005-07-02T16:00:00.000000000', '2005-07-02T17:00:00.000000000', '2005-07-02T18:00:00.000000000', '2005-07-02T19:00:00.000000000', '2005-07-02T20:00:00.000000000', '2005-07-02T21:00:00.000000000', '2005-07-02T22:00:00.000000000', '2005-07-02T23:00:00.000000000'], dtype='datetime64[ns]') - costs(costs)object'monetary'
array(['monetary'], dtype=object)
- flow_cap(nodes, techs, carriers)float64nan nan 189.9 nan ... nan nan nan
- title :
- Technology flow (a.k.a. nominal) capacity
- description :
- A technology's flow capacity, also known as its nominal or nameplate capacity.
- default :
- 0
- unit :
- power
- is_result :
- 1
array([[[ nan, nan, 1.8987211e+02], [ nan, nan, 1.0382599e+01], [ nan, nan, 5.6770227e+02], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan], [ nan, nan, nan]], [[ nan, nan, nan], [ nan, nan, nan], [ nan, nan, 5.6770227e+02], [2.7476645e+02, nan, nan], [4.7452088e+01, nan, nan], [ nan, nan, nan], [2.6044701e+02, 6.4307904e+02, 2.0835761e+02], ... [ nan, 2.2726339e+02, 1.9317388e+02], [ nan, nan, nan], [2.6934435e+02, nan, nan], [ nan, nan, 3.6513767e+02], [1.4358886e+01, nan, nan], [ nan, 2.2726339e+02, nan], [ nan, nan, nan]], [[ nan, nan, nan], [ nan, nan, 1.0382599e+01], [ nan, nan, nan], [ nan, nan, nan], [4.7452088e+01, nan, nan], [ nan, 1.8352941e-02, 1.5600000e-02], [ nan, nan, nan], [6.4927357e+01, nan, nan], [ nan, nan, 9.3982291e+00], [1.0000000e+02, nan, nan], [ nan, 1.8352941e-02, nan], [ nan, nan, nan]]]) - link_flow_cap(techs)float64189.9 10.38 567.7 ... nan nan nan
- title :
- Link flow capacity
- description :
- A transmission technology's flow capacity, also known as its nominal or nameplate capacity.
- default :
- 0
- unit :
- power
- is_result :
- 1
array([189.87211 , 10.382599, 567.70227 , 274.76645 , 47.452088, nan, nan, nan, nan, nan, nan, nan]) - flow_out(nodes, techs, carriers, timesteps)float64nan nan nan nan ... nan nan nan nan
- title :
- Carrier outflow
- description :
- 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.
- default :
- 0
- unit :
- energy
- is_result :
- 1
array([[[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [5.2469889e+01, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00, 0.0000000e+00, 0.0000000e+00]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [8.3685615e+00, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00, 0.0000000e+00, 0.0000000e+00]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [8.5869798e+01, 7.2541074e+01, 7.2915564e+01, ..., 1.6303621e+02, 1.1680008e+02, 9.2852036e+01]], ... [[0.0000000e+00, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00, 0.0000000e+00, 0.0000000e+00], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [0.0000000e+00, 1.8352941e-02, 1.8352941e-02, ..., 1.8352941e-02, 1.8352941e-02, 1.8352941e-02], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]]) - flow_in(nodes, techs, carriers, timesteps)float64nan nan nan nan ... nan nan nan nan
- title :
- Carrier inflow
- description :
- 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.
- default :
- 0
- unit :
- energy
- is_result :
- 1
array([[[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [136.32565 , 71.606325 , 72.915564 , ..., 162.10148 , 116.80008 , 91.917322 ]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ 10.382599 , 0.93474975, 0. , ..., 0.93472555, 0. , 0.93471415]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ 0. , 0. , 0. , ..., 0. , 0. , 0. ]], ... [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]]) - flow_export(nodes, techs, carriers, timesteps)float64nan nan nan nan ... nan nan nan nan
- title :
- Carrier export
- description :
- The flow of a carrier exported outside the system boundaries by a technology per timestep.
- default :
- 0
- unit :
- energy
- is_result :
- 1
array([[[[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ... [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], ..., [[ 0., 0., 0., ..., 0., 0., 0.], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], [[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]]]]) - area_use(nodes, techs)float64nan nan nan nan ... 700.0 nan nan
- title :
- Area utilisation
- description :
- The area in space utilised directly (e.g., solar PV panels) or indirectly (e.g., biofuel crops) by a technology.
- default :
- 0
- unit :
- area
- is_result :
- 1
array([[ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, 0. , nan, nan], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, 100.5122, nan, nan], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, 700. , nan, nan]]) - source_use(nodes, techs, timesteps)float64nan nan nan nan ... nan nan nan nan
- title :
- Source flow use
- description :
- The carrier flow consumed from outside the system boundaries by a `supply` technology.
- default :
- 0
- unit :
- energy
- is_result :
- 1
array([[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ... [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00, 0.0000000e+00, 0.0000000e+00], [-0.0000000e+00, 4.8052305e+00, 1.1306472e+01, ..., 1.0563477e+02, 4.1552015e+01, 1.0442145e+00], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], ..., [ 0.0000000e+00, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00, 0.0000000e+00, 0.0000000e+00], [-0.0000000e+00, 1.8352941e-02, 1.8352941e-02, ..., 1.8352941e-02, 1.8352941e-02, 1.8352941e-02], [ nan, nan, nan, ..., nan, nan, nan]]]) - source_cap(nodes, techs)float64nan nan nan ... 77.9 0.01835 nan
- title :
- Source flow capacity
- description :
- The upper limit on a flow that can be consumed from outside the system boundaries by a `supply` technology in each timestep.
- default :
- 0
- unit :
- power
- is_result :
- 1
array([[ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, 0.0000000e+00, 6.4307904e+02, 3.4114372e+01], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, 1.1185572e+01, 2.2726339e+02, nan], [ nan, nan, nan, nan, nan, nan, nan, nan, nan, 7.7900000e+01, 1.8352941e-02, nan]]) - unmet_demand(nodes, carriers, timesteps)float64nan nan nan nan ... 0.0 0.0 0.0 0.0
- is_result :
- 1
array([[[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., ... 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]], [[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]]) - flow_out_inc_eff(nodes, techs, carriers, timesteps)float64nan nan nan nan ... nan nan nan nan
- title :
- Carrier outflow including losses
- description :
- Outflows after taking efficiency losses into account.
- default :
- 0
- is_result :
- 1
array([[[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [5.66104098e+01, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [9.26045550e+00, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [9.26459831e+01, 7.82654586e+01, 7.86695004e+01, ..., 1.75901776e+02, 1.26017045e+02, 1.00179206e+02]], ... [[0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [0.00000000e+00, 1.83529410e-02, 1.83529410e-02, ..., 1.83529410e-02, 1.83529410e-02, 1.83529410e-02], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]]) - flow_in_inc_eff(nodes, techs, carriers, timesteps)float64nan nan nan nan ... nan nan nan nan
- title :
- Carrier inflow including losses
- description :
- Inflows after taking efficiency losses into account.
- default :
- 0
- is_result :
- 1
array([[[[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [136.32565 , 71.606325 , 72.915564 , ..., 162.10148 , 116.80008 , 91.917322 ]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ 10.382599 , 0.93474975, 0. , ..., 0.93472555, 0. , 0.93471415]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ 0. , 0. , 0. , ..., 0. , 0. , 0. ]], ... [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan], [ nan, nan, nan, ..., nan, nan, nan]]]]) - cost_var(nodes, techs, costs, timesteps)float64nan nan nan nan ... nan nan nan nan
- title :
- Variable operating costs
- description :
- The operating costs per timestep of a technology.
- default :
- 0
- unit :
- cost_per_time
- is_result :
- 1
array([[[[ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan]], ..., [[ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan]]], ... [[[ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan]], [[ nan, nan, nan, ..., nan, nan, nan]], ..., [[ nan, nan, nan, ..., nan, nan, nan]], [[0.00000000e+00, 4.58823525e-04, 4.58823525e-04, ..., 4.58823525e-04, 4.58823525e-04, 4.58823525e-04]], [[ nan, nan, nan, ..., nan, nan, nan]]]]) - cost_investment_flow_cap(nodes, techs, carriers, costs)float64nan nan 85.44 nan ... nan nan nan
- title :
- Flow capacity investment costs
- description :
- The investment costs associated with the nominal/rated capacity of a technology.
- default :
- 0
- is_result :
- 1
array([[[[ nan], [ nan], [8.54424495e+01]], [[ nan], [ nan], [6.22955940e+00]], [[ nan], [ nan], [2.55466021e+02]], [[ nan], [ nan], [ nan]], [[ nan], [ nan], [ nan]], ... [[ nan], [ nan], [ nan]], [[ nan], [ nan], [ nan]], [[1.35000000e+05], [ nan], [ nan]], [[ nan], [1.83529410e-02], [ nan]], [[ nan], [ nan], [ nan]]]]) - cost_investment(nodes, techs, costs)float640.05158 0.003761 ... 1.108e-05 nan
- title :
- Total investment costs
- description :
- The installation costs of a technology, including annualised investment costs and annual maintenance costs.
- default :
- 0
- unit :
- cost
- is_result :
- 1
array([[[5.15782463e-02], [3.76054000e-03], [1.54214790e-01], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan]], [[ nan], [ nan], [1.54214790e-01], [8.29328496e-03], [7.16123980e-04], [ nan], [1.17916212e+02], ... [5.02595452e+00], [ nan], [ nan], [ nan], [1.17016579e+01], [1.37189970e-01], [ nan]], [[ nan], [3.76054000e-03], [ nan], [ nan], [7.16123980e-04], [7.34534303e-04], [ nan], [ nan], [ nan], [3.73846013e+01], [1.10789487e-05], [ nan]]]) - cost(nodes, techs, costs)float640.05158 0.003761 ... 0.01148 nan
- title :
- Total costs
- description :
- The total annualised costs of a technology, including installation and operation costs.
- default :
- 0
- unit :
- cost
- is_result :
- 1
array([[[5.15782463e-02], [3.76054000e-03], [1.54214790e-01], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan]], [[ nan], [ nan], [1.54214790e-01], [8.29328496e-03], [7.16123980e-04], [ nan], [1.53478246e+02], ... [1.20827193e+01], [ nan], [ nan], [ nan], [6.56781029e+00], [4.42419697e+01], [ nan]], [[ nan], [3.76054000e-03], [ nan], [ nan], [7.16123980e-04], [2.56982840e-03], [ nan], [ nan], [ nan], [3.73846013e+01], [1.14816671e-02], [ nan]]]) - capacity_factor(nodes, techs, carriers, timesteps)float640.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0
- is_result :
- 1
array([[[[0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0.27634332, 0. , 0. , ..., 0. , 0. , 0. ]], [[0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0.80601798, 0. , 0. , ..., 0. , 0. , 0. ]], [[0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0.15125851, 0.12778014, 0.1284398 , ..., 0.28718612, 0.20574179, 0.16355763]], ... [[0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ]], [[0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 1. , 1. , ..., 1. , 1. , 1. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ]], [[0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ], [0. , 0. , 0. , ..., 0. , 0. , 0. ]]]]) - systemwide_capacity_factor(techs, carriers)float640.0 0.0 0.4178 ... 0.0799 0.0 0.0
- is_result :
- 1
array([[0. , 0. , 0.41781733], [0. , 0. , 0.39070121], [0. , 0. , 0.20989428], [0.33000724, 0. , 0. ], [0.17785253, 0. , 0. ], [0. , 0. , 0.16175317], [0.72767514, 0. , 0.72767514], [0. , 0. , 0. ], [0. , 0. , 0. ], [0.20185729, 0. , 0. ], [0. , 0.57989306, 0. ], [0.07990226, 0. , 0. ]]) - systemwide_levelised_cost(carriers, techs, costs)float64nan nan nan ... nan nan nan
- is_result :
- 1
array([[[ nan], [ nan], [ nan], [1.90545276e-06], [1.76779380e-06], [ nan], [1.68713049e-02], [ nan], [ nan], [3.96667954e-02], [ nan], [1.15739560e-01]], [[ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [ nan], [2.50216872e-02], [ nan]], [[1.35449594e-05], [1.93133737e-05], [2.69627104e-05], [ nan], [ nan], [8.05711442e-03], [2.10891310e-02], [ nan], [ nan], [ nan], [ nan], [ nan]]]) - total_levelised_cost(carriers, costs)float640.08043 0.03431 0.09471
- is_result :
- 1
array([[0.08042675], [0.03431306], [0.09470535]])
- techsPandasIndex
PandasIndex(Index(['N1_to_X2', 'N1_to_X3', 'X1_to_N1', 'X1_to_X2', 'X1_to_X3', 'boiler', 'chp', 'demand_electricity', 'demand_heat', 'pv', 'supply_gas', 'supply_grid_power'], dtype='object', name='techs')) - carriersPandasIndex
PandasIndex(Index(['electricity', 'gas', 'heat'], dtype='object', name='carriers'))
- nodesPandasIndex
PandasIndex(Index(['N1', 'X1', 'X2', 'X3'], dtype='object', name='nodes'))
- timestepsPandasIndex
PandasIndex(DatetimeIndex(['2005-07-01 00:00:00', '2005-07-01 01:00:00', '2005-07-01 02:00:00', '2005-07-01 03:00:00', '2005-07-01 04:00:00', '2005-07-01 05:00:00', '2005-07-01 06:00:00', '2005-07-01 07:00:00', '2005-07-01 08:00:00', '2005-07-01 09:00:00', '2005-07-01 10:00:00', '2005-07-01 11:00:00', '2005-07-01 12:00:00', '2005-07-01 13:00:00', '2005-07-01 14:00:00', '2005-07-01 15:00:00', '2005-07-01 16:00:00', '2005-07-01 17:00:00', '2005-07-01 18:00:00', '2005-07-01 19:00:00', '2005-07-01 20:00:00', '2005-07-01 21:00:00', '2005-07-01 22:00:00', '2005-07-01 23:00:00', '2005-07-02 00:00:00', '2005-07-02 01:00:00', '2005-07-02 02:00:00', '2005-07-02 03:00:00', '2005-07-02 04:00:00', '2005-07-02 05:00:00', '2005-07-02 06:00:00', '2005-07-02 07:00:00', '2005-07-02 08:00:00', '2005-07-02 09:00:00', '2005-07-02 10:00:00', '2005-07-02 11:00:00', '2005-07-02 12:00:00', '2005-07-02 13:00:00', '2005-07-02 14:00:00', '2005-07-02 15:00:00', '2005-07-02 16:00:00', '2005-07-02 17:00:00', '2005-07-02 18:00:00', '2005-07-02 19:00:00', '2005-07-02 20:00:00', '2005-07-02 21:00:00', '2005-07-02 22:00:00', '2005-07-02 23:00:00'], dtype='datetime64[ns]', name='timesteps', freq=None)) - costsPandasIndex
PandasIndex(Index(['monetary'], dtype='object', name='costs'))
- termination_condition :
- optimal
- calliope_version_defined :
- 0.7.0
- calliope_version_initialised :
- 0.7.0.dev4
- applied_overrides :
- scenario :
- None
- defaults :
- {'bigM': 1000000000.0, 'objective_cost_weights': 1, 'color': nan, 'name': nan, 'cap_method': 'continuous', 'integer_dispatch': False, 'include_storage': False, 'force_async_flow': False, 'flow_cap_per_storage_cap_min': 0, 'flow_cap_per_storage_cap_max': inf, 'flow_cap': inf, 'flow_cap_max': inf, 'flow_cap_max_systemwide': inf, 'flow_cap_min': 0, 'flow_cap_min_systemwide': 0, 'flow_out_min_relative': 0, 'flow_cap_per_unit': nan, 'flow_in_eff': 1.0, 'flow_out_eff': 1.0, 'flow_out_parasitic_eff': 1.0, 'flow_ramping': 1.0, 'export_max': inf, 'lifetime': inf, 'area_use': inf, 'area_use_max': inf, 'area_use_min': 0, 'area_use_per_flow_cap': nan, 'storage_cap': inf, 'storage_cap_max': inf, 'storage_cap_min': 0, 'storage_cap_per_unit': nan, 'storage_discharge_depth': 0, 'storage_initial': 0, 'storage_loss': 0, 'cyclic_storage': True, 'purchased_units_min_systemwide': 0, 'purchased_units_max_systemwide': inf, 'purchased_units': inf, 'purchased_units_min': 0, 'purchased_units_max': inf, 'sink_unit': 'absolute', 'sink_use_min': 0, 'sink_use_max': inf, 'sink_use_equals': nan, 'source_unit': 'absolute', 'source_cap_equals_flow_cap': False, 'source_eff': 1.0, 'source_use_min': 0, 'source_use_max': inf, 'source_use_equals': nan, 'source_cap': inf, 'source_cap_max': inf, 'source_cap_min': 0, 'one_way': False, 'distance': 1.0, 'flow_in_eff_per_distance': 1.0, 'flow_out_eff_per_distance': 1.0, 'cost_flow_cap_per_distance': 0, 'cost_purchase_per_distance': 0, 'cost_flow_cap': 0, 'cost_export': 0, 'cost_interest_rate': 0, 'cost_om_annual': 0, 'cost_om_annual_investment_fraction': 0, 'cost_flow_in': 0, 'cost_flow_out': 0, 'cost_purchase': 0, 'cost_area_use': 0, 'cost_source_cap': 0, 'cost_storage_cap': 0, 'cost_depreciation_rate': 1, 'available_area': inf}
- allow_operate_mode :
- 1
- config :
- {'build': {'backend': 'pyomo', 'ensure_feasibility': True, 'mode': 'plan', 'objective': 'min_cost_optimisation', 'operate_use_cap_results': False}, 'solve': {'spores_number': 3, 'spores_score_cost_class': 'spores_score', 'spores_save_per_spore': False, 'spores_skip_cost_op': False, 'save_logs': None, 'solver_io': None, 'solver_options': None, 'solver': 'cbc', 'zero_threshold': 1e-10, 'shadow_prices': []}}
- applied_additional_math :
- ['additional_math.yaml']
- math :
- {'constraints': {'flow_capacity_per_storage_capacity_min': {'description': 'Set the lower bound of storage flow capacity relative to its storage capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'storage_cap AND flow_cap_per_storage_cap_min', 'equations': [{'expression': 'flow_cap >= storage_cap * flow_cap_per_storage_cap_min'}]}, 'flow_capacity_per_storage_capacity_max': {'description': 'Set the upper bound of storage flow capacity relative to its storage capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'storage_cap AND flow_cap_per_storage_cap_max', 'equations': [{'expression': 'flow_cap <= storage_cap * flow_cap_per_storage_cap_max'}]}, 'source_capacity_equals_flow_capacity': {'description': "Set a `supply` technology's flow capacity to equal its source capacity.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'source_cap AND source_cap_equals_flow_cap=True', 'equations': [{'expression': 'source_cap == flow_cap'}]}, 'force_zero_area_use': {'description': "Set a technology's area use to zero if its flow capacity upper bound is zero.", 'foreach': ['nodes', 'techs'], 'where': 'area_use AND flow_cap_max=0', 'equations': [{'expression': 'area_use == 0'}]}, 'area_use_per_flow_capacity': {'description': "Set a fixed relationship between a technology's flow capacity and its area use.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'area_use AND area_use_per_flow_cap', 'equations': [{'expression': 'area_use == flow_cap * area_use_per_flow_cap'}]}, 'area_use_capacity_per_loc': {'description': 'Set an upper bound on the total area that all technologies with `area_use` can occupy at a given node.', 'foreach': ['nodes'], 'where': 'area_use AND available_area', 'equations': [{'expression': 'sum(area_use, over=techs) <= available_area'}]}, 'flow_capacity_systemwide_max': {'description': 'Set an upper bound on flow capacity of a technology across all nodes in which the technology exists.', 'foreach': ['techs', 'carriers'], 'where': 'flow_cap_max_systemwide', 'equations': [{'expression': 'sum(flow_cap, over=nodes) <= flow_cap_max_systemwide'}]}, 'flow_capacity_systemwide_min': {'description': 'Set a lower bound on flow capacity of a technology across all nodes in which the technology exists.', 'foreach': ['techs', 'carriers'], 'where': 'flow_cap_min_systemwide', 'equations': [{'expression': 'sum(flow_cap, over=nodes) >= flow_cap_min_systemwide'}]}, 'balance_conversion': {'description': "Fix the relationship between a `conversion` technology's outflow and consumption.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'base_tech=conversion AND NOT include_storage=true', 'equations': [{'where': 'NOT [chp] in techs', 'expression': 'sum(flow_out_inc_eff, over=carriers) == sum(flow_in_inc_eff, over=carriers)'}, {'where': '[chp] in techs', 'expression': 'flow_out_inc_eff[carriers=electricity] == sum(flow_in_inc_eff, over=carriers)'}]}, 'flow_out_max': {'description': "Set the upper bound of a technology's outflow.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_out AND NOT operating_units', 'equations': [{'expression': 'flow_out <= flow_cap * timestep_resolution * flow_out_parasitic_eff'}]}, 'flow_out_min': {'description': "Set the lower bound of a technology's outflow.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out_min_relative AND NOT operating_units', 'equations': [{'expression': 'flow_out >= flow_cap * timestep_resolution * flow_out_min_relative'}]}, 'flow_in_max': {'description': "Set the upper bound of a technology's inflow.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_in AND NOT operating_units', 'equations': [{'expression': 'flow_in <= flow_cap * timestep_resolution'}]}, 'source_max': {'description': "Set the upper bound of a `supply` technology's source consumption.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'source_cap', 'equations': [{'expression': 'source_use <= timestep_resolution * source_cap'}]}, 'storage_max': {'description': 'Set the upper bound of the amount of carrier a technology can store.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'storage', 'equations': [{'expression': 'storage <= storage_cap'}]}, 'storage_discharge_depth_limit': {'description': 'Set the lower bound of the stored carrier a technology must keep in reserve at all times.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'storage AND storage_discharge_depth', 'equations': [{'expression': 'storage - storage_discharge_depth * storage_cap >= 0'}]}, 'system_balance': {'description': '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.', 'foreach': ['nodes', 'carriers', 'timesteps'], 'equations': [{'expression': 'sum(flow_out, over=techs) - sum(flow_in, over=techs) - $flow_export + $unmet_demand_and_unused_supply == 0'}], 'sub_expressions': {'flow_export': [{'where': 'any(carrier_export, over=techs)', 'expression': 'sum(flow_export, over=techs)'}, {'where': 'NOT any(carrier_export, over=techs)', 'expression': '0'}], 'unmet_demand_and_unused_supply': [{'where': 'config.ensure_feasibility=True', 'expression': 'unmet_demand + unused_supply'}, {'where': 'NOT config.ensure_feasibility=True', 'expression': '0'}]}}, 'balance_demand': {'description': 'Set the upper bound on, or a fixed total of, that a demand technology must dump to its sink in each timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'base_tech=demand', 'equations': [{'where': 'sink_use_equals', 'expression': 'flow_in_inc_eff == sink_use_equals * $sink_scaler'}, {'where': 'NOT sink_use_equals AND sink_use_max', 'expression': 'flow_in_inc_eff <= sink_use_max * $sink_scaler'}], 'sub_expressions': {'sink_scaler': [{'where': 'sink_unit=per_area', 'expression': 'area_use'}, {'where': 'sink_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'sink_unit=absolute', 'expression': '1'}]}}, 'balance_demand_min_use': {'description': 'Set the lower bound on the quantity of flow a `demand` technology must dump to its sink in each timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'sink_use_min AND NOT sink_use_equals AND base_tech=demand', 'equations': [{'expression': 'flow_in_inc_eff >= sink_use_min * $sink_scaler'}], 'sub_expressions': {'sink_scaler': [{'where': 'sink_unit=per_area', 'expression': 'area_use'}, {'where': 'sink_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'sink_unit=absolute', 'expression': '1'}]}}, 'balance_supply_no_storage': {'description': 'Fix the outflow of a `supply` technology to its consumption of the available source.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'base_tech=supply AND NOT include_storage=True', 'equations': [{'expression': 'flow_out_inc_eff == source_use * source_eff'}]}, 'balance_supply_with_storage': {'description': '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.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'storage AND base_tech=supply', 'equations': [{'expression': 'storage == $storage_previous_step + source_use * source_eff - flow_out_inc_eff'}], 'sub_expressions': {'storage_previous_step': [{'where': 'timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True', 'expression': 'storage_initial * storage_cap'}, {'where': '(\n (timesteps=get_val_at_index(timesteps=0) AND cyclic_storage=True)\n OR NOT timesteps=get_val_at_index(timesteps=0)\n) AND NOT lookup_cluster_first_timestep=True', 'expression': '(1 - storage_loss) ** roll(timestep_resolution, timesteps=1) * roll(storage, timesteps=1)'}, {'where': 'lookup_cluster_first_timestep=True AND NOT (timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True)', 'expression': '(1 - storage_loss) ** select_from_lookup_arrays(timestep_resolution, timesteps=lookup_cluster_last_timestep) * select_from_lookup_arrays(storage, timesteps=lookup_cluster_last_timestep)'}]}}, 'source_availability_supply': {'description': "Set the upper bound on, or a fixed total of, a `supply` technology's ability to consume its available resource.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'source_use AND (source_use_equals OR source_use_max)', 'equations': [{'where': 'source_use_equals', 'expression': 'source_use == source_use_equals * $source_scaler'}, {'where': 'NOT source_use_equals AND source_use_max', 'expression': 'source_use <= source_use_max * $source_scaler'}], 'sub_expressions': {'source_scaler': [{'where': 'source_unit=per_area', 'expression': 'area_use'}, {'where': 'source_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'source_unit=absolute', 'expression': '1'}]}}, 'balance_supply_min_use': {'description': 'Set the lower bound on the quantity of its source a `supply` technology must use in each timestep.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'source_use_min AND NOT source_use_equals AND base_tech=supply', 'equations': [{'expression': 'source_use >= source_use_min * $source_scaler'}], 'sub_expressions': {'source_scaler': [{'where': 'source_unit=per_area', 'expression': 'area_use'}, {'where': 'source_unit=per_cap', 'expression': 'sum(flow_cap, over=carriers)'}, {'where': 'source_unit=absolute', 'expression': '1'}]}}, 'balance_storage': {'description': '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.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': '(include_storage=true or base_tech=storage) AND NOT (base_tech=supply OR base_tech=demand)', 'equations': [{'expression': 'storage == $storage_previous_step -\n sum(flow_out_inc_eff, over=carriers) + sum(flow_in_inc_eff, over=carriers)'}], 'sub_expressions': {'storage_previous_step': [{'where': 'timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True', 'expression': 'storage_initial * storage_cap'}, {'where': '(\n (timesteps=get_val_at_index(timesteps=0) AND cyclic_storage=True)\n OR NOT timesteps=get_val_at_index(timesteps=0)\n) AND NOT lookup_cluster_first_timestep=True', 'expression': '(1 - storage_loss) ** roll(timestep_resolution, timesteps=1) * roll(storage, timesteps=1)'}, {'where': 'lookup_cluster_first_timestep=True AND NOT (timesteps=get_val_at_index(timesteps=0) AND NOT cyclic_storage=True)', 'expression': '(1 - storage_loss) ** select_from_lookup_arrays(timestep_resolution, timesteps=lookup_cluster_last_timestep) * select_from_lookup_arrays(storage, timesteps=lookup_cluster_last_timestep)'}]}}, 'set_storage_initial': {'description': 'Fix the relationship between carrier stored in a `storage` technology at the start and end of the whole model period.', 'foreach': ['nodes', 'techs'], 'where': 'storage AND storage_initial AND cyclic_storage=True', 'equations': [{'expression': 'storage[timesteps=$final_step] * (\n (1 - storage_loss) ** timestep_resolution[timesteps=$final_step]\n) == storage_initial * storage_cap'}], 'slices': {'final_step': [{'expression': 'get_val_at_index(timesteps=-1)'}]}, 'active': True}, 'balance_transmission': {'description': 'Fix the relationship between between carrier flowing into and out of a `transmission` link in each timestep.', 'foreach': ['techs', 'timesteps'], 'where': 'base_tech=transmission', 'equations': [{'expression': 'sum(flow_out_inc_eff, over=[nodes, carriers]) == sum(flow_in_inc_eff, over=[nodes, carriers])'}]}, 'symmetric_transmission': {'description': 'Fix the flow capacity of two `transmission` technologies representing the same link in the system.', 'foreach': ['nodes', 'techs'], 'where': 'base_tech=transmission', 'equations': [{'expression': 'sum(flow_cap, over=carriers) == link_flow_cap'}]}, 'export_balance': {'description': "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.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_export', 'equations': [{'expression': 'flow_out >= flow_export'}]}, 'flow_export_max': {'description': "Set the upper bound of a technology's carrier export, for any technologies that can export carriers out of the system.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_export AND export_max', 'equations': [{'where': 'operating_units', 'expression': 'flow_export <= export_max * operating_units'}, {'where': 'NOT operating_units', 'expression': 'flow_export <= export_max'}]}, 'unit_commitment_milp': {'description': '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.', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'operating_units AND purchased_units', 'equations': [{'expression': 'operating_units <= purchased_units'}]}, 'available_flow_cap_binary': {'description': 'Limit flow capacity to zero if the technology is not operating in a given timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'available_flow_cap', 'equations': [{'expression': 'available_flow_cap <= flow_cap_max * operating_units'}]}, 'available_flow_cap_continuous': {'description': 'Limit flow capacity to the value of the `flow_cap` decision variable when the technology is operating in a given timestep.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'available_flow_cap', 'equations': [{'expression': 'available_flow_cap <= flow_cap'}]}, 'available_flow_cap_max_binary_continuous_switch': {'description': 'Force flow capacity to equal the value of the `flow_cap` decision variable if the technology is operating in a given timestep, zero otherwise.', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'available_flow_cap', 'equations': [{'expression': 'available_flow_cap >= flow_cap + ((operating_units - purchased_units) * flow_cap_max)'}]}, 'flow_out_max_milp': {'description': "Set the upper bound of a technology's ability to produce carriers, for any technology using integer units to define its capacity.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out AND operating_units AND flow_cap_per_unit', 'equations': [{'expression': 'flow_out <= operating_units * timestep_resolution * flow_cap_per_unit * flow_out_parasitic_eff'}]}, 'flow_in_max_milp': {'description': "Set the upper bound of a technology's ability to consume carriers, for any technology using integer units to define its capacity.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_in AND operating_units AND flow_cap_per_unit', 'equations': [{'expression': 'flow_in <= operating_units * timestep_resolution * flow_cap_per_unit'}]}, 'flow_out_min_milp': {'description': "Set the lower bound of a technology's ability to produce carriers, for any technology using integer units to define its capacity.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out AND operating_units AND flow_out_min_relative', 'equations': [{'where': 'flow_cap_per_unit', 'expression': 'flow_out >= operating_units * timestep_resolution * flow_cap_per_unit * flow_out_min_relative'}, {'where': 'available_flow_cap', 'expression': 'flow_out >= available_flow_cap * timestep_resolution * flow_out_min_relative'}]}, 'storage_capacity_units_milp': {'description': 'Fix the storage capacity of any technology using integer units to define its capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'storage AND purchased_units AND storage_cap_per_unit', 'equations': [{'expression': 'storage_cap == purchased_units * storage_cap_per_unit'}]}, 'flow_capacity_units_milp': {'description': 'Fix the flow capacity of any technology using integer units to define its capacity.', 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'operating_units AND flow_cap_per_unit', 'equations': [{'expression': 'flow_cap == purchased_units * flow_cap_per_unit'}]}, 'flow_capacity_max_purchase_milp': {'description': "Set the upper bound on a technology's flow capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'purchased_units', 'equations': [{'where': 'flow_cap_max', 'expression': 'flow_cap <= flow_cap_max * purchased_units'}, {'where': 'NOT flow_cap_max', 'expression': 'flow_cap <= bigM * purchased_units'}]}, 'flow_capacity_min_purchase_milp': {'description': "Set the lower bound on a technology's flow capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs', 'carriers'], 'where': 'purchased_units AND flow_cap_min', 'equations': [{'expression': 'flow_cap >= flow_cap_min * purchased_units'}]}, 'storage_capacity_max_purchase_milp': {'description': "Set the upper bound on a technology's storage capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs'], 'where': 'purchased_units AND storage_cap_max', 'equations': [{'expression': 'storage_cap <= storage_cap_max * purchased_units'}]}, 'storage_capacity_min_purchase_milp': {'description': "Set the lower bound on a technology's storage capacity, for any technology with integer capacity purchasing.", 'foreach': ['nodes', 'techs'], 'where': 'purchased_units AND storage_cap_min', 'equations': [{'expression': 'storage_cap >= storage_cap_min * purchased_units'}]}, 'unit_capacity_max_systemwide_milp': {'description': '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.', 'foreach': ['techs'], 'where': 'purchased_units AND purchased_units_max_systemwide', 'equations': [{'expression': 'sum(purchased_units, over=nodes) <= purchased_units_max_systemwide'}]}, 'unit_capacity_min_systemwide_milp': {'description': '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.', 'foreach': ['techs'], 'where': 'purchased_units AND purchased_units_max_systemwide', 'equations': [{'expression': 'sum(purchased_units, over=nodes) >= purchased_units_min_systemwide'}]}, 'async_flow_in_milp': {'description': "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.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'async_flow_switch', 'equations': [{'expression': 'sum(flow_in, over=carriers) <= (1 - async_flow_switch) * bigM'}]}, 'async_flow_out_milp': {'description': "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.", 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'async_flow_switch', 'equations': [{'expression': 'sum(flow_out, over=carriers) <= async_flow_switch * bigM'}]}, 'ramping_up': {'description': "Set the upper bound on a technology's ability to ramp outflow up beyond a certain percentage compared to the previous timestep.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_ramping AND NOT timesteps=get_val_at_index(timesteps=0)', 'equations': [{'expression': '$flow - roll($flow, timesteps=1) <= flow_ramping * flow_cap'}], 'sub_expressions': {'flow': [{'where': 'carrier_out AND NOT carrier_in', 'expression': 'flow_out / timestep_resolution'}, {'where': 'carrier_in AND NOT carrier_out', 'expression': 'flow_in / timestep_resolution'}, {'where': 'carrier_in AND carrier_out', 'expression': '(flow_out - flow_in) / timestep_resolution'}]}}, 'ramping_down': {'description': "Set the upper bound on a technology's ability to ramp outflow down beyond a certain percentage compared to the previous timestep.", 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_ramping AND NOT timesteps=get_val_at_index(timesteps=0)', 'equations': [{'expression': '-1 * flow_ramping * flow_cap <= $flow - roll($flow, timesteps=1)'}], 'sub_expressions': {'flow': [{'where': 'carrier_out AND NOT carrier_in', 'expression': 'flow_out / timestep_resolution'}, {'where': 'carrier_in AND NOT carrier_out', 'expression': 'flow_in / timestep_resolution'}, {'where': 'carrier_in AND carrier_out', 'expression': '(flow_out - flow_in) / timestep_resolution'}]}}, 'link_chp_outputs': {'description': 'Fix the relationship between heat and electricity output', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': '[chp] in techs', 'equations': [{'expression': 'flow_out[carriers=electricity] * heat_to_power_ratio == flow_out[carriers=heat]'}]}}, 'variables': {'flow_cap': {'title': 'Technology flow (a.k.a. nominal) capacity', 'description': "A technology's flow capacity, also known as its nominal or nameplate capacity.", 'default': 0, 'unit': 'power', 'foreach': ['nodes', 'techs', 'carriers'], 'bounds': {'min': 'flow_cap_min', 'max': 'flow_cap_max'}}, 'link_flow_cap': {'title': 'Link flow capacity', 'description': "A transmission technology's flow capacity, also known as its nominal or nameplate capacity.", 'default': 0, 'unit': 'power', 'foreach': ['techs'], 'where': 'base_tech=transmission', 'bounds': {'min': 0, 'max': inf}}, 'flow_out': {'title': 'Carrier outflow', 'description': '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.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_out', 'bounds': {'min': 0, 'max': inf}}, 'flow_in': {'title': 'Carrier inflow', 'description': '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.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_in', 'bounds': {'min': 0, 'max': inf}}, 'flow_export': {'title': 'Carrier export', 'description': 'The flow of a carrier exported outside the system boundaries by a technology per timestep.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'carrier_export', 'bounds': {'min': 0, 'max': inf}}, 'area_use': {'title': 'Area utilisation', 'description': 'The area in space utilised directly (e.g., solar PV panels) or indirectly (e.g., biofuel crops) by a technology.', 'default': 0, 'unit': 'area', 'foreach': ['nodes', 'techs'], 'where': '(area_use_min OR area_use_max OR area_use_per_flow_cap OR sink_unit=per_area OR source_unit=per_area)', 'bounds': {'min': 'area_use_min', 'max': 'area_use_max'}}, 'source_use': {'title': 'Source flow use', 'description': 'The carrier flow consumed from outside the system boundaries by a `supply` technology.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'base_tech=supply', 'bounds': {'min': 0, 'max': inf}}, 'source_cap': {'title': 'Source flow capacity', 'description': 'The upper limit on a flow that can be consumed from outside the system boundaries by a `supply` technology in each timestep.', 'default': 0, 'unit': 'power', 'foreach': ['nodes', 'techs'], 'where': 'base_tech=supply', 'bounds': {'min': 'source_cap_min', 'max': 'source_cap_max'}}, 'storage_cap': {'title': 'Stored carrier capacity', 'description': 'The upper limit on a carrier that can be stored by a technology in any timestep.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs'], 'where': 'include_storage=True OR base_tech=storage', 'domain': 'real', 'bounds': {'min': 'storage_cap_min', 'max': 'storage_cap_max'}, 'active': True}, 'storage': {'title': 'Stored carrier', 'description': 'The carrier stored by a `storage` technology in each timestep.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'include_storage=True OR base_tech=storage', 'bounds': {'min': 0, 'max': inf}}, 'purchased_units': {'title': 'Number of purchased units', 'description': 'Integer number of a technology that has been purchased,\nfor any technology set to require integer capacity purchasing.\nThis is used to allow installation of fixed capacity units of technologies (\nif `flow_cap_max` == `flow_cap_min`) and/or to set a fixed cost for a technology,\nirrespective of its installed capacity.\nOn top of a fixed technology cost,\na continuous cost for the quantity of installed capacity can still be applied.\n\nSince technology capacity is no longer a continuous decision variable,\nit is possible for these technologies to have a lower bound set on outflow/consumption\nwhich will only be enforced in those timesteps that the technology is operating.\nOtherwise, the same lower bound forces the technology to produce/consume\nthat minimum amount of carrier in *every* timestep.\n', 'default': 0, 'unit': 'integer', 'foreach': ['nodes', 'techs'], 'where': 'cap_method=integer', 'domain': 'integer', 'bounds': {'min': 'purchased_units_min', 'max': 'purchased_units_max'}}, 'operating_units': {'title': 'Number of operating units', 'description': 'Integer number of a technology that is operating in each timestep, for any technology set to require integer capacity purchasing.', 'default': 0, 'unit': 'integer', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'integer_dispatch=True AND cap_method=integer', 'domain': 'integer', 'bounds': {'min': 0, 'max': inf}}, 'available_flow_cap': {'title': 'Available carrier flow capacity', 'description': '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.', 'default': 0, 'unit': 'power', 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'integer_dispatch=True AND flow_cap_max AND NOT flow_cap_per_unit', 'bounds': {'min': 0, 'max': inf}}, 'async_flow_switch': {'title': 'Asynchronous carrier flow switch', 'description': '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.', 'default': 0, 'unit': 'integer', 'foreach': ['nodes', 'techs', 'timesteps'], 'where': 'force_async_flow=True', 'domain': 'integer', 'bounds': {'min': 0, 'max': 1}}, 'unmet_demand': {'title': 'Unmet demand (load shedding)', 'description': '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.', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'carriers', 'timesteps'], 'where': 'config.ensure_feasibility=True', 'bounds': {'min': 0, 'max': inf}}, 'unused_supply': {'title': 'Unused supply (curtailment)', 'description': '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).', 'default': 0, 'unit': 'energy', 'foreach': ['nodes', 'carriers', 'timesteps'], 'where': 'config.ensure_feasibility=True', 'bounds': {'min': -inf, 'max': 0}}}, 'objectives': {'min_cost_optimisation': {'description': '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`.', 'equations': [{'where': 'any(cost, over=[nodes, techs, costs])', 'expression': 'sum(\n sum(cost, over=[nodes, techs])\n * objective_cost_weights,\n over=costs\n) + $unmet_demand'}, {'where': 'NOT any(cost, over=[nodes, techs, costs])', 'expression': '$unmet_demand'}], 'sub_expressions': {'unmet_demand': [{'where': 'config.ensure_feasibility=True', 'expression': 'sum(\n sum(unmet_demand - unused_supply, over=[carriers, nodes])\n * timestep_weights,\n over=timesteps\n) * bigM'}, {'where': 'NOT config.ensure_feasibility=True', 'expression': '0'}]}, 'sense': 'minimise', 'active': True}}, 'global_expressions': {'flow_out_inc_eff': {'title': 'Carrier outflow including losses', 'description': 'Outflows after taking efficiency losses into account.', 'default': 0, 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_out', 'equations': [{'where': 'base_tech=transmission', 'expression': 'flow_out / (\n flow_out_eff * flow_out_parasitic_eff *\n flow_out_eff_per_distance ** distance\n)'}, {'where': 'NOT base_tech=transmission', 'expression': 'flow_out / (flow_out_eff * flow_out_parasitic_eff)'}]}, 'flow_in_inc_eff': {'title': 'Carrier inflow including losses', 'description': 'Inflows after taking efficiency losses into account.', 'default': 0, 'foreach': ['nodes', 'techs', 'carriers', 'timesteps'], 'where': 'flow_in', 'equations': [{'where': 'base_tech=transmission', 'expression': 'flow_in * flow_in_eff * flow_in_eff_per_distance ** distance'}, {'where': 'NOT base_tech=transmission', 'expression': 'flow_in * flow_in_eff'}]}, 'cost_var': {'title': 'Variable operating costs', 'description': 'The operating costs per timestep of a technology.', 'default': 0, 'unit': 'cost_per_time', 'foreach': ['nodes', 'techs', 'costs', 'timesteps'], 'where': 'cost_export OR cost_flow_in OR cost_flow_out', 'equations': [{'expression': 'timestep_weights * ($cost_export + $cost_flow_out + $cost_flow_in)'}], 'sub_expressions': {'cost_export': [{'where': 'any(carrier_export, over=carriers) AND any(cost_export, over=carriers)', 'expression': 'sum(cost_export * flow_export, over=carriers)'}, {'where': 'NOT (any(carrier_export, over=carriers) AND any(cost_export, over=carriers))', 'expression': '0'}], 'cost_flow_in': [{'where': 'base_tech=supply', 'expression': 'cost_flow_in * source_use'}, {'where': 'NOT base_tech=supply', 'expression': 'sum(cost_flow_in * flow_in, over=carriers)'}], 'cost_flow_out': [{'expression': 'sum(cost_flow_out * flow_out, over=carriers)'}]}}, 'cost_investment_flow_cap': {'title': 'Flow capacity investment costs', 'description': 'The investment costs associated with the nominal/rated capacity of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'carriers', 'costs'], 'where': 'flow_cap AND (cost_flow_cap OR cost_flow_cap_per_distance)', 'equations': [{'expression': '$cost_sum * flow_cap'}], 'sub_expressions': {'cost_sum': [{'where': 'base_tech=transmission', 'expression': '(cost_flow_cap + cost_flow_cap_per_distance * distance) * 0.5'}, {'where': 'NOT base_tech=transmission', 'expression': 'cost_flow_cap'}]}}, 'cost_investment_storage_cap': {'title': 'Storage capacity investment costs', 'description': 'The investment costs associated with the storage capacity of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_storage_cap AND storage_cap', 'equations': [{'expression': 'cost_storage_cap * storage_cap'}]}, 'cost_investment_source_cap': {'title': 'Source flow capacity investment costs', 'description': 'The investment costs associated with the source consumption capacity of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_source_cap AND source_cap', 'equations': [{'expression': 'cost_source_cap * source_cap'}]}, 'cost_investment_area_use': {'title': 'Area utilisation investment costs', 'description': 'The investment costs associated with the area used by a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_area_use AND area_use', 'equations': [{'expression': 'cost_area_use * area_use'}]}, 'cost_investment_purchase': {'title': 'Binary purchase investment costs', 'description': 'The investment costs associated with the binary purchase of a technology.', 'default': 0, 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_purchase AND purchased_units', 'equations': [{'where': 'base_tech=transmission', 'expression': '(cost_purchase + cost_purchase_per_distance * distance) * purchased_units * 0.5'}, {'where': 'NOT base_tech=transmission', 'expression': 'cost_purchase * purchased_units'}]}, 'cost_investment': {'title': 'Total investment costs', 'description': 'The installation costs of a technology, including annualised investment costs and annual maintenance costs.', 'default': 0, 'unit': 'cost', 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_investment_flow_cap OR cost_investment_storage_cap OR cost_investment_source_cap OR cost_investment_area_use OR cost_investment_purchase', 'equations': [{'expression': '$annualisation_weight * (\n ($depreciation_rate + cost_om_annual_investment_fraction) * (\n sum(default_if_empty(cost_investment_flow_cap, 0), over=carriers) +\n default_if_empty(cost_investment_storage_cap, 0) +\n default_if_empty(cost_investment_source_cap, 0) +\n default_if_empty(cost_investment_area_use, 0) +\n default_if_empty(cost_investment_purchase, 0)\n )\n + sum(cost_om_annual * flow_cap, over=carriers)\n)\n'}], 'sub_expressions': {'annualisation_weight': [{'expression': 'sum(timestep_resolution * timestep_weights, over=timesteps) / 8760'}], 'depreciation_rate': [{'where': 'cost_depreciation_rate', 'expression': 'cost_depreciation_rate'}, {'where': 'NOT cost_depreciation_rate AND cost_interest_rate=0', 'expression': '1 / lifetime'}, {'where': 'NOT cost_depreciation_rate AND cost_interest_rate>0', 'expression': '(cost_interest_rate * ((1 + cost_interest_rate) ** lifetime)) / (((1 + cost_interest_rate) ** lifetime) - 1)'}]}}, 'cost': {'title': 'Total costs', 'description': 'The total annualised costs of a technology, including installation and operation costs.', 'default': 0, 'unit': 'cost', 'foreach': ['nodes', 'techs', 'costs'], 'where': 'cost_investment OR cost_var', 'equations': [{'expression': '$cost_investment + $cost_var_sum'}], 'sub_expressions': {'cost_investment': [{'where': 'cost_investment', 'expression': 'cost_investment'}, {'where': 'NOT cost_investment', 'expression': '0'}], 'cost_var_sum': [{'where': 'cost_var', 'expression': 'sum(cost_var, over=timesteps)'}, {'where': 'NOT cost_var', 'expression': '0'}]}, 'active': True}}, 'piecewise_constraints': {}}
- name :
- Urban-scale example model
- timestamp_model_creation :
- 1725983503.094077
- timestamp_build_start :
- 1725983509.438867
- timestamp_build_complete :
- 1725983516.676667
- timestamp_solve_start :
- 1725983517.926661
- timestamp_solve_complete :
- 1725983518.915878
We can also view the data within the backend directly
m.backend.get_variable("flow_cap", as_backend_objs=False).to_series().dropna()
nodes techs carriers
N1 N1_to_X2 heat 189.87211
N1_to_X3 heat 10.382599
X1_to_N1 heat 567.70227
X1 X1_to_N1 heat 567.70227
X1_to_X2 electricity 274.76645
X1_to_X3 electricity 47.452088
chp electricity 260.44701
gas 643.07904
heat 208.35761
demand_electricity electricity 1.307938
demand_heat heat 1.719711
pv electricity 0.0
supply_gas gas 643.07904
supply_grid_power electricity 34.114372
X2 N1_to_X2 heat 189.87211
X1_to_X2 electricity 274.76645
boiler gas 227.26339
heat 193.17388
demand_electricity electricity 269.34435
demand_heat heat 365.13767
pv electricity 14.358886
supply_gas gas 227.26339
X3 N1_to_X3 heat 10.382599
X1_to_X3 electricity 47.452088
boiler gas 0.018353
heat 0.0156
demand_electricity electricity 64.927357
demand_heat heat 9.398229
pv electricity 100.0
supply_gas gas 0.018353
Name: flow_cap, dtype: object
Save¶
# We can save at any point, which will dump the entire m._model_data to file.
# NetCDF is recommended, as it retains most of the data and can be reloaded into a Calliope model at a later date.
output_path = Path(".") / "outputs" / "4_calliope_model_object"
output_path.mkdir(parents=True, exist_ok=True)
m.to_netcdf(output_path / "example.nc") # Saves a single file
m.to_csv(
output_path / "csv_files", allow_overwrite=True
) # Saves a file for each xarray DataArray