Source code for VeraGridEngine.Compilers.Gslv.Devices.static_generators

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
# SPDX-License-Identifier: MPL-2.0
from __future__ import annotations

from typing import Dict

from VeraGridEngine.Compilers.Gslv.activation import pg
from VeraGridEngine.Compilers.Gslv.common import fill_profile, set_injection_associations
from VeraGridEngine.Devices.Aggregation.facility import Facility
from VeraGridEngine.Devices.Associations.technology import Technology
from VeraGridEngine.Devices.Injections.static_generator import StaticGenerator
from VeraGridEngine.Devices.multi_circuit import MultiCircuit
from VeraGridEngine.basic_structures import IntVec


[docs] def convert_static_generator(elm: StaticGenerator, bus_dict: Dict[str, "pg.Bus"], facility_dict: Dict[Facility, "pg.Facility"], technology_dict: Dict[Technology, "pg.Technology"], n_time: int, use_time_series: bool, time_indices: IntVec | None = None) -> "pg.StaticGenerator": """ Convert one VeraGrid static generator into one GSLV static generator. :param elm: VeraGrid static generator. :param bus_dict: Bus lookup by VeraGrid id tag. :param facility_dict: VeraGrid-to-GSLV facility lookup. :param technology_dict: VeraGrid-to-GSLV technology lookup. :param n_time: Number of exported time steps. :param use_time_series: Whether the export is time-series based. :param time_indices: Optional time-series selection. :return: GSLV static generator. """ pe_inj = pg.StaticGenerator( idtag=elm.idtag, code=str(elm.code), name=elm.name, bus=None if elm.bus is None else bus_dict[elm.bus.idtag], nt=n_time, P=elm.P, power_factor=elm.Pf, build_status=elm.build_status, ) set_injection_associations( gslv_elm=pe_inj, elm=elm, facility_dict=facility_dict, technology_dict=technology_dict, ) fill_profile(pe_inj.active, elm.active_prof, use_time_series, time_indices, n_time, elm.active) fill_profile(pe_inj.P, elm.P_prof, use_time_series, time_indices, n_time, elm.P) fill_profile(pe_inj.Q, elm.Q_prof, use_time_series, time_indices, n_time, elm.Q) fill_profile(pe_inj.cost, elm.Cost_prof, use_time_series, time_indices, n_time, elm.Cost) return pe_inj
[docs] def add_static_generators(circuit: MultiCircuit, gslv_grid: "pg.MultiCircuit", bus_dict: Dict[str, "pg.Bus"], facility_dict: Dict[Facility, "pg.Facility"], technology_dict: Dict[Technology, "pg.Technology"], time_series: bool, n_time: int = 1, time_indices: IntVec | None = None) -> None: """ Add every VeraGrid static generator to the target GSLV grid. :param circuit: VeraGrid circuit. :param gslv_grid: GSLV circuit. :param bus_dict: Bus lookup by VeraGrid id tag. :param facility_dict: VeraGrid-to-GSLV facility lookup. :param technology_dict: VeraGrid-to-GSLV technology lookup. :param time_series: Whether the export is time-series based. :param n_time: Number of exported time steps. :param time_indices: Optional time-series selection. :return: None. """ devices = circuit.get_static_generators() for elm in devices: pe_inj = convert_static_generator( elm=elm, bus_dict=bus_dict, facility_dict=facility_dict, technology_dict=technology_dict, n_time=n_time, use_time_series=time_series, time_indices=time_indices, ) gslv_grid.add_static_generator(pe_inj)