diff --git a/powersimdata/design/generation/clean_capacity_scaling.py b/powersimdata/design/generation/clean_capacity_scaling.py index a65142fd7..59dda4408 100644 --- a/powersimdata/design/generation/clean_capacity_scaling.py +++ b/powersimdata/design/generation/clean_capacity_scaling.py @@ -2,7 +2,6 @@ import pandas as pd from powersimdata.design.mimic_grid import mimic_generation_capacity -from powersimdata.input.grid import Grid from powersimdata.network.model import area_to_loadzone from powersimdata.scenario.scenario import Scenario @@ -455,8 +454,7 @@ def create_change_table(input_targets, ref_scenario): :return: (*dict*) -- dictionary to be passed to a change table. """ epsilon = 1e-3 - interconnect = ref_scenario.info["interconnect"] - base_grid = Grid([interconnect]) + base_grid = ref_scenario.state.get_base_grid() grid_zones = base_grid.plant.zone_name.unique() ref_grid = ref_scenario.state.get_grid() ct = mimic_generation_capacity(base_grid, ref_grid) diff --git a/powersimdata/design/investment/investment_costs.py b/powersimdata/design/investment/investment_costs.py index b30ac9c57..bc7bc6661 100644 --- a/powersimdata/design/investment/investment_costs.py +++ b/powersimdata/design/investment/investment_costs.py @@ -1,4 +1,3 @@ -import copy as cp import warnings import numpy as np @@ -16,7 +15,6 @@ ) from powersimdata.design.investment.inflation import calculate_inflation from powersimdata.input.check import _check_grid_models_match -from powersimdata.input.grid import Grid from powersimdata.utility.distance import haversine @@ -67,22 +65,19 @@ def calculate_ac_inv_costs( """ grid = scenario.state.get_grid() if base_grid is None: - base_grid = Grid( - scenario.info["interconnect"].split("_"), source=scenario.info["grid_model"] - ) + base_grid = scenario.state.get_base_grid() else: _check_grid_models_match(base_grid, grid) - grid_new = cp.deepcopy(grid) # find upgraded AC lines capacity_difference = calculate_branch_difference(base_grid.branch, grid.branch) - grid_new.branch = grid.branch.assign(rateA=capacity_difference.diff) - grid_new.branch = grid_new.branch.query("rateA != 0.0") + grid.branch = grid.branch.assign(rateA=capacity_difference.diff) + grid.branch = grid.branch.query("rateA != 0.0") if exclude_branches is not None: - present_exclude_branches = set(exclude_branches) & set(grid_new.branch.index) - grid_new.branch.drop(index=present_exclude_branches, inplace=True) + present_exclude_branches = set(exclude_branches) & set(grid.branch.index) + grid.branch.drop(index=present_exclude_branches, inplace=True) - costs = _calculate_ac_inv_costs(grid_new, sum_results) + costs = _calculate_ac_inv_costs(grid, sum_results) return costs @@ -287,19 +282,16 @@ def calculate_dc_inv_costs(scenario, sum_results=True, base_grid=None): """ grid = scenario.state.get_grid() if base_grid is None: - base_grid = Grid( - scenario.info["interconnect"].split("_"), source=scenario.info["grid_model"] - ) + base_grid = scenario.state.get_base_grid() else: _check_grid_models_match(base_grid, grid) - grid_new = cp.deepcopy(grid) # find upgraded DC lines capacity_difference = calculate_dcline_difference(base_grid.dcline, grid.dcline) - grid_new.dcline = grid.dcline.assign(Pmax=capacity_difference.diff) - grid_new.dcline = grid_new.dcline.query("Pmax != 0.0") + grid.dcline = grid.dcline.assign(Pmax=capacity_difference.diff) + grid.dcline = grid.dcline.query("Pmax != 0.0") - costs = _calculate_dc_inv_costs(grid_new, sum_results) + costs = _calculate_dc_inv_costs(grid, sum_results) return costs @@ -380,28 +372,23 @@ def calculate_gen_inv_costs( """ grid = scenario.state.get_grid() if base_grid is None: - base_grid = Grid( - scenario.info["interconnect"].split("_"), source=scenario.info["grid_model"] - ) + base_grid = scenario.state.get_base_grid() else: _check_grid_models_match(base_grid, grid) - grid_new = cp.deepcopy(grid) # Find change in generation capacity capacity_difference = calculate_plant_difference(base_grid.plant, grid.plant) - grid_new.plant = grid.plant.assign(Pmax=capacity_difference.diff) - grid_new.plant = grid_new.plant.query("Pmax >= 0.01") + grid.plant = grid.plant.assign(Pmax=capacity_difference.diff) + grid.plant = grid.plant.query("Pmax >= 0.01") # Find change in storage capacity # Reindex so that we don't get NaN when calculating upgrades for new storage base_grid.storage["gen"] = base_grid.storage["gen"].reindex( - grid_new.storage["gen"].index, fill_value=0 - ) - grid_new.storage["gen"].Pmax = ( - grid.storage["gen"].Pmax - base_grid.storage["gen"].Pmax + grid.storage["gen"].index, fill_value=0 ) - grid_new.storage["gen"]["type"] = "storage" + grid.storage["gen"].Pmax = grid.storage["gen"].Pmax - base_grid.storage["gen"].Pmax + grid.storage["gen"]["type"] = "storage" - costs = _calculate_gen_inv_costs(grid_new, year, cost_case, sum_results) + costs = _calculate_gen_inv_costs(grid, year, cost_case, sum_results) return costs diff --git a/powersimdata/design/transmission/mwmiles.py b/powersimdata/design/transmission/mwmiles.py index d89d35088..2c2f316af 100644 --- a/powersimdata/design/transmission/mwmiles.py +++ b/powersimdata/design/transmission/mwmiles.py @@ -1,4 +1,3 @@ -from powersimdata.input.grid import Grid from powersimdata.input.transform_grid import TransformGrid from powersimdata.utility.distance import haversine @@ -15,7 +14,7 @@ def calculate_mw_miles(scenario, exclude_branches=None): :return: (*dict*) -- Upgrades to the branches. """ - original_grid = Grid(scenario.info["interconnect"].split("_")) + original_grid = scenario.state.get_base_grid() ct = scenario.state.get_ct() upgrades = _calculate_mw_miles(original_grid, ct, exclude_branches) return upgrades diff --git a/powersimdata/design/transmission/upgrade.py b/powersimdata/design/transmission/upgrade.py index 57eddde2a..7264bd7f4 100644 --- a/powersimdata/design/transmission/upgrade.py +++ b/powersimdata/design/transmission/upgrade.py @@ -334,9 +334,7 @@ def _identify_mesh_branch_upgrades( # Calculate selected cost metric for congested branches if cost_metric == "cost": # Calculate costs for an upgrade dataframe containing only composite_allow_list - base_grid = Grid( - ref_scenario.info["interconnect"], ref_scenario.info["grid_model"] - ) + base_grid = ref_scenario.state.get_base_grid() base_grid.branch = base_grid.branch.filter(items=congested_indices, axis=0) upgrade_costs = _calculate_ac_inv_costs(base_grid, sum_results=False) # Merge the individual line/transformer data into a single Series diff --git a/powersimdata/scenario/create.py b/powersimdata/scenario/create.py index 35cca2e1a..0bac3a301 100644 --- a/powersimdata/scenario/create.py +++ b/powersimdata/scenario/create.py @@ -194,6 +194,7 @@ class _Builder: "set_time", "get_ct", "get_grid", + "get_base_grid", "get_demand", "get_hydro", "get_solar", @@ -373,5 +374,12 @@ def get_grid(self): """ return TransformGrid(self.base_grid, self.change_table.ct).get_grid() + def get_base_grid(self): + """Returns original grid. + + :return: (*powersimdata.input.grid.Grid*) -- a Grid object. + """ + return copy.deepcopy(self.base_grid) + def __str__(self): return self.name diff --git a/powersimdata/scenario/ready.py b/powersimdata/scenario/ready.py index dd0f0f09e..12ce38101 100644 --- a/powersimdata/scenario/ready.py +++ b/powersimdata/scenario/ready.py @@ -1,5 +1,6 @@ import copy +from powersimdata.input.grid import Grid from powersimdata.input.input_data import get_bus_demand from powersimdata.input.transform_profile import TransformProfile from powersimdata.scenario.state import State @@ -9,6 +10,7 @@ class Ready(State): exported_methods = { "get_ct", "get_grid", + "get_base_grid", "get_bus_demand", "get_demand", "get_hydro", @@ -36,6 +38,16 @@ def get_grid(self): """ return copy.deepcopy(self.grid) + def get_base_grid(self): + """Returns original grid. + + :return: (*powersimdata.input.grid.Grid*) -- a Grid object. + """ + return Grid( + self._scenario_info["interconnect"].split("_"), + source=self._scenario_info["grid_model"], + ) + def get_profile(self, kind): """Returns demand, hydro, solar or wind profile.