Source code for monee.model.node

import math

from .core import Intermediate, IntermediateEq, NodeModel, Var, model
from .phys.core.hydraulics import junction_mass_flow_balance
from .phys.nonlinear.ac import power_balance_equation


[docs] @model class Bus(NodeModel): """ No docstring provided. """ def __init__(self, base_kv) -> None: super().__init__() self.base_kv = base_kv self.vm_pu = Var(1, name="vm_pu") self.vm_pu_squared = Var(1, name="vm_pu_squared") self.va_radians = Var(0, name="va_radians") self.va_degree = Intermediate() self.p_mw = Intermediate() self.q_mvar = Intermediate()
[docs] def calc_signed_power_values( self, from_branch_models, to_branch_models, connected_node_models ): """ No docstring provided. """ signed_active_power = ( [ model.vars["p_from_mw"] * model.vars["on_off"] for model in from_branch_models ] + [ model.vars["p_to_mw"] * model.vars["on_off"] for model in to_branch_models ] + [ model.vars["p_mw"] * model.vars["regulation"] for model in connected_node_models ] ) signed_reactive_power = ( [ model.vars["q_from_mvar"] * model.vars["on_off"] for model in from_branch_models ] + [ model.vars["q_to_mvar"] * model.vars["on_off"] for model in to_branch_models ] + [ model.vars["q_mvar"] * model.vars["regulation"] for model in connected_node_models ] ) return (signed_active_power, signed_reactive_power)
[docs] def p_mw_equation(self, child_models): """ No docstring provided. """ return IntermediateEq( "p_mw", sum( [ model.vars["p_mw"] * model.vars["regulation"] for model in child_models ] ), )
[docs] def q_mvar_equation(self, child_models): """ No docstring provided. """ return IntermediateEq( "q_mvar", sum( [ model.vars["q_mvar"] * model.vars["regulation"] for model in child_models ] ), )
[docs] def equations( self, grid, from_branch_models, to_branch_models, connected_node_models, **kwargs, ): """ No docstring provided. """ signed_ap, signed_rp = self.calc_signed_power_values( from_branch_models, to_branch_models, connected_node_models ) return [ self.p_mw_equation(connected_node_models), self.q_mvar_equation(connected_node_models), power_balance_equation(signed_ap), power_balance_equation(signed_rp), IntermediateEq("va_degree", 180 / math.pi * self.va_radians), ]
[docs] @model class Junction(NodeModel): """ No docstring provided. """ def __init__(self) -> None: self.t_k = Intermediate() self.t_pu = Var(1) self.pressure_pa = Intermediate() self.pressure_pu = Var(1) self.mass_flow = Intermediate()
[docs] def calc_signed_mass_flow( self, from_branch_models, to_branch_models, connected_node_models ): """ No docstring provided. """ return ( [ model.vars["from_mass_flow"] * model.vars["on_off"] for model in from_branch_models if "from_mass_flow" in model.vars ] + [ model.vars["to_mass_flow"] * model.vars["on_off"] for model in to_branch_models if "to_mass_flow" in model.vars ] + [ -model.vars["mass_flow"] * model.vars["on_off"] for model in from_branch_models if "mass_flow" in model.vars ] + [ model.vars["mass_flow"] * model.vars["on_off"] for model in to_branch_models if "mass_flow" in model.vars ] + [ model.vars["mass_flow"] * model.vars["regulation"] for model in connected_node_models if "mass_flow" in model.vars ] )
[docs] def calc_signed_heat_flow( self, from_branch_models, to_branch_models, connected_node_models, grid ): """ No docstring provided. """ temp_supported = ( len(from_branch_models) > 0 and "t_average_k" in from_branch_models[0].vars or (len(to_branch_models) > 0 and "t_average_k" in to_branch_models[0].vars) ) if temp_supported: return ( [ -model.vars["mass_flow"] * model.vars["on_off"] * model.vars["t_from_pu"] if "t_from_pu" in model.vars else 0 for model in from_branch_models if "mass_flow" in model.vars ] + [ model.vars["mass_flow"] * model.vars["on_off"] * model.vars["t_to_pu"] if "t_to_pu" in model.vars else 0 for model in to_branch_models if "mass_flow" in model.vars ] + [ model.vars["mass_flow"] * model.vars["regulation"] * self.t_pu for model in connected_node_models if "mass_flow" in model.vars ] ) else: return [0]
[docs] def equations( self, grid, from_branch_models, to_branch_models, connected_node_models, **kwargs, ): """ No docstring provided. """ mass_flow_signed_list = self.calc_signed_mass_flow( from_branch_models, to_branch_models, connected_node_models ) energy_flow_list = self.calc_signed_heat_flow( from_branch_models, to_branch_models, connected_node_models, grid ) if mass_flow_signed_list: return [ junction_mass_flow_balance(mass_flow_signed_list), junction_mass_flow_balance(energy_flow_list), IntermediateEq("t_k", self.t_pu * grid.t_ref), IntermediateEq("pressure_pa", self.pressure_pu * grid.pressure_ref), IntermediateEq( "mass_flow", sum( [ model.vars["mass_flow"] * model.vars["regulation"] for model in connected_node_models if "mass_flow" in model.vars ] ), ), ] return []