Source code for gridopt.power_flow.method

#*****************************************************#
# This file is part of GRIDOPT.                       #
#                                                     #
# Copyright (c) 2015, Tomas Tinoco De Rubira.         #
#                                                     #
# GRIDOPT is released under the BSD 2-clause license. #
#*****************************************************#

import numpy as np
from .method_error import *

[docs]class PFmethod: def __init__(self): """ Power flow method class. """ self._parameters = {} self.results = {'solver name': 'unknown', 'solver status': 'unknown', 'solver message': 'none', 'solver iterations': 0, 'solver time': 0., 'solver primal variables': None, 'solver dual variables': None, 'problem' : None, 'problem time' : 0., 'network snapshot' : None}
[docs] def create_problem(self,net): """ Creates optimization problem. Parameters ---------- net : |Network| Returns ------- prob : |Problem| """ return None
[docs] def get_info_printer(self): """ Gets function for printing information about method progress. Returns ------- printer : Function """ return lambda solver,header: None
[docs] def get_results(self): """ Gets dictionary with results. Returns ------- results : dict """ return self.results
[docs] def set_solver_name(self, name): """ Sets solver name. Parameters ---------- name : string """ self.results['solver name'] = name
[docs] def set_solver_status(self, status): """ Sets solver status. Parameters ---------- status : string """ self.results['solver status'] = status
[docs] def set_solver_message(self, msg): """ Sets solver message. Parameters ---------- msg : string """ self.results['solver message'] = msg
[docs] def set_solver_iterations(self, k): """ Sets solver iterations. Parameters ---------- k : int """ self.results['solver iterations'] = k
[docs] def set_solver_time(self, t): """ Sets solver time in seconds. Parameters ---------- t : float """ self.results['solver time'] = t
[docs] def set_solver_primal_variables(self, x): """ Sets solver primal variables. Parameters ---------- x : vector """ self.results['solver primal variables'] = x
[docs] def set_solver_dual_variables(self, d): """ Sets solver dual variables. Parameters ---------- d : list """ self.results['solver dual variables'] = d
[docs] def set_problem(self, p): """ Sets problem. Parameters ---------- p : |Problem| """ self.results['problem'] = p
[docs] def set_problem_time(self, t): """ Sets problem construction time in seconds. Parameters ---------- t : float """ self.results['problem time'] = t
[docs] def set_network_snapshot(self, net): """ Sets network snapshot. Parameters ---------- net : |Network| """ self.results['network snapshot'] = net
[docs] def get_parameters(self): """ Gets method parameters. Returns ------- params : dict """ return self._parameters
[docs] def set_parameters(self,params=None,strparams=None): """ Sets method parameters. Parameters ---------- params : dict Name-value pairs strparams: dict Name-value pairs where value is a string """ invalid_params = [] SOLVER_PARAMS = 'solver_parameters' # List of method/solver parameter dictionaries dict_list = [self._parameters] if SOLVER_PARAMS in self._parameters: dict_list += list(self._parameters[SOLVER_PARAMS].values()) # Parameters if params: for key,value in list(params.items()): if key == SOLVER_PARAMS: continue valid_key = False for parameter_dict in dict_list: if key in parameter_dict: valid_key = True parameter_dict[key] = value if not valid_key: invalid_params.append(key) if SOLVER_PARAMS in params and SOLVER_PARAMS in self._parameters: solver_params = params[SOLVER_PARAMS] for solver_name in self._parameters[SOLVER_PARAMS].keys(): if solver_name in solver_params: self._parameters[SOLVER_PARAMS][solver_name].update(solver_params[solver_name]) # String-based parameters (from command-line utility) if strparams: for key,valuestr in list(strparams.items()): valid_key = False for parameter_dict in dict_list: if key in parameter_dict: valid_key = True value = parameter_dict[key] if type(value) is float: new_value = float(valuestr) elif type(value) is int: new_value = int(valuestr) elif type(value) is bool: if valuestr == 'True': new_value = True elif valuestr == 'False': new_value = False else: raise PFmethodError_ParamNotBool() else: new_value = valuestr parameter_dict[key] = new_value if not valid_key: invalid_params.append(key) # Invalid params if invalid_params: raise PFmethodError_BadParams(invalid_params)
[docs] def set_results(self,results): """ Sets method results. Parameters ---------- results : dict """ self.results = results
[docs] def solve(self,net): """ Solves power flow problem. Parameters ---------- net : |Network| """ pass
[docs] def update_network(self, net): """ Updates network with results. Parameters ---------- net : |Network| """ if self.results['network snapshot'] is not None: net.copy_from_network(self.results['network snapshot'], merged=True) net.update_properties()