From e75cd5f89773c1f1f17a3549a358101d3fb22ab8 Mon Sep 17 00:00:00 2001 From: Ben RdO Date: Tue, 17 Nov 2020 14:05:26 -0800 Subject: [PATCH] feat: allow to set grid model when creating scenario (#84) --- powersimdata/scenario/create.py | 96 +++++++++++++++++++-------------- 1 file changed, 57 insertions(+), 39 deletions(-) diff --git a/powersimdata/scenario/create.py b/powersimdata/scenario/create.py index 6c363b2cb..ae11af593 100644 --- a/powersimdata/scenario/create.py +++ b/powersimdata/scenario/create.py @@ -51,7 +51,8 @@ def __init__(self, scenario): ("start_date", ""), ("end_date", ""), ("interval", ""), - ("engine", ""), + ("engine", "REISE.jl"), + ("grid_model", "usa_tamu"), ] ) super().__init__(scenario) @@ -69,6 +70,7 @@ def _update_scenario_info(self): self._scenario_info["base_solar"] = self.builder.solar self._scenario_info["base_wind"] = self.builder.wind self._scenario_info["engine"] = self.builder.engine + self._scenario_info["grid_model"] = self.builder.grid_model if bool(self.builder.change_table.ct): self._scenario_info["change_table"] = "Yes" else: @@ -83,7 +85,6 @@ def _generate_and_set_scenario_id(self): def _add_entry_in_execute_list(self): """Adds scenario to the execute list file on server and update status information. - """ self._execute_list_manager.add_entry(self._scenario_info) self._scenario_status = "created" @@ -237,26 +238,55 @@ def print_scenario_info(self): for key, val in self._scenario_info.items(): print("%s: %s" % (key, val)) + def set_engine(self, engine): + """Sets simulation engine to be used for scenario. + + :param str engine: simulation engine + """ + possible = ["REISE", "REISE.jl"] + if engine not in possible: + raise ValueError("Available engines: %s" % " | ".join(possible)) + else: + self._scenario_info["engine"] = engine + + def set_grid_model(self, model): + """Sets grid model to be used for scenario. + + :param str model: grid model + """ + possible = ["usa_tamu"] + if model not in possible: + raise ValueError("Available grid model: %s" % " | ".join(possible)) + else: + self._scenario_info["grid_model"] = model + def set_builder(self, interconnect): """Sets builder. :param list interconnect: name of interconnect(s). """ - check_interconnect(interconnect) n = len(interconnect) if n == 1: if "Eastern" in interconnect: - self.builder = Eastern(self._data_access) + self.builder = Eastern( + self._scenario_info["grid_model"], self._data_access + ) elif "Texas" in interconnect: - self.builder = Texas(self._data_access) + self.builder = Texas( + self._scenario_info["grid_model"], self._data_access + ) elif "Western" in interconnect: - self.builder = Western(self._data_access) + self.builder = Western( + self._scenario_info["grid_model"], self._data_access + ) elif "USA" in interconnect: - self.builder = USA(self._data_access) + self.builder = USA(self._scenario_info["grid_model"], self._data_access) elif n == 2: if "Western" in interconnect and "Texas" in interconnect: - self.builder = TexasWestern(self._data_access) + self.builder = TexasWestern( + self._scenario_info["grid_model"], self._data_access + ) elif "Eastern" in interconnect and "Texas" in interconnect: print("Not implemented yet") return @@ -283,7 +313,8 @@ def set_builder(self, interconnect): class _Builder(object): """Scenario Builder. - :param list interconnect: list of interconnect(s) to build. + :param tuple grid_info: first element is a list of interconnect(s). Second element + is the grid model. :param powersimdata.utility.transfer_data.DataAccess data_access: data access object. """ @@ -302,13 +333,12 @@ class _Builder(object): hydro = "" solar = "" wind = "" - engine = "REISE.jl" name = "builder" - def __init__(self, interconnect, data_access): + def __init__(self, grid_info, data_access): """Constructor.""" - self.base_grid = Grid(interconnect) - self.profile = CSV(interconnect, data_access) + self.base_grid = Grid(grid_info[0], source=grid_info[1]) + self.profile = CSV(grid_info[0], data_access) self.change_table = ChangeTable(self.base_grid) self._scenario_list_manager = ScenarioListManager(data_access) self._scenario_list_manager = ScenarioListManager(data_access) @@ -396,18 +426,6 @@ def set_base_profile(self, kind, version): % (kind, " + ".join(self.interconnect), " | ".join(possible)) ) - def set_engine(self, engine): - """Sets simulation engine to be used for scenarion. - - :param str engine: simulation engine - """ - possible = ["REISE", "REISE.jl"] - if engine not in possible: - print("Available engines: %s" % " | ".join(possible)) - return - else: - self.engine = engine - def load_change_table(self, filename): """Uploads change table. @@ -436,10 +454,10 @@ class Eastern(_Builder): name = "Eastern" - def __init__(self, data_access): + def __init__(self, grid_model, data_access): """Constructor.""" self.interconnect = ["Eastern"] - super().__init__(self.interconnect, data_access) + super().__init__((self.interconnect, grid_model), data_access) class Texas(_Builder): @@ -447,10 +465,10 @@ class Texas(_Builder): name = "Texas" - def __init__(self, data_access): + def __init__(self, grid_model, data_access): """Constructor.""" self.interconnect = ["Texas"] - super().__init__(self.interconnect, data_access) + super().__init__((self.interconnect, grid_model), data_access) class Western(_Builder): @@ -461,10 +479,10 @@ class Western(_Builder): name = "Western" - def __init__(self, data_access): + def __init__(self, grid_model, data_access): """Constructor.""" self.interconnect = ["Western"] - super().__init__(self.interconnect, data_access) + super().__init__((self.interconnect, grid_model), data_access) class TexasWestern(_Builder): @@ -475,10 +493,10 @@ class TexasWestern(_Builder): name = "Texas_Western" - def __init__(self, data_access): + def __init__(self, grid_model, data_access): """Constructor.""" self.interconnect = ["Texas", "Western"] - super().__init__(self.interconnect, data_access) + super().__init__((self.interconnect, grid_model), data_access) class TexasEastern(_Builder): @@ -486,10 +504,10 @@ class TexasEastern(_Builder): name = "Texas_Eastern" - def __init__(self, data_access): + def __init__(self, grid_model, data_access): """Constructor.""" self.interconnect = ["Texas", "Eastern"] - super().__init__(self.interconnect, data_access) + super().__init__((self.interconnect, grid_model), data_access) class EasternWestern(_Builder): @@ -497,10 +515,10 @@ class EasternWestern(_Builder): name = "Eastern_Western" - def __init__(self, data_access): + def __init__(self, grid_model, data_access): """Constructor.""" self.interconnect = ["Eastern", "Western"] - super().__init__(self.interconnect, data_access) + super().__init__((self.interconnect, grid_model), data_access) class USA(_Builder): @@ -508,10 +526,10 @@ class USA(_Builder): name = "USA" - def __init__(self, data_access): + def __init__(self, grid_model, data_access): """Constructor.""" self.interconnect = ["USA"] - super().__init__(self.interconnect, data_access) + super().__init__((self.interconnect, grid_model), data_access) class CSV(object):