fix typos
This commit is contained in:
parent
45cda4e2cd
commit
df4eb85a19
@ -23,7 +23,7 @@ Floor area missing in hotmaps building stock data,floor_area_missing.csv,unknown
|
|||||||
Comparative level investment,comparative_level_investment.csv,Eurostat,https://ec.europa.eu/eurostat/statistics-explained/index.php?title=Comparative_price_levels_for_investment
|
Comparative level investment,comparative_level_investment.csv,Eurostat,https://ec.europa.eu/eurostat/statistics-explained/index.php?title=Comparative_price_levels_for_investment
|
||||||
Electricity taxes,electricity_taxes_eu.csv,Eurostat,https://appsso.eurostat.ec.europa.eu/nui/show.do?dataset=nrg_pc_204&lang=en
|
Electricity taxes,electricity_taxes_eu.csv,Eurostat,https://appsso.eurostat.ec.europa.eu/nui/show.do?dataset=nrg_pc_204&lang=en
|
||||||
Building topologies and corresponding standard values,tabula-calculator-calcsetbuilding.csv,unknown,https://episcope.eu/fileadmin/tabula/public/calc/tabula-calculator.xlsx
|
Building topologies and corresponding standard values,tabula-calculator-calcsetbuilding.csv,unknown,https://episcope.eu/fileadmin/tabula/public/calc/tabula-calculator.xlsx
|
||||||
Retrofitting thermal envelope costs for Germany,retro_cost_germany.csv,unkown,https://www.iwu.de/forschung/handlungslogiken/kosten-energierelevanter-bau-und-anlagenteile-bei-modernisierung/
|
Retrofitting thermal envelope costs for Germany,retro_cost_germany.csv,unknown,https://www.iwu.de/forschung/handlungslogiken/kosten-energierelevanter-bau-und-anlagenteile-bei-modernisierung/
|
||||||
District heating most countries,jrc-idees-2015/,CC BY 4.0,https://ec.europa.eu/jrc/en/potencia/jrc-idees,,
|
District heating most countries,jrc-idees-2015/,CC BY 4.0,https://ec.europa.eu/jrc/en/potencia/jrc-idees,,
|
||||||
District heating missing countries,district_heat_share.csv,unkown,https://www.euroheat.org/knowledge-hub/country-profiles,,
|
District heating missing countries,district_heat_share.csv,unknown,https://www.euroheat.org/knowledge-hub/country-profiles,,
|
||||||
|
|
||||||
|
Can't render this file because it has a wrong number of fields in line 27.
|
@ -54,7 +54,7 @@ The requirements are the same as `PyPSA-Eur <https://github.com/PyPSA/pypsa-eur>
|
|||||||
xarray version >= 0.15.1, you will need the latest master branch of
|
xarray version >= 0.15.1, you will need the latest master branch of
|
||||||
atlite version 0.0.2.
|
atlite version 0.0.2.
|
||||||
|
|
||||||
You can create an enviroment using the environment.yaml file in pypsa-eur/envs:
|
You can create an environment using the environment.yaml file in pypsa-eur/envs:
|
||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ incorporates retrofitting options to hydrogen.
|
|||||||
|
|
||||||
* New rule ``cluster_gas_network`` that clusters the gas transmission network
|
* New rule ``cluster_gas_network`` that clusters the gas transmission network
|
||||||
data to the model resolution. Cross-regional pipeline capacities are aggregated
|
data to the model resolution. Cross-regional pipeline capacities are aggregated
|
||||||
(while pressure and diameter compability is ignored), intra-regional pipelines
|
(while pressure and diameter compatibility is ignored), intra-regional pipelines
|
||||||
are dropped. Lengths are recalculated based on the regions' centroids.
|
are dropped. Lengths are recalculated based on the regions' centroids.
|
||||||
|
|
||||||
* With the option ``sector: gas_network:``, the existing gas network is
|
* With the option ``sector: gas_network:``, the existing gas network is
|
||||||
|
@ -15,7 +15,7 @@ The total number of nodes for Europe is set in the ``config.yaml`` file
|
|||||||
under ``clusters``. The number of nodes can vary between 37, the number
|
under ``clusters``. The number of nodes can vary between 37, the number
|
||||||
of independent countries / synchronous areas, and several
|
of independent countries / synchronous areas, and several
|
||||||
hundred. With 200-300 nodes the model needs 100-150 GB RAM to solve
|
hundred. With 200-300 nodes the model needs 100-150 GB RAM to solve
|
||||||
with a commerical solver like Gurobi.
|
with a commercial solver like Gurobi.
|
||||||
|
|
||||||
|
|
||||||
Not all of the sectors are at the full nodal resolution, and some
|
Not all of the sectors are at the full nodal resolution, and some
|
||||||
|
@ -165,11 +165,11 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas
|
|||||||
df_agg.loc[biomass_i, 'DateOut'] = df_agg.loc[biomass_i, 'DateOut'].fillna(dateout)
|
df_agg.loc[biomass_i, 'DateOut'] = df_agg.loc[biomass_i, 'DateOut'].fillna(dateout)
|
||||||
|
|
||||||
|
|
||||||
# drop assets which are already phased out / decomissioned
|
# drop assets which are already phased out / decommissioned
|
||||||
phased_out = df_agg[df_agg["DateOut"]<baseyear].index
|
phased_out = df_agg[df_agg["DateOut"]<baseyear].index
|
||||||
df_agg.drop(phased_out, inplace=True)
|
df_agg.drop(phased_out, inplace=True)
|
||||||
|
|
||||||
# calculate remaining lifetime before phase-out (+1 because assumming
|
# calculate remaining lifetime before phase-out (+1 because assuming
|
||||||
# phase out date at the end of the year)
|
# phase out date at the end of the year)
|
||||||
df_agg["lifetime"] = df_agg.DateOut - df_agg.DateIn + 1
|
df_agg["lifetime"] = df_agg.DateOut - df_agg.DateIn + 1
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ def add_power_capacities_installed_before_baseyear(n, grouping_years, costs, bas
|
|||||||
# existing capacities are split evenly among regions in every country
|
# existing capacities are split evenly among regions in every country
|
||||||
inv_ind = [i for i in inv_busmap[ind]]
|
inv_ind = [i for i in inv_busmap[ind]]
|
||||||
|
|
||||||
# for offshore the spliting only inludes coastal regions
|
# for offshore the splitting only includes coastal regions
|
||||||
inv_ind = [i for i in inv_ind if (i + name_suffix) in n.generators.index]
|
inv_ind = [i for i in inv_ind if (i + name_suffix) in n.generators.index]
|
||||||
|
|
||||||
p_max_pu = n.generators_t.p_max_pu[[i + name_suffix for i in inv_ind]]
|
p_max_pu = n.generators_t.p_max_pu[[i + name_suffix for i in inv_ind]]
|
||||||
|
@ -618,7 +618,7 @@ def nonmetalic_mineral_products():
|
|||||||
# (c) clinker production (kilns),
|
# (c) clinker production (kilns),
|
||||||
# (d) Grinding, packaging.
|
# (d) Grinding, packaging.
|
||||||
# (b)+(c) represent 94% of fec. So (a) is joined to (b) and (d) is joined to (c).
|
# (b)+(c) represent 94% of fec. So (a) is joined to (b) and (d) is joined to (c).
|
||||||
# Temperatures above 1400C are required for procesing limestone and sand into clinker.
|
# Temperatures above 1400C are required for processing limestone and sand into clinker.
|
||||||
# Everything (except current electricity and heat consumption and existing biomass)
|
# Everything (except current electricity and heat consumption and existing biomass)
|
||||||
# is transformed into methane for high T.
|
# is transformed into methane for high T.
|
||||||
|
|
||||||
@ -1110,7 +1110,7 @@ def non_ferrous_metals():
|
|||||||
|
|
||||||
# Aluminium secondary route
|
# Aluminium secondary route
|
||||||
|
|
||||||
# All is coverted into secondary route fully electrified.
|
# All is converted into secondary route fully electrified.
|
||||||
|
|
||||||
sector = "Aluminium - secondary production"
|
sector = "Aluminium - secondary production"
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ The basic equations:
|
|||||||
|
|
||||||
E_space = H_losses - H_gains
|
E_space = H_losses - H_gains
|
||||||
|
|
||||||
Heat losses constitute from the losses through heat trasmission (H_tr [W/m²K])
|
Heat losses constitute from the losses through heat transmission (H_tr [W/m²K])
|
||||||
(this includes heat transfer through building elements and thermal bridges)
|
(this includes heat transfer through building elements and thermal bridges)
|
||||||
and losses by ventilation (H_ve [W/m²K]):
|
and losses by ventilation (H_ve [W/m²K]):
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ import xarray as xr
|
|||||||
|
|
||||||
# thermal conductivity standard value
|
# thermal conductivity standard value
|
||||||
k = 0.035
|
k = 0.035
|
||||||
# strenght of relative retrofitting depending on the component
|
# strength of relative retrofitting depending on the component
|
||||||
# determined by historical data of insulation thickness for retrofitting
|
# determined by historical data of insulation thickness for retrofitting
|
||||||
l_weight = pd.DataFrame({"weight": [1.95, 1.48, 1.]},
|
l_weight = pd.DataFrame({"weight": [1.95, 1.48, 1.]},
|
||||||
index=["Roof", "Wall", "Floor"])
|
index=["Roof", "Wall", "Floor"])
|
||||||
@ -89,8 +89,8 @@ tau_H_0 = 30
|
|||||||
# constant parameter alpha_H_0 [-] according to EN 13790 seasonal method
|
# constant parameter alpha_H_0 [-] according to EN 13790 seasonal method
|
||||||
alpha_H_0 = 0.8
|
alpha_H_0 = 0.8
|
||||||
|
|
||||||
# paramter for solar heat load during heating season -------------------------
|
# parameter for solar heat load during heating season -------------------------
|
||||||
# tabular standard values table p.8 in documenation
|
# tabular standard values table p.8 in documentation
|
||||||
external_shading = 0.6 # vertical orientation: fraction of window area shaded [-]
|
external_shading = 0.6 # vertical orientation: fraction of window area shaded [-]
|
||||||
frame_area_fraction = 0.3 # fraction of frame area of window [-]
|
frame_area_fraction = 0.3 # fraction of frame area of window [-]
|
||||||
non_perpendicular = 0.9 # reduction factor, considering radiation non perpendicular to the glazing[-]
|
non_perpendicular = 0.9 # reduction factor, considering radiation non perpendicular to the glazing[-]
|
||||||
@ -279,7 +279,7 @@ def prepare_building_stock_data():
|
|||||||
def prepare_building_topology(u_values, same_building_topology=True):
|
def prepare_building_topology(u_values, same_building_topology=True):
|
||||||
"""
|
"""
|
||||||
reads in typical building topologies (e.g. average surface of building elements)
|
reads in typical building topologies (e.g. average surface of building elements)
|
||||||
and typical losses trough thermal bridging and air ventilation
|
and typical losses through thermal bridging and air ventilation
|
||||||
"""
|
"""
|
||||||
|
|
||||||
data_tabula = pd.read_csv(snakemake.input.data_tabula,
|
data_tabula = pd.read_csv(snakemake.input.data_tabula,
|
||||||
@ -585,7 +585,7 @@ def map_to_lstrength(l_strength, df):
|
|||||||
|
|
||||||
def calculate_heat_losses(u_values, data_tabula, l_strength, temperature_factor):
|
def calculate_heat_losses(u_values, data_tabula, l_strength, temperature_factor):
|
||||||
"""
|
"""
|
||||||
calculates total annual heat losses Q_ht for different insulation thiknesses
|
calculates total annual heat losses Q_ht for different insulation thicknesses
|
||||||
(l_strength), depening on current insulation state (u_values), standard
|
(l_strength), depening on current insulation state (u_values), standard
|
||||||
building topologies and air ventilation from TABULA (data_tabula) and
|
building topologies and air ventilation from TABULA (data_tabula) and
|
||||||
the accumulated difference between internal and external temperature
|
the accumulated difference between internal and external temperature
|
||||||
@ -790,7 +790,7 @@ def sample_dE_costs_area(area, area_tot, costs, dE_space, countries,
|
|||||||
|
|
||||||
# drop not considered countries
|
# drop not considered countries
|
||||||
cost_dE = cost_dE.reindex(countries,level=0)
|
cost_dE = cost_dE.reindex(countries,level=0)
|
||||||
# get share of residential and sevice floor area
|
# get share of residential and service floor area
|
||||||
sec_w = area_tot.value / area_tot.value.groupby(level=0).sum()
|
sec_w = area_tot.value / area_tot.value.groupby(level=0).sum()
|
||||||
# get the total cost-energy-savings weight by sector area
|
# get the total cost-energy-savings weight by sector area
|
||||||
tot = (cost_dE.mul(sec_w, axis=0).groupby(level="country_code").sum()
|
tot = (cost_dE.mul(sec_w, axis=0).groupby(level="country_code").sum()
|
||||||
@ -863,7 +863,7 @@ if __name__ == "__main__":
|
|||||||
data_tabula = prepare_building_topology(u_values)
|
data_tabula = prepare_building_topology(u_values)
|
||||||
# costs for retrofitting -------------------------------------------------
|
# costs for retrofitting -------------------------------------------------
|
||||||
cost_retro, window_assumptions, cost_w, tax_w = prepare_cost_retro(country_iso_dic)
|
cost_retro, window_assumptions, cost_w, tax_w = prepare_cost_retro(country_iso_dic)
|
||||||
# temperature dependend parameters
|
# temperature dependent parameters
|
||||||
d_heat, temperature_factor = prepare_temperature_data()
|
d_heat, temperature_factor = prepare_temperature_data()
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ def override_component_attrs(directory):
|
|||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
Dictionary of overriden component attributes.
|
Dictionary of overridden component attributes.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
attrs = Dict({k : v.copy() for k,v in component_attrs.items()})
|
attrs = Dict({k : v.copy() for k,v in component_attrs.items()})
|
||||||
|
@ -401,7 +401,7 @@ def plot_carbon_budget_distribution(input_eurostat):
|
|||||||
|
|
||||||
ax1.plot(emissions, color='black', linewidth=3, label=None)
|
ax1.plot(emissions, color='black', linewidth=3, label=None)
|
||||||
|
|
||||||
#plot commited and uder-discussion targets
|
#plot committed and uder-discussion targets
|
||||||
#(notice that historical emissions include all countries in the
|
#(notice that historical emissions include all countries in the
|
||||||
# network, but targets refer to EU)
|
# network, but targets refer to EU)
|
||||||
ax1.plot([2020],[0.8*emissions[1990]],
|
ax1.plot([2020],[0.8*emissions[1990]],
|
||||||
@ -427,7 +427,7 @@ def plot_carbon_budget_distribution(input_eurostat):
|
|||||||
|
|
||||||
ax1.plot([2050],[0.125*emissions[1990]],'ro',
|
ax1.plot([2050],[0.125*emissions[1990]],'ro',
|
||||||
marker='*', markersize=12, markerfacecolor='black',
|
marker='*', markersize=12, markerfacecolor='black',
|
||||||
markeredgecolor='black', label='EU commited target')
|
markeredgecolor='black', label='EU committed target')
|
||||||
|
|
||||||
ax1.legend(fancybox=True, fontsize=18, loc=(0.01,0.01),
|
ax1.legend(fancybox=True, fontsize=18, loc=(0.01,0.01),
|
||||||
facecolor='white', frameon=True)
|
facecolor='white', frameon=True)
|
||||||
|
@ -1382,7 +1382,7 @@ def add_land_transport(n, costs):
|
|||||||
|
|
||||||
def build_heat_demand(n):
|
def build_heat_demand(n):
|
||||||
|
|
||||||
# copy forward the daily average heat demand into each hour, so it can be multipled by the intraday profile
|
# copy forward the daily average heat demand into each hour, so it can be multiplied by the intraday profile
|
||||||
daily_space_heat_demand = xr.open_dataarray(snakemake.input.heat_demand_total).to_pandas().reindex(index=n.snapshots, method="ffill")
|
daily_space_heat_demand = xr.open_dataarray(snakemake.input.heat_demand_total).to_pandas().reindex(index=n.snapshots, method="ffill")
|
||||||
|
|
||||||
intraday_profiles = pd.read_csv(snakemake.input.heat_profile, index_col=0)
|
intraday_profiles = pd.read_csv(snakemake.input.heat_profile, index_col=0)
|
||||||
@ -1724,7 +1724,7 @@ def add_heat(n, costs):
|
|||||||
|
|
||||||
# minimum heat demand 'dE' after retrofitting in units of original heat demand (values between 0-1)
|
# minimum heat demand 'dE' after retrofitting in units of original heat demand (values between 0-1)
|
||||||
dE = retro_data.loc[(ct, sec), ("dE")]
|
dE = retro_data.loc[(ct, sec), ("dE")]
|
||||||
# get addtional energy savings 'dE_diff' between the different retrofitting strengths/generators at one node
|
# get additional energy savings 'dE_diff' between the different retrofitting strengths/generators at one node
|
||||||
dE_diff = abs(dE.diff()).fillna(1-dE.iloc[0])
|
dE_diff = abs(dE.diff()).fillna(1-dE.iloc[0])
|
||||||
# convert costs Euro/m^2 -> Euro/MWh
|
# convert costs Euro/m^2 -> Euro/MWh
|
||||||
capital_cost = retro_data.loc[(ct, sec), ("cost")] * floor_area_node / \
|
capital_cost = retro_data.loc[(ct, sec), ("cost")] * floor_area_node / \
|
||||||
@ -2565,7 +2565,7 @@ def set_temporal_aggregation(n, opts, solver_name):
|
|||||||
if m is not None:
|
if m is not None:
|
||||||
n = average_every_nhours(n, m.group(0))
|
n = average_every_nhours(n, m.group(0))
|
||||||
break
|
break
|
||||||
# representive snapshots
|
# representative snapshots
|
||||||
m = re.match(r"(^\d+)sn$", o, re.IGNORECASE)
|
m = re.match(r"(^\d+)sn$", o, re.IGNORECASE)
|
||||||
if m is not None:
|
if m is not None:
|
||||||
sn = int(m[1])
|
sn = int(m[1])
|
||||||
|
Loading…
Reference in New Issue
Block a user