diff --git a/pyproject.toml b/pyproject.toml index 692236e..79693cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ classifiers = [ ] dependencies = [ "opendssdirect.py", - "grid-data-models==2.3.0", + "grid-data-models==2.3.1", "rdflib", "NREL-altdss-schema==0.0.2", "typer", diff --git a/src/ditto/readers/opendss/components/branches.py b/src/ditto/readers/opendss/components/branches.py index db7bfda..073db74 100644 --- a/src/ditto/readers/opendss/components/branches.py +++ b/src/ditto/readers/opendss/components/branches.py @@ -240,6 +240,13 @@ def get_matrix_branch_equipments() -> ( return matrix_branch_equipments_catalog, thermal_limit_catalog +def _add_neutral_phase_to_buses(system, bus1, bus2): + for bus in [bus1, bus2]: + bus_obj = system.get_component(DistributionBus, bus) + if Phase.N not in bus_obj.phases: + bus_obj.phases.append(Phase.N) + + def get_branches( system: System, mapping: dict[str, str], @@ -283,9 +290,7 @@ def get_branches( nodes.append("4") if "4" in nodes: - for bus in [bus1, bus2]: - bus_obj = system.get_component(DistributionBus, bus) - bus_obj.phases.append(Phase.N) + _add_neutral_phase_to_buses(system, bus1, bus2) geometry_branch = GeometryBranch.model_construct( name=odd.Lines.Name().lower(), diff --git a/src/ditto/readers/opendss/graph_utils.py b/src/ditto/readers/opendss/graph_utils.py index 4bea64a..d6edb0d 100644 --- a/src/ditto/readers/opendss/graph_utils.py +++ b/src/ditto/readers/opendss/graph_utils.py @@ -145,12 +145,16 @@ def _fix_bus_phases( if u != hv_xfmr_bus: bus = system.get_component(DistributionBus, u) bus.phases = _mapped_phases(mapped_split_phases, bus.phases) + if Phase.N in bus.phases: + bus.phases.remove(Phase.N) for _, _, data in subgraph.edges(data=True): model: DistributionBranchBase = system.get_component(data["type"], data["name"]) if not issubclass(model.__class__, DistributionBranchBase): raise TypeError(f"Unsupported model type {model.__class__.__name__}") model.phases = _mapped_phases(mapped_split_phases, model.phases) + if Phase.N in model.phases: + model.phases.remove(Phase.N) def _mapped_phases(mapped_split_phases, phases): diff --git a/tests/test_opendss/conftest.py b/tests/test_opendss/conftest.py index ab931ed..7adc9b0 100644 --- a/tests/test_opendss/conftest.py +++ b/tests/test_opendss/conftest.py @@ -203,7 +203,7 @@ def build_split_phase_distribution_buses(): update={ "uuid": uuid4(), "name": f"split_phase_bus_{i}", - "phases": [Phase.S1, Phase.S2, Phase.N], + "phases": [Phase.S1, Phase.S2], "rated_voltage": Voltage(120, "volt"), "voltage_type": VoltageTypes.LINE_TO_GROUND, }