Source code for monee.io.matpower

import math

import scipy.io

# necessary for the construction
from monee.model.branch import *  # noqa
from monee.model.child import *  # noqa
from monee.model.grid import *  # noqa
from monee.model.node import *  # noqa

from .native import native_dict_to_network


[docs] def as_controllable(start_value): """ No docstring provided. """ return {"value": start_value, "max": None, "min": None}
[docs] def number_of_lines_with_from_to(from_node, to_node, branch_list): """ No docstring provided. """ number = 0 for branch in branch_list: branch_id = branch["id"] if branch_id[0] == from_node and branch_id[1] == to_node: number += 1 return number
[docs] def read_matpower_data(mat_data): """ No docstring provided. """ mpc = mat_data["mpc"] base_mva = mpc["baseMVA"][0][0][0] bus_mat = mpc["bus"][0][0] branch_mat = mpc["branch"][0][0] gen_mat = mpc["gen"][0][0] grid_dict_list = { "power": { "model_type": "PowerGrid", "values": {"name": "power", "sn_mva": base_mva[0]}, } } node_dict_list = [] branch_dict_list = [] child_dict_list = [] fill_node_dict(bus_mat, node_dict_list, child_dict_list) fill_child_dict(gen_mat, node_dict_list, child_dict_list) fill_branch_dict(branch_mat, branch_dict_list) return native_dict_to_network( dict( grids=grid_dict_list, nodes=node_dict_list, childs=child_dict_list, branches=branch_dict_list, ) )
[docs] def fill_branch_dict(branch_mat, branch_dict_list): """ No docstring provided. """ for i in range(len(branch_mat)): branch_dict = {} branch_row = branch_mat[i] branch_dict["values"] = {} branch_dict["grid_id"] = "power" branch_dict["id"] = ( int(branch_row[0]), int(branch_row[1]), number_of_lines_with_from_to( branch_row[0], branch_row[1], branch_dict_list ), ) branch_dict["from_node"] = int(branch_row[0]) branch_dict["to_node"] = int(branch_row[1]) branch_dict["values"]["br_r"] = branch_row[2] branch_dict["values"]["br_x"] = branch_row[3] branch_dict["values"]["g_fr"] = 0 branch_dict["values"]["b_fr"] = branch_row[4] / 2 branch_dict["values"]["g_to"] = 0 branch_dict["values"]["b_to"] = branch_row[4] / 2 branch_dict["values"]["tap"] = 1 if branch_row[8] == 0 else branch_row[8] branch_dict["values"]["shift"] = math.radians(branch_row[9]) branch_dict["values"]["max_i_ka"] = 0.319 branch_dict["values"]["on_off"] = 1 branch_dict["model_type"] = "GenericPowerBranch" branch_dict_list.append(branch_dict)
[docs] def fill_child_dict(gen_mat, node_dict_list, child_dict_list): """ No docstring provided. """ for i in range(len(gen_mat)): child_dict = {} gen_row = gen_mat[i] child_dict["values"] = {} child_dict["id"] = len(child_dict_list) if gen_row[1] != gen_row[8] and gen_row[1] == 0: child_dict["model_type"] = "ExtPowerGrid" child_dict["values"]["p_mw"] = as_controllable(gen_row[1]) child_dict["values"]["q_mvar"] = as_controllable(gen_row[2]) child_dict["values"]["vm_pu"] = gen_row[5] child_dict["values"]["va_degree"] = 0 else: child_dict["model_type"] = "PowerGenerator" child_dict["values"]["p_mw"] = gen_row[1] child_dict["values"]["q_mvar"] = gen_row[2] for node_dict in node_dict_list: if node_dict["id"] == gen_row[0]: node_dict["child_ids"].append(child_dict["id"]) child_dict_list.append(child_dict)
[docs] def fill_node_dict(bus_mat, node_dict_list, child_dict_list): """ No docstring provided. """ for i in range(len(bus_mat)): node_dict = {} bus_row = bus_mat[i] node_dict["id"] = int(bus_row[0]) node_dict["grid_id"] = "power" node_dict["values"] = {} node_dict["values"]["vm_pu"] = as_controllable(bus_row[7]) node_dict["values"]["va_degree"] = as_controllable(bus_row[8]) node_dict["values"]["base_kv"] = bus_row[9] node_dict["model_type"] = "Bus" node_dict["child_ids"] = [] node_dict_list.append(node_dict) if bus_row[2] != 0 or bus_row[3] != 0: node_dict["child_ids"].append(len(child_dict_list)) model_type = "PowerLoad" if bus_row[2] >= 0 else "PowerGenerator" child_dict_list.append( dict( id=len(child_dict_list), model_type=model_type, values=dict(p_mw=bus_row[2], q_mvar=bus_row[3]), ) )
[docs] def read_matpower_case(file): """ No docstring provided. """ return read_matpower_data(scipy.io.loadmat(file))