Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kva back to transformer #172

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
27 changes: 9 additions & 18 deletions ditto/metrics/network_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ def setup_results_data_structure(self, *args):
sub_MVA = None
for su in self.__substations:
if _src in su.name.replace(".", ""):
sub_MVA = min([z.rated_power for z in su.windings]) * 10 ** -6
sub_MVA = su.rated_power * 10 ** -6 # DiTTo in var

# Create the results dictionary.
# Note: All metrics relying on networkX calls are computed here.
Expand Down Expand Up @@ -1214,17 +1214,14 @@ def analyze_object(self, obj, feeder_name):
):
total_load_kva += math.sqrt(pl.p ** 2 + pl.q ** 2)
# ...compute the transformer KVA
if hasattr(obj, "windings") and obj.windings is not None:
transformer_kva = max(
[
wdg.rated_power
for wdg in obj.windings
if wdg.rated_power is not None
] # The kva values should be the same on all windings but we take the max
)
if obj.rated_power is not None:
transformer_kva = obj.rated_power
self.results[feeder_name]["transformer_kva_distribution"].append(
transformer_kva
)
else:
transformer_kva = 0

# ...and, compare the two values
if total_load_kva > transformer_kva:
self.results[feeder_name]["num_overloaded_transformers"] += 1
Expand Down Expand Up @@ -1256,15 +1253,9 @@ def analyze_object(self, obj, feeder_name):

# If we use the transformers to compute the kva distribution
if self.compute_kva_density_with_transformers:
if (
hasattr(obj.windings[0], "rated_power")
and obj.windings[0].rated_power is not None
):
self.results[feeder_name][
"sum_distribution_transformer_mva"
] += (
obj.windings[0].rated_power * 10 ** -6
) # DiTTo in va
self.results[feeder_name][
"sum_distribution_transformer_mva"
] += (obj.rated_power * 10 ** -6) # DiTTo in var

if (
hasattr(obj.windings[0], "phase_windings")
Expand Down
10 changes: 7 additions & 3 deletions ditto/models/powertransformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@ class PowerTransformer(DiTToHasTraits):

name = Unicode(help="""Name of the transformer object""", default_value="")

# Modification: Nicolas (August 2017)
# Moved the rated_power from the transformer down to the windings
# rated_power = Float(help='''The rated power of the entire transformer''', default_value=None)
rated_power = Float(
help="""The rated power of the entire transformer""", default_value=None
)

emergency_power = Float(
help="""The emergency power of the entire transformer""", default_value=None
)

install_type = Unicode(
help="""The mounting type of the transformer: one of {POLETOP, PADMOUNT, VAULT}""",
Expand Down
5 changes: 5 additions & 0 deletions ditto/models/regulator.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@
class Regulator(DiTToHasTraits):

name = Unicode(help="""Name of the regulator object""", default_value="")
rated_power = Float(help="""The rated power of the regulator""", default_value=None)

emergency_power = Float(
help="""The emergency power of the regulator""", default_value=None
)
delay = Float(
help="""The delay for first tap change operation""", default_value=None
)
Expand Down
8 changes: 0 additions & 8 deletions ditto/models/winding.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,5 @@ class Winding(DiTToHasTraits):
default_value=None,
)

# Added by Nicolas (August 2017)
# Better results are obtained if the rated power is specified at the windings rather
# than for the whole transformer
rated_power = Float(help="""The rated power of the winding""", default_value=None)
emergency_power = Float(
help="""The emergency power of the winding""", default_value=None
)

def build(self, model):
self._model = model
82 changes: 33 additions & 49 deletions ditto/readers/cyme/read.py
Original file line number Diff line number Diff line change
Expand Up @@ -4383,21 +4383,24 @@ def parse_transformers(self, model):
pass

# Set the rated power
try:
if w == 0:
api_winding.rated_power = (
float(settings["primaryratedcapacity"]) * 10 ** 3
) # DiTTo in volt ampere
if w == 1:
api_winding.rated_power = (
float(settings["secondaryratedcapacity"]) * 10 ** 3
) # DiTTo in volt ampere
if w == 2:
api_winding.rated_power = (
float(settings["tertiaryratedcapacity"]) * 10 ** 3
) # DiTTo in volt ampere
except:
pass
total_kva = 0
if (
"primaryratedcapacity" in settings
and settings["primaryratedcapacity"] is not None
):
total_kva += float(settings["primaryratedcapacity"])
if (
"secondaryratedcapacity" in settings
and settings["secondaryratedcapacity"] is not None
):
total_kva += float(settings["secondaryratedcapacity"])
if (
"tertiaryratedcapacity" in settings
and settings["tertiaryratedcapacity"] is not None
):
total_kva += float(settings["tertiaryratedcapacity"])
total_kva *= 10 ** 3 # DiTTo in var
api_transformer.rated_power = total_kva

# Create the phase windings
for p in phases:
Expand Down Expand Up @@ -4522,6 +4525,11 @@ def parse_transformers(self, model):
except:
pass

# Set the rated power
api_transformer.rated_power = (
float(transformer_data["kva"]) * 10 ** 3
) # DiTTo in var

# Here we know that we have two windings...
for w in range(2):

Expand All @@ -4531,19 +4539,6 @@ def parse_transformers(self, model):
except:
raise ValueError("Unable to instanciate Winding DiTTo object.")

# Set the rated power
try:
if w == 0:
api_winding.rated_power = (
float(transformer_data["kva"]) * 10 ** 3
) # DiTTo in volt ampere
if w == 1:
api_winding.rated_power = (
float(transformer_data["kva"]) * 10 ** 3
) # DiTTo in volt ampere
except:
pass

# Set the nominal voltage
try:
if w == 0:
Expand Down Expand Up @@ -4604,6 +4599,11 @@ def parse_transformers(self, model):
else:
transformer_data = {}

# Set the rated power
api_transformer.rated_power = (
float(transformer_data["ratedcapacity"]) * 10 ** 3
) # DiTTo in var

# Here we know that we have two windings...
for w in range(2):

Expand All @@ -4613,19 +4613,6 @@ def parse_transformers(self, model):
except:
raise ValueError("Unable to instanciate Winding DiTTo object.")

# Set the rated power
try:
if w == 0:
api_winding.rated_power = (
float(transformer_data["ratedcapacity"]) * 10 ** 3
) # DiTTo in volt ampere
if w == 1:
api_winding.rated_power = (
float(transformer_data["ratedcapacity"]) * 10 ** 3
) # DiTTo in volt ampere
except:
pass

# Set the nominal voltage
try:
if w == 0:
Expand Down Expand Up @@ -4936,6 +4923,11 @@ def parse_regulators(self, model):
except:
pass

# Set the rated power of the regulator
api_regulator.rated_power = (
float(regulator_data["kva"]) * 10 ** 3
) # DiTTo in var

for w in range(2):

# Instanciate a Winding DiTTo object
Expand All @@ -4944,14 +4936,6 @@ def parse_regulators(self, model):
except:
raise ValueError("Unable to instanciate Winding DiTTo object.")

# Set the rated power
try:
api_winding.rated_power = (
float(regulator_data["kva"]) * 10 ** 3
) # DiTTo in volt ampere
except:
pass

# Set the connection type
try:
api_winding.connection_type = self.connection_configuration_mapping(
Expand Down
81 changes: 40 additions & 41 deletions ditto/readers/gridlabd/read.py
Original file line number Diff line number Diff line change
Expand Up @@ -744,6 +744,12 @@ def parse(self, model, origin_datetime="2017 Jun 1 2:00PM"):
except AttributeError:
pass

try:
power_rating = float(config["power_rating"]) * 1000
api_transformer.rated_power = power_rating
except AttributeError:
pass

try:
high_voltage = config["primary_voltage"]
winding1.nominal_voltage = float(high_voltage)
Expand Down Expand Up @@ -832,47 +838,40 @@ def parse(self, model, origin_datetime="2017 Jun 1 2:00PM"):
for x in reactances:
api_transformer.reactances.append(x)

try:
power_rating = float(config["power_rating"]) * 1000
winding1.rated_power = power_rating
if num_windings == 3:
winding2.rated_power = power_rating / 2.0
winding3.rated_power = power_rating / 2.0
else:
winding2.rated_power = power_rating
except AttributeError:
pass
try:
power_rating = float(config["powerA_rating"]) * 1000
winding1.rated_power = power_rating
if num_windings == 3:
winding2.rated_power = power_rating / 2.0
winding3.rated_power = power_rating / 2.0
else:
winding2.rated_power = power_rating
except AttributeError:
pass

try:
power_rating = float(config["powerB_rating"]) * 1000
winding1.rated_power = power_rating
if num_windings == 3:
winding2.rated_power = power_rating / 2.0
winding3.rated_power = power_rating / 2.0
else:
winding2.rated_power = power_rating
except AttributeError:
pass
try:
power_rating = float(config["powerC_rating"]) * 1000
winding1.rated_power = power_rating
if num_windings == 3:
winding2.rated_power = power_rating / 2.0
winding3.rated_power = power_rating / 2.0
else:
winding2.rated_power = power_rating
except AttributeError:
pass
# IS THIS RIGHT?
# IT LOOKS LIKE THE RATED_POWER WOULD BE OVERWRITTEN
#
# try:
# power_rating = float(config["powerA_rating"]) * 1000
# winding1.rated_power = power_rating
# if num_windings == 3:
# winding2.rated_power = power_rating / 2.0
# winding3.rated_power = power_rating / 2.0
# else:
# winding2.rated_power = power_rating
# except AttributeError:
# pass

# try:
# power_rating = float(config["powerB_rating"]) * 1000
# winding1.rated_power = power_rating
# if num_windings == 3:
# winding2.rated_power = power_rating / 2.0
# winding3.rated_power = power_rating / 2.0
# else:
# winding2.rated_power = power_rating
# except AttributeError:
# pass
# try:
# power_rating = float(config["powerC_rating"]) * 1000
# winding1.rated_power = power_rating
# if num_windings == 3:
# winding2.rated_power = power_rating / 2.0
# winding3.rated_power = power_rating / 2.0
# else:
# winding2.rated_power = power_rating
# except AttributeError:
# pass

except AttributeError:
pass
Expand Down
10 changes: 5 additions & 5 deletions ditto/readers/json/read.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ class Reader(AbstractReader):
},
'windings':{'klass':'list',
'value':[{'klass':'Winding',
'rated_power':{'klass':'float',
'value':'1000'
}
'nominal_voltage':{'klass':'float',
'value':'12470'
}
'phase_windings':{'klass':'list',
'value':[{'klass':'PhaseWinding',
'phase':{'klass':'Unicode',
Expand Down Expand Up @@ -161,7 +161,7 @@ def parse(self):
list_first_level = []

# Loop over the element in the list
# Ex: element will be a dict {'klass':Winding, 'rated_power':{'klass':'float','value':10},...}
# Ex: element will be a dict {'klass':Winding, 'nominal_voltage':{'klass':'float','value':10},...}
for element in property_value["value"]:

# Get the type of each element
Expand All @@ -180,7 +180,7 @@ def parse(self):
)

# Loop over the winding properties
# Ex: rated_power...
# Ex: nominal_voltage...
for element_property, element_value in element.items():

if element_property != "klass":
Expand Down
Loading