Constraints
PowerModelsDistribution.constraint_M_psd
— MethodFor rectangular coordinates of a complex matrix M=Mre+im*Mim, this function applies constraints equivalent to requiring that M itself is PSD.
PowerModelsDistribution.constraint_SWL_psd
— MethodTake a multi-conductor voltage variable V and a current variable I. The associated power is then defined as S = VI^H Define the lifted variables as W and L as W = VV^H, L = I*I^H Then, it is equally valid that [W S; S^H L] ∈ PSDCone, rank([W S; S^H L])=1 This function adds this PSD constraint for the rectangular coordinates of S, W and L.
PowerModelsDistribution.constraint_capacitor_on_off
— Methodconstraint_capacitor_on_off(pm::AbstractUnbalancedACPModel, i::Int; nw::Int=nw_id_default)
Add constraints to model capacitor switching
\[\begin{align} &\text{kvar control (ON): } q-q_\text{on} ≤ M_q ⋅ z - ϵ ⋅ (1-z), \\ &\text{kvar control (OFF): } q-q_\text{off} ≥ -M_q ⋅ (1-z) - ϵ ⋅ z, \\ &\text{voltage control (ON): } v-v_\text{min} ≥ -M_v ⋅ z + ϵ ⋅ (1-z), \\ &\text{voltage control (OFF): } v-v_\text{max} ≤ M_v ⋅ (1-z) - ϵ ⋅ z. \end{align}\]
PowerModelsDistribution.constraint_capacitor_on_off
— Methodconstraint_capacitor_on_off(pm::AbstractUnbalancedACRModel, i::Int; nw::Int=nw_id_default)
Add constraints to model capacitor switching
\[\begin{align} &\text{kvar control (ON): } q-q_\text{on} ≤ M_q ⋅ z - ϵ ⋅ (1-z), \\ &\text{kvar control (OFF): } q-q_\text{off} ≥ -M_q ⋅ (1-z) - ϵ ⋅ z, \\ &\text{voltage control (ON): } v_r^2 + v_i^2 - v_\text{min}^2 ≥ -M_v ⋅ z + ϵ ⋅ (1-z), \\ &\text{voltage control (OFF): } v_r^2 + v_i^2 - v_\text{max}^2 ≤ M_v ⋅ (1-z) - ϵ ⋅ z. \end{align}\]
PowerModelsDistribution.constraint_capacitor_on_off
— Methodconstraint_capacitor_on_off(pm::FBSUBFPowerModel, i::Int; nw::Int=nw_id_default)
Add constraints to model capacitor switching
\[\begin{align} &\text{kvar control (ON): } q-q_\text{on} ≤ M_q ⋅ z - ϵ ⋅ (1-z), \\ &\text{kvar control (OFF): } q-q_\text{off} ≥ -M_q ⋅ (1-z) - ϵ ⋅ z, \\ &\text{voltage control (ON): } 2 ⋅ v_{r0} ⋅ v_r + 2 ⋅ v_{i0} ⋅ v_i - v_{r0}^2 - v_{i0}^2 - v_\text{min}^2 ≥ -M_v ⋅ z + ϵ ⋅ (1-z), \\ &\text{voltage control (OFF): } 2 ⋅ v_{r0} ⋅ v_r + 2 ⋅ v_{i0} ⋅ v_i - v_{r0}^2 - v_{i0}^2 - v_\text{max}^2 ≤ M_v ⋅ (1-z) - ϵ ⋅ z. \end{align}\]
PowerModelsDistribution.constraint_capacitor_on_off
— Methodconstraint_capacitor_on_off(pm::FOTRUPowerModel, i::Int; nw::Int=nw_id_default)
Add constraints to model capacitor switching similar to FBSUBFPowerModel
PowerModelsDistribution.constraint_capacitor_on_off
— Methodconstraint_capacitor_on_off(pm::LPUBFDiagModel, i::Int; nw::Int=nw_id_default)
Add constraints to model capacitor switching
\[\begin{align} &\text{kvar control (ON): } q-q_\text{on} ≤ M_q ⋅ z - ϵ ⋅ (1-z), \\ &\text{kvar control (OFF): } q-q_\text{off} ≥ -M_q ⋅ (1-z) - ϵ ⋅ z, \\ &\text{voltage control (ON): } w - v_\text{min}^2 ≥ -M_v ⋅ z + ϵ ⋅ (1-z), \\ &\text{voltage control (OFF): } w - v_\text{max}^2 ≤ M_v ⋅ (1-z) - ϵ ⋅ z. \end{align}\]
PowerModelsDistribution.constraint_mc_branch_current_series_product_hermitian
— MethodPowerModelsDistribution.constraint_mc_bus_voltage_balance
— MethodImpose all balance related constraints for which key present in data model of bus. For a discussion of sequence components and voltage unbalance factor (VUF), see @INPROCEEDINGS{girigoudarmolzahnroald-2019, author={K. Girigoudar and D. K. Molzahn and L. A. Roald}, booktitle={submitted}, title={{Analytical and Empirical Comparisons of Voltage Unbalance Definitions}}, year={2019}, month={}, url={https://molzahn.github.io/pubs/girigoudarmolzahnroald-2019.pdf} }
PowerModelsDistribution.constraint_mc_bus_voltage_drop
— MethodDefines voltage drop over a branch, linking from and to side complex voltage
PowerModelsDistribution.constraint_mc_bus_voltage_drop
— MethodPowerModelsDistribution.constraint_mc_bus_voltage_magnitude_ll
— MethodPowerModelsDistribution.constraint_mc_bus_voltage_magnitude_negative_sequence
— Methoda = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2
PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off
— Methodon/off bus voltage magnitude constraint
PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off
— Methodon/off bus voltage magnitude constraint
PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_on_off
— Methodon/off voltage magnitude constraint
PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_positive_sequence
— Methoda = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2
PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off
— Methodon/off bus voltage magnitude squared constraint for relaxed formulations
PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_sqr_on_off
— Methodon/off voltage magnitude squared constraint for relaxed formulations
PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_vuf
— Methoda = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2
PowerModelsDistribution.constraint_mc_bus_voltage_magnitude_zero_sequence
— Methoda = exp(im2π/3) U+ = (1Ua + aUb a^2Uc)/3 U- = (1Ua + a^2Ub aUc)/3 vuf = |U-|/|U+| |U-| <= vufmax|U+| |U-|^2 <= vufmax^2*|U+|^2
PowerModelsDistribution.constraint_mc_bus_voltage_on_off
— Methodon/off bus voltage constraint for relaxed forms
PowerModelsDistribution.constraint_mc_bus_voltage_on_off
— Methodbus voltage on/off constraint for load shed problem
PowerModelsDistribution.constraint_mc_bus_voltage_on_off
— Methodbus voltage on/off constraint for load shed problem
PowerModelsDistribution.constraint_mc_bus_voltage_on_off
— Methodon/off bus voltage constraint for DCP formulation, nothing to do
PowerModelsDistribution.constraint_mc_bus_voltage_on_off
— Methodon/off constraint for bus voltages
PowerModelsDistribution.constraint_mc_current_balance
— MethodKirchhoff's current law applied to buses sum(cr + im*ci) = 0
PowerModelsDistribution.constraint_mc_current_balance
— MethodPowerModelsDistribution.constraint_mc_current_from
— MethodDefines how current distributes over series and shunt impedances of a pi-model branch
PowerModelsDistribution.constraint_mc_current_from
— MethodPowerModelsDistribution.constraint_mc_current_limit
— MethodPowerModelsDistribution.constraint_mc_current_limit
— MethodBounds the current magnitude at both from and to side of a branch cr[f_idx]^2 + ci[f_idx]^2 <= c_rating_a^2
cr[t_idx]^2 + ci[t_idx]^2 <= c_rating_a^2
PowerModelsDistribution.constraint_mc_current_to
— MethodDefines how current distributes over series and shunt impedances of a pi-model branch
PowerModelsDistribution.constraint_mc_current_to
— MethodPowerModelsDistribution.constraint_mc_gen_active_bounds
— Methodpmin <= Re(v*cg') <= pmax
PowerModelsDistribution.constraint_mc_gen_active_bounds
— Methoddefines limits on active power output of a generator where bounds can't be used
PowerModelsDistribution.constraint_mc_gen_power_on_off
— Methodon/off constraint for generators
PowerModelsDistribution.constraint_mc_gen_power_on_off
— Methodon/off constraint for generators
PowerModelsDistribution.constraint_mc_gen_power_on_off
— MethodPowerModelsDistribution.constraint_mc_gen_power_setpoint_real
— Methodpg[i] == pg
PowerModelsDistribution.constraint_mc_gen_power_setpoint_real
— MethodPowerModelsDistribution.constraint_mc_gen_power_setpoint_real
— Methodgenerator active power setpoint constraint
PowerModelsDistribution.constraint_mc_gen_reactive_bounds
— Methodqmin <= Im(v*cg') <= qmax
PowerModelsDistribution.constraint_mc_gen_reactive_bounds
— Methoddefines limits on reactive power output of a generator where bounds can't be used
PowerModelsDistribution.constraint_mc_generator_power
— MethodOnly support wye-connected generators.
PowerModelsDistribution.constraint_mc_generator_power
— MethodDELTA When connected in delta, the load power gives the reference in the delta reference frame. This means sd1 = vab.conj(iab) = (va-vb).conj(iab) We can relate this to the per-phase power by sna = va.conj(ia) = va.conj(iab-ica) = va.conj(conj(sab/vab) - conj(sca/vca)) = va.(sab/(va-vb) - sca/(vc-va)) So for delta, sn is constrained indirectly.
PowerModelsDistribution.constraint_mc_generator_power
— MethodLink the current and power withdrawn by a generator at the bus through a PSD constraint. The rank-1 constraint is dropped in this formulation.
PowerModelsDistribution.constraint_mc_generator_power_delta
— MethodPowerModelsDistribution.constraint_mc_generator_power_delta
— MethodPowerModelsDistribution.constraint_mc_generator_power_delta
— Methoddelta connected generator setpoint constraint for IVR formulation
PowerModelsDistribution.constraint_mc_generator_power_wye
— MethodPowerModelsDistribution.constraint_mc_generator_power_wye
— Methodwye connected generator setpoint constraint for IVR formulation
PowerModelsDistribution.constraint_mc_load_current_delta
— MethodWe want to express sab = cp.|vab|+im.cq.|vab| iab = conj(sab/vab) = |vab|.(cq-im.cq)/conj(vab) = (1/|vab|).(cp-im.cq)*vab idem for ibc and ica And then sa = va.conj(ia) = va.conj(iab-ica) idem for sb and sc
PowerModelsDistribution.constraint_mc_load_current_delta
— Methodconstraint_mc_load_current_delta(pm::FOTPUPowerModel, nw::Int, load_id::Int, load_bus_id::Int, cp::Vector, cq::Vector)
No loads require a current variable. Delta loads are zero-order approximations and wye loads are first-order approximations around the initial operating point.
PowerModelsDistribution.constraint_mc_load_power
— MethodCreates the constraints modelling the (relaxed) voltage-dependent loads.
PowerModelsDistribution.constraint_mc_load_power
— MethodOnly support wye-connected, constant-power loads.
PowerModelsDistribution.constraint_mc_load_power
— MethodCONSTANT POWER Fixes the load power sd. sd = [sd1, sd2, sd3] What is actually fixed, depends on whether the load is connected in delta or wye. When connected in wye, the load power equals the per-phase power sn drawn at the bus to which the load is connected. sd1 = va.conj(ia) = sn_a
CONSTANT CURRENT Sets the active and reactive load power sd to be proportional to the the voltage magnitude. pd = cp.|vm| qd = cq.|vm| sd = cp.|vm| + j.cq.|vm|
CONSTANT IMPEDANCE Sets the active and reactive power drawn by the load to be proportional to the square of the voltage magnitude. pd = cp.|vm|^2 qd = cq.|vm|^2 sd = cp.|vm|^2 + j.cq.|vm|^2
DELTA When connected in delta, the load power gives the reference in the delta reference frame. This means sd1 = vab.conj(iab) = (va-vb).conj(iab) We can relate this to the per-phase power by sna = va.conj(ia) = va.conj(iab-ica) = va.conj(conj(sab/vab) - conj(sca/vca)) = va.(sab/(va-vb) - sca/(vc-va)) So for delta, sn is constrained indirectly.
PowerModelsDistribution.constraint_mc_load_power
— Methodconstraint_mc_load_power(pm::FBSUBFPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)
Load model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.
\[\begin{align} &\text{Initial operating point: } v_{rd}^0 + j ⋅ v_{id}^0~\text{where}~{(v_m^0)}^2 = {(v_{rd}^0)}^2 + {(v_{id}^0)}^2\\ &\text{Constant power: } P^d = P^{d0},~Q^d = Q^{d0} \\ &\text{Constant impedance: } P^d = a ⋅ \left(2\cdot v_{rd} ⋅ v_{rd}^0+2 ⋅ v_{id}*v_{id}^0-{(v_{m}^0)}^2\right),\\ & Q^d = b ⋅ \left(2\cdot v_{rd} ⋅ v_{rd}^0+2 ⋅ v_{id}*v_{id}^0-{(v_{m}^0)}^2\right), \\ &\text{Constant current: } P^d = a ⋅ \left(v_{m}^0 + \frac{v_{rd} ⋅ v_{rd}^0+ v_{id}*v_{id}^0-{(v_{m}^0)}^2}{v_{m}^0} \right),\\ & Q^d = b ⋅ \left(v_{m}^0 + \frac{v_{rd} ⋅ v_{rd}^0+ v_{id}*v_{id}^0-{(v_{m}^0)}^2}{v_{m}^0} \right). \end{align}\]
PowerModelsDistribution.constraint_mc_load_power
— Methodconstraint_mc_load_power(pm::FOTPUPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)
Load model is linearized around initial operating point. Wye loads are first-order and delta loads are zero-order approximations.
\[\begin{align} &\text{Initial operating point: } v_{m0} \angle v_{a0}\\ &\text{Constant power: } P^d = P^{d0},~Q^d = Q^{d0} \\ &\text{Constant impedance: } P^d = a \cdot \left({v_{m0}}^2+2 \cdot v_{m0} \cdot (v_m-v_{m0})\right),\\ & Q^d = b \cdot \left({v_{m0}}^2+2 \cdot v_{m0} \cdot (v_m-v_{m0})\right), \\ &\text{Constant current: } P^d = a \cdot v_m,\\ & Q^d = b \cdot v_m. \end{align}\]
PowerModelsDistribution.constraint_mc_load_power
— Methodconstraint_mc_load_power(pm::FOTRUPowerModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)
Load model is linearized around initial operating point similar to FBSUBFPowerModel.
PowerModelsDistribution.constraint_mc_load_power
— Methodconstraint_mc_load_power(pm::LPUBFDiagModel, load_id::Int; nw::Int=nw_id_default, report::Bool=true)
Delta/voltage-dependent load models for LPUBFDiagModel. Delta loads use the auxilary power variable (X). The constant current load model is derived by linearizing around the flat-start voltage solution.
\[\begin{align} &\text{Constant power:} \Rightarrow P_i^d = P_i^{d0},~Q_i^d = Q_i^{d0} ~\forall i \in L \\ &\text{Constant impedance (Wye):} \Rightarrow P_i^d = a_i \cdot w_i,~Q_i^d = b_i \cdot w_i ~\forall i \in L \\ &\text{Constant impedance (Delta):} \Rightarrow P_i^d = 3\cdot a_i \cdot w_i,~Q_i^d = 3\cdot b_i \cdot w_i ~\forall i \in L \\ &\text{Constant current (Wye):} \Rightarrow P_i^d = \frac{a_i}{2}\cdot \left( 1+w_i \right),~Q_i^d = \frac{b_i}{2}\cdot \left( 1+w_i \right) \forall i \in L \\ &\text{Constant current (Delta):} \Rightarrow P_i^d = \frac{\sqrt{3} \cdot a_i}{2}\cdot \left( 1+w_i \right),~Q_i^d = \frac{\sqrt{3} \cdot b_i}{2}\cdot \left( 1+w_i \right) \forall i \in L \end{align}\]
PowerModelsDistribution.constraint_mc_load_power
— MethodCreates the constraints modelling the (relaxed) voltage-dependent loads for the matrix KCL formulation.
PowerModelsDistribution.constraint_mc_load_power_delta
— MethodPowerModelsDistribution.constraint_mc_load_power_delta
— MethodPowerModelsDistribution.constraint_mc_load_power_delta
— Methoddelta connected load setpoint constraint for IVR formulation
PowerModelsDistribution.constraint_mc_load_power_wye
— MethodPowerModelsDistribution.constraint_mc_load_power_wye
— MethodPowerModelsDistribution.constraint_mc_load_power_wye
— Methodwye connected load setpoint constraint for IVR formulation
PowerModelsDistribution.constraint_mc_model_current
— MethodDefines relationship between branch (series) power flow, branch (series) current and node voltage magnitude
PowerModelsDistribution.constraint_mc_model_current
— MethodPowerModelsDistribution.constraint_mc_model_current
— MethodDefines relationship between branch (series) power flow, branch (series) current and node voltage magnitude
PowerModelsDistribution.constraint_mc_model_current
— MethodDefines relationship between branch (series) power flow, branch (series) current and node voltage magnitude
PowerModelsDistribution.constraint_mc_model_current
— MethodDefines relationship between branch (series) power flow, branch (series) current and node voltage magnitude
PowerModelsDistribution.constraint_mc_model_voltage
— Methodnothing to do, these models do not have complex voltage constraints
PowerModelsDistribution.constraint_mc_model_voltage
— Methoddo nothing by default
PowerModelsDistribution.constraint_mc_model_voltage
— MethodPowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference
— MethodDefines voltage drop over a branch, linking from and to side voltage
PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference
— MethodPowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference
— Methodconstraint_mc_model_voltage_magnitude_difference(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, b_sh_fr::Matrix{<:Real})
Voltage drop over a branch linearized around initial operating point (forward sweep)
\[\begin{align} &\text{Initial operating points: } (v_{r0}^{fr} + j ⋅ v_{i0}^{fr}),~ (v_{r0}^{to} + j ⋅ v_{i0}^{to})\\ &\text{Series active power flow: } p_s^{fr} = p^{fr} - g_{sh}^{fr} ⋅ {(v_{m0}^{fr})}^2,\\ &\text{Series reactive power flow: } q_s^{fr} = q^{fr} + b_{sh}^{fr} ⋅ {(v_{m0}^{fr})}^2,\\ &\text{Series real current flow: } cr_s^{fr} = \frac{(p_s^{fr} ⋅ v_{r0}^{fr} + q_s^{fr} ⋅ v_{i0}^{fr})}{{(v_{m0}^{fr})}^2},\\ &\text{Series imaginary current flow: } ci_s^{fr} = \frac{(-q_s^{fr} ⋅ v_{r0}^{fr} + p_s^{fr} ⋅ v_{i0}^{fr})}{{(v_{m0}^{fr})}^2},\\ &\text{Series real voltage drop: } v_{r}^{to} = v_{r}^{fr} - r ⋅ cr_s^{fr} + x ⋅ ci_s^{fr} ,\\ &\text{Series imaginary voltage drop: } v_{i}^{to} = v_{i}^{fr} - x ⋅ cr_s^{fr} - r ⋅ ci_s^{fr}. \end{align}\]
PowerModelsDistribution.constraint_mc_model_voltage_magnitude_difference
— MethodDefines voltage drop over a branch, linking from and to side voltage
PowerModelsDistribution.constraint_mc_network_power_balance
— MethodPowerModelsDistribution.constraint_mc_network_power_balance
— Methodensures that power generation and demand are balanced
PowerModelsDistribution.constraint_mc_ohms_yt_from
— MethodCreates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)
PowerModelsDistribution.constraint_mc_ohms_yt_from
— MethodCreates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)
p_fr == g[c,c] * vm_fr[c]^2 +
sum( g[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) +
b[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c) +
sum(-g[c,d]*vm_fr[c]*vm_to[d]*cos(va_fr[c]-va_to[d]) +
-b[c,d]*vm_fr[c]*vm_to[d]*sin(va_fr[c]-va_to[d]) for d in conductor_ids(pm))
+ g_fr[c,c] * vm_fr[c]^2 +
sum( g_fr[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) +
b_fr[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c)
)
q_fr == -b[c,c] *vm_fr[c]^2 -
sum( b[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) -
g[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c) -
sum(-b[c,d]*vm_fr[c]*vm_to[d]*cos(va_fr[c]-va_to[d]) +
g[c,d]*vm_fr[c]*vm_to[d]*sin(va_fr[c]-va_to[d]) for d in conductor_ids(pm))
-b_fr[c,c] *vm_fr[c]^2 -
sum( b_fr[c,d]*vm_fr[c]*vm_fr[d]*cos(va_fr[c]-va_fr[d]) -
g_fr[c,d]*vm_fr[c]*vm_fr[d]*sin(va_fr[c]-va_fr[d]) for d in conductor_ids(pm) if d != c)
)
PowerModelsDistribution.constraint_mc_ohms_yt_from
— MethodCreates Ohms constraints
sfr = vfr.conj(Y(vfr-vto)) sfr = (vrfr+imvi_fr).(G-imB)([vrfr-vrto]-im[vifr-vito]) sfr = (vrfr+imvifr).([Gvrfr-Gvr_to-Bvifr+B*vito]-im[Gvifr-G*vito+Bvr_fr-Bvr_to])
PowerModelsDistribution.constraint_mc_ohms_yt_from
— MethodCreates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)
p[f_idx] == -b*(t[f_bus] - t[t_bus])
PowerModelsDistribution.constraint_mc_ohms_yt_from
— Methodohms constraint for branches on the from-side
PowerModelsDistribution.constraint_mc_ohms_yt_from
— Methodconstraint_mc_ohms_yt_from(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})
Ohm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.
PowerModelsDistribution.constraint_mc_ohms_yt_from
— Methodconstraint_mc_ohms_yt_from(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_fr::Matrix{<:Real}, B_fr::Matrix{<:Real})
Creates Ohms constraints by linearizing (similar to power balance constraints) around initial operating point.
PowerModelsDistribution.constraint_mc_ohms_yt_from
— Methodnothing to do, no voltage angle variables
PowerModelsDistribution.constraint_mc_ohms_yt_to
— MethodCreates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)
PowerModelsDistribution.constraint_mc_ohms_yt_to
— MethodCreates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)
p[t_idx] == (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
q[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
PowerModelsDistribution.constraint_mc_ohms_yt_to
— MethodCreates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)
p[t_idx] == (g+g_to)*v[t_bus]^2 + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[t_bus]-t[f_bus])) + (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
q[t_idx] == -(b+b_to)*v[t_bus]^2 - (-b*tr+g*ti)/tm*(v[t_bus]*v[f_bus]*cos(t[f_bus]-t[t_bus])) + (-g*tr-b*ti)/tm*(v[t_bus]*v[f_bus]*sin(t[t_bus]-t[f_bus]))
PowerModelsDistribution.constraint_mc_ohms_yt_to
— MethodDo nothing, this model is symmetric
PowerModelsDistribution.constraint_mc_ohms_yt_to
— Methodohms constraint for branches on the to-side
PowerModelsDistribution.constraint_mc_ohms_yt_to
— Methodconstraint_mc_ohms_yt_to(pm::FOTPUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix{<:Real}, B::Matrix{<:Real}, G_to::Matrix{<:Real}, B_to::Matrix{<:Real})
Ohm constraints similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating points.
PowerModelsDistribution.constraint_mc_ohms_yt_to
— Methodconstraint_mc_ohms_yt_to(pm::FOTRUPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, G::Matrix, B::Matrix, G_to::Matrix, B_to::Matrix)
Creates Ohms constraints (yt post fix indicates that Y and T values are in rectangular form)
PowerModelsDistribution.constraint_mc_ohms_yt_to
— Methodnothing to do, this model is symmetric
PowerModelsDistribution.constraint_mc_oltc_tap_fix
— MethodFor a variable tap transformer, fix the tap variables which are fixed. For example, an OLTC where the third phase is fixed, will have tap variables for all phases, but the third tap variable should be fixed.
PowerModelsDistribution.constraint_mc_power_balance
— MethodPowerModelsDistribution.constraint_mc_power_balance
— MethodPowerModelsDistribution.constraint_mc_power_balance
— MethodPowerModelsDistribution.constraint_mc_power_balance
— Methodpower balanace constraint with line shunts and transformers, active power only
PowerModelsDistribution.constraint_mc_power_balance
— MethodKCL including transformer arcs and load variables.
PowerModelsDistribution.constraint_mc_power_balance
— Methodconstraint_mc_power_balance(pm::FBSUBFPowerModel, nw::Int, i::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})
Power balance constraints similar to ACRUPowerModel with shunt current calculated using initial operating point.
PowerModelsDistribution.constraint_mc_power_balance
— Methodconstraint_mc_power_balance(pm::FOTPUPowerModel, nw::Int, i::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})
Power balance equations similar to ACPUPowerModel. The nonlinear functions are approximated around initial operating point.
\[\begin{align} &\text{Initial operating points: } v_{m0}^{t} \angle v_{a0}^t,~v_{m0}^u \angle v_{a0}^u\\ & {v_m^t}^2 \Rightarrow {v_{m0}^t}^2+2 \cdot v_{m0}^t \cdot (v_m^t-v_{m0}^t)\\ & v_m^t \cdot v_m^u \cdot \cos(v_a^t-v_a^u) \Rightarrow v_{m0}^t \cdot v_{m0}^u \cdot \cos(v_{a0}^t-v_{a0}^u) + \begin{bmatrix} v_{m0}^u \cdot \cos(v_{a0}^t-v_{a0}^u) \\ v_{m0}^t \cdot \cos(v_{a0}^t-v_{a0}^u) \\ -v_{m0}^t \cdot v_{m0}^u \cdot \sin(v_{a0}^t-v_{a0}^u) \\ v_{m0}^t \cdot v_{m0}^u \cdot \sin(v_{a0}^t-v_{a0}^u) \end{bmatrix}^\top \begin{bmatrix} v_m^t-v_{m0}^t \\ v_m^u-v_{m0}^u \\ v_a^t-v_{a0}^t \\ v_a^u-v_{a0}^u \end{bmatrix} \\ & v_m^t \cdot v_m^u \cdot \sin(v_a^t-v_a^u) \Rightarrow v_{m0}^t \cdot v_{m0}^u \cdot \sin(v_{a0}^t-v_{a0}^u) + \begin{bmatrix} v_{m0}^u \cdot \sin(v_{a0}^t-v_{a0}^u) \\ v_{m0}^t \cdot \sin(v_{a0}^t-v_{a0}^u) \\ v_{m0}^t \cdot v_{m0}^u \cdot \cos(v_{a0}^t-v_{a0}^u) \\ -v_{m0}^t \cdot v_{m0}^u \cdot \cos(v_{a0}^t-v_{a0}^u) \end{bmatrix}^\top \begin{bmatrix} v_m^t-v_{m0}^t \\ v_m^u-v_{m0}^u \\ v_a^t-v_{a0}^t \\ v_a^u-v_{a0}^u \end{bmatrix} \end{align}\]
PowerModelsDistribution.constraint_mc_power_balance
— Methodconstraint_mc_power_balance(pm::FOTRUPowerModel, nw::Int, i::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})
Power balance constraints similar to ACRUPowerModel with shunt current linearized around initial operating point.
\[\begin{align} &\text{Initial operating point: } (v_{r0} + j ⋅ v_{i0})\\ & v_{r} ⋅ v_{i} = v_{r0} ⋅ v_{i0} + v_{r} ⋅ v_{i0} + v_{r0} ⋅ v_{i} - 2 ⋅ v_{r0} ⋅ v_{i0} \end{align}\]
PowerModelsDistribution.constraint_mc_power_balance
— MethodPowerModelsDistribution.constraint_mc_power_balance
— MethodShunt handling in matrix form: I = Y.U S = U.I' = U.(Y.U)' = U.U'.Y' = W.Y' = (Wr+j.Wi)(G+jB)' = (Wr+j.Wi)(G'-j.B') = (Wr.G'+Wi.B')+j(-Wr.B'+Wi.G') P = Wr.G'+Wi.B' Q = -Wr.B'+Wi.G'
PowerModelsDistribution.constraint_mc_power_balance_capc
— Methodconstraint_mc_power_balance_capc(pm::AbstractUnbalancedACPModel, nw::Int, i::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})
Power balance constraints with capacitor control.
\[\begin{align} & Bs = z ⋅ bs, \\ &\text{capacitor ON: } z = 1, \\ &\text{capacitor OFF: } z = 0. \end{align}\]
PowerModelsDistribution.constraint_mc_power_balance_capc
— Methodconstraint_mc_power_balance_capc(pm::AbstractUnbalancedACRModel, nw::Int, i::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})
Power balance constraints with capacitor control.
\[\begin{align} & Bt = z ⋅ bs, \\ &\text{capacitor ON: } z = 1, \\ &\text{capacitor OFF: } z = 0. \end{align}\]
PowerModelsDistribution.constraint_mc_power_balance_capc
— Methodconstraint_mc_power_balance_capc(pm::AbstractUnbalancedPowerModel, i::Int; nw::Int=nw_id_default)
KCL with capacitor control variables.
PowerModelsDistribution.constraint_mc_power_balance_capc
— Methodconstraint_mc_power_balance_capc(pm::FBSUBFPowerModel, nw::Int, i::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})
Power balance constraints with capacitor control similar to ACRUPowerModel with shunt current calculated using initial operating point.
PowerModelsDistribution.constraint_mc_power_balance_capc
— Methodconstraint_mc_power_balance_capc(pm::FOTRUPowerModel, nw::Int, i::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})
Power balance constraints with capacitor control with shunt current calculated using initial operating point.
\[\begin{align} & B_t = b_s ⋅ z,~~ cq_{sh} = B_t ⋅ v, \\ &\text{FOT approximation: } B_t ⋅ v_r ⋅ v_i = B_{t0} ⋅ v_{r0} ⋅ v_{i0} + B_{t} ⋅ v_{r0} ⋅ v_{i0} + B_{t0} ⋅ v_{r} ⋅ v_{i0} + B_{t0} ⋅ v_{r0} ⋅ v_{i} - 3 ⋅ B_{t0} ⋅ v_{r0} ⋅ v_{i0} \end{align}\]
PowerModelsDistribution.constraint_mc_power_balance_capc
— Methodconstraint_mc_power_balance_capc(pm::LPUBFDiagModel, nw::Int, i::Int, terminals::Vector{Int}, grounded::Vector{Bool}, bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}}, bus_gens::Vector{Tuple{Int,Vector{Int}}}, bus_storage::Vector{Tuple{Int,Vector{Int}}}, bus_loads::Vector{Tuple{Int,Vector{Int}}}, bus_shunts::Vector{Tuple{Int,Vector{Int}}})
Power balance constraints with capacitor control linearized using McCormick envelopes
\[\begin{align} & B_s = b_s ⋅ z,~~ cq_{sh} = B_s ⋅ w, \\ &\text{Underestimator: } cq_{sh} ≥ B_s ⋅ w_\text{min},~~ cq_{sh} ≥ b_s ⋅ w + B_s ⋅ w_\text{max} - b_s ⋅ w_\text{max}\\ &\text{Overestimator: } cq_{sh} ≤ B_s ⋅ w_\text{max},~~ cq_{sh} ≤ b_s ⋅ w + B_s ⋅ w_\text{min} - b_s ⋅ w_\text{min}\\ \end{align}\]
PowerModelsDistribution.constraint_mc_power_balance_shed
— MethodKCL for load shed problem with transformers (AbstractWForms)
PowerModelsDistribution.constraint_mc_power_balance_shed
— MethodPowerModelsDistribution.constraint_mc_power_balance_shed
— MethodPowerModelsDistribution.constraint_mc_power_balance_shed
— Methodpower balance constraint with line shunts and transformers for load shed problem, DCP formulation
PowerModelsDistribution.constraint_mc_power_balance_shed
— MethodKCL for load shed problem with transformers
PowerModelsDistribution.constraint_mc_power_balance_shed_simple
— Methodpower balance constraint with line shunts and transformers for load shed problem, DCP formulation
PowerModelsDistribution.constraint_mc_power_balance_simple
— MethodPowerModelsDistribution.constraint_mc_power_balance_simple
— MethodPowerModelsDistribution.constraint_mc_power_balance_simple
— MethodKCL including transformer arcs
PowerModelsDistribution.constraint_mc_power_balance_slack
— MethodPowerModelsDistribution.constraint_mc_power_balance_slack
— MethodPowerModelsDistribution.constraint_mc_power_balance_slack
— MethodPowerModelsDistribution.constraint_mc_power_balance_slack
— MethodPowerModelsDistribution.constraint_mc_power_losses
— MethodDefines branch flow model power flow equations
PowerModelsDistribution.constraint_mc_power_losses
— MethodPowerModelsDistribution.constraint_mc_power_losses
— Methodconstraint_mc_power_losses(pm::FBSUBFPowerModel, nw::Int, i::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, r::Matrix{<:Real}, x::Matrix{<:Real}, g_sh_fr::Matrix{<:Real}, g_sh_to::Matrix{<:Real}, b_sh_fr::Matrix{<:Real}, b_sh_to::Matrix{<:Real})
Branch flow model power flow equation linearized around initial operating point (backward sweep)
\[\begin{align} &\text{Initial operating points: } (v_{r0}^{fr} + j ⋅ v_{i0}^{fr}),~ (v_{r0}^{to} + j ⋅ v_{i0}^{to})\\ &\text{Voltage drop: } v_{drop} = (v_{r0}^{fr} + j ⋅ v_{i0}^{fr}) - (v_{r0}^{to} + j ⋅ v_{i0}^{to}),\\ &\text{Line series admittance: } y = (r+j ⋅ x)^{-1},\\ &\text{Power loss: } s_{loss} = v_{drop} ⋅ (y ⋅ v_{drop})^*,\\ &\text{Active power flow: } p^{fr} + p^{to} = g_{sh}^{fr} ⋅ {(v_{m0}^{fr})}^2 + g_{sh}^{to} ⋅ {(v_{m0}^{to})}^2 + \Re(s_{loss}),\\ &\text{Reactive power flow: } q^{fr} + q^{to} = -b_{sh}^{fr} ⋅ {(v_{m0}^{fr})}^2 - b_{sh}^{to} ⋅ {(v_{m0}^{to})}^2 + \Im(s_{loss}). \end{align}\]
PowerModelsDistribution.constraint_mc_power_losses
— MethodDefines branch flow model power flow equations
PowerModelsDistribution.constraint_mc_regen_setpoint_active
— Methodqq[i] == qq
PowerModelsDistribution.constraint_mc_storage_current_limit
— MethodPowerModelsDistribution.constraint_mc_storage_current_limit
— MethodPowerModelsDistribution.constraint_mc_storage_current_limit
— MethodPowerModelsDistribution.constraint_mc_storage_losses
— MethodNeglects the active and reactive loss terms associated with the squared current magnitude.
PowerModelsDistribution.constraint_mc_storage_losses
— MethodPowerModelsDistribution.constraint_mc_storage_losses
— MethodPowerModelsDistribution.constraint_mc_storage_losses
— Methodstorage loss constraints, delegate to PowerModels
PowerModelsDistribution.constraint_mc_storage_on_off
— MethodPowerModelsDistribution.constraint_mc_storage_on_off
— MethodPowerModelsDistribution.constraint_mc_storage_on_off
— MethodPowerModelsDistribution.constraint_mc_storage_thermal_limit
— MethodPowerModelsDistribution.constraint_mc_storage_thermal_limit
— MethodPowerModelsDistribution.constraint_mc_storage_thermal_limit
— MethodPowerModelsDistribution.constraint_mc_switch_current_limit
— MethodPowerModelsDistribution.constraint_mc_switch_power_on_off
— MethodPowerModelsDistribution.constraint_mc_switch_power_on_off
— MethodPowerModelsDistribution.constraint_mc_switch_state
— MethodPowerModelsDistribution.constraint_mc_switch_state_closed
— MethodPowerModelsDistribution.constraint_mc_switch_state_closed
— MethodPowerModelsDistribution.constraint_mc_switch_state_closed
— MethodPowerModelsDistribution.constraint_mc_switch_state_closed
— MethodPowerModelsDistribution.constraint_mc_switch_state_closed
— MethodPowerModelsDistribution.constraint_mc_switch_state_closed
— Methodnothing to do
PowerModelsDistribution.constraint_mc_switch_state_closed
— Methodconstraint_mc_switch_state_closed(pm::FBSUBFPowerModel, nw::Int, f_bus::Int, t_bus::Int, f_connections::Vector{Int}, t_connections::Vector{Int})
Voltage constraints for closed switches similar to ACRUPowerModel.
PowerModelsDistribution.constraint_mc_switch_state_on_off
— MethodPowerModelsDistribution.constraint_mc_switch_state_on_off
— MethodPowerModelsDistribution.constraint_mc_switch_state_on_off
— MethodPowerModelsDistribution.constraint_mc_switch_state_on_off
— MethodPowerModelsDistribution.constraint_mc_switch_state_on_off
— MethodPowerModelsDistribution.constraint_mc_switch_state_open
— MethodPowerModelsDistribution.constraint_mc_switch_state_open
— MethodPowerModelsDistribution.constraint_mc_switch_thermal_limit
— MethodPowerModelsDistribution.constraint_mc_thermal_limit_from
— Method-rate_a <= p[f_idx] <= rate_a
PowerModelsDistribution.constraint_mc_thermal_limit_from
— Methodp[f_idx]^2 + q[f_idx]^2 <= rate_a^2
PowerModelsDistribution.constraint_mc_thermal_limit_from
— MethodGeneric thermal limit constraint from-side
PowerModelsDistribution.constraint_mc_thermal_limit_from
— Methodbranch thermal constraints from
PowerModelsDistribution.constraint_mc_thermal_limit_from_ne
— MethodPowerModelsDistribution.constraint_mc_thermal_limit_from_on_off
— MethodPowerModelsDistribution.constraint_mc_thermal_limit_to
— MethodPowerModelsDistribution.constraint_mc_thermal_limit_to
— Methodp[t_idx]^2 + q[t_idx]^2 <= rate_a^2
PowerModelsDistribution.constraint_mc_thermal_limit_to
— MethodGeneric thermal limit constraint to-side
PowerModelsDistribution.constraint_mc_thermal_limit_to
— Methodbranch thermal constraints to
PowerModelsDistribution.constraint_mc_thermal_limit_to_ne
— MethodPowerModelsDistribution.constraint_mc_thermal_limit_to_on_off
— MethodPowerModelsDistribution.constraint_mc_theta_ref
— Methoddo nothing, no way to represent this in these variables
PowerModelsDistribution.constraint_mc_theta_ref
— MethodPowerModelsDistribution.constraint_mc_theta_ref
— MethodCreates phase angle constraints at reference buses
PowerModelsDistribution.constraint_mc_theta_ref
— MethodCreates phase angle constraints at reference buses
PowerModelsDistribution.constraint_mc_theta_ref
— Methodreference angle constraints
PowerModelsDistribution.constraint_mc_theta_ref
— Methodconstraint_mc_theta_ref(pm::FBSUBFPowerModel, nw::Int, i::Int, va_ref::Vector{<:Real})
Creates phase angle constraints at reference buses similar to ACRUPowerModel.
PowerModelsDistribution.constraint_mc_theta_ref
— Methodbalanced three-phase phasor
PowerModelsDistribution.constraint_mc_theta_ref
— Methodnothing to do, no voltage angle variables
PowerModelsDistribution.constraint_mc_transformer_power
— MethodTransformer constraints, considering winding type, conductor order, polarity and tap settings.
PowerModelsDistribution.constraint_mc_transformer_power
— Methodnothing to do, this model is symmetric
PowerModelsDistribution.constraint_mc_transformer_power_dy
— MethodPowerModelsDistribution.constraint_mc_transformer_power_dy
— MethodThis function adds all constraints required to model a two-winding, delta-wye connected transformer.
PowerModelsDistribution.constraint_mc_transformer_power_dy
— Methoddelta-wye transformer power constraint for IVR formulation
PowerModelsDistribution.constraint_mc_transformer_power_dy
— Methodconstraint_mc_transformer_power_dy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)
Add all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.
PowerModelsDistribution.constraint_mc_transformer_power_dy
— Methodconstraint_mc_transformer_power_dy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)
Add all constraints required to model a two-winding, delta-wye connected transformer similar to ACPUPowerModel with voltage constraints linearized using first-order Taylor approximation and power constraints simplified using initial operating point voltage instead of actual voltage variables.
PowerModelsDistribution.constraint_mc_transformer_power_dy
— Methodconstraint_mc_transformer_power_dy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)
Add all constraints required to model a two-winding, delta-wye connected transformer similar to ACRUPowerModel with power constraints using initial operating point voltage instead of actual voltage variables.
PowerModelsDistribution.constraint_mc_transformer_power_yy
— MethodPowerModelsDistribution.constraint_mc_transformer_power_yy
— MethodThis function adds all constraints required to model a two-winding, wye-wye connected transformer.
PowerModelsDistribution.constraint_mc_transformer_power_yy
— Methodwye-wye transformer power constraint for IVR formulation
PowerModelsDistribution.constraint_mc_transformer_power_yy
— Methodconstraint_mc_transformer_power_yy(pm::FBSUBFPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)
Add all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.
PowerModelsDistribution.constraint_mc_transformer_power_yy
— Methodconstraint_mc_transformer_power_yy(pm::FOTPUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)
Add all constraints required to model a two-winding, wye-wye connected transformer similar to ACPUPowerModel.
PowerModelsDistribution.constraint_mc_transformer_power_yy
— Methodconstraint_mc_transformer_power_yy(pm::FOTRUPowerModel, nw::Int, trans_id::Int, f_bus::Int, t_bus::Int, f_idx::Tuple{Int,Int,Int}, t_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, pol::Int, tm_set::Vector{<:Real}, tm_fixed::Vector{Bool}, tm_scale::Real)
Add all constraints required to model a two-winding, wye-wye connected transformer similar to ACRUPowerModel.
PowerModelsDistribution.constraint_mc_transformer_power_yy
— MethodLinks to and from power and voltages in a wye-wye transformer, assumes tm_fixed is true
\[w_fr_i=(pol_i*tm_scale*tm_i)^2w_to_i\]
PowerModelsDistribution.constraint_mc_voltage_angle_difference
— MethodThis is duplicated at PowerModelsDistribution level to correctly handle the indexing of the shunts.
PowerModelsDistribution.constraint_mc_voltage_angle_difference
— MethodPowerModelsDistribution.constraint_mc_voltage_angle_difference
— MethodBounds the voltage angle difference between bus pairs
PowerModelsDistribution.constraint_mc_voltage_angle_difference
— Methodnothing to do, these models do not have angle difference constraints
PowerModelsDistribution.constraint_mc_voltage_angle_difference
— MethodPowerModelsDistribution.constraint_mc_voltage_angle_difference
— MethodThis is duplicated at PowerModelsDistribution level to correctly handle the indexing of the shunts.
PowerModelsDistribution.constraint_mc_voltage_angle_difference
— Methodconstraint_mc_voltage_angle_difference(pm::FBSUBFPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})
Nothing to do, this model ignores angle difference constraints"
PowerModelsDistribution.constraint_mc_voltage_angle_difference
— Methodconstraint_mc_voltage_angle_difference(pm::FOTRUPowerModel, nw::Int, f_idx::Tuple{Int,Int,Int}, f_connections::Vector{Int}, t_connections::Vector{Int}, angmin::Vector{<:Real}, angmax::Vector{<:Real})
Nothing to do, this model ignores angle difference constraints"
PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds
— Methodvmin <= vm[i] <= vmax
PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds
— MethodThis constraint captures problem agnostic constraints that define limits for voltage magnitudes (where variable bounds cannot be used) Notable examples include IVRUPowerModel and ACRUPowerModel
PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds
— Methodconstraint_mc_voltage_magnitude_bounds(pm::FBSUBFPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})
Upper voltage magnitude limits are linearized using outer approximation. Lower voltage magnitude limits are linearized around initial operating point.
\[\begin{align} &\text{Initial operating point: } ⇒ v_{r}^0 + j ⋅ v_{i}^0~\text{where}~{(v_m^0)}^2 = {(v_{r}^0)}^2 + {(v_{i}^0)}^2\\ &\text{Lower limits: } 2 ⋅ v_{r} ⋅ v_{r}^0 + 2 ⋅ v_{i} ⋅ v_{i}^0 - {(v_{m}^0)}^2 ≥ v_{min}^2,\\ &\text{Upper limits: } -v_{max} ≤ v_{r} ≤ v_{max},\\ & -v_{max} ≤ v_{i} ≤ v_{max},\\ &-\sqrt{2} ⋅ v_{max} ≤ v_{r} + v_{i} ≤ \sqrt{2} ⋅ v_{max},\\ & -\sqrt{2} ⋅ v_{max} ≤ v_{r} - v_{i} ≤ \sqrt{2} ⋅ v_{max}. \end{align}\]
PowerModelsDistribution.constraint_mc_voltage_magnitude_bounds
— Methodconstraint_mc_voltage_magnitude_bounds(pm::FOTRUPowerModel, nw::Int, i::Int, vmin::Vector{<:Real}, vmax::Vector{<:Real})
Linearized voltage magnitude limits similar to FBSUBFPowerModel.
PowerModelsDistribution.constraint_mc_voltage_magnitude_only
— Methodvm[i] == vmref
PowerModelsDistribution.constraint_mc_voltage_magnitude_only
— Methodvm[i] == vmref
PowerModelsDistribution.constraint_mc_voltage_magnitude_only
— Methodvm[i] == vmref
PowerModelsDistribution.constraint_mc_voltage_magnitude_only
— Methodnothing to do
PowerModelsDistribution.constraint_mc_voltage_magnitude_only
— Methodvoltage magnitude setpoint constraint
PowerModelsDistribution.constraint_mc_voltage_psd
— MethodAdd explicit PSD-ness of W for nodes where it is not implied
PowerModelsDistribution.constraint_mc_voltage_psd
— MethodAdd explicit PSD-ness of W for nodes where it is not implied
PowerModelsDistribution.constraint_mc_voltage_psd
— MethodAdd explicit PSD-ness of W for nodes where it is not implied
PowerModelsDistribution.constraint_pqw
— MethodCreates the constraints modelling the (relaxed) voltage-dependency of the power consumed in each phase, s=p+jq. This is completely symmetrical for p and q, with appropriate substitutions of the variables and parameters: p->q, a->b, alpha->beta, pmin->qmin, pmax->qmax
PowerModelsDistribution.constraint_storage_complementarity_mi
— MethodPowerModelsDistribution.constraint_storage_complementarity_mi
— MethodPowerModelsDistribution.constraint_storage_complementarity_nl
— MethodPowerModelsDistribution.constraint_storage_complementarity_nl
— MethodPowerModelsDistribution.constraint_storage_losses
— MethodNeglects the active and reactive loss terms associated with the squared current magnitude.
PowerModelsDistribution.constraint_storage_losses
— MethodPowerModelsDistribution.constraint_storage_losses
— MethodPowerModelsDistribution.constraint_storage_losses
— MethodPowerModelsDistribution.constraint_storage_losses
— MethodPowerModelsDistribution.constraint_storage_losses
— MethodPowerModelsDistribution.constraint_storage_state
— MethodPowerModelsDistribution.constraint_storage_state
— MethodPowerModelsDistribution.constraint_storage_state
— MethodPowerModelsDistribution.constraint_storage_state_initial
— MethodPowerModelsDistribution.constraint_switch_thermal_limit
— MethodRelaxation Helpers
PowerModelsDistribution.cut_complex_product_and_angle_difference
— Methodcut_complex_product_and_angle_difference(m, wf, wt, wr, wi, angmin, angmax)
A valid inequality for the product of two complex variables with magnitude and angle difference bounds. In the literature this constraints are called the Lifted Nonlinear Cuts (LNCs). @misc{1512.04644, Author = {Carleton Coffrin and Hassan Hijazi and Pascal Van Hentenryck}, Title = {Strengthening the SDP Relaxation of AC Power Flows with Convex Envelopes, Bound Tightening, and Lifted Nonlinear Cuts}, Year = {2015}, Eprint = {arXiv:1512.04644}, }
PowerModelsDistribution.relaxation_psd_to_psd_real
— Methodrelaxation_psd_to_psd_real(m, mxreal, mximag; ndim=3)
For debugging / exploration: real-valued SDP to SDP relaxation based on PSDness of principal minors, default is 3x3 SDP relaxation
PowerModelsDistribution.relaxation_psd_to_soc
— Methodrelaxation_psd_to_soc(m::JuMP.Model, mxreal, mximag; complex::Bool=true)
See section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }
PowerModelsDistribution.relaxation_psd_to_soc_complex
— Methodrelaxation_psd_to_soc_complex(m, mxreal, mximag)
SDP to SOC relaxation of type 2, applied to complex-value matrix, as described in:
@article{Kim2003,
author = {Kim, S and Kojima, M and Yamashita, M},
title = {{Second order cone programming relaxation of a positive semidefinite constraint}},
doi = {10.1080/1055678031000148696},
journal = {Optimization Methods and Software},
number = {5},
pages = {535--541},
volume = {18},
year = {2003}
}
PowerModelsDistribution.relaxation_psd_to_soc_complex_conic
— Methodrelaxation_psd_to_soc_complex_conic(m, mxreal, mximag)
SDP to SOC relaxation of type 2, applied to complex-value matrix, as described in:
@article{Kim2003,
author = {Kim, S and Kojima, M and Yamashita, M},
title = {{Second order cone programming relaxation of a positive semidefinite constraint}},
doi = {10.1080/1055678031000148696},
journal = {Optimization Methods and Software},
number = {5},
pages = {535--541},
volume = {18},
year = {2003}
}
PowerModelsDistribution.relaxation_psd_to_soc_conic
— Methodrelaxation_psd_to_soc_conic(m, mxreal, mximag; complex=true)
See section 4.3 for complex to real PSD constraint transformation: @article{Fazel2001, author = {Fazel, M. and Hindi, H. and Boyd, S.P.}, title = {{A rank minimization heuristic with application to minimum order system approximation}}, doi = {10.1109/ACC.2001.945730}, journal = {Proc. American Control Conf.}, number = {2}, pages = {4734–4739}, url = {http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.htm?arnumber=945730}, volume = {6}, year = {2001} }
PowerModelsDistribution.relaxation_psd_to_soc_real
— Methodrelaxation_psd_to_soc_real(m, mx)
SDP to SOC relaxation of type 2, applied to real-value matrix, as described in:
@article{Kim2003,
author = {Kim, S and Kojima, M and Yamashita, M},
title = {{Second order cone programming relaxation of a positive semidefinite constraint}},
doi = {10.1080/1055678031000148696},
journal = {Optimization Methods and Software},
number = {5},
pages = {535--541},
volume = {18},
year = {2003}
}
PowerModelsDistribution.relaxation_psd_to_soc_real_conic
— Methodrelaxation_psd_to_soc_real_conic(m, mx)
SDP to SOC relaxation of type 2, applied to real-value matrix, as described in:
@article{Kim2003,
author = {Kim, S and Kojima, M and Yamashita, M},
title = {{Second order cone programming relaxation of a positive semidefinite constraint}},
doi = {10.1080/1055678031000148696},
journal = {Optimization Methods and Software},
number = {5},
pages = {535--541},
volume = {18},
year = {2003}
}
Miscellaneous Helpers
PowerModelsDistribution.calculate_tm_scale
— FunctionCalculates the tap scale factor for the non-dimensionalized equations.
PowerModelsDistribution.calc_branch_y
— Functioncalc_branch_y(branch::Dict{String,<:Any})
computes branch admittance matrices
PowerModelsDistribution.calc_buspair_parameters
— Functioncalc_buspair_parameters(buses, branches)
Computes the buspair parameters for the network