Technical Implementation#
This section provides technical details about GB-specific implementation features.
FES Powerplants Data#
Overview#
The GB model uses powerplant capacity data from the Future Energy Scenarios (FES) workbook, enriched with technical and cost parameters to create a complete dataset ready for PyPSA network composition. This data replaces the default PyPSA-Eur powerplants dataset with GB-specific capacity projections.
Data Pipeline#
The powerplants data flows through two main stages:
Capacity Aggregation (
create_powerplants_table.py)Processes FES workbook data (GB regions)
Processes European supply data (neighboring countries)
Maps technology names to PyPSA carriers
Aggregates capacities by bus, year, carrier, and set
Cost Enrichment (
create_powerplants_table.py)Joins technology cost data (efficiency, VOM, fuel costs, etc.)
Calculates marginal costs
Fills missing values with sensible defaults
Creates unique generator indices
Output Format#
The resulting fes_powerplants.csv contains complete generator data:
Core Attributes:
bus- Network bus ID (string)year- Planning year (integer)carrier- Technology type (CCGT, nuclear, onwind, etc.)set- Generator classification (PP, CHP, Store)p_nom- Nominal capacity in MW (float)build_year- Year of installation (integer)
Technical Parameters:
efficiency- Energy conversion efficiency (0-1)lifetime- Asset lifetime in years (float)
Economic Parameters:
VOM- Variable O&M cost (GBP/MWh)FOM- Fixed O&M cost (€/MW/year)capital_cost- Investment cost (€/MW)fuel- Fuel cost (GBP/MWh_thermal)marginal_cost- Total variable cost (GBP/MWh_el)
Index Format: "{bus} {carrier}-{year}-{counter}"
Example: "GB0 CCGT-2030-0", "GB0 CCGT-2030-1"
Marginal Cost Calculation#
Marginal cost combines variable O&M and fuel costs:
marginal_cost = VOM + fuel / efficiency
Where:
VOM- Variable operations and maintenance (GBP/MWh_el)fuel- Fuel cost (GBP/MWh_thermal)efficiency- Conversion efficiency (MWh_el / MWh_thermal)
Example for CCGT with efficiency=0.55, VOM=2.5, fuel=25.0:
marginal_cost = 2.5 + 25.0/0.55 = 47.95 GBP/MWh
Default Values#
When cost data is unavailable for specific carriers, defaults are applied:
efficiency: 1 (100% conversion efficiency)capital_cost: 0.0 €/MWlifetime: 25.0 yearsmarginal_cost: 0.0 GBP/MWh
These defaults prevent missing data from blocking network composition while logging warnings for review.
Integration with compose_network#
The compose_network rule loads the enriched powerplants data directly:
ppl = pd.read_csv(powerplants_path, index_col=0, dtype={"bus": "str"})
This data is then used by:
attach_conventional_generators()- Adds fossil/nuclear generatorsattach_wind_and_solar()- Adds renewable generatorsattach_hydro()- Adds hydro and storage unitsattach_chp_constraints()- Applies CHP heat demand constraints
No additional preprocessing is required; all necessary attributes are present in the CSV.
Configuration#
The create_powerplants_table rule requires:
Inputs:
gsp_data- GB regional capacity data from FES workbookeur_data- European national capacity datatech_costs- Technology cost assumptions
Parameters:
gb_config- GB technology mapping configurationeur_config- European technology mapping configurationdefault_set- Default generator classification (typically “PP”)
Output:
fes_powerplants.csv- Complete powerplants dataset
File Location#
scripts/gb_model/
└── create_powerplants_table.py # Data processing and enrichment
rules/
└── gb-model.smk # Snakemake rule definitions
results/{run}/resources/gb-model/
└── fes_powerplants.csv # Generated output