Skip to content

Commit

Permalink
added modular nuclear
Browse files Browse the repository at this point in the history
  • Loading branch information
LukasFrankenQ committed Nov 17, 2023
1 parent 2993cbe commit b0fd444
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 2 deletions.
18 changes: 18 additions & 0 deletions scripts/_fes_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -582,3 +582,21 @@ def get_industrial_hydrogen_demand(scenario, year):

df.columns = [pd.Timestamp(dt).year for dt in df.columns]
return df.loc[scenario_mapper[scenario], year] * 1e6


def get_modular_nuclear_capacity(scenario, year):
"""De factor nuclear capcaity in GW"""

col = string.ascii_uppercase.index("J")
df = (
pd.read_excel(data_file,
sheet_name="ES.20",
header=8,
index_col=0,
nrows=4,
usecols=[col+i for i in range(30)],
)
)

df.columns = [pd.Timestamp(dt).year for dt in df.columns]
return df.loc[scenario_mapper[scenario], year] * 1e3
8 changes: 8 additions & 0 deletions scripts/build_fes_constraints.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
get_data_point,
get_interconnector_capacity,
get_distributed_generation,
get_modular_nuclear_capacity,
)
from _helpers import configure_logging

Expand Down Expand Up @@ -101,6 +102,13 @@
"attr": "p_nom",
"value": val,
"sense": "==",})

val = get_modular_nuclear_capacity(fes, year)
caps.loc[len(caps)] = pd.Series({
"carrier": "modular nuclear",
"attr": "p_nom",
"value": val,
"sense": "==",})


"""
Expand Down
43 changes: 43 additions & 0 deletions scripts/prepare_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -1749,6 +1749,46 @@ def add_hydrogen_demand(n, scenario, year, costs):
)


def add_modular_nuclear(n):
"""
Adding modular nuclear reactors to the system
cost assumptions taken from nuclear generators
"""

logger.warning('Taking cost and efficiency assumptions for modular nuclear from nuclear generators.')
nodes = spatial.nodes

idx = n.generators.loc[(n.generators.carrier == "nuclear") & n.generators.bus.isin(nodes)].index

params = (
n.generators
.loc[
idx,
['efficiency', 'capital_cost', 'marginal_cost', 'p_max_pu']]
.mean()
)
assert params.notna().all(), "Some parameters are missing for modular nuclear."

n.madd(
"Generator",
nodes + " modular nuclear",
bus=nodes,
carrier="modular nuclear",
p_max_pu=params['p_max_pu'],
efficiency=params['efficiency'],
capital_cost=params['capital_cost'],
marginal_cost=params['marginal_cost'],
p_nom_extendable=True,
ramp_limit_up=0.05, # oversimplified but targets realistic baseload operation
ramp_limit_down=0.05, # see for instance
)
# The benefits of nuclear flexibility in power system operations with renewable energy,
# Jenkins et al, 2018

n.generators.loc[idx, ['ramp_limit_up', 'ramp_limit_down']] = 0.05


if __name__ == "__main__":
if "snakemake" not in globals():
from _helpers import mock_snakemake
Expand Down Expand Up @@ -1824,6 +1864,9 @@ def add_hydrogen_demand(n, scenario, year, costs):
logger.info(("\n Net change in atmospheric CO2: ",
f"{np.around(net_change_atmospheric_co2, decimals=2)} MtCO2."))

logger.info("Adding modular nuclear capacity.")
add_modular_nuclear(n)

logger.info("Scaling conventional generators to match FES.")
scale_generation_capacity(n, snakemake.input.capacity_constraints, opts)

Expand Down
4 changes: 2 additions & 2 deletions scripts/solve_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -624,8 +624,8 @@ def extra_functionality(n, snapshots):

if not "100percent" in snakemake.wildcards.opts.split("-"):

carriers = ["solar", "onwind", "offwind", "solar rooftop"]
pypsa_carriers = ["solar", "onwind", ["offwind-ac", "offwind-dc"], "solar rooftop"]
carriers = ["solar", "onwind", "offwind", "solar rooftop", "modular nuclear"]
pypsa_carriers = ["solar", "onwind", ["offwind-ac", "offwind-dc"], "solar rooftop", "modular nuclear"]

for carrier, pypsa_carrier in zip(carriers, pypsa_carriers):
value = cc.at[carrier, "value"]
Expand Down

0 comments on commit b0fd444

Please sign in to comment.