Passed
Pull Request — dev (#1255)
by
unknown
02:02
created

data.datasets.scenario_parameters.parameters   A

Complexity

Total Complexity 31

Size/Duplication

Total Lines 876
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 31
eloc 521
dl 0
loc 876
rs 9.92
c 0
b 0
f 0
1
"""The module containing all parameters for the scenario table
2
"""
3
4
import pandas as pd
5
6
import egon.data.config
7
8
9
def read_csv(year):
10
    source = egon.data.config.datasets()["pypsa-technology-data"]["targets"][
11
        "data_dir"
12
    ]
13
14
    return pd.read_csv(f"{source}costs_{year}.csv")
15
16
17
def read_costs(df, technology, parameter, value_only=True):
18
    result = df.loc[
19
        (df.technology == technology) & (df.parameter == parameter)
20
    ].squeeze()
21
22
    # Rescale costs to EUR/MW
23
    if "EUR/kW" in result.unit:
24
        result.value *= 1e3
25
        result.unit = result.unit.replace("kW", "MW")
26
27
    if value_only:
28
        return result.value
29
    else:
30
        return result
31
32
33
def annualize_capital_costs(overnight_costs, lifetime, p):
34
    """
35
36
    Parameters
37
    ----------
38
    overnight_costs : float
39
        Overnight investment costs in EUR/MW or EUR/MW/km
40
    lifetime : int
41
        Number of years in which payments will be made
42
    p : float
43
        Interest rate in p.u.
44
45
    Returns
46
    -------
47
    float
48
        Annualized capital costs in EUR/MW/a or EUR/MW/km/a
49
50
    """
51
52
    # Calculate present value of an annuity (PVA)
53
    PVA = (1 / p) - (1 / (p * (1 + p) ** lifetime))
54
55
    return overnight_costs / PVA
56
57
58
def global_settings(scenario):
59
    """Returns global paramaters for the selected scenario.
60
61
    Parameters
62
    ----------
63
    scenario : str
64
        Name of the scenario.
65
66
    Returns
67
    -------
68
    parameters : dict
69
        List of global parameters
70
71
    """
72
73
    if scenario == "eGon2035":
74
        parameters = {
75
            "weather_year": 2011,
76
            "population_year": 2035,
77
            "fuel_costs": {  # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 39, table 6
78
                "oil": 73.8,  # [EUR/MWh]
79
                "gas": 25.6,  # [EUR/MWh]
80
                "coal": 20.2,  # [EUR/MWh]
81
                "lignite": 4.0,  # [EUR/MWh]
82
                "nuclear": 1.7,  # [EUR/MWh]
83
                "biomass": 40,  # Dummyvalue, ToDo: Find a suitable source
84
            },
85
            "co2_costs": 76.5,  # [EUR/t_CO2]
86
            "co2_emissions": {  # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 40, table 8
87
                "waste": 0.165,  # [t_CO2/MW_th]
88
                "lignite": 0.393,  # [t_CO2/MW_th]
89
                "gas": 0.201,  # [t_CO2/MW_th]
90
                "nuclear": 0.0,  # [t_CO2/MW_th]
91
                "oil": 0.288,  # [t_CO2/MW_th]
92
                "coal": 0.335,  # [t_CO2/MW_th]
93
                "other_non_renewable": 0.268,  # [t_CO2/MW_th]
94
            },
95
            "interest_rate": 0.05,  # [p.u.]
96
        }
97
98
    elif scenario == "eGon100RE":
99
        parameters = {
100
            "weather_year": 2011,
101
            "population_year": 2050,
102
            "fuel_costs": {  # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 39, table 6
103
                "oil": 73.8,  # [EUR/MWh]
104
                "gas": 25.6,  # [EUR/MWh]
105
                "coal": 20.2,  # [EUR/MWh]
106
                "lignite": 4.0,  # [EUR/MWh]
107
                "nuclear": 1.7,  # [EUR/MWh]
108
            },
109
            "co2_costs": 76.5,  # [EUR/t_CO2]
110
            "co2_emissions": {  # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 40, table 8
111
                "waste": 0.165,  # [t_CO2/MW_th]
112
                "lignite": 0.393,  # [t_CO2/MW_th]
113
                "gas": 0.201,  # [t_CO2/MW_th]
114
                "nuclear": 0.0,  # [t_CO2/MW_th]
115
                "oil": 0.288,  # [t_CO2/MW_th]
116
                "coal": 0.335,  # [t_CO2/MW_th]
117
                "other_non_renewable": 0.268,  # [t_CO2/MW_th]
118
            },
119
            "interest_rate": 0.05,  # [p.u.]
120
        }
121
122
    elif scenario == "eGon2021":
123
        parameters = {
124
            "weather_year": 2011,
125
            "population_year": 2021,
126
        }
127
128
    elif scenario == "status2023":
129
        parameters = {
130
            "weather_year": 2023,
131
            "population_year": 2019,  # TODO: check if possible for 2023
132
            "fuel_costs": {
133
                # TYNDP 2020, data for 2023 (https://2020.entsos-tyndp-scenarios.eu/fuel-commodities-and-carbon-prices/)
134
                "oil": 16.4 * 3.6,  # [EUR/MWh]
135
                "gas": 6.1 * 3.6,  # [EUR/MWh]
136
                "coal": 3.4 * 3.6,  # [EUR/MWh]
137
                "lignite": 1.1 * 3.6,  # [EUR/MWh]
138
                "nuclear": 0.47 * 3.6,  # [EUR/MWh]
139
                "biomass": read_costs(read_csv(2020), "biomass", "fuel"),
140
            },
141
            "co2_costs": 83.66,  # [EUR/t_CO2], source:
142
            # https://www.iwr.de/news/co2-emissionshandel-deutschland-erzielt-2023-rekordeinnahmen-von-ueber-18-mrd-euro-news38528
143
            "co2_emissions": {
144
                # Netzentwicklungsplan Strom 2037, Genehmigtr Scenariorahmen, p. 66, table 21
145
                # https://www.netzentwicklungsplan.de/sites/default/files/2023-01/Szenariorahmen_2037_Genehmigung.pdf
146
                "waste": 0.165,  # [t_CO2/MW_th]
147
                "lignite": 0.393,  # [t_CO2/MW_th]
148
                "gas": 0.201,  # [t_CO2/MW_th]
149
                "nuclear": 0.0,  # [t_CO2/MW_th]
150
                "oil": 0.288,  # [t_CO2/MW_th]
151
                "coal": 0.337,  # [t_CO2/MW_th]
152
                "other_non_renewable": 0.268,  # [t_CO2/MW_th]
153
            },
154
            "interest_rate": 0.05,  # [p.u.]
155
        }
156
157
    elif scenario == "status2019":
158
        parameters = {
159
            "weather_year": 2011,
160
            "population_year": 2019,
161
            "fuel_costs": {  # TYNDP 2020, data for 2020 (https://2020.entsos-tyndp-scenarios.eu/fuel-commodities-and-carbon-prices/)
162
                "oil": 12.9*3.6,  # [EUR/MWh]
163
                "gas": 5.6*3.6,  # [EUR/MWh]
164
                "coal": 3.0*3.6,  # [EUR/MWh]
165
                "lignite": 1.1*3.6,  # [EUR/MWh]
166
                "nuclear": 0.47*3.6,  # [EUR/MWh]
167
                "biomass": read_costs(read_csv(2020), "biomass", "fuel"),
168
            },
169
            "co2_costs": 24.7,  # [EUR/t_CO2], source:
170
                #https://de.statista.com/statistik/daten/studie/1304069/umfrage/preisentwicklung-von-co2-emissionsrechten-in-eu/
171
            "co2_emissions": {  # Netzentwicklungsplan Strom 2035, Version 2021, 1. Entwurf, p. 40, table 8
172
                "waste": 0.165,  # [t_CO2/MW_th]
173
                "lignite": 0.393,  # [t_CO2/MW_th]
174
                "gas": 0.201,  # [t_CO2/MW_th]
175
                "nuclear": 0.0,  # [t_CO2/MW_th]
176
                "oil": 0.288,  # [t_CO2/MW_th]
177
                "coal": 0.335,  # [t_CO2/MW_th]
178
                "other_non_renewable": 0.268,  # [t_CO2/MW_th]
179
            },
180
            "interest_rate": 0.05,  # [p.u.]
181
        }
182
183
    else:
184
        print(f"Scenario name {scenario} is not valid.")
185
186
    return parameters
187
188
189
def electricity(scenario):
190
    """Returns paramaters of the electricity sector for the selected scenario.
191
192
    Parameters
193
    ----------
194
    scenario : str
195
        Name of the scenario.
196
197
    Returns
198
    -------
199
    parameters : dict
200
        List of parameters of electricity sector
201
202
    """
203
204
    if scenario == "eGon2035":
205
        costs = read_csv(2035)
206
207
        parameters = {"grid_topology": "Status Quo"}
208
        # Insert effciencies in p.u.
209
        parameters["efficiency"] = {
210
            "oil": read_costs(costs, "oil", "efficiency"),
211
            "battery": {
212
                "store": read_costs(costs, "battery inverter", "efficiency")
213
                ** 0.5,
214
                "dispatch": read_costs(costs, "battery inverter", "efficiency")
215
                ** 0.5,
216
                "standing_loss": 0,
217
                "max_hours": 6,
218
                "cyclic_state_of_charge": True,
219
            },
220
            "pumped_hydro": {
221
                "store": read_costs(costs, "PHS", "efficiency") ** 0.5,
222
                "dispatch": read_costs(costs, "PHS", "efficiency") ** 0.5,
223
                "standing_loss": 0,
224
                "max_hours": 6,
225
                "cyclic_state_of_charge": True,
226
            },
227
        }
228
        # Warning: Electrical parameters are set in osmTGmod, editing these values will not change the data!
229
        parameters["electrical_parameters"] = {
230
            "ac_line_110kV": {
231
                "s_nom": 260,  # [MVA]
232
                "R": 0.109,  # [Ohm/km]
233
                "L": 1.2,  # [mH/km]
234
            },
235
            "ac_cable_110kV": {
236
                "s_nom": 280,  # [MVA]
237
                "R": 0.0177,  # [Ohm/km]
238
                "L": 0.3,  # [mH/km]
239
            },
240
            "ac_line_220kV": {
241
                "s_nom": 520,  # [MVA]
242
                "R": 0.109,  # [Ohm/km]
243
                "L": 1.0,  # [mH/km]
244
            },
245
            "ac_cable_220kV": {
246
                "s_nom": 550,  # [MVA]
247
                "R": 0.0176,  # [Ohm/km]
248
                "L": 0.3,  # [mH/km]
249
            },
250
            "ac_line_380kV": {
251
                "s_nom": 1790,  # [MVA]
252
                "R": 0.028,  # [Ohm/km]
253
                "L": 0.8,  # [mH/km]
254
            },
255
            "ac_cable_380kV": {
256
                "s_nom": 925,  # [MVA]
257
                "R": 0.0175,  # [Ohm/km]
258
                "L": 0.3,  # [mH/km]
259
            },
260
        }
261
262
        # Insert overnight investment costs
263
        # Source for eHV grid costs: Netzentwicklungsplan Strom 2035, Version 2021, 2. Entwurf
264
        # Source for HV lines and cables: Dena Verteilnetzstudie 2021, p. 146
265
        parameters["overnight_cost"] = {
266
            "ac_ehv_overhead_line": 2.5e6
267
            / (
268
                2
269
                * parameters["electrical_parameters"]["ac_line_380kV"]["s_nom"]
270
            ),  # [EUR/km/MW]
271
            "ac_ehv_cable": 11.5e6
272
            / (
273
                2
274
                * parameters["electrical_parameters"]["ac_cable_380kV"][
275
                    "s_nom"
276
                ]
277
            ),  # [EUR/km/MW]
278
            "ac_hv_overhead_line": 0.06e6
279
            / parameters["electrical_parameters"]["ac_line_110kV"][
280
                "s_nom"
281
            ],  # [EUR/km/MW]
282
            "ac_hv_cable": 0.8e6
283
            / parameters["electrical_parameters"]["ac_cable_110kV"][
284
                "s_nom"
285
            ],  # [EUR/km/MW]
286
            "dc_overhead_line": 0.5e3,  # [EUR/km/MW]
287
            "dc_cable": 3.25e3,  # [EUR/km/MW]
288
            "dc_inverter": 0.3e6,  # [EUR/MW]
289
            "transformer_380_110": 17.33e3,  # [EUR/MVA]
290
            "transformer_380_220": 13.33e3,  # [EUR/MVA]
291
            "transformer_220_110": 17.5e3,  # [EUR/MVA]
292
            "battery inverter": read_costs(
293
                costs, "battery inverter", "investment"
294
            ),
295
            "battery storage": read_costs(
296
                costs, "battery storage", "investment"
297
            ),
298
        }
299
300
        parameters["lifetime"] = {
301
            "ac_ehv_overhead_line": read_costs(
302
                costs, "HVAC overhead", "lifetime"
303
            ),
304
            "ac_ehv_cable": read_costs(costs, "HVAC overhead", "lifetime"),
305
            "ac_hv_overhead_line": read_costs(
306
                costs, "HVAC overhead", "lifetime"
307
            ),
308
            "ac_hv_cable": read_costs(costs, "HVAC overhead", "lifetime"),
309
            "dc_overhead_line": read_costs(costs, "HVDC overhead", "lifetime"),
310
            "dc_cable": read_costs(costs, "HVDC overhead", "lifetime"),
311
            "dc_inverter": read_costs(costs, "HVDC inverter pair", "lifetime"),
312
            "transformer_380_110": read_costs(
313
                costs, "HVAC overhead", "lifetime"
314
            ),
315
            "transformer_380_220": read_costs(
316
                costs, "HVAC overhead", "lifetime"
317
            ),
318
            "transformer_220_110": read_costs(
319
                costs, "HVAC overhead", "lifetime"
320
            ),
321
            "battery inverter": read_costs(
322
                costs, "battery inverter", "lifetime"
323
            ),
324
            "battery storage": read_costs(
325
                costs, "battery storage", "lifetime"
326
            ),
327
        }
328
        # Insert annualized capital costs
329
        # lines in EUR/km/MW/a
330
        # transfermer, inverter, battery in EUR/MW/a
331
        parameters["capital_cost"] = {}
332
333
        for comp in parameters["overnight_cost"].keys():
334
            parameters["capital_cost"][comp] = annualize_capital_costs(
335
                parameters["overnight_cost"][comp],
336
                parameters["lifetime"][comp],
337
                global_settings("eGon2035")["interest_rate"],
338
            )
339
340
        parameters["capital_cost"]["battery"] = (
341
            parameters["capital_cost"]["battery inverter"]
342
            + parameters["efficiency"]["battery"]["max_hours"]
343
            * parameters["capital_cost"]["battery storage"]
344
        )
345
346
        # Insert marginal_costs in EUR/MWh
347
        # marginal cost can include fuel, C02 and operation and maintenance costs
348
        parameters["marginal_cost"] = {
349
            "oil": global_settings(scenario)["fuel_costs"]["oil"]
350
            / read_costs(costs, "oil", "efficiency")
351
            + read_costs(costs, "oil", "VOM")
352
            + global_settings(scenario)["co2_costs"]
353
            * global_settings(scenario)["co2_emissions"]["oil"]
354
            / read_costs(costs, "oil", "efficiency"),
355
            "other_non_renewable": global_settings(scenario)["fuel_costs"][
356
                "gas"
357
            ] / read_costs(costs, "OCGT", "efficiency")
358
            + global_settings(scenario)["co2_costs"]
359
            * global_settings(scenario)["co2_emissions"][
360
                "other_non_renewable"
361
            ] / read_costs(costs, "OCGT", "efficiency"),
362
            "lignite": global_settings(scenario)["fuel_costs"]["lignite"]
363
            / read_costs(costs, "lignite", "efficiency")
364
            + read_costs(costs, "lignite", "VOM")
365
            + global_settings(scenario)["co2_costs"]
366
            * global_settings(scenario)["co2_emissions"]["lignite"]
367
            / read_costs(costs, "lignite", "efficiency"),
368
            "coal": global_settings(scenario)["fuel_costs"]["coal"]
369
            / read_costs(costs, "coal", "efficiency")
370
            + read_costs(costs, "coal", "VOM")
371
            + global_settings(scenario)["co2_costs"]
372
            * global_settings(scenario)["co2_emissions"]["coal"]
373
            / read_costs(costs, "coal", "efficiency"),
374
            "nuclear": global_settings(scenario)["fuel_costs"]["nuclear"]
375
            / read_costs(costs, "nuclear", "efficiency")
376
            + read_costs(costs, "nuclear", "VOM"),
377
            "biomass": global_settings(scenario)["fuel_costs"]["biomass"]
378
            / read_costs(costs, "biomass", "efficiency")
379
            + read_costs(costs, "biomass CHP", "VOM"),
380
            "wind_offshore": read_costs(costs, "offwind", "VOM"),
381
            "wind_onshore": read_costs(costs, "onwind", "VOM"),
382
            "solar": read_costs(costs, "solar", "VOM"),
383
            # According to https://www.aemo.com.au/-/media/Files/Electricity/NEM/Planning_and_Forecasting/Inputs-Assumptions-Methodologies/2019/Report-Pumped-Hydro-Cost-Modelling.pdf
384
            # for hydro generation all operations and maintenance costs might
385
            # be categorized as fixed rather than variable.
386
            "run_of_river": 0,
387
            "reservoir": 0,
388
        }
389
390
    elif scenario == "eGon100RE":
391
        costs = read_csv(2050)
392
393
        parameters = {"grid_topology": "Status Quo"}
394
395
        # Insert effciencies in p.u.
396
        parameters["efficiency"] = {
397
            "battery": {
398
                "store": read_costs(costs, "battery inverter", "efficiency")
399
                ** 0.5,
400
                "dispatch": read_costs(costs, "battery inverter", "efficiency")
401
                ** 0.5,
402
                "standing_loss": 0,
403
                "max_hours": 6,
404
                "cyclic_state_of_charge": True,
405
            },
406
            "pumped_hydro": {
407
                "store": read_costs(costs, "PHS", "efficiency") ** 0.5,
408
                "dispatch": read_costs(costs, "PHS", "efficiency") ** 0.5,
409
                "standing_loss": 0,
410
                "max_hours": 6,
411
                "cyclic_state_of_charge": True,
412
            },
413
        }
414
        # Warning: Electrical parameters are set in osmTGmod, editing these values will not change the data!
415
        parameters["electrical_parameters"] = {
416
            "ac_line_110kV": {
417
                "s_nom": 260,  # [MVA]
418
                "R": 0.109,  # [Ohm/km]
419
                "L": 1.2,  # [mH/km]
420
            },
421
            "ac_cable_110kV": {
422
                "s_nom": 280,  # [MVA]
423
                "R": 0.0177,  # [Ohm/km]
424
                "L": 0.3,  # [mH/km]
425
            },
426
            "ac_line_220kV": {
427
                "s_nom": 520,  # [MVA]
428
                "R": 0.109,  # [Ohm/km]
429
                "L": 1.0,  # [mH/km]
430
            },
431
            "ac_cable_220kV": {
432
                "s_nom": 550,  # [MVA]
433
                "R": 0.0176,  # [Ohm/km]
434
                "L": 0.3,  # [mH/km]
435
            },
436
            "ac_line_380kV": {
437
                "s_nom": 1790,  # [MVA]
438
                "R": 0.028,  # [Ohm/km]
439
                "L": 0.8,  # [mH/km]
440
            },
441
            "ac_cable_380kV": {
442
                "s_nom": 925,  # [MVA]
443
                "R": 0.0175,  # [Ohm/km]
444
                "L": 0.3,  # [mH/km]
445
            },
446
        }
447
448
        # Insert overnight investment costs
449
        # Source for transformer costs: Netzentwicklungsplan Strom 2035, Version 2021, 2. Entwurf
450
        # Source for HV lines and cables: Dena Verteilnetzstudie 2021, p. 146
451
        parameters["overnight_cost"] = {
452
            "ac_ehv_overhead_line": read_costs(
453
                costs, "HVAC overhead", "investment"
454
            ),  # [EUR/km/MW]
455
            "ac_hv_overhead_line": 0.06e6
456
            / parameters["electrical_parameters"]["ac_line_110kV"][
457
                "s_nom"
458
            ],  # [EUR/km/MW]
459
            "ac_hv_cable": 0.8e6
460
            / parameters["electrical_parameters"]["ac_cable_110kV"][
461
                "s_nom"
462
            ],  # [EUR/km/MW]
463
            "dc_overhead_line": read_costs(
464
                costs, "HVDC overhead", "investment"
465
            ),
466
            "dc_cable": read_costs(costs, "HVDC overhead", "investment"),
467
            "dc_inverter": read_costs(
468
                costs, "HVDC inverter pair", "investment"
469
            ),
470
            "transformer_380_110": 17.33e3,  # [EUR/MVA]
471
            "transformer_380_220": 13.33e3,  # [EUR/MVA]
472
            "transformer_220_110": 17.5e3,  # [EUR/MVA]
473
            "battery inverter": read_costs(
474
                costs, "battery inverter", "investment"
475
            ),
476
            "battery storage": read_costs(
477
                costs, "battery storage", "investment"
478
            ),
479
        }
480
481
        parameters["lifetime"] = {
482
            "ac_ehv_overhead_line": read_costs(
483
                costs, "HVAC overhead", "lifetime"
484
            ),
485
            "ac_ehv_cable": read_costs(costs, "HVAC overhead", "lifetime"),
486
            "ac_hv_overhead_line": read_costs(
487
                costs, "HVAC overhead", "lifetime"
488
            ),
489
            "ac_hv_cable": read_costs(costs, "HVAC overhead", "lifetime"),
490
            "dc_overhead_line": read_costs(costs, "HVDC overhead", "lifetime"),
491
            "dc_cable": read_costs(costs, "HVDC overhead", "lifetime"),
492
            "dc_inverter": read_costs(costs, "HVDC inverter pair", "lifetime"),
493
            "transformer_380_110": read_costs(
494
                costs, "HVAC overhead", "lifetime"
495
            ),
496
            "transformer_380_220": read_costs(
497
                costs, "HVAC overhead", "lifetime"
498
            ),
499
            "transformer_220_110": read_costs(
500
                costs, "HVAC overhead", "lifetime"
501
            ),
502
            "battery inverter": read_costs(
503
                costs, "battery inverter", "lifetime"
504
            ),
505
            "battery storage": read_costs(
506
                costs, "battery storage", "lifetime"
507
            ),
508
        }
509
        # Insert annualized capital costs
510
        # lines in EUR/km/MW/a
511
        # transfermer, inverter, battery in EUR/MW/a
512
        parameters["capital_cost"] = {}
513
514
        for comp in parameters["overnight_cost"].keys():
515
            parameters["capital_cost"][comp] = annualize_capital_costs(
516
                parameters["overnight_cost"][comp],
517
                parameters["lifetime"][comp],
518
                global_settings("eGon2035")["interest_rate"],
519
            )
520
521
        parameters["capital_cost"]["battery"] = (
522
            parameters["capital_cost"]["battery inverter"]
523
            + parameters["efficiency"]["battery"]["max_hours"]
524
            * parameters["capital_cost"]["battery storage"]
525
        )
526
527
        # Insert marginal_costs in EUR/MWh
528
        # marginal cost can include fuel, C02 and operation and maintenance costs
529
        parameters["marginal_cost"] = {
530
            "wind_offshore": read_costs(costs, "offwind", "VOM"),
531
            "wind_onshore": read_costs(costs, "onwind", "VOM"),
532
            "solar": read_costs(costs, "solar", "VOM"),
533
            # According to https://www.aemo.com.au/-/media/Files/Electricity/NEM/Planning_and_Forecasting/Inputs-Assumptions-Methodologies/2019/Report-Pumped-Hydro-Cost-Modelling.pdf
534
            # for hydro generation all operations and maintenance costs might
535
            # be categorized as fixed rather than variable.
536
            "run_of_river": 0,
537
            "reservoir": 0,
538
        }
539
540
    elif scenario == "eGon2021":
541
        parameters = {}
542
543
    elif (scenario == "status2019") or (scenario == "status2023"):
544
        costs = read_csv(2020)
545
546
        parameters = {"grid_topology": "Status Quo"}
547
        # Insert effciencies in p.u.
548
        parameters["efficiency"] = {
549
            "oil": read_costs(costs, "oil", "efficiency"),
550
            "battery": {
551
                "store": read_costs(costs, "battery inverter", "efficiency")
552
                ** 0.5,
553
                "dispatch": read_costs(costs, "battery inverter", "efficiency")
554
                ** 0.5,
555
                "standing_loss": 0,
556
                "max_hours": 6,
557
                "cyclic_state_of_charge": True,
558
            },
559
            "pumped_hydro": {
560
                "store": read_costs(costs, "PHS", "efficiency") ** 0.5,
561
                "dispatch": read_costs(costs, "PHS", "efficiency") ** 0.5,
562
                "standing_loss": 0,
563
                "max_hours": 6,
564
                "cyclic_state_of_charge": True,
565
            },
566
        }
567
        # Warning: Electrical parameters are set in osmTGmod, editing these values will not change the data!
568
        parameters["electrical_parameters"] = {
569
            "ac_line_110kV": {
570
                "s_nom": 260,  # [MVA]
571
                "R": 0.109,  # [Ohm/km]
572
                "L": 1.2,  # [mH/km]
573
            },
574
            "ac_cable_110kV": {
575
                "s_nom": 280,  # [MVA]
576
                "R": 0.0177,  # [Ohm/km]
577
                "L": 0.3,  # [mH/km]
578
            },
579
            "ac_line_220kV": {
580
                "s_nom": 520,  # [MVA]
581
                "R": 0.109,  # [Ohm/km]
582
                "L": 1.0,  # [mH/km]
583
            },
584
            "ac_cable_220kV": {
585
                "s_nom": 550,  # [MVA]
586
                "R": 0.0176,  # [Ohm/km]
587
                "L": 0.3,  # [mH/km]
588
            },
589
            "ac_line_380kV": {
590
                "s_nom": 1790,  # [MVA]
591
                "R": 0.028,  # [Ohm/km]
592
                "L": 0.8,  # [mH/km]
593
            },
594
            "ac_cable_380kV": {
595
                "s_nom": 925,  # [MVA]
596
                "R": 0.0175,  # [Ohm/km]
597
                "L": 0.3,  # [mH/km]
598
            },
599
        }
600
601
        # Insert overnight investment costs
602
        # Source for eHV grid costs: Netzentwicklungsplan Strom 2035, Version 2021, 2. Entwurf
603
        # Source for HV lines and cables: Dena Verteilnetzstudie 2021, p. 146
604
        parameters["overnight_cost"] = {
605
            "ac_ehv_overhead_line": 2.5e6
606
            / (
607
                2
608
                * parameters["electrical_parameters"]["ac_line_380kV"]["s_nom"]
609
            ),  # [EUR/km/MW]
610
            "ac_ehv_cable": 11.5e6
611
            / (
612
                2
613
                * parameters["electrical_parameters"]["ac_cable_380kV"][
614
                    "s_nom"
615
                ]
616
            ),  # [EUR/km/MW]
617
            "ac_hv_overhead_line": 0.06e6
618
            / parameters["electrical_parameters"]["ac_line_110kV"][
619
                "s_nom"
620
            ],  # [EUR/km/MW]
621
            "ac_hv_cable": 0.8e6
622
            / parameters["electrical_parameters"]["ac_cable_110kV"][
623
                "s_nom"
624
            ],  # [EUR/km/MW]
625
            "dc_overhead_line": 0.5e3,  # [EUR/km/MW]
626
            "dc_cable": 3.25e3,  # [EUR/km/MW]
627
            "dc_inverter": 0.3e6,  # [EUR/MW]
628
            "transformer_380_110": 17.33e3,  # [EUR/MVA]
629
            "transformer_380_220": 13.33e3,  # [EUR/MVA]
630
            "transformer_220_110": 17.5e3,  # [EUR/MVA]
631
            "battery inverter": read_costs(
632
                costs, "battery inverter", "investment"
633
            ),
634
            "battery storage": read_costs(
635
                costs, "battery storage", "investment"
636
            ),
637
        }
638
639
        parameters["lifetime"] = {
640
            "ac_ehv_overhead_line": read_costs(
641
                costs, "HVAC overhead", "lifetime"
642
            ),
643
            "ac_ehv_cable": read_costs(costs, "HVAC overhead", "lifetime"),
644
            "ac_hv_overhead_line": read_costs(
645
                costs, "HVAC overhead", "lifetime"
646
            ),
647
            "ac_hv_cable": read_costs(costs, "HVAC overhead", "lifetime"),
648
            "dc_overhead_line": read_costs(costs, "HVDC overhead", "lifetime"),
649
            "dc_cable": read_costs(costs, "HVDC overhead", "lifetime"),
650
            "dc_inverter": read_costs(costs, "HVDC inverter pair", "lifetime"),
651
            "transformer_380_110": read_costs(
652
                costs, "HVAC overhead", "lifetime"
653
            ),
654
            "transformer_380_220": read_costs(
655
                costs, "HVAC overhead", "lifetime"
656
            ),
657
            "transformer_220_110": read_costs(
658
                costs, "HVAC overhead", "lifetime"
659
            ),
660
            "battery inverter": read_costs(
661
                costs, "battery inverter", "lifetime"
662
            ),
663
            "battery storage": read_costs(
664
                costs, "battery storage", "lifetime"
665
            ),
666
        }
667
        # Insert annualized capital costs
668
        # lines in EUR/km/MW/a
669
        # transfermer, inverter, battery in EUR/MW/a
670
        parameters["capital_cost"] = {}
671
672
        for comp in parameters["overnight_cost"].keys():
673
            parameters["capital_cost"][comp] = annualize_capital_costs(
674
                parameters["overnight_cost"][comp],
675
                parameters["lifetime"][comp],
676
                global_settings("status2019")["interest_rate"],
677
            )
678
679
        parameters["capital_cost"]["battery"] = (
680
            parameters["capital_cost"]["battery inverter"]
681
            + parameters["efficiency"]["battery"]["max_hours"]
682
            * parameters["capital_cost"]["battery storage"]
683
        )
684
685
        parameters["marginal_cost"] = {
686
            "oil": global_settings(scenario)["fuel_costs"]["oil"]
687
            / read_costs(costs, "oil", "efficiency")
688
            + read_costs(costs, "oil", "VOM")
689
            + global_settings(scenario)["co2_costs"]
690
            * global_settings(scenario)["co2_emissions"]["oil"]
691
            / read_costs(costs, "oil", "efficiency"),
692
            "other_non_renewable": global_settings(scenario)["fuel_costs"][
693
                "gas"
694
            ] / read_costs(costs, "OCGT", "efficiency")
695
            + global_settings(scenario)["co2_costs"]
696
            * global_settings(scenario)["co2_emissions"][
697
                "other_non_renewable"
698
            ] / read_costs(costs, "OCGT", "efficiency"),
699
            "lignite": global_settings(scenario)["fuel_costs"]["lignite"]
700
            / read_costs(costs, "lignite", "efficiency")
701
            + read_costs(costs, "lignite", "VOM")
702
            + global_settings(scenario)["co2_costs"]
703
            * global_settings(scenario)["co2_emissions"]["lignite"]
704
            / read_costs(costs, "lignite", "efficiency"),
705
            "coal": global_settings(scenario)["fuel_costs"]["coal"]
706
            / read_costs(costs, "coal", "efficiency")
707
            + read_costs(costs, "coal", "VOM")
708
            + global_settings(scenario)["co2_costs"]
709
            * global_settings(scenario)["co2_emissions"]["coal"]
710
            / read_costs(costs, "coal", "efficiency"),
711
            "OCGT": global_settings(scenario)["fuel_costs"]["gas"]
712
            / read_costs(costs, "OCGT", "efficiency")
713
            + read_costs(costs, "OCGT", "VOM")
714
            + global_settings(scenario)["co2_costs"]
715
            * global_settings(scenario)["co2_emissions"]["gas"]
716
            / read_costs(costs, "OCGT", "efficiency"),
717
            "nuclear": global_settings(scenario)["fuel_costs"]["nuclear"]
718
            / read_costs(costs, "nuclear", "efficiency")
719
            + read_costs(costs, "nuclear", "VOM"),
720
            "biomass": global_settings(scenario)["fuel_costs"]["biomass"]
721
            / read_costs(costs, "biomass CHP", "efficiency")
722
            + read_costs(costs, "biomass CHP", "VOM"),
723
            "wind_offshore": read_costs(costs, "offwind", "VOM"),
724
            "wind_onshore": read_costs(costs, "onwind", "VOM"),
725
            "solar": read_costs(costs, "solar", "VOM"),
726
            # According to https://www.aemo.com.au/-/media/Files/Electricity/NEM/Planning_and_Forecasting/Inputs-Assumptions-Methodologies/2019/Report-Pumped-Hydro-Cost-Modelling.pdf
727
            # for hydro generation all operations and maintenance costs might
728
            # be categorized as fixed rather than variable.
729
            "run_of_river": 0,
730
            "reservoir": 0,
731
        }
732
733
    else:
734
        print(f"Scenario name {scenario} is not valid.")
735
736
    return parameters
737
738
739
def gas(scenario):
740
    """Returns paramaters of the gas sector for the selected scenario.
741
742
    Parameters
743
    ----------
744
    scenario : str
745
        Name of the scenario.
746
747
    Returns
748
    -------
749
    parameters : dict
750
        List of parameters of gas sector
751
752
    """
753
754
    if scenario == "eGon2035":
755
        costs = read_csv(2035)
756
757
        parameters = {
758
            "main_gas_carrier": "CH4",
759
            "H2_feedin_volumetric_fraction": 0.15,
760
        }
761
        
762
        # Insert effciencies in p.u.
763
        parameters["efficiency"] = {
764
            "power_to_H2": 0.6805,      #source: project internal assumption Fraunhofer ISE
765
            "H2_to_power": read_costs(costs, "fuel cell", "efficiency"),
766
            "CH4_to_H2": read_costs(costs, "SMR", "efficiency"),
767
            "H2_feedin": 1,
768
            "H2_to_CH4": read_costs(costs, "methanation", "efficiency"),
769
            "OCGT": read_costs(costs, "OCGT", "efficiency"),
770
            "power_to_Heat": 0.2,     #overall efficiency (20% electrical Input converted into waste-heat); source: project internal assumption Fraunhofer ISE
771
            "power_to_O2": 0.04,          #O2-transfer efficiency; source:  Sayed Sadat, Modeling Regional Utilization of the electrolysers Co-Products Oxygen and Heat in Germany, 2024
772
        }
773
        
774
        # Insert overnight investment costs
775
        parameters["overnight_cost"] = {
776
            "power_to_H2_system": 452_000, #[EUR/MW]  source: project internal assumption Fraunhofer ISE
777
            "power_to_H2_stack": 0.21 * 452_000, #[EUR/MW] source: project internal assumption Fraunhofer ISE
778
            "power_to_H2_OPEX": 0.03 * 452_000, #[EUR/MW/a]  3% of CAPEX, source: project internal assumption Fraunhofer ISE
779
            "H2_to_power": read_costs(costs, "fuel cell", "investment"),
780
            "CH4_to_H2": read_costs(costs, "SMR", "investment"),
781
            "H2_to_CH4": read_costs(costs, "methanation", "investment"),
782
            "H2_feedin": 0,
783
            "H2_underground": read_costs(
784
                costs, "hydrogen storage underground", "investment"
785
            ),
786
            "H2_overground": read_costs(
787
                costs, "hydrogen storage tank incl. compressor", "investment"
788
            ),
789
            "H2_pipeline": read_costs(costs, "H2 (g) pipeline", "investment"), # [EUR/MW/km] 
790
            "Heat_exchanger": 25_000, # [EUR/MW_th] cost assumption for one additional heat_exchanger; source: project internal cost assumption by Fraunhofer ISE
791
            "Heat_pipeline": 400_000, # [EUR/MW/km]; average value for DN100-pipeline; source: L. Zimmermann, MODELLIERUNG DER ABWÄRMENUTZUNG VON ELEKTROLYSEUREN IN DEUTSCHLAND FÜR EINE TECHNO - ÖKONOMISCHE OPTIMIERUNG EINES SEKTOR - GEKOPPELTEN ENERGIESYSTEM, 2024
792
            "O2_components": 5000, # [EUR] ; source: Sayed Sadat, Modeling Regional Utilization of the electrolysers Co-Products Oxygen and Heat in Germany, 2024 
793
        }
794
        
795
        #overnight_costs for O2_pipeinecosts related to pipeline_diameter
796
        parameters["O2_pipeline_costs"] = {
797
            0.5: 500_000,  # EUR/km
798
            0.4: 450_000,  # EUR/km
799
            0.3: 400_000,  # EUR/km
800
            0.2: 350_000,  # EUR/km
801
            0.0: 300_000,  # EUR/km   (costs for any other pipeline diameter)
802
        }
803
        
804
        # Insert lifetime
805
        parameters["lifetime"] = {
806
            "power_to_H2_system": 25,  # source: project internal assumption Fraunhofer ISE
807
            "power_to_H2_stack": 15,  #85000 hours ~ 15 years; source: project internal assumption Fraunhofer ISE
808
            "power_to_H2_OPEX": 1, #given as OPEX/year
809
            "H2_to_power": read_costs(costs, "fuel cell", "lifetime"),
810
            "CH4_to_H2": read_costs(costs, "SMR", "lifetime"),
811
            "H2_to_CH4": read_costs(costs, "methanation", "lifetime"),
812
            "H2_feedin": read_costs(costs, "CH4 (g) pipeline", "lifetime"),
813
            "H2_underground": read_costs(
814
                costs, "hydrogen storage underground", "lifetime"
815
            ),
816
            "H2_overground": read_costs(
817
                costs, "hydrogen storage tank incl. compressor", "lifetime"
818
            ),
819
            "H2_pipeline": read_costs(costs, "H2 (g) pipeline", "lifetime"),  
820
            "Heat_exchanger": 20, # assumption based on lifetime heat_exchanger; source: E. van der Roest, R. Bol, T. Fens und A. van Wijk, „Utilisation of waste heat from PEM electrolysers - Unlocking local optimisation, 2023
821
            "Heat_pipeline": 20,
822
            "O2_components": 25,  # source: Sayed Sadat, Modeling Regional Utilization of the electrolysers Co-Products Oxygen and Heat in Germany, 2024 
823
        }
824
825
        # Insert annualized capital costs
826
        parameters["capital_cost"] = {}
827
        parameters["O2_capital_cost"]= {}
828
829
        for comp in parameters["overnight_cost"].keys():
830
            parameters["capital_cost"][comp] = annualize_capital_costs(
831
                parameters["overnight_cost"][comp],
832
                parameters["lifetime"][comp],
833
                global_settings("eGon2035")["interest_rate"],
834
            )
835
        
836
        for diameter in parameters["O2_pipeline_costs"].keys():
837
            parameters["O2_capital_cost"][diameter] = annualize_capital_costs(
838
                parameters["O2_pipeline_costs"][diameter],
839
                parameters["lifetime"]["O2_components"],
840
                global_settings("eGon2035")["interest_rate"],
841
            )
842
            
843
        parameters["marginal_cost"] = {
844
            "CH4": global_settings(scenario)["fuel_costs"]["gas"]
845
            + global_settings(scenario)["co2_costs"]
846
            * global_settings(scenario)["co2_emissions"]["gas"],
847
            "OCGT": read_costs(costs, "OCGT", "VOM"),
848
            "biogas": global_settings(scenario)["fuel_costs"]["gas"],
849
            "chp_gas": read_costs(costs, "central gas CHP", "VOM"),
850
        }
851
852
        # Insert max gas production (generator) over the year
853
        parameters["max_gas_generation_overtheyear"] = {
854
            "CH4": 36000000,  # [MWh] Netzentwicklungsplan Gas 2020–2030
855
            "biogas": 10000000,  # [MWh] Netzentwicklungsplan Gas 2020–2030
856
        }
857
858
    elif scenario == "eGon100RE":
859
        costs = read_csv(2050)
860
        interest_rate = 0.07  # [p.u.]
861
862
        parameters = {
863
            "main_gas_carrier": "H2",
864
            "retrofitted_CH4pipeline-to-H2pipeline_share": 0.23,
865
            # p-e-s result, this value is overwritten if p-e-s is run
866
        }
867
        # Insert effciencies in p.u.
868
        parameters["efficiency"] = {
869
            "power_to_H2": 0.709,
870
            "H2_to_power": read_costs(costs, "fuel cell", "efficiency"),
871
            "CH4_to_H2": read_costs(costs, "SMR", "efficiency"),
872
            "H2_to_CH4": read_costs(costs, "methanation", "efficiency"),
873
            "OCGT": read_costs(costs, "OCGT", "efficiency"),
874
            "power_to_Heat": 0.2,   # source: project internal assumption Fraunhofer ISE
875
            "power_to_O2": 0.015,   # source:  Sayed Sadat, Modeling Regional Utilization of the electrolysers Co-Products Oxygen and Heat in Germany, 2024
876
        }
877
878
        # Insert FOM in %
879
        parameters["FOM"] = {
880
            "H2_underground": read_costs(
881
                costs, "hydrogen storage underground", "FOM"
882
            ),
883
            "H2_overground": read_costs(
884
                costs, "hydrogen storage tank incl. compressor", "FOM"
885
            ),
886
            "power_to_H2_system": 3,  #3% of CAPEX, source: project internal assumption Fraunhofer ISE
887
            "power_to_H2_stack": 3, #3% of CAPEX source: project internal assumption Fraunhofer ISE
888
            "H2_to_power": read_costs(costs, "fuel cell", "FOM"),
889
            "CH4_to_H2": read_costs(costs, "SMR", "FOM"),
890
            "H2_to_CH4": read_costs(costs, "methanation", "FOM"),
891
            "H2_pipeline": 3, # 3% of CAPEX
892
            "Heat_exchanger": 3, # 3% of CAPEX
893
            "Heat_pipeline": 3, # 3% of CAPEX 
894
            "O2_components": 3, # 3% of CAPEX  
895
            "H2_pipeline_retrofit": read_costs(
896
                costs, "H2 (g) pipeline repurposed", "FOM"
897
            ),
898
        }
899
        
900
        # Insert overnight investment costs
901
        parameters["overnight_cost"] = {
902
            "power_to_H2_system": 357_000,  #[EUR/MW] source: project internal assumption Fraunhofer ISE
903
            "power_to_H2_stack": 0.21 * 357_000, #[EUR/MW] source: project internal assumption Fraunhofer ISE
904
            "H2_to_power": read_costs(costs, "fuel cell", "investment"),
905
            "CH4_to_H2": read_costs(costs, "SMR", "investment"),
906
            "H2_to_CH4": read_costs(costs, "methanation", "investment"),
907
            "H2_underground": read_costs(
908
                costs, "hydrogen storage underground", "investment"
909
            ),
910
            "H2_overground": read_costs(
911
                costs, "hydrogen storage tank incl. compressor", "investment"
912
            ),
913
            "H2_pipeline": read_costs(costs, "H2 (g) pipeline", "investment"), # [EUR/MW/km] 
914
            "H2_pipeline_retrofit": read_costs(
915
                costs, "H2 (g) pipeline repurposed", "FOM"
916
            ),
917
            "Heat_exchanger": 25_000, # [EUR/MW_th] cost assumption for one additional heat_exchanger; source: project internal cost assumption by Fraunhofer ISE
918
            "Heat_pipeline": 400_000, # [EUR/MW/km]; average value for DN100-pipeline; source: L. Zimmermann, MODELLIERUNG DER ABWÄRMENUTZUNG VON ELEKTROLYSEUREN IN DEUTSCHLAND FÜR EINE TECHNO - ÖKONOMISCHE OPTIMIERUNG EINES SEKTOR - GEKOPPELTEN ENERGIESYSTEM, 2024
919
            "O2_components": 5000, # [EUR] ; source toDO: ask sayed 
920
        }
921
       
922
        #overnight_costs for O2_pipeinecosts related to pipeline_diameter
923
        parameters["O2_pipeline_costs"] = {
924
            0.5: 500_000,  # EUR/km
925
            0.4: 450_000,  # EUR/km
926
            0.3: 400_000,  # EUR/km
927
            0.2: 350_000,  # EUR/km
928
            0: 300_000,  # EUR/km   (costs for any other pipeline diameter)
929
        }
930
931
        # Insert lifetime
932
        parameters["lifetime"] = {
933
            "power_to_H2_system": 30,  # source: project internal assumption Fraunhofer ISE
934
            "power_to_H2_stack": 20,  #110_000 hours ~ 20 years; source: project internal assumption Fraunhofer ISE
935
            "H2_to_power": read_costs(costs, "fuel cell", "lifetime"),
936
            "CH4_to_H2": read_costs(costs, "SMR", "lifetime"),
937
            "H2_to_CH4": read_costs(costs, "methanation", "lifetime"),
938
            "H2_feedin": read_costs(costs, "CH4 (g) pipeline", "lifetime"),
939
            "H2_underground": read_costs(
940
                costs, "hydrogen storage underground", "lifetime"
941
            ),
942
            "H2_overground": read_costs(
943
                costs, "hydrogen storage tank incl. compressor", "lifetime"
944
            ),
945
            "H2_pipeline": read_costs(costs, "H2 (g) pipeline", "lifetime"),  
946
            "H2_pipeline_retrofit": read_costs(
947
                costs, "H2 (g) pipeline repurposed", "lifetime"
948
            ),
949
            "Heat_exchanger": 20, # assumption based on lifetime heat_exchanger; source: E. van der Roest, R. Bol, T. Fens und A. van Wijk, „Utilisation of waste heat from PEM electrolysers - Unlocking local optimisation, 2023
950
            "Heat_pipeline": 20,
951
            "O2_components": 25,  # source toDO: ask sayed 
952
        }
953
954
        # Insert costs
955
        parameters["capital_cost"] = {}
956
        parameters["O2_capital_cost"] = {}
957
        
958
        for comp in parameters["overnight_cost"].keys():
959
            parameters["capital_cost"][comp] = annualize_capital_costs(
960
                parameters["overnight_cost"][comp],
961
                parameters["lifetime"][comp],
962
                interest_rate,
963
            ) + parameters["overnight_cost"][comp] * (
964
                parameters["FOM"][comp] / 100
965
            )
966
                
967
        for comp in ["H2_to_power", "H2_to_CH4"]:
968
            parameters["capital_cost"][comp] = (
969
                annualize_capital_costs(
970
                    parameters["overnight_cost"][comp],
971
                    parameters["lifetime"][comp],
972
                    interest_rate,
973
                )
974
                + parameters["overnight_cost"][comp]
975
                * (parameters["FOM"][comp] / 100)
976
            ) * parameters["efficiency"][comp]
977
978
        for diameter in parameters["O2_pipeline_costs"].keys():
979
            parameters["O2_capital_cost"][diameter] = annualize_capital_costs(
980
                parameters["O2_pipeline_costs"][diameter],
981
                parameters["lifetime"]["O2_components"],
982
                interest_rate,
983
            )
984
                    
985
        parameters["marginal_cost"] = {
986
            "OCGT": read_costs(costs, "OCGT", "VOM"),
987
            "biogas": read_costs(costs, "biogas", "fuel"),
988
            "chp_gas": read_costs(costs, "central gas CHP", "VOM"),
989
        }
990
991
    elif scenario == "eGon2021":
992
        parameters = {}
993
994
    elif scenario == "status2019":
995
        costs = read_csv(2020)
996
        parameters = {
997
            "main_gas_carrier": "CH4",
998
        }
999
1000
        parameters["marginal_cost"] = {
1001
            "CH4": global_settings(scenario)["fuel_costs"]["gas"]
1002
            + global_settings(scenario)["co2_costs"]
1003
            * global_settings(scenario)["co2_emissions"]["gas"],
1004
            "OCGT": read_costs(costs, "OCGT", "VOM"),
1005
            "biogas": global_settings(scenario)["fuel_costs"]["gas"],
1006
            "chp_gas": read_costs(costs, "central gas CHP", "VOM"),
1007
        }
1008
        # Insert effciencies in p.u.
1009
        parameters["efficiency"] = {
1010
            "OCGT": read_costs(costs, "OCGT", "efficiency"),
1011
        }
1012
1013
    else:
1014
        print(f"Scenario name {scenario} is not valid.")
1015
1016
    return parameters
1017
1018
1019
def mobility(scenario):
1020
    """Returns parameters of the mobility sector for the selected scenario.
1021
1022
    Parameters
1023
    ----------
1024
    scenario : str
1025
        Name of the scenario.
1026
1027
    Returns
1028
    -------
1029
    parameters : dict
1030
        List of parameters of mobility sector
1031
1032
    Notes
1033
    -----
1034
    For a detailed description of the parameters see module
1035
    :mod:`egon.data.datasets.emobility.motorized_individual_travel`.
1036
    """
1037
1038
    if scenario == "eGon2035":
1039
        parameters = {
1040
            "motorized_individual_travel": {
1041
                "NEP C 2035": {
1042
                    "ev_count": 15100000,
1043
                    "bev_mini_share": 0.1589,
1044
                    "bev_medium_share": 0.3533,
1045
                    "bev_luxury_share": 0.1053,
1046
                    "phev_mini_share": 0.0984,
1047
                    "phev_medium_share": 0.2189,
1048
                    "phev_luxury_share": 0.0652,
1049
                    "model_parameters": {},
1050
                }
1051
            }
1052
        }
1053
1054
    elif scenario == "eGon100RE":
1055
        # eGon100RE has 3 Scenario variations
1056
        #   * allocation will always be done for all scenarios
1057
        #   * model data will be written to tables `egon_etrago_*` only
1058
        #     for the variation as speciefied in `datasets.yml`
1059
        parameters = {
1060
            "motorized_individual_travel": {
1061
                "Reference 2050": {
1062
                    "ev_count": 25065000,
1063
                    "bev_mini_share": 0.1589,
1064
                    "bev_medium_share": 0.3533,
1065
                    "bev_luxury_share": 0.1053,
1066
                    "phev_mini_share": 0.0984,
1067
                    "phev_medium_share": 0.2189,
1068
                    "phev_luxury_share": 0.0652,
1069
                    "model_parameters": {},
1070
                },
1071
                "Mobility Transition 2050": {
1072
                    "ev_count": 37745000,
1073
                    "bev_mini_share": 0.1589,
1074
                    "bev_medium_share": 0.3533,
1075
                    "bev_luxury_share": 0.1053,
1076
                    "phev_mini_share": 0.0984,
1077
                    "phev_medium_share": 0.2189,
1078
                    "phev_luxury_share": 0.0652,
1079
                    "model_parameters": {},
1080
                },
1081
                "Electrification 2050": {
1082
                    "ev_count": 47700000,
1083
                    "bev_mini_share": 0.1589,
1084
                    "bev_medium_share": 0.3533,
1085
                    "bev_luxury_share": 0.1053,
1086
                    "phev_mini_share": 0.0984,
1087
                    "phev_medium_share": 0.2189,
1088
                    "phev_luxury_share": 0.0652,
1089
                    "model_parameters": {},
1090
                },
1091
            }
1092
        }
1093
1094
    elif scenario == "eGon2021":
1095
        parameters = {}
1096
1097
    elif scenario == "status2019":
1098
        parameters = {
1099
            "motorized_individual_travel": {
1100
                "status2019": {
1101
                    "ev_count": 200000,
1102
                    "bev_mini_share": 0.1589,
1103
                    "bev_medium_share": 0.3533,
1104
                    "bev_luxury_share": 0.1053,
1105
                    "phev_mini_share": 0.0984,
1106
                    "phev_medium_share": 0.2189,
1107
                    "phev_luxury_share": 0.0652,
1108
                    "model_parameters": {},
1109
                }
1110
            }
1111
        }
1112
1113
    elif scenario == "status2023":
1114
        parameters = {
1115
            "motorized_individual_travel": {
1116
                "status2023": {
1117
                    "ev_count": 2577664,
1118
                    "bev_mini_share": 0.1535,
1119
                    "bev_medium_share": 0.3412,
1120
                    "bev_luxury_share": 0.1017,
1121
                    "phev_mini_share": 0.1038,
1122
                    "phev_medium_share": 0.2310,
1123
                    "phev_luxury_share": 0.0688,
1124
                    "model_parameters": {},
1125
                }
1126
            }
1127
        }
1128
1129
    else:
1130
        print(f"Scenario name {scenario} is not valid.")
1131
        parameters = dict()
1132
1133
    return parameters
1134
1135
1136
def heat(scenario):
1137
    """Returns paramaters of the heat sector for the selected scenario.
1138
1139
    Parameters
1140
    ----------
1141
    scenario : str
1142
        Name of the scenario.
1143
1144
    Returns
1145
    -------
1146
    parameters : dict
1147
        List of parameters of heat sector
1148
1149
    """
1150
1151
    if scenario == "eGon2035":
1152
        costs = read_csv(2035)
1153
1154
        parameters = {
1155
            "DE_demand_reduction_residential": 0.854314018923104,
1156
            "DE_demand_reduction_service": 0.498286864771128,
1157
            "DE_district_heating_share": 0.14,
1158
        }
1159
1160
        # Insert efficiency in p.u.
1161
        parameters["efficiency"] = {
1162
            "water_tank_charger": read_costs(
1163
                costs, "water tank charger", "efficiency"
1164
            ),
1165
            "water_tank_discharger": read_costs(
1166
                costs, "water tank discharger", "efficiency"
1167
            ),
1168
            "central_resistive_heater": read_costs(
1169
                costs, "central resistive heater", "efficiency"
1170
            ),
1171
            "central_gas_boiler": read_costs(
1172
                costs, "central gas boiler", "efficiency"
1173
            ),
1174
            "rural_resistive_heater": read_costs(
1175
                costs, "decentral resistive heater", "efficiency"
1176
            ),
1177
            "rural_gas_boiler": read_costs(
1178
                costs, "decentral gas boiler", "efficiency"
1179
            ),
1180
        }
1181
1182
        # Insert overnight investment costs, in EUR/MWh
1183
        parameters["overnight_cost"] = {
1184
            "central_water_tank": read_costs(
1185
                costs, "central water tank storage", "investment"
1186
            ),
1187
            "rural_water_tank": read_costs(
1188
                costs, "decentral water tank storage", "investment"
1189
            ),
1190
        }
1191
1192
        # Insert lifetime
1193
        parameters["lifetime"] = {
1194
            "central_water_tank": read_costs(
1195
                costs, "central water tank storage", "lifetime"
1196
            ),
1197
            "rural_water_tank": read_costs(
1198
                costs, "decentral water tank storage", "lifetime"
1199
            ),
1200
        }
1201
1202
        # Insert annualized capital costs
1203
        parameters["capital_cost"] = {}
1204
1205
        for comp in parameters["overnight_cost"].keys():
1206
            parameters["capital_cost"][comp] = annualize_capital_costs(
1207
                parameters["overnight_cost"][comp],
1208
                parameters["lifetime"][comp],
1209
                global_settings("eGon2035")["interest_rate"],
1210
            )
1211
1212
        # Insert marginal_costs in EUR/MWh
1213
        # marginal cost can include fuel, C02 and operation and maintenance costs
1214
        parameters["marginal_cost"] = {
1215
            "central_heat_pump": read_costs(
1216
                costs, "central air-sourced heat pump", "VOM"
1217
            ),
1218
            "central_gas_chp": read_costs(costs, "central gas CHP", "VOM"),
1219
            "central_gas_boiler": read_costs(
1220
                costs, "central gas boiler", "VOM"
1221
            ),
1222
            "central_resistive_heater": read_costs(
1223
                costs, "central resistive heater", "VOM"
1224
            ),
1225
            "geo_thermal": 2.9,  # Danish Energy Agency
1226
            "water_tank_charger": 0,  # Danish Energy Agency
1227
            "water_tank_discharger": 0,  # Danish Energy Agency
1228
            "rural_heat_pump": 0,  # Danish Energy Agency, Technology Data for Individual Heating Plants
1229
        }
1230
1231
    elif scenario == "eGon100RE":
1232
        costs = read_csv(2050)
1233
1234
        parameters = {
1235
            "DE_demand_residential_MWh": 536692489.8152325 * 0.71542,
1236
            # [MWh], source: pypsa-eur run from 2024/12/23:
1237
            # total heat demand muliplied by residential share from resources/pop_weighted_heat_totals
1238
            "DE_demand_service_MWh": 536692489.8152325 * (1-0.71542),
1239
            # [MWh], source: pypsa-eur run from 2024/12/23:
1240
            # total heat demand muliplied by service share from resources/pop_weighted_heat_totals
1241
            "DE_district_heating_share": 0.42311285313808533,
1242
             # [%], source: pypsa-eur run from 2024/12/23
1243
        }
1244
1245
1246
        parameters["marginal_cost"] = {
1247
            "central_heat_pump": read_costs(
1248
                costs, "central air-sourced heat pump", "VOM"
1249
            ),
1250
            "central_gas_chp": read_costs(costs, "central gas CHP", "VOM"),
1251
            "central_gas_boiler": read_costs(
1252
                costs, "central gas boiler", "VOM"
1253
            ),
1254
            "central_resistive_heater": read_costs(
1255
                costs, "central resistive heater", "VOM"
1256
            ),
1257
            "geo_thermal": 2.7,  # Danish Energy Agency
1258
            "water_tank_charger": 0,  # Danish Energy Agency
1259
            "water_tank_discharger": 0,  # Danish Energy Agency
1260
            "rural_heat_pump": 0,  # Danish Energy Agency, Technology Data for Individual Heating Plants
1261
        }
1262
1263
        # Insert efficiency in p.u.
1264
        parameters["efficiency"] = {
1265
            "water_tank_charger": read_costs(
1266
                costs, "water tank charger", "efficiency"
1267
            ),
1268
            "water_tank_discharger": read_costs(
1269
                costs, "water tank discharger", "efficiency"
1270
            ),
1271
            "central_resistive_heater": read_costs(
1272
                costs, "central resistive heater", "efficiency"
1273
            ),
1274
            "central_gas_boiler": read_costs(
1275
                costs, "central gas boiler", "efficiency"
1276
            ),
1277
            "rural_resistive_heater": read_costs(
1278
                costs, "decentral resistive heater", "efficiency"
1279
            ),
1280
            "rural_gas_boiler": read_costs(
1281
                costs, "decentral gas boiler", "efficiency"
1282
            ),
1283
        }
1284
1285
        # Insert overnight investment costs, in EUR/MWh
1286
        parameters["overnight_cost"] = {
1287
            "central_water_tank": read_costs(
1288
                costs, "central water tank storage", "investment"
1289
            ),
1290
            "rural_water_tank": read_costs(
1291
                costs, "decentral water tank storage", "investment"
1292
            ),
1293
        }
1294
1295
        # Insert lifetime
1296
        parameters["lifetime"] = {
1297
            "central_water_tank": read_costs(
1298
                costs, "central water tank storage", "lifetime"
1299
            ),
1300
            "rural_water_tank": read_costs(
1301
                costs, "decentral water tank storage", "lifetime"
1302
            ),
1303
        }
1304
1305
        # Insert annualized capital costs
1306
        parameters["capital_cost"] = {}
1307
1308
        for comp in parameters["overnight_cost"].keys():
1309
            parameters["capital_cost"][comp] = annualize_capital_costs(
1310
                parameters["overnight_cost"][comp],
1311
                parameters["lifetime"][comp],
1312
                global_settings("eGon100RE")["interest_rate"],
1313
            )
1314
1315
    elif scenario == "eGon2021":
1316
        parameters = {}
1317
1318
    elif scenario == "status2019":
1319
        parameters = {
1320
            "DE_demand_residential_TJ": 1658400
1321
            + 383300,  # [TJ], space heating + hot water, source: AG Energiebilanzen 2019 (https://ag-energiebilanzen.de/wp-content/uploads/2020/10/ageb_20v_v1.pdf)
1322
            "DE_demand_service_TJ": 567300
1323
            + 71500,  # [TJ], space heating + hot water, source: AG Energiebilanzen 2019 (https://ag-energiebilanzen.de/wp-content/uploads/2020/10/ageb_20v_v1.pdf)
1324
            "DE_district_heating_share": (189760 + 38248)
1325
            / (
1326
                1658400 + 383300 + 567300 + 71500
1327
            ),  # [TJ], source: AG Energiebilanzen 2019 (https://ag-energiebilanzen.de/wp-content/uploads/2021/11/bilanz19d.xlsx)
1328
        }
1329
1330
        costs = read_csv(2020)
1331
1332
        # Insert marginal_costs in EUR/MWh
1333
        # marginal cost can include fuel, C02 and operation and maintenance costs
1334
        parameters["marginal_cost"] = {
1335
            "central_heat_pump": read_costs(
1336
                costs, "central air-sourced heat pump", "VOM"
1337
            ),
1338
            "central_gas_chp": read_costs(costs, "central gas CHP", "VOM"),
1339
            "central_gas_boiler": read_costs(
1340
                costs, "central gas boiler", "VOM"
1341
            ),
1342
            "central_resistive_heater": read_costs(
1343
                costs, "central resistive heater", "VOM"
1344
            ),
1345
            "rural_heat_pump": 0,  # Danish Energy Agency, Technology Data for Individual Heating Plants
1346
        }
1347
1348
        # Insert efficiency in p.u.
1349
        parameters["efficiency"] = {
1350
            "central_gas_boiler": read_costs(
1351
                costs, "central gas boiler", "efficiency"
1352
            ),
1353
        }
1354
1355
    # elif scenario == "status2023":
1356
    #     parameters = {
1357
    #         #  source: AG Energiebilanzen 2022  https://ag-energiebilanzen.de/wp-content/uploads/2023/01/AGEB_22p2_rev-1.pdf
1358
    #         "DE_demand_residential_TJ": 1754.2 * 1e3
1359
    #         + 407.5 * 1e3,  # [TJ], Endenergieverbrauch Haushalte 2.1 Raumwärme + Warmwasser
1360
    #         "DE_demand_service_TJ": 668.4 * 1e3
1361
    #         + 44.3 * 1e3 ,  # [TJ], Endenergieverbrauch GHD 3.1 Raumwärme + Warmwasser
1362
    #         "DE_district_heating_share": (189760 + 38248)
1363
    #         / (
1364
    #             1658400 + 383300 + 567300 + 71500
1365
    #         ),  # [TJ], source: AG Energiebilanzen 2019 (https://ag-energiebilanzen.de/wp-content/uploads/2021/11/bilanz19d.xlsx)
1366
    #     } # TODO status2023 needs update
1367
    #
1368
    #     costs = read_csv(2020)
1369
    #
1370
    #     # Insert marginal_costs in EUR/MWh
1371
    #     # marginal cost can include fuel, C02 and operation and maintenance costs
1372
    #     parameters["marginal_cost"] = {
1373
    #         "central_heat_pump": read_costs(
1374
    #             costs, "central air-sourced heat pump", "VOM"
1375
    #         ),
1376
    #         "central_gas_chp": read_costs(costs, "central gas CHP", "VOM"),
1377
    #         "central_gas_boiler": read_costs(
1378
    #             costs, "central gas boiler", "VOM"
1379
    #         ),
1380
    #         "central_resistive_heater": read_costs(
1381
    #             costs, "central resistive heater", "VOM"
1382
    #         ),
1383
    #         "rural_heat_pump": 0,  # Danish Energy Agency, Technology Data for Individual Heating Plants
1384
    #     }
1385
    #
1386
    #     # Insert efficiency in p.u.
1387
    #     parameters["efficiency"] = {
1388
    #         "central_gas_boiler": read_costs(
1389
    #             costs, "central gas boiler", "efficiency"
1390
    #         ),
1391
    #     }
1392
1393
    else:
1394
        print(f"Scenario name {scenario} is not valid.")
1395
1396
    return parameters
1397