Source code for calliope.backend.pyomo.constraints.network

"""
Copyright (C) since 2013 Calliope contributors listed in AUTHORS.
Licensed under the Apache 2.0 License (see LICENSE file).

network.py
~~~~~~~~~~

Transmission/distribution network constraints.

"""

import pyomo.core as po  # pylint: disable=import-error

ORDER = 10  # order in which to invoke constraints relative to other constraint files


def load_constraints(backend_model):
    sets = backend_model.__calliope_model_data["sets"]
    run_config = backend_model.__calliope_run_config

    if (
        "loc_techs_symmetric_transmission_constraint" in sets
        and run_config["mode"] != "operate"
    ):
        backend_model.symmetric_transmission_constraint = po.Constraint(
            backend_model.loc_techs_symmetric_transmission_constraint,
            rule=symmetric_transmission_constraint_rule,
        )


[docs]def symmetric_transmission_constraint_rule(backend_model, loc_tech): """ Constrain e_cap symmetrically for transmission nodes. Transmission techs only. .. container:: scrolling-wrapper .. math:: energy_{cap}(loc1::tech:loc2) = energy_{cap}(loc2::tech:loc1) """ lookup = backend_model.__calliope_model_data["data"]["lookup_remotes"] loc_tech_remote = lookup[loc_tech] return ( backend_model.energy_cap[loc_tech] == backend_model.energy_cap[loc_tech_remote] )