Multiphase Models
BusInjectionModel.jl provides methods to build many different variations of the Branch Flow Model, including single phase and multiphase models. Each of the multihpase model types supported are documented below.
Unrelaxed models
The Unrelaxed multiphase model is built by passing a JuMP.Model, Network{MultiPhase}, and the Unrelaxed type to build_bim_rectangular!.
net = CommonOPF.Network_IEEE13()
m = JuMP.Model()
build_bim_rectangular!(m, net, Unrelaxed)
println("Variable information:")
CommonOPF.print_var_info(net)
println("Constraint information:")
CommonOPF.print_constraint_info(net)Variable information:
┌────────┬───────────────────────────────────────────────────────────┬──────────────────┬────────────────────┐
│ symbol │ description │ units │ dimensions │
├────────┼───────────────────────────────────────────────────────────┼──────────────────┼────────────────────┤
│ s0 │ complex net bus power injection at the net.substation_bus │ ComplexPowerUnit │ (Bus, Time, Phase) │
├────────┼───────────────────────────────────────────────────────────┼──────────────────┼────────────────────┤
│ v │ complex voltage vector │ VoltUnit │ (Bus, Time, Phase) │
└────────┴───────────────────────────────────────────────────────────┴──────────────────┴────────────────────┘
Constraint information:
┌─────────────────────────────────┬────────────────────────────────────────────┬──────────────────────────────────────┬────────────────────┐
│ symbol │ description │ set_type │ dimensions │
├─────────────────────────────────┼────────────────────────────────────────────┼──────────────────────────────────────┼────────────────────┤
│ bus_power_injection_constraints │ net power injection definition at each bus │ MathOptInterface.EqualTo{ComplexF64} │ (Bus, Time, Phase) │
└─────────────────────────────────┴────────────────────────────────────────────┴──────────────────────────────────────┴────────────────────┘The math underlying the model is as follows:
\[\boldsymbol s_j^{\Phi_{j}} = \sum_{k: j \sim k} \text{diag} \left( \boldsymbol v_j^{\Phi_{jk}} \left[ \boldsymbol v_j^{\Phi_{jk}} - \boldsymbol v_k^{\Phi_{jk}} \right]^H \boldsymbol Y_{jk}^H \right) \quad \forall j \in \mathcal{N}\]
For the nomenclature see TODO.
FixedPointLinear models
The FixedPointLinear multiphase model is built by passing a JuMP.Model, Network{MultiPhase}, and the FixedPointLinear type to build_bim_rectangular!.
net = CommonOPF.Network_IEEE13()
m = JuMP.Model()
build_bim_rectangular!(m, net, FixedPointLinear)
println("Variable information:")
CommonOPF.print_var_info(net)
println("Constraint information:")
CommonOPF.print_constraint_info(net)Variable information:
┌────────┬──────────────────────────────────────┬──────────────────┬─────────────────────┐
│ symbol │ description │ units │ dimensions │
├────────┼──────────────────────────────────────┼──────────────────┼─────────────────────┤
│ s │ complex terminal net power injection │ ComplexPowerUnit │ (BusTerminal, Time) │
├────────┼──────────────────────────────────────┼──────────────────┼─────────────────────┤
│ v │ complex terminal voltage │ VoltUnit │ (BusTerminal, Time) │
└────────┴──────────────────────────────────────┴──────────────────┴─────────────────────┘
Constraint information:
┌──────────────────┬────────────────────────────────────────────────────┬───────────────────────────────────────┬─────────────────────┐
│ symbol │ description │ set_type │ dimensions │
├──────────────────┼────────────────────────────────────────────────────┼───────────────────────────────────────┼─────────────────────┤
│ fixed_point_con │ fixed point voltage equation │ MathOptInterface.EqualTo{ComplexF64} │ (Time, BusTerminal) │
├──────────────────┼────────────────────────────────────────────────────┼───────────────────────────────────────┼─────────────────────┤
│ s_lower_imag_con │ lower bound on imaginary power injection variables │ MathOptInterface.GreaterThan{Float64} │ (BusTerminal, Time) │
├──────────────────┼────────────────────────────────────────────────────┼───────────────────────────────────────┼─────────────────────┤
│ s_lower_real_con │ lower bound on real power injection variables │ MathOptInterface.GreaterThan{Float64} │ (BusTerminal, Time) │
├──────────────────┼────────────────────────────────────────────────────┼───────────────────────────────────────┼─────────────────────┤
│ s_upper_imag_con │ upper bound on imaginary power injection variables │ MathOptInterface.LessThan{Float64} │ (BusTerminal, Time) │
├──────────────────┼────────────────────────────────────────────────────┼───────────────────────────────────────┼─────────────────────┤
│ s_upper_real_con │ upper bound on real power injection variables │ MathOptInterface.LessThan{Float64} │ (BusTerminal, Time) │
└──────────────────┴────────────────────────────────────────────────────┴───────────────────────────────────────┴─────────────────────┘The math underlying the model is as follows:
\[\boldsymbol v = -\boldsymbol Y_{LL}^{-1} Y_{L0} \boldsymbol v_0 + Y_{LL}^{-1} \text{diag}(\boldsymbol v_{FP}^*)^{-1} \boldsymbol s^*\]
For the nomenclature see TODO.