From 8d7e2b9f9f90c90502ab27797ce56a07ae22c582 Mon Sep 17 00:00:00 2001 From: Ben Elliston Date: Mon, 16 Dec 2024 16:23:20 +1100 Subject: [PATCH] Add a simple renewables plus nuclear scenario. Only supported with the GenCost 2024-25 cost class. * nemo/costs/gencost2025.py: Add nuclear costs from GenCost 2024-25. * nemo/generators.py (Nuclear): New generator class. * nemo/scenarios.py (re_plus_nuclear): New simple nuclear scenario. * tests/test_generators.py (classlist): Add nuclear. --- nemo/costs/gencost2025.py | 12 ++++++++++++ nemo/generators.py | 11 +++++++++++ nemo/scenarios.py | 11 ++++++++++- tests/test_generators.py | 8 ++++---- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/nemo/costs/gencost2025.py b/nemo/costs/gencost2025.py index e344c4a7..08b7bf37 100644 --- a/nemo/costs/gencost2025.py +++ b/nemo/costs/gencost2025.py @@ -38,6 +38,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): tech.CCGT_CCS: 22.5, tech.CentralReceiver: 124.2, tech.Coal_CCS: 94.8, + tech.Nuclear: 200, tech.OCGT: 14.1, tech.PV1Axis: 12.0, tech.Wind: 28.0, @@ -49,6 +50,8 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): tech.Black_Coal: 4.7, tech.CCGT: 4.1, tech.CCGT_CCS: 8.0, + # 10 GJ/MWh heat rate (36% efficiency), $1.10/GJ fuel cost + tech.Nuclear: 5.3 + (10 * 1.1), tech.OCGT: 8.1, tech.WindOffshore: 0}) @@ -65,6 +68,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): table[tech.CCGT_CCS] = 4617 table[tech.CentralReceiver] = 5973 table[tech.Coal_CCS] = 10435 + table[tech.Nuclear] = 8467 table[tech.OCGT] = 1302 table[tech.Behind_Meter_PV] = 1106 table[tech.PV1Axis] = 1224 @@ -89,6 +93,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): table[tech.CCGT_CCS] = 4486 table[tech.CentralReceiver] = 5217 table[tech.Coal_CCS] = 10202 + table[tech.Nuclear] = 8322 table[tech.OCGT] = 1280 table[tech.Behind_Meter_PV] = 907 table[tech.PV1Axis] = 1016 @@ -113,6 +118,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): table[tech.CCGT_CCS] = 4257 table[tech.CentralReceiver] = 4388 table[tech.Coal_CCS] = 9810 + table[tech.Nuclear] = 8091 table[tech.OCGT] = 1243 table[tech.Behind_Meter_PV] = 718 table[tech.PV1Axis] = 807 @@ -137,6 +143,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): table[tech.CCGT_CCS] = 4678 table[tech.CentralReceiver] = 5437 table[tech.Coal_CCS] = 10529 + table[tech.Nuclear] = 8493 table[tech.OCGT] = 1302 table[tech.Behind_Meter_PV] = 1031 table[tech.PV1Axis] = 1141 @@ -161,6 +168,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): table[tech.CCGT_CCS] = 4292 table[tech.CentralReceiver] = 4269 table[tech.Coal_CCS] = 10001 + table[tech.Nuclear] = 8322 table[tech.OCGT] = 1280 table[tech.Behind_Meter_PV] = 599 table[tech.PV1Axis] = 671 @@ -185,6 +193,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): table[tech.CCGT_CCS] = 4122 table[tech.CentralReceiver] = 3444 table[tech.Coal_CCS] = 9670 + table[tech.Nuclear] = 8091 table[tech.OCGT] = 1243 table[tech.Behind_Meter_PV] = 505 table[tech.PV1Axis] = 569 @@ -209,6 +218,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): table[tech.CCGT_CCS] = 4678 table[tech.CentralReceiver] = 5666 table[tech.Coal_CCS] = 10529 + table[tech.Nuclear] = 8467 table[tech.OCGT] = 1302 table[tech.Behind_Meter_PV] = 1069 table[tech.PV1Axis] = 1183 @@ -233,6 +243,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): table[tech.CCGT_CCS] = 4457 table[tech.CentralReceiver] = 4570 table[tech.Coal_CCS] = 10172 + table[tech.Nuclear] = 8322 table[tech.OCGT] = 1280 table[tech.Behind_Meter_PV] = 753 table[tech.PV1Axis] = 843 @@ -257,6 +268,7 @@ def __init__(self, discount, coal_price, gas_price, ccs_price): table[tech.CCGT_CCS] = 4184 table[tech.CentralReceiver] = 3814 table[tech.Coal_CCS] = 8734 + table[tech.Nuclear] = 8091 table[tech.OCGT] = 1243 table[tech.Behind_Meter_PV] = 612 table[tech.PV1Axis] = 688 diff --git a/nemo/generators.py b/nemo/generators.py index 1d3f93c6..b2ff16ce 100644 --- a/nemo/generators.py +++ b/nemo/generators.py @@ -431,6 +431,17 @@ def __init__(self, polygon, capacity, label=None): self.setters = [(self.set_capacity, 0, capacity / 1000.)] +class Nuclear(Fuelled): + """Nuclear power stations (large-scale).""" + + patch = Patch(facecolor='pink') + """Colour for plotting""" + + def __init__(self, polygon, capacity, label=None): + """Construct a nuclear generator.""" + Fuelled.__init__(self, polygon, capacity, label) + + class PumpedHydroPump(Storage, Generator): """Pumped hydro (pump side) model.""" diff --git a/nemo/scenarios.py b/nemo/scenarios.py index 2ada148a..4f499e52 100644 --- a/nemo/scenarios.py +++ b/nemo/scenarios.py @@ -13,7 +13,7 @@ from nemo import configfile, regions from nemo.generators import (CCGT, CCGT_CCS, CST, OCGT, Battery, BatteryLoad, Biofuel, Black_Coal, CentralReceiver, Coal_CCS, - DemandResponse, Hydro, PumpedHydroPump, + DemandResponse, Hydro, Nuclear, PumpedHydroPump, PumpedHydroTurbine, PV1Axis, Wind, WindOffshore) from nemo.polygons import (WILDCARD, cst_limit, offshore_wind_limit, pv_limit, wind_limit) @@ -234,6 +234,14 @@ def re_plus_fossil(context): context.generators[:-4] + [OCGT(WILDCARD, 0)] +def re_plus_nuclear(context): + """Renewables with nuclear and OCGT peakers.""" + re100(context) + context.generators = \ + [Nuclear(WILDCARD, 0)] + context.generators[:-4] + \ + [OCGT(WILDCARD, 0)] + + def re100_dsp(context): """Mostly renewables with demand side participation.""" re100(context) @@ -268,6 +276,7 @@ def re100_south_aus(context): 'coal-ccs': coal_ccs, 're+ccs': re_plus_ccs, 're+fossil': re_plus_fossil, + 're+nuclear': re_plus_nuclear, 're100': re100, 're100-qld': re100_qld, 're100-nsw': re100_nsw, diff --git a/tests/test_generators.py b/tests/test_generators.py index 31689461..54c53a63 100644 --- a/tests/test_generators.py +++ b/tests/test_generators.py @@ -62,10 +62,10 @@ generators.Fossil, generators.Fuelled, generators.Generator, generators.Geothermal, generators.Geothermal_EGS, generators.Geothermal_HSA, - generators.Hydro, generators.HydrogenGT, generators.OCGT, - generators.PV, generators.PV1Axis, - generators.ParabolicTrough, generators.Patch, - generators.PumpedHydroPump, + generators.Hydro, generators.HydrogenGT, + generators.Nuclear, generators.OCGT, generators.PV, + generators.PV1Axis, generators.ParabolicTrough, + generators.Patch, generators.PumpedHydroPump, generators.PumpedHydroTurbine, generators.Storage, generators.TraceGenerator, generators.Wind, generators.WindOffshore]