# 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 numpy as np
import pandas as pd
from VeraGridEngine.Simulations.results_template import ResultsTemplate, ResultsProperty
from VeraGridEngine.Simulations.results_table import ResultsTable
from VeraGridEngine.enumerations import FaultType
from VeraGridEngine.basic_structures import IntVec, Vec, StrVec, CxVec
from VeraGridEngine.enumerations import StudyResultsType, ResultTypes, DeviceType
from VeraGridEngine.Simulations.PowerFlow.Formulations.pf_basic_formulation_3ph import (expand_indices_3ph)
[docs]
class ShortCircuitResults(ResultsTemplate):
LOCAL_RESULTS_DECLARATIONS = (
ResultsProperty(name='bus_names', tpe=StrVec, old_names=list(), expandable=False),
ResultsProperty(name='branch_names', tpe=StrVec, old_names=list(), expandable=False),
ResultsProperty(name='hvdc_names', tpe=StrVec, old_names=list(), expandable=False),
ResultsProperty(name='sc_names', tpe=StrVec, old_names=list(), expandable=False),
ResultsProperty(name='bus_types', tpe=IntVec, old_names=list(), expandable=False),
ResultsProperty(name='F', tpe=IntVec, old_names=list(), expandable=False),
ResultsProperty(name='T', tpe=IntVec, old_names=list(), expandable=False),
ResultsProperty(name='hvdc_F', tpe=IntVec, old_names=list(), expandable=False),
ResultsProperty(name='hvdc_T', tpe=IntVec, old_names=list(), expandable=False),
ResultsProperty(name='bus_area_indices', tpe=IntVec, old_names=list(), expandable=False),
ResultsProperty(name='area_names', tpe=IntVec, old_names=list(), expandable=False),
ResultsProperty(name='Sbus1', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='voltage1', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='Sf1', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='St1', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='If1', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='It1', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='Vbranch1', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='loading1', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='losses1', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='Sbus0', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='voltage0', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='Sf0', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='St0', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='If0', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='It0', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='Vbranch0', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='loading0', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='losses0', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='Sbus2', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='voltage2', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='Sf2', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='St2', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='If2', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='It2', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='Vbranch2', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='loading2', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='losses2', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SbusN', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='voltageN', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SfN', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='StN', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='IfN', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='ItN', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='VbranchN', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='loadingN', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='lossesN', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SbusA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='voltageA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SfA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='StA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='IfA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='ItA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='VbranchA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='loadingA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='lossesA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SbusB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='voltageB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SfB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='StB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='IfB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='ItB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='VbranchB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='loadingB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='lossesB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SbusC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='voltageC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SfC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='StC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='IfC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='ItC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='VbranchC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='loadingC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='lossesC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='hvdc_losses', tpe=Vec, old_names=list(), expandable=False),
ResultsProperty(name='hvdc_Pf', tpe=Vec, old_names=list(), expandable=False),
ResultsProperty(name='hvdc_Pt', tpe=Vec, old_names=list(), expandable=False),
ResultsProperty(name='hvdc_loading', tpe=Vec, old_names=list(), expandable=False),
ResultsProperty(name='vsc_If', tpe=Vec, old_names=list(), expandable=False),
ResultsProperty(name='vsc_It', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='vsc_Pfp', tpe=Vec, old_names=list(), expandable=False),
ResultsProperty(name='vsc_Pfn', tpe=Vec, old_names=list(), expandable=False),
ResultsProperty(name='vsc_St', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='vsc_losses', tpe=Vec, old_names=list(), expandable=False),
ResultsProperty(name='vsc_loading', tpe=Vec, old_names=list(), expandable=False),
ResultsProperty(name='SCpower', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SCpowerA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SCpowerB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='SCpowerC', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='ICurrent', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='ICurrentA', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='ICurrentB', tpe=CxVec, old_names=list(), expandable=False),
ResultsProperty(name='ICurrentC', tpe=CxVec, old_names=list(), expandable=False),
)
__slots__ = (
"bus_types",
"bus_names",
"branch_names",
"hvdc_names",
"sc_names",
"Sbus1",
"voltage1",
"Sf1",
"St1",
"If1",
"It1",
"Vbranch1",
"loading1",
"losses1",
"Sbus0",
"voltage0",
"Sf0",
"St0",
"If0",
"It0",
"Vbranch0",
"loading0",
"losses0",
"Sbus2",
"voltage2",
"Sf2",
"St2",
"If2",
"It2",
"Vbranch2",
"loading2",
"losses2",
"SbusN",
"voltageN",
"SfN",
"StN",
"IfN",
"ItN",
"VbranchN",
"loadingN",
"lossesN",
"SbusA",
"voltageA",
"SfA",
"StA",
"IfA",
"ItA",
"VbranchA",
"loadingA",
"lossesA",
"SbusB",
"voltageB",
"SfB",
"StB",
"IfB",
"ItB",
"VbranchB",
"loadingB",
"lossesB",
"SbusC",
"voltageC",
"SfC",
"StC",
"IfC",
"ItC",
"VbranchC",
"loadingC",
"lossesC",
"hvdc_losses",
"hvdc_Pf",
"hvdc_Pt",
"hvdc_loading",
"vsc_If",
"vsc_It",
"vsc_Pfp",
"vsc_Pfn",
"vsc_St",
"vsc_losses",
"vsc_loading",
"SCpower",
"SCpowerA",
"SCpowerB",
"SCpowerC",
"ICurrent",
"ICurrentA",
"ICurrentB",
"ICurrentC",
)
def __init__(self,
nsc: int,
n: int,
m: int,
n_hvdc: int,
n_vsc: int,
sc_names: StrVec,
bus_names: StrVec,
branch_names: StrVec,
hvdc_names: StrVec,
vsc_names: StrVec,
bus_types: IntVec,
area_names: StrVec | None = None):
"""
A **ShortCircuitResults** object is create as an attribute of the
:ref:`ShortCircuitResults<pf_mp>` (as ShortCircuitResults.results) when the power flow is run. It
provides access to the simulation results through its class attributes.
:param n: number of nodes
:param m: number of branches (without HVDC)
:param n_hvdc: number of HVDC lines
:param bus_names: array of bus names
:param branch_names: array of branch names
:param hvdc_names: array of HVDC names
:param bus_types: array of bus types
"""
ResultsTemplate.__init__(self,
name='Short circuit',
available_results={
ResultTypes.BusResults: [ResultTypes.BusVoltageModule0,
ResultTypes.BusVoltageModule1,
ResultTypes.BusVoltageModule2,
ResultTypes.BusVoltageModuleA,
ResultTypes.BusVoltageModuleB,
ResultTypes.BusVoltageModuleC,
ResultTypes.BusVoltageAngle0,
ResultTypes.BusVoltageAngle1,
ResultTypes.BusVoltageAngle2,
ResultTypes.BusVoltageAngleA,
ResultTypes.BusVoltageAngleB,
ResultTypes.BusVoltageAngleC,
ResultTypes.BusShortCircuitActivePower,
ResultTypes.BusShortCircuitActivePowerA,
ResultTypes.BusShortCircuitActivePowerB,
ResultTypes.BusShortCircuitActivePowerC,
ResultTypes.BusShortCircuitReactivePower,
ResultTypes.BusShortCircuitReactivePowerA,
ResultTypes.BusShortCircuitReactivePowerB,
ResultTypes.BusShortCircuitReactivePowerC,
ResultTypes.BusShortCircuitActiveCurrent,
ResultTypes.BusShortCircuitActiveCurrentA,
ResultTypes.BusShortCircuitActiveCurrentB,
ResultTypes.BusShortCircuitActiveCurrentC,
ResultTypes.BusShortCircuitReactiveCurrent,
ResultTypes.BusShortCircuitReactiveCurrentA,
ResultTypes.BusShortCircuitReactiveCurrentB,
ResultTypes.BusShortCircuitReactiveCurrentC
],
ResultTypes.BranchResults: [ResultTypes.BranchActivePowerFrom0,
ResultTypes.BranchActivePowerFrom1,
ResultTypes.BranchActivePowerFrom2,
ResultTypes.BranchActivePowerFromA,
ResultTypes.BranchActivePowerFromB,
ResultTypes.BranchActivePowerFromC,
ResultTypes.BranchReactivePowerFrom0,
ResultTypes.BranchReactivePowerFrom1,
ResultTypes.BranchReactivePowerFrom2,
ResultTypes.BranchReactivePowerFromA,
ResultTypes.BranchReactivePowerFromB,
ResultTypes.BranchReactivePowerFromC,
ResultTypes.BranchActiveCurrentFrom0,
ResultTypes.BranchActiveCurrentFrom1,
ResultTypes.BranchActiveCurrentFrom2,
ResultTypes.BranchActiveCurrentFromA,
ResultTypes.BranchActiveCurrentFromB,
ResultTypes.BranchActiveCurrentFromC,
ResultTypes.BranchReactiveCurrentFrom0,
ResultTypes.BranchReactiveCurrentFrom1,
ResultTypes.BranchReactiveCurrentFrom2,
ResultTypes.BranchReactiveCurrentFromA,
ResultTypes.BranchReactiveCurrentFromB,
ResultTypes.BranchReactiveCurrentFromC,
ResultTypes.BranchLoading0,
ResultTypes.BranchLoading1,
ResultTypes.BranchLoading2,
ResultTypes.BranchLoadingA,
ResultTypes.BranchLoadingB,
ResultTypes.BranchLoadingC,
ResultTypes.BranchActiveLosses0,
ResultTypes.BranchActiveLosses1,
ResultTypes.BranchActiveLosses2,
ResultTypes.BranchActiveLossesA,
ResultTypes.BranchActiveLossesB,
ResultTypes.BranchActiveLossesC,
ResultTypes.BranchReactiveLosses0,
ResultTypes.BranchReactiveLosses1,
ResultTypes.BranchReactiveLosses2,
ResultTypes.BranchReactiveLossesA,
ResultTypes.BranchReactiveLossesB,
ResultTypes.BranchReactiveLossesC],
# ResultTypes.InfoResults: [ResultTypes.ShortCircuitInfo],
},
time_array=None,
clustering_results=None,
study_results_type=StudyResultsType.ShortCircuit
)
self.bus_types = bus_types
self.bus_names = bus_names
self.branch_names = branch_names
self.hvdc_names = hvdc_names
self.sc_names = sc_names
# vars for the inter-area computation
self.F = np.zeros(m, dtype=int)
self.T = np.zeros(m, dtype=int)
self.hvdc_F = np.zeros(n_hvdc, dtype=int)
self.hvdc_T = np.zeros(n_hvdc, dtype=int)
self.bus_area_indices = np.zeros(n, dtype=int)
self.area_names = area_names
self.Sbus1 = np.zeros((n, nsc), dtype=np.complex64)
self.voltage1 = np.zeros((n, nsc), dtype=np.complex64)
self.Sf1 = np.zeros((m, nsc), dtype=np.complex64)
self.St1 = np.zeros((m, nsc), dtype=np.complex64)
self.If1 = np.zeros((m, nsc), dtype=np.complex64)
self.It1 = np.zeros((m, nsc), dtype=np.complex64)
self.Vbranch1 = np.zeros((m, nsc), dtype=np.complex64)
self.loading1 = np.zeros((m, nsc), dtype=np.complex64)
self.losses1 = np.zeros((m, nsc), dtype=np.complex64)
self.Sbus0 = np.zeros((n, nsc), dtype=np.complex64)
self.voltage0 = np.zeros((n, nsc), dtype=np.complex64)
self.Sf0 = np.zeros((m, nsc), dtype=np.complex64)
self.St0 = np.zeros((m, nsc), dtype=np.complex64)
self.If0 = np.zeros((m, nsc), dtype=np.complex64)
self.It0 = np.zeros((m, nsc), dtype=np.complex64)
self.Vbranch0 = np.zeros((m, nsc), dtype=np.complex64)
self.loading0 = np.zeros((m, nsc), dtype=np.complex64)
self.losses0 = np.zeros((m, nsc), dtype=np.complex64)
self.Sbus2 = np.zeros((n, nsc), dtype=np.complex64)
self.voltage2 = np.zeros((n, nsc), dtype=np.complex64)
self.Sf2 = np.zeros((m, nsc), dtype=np.complex64)
self.St2 = np.zeros((m, nsc), dtype=np.complex64)
self.If2 = np.zeros((m, nsc), dtype=np.complex64)
self.It2 = np.zeros((m, nsc), dtype=np.complex64)
self.Vbranch2 = np.zeros((m, nsc), dtype=np.complex64)
self.loading2 = np.zeros((m, nsc), dtype=np.complex64)
self.losses2 = np.zeros((m, nsc), dtype=np.complex64)
self.SbusN = np.zeros((n, nsc), dtype=np.complex64)
self.voltageN = np.zeros((n, nsc), dtype=np.complex64)
self.SfN = np.zeros((m, nsc), dtype=np.complex64)
self.StN = np.zeros((m, nsc), dtype=np.complex64)
self.IfN = np.zeros((m, nsc), dtype=np.complex64)
self.ItN = np.zeros((m, nsc), dtype=np.complex64)
self.VbranchN = np.zeros((m, nsc), dtype=np.complex64)
self.loadingN = np.zeros((m, nsc), dtype=np.complex64)
self.lossesN = np.zeros((m, nsc), dtype=np.complex64)
self.SbusA = np.zeros((n, nsc), dtype=np.complex64)
self.voltageA = np.zeros((n, nsc), dtype=np.complex64)
self.SfA = np.zeros((m, nsc), dtype=np.complex64)
self.StA = np.zeros((m, nsc), dtype=np.complex64)
self.IfA = np.zeros((m, nsc), dtype=np.complex64)
self.ItA = np.zeros((m, nsc), dtype=np.complex64)
self.VbranchA = np.zeros((m, nsc), dtype=np.complex64)
self.loadingA = np.zeros((m, nsc), dtype=np.complex64)
self.lossesA = np.zeros((m, nsc), dtype=np.complex64)
self.SbusB = np.zeros((n, nsc), dtype=np.complex64)
self.voltageB = np.zeros((n, nsc), dtype=np.complex64)
self.SfB = np.zeros((m, nsc), dtype=np.complex64)
self.StB = np.zeros((m, nsc), dtype=np.complex64)
self.IfB = np.zeros((m, nsc), dtype=np.complex64)
self.ItB = np.zeros((m, nsc), dtype=np.complex64)
self.VbranchB = np.zeros((m, nsc), dtype=np.complex64)
self.loadingB = np.zeros((m, nsc), dtype=np.complex64)
self.lossesB = np.zeros((m, nsc), dtype=np.complex64)
self.SbusC = np.zeros((n, nsc), dtype=np.complex64)
self.voltageC = np.zeros((n, nsc), dtype=np.complex64)
self.SfC = np.zeros((m, nsc), dtype=np.complex64)
self.StC = np.zeros((m, nsc), dtype=np.complex64)
self.IfC = np.zeros((m, nsc), dtype=np.complex64)
self.ItC = np.zeros((m, nsc), dtype=np.complex64)
self.VbranchC = np.zeros((m, nsc), dtype=np.complex64)
self.loadingC = np.zeros((m, nsc), dtype=np.complex64)
self.lossesC = np.zeros((m, nsc), dtype=np.complex64)
self.hvdc_losses = np.zeros((n_hvdc, nsc))
self.hvdc_Pf = np.zeros((n_hvdc, nsc))
self.hvdc_Pt = np.zeros((n_hvdc, nsc))
self.hvdc_loading = np.zeros((n_hvdc, nsc))
self.vsc_If = np.zeros((n_vsc, nsc))
self.vsc_It = np.zeros((n_vsc, nsc), dtype=np.complex64)
self.vsc_Pfp = np.zeros((n_vsc, nsc))
self.vsc_Pfn = np.zeros((n_vsc, nsc))
self.vsc_St = np.zeros((n_vsc, nsc), dtype=np.complex64)
self.vsc_losses = np.zeros((n_vsc, nsc), dtype=float)
self.vsc_loading = np.zeros((n_vsc, nsc), dtype=float)
self.SCpower = np.zeros((n, nsc), dtype=np.complex64)
self.SCpowerA = np.zeros((n, nsc), dtype=np.complex64)
self.SCpowerB = np.zeros((n, nsc), dtype=np.complex64)
self.SCpowerC = np.zeros((n, nsc), dtype=np.complex64)
self.ICurrent = np.zeros((n, nsc), dtype=np.complex64)
self.ICurrentA = np.zeros((n, nsc), dtype=np.complex64)
self.ICurrentB = np.zeros((n, nsc), dtype=np.complex64)
self.ICurrentC = np.zeros((n, nsc), dtype=np.complex64)
# Register results
@property
def elapsed(self):
"""
Check if converged in all modes
:return: True / False
"""
val = 0.0
return val
[docs]
def apply_from_island(self, sc_idx: int, results: "ShortCircuitResults", b_idx: IntVec, br_idx: IntVec,
hvdc_idx: IntVec, vsc_idx: IntVec):
"""
Apply results from another island circuit to the circuit results represented
here.
Arguments:
**results**: PowerFlowResults
**b_idx**: bus original indices
**elm_idx**: branch original indices
"""
self.SCpower[b_idx, sc_idx] = results.SCpower[:, 0]
self.ICurrent[b_idx, sc_idx] = results.ICurrent[:, 0]
self.Sbus1[b_idx, sc_idx] = results.Sbus1[:, 0]
self.voltage1[b_idx, sc_idx] = results.voltage1[:, 0]
self.Sf1[br_idx, sc_idx] = results.Sf1[:, 0]
self.St1[br_idx, sc_idx] = results.St1[:, 0]
self.If1[br_idx, sc_idx] = results.If1[:, 0]
self.It1[br_idx, sc_idx] = results.It1[:, 0]
self.Vbranch1[br_idx, sc_idx] = results.Vbranch1[:, 0]
self.loading1[br_idx, sc_idx] = results.loading1[:, 0]
self.losses1[br_idx, sc_idx] = results.losses1[:, 0]
self.Sbus0[b_idx, sc_idx] = results.Sbus0[:, 0]
self.voltage0[b_idx, sc_idx] = results.voltage0[:, 0]
self.Sf0[br_idx, sc_idx] = results.Sf0[:, 0]
self.St0[br_idx, sc_idx] = results.St0[:, 0]
self.If0[br_idx, sc_idx] = results.If0[:, 0]
self.It0[br_idx, sc_idx] = results.It0[:, 0]
self.Vbranch0[br_idx, sc_idx] = results.Vbranch0[:, 0]
self.loading0[br_idx, sc_idx] = results.loading0[:, 0]
self.losses0[br_idx, sc_idx] = results.losses0[:, 0]
self.Sbus2[b_idx, sc_idx] = results.Sbus2[:, 0]
self.voltage2[b_idx, sc_idx] = results.voltage2[:, 0]
self.Sf2[br_idx, sc_idx] = results.Sf2[:, 0]
self.St2[br_idx, sc_idx] = results.St2[:, 0]
self.If2[br_idx, sc_idx] = results.If2[:, 0]
self.It2[br_idx, sc_idx] = results.It2[:, 0]
self.Vbranch2[br_idx, sc_idx] = results.Vbranch2[:, 0]
self.loading2[br_idx, sc_idx] = results.loading2[:, 0]
self.losses2[br_idx, sc_idx] = results.losses2[:, 0]
self.SbusN[b_idx, sc_idx] = results.SbusN[:, 0]
self.voltageN[b_idx, sc_idx] = results.voltageN[:, 0]
self.SfN[br_idx, sc_idx] = results.SfN[:, 0]
self.StN[br_idx, sc_idx] = results.StN[:, 0]
self.IfN[br_idx, sc_idx] = results.IfN[:, 0]
self.ItN[br_idx, sc_idx] = results.ItN[:, 0]
self.VbranchN[br_idx, sc_idx] = results.VbranchN[:, 0]
self.loadingN[br_idx, sc_idx] = results.loadingN[:, 0]
self.lossesN[br_idx, sc_idx] = results.lossesN[:, 0]
self.SbusA[b_idx, sc_idx] = results.SbusA[:, 0]
self.voltageA[b_idx, sc_idx] = results.voltageA[:, 0]
self.SfA[br_idx, sc_idx] = results.SfA[:, 0]
self.StA[br_idx, sc_idx] = results.StA[:, 0]
self.IfA[br_idx, sc_idx] = results.IfA[:, 0]
self.ItA[br_idx, sc_idx] = results.ItA[:, 0]
self.VbranchA[br_idx, sc_idx] = results.VbranchA[:, 0]
self.loadingA[br_idx, sc_idx] = results.loadingA[:, 0]
self.lossesA[br_idx, sc_idx] = results.lossesA[:, 0]
self.SbusB[b_idx, sc_idx] = results.SbusB[:, 0]
self.voltageB[b_idx, sc_idx] = results.voltageB[:, 0]
self.SfB[br_idx, sc_idx] = results.SfB[:, 0]
self.StB[br_idx, sc_idx] = results.StB[:, 0]
self.IfB[br_idx, sc_idx] = results.IfB[:, 0]
self.ItB[br_idx, sc_idx] = results.ItB[:, 0]
self.VbranchB[br_idx, sc_idx] = results.VbranchB[:, 0]
self.loadingB[br_idx, sc_idx] = results.loadingB[:, 0]
self.lossesB[br_idx, sc_idx] = results.lossesB[:, 0]
self.SbusC[b_idx, sc_idx] = results.SbusC[:, 0]
self.voltageC[b_idx, sc_idx] = results.voltageC[:, 0]
self.SfC[br_idx, sc_idx] = results.SfC[:, 0]
self.StC[br_idx, sc_idx] = results.StC[:, 0]
self.IfC[br_idx, sc_idx] = results.IfC[:, 0]
self.ItC[br_idx, sc_idx] = results.ItC[:, 0]
self.VbranchC[br_idx, sc_idx] = results.VbranchC[:, 0]
self.loadingC[br_idx, sc_idx] = results.loadingC[:, 0]
self.lossesC[br_idx, sc_idx] = results.lossesC[:, 0]
self.hvdc_losses[hvdc_idx, sc_idx] = results.hvdc_losses[:, 0]
self.hvdc_Pf[hvdc_idx, sc_idx] = results.hvdc_Pf[:, 0]
self.hvdc_Pt[hvdc_idx, sc_idx] = results.hvdc_Pt[:, 0]
self.hvdc_loading[hvdc_idx, sc_idx] = results.hvdc_loading[:, 0]
self.vsc_If[vsc_idx, sc_idx] = results.vsc_If[:, 0]
self.vsc_It[vsc_idx, sc_idx] = results.vsc_It[:, 0]
self.vsc_Pfp[vsc_idx, sc_idx] = results.vsc_Pfp[:, 0]
self.vsc_Pfn[vsc_idx, sc_idx] = results.vsc_Pfn[:, 0]
self.vsc_St[vsc_idx, sc_idx] = results.vsc_St[:, 0]
self.vsc_losses[vsc_idx, sc_idx] = results.vsc_losses[:, 0]
self.vsc_loading[vsc_idx, sc_idx] = results.vsc_loading[:, 0]
[docs]
def mdl(self, result_type: ResultTypes) -> ResultsTable:
"""
:param result_type:
:return:
"""
# columns = np.array([result_type.value])
title = result_type.value
if result_type == ResultTypes.BusShortCircuitActivePower:
labels = self.bus_names
y = np.real(self.SCpower)
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitActivePowerA:
labels = self.bus_names
y = np.real(self.SCpowerA)
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitActivePowerB:
labels = self.bus_names
y = np.real(self.SCpowerB)
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitActivePowerC:
labels = self.bus_names
y = np.real(self.SCpowerC)
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitReactivePower:
labels = self.bus_names
y = np.imag(self.SCpower)
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitReactivePowerA:
labels = self.bus_names
y = np.imag(self.SCpowerA)
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitReactivePowerB:
labels = self.bus_names
y = np.imag(self.SCpowerB)
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitReactivePowerC:
labels = self.bus_names
y = np.imag(self.SCpowerC)
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitActiveCurrent:
labels = self.bus_names
y = np.real(self.ICurrent)
y_label = '(kA)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitActiveCurrentA:
labels = self.bus_names
y = np.real(self.ICurrentA)
y_label = '(kA)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitActiveCurrentB:
labels = self.bus_names
y = np.real(self.ICurrentB)
y_label = '(kA)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitActiveCurrentC:
labels = self.bus_names
y = np.real(self.ICurrentC)
y_label = '(kA)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitReactiveCurrent:
labels = self.bus_names
y = np.imag(self.ICurrent)
y_label = '(kAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitReactiveCurrentA:
labels = self.bus_names
y = np.imag(self.ICurrentA)
y_label = '(kAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitReactiveCurrentB:
labels = self.bus_names
y = np.imag(self.ICurrentB)
y_label = '(kAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusShortCircuitReactiveCurrentC:
labels = self.bus_names
y = np.imag(self.ICurrentC)
y_label = '(kAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageModule0:
labels = self.bus_names
y = np.abs(self.voltage0)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageAngle0:
labels = self.bus_names
y = np.angle(self.voltage0)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActivePowerFrom0:
labels = self.branch_names
y = self.Sf0.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactivePowerFrom0:
labels = self.branch_names
y = self.Sf0.imag
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveCurrentFrom0:
labels = self.branch_names
y = self.If0.real
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveCurrentFrom0:
labels = self.branch_names
y = self.If0.imag
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchLoading0:
labels = self.branch_names
y = self.loading0.real * 100.0
y_label = '(%)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveLosses0:
labels = self.branch_names
y = self.losses0.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveLosses0:
labels = self.branch_names
y = self.losses0.imag
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageModule1:
labels = self.bus_names
y = np.abs(self.voltage1)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageAngle1:
labels = self.bus_names
y = np.angle(self.voltage1)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActivePowerFrom1:
labels = self.branch_names
y = self.Sf1.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactivePowerFrom1:
labels = self.branch_names
y = self.Sf1.imag
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveCurrentFrom1:
labels = self.branch_names
y = self.If1.real
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveCurrentFrom1:
labels = self.branch_names
y = self.If1.imag
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchLoading1:
labels = self.branch_names
y = self.loading1.real * 100.0
y_label = '(%)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveLosses1:
labels = self.branch_names
y = self.losses1.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveLosses1:
labels = self.branch_names
y = self.losses1.imag
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageModule2:
labels = self.bus_names
y = np.abs(self.voltage2)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageAngle2:
labels = self.bus_names
y = np.angle(self.voltage2)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActivePowerFrom2:
labels = self.branch_names
y = self.Sf2.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactivePowerFrom2:
labels = self.branch_names
y = self.Sf2.imag
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveCurrentFrom2:
labels = self.branch_names
y = self.If2.real
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveCurrentFrom2:
labels = self.branch_names
y = self.If2.imag
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchLoading2:
labels = self.branch_names
y = self.loading2.real * 100.0
y_label = '(%)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveLosses2:
labels = self.branch_names
y = self.losses2.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveLosses2:
labels = self.branch_names
y = self.losses2.imag
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageModuleA:
labels = self.bus_names
y = np.abs(self.voltageA)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageAngleA:
labels = self.bus_names
y = np.angle(self.voltageA)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActivePowerFromA:
labels = self.branch_names
y = self.SfA.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactivePowerFromA:
labels = self.branch_names
y = self.SfA.imag
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveCurrentFromA:
labels = self.branch_names
y = self.IfA.real
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveCurrentFromA:
labels = self.branch_names
y = self.IfA.imag
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchLoadingA:
labels = self.branch_names
y = self.loadingA.real * 100.0
y_label = '(%)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveLossesA:
labels = self.branch_names
y = self.lossesA.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveLossesA:
labels = self.branch_names
y = self.lossesA.imag
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageModuleB:
labels = self.bus_names
y = np.abs(self.voltageB)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageAngleB:
labels = self.bus_names
y = np.angle(self.voltageB)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActivePowerFromB:
labels = self.branch_names
y = self.SfB.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactivePowerFromB:
labels = self.branch_names
y = self.SfB.imag
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveCurrentFromB:
labels = self.branch_names
y = self.IfB.real
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveCurrentFromB:
labels = self.branch_names
y = self.IfB.imag
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchLoadingB:
labels = self.branch_names
y = self.loadingB.real * 100.0
y_label = '(%)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveLossesB:
labels = self.branch_names
y = self.lossesB.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveLossesB:
labels = self.branch_names
y = self.lossesB.imag
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageModuleC:
labels = self.bus_names
y = np.abs(self.voltageC)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BusVoltageAngleC:
labels = self.bus_names
y = np.angle(self.voltageC)
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BusDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActivePowerFromC:
labels = self.branch_names
y = self.SfC.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactivePowerFromC:
labels = self.branch_names
y = self.SfC.imag
y_label = '(MVAr)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveCurrentFromC:
labels = self.branch_names
y = self.IfC.real
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveCurrentFromC:
labels = self.branch_names
y = self.IfC.imag
y_label = '(p.u.)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchLoadingC:
labels = self.branch_names
y = self.loadingC.real * 100.0
y_label = '(%)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchActiveLossesC:
labels = self.branch_names
y = self.lossesC.real
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
elif result_type == ResultTypes.BranchReactiveLossesC:
labels = self.branch_names
y = self.lossesC.imag
y_label = '(MW)'
return ResultsTable(data=y,
index=labels,
idx_device_type=DeviceType.BranchDevice,
columns=self.sc_names,
cols_device_type=DeviceType.NoDevice,
title=title,
ylabel=y_label,
units=y_label)
# elif result_type == ResultTypes.ShortCircuitInfo:
# labels = np.array(['Type', 'Bus name'])
# y = np.array([self.sc_type.value, self.bus_names[self.sc_bus_index]])
# y_label = ''
#
# return ResultsTable(data=y,
# index=labels,
# idx_device_type=DeviceType.BusDevice,
# columns=self.sc_names,
# cols_device_type=DeviceType.NoDevice,
# title=title,
# ylabel=y_label,
# units=y_label)
else:
raise Exception('Unsupported result type: ' + str(result_type))
[docs]
def get_voltage_df(self, sc_idx=0) -> pd.DataFrame:
"""
:param sc_idx:
:return:
"""
return pd.DataFrame(data={'Um 0 [p.u.]': np.abs(self.voltage0[:, sc_idx]),
'Ua 0 [ΒΊ]': np.angle(self.voltage0[:, sc_idx], deg=True),
'Um 1 [p.u.]': np.abs(self.voltage1[:, sc_idx]),
'Ua 1 [ΒΊ]': np.angle(self.voltage1[:, sc_idx], deg=True),
'Um 2 [p.u.]': np.abs(self.voltage2[:, sc_idx]),
'Ua 2 [ΒΊ]': np.angle(self.voltage2[:, sc_idx], deg=True)},
index=self.bus_names)
[docs]
def get_current_df(self, sc_idx=0) -> pd.DataFrame:
"""
:param sc_idx:
:return:
"""
return pd.DataFrame(data={'Im 0 [p.u.]': np.abs(self.If0[:, sc_idx]),
'Ia 0 [ΒΊ]': np.angle(self.If0[:, sc_idx], deg=True),
'Im 1 [p.u.]': np.abs(self.If1[:, sc_idx]),
'Ia 1 [ΒΊ]': np.angle(self.If1[:, sc_idx], deg=True),
'Im 2 [p.u.]': np.abs(self.If2[:, sc_idx]),
'Ia 2 [ΒΊ]': np.angle(self.If2[:, sc_idx], deg=True)},
index=self.branch_names)
[docs]
def get_voltage_3ph_df(self, sc_idx: int = 0) -> pd.DataFrame:
"""
:param sc_idx:
:return:
"""
return pd.DataFrame(data={'Um A [p.u.]': np.abs(self.voltageA[:, sc_idx]).round(5),
'Ua A [ΒΊ]': np.angle(self.voltageA[:, sc_idx], deg=True).round(1),
'Um B [p.u.]': np.abs(self.voltageB[:, sc_idx]).round(5),
'Ua B [ΒΊ]': np.angle(self.voltageB[:, sc_idx], deg=True).round(1),
'Um C [p.u.]': np.abs(self.voltageC[:, sc_idx]).round(5),
'Ua C [ΒΊ]': np.angle(self.voltageC[:, sc_idx], deg=True).round(1)},
index=self.bus_names)
[docs]
def export_all(self):
"""
Exports all the results to DataFrames.
Returns:
Bus results, Branch reuslts
"""
# buses results
vm = np.abs(self.voltage1)
va = np.angle(self.voltage1)
vr = self.voltage1.real
vi = self.voltage1.imag
bus_data = np.c_[vr, vi, vm, va]
bus_cols = ['Real voltage (p.u.)',
'Imag Voltage (p.u.)',
'Voltage module (p.u.)',
'Voltage angle (rad)']
df_bus = pd.DataFrame(data=bus_data, columns=bus_cols)
# branch results
sr = self.Sf1.real
si = self.Sf1.imag
sm = np.abs(self.Sf1)
ld = np.abs(self.loading1)
la = self.losses1.real
lr = self.losses1.imag
ls = np.abs(self.losses1)
branch_data = np.c_[sr, si, sm, ld, la, lr, ls]
branch_cols = ['Real power (MW)',
'Imag power (MVAr)',
'Power module (MVA)',
'Loading(%)',
'Losses (MW)',
'Losses (MVAr)',
'Losses (MVA)']
df_branch = pd.DataFrame(data=branch_data, columns=branch_cols)
return df_bus, df_branch