diff --git a/config.default.yaml b/config.default.yaml index 6a1d77cb..0ad40df8 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -102,7 +102,7 @@ sector: 'bev_dsm' : True #turns on EV battery 'bev_availability' : 0.5 #How many cars do smart charging 'v2g' : True #allows feed-in to grid from EV battery - #what is not EV or FCEV is fossil-fuelled + #what is not EV or FCEV is oil-fuelled ICE 'land_transport_fuel_cell_share': # 1 means all FCEVs 2020: 0 2030: 0.05 @@ -334,7 +334,7 @@ plotting: "Fischer-Tropsch" : "#44DD33" "kerosene for aviation": "#44BB11" "naphtha for industry" : "#44FF55" - "land transport fossil" : "#44DD33" + "land transport oil" : "#44DD33" "water tanks" : "#BBBBBB" "hot water storage" : "#BBBBBB" "hot water charging" : "#BBBBBB" @@ -369,6 +369,7 @@ plotting: "process emissions to stored" : "#444444" "process emissions to atmosphere" : "#888888" "process emissions" : "#222222" + "oil emissions" : "#666666" "land transport fuel cell" : "#AAAAAA" "biogas" : "#800000" "solid biomass" : "#DAA520" diff --git a/doc/release_notes.rst b/doc/release_notes.rst index 4ee7cb9e..991b1ca6 100644 --- a/doc/release_notes.rst +++ b/doc/release_notes.rst @@ -4,9 +4,11 @@ Release Notes Future release =================== -* For the myopic option, a carbon budget and a type of decay (exponential or beta) can be selected in the config file to distribute the budget across the planning_horizons. -* Added an option to alter the capital cost or maximum capacity of carriers by a factor via ``carrier+factor`` in the ``{opts}`` wildcard. This can be useful for exploring uncertain cost parameters. Example: ``solar+c0.5`` reduces the capital cost of solar to 50\% of original values. Similarly ``solar+p3`` multiplies the p_nom_max by 3. -* Bugfix: Fix reading in of ``pypsa-eur/resources/powerplants.csv`` to PyPSA-Eur Version 0.3.0 (use ``DateIn`` instead of old ``YearDecommissioned``). + +* For the myopic investment option, a carbon budget and a type of decay (exponential or beta) can be selected in the ``config.yaml`` file to distribute the budget across the ``planning_horizons``. For example, ``cb40ex0`` in the ``{sector_opts}`` wildcard will distribute a carbon budget of 40 GtCO2 following an exponential decay with initial growth rate 0. +* Added an option to alter the capital cost or maximum capacity of carriers by a factor via ``carrier+factor`` in the ``{sector_opts}`` wildcard. This can be useful for exploring uncertain cost parameters. Example: ``solar+c0.5`` reduces the ``capital_cost`` of solar to 50\% of original values. Similarly ``solar+p3`` multiplies the ``p_nom_max`` by 3. +* Rename the bus for European liquid hydrocarbons from ``Fischer-Tropsch`` to ``EU oil``, since it can be supplied not just with the Fischer-Tropsch process, but also with fossil oil. +* Bugfix: Fix reading in of ``pypsa-eur/resources/powerplants.csv`` to PyPSA-Eur Version 0.3.0 (use column attribute name ``DateIn`` instead of old ``YearDecommissioned``). * Bugfix: Make sure that ``Store`` components (battery and H2) are also removed from PyPSA-Eur, so they can be added later by PyPSA-Eur-Sec. diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index 316eb672..c8dc9c28 100644 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -676,7 +676,7 @@ def add_generation(network): capital_cost=0.) #could correct to e.g. 0.2 EUR/kWh * annuity and O&M network.add("Generator", - "EU fossil " + carrier, + "EU " + carrier, bus="EU " + carrier, p_nom_extendable=True, carrier=carrier, @@ -1056,14 +1056,14 @@ def add_land_transport(network): fuel_cell_share = get_parameter(options["land_transport_fuel_cell_share"]) electric_share = get_parameter(options["land_transport_electric_share"]) - fossil_share = 1 - fuel_cell_share - electric_share + ice_share = 1 - fuel_cell_share - electric_share print("shares of FCEV, EV and ICEV are", fuel_cell_share, electric_share, - fossil_share) + ice_share) - if fossil_share < 0: + if ice_share < 0: print("Error, more FCEV and EV share than 1.") sys.exit() @@ -1141,14 +1141,14 @@ def add_land_transport(network): p_set=fuel_cell_share/options['transport_fuel_cell_efficiency']*transport[nodes]) - if fossil_share > 0: + if ice_share > 0: network.madd("Load", nodes, - suffix=" land transport fossil", - bus="Fischer-Tropsch", - carrier="land transport fossil", - p_set=fossil_share/options['transport_internal_combustion_efficiency']*transport[nodes]) + suffix=" land transport oil", + bus="EU oil", + carrier="land transport oil", + p_set=ice_share/options['transport_internal_combustion_efficiency']*transport[nodes]) @@ -1664,27 +1664,30 @@ def add_industry(network): carrier="H2 for shipping", p_set = nodal_energy_totals.loc[nodes,["total international navigation","total domestic navigation"]].sum(axis=1)*1e6*options['shipping_average_efficiency']/costs.at["fuel cell","efficiency"]/8760.) - network.madd("Bus", - ["Fischer-Tropsch"], - location="EU", - carrier="Fischer-Tropsch") + if "EU oil" not in network.buses.index: + network.madd("Bus", + ["EU oil"], + location="EU", + carrier="oil") #use madd to get carrier inserted - network.madd("Store", - ["Fischer-Tropsch Store"], - bus="Fischer-Tropsch", - e_nom_extendable=True, - e_cyclic=True, - carrier="Fischer-Tropsch", - capital_cost=0.) #could correct to e.g. 0.001 EUR/kWh * annuity and O&M + if "EU oil Store" not in network.stores.index: + network.madd("Store", + ["EU oil Store"], + bus="EU oil", + e_nom_extendable=True, + e_cyclic=True, + carrier="oil", + capital_cost=0.) #could correct to e.g. 0.001 EUR/kWh * annuity and O&M - network.add("Generator", - "fossil oil", - bus="Fischer-Tropsch", - p_nom_extendable=True, - carrier="oil", - capital_cost=0., - marginal_cost=costs.at["oil",'fuel']) + if "EU oil" not in network.generators.index: + network.add("Generator", + "EU oil", + bus="EU oil", + p_nom_extendable=True, + carrier="oil", + capital_cost=0., + marginal_cost=costs.at["oil",'fuel']) if options["oil_boilers"]: @@ -1694,7 +1697,7 @@ def add_industry(network): network.madd("Link", nodes_heat[name] + " " + name + " oil boiler", p_nom_extendable=True, - bus0=["Fischer-Tropsch"] * len(nodes_heat[name]), + bus0="EU oil", bus1=nodes_heat[name] + " " + name + " heat", bus2="co2 atmosphere", carrier=name + " oil boiler", @@ -1707,7 +1710,7 @@ def add_industry(network): network.madd("Link", nodes + " Fischer-Tropsch", bus0=nodes + " H2", - bus1="Fischer-Tropsch", + bus1="EU oil", bus2="co2 stored", carrier="Fischer-Tropsch", efficiency=costs.at["Fischer-Tropsch",'efficiency'], @@ -1718,13 +1721,13 @@ def add_industry(network): network.madd("Load", ["naphtha for industry"], - bus="Fischer-Tropsch", + bus="EU oil", carrier="naphtha for industry", p_set = industrial_demand.loc[nodes,"naphtha"].sum()/8760.) network.madd("Load", ["kerosene for aviation"], - bus="Fischer-Tropsch", + bus="EU oil", carrier="kerosene for aviation", p_set = nodal_energy_totals.loc[nodes,["total international aviation","total domestic aviation"]].sum(axis=1).sum()*1e6/8760.) @@ -1734,9 +1737,9 @@ def add_industry(network): co2 = network.loads.loc[["naphtha for industry","kerosene for aviation"],"p_set"].sum()*costs.at["oil",'CO2 intensity'] - industrial_demand.loc[nodes,"process emission from feedstock"].sum()/8760. network.madd("Load", - ["Fischer-Tropsch emissions"], + ["oil emissions"], bus="co2 atmosphere", - carrier="Fischer-Tropsch emissions", + carrier="oil emissions", p_set=-co2) network.madd("Load",