Skip to content

Commit

Permalink
refactor: create internal function for transformer mult
Browse files Browse the repository at this point in the history
  • Loading branch information
danielolsen committed Oct 16, 2020
1 parent 3ea22a8 commit 6ee0237
Showing 1 changed file with 33 additions and 25 deletions.
58 changes: 33 additions & 25 deletions powersimdata/design/investment/investment_costs.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,35 @@ def select_mw(x, cost_df):
# find closest MW & corresponding cost
return tmp.iloc[np.argmin(np.abs(tmp["MW"] - x.rateA))][["MW", "costMWmi"]]

def get_transformer_mult(x, bus_reg, ac_reg_mult):
"""Determine the regional multiplier based on kV and power (closest).
:param pandas.core.series.Series x: data for a single transformer.
:param pandas.core.frame.DataFrame bus_reg: data frame with bus regions
:param pandas.core.frame.DataFrame ac_reg_mult: data frame with regional mults.
:return: (*float*) -- regional multiplier.
"""
max_kV = bus.loc[[x.from_bus_id, x.to_bus_id], "baseKV"].max()
region = bus_reg.loc[x.from_bus_id, "name_abbr"]
region_mults = ac_reg_mult.loc[ac_reg_mult.name_abbr == region]

mult_lookup_kV = region_mults.loc[(region_mults.kV - max_kV).abs().idxmin()].kV
region_kV_mults = region_mults[region_mults.kV == mult_lookup_kV]
region_kV_mults = region_kV_mults.loc[~region_kV_mults.mult.isnull()]
if len(region_kV_mults) == 0:
mult = 1
if (mult_lookup_kV, region) not in xfmr_lookup_alerted:
print(f"No multiplier for voltage {mult_lookup_kV} in {region}")
xfmr_lookup_alerted.add((mult_lookup_kV, region))
else:
mult_lookup_MW = region_kV_mults.loc[
(region_kV_mults.MW - x.rateA).abs().idxmin(), "MW"
]
mult = (
region_kV_mults.loc[region_kV_mults.MW == mult_lookup_MW].squeeze().mult
)
return mult

# import data
ac_cost = pd.DataFrame(const.ac_line_cost)
ac_reg_mult = pd.read_csv(const.ac_reg_mult_path)
Expand Down Expand Up @@ -152,31 +181,10 @@ def select_mw(x, cost_df):
],
axis=1,
)
alerted = set()
for t in transformers.index:
from_bus_kV = bus.loc[transformers.loc[t, "from_bus_id"], "baseKV"]
to_bus_kV = bus.loc[transformers.loc[t, "to_bus_id"], "baseKV"]
max_kV = max(from_bus_kV, to_bus_kV)
region = bus_reg.loc[transformers.loc[t, "from_bus_id"], "name_abbr"]
region_mults = ac_reg_mult.loc[ac_reg_mult.name_abbr == region]

mult_lookup_kV = region_mults.loc[(region_mults.kV - max_kV).abs().idxmin()].kV
region_kV_mults = region_mults[region_mults.kV == mult_lookup_kV]
region_kV_mults = region_kV_mults.loc[~region_kV_mults.mult.isnull()]
if len(region_kV_mults) == 0:
mult = 1
if (mult_lookup_kV, region) not in alerted:
print(f"No multiplier for voltage {mult_lookup_kV} in {region}")
alerted.add((mult_lookup_kV, region))
else:
MW = transformers.loc[t, "rateA"]
mult_lookup_MW = region_kV_mults.loc[
(region_kV_mults.MW - MW).abs().idxmin(), "MW"
]
mult = (
region_kV_mults.loc[region_kV_mults.MW == mult_lookup_MW].squeeze().mult
)
transformers.loc[t, "mult"] = mult
xfmr_lookup_alerted = set()
transformers["mult"] = transformers.apply(
lambda x: get_transformer_mult(x, bus_reg, ac_reg_mult), axis=1
)

transformers["Cost"] = (
transformers["rateA"] * transformers["per_MW_cost"] * transformers["mult"]
Expand Down

0 comments on commit 6ee0237

Please sign in to comment.