Source code for VeraGridEngine.Templates.Rms.shunt_template

# 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

import math
from VeraGridEngine.enumerations import DeviceType, VarPowerFlowReferenceType, ParamPowerFlowReferenceType
from VeraGridEngine.Devices.Dynamic.rms_template import RmsModelTemplate
from VeraGridEngine.Devices.Dynamic.var_factory import VarFactory
from VeraGridEngine.Utils.Symbolic.block import Block


[docs] def ShuntLoadBuild(vfactory: VarFactory, name: str = "") -> RmsModelTemplate: templ = RmsModelTemplate() templ.tpe = DeviceType.ShuntDevice res_block = Block() pi = math.pi # Inputs: inputs = [vfactory.add_var('Vm'), vfactory.add_var('Va')] Vm = inputs[0] Va = inputs[1] # Variables: P = vfactory.add_var('P') Q = vfactory.add_var('Q') g = vfactory.add_var('g') b = vfactory.add_var('b') events_dict = { g: vfactory.add_const(0.0), b: vfactory.add_const(0.4), } res_block = Block( algebraic_eqs=[ P + g * Vm ** 2, Q - b * Vm ** 2, ], algebraic_vars=[P, Q], init_eqs={ P: vfactory.add_const(0.0), Q: vfactory.add_const(0.1), } ) res_block.event_dict = events_dict res_block.external_mapping = { VarPowerFlowReferenceType.Vm: inputs[0], VarPowerFlowReferenceType.Va: inputs[1], VarPowerFlowReferenceType.P: P, VarPowerFlowReferenceType.Q: Q, } res_block.in_vars = inputs templ.block = res_block return templ
[docs] def ShuntPhasorBuild(vfactory: VarFactory, name: str = "") -> RmsModelTemplate: templ = RmsModelTemplate() templ.tpe = DeviceType.ShuntDevice res_block = Block() # Inputs: inputs = [vfactory.add_var('Vr_'), vfactory.add_var('Vi_')] Vr = inputs[0] Vi = inputs[1] # Variables: Ir = vfactory.add_var('Ir_shunt') Ii = vfactory.add_var('Ii_shunt') #Parameters: g = vfactory.add_var('g') b = vfactory.add_var('b') parameters = { g: vfactory.add_const(0.2), b: vfactory.add_const(0.2), } res_block = Block( algebraic_eqs=[ Ir - (-g*Vr + b*Vi), Ii - (-g*Vi - b*Vr), ], algebraic_vars=[Ir, Ii], external_mapping={ VarPowerFlowReferenceType.Vr: inputs[0], VarPowerFlowReferenceType.Vi: inputs[1], VarPowerFlowReferenceType.Ir: Ir, VarPowerFlowReferenceType.Ii: Ii, }, init_eqs={ Ir: -(g*Vr - b*Vi), Ii: -(g*Vi + b*Vr), }, api_obj_mapping={ ParamPowerFlowReferenceType.g: g, ParamPowerFlowReferenceType.b: b, } ) res_block.parameters = parameters res_block.in_vars = inputs templ.block = res_block return templ
[docs] def get_shunt_template(vfactory: VarFactory, name: str = "", phasor:bool = True) -> RmsModelTemplate: if phasor: return ShuntPhasorBuild(vfactory, name) else: return ShuntLoadBuild(vfactory, name)