solve_network: Move country/carrier constraints to opts as CCL
This commit is contained in:
parent
d7fcbbba7b
commit
2f728b33c8
@ -77,35 +77,35 @@ def add_opts_constraints(n, opts=None):
|
|||||||
ext_gens_i = n.generators.index[n.generators.carrier.isin(conv_techs) & n.generators.p_nom_extendable]
|
ext_gens_i = n.generators.index[n.generators.carrier.isin(conv_techs) & n.generators.p_nom_extendable]
|
||||||
n.model.safe_peakdemand = pypsa.opt.Constraint(expr=sum(n.model.generator_p_nom[gen] for gen in ext_gens_i) >= peakdemand - exist_conv_caps)
|
n.model.safe_peakdemand = pypsa.opt.Constraint(expr=sum(n.model.generator_p_nom[gen] for gen in ext_gens_i) >= peakdemand - exist_conv_caps)
|
||||||
|
|
||||||
def add_country_carrier_generation_constraints(n):
|
# Add constraints on the per-carrier capacity in each country
|
||||||
agg_p_nom_limits = snakemake.config['electricity'].get('agg_p_nom_limits')
|
if 'CCL' in opts:
|
||||||
if agg_p_nom_limits is None: return
|
agg_p_nom_limits = snakemake.config['electricity'].get('agg_p_nom_limits')
|
||||||
|
|
||||||
try:
|
|
||||||
agg_p_nom_minmax = pd.read_csv(agg_p_nom_limits, index_col=list(range(2)))
|
|
||||||
except IOError:
|
|
||||||
logger.exception("Need to specify the path to a .csv file containing aggregate capacity limits per country in config['electricity']['agg_p_nom_limit'].")
|
|
||||||
|
|
||||||
logger.info("Adding per carrier generation capacity constraints for individual countries")
|
try:
|
||||||
|
agg_p_nom_minmax = pd.read_csv(agg_p_nom_limits, index_col=list(range(2)))
|
||||||
gen_country = n.generators.bus.map(n.buses.country)
|
except IOError:
|
||||||
|
logger.exception("Need to specify the path to a .csv file containing aggregate capacity limits per country in config['electricity']['agg_p_nom_limit'].")
|
||||||
|
|
||||||
def agg_p_nom_min_rule(model, country, carrier):
|
logger.info("Adding per carrier generation capacity constraints for individual countries")
|
||||||
min = agg_p_nom_minmax.at[(country, carrier), 'min']
|
|
||||||
return ((sum(model.generator_p_nom[gen]
|
|
||||||
for gen in n.generators.index[(gen_country == country) & (n.generators.carrier == carrier)])
|
|
||||||
<= min)
|
|
||||||
if np.isfinite(min) else po.Constraint.Skip)
|
|
||||||
|
|
||||||
def agg_p_nom_max_rule(model, country, carrier):
|
gen_country = n.generators.bus.map(n.buses.country)
|
||||||
max = agg_p_nom_minmax.at[(country, carrier), 'max']
|
|
||||||
return ((sum(model.generator_p_nom[gen]
|
|
||||||
for gen in n.generators.index[(gen_country == country) & (n.generators.carrier == carrier)])
|
|
||||||
<= max)
|
|
||||||
if np.isfinite(max) else po.Constraint.Skip)
|
|
||||||
|
|
||||||
n.model.agg_p_nom_min = pypsa.opt.Constraint(list(agg_p_nom_minmax.index), rule=agg_p_nom_min_rule)
|
def agg_p_nom_min_rule(model, country, carrier):
|
||||||
n.model.agg_p_nom_max = pypsa.opt.Constraint(list(agg_p_nom_minmax.index), rule=agg_p_nom_max_rule)
|
min = agg_p_nom_minmax.at[(country, carrier), 'min']
|
||||||
|
return ((sum(model.generator_p_nom[gen]
|
||||||
|
for gen in n.generators.index[(gen_country == country) & (n.generators.carrier == carrier)])
|
||||||
|
<= min)
|
||||||
|
if np.isfinite(min) else po.Constraint.Skip)
|
||||||
|
|
||||||
|
def agg_p_nom_max_rule(model, country, carrier):
|
||||||
|
max = agg_p_nom_minmax.at[(country, carrier), 'max']
|
||||||
|
return ((sum(model.generator_p_nom[gen]
|
||||||
|
for gen in n.generators.index[(gen_country == country) & (n.generators.carrier == carrier)])
|
||||||
|
<= max)
|
||||||
|
if np.isfinite(max) else po.Constraint.Skip)
|
||||||
|
|
||||||
|
n.model.agg_p_nom_min = pypsa.opt.Constraint(list(agg_p_nom_minmax.index), rule=agg_p_nom_min_rule)
|
||||||
|
n.model.agg_p_nom_max = pypsa.opt.Constraint(list(agg_p_nom_minmax.index), rule=agg_p_nom_max_rule)
|
||||||
|
|
||||||
def add_lv_constraint(n):
|
def add_lv_constraint(n):
|
||||||
line_volume = getattr(n, 'line_volume_limit', None)
|
line_volume = getattr(n, 'line_volume_limit', None)
|
||||||
@ -176,7 +176,6 @@ def solve_network(n, config=None, solver_log=None, opts=None, callback=None):
|
|||||||
|
|
||||||
pypsa.opf.network_lopf_build_model(n, formulation=solve_opts['formulation'])
|
pypsa.opf.network_lopf_build_model(n, formulation=solve_opts['formulation'])
|
||||||
|
|
||||||
add_country_carrier_generation_constraints(n, opts)
|
|
||||||
add_opts_constraints(n, opts)
|
add_opts_constraints(n, opts)
|
||||||
|
|
||||||
if not fix_ext_lines:
|
if not fix_ext_lines:
|
||||||
|
Loading…
Reference in New Issue
Block a user