Skip to content

Commit 1d90f42

Browse files
committed
feat: use transformer number assumptions during transmission building
1 parent ddc6474 commit 1d90f42

2 files changed

Lines changed: 35 additions & 6 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
sub_id,low_kV,high_kV,number
2+
300060,69,138,4
3+
300940,69,138,2
4+
304621,69,138,3
5+
308608,69,138,3

prereise/gather/griddata/hifld/data_process/transmission.py

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from prereise.gather.griddata.hifld.data_access.load import (
1313
get_hifld_electric_power_transmission_lines,
1414
get_hifld_electric_substations,
15+
get_transformer_number_overrides,
1516
get_transformer_parameters,
1617
get_zone,
1718
)
@@ -539,7 +540,9 @@ def create_buses(lines):
539540
return buses
540541

541542

542-
def create_transformers(bus, lines, transformer_designs):
543+
def create_transformers(
544+
bus, lines, transformer_designs, transformer_number_assumptions=None
545+
):
543546
"""Add transformers between buses within the same substation. The assumed topology
544547
is that the highest-voltage bus in each substation is connected via a tansformer to
545548
every other voltage.
@@ -549,21 +552,37 @@ def create_transformers(bus, lines, transformer_designs):
549552
:param pandas.DataFrame transformer_designs: representative transformer data. Index
550553
is (low_kV, high_kV), columns are 'x', 'r', and 'MVA'. 'x' and 'r' values are
551554
per-unit, 'MVA' is in megawatts.
555+
:param pandas.Series transformer_number_assumptions: assumptions about the number
556+
of transformers between any two buses. The index should be a MultiIndex of
557+
(sub_id, low_kV, high_kV), and values are integer. If None, this parameter will
558+
not be used.
552559
:return: (*pandas.DataFrame*) -- each row is one transformer, columns are
553560
["from_bus_id", "to_bus_id", "x", "r", and "rateA"].
554561
"""
555-
bus_pairs = [
556-
(b, volt_series.sort_values().index[i + 1])
562+
bus_pair_data = [
563+
{
564+
"sub_id": sub,
565+
"from_bus_id": b,
566+
"to_bus_id": volt_series.sort_values().index[i + 1],
567+
"from_kV": bus.loc[b, "baseKV"],
568+
"to_kV": bus.loc[volt_series.sort_values().index[i + 1], "baseKV"],
569+
}
557570
for sub, volt_series in bus.groupby("sub_id")["baseKV"]
558571
for i, b in enumerate(volt_series.sort_values().index[:-1])
559572
if len(volt_series) > 1
560573
]
561-
bus_pairs_df = pd.DataFrame(bus_pairs, columns=["from_bus_id", "to_bus_id"])
562-
transformer_details = bus_pairs_df.apply(
574+
bus_pairs_df = pd.DataFrame(bus_pair_data)
575+
transformer_details = bus_pairs_df[["from_bus_id", "to_bus_id"]].apply(
563576
lambda x: estimate_transformers(x, lines, bus["baseKV"], transformer_designs),
564577
axis=1,
565578
)
566579
single_transformers = pd.concat([bus_pairs_df, transformer_details], axis=1)
580+
if transformer_number_assumptions is not None:
581+
single_transformers["number"].update(
582+
single_transformers[["sub_id", "from_kV", "to_kV"]]
583+
.apply(tuple, axis=1)
584+
.map(transformer_number_assumptions)
585+
)
567586
repeated_transformers = single_transformers.drop(columns="number").reindex(
568587
single_transformers.index.repeat(single_transformers["number"])
569588
)
@@ -831,6 +850,9 @@ def build_transmission(method="line2sub", **kwargs):
831850
hifld_data_dir = os.path.join(os.path.dirname(__file__), "..", "data")
832851
hifld_zones = get_zone(os.path.join(hifld_data_dir, "zone.csv")) # noqa: F841
833852
transformer_designs = get_transformer_parameters(hifld_data_dir)
853+
transformer_number_assumptions = get_transformer_number_overrides(
854+
os.path.join(hifld_data_dir, "transformer_number_assumptions.csv")
855+
)
834856

835857
# Filter substations based on their `LINES` attribute, check for location dupes
836858
hifld_substations.loc[const.substations_lines_filter_override, "LINES"] = None
@@ -908,7 +930,9 @@ def build_transmission(method="line2sub", **kwargs):
908930
add_substation_info_to_buses(bus, substations, hifld_zones)
909931

910932
# Add transformers, and calculate rating and impedance for all branches
911-
transformers = create_transformers(bus, ac_lines, transformer_designs)
933+
transformers = create_transformers(
934+
bus, ac_lines, transformer_designs, transformer_number_assumptions
935+
)
912936
transformers["type"] = "Transformer"
913937
transformers["interconnect"] = transformers["from_bus_id"].map(bus["interconnect"])
914938
first_new_id = ac_lines.index.max() + 1

0 commit comments

Comments
 (0)