Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
6febd6b
rm redundant logging from opendss write.py
nlaws-camus Aug 25, 2022
c2a780f
fix openDSS writer kvarlimit is now kvarmax
nlaws-camus Aug 25, 2022
fc3fd02
cyme reader: improve warning msgs for bad load values
nlaws-camus Aug 26, 2022
218e974
handle zero power factor in cyme reader for loads
nlaws-camus Aug 26, 2022
7536494
handle negative power factor in cyme reader
nlaws-camus Aug 26, 2022
7377b65
rm debug msg in cyme reader
nlaws-camus Aug 26, 2022
943d497
cyme reader clarify parser_helper role
nlaws-camus Aug 26, 2022
14804e4
improve warning messages from cyme reader
nlaws-camus Aug 26, 2022
7337599
fix opendss writer when bus/node names have "." or " "
nlaws-camus Aug 26, 2022
63897ff
Update check_transformer_phase_path.py
nlaws-camus Aug 26, 2022
a4e564d
rm impossible log in models/base.py
nlaws-camus Aug 27, 2022
2938132
handle LoadModelID in CYME Reader
nlaws-camus Aug 27, 2022
184c63b
Update .gitignore
nlaws-camus Aug 30, 2022
1380884
openDSS writer use re.sub to remove special chars
nlaws-camus Aug 30, 2022
d6826f5
typo fixes in opendss/write.py
nlaws-camus Sep 7, 2022
73a82fc
start parse of TRANSFORMER BYPHASE SETTING in CYME reader
nlaws-camus Sep 9, 2022
319824a
update CYME Reader.parser_helper doc string
nlaws-camus Sep 9, 2022
bce563b
update CYME Reader.parse_transformers doc string
nlaws-camus Sep 9, 2022
4a21844
minor formatting in CYME Reader
nlaws-camus Sep 9, 2022
c3ca68b
create ditto/readers/README.md
nlaws-camus Sep 9, 2022
35ebbbf
create readers/cyme/utils.py
nlaws-camus Sep 9, 2022
7605dd6
mv some cyme reader code to a utils.py for reuse
nlaws-camus Sep 9, 2022
cdf4c98
cyme reader parse TRANSFORMER BYPHASE SETTING
nlaws-camus Sep 10, 2022
9087324
update cyme reader doc strings
nlaws-camus Sep 13, 2022
0032cc6
typo fix in cyme reader
nlaws-camus Sep 13, 2022
05d74d0
bug fix in CYME reader parse_transformers
nlaws-camus Sep 14, 2022
48e4e06
read CYME 2phase transformer tap settings
nlaws-camus Sep 14, 2022
2c11918
minor formatting in opendss Writer
nlaws-camus Sep 14, 2022
99fba07
minor simplifications in CYME reader
nlaws-camus Sep 14, 2022
d5c4051
opendss writer: add PowerSource nominal voltage to Voltagebases
nlaws-camus Sep 14, 2022
fdb33b0
add Winding.base_voltage
nlaws-camus Sep 14, 2022
a90ad08
parse primary/secondarybasevoltage in CYME reader
nlaws-camus Sep 14, 2022
585bda0
opendss writer add Winding.base_voltage to Voltagebases
nlaws-camus Sep 14, 2022
d0145ef
cyme reader handle multiple networks
nlaws-camus Sep 15, 2022
d00bfdc
bug fix in cyme reader for regulator voltage
nlaws-camus Sep 15, 2022
f453e04
system_structure_modifier: delete method that has warning not to use it
nlaws-camus Sep 20, 2022
a58b6d7
use the recommended system_structure_modifier.set_nominal_voltages_re…
nlaws-camus Sep 20, 2022
98126df
refactor `is not ""` to correct `!= ""` in NetworkAnalyzer
nlaws-camus Sep 20, 2022
cb260f0
rm broken, unused set_nominal_voltages in system_structure_modifier
nlaws-camus Sep 20, 2022
4925132
minor formatting in system_structure_modifier
nlaws-camus Sep 20, 2022
0038639
add debug msg when changing node nominal_voltage in system_structure_…
nlaws-camus Sep 20, 2022
182173f
rm unused arg from Network.get_upstream_transformer
nlaws-camus Sep 20, 2022
993378b
update network_analysis.py doc string
nlaws-camus Sep 20, 2022
ea6380c
minor formatting in Network.__init__
nlaws-camus Sep 20, 2022
b4cb4ec
make warnings logger.warn (were logger.debug)
nlaws-camus Sep 20, 2022
be30db0
minor formatting in Cyme reader
nlaws-camus Sep 20, 2022
cdd1465
rm unused commented code in openDSS writer
nlaws-camus Sep 20, 2022
62e5b95
use Store.iter_models(PowerTransformer) in openDSS writer
nlaws-camus Sep 20, 2022
3ea4d77
warn in system_structure_modifier when changing element nominal_voltage
nlaws-camus Sep 20, 2022
030fe65
use Store.iter_models(Regulator) in opendss writer
nlaws-camus Sep 20, 2022
b2fe2b6
fix cyme reader for sections with regulators only
nlaws-camus Sep 21, 2022
c75a0dd
log system_structure_modifier job in cyme reader
nlaws-camus Sep 21, 2022
c38dc3b
cyme reader define static methods
nlaws-camus Sep 21, 2022
7b93a61
minor formatting in cyme reader
nlaws-camus Sep 21, 2022
0cbe8ff
use Store.iter_models in opendss writer parse_loads
nlaws-camus Sep 21, 2022
2217310
minor formatting in cyme reader parse_loads
nlaws-camus Sep 21, 2022
90336d1
implement unbalanced loads in opendss writer
nlaws-camus Sep 21, 2022
8a0b1ec
add pandas to setup.py install_requires
nlaws-camus Sep 23, 2022
cbf894f
properly close Lines.dss in opendss writer
nlaws-camus Sep 23, 2022
ca718a3
fix opendss writer trfx for regulator base voltages
nlaws-camus Sep 24, 2022
3311865
fix the order of Line objects in opendss writer
nlaws-camus Sep 24, 2022
2ba2ab6
fix the order of regulator params in opendss writer
nlaws-camus Sep 24, 2022
7425086
fix order of params for 2 winding trfx in opendss writer
nlaws-camus Sep 24, 2022
d65ed7f
fix order of load params in opendss writer
nlaws-camus Sep 24, 2022
ef62bca
improve legibility in opendss write PVs
nlaws-camus Sep 28, 2022
9ec6f94
minor formatting in cyme reader
nlaws-camus Sep 29, 2022
5164676
improve opendss writer capacitor parsing legibility
nlaws-camus Sep 29, 2022
1dbde59
add vmin, vmax to Capacitor model
nlaws-camus Sep 30, 2022
c8db4a9
cyme reader parse more shunt capacitor settings
nlaws-camus Sep 30, 2022
775c33d
ditto writer fix capcontrol definitions
nlaws-camus Sep 30, 2022
43720eb
remove 1.2 scaling of regulator bandwidth in opendss writer
nlaws-camus Sep 30, 2022
cdfc885
rm some unnecessary try/except from cyme reader
nlaws-camus Oct 3, 2022
be3de3b
dss writer set default XHL=1 for regulator trfx
nlaws-camus Oct 3, 2022
90bf1cf
cyme reader fix single phase trfx kV values to LN
nlaws-camus Oct 3, 2022
1d18d48
add cyme reader test for load.nominal_voltage [FAILS]
nlaws-camus Oct 5, 2022
6a7d233
add TODO to cyme reader for voltage reg
nlaws-camus Nov 8, 2022
f0c6c44
add note to set_nominal_voltages_recur
nlaws-camus Nov 8, 2022
221560f
rm debug comments
nlaws-camus Nov 8, 2022
134f71e
Merge remote-tracking branch 'upstream/master' into nlaws-wip
nlaws-camus Nov 9, 2022
a98717d
rm obsolete base_voltage in opendss writer
nlaws-camus Nov 17, 2022
2888ce6
merge upstream master
nlaws-camus Nov 18, 2022
824c919
fix return type in cyme reader utils
nlaws-camus Nov 18, 2022
0a8199c
fix some setup.py packages (and black auto-format)
nlaws-camus Nov 21, 2022
1fc9a4c
Update .pre-commit-config.yaml
NLaws Dec 5, 2022
6cdd648
change ~= to >= for python dependencies
NLaws Dec 5, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ venv/
ENV/
env.bak/
venv.bak/
testenv/

# Spyder project settings
.spyderproject
Expand Down
1 change: 0 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,3 @@ repos:
entry: python -m black
types: [python]
args: [--line-length=88, --safe]
python_version: python3.6
56 changes: 36 additions & 20 deletions ditto/consistency/check_transformer_phase_path.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ def check_transformer_phase_path(model,needs_transformers=False,verbose=True):
source_name = source.connecting_element
all_paths = nx.single_source_shortest_path(ditto_graph.graph,source_name)
break_load = False
msgs = []

for load in all_loads:
load_connection = load.connecting_element
if load_connection in all_paths:
Expand All @@ -75,7 +77,7 @@ def check_transformer_phase_path(model,needs_transformers=False,verbose=True):
transformer_low_side = path[i-1]

### Check that the low side of the transformer is connected to a line that leads to a load
if num_transformers ==1:
if num_transformers == 1:
load_transformer_map[load.name] = element['name']
if model[transformer_names[0]].to_element != transformer_low_side:
if verbose:
Expand Down Expand Up @@ -121,18 +123,24 @@ def check_transformer_phase_path(model,needs_transformers=False,verbose=True):
if element['equipment'] == 'PowerTransformer' and not element['is_substation']:
break
if element['equipment'] == 'Line':
line_phases = [wire.phase for wire in element['wires'] if wire.phase != 'N'] #Neutral phases not included in the transformer
if not set(high_phases).issubset(set(line_phases)): #MV phase line phase must be able to support transformer phase
if verbose:
print('Load '+load.name+ ' has incorrect phases '+str(line_phases)+' '+str(high_phases)+' on high side of transformer for line '+element['name'])
result = False
break
if len(line_phases) > len(prev_line_phases):
if verbose:
print('Number of phases increases along line '+element['name'] +' from '+str(len(prev_line_phases))+' to '+str(len(line_phases)))
result = False
break
prev_line_phases = line_phases
if not "wires" in element.keys():
msg = f"Warning: Line {element['equipment_name']} has no wires!"
if not msg in msgs:
print(msg)
msgs.append(msg)
else:
line_phases = [wire.phase for wire in element['wires'] if wire.phase != 'N'] #Neutral phases not included in the transformer
if not set(high_phases).issubset(set(line_phases)): #MV phase line phase must be able to support transformer phase
if verbose:
print('Load '+load.name+ ' has incorrect phases '+str(line_phases)+' '+str(high_phases)+' on high side of transformer for line '+element['name'])
result = False
break
if len(line_phases) > len(prev_line_phases):
if verbose:
print('Number of phases increases along line '+element['name'] +' from '+str(len(prev_line_phases))+' to '+str(len(line_phases)))
result = False
break
prev_line_phases = line_phases
elif element['equipment'] != 'Regulator':
print('Warning: element of type '+element['equipment'] +' found on path to load '+load.name)

Expand All @@ -143,13 +151,21 @@ def check_transformer_phase_path(model,needs_transformers=False,verbose=True):
for i in range(len(path)-1):
element = ditto_graph.graph[path[i]][path[i+1]]
if element['equipment'] == 'Line':
line_phases = [wire.phase for wire in element['wires'] if wire.phase != 'N'] #Neutral phases not included in the transformer
if len(line_phases) > len(prev_line_phases):
if verbose:
print('Number of phases increases along line '+element['name'] +' from '+str(len(prev_line_phases))+' to '+str(len(line_phases)))
result = False
break
prev_line_phases = line_phases
if not "wires" in element.keys():
msg = f"Warning: Line {element['equipment_name']} has no wires!"
if not msg in msgs:
print(msg)
msgs.append(msg)
else:
line_phases = [wire.phase for wire in element['wires'] if wire.phase != 'N'] #Neutral phases not included in the transformer
if len(line_phases) > len(prev_line_phases):
msg = 'Number of phases increases along line '+element['name'] +' from '+str(len(prev_line_phases))+' to '+str(len(line_phases))
if verbose and not msg in msgs:
print(msg)
msgs.append(msg)
result = False
break
prev_line_phases = line_phases
elif element['equipment'] != 'Regulator' and element['equipment'] != 'PowerTransformer':
print('Warning: element of type '+element['equipment'] +' found on path to load '+load.name)
return result
Expand Down
18 changes: 8 additions & 10 deletions ditto/metrics/network_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ def __init__(self, model, compute_network=True, *args):
self.edge_equipment_name = None

modifier = system_structure_modifier(self.model, source)
modifier.set_nominal_voltages()
modifier.set_nominal_voltages_recur()
# IMPORTANT: the following two parameters define what is LV and what is MV.
# - Object is LV if object.nominal_voltage<=LV_threshold
# - Object is MV if MV_threshold>=object.nominal_voltage>LV_threshold
Expand Down Expand Up @@ -205,12 +205,10 @@ def add_feeder_information(
"""
Use this function to add the feeder information if available.

:param feeder_names: List of the feeder names
:type feeder_names: List(str)
:param feeder_nodes: List of lists containing feeder nodes
:type feeder_nodes: List of Lists of strings
:param feeder_types: List of feeder types.
:type feeder_types: List or string if all feeders have the same type
:param feeder_names: List(str) of the feeder names
:param feeder_nodes: List of lists of strings containing feeder nodes
:param substations: List(str) of the substations names
:param feeder_types: List(str) of feeder types or string if all feeders have the same type
"""
if len(feeder_names) != len(feeder_nodes):
raise ValueError(
Expand Down Expand Up @@ -465,7 +463,7 @@ def tag_objects(self):
hasattr(prev_obj, "feeder_name")
and hasattr(prev_obj, "name")
and prev_obj.feeder_name is not None
and prev_obj.feeder_name is not ""
and prev_obj.feeder_name != ""
and prev_obj.name
in self.node_feeder_mapping # In case a default value has been set for all feeder_name values
):
Expand Down Expand Up @@ -498,7 +496,7 @@ def tag_objects(self):
hasattr(prev_obj, "feeder_name")
and hasattr(prev_obj, "name")
and prev_obj.feeder_name is not None
and prev_obj.feeder_name is not ""
and prev_obj.feeder_name != ""
and prev_obj.name
in self.node_feeder_mapping # In case a default value has been set for all feeder_name values
):
Expand All @@ -525,7 +523,7 @@ def tag_objects(self):
hasattr(prev_obj, "feeder_name")
and hasattr(prev_obj, "name")
and prev_obj.feeder_name is not None
and prev_obj.feeder_name is not ""
and prev_obj.feeder_name != ""
and prev_obj.name
in self.node_feeder_mapping # In case a default value has been set for all feeder_name values
):
Expand Down
5 changes: 1 addition & 4 deletions ditto/models/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from __future__ import absolute_import, division, print_function
from builtins import super, range, zip, round, map

import warnings
from traitlets.traitlets import (
ObserveHandler,
_deprecated_method,
Expand All @@ -29,9 +28,7 @@ def set_name(self, model):
try:
name = self.name
if name in model.model_names:
warnings.warn("Duplicate name %s being set. Object overwritten." % name)
logger.debug("Duplicate name %s being set. Object overwritten." % name)
logger.debug(model.model_names[name], self)
logger.warn("Duplicate name %s being set. Object overwritten." % name)
model.model_names[name] = self
except AttributeError:
pass
Expand Down
8 changes: 8 additions & 0 deletions ditto/models/capacitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,14 @@ class Capacitor(DiTToHasTraits):
help="""Flag that indicates wheter the element is inside a substation or not.""",
default_value=False,
)
vmax = Float(
help="""Maximum voltage for control override OFF""",
default_value=None
)
vmin = Float(
help="""Minimum voltage for control override ON""",
default_value=None
)

def build(self, model):
self._model = model
3 changes: 3 additions & 0 deletions ditto/models/winding.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ class Winding(DiTToHasTraits):
nominal_voltage = Float(
help="""The nominal voltage of the transformer winding""", default_value=None
)
base_voltage = Float(
help="""The voltage basis for per unit calculations""", default_value=None
)
voltage_limit = Float(
help="""The maximum voltage allowed on the PT secondary.""", default_value=None
)
Expand Down
Loading