Skip to content
Open
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
59 changes: 58 additions & 1 deletion src/models/supplemental_accessors.jl
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,67 @@ Returns 1/(R + jX) where R is resistance and X is reactance.
"""
get_series_admittance(b::ACTransmission) = 1 / (get_r(b) + get_x(b) * 1im)

"""
Calculate the series admittance of a [`PhaseShiftingTransformer`](@ref) accounting for the tap ratio.
For a phase-shifting transformer, the series admittance is calculated as the inverse of the
complex impedance modified by the tap ratio, following the same pattern as the susceptance calculation:
Y = 1/(tap * (R + jX)).
The phase angle α affects the admittance matrix construction but not the series impedance magnitude directly.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"The phase angle α affects the admittance matrix construction but not the series admittance value directly."


See also: [`get_series_susceptance`](@ref)
"""
function get_series_admittance(b::PhaseShiftingTransformer)
tap = get_tap(b)
Z_series = get_r(b) + get_x(b) * 1im
return 1 / (tap * Z_series)
end

"""
Calculate the series admittance of a [`TapTransformer`](@ref) accounting for the tap ratio.
For a tap transformer, the series admittance is calculated as the inverse of the
complex impedance modified by the tap ratio, following the same pattern as the susceptance calculation:
Y = 1/(tap * (R + jX)).

See also: [`get_series_susceptance`](@ref)
"""
function get_series_admittance(b::TapTransformer)
tap = get_tap(b)
Z_series = get_r(b) + get_x(b) * 1im
return 1 / (tap * Z_series)
end

"""
Calculate the series admittances of a [`PhaseShiftingTransformer3W`](@ref) as three complex values
(for each of the 3 branches) accounting for turns ratios.
For each winding, the series admittance is calculated following the same pattern as the susceptance calculation:
Yi = 1/(turns_ratio_i * (Ri + jXi)).
The phase shift angles affect the admittance matrix construction but not the series impedance magnitudes directly.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"The phase shift angles affect the admittance matrix construction but not the series admittance values directly."


See also: [`get_series_admittance`](@ref) for 2-winding transformers
"""
function get_series_admittances(b::PhaseShiftingTransformer3W)
# Get the turns ratios for each winding
tap_primary = get_primary_turns_ratio(b)
tap_secondary = get_secondary_turns_ratio(b)
tap_tertiary = get_tertiary_turns_ratio(b)

# Calculate series impedances
Z1 = get_r_primary(b) + get_x_primary(b) * 1im
Z2 = get_r_secondary(b) + get_x_secondary(b) * 1im
Z3 = get_r_tertiary(b) + get_x_tertiary(b) * 1im

# Calculate admittances accounting for turns ratios (consistent with susceptance pattern)
Y1 = 1 / (tap_primary * Z1)
Y2 = 1 / (tap_secondary * Z2)
Y3 = 1 / (tap_tertiary * Z3)

return (Y1, Y2, Y3)
end

function get_series_admittance(::Union{PhaseShiftingTransformer3W, Transformer3W})
throw(
ArgumentError(
"get_series_admittance not implemented for multi-winding transformers.",
"get_series_admittance not implemented for multi-winding transformers, use get_series_admittances instead.",
),
)
end
Expand Down
Loading