diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 87886cd..c545c4c 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.8.5","generation_timestamp":"2024-08-10T03:06:20","documenter_version":"1.5.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.8.5","generation_timestamp":"2024-08-21T02:03:02","documenter_version":"1.6.0"}} \ No newline at end of file diff --git a/dev/assets/documenter.js b/dev/assets/documenter.js index b2bdd43..82252a1 100644 --- a/dev/assets/documenter.js +++ b/dev/assets/documenter.js @@ -77,30 +77,35 @@ require(['jquery'], function($) { let timer = 0; var isExpanded = true; -$(document).on("click", ".docstring header", function () { - let articleToggleTitle = "Expand docstring"; - - debounce(() => { - if ($(this).siblings("section").is(":visible")) { - $(this) - .find(".docstring-article-toggle-button") - .removeClass("fa-chevron-down") - .addClass("fa-chevron-right"); - } else { - $(this) - .find(".docstring-article-toggle-button") - .removeClass("fa-chevron-right") - .addClass("fa-chevron-down"); +$(document).on( + "click", + ".docstring .docstring-article-toggle-button", + function () { + let articleToggleTitle = "Expand docstring"; + const parent = $(this).parent(); + + debounce(() => { + if (parent.siblings("section").is(":visible")) { + parent + .find("a.docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + parent + .find("a.docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); - articleToggleTitle = "Collapse docstring"; - } + articleToggleTitle = "Collapse docstring"; + } - $(this) - .find(".docstring-article-toggle-button") - .prop("title", articleToggleTitle); - $(this).siblings("section").slideToggle(); - }); -}); + parent + .children(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + parent.siblings("section").slideToggle(); + }); + } +); $(document).on("click", ".docs-article-toggle-button", function (event) { let articleToggleTitle = "Expand docstring"; @@ -110,7 +115,7 @@ $(document).on("click", ".docs-article-toggle-button", function (event) { debounce(() => { if (isExpanded) { $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); - $(".docstring-article-toggle-button") + $("a.docstring-article-toggle-button") .removeClass("fa-chevron-down") .addClass("fa-chevron-right"); @@ -119,7 +124,7 @@ $(document).on("click", ".docs-article-toggle-button", function (event) { $(".docstring section").slideUp(animationSpeed); } else { $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); - $(".docstring-article-toggle-button") + $("a.docstring-article-toggle-button") .removeClass("fa-chevron-right") .addClass("fa-chevron-down"); diff --git a/dev/index.html b/dev/index.html index 1edadc8..34a3648 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,5 +1,5 @@ -User Documentation · BranchFlowModel

BranchFlowModel.jl

BranchFlowModel builds the branch flow constraints using JuMP. The intent of this package is to allow users to build mathematical programs that include BranchFlowModel constraints. No objective is added to the JuMP model in this package and so solving any problem defined by the constraints built by BranchFlowModel.jl is a feasibility problem. Dictionaries of constraints are provided so that one can delete and/or modify the base constraints to fit their problem.

Warning

This package is under development. Contributions are welcome via fork and pull request.

Inputs

Inputs are defined using CommonOPF.Network structs.

Building a Model

BranchFlowModel.build_bfm!Function
build_bfm!(m::JuMP.AbstractModel, net::Network{SinglePhase})

Add variables and constraints to m using the values in net. Calls the following functions:

add_variables(m, net)
+User Documentation · BranchFlowModel

BranchFlowModel.jl

BranchFlowModel builds the branch flow constraints using JuMP. The intent of this package is to allow users to build mathematical programs that include BranchFlowModel constraints. No objective is added to the JuMP model in this package and so solving any problem defined by the constraints built by BranchFlowModel.jl is a feasibility problem. Dictionaries of constraints are provided so that one can delete and/or modify the base constraints to fit their problem.

Warning

This package is under development. Contributions are welcome via fork and pull request.

Inputs

Inputs are defined using CommonOPF.Network structs.

Building a Model

BranchFlowModel.build_bfm!Function
build_bfm!(m::JuMP.AbstractModel, net::Network{SinglePhase})

Add variables and constraints to m using the values in net. Calls the following functions:

add_variables(m, net)
 constrain_power_balance(m, net)
 constrain_substation_voltage(m, net)
 constrain_KVL(m, net)
@@ -7,10 +7,10 @@
     constrain_cone(m, net)
 else
     constrain_bilinear(m, net)
-end
source
build_bfm!(m::JuMP.AbstractModel, net::Network{MultiPhase}, mtype::ModelType=Semidefinite)

Top-level builder that dispatches the ModelType enum TODO make default mtype Unrelaxed (and define the methods)

source
build_bfm!(m::JuMP.AbstractModel, net::Network{MultiPhase}, ::Val{Semidefinite})

Add variables and constraints to m using the values in net. Calls the following functions:

add_sdp_variables(m, net)
+end
source
build_bfm!(m::JuMP.AbstractModel, net::Network{MultiPhase}, mtype::ModelType=Semidefinite)

Top-level builder that dispatches the ModelType enum TODO make default mtype Unrelaxed (and define the methods)

source
build_bfm!(m::JuMP.AbstractModel, net::Network{MultiPhase}, ::Val{Semidefinite})

Add variables and constraints to m using the values in net. Calls the following functions:

add_sdp_variables(m, net)
 constrain_power_balance(m, net)
-constrain_KVL(m, net)
source
build_bfm!(m::JuMP.AbstractModel, net::Network{MultiPhase}, ::Val{Unrelaxed})

Add variables and constraints to m using the values in net to make an unrelaxed branch flow model. Calls the following functions:

add_bfm_variables(m, net)
-constrain_bfm_nlp(m, net)
source

Variables

Single Phase Model

Let m be the JuMP.Model provided by the user, then the variables can be accessed via:

  • m[:vsqrd] voltage magnitude squared, indexed on busses
  • m[:p0], m[:q0] net real, reactive power injection at the substation bus
  • m[:Pij], m[:Qij] net real, reactive line flow, indexed on edges
  • m[:lij] current magnitude squared, indexed on edges

After a model has been solved using JuMP.optimize! variable values can be extracted with JuMP.value. For more see Getting started with JuMP.

MultiPhase Model

The definition of the multiphase variables is done in model_multi_phase.jl as follows:

# voltage squared is Hermitian
+constrain_KVL(m, net)
source
build_bfm!(m::JuMP.AbstractModel, net::Network{MultiPhase}, ::Val{Unrelaxed})

Add variables and constraints to m using the values in net to make an unrelaxed branch flow model. Calls the following functions:

add_bfm_variables(m, net)
+constrain_bfm_nlp(m, net)
source

Variables

Single Phase Model

Let m be the JuMP.Model provided by the user, then the variables can be accessed via:

  • m[:vsqrd] voltage magnitude squared, indexed on busses
  • m[:p0], m[:q0] net real, reactive power injection at the substation bus
  • m[:Pij], m[:Qij] net real, reactive line flow, indexed on edges
  • m[:lij] current magnitude squared, indexed on edges

After a model has been solved using JuMP.optimize! variable values can be extracted with JuMP.value. For more see Getting started with JuMP.

MultiPhase Model

The definition of the multiphase variables is done in model_multi_phase.jl as follows:

# voltage squared is Hermitian
 m[:w] = Dict{Int64, S}()
 # current squared is Hermitian
 m[:l] = Dict{Int64, S}()
@@ -21,4 +21,4 @@
 # Hermitian PSD matrices
 m[:H] = Dict{Int64, S}()

where the first key is for the time index and the inner Dict:

S = Dict{String, AbstractVecOrMat}

has string keys for either bus names or edge names.

Accessing and Modifying Constraints

Let the JuMP.Model provided by the user be called m. Some constraints are stored in the model dict as anonymous constraints with symbol keys.

Power Injections

BranchFlowModel.jl uses the convention that power injections are positive (and loads are negative). If no load is provided for a given bus (and phase) then the real and reactive power injections at that bus (and phase) are set to zero with an equality constraint.

All power injection constraints are stored in m[:injection_equalities]. The constraints are indexed in the following order:

  1. by bus name (string), as provided in CommonOPF.busses;
  2. by "p" or "q" for real and reactive power respectively;
  3. by phase number (integer); and
  4. by time (integer).

For example, m[:injection_equalities]["680"]["p"][2][1] contains the constraint reference for the power injection equality constraint for bus "680", real power, in time step 2, on phase 1.

If one wished to replace any constraint one must first delete the constraint using the delete function. For example:

delete(m, m[:cons][:injection_equalities]["680"]["p"][1])

Note that the time index was not provided in the delete command in this example, which implies that the equality constraints for all time steps were deleted. One can also delete individual time step constraints by providing the time index.

The deleted constraints can then be replaced with a new set of constraints. For example:

m[:cons][:injection_equalities]["680"]["p"][1] = @constraint(m, [t in 1:net.Ntimesteps],
     m[:Pj]["680",1,t] == -1e3 / net.Sbase
-)

where net is the CommonOPF.Network struct for the problem of interest. Note that it is not necessary to store the new constraints in the m[:cons][:injection_equalities].

See the JuMP documentation for more on deleting constraints.

+)

where net is the CommonOPF.Network struct for the problem of interest. Note that it is not necessary to store the new constraints in the m[:cons][:injection_equalities].

See the JuMP documentation for more on deleting constraints.

diff --git a/dev/math/index.html b/dev/math/index.html index a4f51f8..d6a6a50 100644 --- a/dev/math/index.html +++ b/dev/math/index.html @@ -5,7 +5,7 @@ w_j = w_i - 2 r_{ij} P_{ij} - 2 x_{ij} Q_{ij} + (r_{ij}^2 + x_{ij}^2) \ell_{ij} \ \forall j \in \mathcal{N}^+ \\ w_i \ell_{ij} = P_{ij}^2 + Q_{ij}^2 \forall (i,j) \in \mathcal{E} \\ (v_{j,\min})^2 \le w_j \le (v_{j,\max})^2 \ \forall j \in \mathcal{N}^+ -\end{aligned}\]

Three Phase BranchFlowModel

BranchFlowModel.constrain_KVLMethod
constrain_KVL(m, net::Network{MultiPhase})

Add the voltage drop definitions between busses.

$w_j = w_i - S_{ij} Z^{\star} - Z S_{ij}^{\star} + Z L_{ij} Z^{\star}$

source
BranchFlowModel.add_bfm_variablesFunction
add_bfm_variables(m, net::Network{MultiPhase})

Define complex variables for:

  • :v bus voltages
  • :i branch currents
  • :sij branch power flows
  • :sj bus net power injections
source

\[\begin{aligned} +\end{aligned}\]

Three Phase BranchFlowModel

BranchFlowModel.constrain_KVLMethod
constrain_KVL(m, net::Network{MultiPhase})

Add the voltage drop definitions between busses.

$w_j = w_i - S_{ij} Z^{\star} - Z S_{ij}^{\star} + Z L_{ij} Z^{\star}$

source
BranchFlowModel.add_bfm_variablesFunction
add_bfm_variables(m, net::Network{MultiPhase})

Define complex variables for:

  • :v bus voltages
  • :i branch currents
  • :sij branch power flows
  • :sj bus net power injections
source

\[\begin{aligned} \boldsymbol S_{ij} = \boldsymbol v_i^{\Phi_{ij}} \boldsymbol i_{ij}^H \quad \forall (i, j) \in \mathcal{E} \\ @@ -16,4 +16,4 @@ + \boldsymbol s_j = \sum_{k : j \rightarrow k} \text{diag}( \boldsymbol S_{jk} )^{\Phi_j} \quad \forall j \in \mathcal{N} -\end{aligned}\]

References

[1]

Baran, Mesut E., and Felix F. Wu. "Optimal capacitor placement on radial distribution systems." IEEE Transactions on power Delivery 4.1 (1989): 725-734. Chicago

+\end{aligned}\]

References

[1]

Baran, Mesut E., and Felix F. Wu. "Optimal capacitor placement on radial distribution systems." IEEE Transactions on power Delivery 4.1 (1989): 725-734. Chicago

diff --git a/dev/methods/index.html b/dev/methods/index.html index a926a5a..882461b 100644 --- a/dev/methods/index.html +++ b/dev/methods/index.html @@ -1,9 +1,9 @@ -Methods · BranchFlowModel

Methods

Some various methods used in BranchFlowModel.jl:

Warning

This list of exported methods may not be up to date and there are missing doc strings. Contributions are welcome via fork and pull request.

Missing docstring.

Missing docstring for build_bfm!. Check Documenter's build log for details.

BranchFlowModel.constrain_power_balanceFunction
function constrain_power_balance(m, net::Network)

Define the m[:loadbalcons][bus] ∀ bus ∈ busses(net) as a Dict of constraints. The keys are "p" and "q" for real and reactive power balance respectively. The values are the JuMP constraints.

∑ Pij in - losses + net injection - ∑ Pjk out = 0

The net injection are user defined loads. If one wishes to make the net injection a decision variable then delete the constraint and redefine the constraint with your decision variable.

NOTE: using sum over Pij for future expansion to mesh grids and the convention: i -> j -> k

source
function constrain_power_balance(m, net::Network{MultiPhase})

Sij in - losses == sum of line flows out + net injection NOTE: using sum over Pij for future expansion to mesh grids i -> j -> k

All of the power balance constraints are stored in m[:loadbalcons] with the bus name (string) as the first index. For example m[:loadbalcons]["busname"] will give the constrain container from JuMP for all time steps.

source
Missing docstring.

Missing docstring for constrain_substation_voltage. Check Documenter's build log for details.

BranchFlowModel.constrain_KVLFunction
constrain_KVL(m, net::Network{MultiPhase})

Add the voltage drop definitions between busses.

$w_j = w_i - S_{ij} Z^{\star} - Z S_{ij}^{\star} + Z L_{ij} Z^{\star}$

source
Missing docstring.

Missing docstring for constrain_bounds. Check Documenter's build log for details.

BranchFlowModel.check_rank_oneFunction
check_rank_one(m::JuMP.AbstractModel, net::Network, tol=1e-3)

Check the rank of the m[:H] matrices from the PSD cone constraints. Warnings express any values with rank greater than one.

source
Missing docstring.

Missing docstring for get_bus_values. Check Documenter's build log for details.

Missing docstring.

Missing docstring for check_soc_inequalities. Check Documenter's build log for details.

Missing docstring.

Missing docstring for get_load_bal_shadow_prices. Check Documenter's build log for details.

CommonOPF.reduce_tree!Function
reduce_tree!(net::Network{SinglePhase})

combine any line sets with intermediate busses that have indegree == outdegree == 1 and is not a load bus into a single line

See remove_bus! for how the two lines are combined.

source
CommonOPF.trim_tree!Function
trim_tree!(net::Network)

Trim any branches that have empty busses, i.e. remove the branches that have no loads or DER.

source
CommonOPF.make_graphFunction
make_graph(edges::AbstractVector{<:AbstractEdge};  directed::Union{Bool,Missing}=missing)

return MetaGraph made up of the edges

Also the graph[:intbusmap] is created with the dicts for bus => int and int => bus (because Graphs.jl only works with integer nodes)

julia> g["13", :bus]
+Methods · BranchFlowModel

Methods

Some various methods used in BranchFlowModel.jl:

Warning

This list of exported methods may not be up to date and there are missing doc strings. Contributions are welcome via fork and pull request.

Missing docstring.

Missing docstring for build_bfm!. Check Documenter's build log for details.

BranchFlowModel.constrain_power_balanceFunction
function constrain_power_balance(m, net::Network)

Define the m[:loadbalcons][bus] ∀ bus ∈ busses(net) as a Dict of constraints. The keys are "p" and "q" for real and reactive power balance respectively. The values are the JuMP constraints.

∑ Pij in - losses + net injection - ∑ Pjk out = 0

The net injection are user defined loads. If one wishes to make the net injection a decision variable then delete the constraint and redefine the constraint with your decision variable.

NOTE: using sum over Pij for future expansion to mesh grids and the convention: i -> j -> k

source
function constrain_power_balance(m, net::Network{MultiPhase})

Sij in - losses == sum of line flows out + net injection NOTE: using sum over Pij for future expansion to mesh grids i -> j -> k

All of the power balance constraints are stored in m[:loadbalcons] with the bus name (string) as the first index. For example m[:loadbalcons]["busname"] will give the constrain container from JuMP for all time steps.

source
Missing docstring.

Missing docstring for constrain_substation_voltage. Check Documenter's build log for details.

BranchFlowModel.constrain_KVLFunction
constrain_KVL(m, net::Network{MultiPhase})

Add the voltage drop definitions between busses.

$w_j = w_i - S_{ij} Z^{\star} - Z S_{ij}^{\star} + Z L_{ij} Z^{\star}$

source
Missing docstring.

Missing docstring for constrain_bounds. Check Documenter's build log for details.

BranchFlowModel.check_rank_oneFunction
check_rank_one(m::JuMP.AbstractModel, net::Network, tol=1e-3)

Check the rank of the m[:H] matrices from the PSD cone constraints. Warnings express any values with rank greater than one.

source
Missing docstring.

Missing docstring for get_bus_values. Check Documenter's build log for details.

Missing docstring.

Missing docstring for check_soc_inequalities. Check Documenter's build log for details.

Missing docstring.

Missing docstring for get_load_bal_shadow_prices. Check Documenter's build log for details.

CommonOPF.reduce_tree!Function
reduce_tree!(net::Network{SinglePhase})

combine any line sets with intermediate busses that have indegree == outdegree == 1 and is not a load bus into a single line

See remove_bus! for how the two lines are combined.

source
CommonOPF.trim_tree!Function
trim_tree!(net::Network)

Trim any branches that have empty busses, i.e. remove the branches that have no loads or DER.

source
CommonOPF.make_graphFunction
make_graph(edges::AbstractVector{<:AbstractEdge};  directed::Union{Bool,Missing}=missing)

return MetaGraph made up of the edges

Also the graph[:intbusmap] is created with the dicts for bus => int and int => bus (because Graphs.jl only works with integer nodes)

julia> g["13", :bus]
 10
 
 julia> g[13, :bus]
 "24"
 
 julia> get_prop(g, :int_bus_map)[13]
-"24"
source
BranchFlowModel.set_inputs!Function
set_inputs!(mg::MetaGraphsNext.MetaGraph; α::Float64=0.0)

Set the shared values in each subgraph / vertex of mg:

  1. set the current vertex's v0 to its inneighbor's voltage
  2. set the current vertex P/Qload to the outneighbors' substation_bus loads
source
BranchFlowModel.get_diffsFunction
get_diffs(mg::MetaGraphsNext.MetaGraph)

Uses the JuMP Models stored in mg.graph_data[:models] to calculate the difference between power injections/loads, and |v| at every leaf/substation connection.

returns three Float64[]

source
BranchFlowModel.solve_metagraph!Function
solve_metagraph!(mg::MetaGraphsNext.MetaGraph, builder::Function, tol::T; α::T=0.5, verbose=false) where T <: Real

Given a MetaGraphsNext.MetaGraph and a JuMP Model builder method iteratively solve the models until the tol is met for the differences provided by BranchFlowModel.get_diffs.

The builder must accept only one argument of type CommonOPF.AbstractNetwork that returns a JuMP.AbstractModel. Each model returned from the builder is stored as an :m property in each vertex of mg.

Note

tol is compared to the maximum absolute value of all the p, q, and v differences.

source
solve_metagraph!(mg::MetaGraphsNext.MetaGraph, builder::Function, tols::Vector{T}; α::T=0.5, verbose=false) where T <: Real

Given a MetaGraphsNext.MetaGraph and a JuMP Model builder method iteratively solve the models until the tols are met for the differences provided by BranchFlowModel.get_diffs.

The builder must accept only one argument of type CommonOPF.AbstractNetwork that returns a JuMP.AbstractModel. Each model returned from the builder is stored as an :m property in each vertex of mg.

Note

The tols should have a length of three. The first value is compared to the maximum absolute difference in real power, the second for reactive power, and the third for |v|. All differences are calculated at the leaf/substation connections.

source
solve_metagraph!(mg::MetaGraphsNext.MetaGraph, builder::Dict{Int64, Function}, tols::Vector{T}; α::T=0.5, verbose=false) where T <: Real

Given a MetaGraphsNext.MetaGraph and a JuMP Model builder method iteratively solve the models until the tols are met for the differences provided by BranchFlowModel.get_diffs. The builder dict is used to build each model for the corresponding vertex key.

Each function in the builder dict must accept only one argument of type CommonOPF.AbstractNetwork that returns a JuMP.AbstractModel. Each model returned from the builder function is stored as an :m property in each vertex of mg.

Note

The tols should have a length of three. The first value is compared to the maximum absolute difference in real power, the second for reactive power, and the third for |v|. All differences are calculated at the leaf/substation connections.

source
Missing docstring.

Missing docstring for metagraph_voltages. Check Documenter's build log for details.

Missing docstring.

Missing docstring for check_unique_solution_conditions. Check Documenter's build log for details.

Missing docstring.

Missing docstring for check_statuses. Check Documenter's build log for details.

Missing docstring.

Missing docstring for reg_busses. Check Documenter's build log for details.

CommonOPF.remove_bus!Function
remove_bus!(j::String, net::Network{SinglePhase})

Remove bus j in the line i->j->k from the model by making an equivalent line from busses i->k

source
remove_bus!(j::String, net::Network{MultiPhase})

Remove bus j in the line i->j->k from the model by making an equivalent line from busses i->k. We assume the conductors from i->j and j->k have impedance matrices.

source
+"24"
source
BranchFlowModel.set_inputs!Function
set_inputs!(mg::MetaGraphsNext.MetaGraph; α::Float64=0.0)

Set the shared values in each subgraph / vertex of mg:

  1. set the current vertex's v0 to its inneighbor's voltage
  2. set the current vertex P/Qload to the outneighbors' substation_bus loads
source
BranchFlowModel.get_diffsFunction
get_diffs(mg::MetaGraphsNext.MetaGraph)

Uses the JuMP Models stored in mg.graph_data[:models] to calculate the difference between power injections/loads, and |v| at every leaf/substation connection.

returns three Float64[]

source
BranchFlowModel.solve_metagraph!Function
solve_metagraph!(mg::MetaGraphsNext.MetaGraph, builder::Function, tol::T; α::T=0.5, verbose=false) where T <: Real

Given a MetaGraphsNext.MetaGraph and a JuMP Model builder method iteratively solve the models until the tol is met for the differences provided by BranchFlowModel.get_diffs.

The builder must accept only one argument of type CommonOPF.AbstractNetwork that returns a JuMP.AbstractModel. Each model returned from the builder is stored as an :m property in each vertex of mg.

Note

tol is compared to the maximum absolute value of all the p, q, and v differences.

source
solve_metagraph!(mg::MetaGraphsNext.MetaGraph, builder::Function, tols::Vector{T}; α::T=0.5, verbose=false) where T <: Real

Given a MetaGraphsNext.MetaGraph and a JuMP Model builder method iteratively solve the models until the tols are met for the differences provided by BranchFlowModel.get_diffs.

The builder must accept only one argument of type CommonOPF.AbstractNetwork that returns a JuMP.AbstractModel. Each model returned from the builder is stored as an :m property in each vertex of mg.

Note

The tols should have a length of three. The first value is compared to the maximum absolute difference in real power, the second for reactive power, and the third for |v|. All differences are calculated at the leaf/substation connections.

source
solve_metagraph!(mg::MetaGraphsNext.MetaGraph, builder::Dict{Int64, Function}, tols::Vector{T}; α::T=0.5, verbose=false) where T <: Real

Given a MetaGraphsNext.MetaGraph and a JuMP Model builder method iteratively solve the models until the tols are met for the differences provided by BranchFlowModel.get_diffs. The builder dict is used to build each model for the corresponding vertex key.

Each function in the builder dict must accept only one argument of type CommonOPF.AbstractNetwork that returns a JuMP.AbstractModel. Each model returned from the builder function is stored as an :m property in each vertex of mg.

Note

The tols should have a length of three. The first value is compared to the maximum absolute difference in real power, the second for reactive power, and the third for |v|. All differences are calculated at the leaf/substation connections.

source
Missing docstring.

Missing docstring for metagraph_voltages. Check Documenter's build log for details.

Missing docstring.

Missing docstring for check_unique_solution_conditions. Check Documenter's build log for details.

Missing docstring.

Missing docstring for check_statuses. Check Documenter's build log for details.

Missing docstring.

Missing docstring for reg_busses. Check Documenter's build log for details.

CommonOPF.remove_bus!Function
remove_bus!(j::String, net::Network{SinglePhase})

Remove bus j in the line i->j->k from the model by making an equivalent line from busses i->k

source
remove_bus!(j::String, net::Network{MultiPhase})

Remove bus j in the line i->j->k from the model by making an equivalent line from busses i->k. We assume the conductors from i->j and j->k have impedance matrices.

source