Skip to content

Commit 86e043e

Browse files
author
Robert Louis Ferrando
committed
debugging vnom error for loads
1 parent 0c4b2c0 commit 86e043e

3 files changed

Lines changed: 41 additions & 10 deletions

File tree

src/data_model/transformations/dss2eng.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,11 +340,13 @@ end
340340
"Adds vsources to `data_eng` from `data_dss`"
341341
function _dss2eng_vsource!(data_eng::Dict{String,<:Any}, data_dss::OpenDssDataModel, import_all::Bool, time_series::String="daily")
342342
for (id, dss_obj) in get(data_dss, "vsource", Dict{String,Any}())
343+
println("dss_obj = ", dss_obj)
343344
ph1_ang = dss_obj["angle"]
344345
vm_pu = dss_obj["pu"]
345346

346347
phases = dss_obj["phases"]
347348
vnom = dss_obj["basekv"] / sqrt(phases)
349+
println("vnom = ", vnom)
348350

349351
data_eng["settings"]["vbases_default"][_parse_bus_id(dss_obj["bus1"])[1]] = vnom
350352

src/data_model/transformations/ravens2math.jl

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ const pmd_ravens_asset_types = String[
2828
]
2929

3030

31+
32+
3133
function transform_data_model_ravens(
3234
data::Dict{String,<:Any};
3335
kron_reduce::Bool=true,
@@ -53,6 +55,8 @@ function transform_data_model_ravens(
5355

5456
correct_network_data && correct_network_data!(data_math; make_pu=make_pu, make_pu_extensions=make_pu_extensions)
5557

58+
data_math["switch_close_actions_ub"] = Inf
59+
5660
return data_math
5761

5862
end
@@ -74,12 +78,13 @@ function _map_ravens2math(
7478
add_base_voltages!(_data_ravens; overwrite=false)
7579

7680
# TODO: Add settings (defaults)
77-
basemva = 1
81+
basemva = 100
7882
_settings = Dict("sbase_default" => basemva * 1e3,
7983
"voltage_scale_factor" => 1e3,
80-
"power_scale_factor" => 1e3,
84+
"power_scale_factor" => 1000,
8185
"base_frequency" => get(_data_ravens, "BaseFrequency", 60.0),
8286
"vbases_default" => Dict{String,Real}(),
87+
"vnom_kv" => Dict{String,Real}()
8388
)
8489

8590
# Multinetwork
@@ -92,6 +97,7 @@ function _map_ravens2math(
9297
)
9398

9499
if haskey(data_ravens, "BasicIntervalSchedule")
100+
#("yes it has BasicIntervalSchedule")
95101
schdls = get(data_ravens, "BasicIntervalSchedule", Dict{String,Any}()) # Get schedules/timeseries
96102

97103
# Check for shortest timeseries. Use that length for mn
@@ -126,6 +132,7 @@ function _map_ravens2math(
126132
"time_elapsed" => get(_data_ravens, "time_elapsed", 1.0),
127133
)
128134
)
135+
129136

130137
# Store nw dict in vector
131138
nws_vect[n] = nw_dict
@@ -284,7 +291,12 @@ function _map_ravens2math_conductor!(data_math::Dict{String,<:Any}, data_ravens:
284291

285292
for (name, ravens_obj) in get(conductors, "ACLineSegment", Dict{Any,Dict{String,Any}}())
286293
math_obj = _init_math_obj_ravens("ACLineSegment", name, ravens_obj, length(data_math["branch"]) + 1; pass_props=pass_props)
287-
nconds = length(ravens_obj["ACLineSegment.ACLineSegmentPhase"]) # number of conductors/wires
294+
nconds = 0
295+
try
296+
nconds = length(ravens_obj["ACLineSegment.ACLineSegmentPhase"]) # number of conductors/wires
297+
catch
298+
nconds = 1
299+
end
288300
nphases = 0 # init number of phases
289301
terminals = ravens_obj["ConductingEquipment.Terminals"]
290302

@@ -330,6 +342,7 @@ function _map_ravens2math_conductor!(data_math::Dict{String,<:Any}, data_ravens:
330342

331343
math_obj["br_r"] = _impedance_conversion_ravens(impedance_data, ravens_obj, "PhaseImpedanceData.r")
332344
math_obj["br_x"] = _impedance_conversion_ravens(impedance_data, ravens_obj, "PhaseImpedanceData.x")
345+
#println("br_r = ", math_obj["br_r"])
333346

334347
for (key, param) in [("b_fr", "PhaseImpedanceData.b"), ("b_to", "PhaseImpedanceData.b"), ("g_fr", "PhaseImpedanceData.g"), ("g_to", "PhaseImpedanceData.g")]
335348
math_obj[key] = _admittance_conversion_ravens(impedance_data, ravens_obj, param)
@@ -360,7 +373,7 @@ function _map_ravens2math_conductor!(data_math::Dict{String,<:Any}, data_ravens:
360373

361374
# angular frequency
362375
ω = 2π * base_freq
363-
ω₀ = 2π * base_freq
376+
ω_θ = 2π * base_freq
364377

365378
# Get data for each specific ACLineSegmentPhase
366379
segmentphase_data = ravens_obj["ACLineSegment.ACLineSegmentPhase"]
@@ -462,7 +475,7 @@ function _map_ravens2math_conductor!(data_math::Dict{String,<:Any}, data_ravens:
462475
nconds,
463476
earth_model,
464477
rac,
465-
ω₀,
478+
ω_θ,
466479
rdc,
467480
rho,
468481
nphases,
@@ -1274,9 +1287,11 @@ function _map_ravens2math_energy_consumer!(data_math::Dict{String,<:Any}, data_r
12741287
if nphases >= 3
12751288
math_obj["vnom_kv"] = (base_voltage / voltage_scale_factor_sqrt3)
12761289
else
1277-
math_obj["vnom_kv"] = (base_voltage / voltage_scale_factor)
1290+
math_obj["vnom_kv"] = (base_voltage / voltage_scale_factor)
12781291
end
12791292

1293+
println("vnom_kv = ", math_obj["vnom_kv"])
1294+
12801295
# Set p and q (w/ multinetwork support)
12811296
if nw==0
12821297
math_obj["pd"] = fill(get(ravens_obj, "EnergyConsumer.p", 0.0) / (power_scale_factor*nphases), nphases)
@@ -1296,8 +1311,8 @@ function _map_ravens2math_energy_consumer!(data_math::Dict{String,<:Any}, data_r
12961311
reactive_power[id] = get(phase_info, "EnergyConsumerPhase.q", 0.0)
12971312
end
12981313
else
1299-
active_power = fill(get(ravens_obj, "EnergyConsumer.p", 0.0) / (power_scale_factor*nphases), nphases)
1300-
reactive_power = fill(get(ravens_obj, "EnergyConsumer.q", 0.0) / (power_scale_factor*nphases), nphases)
1314+
active_power = fill(get(ravens_obj, "EnergyConsumer.p", 0.0) / (nphases), nphases)
1315+
reactive_power = fill(get(ravens_obj, "EnergyConsumer.q", 0.0) / (nphases), nphases)
13011316
end
13021317

13031318
schdl_name = _extract_name(ravens_obj["EnergyConsumer.LoadProfile"])
@@ -1340,9 +1355,10 @@ function _map_ravens2math_energy_consumer!(data_math::Dict{String,<:Any}, data_r
13401355

13411356
# Multipliers instead of actual values
13421357
if haskey(schdl, "BasicIntervalSchedule.value1Unit")
1343-
math_obj["pd"] = get(schdl["EnergyConsumerSchedule.RegularTimePoints"][nw], "RegularTimePoint.value1", 1.0) .* active_power ./ power_scale_factor
1344-
math_obj["qd"] = get(schdl["EnergyConsumerSchedule.RegularTimePoints"][nw], "RegularTimePoint.value1", 1.0) .* reactive_power ./ power_scale_factor
1358+
math_obj["pd"] = Float64.(get(schdl["EnergyConsumerSchedule.RegularTimePoints"][nw], "RegularTimePoint.value1", 1.0) .* active_power ./ power_scale_factor)
1359+
math_obj["qd"] = Float64.(get(schdl["EnergyConsumerSchedule.RegularTimePoints"][nw], "RegularTimePoint.value1", 1.0) .* reactive_power ./ power_scale_factor)
13451360
end
1361+
#println(math_obj["pd"], "... ...", math_obj["qd"])
13461362

13471363
else
13481364
@error("No timeseries, load forecast or multinetwork information found!")
@@ -1394,6 +1410,8 @@ function _map_ravens2math_energy_consumer!(data_math::Dict{String,<:Any}, data_r
13941410
"to" => "load.$(math_obj["index"])",
13951411
"unmap_function" => "_map_math2eng_load!",
13961412
))
1413+
push!(data_math["settings"]["vnom_kv"], string(math_obj["load_bus"]) => math_obj["vnom_kv"])
1414+
13971415
end
13981416
end
13991417

@@ -1458,9 +1476,11 @@ function _map_ravens2math_energy_source!(data_math::Dict{String,<:Any}, data_rav
14581476
if haskey(ravens_obj, "ConductingEquipment.BaseVoltage")
14591477
base_voltage_ref = _extract_name(ravens_obj["ConductingEquipment.BaseVoltage"])
14601478
vnom = data_ravens["BaseVoltage"][base_voltage_ref]["BaseVoltage.nominalVoltage"] / sqrt(nconductors)
1479+
println("vnom = ", vnom)
14611480
data_math["settings"]["vbases_default"][connectivity_node] = vnom / voltage_scale_factor
14621481
else
14631482
vnom = ravens_obj["EnergySource.nominalVoltage"] / sqrt(nconductors)
1483+
println("vnom = ", vnom)
14641484
data_math["settings"]["vbases_default"][connectivity_node] = vnom / voltage_scale_factor
14651485
end
14661486

@@ -1489,6 +1509,7 @@ function _map_ravens2math_energy_source!(data_math::Dict{String,<:Any}, data_rav
14891509
# Check for impedance and adjust bus type if necessary
14901510
map_to = "gen.$(math_obj["index"])"
14911511
if !all(isapprox.(rs, 0)) && !all(isapprox.(xs, 0))
1512+
#if 2>1
14921513
bus_conn["bus_type"] = 1 # Virtual bus becomes the new slack bus
14931514

14941515
bus_obj = Dict(
@@ -1557,7 +1578,9 @@ function _map_ravens2math_energy_source!(data_math::Dict{String,<:Any}, data_rav
15571578
"to" => map_to,
15581579
"unmap_function" => "_map_math2eng_voltage_source!",
15591580
))
1581+
push!(data_math["settings"]["vnom_kv"], string(math_obj["gen_bus"]) => vnom / voltage_scale_factor_sqrt3)
15601582
end
1583+
15611584
end
15621585

15631586

@@ -1663,6 +1686,7 @@ function _map_ravens2math_rotating_machine!(data_math::Dict{String,<:Any}, data_
16631686
"to" => "gen.$(math_obj["index"])",
16641687
"unmap_function" => "_map_math2eng_generator!",
16651688
))
1689+
push!(data_math["settings"]["vnom_kv"], string(math_obj["gen_bus"]) => math_obj["vbase"])
16661690
end
16671691

16681692
end

src/data_model/units.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@ function _rebase_pu_branch!(branch::Dict{String,<:Any}, vbase::Real, sbase::Real
421421
z_old = 1
422422
vbase_old = 1.0
423423
else
424+
#println("1. vbase = ", branch["vbase"])
424425
vbase_old = branch["vbase"]
425426
z_old = vbase_old^2/sbase_old*voltage_scale_factor
426427
end
@@ -441,6 +442,8 @@ function _rebase_pu_branch!(branch::Dict{String,<:Any}, vbase::Real, sbase::Real
441442

442443
# save new vbase
443444
branch["vbase"] = vbase
445+
#println("2. vbase = ", branch["vbase"])
446+
444447
end
445448

446449

@@ -519,6 +522,8 @@ function _rebase_pu_load!(load::Dict{String,<:Any}, vbase::Real, sbase::Real, sb
519522

520523
vbase_old = get(load, "vbase", 1.0)
521524
vbase_scale = vbase_old/vbase
525+
println("vnom_kv = ", get(load, "vnom_kv", "missing"))
526+
println("vbase = ", vbase)
522527
_scale(load, "vnom_kv", vbase_scale)
523528

524529
sbase_scale = sbase_old/sbase

0 commit comments

Comments
 (0)