Skip to content

Commit

Permalink
implement parser of 3W XFRM to system
Browse files Browse the repository at this point in the history
  • Loading branch information
rodrigomha committed Jan 15, 2025
1 parent 4b8c134 commit 8c0e02f
Showing 1 changed file with 93 additions and 2 deletions.
95 changes: 93 additions & 2 deletions src/parsers/power_models_data.jl
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ function System(pm_data::PowerModelsData; kwargs...)
read_shunt!(sys, data, bus_number_to_bus; kwargs...)
read_dcline!(sys, data, bus_number_to_bus; kwargs...)
read_storage!(sys, data, bus_number_to_bus; kwargs...)
read_3w_transformer!(sys, data, bus_number_to_bus; kwargs...)
if runchecks
check(sys)
end
Expand Down Expand Up @@ -129,6 +130,19 @@ function _get_pm_branch_name(device_dict, bus_f::ACBus, bus_t::ACBus)
return "$(get_name(bus_f))-$(get_name(bus_t))-i_$index"
end

"""
Internal branch name retreval from pm2ps_dict
"""
function _get_pm_3w_name(
device_dict,
bus_primary::ACBus,
bus_secondary::ACBus,
bus_tertiary::ACBus,
)
ckt = device_dict["circuit"]
return "$(get_name(bus_primary))-$(get_name(bus_secondary))-$(get_name(bus_tertiary))-i_$ckt"
end

"""
Creates a PowerSystems.ACBus from a PowerSystems bus dictionary
"""
Expand Down Expand Up @@ -733,6 +747,56 @@ function make_transformer_2w(name::String, d::Dict, bus_f::ACBus, bus_t::ACBus)
)
end

function make_3w_transformer(
name::String,
d::Dict,
bus_primary::ACBus,
bus_secondary::ACBus,
bus_tertiary::ACBus,
star_bus::ACBus,
)
pf = get(d, "pf", 0.0)
qf = get(d, "qf", 0.0)
return Transformer3W(;
name = name,
available = d["available"],
primary_secondary_arc = Arc(bus_primary, bus_secondary),
secondary_tertiary_arc = Arc(bus_secondary, bus_tertiary),
primary_tertiary_arc = Arc(bus_primary, bus_tertiary),
star_bus = star_bus,
active_power_flow_primary = pf,
reactive_power_flow_primary = qf,
active_power_flow_secondary = pf,
reactive_power_flow_secondary = qf,
active_power_flow_tertiary = pf,
reactive_power_flow_tertiary = qf,
r_primary = d["r_primary"],
x_primary = d["x_primary"],
r_secondary = d["r_secondary"],
x_secondary = d["x_secondary"],
r_tertiary = d["r_tertiary"],
x_tertiary = d["x_tertiary"],
rating = d["rating"],
r_12 = d["r_12"],
x_12 = d["x_12"],
r_23 = d["r_23"],
x_23 = d["x_23"],
r_13 = d["r_13"],
x_13 = d["x_13"],
g = d["g"],
b = d["b"],
primary_turns_ratio = d["primary_turns_ratio"],
secondary_turns_ratio = d["secondary_turns_ratio"],
tertiary_turns_ratio = d["tertiary_turns_ratio"],
available_primary = d["available_primary"],
available_secondary = d["available_secondary"],
available_tertiary = d["available_tertiary"],
rating_primary = d["rating_primary"],
rating_secondary = d["rating_secondary"],
rating_tertiary = d["rating_tertiary"],
)
end

function make_tap_transformer(name::String, d::Dict, bus_f::ACBus, bus_t::ACBus)
pf = get(d, "pf", 0.0)
qf = get(d, "qf", 0.0)
Expand Down Expand Up @@ -808,6 +872,33 @@ function read_branch!(
end
end

function read_3w_transformer!(
sys::System,
data::Dict,
bus_number_to_bus::Dict{Int, ACBus};
kwargs...,
)
@info "Reading 3W transformer data"
if !haskey(data, "3w_transformer")
@info "There is no 3W transformer data in this file"
return
end
_get_name = get(kwargs, :xfrm_3w_name_formatter, _get_pm_3w_name)

for (d_key, d) in data["3w_transformer"]
bus_primary = bus_number_to_bus[d["bus_primary"]]
bus_secondary = bus_number_to_bus[d["bus_secondary"]]
bus_tertiary = bus_number_to_bus[d["bus_tertiary"]]
star_bus = bus_number_to_bus[d["star_bus"]]

name = _get_name(d, bus_primary, bus_secondary, bus_tertiary)
value =
make_3w_transformer(name, d, bus_primary, bus_secondary, bus_tertiary, star_bus)

add_component!(sys, value; skip_validation = SKIP_PM_VALIDATION)
end
end

function make_dcline(name::String, d::Dict, bus_f::ACBus, bus_t::ACBus)
return TwoTerminalHVDCLine(;
name = name,
Expand Down Expand Up @@ -871,9 +962,9 @@ function read_shunt!(

for (d_key, d) in data["shunt"]
d["name"] = get(d, "name", d_key)
@show name = _get_name(d)
name = _get_name(d)
bus = bus_number_to_bus[d["shunt_bus"]]
@show shunt = make_shunt(name, d, bus)
shunt = make_shunt(name, d, bus)

add_component!(sys, shunt; skip_validation = SKIP_PM_VALIDATION)
end
Expand Down

0 comments on commit 8c0e02f

Please sign in to comment.