Registering technologies
Technologies are loaded from a single YAML file via
register_technologies(...). The function parses the YAML and
populates the typed registries that EnergySystemBuilder reads from
later.
API
register_technologies(path, clear_registry=True) -> None
| Parameter | Type | Default | Description |
|---|---|---|---|
path |
str or Path |
— (required) | Path to the technologies YAML file. |
clear_registry |
bool |
True |
If True, wipes all previously registered technology types before loading. Set to False to merge into an existing registry. |
from geopipe.energy_system import register_technologies
register_technologies("input/technologies.yaml", clear_registry=True)
The YAML has five top-level sections, each mapping a technology
name to its parameter block. The section determines which *Type
class is built; fields not allowed for that section are rejected, and
commodity_in / commodity_out are always required.
| Section | Class built | Typical use |
|---|---|---|
decentralized |
DecentralizedType |
Per-building heat/electricity supply |
central |
CentralType |
Plant feeding into a grid |
chp |
CHPType |
Subclass of central plant. Has co-generation (two outputs) |
grids |
GridType |
Distribution networks within one region. Fed by central plants. |
pipes |
PipeType |
Inter-region transfer pipes |
Example YAML
decentralized:
ind_heat_pump:
commodity_in: electricity
commodity_out: residential_heat
efficiency: 3.9
technical_lifetime: 18
opex_cost_energy: 0 # EUR/MWh
opex_cost_power: 13 # EUR/kW
capex_cost_power: 5000 # EUR/kW
existing_capacity_phase_out_years: 20
central:
cen_waste_heat_langnese:
commodity_in: Dummy
commodity_out: district_heat_in
efficiency: 1
technical_lifetime: 25
opex_cost_energy: 10
opex_cost_power: 1
capex_cost_power: 440
capex_cost_base: 260000 # EUR (fixed cost per unit)
max_capacity_per_unit: 400 # kW per unit; or {0: 400, 5: 600}
existing_capacity_retirement_years: 15
constrain_location_to_streets:
- DEHE04620001hKzc
chp:
chp_gas:
commodity_in: gas
commodity_out: district_heat_in
commodity_out_2: electricity
efficiency: 0.4
loss: 0.1
technical_lifetime: 25
opex_cost_power: 2
capex_cost_power: 500
capex_cost_base: 260000
existing_capacity_retirement_years: 20
grids:
heat_grid:
commodity_in: district_heat_in
commodity_out: district_heat_out
efficiency: 0.86
technical_lifetime: 40
capex_per_km: 1000000 # EUR/km
existing_capacity_retirement_years: 30
pipes:
heat_pipe:
commodity_in: district_heat_out
commodity_out: district_heat_in
efficiency: 0.96
technical_lifetime: 40
capex_per_km: 1000000
distance_threshold_m: 50
existing_capacity_retirement_years: 30
Field reference
Common to all sections:
| Field | Meaning |
|---|---|
commodity_in |
Input commodity name (must match a balance bus). Use Dummy for "free". |
commodity_out |
Output commodity name. |
efficiency |
Output / input ratio (e.g. 3.9 for a heat pump's COP). |
technical_lifetime |
Years of useful life; drives salvage value at the horizon. |
opex_cost_energy |
Variable cost in EUR/MWh. |
opex_cost_power |
Fixed cost in EUR/kW/year. |
capex_cost_power |
Investment cost in EUR/kW. |
Section-specific:
central— addscapex_cost_base(EUR fixed per unit, see NewlyInstalledUnits),max_capacity_per_unit(kW per unit; scalar or{relative_year: value}dict), andconstrain_location_to_streets(list of street IDs the tech may occupy).chp— addscommodity_out_2andloss(electric-output loss fraction).grids/pipes— replacecapex_cost_powerwithcapex_per_km(EUR/km).pipesadditionally takedistance_threshold_m(max pipe length).- Existing-capacity decay is configured per section:
existing_capacity_phase_out_years(linear, decentralised) orexisting_capacity_retirement_years(abrupt, central/chp/grids/pipes).
Year-dependent values are written as
{relative_year: value} dicts where 0 is the scenario start year.