From 0612219ce2093f9b30f1cd7f6c41ccd3d8d2e855 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Tue, 28 Nov 2023 15:33:40 +0000 Subject: [PATCH] build based on 434cb14 --- dev/.documenter-siteinfo.json | 2 +- dev/developer/contributing.html | 2 +- dev/developer/roadmap.html | 2 +- dev/developer/style.html | 2 +- dev/index.html | 2 +- dev/installation.html | 2 +- dev/manual/fileformat.html | 2 +- dev/manual/formulations.html | 2 +- dev/manual/quickguide.html | 2 +- dev/manual/storage.html | 2 +- dev/reference/base.html | 2 +- dev/reference/constants.html | 2 +- dev/reference/constraints.html | 102 +++++++++++++------------- dev/reference/data_models.html | 40 +++++------ dev/reference/formulations.html | 2 +- dev/reference/internal.html | 70 +++++++++--------- dev/reference/objectives.html | 26 +++---- dev/reference/problems.html | 116 +++++++++++++++--------------- dev/reference/variables.html | 2 +- dev/search_index.js | 2 +- dev/tutorials/BeginnersGuide.html | 12 ++-- 21 files changed, 198 insertions(+), 198 deletions(-) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index bca7a1d..3cd3c5d 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2023-11-28T14:53:37","documenter_version":"1.1.2"}} \ No newline at end of file +{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2023-11-28T15:33:35","documenter_version":"1.1.2"}} \ No newline at end of file diff --git a/dev/developer/contributing.html b/dev/developer/contributing.html index ae10022..d8a2f90 100644 --- a/dev/developer/contributing.html +++ b/dev/developer/contributing.html @@ -1,2 +1,2 @@ -Contributing · PowerModelsITD.jl

Contributing

Pull Requests

All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.

Every PR to PowerModelsITD should strive to meet the following guidelines.

PR Title

  • Should be concise and clear, describing in a phrase the content of the PR
  • Should include a prefix that describes the primary type of the PR
    • ADD: feature addition
    • FIX: bugfix
    • REF: refactor
    • UPD: updates to code for e.g. version bumps of dependencies
    • STY: style changes, no changes to function names, added features, etc.
    • DOC: documentation-only additions/changes
    • RM: dead code removal

PR Body

  • If the change is breaking, it should be clearly stated up front
  • The purpose of this PR should be clearly stated right away
  • Major changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR
  • Any associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged

PR Code

  • An entry should be added to CHANGELOG.md for every PR
  • Documentation should be updated (See Documentation section above for guidelines)
  • Unit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included
  • Code should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)

Versions

PowerModelsITD follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.

Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsITD reaches v1.0.0, we will adhere strictly to the SemVer convention.

Branch Management

The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.

Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.

Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.

Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.

+Contributing · PowerModelsITD.jl

Contributing

Pull Requests

All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.

Every PR to PowerModelsITD should strive to meet the following guidelines.

PR Title

  • Should be concise and clear, describing in a phrase the content of the PR
  • Should include a prefix that describes the primary type of the PR
    • ADD: feature addition
    • FIX: bugfix
    • REF: refactor
    • UPD: updates to code for e.g. version bumps of dependencies
    • STY: style changes, no changes to function names, added features, etc.
    • DOC: documentation-only additions/changes
    • RM: dead code removal

PR Body

  • If the change is breaking, it should be clearly stated up front
  • The purpose of this PR should be clearly stated right away
  • Major changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR
  • Any associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged

PR Code

  • An entry should be added to CHANGELOG.md for every PR
  • Documentation should be updated (See Documentation section above for guidelines)
  • Unit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included
  • Code should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)

Versions

PowerModelsITD follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.

Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsITD reaches v1.0.0, we will adhere strictly to the SemVer convention.

Branch Management

The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.

Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.

Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.

Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.

diff --git a/dev/developer/roadmap.html b/dev/developer/roadmap.html index 3e84cfb..fa0c43b 100644 --- a/dev/developer/roadmap.html +++ b/dev/developer/roadmap.html @@ -1,2 +1,2 @@ -Roadmap · PowerModelsITD.jl
+Roadmap · PowerModelsITD.jl
diff --git a/dev/developer/style.html b/dev/developer/style.html index 9e9592d..709bca0 100644 --- a/dev/developer/style.html +++ b/dev/developer/style.html @@ -1,4 +1,4 @@ Style Guide · PowerModelsITD.jl

Style Conventions

In general, the following conventions should be adhered to when making changes or additions to the code base. These conventions should include any conventions applied across the InfrastructureModels ecosystem specific to power engineering (i.e conventions from InfrastructureModels, PowerModels, PowerModelsDistribution, etc.) with some additions specific to PowerModelsITD.

Functions

Function additions should meeting the following criteria:

  • All functions should be clearly named, without abbreviations, and with underscores between words, e.g. parse_files or constraint_boundary_voltage_angle; in Python this is known as lower_case_with_underscores. The exception to the abbreviate rule is cases where abbreviations would be expected in the modeling of power systems.
  • All functions that are not prepended by an underscore _ will be exported by default (i.e. when a user uses using PowerModelsITD). Public functions should have a detailed docstring instructing on usage
  • All functions that modify data in place should end with an exclamation point ! and the function input that is being modified should be the first argument (or first arguments in the case where multiple inputs are being modified in place). The exceptions to this rule are constraint and variable creation functions (i.e. those functions related to JuMP model creation), which do not include the exclaimation point
  • All function arguments, including keyword arguments, should have their types specified.
  • Private functions, i.e. those intended to be for internal use only, should follow the same descriptive naming conventions as functions exported by default, and should always include docstrings to describe their purpose.
  • Functions should be separated by two blank lines
"this function demonstrates how an internal, in-place data altering function should be defined"
 function _concise_descriptive_name!(data::Dict{String,<:Any}, a::Real, b::Vector{<:Real}, c::Matrix{<:Complex}; d::Bool=false, e::Vector{Function}=Function[])
-end

Types & Enums

When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:

  • Prefer to use Vector{T} instead of Array{T,1}
  • Prefer to use Matrix{T} instead of Array{T,2}
  • Enums must be added to the JSON parser when introduced

Constants

Whenever possible, const should be used to eliminate unnecesary re-evaluations of code, and every const should have a docstring, whether internal or public.

JuMP Variables and Constraints

For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:

<jump macro id>(_<phase variant>)_<comp short name>_<quantity name>(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)

in the interest of intuitive names for users, the following special cases are also acceptable,

  • _power_real -(can be replaced with)-> _active
  • _power_imaginary -(can be replaced with)-> _reactive

Formulation Styles

  • All new formulations should have clear error messages when they do not support existing components. For example, if a formulation addition which is intended to work with OPF does not support delta-wye transformers, the constraint_mc_transformer_power_dy
  • Formulation abstract type and mutable struct must be specified in CapitalizedWords, which is a subtype of camelCase with the first word also capitalized.

Problem Specification Styles

  • If a new problem specification is only needed due to the requirements of a new formulation, and is not a new type of problem, e.g. another OPF formulation, a build_ function with the same name as the existing formulation should be created that accepts a specific PowerModel (multiple dispatch)
  • If a new problem specification is a new type of problem that will e.g. accept multiple formulations, new build_ and solve_ functions should be created that do not collide with existing problem specification functions

Metaprogramming

In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.

Markdown

Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).

File Structure

It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general

  • src/core contains the core logic of the package, including variable creation and constraint templates, i.e. things that are agnostic to the formulation
  • src/form contains formulation specific variable and constraint functions, organized under separate files for different formulations
  • src/prob contains problem specification-related functions, organized under separate files for different problem specifications
  • src/io contains all of the tools to parse and save files
  • docs/src contains all source markdown files for the documentation
  • examples contains Jupyter notebooks with walkthroughs of PowerModelsITD for new users
  • test/data contains all data related to example and unit test cases
  • test/ contains files with unit test cases

Dependencies (Project.toml)

All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.

All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]

The Manifest.toml should not be included in the repo.

+end

Types & Enums

When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:

Constants

Whenever possible, const should be used to eliminate unnecesary re-evaluations of code, and every const should have a docstring, whether internal or public.

JuMP Variables and Constraints

For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:

<jump macro id>(_<phase variant>)_<comp short name>_<quantity name>(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)

in the interest of intuitive names for users, the following special cases are also acceptable,

Formulation Styles

Problem Specification Styles

Metaprogramming

In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.

Markdown

Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).

File Structure

It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general

Dependencies (Project.toml)

All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.

All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]

The Manifest.toml should not be included in the repo.

diff --git a/dev/index.html b/dev/index.html index c1041f5..ab96364 100644 --- a/dev/index.html +++ b/dev/index.html @@ -7,4 +7,4 @@ volume={}, number={}, pages={1-14}, - doi={10.1109/TPWRS.2023.3234725}}

Acknowledgments

This code has been developed with the support of the Grant: "Optimized Resilience for Distribution and Transmission Systems" funded by the U.S. Department of Energy (DOE) Office of Electricity (OE) Advanced Grid Modeling (AGM) Research Program under program manager Ali Ghassemian. The research work conducted at Los Alamos National Laboratory is done under the auspices of the National Nuclear Security Administration of the U.S. Department of Energy under Contract No. 89233218CNA000001. The primary developers are Juan Ospina (@juanjospina) and David Fobes (@pseudocubic).

License

This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.

+ doi={10.1109/TPWRS.2023.3234725}}

Acknowledgments

This code has been developed with the support of the Grant: "Optimized Resilience for Distribution and Transmission Systems" funded by the U.S. Department of Energy (DOE) Office of Electricity (OE) Advanced Grid Modeling (AGM) Research Program under program manager Ali Ghassemian. The research work conducted at Los Alamos National Laboratory is done under the auspices of the National Nuclear Security Administration of the U.S. Department of Energy under Contract No. 89233218CNA000001. The primary developers are Juan Ospina (@juanjospina) and David Fobes (@pseudocubic).

License

This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.

diff --git a/dev/installation.html b/dev/installation.html index 3d889c3..bb01ade 100644 --- a/dev/installation.html +++ b/dev/installation.html @@ -1,4 +1,4 @@ Installation Guide · PowerModelsITD.jl

Installation Guide

From Julia, PowerModelsITD.jl is installed using the built-in package manager:

import Pkg
 Pkg.add("PowerModelsITD")

Or, within the Julia REPL:

]add PowerModelsITD

Installing an Optimizer

PowerModelsITD.jl depends on optimizers to solve Optimization problems, e.g., solve_opfitd. The table below lists the optimizer packages that have been tested with PowerModelsITD.jl, and have been found to work by the team; this list is not exhaustive, there are probably more optimizers that will work.

Install an optimizer using the Julia Package Manager, e.g.,

import Pkg
-Pkg.add("Ipopt")

Known Working Optimizers

The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.

SolverJulia PackageInstallationLicenseSupports
Artelys KnitroKNITRO.jlManualComm.(MI)LP, (MI)SOCP, (MI)NLP
CbcCbc.jlEPL(MI)LP
CPLEXCPLEX.jlManualComm.(MI)LP, (MI)SOCP
GurobiGurobi.jlManualComm.(MI)LP, (MI)SOCP
IpoptIpopt.jlEPLLP, QP, NLP
Juniper.jlJuniper.jlMIT(MI)SOCP, (MI)NLP
SCSSCS.jlMITLP, SOCP, SDP

Where:

  • LP = Linear programming
  • QP = Quadratic programming
  • SOCP = Second-order conic programming (including problems with convex quadratic constraints and/or objective)
  • NLP = Nonlinear programming
  • SDP = Semidefinite programming
  • (MI)XXX = Mixed-integer equivalent of problem type XXX

For a complete list of JuMP supported optimizers, see JuMP Documentation.

Unsatisfiable requirements detected

Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?

The Pkg documentation has a section on how to understand and manage these conflicts.

+Pkg.add("Ipopt")

Known Working Optimizers

The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.

SolverJulia PackageInstallationLicenseSupports
Artelys KnitroKNITRO.jlManualComm.(MI)LP, (MI)SOCP, (MI)NLP
CbcCbc.jlEPL(MI)LP
CPLEXCPLEX.jlManualComm.(MI)LP, (MI)SOCP
GurobiGurobi.jlManualComm.(MI)LP, (MI)SOCP
IpoptIpopt.jlEPLLP, QP, NLP
Juniper.jlJuniper.jlMIT(MI)SOCP, (MI)NLP
SCSSCS.jlMITLP, SOCP, SDP

Where:

For a complete list of JuMP supported optimizers, see JuMP Documentation.

Unsatisfiable requirements detected

Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?

The Pkg documentation has a section on how to understand and manage these conflicts.

diff --git a/dev/manual/fileformat.html b/dev/manual/fileformat.html index ec47530..388cc12 100644 --- a/dev/manual/fileformat.html +++ b/dev/manual/fileformat.html @@ -180,4 +180,4 @@ "transmission_boundary": "6", "distribution_boundary": "voltage_source.source" } -]

See how we do not need to especifically define the circuit names, but we still need to define the object.name_of_object. Internally, PowerModelsITD.jl will parse the files and assign the names: 3bus_unbal_nogen_1 and 3bus_unbal_nogen_2 as the names of the circuits (based on the ckt_name_n standard format).

Important Note: In the case where multiple distribuition systems are defined, let's say 3 or more, and only two have the same circuit name, if auto_rename=false (i.e., not used) errors will be displayed, if auto_rename=true only the repeated circuits will be renamed (in this case, all repeated circuits after the first one).

The auto rename option can be very useful for some cases, but users must be very careful when using it since specific boundary connections are going to be performed in a sequential manner and PowerModelsITD.jl cannot guarantee that this is what the user is expecting. To avoid confusions, we recommend users stick to the ideal boundary linking file JSON format.

+]

See how we do not need to especifically define the circuit names, but we still need to define the object.name_of_object. Internally, PowerModelsITD.jl will parse the files and assign the names: 3bus_unbal_nogen_1 and 3bus_unbal_nogen_2 as the names of the circuits (based on the ckt_name_n standard format).

Important Note: In the case where multiple distribuition systems are defined, let's say 3 or more, and only two have the same circuit name, if auto_rename=false (i.e., not used) errors will be displayed, if auto_rename=true only the repeated circuits will be renamed (in this case, all repeated circuits after the first one).

The auto rename option can be very useful for some cases, but users must be very careful when using it since specific boundary connections are going to be performed in a sequential manner and PowerModelsITD.jl cannot guarantee that this is what the user is expecting. To avoid confusions, we recommend users stick to the ideal boundary linking file JSON format.

diff --git a/dev/manual/formulations.html b/dev/manual/formulations.html index a109d2c..37bb534 100644 --- a/dev/manual/formulations.html +++ b/dev/manual/formulations.html @@ -120,4 +120,4 @@ & \Big({w_{\beta^{^\mathcal{T}}}} \Big) = \Big(w^{b}_{\beta^{^\mathcal{D}}}\Big), \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - W equality - phase b} \\ & \Big({w_{\beta^{^\mathcal{T}}}} \Big) = \Big(w^{c}_{\beta^{^\mathcal{D}}}\Big), \ \forall (\beta^{^\mathcal{T}},\beta^{^\mathcal{D}}) \in \Lambda \mbox{ - W equality - phase c} \\ % -\end{align}\]

+\end{align}\]

diff --git a/dev/manual/quickguide.html b/dev/manual/quickguide.html index 0d0e9c9..8707e7f 100644 --- a/dev/manual/quickguide.html +++ b/dev/manual/quickguide.html @@ -31,4 +31,4 @@ pmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type. result = solve_mn_opfitd(pm_file, pmd_files, boundary_file, pmitd_type, Ipopt.Optimizer; auto_rename=true) -

Important Note: If you examine the file case3_unbalanced_withoutgen_mn.dss in detail, you will notice how time series power values are defined inside the opendss file as New Loadshape.ls1 pmult=(file=load_profile.csv), and then the load models are defined with parameters model=1 daily=ls1. This definition is sufficient for PowerModelsITD.jl to understand that this is a multinetwork problem. If you examine the content of the load_profile.csv file, you will notice that there are 4 time steps. This will cause the transmission, distribution, and boundary data to be replicated x4 (i.e., 4 times) while it is parsed to represent the overall problem.

Note: The auto_rename=true option used in this example will be explained in later documentation.

Accessing Different Formulations

There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported formulations is presented below.

Examples

More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsITD.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation.

+

Important Note: If you examine the file case3_unbalanced_withoutgen_mn.dss in detail, you will notice how time series power values are defined inside the opendss file as New Loadshape.ls1 pmult=(file=load_profile.csv), and then the load models are defined with parameters model=1 daily=ls1. This definition is sufficient for PowerModelsITD.jl to understand that this is a multinetwork problem. If you examine the content of the load_profile.csv file, you will notice that there are 4 time steps. This will cause the transmission, distribution, and boundary data to be replicated x4 (i.e., 4 times) while it is parsed to represent the overall problem.

Note: The auto_rename=true option used in this example will be explained in later documentation.

Accessing Different Formulations

There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported formulations is presented below.

Examples

More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsITD.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation.

diff --git a/dev/manual/storage.html b/dev/manual/storage.html index d8a69ee..a8313fb 100644 --- a/dev/manual/storage.html +++ b/dev/manual/storage.html @@ -81,4 +81,4 @@ &\bigg(\sum_{m \in G^{^\mathcal{D}}} c_{2m}(\sum_{\varphi \in \Phi} P_{g,m}^{\mathcal{D},\varphi})^2 + c_{1m}(\sum_{\varphi \in \Phi} P_{g,m}^{\mathcal{D},\varphi}) + c_{0m} \bigg) +\\ &\bigg(\sum_{\varepsilon \in E^{^\mathcal{D}}} c_{\varepsilon}(sd_{\varepsilon}^{\mathcal{D}})\bigg) \end{split} -\end{align}\]

As observed, the costs of discharging the storage devices for both Transmission and Distribution system(s) are added the cost function of the OPFITD. This means that storage devices will only discharge power to the grid when the cost of charging + discharging energy is less than the cost of not using (cycling) the storage device.

This cost function only cosiders cost as a factor for determining when to use the storage devices, however, it is important to note that users are encouraged to create their own cost functions that consider other factors (e.g., voltage deviations) that will make the storage devices operate more often, as needed.

+\end{align}\]

As observed, the costs of discharging the storage devices for both Transmission and Distribution system(s) are added the cost function of the OPFITD. This means that storage devices will only discharge power to the grid when the cost of charging + discharging energy is less than the cost of not using (cycling) the storage device.

This cost function only cosiders cost as a factor for determining when to use the storage devices, however, it is important to note that users are encouraged to create their own cost functions that consider other factors (e.g., voltage deviations) that will make the storage devices operate more often, as needed.

diff --git a/dev/reference/base.html b/dev/reference/base.html index 614896c..5ef72e9 100644 --- a/dev/reference/base.html +++ b/dev/reference/base.html @@ -1,2 +1,2 @@ -Base · PowerModelsITD.jl

Base

PowerModelsITD.refFunction

helper function to access the AbstractPowerModelITD structs' ref, returns (id,data) pairs

source
PowerModelsITD.varFunction

helper function to access the AbstractPowerModelITD structs' var, returns JuMP VariableRef

source
PowerModelsITD.idsFunction

helper function to access the ids of AbstractPowerModelITD structs' ref, returns ints

source
PowerModelsITD.conFunction

helper function to access the AbstractPowerModelITD structs' con, returns JuMP Constraint

source
PowerModelsITD.nwsFunction

helper function to access multinetwork data from AbstractPowerModelITD structs, returns (id,data) pairs

source
PowerModelsITD.nw_idsFunction

helper function to access the ids of multinetworks from AbstractPowerModelITD structs, returns ints

source

Helper functions

Ref Creation Functions

PowerModelsITD.ref_add_core!Method
function ref_add_core!(ref::Dict{Symbol,Any})

Returns a dict that stores commonly used pre-computed data obtained from the data dictionary, primarily for converting data-types, filtering out loads in the transmission-side system, removing slack generators in the distribution-side system, and storing system-wide values that need to be computed globally. Some of the common keys include:

  • See ref_add_core!(ref) from PowerModels),
  • See ref_add_core!(ref) from PowerModelsDistribution),
  • :boundary – the set of boundary elements that are active in the network,
  • :arcs_boundary_from – the set [(i,b["f_bus"],b["t_bus"]) for (i,b) in ref[:boundary]],
  • :arcs_boundary_to – the set [(i,b["t_bus"],b["f_bus"]) for (i,b) in ref[:boundary]],
  • :arcs_boundary – the set of arcs from both arcs_boundary_from and arcs_boundary_to,
  • :bus_arcs_boundary_from – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_from]]),
  • :bus_arcs_boundary_to – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_to]]).
source
+Base · PowerModelsITD.jl

Base

PowerModelsITD.refFunction

helper function to access the AbstractPowerModelITD structs' ref, returns (id,data) pairs

source
PowerModelsITD.varFunction

helper function to access the AbstractPowerModelITD structs' var, returns JuMP VariableRef

source
PowerModelsITD.idsFunction

helper function to access the ids of AbstractPowerModelITD structs' ref, returns ints

source
PowerModelsITD.conFunction

helper function to access the AbstractPowerModelITD structs' con, returns JuMP Constraint

source
PowerModelsITD.nwsFunction

helper function to access multinetwork data from AbstractPowerModelITD structs, returns (id,data) pairs

source
PowerModelsITD.nw_idsFunction

helper function to access the ids of multinetworks from AbstractPowerModelITD structs, returns ints

source

Helper functions

Ref Creation Functions

PowerModelsITD.ref_add_core!Method
function ref_add_core!(ref::Dict{Symbol,Any})

Returns a dict that stores commonly used pre-computed data obtained from the data dictionary, primarily for converting data-types, filtering out loads in the transmission-side system, removing slack generators in the distribution-side system, and storing system-wide values that need to be computed globally. Some of the common keys include:

  • See ref_add_core!(ref) from PowerModels),
  • See ref_add_core!(ref) from PowerModelsDistribution),
  • :boundary – the set of boundary elements that are active in the network,
  • :arcs_boundary_from – the set [(i,b["f_bus"],b["t_bus"]) for (i,b) in ref[:boundary]],
  • :arcs_boundary_to – the set [(i,b["t_bus"],b["f_bus"]) for (i,b) in ref[:boundary]],
  • :arcs_boundary – the set of arcs from both arcs_boundary_from and arcs_boundary_to,
  • :bus_arcs_boundary_from – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_from]]),
  • :bus_arcs_boundary_to – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_to]]).
source
diff --git a/dev/reference/constants.html b/dev/reference/constants.html index 065db4f..26b6c32 100644 --- a/dev/reference/constants.html +++ b/dev/reference/constants.html @@ -1,2 +1,2 @@ -Constants · PowerModelsITD.jl
+Constants · PowerModelsITD.jl
diff --git a/dev/reference/constraints.html b/dev/reference/constraints.html index 91192b2..38483f3 100644 --- a/dev/reference/constraints.html +++ b/dev/reference/constraints.html @@ -3,15 +3,15 @@ pmitd::AbstractIVRPowerModelITD, i::Int; nw::Int=nw_id_default -)

Boundary power constraints based on rectangular currents (I) for AbstractIVRPowerModelITD.

source
PowerModelsITD.constraint_boundary_powerMethod
function constraint_boundary_power(
+)

Boundary power constraints based on rectangular currents (I) for AbstractIVRPowerModelITD.

source
PowerModelsITD.constraint_boundary_powerMethod
function constraint_boundary_power(
     pmitd::AbstractPowerModelITD,
     i::Int;
     nw::Int=nw_id_default
-)

Boundary power constraints for AbstractPowerModelITD.

source
PowerModelsITD.constraint_boundary_powerMethod
function constraint_boundary_power(
+)

Boundary power constraints for AbstractPowerModelITD.

source
PowerModelsITD.constraint_boundary_powerMethod
function constraint_boundary_power(
     pmitd::LPowerModelITD,
     i::Int;
     nw::Int=nw_id_default
-)

Boundary power constraints for LPowerModelITD (Linear versions - Active P only).

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

Boundary power constraints for LPowerModelITD (Linear versions - Active P only).

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.ACPPowerModel,
     pmd::_PMD.ACPUPowerModel,
     i::Int,
@@ -19,7 +19,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

ACP-ACPU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

ACP-ACPU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.ACPPowerModel,
     pmd::_PMD.FOTPUPowerModel,
     i::Int,
@@ -27,7 +27,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

ACP-FOTPU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

ACP-FOTPU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.ACRPowerModel,
     pmd::_PMD.ACRUPowerModel,
     i::Int,
@@ -35,7 +35,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

ACR-ACRU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

ACR-ACRU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.ACRPowerModel,
     pmd::_PMD.FBSUBFPowerModel,
     i::Int,
@@ -43,7 +43,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

ACR-FBSU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

ACR-FBSU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.ACRPowerModel,
     pmd::_PMD.FOTRUPowerModel,
     i::Int,
@@ -51,11 +51,11 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

ACR-FOTRU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

ACR-FOTRU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pmitd::AbstractPowerModelITD,
     i::Int;
     nw::Int=nw_id_default
-)

General voltage angle boundary constraint.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

General voltage angle boundary constraint.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.DCPPowerModel,
     pmd::_PMD.DCPUPowerModel,
     i::Int,
@@ -63,7 +63,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

DCP-DCPU boundary bus voltage angle constraints: DCP angle.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

DCP-DCPU boundary bus voltage angle constraints: DCP angle.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.IVRPowerModel,
     pmd::_PMD.IVRUPowerModel,
     i::Int,
@@ -71,7 +71,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

IVR-IVRU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

IVR-IVRU boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.NFAPowerModel,
     pmd::_PMD.NFAUPowerModel,
     i::Int,
@@ -79,7 +79,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

NFA-NFAU boundary bus voltage angle constraints: empty NFA angle.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

NFA-NFAU boundary bus voltage angle constraints: empty NFA angle.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.AbstractBFAModel,
     pmd::_PMD.LPUBFDiagPowerModel,
     i::Int,
@@ -87,7 +87,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

BFA-LinDist3FlowPowerModel boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

BFA-LinDist3FlowPowerModel boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.AbstractSDPWRMModel,
     pmd::_PMD.SOCConicUBFPowerModel,
     i::Int,
@@ -95,7 +95,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

SDPWRM-SOCConicUBF boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

SDPWRM-SOCConicUBF boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.AbstractSOCBFConicModel,
     pmd::_PMD.SOCConicUBFPowerModel,
     i::Int,
@@ -103,7 +103,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

SOCBFConic-SOCUBFConic boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

SOCBFConic-SOCUBFConic boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.AbstractSOCBFModel,
     pmd::_PMD.LPUBFDiagPowerModel,
     i::Int,
@@ -111,7 +111,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

SOCBF-LinDist3FlowPowerModel boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

SOCBF-LinDist3FlowPowerModel boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.AbstractSOCBFModel,
     pmd::_PMD.SOCNLPUBFPowerModel,
     i::Int,
@@ -119,7 +119,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

SOCBF-SOCNLUBF boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
+)

SOCBF-SOCNLUBF boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_angleMethod
function constraint_boundary_voltage_angle(
     pm::_PM.AbstractSOCWRConicModel,
     pmd::_PMD.SOCConicUBFPowerModel,
     i::Int,
@@ -127,7 +127,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

SOCWRConic-SOCConicUBF boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

SOCWRConic-SOCConicUBF boundary bus voltage angle constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.ACPPowerModel,
     pmd::_PMD.ACPUPowerModel,
     i::Int,
@@ -135,7 +135,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

ACP-ACPU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

ACP-ACPU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.ACPPowerModel,
     pmd::_PMD.FOTPUPowerModel,
     i::Int,
@@ -143,7 +143,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

ACP-FOTPU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

ACP-FOTPU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.ACRPowerModel,
     pmd::_PMD.ACRUPowerModel,
     i::Int,
@@ -151,7 +151,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

ACR-ACRU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

ACR-ACRU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.ACRPowerModel,
     pmd::_PMD.FBSUBFPowerModel,
     i::Int,
@@ -159,7 +159,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

ACR-FBSU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

ACR-FBSU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.ACRPowerModel,
     pmd::_PMD.FOTRUPowerModel,
     i::Int,
@@ -167,11 +167,11 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

ACR-FOTRU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

ACR-FOTRU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pmitd::AbstractPowerModelITD,
     i::Int;
     nw::Int=nw_id_default
-)

General voltage magnitude boundary constraint.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

General voltage magnitude boundary constraint.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.DCPPowerModel,
     pmd::_PMD.DCPUPowerModel,
     i::Int,
@@ -179,7 +179,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

DCP-DCPU boundary bus voltage magnitude constraints: empty since DC keeps vm = 1 for all.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

DCP-DCPU boundary bus voltage magnitude constraints: empty since DC keeps vm = 1 for all.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.IVRPowerModel,
     pmd::_PMD.IVRUPowerModel,
     i::Int,
@@ -187,7 +187,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

IVR-IVRU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

IVR-IVRU boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.NFAPowerModel,
     pmd::_PMD.NFAUPowerModel,
     i::Int,
@@ -195,7 +195,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

NFA-NFAU boundary bus voltage magnitude constraints: empty NFA.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

NFA-NFAU boundary bus voltage magnitude constraints: empty NFA.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.AbstractBFAModel,
     pmd::_PMD.LPUBFDiagPowerModel,
     i::Int,
@@ -203,7 +203,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

BFA-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

BFA-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.AbstractSDPWRMModel,
     pmd::_PMD.SOCConicUBFPowerModel,
     i::Int,
@@ -211,7 +211,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

SDPWRM-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

SDPWRM-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.AbstractSOCBFConicModel,
     pmd::_PMD.SOCConicUBFPowerModel,
     i::Int,
@@ -219,7 +219,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

SOCBFConic-SOCUBFConic boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

SOCBFConic-SOCUBFConic boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.AbstractSOCBFModel,
     pmd::_PMD.LPUBFDiagPowerModel,
     i::Int,
@@ -227,7 +227,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int=nw_id_default
-)

SOCBF-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

SOCBF-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.AbstractSOCBFModel,
     pmd::_PMD.SOCNLPUBFPowerModel,
     i::Int,
@@ -235,7 +235,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

SOCBF-SOCNLUBF boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
+)

SOCBF-SOCNLUBF boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_boundary_voltage_magnitudeMethod
function constraint_boundary_voltage_magnitude(
     pm::_PM.AbstractSOCWRConicModel,
     pmd::_PMD.SOCConicUBFPowerModel,
     i::Int,
@@ -243,7 +243,7 @@
     f_connections::Vector{Int},
     t_connections::Vector{Int};
     nw::Int = nw_id_default
-)

SOCWRConic-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_distribution_current_balanceMethod
function constraint_distribution_current_balance(
+)

SOCWRConic-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.

source
PowerModelsITD.constraint_distribution_current_balanceMethod
function constraint_distribution_current_balance(
     pmitd::AbstractPowerModelITD,
     pmd::_PMD.AbstractUnbalancedIVRModel,
     n::Int,
@@ -259,13 +259,13 @@
     bus_loads::Vector{Tuple{Int,Vector{Int}}},
     bus_shunts::Vector{Tuple{Int,Vector{Int}}},
     bus_arcs_boundary_to
-)

IVRU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_current_balance_boundaryMethod
function constraint_distribution_current_balance_boundary(
+)

IVRU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_current_balance_boundaryMethod
function constraint_distribution_current_balance_boundary(
     pmitd::AbstractIVRPowerModelITD,
     i::Int,
     j::Int,
     boundary_buses::Vector;
     nw_pmitd::Int=nw_id_default
-)

General current balance contraints for boundary buses in the distribution system-side.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+)

General current balance contraints for boundary buses in the distribution system-side.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
     pmitd::AbstractBFPowerModelITD,
     pmd::_PMD.LPUBFDiagPowerModel,
     n::Int,
@@ -281,7 +281,7 @@
     bus_loads::Vector{Tuple{Int,Vector{Int}}},
     bus_shunts::Vector{Tuple{Int,Vector{Int}}},
     bus_arcs_boundary_to
-)

LinDist3FlowPowerModel distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+)

LinDist3FlowPowerModel distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
     pmitd::AbstractPowerModelITD,
     pmd::_PMD.FBSUBFPowerModel,
     n::Int,
@@ -297,7 +297,7 @@
     bus_loads::Vector{Tuple{Int,Vector{Int}}},
     bus_shunts::Vector{Tuple{Int,Vector{Int}}},
     bus_arcs_boundary_to
-)

FBSU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+)

FBSU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
     pmitd::AbstractPowerModelITD,
     pmd::_PMD.FOTPUPowerModel,
     n::Int,
@@ -313,7 +313,7 @@
     bus_loads::Vector{Tuple{Int,Vector{Int}}},
     bus_shunts::Vector{Tuple{Int,Vector{Int}}},
     bus_arcs_boundary_to
-)

FOTPU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+)

FOTPU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
     pmitd::AbstractPowerModelITD,
     pmd::_PMD.FOTRUPowerModel,
     n::Int,
@@ -329,7 +329,7 @@
     bus_loads::Vector{Tuple{Int,Vector{Int}}},
     bus_shunts::Vector{Tuple{Int,Vector{Int}}},
     bus_arcs_boundary_to
-)

FOTRU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+)

FOTRU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
     pmitd::AbstractPowerModelITD,
     pmd::_PMD.AbstractUnbalancedACPModel,
     n::Int,
@@ -345,7 +345,7 @@
     bus_loads::Vector{Tuple{Int,Vector{Int}}},
     bus_shunts::Vector{Tuple{Int,Vector{Int}}},
     bus_arcs_boundary_to
-)

ACPU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+)

ACPU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
     pmitd::AbstractPowerModelITD,
     pmd::_PMD.AbstractUnbalancedACRModel,
     n::Int,
@@ -361,7 +361,7 @@
     bus_loads::Vector{Tuple{Int,Vector{Int}}},
     bus_shunts::Vector{Tuple{Int,Vector{Int}}},
     bus_arcs_boundary_to
-)

ACRU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+)

ACRU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
     pmitd::AbstractPowerModelITD,
     pmd::_PMD.AbstractUnbalancedActivePowerModel,
     n::Int,
@@ -377,7 +377,7 @@
     bus_loads::Vector{Tuple{Int,Vector{Int}}},
     bus_shunts::Vector{Tuple{Int,Vector{Int}}},
     bus_arcs_boundary_to
-)

DCPU/NFAU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
+)

DCPU/NFAU distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balanceMethod
function constraint_distribution_power_balance(
     pmitd::AbstractPowerModelITD,
     pmd::_PMD.AbstractUnbalancedWModels,
     n::Int,
@@ -393,13 +393,13 @@
     bus_loads::Vector{Tuple{Int,Vector{Int}}},
     bus_shunts::Vector{Tuple{Int,Vector{Int}}},
     bus_arcs_boundary_to
-)

Unbalanced W models distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balance_boundaryMethod
function constraint_distribution_power_balance_boundary(
+)

Unbalanced W models distribution constraint power balance.

source
PowerModelsITD.constraint_distribution_power_balance_boundaryMethod
function constraint_distribution_power_balance_boundary(
     pmitd::AbstractPowerModelITD,
     i::Int,
     j::Int,
     boundary_buses::Vector;
     nw_pmitd::Int=nw_id_default
-)

General power balance contraints for boundary buses in the distribution system-side.

source
PowerModelsITD.constraint_transmission_current_balanceMethod
function constraint_transmission_current_balance(
+)

General power balance contraints for boundary buses in the distribution system-side.

source
PowerModelsITD.constraint_transmission_current_balanceMethod
function constraint_transmission_current_balance(
     pmitd::AbstractPowerModelITD,
     pm::_PM.AbstractIVRModel,
     n::Int,
@@ -413,13 +413,13 @@
     bus_gs,
     bus_bs,
     bus_arcs_boundary_from
-)

IVR transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_current_balance_boundaryMethod
function constraint_transmission_current_balance_boundary(
+)

IVR transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_current_balance_boundaryMethod
function constraint_transmission_current_balance_boundary(
     pmitd::AbstractIVRPowerModelITD,
     i::Int,
     j::Int,
     boundary_buses::Vector;
     nw_pmitd::Int=nw_id_default
-)

General current balance contraints for boundary buses in the transmission system-side.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
+)

General current balance contraints for boundary buses in the transmission system-side.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
     pmitd::AbstractPowerModelITD,
     pm::_PM.AbstractACPModel,
     n::Int,
@@ -435,7 +435,7 @@
     bus_gs,
     bus_bs,
     bus_arcs_boundary_from
-)

ACP transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
+)

ACP transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
     pmitd::AbstractPowerModelITD,
     pm::_PM.AbstractACRModel,
     n::Int,
@@ -451,7 +451,7 @@
     bus_gs,
     bus_bs,
     bus_arcs_boundary_from
-)

ACR transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
+)

ACR transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
     pmitd::AbstractPowerModelITD,
     pm::_PM.AbstractActivePowerModel,
     n::Int,
@@ -467,7 +467,7 @@
     bus_gs,
     bus_bs,
     bus_arcs_boundary_from
-)

DCP/NFA transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
+)

DCP/NFA transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balanceMethod
function constraint_transmission_power_balance(
     pmitd::AbstractPowerModelITD,
     pm::_PM.AbstractWModels,
     n::Int,
@@ -483,10 +483,10 @@
     bus_gs,
     bus_bs,
     bus_arcs_boundary_from
-)

W Models (e.g., SOCBF) transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balance_boundaryMethod
function constraint_transmission_power_balance_boundary(
+)

W Models (e.g., SOCBF) transmission constraint power balance.

source
PowerModelsITD.constraint_transmission_power_balance_boundaryMethod
function constraint_transmission_power_balance_boundary(
     pmitd::AbstractPowerModelITD,
     i::Int,
     j::Int,
     boundary_buses::Vector;
     nw_pmitd::Int=nw_id_default
-)

General power balance contraints for boundary buses in the transmission system-side.

source
+)

General power balance contraints for boundary buses in the transmission system-side.

source diff --git a/dev/reference/data_models.html b/dev/reference/data_models.html index 4908f1a..ce7daf6 100644 --- a/dev/reference/data_models.html +++ b/dev/reference/data_models.html @@ -5,67 +5,67 @@ pmitd_file::String; multinetwork::Bool=false auto_rename::Bool=false -)

Parses PowerModels, PowerModelsDistribution, and PowerModelsITD boundary linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.

source
function parse_files(
+)

Parses PowerModels, PowerModelsDistribution, and PowerModelsITD boundary linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.

source
function parse_files(
     pm_file::String,
     pmd_files::Vector,
     pmitd_file::String;
     multinetwork::Bool=false,
     auto_rename::Bool=false
-)

Parses PowerModels, PowerModelsDistribution vector, and PowerModelsITD linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.

source
PowerModelsITD.parse_jsonFunction
function parse_json(
+)

Parses PowerModels, PowerModelsDistribution vector, and PowerModelsITD linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.

source
PowerModelsITD.parse_jsonFunction
function parse_json(
     path::String
-)

Parses a JavaScript Object Notation (JSON) file from the file path path and returns a dictionary containing the corresponding parsed data. Primarily used for boundry linkage files.

source
PowerModelsITD.parse_link_fileFunction
function parse_link_file(
+)

Parses a JavaScript Object Notation (JSON) file from the file path path and returns a dictionary containing the corresponding parsed data. Primarily used for boundry linkage files.

source
PowerModelsITD.parse_link_fileFunction
function parse_link_file(
     pmitd_file::String
-)

Parses a linking file from the file pmitd_file and returns a PowerModelsITD data structured linking network dictionary.

source
PowerModelsITD.parse_power_transmission_fileFunction
function parse_power_transmission_file(
+)

Parses a linking file from the file pmitd_file and returns a PowerModelsITD data structured linking network dictionary.

source
PowerModelsITD.parse_power_transmission_fileFunction
function parse_power_transmission_file(
     pm_file::String;
     skip_correct::Bool = true,
     multinetwork::Bool=false,
     number_multinetworks::Int=0
-)

Parses a power transmission file from the file pm_file and returns a PowerModels data structured pm network dictionary.

source
PowerModelsITD.parse_power_distribution_fileFunction
function parse_power_distribution_file(
+)

Parses a power transmission file from the file pm_file and returns a PowerModels data structured pm network dictionary.

source
PowerModelsITD.parse_power_distribution_fileFunction
function parse_power_distribution_file(
     pmd_file::String,
     base_data::Dict{String,<:Any}=Dict{String, Any}();
     unique::Bool=true,
     multinetwork::Bool=false,
     auto_rename::Bool=false,
     ms_num::Int=1
-)

Parses power distribution files from the file pmd_file depending on the file extension. base_data represents a dictionary that contains data from other pmd systems (serving as the base where all data will be combined), unique represents if the pmd data provided is the first one passed or unique. If it is not unique, then the components need to be renamed before being added. Returns a PowerModelsDistribution data structured pmd network (a dictionary) with renamed components (if applicable).

source

Data Transformations

PowerModelsITD.apply_kron_reduction!Method
function apply_kron_reduction!(
+)

Parses power distribution files from the file pmd_file depending on the file extension. base_data represents a dictionary that contains data from other pmd systems (serving as the base where all data will be combined), unique represents if the pmd data provided is the first one passed or unique. If it is not unique, then the components need to be renamed before being added. Returns a PowerModelsDistribution data structured pmd network (a dictionary) with renamed components (if applicable).

source

Data Transformations

PowerModelsITD.apply_kron_reduction!Method
function apply_kron_reduction!(
     pmitd_data::Dict{String,<:Any}
-)

Applies the corresponding transformation that applies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases.

source
PowerModelsITD.apply_phase_projection!Method
function apply_phase_projection!(
+)

Applies the corresponding transformation that applies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases.

source
PowerModelsITD.apply_phase_projection!Method
function apply_phase_projection!(
     pmitd_data::Dict{String,<:Any}
-)

Applies the corresponding transformation to apply phase projection: pad matrices and vectors to max number of conductors

source
PowerModelsITD.apply_phase_projection_delta!Method
function apply_phase_projection_delta!(
+)

Applies the corresponding transformation to apply phase projection: pad matrices and vectors to max number of conductors

source
PowerModelsITD.apply_phase_projection_delta!Method
function apply_phase_projection_delta!(
     pmitd_data::Dict{String,<:Any}
-)

Applies the corresponding transformation to apply phase projection delta for components where unprojected states are not yet supported (delta configurations). See [apply_phase_projection!]

source
PowerModelsITD.apply_voltage_angle_difference_bounds!Function
function apply_voltage_angle_difference_bounds!(
+)

Applies the corresponding transformation to apply phase projection delta for components where unprojected states are not yet supported (delta configurations). See [apply_phase_projection!]

source
PowerModelsITD.apply_voltage_angle_difference_bounds!Function
function apply_voltage_angle_difference_bounds!(
     pmitd_data::Dict{String,<:Any},
     vad::Real=5.0
-)

Applies the corresponding transformation of voltage angle difference bound given by vad::Real in degrees (i.e., the allowed drift of angle from one end of a line to another) to all lines, to the pmd dictionary.

source
PowerModelsITD.apply_voltage_bounds!Method
function apply_voltage_bounds!(
+)

Applies the corresponding transformation of voltage angle difference bound given by vad::Real in degrees (i.e., the allowed drift of angle from one end of a line to another) to all lines, to the pmd dictionary.

source
PowerModelsITD.apply_voltage_bounds!Method
function apply_voltage_bounds!(
     pmitd_data::Dict{String,<:Any};
     vm_lb::Union{Real,Missing}=0.9,
     vm_ub::Union{Real,Missing}=1.1
-)

Applies the corresponding transformation of voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb) bounds, scaled by the bus' voltage, to the pmd dictionary.

source
PowerModelsITD.make_lossless!Method
function make_lossless!(
+)

Applies the corresponding transformation of voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb) bounds, scaled by the bus' voltage, to the pmd dictionary.

source
PowerModelsITD.make_lossless!Method
function make_lossless!(
     pmitd_data::Dict{String,<:Any}
-)

Applies the corresponding transformation that removes parameters from objects with loss models to make them lossless. This includes switches voltage sources and transformers, which all have loss model parameters that can be omitted.

source
PowerModelsITD.remove_all_bounds!Function
function remove_all_bounds!(
+)

Applies the corresponding transformation that removes parameters from objects with loss models to make them lossless. This includes switches voltage sources and transformers, which all have loss model parameters that can be omitted.

source
PowerModelsITD.remove_all_bounds!Function
function remove_all_bounds!(
     pmitd_data::Dict{String,<:Any};
     exclude::Vector{<:String}=String["energy_ub"]
-)

Applies the corresponding transformation that removes all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}. By default, "energy_ub" is excluded from this removal, since it is a required property on storage (in pmd).

source

Data Checking and Units Correction

PowerModelsITD.correct_network_data!Function
function correct_network_data!(
+)

Applies the corresponding transformation that removes all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}. By default, "energy_ub" is excluded from this removal, since it is a required property on storage (in pmd).

source

Data Checking and Units Correction

PowerModelsITD.correct_network_data!Function
function correct_network_data!(
     data::Dict{String,<:Any};
     multinetwork::Bool=false
-)

Corrects and prepares the data in both pm and pmd dictionaries. Also, assigns the ids given in the boundary linking data to number buses. data is the pmitd dictionary to be corrected and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.

source
PowerModelsITD.assign_boundary_buses!Function
function assign_boundary_buses!(
+)

Corrects and prepares the data in both pm and pmd dictionaries. Also, assigns the ids given in the boundary linking data to number buses. data is the pmitd dictionary to be corrected and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.

source
PowerModelsITD.assign_boundary_buses!Function
function assign_boundary_buses!(
     data::Dict{String,<:Any};
     multinetwork::Bool=false
-)

Assigns the names given in the boundary linking data to number buses in corresponding transmission and distribution networks. data is the pmitd dictionary containing the boundary information and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.

source
PowerModelsITD.resolve_units!Function
function resolve_units!(
+)

Assigns the names given in the boundary linking data to number buses in corresponding transmission and distribution networks. data is the pmitd dictionary containing the boundary information and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.

source
PowerModelsITD.resolve_units!Function
function resolve_units!(
     data::Dict{String,<:Any};
     multinetwork::Bool=false,
     number_multinetworks::Int=0
-)

Resolve the units used throughout the disparate datasets by setting the same settings bases. data is the pmitd dictionary to be corrected by resolving units, multinetwork is the boolean that defines if there are multiple networks that need to be corrected, and number_multinetworks defines the number of multinetworks.

source
PowerModelsITD.replicateFunction
function replicate(
+)

Resolve the units used throughout the disparate datasets by setting the same settings bases. data is the pmitd dictionary to be corrected by resolving units, multinetwork is the boolean that defines if there are multiple networks that need to be corrected, and number_multinetworks defines the number of multinetworks.

source
PowerModelsITD.replicateFunction
function replicate(
     sn_data::Dict{String,<:Any},
     count::Int;
     global_keys::Set{String}=Set{String}()
-)

Turns in given single network pmitd data in multinetwork data with a count replicate of the given network. Note that this function performs a deepcopy of the network data. Significant multinetwork space savings can often be achieved by building application specific methods of building multinetwork with minimal data replication. sn_data is the data to be replicated, count is the number of networks to be replicated.

source
PowerModelsITD.sol_data_model!Function
function sol_data_model!(
+)

Turns in given single network pmitd data in multinetwork data with a count replicate of the given network. Note that this function performs a deepcopy of the network data. Significant multinetwork space savings can often be achieved by building application specific methods of building multinetwork with minimal data replication. sn_data is the data to be replicated, count is the number of networks to be replicated.

source
PowerModelsITD.sol_data_model!Function
function sol_data_model!(
     pmitd::AbstractPowerModelITD,
     solution::Dict{String,<:Any}
-)

solution_processor to convert the solution(s) to polar voltage magnitudes and angles.

source
PowerModelsITD.calc_transmission_branch_flow_ac!Function
function calc_transmission_branch_flow_ac!(
+)

solution_processor to convert the solution(s) to polar voltage magnitudes and angles.

source
PowerModelsITD.calc_transmission_branch_flow_ac!Function
function calc_transmission_branch_flow_ac!(
     result::Dict{String,<:Any},
     pmitd_data::Dict{String,<:Any};
-)

Assumes a valid ac solution is included in the result and computes the branch flow values. Returns the pf solution inside the pmitd_data dictionary (not the result dictionary). Replicates the _PM function but compatible with PMITD dicitionary.

source
PowerModelsITD.transform_pmitd_solution_to_eng!Function
function transform_pmitd_solution_to_eng!(
+)

Assumes a valid ac solution is included in the result and computes the branch flow values. Returns the pf solution inside the pmitd_data dictionary (not the result dictionary). Replicates the _PM function but compatible with PMITD dicitionary.

source
PowerModelsITD.transform_pmitd_solution_to_eng!Function
function transform_pmitd_solution_to_eng!(
     result::Dict{String,<:Any},
     pmitd_data::Dict{String,<:Any}
-)

Transforms the PMITD solution from MATH to ENG model. This transformation facilitates the conversion in "pmitd" of buses numbers to buses names according to the ENG model. Ex: (100002, 9, 6) -> (100002, voltagesource.3busunbalnogenmn_2.source, 6)

source
+)

Transforms the PMITD solution from MATH to ENG model. This transformation facilitates the conversion in "pmitd" of buses numbers to buses names according to the ENG model. Ex: (100002, 9, 6) -> (100002, voltagesource.3busunbalnogenmn_2.source, 6)

source diff --git a/dev/reference/formulations.html b/dev/reference/formulations.html index c6b984b..3e566f5 100644 --- a/dev/reference/formulations.html +++ b/dev/reference/formulations.html @@ -1,2 +1,2 @@ -Formulations · PowerModelsITD.jl

Formulations

Abstract Models

Power ITD Models

Mutable Stuct creator

+Formulations · PowerModelsITD.jl

Formulations

Abstract Models

Power ITD Models

Mutable Stuct creator

diff --git a/dev/reference/internal.html b/dev/reference/internal.html index 3e67da2..7dd5ad6 100644 --- a/dev/reference/internal.html +++ b/dev/reference/internal.html @@ -2,115 +2,115 @@ Internal Functions · PowerModelsITD.jl

Internal Functions

PowerModelsITD._add_file_name!Method
function _add_file_name!(
     base_data::Dict{String,<:Any},
     data::Dict{String,<:Any}
-)

Adds filename from data to "files" dictionary in pmd (base_data).

source
PowerModelsITD._assign_boundary_buses!Method
function _assign_boundary_buses!(
     data::Dict{String,<:Any},
     conn;
     multinetwork::Bool=false,
     nw::String="0"
-)

Helper function for assigning boundary buses. data is the pmitd dictionary containing the boundary information, conn is the boundary connection information, multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned, and nw is the network number.

source
PowerModelsITD._check_and_rename_circuits!Method
function _check_and_rename_circuits!(
+)

Helper function for assigning boundary buses. data is the pmitd dictionary containing the boundary information, conn is the boundary connection information, multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned, and nw is the network number.

source
PowerModelsITD._check_and_rename_circuits!Method
function _check_and_rename_circuits!(
     base_data::Dict{String,<:Any},
     data::Dict{String,<:Any};
     auto_rename::Bool=false,
     ms_num::Int=1
-)

Checks if the name of the data ckt already exists, if so and auto_rename=false an error should be displayed telling the user that they must use the different ckt names when parsing multiple distribution systems. If auto_rename=true, PMITD will rename the repeated ckt name to repeatedCktName_(ms_num). Finally, adds the ckt name of data to "cktnames" in the `basedata` dictionary.

source
PowerModelsITD._clean_pmd_base_data!Method
function _clean_pmd_base_data!(
+)

Checks if the name of the data ckt already exists, if so and auto_rename=false an error should be displayed telling the user that they must use the different ckt names when parsing multiple distribution systems. If auto_rename=true, PMITD will rename the repeated ckt name to repeatedCktName_(ms_num). Finally, adds the ckt name of data to "cktnames" in the `basedata` dictionary.

source
PowerModelsITD._compute_boundary_active_power_start_values_distributionMethod
function _compute_boundary_active_power_start_values_distribution(
     nw_ref::Dict{Symbol,<:Any}
-)

Computes the starting values for pbound_to variables. Returns dictionary with summation of the activate power loads. Returns dictionary with the summation of the active power loads for each dist. system.

source
PowerModelsITD._compute_default_strg_cost_transmissionMethod
function _compute_default_strg_cost_transmission(
     strg_data::Dict{String,<:Any},
     baseMVA::Float64
-)

Computes a default cost for the energy storage (transmission). Returns the default storage cost to be added to the data dictionary.

source
PowerModelsITD._convert_to_pmitd_structureMethod
function _convert_to_pmitd_structure(
     data::Vector{Any}
-)

Converts json data parsed into the required pmitd structure. Returns the new data structure with necessary information and compatible names.

source
PowerModelsITD._correct_boundary_names!Method
function _correct_boundary_names!(
+)

Converts json data parsed into the required pmitd structure. Returns the new data structure with necessary information and compatible names.

source
PowerModelsITD._correct_boundary_names!Method
function _correct_boundary_names!(
     pmitd_data::Dict{String,<:Any}
-)

Corrects the names of distribution system boundary buses given in boundary linking file based on the cktnames stored in the "pmd"=>"cktnames". The correction is done sequentially, so each distribution boundary bus name will be assigned the specific ckt name that exists in the numerical position of the vector "cktnames". This process should only be applied when users explicitly use the option `autorename=true, and awarning` is displayed warning the user that the boundaries may not be correct.

source
PowerModelsITD._get_powermodel_from_powermodelitdMethod
function _get_powermodel_from_powermodelitd(
+)

Corrects the names of distribution system boundary buses given in boundary linking file based on the cktnames stored in the "pmd"=>"cktnames". The correction is done sequentially, so each distribution boundary bus name will be assigned the specific ckt name that exists in the numerical position of the vector "cktnames". This process should only be applied when users explicitly use the option `autorename=true, and awarning` is displayed warning the user that the boundaries may not be correct.

source
PowerModelsITD._rename_components!Method
function _rename_components!(
     base_data::Dict{String,<:Any},
     data::Dict{String,<:Any}
-)

Renames the components given in data for new multi-system and adds the renamed components to base_data dictionary structure. cktname.element

source
PowerModelsITD._rename_network_components!Method
function _rename_network_components!(
     base_data::Dict{String,<:Any},
     data::Dict{String,<:Any},
     ckt_name::String
-)

Rename specific components in single network dictionary. base_data is the dictionary where the renamed components are to be added, data is the dictionary containing the components to be renamed. ckt_name is the circuit name of data.

source
PowerModelsITD._scale_loads!Method
function _scale_loads!(
+)

Rename specific components in single network dictionary. base_data is the dictionary where the renamed components are to be added, data is the dictionary containing the components to be renamed. ckt_name is the circuit name of data.

source
PowerModelsITD._scale_loads!Method
function _scale_loads!(
     p_data::Dict{String,<:Any},
     scalar::Real
-)

Scales loads based on the scalar passed as second argument. p_data is the dictionary that contains the loads to be scaled. scalar is the float value used to scale all the loads in the p_data dictionary.

source
PowerModelsITD._transform_pmitd_solution_to_si!Method
function _transform_pmitd_solution_to_si!(
+)

Scales loads based on the scalar passed as second argument. p_data is the dictionary that contains the loads to be scaled. scalar is the float value used to scale all the loads in the p_data dictionary.

source
PowerModelsITD._transform_solution_to_pu!Method
function _transform_solution_to_pu!(
     result,
     pmitd_data::Dict{String,<:Any};
     make_si::Bool=false,
     multinetwork::Bool=false,
     solution_model::String="eng"
-)

Transforms the PM and PMD solutions from SI units to per-unit (pu), and the PMD solution from MATH back to ENG model.

source
PowerModelsITD._transform_solution_to_si!Method
function _transform_solution_to_si!(
     result,
     pmitd_data::Dict{String,<:Any};
     make_si::Bool=true,
     multinetwork::Bool=false,
     solution_model::String="eng"
-)

Transforms the PM and PMD solutions from per-unit (pu) to SI units, and the PMD solution from MATH back to ENG model.

source
+)

Transforms the PM and PMD solutions from per-unit (pu) to SI units, and the PMD solution from MATH back to ENG model.

source diff --git a/dev/reference/objectives.html b/dev/reference/objectives.html index 262e98b..e992bb6 100644 --- a/dev/reference/objectives.html +++ b/dev/reference/objectives.html @@ -1,42 +1,42 @@ Objectives · PowerModelsITD.jl

Objectives

PowerModelsITD.objective_itd_min_fuel_cost_pwlMethod
function objective_itd_min_fuel_cost_pwl(
     pmitd::AbstractPowerModelITD,
     pm::_PM.AbstractPowerModel,
     pmd::_PMD.AbstractUnbalancedPowerModel
-)

Fuel cost minimization objective with piecewise linear terms.

source
PowerModelsITD.objective_mc_variable_pg_costMethod
function objective_mc_variable_pg_cost(
     pm::_PMD.AbstractUnbalancedIVRModel
-)

Adds pgcost variables and constraints (IVR formulation) (Copied from PMD and modified to allow differentiation with TD gens (...dist)).

source
PowerModelsITD.objective_mc_variable_pg_costMethod
function objective_mc_variable_pg_cost(
     pm::_PMD.AbstractUnbalancedPowerModel
-)

Adds pgcost variables and constraints (Copied from PMD and modified to allow differentiation with TD gens (...dist)).

source
+)

Adds pgcost variables and constraints (Copied from PMD and modified to allow differentiation with TD gens (...dist)).

source diff --git a/dev/reference/problems.html b/dev/reference/problems.html index 8e124ea..ab70f10 100644 --- a/dev/reference/problems.html +++ b/dev/reference/problems.html @@ -12,7 +12,7 @@ auto_rename::Bool=false, solution_model::String="eng", kwargs... -)

Solve Integrated T&D Optimal Power Flow with minimum load delta (dmld).

source
PowerModelsITD.solve_dmld_opfitdMethod
function solve_dmld_opfitd(
+)

Solve Integrated T&D Optimal Power Flow with minimum load delta (dmld).

source
PowerModelsITD.solve_dmld_opfitdMethod
function solve_dmld_opfitd(
     pmitd_data::Dict{String,<:Any},
     pmitd_type,
     optimizer;
@@ -22,7 +22,7 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Solve Integrated T&D Optimal Power Flow with minimum load delta (dmld).

source
PowerModelsITD.solve_mn_dmld_opfitd_simpleMethod
function solve_mn_dmld_opfitd_simple(
+)

Solve Integrated T&D Optimal Power Flow with minimum load delta (dmld).

source
PowerModelsITD.solve_mn_dmld_opfitd_simpleMethod
function solve_mn_dmld_opfitd_simple(
     pm_file,
     pmd_file,
     pmitd_file,
@@ -35,7 +35,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Solve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).

source
PowerModelsITD.solve_mn_dmld_opfitd_simpleMethod
function solve_mn_dmld_opfitd_simple(
+)

Solve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).

source
PowerModelsITD.solve_mn_dmld_opfitd_simpleMethod
function solve_mn_dmld_opfitd_simple(
     pmitd_data::Dict{String,<:Any},
     pmitd_type,
     optimizer;
@@ -45,7 +45,7 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Solve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).

source
PowerModelsITD.solve_mn_opfitdMethod
function solve_mn_opfitd(
+)

Solve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).

source
PowerModelsITD.solve_mn_opfitdMethod
function solve_mn_opfitd(
     pm_file,
     pmd_file,
     pmitd_file,
@@ -58,7 +58,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Solve Multinetwork Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitdMethod
function solve_mn_opfitd(
+)

Solve Multinetwork Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitdMethod
function solve_mn_opfitd(
     pmitd_data::Dict{String,<:Any}
     pmitd_type,
     optimizer;
@@ -68,7 +68,7 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Solve Multinetwork Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitd_oltcMethod
function solve_mn_opfitd_oltc(
+)

Solve Multinetwork Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitd_oltcMethod
function solve_mn_opfitd_oltc(
     pm_file,
     pmd_file,
     pmitd_file,
@@ -81,7 +81,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Solve Multinetwork Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitd_oltcMethod
function solve_mn_opfitd_oltc(
+)

Solve Multinetwork Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitd_oltcMethod
function solve_mn_opfitd_oltc(
     pmitd_data::Dict{String,<:Any},
     pmitd_type,
     optimizer;
@@ -91,7 +91,7 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Solve Multinetwork Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitd_storageMethod
function solve_mn_opfitd_storage(
+)

Solve Multinetwork Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_mn_opfitd_storageMethod
function solve_mn_opfitd_storage(
     pm_file,
     pmd_file,
     pmitd_file,
@@ -104,7 +104,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Solve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_mn_opfitd_storageMethod
function solve_mn_opfitd_storage(
+)

Solve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_mn_opfitd_storageMethod
function solve_mn_opfitd_storage(
     pmitd_data::Dict{String,<:Any}
     pmitd_type,
     optimizer;
@@ -114,7 +114,7 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Solve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_modelMethod
function solve_model(
+)

Solve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_modelMethod
function solve_model(
     pmitd_data::Dict{String,<:Any},
     pmitd_type::Type, optimizer,
     build_method::Function;
@@ -125,7 +125,7 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Instantiates and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling object from power integrated transmission-distribution input data, pmitd_data. Here, pmitd_type is the integrated power transmission-distribution modeling type, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.

source
PowerModelsITD.solve_modelMethod
function solve_model(
+)

Instantiates and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling object from power integrated transmission-distribution input data, pmitd_data. Here, pmitd_type is the integrated power transmission-distribution modeling type, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.

source
PowerModelsITD.solve_modelMethod
function solve_model(
     pm_file::String,
     pmd_file::String,
     pmitd_file::String,
@@ -140,7 +140,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Parses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, power distribution, and boundry linking input files pm_file, pmd_file, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.

source
PowerModelsITD.solve_modelMethod
function solve_model(
+)

Parses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, power distribution, and boundry linking input files pm_file, pmd_file, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.

source
PowerModelsITD.solve_modelMethod
function solve_model(
     pm_file::String,
     pmd_files::Vector,
     pmitd_file::String,
@@ -155,7 +155,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Parses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, multiple power distribution systems, and boundary linking input files pm_file, pmd_files vector of files, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork,solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.

source
PowerModelsITD.solve_opfitdMethod
function solve_opfitd(
+)

Parses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, multiple power distribution systems, and boundary linking input files pm_file, pmd_files vector of files, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork,solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.

source
PowerModelsITD.solve_opfitdMethod
function solve_opfitd(
     pm_file,
     pmd_file,
     pmitd_file,
@@ -168,7 +168,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Solve Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_opfitdMethod
function solve_opfitd(
+)

Solve Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_opfitdMethod
function solve_opfitd(
     pmitd_data::Dict{String,<:Any},
     pmitd_type,
     optimizer;
@@ -178,7 +178,7 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Solve Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_opfitd_oltcMethod
function solve_opfitd_oltc(
+)

Solve Integrated T&D Optimal Power Flow.

source
PowerModelsITD.solve_opfitd_oltcMethod
function solve_opfitd_oltc(
     pm_file,
     pmd_file,
     pmitd_file,
@@ -191,7 +191,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Solve Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_opfitd_oltcMethod
function solve_opfitd_oltc(
+)

Solve Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_opfitd_oltcMethod
function solve_opfitd_oltc(
     pmitd_data::Dict{String,<:Any},
     pmitd_type,
     optimizer;
@@ -201,7 +201,7 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Solve Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_opfitd_storageMethod
function solve_opfitd_storage(
+)

Solve Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.solve_opfitd_storageMethod
function solve_opfitd_storage(
     pm_file,
     pmd_file,
     pmitd_file,
@@ -214,7 +214,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Solve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_opfitd_storageMethod
function solve_opfitd_storage(
+)

Solve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_opfitd_storageMethod
function solve_opfitd_storage(
     pmitd_data::Dict{String,<:Any},
     pmitd_type,
     optimizer;
@@ -224,7 +224,7 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Solve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_pfitdMethod
function solve_pfitd(
+)

Solve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.solve_pfitdMethod
function solve_pfitd(
     pm_file,
     pmd_file,
     pmitd_file,
@@ -237,7 +237,7 @@
     auto_rename::Bool=false,
     solution_model::String="eng",
     kwargs...
-)

Solve Integrated T&D Power Flow

source
PowerModelsITD.solve_pfitdMethod
function solve_pfitd(
+)

Solve Integrated T&D Power Flow

source
PowerModelsITD.solve_pfitdMethod
function solve_pfitd(
     pmitd_data::Dict{String,<:Any}
     pmitd_type,
     optimizer;
@@ -247,75 +247,75 @@
     make_si::Bool=true,
     solution_model::String="eng",
     kwargs...
-)

Solve Integrated T&D Power Flow

source

Builders

PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
+)

Solve Integrated T&D Power Flow

source

Builders

PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
 	pmitd::AbstractBFPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.

source
PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
+)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.

source
PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
 	pmitd::AbstractIVRPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.

source
PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
+)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.

source
PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
 	pmitd::AbstractLNLBFPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.

source
PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
+)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.

source
PowerModelsITD.build_dmld_opfitdMethod
function build_dmld_opfitd(
 	pmitd::AbstractPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld).

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
+)

Constructor for Integrated T&D Optimal Power Flow with minimum load delta (mld).

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
 	pmitd::AbstractBFPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
 	pmitd::AbstractIVRPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
 	pmitd::AbstractLNLBFPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.

source
PowerModelsITD.build_mn_dmld_opfitd_simpleMethod
function build_mn_dmld_opfitd_simple(
 	pmitd::AbstractPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld).

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld).

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
 	pmitd::AbstractBFPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models.

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models.

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
 	pmitd::AbstractIVRPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
 	pmitd::AbstractLNLBFPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_mn_opfitdMethod
function build_mn_opfitd(
 	pmitd::AbstractPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow.

source
PowerModelsITD.build_mn_opfitd_oltcMethod
function build_mn_opfitd_oltc(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow.

source
PowerModelsITD.build_mn_opfitd_oltcMethod
function build_mn_opfitd_oltc(
 	pmitd::AbstractBFPowerModelITD
-)

Constructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for BF Models.

source
PowerModelsITD.build_mn_opfitd_oltcMethod
function build_mn_opfitd_oltc(
+)

Constructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for BF Models.

source
PowerModelsITD.build_mn_opfitd_oltcMethod
function build_mn_opfitd_oltc(
 	pmitd::AbstractLNLBFPowerModelITD
-)

Constructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_mn_opfitd_oltcMethod
function build_mn_opfitd_oltc(
+)

Constructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_mn_opfitd_oltcMethod
function build_mn_opfitd_oltc(
 	pmitd::AbstractPowerModelITD
-)

Constructor for Multinetwork Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
+)

Constructor for Multinetwork Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
 	pmitd::AbstractBFPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
 	pmitd::AbstractIVRPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
 	pmitd::AbstractLNLBFPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.

source
PowerModelsITD.build_mn_opfitd_storageMethod
function build_mn_opfitd_storage(
 	pmitd::AbstractPowerModelITD
-)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
+)

Constructor for Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
 	pmitd::AbstractBFPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow for BF Models.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
+)

Constructor for Integrated T&D Optimal Power Flow for BF Models.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
 	pmitd::AbstractIVRPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
+)

Constructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
 	pmitd::AbstractLNLBFPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
+)

Constructor for Integrated T&D Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_opfitdMethod
function build_opfitd(
 	pmitd::AbstractPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow.

source
PowerModelsITD.build_opfitd_oltcMethod
function build_opfitd_oltc(
+)

Constructor for Integrated T&D Optimal Power Flow.

source
PowerModelsITD.build_opfitd_oltcMethod
function build_opfitd_oltc(
 	pmitd::AbstractBFPowerModelITD
-)

Constructor for Integrated T&D OLTC Optimal Power Flow for BF Models.

source
PowerModelsITD.build_opfitd_oltcMethod
function build_opfitd_oltc(
+)

Constructor for Integrated T&D OLTC Optimal Power Flow for BF Models.

source
PowerModelsITD.build_opfitd_oltcMethod
function build_opfitd_oltc(
 	pmitd::AbstractLNLBFPowerModelITD
-)

Constructor for Integrated T&D OLTC Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_opfitd_oltcMethod
function build_opfitd_oltc(
+)

Constructor for Integrated T&D OLTC Optimal Power Flow for L/NL to BF.

source
PowerModelsITD.build_opfitd_oltcMethod
function build_opfitd_oltc(
 	pmitd::AbstractPowerModelITD
-)

Constructor for Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
+)

Constructor for Integrated T&D OLTC Optimal Power Flow.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
 	pmitd::AbstractBFPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
+)

Constructor for Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
 	pmitd::AbstractIVRPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
+)

Constructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
 	pmitd::AbstractLNLBFPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
+)

Constructor for Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.

source
PowerModelsITD.build_opfitd_storageMethod
function build_opfitd_storage(
 	pmitd::AbstractPowerModelITD
-)

Constructor for Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
+)

Constructor for Integrated T&D Optimal Power Flow with Storage OPF Dispatch.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
 	pmitd::AbstractBFPowerModelITD
-)

Constructor for Integrated T&D Power Flow for Branch Flow (BF) Formulations.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
+)

Constructor for Integrated T&D Power Flow for Branch Flow (BF) Formulations.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
 	pmitd::AbstractIVRPowerModelITD
-)

Constructor for Integrated T&D Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
+)

Constructor for Integrated T&D Power Flow in current-voltage (IV) variable space.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
 	pmitd::AbstractLNLBFPowerModelITD
-)

Constructor for Integrated T&D Power Flow for L/NL to BF.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
+)

Constructor for Integrated T&D Power Flow for L/NL to BF.

source
PowerModelsITD.build_pfitdMethod
function build_pfitd(
 	pmitd::AbstractPowerModelITD
-)

Constructor for Integrated T&D Power Flow.

source

Model Instantiation

PowerModelsITD.instantiate_modelFunction
function instantiate_model(
+)

Constructor for Integrated T&D Power Flow.

source

Model Instantiation

PowerModelsITD.instantiate_modelFunction
function instantiate_model(
     pm_file::String,
     pmd_files::Vector,
     pmitd_file::String,
@@ -326,7 +326,7 @@
     eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
     auto_rename::Bool=false,
     kwargs...
-)

Instantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_files vector, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.

source
function instantiate_model(
+)

Instantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_files vector, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.

source
function instantiate_model(
     pm_file::String,
     pmd_file::String,
     pmitd_file::String,
@@ -337,7 +337,7 @@
     eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
     auto_rename::Bool=false,
     kwargs...
-)

Instantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_file (one file provided), and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.

source
function instantiate_model(
+)

Instantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_file (one file provided), and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.

source
function instantiate_model(
     pmitd_data::Dict{String,<:Any},
     pmitd_type::Type,
     build_method::Function;
@@ -345,4 +345,4 @@
     pmitd_ref_extensions::Vector{<:Function}=Function[],
     eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),
     kwargs...
-)

Instantiates and returns PowerModelsITD modeling object from parsed power transmission and distribution (PMITD) input data pmitd_data. Here, pmitd_type is the integrated power transmission and distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions is an array of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.

source
+)

Instantiates and returns PowerModelsITD modeling object from parsed power transmission and distribution (PMITD) input data pmitd_data. Here, pmitd_type is the integrated power transmission and distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions is an array of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.

source diff --git a/dev/reference/variables.html b/dev/reference/variables.html index 347d2fa..80d7dc3 100644 --- a/dev/reference/variables.html +++ b/dev/reference/variables.html @@ -1,2 +1,2 @@ -Variables · PowerModelsITD.jl

Variables

+Variables · PowerModelsITD.jl

Variables

diff --git a/dev/search_index.js b/dev/search_index.js index 58dbd56..6ae4d99 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"installation.html#Installation-Guide","page":"Installation Guide","title":"Installation Guide","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"From Julia, PowerModelsITD.jl is installed using the built-in package manager:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"PowerModelsITD\")","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Or, within the Julia REPL:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"]add PowerModelsITD","category":"page"},{"location":"installation.html#Installing-an-Optimizer","page":"Installation Guide","title":"Installing an Optimizer","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"PowerModelsITD.jl depends on optimizers to solve Optimization problems, e.g., solve_opfitd. The table below lists the optimizer packages that have been tested with PowerModelsITD.jl, and have been found to work by the team; this list is not exhaustive, there are probably more optimizers that will work.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Install an optimizer using the Julia Package Manager, e.g.,","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"Ipopt\")","category":"page"},{"location":"installation.html#Known-Working-Optimizers","page":"Installation Guide","title":"Known Working Optimizers","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Solver Julia Package Installation License Supports\nArtelys Knitro KNITRO.jl Manual Comm. (MI)LP, (MI)SOCP, (MI)NLP\nCbc Cbc.jl EPL (MI)LP\nCPLEX CPLEX.jl Manual Comm. (MI)LP, (MI)SOCP\nGurobi Gurobi.jl Manual Comm. (MI)LP, (MI)SOCP\nIpopt Ipopt.jl EPL LP, QP, NLP\nJuniper.jl Juniper.jl MIT (MI)SOCP, (MI)NLP\nSCS SCS.jl MIT LP, SOCP, SDP","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Where:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"LP = Linear programming\nQP = Quadratic programming\nSOCP = Second-order conic programming (including problems with convex quadratic constraints and/or objective)\nNLP = Nonlinear programming\nSDP = Semidefinite programming\n(MI)XXX = Mixed-integer equivalent of problem type XXX","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"For a complete list of JuMP supported optimizers, see JuMP Documentation.","category":"page"},{"location":"installation.html#Unsatisfiable-requirements-detected","page":"Installation Guide","title":"Unsatisfiable requirements detected","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The Pkg documentation has a section on how to understand and manage these conflicts.","category":"page"},{"location":"developer/style.html#Style-Conventions","page":"Style Guide","title":"Style Conventions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, the following conventions should be adhered to when making changes or additions to the code base. These conventions should include any conventions applied across the InfrastructureModels ecosystem specific to power engineering (i.e conventions from InfrastructureModels, PowerModels, PowerModelsDistribution, etc.) with some additions specific to PowerModelsITD.","category":"page"},{"location":"developer/style.html#Functions","page":"Style Guide","title":"Functions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Function additions should meeting the following criteria:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All functions should be clearly named, without abbreviations, and with underscores between words, e.g. parse_files or constraint_boundary_voltage_angle; in Python this is known as lower_case_with_underscores. The exception to the abbreviate rule is cases where abbreviations would be expected in the modeling of power systems.\nAll functions that are not prepended by an underscore _ will be exported by default (i.e. when a user uses using PowerModelsITD). Public functions should have a detailed docstring instructing on usage\nAll functions that modify data in place should end with an exclamation point ! and the function input that is being modified should be the first argument (or first arguments in the case where multiple inputs are being modified in place). The exceptions to this rule are constraint and variable creation functions (i.e. those functions related to JuMP model creation), which do not include the exclaimation point\nAll function arguments, including keyword arguments, should have their types specified.\nPrivate functions, i.e. those intended to be for internal use only, should follow the same descriptive naming conventions as functions exported by default, and should always include docstrings to describe their purpose.\nFunctions should be separated by two blank lines","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"\"this function demonstrates how an internal, in-place data altering function should be defined\"\nfunction _concise_descriptive_name!(data::Dict{String,<:Any}, a::Real, b::Vector{<:Real}, c::Matrix{<:Complex}; d::Bool=false, e::Vector{Function}=Function[])\nend","category":"page"},{"location":"developer/style.html#Types-and-Enums","page":"Style Guide","title":"Types & Enums","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Prefer to use Vector{T} instead of Array{T,1}\nPrefer to use Matrix{T} instead of Array{T,2}\nEnums must be added to the JSON parser when introduced","category":"page"},{"location":"developer/style.html#Constants","page":"Style Guide","title":"Constants","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Whenever possible, const should be used to eliminate unnecesary re-evaluations of code, and every const should have a docstring, whether internal or public.","category":"page"},{"location":"developer/style.html#JuMP-Variables-and-Constraints","page":"Style Guide","title":"JuMP Variables and Constraints","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"(_)__(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"in the interest of intuitive names for users, the following special cases are also acceptable,","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"_power_real -(can be replaced with)-> _active\n_power_imaginary -(can be replaced with)-> _reactive","category":"page"},{"location":"developer/style.html#Formulation-Styles","page":"Style Guide","title":"Formulation Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new formulations should have clear error messages when they do not support existing components. For example, if a formulation addition which is intended to work with OPF does not support delta-wye transformers, the constraint_mc_transformer_power_dy\nFormulation abstract type and mutable struct must be specified in CapitalizedWords, which is a subtype of camelCase with the first word also capitalized.","category":"page"},{"location":"developer/style.html#Problem-Specification-Styles","page":"Style Guide","title":"Problem Specification Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"If a new problem specification is only needed due to the requirements of a new formulation, and is not a new type of problem, e.g. another OPF formulation, a build_ function with the same name as the existing formulation should be created that accepts a specific PowerModel (multiple dispatch)\nIf a new problem specification is a new type of problem that will e.g. accept multiple formulations, new build_ and solve_ functions should be created that do not collide with existing problem specification functions","category":"page"},{"location":"developer/style.html#Metaprogramming","page":"Style Guide","title":"Metaprogramming","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.","category":"page"},{"location":"developer/style.html#Markdown","page":"Style Guide","title":"Markdown","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).","category":"page"},{"location":"developer/style.html#File-Structure","page":"Style Guide","title":"File Structure","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"src/core contains the core logic of the package, including variable creation and constraint templates, i.e. things that are agnostic to the formulation\nsrc/form contains formulation specific variable and constraint functions, organized under separate files for different formulations\nsrc/prob contains problem specification-related functions, organized under separate files for different problem specifications\nsrc/io contains all of the tools to parse and save files\ndocs/src contains all source markdown files for the documentation\nexamples contains Jupyter notebooks with walkthroughs of PowerModelsITD for new users\ntest/data contains all data related to example and unit test cases\ntest/ contains files with unit test cases","category":"page"},{"location":"developer/style.html#Dependencies-(Project.toml)","page":"Style Guide","title":"Dependencies (Project.toml)","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"The Manifest.toml should not be included in the repo.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Introduction-to-PowerModelsITD","page":"Beginners Guide","title":"Introduction to PowerModelsITD","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this guide, we will go through a beginner guide that demonstrates the current capabilities of PowerModelsITD. This guide will showcase a non-comprehensive list of things you can do with PowerModelsITD.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Each example case shown in this guide will be divided into three main parts.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"(1) Brief explanation of the test case and what we want to do/obtain.\n(2) The Julia code needed to perform the specific case study (users can copy and paste this code directly).\n(3) The console output obtained when the code is executed.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Important: All files used in this beginner guide are available in the /test/data folder of the repository.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#1:-Solving-a-simple-Optimal-Power-Flow-for-Integrated-Transmission-Distribution-systems-(OPFITD)","page":"Beginners Guide","title":"Example Case #1: Solving a simple Optimal Power Flow for Integrated Transmission-Distribution systems (OPFITD)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#1","page":"Beginners Guide","title":"Test Case #1","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#1","page":"Beginners Guide","title":"Julia Code for Test Case #1","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\ndata = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary\nresult = solve_opfitd(data, formulation, Ipopt.Optimizer) # solve the opfitd\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values for Transmission system: $(result[\"solution\"][\"it\"][\"pm\"])\"\n@info \"Solution Values for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"])\"\n@info \"Solution Values for Boundary(ies): $(result[\"solution\"][\"it\"][\"pmitd\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#1","page":"Beginners Guide","title":"Console Output for Test Case #1","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 17953.746512039743 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.05849599838256836 [seconds]\n\n[ Main | Info ] : Solution Values for Transmission system: Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qf\" => -215.4572384567855, \"qt\" => 220.01471251650577, \"pt\" => 72.72770254777281, \"pf\" => -72.10324334974787), \"1\" => Dict{String, Any}(\"qf\" => -91.9457671031378, \"qt\" => 113.04924896169344, \"pt\" => -235.96795359006418, \"pf\" => 238.13985616928193), \"5\" => Dict{String, Any}(\"qf\" => 71.37529049674947, \"qt\" => -69.00868855761938, \"pt\" => 57.04309684079022, \"pf\" => -56.75055132454856), \"2\" => Dict{String, Any}(\"qf\" => 40.82747127060588, \"qt\" => -27.51897757380047, \"pt\" => -190.17342809935752, \"pf\" => 191.55864094141782), \"6\" => Dict{String, Any}(\"qf\" => 19.289482716290323, \"qt\" => 1.0554040857229503, \"pt\" => 239.9976806084548, \"pf\" => -237.90830207159405), \"7\" => Dict{String, Any}(\"qf\" => 3.7979894950920543, \"qt\" => -4.367184067738672, \"pt\" => -8.068452673591816, \"pf\" => 8.071196939812054), \"3\" => Dict{String, Any}(\"qf\" => 208.61829769507162, \"qt\" => -204.19918131371665, \"pt\" => 220.40004611863847, \"pf\" => -219.6984944935753)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 54.23181658487047, \"pg\" => 18.96136666983862), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079376986, \"pg\" => 40.00000096678977), \"5\" => Dict{String, Any}(\"qg\" => -203.1437772279937, \"pg\" => 460.3977267270933), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106876985, \"pg\" => 170.00000165033464), \"3\" => Dict{String, Any}(\"qg\" => 390.00000301325525, \"pg\" => 315.97715122322427)), \"multinetwork\" => false, \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => -9.820934169803595e-29, \"vm\" => 0.8999999900918129), \"1\" => Dict{String, Any}(\"va\" => 3.9557118095964663, \"vm\" => 0.9178154479809132), \"5\" => Dict{String, Any}(\"va\" => -0.8036120919989638, \"vm\" => 0.9400883479210898), \"2\" => Dict{String, Any}(\"va\" => -0.6563318572164789, \"vm\" => 0.9416319858451535), \"10\" => Dict{String, Any}(\"va\" => 5.018509000535593, \"vm\" => 0.904864159526407), \"3\" => Dict{String, Any}(\"va\" => -0.3122279603896953, \"vm\" => 0.9670939985734723)), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}(\"line\" => Dict{String, Any}(\"3bus_unbal.quad\" => Dict{String, Any}(\"qf\" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], \"qt\" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], \"pt\" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], \"pf\" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), \"3bus_unbal.ohline\" => Dict{String, Any}(\"qf\" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], \"qt\" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], \"pt\" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], \"pf\" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal.subxf\" => Dict{String, Any}(\"q\" => [[1354.7952022418647, 1507.3400640138161, 1504.5761375753734], [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072]], \"p\" => [[3367.1286152278885, 2346.3702946258413, 2354.835193007617], [-3367.110727286094, -2346.3597337552624, -2354.8245890269895]])), \"generator\" => Dict{String, Any}(\"3bus_unbal.gen1\" => Dict{String, Any}(\"qg_bus\" => [-0.0, -0.0, -0.0], \"qg\" => [-0.0, -0.0, -0.0], \"pg\" => [666.6676628468832, 666.6676628064197, 666.6676628099706], \"pg_bus\" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), \"load\" => Dict{String, Any}(\"3bus_unbal.l2\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"3bus_unbal.l3\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"3bus_unbal.l1\" => Dict{String, Any}(\"qd_bus\" => [1333.3300000000002], \"pd_bus\" => [4000.0], \"qd\" => [1333.3300000000002], \"pd\" => [4000.0])), \"bus\" => Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"va\" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], \"vm\" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), \"3bus_unbal.substation\" => Dict{String, Any}(\"va\" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], \"vm\" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), \"3bus_unbal.primary\" => Dict{String, Any}(\"va\" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], \"vm\" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], \"vm\" => [124.83030630100751, 124.83048117738736, 124.8306695534823])), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}(\"multinetwork\" => false, \"boundary\" => Dict{String, Any}(\"(100001, 5, voltage_source.3bus_unbal.source)\" => Dict{String, Any}(\"pbound_fr\" => [8068.452673591816], \"qbound_fr\" => [4367.184067738673]), \"(100001, voltage_source.3bus_unbal.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], \"qbound_to\" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369])))","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#2:-Solving-a-simple-Multinetwork-(Time-series)-Multisystem-(Multiple-Distribution-Systems)-OPFITD","page":"Beginners Guide","title":"Example Case #2: Solving a simple Multinetwork (Time-series) Multisystem (Multiple Distribution Systems) OPFITD","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#2","page":"Beginners Guide","title":"Test Case #2","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a Multinetwork case where we have the PJM 5-bus system (case5_with2loads) as the transmission system and two copies of the IEEE 4 Node Test Feeder (case3_unbalanced_withoutgen_mn.dss) as the distribution systems, where each distribution system has load profiles for their respective loads for four timesteps. The boundary information that specifies the respective boundary buses for both the transmission and dsitribution systems can be found in case5_case3x2.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#2","page":"Beginners Guide","title":"Julia Code for Test Case #2","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_with2loads.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced_withoutgen_mn.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3x2.json\") # boundary file with info. about boundary buses\npmd_files = [pmd_file, pmd_file] # vector of distrib. systems (in this case a copy of the same)\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\nresult = solve_mn_opfitd(pm_file, pmd_files, boundary_file, formulation, Ipopt.Optimizer; auto_rename=true) # solve the multinetwork opfitd\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values for Transmission system: $(result[\"solution\"][\"it\"][\"pm\"])\"\n@info \"Solution Values for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"])\"\n@info \"Solution Values for Boundary(ies): $(result[\"solution\"][\"it\"][\"pmitd\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#2","page":"Beginners Guide","title":"Console Output for Test Case #2","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 71583.37023067646 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.5699648857116699 [seconds]\n\n[ Main | Info ] : Solution Values for Transmission system: Dict{String, Any}(\"multinetwork\" => true, \"nw\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.7124512609962, \"qt\" => -205.25808038279263, \"pt\" => 220.4516503859562, \"pf\" => -219.74655219293345), \"4\" => Dict{String, Any}(\"qf\" => -214.48170261865238, \"qt\" => 218.94452403011204, \"pt\" => 70.63553676891648, \"pf\" => -70.02040086637558), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989474518, \"qt\" => 114.45283104138902, \"pt\" => -235.99842638945864, \"pf\" => 238.17872276993856), \"5\" => Dict{String, Any}(\"qf\" => 72.445478971592, \"qt\" => -70.00150166186677, \"pt\" => 57.688800117737046, \"pf\" => -57.388497698913255), \"2\" => Dict{String, Any}(\"qf\" => 41.053330496054876, \"qt\" => -27.739129989384807, \"pt\" => -190.18204403801204, \"pf\" => 191.56783204014675), \"6\" => Dict{String, Any}(\"qf\" => 19.29122822256867, \"qt\" => 1.0536848339377651, \"pt\" => 239.99768816280888, \"pf\" => -237.90830703516832), \"7\" => Dict{String, Any}(\"qf\" => 1.418871577263358, \"qt\" => -2.003521254092567, \"pt\" => -6.017516284814005, \"pf\" => 6.018827255834227), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338049713338, \"qt\" => -1.2985975532566612, \"pt\" => -3.008593331044258, \"pf\" => 3.008930510206021)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657131708, \"pg\" => 19.598449044556656), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.20439554885485, \"pg\" => 460.449338548765), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.2470390700032)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => -4.8091331437638894e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.955108495412184, \"vm\" => 0.9178896115768673), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397082574, \"vm\" => 0.9413800134626195), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691903474, \"vm\" => 0.9421095463639055), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984569308, \"vm\" => 0.9409689065117178), \"10\" => Dict{String, Any}(\"va\" => 5.018515926892925, \"vm\" => 0.9048635910623162), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541168204, \"vm\" => 0.967421494353026))), \"1\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.71245126093345, \"qt\" => -205.25808038273263, \"pt\" => 220.4516503861189, \"pf\" => -219.74655219309614), \"4\" => Dict{String, Any}(\"qf\" => -214.4817026186947, \"qt\" => 218.94452403016115, \"pt\" => 70.6355367692654, \"pf\" => -70.02040086672375), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989466723, \"qt\" => 114.45283104133719, \"pt\" => -235.9984263896544, \"pf\" => 238.17872277013694), \"5\" => Dict{String, Any}(\"qf\" => 72.44547897154284, \"qt\" => -70.001501661815, \"pt\" => 57.68880011784228, \"pf\" => -57.38849769901818), \"2\" => Dict{String, Any}(\"qf\" => 41.05333049603968, \"qt\" => -27.73912998937486, \"pt\" => -190.1820440379769, \"pf\" => 191.56783204011106), \"6\" => Dict{String, Any}(\"qf\" => 19.291228222568602, \"qt\" => 1.0536848339378524, \"pt\" => 239.99768816280888, \"pf\" => -237.90830703516832), \"7\" => Dict{String, Any}(\"qf\" => 1.4188715773575376, \"qt\" => -2.003521254185469, \"pt\" => -6.017516285357827, \"pf\" => 6.0188272563781675), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338050415234, \"qt\" => -1.2985975533248926, \"pt\" => -3.0085933319508262, \"pf\" => 3.0089305111127547)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657137874, \"pg\" => 19.598449044697038), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.2043955487948, \"pg\" => 460.44933854892776), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.24703907024724)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => 1.2906268155608688e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.9551084954114852, \"vm\" => 0.9178896115768619), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397229616, \"vm\" => 0.9413800134625423), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691947822, \"vm\" => 0.9421095463638751), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984889308, \"vm\" => 0.9409689065115902), \"10\" => Dict{String, Any}(\"va\" => 5.018515926892924, \"vm\" => 0.9048635910623162), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541189024, \"vm\" => 0.9674214943530053))), \"2\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.71245126094163, \"qt\" => -205.25808038273715, \"pt\" => 220.45165038612856, \"pf\" => -219.74655219310594), \"4\" => Dict{String, Any}(\"qf\" => -214.4817026186913, \"qt\" => 218.94452403015868, \"pt\" => 70.63553676925657, \"pf\" => -70.02040086671512), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989467265, \"qt\" => 114.45283104134505, \"pt\" => -235.99842638966595, \"pf\" => 238.1787227701487), \"5\" => Dict{String, Any}(\"qf\" => 72.44547897154538, \"qt\" => -70.00150166181722, \"pt\" => 57.688800117857696, \"pf\" => -57.38849769903358), \"2\" => Dict{String, Any}(\"qf\" => 41.053330496036935, \"qt\" => -27.739129989371886, \"pt\" => -190.18204403797492, \"pf\" => 191.56783204010912), \"6\" => Dict{String, Any}(\"qf\" => 19.291228222572368, \"qt\" => 1.0536848339335343, \"pt\" => 239.99768816280888, \"pf\" => -237.90830703516826), \"7\" => Dict{String, Any}(\"qf\" => 1.4188715773462648, \"qt\" => -2.0035212541732794, \"pt\" => -6.017516285360724, \"pf\" => 6.0188272563810745), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338050293561, \"qt\" => -1.2985975533139513, \"pt\" => -3.008593331590926, \"pf\" => 3.008930510752742)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657138327, \"pg\" => 19.59844904471449), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.2043955488037, \"pg\" => 460.4493385489374), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.24703907022297)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => -8.850496391421805e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.9551084954114537, \"vm\" => 0.9178896115768609), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397233032, \"vm\" => 0.9413800134625466), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691950458, \"vm\" => 0.9421095463638758), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984823784, \"vm\" => 0.9409689065116095), \"10\" => Dict{String, Any}(\"va\" => 5.018515926892941, \"vm\" => 0.9048635910623148), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541192233, \"vm\" => 0.9674214943530055))), \"3\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.7124512609906, \"qt\" => -205.2580803827864, \"pt\" => 220.45165038608707, \"pf\" => -219.7465521930642), \"4\" => Dict{String, Any}(\"qf\" => -214.48170261865874, \"qt\" => 218.94452403012218, \"pt\" => 70.63553676895856, \"pf\" => -70.0204008664175), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989472547, \"qt\" => 114.45283104139405, \"pt\" => -235.9984263896151, \"pf\" => 238.17872277009747), \"5\" => Dict{String, Any}(\"qf\" => 72.44547897158185, \"qt\" => -70.00150166185058, \"pt\" => 57.6888001178973, \"pf\" => -57.38849769907291), \"2\" => Dict{String, Any}(\"qf\" => 41.05333049604079, \"qt\" => -27.739129989375172, \"pt\" => -190.1820440379844, \"pf\" => 191.56783204011862), \"6\" => Dict{String, Any}(\"qf\" => 19.291228222579896, \"qt\" => 1.0536848339270362, \"pt\" => 239.99768816280894, \"pf\" => -237.90830703516818), \"7\" => Dict{String, Any}(\"qf\" => 1.4188715772646756, \"qt\" => -2.0035212540928145, \"pt\" => -6.017516285012341, \"pf\" => 6.018827256032563), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338050059494, \"qt\" => -1.298597553290569, \"pt\" => -3.008593331239918, \"pf\" => 3.0089305104016915)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657135414, \"pg\" => 19.598449044744708), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.20439554885937, \"pg\" => 460.44933854889604), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.24703906988566)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => 4.6922476467138066e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.9551084954116407, \"vm\" => 0.9178896115768624), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397156218, \"vm\" => 0.9413800134626014), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691939039, \"vm\" => 0.9421095463638939), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984679912, \"vm\" => 0.9409689065116826), \"10\" => Dict{String, Any}(\"va\" => 5.0185159268929675, \"vm\" => 0.9048635910623125), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541200902, \"vm\" => 0.967421494353016)))), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}(\"nw\" => Dict{String, Dict{String, Any}}(\"4\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.5777180879746, 449.1439873945076, 448.7567158126756], \"qt\" => [-400.3834881406001, -449.61753973455666, -449.40808066075476], \"pt\" => [-1202.2047813968609, -900.9716820211081, -901.437570378043], \"pf\" => [1204.092342226798, 901.8028241168121, 902.6707125959695]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.3857159633698, 449.61909326817045, 449.40944838966254], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.206724198158, 900.9725348138786, 901.4388339186033]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.3834881406001, 449.61753973455666, 449.40808066075476], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2047813968609, 900.9716820211081, 901.437570378043]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.5820103770306, 449.147016724407, 448.75940230925625], \"qt\" => [-400.3857159633698, -449.61909326817045, -449.40944838966254], \"pt\" => [-1202.206724198158, -900.9725348138786, -901.4388339186033], \"pf\" => [1204.0959489625075, 901.8044071741432, 902.673061143103])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.60383553276677, 449.1607731500957, 448.77317528774904], [-400.5820103770306, -449.147016724407, -448.75940230925625]], \"p\" => [[1204.0981313859945, 901.8057826939303, 902.6744388456775], [-1204.0959489625075, -901.8044071741432, -902.673061143103]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.59952401926625, 449.1577317466543, 448.77047663804154], [-400.5777180879746, -449.1439873945076, -448.7567158126756]], \"p\" => [[1204.0945224674979, 901.804198545205, 902.672088661453], [-1204.092342226798, -901.8028241168121, -902.6707125959695]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.8302295799057324, -120.79137859901346, 119.2504000096645], \"vm\" => [7.472201725143692, 7.48392238161073, 7.479449806375467]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194665752, -120.77035368944988, 119.22965458272802], \"vm\" => [125.00492912857915, 125.0049742054994, 125.00503001738106]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.7991413115394987, -120.78074600616584, 119.23848685007212], \"vm\" => [7.487284000425346, 7.492696895897028, 7.490619086774545]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.855042232531755, -120.83663088144945, 119.18261888118052], \"vm\" => [7.484002753336548, 7.489418049928727, 7.487339328524334]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.7715260550666929, -120.77101852028557, 119.22898904907676], \"vm\" => [7.500242832893439, 7.500243675517293, 7.50024705477223]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8264989754781323, -120.82622950863666, 119.173778769923], \"vm\" => [124.95033736057859, 124.95038246062096, 124.95043829748143]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.8274029028977026, -120.8268949215367, 119.17311265297246], \"vm\" => [7.496967303220576, 7.496968146567504, 7.496971527361585]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649359917, -120.84727282112708, 119.19454256329932], \"vm\" => [7.468913830909152, 7.480639684348965, 7.476165145424161])), \"per_unit\" => false), \"1\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.57771808779745, 449.1439873947322, 448.7567158126303], \"qt\" => [-400.38348814059987, -449.6175397346913, -449.40808066071014], \"pt\" => [-1202.204781396862, -900.9716820213755, -901.4375703783082], \"pf\" => [1204.09234222689, 901.8028241171684, 902.6707125964111]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.3857159634153, 449.6190932679933, 449.40944838961826], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2067241982484, 900.9725348139676, 901.4388339183369]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.38348814059987, 449.6175397346913, 449.40808066071014], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.204781396862, 900.9716820213755, 901.4375703783082]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.5820103772543, 449.14701672423075, 448.75940230921145], \"qt\" => [-400.3857159634153, -449.6190932679933, -449.40944838961826], \"pt\" => [-1202.2067241982484, -900.9725348139676, -901.4388339183369], \"pf\" => [1204.095948962688, 901.8044071742323, 902.6730611427464])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.60383553298436, 449.16077317266615, 448.77317528770436], [-400.5820103772543, -449.14701672423075, -448.75940230921145]], \"p\" => [[1204.0981315680738, 901.8057830578177, 902.6744392091184], [-1204.095948962688, -901.8044071742323, -902.6730611427464]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.59952401908913, 449.15773174687035, 448.7704766493643], [-400.57771808779745, -449.1439873947322, -448.7567158126303]], \"p\" => [[1204.0945221037925, 901.8041985455613, 902.6720886618943], [-1204.09234222689, -901.8028241171684, -902.6707125964111]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.830229579920092, -120.79137859902801, 119.25040000964974], \"vm\" => [7.4722017251430914, 7.483922381610104, 7.479449806374842]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194809523, -120.77035368946459, 119.22965458271331], \"vm\" => [125.0049291285691, 125.00497420548916, 125.00503001737073]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.7991413115538781, -120.78074600618037, 119.23848685005738], \"vm\" => [7.4872840004247445, 7.4926968958964055, 7.490619086773919]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.8550422325640687, -120.83663088148208, 119.18261888114806], \"vm\" => [7.484002753335518, 7.489418049927689, 7.487339328523306]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.7715260550810701, -120.77101852030012, 119.22898904906208], \"vm\" => [7.5002428328928366, 7.500243675516679, 7.5002470547716085]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8264989755103133, -120.826229508669, 119.17377876989066], \"vm\" => [124.95033736056153, 124.95038246060375, 124.95043829746425]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.827402902930025, -120.82689492156933, 119.17311265293998], \"vm\" => [7.4969673032195505, 7.496968146566467, 7.496971527360553]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649683284, -120.84727282115972, 119.19454256326688], \"vm\" => [7.468913830908116, 7.4806396843479295, 7.476165145423132])), \"per_unit\" => false), \"2\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.5777180878409, 449.1439873945529, 448.75671581271985], \"qt\" => [-400.3834881405547, -449.6175397345132, -449.40808066079904], \"pt\" => [-1202.2047813968604, -900.9716820211088, -901.4375703779534], \"pf\" => [1204.0923422269757, 901.8028241166346, 902.6707125959689]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.3857159633255, 449.6190932685255, 449.40944838966266], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2067241982472, 900.9725348141451, 901.4388339188698]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.3834881405547, 449.6175397345132, 449.40808066079904], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2047813968604, 900.9716820211088, 901.4375703779534]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.58201037707516, 449.1470167248505, 448.75940230925687], \"qt\" => [-400.3857159633255, -449.6190932685255, -449.40944838966266], \"pt\" => [-1202.2067241982472, -900.9725348141451, -901.4388339188698], \"pf\" => [1204.095948962507, 901.8044071744985, 902.6730611437251])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.6038355441561, 449.16077316190854, 448.7731752991101], [-400.58201037707516, -449.1470167248505, -448.75940230925687]], \"p\" => [[1204.098131204093, 901.8057832399824, 902.6744390281976], [-1204.095948962507, -901.8044071744985, -902.6730611437251]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.5995240305012, 449.157731758069, 448.77047663808975], [-400.5777180878409, -449.1439873945529, -448.75671581271985]], \"p\" => [[1204.0945224676755, 901.8041985450279, 902.6720886614527], [-1204.0923422269757, -901.8028241166346, -902.6707125959689]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.8302295799209277, -120.79137859902852, 119.25040000964935], \"vm\" => [7.472201725143105, 7.483922381610151, 7.479449806374883]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194816114, -120.77035368946491, 119.22965458271298], \"vm\" => [125.00492912856943, 125.00497420548972, 125.00503001737137]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.79914131155471, -120.78074600618085, 119.23848685005699], \"vm\" => [7.48728400042476, 7.492696895896448, 7.4906190867739575]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.85504223255677, -120.83663088147543, 119.18261888115482], \"vm\" => [7.4840027533357, 7.489418049927836, 7.487339328523451]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.77152605508187, -120.77101852030057, 119.2289890490616], \"vm\" => [7.500242832892855, 7.5002436755167095, 7.500247054771646]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.826498975503429, -120.82622950866259, 119.1737787698974], \"vm\" => [124.95033736056432, 124.95038246060629, 124.95043829746685]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.8274029029227165, -120.82689492156277, 119.17311265294684], \"vm\" => [7.496967303219722, 7.496968146566622, 7.49697152736071]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649610355, -120.84727282115303, 119.19454256327364], \"vm\" => [7.468913830908303, 7.480639684348074, 7.476165145423272])), \"per_unit\" => false), \"3\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.5777180877519, 449.1439873945082, 448.75671581263083], \"qt\" => [-400.38348814055513, -449.6175397345571, -449.4080806607989], \"pt\" => [-1202.20478139695, -900.9716820211972, -901.4375703778643], \"pf\" => [1204.092342226887, 901.8028241168124, 902.6707125957021]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.38571596332577, 449.6190932680813, 449.40944838961764], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2067241981586, 900.9725348138778, 901.4388339183367]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.38348814055513, 449.6175397345571, 449.4080806607989], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.20478139695, 900.9716820211972, 901.4375703778643]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.5820103769862, 449.14701672440617, 448.759402309122], \"qt\" => [-400.38571596332577, -449.6190932680813, -449.40944838961764], \"pt\" => [-1202.2067241981586, -900.9725348138778, -901.4388339183367], \"pf\" => [1204.0959489624188, 901.8044071739638, 902.6730611429242])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.6038355327163, 449.16077315009466, 448.773175287606], [-400.5820103769862, -449.14701672440617, -448.759402309122]], \"p\" => [[1204.0981315678043, 901.8057826937508, 902.6744388454978], [-1204.0959489624188, -901.8044071739638, -902.6730611429242]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.5995240190437, 449.1577317239183, 448.7704766379962], [-400.5777180877519, -449.1439873945082, -448.75671581263083]], \"p\" => [[1204.0945224675868, 901.8041985452063, 902.6720886611851], [-1204.092342226887, -901.8028241168124, -902.6707125957021]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.8302295799131064, -120.79137859902089, 119.25040000965717], \"vm\" => [7.4722017251435435, 7.483922381610589, 7.479449806375325]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194739376, -120.77035368945725, 119.22965458272064], \"vm\" => [125.00492912857676, 125.00497420549705, 125.00503001737864]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.7991413115468873, -120.78074600617322, 119.23848685006479], \"vm\" => [7.487284000425199, 7.492696895896888, 7.490619086774399]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.85504223254311, -120.8366308814605, 119.18261888116959], \"vm\" => [7.484002753336263, 7.489418049928443, 7.487339328524058]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.7715260550740553, -120.77101852029291, 119.2289890490694], \"vm\" => [7.500242832893295, 7.500243675517153, 7.500247054772084]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8264989754893535, -120.82622950864773, 119.17377876991193], \"vm\" => [124.95033736057383, 124.95038246061625, 124.95043829747675]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.8274029029090649, -120.82689492154778, 119.17311265296155], \"vm\" => [7.496967303220288, 7.496968146567221, 7.496971527361306]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649473606, -120.84727282113812, 119.19454256328841], \"vm\" => [7.468913830908865, 7.480639684348685, 7.4761651454238836])), \"per_unit\" => false)))\n\n[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}(\"multinetwork\" => true, \"nw\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049622880614, -901.8100181254906, -902.6783506307055], \"qbound_to\" => [-400.630030776433, -449.177722118188, -448.78980036204024]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.593331044258], \"qbound_fr\" => [1298.597553256661]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5857746079846], \"qbound_fr\" => [1298.5874491212335]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.101347358377, -901.8084302478388, -902.6759970017687], \"qbound_to\" => [-400.6256962072555, -449.17466583314587, -448.7870870808322]))), \"1\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049624672987, -901.8100184922217, -902.6783509913059], \"qbound_to\" => [-400.6300307993883, -449.17772215213427, -448.78980037337016]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5933319508263], \"qbound_fr\" => [1298.5975533248927]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5857742450717], \"qbound_fr\" => [1298.5874491439454]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1013469861416, -901.8084302538781, -902.6759970050523], \"qbound_to\" => [-400.6256961956958, -449.17466584472527, -448.78708710352413]))), \"2\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049621118384, -901.8100186687032, -902.6783508103842], \"qbound_to\" => [-400.63003079917036, -449.17772213001075, -448.7898003847704]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.593331590926], \"qbound_fr\" => [1298.5975533139513]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.585774607983], \"qbound_fr\" => [1298.5874491439235]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1013473528665, -901.8084302476616, -902.6759970074544], \"qbound_to\" => [-400.6256962184772, -449.1746658331913, -448.7870870922549]))), \"3\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049624727136, -901.8100181281534, -902.6783506390512], \"qbound_to\" => [-400.6300307763823, -449.1777221295564, -448.7898003846302]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5933312399184], \"qbound_fr\" => [1298.5975532905688]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.58577461065], \"qbound_fr\" => [1298.587449086865]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1013473527794, -901.8084302506836, -902.6759970071865], \"qbound_to\" => [-400.62569618428887, -449.1746658104148, -448.7870870921613])))))","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"As you can see on the output, the dictionary results have extra keys such as nw, which indicate that this is a multinetwork (multi-timestep) optimization problem. Below the nw, you can find the solutions of the respective multinetwork (i.e., timestep) as \"#\" (e.g., [\"nw\"][\"3\"] represents the results for the 3th timestep).","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#3:-Solving-a-simple-OPFITD-with-voltage-bounds-(support-for-PowerModelsDistribution-(PMD)-Transformations)","page":"Beginners Guide","title":"Example Case #3: Solving a simple OPFITD with voltage bounds (support for PowerModelsDistribution (PMD) Transformations)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#3","page":"Beginners Guide","title":"Test Case #3","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Additionally, we are specificying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#3","page":"Beginners Guide","title":"Julia Code for Test Case #3","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\ndata = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary\n# apply transformations\napply_voltage_bounds!(data; vm_lb=0.99, vm_ub=1.01)\n# solve the optimization problem\nresult = solve_opfitd(data, formulation, Ipopt.Optimizer; make_si=false) # solve the opfitd\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"][\"bus\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#3","page":"Beginners Guide","title":"Console Output for Test Case #3","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 18022.355809587236 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.06421494483947754 [seconds]\n\n[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"va\" => [-0.8977463887653532, -120.78309685941274, 119.34177620647625], \"vm\" => [0.9899999900302301, 0.9946671975187621, 0.9928991397184561]), \"3bus_unbal.substation\" => Dict{String, Any}(\"va\" => [-0.7693363623113275, -120.76782278704773, 119.23219208890347], \"vm\" => [0.999742728740167, 0.999743306402737, 0.9997446568367797]), \"3bus_unbal.primary\" => Dict{String, Any}(\"va\" => [-0.8297020935620707, -120.77556386286943, 119.28178890967312], \"vm\" => [0.9952384467648019, 0.9973943491437465, 0.9965725113327532]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7671158858601453, -120.76631338622572, 119.23370678684667], \"vm\" => [0.9997629892456953, 0.9997641961144075, 0.9997655262819723]))","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"You can see in these results that the voltage magnitude values of the distribution system nodes is between the 0.99 and 1.01 bounds.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#4:-Solving-a-simple-OPFITD-with-Solution-Processors-(apply-solution-processor-to-convert-voltage-values-solutions-from-rectangular-to-polar-coordinates)","page":"Beginners Guide","title":"Example Case #4: Solving a simple OPFITD with Solution Processors (apply solution processor to convert voltage values solutions from rectangular to polar coordinates)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#4","page":"Beginners Guide","title":"Test Case #4","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Additionally, we are specificying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Finally, we also want to solve this problem using the ACR-ACRU formulation (i.e., AC OPF in rectangular coordinates) instead of the ACP-ACPU formulation used previously. We also want to show that by applying the solution processor to the solve_opfitd(...) function, we can convert the solution from rectangular to polar corrdinates (after the problem has been solved in rectangular coordinates).","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#4","page":"Beginners Guide","title":"Julia Code for Test Case #4","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACRPowerModel, ACRUPowerModel} # type of formulation to be used\n\ndata_rect = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary - rectangular\ndata_polar = deepcopy(data_rect) # parse files into dictionary - polar\n\n# apply voltage bounds to both datasets\napply_voltage_bounds!(data_rect; vm_lb=0.99, vm_ub=1.01)\napply_voltage_bounds!(data_polar; vm_lb=0.99, vm_ub=1.01)\n\n# solve the optimization problem\nresult_rect = solve_opfitd(data_rect, formulation, Ipopt.Optimizer; make_si=false) # solve the opfitd, present result in rectangular\nresult_polar = solve_opfitd(data_polar, formulation, Ipopt.Optimizer; make_si=false, solution_processors=[sol_data_model!]) # solve the opfitd, present the result in polar\n\n# Check the result\n@info \"Distribution system(s) voltages in rectangular coordinates: $(result_rect[\"solution\"][\"it\"][\"pmd\"][\"bus\"])\"\n@info \"Distribution system(s) voltages in polar coordinates: $(result_polar[\"solution\"][\"it\"][\"pmd\"][\"bus\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#4","page":"Beginners Guide","title":"Console Output for Test Case #4","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Distribution system(s) voltages in rectangular coordinates: Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"vi\" => [-0.015511309363640641, -0.8545294554234174, 0.8655223138026301], \"vr\" => [0.9898784720063777, -0.5090601668099762, -0.4865386272048753]), \"3bus_unbal.substation\" => Dict{String, Any}(\"vi\" => [-0.013423594907906103, -0.8590267647200966, 0.872425011363218], \"vr\" => [0.9996526099437699, -0.5114290820733716, -0.48822534573738224]), \"3bus_unbal.primary\" => Dict{String, Any}(\"vi\" => [-0.014411577636549404, -0.8569394862376708, 0.8692352392326611], \"vr\" => [0.9951341025954522, -0.5103432319817417, -0.4874288450833038]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"vi\" => [-0.01338512498983875, -0.8590581872270858, 0.8724303155121654], \"vr\" => [0.9996733881089848, -0.5114171375591623, -0.4882586014767347]))\n\n[ Main | Info ] : Distribution system(s) voltages in polar coordinates: Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"va\" => [-0.8977463956228972, -120.78309686739179, 119.34177619725007], \"vm\" => [0.989999994979725, 0.9946672024445378, 0.9928991446530021]), \"3bus_unbal.substation\" => Dict{String, Any}(\"va\" => [-0.7693363704348831, -120.76782279518537, 119.23219208076581], \"vm\" => [0.9997427336408314, 0.9997433113034004, 0.9997446617374346]), \"3bus_unbal.primary\" => Dict{String, Any}(\"va\" => [-0.8297021010938084, -120.77556387092758, 119.28178890104428], \"vm\" => [0.9952384516880516, 0.9973943540560338, 0.9965725162491212]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"va\" => [-0.767115894005601, -120.7663133943784, 119.23370677869384], \"vm\" => [0.9997629941462579, 0.9997642010149662, 0.9997655311825235]))","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#5:-Solving-a-simple-OPFITD-with-Results-in-MATH-Model-(instead-of-default-ENG)","page":"Beginners Guide","title":"Example Case #5: Solving a simple OPFITD with Results in MATH Model (instead of default ENG)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#5","page":"Beginners Guide","title":"Test Case #5","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"However, different from all the examples presented above, in this case, the result of the distribution systems will be obtained in the MATH model instead of the default ENG model. See here for a more detailed explanation regarding the different models supported by PMD/PMITD.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#5","page":"Beginners Guide","title":"Julia Code for Test Case #5","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\ndata = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary\nresult = solve_opfitd(data, formulation, Ipopt.Optimizer; solution_model=\"MATH\") # solve the opfitd, present result in MATH model instead of default ENG\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values (MATH model) for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"])\"\n@info \"Solution Values (MATH model) for Boundary(ies): $(result[\"solution\"][\"it\"][\"pmitd\"])\"\n","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#5","page":"Beginners Guide","title":"Console Output for Test Case #5","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 17953.746512039743 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.07705187797546387 [seconds]\n\n[ Main | Info ] : Solution Values (MATH model) for Distribution system(s): Dict{String, Any}(\"branch\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qf\" => [1354.795202241865, 1507.3400640138161, 1504.5761375753734], \"qt\" => [-1354.6163225169614, -1507.2344513630767, -1504.4700979169072], \"pt\" => [-3367.119671256992, -2346.3650144634003, -2354.829891017304], \"pf\" => [3367.119671256992, 2346.3650144634003, 2354.8298910173044]), \"1\" => Dict{String, Any}(\"qf\" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], \"qt\" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], \"pt\" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], \"pf\" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), \"5\" => Dict{String, Any}(\"qf\" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], \"qt\" => [-1354.795202241865, -1507.3400640138161, -1504.5761375753734], \"pt\" => [-3367.119671256992, -2346.3650144634003, -2354.8298910173044], \"pf\" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), \"2\" => Dict{String, Any}(\"qf\" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], \"qt\" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], \"pt\" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], \"pf\" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895]), \"6\" => Dict{String, Any}(\"qf\" => [1355.0096276913357, 1507.4706735124998, 1504.7037665348369], \"qt\" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], \"pt\" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], \"pf\" => [3367.1850486607445, 2346.4026604158908, 2354.8649645151804]), \"3\" => Dict{String, Any}(\"qf\" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], \"qt\" => [1354.6163225169614, 1507.2344513630767, 1504.4700979169072], \"pt\" => [3367.119671256992, 2346.3650144634003, 2354.829891017304], \"pf\" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), \"gen\" => Dict{String, Any}(\"1\" => Dict{String, Any}(\"qg_bus\" => [-0.0, -0.0, -0.0], \"qg\" => [-0.0, -0.0, -0.0], \"pg\" => [666.6676628468832, 666.6676628064197, 666.6676628099706], \"pg_bus\" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), \"transformer\" => Dict{String, Any}(\"1\" => Dict{String, Any}(\"qf\" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], \"qt\" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], \"pt\" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], \"pf\" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), \"2\" => Dict{String, Any}(\"qf\" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], \"qt\" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], \"pt\" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895], \"pf\" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), \"settings\" => Dict{String, Any}(\"sbase_default\" => 100000.0, \"vbases_default\" => Dict{String, Real}(\"4\" => 132.79056191361394), \"voltage_scale_factor\" => 1000.0, \"sbase\" => 100000.0, \"power_scale_factor\" => 1000.0, \"base_frequency\" => 60.0), \"multinetwork\" => false, \"load\" => Dict{String, Any}(\"1\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"2\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"3\" => Dict{String, Any}(\"qd_bus\" => [1333.3300000000002], \"pd_bus\" => [4000.0], \"qd\" => [1333.3300000000002], \"pd\" => [4000.0])), \"bus\" => Dict{String, Any}(\"8\" => Dict{String, Any}(\"va\" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], \"vm\" => [0.5427404621782935, 0.5427412225103798, 0.5427420415368795]), \"4\" => Dict{String, Any}(\"va\" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], \"vm\" => [124.83030630100751, 124.83048117738736, 124.8306695534823]), \"1\" => Dict{String, Any}(\"va\" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], \"vm\" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), \"5\" => Dict{String, Any}(\"va\" => [-0.8089868491003656, -120.80727720360223, 119.19273784447546], \"vm\" => [0.5427292370876581, 0.542729249043147, 0.5427300853404582]), \"2\" => Dict{String, Any}(\"va\" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], \"vm\" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), \"6\" => Dict{String, Any}(\"va\" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], \"vm\" => [0.5427279962777596, 0.5427283843894555, 0.5427292175687293]), \"7\" => Dict{String, Any}(\"va\" => [-0.8063670574676239, -120.8054516152584, 119.19457001333551], \"vm\" => [0.5427392213907619, 0.5427403578738178, 0.5427411737823131]), \"9\" => Dict{String, Any}(\"va\" => [-0.8036120919989638, -120.80361209199894, 119.19638790800104], \"vm\" => [124.83485996888251, 124.83485996888251, 124.83485996888251]), \"3\" => Dict{String, Any}(\"va\" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], \"vm\" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505])), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values (MATH model) for Boundary(ies): Dict{String, Any}(\"multinetwork\" => false, \"boundary\" => Dict{String, Any}(\"(100001, 9, 5)\" => Dict{String, Any}(\"pbound_to\" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], \"qbound_to\" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369]), \"(100001, 5, 9)\" => Dict{String, Any}(\"pbound_fr\" => [8068.452673591816], \"qbound_fr\" => [4367.184067738673])))","category":"page"},{"location":"manual/formulations.html#ITD-Network-Formulations","page":"Formulations","title":"ITD Network Formulations","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported ITD boundary mathematical formulations is presented below.","category":"page"},{"location":"manual/formulations.html#Sets,-Parameters,-and-(General)-Variables","page":"Formulations","title":"Sets, Parameters, and (General) Variables","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxsets nonumber \n N mbox - Set of busesnonumber \n mathcalT mbox - Belongs to transmission networknonumber \n mathcalD mbox - Belongs to distribution networknonumber \n mathcalB mbox - Set of boundary linksnonumber \n\nmboxparameters nonumber \n Re mbox - Real partnonumber \n Im mbox - Imaginary partnonumber \n Phi = a b c mbox - Multi-conductor phasesnonumber \n chi rightarrowmathcalTmathcalD mbox - Belongs to Transmission or Distributionnonumber \n beta^^chi mbox - Boundary busnonumber \n\nmboxvariables nonumber \n P_beta^^mathcalTbeta^^mathcalD^^mathcalT mbox - Active power flow from Transmisison boundary bus to Distribution boundary busnonumber \n Q_beta^^mathcalTbeta^^mathcalD^^mathcalT mbox - Reactive power flow from Transmisison boundary bus to Distribution boundary busnonumber \n P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi mbox - Active power flow from Distribution boundary bus phase varphi to Transmission boundary busnonumber \n Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi mbox - Reactive power flow from Distribution boundary bus phase varphi to Transmission boundary busnonumber \n V_i^^mathcalT mbox - Voltage magnitude at bus inonumber \n theta_i^^mathcalT mbox - Voltage angle at bus inonumber \n v_i^mathcalD varphi mbox - Voltage magnitude at bus i phase varphinonumber \n theta_i^mathcalD varphi mbox - Voltage angle at bus i phase varphinonumber \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACP-ACPU","page":"Formulations","title":"ACP-ACPU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLPowerModelITD{ACPPowerModel, ACPUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACP to ACPU (AC polar to AC polar unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Polar\nVariables: Power-Voltage\nModel(s): NLP-NLP\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n V_beta^^mathcalT = v_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n V_beta^^mathcalT = v_beta^^mathcalD^^b forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n V_beta^^mathcalT = v_beta^^mathcalD^^c forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n theta_beta^^mathcalT = theta_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n theta_beta^^mathcalD^^b = (theta_beta^^mathcalD^^a -120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n theta_beta^^mathcalD^^c = (theta_beta^^mathcalD^^a +120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACR-ACRU","page":"Formulations","title":"ACR-ACRU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLPowerModelITD{ACRPowerModel, ACRUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACR to ACRU (AC rectangular to AC rectangular unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Power-Voltage\nModel(s): NLP-NLP\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#IVR-IVRU","page":"Formulations","title":"IVR-IVRU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"IVRPowerModelITD{IVRPowerModel, IVRUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"IVR to IVRU (AC-IV rectangular to AC-IV rectangular unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Current-Voltage\nModel(s): NLP-NLP\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n V^Re_beta^^mathcalT ReBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) + V^Im_beta^^mathcalT ImBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) = -Biggsum_varphi in Phi Bigg( Big(v_beta^^mathcalD^^varphiReBig) ReBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) + Big(v_beta^^mathcalD^^varphiImBig) ImBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) Bigg) Bigg forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n V^Im_beta^^mathcalT ReBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) - V^Re_beta^^mathcalT ImBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) = - Biggsum_varphi in Phi Bigg( Big(v_beta^^mathcalD^^varphiImBig) ReBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) - Big(v_beta^^mathcalD^^varphiReBig) ImBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) Bigg) Bigg forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#NFA-NFAU","page":"Formulations","title":"NFA-NFAU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"LPowerModelITD{NFAPowerModel, NFAUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NFA to NFAU (Linear Network flow approximation to Linear Network flow approximation unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: N/A\nVariables: N/A\nModel(s): Apprx.-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACR-FBSUBF","page":"Formulations","title":"ACR-FBSUBF","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLBFPowerModelITD{ACRPowerModel, FBSUBFPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACR to FBSUBF (AC rectangular to forward-backward sweep unbalanced branch flow approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Power-Voltage\nModel(s): NLP-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACR-FOTRU","page":"Formulations","title":"ACR-FOTRU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLFOTPowerModelITD{ACRPowerModel, FOTRUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACR to FOTRU (AC rectangular to first-order Taylor rectangular unbalanced approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Power-Voltage\nModel(s): NLP-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACP-FOTPU","page":"Formulations","title":"ACP-FOTPU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLFOTPowerModelITD{ACPPowerModel, FOTPUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACP to FOTPU (AC rectangular to first-order Taylor polar unbalanced approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Polar\nVariables: Power-Voltage\nModel(s): NLP-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n V_beta^^mathcalT = v_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n V_beta^^mathcalT = v_beta^^mathcalD^^b forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n V_beta^^mathcalT = v_beta^^mathcalD^^c forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n theta_beta^^mathcalT = theta_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n theta_beta^^mathcalD^^b = (theta_beta^^mathcalD^^a -120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n theta_beta^^mathcalD^^c = (theta_beta^^mathcalD^^a +120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#BFA-LinDist3Flow","page":"Formulations","title":"BFA-LinDist3Flow","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"BFPowerModelITD{BFAPowerModel, LinDist3FlowPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"BFA to LinDist3Flow (Branch flow approximation to LinDist3Flow approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: W-space\nVariables: Power-Voltage (W)\nModel(s): Apprx.-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(w_beta^^mathcalT Big) = Big(w^a_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase a \n Big(w_beta^^mathcalT Big) = Big(w^b_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase b \n Big(w_beta^^mathcalT Big) = Big(w^c_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#SOCBF-LinDist3Flow","page":"Formulations","title":"SOCBF-LinDist3Flow","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"BFPowerModelITD{SOCBFPowerModel, LinDist3FlowPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"SOCBF to LinDist3Flow (Second-order cone branch flow relaxation to LinDist3Flow approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: W-space\nVariables: Power-Voltage (W)\nModel(s): Relax.-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(w_beta^^mathcalT Big) = Big(w^a_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase a \n Big(w_beta^^mathcalT Big) = Big(w^b_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase b \n Big(w_beta^^mathcalT Big) = Big(w^c_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase c \n\nendalign","category":"page"},{"location":"manual/storage.html#Quick-Guide-on-Storage-(with-Costs)-Problem-Specification","page":"Storage","title":"Quick Guide on Storage (with Costs) Problem Specification","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"In this guide, we will discuss the differences between the two problem specifications currently available in PowermodelsITD that consider storage devices when performing OPF.","category":"page"},{"location":"manual/storage.html#TL;DR","page":"Storage","title":"TL;DR","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"solve_opfitd(...): considers the operation (charge and discharge) of storage devices at both transmission and distribution system(s), but, no cost is added to the objective cost function. In other words, cycling/using the storage devices is a free operation.\nsolve_opfitd_storage(...): considers the operation (charge and discharge) of storage devices at both transmission and distribution system(s), and cost term(s) are added to the objective cost function. In other words, cycling/using the storage devices is not free and the specific cost of using the storage device is added to the cost function as sd times cost, where sd is the amount of power discharged and cost is a scalar value in units $/kWh or $/pu.","category":"page"},{"location":"manual/storage.html#Default-Costs-and-Units","page":"Storage","title":"Default Costs and Units","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"By default, the costs of the storage devices are calculated based on the references shown below. However, users are encouraged to assign their own costs after parsing files.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"Transmission cost must be in $/pu units.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"(e.g., transformation from $/MWh -> $/pu: 200 $/MWh x 100 MVA base/1 pu = 20,000 $/pu)","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"Distribution cost must be in $/kWh units.\nDefault costs of storage devices (in $/kWh) are computed based on Eq. (23) from this publication.\nThe total cost of the storage system, C_total^ES, is estimated based on NREL data obtained from this resource.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"beginalign\n\ncost = c_epsilon varepsilon = dfracC_total^ESCyccdot E__ES^maxcdot DoDcdot eta_r\n\nendalign","category":"page"},{"location":"manual/storage.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-with-Storage-Costs","page":"Storage","title":"Running Integrated Transmission-Distribution Optimal Power Flow with Storage Costs","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"The snippet below shows how to run a steady-state Integrated Transmission-Distribution (ITD) AC Optimal Power Flow with storage costs. All of these files can be found in test folder of the repository.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = \"case5_withload.m\"\npmd_file = \"case3_balanced_withBattery.dss\"\npmitd_file = \"case5_case3_bal_battery.json\"\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\npmitd_data = parse_files(pm_file, pmd_file, pmitd_file)\n\n# cost to assign to energy storage\n# Units $/kWh\nstrg_cost = 0.025\n\n# add cost to storages in PMD\nfor (st_name, st_data) in pmitd_data[\"it\"][\"pmd\"][\"storage\"]\n st_data[\"cost\"] = strg_cost\nend\n\n# solve optimization with storage cost problem\npmitd_result_strg = solve_opfitd_storage(pmitd_data, pmitd_type, Ipopt.Optimizer)\n","category":"page"},{"location":"manual/storage.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-with-Storage-Costs-Multinetwork","page":"Storage","title":"Running Integrated Transmission-Distribution Optimal Power Flow with Storage Costs Multinetwork","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"Running a multinetwork (i.e., multi-timestep) is also very simple. Only slight changes are required (assuming multinetwork data exists in the distribution files) as seen in the snippet shown below.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = \"case5_withload.m\"\npmd_file = \"case3_balanced_withBattery_mn_diff.dss\"\npmitd_file = \"case5_case3_bal_battery_mn.json\"\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\npmitd_data = parse_files(pm_file, pmd_file, pmitd_file; multinetwork=true)\n\n# cost to assign to energy storage\n# Units $/kWh\nstrg_cost = 0.0025\n\n# add cost to storages in PMD\nfor (nw_id, nw_data) in pmitd_data[\"it\"][\"pmd\"][\"nw\"]\n for (st_name, st_data) in nw_data[\"storage\"]\n st_data[\"cost\"] = strg_cost\n end\nend\n\npmitd_result_strg = solve_mn_opfitd_storage(pmitd_data, pmitd_type, Ipopt.Optimizer)\n","category":"page"},{"location":"manual/storage.html#How-are-the-Storage-Devices-Modeled?","page":"Storage","title":"How are the Storage Devices Modeled?","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"The storage mathematical model (for both transmission and distribution system(s)) are based on the model shown here. Given the storage data model and two sequential time points s and t, the storage component's mathematical model is given by,","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"beginalign\n\nmboxdata nonumber \n e^u mbox - energy rating nonumber \n sc^u mbox - charge rating nonumber \n sd^u mbox - discharge rating nonumber \n eta^c mbox - charge efficiency nonumber \n eta^d mbox - discharge efficiency nonumber \n te mbox - time elapsed nonumber \n S^l mbox - power losses nonumber \n Z mbox - injection impedance nonumber \n q^l q^u mbox - reactive power injection limits nonumber \n s^u mbox - thermal injection limit nonumber \n i^u mbox - current injection limit nonumber \n\nmboxvariables nonumber \n e_i in (0 e^u) mbox - storage energy at time i labelvar_strg_energy \n sc_i in (0 sc^u) mbox - charge amount at time i labelvar_strg_charge \n sd_i in (0 sd^u) mbox - discharge amount at time i labelvar_strg_discharge \n sqc_i mbox - reactive power slack at time i labelvar_strg_qslack \n S_i mbox - complex bus power injection at time i labelvar_strg_power \n I_i mbox - complex bus current injection at time i labelvar_strg_current \n\nmboxsubject to nonumber \n e_t - e_s = te left(eta^c sc_t - fracsd_teta^d right) labeleq_strg_energy \n sc_t cdot sd_t = 0 labeleq_strg_compl \n S_t + (sd_t - sc_t) = j cdot sqc_t + S^l + Z I_t^2 labeleq_strg_loss \n q^l leq Im(S_t) leq q^u labeleq_strg_q_limit \n S_t leq s^u labeleq_strg_thermal_limit \n I_t leq i^u labeleq_strg_current_limit\nendalign","category":"page"},{"location":"manual/storage.html#What-is-the-Cost-(Objective)-Function?","page":"Storage","title":"What is the Cost (Objective) Function?","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"The cost (objective) function of the solve_opfitd_storage(...) and solve_mn_opfitd_storage(...) is based on the mathematical model:","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"beginalign\nbeginsplit\n textmin bigg(sum_k in G^^mathcalT c_2k(P_gk^mathcalT)^2 + c_1k(P_gk^mathcalT) + c_0k bigg) +\n bigg(sum_epsilon in E^^mathcalT c_epsilon(sd_epsilon^mathcalT)bigg) +\n bigg(sum_m in G^^mathcalD c_2m(sum_varphi in Phi P_gm^mathcalDvarphi)^2 + c_1m(sum_varphi in Phi P_gm^mathcalDvarphi) + c_0m bigg) +\n bigg(sum_varepsilon in E^^mathcalD c_varepsilon(sd_varepsilon^mathcalD)bigg)\nendsplit\nendalign","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"As observed, the costs of discharging the storage devices for both Transmission and Distribution system(s) are added the cost function of the OPFITD. This means that storage devices will only discharge power to the grid when the cost of charging + discharging energy is less than the cost of not using (cycling) the storage device.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"This cost function only cosiders cost as a factor for determining when to use the storage devices, however, it is important to note that users are encouraged to create their own cost functions that consider other factors (e.g., voltage deviations) that will make the storage devices operate more often, as needed.","category":"page"},{"location":"reference/base.html#Base","page":"Base","title":"Base","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"ref\nvar\nids\ncon\nsol\nnws\nnw_ids","category":"page"},{"location":"reference/base.html#PowerModelsITD.ref","page":"Base","title":"PowerModelsITD.ref","text":"helper function to access the AbstractPowerModelITD structs' ref, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.var","page":"Base","title":"PowerModelsITD.var","text":"helper function to access the AbstractPowerModelITD structs' var, returns JuMP VariableRef\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.ids","page":"Base","title":"PowerModelsITD.ids","text":"helper function to access the ids of AbstractPowerModelITD structs' ref, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.con","page":"Base","title":"PowerModelsITD.con","text":"helper function to access the AbstractPowerModelITD structs' con, returns JuMP Constraint\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.sol","page":"Base","title":"PowerModelsITD.sol","text":"helper function to access the AbstractPowerModelITD structs' sol, returns Dict\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.nws","page":"Base","title":"PowerModelsITD.nws","text":"helper function to access multinetwork data from AbstractPowerModelITD structs, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.nw_ids","page":"Base","title":"PowerModelsITD.nw_ids","text":"helper function to access the ids of multinetworks from AbstractPowerModelITD structs, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Helper-functions","page":"Base","title":"Helper functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"silence!","category":"page"},{"location":"reference/base.html#PowerModelsITD.silence!","page":"Base","title":"PowerModelsITD.silence!","text":"Suppresses information and warning messages output by PowerModels and PowerModelsDistribution\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Ref-Creation-Functions","page":"Base","title":"Ref Creation Functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"ref_\")","category":"page"},{"location":"reference/base.html#PowerModelsITD.ref_add_core!-Tuple{Dict{Symbol}}","page":"Base","title":"PowerModelsITD.ref_add_core!","text":"function ref_add_core!(ref::Dict{Symbol,Any})\n\nReturns a dict that stores commonly used pre-computed data obtained from the data dictionary, primarily for converting data-types, filtering out loads in the transmission-side system, removing slack generators in the distribution-side system, and storing system-wide values that need to be computed globally. Some of the common keys include:\n\nSee ref_add_core!(ref) from PowerModels),\nSee ref_add_core!(ref) from PowerModelsDistribution),\n:boundary – the set of boundary elements that are active in the network,\n:arcs_boundary_from – the set [(i,b[\"f_bus\"],b[\"t_bus\"]) for (i,b) in ref[:boundary]],\n:arcs_boundary_to – the set [(i,b[\"t_bus\"],b[\"f_bus\"]) for (i,b) in ref[:boundary]],\n:arcs_boundary – the set of arcs from both arcs_boundary_from and arcs_boundary_to,\n:bus_arcs_boundary_from – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_from]]),\n:bus_arcs_boundary_to – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_to]]).\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#VariableAPI","page":"Variables","title":"Variables","text":"","category":"section"},{"location":"reference/variables.html","page":"Variables","title":"Variables","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"variable\")","category":"page"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current","text":"Boundary current flow variables - IVR cases (Current Real and Current Imaginary)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_imaginary_from-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_imaginary_from","text":"Variable: cibound_fr[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_imaginary_to-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_imaginary_to","text":"Variable: cibound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_real_from-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_real_from","text":"Variable: crbound_fr[l,i,j] for (l,i,j) in arcs bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_real_to-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_real_to","text":"Variable: crbound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power-Tuple{AbstractLPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power","text":"Boundary power flow variables - DC cases (P-only)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power","text":"Boundary power flow variables - AC cases (P and Q)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_imaginary_from-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_imaginary_from","text":"Variable: qbound_fr[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_imaginary_to-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_imaginary_to","text":"Variable: qbound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_real_from-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_real_from","text":"Variable: pbound_fr[l,i,j] for (l,i,j) in arcs bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_real_to-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_real_to","text":"Variable: pbound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/constants.html#ConstantsAPI","page":"Constants","title":"Constants","text":"","category":"section"},{"location":"reference/constants.html","page":"Constants","title":"Constants","text":"BOUNDARY_NUMBER","category":"page"},{"location":"reference/constants.html#PowerModelsITD.BOUNDARY_NUMBER","page":"Constants","title":"PowerModelsITD.BOUNDARY_NUMBER","text":"BOUNDARY_NUMBER constant that determines the starting counter for the boundaries defined.\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html","page":"Constants","title":"Constants","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:constant]\nFilter = t -> isa(t, Dict) || isa(t, Vector) || isa(t, String)","category":"page"},{"location":"reference/data_models.html#DataModelAPI","page":"Data Models","title":"Data Models and Parsers","text":"","category":"section"},{"location":"reference/data_models.html#Parsers","page":"Data Models","title":"Parsers","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"parse_files\nparse_json\nparse_link_file\nparse_power_transmission_file\nparse_power_distribution_file","category":"page"},{"location":"reference/data_models.html#PowerModelsITD.parse_files","page":"Data Models","title":"PowerModelsITD.parse_files","text":"function parse_files(\n pm_file::String,\n pmd_file::String,\n pmitd_file::String;\n multinetwork::Bool=false\n auto_rename::Bool=false\n)\n\nParses PowerModels, PowerModelsDistribution, and PowerModelsITD boundary linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.\n\n\n\n\n\nfunction parse_files(\n pm_file::String,\n pmd_files::Vector,\n pmitd_file::String;\n multinetwork::Bool=false,\n auto_rename::Bool=false\n)\n\nParses PowerModels, PowerModelsDistribution vector, and PowerModelsITD linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_json","page":"Data Models","title":"PowerModelsITD.parse_json","text":"function parse_json(\n path::String\n)\n\nParses a JavaScript Object Notation (JSON) file from the file path path and returns a dictionary containing the corresponding parsed data. Primarily used for boundry linkage files.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_link_file","page":"Data Models","title":"PowerModelsITD.parse_link_file","text":"function parse_link_file(\n pmitd_file::String\n)\n\nParses a linking file from the file pmitd_file and returns a PowerModelsITD data structured linking network dictionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_power_transmission_file","page":"Data Models","title":"PowerModelsITD.parse_power_transmission_file","text":"function parse_power_transmission_file(\n pm_file::String;\n skip_correct::Bool = true,\n multinetwork::Bool=false,\n number_multinetworks::Int=0\n)\n\nParses a power transmission file from the file pm_file and returns a PowerModels data structured pm network dictionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_power_distribution_file","page":"Data Models","title":"PowerModelsITD.parse_power_distribution_file","text":"function parse_power_distribution_file(\n pmd_file::String,\n base_data::Dict{String,<:Any}=Dict{String, Any}();\n unique::Bool=true,\n multinetwork::Bool=false,\n auto_rename::Bool=false,\n ms_num::Int=1\n)\n\nParses power distribution files from the file pmd_file depending on the file extension. base_data represents a dictionary that contains data from other pmd systems (serving as the base where all data will be combined), unique represents if the pmd data provided is the first one passed or unique. If it is not unique, then the components need to be renamed before being added. Returns a PowerModelsDistribution data structured pmd network (a dictionary) with renamed components (if applicable).\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Data-Transformations","page":"Data Models","title":"Data Transformations","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nPages = [\"transformations.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsITD.apply_kron_reduction!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_kron_reduction!","text":"function apply_kron_reduction!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation that applies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.apply_phase_projection!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_phase_projection!","text":"function apply_phase_projection!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation to apply phase projection: pad matrices and vectors to max number of conductors\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.apply_phase_projection_delta!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_phase_projection_delta!","text":"function apply_phase_projection_delta!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation to apply phase projection delta for components where unprojected states are not yet supported (delta configurations). See [apply_phase_projection!]\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.apply_voltage_angle_difference_bounds!","page":"Data Models","title":"PowerModelsITD.apply_voltage_angle_difference_bounds!","text":"function apply_voltage_angle_difference_bounds!(\n pmitd_data::Dict{String,<:Any},\n vad::Real=5.0\n)\n\nApplies the corresponding transformation of voltage angle difference bound given by vad::Real in degrees (i.e., the allowed drift of angle from one end of a line to another) to all lines, to the pmd dictionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.apply_voltage_bounds!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_voltage_bounds!","text":"function apply_voltage_bounds!(\n pmitd_data::Dict{String,<:Any};\n vm_lb::Union{Real,Missing}=0.9,\n vm_ub::Union{Real,Missing}=1.1\n)\n\nApplies the corresponding transformation of voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb) bounds, scaled by the bus' voltage, to the pmd dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.make_lossless!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.make_lossless!","text":"function make_lossless!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation that removes parameters from objects with loss models to make them lossless. This includes switches voltage sources and transformers, which all have loss model parameters that can be omitted.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.remove_all_bounds!","page":"Data Models","title":"PowerModelsITD.remove_all_bounds!","text":"function remove_all_bounds!(\n pmitd_data::Dict{String,<:Any};\n exclude::Vector{<:String}=String[\"energy_ub\"]\n)\n\nApplies the corresponding transformation that removes all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}. By default, \"energy_ub\" is excluded from this removal, since it is a required property on storage (in pmd).\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Data-Checking-and-Units-Correction","page":"Data Models","title":"Data Checking and Units Correction","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"correct_network_data!\nassign_boundary_buses!\nresolve_units!\nreplicate\nsol_data_model!\ncalc_transmission_branch_flow_ac!\ntransform_pmitd_solution_to_eng!","category":"page"},{"location":"reference/data_models.html#PowerModelsITD.correct_network_data!","page":"Data Models","title":"PowerModelsITD.correct_network_data!","text":"function correct_network_data!(\n data::Dict{String,<:Any};\n multinetwork::Bool=false\n)\n\nCorrects and prepares the data in both pm and pmd dictionaries. Also, assigns the ids given in the boundary linking data to number buses. data is the pmitd dictionary to be corrected and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.assign_boundary_buses!","page":"Data Models","title":"PowerModelsITD.assign_boundary_buses!","text":"function assign_boundary_buses!(\n data::Dict{String,<:Any};\n multinetwork::Bool=false\n)\n\nAssigns the names given in the boundary linking data to number buses in corresponding transmission and distribution networks. data is the pmitd dictionary containing the boundary information and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.resolve_units!","page":"Data Models","title":"PowerModelsITD.resolve_units!","text":"function resolve_units!(\n data::Dict{String,<:Any};\n multinetwork::Bool=false,\n number_multinetworks::Int=0\n)\n\nResolve the units used throughout the disparate datasets by setting the same settings bases. data is the pmitd dictionary to be corrected by resolving units, multinetwork is the boolean that defines if there are multiple networks that need to be corrected, and number_multinetworks defines the number of multinetworks.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.replicate","page":"Data Models","title":"PowerModelsITD.replicate","text":"function replicate(\n sn_data::Dict{String,<:Any},\n count::Int;\n global_keys::Set{String}=Set{String}()\n)\n\nTurns in given single network pmitd data in multinetwork data with a count replicate of the given network. Note that this function performs a deepcopy of the network data. Significant multinetwork space savings can often be achieved by building application specific methods of building multinetwork with minimal data replication. sn_data is the data to be replicated, count is the number of networks to be replicated.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.sol_data_model!","page":"Data Models","title":"PowerModelsITD.sol_data_model!","text":"function sol_data_model!(\n pmitd::AbstractPowerModelITD,\n solution::Dict{String,<:Any}\n)\n\nsolution_processor to convert the solution(s) to polar voltage magnitudes and angles.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.calc_transmission_branch_flow_ac!","page":"Data Models","title":"PowerModelsITD.calc_transmission_branch_flow_ac!","text":"function calc_transmission_branch_flow_ac!(\n result::Dict{String,<:Any},\n pmitd_data::Dict{String,<:Any};\n)\n\nAssumes a valid ac solution is included in the result and computes the branch flow values. Returns the pf solution inside the pmitd_data dictionary (not the result dictionary). Replicates the _PM function but compatible with PMITD dicitionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.transform_pmitd_solution_to_eng!","page":"Data Models","title":"PowerModelsITD.transform_pmitd_solution_to_eng!","text":"function transform_pmitd_solution_to_eng!(\n result::Dict{String,<:Any},\n pmitd_data::Dict{String,<:Any}\n)\n\nTransforms the PMITD solution from MATH to ENG model. This transformation facilitates the conversion in \"pmitd\" of buses numbers to buses names according to the ENG model. Ex: (100002, 9, 6) -> (100002, voltagesource.3busunbalnogenmn_2.source, 6)\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#ObjectiveAPI","page":"Objectives","title":"Objectives","text":"","category":"section"},{"location":"reference/objectives.html","page":"Objectives","title":"Objectives","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"objective\")","category":"page"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost","text":"function objective_itd_min_fuel_cost(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization objective.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_polynomial-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_polynomial","text":"function objective_itd_min_fuel_cost_polynomial(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_polynomial_storage-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_polynomial_storage","text":"function objective_itd_min_fuel_cost_polynomial_storage(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_pwl-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_pwl","text":"function objective_itd_min_fuel_cost_pwl(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective with piecewise linear terms.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_storage-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_storage","text":"function objective_itd_min_fuel_cost_storage(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization objective with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta","text":"function objective_itd_min_fuel_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization for transmission and minimum load delta objective with storage for distribution objective.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta_simple","text":"function objective_itd_min_fuel_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization for transmission and simplified minimum load delta objective (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta","text":"function objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms in transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta_simple","text":"function objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms in transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta","text":"function objective_itd_min_fuel_pwl_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective with piecewise linear terms in transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta_simple","text":"function objective_itd_min_fuel_pwl_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective with piecewise linear terms in transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_mc_variable_pg_cost-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Objectives","title":"PowerModelsITD.objective_mc_variable_pg_cost","text":"function objective_mc_variable_pg_cost(\n pm::_PMD.AbstractUnbalancedIVRModel\n)\n\nAdds pgcost variables and constraints (IVR formulation) (Copied from PMD and modified to allow differentiation with TD gens (...dist)).\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_mc_variable_pg_cost-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_mc_variable_pg_cost","text":"function objective_mc_variable_pg_cost(\n pm::_PMD.AbstractUnbalancedPowerModel\n)\n\nAdds pgcost variables and constraints (Copied from PMD and modified to allow differentiation with TD gens (...dist)).\n\n\n\n\n\n","category":"method"},{"location":"manual/quickguide.html#Quick-Start-Guide","page":"Getting Started","title":"Quick Start Guide","text":"","category":"section"},{"location":"manual/quickguide.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-(OPFITD)","page":"Getting Started","title":"Running Integrated Transmission-Distribution Optimal Power Flow (OPFITD)","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Once PowerModelsITD.jl is installed, Ipopt is installed, and network data files for the transmission system, distribution system(s), and boundary linking (e.g., \"case5_withload.m\", \"case3_unbalanced.dss, \"case5_case3_unbal.json\" in the package folder under ./test/data) have been acquired, an Integrated Transmission-Distribution (ITD) AC Optimal Power Flow can be executed as follows,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsITD\nusing Ipopt\n\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.\n\nresult = solve_opfitd(\"case5_withload.m\", \"case3_unbalanced.dss\", \"case5_case3_unbal.json\", pmitd_type, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-(OPFITD)-with-Multiple-Distribution-Systems","page":"Getting Started","title":"Running Integrated Transmission-Distribution Optimal Power Flow (OPFITD) with Multiple Distribution Systems","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The snippet shown below demonstrates how to run an OPFITD with multiple (different) distribution systems connected to different transmission system buses. In summary, the distribution system files need to be passed as a Vector of files, and the corresponding boundaries must be defined in the boundary linking file. For the following snippet, assume we have access to ./test/data to get the respective files.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsITD\nusing Ipopt\n\n# Files\npm_file = \"case5_with2loads.m\"\npmd_file1 = \"case3_unbalanced.dss\"\npmd_file2 = \"case3_balanced.dss\"\nboundary_file = \"case5_case3x2_unbal_bal.json\"\n\npmd_files = [pmd_file1, pmd_file2] # create a vector of distribution system files.\n\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.\n\nresult = solve_opfitd(pm_file, pmd_files, boundary_file, pmitd_type, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Parsing-files","page":"Getting Started","title":"Parsing files","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To parse the respective files into PowerModelsITD.jl, use the parse_files command","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"pmitd_data = parse_files(pm_file, pmd_file, boundary_file) # single distribution system file.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To parse for a model with multiple distribution system files, just pass the distribution system argument as a vector of files, as seen below.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"pmd_files = [pmd_file1, pmd_file2]\npmitd_data = parse_files(pm_file, pmd_files, boundary_file) # vector of multiple distribution system files.","category":"page"},{"location":"manual/quickguide.html#Getting-Results","page":"Getting Started","title":"Getting Results","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The solve_ commands in PowerModelsITD.jl return detailed results data in the form of a dictionary. This dictionary can be saved for further processing as follows,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_opfitd(pmitd_data, NLPowerModelITD{ACPPowerModel, ACPUPowerModel}, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Note: the function solve_opfitd(...) does not neccessarily needs for the data to be parsed (i.e., parse_files(...)). The user can pass directly the files of the problem to the solve_opfitd(...) function, as seen previously.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Alternatively, you can use the function solve_model(...) and specify the build method, in this case build_opfitd:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_model(pmitd_data, NLPowerModelITD{ACPPowerModel, ACPUPowerModel}, Ipopt.Optimizer, build_opfitd)","category":"page"},{"location":"manual/quickguide.html#Running-Multinetwork-(mn)-Integrated-Transmission-Distribution-Optimal-Power-Flow-(OPFITD)-with-Multiple-Distribution-Systems-(ms)","page":"Getting Started","title":"Running Multinetwork (mn) Integrated Transmission-Distribution Optimal Power Flow (OPFITD) with Multiple Distribution Systems (ms)","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The snippet shown below demonstrates how to run a multinetwork (mn) OPFITD with multiple distribution systems (ms) connected to different transmission system buses. As seen previously, the distribution system files need to be passed as a Vector of files, and the corresponding boundaries are defined in the boundary linking file. To run a multinetwork problem, time series values can be defined inside the opendss file(s) that represent the distribution system(s). Some important things to remember are:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The time series values can be defined in a .csv file that is called inside the opendss file(s).\nWhen the data is parsed, the transmission system will be automatically replicated to the number of time series values available in the opendss file(s).\nIf data in the transmission system need to be modified for different time steps, the data can be modified after the parsing process is done.\nRemember to run the special multinetwork function or build function (i.e., solve_mn_opfitd(...) or solve_model(..., build_mn_opfitd)).","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"For the following snippet, assume we have access to ./test/data to get the respective files.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsITD\nusing Ipopt\n\n# Files\npm_file = \"case5_with2loads.m\"\npmd_file = \"case3_unbalanced_withoutgen_mn.dss\"\nboundary_file = \"case5_case3x2.json\"\n\npmd_files = [pmd_file, pmd_file] # create a vector of distribution system files.\n\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.\n\nresult = solve_mn_opfitd(pm_file, pmd_files, boundary_file, pmitd_type, Ipopt.Optimizer; auto_rename=true)\n","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Important Note: If you examine the file case3_unbalanced_withoutgen_mn.dss in detail, you will notice how time series power values are defined inside the opendss file as New Loadshape.ls1 pmult=(file=load_profile.csv), and then the load models are defined with parameters model=1 daily=ls1. This definition is sufficient for PowerModelsITD.jl to understand that this is a multinetwork problem. If you examine the content of the load_profile.csv file, you will notice that there are 4 time steps. This will cause the transmission, distribution, and boundary data to be replicated x4 (i.e., 4 times) while it is parsed to represent the overall problem.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Note: The auto_rename=true option used in this example will be explained in later documentation.","category":"page"},{"location":"manual/quickguide.html#Accessing-Different-Formulations","page":"Getting Started","title":"Accessing Different Formulations","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported formulations is presented below.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"NLPowerModelITD{ACPPowerModel, ACPUPowerModel} indicates an AC to AC formulation in polar coordinates.\nNLPowerModelITD{ACRPowerModel, ACRUPowerModel} indicates an AC to AC formulation in rectangular coordinates.\nLPowerModelITD{NFAPowerModel, NFAUPowerModel} indicates a linear network active power flow to network active power flow formulation.\nIVRPowerModelITD{IVRPowerModel, IVRUPowerModel} indicates an AC current-voltage to AC current-voltage formulation.\nBFPowerModelITD{SOCBFPowerModel, SOCNLPUBFPowerModel} indicates an SOC branch-flow to SOC branch-flow formulation.\nNLBFPowerModelITD{ACRPowerModel, FBSUBFPowerModel} indicates an AC in rectangular coordinates to forward-backward sweep formulation.\nNLFOTPowerModelITD{ACRPowerModel, FOTRUPowerModel} indicates an AC in rectangular coordinates to first-order Taylor in rectangular coordinates formulation.\nNLFOTPowerModelITD{ACPPowerModel, FOTPUPowerModel} indicates an AC in polar coordinates to first-order Taylor in polar coordinates formulation.","category":"page"},{"location":"manual/quickguide.html#Examples","page":"Getting Started","title":"Examples","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsITD.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation.","category":"page"},{"location":"reference/formulations.html#FormulationAPI","page":"Formulations","title":"Formulations","text":"","category":"section"},{"location":"reference/formulations.html#Abstract-Models","page":"Formulations","title":"Abstract Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"AbstractPowerModelITD\nAbstractNLPowerModelITD\nAbstractLPowerModelITD\nAbstractIVRPowerModelITD\nAbstractBFPowerModelITD\nAbstractLNLBFPowerModelITD","category":"page"},{"location":"reference/formulations.html#PowerModelsITD.AbstractPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractPowerModelITD","text":"Root of the PowerModelsITD formulation hierarchy.\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractNLPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractNLPowerModelITD","text":"Abstract Non-Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractLPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractLPowerModelITD","text":"Abstract Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractIVRPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractIVRPowerModelITD","text":"Abstract Current-Voltage (IVR) ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractBFPowerModelITD","text":"Abstract Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractLNLBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractLNLBFPowerModelITD","text":"Abstract Linear/Non-Linear to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Power-ITD-Models","page":"Formulations","title":"Power ITD Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"PowerModelITD\nNLPowerModelITD\nLPowerModelITD\nIVRPowerModelITD\nBFPowerModelITD\nNLFOTPowerModelITD\nNLBFPowerModelITD\nLBFPowerModelITD\nWRBFPowerModelITD","category":"page"},{"location":"reference/formulations.html#PowerModelsITD.PowerModelITD","page":"Formulations","title":"PowerModelsITD.PowerModelITD","text":"General PowerModelITD\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.NLPowerModelITD","page":"Formulations","title":"PowerModelsITD.NLPowerModelITD","text":"Non-Linear to Non-Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.LPowerModelITD","page":"Formulations","title":"PowerModelsITD.LPowerModelITD","text":"Linear to Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.IVRPowerModelITD","page":"Formulations","title":"PowerModelsITD.IVRPowerModelITD","text":"IVR to IVR ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.BFPowerModelITD","page":"Formulations","title":"PowerModelsITD.BFPowerModelITD","text":"Branch-flow to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.NLFOTPowerModelITD","page":"Formulations","title":"PowerModelsITD.NLFOTPowerModelITD","text":"Non-Linear to First-Order Taylor (FOT) ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.NLBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.NLBFPowerModelITD","text":"Non-Linear to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.LBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.LBFPowerModelITD","text":"Linear to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.WRBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.WRBFPowerModelITD","text":"WR to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Mutable-Stuct-creator","page":"Formulations","title":"Mutable Stuct creator","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"@pmitd_fields","category":"page"},{"location":"reference/formulations.html#PowerModelsITD.@pmitd_fields","page":"Formulations","title":"PowerModelsITD.@pmitd_fields","text":"A macro for adding the base PowerModelsITD fields to a type definition.\n\n\n\n\n\n","category":"macro"},{"location":"developer/contributing.html#Contributing","page":"Contributing","title":"Contributing","text":"","category":"section"},{"location":"developer/contributing.html#Pull-Requests","page":"Contributing","title":"Pull Requests","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Every PR to PowerModelsITD should strive to meet the following guidelines.","category":"page"},{"location":"developer/contributing.html#PR-Title","page":"Contributing","title":"PR Title","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Should be concise and clear, describing in a phrase the content of the PR\nShould include a prefix that describes the primary type of the PR\nADD: feature addition\nFIX: bugfix\nREF: refactor\nUPD: updates to code for e.g. version bumps of dependencies\nSTY: style changes, no changes to function names, added features, etc.\nDOC: documentation-only additions/changes\nRM: dead code removal","category":"page"},{"location":"developer/contributing.html#PR-Body","page":"Contributing","title":"PR Body","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"If the change is breaking, it should be clearly stated up front\nThe purpose of this PR should be clearly stated right away\nMajor changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR\nAny associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged","category":"page"},{"location":"developer/contributing.html#PR-Code","page":"Contributing","title":"PR Code","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"An entry should be added to CHANGELOG.md for every PR\nDocumentation should be updated (See Documentation section above for guidelines)\nUnit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included\nCode should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)","category":"page"},{"location":"developer/contributing.html#Versions","page":"Contributing","title":"Versions","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"PowerModelsITD follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsITD reaches v1.0.0, we will adhere strictly to the SemVer convention.","category":"page"},{"location":"developer/contributing.html#Branch-Management","page":"Contributing","title":"Branch Management","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.","category":"page"},{"location":"reference/problems.html#ProblemAPI","page":"Problems","title":"Problems","text":"","category":"section"},{"location":"reference/problems.html#Solve-Problems","page":"Problems","title":"Solve Problems","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"solve\")","category":"page"},{"location":"reference/problems.html#PowerModelsITD.solve_dmld_opfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_dmld_opfitd","text":"function solve_dmld_opfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with minimum load delta (dmld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_dmld_opfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_dmld_opfitd","text":"function solve_dmld_opfitd(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with minimum load delta (dmld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_dmld_opfitd_simple-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_dmld_opfitd_simple","text":"function solve_mn_dmld_opfitd_simple(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_dmld_opfitd_simple-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_dmld_opfitd_simple","text":"function solve_mn_dmld_opfitd_simple(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd","text":"function solve_mn_opfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd","text":"function solve_mn_opfitd(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_oltc-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_oltc","text":"function solve_mn_opfitd_oltc(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_oltc-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_oltc","text":"function solve_mn_opfitd_oltc(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_storage-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_storage","text":"function solve_mn_opfitd_storage(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_storage-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_storage","text":"function solve_mn_opfitd_storage(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_model-Tuple{Dict{String}, Type, Any, Function}","page":"Problems","title":"PowerModelsITD.solve_model","text":"function solve_model(\n pmitd_data::Dict{String,<:Any},\n pmitd_type::Type, optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nInstantiates and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling object from power integrated transmission-distribution input data, pmitd_data. Here, pmitd_type is the integrated power transmission-distribution modeling type, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_model-Tuple{String, String, String, Type, Any, Function}","page":"Problems","title":"PowerModelsITD.solve_model","text":"function solve_model(\n pm_file::String,\n pmd_file::String,\n pmitd_file::String,\n pmitd_type::Type,\n optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nParses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, power distribution, and boundry linking input files pm_file, pmd_file, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_model-Tuple{String, Vector, String, Type, Any, Function}","page":"Problems","title":"PowerModelsITD.solve_model","text":"function solve_model(\n pm_file::String,\n pmd_files::Vector,\n pmitd_file::String,\n pmitd_type::Type,\n optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nParses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, multiple power distribution systems, and boundary linking input files pm_file, pmd_files vector of files, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork,solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd","text":"function solve_opfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd","text":"function solve_opfitd(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_oltc-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_oltc","text":"function solve_opfitd_oltc(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_oltc-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_oltc","text":"function solve_opfitd_oltc(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_storage-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_storage","text":"function solve_opfitd_storage(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_storage-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_storage","text":"function solve_opfitd_storage(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_pfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_pfitd","text":"function solve_pfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_pfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_pfitd","text":"function solve_pfitd(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Builders","page":"Problems","title":"Builders","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"build\")","category":"page"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_oltc-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_oltc","text":"function build_mn_opfitd_oltc(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_oltc-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_oltc","text":"function build_mn_opfitd_oltc(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_oltc-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_oltc","text":"function build_mn_opfitd_oltc(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_oltc-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_oltc","text":"function build_opfitd_oltc(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D OLTC Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_oltc-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_oltc","text":"function build_opfitd_oltc(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D OLTC Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_oltc-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_oltc","text":"function build_opfitd_oltc(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow for Branch Flow (BF) Formulations.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Model-Instantiation","page":"Problems","title":"Model Instantiation","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"instantiate_model","category":"page"},{"location":"reference/problems.html#PowerModelsITD.instantiate_model","page":"Problems","title":"PowerModelsITD.instantiate_model","text":"function instantiate_model(\n pm_file::String,\n pmd_files::Vector,\n pmitd_file::String,\n pmitd_type::Type,\n build_method::Function;\n multinetwork::Bool=false,\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n auto_rename::Bool=false,\n kwargs...\n)\n\nInstantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_files vector, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.\n\n\n\n\n\nfunction instantiate_model(\n pm_file::String,\n pmd_file::String,\n pmitd_file::String,\n pmitd_type::Type,\n build_method::Function;\n multinetwork::Bool=false,\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n auto_rename::Bool=false,\n kwargs...\n)\n\nInstantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_file (one file provided), and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.\n\n\n\n\n\nfunction instantiate_model(\n pmitd_data::Dict{String,<:Any},\n pmitd_type::Type,\n build_method::Function;\n multinetwork::Bool=false,\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n kwargs...\n)\n\nInstantiates and returns PowerModelsITD modeling object from parsed power transmission and distribution (PMITD) input data pmitd_data. Here, pmitd_type is the integrated power transmission and distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions is an array of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.\n\n\n\n\n\n","category":"function"},{"location":"manual/fileformat.html#File-Formats-Guide","page":"File Formats","title":"File Formats Guide","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"In this section, we will give a brief introduction to the file formats supported in PowerModelsITD.jl. Place special attention at the Boundary section to understand how the boundary linking file must be formatted and how the auto_rename=true option works.","category":"page"},{"location":"manual/fileformat.html#File-Formats-Supported","page":"File Formats","title":"File Formats Supported","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Transmission: Matpower \".m\" and PTI \".raw\" files (PSS(R)E v33 specification)\nDistribution: OpenDSS \".dss\" files\nBoundary: JSON \".json\" files","category":"page"},{"location":"manual/fileformat.html#Transmission-System","page":"File Formats","title":"Transmission System","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Matpower (\".m\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"function mpc = case5\nmpc.version = '2';\nmpc.baseMVA = 100.0;\n\n%% bus data\n%\tbus_i\ttype\tPd\tQd\tGs\tBs\tarea\tVm\tVa\tbaseKV\tzone\tVmax\tVmin\nmpc.bus = [\n\t1\t 2\t 0.0\t 0.0\t 0.0\t 0.0\t 1\t 1.07762\t 2.80377\t 230.0\t 1\t 1.10000\t 0.90000;\n\t2\t 1\t 300.0\t 98.61\t 0.0\t 0.0\t 1\t 1.08407\t -0.73465\t 230.0\t 1\t 1.10000\t 0.90000;\n\t3\t 2\t 300.0\t 98.61\t 0.0\t 0.0\t 1\t 1.10000\t -0.55972\t 230.0\t 1\t 1.10000\t 0.90000;\n\t4\t 3\t 390.0\t 131.47\t 0.0\t 0.0\t 1\t 1.06414\t 0.00000\t 230.0\t 1\t 1.10000\t 0.90000;\n\t5\t 1\t 8.0\t 1.2\t 0.0\t 0.0\t 1\t 1.00000\t 0.00000\t 230.0\t 1\t 1.10000\t 0.90000;\n\t10\t 2\t 0.0\t 0.0\t 0.0\t 0.0\t 1\t 1.06907\t 3.59033\t 230.0\t 1\t 1.10000\t 0.90000;\n];\n\n%% generator data\n%\tbus\tPg\tQg\tQmax\tQmin\tVg\tmBase\tstatus\tPmax\tPmin\nmpc.gen = [\n\t1\t 40.0\t 30.0\t 30.0\t -30.0\t 1.07762\t 100.0\t 1\t 40.0\t 0.0;\n\t1\t 170.0\t 127.5\t 127.5\t -127.5\t 1.07762\t 100.0\t 1\t 170.0\t 0.0;\n\t3\t 324.498\t 390.0\t 390.0\t -390.0\t 1.1\t 100.0\t 1\t 520.0\t 0.0;\n\t4\t 0.0\t -10.802\t 150.0\t -150.0\t 1.06414\t 100.0\t 1\t 200.0\t 0.0;\n\t10\t 470.694\t -165.039\t 450.0\t -450.0\t 1.06907\t 100.0\t 1\t 600.0\t 0.0;\n];\n\n%% generator cost data\n%\t2\tstartup\tshutdown\tn\tc(n-1)\t...\tc0\nmpc.gencost = [\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 14.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 15.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 30.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 40.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 10.000000\t 0.000000\t 2.000000;\n];\n\n%% branch data\n%\tfbus\ttbus\tr\tx\tb\trateA\trateB\trateC\tratio\tangle\tstatus\tangmin\tangmax\nmpc.branch = [\n\t1\t 2\t 0.00281\t 0.0281\t 0.00712\t 400.0\t 400.0\t 400.0\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t1\t 4\t 0.00304\t 0.0304\t 0.00658\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t1\t 10\t 0.00064\t 0.0064\t 0.03126\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t2\t 3\t 0.00108\t 0.0108\t 0.01852\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t3\t 4\t 0.00297\t 0.0297\t 0.00674\t 426\t 426\t 426\t 1.05\t 1.0\t 1\t -30.0\t 30.0;\n\t4\t 10\t 0.00297\t 0.0297\t 0.00674\t 240.0\t 240.0\t 240.0\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t2\t 5\t 0.00297\t 0.0297\t 0.00674\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n];\n","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"PSS(R)E v33 specification (\".raw\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":" 0, 100.00, 33, 0, 0, 60.00\ntests an angle shifting transformer\ntests two winding transformer status\n 1,'1', 230.0000,2, 1, 1, 1,1.00000000, 2.803770, 1.10000, 0.90000, 1.10000, 0.90000\n 2,'2', 230.0000,1, 1, 1, 1,1.08406997, -0.734650, 1.10000, 0.90000, 1.10000, 0.90000\n 3,'3', 230.0000,2, 1, 1, 1,1.00000000, -0.559720, 1.10000, 0.90000, 1.10000, 0.90000\n 4,'4', 230.0000,3, 1, 1, 1,1.06413996, 0.000000, 1.10000, 0.90000, 1.10000, 0.90000\n 5,'5', 230.0000,1, 1, 1, 1,1.00000000, 0.000000, 1.10000, 0.90000, 1.10000, 0.90000\n 10,'10', 230.0000,2, 1, 1, 1,1.00000000, 3.590330, 1.10000, 0.90000, 1.10000, 0.90000\n0 / END OF BUS DATA, BEGIN LOAD DATA\n 2,'1',1, 1, 1, 300.000, 98.610, 0.000, 0.000, 0.000, 0.000, 1,1\n 3,'1',1, 1, 1, 300.000, 98.610, 0.000, 0.000, 0.000, 0.000, 1,1\n 4,'1',1, 1, 1, 390.000, 131.470, 0.000, 0.000, 0.000, 0.000, 1,1\n 5,'1',1, 1, 1, 8.00000, 1.20000, 0.000, 0.000, 0.000, 0.000, 1,1\n0 / END OF LOAD DATA, BEGIN FIXED SHUNT DATA\n0 / END OF FIXED SHUNT DATA, BEGIN GENERATOR DATA\n 1,'1', 40.000, 30.000, 30.000, -30.000,1.07762, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 40.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 1,'2', 170.000, 127.500, 127.500, -127.500,1.07762, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 170.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 3,'1', 324.498, 390.000, 390.000, -390.000,1.10000, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 520.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 4,'1', 0.000, -10.802, 150.000, -150.000,1.06414, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 200.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 10,'1', 470.694, -165.039, 450.000, -450.000,1.06907, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 600.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n0 / END OF GENERATOR DATA, BEGIN BRANCH DATA\n 1, 2,'1',2.81000E-3,2.81000E-2,7.12000E-3, 400.00, 400.00, 400.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 1, 4,'1',3.04000E-3,3.04000E-2,6.58000E-3, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 1, 10,'1',6.40000E-4,6.40000E-3,3.12600E-2, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 2, 3,'1',1.08000E-3,1.08000E-2,1.85200E-2, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 3, 4,'1',2.97000E-3,2.97000E-2,6.74000E-3, 426.00, 426.00, 426.00, 1.05000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 4, 10,'1',2.97000E-3,2.97000E-2,6.74000E-3, 240.00, 240.00, 240.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 2, 5,'1',2.97000E-3,2.97000E-2,6.74000E-3, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n0 / END OF BRANCH DATA, BEGIN TRANSFORMER DATA\n 4, 3, 0,'1 ',0,1,1,0.00000E0,6.74000E-3,2,' ',1, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, -1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n 3, 4, 0,'2 ',1,0,1,0.00000E0,6.74000E-3,2,' ',1, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, 1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n 3, 4, 0,'2 ',1,1,0,0.00000E0,6.74000E-3,2,' ',0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, 1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n 3, 4, 0,'2 ',1,1,1,0.00000E0,6.74000E-3,2,' ',2, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, 1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n0 / END OF TRANSFORMER DATA, BEGIN AREA DATA\n 1, 0, 0.000, 1.000,'1 '\n0 / END OF AREA DATA, BEGIN TWO-TERMINAL DC DATA\n0 / END OF TWO-TERMINAL DC DATA, BEGIN VOLTAGE SOURCE CONVERTER DATA\n0 / END OF VOLTAGE SOURCE CONVERTER DATA, BEGIN IMPEDANCE CORRECTION DATA\n0 / END OF IMPEDANCE CORRECTION DATA, BEGIN MULTI-TERMINAL DC DATA\n0 / END OF MULTI-TERMINAL DC DATA, BEGIN MULTI-SECTION LINE DATA\n0 / END OF MULTI-SECTION LINE DATA, BEGIN ZONE DATA\n 1,'1 '\n0 / END OF ZONE DATA, BEGIN INTER-AREA TRANSFER DATA\n0 / END OF INTER-AREA TRANSFER DATA, BEGIN OWNER DATA\n 1,'1'\n0 / END OF OWNER DATA, BEGIN FACTS CONTROL DEVICE DATA\n0 / END OF FACTS CONTROL DEVICE DATA, BEGIN SWITCHED SHUNT DATA\n0 /END OF SWITCHED SHUNT DATA, BEGIN GNE DEVICE DATA\n0 /END OF GNE DEVICE DATA\nQ","category":"page"},{"location":"manual/fileformat.html#Distribution-System","page":"File Formats","title":"Distribution System","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"OpenDSS (\".dss\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"New Circuit.3bus_bal\n! define a really stiff source\n~ basekv=230 pu=1.00 MVAsc3=200000 MVAsc1=210000\n\n! Substation Transformer\nNew Transformer.SubXF Phases=3 Windings=2 Xhl=0.01\n~ wdg=1 bus=sourcebus conn=wye kv=230 kva=25000 %r=0.0005\n~ wdg=2 bus=Substation conn=wye kv=13.8 kva=25000 %r=0.0005\n\n!Define Linecodes\nNew linecode.556MCM nphases=3 basefreq=60 ! ohms per 5 mile\n~ rmatrix = ( 0.1000 | 0.0400 0.1000 | 0.0400 0.0400 0.1000)\n~ xmatrix = ( 0.0583 | 0.0233 0.0583 | 0.0233 0.0233 0.0583)\n~ cmatrix = (50.92958178940651 | -0 50.92958178940651 | -0 -0 50.92958178940651 ) ! small capacitance\n\nNew linecode.4/0QUAD nphases=3 basefreq=60 ! ohms per 100ft\n~ rmatrix = ( 0.1167 | 0.0467 0.1167 | 0.0467 0.0467 0.1167)\n~ xmatrix = (0.0667 | 0.0267 0.0667 | 0.0267 0.0267 0.0667 )\n~ cmatrix = (50.92958178940651 | -0 50.92958178940651 | -0 -0 50.92958178940651 ) ! small capacitance\n\n!Define lines\nNew Line.OHLine bus1=Substation.1.2.3 Primary.1.2.3 linecode = 556MCM length=1 normamps=6000 emergamps=6000! 5 mile line\nNew Line.Quad Bus1=Primary.1.2.3 loadbus.1.2.3 linecode = 4/0QUAD length=1 normamps=6000 emergamps=6000 ! 100 ft\n\n!Loads - single phase\nNew Load.L1 phases=1 loadbus.1.0 ( 13.8 3 sqrt / ) kW=3000 kvar=1500 model=1\nNew Load.L2 phases=1 loadbus.2.0 ( 13.8 3 sqrt / ) kW=3000 kvar=1500 model=1\nNew Load.L3 phases=1 loadbus.3.0 ( 13.8 3 sqrt / ) kW=3000 kvar=1500 model=1\n\n!GENERATORS DEFINITIONS\nNew generator.gen1 Bus1=loadbus.1.2.3 Phases=3 kV=( 13.8 3 sqrt / ) kW=2000 pf=1 conn=wye Model=3\n\nSet VoltageBases = \"230,13.8\"\nSet tolerance=0.000001\nset defaultbasefreq=60","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: See how the defined file has a unique circuit (ckt) name (i.e., New Circuit.3bus_bal). It is important that for scenarios where multiple distribution systems are to be used, each distribution system file must have a unique ckt name. Otherwise, PowerModelsITD.jl will generate an error indicating the user that they must input distribution systems with unique names (or use the auto_rename=true option explained later).","category":"page"},{"location":"manual/fileformat.html#Boundary","page":"File Formats","title":"Boundary","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"The file shown below shows the ideal format to be used when defining the boundary connections in the JSON file. For transmission system boundary buses, the name of the bus is sufficient. For distribution systems, especially, cases where multiple distribution systems will be inputted, the ideal format for distribution_boundary names is circuit_name.object.name_of_object. In this example, two distribution systems (3bus_unbal and 3bus_bal) are going to be connected to buses 5 and 6 in the transmission system.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"JSON (\".json\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"[\n\t{\n \"transmission_boundary\": \"5\",\n \"distribution_boundary\": \"3bus_unbal.voltage_source.source\"\n\t},\n\n\t{\n \"transmission_boundary\": \"6\",\n \"distribution_boundary\": \"3bus_bal.voltage_source.source\"\n }\n]","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"As observed in the file, we follow the ideal format when defining the distribution_boundary names. If this format is not followed (and the auto_rename=true option is not used), errors will be displayed by PowerModelsITD.jl. Errors ranging from \"The distribution bus/source specified in the JSON file does not exists. Please input an existing bus/source!\" to \"Distribution systems have same circuit names! Please use different names for each distribution system. (e.g., New Circuit.NameOfCkt) or use the auto_rename=true option.\" will be displayed warning the user that something is wrong with the JSON file information provided.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"But, what happens when we would like to use the same distribution system file to create multiple dsitribution systems connected at different transmission system boundary buses. In other words, we don't care too much about the names of the distribution circuits, and the boundary names in the JSON file are inputted in a sequential order. Then, for use with caution, PowerModelsITD.jl supports the use of an auto-renaming option that renames repeated circuits in a sequential manner such as: pmd_files = [pmd, pmd, ..., pmd], pmd_cktName_1, pmd_cktName_2, ..., pmd_cktName_n.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: All elements/components inside the pmd=> dictionary will always be renamed based on the format ckt_name.component_name","category":"page"},{"location":"manual/fileformat.html#The-auto_renametrue-Option","page":"File Formats","title":"The auto_rename=true Option","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: Use this option with extreme caution! When this option is used, a @warn will be displayed such that the user is aware that the boundary connections may be wrong because they are assigned/connected in a sequential manner and not based on buses names.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Let's go through an example case where we would like to use the same distribution system file to create a test case where multiple distribution systems (with the same name) are connected to different transmission system boundary buses. And, we don't care about the specific boundary connections since they can be done sequentially (since all or some distribution systems will be a copy of the same circuit and will have the same names).","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Let's first define the test case in Julia:","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = joinpath(dirname(trans_path), \"case5_with2loads.m\")\npmd_file = joinpath(dirname(dist_path), \"case3_unbalanced_withoutgen.dss\")\npmd_files = [pmd_file, pmd_file] # vector of multiple distro. systems copies\npmitd_file = joinpath(dirname(bound_path), \"case5_case3x2.json\")\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\n\nresult = solve_opfitd(pm_file, pmd_files, pmitd_file, pmitd_type, Ipopt.Optimizer; auto_rename=true)","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Another way to define and solve the problem could be (both ways are equivalent):","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = joinpath(dirname(trans_path), \"case5_with2loads.m\")\npmd_file = joinpath(dirname(dist_path), \"case3_unbalanced_withoutgen.dss\")\npmd_files = [pmd_file, pmd_file] # vector of multiple distro. systems copies\npmitd_file = joinpath(dirname(bound_path), \"case5_case3x2.json\")\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\n\npmitd_data = parse_files(pm_file, pmd_files, pmitd_file; auto_rename=true)\nresult = solve_model(pmitd_data, pmitd_type, Ipopt.Optimizer, build_opfitd)","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Note, how the option auto_rename=true is defined such that PowerModelsITD.jl can understand that we don't care about the specific names of the circuits (because we are repeating ckts) so we are allowing the application to auto-rename the ckts as needed for its correct operation. If the auto_rename option is not defined, errors will be displayed.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"The JSON file for this example is defined as:","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"[\n\t{\n \"transmission_boundary\": \"5\",\n \"distribution_boundary\": \"voltage_source.source\"\n\t},\n\n\t{\n \"transmission_boundary\": \"6\",\n \"distribution_boundary\": \"voltage_source.source\"\n }\n]","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"See how we do not need to especifically define the circuit names, but we still need to define the object.name_of_object. Internally, PowerModelsITD.jl will parse the files and assign the names: 3bus_unbal_nogen_1 and 3bus_unbal_nogen_2 as the names of the circuits (based on the ckt_name_n standard format).","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: In the case where multiple distribuition systems are defined, let's say 3 or more, and only two have the same circuit name, if auto_rename=false (i.e., not used) errors will be displayed, if auto_rename=true only the repeated circuits will be renamed (in this case, all repeated circuits after the first one).","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"The auto rename option can be very useful for some cases, but users must be very careful when using it since specific boundary connections are going to be performed in a sequential manner and PowerModelsITD.jl cannot guarantee that this is what the user is expecting. To avoid confusions, we recommend users stick to the ideal boundary linking file JSON format.","category":"page"},{"location":"index.html#![PowerModelsITD-Logo](assets/logo.svg)","page":"Introduction","title":"(Image: PowerModelsITD Logo)","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"CurrentModule = PowerModelsITD","category":"page"},{"location":"index.html#What-is-PowerModelsITD.jl?","page":"Introduction","title":"What is PowerModelsITD.jl?","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"PowerModelsITD.jl is a Julia/JuMP-based package for modeling and optimizing integrated transmission-distribution (ITD) power networks.","category":"page"},{"location":"index.html#Resources-for-Getting-Started","page":"Introduction","title":"Resources for Getting Started","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Installation Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Quickstart Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the File Formats Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the introductory tutorial Introduction to PowerModelsITD.jl.","category":"page"},{"location":"index.html#How-the-documentation-is-structured","page":"Introduction","title":"How the documentation is structured","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The following is a high-level overview of how our documentation is structured. There are three primary sections:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The Manual contains detailed documentation for certain aspects of PowerModelsITD.jl, such as the Data Models, the Network Formulations, or the Optimization Problem Specifications.\nTutorials contains working examples of how to use PowerModelsITD.jl. Start here if you are new to PowerModelsITD.jl.\nThe API Reference contains a complete list of the functions you can use in PowerModelsITD.jl. Look here if you want to know how to use a particular function.","category":"page"},{"location":"index.html#Citing-PowerModelsITD.jl","page":"Introduction","title":"Citing PowerModelsITD.jl","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"If you find PowerModelsITD useful for your work, we kindly request that you cite the following publication:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"@article{ospina2023modeling,\n author={Ospina, Juan and Fobes, David M. and Bent, Russell and Wächter, Andreas},\n journal={IEEE Transactions on Power Systems},\n title={Modeling and Rapid Prototyping of Integrated Transmission-Distribution OPF Formulations with PowerModelsITD.jl},\n year={2023},\n volume={},\n number={},\n pages={1-14},\n doi={10.1109/TPWRS.2023.3234725}}","category":"page"},{"location":"index.html#Acknowledgments","page":"Introduction","title":"Acknowledgments","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"This code has been developed with the support of the Grant: \"Optimized Resilience for Distribution and Transmission Systems\" funded by the U.S. Department of Energy (DOE) Office of Electricity (OE) Advanced Grid Modeling (AGM) Research Program under program manager Ali Ghassemian. The research work conducted at Los Alamos National Laboratory is done under the auspices of the National Nuclear Security Administration of the U.S. Department of Energy under Contract No. 89233218CNA000001. The primary developers are Juan Ospina (@juanjospina) and David Fobes (@pseudocubic).","category":"page"},{"location":"index.html#License","page":"Introduction","title":"License","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.","category":"page"},{"location":"reference/internal.html#Internal-Functions","page":"Internal Functions","title":"Internal Functions","text":"","category":"section"},{"location":"reference/internal.html","page":"Internal Functions","title":"Internal Functions","text":"Modules = [PowerModelsITD]\nPublic = false","category":"page"},{"location":"reference/internal.html#PowerModelsITD._add_file_name!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._add_file_name!","text":"function _add_file_name!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any}\n)\n\nAdds filename from data to \"files\" dictionary in pmd (base_data).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._assign_boundary_buses!-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsITD._assign_boundary_buses!","text":"function _assign_boundary_buses!(\n data::Dict{String,<:Any},\n conn;\n multinetwork::Bool=false,\n nw::String=\"0\"\n)\n\nHelper function for assigning boundary buses. data is the pmitd dictionary containing the boundary information, conn is the boundary connection information, multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned, and nw is the network number.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._check_and_rename_circuits!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._check_and_rename_circuits!","text":"function _check_and_rename_circuits!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any};\n auto_rename::Bool=false,\n ms_num::Int=1\n)\n\nChecks if the name of the data ckt already exists, if so and auto_rename=false an error should be displayed telling the user that they must use the different ckt names when parsing multiple distribution systems. If auto_rename=true, PMITD will rename the repeated ckt name to repeatedCktName_(ms_num). Finally, adds the ckt name of data to \"cktnames\" in the `basedata` dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._clean_pmd_base_data!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._clean_pmd_base_data!","text":"function _clean_pmd_base_data!(\n base_data::Dict{String,<:Any}\n)\n\nRemoves/Cleans components from base_data pmd dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_boundary_active_power_start_values_distribution-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._compute_boundary_active_power_start_values_distribution","text":"function _compute_boundary_active_power_start_values_distribution(\n nw_ref::Dict{Symbol,<:Any}\n)\n\nComputes the starting values for pbound_to variables. Returns dictionary with summation of the activate power loads. Returns dictionary with the summation of the active power loads for each dist. system.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_boundary_reactive_power_start_values_distribution-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._compute_boundary_reactive_power_start_values_distribution","text":"function _compute_boundary_reactive_power_start_values_distribution(\n nw_ref::Dict{Symbol,<:Any}\n)\n\nComputes the starting values for qbound_to and adds them to ref. Returns dictionary with the summation of the reactive power loads for each dist. system.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_default_strg_cost_distribution-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._compute_default_strg_cost_distribution","text":"function _compute_default_strg_cost_distribution(\n strg_data::Dict{String,<:Any}\n)\n\nComputes a default cost for the energy storage (distribution). Returns the default storage cost to be added to the data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_default_strg_cost_transmission-Tuple{Dict{String}, Float64}","page":"Internal Functions","title":"PowerModelsITD._compute_default_strg_cost_transmission","text":"function _compute_default_strg_cost_transmission(\n strg_data::Dict{String,<:Any},\n baseMVA::Float64\n)\n\nComputes a default cost for the energy storage (transmission). Returns the default storage cost to be added to the data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._convert_to_pmitd_structure-Tuple{Vector{Any}}","page":"Internal Functions","title":"PowerModelsITD._convert_to_pmitd_structure","text":"function _convert_to_pmitd_structure(\n data::Vector{Any}\n)\n\nConverts json data parsed into the required pmitd structure. Returns the new data structure with necessary information and compatible names.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._correct_boundary_names!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._correct_boundary_names!","text":"function _correct_boundary_names!(\n pmitd_data::Dict{String,<:Any}\n)\n\nCorrects the names of distribution system boundary buses given in boundary linking file based on the cktnames stored in the \"pmd\"=>\"cktnames\". The correction is done sequentially, so each distribution boundary bus name will be assigned the specific ckt name that exists in the numerical position of the vector \"cktnames\". This process should only be applied when users explicitly use the option `autorename=true, and awarning` is displayed warning the user that the boundaries may not be correct.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._get_powermodel_from_powermodelitd-Tuple{AbstractPowerModelITD}","page":"Internal Functions","title":"PowerModelsITD._get_powermodel_from_powermodelitd","text":"function _get_powermodel_from_powermodelitd(\n pm::AbstractPowerModelITD\n)\n\nGets the PM model from the PMITD model structure.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._get_powermodeldistribution_from_powermodelitd-Tuple{AbstractPowerModelITD}","page":"Internal Functions","title":"PowerModelsITD._get_powermodeldistribution_from_powermodelitd","text":"function _get_powermodeldistribution_from_powermodelitd(\n pmd::AbstractPowerModelITD\n)\n\nGets the PMD model from the PMITD model structure.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad","text":"function _objective_itd_min_fuel_cost_polynomial_linquad(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic (IVR formulation).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad","text":"function _objective_itd_min_fuel_cost_polynomial_linquad(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage","text":"function _objective_itd_min_fuel_cost_polynomial_linquad_storage(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic (IVR formulation) with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage","text":"function _objective_itd_min_fuel_cost_polynomial_linquad_storage(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl","text":"function _objective_itd_min_fuel_cost_polynomial_nl(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear (IVR formulation).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl","text":"function _objective_itd_min_fuel_cost_polynomial_nl(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage","text":"function _objective_itd_min_fuel_cost_polynomial_nl_storage(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear (IVR formulation) with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage","text":"function _objective_itd_min_fuel_cost_polynomial_nl_storage(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta","text":"function _objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic for transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta_simple","text":"function _objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic for transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta","text":"function _objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear for transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta_simple","text":"function _objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear for transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_connect_transmission_distribution!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_connect_transmission_distribution!","text":"function _ref_connect_transmission_distribution!(\n ref::Dict{Symbol,<:Any}\n)\n\nCreates the boundary refs that integrate/connect the transmission and distribution system bus(es).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_filter_distribution_slack_generators!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_filter_distribution_slack_generators!","text":"function _ref_filter_distribution_slack_generators!(\n ref::Dict{Symbol,<:Any}\n)\n\nRemoves/filters-out the slack generators at buses/nodes where the transmission system is going to be integrated/connected.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_filter_transmission_integration_loads!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_filter_transmission_integration_loads!","text":"function _ref_filter_transmission_integration_loads!(\n ref::Dict{Symbol,<:Any}\n)\n\nRemoves/filters-out the loads at buses (i.e., boundary buses) where distribution systems are going to be integrated/connected.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_remove_refbus_distribution!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_remove_refbus_distribution!","text":"function _ref_remove_refbus_distribution!(\n ref::Dict{Symbol,<:Any}\n)\n\nRemoves the reference(slack) bus in the distribution system(s).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._remove_network_components!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._remove_network_components!","text":"function _remove_network_components!(\n base_data::Dict{String,<:Any}\n)\n\nRemoves components from base_data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._rename_components!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._rename_components!","text":"function _rename_components!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any}\n)\n\nRenames the components given in data for new multi-system and adds the renamed components to base_data dictionary structure. cktname.element\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._rename_network_components!-Tuple{Dict{String}, Dict{String}, String}","page":"Internal Functions","title":"PowerModelsITD._rename_network_components!","text":"function _rename_network_components!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any},\n ckt_name::String\n)\n\nRename specific components in single network dictionary. base_data is the dictionary where the renamed components are to be added, data is the dictionary containing the components to be renamed. ckt_name is the circuit name of data.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._scale_loads!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsITD._scale_loads!","text":"function _scale_loads!(\n p_data::Dict{String,<:Any},\n scalar::Real\n)\n\nScales loads based on the scalar passed as second argument. p_data is the dictionary that contains the loads to be scaled. scalar is the float value used to scale all the loads in the p_data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._transform_pmitd_solution_to_si!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._transform_pmitd_solution_to_si!","text":"function _transform_pmitd_solution_to_si!(\n result::Dict{String,<:Any}\n)\n\nTransforms the PMITD solution from per-unit (pu) to SI units.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._transform_solution_to_pu!-Tuple{Any, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._transform_solution_to_pu!","text":"function _transform_solution_to_pu!(\n result,\n pmitd_data::Dict{String,<:Any};\n make_si::Bool=false,\n multinetwork::Bool=false,\n solution_model::String=\"eng\"\n)\n\nTransforms the PM and PMD solutions from SI units to per-unit (pu), and the PMD solution from MATH back to ENG model.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._transform_solution_to_si!-Tuple{Any, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._transform_solution_to_si!","text":"function _transform_solution_to_si!(\n result,\n pmitd_data::Dict{String,<:Any};\n make_si::Bool=true,\n multinetwork::Bool=false,\n solution_model::String=\"eng\"\n)\n\nTransforms the PM and PMD solutions from per-unit (pu) to SI units, and the PMD solution from MATH back to ENG model.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#ConstraintAPI","page":"Constraints","title":"Constraints","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"constraint\")","category":"page"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_current-Tuple{AbstractIVRPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_current","text":"function constraint_boundary_current(\n pmitd::AbstractIVRPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nBoundary power constraints based on rectangular currents (I) for AbstractIVRPowerModelITD.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_power-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_power","text":"function constraint_boundary_power(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nBoundary power constraints for AbstractPowerModelITD.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_power-Tuple{LPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_power","text":"function constraint_boundary_power(\n pmitd::LPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nBoundary power constraints for LPowerModelITD (Linear versions - Active P only).\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACPPowerModel, ACPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.ACPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACP-ACPU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACPPowerModel, FOTPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.FOTPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACP-FOTPU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACRPowerModel, ACRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.ACRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACR-ACRU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACRPowerModel, FBSUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FBSUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FBSU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACRPowerModel, FOTRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FOTRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FOTRU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nGeneral voltage angle boundary constraint.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{DCPPowerModel, DCPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.DCPPowerModel,\n pmd::_PMD.DCPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nDCP-DCPU boundary bus voltage angle constraints: DCP angle.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{IVRPowerModel, IVRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.IVRPowerModel,\n pmd::_PMD.IVRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nIVR-IVRU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{NFAPowerModel, NFAUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.NFAPowerModel,\n pmd::_PMD.NFAUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nNFA-NFAU boundary bus voltage angle constraints: empty NFA angle.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractBFAModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractBFAModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nBFA-LinDist3FlowPowerModel boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSDPWRMModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSDPWRMModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSDPWRM-SOCConicUBF boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCBFConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCBFConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBFConic-SOCUBFConic boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCBFModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nSOCBF-LinDist3FlowPowerModel boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCBFModel, SOCNLPUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.SOCNLPUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBF-SOCNLUBF boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCWRConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCWRConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCWRConic-SOCConicUBF boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACPPowerModel, ACPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.ACPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACP-ACPU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACPPowerModel, FOTPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.FOTPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACP-FOTPU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACRPowerModel, ACRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.ACRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACR-ACRU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACRPowerModel, FBSUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FBSUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FBSU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACRPowerModel, FOTRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FOTRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FOTRU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nGeneral voltage magnitude boundary constraint.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{DCPPowerModel, DCPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.DCPPowerModel,\n pmd::_PMD.DCPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nDCP-DCPU boundary bus voltage magnitude constraints: empty since DC keeps vm = 1 for all.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{IVRPowerModel, IVRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.IVRPowerModel,\n pmd::_PMD.IVRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nIVR-IVRU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{NFAPowerModel, NFAUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.NFAPowerModel,\n pmd::_PMD.NFAUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nNFA-NFAU boundary bus voltage magnitude constraints: empty NFA.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractBFAModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractBFAModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nBFA-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSDPWRMModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSDPWRMModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSDPWRM-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCBFConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCBFConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBFConic-SOCUBFConic boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCBFModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nSOCBF-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCBFModel, SOCNLPUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.SOCNLPUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBF-SOCNLUBF boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCWRConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCWRConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCWRConic-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_current_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_current_balance","text":"function constraint_distribution_current_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedIVRModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nIVRU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_current_balance_boundary-Tuple{AbstractIVRPowerModelITD, Int64, Int64, Vector}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_current_balance_boundary","text":"function constraint_distribution_current_balance_boundary(\n pmitd::AbstractIVRPowerModelITD,\n i::Int,\n j::Int,\n boundary_buses::Vector;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral current balance contraints for boundary buses in the distribution system-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractBFPowerModelITD, LPUBFDiagPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractBFPowerModelITD,\n pmd::_PMD.LPUBFDiagPowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nLinDist3FlowPowerModel distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, FBSUBFPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.FBSUBFPowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nFBSU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, FOTPUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.FOTPUPowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nFOTPU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, FOTRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.FOTRUPowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nFOTRU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedACPModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nACPU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedACRModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nACRU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedActivePowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedActivePowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nDCPU/NFAU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedWModels, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedWModels,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nUnbalanced W models distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance_boundary-Tuple{AbstractPowerModelITD, Int64, Int64, Vector}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance_boundary","text":"function constraint_distribution_power_balance_boundary(\n pmitd::AbstractPowerModelITD,\n i::Int,\n j::Int,\n boundary_buses::Vector;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral power balance contraints for boundary buses in the distribution system-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_current_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractIVRModel, Int64, Int64, Int64, Vararg{Any, 8}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_current_balance","text":"function constraint_transmission_current_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractIVRModel,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_gens,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nIVR transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_current_balance_boundary-Tuple{AbstractIVRPowerModelITD, Int64, Int64, Vector}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_current_balance_boundary","text":"function constraint_transmission_current_balance_boundary(\n pmitd::AbstractIVRPowerModelITD,\n i::Int,\n j::Int,\n boundary_buses::Vector;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral current balance contraints for boundary buses in the transmission system-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractACPModel, Int64, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractACPModel,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nACP transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractACRModel, Int64, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractACRModel,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nACR transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractActivePowerModel, Int64, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractActivePowerModel,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nDCP/NFA transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, Union{PowerModels.AbstractACTModel, PowerModels.AbstractBFModel, PowerModels.AbstractWRConicModel, PowerModels.AbstractWRMModel, PowerModels.AbstractWRModel}, Int64, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractWModels,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nW Models (e.g., SOCBF) transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance_boundary-Tuple{AbstractPowerModelITD, Int64, Int64, Vector}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance_boundary","text":"function constraint_transmission_power_balance_boundary(\n pmitd::AbstractPowerModelITD,\n i::Int,\n j::Int,\n boundary_buses::Vector;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral power balance contraints for boundary buses in the transmission system-side.\n\n\n\n\n\n","category":"method"}] +[{"location":"installation.html#Installation-Guide","page":"Installation Guide","title":"Installation Guide","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"From Julia, PowerModelsITD.jl is installed using the built-in package manager:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"PowerModelsITD\")","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Or, within the Julia REPL:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"]add PowerModelsITD","category":"page"},{"location":"installation.html#Installing-an-Optimizer","page":"Installation Guide","title":"Installing an Optimizer","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"PowerModelsITD.jl depends on optimizers to solve Optimization problems, e.g., solve_opfitd. The table below lists the optimizer packages that have been tested with PowerModelsITD.jl, and have been found to work by the team; this list is not exhaustive, there are probably more optimizers that will work.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Install an optimizer using the Julia Package Manager, e.g.,","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"import Pkg\nPkg.add(\"Ipopt\")","category":"page"},{"location":"installation.html#Known-Working-Optimizers","page":"Installation Guide","title":"Known Working Optimizers","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The table below contains a truncated list of optimizers from the JuMP documentation that have been used by the development team and are confirmed to work with our package. There may be other Optimizers that work, and the Optimizers listed below are not guaranteed to work with all problems; they must be selected for the appropriate problems.","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Solver Julia Package Installation License Supports\nArtelys Knitro KNITRO.jl Manual Comm. (MI)LP, (MI)SOCP, (MI)NLP\nCbc Cbc.jl EPL (MI)LP\nCPLEX CPLEX.jl Manual Comm. (MI)LP, (MI)SOCP\nGurobi Gurobi.jl Manual Comm. (MI)LP, (MI)SOCP\nIpopt Ipopt.jl EPL LP, QP, NLP\nJuniper.jl Juniper.jl MIT (MI)SOCP, (MI)NLP\nSCS SCS.jl MIT LP, SOCP, SDP","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Where:","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"LP = Linear programming\nQP = Quadratic programming\nSOCP = Second-order conic programming (including problems with convex quadratic constraints and/or objective)\nNLP = Nonlinear programming\nSDP = Semidefinite programming\n(MI)XXX = Mixed-integer equivalent of problem type XXX","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"For a complete list of JuMP supported optimizers, see JuMP Documentation.","category":"page"},{"location":"installation.html#Unsatisfiable-requirements-detected","page":"Installation Guide","title":"Unsatisfiable requirements detected","text":"","category":"section"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"Did you get an error like Unsatisfiable requirements detected for package D [756980fe]:?","category":"page"},{"location":"installation.html","page":"Installation Guide","title":"Installation Guide","text":"The Pkg documentation has a section on how to understand and manage these conflicts.","category":"page"},{"location":"developer/style.html#Style-Conventions","page":"Style Guide","title":"Style Conventions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, the following conventions should be adhered to when making changes or additions to the code base. These conventions should include any conventions applied across the InfrastructureModels ecosystem specific to power engineering (i.e conventions from InfrastructureModels, PowerModels, PowerModelsDistribution, etc.) with some additions specific to PowerModelsITD.","category":"page"},{"location":"developer/style.html#Functions","page":"Style Guide","title":"Functions","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Function additions should meeting the following criteria:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All functions should be clearly named, without abbreviations, and with underscores between words, e.g. parse_files or constraint_boundary_voltage_angle; in Python this is known as lower_case_with_underscores. The exception to the abbreviate rule is cases where abbreviations would be expected in the modeling of power systems.\nAll functions that are not prepended by an underscore _ will be exported by default (i.e. when a user uses using PowerModelsITD). Public functions should have a detailed docstring instructing on usage\nAll functions that modify data in place should end with an exclamation point ! and the function input that is being modified should be the first argument (or first arguments in the case where multiple inputs are being modified in place). The exceptions to this rule are constraint and variable creation functions (i.e. those functions related to JuMP model creation), which do not include the exclaimation point\nAll function arguments, including keyword arguments, should have their types specified.\nPrivate functions, i.e. those intended to be for internal use only, should follow the same descriptive naming conventions as functions exported by default, and should always include docstrings to describe their purpose.\nFunctions should be separated by two blank lines","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"\"this function demonstrates how an internal, in-place data altering function should be defined\"\nfunction _concise_descriptive_name!(data::Dict{String,<:Any}, a::Real, b::Vector{<:Real}, c::Matrix{<:Complex}; d::Bool=false, e::Vector{Function}=Function[])\nend","category":"page"},{"location":"developer/style.html#Types-and-Enums","page":"Style Guide","title":"Types & Enums","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"When specifying types, i.e. when specifying the type of a function argument, or creating enums, these guidelines are recommended:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Prefer to use Vector{T} instead of Array{T,1}\nPrefer to use Matrix{T} instead of Array{T,2}\nEnums must be added to the JSON parser when introduced","category":"page"},{"location":"developer/style.html#Constants","page":"Style Guide","title":"Constants","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Whenever possible, const should be used to eliminate unnecesary re-evaluations of code, and every const should have a docstring, whether internal or public.","category":"page"},{"location":"developer/style.html#JuMP-Variables-and-Constraints","page":"Style Guide","title":"JuMP Variables and Constraints","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"For functions that create JuMP variables and constraints in particular, we follow the following naming convention as originally adopted by PowerModels:","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"(_)__(_real|_imaginary|_magnitude|_angle|_factor)(_fr|_to)(_sqr)(_on_off)","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"in the interest of intuitive names for users, the following special cases are also acceptable,","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"_power_real -(can be replaced with)-> _active\n_power_imaginary -(can be replaced with)-> _reactive","category":"page"},{"location":"developer/style.html#Formulation-Styles","page":"Style Guide","title":"Formulation Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new formulations should have clear error messages when they do not support existing components. For example, if a formulation addition which is intended to work with OPF does not support delta-wye transformers, the constraint_mc_transformer_power_dy\nFormulation abstract type and mutable struct must be specified in CapitalizedWords, which is a subtype of camelCase with the first word also capitalized.","category":"page"},{"location":"developer/style.html#Problem-Specification-Styles","page":"Style Guide","title":"Problem Specification Styles","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"If a new problem specification is only needed due to the requirements of a new formulation, and is not a new type of problem, e.g. another OPF formulation, a build_ function with the same name as the existing formulation should be created that accepts a specific PowerModel (multiple dispatch)\nIf a new problem specification is a new type of problem that will e.g. accept multiple formulations, new build_ and solve_ functions should be created that do not collide with existing problem specification functions","category":"page"},{"location":"developer/style.html#Metaprogramming","page":"Style Guide","title":"Metaprogramming","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"In general, it is better to avoid metaprogramming patterns, like creating functions algorithmically, in order to aid in the debugging of code. Metaprogramming can create significant challenges in interpreting stacktraces upon errors.","category":"page"},{"location":"developer/style.html#Markdown","page":"Style Guide","title":"Markdown","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"Markdown files should be properly formatted, particularly when including tables. Developers are encouraged to use markdownlint and a markdown formatter (such as in VSCode).","category":"page"},{"location":"developer/style.html#File-Structure","page":"Style Guide","title":"File Structure","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"It is important that new functions, variables, constraints, etc. all go into appropriate places in the code base so that future maintenance and debugging is easier. Pay attention to the current file structure and attempt to conform as best as possible to it. In general","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"src/core contains the core logic of the package, including variable creation and constraint templates, i.e. things that are agnostic to the formulation\nsrc/form contains formulation specific variable and constraint functions, organized under separate files for different formulations\nsrc/prob contains problem specification-related functions, organized under separate files for different problem specifications\nsrc/io contains all of the tools to parse and save files\ndocs/src contains all source markdown files for the documentation\nexamples contains Jupyter notebooks with walkthroughs of PowerModelsITD for new users\ntest/data contains all data related to example and unit test cases\ntest/ contains files with unit test cases","category":"page"},{"location":"developer/style.html#Dependencies-(Project.toml)","page":"Style Guide","title":"Dependencies (Project.toml)","text":"","category":"section"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies should be carefully considered before being added. It is important to keep the number of external dependencies low to avoid reliance on features that may not be maintained in the future. If possible, Julia Standard Library should be used, particularly in the case where reproducing the desired feature is trivial. There will be cases where it is not simple to duplicate a feature and subsequently maintain it within the package, so adding a dependency would be appropriate in such cases.","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"All new dependencies are are ultimately approved should also include an entry under [compat] indicating the acceptable versions (Julia automerge requirement). This includes test-only dependencies that appear under [extras]","category":"page"},{"location":"developer/style.html","page":"Style Guide","title":"Style Guide","text":"The Manifest.toml should not be included in the repo.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Introduction-to-PowerModelsITD","page":"Beginners Guide","title":"Introduction to PowerModelsITD","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this guide, we will go through a beginner guide that demonstrates the current capabilities of PowerModelsITD. This guide will showcase a non-comprehensive list of things you can do with PowerModelsITD.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Each example case shown in this guide will be divided into three main parts.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"(1) Brief explanation of the test case and what we want to do/obtain.\n(2) The Julia code needed to perform the specific case study (users can copy and paste this code directly).\n(3) The console output obtained when the code is executed.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Important: All files used in this beginner guide are available in the /test/data folder of the repository.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#1:-Solving-a-simple-Integrated-T-and-D-Optimal-Power-Flow-(OPFITD)","page":"Beginners Guide","title":"Example Case #1: Solving a simple Integrated T&D Optimal Power Flow (OPFITD)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#1","page":"Beginners Guide","title":"Test Case #1","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#1","page":"Beginners Guide","title":"Julia Code for Test Case #1","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\ndata = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary\nresult = solve_opfitd(data, formulation, Ipopt.Optimizer) # solve the opfitd\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values for Transmission system: $(result[\"solution\"][\"it\"][\"pm\"])\"\n@info \"Solution Values for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"])\"\n@info \"Solution Values for Boundary(ies): $(result[\"solution\"][\"it\"][\"pmitd\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#1","page":"Beginners Guide","title":"Console Output for Test Case #1","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 17953.746512039743 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.05849599838256836 [seconds]\n\n[ Main | Info ] : Solution Values for Transmission system: Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qf\" => -215.4572384567855, \"qt\" => 220.01471251650577, \"pt\" => 72.72770254777281, \"pf\" => -72.10324334974787), \"1\" => Dict{String, Any}(\"qf\" => -91.9457671031378, \"qt\" => 113.04924896169344, \"pt\" => -235.96795359006418, \"pf\" => 238.13985616928193), \"5\" => Dict{String, Any}(\"qf\" => 71.37529049674947, \"qt\" => -69.00868855761938, \"pt\" => 57.04309684079022, \"pf\" => -56.75055132454856), \"2\" => Dict{String, Any}(\"qf\" => 40.82747127060588, \"qt\" => -27.51897757380047, \"pt\" => -190.17342809935752, \"pf\" => 191.55864094141782), \"6\" => Dict{String, Any}(\"qf\" => 19.289482716290323, \"qt\" => 1.0554040857229503, \"pt\" => 239.9976806084548, \"pf\" => -237.90830207159405), \"7\" => Dict{String, Any}(\"qf\" => 3.7979894950920543, \"qt\" => -4.367184067738672, \"pt\" => -8.068452673591816, \"pf\" => 8.071196939812054), \"3\" => Dict{String, Any}(\"qf\" => 208.61829769507162, \"qt\" => -204.19918131371665, \"pt\" => 220.40004611863847, \"pf\" => -219.6984944935753)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 54.23181658487047, \"pg\" => 18.96136666983862), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079376986, \"pg\" => 40.00000096678977), \"5\" => Dict{String, Any}(\"qg\" => -203.1437772279937, \"pg\" => 460.3977267270933), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106876985, \"pg\" => 170.00000165033464), \"3\" => Dict{String, Any}(\"qg\" => 390.00000301325525, \"pg\" => 315.97715122322427)), \"multinetwork\" => false, \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => -9.820934169803595e-29, \"vm\" => 0.8999999900918129), \"1\" => Dict{String, Any}(\"va\" => 3.9557118095964663, \"vm\" => 0.9178154479809132), \"5\" => Dict{String, Any}(\"va\" => -0.8036120919989638, \"vm\" => 0.9400883479210898), \"2\" => Dict{String, Any}(\"va\" => -0.6563318572164789, \"vm\" => 0.9416319858451535), \"10\" => Dict{String, Any}(\"va\" => 5.018509000535593, \"vm\" => 0.904864159526407), \"3\" => Dict{String, Any}(\"va\" => -0.3122279603896953, \"vm\" => 0.9670939985734723)), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}(\"line\" => Dict{String, Any}(\"3bus_unbal.quad\" => Dict{String, Any}(\"qf\" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], \"qt\" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], \"pt\" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], \"pf\" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), \"3bus_unbal.ohline\" => Dict{String, Any}(\"qf\" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], \"qt\" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], \"pt\" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], \"pf\" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal.subxf\" => Dict{String, Any}(\"q\" => [[1354.7952022418647, 1507.3400640138161, 1504.5761375753734], [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072]], \"p\" => [[3367.1286152278885, 2346.3702946258413, 2354.835193007617], [-3367.110727286094, -2346.3597337552624, -2354.8245890269895]])), \"generator\" => Dict{String, Any}(\"3bus_unbal.gen1\" => Dict{String, Any}(\"qg_bus\" => [-0.0, -0.0, -0.0], \"qg\" => [-0.0, -0.0, -0.0], \"pg\" => [666.6676628468832, 666.6676628064197, 666.6676628099706], \"pg_bus\" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), \"load\" => Dict{String, Any}(\"3bus_unbal.l2\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"3bus_unbal.l3\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"3bus_unbal.l1\" => Dict{String, Any}(\"qd_bus\" => [1333.3300000000002], \"pd_bus\" => [4000.0], \"qd\" => [1333.3300000000002], \"pd\" => [4000.0])), \"bus\" => Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"va\" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], \"vm\" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), \"3bus_unbal.substation\" => Dict{String, Any}(\"va\" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], \"vm\" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), \"3bus_unbal.primary\" => Dict{String, Any}(\"va\" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], \"vm\" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], \"vm\" => [124.83030630100751, 124.83048117738736, 124.8306695534823])), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}(\"multinetwork\" => false, \"boundary\" => Dict{String, Any}(\"(100001, 5, voltage_source.3bus_unbal.source)\" => Dict{String, Any}(\"pbound_fr\" => [8068.452673591816], \"qbound_fr\" => [4367.184067738673]), \"(100001, voltage_source.3bus_unbal.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], \"qbound_to\" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369])))","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#2:-Solving-a-Multinetwork-(Time-series)-Multisystem-(Multiple-Distribution-Systems)-OPFITD","page":"Beginners Guide","title":"Example Case #2: Solving a Multinetwork (Time-series) Multisystem (Multiple Distribution Systems) OPFITD","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#2","page":"Beginners Guide","title":"Test Case #2","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a Multinetwork case where we have the PJM 5-bus system (case5_with2loads) as the transmission system and two copies of the IEEE 4 Node Test Feeder (case3_unbalanced_withoutgen_mn.dss) as the distribution systems, where each distribution system has load profiles for their respective loads for four timesteps. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3x2.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#2","page":"Beginners Guide","title":"Julia Code for Test Case #2","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_with2loads.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced_withoutgen_mn.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3x2.json\") # boundary file with info. about boundary buses\npmd_files = [pmd_file, pmd_file] # vector of distrib. systems (in this case a copy of the same)\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\nresult = solve_mn_opfitd(pm_file, pmd_files, boundary_file, formulation, Ipopt.Optimizer; auto_rename=true) # solve the multinetwork opfitd\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values for Transmission system: $(result[\"solution\"][\"it\"][\"pm\"])\"\n@info \"Solution Values for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"])\"\n@info \"Solution Values for Boundary(ies): $(result[\"solution\"][\"it\"][\"pmitd\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#2","page":"Beginners Guide","title":"Console Output for Test Case #2","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 71583.37023067646 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.5699648857116699 [seconds]\n\n[ Main | Info ] : Solution Values for Transmission system: Dict{String, Any}(\"multinetwork\" => true, \"nw\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.7124512609962, \"qt\" => -205.25808038279263, \"pt\" => 220.4516503859562, \"pf\" => -219.74655219293345), \"4\" => Dict{String, Any}(\"qf\" => -214.48170261865238, \"qt\" => 218.94452403011204, \"pt\" => 70.63553676891648, \"pf\" => -70.02040086637558), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989474518, \"qt\" => 114.45283104138902, \"pt\" => -235.99842638945864, \"pf\" => 238.17872276993856), \"5\" => Dict{String, Any}(\"qf\" => 72.445478971592, \"qt\" => -70.00150166186677, \"pt\" => 57.688800117737046, \"pf\" => -57.388497698913255), \"2\" => Dict{String, Any}(\"qf\" => 41.053330496054876, \"qt\" => -27.739129989384807, \"pt\" => -190.18204403801204, \"pf\" => 191.56783204014675), \"6\" => Dict{String, Any}(\"qf\" => 19.29122822256867, \"qt\" => 1.0536848339377651, \"pt\" => 239.99768816280888, \"pf\" => -237.90830703516832), \"7\" => Dict{String, Any}(\"qf\" => 1.418871577263358, \"qt\" => -2.003521254092567, \"pt\" => -6.017516284814005, \"pf\" => 6.018827255834227), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338049713338, \"qt\" => -1.2985975532566612, \"pt\" => -3.008593331044258, \"pf\" => 3.008930510206021)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657131708, \"pg\" => 19.598449044556656), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.20439554885485, \"pg\" => 460.449338548765), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.2470390700032)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => -4.8091331437638894e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.955108495412184, \"vm\" => 0.9178896115768673), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397082574, \"vm\" => 0.9413800134626195), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691903474, \"vm\" => 0.9421095463639055), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984569308, \"vm\" => 0.9409689065117178), \"10\" => Dict{String, Any}(\"va\" => 5.018515926892925, \"vm\" => 0.9048635910623162), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541168204, \"vm\" => 0.967421494353026))), \"1\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.71245126093345, \"qt\" => -205.25808038273263, \"pt\" => 220.4516503861189, \"pf\" => -219.74655219309614), \"4\" => Dict{String, Any}(\"qf\" => -214.4817026186947, \"qt\" => 218.94452403016115, \"pt\" => 70.6355367692654, \"pf\" => -70.02040086672375), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989466723, \"qt\" => 114.45283104133719, \"pt\" => -235.9984263896544, \"pf\" => 238.17872277013694), \"5\" => Dict{String, Any}(\"qf\" => 72.44547897154284, \"qt\" => -70.001501661815, \"pt\" => 57.68880011784228, \"pf\" => -57.38849769901818), \"2\" => Dict{String, Any}(\"qf\" => 41.05333049603968, \"qt\" => -27.73912998937486, \"pt\" => -190.1820440379769, \"pf\" => 191.56783204011106), \"6\" => Dict{String, Any}(\"qf\" => 19.291228222568602, \"qt\" => 1.0536848339378524, \"pt\" => 239.99768816280888, \"pf\" => -237.90830703516832), \"7\" => Dict{String, Any}(\"qf\" => 1.4188715773575376, \"qt\" => -2.003521254185469, \"pt\" => -6.017516285357827, \"pf\" => 6.0188272563781675), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338050415234, \"qt\" => -1.2985975533248926, \"pt\" => -3.0085933319508262, \"pf\" => 3.0089305111127547)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657137874, \"pg\" => 19.598449044697038), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.2043955487948, \"pg\" => 460.44933854892776), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.24703907024724)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => 1.2906268155608688e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.9551084954114852, \"vm\" => 0.9178896115768619), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397229616, \"vm\" => 0.9413800134625423), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691947822, \"vm\" => 0.9421095463638751), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984889308, \"vm\" => 0.9409689065115902), \"10\" => Dict{String, Any}(\"va\" => 5.018515926892924, \"vm\" => 0.9048635910623162), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541189024, \"vm\" => 0.9674214943530053))), \"2\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.71245126094163, \"qt\" => -205.25808038273715, \"pt\" => 220.45165038612856, \"pf\" => -219.74655219310594), \"4\" => Dict{String, Any}(\"qf\" => -214.4817026186913, \"qt\" => 218.94452403015868, \"pt\" => 70.63553676925657, \"pf\" => -70.02040086671512), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989467265, \"qt\" => 114.45283104134505, \"pt\" => -235.99842638966595, \"pf\" => 238.1787227701487), \"5\" => Dict{String, Any}(\"qf\" => 72.44547897154538, \"qt\" => -70.00150166181722, \"pt\" => 57.688800117857696, \"pf\" => -57.38849769903358), \"2\" => Dict{String, Any}(\"qf\" => 41.053330496036935, \"qt\" => -27.739129989371886, \"pt\" => -190.18204403797492, \"pf\" => 191.56783204010912), \"6\" => Dict{String, Any}(\"qf\" => 19.291228222572368, \"qt\" => 1.0536848339335343, \"pt\" => 239.99768816280888, \"pf\" => -237.90830703516826), \"7\" => Dict{String, Any}(\"qf\" => 1.4188715773462648, \"qt\" => -2.0035212541732794, \"pt\" => -6.017516285360724, \"pf\" => 6.0188272563810745), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338050293561, \"qt\" => -1.2985975533139513, \"pt\" => -3.008593331590926, \"pf\" => 3.008930510752742)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657138327, \"pg\" => 19.59844904471449), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.2043955488037, \"pg\" => 460.4493385489374), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.24703907022297)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => -8.850496391421805e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.9551084954114537, \"vm\" => 0.9178896115768609), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397233032, \"vm\" => 0.9413800134625466), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691950458, \"vm\" => 0.9421095463638758), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984823784, \"vm\" => 0.9409689065116095), \"10\" => Dict{String, Any}(\"va\" => 5.018515926892941, \"vm\" => 0.9048635910623148), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541192233, \"vm\" => 0.9674214943530055))), \"3\" => Dict{String, Any}(\"baseMVA\" => 100.0, \"branch\" => Dict{String, Any}(\"3\" => Dict{String, Any}(\"qf\" => 209.7124512609906, \"qt\" => -205.2580803827864, \"pt\" => 220.45165038608707, \"pf\" => -219.7465521930642), \"4\" => Dict{String, Any}(\"qf\" => -214.48170261865874, \"qt\" => 218.94452403012218, \"pt\" => 70.63553676895856, \"pf\" => -70.0204008664175), \"1\" => Dict{String, Any}(\"qf\" => -93.26577989472547, \"qt\" => 114.45283104139405, \"pt\" => -235.9984263896151, \"pf\" => 238.17872277009747), \"5\" => Dict{String, Any}(\"qf\" => 72.44547897158185, \"qt\" => -70.00150166185058, \"pt\" => 57.6888001178973, \"pf\" => -57.38849769907291), \"2\" => Dict{String, Any}(\"qf\" => 41.05333049604079, \"qt\" => -27.739129989375172, \"pt\" => -190.1820440379844, \"pf\" => 191.56783204011862), \"6\" => Dict{String, Any}(\"qf\" => 19.291228222579896, \"qt\" => 1.0536848339270362, \"pt\" => 239.99768816280894, \"pf\" => -237.90830703516818), \"7\" => Dict{String, Any}(\"qf\" => 1.4188715772646756, \"qt\" => -2.0035212540928145, \"pt\" => -6.017516285012341, \"pf\" => 6.018827256032563), \"8\" => Dict{String, Any}(\"qf\" => 0.7049338050059494, \"qt\" => -1.298597553290569, \"pt\" => -3.008593331239918, \"pf\" => 3.0089305104016915)), \"gen\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qg\" => 53.02059657135414, \"pg\" => 19.598449044744708), \"1\" => Dict{String, Any}(\"qg\" => 30.00000079365296, \"pg\" => 40.00000096679825), \"5\" => Dict{String, Any}(\"qg\" => -204.20439554885937, \"pg\" => 460.44933854889604), \"2\" => Dict{String, Any}(\"qg\" => 127.50000106865294, \"pg\" => 170.0000016503536), \"3\" => Dict{String, Any}(\"qg\" => 390.00000300170404, \"pg\" => 313.24703906988566)), \"bus\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"va\" => 4.6922476467138066e-29, \"vm\" => 0.8999999900913073), \"1\" => Dict{String, Any}(\"va\" => 3.9551084954116407, \"vm\" => 0.9178896115768624), \"5\" => Dict{String, Any}(\"va\" => -0.7695989397156218, \"vm\" => 0.9413800134626014), \"2\" => Dict{String, Any}(\"va\" => -0.6574104691939039, \"vm\" => 0.9421095463638939), \"6\" => Dict{String, Any}(\"va\" => -0.8254740984679912, \"vm\" => 0.9409689065116826), \"10\" => Dict{String, Any}(\"va\" => 5.0185159268929675, \"vm\" => 0.9048635910623125), \"3\" => Dict{String, Any}(\"va\" => -0.3270759541200902, \"vm\" => 0.967421494353016)))), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}(\"nw\" => Dict{String, Dict{String, Any}}(\"4\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.5777180879746, 449.1439873945076, 448.7567158126756], \"qt\" => [-400.3834881406001, -449.61753973455666, -449.40808066075476], \"pt\" => [-1202.2047813968609, -900.9716820211081, -901.437570378043], \"pf\" => [1204.092342226798, 901.8028241168121, 902.6707125959695]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.3857159633698, 449.61909326817045, 449.40944838966254], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.206724198158, 900.9725348138786, 901.4388339186033]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.3834881406001, 449.61753973455666, 449.40808066075476], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2047813968609, 900.9716820211081, 901.437570378043]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.5820103770306, 449.147016724407, 448.75940230925625], \"qt\" => [-400.3857159633698, -449.61909326817045, -449.40944838966254], \"pt\" => [-1202.206724198158, -900.9725348138786, -901.4388339186033], \"pf\" => [1204.0959489625075, 901.8044071741432, 902.673061143103])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.60383553276677, 449.1607731500957, 448.77317528774904], [-400.5820103770306, -449.147016724407, -448.75940230925625]], \"p\" => [[1204.0981313859945, 901.8057826939303, 902.6744388456775], [-1204.0959489625075, -901.8044071741432, -902.673061143103]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.59952401926625, 449.1577317466543, 448.77047663804154], [-400.5777180879746, -449.1439873945076, -448.7567158126756]], \"p\" => [[1204.0945224674979, 901.804198545205, 902.672088661453], [-1204.092342226798, -901.8028241168121, -902.6707125959695]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.8302295799057324, -120.79137859901346, 119.2504000096645], \"vm\" => [7.472201725143692, 7.48392238161073, 7.479449806375467]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194665752, -120.77035368944988, 119.22965458272802], \"vm\" => [125.00492912857915, 125.0049742054994, 125.00503001738106]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.7991413115394987, -120.78074600616584, 119.23848685007212], \"vm\" => [7.487284000425346, 7.492696895897028, 7.490619086774545]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.855042232531755, -120.83663088144945, 119.18261888118052], \"vm\" => [7.484002753336548, 7.489418049928727, 7.487339328524334]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.7715260550666929, -120.77101852028557, 119.22898904907676], \"vm\" => [7.500242832893439, 7.500243675517293, 7.50024705477223]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8264989754781323, -120.82622950863666, 119.173778769923], \"vm\" => [124.95033736057859, 124.95038246062096, 124.95043829748143]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.8274029028977026, -120.8268949215367, 119.17311265297246], \"vm\" => [7.496967303220576, 7.496968146567504, 7.496971527361585]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649359917, -120.84727282112708, 119.19454256329932], \"vm\" => [7.468913830909152, 7.480639684348965, 7.476165145424161])), \"per_unit\" => false), \"1\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.57771808779745, 449.1439873947322, 448.7567158126303], \"qt\" => [-400.38348814059987, -449.6175397346913, -449.40808066071014], \"pt\" => [-1202.204781396862, -900.9716820213755, -901.4375703783082], \"pf\" => [1204.09234222689, 901.8028241171684, 902.6707125964111]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.3857159634153, 449.6190932679933, 449.40944838961826], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2067241982484, 900.9725348139676, 901.4388339183369]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.38348814059987, 449.6175397346913, 449.40808066071014], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.204781396862, 900.9716820213755, 901.4375703783082]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.5820103772543, 449.14701672423075, 448.75940230921145], \"qt\" => [-400.3857159634153, -449.6190932679933, -449.40944838961826], \"pt\" => [-1202.2067241982484, -900.9725348139676, -901.4388339183369], \"pf\" => [1204.095948962688, 901.8044071742323, 902.6730611427464])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.60383553298436, 449.16077317266615, 448.77317528770436], [-400.5820103772543, -449.14701672423075, -448.75940230921145]], \"p\" => [[1204.0981315680738, 901.8057830578177, 902.6744392091184], [-1204.095948962688, -901.8044071742323, -902.6730611427464]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.59952401908913, 449.15773174687035, 448.7704766493643], [-400.57771808779745, -449.1439873947322, -448.7567158126303]], \"p\" => [[1204.0945221037925, 901.8041985455613, 902.6720886618943], [-1204.09234222689, -901.8028241171684, -902.6707125964111]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.830229579920092, -120.79137859902801, 119.25040000964974], \"vm\" => [7.4722017251430914, 7.483922381610104, 7.479449806374842]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194809523, -120.77035368946459, 119.22965458271331], \"vm\" => [125.0049291285691, 125.00497420548916, 125.00503001737073]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.7991413115538781, -120.78074600618037, 119.23848685005738], \"vm\" => [7.4872840004247445, 7.4926968958964055, 7.490619086773919]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.8550422325640687, -120.83663088148208, 119.18261888114806], \"vm\" => [7.484002753335518, 7.489418049927689, 7.487339328523306]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.7715260550810701, -120.77101852030012, 119.22898904906208], \"vm\" => [7.5002428328928366, 7.500243675516679, 7.5002470547716085]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8264989755103133, -120.826229508669, 119.17377876989066], \"vm\" => [124.95033736056153, 124.95038246060375, 124.95043829746425]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.827402902930025, -120.82689492156933, 119.17311265293998], \"vm\" => [7.4969673032195505, 7.496968146566467, 7.496971527360553]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649683284, -120.84727282115972, 119.19454256326688], \"vm\" => [7.468913830908116, 7.4806396843479295, 7.476165145423132])), \"per_unit\" => false), \"2\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.5777180878409, 449.1439873945529, 448.75671581271985], \"qt\" => [-400.3834881405547, -449.6175397345132, -449.40808066079904], \"pt\" => [-1202.2047813968604, -900.9716820211088, -901.4375703779534], \"pf\" => [1204.0923422269757, 901.8028241166346, 902.6707125959689]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.3857159633255, 449.6190932685255, 449.40944838966266], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2067241982472, 900.9725348141451, 901.4388339188698]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.3834881405547, 449.6175397345132, 449.40808066079904], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2047813968604, 900.9716820211088, 901.4375703779534]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.58201037707516, 449.1470167248505, 448.75940230925687], \"qt\" => [-400.3857159633255, -449.6190932685255, -449.40944838966266], \"pt\" => [-1202.2067241982472, -900.9725348141451, -901.4388339188698], \"pf\" => [1204.095948962507, 901.8044071744985, 902.6730611437251])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.6038355441561, 449.16077316190854, 448.7731752991101], [-400.58201037707516, -449.1470167248505, -448.75940230925687]], \"p\" => [[1204.098131204093, 901.8057832399824, 902.6744390281976], [-1204.095948962507, -901.8044071744985, -902.6730611437251]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.5995240305012, 449.157731758069, 448.77047663808975], [-400.5777180878409, -449.1439873945529, -448.75671581271985]], \"p\" => [[1204.0945224676755, 901.8041985450279, 902.6720886614527], [-1204.0923422269757, -901.8028241166346, -902.6707125959689]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.8302295799209277, -120.79137859902852, 119.25040000964935], \"vm\" => [7.472201725143105, 7.483922381610151, 7.479449806374883]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194816114, -120.77035368946491, 119.22965458271298], \"vm\" => [125.00492912856943, 125.00497420548972, 125.00503001737137]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.79914131155471, -120.78074600618085, 119.23848685005699], \"vm\" => [7.48728400042476, 7.492696895896448, 7.4906190867739575]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.85504223255677, -120.83663088147543, 119.18261888115482], \"vm\" => [7.4840027533357, 7.489418049927836, 7.487339328523451]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.77152605508187, -120.77101852030057, 119.2289890490616], \"vm\" => [7.500242832892855, 7.5002436755167095, 7.500247054771646]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.826498975503429, -120.82622950866259, 119.1737787698974], \"vm\" => [124.95033736056432, 124.95038246060629, 124.95043829746685]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.8274029029227165, -120.82689492156277, 119.17311265294684], \"vm\" => [7.496967303219722, 7.496968146566622, 7.49697152736071]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649610355, -120.84727282115303, 119.19454256327364], \"vm\" => [7.468913830908303, 7.480639684348074, 7.476165145423272])), \"per_unit\" => false), \"3\" => Dict(\"line\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.ohline\" => Dict{String, Any}(\"qf\" => [400.5777180877519, 449.1439873945082, 448.75671581263083], \"qt\" => [-400.38348814055513, -449.6175397345571, -449.4080806607989], \"pt\" => [-1202.20478139695, -900.9716820211972, -901.4375703778643], \"pf\" => [1204.092342226887, 901.8028241168124, 902.6707125957021]), \"3bus_unbal_nogen_mn_2.quad\" => Dict{String, Any}(\"qf\" => [400.38571596332577, 449.6190932680813, 449.40944838961764], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.2067241981586, 900.9725348138778, 901.4388339183367]), \"3bus_unbal_nogen_mn.quad\" => Dict{String, Any}(\"qf\" => [400.38348814055513, 449.6175397345571, 449.4080806607989], \"qt\" => [-399.999, -450.00000000000006, -450.00000000000006], \"pt\" => [-1200.0, -900.0000000000001, -900.0000000000001], \"pf\" => [1202.20478139695, 900.9716820211972, 901.4375703778643]), \"3bus_unbal_nogen_mn_2.ohline\" => Dict{String, Any}(\"qf\" => [400.5820103769862, 449.14701672440617, 448.759402309122], \"qt\" => [-400.38571596332577, -449.6190932680813, -449.40944838961764], \"pt\" => [-1202.2067241981586, -900.9725348138778, -901.4388339183367], \"pf\" => [1204.0959489624188, 901.8044071739638, 902.6730611429242])), \"settings\" => Dict{String, Any}(\"sbase\" => 100000.0), \"transformer\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.subxf\" => Dict{String, Any}(\"q\" => [[400.6038355327163, 449.16077315009466, 448.773175287606], [-400.5820103769862, -449.14701672440617, -448.759402309122]], \"p\" => [[1204.0981315678043, 901.8057826937508, 902.6744388454978], [-1204.0959489624188, -901.8044071739638, -902.6730611429242]]), \"3bus_unbal_nogen_mn.subxf\" => Dict{String, Any}(\"q\" => [[400.5995240190437, 449.1577317239183, 448.7704766379962], [-400.5777180877519, -449.1439873945082, -448.75671581263083]], \"p\" => [[1204.0945224675868, 901.8041985452063, 902.6720886611851], [-1204.092342226887, -901.8028241168124, -902.6707125957021]])), \"load\" => Dict{String, Any}(\"3bus_unbal_nogen_mn_2.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn.l1\" => Dict{String, Any}(\"qd_bus\" => [399.999], \"pd_bus\" => [1200.0], \"qd\" => [399.999], \"pd\" => [1200.0]), \"3bus_unbal_nogen_mn_2.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn_2.l2\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001]), \"3bus_unbal_nogen_mn.l3\" => Dict{String, Any}(\"qd_bus\" => [450.00000000000006], \"pd_bus\" => [900.0000000000001], \"qd\" => [450.00000000000006], \"pd\" => [900.0000000000001])), \"bus\" => Dict{String, Any}(\"3bus_unbal_nogen_mn.loadbus\" => Dict{String, Any}(\"va\" => [-0.8302295799131064, -120.79137859902089, 119.25040000965717], \"vm\" => [7.4722017251435435, 7.483922381610589, 7.479449806375325]), \"3bus_unbal_nogen_mn.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7706229194739376, -120.77035368945725, 119.22965458272064], \"vm\" => [125.00492912857676, 125.00497420549705, 125.00503001737864]), \"3bus_unbal_nogen_mn.primary\" => Dict{String, Any}(\"va\" => [-0.7991413115468873, -120.78074600617322, 119.23848685006479], \"vm\" => [7.487284000425199, 7.492696895896888, 7.490619086774399]), \"3bus_unbal_nogen_mn_2.primary\" => Dict{String, Any}(\"va\" => [-0.85504223254311, -120.8366308814605, 119.18261888116959], \"vm\" => [7.484002753336263, 7.489418049928443, 7.487339328524058]), \"3bus_unbal_nogen_mn.substation\" => Dict{String, Any}(\"va\" => [-0.7715260550740553, -120.77101852029291, 119.2289890490694], \"vm\" => [7.500242832893295, 7.500243675517153, 7.500247054772084]), \"3bus_unbal_nogen_mn_2.sourcebus\" => Dict{String, Any}(\"va\" => [-0.8264989754893535, -120.82622950864773, 119.17377876991193], \"vm\" => [124.95033736057383, 124.95038246061625, 124.95043829747675]), \"3bus_unbal_nogen_mn_2.substation\" => Dict{String, Any}(\"va\" => [-0.8274029029090649, -120.82689492154778, 119.17311265296155], \"vm\" => [7.496967303220288, 7.496968146567221, 7.496971527361306]), \"3bus_unbal_nogen_mn_2.loadbus\" => Dict{String, Any}(\"va\" => [-0.8861577649473606, -120.84727282113812, 119.19454256328841], \"vm\" => [7.468913830908865, 7.480639684348685, 7.4761651454238836])), \"per_unit\" => false)))\n\n[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}(\"multinetwork\" => true, \"nw\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049622880614, -901.8100181254906, -902.6783506307055], \"qbound_to\" => [-400.630030776433, -449.177722118188, -448.78980036204024]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.593331044258], \"qbound_fr\" => [1298.597553256661]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5857746079846], \"qbound_fr\" => [1298.5874491212335]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.101347358377, -901.8084302478388, -902.6759970017687], \"qbound_to\" => [-400.6256962072555, -449.17466583314587, -448.7870870808322]))), \"1\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049624672987, -901.8100184922217, -902.6783509913059], \"qbound_to\" => [-400.6300307993883, -449.17772215213427, -448.78980037337016]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5933319508263], \"qbound_fr\" => [1298.5975533248927]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5857742450717], \"qbound_fr\" => [1298.5874491439454]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1013469861416, -901.8084302538781, -902.6759970050523], \"qbound_to\" => [-400.6256961956958, -449.17466584472527, -448.78708710352413]))), \"2\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049621118384, -901.8100186687032, -902.6783508103842], \"qbound_to\" => [-400.63003079917036, -449.17772213001075, -448.7898003847704]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.593331590926], \"qbound_fr\" => [1298.5975533139513]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.585774607983], \"qbound_fr\" => [1298.5874491439235]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1013473528665, -901.8084302476616, -902.6759970074544], \"qbound_to\" => [-400.6256962184772, -449.1746658331913, -448.7870870922549]))), \"3\" => Dict{String, Any}(\"boundary\" => Dict{String, Any}(\"(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1049624727136, -901.8100181281534, -902.6783506390512], \"qbound_to\" => [-400.6300307763823, -449.1777221295564, -448.7898003846302]), \"(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.5933312399184], \"qbound_fr\" => [1298.5975532905688]), \"(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)\" => Dict{String, Any}(\"pbound_fr\" => [3008.58577461065], \"qbound_fr\" => [1298.587449086865]), \"(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)\" => Dict{String, Any}(\"pbound_to\" => [-1204.1013473527794, -901.8084302506836, -902.6759970071865], \"qbound_to\" => [-400.62569618428887, -449.1746658104148, -448.7870870921613])))))","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"As you can see on the output, the dictionary results have extra keys such as nw, which indicate that this is a multinetwork (multi-timestep) optimization problem. Below the nw, you can find the solutions of the respective multinetwork (i.e., timestep) as \"#\" (e.g., [\"nw\"][\"3\"] represents the results for the 3th timestep).","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#3:-Solving-OPFITD-with-voltage-bounds-(support-for-PowerModelsDistribution-(PMD)-Transformations)","page":"Beginners Guide","title":"Example Case #3: Solving OPFITD with voltage bounds (support for PowerModelsDistribution (PMD) Transformations)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#3","page":"Beginners Guide","title":"Test Case #3","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Additionally, we are specifying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#3","page":"Beginners Guide","title":"Julia Code for Test Case #3","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\ndata = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary\n# apply transformations\napply_voltage_bounds!(data; vm_lb=0.99, vm_ub=1.01)\n# solve the optimization problem\nresult = solve_opfitd(data, formulation, Ipopt.Optimizer; make_si=false) # solve the opfitd\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"][\"bus\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#3","page":"Beginners Guide","title":"Console Output for Test Case #3","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 18022.355809587236 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.06421494483947754 [seconds]\n\n[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"va\" => [-0.8977463887653532, -120.78309685941274, 119.34177620647625], \"vm\" => [0.9899999900302301, 0.9946671975187621, 0.9928991397184561]), \"3bus_unbal.substation\" => Dict{String, Any}(\"va\" => [-0.7693363623113275, -120.76782278704773, 119.23219208890347], \"vm\" => [0.999742728740167, 0.999743306402737, 0.9997446568367797]), \"3bus_unbal.primary\" => Dict{String, Any}(\"va\" => [-0.8297020935620707, -120.77556386286943, 119.28178890967312], \"vm\" => [0.9952384467648019, 0.9973943491437465, 0.9965725113327532]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"va\" => [-0.7671158858601453, -120.76631338622572, 119.23370678684667], \"vm\" => [0.9997629892456953, 0.9997641961144075, 0.9997655262819723]))","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"You can see in these results that the voltage magnitude values of the distribution system nodes is between the 0.99 and 1.01 bounds.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#4:-Solving-OPFITD-with-Solution-Processors-(apply-solution-processor-to-convert-voltage-values-solutions-from-rectangular-to-polar-coordinates)","page":"Beginners Guide","title":"Example Case #4: Solving OPFITD with Solution Processors (apply solution processor to convert voltage values solutions from rectangular to polar coordinates)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#4","page":"Beginners Guide","title":"Test Case #4","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Additionally, we are specificying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"Finally, we also want to solve this problem using the ACR-ACRU formulation (i.e., AC OPF in rectangular coordinates) instead of the ACP-ACPU formulation used previously. We also want to show that by applying the solution processor to the solve_opfitd(...) function, we can convert the solution from rectangular to polar coordinates (after the problem has been solved in rectangular coordinates).","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#4","page":"Beginners Guide","title":"Julia Code for Test Case #4","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACRPowerModel, ACRUPowerModel} # type of formulation to be used\n\ndata_rect = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary - rectangular\ndata_polar = deepcopy(data_rect) # parse files into dictionary - polar\n\n# apply voltage bounds to both datasets\napply_voltage_bounds!(data_rect; vm_lb=0.99, vm_ub=1.01)\napply_voltage_bounds!(data_polar; vm_lb=0.99, vm_ub=1.01)\n\n# solve the optimization problem\nresult_rect = solve_opfitd(data_rect, formulation, Ipopt.Optimizer; make_si=false) # solve the opfitd, present result in rectangular\nresult_polar = solve_opfitd(data_polar, formulation, Ipopt.Optimizer; make_si=false, solution_processors=[sol_data_model!]) # solve the opfitd, present the result in polar\n\n# Check the result\n@info \"Distribution system(s) voltages in rectangular coordinates: $(result_rect[\"solution\"][\"it\"][\"pmd\"][\"bus\"])\"\n@info \"Distribution system(s) voltages in polar coordinates: $(result_polar[\"solution\"][\"it\"][\"pmd\"][\"bus\"])\"","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#4","page":"Beginners Guide","title":"Console Output for Test Case #4","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Distribution system(s) voltages in rectangular coordinates: Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"vi\" => [-0.015511309363640641, -0.8545294554234174, 0.8655223138026301], \"vr\" => [0.9898784720063777, -0.5090601668099762, -0.4865386272048753]), \"3bus_unbal.substation\" => Dict{String, Any}(\"vi\" => [-0.013423594907906103, -0.8590267647200966, 0.872425011363218], \"vr\" => [0.9996526099437699, -0.5114290820733716, -0.48822534573738224]), \"3bus_unbal.primary\" => Dict{String, Any}(\"vi\" => [-0.014411577636549404, -0.8569394862376708, 0.8692352392326611], \"vr\" => [0.9951341025954522, -0.5103432319817417, -0.4874288450833038]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"vi\" => [-0.01338512498983875, -0.8590581872270858, 0.8724303155121654], \"vr\" => [0.9996733881089848, -0.5114171375591623, -0.4882586014767347]))\n\n[ Main | Info ] : Distribution system(s) voltages in polar coordinates: Dict{String, Any}(\"3bus_unbal.loadbus\" => Dict{String, Any}(\"va\" => [-0.8977463956228972, -120.78309686739179, 119.34177619725007], \"vm\" => [0.989999994979725, 0.9946672024445378, 0.9928991446530021]), \"3bus_unbal.substation\" => Dict{String, Any}(\"va\" => [-0.7693363704348831, -120.76782279518537, 119.23219208076581], \"vm\" => [0.9997427336408314, 0.9997433113034004, 0.9997446617374346]), \"3bus_unbal.primary\" => Dict{String, Any}(\"va\" => [-0.8297021010938084, -120.77556387092758, 119.28178890104428], \"vm\" => [0.9952384516880516, 0.9973943540560338, 0.9965725162491212]), \"3bus_unbal.sourcebus\" => Dict{String, Any}(\"va\" => [-0.767115894005601, -120.7663133943784, 119.23370677869384], \"vm\" => [0.9997629941462579, 0.9997642010149662, 0.9997655311825235]))","category":"page"},{"location":"tutorials/BeginnersGuide.html#Example-Case-#5:-Solving-OPFITD-with-Results-in-MATH-Model-(instead-of-default-ENG)","page":"Beginners Guide","title":"Example Case #5: Solving OPFITD with Results in MATH Model (instead of default ENG)","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html#Test-Case-#5","page":"Beginners Guide","title":"Test Case #5","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"The formulation used to solve this optimization problem is the ACP-ACPU formulation.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"However, different from all the examples presented above, in this case, the result of the distribution systems will be obtained in the MATH model instead of the default ENG model. See here for a more detailed explanation regarding the different models supported by PMD/PMITD.","category":"page"},{"location":"tutorials/BeginnersGuide.html#Julia-Code-for-Test-Case-#5","page":"Beginners Guide","title":"Julia Code for Test Case #5","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"using PowerModelsITD\nusing Ipopt\n\nsilence!() # Silences the console, so warning messages or information are not displayed\n\nfiles_path = joinpath(dirname(pathof(PowerModelsITD)), \"..\") # file path for test cases files\npm_file = joinpath(files_path, \"test/data/transmission/case5_withload.m\") # transmission system file\npmd_file = joinpath(files_path, \"test/data/distribution/case3_unbalanced.dss\") # distribution system file\nboundary_file = joinpath(files_path, \"test/data/json/case5_case3_unbal.json\") # boundary file with info. about boundary buses\nformulation = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # type of formulation to be used\ndata = parse_files(pm_file, pmd_file, boundary_file) # parse files into dictionary\nresult = solve_opfitd(data, formulation, Ipopt.Optimizer; solution_model=\"MATH\") # solve the opfitd, present result in MATH model instead of default ENG\n\n# Check the result\n@info \"Objective: $(result[\"objective\"]) [\\$/hr]\"\n@info \"Termination Status of Solver: $(result[\"termination_status\"])\"\n@info \"Solve Time: $(result[\"solve_time\"]) [seconds]\"\n@info \"Solution Values (MATH model) for Distribution system(s): $(result[\"solution\"][\"it\"][\"pmd\"])\"\n@info \"Solution Values (MATH model) for Boundary(ies): $(result[\"solution\"][\"it\"][\"pmitd\"])\"\n","category":"page"},{"location":"tutorials/BeginnersGuide.html#Console-Output-for-Test-Case-#5","page":"Beginners Guide","title":"Console Output for Test Case #5","text":"","category":"section"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"After running the corresponding code, the user should get the following output displayed on the console.","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"[ Main | Info ] : Objective: 17953.746512039743 [$/hr]\n[ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED\n[ Main | Info ] : Solve Time: 0.07705187797546387 [seconds]\n\n[ Main | Info ] : Solution Values (MATH model) for Distribution system(s): Dict{String, Any}(\"branch\" => Dict{String, Any}(\"4\" => Dict{String, Any}(\"qf\" => [1354.795202241865, 1507.3400640138161, 1504.5761375753734], \"qt\" => [-1354.6163225169614, -1507.2344513630767, -1504.4700979169072], \"pt\" => [-3367.119671256992, -2346.3650144634003, -2354.829891017304], \"pf\" => [3367.119671256992, 2346.3650144634003, 2354.8298910173044]), \"1\" => Dict{String, Any}(\"qf\" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], \"qt\" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], \"pt\" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], \"pf\" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), \"5\" => Dict{String, Any}(\"qf\" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], \"qt\" => [-1354.795202241865, -1507.3400640138161, -1504.5761375753734], \"pt\" => [-3367.119671256992, -2346.3650144634003, -2354.8298910173044], \"pf\" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), \"2\" => Dict{String, Any}(\"qf\" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], \"qt\" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], \"pt\" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], \"pf\" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895]), \"6\" => Dict{String, Any}(\"qf\" => [1355.0096276913357, 1507.4706735124998, 1504.7037665348369], \"qt\" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], \"pt\" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], \"pf\" => [3367.1850486607445, 2346.4026604158908, 2354.8649645151804]), \"3\" => Dict{String, Any}(\"qf\" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], \"qt\" => [1354.6163225169614, 1507.2344513630767, 1504.4700979169072], \"pt\" => [3367.119671256992, 2346.3650144634003, 2354.829891017304], \"pf\" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), \"gen\" => Dict{String, Any}(\"1\" => Dict{String, Any}(\"qg_bus\" => [-0.0, -0.0, -0.0], \"qg\" => [-0.0, -0.0, -0.0], \"pg\" => [666.6676628468832, 666.6676628064197, 666.6676628099706], \"pg_bus\" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), \"transformer\" => Dict{String, Any}(\"1\" => Dict{String, Any}(\"qf\" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], \"qt\" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], \"pt\" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], \"pf\" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), \"2\" => Dict{String, Any}(\"qf\" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], \"qt\" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], \"pt\" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895], \"pf\" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), \"settings\" => Dict{String, Any}(\"sbase_default\" => 100000.0, \"vbases_default\" => Dict{String, Real}(\"4\" => 132.79056191361394), \"voltage_scale_factor\" => 1000.0, \"sbase\" => 100000.0, \"power_scale_factor\" => 1000.0, \"base_frequency\" => 60.0), \"multinetwork\" => false, \"load\" => Dict{String, Any}(\"1\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"2\" => Dict{String, Any}(\"qd_bus\" => [1500.0000000000002], \"pd_bus\" => [3000.0000000000005], \"qd\" => [1500.0000000000002], \"pd\" => [3000.0000000000005]), \"3\" => Dict{String, Any}(\"qd_bus\" => [1333.3300000000002], \"pd_bus\" => [4000.0], \"qd\" => [1333.3300000000002], \"pd\" => [4000.0])), \"bus\" => Dict{String, Any}(\"8\" => Dict{String, Any}(\"va\" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], \"vm\" => [0.5427404621782935, 0.5427412225103798, 0.5427420415368795]), \"4\" => Dict{String, Any}(\"va\" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], \"vm\" => [124.83030630100751, 124.83048117738736, 124.8306695534823]), \"1\" => Dict{String, Any}(\"va\" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], \"vm\" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), \"5\" => Dict{String, Any}(\"va\" => [-0.8089868491003656, -120.80727720360223, 119.19273784447546], \"vm\" => [0.5427292370876581, 0.542729249043147, 0.5427300853404582]), \"2\" => Dict{String, Any}(\"va\" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], \"vm\" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), \"6\" => Dict{String, Any}(\"va\" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], \"vm\" => [0.5427279962777596, 0.5427283843894555, 0.5427292175687293]), \"7\" => Dict{String, Any}(\"va\" => [-0.8063670574676239, -120.8054516152584, 119.19457001333551], \"vm\" => [0.5427392213907619, 0.5427403578738178, 0.5427411737823131]), \"9\" => Dict{String, Any}(\"va\" => [-0.8036120919989638, -120.80361209199894, 119.19638790800104], \"vm\" => [124.83485996888251, 124.83485996888251, 124.83485996888251]), \"3\" => Dict{String, Any}(\"va\" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], \"vm\" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505])), \"per_unit\" => false)\n\n[ Main | Info ] : Solution Values (MATH model) for Boundary(ies): Dict{String, Any}(\"multinetwork\" => false, \"boundary\" => Dict{String, Any}(\"(100001, 9, 5)\" => Dict{String, Any}(\"pbound_to\" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], \"qbound_to\" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369]), \"(100001, 5, 9)\" => Dict{String, Any}(\"pbound_fr\" => [8068.452673591816], \"qbound_fr\" => [4367.184067738673])))","category":"page"},{"location":"tutorials/BeginnersGuide.html","page":"Beginners Guide","title":"Beginners Guide","text":"As seen in the console output, the nodes/buses are now referenced by their MATH names (i.e., numbers) and not their actual ENG name.","category":"page"},{"location":"manual/formulations.html#ITD-Network-Formulations","page":"Formulations","title":"ITD Network Formulations","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported ITD boundary mathematical formulations is presented below.","category":"page"},{"location":"manual/formulations.html#Sets,-Parameters,-and-(General)-Variables","page":"Formulations","title":"Sets, Parameters, and (General) Variables","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxsets nonumber \n N mbox - Set of busesnonumber \n mathcalT mbox - Belongs to transmission networknonumber \n mathcalD mbox - Belongs to distribution networknonumber \n mathcalB mbox - Set of boundary linksnonumber \n\nmboxparameters nonumber \n Re mbox - Real partnonumber \n Im mbox - Imaginary partnonumber \n Phi = a b c mbox - Multi-conductor phasesnonumber \n chi rightarrowmathcalTmathcalD mbox - Belongs to Transmission or Distributionnonumber \n beta^^chi mbox - Boundary busnonumber \n\nmboxvariables nonumber \n P_beta^^mathcalTbeta^^mathcalD^^mathcalT mbox - Active power flow from Transmisison boundary bus to Distribution boundary busnonumber \n Q_beta^^mathcalTbeta^^mathcalD^^mathcalT mbox - Reactive power flow from Transmisison boundary bus to Distribution boundary busnonumber \n P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi mbox - Active power flow from Distribution boundary bus phase varphi to Transmission boundary busnonumber \n Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi mbox - Reactive power flow from Distribution boundary bus phase varphi to Transmission boundary busnonumber \n V_i^^mathcalT mbox - Voltage magnitude at bus inonumber \n theta_i^^mathcalT mbox - Voltage angle at bus inonumber \n v_i^mathcalD varphi mbox - Voltage magnitude at bus i phase varphinonumber \n theta_i^mathcalD varphi mbox - Voltage angle at bus i phase varphinonumber \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACP-ACPU","page":"Formulations","title":"ACP-ACPU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLPowerModelITD{ACPPowerModel, ACPUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACP to ACPU (AC polar to AC polar unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Polar\nVariables: Power-Voltage\nModel(s): NLP-NLP\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n V_beta^^mathcalT = v_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n V_beta^^mathcalT = v_beta^^mathcalD^^b forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n V_beta^^mathcalT = v_beta^^mathcalD^^c forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n theta_beta^^mathcalT = theta_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n theta_beta^^mathcalD^^b = (theta_beta^^mathcalD^^a -120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n theta_beta^^mathcalD^^c = (theta_beta^^mathcalD^^a +120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACR-ACRU","page":"Formulations","title":"ACR-ACRU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLPowerModelITD{ACRPowerModel, ACRUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACR to ACRU (AC rectangular to AC rectangular unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Power-Voltage\nModel(s): NLP-NLP\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#IVR-IVRU","page":"Formulations","title":"IVR-IVRU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"IVRPowerModelITD{IVRPowerModel, IVRUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"IVR to IVRU (AC-IV rectangular to AC-IV rectangular unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Current-Voltage\nModel(s): NLP-NLP\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n V^Re_beta^^mathcalT ReBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) + V^Im_beta^^mathcalT ImBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) = -Biggsum_varphi in Phi Bigg( Big(v_beta^^mathcalD^^varphiReBig) ReBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) + Big(v_beta^^mathcalD^^varphiImBig) ImBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) Bigg) Bigg forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n V^Im_beta^^mathcalT ReBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) - V^Re_beta^^mathcalT ImBig(I_beta^^mathcalTbeta^^mathcalD^^mathcalTBig) = - Biggsum_varphi in Phi Bigg( Big(v_beta^^mathcalD^^varphiImBig) ReBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) - Big(v_beta^^mathcalD^^varphiReBig) ImBig(I_beta^^mathcalDbeta^^mathcalT^mathcalDvarphiBig) Bigg) Bigg forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#NFA-NFAU","page":"Formulations","title":"NFA-NFAU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"LPowerModelITD{NFAPowerModel, NFAUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NFA to NFAU (Linear Network flow approximation to Linear Network flow approximation unbalanced)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: N/A\nVariables: N/A\nModel(s): Apprx.-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACR-FBSUBF","page":"Formulations","title":"ACR-FBSUBF","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLBFPowerModelITD{ACRPowerModel, FBSUBFPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACR to FBSUBF (AC rectangular to forward-backward sweep unbalanced branch flow approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Power-Voltage\nModel(s): NLP-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACR-FOTRU","page":"Formulations","title":"ACR-FOTRU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLFOTPowerModelITD{ACRPowerModel, FOTRUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACR to FOTRU (AC rectangular to first-order Taylor rectangular unbalanced approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Rectangular\nVariables: Power-Voltage\nModel(s): NLP-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^aReBig)^2 + Big(v_beta^^mathcalD^^aImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^bReBig)^2 + Big(v_beta^^mathcalD^^bImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n Big(V^Re_beta^^mathcalTBig)^2 + Big(V^Im_beta^^mathcalTBig)^2 = Big(v_beta^^mathcalD^^cReBig)^2 + Big(v_beta^^mathcalD^^cImBig)^2forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n Big(V^Im_beta^^mathcalTBig) = Big(v_beta^^mathcalD^^aImBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n Big(v_beta^^mathcalD^^bImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) -120^circ Bigg) v_beta^^mathcalD^^bRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n Big(v_beta^^mathcalD^^cImBig) = tanBigg(atanbigg(fracv_beta^^mathcalD^^aImv_beta^^mathcalD^^aRe bigg) +120^circ Bigg) v_beta^^mathcalD^^cRe forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#ACP-FOTPU","page":"Formulations","title":"ACP-FOTPU","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"NLFOTPowerModelITD{ACPPowerModel, FOTPUPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"ACP to FOTPU (AC rectangular to first-order Taylor polar unbalanced approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: Polar\nVariables: Power-Voltage\nModel(s): NLP-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n V_beta^^mathcalT = v_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase a \n V_beta^^mathcalT = v_beta^^mathcalD^^b forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase b \n V_beta^^mathcalT = v_beta^^mathcalD^^c forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage mag equality - phase c \n theta_beta^^mathcalT = theta_beta^^mathcalD^^a forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Voltage ang equality - phase a \n theta_beta^^mathcalD^^b = (theta_beta^^mathcalD^^a -120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase b \n theta_beta^^mathcalD^^c = (theta_beta^^mathcalD^^a +120^circ) forall beta^^mathcalD in N^^mathcalB cap N^^mathcalD mbox - Voltage ang equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#BFA-LinDist3Flow","page":"Formulations","title":"BFA-LinDist3Flow","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"BFPowerModelITD{BFAPowerModel, LinDist3FlowPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"BFA to LinDist3Flow (Branch flow approximation to LinDist3Flow approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: W-space\nVariables: Power-Voltage (W)\nModel(s): Apprx.-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(w_beta^^mathcalT Big) = Big(w^a_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase a \n Big(w_beta^^mathcalT Big) = Big(w^b_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase b \n Big(w_beta^^mathcalT Big) = Big(w^c_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase c \n\nendalign","category":"page"},{"location":"manual/formulations.html#SOCBF-LinDist3Flow","page":"Formulations","title":"SOCBF-LinDist3Flow","text":"","category":"section"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"BFPowerModelITD{SOCBFPowerModel, LinDist3FlowPowerModel}","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"SOCBF to LinDist3Flow (Second-order cone branch flow relaxation to LinDist3Flow approximation)","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"Coordinates: W-space\nVariables: Power-Voltage (W)\nModel(s): Relax.-Apprx.\nITD Boundary Math. Formulation:","category":"page"},{"location":"manual/formulations.html","page":"Formulations","title":"Formulations","text":"beginalign\n\nmboxITD boundaries nonumber \n sum_varphi in Phi P_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + P_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Active power flow at boundary \n sum_varphi in Phi Q_beta^^mathcalDbeta^^mathcalT^mathcalDvarphi + Q_beta^^mathcalTbeta^^mathcalD^^mathcalT = 0 forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - Reactive power flow at boundary \n Big(w_beta^^mathcalT Big) = Big(w^a_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase a \n Big(w_beta^^mathcalT Big) = Big(w^b_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase b \n Big(w_beta^^mathcalT Big) = Big(w^c_beta^^mathcalDBig) forall (beta^^mathcalTbeta^^mathcalD) in Lambda mbox - W equality - phase c \n\nendalign","category":"page"},{"location":"manual/storage.html#Quick-Guide-on-Storage-(with-Costs)-Problem-Specification","page":"Storage","title":"Quick Guide on Storage (with Costs) Problem Specification","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"In this guide, we will discuss the differences between the two problem specifications currently available in PowermodelsITD that consider storage devices when performing OPF.","category":"page"},{"location":"manual/storage.html#TL;DR","page":"Storage","title":"TL;DR","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"solve_opfitd(...): considers the operation (charge and discharge) of storage devices at both transmission and distribution system(s), but, no cost is added to the objective cost function. In other words, cycling/using the storage devices is a free operation.\nsolve_opfitd_storage(...): considers the operation (charge and discharge) of storage devices at both transmission and distribution system(s), and cost term(s) are added to the objective cost function. In other words, cycling/using the storage devices is not free and the specific cost of using the storage device is added to the cost function as sd times cost, where sd is the amount of power discharged and cost is a scalar value in units $/kWh or $/pu.","category":"page"},{"location":"manual/storage.html#Default-Costs-and-Units","page":"Storage","title":"Default Costs and Units","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"By default, the costs of the storage devices are calculated based on the references shown below. However, users are encouraged to assign their own costs after parsing files.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"Transmission cost must be in $/pu units.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"(e.g., transformation from $/MWh -> $/pu: 200 $/MWh x 100 MVA base/1 pu = 20,000 $/pu)","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"Distribution cost must be in $/kWh units.\nDefault costs of storage devices (in $/kWh) are computed based on Eq. (23) from this publication.\nThe total cost of the storage system, C_total^ES, is estimated based on NREL data obtained from this resource.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"beginalign\n\ncost = c_epsilon varepsilon = dfracC_total^ESCyccdot E__ES^maxcdot DoDcdot eta_r\n\nendalign","category":"page"},{"location":"manual/storage.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-with-Storage-Costs","page":"Storage","title":"Running Integrated Transmission-Distribution Optimal Power Flow with Storage Costs","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"The snippet below shows how to run a steady-state Integrated Transmission-Distribution (ITD) AC Optimal Power Flow with storage costs. All of these files can be found in test folder of the repository.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = \"case5_withload.m\"\npmd_file = \"case3_balanced_withBattery.dss\"\npmitd_file = \"case5_case3_bal_battery.json\"\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\npmitd_data = parse_files(pm_file, pmd_file, pmitd_file)\n\n# cost to assign to energy storage\n# Units $/kWh\nstrg_cost = 0.025\n\n# add cost to storages in PMD\nfor (st_name, st_data) in pmitd_data[\"it\"][\"pmd\"][\"storage\"]\n st_data[\"cost\"] = strg_cost\nend\n\n# solve optimization with storage cost problem\npmitd_result_strg = solve_opfitd_storage(pmitd_data, pmitd_type, Ipopt.Optimizer)\n","category":"page"},{"location":"manual/storage.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-with-Storage-Costs-Multinetwork","page":"Storage","title":"Running Integrated Transmission-Distribution Optimal Power Flow with Storage Costs Multinetwork","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"Running a multinetwork (i.e., multi-timestep) is also very simple. Only slight changes are required (assuming multinetwork data exists in the distribution files) as seen in the snippet shown below.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = \"case5_withload.m\"\npmd_file = \"case3_balanced_withBattery_mn_diff.dss\"\npmitd_file = \"case5_case3_bal_battery_mn.json\"\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\npmitd_data = parse_files(pm_file, pmd_file, pmitd_file; multinetwork=true)\n\n# cost to assign to energy storage\n# Units $/kWh\nstrg_cost = 0.0025\n\n# add cost to storages in PMD\nfor (nw_id, nw_data) in pmitd_data[\"it\"][\"pmd\"][\"nw\"]\n for (st_name, st_data) in nw_data[\"storage\"]\n st_data[\"cost\"] = strg_cost\n end\nend\n\npmitd_result_strg = solve_mn_opfitd_storage(pmitd_data, pmitd_type, Ipopt.Optimizer)\n","category":"page"},{"location":"manual/storage.html#How-are-the-Storage-Devices-Modeled?","page":"Storage","title":"How are the Storage Devices Modeled?","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"The storage mathematical model (for both transmission and distribution system(s)) are based on the model shown here. Given the storage data model and two sequential time points s and t, the storage component's mathematical model is given by,","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"beginalign\n\nmboxdata nonumber \n e^u mbox - energy rating nonumber \n sc^u mbox - charge rating nonumber \n sd^u mbox - discharge rating nonumber \n eta^c mbox - charge efficiency nonumber \n eta^d mbox - discharge efficiency nonumber \n te mbox - time elapsed nonumber \n S^l mbox - power losses nonumber \n Z mbox - injection impedance nonumber \n q^l q^u mbox - reactive power injection limits nonumber \n s^u mbox - thermal injection limit nonumber \n i^u mbox - current injection limit nonumber \n\nmboxvariables nonumber \n e_i in (0 e^u) mbox - storage energy at time i labelvar_strg_energy \n sc_i in (0 sc^u) mbox - charge amount at time i labelvar_strg_charge \n sd_i in (0 sd^u) mbox - discharge amount at time i labelvar_strg_discharge \n sqc_i mbox - reactive power slack at time i labelvar_strg_qslack \n S_i mbox - complex bus power injection at time i labelvar_strg_power \n I_i mbox - complex bus current injection at time i labelvar_strg_current \n\nmboxsubject to nonumber \n e_t - e_s = te left(eta^c sc_t - fracsd_teta^d right) labeleq_strg_energy \n sc_t cdot sd_t = 0 labeleq_strg_compl \n S_t + (sd_t - sc_t) = j cdot sqc_t + S^l + Z I_t^2 labeleq_strg_loss \n q^l leq Im(S_t) leq q^u labeleq_strg_q_limit \n S_t leq s^u labeleq_strg_thermal_limit \n I_t leq i^u labeleq_strg_current_limit\nendalign","category":"page"},{"location":"manual/storage.html#What-is-the-Cost-(Objective)-Function?","page":"Storage","title":"What is the Cost (Objective) Function?","text":"","category":"section"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"The cost (objective) function of the solve_opfitd_storage(...) and solve_mn_opfitd_storage(...) is based on the mathematical model:","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"beginalign\nbeginsplit\n textmin bigg(sum_k in G^^mathcalT c_2k(P_gk^mathcalT)^2 + c_1k(P_gk^mathcalT) + c_0k bigg) +\n bigg(sum_epsilon in E^^mathcalT c_epsilon(sd_epsilon^mathcalT)bigg) +\n bigg(sum_m in G^^mathcalD c_2m(sum_varphi in Phi P_gm^mathcalDvarphi)^2 + c_1m(sum_varphi in Phi P_gm^mathcalDvarphi) + c_0m bigg) +\n bigg(sum_varepsilon in E^^mathcalD c_varepsilon(sd_varepsilon^mathcalD)bigg)\nendsplit\nendalign","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"As observed, the costs of discharging the storage devices for both Transmission and Distribution system(s) are added the cost function of the OPFITD. This means that storage devices will only discharge power to the grid when the cost of charging + discharging energy is less than the cost of not using (cycling) the storage device.","category":"page"},{"location":"manual/storage.html","page":"Storage","title":"Storage","text":"This cost function only cosiders cost as a factor for determining when to use the storage devices, however, it is important to note that users are encouraged to create their own cost functions that consider other factors (e.g., voltage deviations) that will make the storage devices operate more often, as needed.","category":"page"},{"location":"reference/base.html#Base","page":"Base","title":"Base","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"ref\nvar\nids\ncon\nsol\nnws\nnw_ids","category":"page"},{"location":"reference/base.html#PowerModelsITD.ref","page":"Base","title":"PowerModelsITD.ref","text":"helper function to access the AbstractPowerModelITD structs' ref, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.var","page":"Base","title":"PowerModelsITD.var","text":"helper function to access the AbstractPowerModelITD structs' var, returns JuMP VariableRef\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.ids","page":"Base","title":"PowerModelsITD.ids","text":"helper function to access the ids of AbstractPowerModelITD structs' ref, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.con","page":"Base","title":"PowerModelsITD.con","text":"helper function to access the AbstractPowerModelITD structs' con, returns JuMP Constraint\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.sol","page":"Base","title":"PowerModelsITD.sol","text":"helper function to access the AbstractPowerModelITD structs' sol, returns Dict\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.nws","page":"Base","title":"PowerModelsITD.nws","text":"helper function to access multinetwork data from AbstractPowerModelITD structs, returns (id,data) pairs\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#PowerModelsITD.nw_ids","page":"Base","title":"PowerModelsITD.nw_ids","text":"helper function to access the ids of multinetworks from AbstractPowerModelITD structs, returns ints\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Helper-functions","page":"Base","title":"Helper functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"silence!","category":"page"},{"location":"reference/base.html#PowerModelsITD.silence!","page":"Base","title":"PowerModelsITD.silence!","text":"Suppresses information and warning messages output by PowerModels and PowerModelsDistribution\n\n\n\n\n\n","category":"function"},{"location":"reference/base.html#Ref-Creation-Functions","page":"Base","title":"Ref Creation Functions","text":"","category":"section"},{"location":"reference/base.html","page":"Base","title":"Base","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"ref_\")","category":"page"},{"location":"reference/base.html#PowerModelsITD.ref_add_core!-Tuple{Dict{Symbol}}","page":"Base","title":"PowerModelsITD.ref_add_core!","text":"function ref_add_core!(ref::Dict{Symbol,Any})\n\nReturns a dict that stores commonly used pre-computed data obtained from the data dictionary, primarily for converting data-types, filtering out loads in the transmission-side system, removing slack generators in the distribution-side system, and storing system-wide values that need to be computed globally. Some of the common keys include:\n\nSee ref_add_core!(ref) from PowerModels),\nSee ref_add_core!(ref) from PowerModelsDistribution),\n:boundary – the set of boundary elements that are active in the network,\n:arcs_boundary_from – the set [(i,b[\"f_bus\"],b[\"t_bus\"]) for (i,b) in ref[:boundary]],\n:arcs_boundary_to – the set [(i,b[\"t_bus\"],b[\"f_bus\"]) for (i,b) in ref[:boundary]],\n:arcs_boundary – the set of arcs from both arcs_boundary_from and arcs_boundary_to,\n:bus_arcs_boundary_from – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_from]]),\n:bus_arcs_boundary_to – the mapping Dict(i => [(l,i,j) for (l,i,j) in ref[:arcs_boundary_to]]).\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#VariableAPI","page":"Variables","title":"Variables","text":"","category":"section"},{"location":"reference/variables.html","page":"Variables","title":"Variables","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"variable\")","category":"page"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current","text":"Boundary current flow variables - IVR cases (Current Real and Current Imaginary)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_imaginary_from-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_imaginary_from","text":"Variable: cibound_fr[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_imaginary_to-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_imaginary_to","text":"Variable: cibound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_real_from-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_real_from","text":"Variable: crbound_fr[l,i,j] for (l,i,j) in arcs bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_current_real_to-Tuple{AbstractIVRPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_current_real_to","text":"Variable: crbound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power-Tuple{AbstractLPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power","text":"Boundary power flow variables - DC cases (P-only)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power","text":"Boundary power flow variables - AC cases (P and Q)\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_imaginary_from-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_imaginary_from","text":"Variable: qbound_fr[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_imaginary_to-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_imaginary_to","text":"Variable: qbound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_real_from-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_real_from","text":"Variable: pbound_fr[l,i,j] for (l,i,j) in arcs bus_arcs_conns_boundary_from\n\n\n\n\n\n","category":"method"},{"location":"reference/variables.html#PowerModelsITD.variable_boundary_power_real_to-Tuple{AbstractPowerModelITD}","page":"Variables","title":"PowerModelsITD.variable_boundary_power_real_to","text":"Variable: pbound_to[l,i,j] for (l,i,j) in bus_arcs_conns_boundary_to\n\n\n\n\n\n","category":"method"},{"location":"reference/constants.html#ConstantsAPI","page":"Constants","title":"Constants","text":"","category":"section"},{"location":"reference/constants.html","page":"Constants","title":"Constants","text":"BOUNDARY_NUMBER","category":"page"},{"location":"reference/constants.html#PowerModelsITD.BOUNDARY_NUMBER","page":"Constants","title":"PowerModelsITD.BOUNDARY_NUMBER","text":"BOUNDARY_NUMBER constant that determines the starting counter for the boundaries defined.\n\n\n\n\n\n","category":"constant"},{"location":"reference/constants.html","page":"Constants","title":"Constants","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:constant]\nFilter = t -> isa(t, Dict) || isa(t, Vector) || isa(t, String)","category":"page"},{"location":"reference/data_models.html#DataModelAPI","page":"Data Models","title":"Data Models and Parsers","text":"","category":"section"},{"location":"reference/data_models.html#Parsers","page":"Data Models","title":"Parsers","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"parse_files\nparse_json\nparse_link_file\nparse_power_transmission_file\nparse_power_distribution_file","category":"page"},{"location":"reference/data_models.html#PowerModelsITD.parse_files","page":"Data Models","title":"PowerModelsITD.parse_files","text":"function parse_files(\n pm_file::String,\n pmd_file::String,\n pmitd_file::String;\n multinetwork::Bool=false\n auto_rename::Bool=false\n)\n\nParses PowerModels, PowerModelsDistribution, and PowerModelsITD boundary linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.\n\n\n\n\n\nfunction parse_files(\n pm_file::String,\n pmd_files::Vector,\n pmitd_file::String;\n multinetwork::Bool=false,\n auto_rename::Bool=false\n)\n\nParses PowerModels, PowerModelsDistribution vector, and PowerModelsITD linkage input files and returns a data dictionary with the combined information of the inputted dictionaries.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_json","page":"Data Models","title":"PowerModelsITD.parse_json","text":"function parse_json(\n path::String\n)\n\nParses a JavaScript Object Notation (JSON) file from the file path path and returns a dictionary containing the corresponding parsed data. Primarily used for boundry linkage files.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_link_file","page":"Data Models","title":"PowerModelsITD.parse_link_file","text":"function parse_link_file(\n pmitd_file::String\n)\n\nParses a linking file from the file pmitd_file and returns a PowerModelsITD data structured linking network dictionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_power_transmission_file","page":"Data Models","title":"PowerModelsITD.parse_power_transmission_file","text":"function parse_power_transmission_file(\n pm_file::String;\n skip_correct::Bool = true,\n multinetwork::Bool=false,\n number_multinetworks::Int=0\n)\n\nParses a power transmission file from the file pm_file and returns a PowerModels data structured pm network dictionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.parse_power_distribution_file","page":"Data Models","title":"PowerModelsITD.parse_power_distribution_file","text":"function parse_power_distribution_file(\n pmd_file::String,\n base_data::Dict{String,<:Any}=Dict{String, Any}();\n unique::Bool=true,\n multinetwork::Bool=false,\n auto_rename::Bool=false,\n ms_num::Int=1\n)\n\nParses power distribution files from the file pmd_file depending on the file extension. base_data represents a dictionary that contains data from other pmd systems (serving as the base where all data will be combined), unique represents if the pmd data provided is the first one passed or unique. If it is not unique, then the components need to be renamed before being added. Returns a PowerModelsDistribution data structured pmd network (a dictionary) with renamed components (if applicable).\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Data-Transformations","page":"Data Models","title":"Data Transformations","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nPages = [\"transformations.jl\"]","category":"page"},{"location":"reference/data_models.html#PowerModelsITD.apply_kron_reduction!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_kron_reduction!","text":"function apply_kron_reduction!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation that applies a Kron Reduction to the network, reducing out the kr_neutral, leaving only the kr_phases.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.apply_phase_projection!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_phase_projection!","text":"function apply_phase_projection!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation to apply phase projection: pad matrices and vectors to max number of conductors\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.apply_phase_projection_delta!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_phase_projection_delta!","text":"function apply_phase_projection_delta!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation to apply phase projection delta for components where unprojected states are not yet supported (delta configurations). See [apply_phase_projection!]\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.apply_voltage_angle_difference_bounds!","page":"Data Models","title":"PowerModelsITD.apply_voltage_angle_difference_bounds!","text":"function apply_voltage_angle_difference_bounds!(\n pmitd_data::Dict{String,<:Any},\n vad::Real=5.0\n)\n\nApplies the corresponding transformation of voltage angle difference bound given by vad::Real in degrees (i.e., the allowed drift of angle from one end of a line to another) to all lines, to the pmd dictionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.apply_voltage_bounds!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.apply_voltage_bounds!","text":"function apply_voltage_bounds!(\n pmitd_data::Dict{String,<:Any};\n vm_lb::Union{Real,Missing}=0.9,\n vm_ub::Union{Real,Missing}=1.1\n)\n\nApplies the corresponding transformation of voltage bounds to all buses based on per-unit upper (vm_ub) and lower (vm_lb) bounds, scaled by the bus' voltage, to the pmd dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.make_lossless!-Tuple{Dict{String}}","page":"Data Models","title":"PowerModelsITD.make_lossless!","text":"function make_lossless!(\n pmitd_data::Dict{String,<:Any}\n)\n\nApplies the corresponding transformation that removes parameters from objects with loss models to make them lossless. This includes switches voltage sources and transformers, which all have loss model parameters that can be omitted.\n\n\n\n\n\n","category":"method"},{"location":"reference/data_models.html#PowerModelsITD.remove_all_bounds!","page":"Data Models","title":"PowerModelsITD.remove_all_bounds!","text":"function remove_all_bounds!(\n pmitd_data::Dict{String,<:Any};\n exclude::Vector{<:String}=String[\"energy_ub\"]\n)\n\nApplies the corresponding transformation that removes all fields ending in 'ub' or 'lb' that aren't required by the math model. Properties can be excluded from this removal with exclude::Vector{String}. By default, \"energy_ub\" is excluded from this removal, since it is a required property on storage (in pmd).\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#Data-Checking-and-Units-Correction","page":"Data Models","title":"Data Checking and Units Correction","text":"","category":"section"},{"location":"reference/data_models.html","page":"Data Models","title":"Data Models","text":"correct_network_data!\nassign_boundary_buses!\nresolve_units!\nreplicate\nsol_data_model!\ncalc_transmission_branch_flow_ac!\ntransform_pmitd_solution_to_eng!","category":"page"},{"location":"reference/data_models.html#PowerModelsITD.correct_network_data!","page":"Data Models","title":"PowerModelsITD.correct_network_data!","text":"function correct_network_data!(\n data::Dict{String,<:Any};\n multinetwork::Bool=false\n)\n\nCorrects and prepares the data in both pm and pmd dictionaries. Also, assigns the ids given in the boundary linking data to number buses. data is the pmitd dictionary to be corrected and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.assign_boundary_buses!","page":"Data Models","title":"PowerModelsITD.assign_boundary_buses!","text":"function assign_boundary_buses!(\n data::Dict{String,<:Any};\n multinetwork::Bool=false\n)\n\nAssigns the names given in the boundary linking data to number buses in corresponding transmission and distribution networks. data is the pmitd dictionary containing the boundary information and multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.resolve_units!","page":"Data Models","title":"PowerModelsITD.resolve_units!","text":"function resolve_units!(\n data::Dict{String,<:Any};\n multinetwork::Bool=false,\n number_multinetworks::Int=0\n)\n\nResolve the units used throughout the disparate datasets by setting the same settings bases. data is the pmitd dictionary to be corrected by resolving units, multinetwork is the boolean that defines if there are multiple networks that need to be corrected, and number_multinetworks defines the number of multinetworks.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.replicate","page":"Data Models","title":"PowerModelsITD.replicate","text":"function replicate(\n sn_data::Dict{String,<:Any},\n count::Int;\n global_keys::Set{String}=Set{String}()\n)\n\nTurns in given single network pmitd data in multinetwork data with a count replicate of the given network. Note that this function performs a deepcopy of the network data. Significant multinetwork space savings can often be achieved by building application specific methods of building multinetwork with minimal data replication. sn_data is the data to be replicated, count is the number of networks to be replicated.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.sol_data_model!","page":"Data Models","title":"PowerModelsITD.sol_data_model!","text":"function sol_data_model!(\n pmitd::AbstractPowerModelITD,\n solution::Dict{String,<:Any}\n)\n\nsolution_processor to convert the solution(s) to polar voltage magnitudes and angles.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.calc_transmission_branch_flow_ac!","page":"Data Models","title":"PowerModelsITD.calc_transmission_branch_flow_ac!","text":"function calc_transmission_branch_flow_ac!(\n result::Dict{String,<:Any},\n pmitd_data::Dict{String,<:Any};\n)\n\nAssumes a valid ac solution is included in the result and computes the branch flow values. Returns the pf solution inside the pmitd_data dictionary (not the result dictionary). Replicates the _PM function but compatible with PMITD dicitionary.\n\n\n\n\n\n","category":"function"},{"location":"reference/data_models.html#PowerModelsITD.transform_pmitd_solution_to_eng!","page":"Data Models","title":"PowerModelsITD.transform_pmitd_solution_to_eng!","text":"function transform_pmitd_solution_to_eng!(\n result::Dict{String,<:Any},\n pmitd_data::Dict{String,<:Any}\n)\n\nTransforms the PMITD solution from MATH to ENG model. This transformation facilitates the conversion in \"pmitd\" of buses numbers to buses names according to the ENG model. Ex: (100002, 9, 6) -> (100002, voltagesource.3busunbalnogenmn_2.source, 6)\n\n\n\n\n\n","category":"function"},{"location":"reference/objectives.html#ObjectiveAPI","page":"Objectives","title":"Objectives","text":"","category":"section"},{"location":"reference/objectives.html","page":"Objectives","title":"Objectives","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"objective\")","category":"page"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost","text":"function objective_itd_min_fuel_cost(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization objective.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_polynomial-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_polynomial","text":"function objective_itd_min_fuel_cost_polynomial(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_polynomial_storage-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_polynomial_storage","text":"function objective_itd_min_fuel_cost_polynomial_storage(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_pwl-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_pwl","text":"function objective_itd_min_fuel_cost_pwl(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective with piecewise linear terms.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_cost_storage-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_cost_storage","text":"function objective_itd_min_fuel_cost_storage(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization objective with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta","text":"function objective_itd_min_fuel_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization for transmission and minimum load delta objective with storage for distribution objective.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_distribution_load_setpoint_delta_simple","text":"function objective_itd_min_fuel_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD\n)\n\nStandard fuel cost minimization for transmission and simplified minimum load delta objective (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta","text":"function objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms in transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta_simple","text":"function objective_itd_min_fuel_polynomial_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms in transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta","text":"function objective_itd_min_fuel_pwl_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective with piecewise linear terms in transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_itd_min_fuel_pwl_distribution_load_setpoint_delta_simple","text":"function objective_itd_min_fuel_pwl_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective with piecewise linear terms in transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_mc_variable_pg_cost-Tuple{PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Objectives","title":"PowerModelsITD.objective_mc_variable_pg_cost","text":"function objective_mc_variable_pg_cost(\n pm::_PMD.AbstractUnbalancedIVRModel\n)\n\nAdds pgcost variables and constraints (IVR formulation) (Copied from PMD and modified to allow differentiation with TD gens (...dist)).\n\n\n\n\n\n","category":"method"},{"location":"reference/objectives.html#PowerModelsITD.objective_mc_variable_pg_cost-Tuple{PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Objectives","title":"PowerModelsITD.objective_mc_variable_pg_cost","text":"function objective_mc_variable_pg_cost(\n pm::_PMD.AbstractUnbalancedPowerModel\n)\n\nAdds pgcost variables and constraints (Copied from PMD and modified to allow differentiation with TD gens (...dist)).\n\n\n\n\n\n","category":"method"},{"location":"manual/quickguide.html#Quick-Start-Guide","page":"Getting Started","title":"Quick Start Guide","text":"","category":"section"},{"location":"manual/quickguide.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-(OPFITD)","page":"Getting Started","title":"Running Integrated Transmission-Distribution Optimal Power Flow (OPFITD)","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Once PowerModelsITD.jl is installed, Ipopt is installed, and network data files for the transmission system, distribution system(s), and boundary linking (e.g., \"case5_withload.m\", \"case3_unbalanced.dss, \"case5_case3_unbal.json\" in the package folder under ./test/data) have been acquired, an Integrated Transmission-Distribution (ITD) AC Optimal Power Flow can be executed as follows,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsITD\nusing Ipopt\n\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.\n\nresult = solve_opfitd(\"case5_withload.m\", \"case3_unbalanced.dss\", \"case5_case3_unbal.json\", pmitd_type, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Running-Integrated-Transmission-Distribution-Optimal-Power-Flow-(OPFITD)-with-Multiple-Distribution-Systems","page":"Getting Started","title":"Running Integrated Transmission-Distribution Optimal Power Flow (OPFITD) with Multiple Distribution Systems","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The snippet shown below demonstrates how to run an OPFITD with multiple (different) distribution systems connected to different transmission system buses. In summary, the distribution system files need to be passed as a Vector of files, and the corresponding boundaries must be defined in the boundary linking file. For the following snippet, assume we have access to ./test/data to get the respective files.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsITD\nusing Ipopt\n\n# Files\npm_file = \"case5_with2loads.m\"\npmd_file1 = \"case3_unbalanced.dss\"\npmd_file2 = \"case3_balanced.dss\"\nboundary_file = \"case5_case3x2_unbal_bal.json\"\n\npmd_files = [pmd_file1, pmd_file2] # create a vector of distribution system files.\n\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.\n\nresult = solve_opfitd(pm_file, pmd_files, boundary_file, pmitd_type, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html#Parsing-files","page":"Getting Started","title":"Parsing files","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To parse the respective files into PowerModelsITD.jl, use the parse_files command","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"pmitd_data = parse_files(pm_file, pmd_file, boundary_file) # single distribution system file.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"To parse for a model with multiple distribution system files, just pass the distribution system argument as a vector of files, as seen below.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"pmd_files = [pmd_file1, pmd_file2]\npmitd_data = parse_files(pm_file, pmd_files, boundary_file) # vector of multiple distribution system files.","category":"page"},{"location":"manual/quickguide.html#Getting-Results","page":"Getting Started","title":"Getting Results","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The solve_ commands in PowerModelsITD.jl return detailed results data in the form of a dictionary. This dictionary can be saved for further processing as follows,","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_opfitd(pmitd_data, NLPowerModelITD{ACPPowerModel, ACPUPowerModel}, Ipopt.Optimizer)","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Note: the function solve_opfitd(...) does not neccessarily needs for the data to be parsed (i.e., parse_files(...)). The user can pass directly the files of the problem to the solve_opfitd(...) function, as seen previously.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Alternatively, you can use the function solve_model(...) and specify the build method, in this case build_opfitd:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"result = solve_model(pmitd_data, NLPowerModelITD{ACPPowerModel, ACPUPowerModel}, Ipopt.Optimizer, build_opfitd)","category":"page"},{"location":"manual/quickguide.html#Running-Multinetwork-(mn)-Integrated-Transmission-Distribution-Optimal-Power-Flow-(OPFITD)-with-Multiple-Distribution-Systems-(ms)","page":"Getting Started","title":"Running Multinetwork (mn) Integrated Transmission-Distribution Optimal Power Flow (OPFITD) with Multiple Distribution Systems (ms)","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The snippet shown below demonstrates how to run a multinetwork (mn) OPFITD with multiple distribution systems (ms) connected to different transmission system buses. As seen previously, the distribution system files need to be passed as a Vector of files, and the corresponding boundaries are defined in the boundary linking file. To run a multinetwork problem, time series values can be defined inside the opendss file(s) that represent the distribution system(s). Some important things to remember are:","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"The time series values can be defined in a .csv file that is called inside the opendss file(s).\nWhen the data is parsed, the transmission system will be automatically replicated to the number of time series values available in the opendss file(s).\nIf data in the transmission system need to be modified for different time steps, the data can be modified after the parsing process is done.\nRemember to run the special multinetwork function or build function (i.e., solve_mn_opfitd(...) or solve_model(..., build_mn_opfitd)).","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"For the following snippet, assume we have access to ./test/data to get the respective files.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"using PowerModelsITD\nusing Ipopt\n\n# Files\npm_file = \"case5_with2loads.m\"\npmd_file = \"case3_unbalanced_withoutgen_mn.dss\"\nboundary_file = \"case5_case3x2.json\"\n\npmd_files = [pmd_file, pmd_file] # create a vector of distribution system files.\n\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel} # define the formulation type.\n\nresult = solve_mn_opfitd(pm_file, pmd_files, boundary_file, pmitd_type, Ipopt.Optimizer; auto_rename=true)\n","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Important Note: If you examine the file case3_unbalanced_withoutgen_mn.dss in detail, you will notice how time series power values are defined inside the opendss file as New Loadshape.ls1 pmult=(file=load_profile.csv), and then the load models are defined with parameters model=1 daily=ls1. This definition is sufficient for PowerModelsITD.jl to understand that this is a multinetwork problem. If you examine the content of the load_profile.csv file, you will notice that there are 4 time steps. This will cause the transmission, distribution, and boundary data to be replicated x4 (i.e., 4 times) while it is parsed to represent the overall problem.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"Note: The auto_rename=true option used in this example will be explained in later documentation.","category":"page"},{"location":"manual/quickguide.html#Accessing-Different-Formulations","page":"Getting Started","title":"Accessing Different Formulations","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"There is a diverse number of formulations that can be used to solve the OPFITD, PFITD, and other problem specifications. These can be found in types.jl. A non-exhaustive list of the supported formulations is presented below.","category":"page"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"NLPowerModelITD{ACPPowerModel, ACPUPowerModel} indicates an AC to AC formulation in polar coordinates.\nNLPowerModelITD{ACRPowerModel, ACRUPowerModel} indicates an AC to AC formulation in rectangular coordinates.\nLPowerModelITD{NFAPowerModel, NFAUPowerModel} indicates a linear network active power flow to network active power flow formulation.\nIVRPowerModelITD{IVRPowerModel, IVRUPowerModel} indicates an AC current-voltage to AC current-voltage formulation.\nBFPowerModelITD{SOCBFPowerModel, SOCNLPUBFPowerModel} indicates an SOC branch-flow to SOC branch-flow formulation.\nNLBFPowerModelITD{ACRPowerModel, FBSUBFPowerModel} indicates an AC in rectangular coordinates to forward-backward sweep formulation.\nNLFOTPowerModelITD{ACRPowerModel, FOTRUPowerModel} indicates an AC in rectangular coordinates to first-order Taylor in rectangular coordinates formulation.\nNLFOTPowerModelITD{ACPPowerModel, FOTPUPowerModel} indicates an AC in polar coordinates to first-order Taylor in polar coordinates formulation.","category":"page"},{"location":"manual/quickguide.html#Examples","page":"Getting Started","title":"Examples","text":"","category":"section"},{"location":"manual/quickguide.html","page":"Getting Started","title":"Getting Started","text":"More examples of working with the engineering data model can be found in the /examples folder of the PowerModelsITD.jl repository. These are Pluto Notebooks; instructions for running them can be found in the Pluto documentation.","category":"page"},{"location":"reference/formulations.html#FormulationAPI","page":"Formulations","title":"Formulations","text":"","category":"section"},{"location":"reference/formulations.html#Abstract-Models","page":"Formulations","title":"Abstract Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"AbstractPowerModelITD\nAbstractNLPowerModelITD\nAbstractLPowerModelITD\nAbstractIVRPowerModelITD\nAbstractBFPowerModelITD\nAbstractLNLBFPowerModelITD","category":"page"},{"location":"reference/formulations.html#PowerModelsITD.AbstractPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractPowerModelITD","text":"Root of the PowerModelsITD formulation hierarchy.\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractNLPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractNLPowerModelITD","text":"Abstract Non-Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractLPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractLPowerModelITD","text":"Abstract Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractIVRPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractIVRPowerModelITD","text":"Abstract Current-Voltage (IVR) ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractBFPowerModelITD","text":"Abstract Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.AbstractLNLBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.AbstractLNLBFPowerModelITD","text":"Abstract Linear/Non-Linear to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Power-ITD-Models","page":"Formulations","title":"Power ITD Models","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"PowerModelITD\nNLPowerModelITD\nLPowerModelITD\nIVRPowerModelITD\nBFPowerModelITD\nNLFOTPowerModelITD\nNLBFPowerModelITD\nLBFPowerModelITD\nWRBFPowerModelITD","category":"page"},{"location":"reference/formulations.html#PowerModelsITD.PowerModelITD","page":"Formulations","title":"PowerModelsITD.PowerModelITD","text":"General PowerModelITD\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.NLPowerModelITD","page":"Formulations","title":"PowerModelsITD.NLPowerModelITD","text":"Non-Linear to Non-Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.LPowerModelITD","page":"Formulations","title":"PowerModelsITD.LPowerModelITD","text":"Linear to Linear ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.IVRPowerModelITD","page":"Formulations","title":"PowerModelsITD.IVRPowerModelITD","text":"IVR to IVR ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.BFPowerModelITD","page":"Formulations","title":"PowerModelsITD.BFPowerModelITD","text":"Branch-flow to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.NLFOTPowerModelITD","page":"Formulations","title":"PowerModelsITD.NLFOTPowerModelITD","text":"Non-Linear to First-Order Taylor (FOT) ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.NLBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.NLBFPowerModelITD","text":"Non-Linear to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.LBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.LBFPowerModelITD","text":"Linear to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#PowerModelsITD.WRBFPowerModelITD","page":"Formulations","title":"PowerModelsITD.WRBFPowerModelITD","text":"WR to Branch-flow ITD formulation\n\n\n\n\n\n","category":"type"},{"location":"reference/formulations.html#Mutable-Stuct-creator","page":"Formulations","title":"Mutable Stuct creator","text":"","category":"section"},{"location":"reference/formulations.html","page":"Formulations","title":"Formulations","text":"@pmitd_fields","category":"page"},{"location":"reference/formulations.html#PowerModelsITD.@pmitd_fields","page":"Formulations","title":"PowerModelsITD.@pmitd_fields","text":"A macro for adding the base PowerModelsITD fields to a type definition.\n\n\n\n\n\n","category":"macro"},{"location":"developer/contributing.html#Contributing","page":"Contributing","title":"Contributing","text":"","category":"section"},{"location":"developer/contributing.html#Pull-Requests","page":"Contributing","title":"Pull Requests","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"All pull requests should be reviewed by a core developer, and may include a review by a subject matter expert if the area of the PR is outside that of one of the core developers. In that case, the core developers will primarily review style and design, rather than substance.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Every PR to PowerModelsITD should strive to meet the following guidelines.","category":"page"},{"location":"developer/contributing.html#PR-Title","page":"Contributing","title":"PR Title","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Should be concise and clear, describing in a phrase the content of the PR\nShould include a prefix that describes the primary type of the PR\nADD: feature addition\nFIX: bugfix\nREF: refactor\nUPD: updates to code for e.g. version bumps of dependencies\nSTY: style changes, no changes to function names, added features, etc.\nDOC: documentation-only additions/changes\nRM: dead code removal","category":"page"},{"location":"developer/contributing.html#PR-Body","page":"Contributing","title":"PR Body","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"If the change is breaking, it should be clearly stated up front\nThe purpose of this PR should be clearly stated right away\nMajor changes / additions to the code should be summarized. In the case where a refactor was performed, the name changes of public functions should be documented in the body of the PR\nAny associated Issues should be referenced in the body of the PR, and it is accepted/encouraged to use Closes #XX to automatically close Issues after the PR is merged","category":"page"},{"location":"developer/contributing.html#PR-Code","page":"Contributing","title":"PR Code","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"An entry should be added to CHANGELOG.md for every PR\nDocumentation should be updated (See Documentation section above for guidelines)\nUnit tests should be added. In the case where existing unit tests were altered, an explanation for the change must be included\nCode should be rebased to the latest version of whatever branch the PR is aimed at (no merge conflicts!)","category":"page"},{"location":"developer/contributing.html#Versions","page":"Contributing","title":"Versions","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"PowerModelsITD follows the Semantic Versioning (SemVer) convention of Major.minor.patch, where Major indicates breaking changes, minor indicates non-breaking feature additions, and patch indicates non-breaking bugfixes.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Currently, because Major==0, minor indicates breaking changes and patch indicates any non-breaking change, including both feature additions and bugfixes. Once PowerModelsITD reaches v1.0.0, we will adhere strictly to the SemVer convention.","category":"page"},{"location":"developer/contributing.html#Branch-Management","page":"Contributing","title":"Branch Management","text":"","category":"section"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"The main branch is a protected branch, meaning that its history will always be contiguous and can never be overwritten.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Release candidate branches of the format vM.m.0-rc are also protected branches. These branches will contain only breaking changes and will not be merged into main until a new version is ready to be tagged. Pull requests including breaking changes should be directed into the next release candidate branch available, e.g. if the current version of the package is v0.9.0, the next release candidate branch will be v0.10.0-rc.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests that include only non-breaking changes can be merged directly into main once approved, and in the case of merge conflicts arising for release candidate branches, the -rc branch will need to be updated to include the latest main.","category":"page"},{"location":"developer/contributing.html","page":"Contributing","title":"Contributing","text":"Pull requests will generally be merged using squash and merge into the branch they are aimed at, with the exception of release candidate branches, which generally be merged using rebase and merge into main.","category":"page"},{"location":"reference/problems.html#ProblemAPI","page":"Problems","title":"Problems","text":"","category":"section"},{"location":"reference/problems.html#Solve-Problems","page":"Problems","title":"Solve Problems","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"solve\")","category":"page"},{"location":"reference/problems.html#PowerModelsITD.solve_dmld_opfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_dmld_opfitd","text":"function solve_dmld_opfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with minimum load delta (dmld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_dmld_opfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_dmld_opfitd","text":"function solve_dmld_opfitd(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with minimum load delta (dmld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_dmld_opfitd_simple-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_dmld_opfitd_simple","text":"function solve_mn_dmld_opfitd_simple(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_dmld_opfitd_simple-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_dmld_opfitd_simple","text":"function solve_mn_dmld_opfitd_simple(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (dmld continuous).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd","text":"function solve_mn_opfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd","text":"function solve_mn_opfitd(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_oltc-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_oltc","text":"function solve_mn_opfitd_oltc(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_oltc-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_oltc","text":"function solve_mn_opfitd_oltc(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_storage-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_storage","text":"function solve_mn_opfitd_storage(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_mn_opfitd_storage-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_mn_opfitd_storage","text":"function solve_mn_opfitd_storage(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_model-Tuple{Dict{String}, Type, Any, Function}","page":"Problems","title":"PowerModelsITD.solve_model","text":"function solve_model(\n pmitd_data::Dict{String,<:Any},\n pmitd_type::Type, optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nInstantiates and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling object from power integrated transmission-distribution input data, pmitd_data. Here, pmitd_type is the integrated power transmission-distribution modeling type, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_model-Tuple{String, String, String, Type, Any, Function}","page":"Problems","title":"PowerModelsITD.solve_model","text":"function solve_model(\n pm_file::String,\n pmd_file::String,\n pmitd_file::String,\n pmitd_type::Type,\n optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nParses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, power distribution, and boundry linking input files pm_file, pmd_file, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork, solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_model-Tuple{String, Vector, String, Type, Any, Function}","page":"Problems","title":"PowerModelsITD.solve_model","text":"function solve_model(\n pm_file::String,\n pmd_files::Vector,\n pmitd_file::String,\n pmitd_type::Type,\n optimizer,\n build_method::Function;\n multinetwork::Bool=false,\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nParses, instantiates, and solves the integrated Transmission (PowerModels) & Distribution (PowerModelsDistribution) modeling objects from power transmission, multiple power distribution systems, and boundary linking input files pm_file, pmd_files vector of files, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type, optimizer is the optimzer used to solve the problem, build_method is the build method for the problem specification being considered, multinetwork is the boolean that defines if the modeling object should be define as multinetwork,solution_processors is the vector of the model solution processors, pmitd_ref_extensions is the array of modeling extensions, and make_si is the boolean that determines if the results are returned in SI or per-unit. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models. The variable auto_rename indicates if the user wants PMITD to automatically rename distribution systems with repeated ckt names. solution_model is a string that determines in which model, ENG or MATH, the solutions are presented. Returns a dictionary of results.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd","text":"function solve_opfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd","text":"function solve_opfitd(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_oltc-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_oltc","text":"function solve_opfitd_oltc(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_oltc-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_oltc","text":"function solve_opfitd_oltc(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_storage-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_storage","text":"function solve_opfitd_storage(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_opfitd_storage-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_opfitd_storage","text":"function solve_opfitd_storage(\n pmitd_data::Dict{String,<:Any},\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_pfitd-NTuple{5, Any}","page":"Problems","title":"PowerModelsITD.solve_pfitd","text":"function solve_pfitd(\n pm_file,\n pmd_file,\n pmitd_file,\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n auto_rename::Bool=false,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.solve_pfitd-Tuple{Dict{String}, Any, Any}","page":"Problems","title":"PowerModelsITD.solve_pfitd","text":"function solve_pfitd(\n pmitd_data::Dict{String,<:Any}\n pmitd_type,\n optimizer;\n solution_processors::Vector{<:Function}=Function[],\n pmitd_ref_extensions::Vector{<:Function}=Vector{Function}([]),\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n make_si::Bool=true,\n solution_model::String=\"eng\",\n kwargs...\n)\n\nSolve Integrated T&D Power Flow\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Builders","page":"Problems","title":"Builders","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"build\")","category":"page"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_dmld_opfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_dmld_opfitd","text":"function build_dmld_opfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with minimum load delta (mld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld) for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_dmld_opfitd_simple-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_dmld_opfitd_simple","text":"function build_mn_dmld_opfitd_simple(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with minimum load delta (mld).\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd","text":"function build_mn_opfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_oltc-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_oltc","text":"function build_mn_opfitd_oltc(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_oltc-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_oltc","text":"function build_mn_opfitd_oltc(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D OLTC Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_oltc-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_oltc","text":"function build_mn_opfitd_oltc(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_mn_opfitd_storage-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_mn_opfitd_storage","text":"function build_mn_opfitd_storage(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Multinetwork Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd","text":"function build_opfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_oltc-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_oltc","text":"function build_opfitd_oltc(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D OLTC Optimal Power Flow for BF Models.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_oltc-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_oltc","text":"function build_opfitd_oltc(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D OLTC Optimal Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_oltc-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_oltc","text":"function build_opfitd_oltc(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D OLTC Optimal Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for BF Models with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow in current-voltage (IV) variable space with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow for L/NL to BF with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_opfitd_storage-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_opfitd_storage","text":"function build_opfitd_storage(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Optimal Power Flow with Storage OPF Dispatch.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractBFPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow for Branch Flow (BF) Formulations.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractIVRPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractIVRPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow in current-voltage (IV) variable space.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractLNLBFPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractLNLBFPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow for L/NL to BF.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#PowerModelsITD.build_pfitd-Tuple{AbstractPowerModelITD}","page":"Problems","title":"PowerModelsITD.build_pfitd","text":"function build_pfitd(\n\tpmitd::AbstractPowerModelITD\n)\n\nConstructor for Integrated T&D Power Flow.\n\n\n\n\n\n","category":"method"},{"location":"reference/problems.html#Model-Instantiation","page":"Problems","title":"Model Instantiation","text":"","category":"section"},{"location":"reference/problems.html","page":"Problems","title":"Problems","text":"instantiate_model","category":"page"},{"location":"reference/problems.html#PowerModelsITD.instantiate_model","page":"Problems","title":"PowerModelsITD.instantiate_model","text":"function instantiate_model(\n pm_file::String,\n pmd_files::Vector,\n pmitd_file::String,\n pmitd_type::Type,\n build_method::Function;\n multinetwork::Bool=false,\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n auto_rename::Bool=false,\n kwargs...\n)\n\nInstantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_files vector, and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.\n\n\n\n\n\nfunction instantiate_model(\n pm_file::String,\n pmd_file::String,\n pmitd_file::String,\n pmitd_type::Type,\n build_method::Function;\n multinetwork::Bool=false,\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n auto_rename::Bool=false,\n kwargs...\n)\n\nInstantiates and returns PowerModelsITD modeling object from power transmission, power distribution, and boundary linking input files pm_file, pmd_file (one file provided), and pmitd_file, respectively. Here, pmitd_type is the integrated power transmission-distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions are the arrays of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.\n\n\n\n\n\nfunction instantiate_model(\n pmitd_data::Dict{String,<:Any},\n pmitd_type::Type,\n build_method::Function;\n multinetwork::Bool=false,\n pmitd_ref_extensions::Vector{<:Function}=Function[],\n eng2math_passthrough::Dict{String,Vector{String}}=Dict{String,Vector{String}}(),\n kwargs...\n)\n\nInstantiates and returns PowerModelsITD modeling object from parsed power transmission and distribution (PMITD) input data pmitd_data. Here, pmitd_type is the integrated power transmission and distribution modeling type and build_method is the build method for the problem specification being considered. multinetwork is the boolean that defines if the modeling object should be define as multinetwork. pmitd_ref_extensions is an array of power transmission and distribution modeling extensions. eng2math_passthrough are the passthrough vectors to be considered by the PMD MATH models.\n\n\n\n\n\n","category":"function"},{"location":"manual/fileformat.html#File-Formats-Guide","page":"File Formats","title":"File Formats Guide","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"In this section, we will give a brief introduction to the file formats supported in PowerModelsITD.jl. Place special attention at the Boundary section to understand how the boundary linking file must be formatted and how the auto_rename=true option works.","category":"page"},{"location":"manual/fileformat.html#File-Formats-Supported","page":"File Formats","title":"File Formats Supported","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Transmission: Matpower \".m\" and PTI \".raw\" files (PSS(R)E v33 specification)\nDistribution: OpenDSS \".dss\" files\nBoundary: JSON \".json\" files","category":"page"},{"location":"manual/fileformat.html#Transmission-System","page":"File Formats","title":"Transmission System","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Matpower (\".m\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"function mpc = case5\nmpc.version = '2';\nmpc.baseMVA = 100.0;\n\n%% bus data\n%\tbus_i\ttype\tPd\tQd\tGs\tBs\tarea\tVm\tVa\tbaseKV\tzone\tVmax\tVmin\nmpc.bus = [\n\t1\t 2\t 0.0\t 0.0\t 0.0\t 0.0\t 1\t 1.07762\t 2.80377\t 230.0\t 1\t 1.10000\t 0.90000;\n\t2\t 1\t 300.0\t 98.61\t 0.0\t 0.0\t 1\t 1.08407\t -0.73465\t 230.0\t 1\t 1.10000\t 0.90000;\n\t3\t 2\t 300.0\t 98.61\t 0.0\t 0.0\t 1\t 1.10000\t -0.55972\t 230.0\t 1\t 1.10000\t 0.90000;\n\t4\t 3\t 390.0\t 131.47\t 0.0\t 0.0\t 1\t 1.06414\t 0.00000\t 230.0\t 1\t 1.10000\t 0.90000;\n\t5\t 1\t 8.0\t 1.2\t 0.0\t 0.0\t 1\t 1.00000\t 0.00000\t 230.0\t 1\t 1.10000\t 0.90000;\n\t10\t 2\t 0.0\t 0.0\t 0.0\t 0.0\t 1\t 1.06907\t 3.59033\t 230.0\t 1\t 1.10000\t 0.90000;\n];\n\n%% generator data\n%\tbus\tPg\tQg\tQmax\tQmin\tVg\tmBase\tstatus\tPmax\tPmin\nmpc.gen = [\n\t1\t 40.0\t 30.0\t 30.0\t -30.0\t 1.07762\t 100.0\t 1\t 40.0\t 0.0;\n\t1\t 170.0\t 127.5\t 127.5\t -127.5\t 1.07762\t 100.0\t 1\t 170.0\t 0.0;\n\t3\t 324.498\t 390.0\t 390.0\t -390.0\t 1.1\t 100.0\t 1\t 520.0\t 0.0;\n\t4\t 0.0\t -10.802\t 150.0\t -150.0\t 1.06414\t 100.0\t 1\t 200.0\t 0.0;\n\t10\t 470.694\t -165.039\t 450.0\t -450.0\t 1.06907\t 100.0\t 1\t 600.0\t 0.0;\n];\n\n%% generator cost data\n%\t2\tstartup\tshutdown\tn\tc(n-1)\t...\tc0\nmpc.gencost = [\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 14.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 15.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 30.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 40.000000\t 0.000000\t 2.000000;\n\t2\t 0.0\t 0.0\t 3\t 0.000000\t 10.000000\t 0.000000\t 2.000000;\n];\n\n%% branch data\n%\tfbus\ttbus\tr\tx\tb\trateA\trateB\trateC\tratio\tangle\tstatus\tangmin\tangmax\nmpc.branch = [\n\t1\t 2\t 0.00281\t 0.0281\t 0.00712\t 400.0\t 400.0\t 400.0\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t1\t 4\t 0.00304\t 0.0304\t 0.00658\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t1\t 10\t 0.00064\t 0.0064\t 0.03126\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t2\t 3\t 0.00108\t 0.0108\t 0.01852\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t3\t 4\t 0.00297\t 0.0297\t 0.00674\t 426\t 426\t 426\t 1.05\t 1.0\t 1\t -30.0\t 30.0;\n\t4\t 10\t 0.00297\t 0.0297\t 0.00674\t 240.0\t 240.0\t 240.0\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n\t2\t 5\t 0.00297\t 0.0297\t 0.00674\t 426\t 426\t 426\t 0.0\t 0.0\t 1\t -30.0\t 30.0;\n];\n","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"PSS(R)E v33 specification (\".raw\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":" 0, 100.00, 33, 0, 0, 60.00\ntests an angle shifting transformer\ntests two winding transformer status\n 1,'1', 230.0000,2, 1, 1, 1,1.00000000, 2.803770, 1.10000, 0.90000, 1.10000, 0.90000\n 2,'2', 230.0000,1, 1, 1, 1,1.08406997, -0.734650, 1.10000, 0.90000, 1.10000, 0.90000\n 3,'3', 230.0000,2, 1, 1, 1,1.00000000, -0.559720, 1.10000, 0.90000, 1.10000, 0.90000\n 4,'4', 230.0000,3, 1, 1, 1,1.06413996, 0.000000, 1.10000, 0.90000, 1.10000, 0.90000\n 5,'5', 230.0000,1, 1, 1, 1,1.00000000, 0.000000, 1.10000, 0.90000, 1.10000, 0.90000\n 10,'10', 230.0000,2, 1, 1, 1,1.00000000, 3.590330, 1.10000, 0.90000, 1.10000, 0.90000\n0 / END OF BUS DATA, BEGIN LOAD DATA\n 2,'1',1, 1, 1, 300.000, 98.610, 0.000, 0.000, 0.000, 0.000, 1,1\n 3,'1',1, 1, 1, 300.000, 98.610, 0.000, 0.000, 0.000, 0.000, 1,1\n 4,'1',1, 1, 1, 390.000, 131.470, 0.000, 0.000, 0.000, 0.000, 1,1\n 5,'1',1, 1, 1, 8.00000, 1.20000, 0.000, 0.000, 0.000, 0.000, 1,1\n0 / END OF LOAD DATA, BEGIN FIXED SHUNT DATA\n0 / END OF FIXED SHUNT DATA, BEGIN GENERATOR DATA\n 1,'1', 40.000, 30.000, 30.000, -30.000,1.07762, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 40.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 1,'2', 170.000, 127.500, 127.500, -127.500,1.07762, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 170.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 3,'1', 324.498, 390.000, 390.000, -390.000,1.10000, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 520.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 4,'1', 0.000, -10.802, 150.000, -150.000,1.06414, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 200.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n 10,'1', 470.694, -165.039, 450.000, -450.000,1.06907, 0, 100.000, 0.00000, 1.00000, 0.00000, 0.00000,1.00000,1, 100.0, 600.000, 0.000, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,0, 1.0000\n0 / END OF GENERATOR DATA, BEGIN BRANCH DATA\n 1, 2,'1',2.81000E-3,2.81000E-2,7.12000E-3, 400.00, 400.00, 400.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 1, 4,'1',3.04000E-3,3.04000E-2,6.58000E-3, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 1, 10,'1',6.40000E-4,6.40000E-3,3.12600E-2, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 2, 3,'1',1.08000E-3,1.08000E-2,1.85200E-2, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 3, 4,'1',2.97000E-3,2.97000E-2,6.74000E-3, 426.00, 426.00, 426.00, 1.05000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 4, 10,'1',2.97000E-3,2.97000E-2,6.74000E-3, 240.00, 240.00, 240.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n 2, 5,'1',2.97000E-3,2.97000E-2,6.74000E-3, 426.00, 426.00, 426.00, 0.00000, 0.00000, 0.00000, 0.00000,1,1, 0.0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000\n0 / END OF BRANCH DATA, BEGIN TRANSFORMER DATA\n 4, 3, 0,'1 ',0,1,1,0.00000E0,6.74000E-3,2,' ',1, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, -1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n 3, 4, 0,'2 ',1,0,1,0.00000E0,6.74000E-3,2,' ',1, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, 1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n 3, 4, 0,'2 ',1,1,0,0.00000E0,6.74000E-3,2,' ',0, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, 1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n 3, 4, 0,'2 ',1,1,1,0.00000E0,6.74000E-3,2,' ',2, 1,1.0000, 0,1.0000, 0,1.0000, 0,1.0000,' '\n2.97000E-3,2.97000E-2, 100.00\n1.050000,230.000, 1.000, 426.00, 426.00, 426.00,-3, 0, 30.00, -30.00, 150.00, 51.00,9601, 0, 0.00000, 0.00000, 0.000\n1.000000,230.000\n0 / END OF TRANSFORMER DATA, BEGIN AREA DATA\n 1, 0, 0.000, 1.000,'1 '\n0 / END OF AREA DATA, BEGIN TWO-TERMINAL DC DATA\n0 / END OF TWO-TERMINAL DC DATA, BEGIN VOLTAGE SOURCE CONVERTER DATA\n0 / END OF VOLTAGE SOURCE CONVERTER DATA, BEGIN IMPEDANCE CORRECTION DATA\n0 / END OF IMPEDANCE CORRECTION DATA, BEGIN MULTI-TERMINAL DC DATA\n0 / END OF MULTI-TERMINAL DC DATA, BEGIN MULTI-SECTION LINE DATA\n0 / END OF MULTI-SECTION LINE DATA, BEGIN ZONE DATA\n 1,'1 '\n0 / END OF ZONE DATA, BEGIN INTER-AREA TRANSFER DATA\n0 / END OF INTER-AREA TRANSFER DATA, BEGIN OWNER DATA\n 1,'1'\n0 / END OF OWNER DATA, BEGIN FACTS CONTROL DEVICE DATA\n0 / END OF FACTS CONTROL DEVICE DATA, BEGIN SWITCHED SHUNT DATA\n0 /END OF SWITCHED SHUNT DATA, BEGIN GNE DEVICE DATA\n0 /END OF GNE DEVICE DATA\nQ","category":"page"},{"location":"manual/fileformat.html#Distribution-System","page":"File Formats","title":"Distribution System","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"OpenDSS (\".dss\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"New Circuit.3bus_bal\n! define a really stiff source\n~ basekv=230 pu=1.00 MVAsc3=200000 MVAsc1=210000\n\n! Substation Transformer\nNew Transformer.SubXF Phases=3 Windings=2 Xhl=0.01\n~ wdg=1 bus=sourcebus conn=wye kv=230 kva=25000 %r=0.0005\n~ wdg=2 bus=Substation conn=wye kv=13.8 kva=25000 %r=0.0005\n\n!Define Linecodes\nNew linecode.556MCM nphases=3 basefreq=60 ! ohms per 5 mile\n~ rmatrix = ( 0.1000 | 0.0400 0.1000 | 0.0400 0.0400 0.1000)\n~ xmatrix = ( 0.0583 | 0.0233 0.0583 | 0.0233 0.0233 0.0583)\n~ cmatrix = (50.92958178940651 | -0 50.92958178940651 | -0 -0 50.92958178940651 ) ! small capacitance\n\nNew linecode.4/0QUAD nphases=3 basefreq=60 ! ohms per 100ft\n~ rmatrix = ( 0.1167 | 0.0467 0.1167 | 0.0467 0.0467 0.1167)\n~ xmatrix = (0.0667 | 0.0267 0.0667 | 0.0267 0.0267 0.0667 )\n~ cmatrix = (50.92958178940651 | -0 50.92958178940651 | -0 -0 50.92958178940651 ) ! small capacitance\n\n!Define lines\nNew Line.OHLine bus1=Substation.1.2.3 Primary.1.2.3 linecode = 556MCM length=1 normamps=6000 emergamps=6000! 5 mile line\nNew Line.Quad Bus1=Primary.1.2.3 loadbus.1.2.3 linecode = 4/0QUAD length=1 normamps=6000 emergamps=6000 ! 100 ft\n\n!Loads - single phase\nNew Load.L1 phases=1 loadbus.1.0 ( 13.8 3 sqrt / ) kW=3000 kvar=1500 model=1\nNew Load.L2 phases=1 loadbus.2.0 ( 13.8 3 sqrt / ) kW=3000 kvar=1500 model=1\nNew Load.L3 phases=1 loadbus.3.0 ( 13.8 3 sqrt / ) kW=3000 kvar=1500 model=1\n\n!GENERATORS DEFINITIONS\nNew generator.gen1 Bus1=loadbus.1.2.3 Phases=3 kV=( 13.8 3 sqrt / ) kW=2000 pf=1 conn=wye Model=3\n\nSet VoltageBases = \"230,13.8\"\nSet tolerance=0.000001\nset defaultbasefreq=60","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: See how the defined file has a unique circuit (ckt) name (i.e., New Circuit.3bus_bal). It is important that for scenarios where multiple distribution systems are to be used, each distribution system file must have a unique ckt name. Otherwise, PowerModelsITD.jl will generate an error indicating the user that they must input distribution systems with unique names (or use the auto_rename=true option explained later).","category":"page"},{"location":"manual/fileformat.html#Boundary","page":"File Formats","title":"Boundary","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"The file shown below shows the ideal format to be used when defining the boundary connections in the JSON file. For transmission system boundary buses, the name of the bus is sufficient. For distribution systems, especially, cases where multiple distribution systems will be inputted, the ideal format for distribution_boundary names is circuit_name.object.name_of_object. In this example, two distribution systems (3bus_unbal and 3bus_bal) are going to be connected to buses 5 and 6 in the transmission system.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"JSON (\".json\")","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"[\n\t{\n \"transmission_boundary\": \"5\",\n \"distribution_boundary\": \"3bus_unbal.voltage_source.source\"\n\t},\n\n\t{\n \"transmission_boundary\": \"6\",\n \"distribution_boundary\": \"3bus_bal.voltage_source.source\"\n }\n]","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"As observed in the file, we follow the ideal format when defining the distribution_boundary names. If this format is not followed (and the auto_rename=true option is not used), errors will be displayed by PowerModelsITD.jl. Errors ranging from \"The distribution bus/source specified in the JSON file does not exists. Please input an existing bus/source!\" to \"Distribution systems have same circuit names! Please use different names for each distribution system. (e.g., New Circuit.NameOfCkt) or use the auto_rename=true option.\" will be displayed warning the user that something is wrong with the JSON file information provided.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"But, what happens when we would like to use the same distribution system file to create multiple dsitribution systems connected at different transmission system boundary buses. In other words, we don't care too much about the names of the distribution circuits, and the boundary names in the JSON file are inputted in a sequential order. Then, for use with caution, PowerModelsITD.jl supports the use of an auto-renaming option that renames repeated circuits in a sequential manner such as: pmd_files = [pmd, pmd, ..., pmd], pmd_cktName_1, pmd_cktName_2, ..., pmd_cktName_n.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: All elements/components inside the pmd=> dictionary will always be renamed based on the format ckt_name.component_name","category":"page"},{"location":"manual/fileformat.html#The-auto_renametrue-Option","page":"File Formats","title":"The auto_rename=true Option","text":"","category":"section"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: Use this option with extreme caution! When this option is used, a @warn will be displayed such that the user is aware that the boundary connections may be wrong because they are assigned/connected in a sequential manner and not based on buses names.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Let's go through an example case where we would like to use the same distribution system file to create a test case where multiple distribution systems (with the same name) are connected to different transmission system boundary buses. And, we don't care about the specific boundary connections since they can be done sequentially (since all or some distribution systems will be a copy of the same circuit and will have the same names).","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Let's first define the test case in Julia:","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = joinpath(dirname(trans_path), \"case5_with2loads.m\")\npmd_file = joinpath(dirname(dist_path), \"case3_unbalanced_withoutgen.dss\")\npmd_files = [pmd_file, pmd_file] # vector of multiple distro. systems copies\npmitd_file = joinpath(dirname(bound_path), \"case5_case3x2.json\")\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\n\nresult = solve_opfitd(pm_file, pmd_files, pmitd_file, pmitd_type, Ipopt.Optimizer; auto_rename=true)","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Another way to define and solve the problem could be (both ways are equivalent):","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"using PowerModelsITD\nusing Ipopt\n\npm_file = joinpath(dirname(trans_path), \"case5_with2loads.m\")\npmd_file = joinpath(dirname(dist_path), \"case3_unbalanced_withoutgen.dss\")\npmd_files = [pmd_file, pmd_file] # vector of multiple distro. systems copies\npmitd_file = joinpath(dirname(bound_path), \"case5_case3x2.json\")\npmitd_type = NLPowerModelITD{ACPPowerModel, ACPUPowerModel}\n\npmitd_data = parse_files(pm_file, pmd_files, pmitd_file; auto_rename=true)\nresult = solve_model(pmitd_data, pmitd_type, Ipopt.Optimizer, build_opfitd)","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Note, how the option auto_rename=true is defined such that PowerModelsITD.jl can understand that we don't care about the specific names of the circuits (because we are repeating ckts) so we are allowing the application to auto-rename the ckts as needed for its correct operation. If the auto_rename option is not defined, errors will be displayed.","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"The JSON file for this example is defined as:","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"[\n\t{\n \"transmission_boundary\": \"5\",\n \"distribution_boundary\": \"voltage_source.source\"\n\t},\n\n\t{\n \"transmission_boundary\": \"6\",\n \"distribution_boundary\": \"voltage_source.source\"\n }\n]","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"See how we do not need to especifically define the circuit names, but we still need to define the object.name_of_object. Internally, PowerModelsITD.jl will parse the files and assign the names: 3bus_unbal_nogen_1 and 3bus_unbal_nogen_2 as the names of the circuits (based on the ckt_name_n standard format).","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"Important Note: In the case where multiple distribuition systems are defined, let's say 3 or more, and only two have the same circuit name, if auto_rename=false (i.e., not used) errors will be displayed, if auto_rename=true only the repeated circuits will be renamed (in this case, all repeated circuits after the first one).","category":"page"},{"location":"manual/fileformat.html","page":"File Formats","title":"File Formats","text":"The auto rename option can be very useful for some cases, but users must be very careful when using it since specific boundary connections are going to be performed in a sequential manner and PowerModelsITD.jl cannot guarantee that this is what the user is expecting. To avoid confusions, we recommend users stick to the ideal boundary linking file JSON format.","category":"page"},{"location":"index.html#![PowerModelsITD-Logo](assets/logo.svg)","page":"Introduction","title":"(Image: PowerModelsITD Logo)","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"CurrentModule = PowerModelsITD","category":"page"},{"location":"index.html#What-is-PowerModelsITD.jl?","page":"Introduction","title":"What is PowerModelsITD.jl?","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"PowerModelsITD.jl is a Julia/JuMP-based package for modeling and optimizing integrated transmission-distribution (ITD) power networks.","category":"page"},{"location":"index.html#Resources-for-Getting-Started","page":"Introduction","title":"Resources for Getting Started","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Installation Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the Quickstart Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the File Formats Guide.","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"Read the introductory tutorial Introduction to PowerModelsITD.jl.","category":"page"},{"location":"index.html#How-the-documentation-is-structured","page":"Introduction","title":"How the documentation is structured","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The following is a high-level overview of how our documentation is structured. There are three primary sections:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"The Manual contains detailed documentation for certain aspects of PowerModelsITD.jl, such as the Data Models, the Network Formulations, or the Optimization Problem Specifications.\nTutorials contains working examples of how to use PowerModelsITD.jl. Start here if you are new to PowerModelsITD.jl.\nThe API Reference contains a complete list of the functions you can use in PowerModelsITD.jl. Look here if you want to know how to use a particular function.","category":"page"},{"location":"index.html#Citing-PowerModelsITD.jl","page":"Introduction","title":"Citing PowerModelsITD.jl","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"If you find PowerModelsITD useful for your work, we kindly request that you cite the following publication:","category":"page"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"@article{ospina2023modeling,\n author={Ospina, Juan and Fobes, David M. and Bent, Russell and Wächter, Andreas},\n journal={IEEE Transactions on Power Systems},\n title={Modeling and Rapid Prototyping of Integrated Transmission-Distribution OPF Formulations with PowerModelsITD.jl},\n year={2023},\n volume={},\n number={},\n pages={1-14},\n doi={10.1109/TPWRS.2023.3234725}}","category":"page"},{"location":"index.html#Acknowledgments","page":"Introduction","title":"Acknowledgments","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"This code has been developed with the support of the Grant: \"Optimized Resilience for Distribution and Transmission Systems\" funded by the U.S. Department of Energy (DOE) Office of Electricity (OE) Advanced Grid Modeling (AGM) Research Program under program manager Ali Ghassemian. The research work conducted at Los Alamos National Laboratory is done under the auspices of the National Nuclear Security Administration of the U.S. Department of Energy under Contract No. 89233218CNA000001. The primary developers are Juan Ospina (@juanjospina) and David Fobes (@pseudocubic).","category":"page"},{"location":"index.html#License","page":"Introduction","title":"License","text":"","category":"section"},{"location":"index.html","page":"Introduction","title":"Introduction","text":"This code is provided under a BSD license as part of the Multi-Infrastructure Control and Optimization Toolkit (MICOT) project, LA-CC-13-108.","category":"page"},{"location":"reference/internal.html#Internal-Functions","page":"Internal Functions","title":"Internal Functions","text":"","category":"section"},{"location":"reference/internal.html","page":"Internal Functions","title":"Internal Functions","text":"Modules = [PowerModelsITD]\nPublic = false","category":"page"},{"location":"reference/internal.html#PowerModelsITD._add_file_name!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._add_file_name!","text":"function _add_file_name!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any}\n)\n\nAdds filename from data to \"files\" dictionary in pmd (base_data).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._assign_boundary_buses!-Tuple{Dict{String}, Any}","page":"Internal Functions","title":"PowerModelsITD._assign_boundary_buses!","text":"function _assign_boundary_buses!(\n data::Dict{String,<:Any},\n conn;\n multinetwork::Bool=false,\n nw::String=\"0\"\n)\n\nHelper function for assigning boundary buses. data is the pmitd dictionary containing the boundary information, conn is the boundary connection information, multinetwork is the boolean that defines if there are multinetwork boundary buses to be assigned, and nw is the network number.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._check_and_rename_circuits!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._check_and_rename_circuits!","text":"function _check_and_rename_circuits!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any};\n auto_rename::Bool=false,\n ms_num::Int=1\n)\n\nChecks if the name of the data ckt already exists, if so and auto_rename=false an error should be displayed telling the user that they must use the different ckt names when parsing multiple distribution systems. If auto_rename=true, PMITD will rename the repeated ckt name to repeatedCktName_(ms_num). Finally, adds the ckt name of data to \"cktnames\" in the `basedata` dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._clean_pmd_base_data!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._clean_pmd_base_data!","text":"function _clean_pmd_base_data!(\n base_data::Dict{String,<:Any}\n)\n\nRemoves/Cleans components from base_data pmd dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_boundary_active_power_start_values_distribution-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._compute_boundary_active_power_start_values_distribution","text":"function _compute_boundary_active_power_start_values_distribution(\n nw_ref::Dict{Symbol,<:Any}\n)\n\nComputes the starting values for pbound_to variables. Returns dictionary with summation of the activate power loads. Returns dictionary with the summation of the active power loads for each dist. system.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_boundary_reactive_power_start_values_distribution-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._compute_boundary_reactive_power_start_values_distribution","text":"function _compute_boundary_reactive_power_start_values_distribution(\n nw_ref::Dict{Symbol,<:Any}\n)\n\nComputes the starting values for qbound_to and adds them to ref. Returns dictionary with the summation of the reactive power loads for each dist. system.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_default_strg_cost_distribution-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._compute_default_strg_cost_distribution","text":"function _compute_default_strg_cost_distribution(\n strg_data::Dict{String,<:Any}\n)\n\nComputes a default cost for the energy storage (distribution). Returns the default storage cost to be added to the data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._compute_default_strg_cost_transmission-Tuple{Dict{String}, Float64}","page":"Internal Functions","title":"PowerModelsITD._compute_default_strg_cost_transmission","text":"function _compute_default_strg_cost_transmission(\n strg_data::Dict{String,<:Any},\n baseMVA::Float64\n)\n\nComputes a default cost for the energy storage (transmission). Returns the default storage cost to be added to the data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._convert_to_pmitd_structure-Tuple{Vector{Any}}","page":"Internal Functions","title":"PowerModelsITD._convert_to_pmitd_structure","text":"function _convert_to_pmitd_structure(\n data::Vector{Any}\n)\n\nConverts json data parsed into the required pmitd structure. Returns the new data structure with necessary information and compatible names.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._correct_boundary_names!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._correct_boundary_names!","text":"function _correct_boundary_names!(\n pmitd_data::Dict{String,<:Any}\n)\n\nCorrects the names of distribution system boundary buses given in boundary linking file based on the cktnames stored in the \"pmd\"=>\"cktnames\". The correction is done sequentially, so each distribution boundary bus name will be assigned the specific ckt name that exists in the numerical position of the vector \"cktnames\". This process should only be applied when users explicitly use the option `autorename=true, and awarning` is displayed warning the user that the boundaries may not be correct.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._get_powermodel_from_powermodelitd-Tuple{AbstractPowerModelITD}","page":"Internal Functions","title":"PowerModelsITD._get_powermodel_from_powermodelitd","text":"function _get_powermodel_from_powermodelitd(\n pm::AbstractPowerModelITD\n)\n\nGets the PM model from the PMITD model structure.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._get_powermodeldistribution_from_powermodelitd-Tuple{AbstractPowerModelITD}","page":"Internal Functions","title":"PowerModelsITD._get_powermodeldistribution_from_powermodelitd","text":"function _get_powermodeldistribution_from_powermodelitd(\n pmd::AbstractPowerModelITD\n)\n\nGets the PMD model from the PMITD model structure.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad","text":"function _objective_itd_min_fuel_cost_polynomial_linquad(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic (IVR formulation).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad","text":"function _objective_itd_min_fuel_cost_polynomial_linquad(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage","text":"function _objective_itd_min_fuel_cost_polynomial_linquad_storage(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic (IVR formulation) with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_linquad_storage","text":"function _objective_itd_min_fuel_cost_polynomial_linquad_storage(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl","text":"function _objective_itd_min_fuel_cost_polynomial_nl(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear (IVR formulation).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl","text":"function _objective_itd_min_fuel_cost_polynomial_nl(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage-Tuple{AbstractIVRPowerModelITD, PowerModels.AbstractIVRModel, PowerModelsDistribution.AbstractUnbalancedIVRModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage","text":"function _objective_itd_min_fuel_cost_polynomial_nl_storage(\n pmitd::AbstractIVRPowerModelITD,\n pm::_PM.AbstractIVRModel,\n pmd::_PMD.AbstractUnbalancedIVRModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear (IVR formulation) with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_cost_polynomial_nl_storage","text":"function _objective_itd_min_fuel_cost_polynomial_nl_storage(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear with storage.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta","text":"function _objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic for transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta_simple","text":"function _objective_itd_min_fuel_polynomial_linquad_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms linear-quadratic for transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta","text":"function _objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear for transmission and load setpoint delta for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta_simple-Tuple{AbstractPowerModelITD, PowerModels.AbstractPowerModel, PowerModelsDistribution.AbstractUnbalancedPowerModel}","page":"Internal Functions","title":"PowerModelsITD._objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta_simple","text":"function _objective_itd_min_fuel_polynomial_nl_distribution_load_setpoint_delta_simple(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractPowerModel,\n pmd::_PMD.AbstractUnbalancedPowerModel\n)\n\nFuel cost minimization objective for polynomial terms non-linear for transmission and load setpoint delta (continuous load shed) for distribution.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_connect_transmission_distribution!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_connect_transmission_distribution!","text":"function _ref_connect_transmission_distribution!(\n ref::Dict{Symbol,<:Any}\n)\n\nCreates the boundary refs that integrate/connect the transmission and distribution system bus(es).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_filter_distribution_slack_generators!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_filter_distribution_slack_generators!","text":"function _ref_filter_distribution_slack_generators!(\n ref::Dict{Symbol,<:Any}\n)\n\nRemoves/filters-out the slack generators at buses/nodes where the transmission system is going to be integrated/connected.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_filter_transmission_integration_loads!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_filter_transmission_integration_loads!","text":"function _ref_filter_transmission_integration_loads!(\n ref::Dict{Symbol,<:Any}\n)\n\nRemoves/filters-out the loads at buses (i.e., boundary buses) where distribution systems are going to be integrated/connected.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._ref_remove_refbus_distribution!-Tuple{Dict{Symbol}}","page":"Internal Functions","title":"PowerModelsITD._ref_remove_refbus_distribution!","text":"function _ref_remove_refbus_distribution!(\n ref::Dict{Symbol,<:Any}\n)\n\nRemoves the reference(slack) bus in the distribution system(s).\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._remove_network_components!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._remove_network_components!","text":"function _remove_network_components!(\n base_data::Dict{String,<:Any}\n)\n\nRemoves components from base_data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._rename_components!-Tuple{Dict{String}, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._rename_components!","text":"function _rename_components!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any}\n)\n\nRenames the components given in data for new multi-system and adds the renamed components to base_data dictionary structure. cktname.element\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._rename_network_components!-Tuple{Dict{String}, Dict{String}, String}","page":"Internal Functions","title":"PowerModelsITD._rename_network_components!","text":"function _rename_network_components!(\n base_data::Dict{String,<:Any},\n data::Dict{String,<:Any},\n ckt_name::String\n)\n\nRename specific components in single network dictionary. base_data is the dictionary where the renamed components are to be added, data is the dictionary containing the components to be renamed. ckt_name is the circuit name of data.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._scale_loads!-Tuple{Dict{String}, Real}","page":"Internal Functions","title":"PowerModelsITD._scale_loads!","text":"function _scale_loads!(\n p_data::Dict{String,<:Any},\n scalar::Real\n)\n\nScales loads based on the scalar passed as second argument. p_data is the dictionary that contains the loads to be scaled. scalar is the float value used to scale all the loads in the p_data dictionary.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._transform_pmitd_solution_to_si!-Tuple{Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._transform_pmitd_solution_to_si!","text":"function _transform_pmitd_solution_to_si!(\n result::Dict{String,<:Any}\n)\n\nTransforms the PMITD solution from per-unit (pu) to SI units.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._transform_solution_to_pu!-Tuple{Any, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._transform_solution_to_pu!","text":"function _transform_solution_to_pu!(\n result,\n pmitd_data::Dict{String,<:Any};\n make_si::Bool=false,\n multinetwork::Bool=false,\n solution_model::String=\"eng\"\n)\n\nTransforms the PM and PMD solutions from SI units to per-unit (pu), and the PMD solution from MATH back to ENG model.\n\n\n\n\n\n","category":"method"},{"location":"reference/internal.html#PowerModelsITD._transform_solution_to_si!-Tuple{Any, Dict{String}}","page":"Internal Functions","title":"PowerModelsITD._transform_solution_to_si!","text":"function _transform_solution_to_si!(\n result,\n pmitd_data::Dict{String,<:Any};\n make_si::Bool=true,\n multinetwork::Bool=false,\n solution_model::String=\"eng\"\n)\n\nTransforms the PM and PMD solutions from per-unit (pu) to SI units, and the PMD solution from MATH back to ENG model.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#ConstraintAPI","page":"Constraints","title":"Constraints","text":"","category":"section"},{"location":"reference/constraints.html","page":"Constraints","title":"Constraints","text":"Modules = [PowerModelsITD]\nPrivate = false\nOrder = [:function]\nFilter = t -> startswith(string(t), \"constraint\")","category":"page"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_current-Tuple{AbstractIVRPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_current","text":"function constraint_boundary_current(\n pmitd::AbstractIVRPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nBoundary power constraints based on rectangular currents (I) for AbstractIVRPowerModelITD.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_power-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_power","text":"function constraint_boundary_power(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nBoundary power constraints for AbstractPowerModelITD.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_power-Tuple{LPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_power","text":"function constraint_boundary_power(\n pmitd::LPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nBoundary power constraints for LPowerModelITD (Linear versions - Active P only).\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACPPowerModel, ACPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.ACPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACP-ACPU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACPPowerModel, FOTPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.FOTPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACP-FOTPU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACRPowerModel, ACRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.ACRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACR-ACRU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACRPowerModel, FBSUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FBSUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FBSU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{ACRPowerModel, FOTRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FOTRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FOTRU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nGeneral voltage angle boundary constraint.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{DCPPowerModel, DCPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.DCPPowerModel,\n pmd::_PMD.DCPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nDCP-DCPU boundary bus voltage angle constraints: DCP angle.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{IVRPowerModel, IVRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.IVRPowerModel,\n pmd::_PMD.IVRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nIVR-IVRU boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{NFAPowerModel, NFAUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.NFAPowerModel,\n pmd::_PMD.NFAUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nNFA-NFAU boundary bus voltage angle constraints: empty NFA angle.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractBFAModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractBFAModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nBFA-LinDist3FlowPowerModel boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSDPWRMModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSDPWRMModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSDPWRM-SOCConicUBF boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCBFConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCBFConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBFConic-SOCUBFConic boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCBFModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nSOCBF-LinDist3FlowPowerModel boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCBFModel, SOCNLPUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.SOCNLPUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBF-SOCNLUBF boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_angle-Tuple{PowerModels.AbstractSOCWRConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_angle","text":"function constraint_boundary_voltage_angle(\n pm::_PM.AbstractSOCWRConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCWRConic-SOCConicUBF boundary bus voltage angle constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACPPowerModel, ACPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.ACPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACP-ACPU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACPPowerModel, FOTPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACPPowerModel,\n pmd::_PMD.FOTPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACP-FOTPU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACRPowerModel, ACRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.ACRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nACR-ACRU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACRPowerModel, FBSUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FBSUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FBSU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{ACRPowerModel, FOTRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.ACRPowerModel,\n pmd::_PMD.FOTRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nACR-FOTRU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{AbstractPowerModelITD, Int64}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pmitd::AbstractPowerModelITD,\n i::Int;\n nw::Int=nw_id_default\n)\n\nGeneral voltage magnitude boundary constraint.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{DCPPowerModel, DCPUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.DCPPowerModel,\n pmd::_PMD.DCPUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nDCP-DCPU boundary bus voltage magnitude constraints: empty since DC keeps vm = 1 for all.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{IVRPowerModel, IVRUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.IVRPowerModel,\n pmd::_PMD.IVRUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nIVR-IVRU boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{NFAPowerModel, NFAUPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.NFAPowerModel,\n pmd::_PMD.NFAUPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nNFA-NFAU boundary bus voltage magnitude constraints: empty NFA.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractBFAModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractBFAModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nBFA-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSDPWRMModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSDPWRMModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSDPWRM-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCBFConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCBFConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBFConic-SOCUBFConic boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCBFModel, LPUBFDiagPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.LPUBFDiagPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int=nw_id_default\n)\n\nSOCBF-LinDist3FlowPowerModel boundary bus voltage magnitude constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCBFModel, SOCNLPUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCBFModel,\n pmd::_PMD.SOCNLPUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCBF-SOCNLUBF boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_boundary_voltage_magnitude-Tuple{PowerModels.AbstractSOCWRConicModel, SOCConicUBFPowerModel, Int64, Tuple{Int64, Int64, Int64}, Vector{Int64}, Vector{Int64}}","page":"Constraints","title":"PowerModelsITD.constraint_boundary_voltage_magnitude","text":"function constraint_boundary_voltage_magnitude(\n pm::_PM.AbstractSOCWRConicModel,\n pmd::_PMD.SOCConicUBFPowerModel,\n i::Int,\n f_idx::Tuple{Int,Int,Int},\n f_connections::Vector{Int},\n t_connections::Vector{Int};\n nw::Int = nw_id_default\n)\n\nSOCWRConic-SOCConicUBF boundary bus voltage magnitude (W variables) constraints.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_current_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedIVRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_current_balance","text":"function constraint_distribution_current_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedIVRModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nIVRU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_current_balance_boundary-Tuple{AbstractIVRPowerModelITD, Int64, Int64, Vector}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_current_balance_boundary","text":"function constraint_distribution_current_balance_boundary(\n pmitd::AbstractIVRPowerModelITD,\n i::Int,\n j::Int,\n boundary_buses::Vector;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral current balance contraints for boundary buses in the distribution system-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractBFPowerModelITD, LPUBFDiagPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractBFPowerModelITD,\n pmd::_PMD.LPUBFDiagPowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nLinDist3FlowPowerModel distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, FBSUBFPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.FBSUBFPowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nFBSU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, FOTPUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.FOTPUPowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nFOTPU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, FOTRUPowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.FOTRUPowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nFOTRU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedACPModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedACPModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nACPU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedACRModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedACRModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nACRU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedActivePowerModel, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedActivePowerModel,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nDCPU/NFAU distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance-Tuple{AbstractPowerModelITD, PowerModelsDistribution.AbstractUnbalancedWModels, Int64, Int64, Int64, Vector{Int64}, Vector{Bool}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Tuple{Int64, Int64, Int64}, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Vector{Tuple{Int64, Vector{Int64}}}, Any}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance","text":"function constraint_distribution_power_balance(\n pmitd::AbstractPowerModelITD,\n pmd::_PMD.AbstractUnbalancedWModels,\n n::Int,\n j::Int,\n i::Int,\n terminals::Vector{Int},\n grounded::Vector{Bool},\n bus_arcs::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_sw::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_arcs_trans::Vector{Tuple{Tuple{Int,Int,Int},Vector{Int}}},\n bus_gens::Vector{Tuple{Int,Vector{Int}}},\n bus_storage::Vector{Tuple{Int,Vector{Int}}},\n bus_loads::Vector{Tuple{Int,Vector{Int}}},\n bus_shunts::Vector{Tuple{Int,Vector{Int}}},\n bus_arcs_boundary_to\n)\n\nUnbalanced W models distribution constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_distribution_power_balance_boundary-Tuple{AbstractPowerModelITD, Int64, Int64, Vector}","page":"Constraints","title":"PowerModelsITD.constraint_distribution_power_balance_boundary","text":"function constraint_distribution_power_balance_boundary(\n pmitd::AbstractPowerModelITD,\n i::Int,\n j::Int,\n boundary_buses::Vector;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral power balance contraints for boundary buses in the distribution system-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_current_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractIVRModel, Int64, Int64, Int64, Vararg{Any, 8}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_current_balance","text":"function constraint_transmission_current_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractIVRModel,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_gens,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nIVR transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_current_balance_boundary-Tuple{AbstractIVRPowerModelITD, Int64, Int64, Vector}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_current_balance_boundary","text":"function constraint_transmission_current_balance_boundary(\n pmitd::AbstractIVRPowerModelITD,\n i::Int,\n j::Int,\n boundary_buses::Vector;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral current balance contraints for boundary buses in the transmission system-side.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractACPModel, Int64, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractACPModel,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nACP transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractACRModel, Int64, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractACRModel,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nACR transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, PowerModels.AbstractActivePowerModel, Int64, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractActivePowerModel,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nDCP/NFA transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance-Tuple{AbstractPowerModelITD, Union{PowerModels.AbstractACTModel, PowerModels.AbstractBFModel, PowerModels.AbstractWRConicModel, PowerModels.AbstractWRMModel, PowerModels.AbstractWRModel}, Int64, Int64, Int64, Vararg{Any, 10}}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance","text":"function constraint_transmission_power_balance(\n pmitd::AbstractPowerModelITD,\n pm::_PM.AbstractWModels,\n n::Int,\n j::Int,\n i::Int,\n bus_arcs,\n bus_arcs_dc,\n bus_arcs_sw,\n bus_gens,\n bus_storage,\n bus_pd,\n bus_qd,\n bus_gs,\n bus_bs,\n bus_arcs_boundary_from\n)\n\nW Models (e.g., SOCBF) transmission constraint power balance.\n\n\n\n\n\n","category":"method"},{"location":"reference/constraints.html#PowerModelsITD.constraint_transmission_power_balance_boundary-Tuple{AbstractPowerModelITD, Int64, Int64, Vector}","page":"Constraints","title":"PowerModelsITD.constraint_transmission_power_balance_boundary","text":"function constraint_transmission_power_balance_boundary(\n pmitd::AbstractPowerModelITD,\n i::Int,\n j::Int,\n boundary_buses::Vector;\n nw_pmitd::Int=nw_id_default\n)\n\nGeneral power balance contraints for boundary buses in the transmission system-side.\n\n\n\n\n\n","category":"method"}] } diff --git a/dev/tutorials/BeginnersGuide.html b/dev/tutorials/BeginnersGuide.html index 58218b7..744a457 100644 --- a/dev/tutorials/BeginnersGuide.html +++ b/dev/tutorials/BeginnersGuide.html @@ -1,5 +1,5 @@ -Beginners Guide · PowerModelsITD.jl

Introduction to PowerModelsITD

In this guide, we will go through a beginner guide that demonstrates the current capabilities of PowerModelsITD. This guide will showcase a non-comprehensive list of things you can do with PowerModelsITD.

Each example case shown in this guide will be divided into three main parts.

  • (1) Brief explanation of the test case and what we want to do/obtain.
  • (2) The Julia code needed to perform the specific case study (users can copy and paste this code directly).
  • (3) The console output obtained when the code is executed.

Important: All files used in this beginner guide are available in the /test/data folder of the repository.

Example Case #1: Solving a simple Optimal Power Flow for Integrated Transmission-Distribution systems (OPFITD)

Test Case #1

In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

Julia Code for Test Case #1

using PowerModelsITD
+Beginners Guide · PowerModelsITD.jl

Introduction to PowerModelsITD

In this guide, we will go through a beginner guide that demonstrates the current capabilities of PowerModelsITD. This guide will showcase a non-comprehensive list of things you can do with PowerModelsITD.

Each example case shown in this guide will be divided into three main parts.

  • (1) Brief explanation of the test case and what we want to do/obtain.
  • (2) The Julia code needed to perform the specific case study (users can copy and paste this code directly).
  • (3) The console output obtained when the code is executed.

Important: All files used in this beginner guide are available in the /test/data folder of the repository.

Example Case #1: Solving a simple Integrated T&D Optimal Power Flow (OPFITD)

Test Case #1

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

Julia Code for Test Case #1

using PowerModelsITD
 using Ipopt
 
 silence!()  # Silences the console, so warning messages or information are not displayed
@@ -26,7 +26,7 @@
 
 [ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}("line" => Dict{String, Any}("3bus_unbal.quad" => Dict{String, Any}("qf" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], "qt" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], "pt" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], "pf" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), "3bus_unbal.ohline" => Dict{String, Any}("qf" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], "qt" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], "pt" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], "pf" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal.subxf" => Dict{String, Any}("q" => [[1354.7952022418647, 1507.3400640138161, 1504.5761375753734], [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072]], "p" => [[3367.1286152278885, 2346.3702946258413, 2354.835193007617], [-3367.110727286094, -2346.3597337552624, -2354.8245890269895]])), "generator" => Dict{String, Any}("3bus_unbal.gen1" => Dict{String, Any}("qg_bus" => [-0.0, -0.0, -0.0], "qg" => [-0.0, -0.0, -0.0], "pg" => [666.6676628468832, 666.6676628064197, 666.6676628099706], "pg_bus" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), "load" => Dict{String, Any}("3bus_unbal.l2" => Dict{String, Any}("qd_bus" => [1500.0000000000002], "pd_bus" => [3000.0000000000005], "qd" => [1500.0000000000002], "pd" => [3000.0000000000005]), "3bus_unbal.l3" => Dict{String, Any}("qd_bus" => [1500.0000000000002], "pd_bus" => [3000.0000000000005], "qd" => [1500.0000000000002], "pd" => [3000.0000000000005]), "3bus_unbal.l1" => Dict{String, Any}("qd_bus" => [1333.3300000000002], "pd_bus" => [4000.0], "qd" => [1333.3300000000002], "pd" => [4000.0])), "bus" => Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("va" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], "vm" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), "3bus_unbal.substation" => Dict{String, Any}("va" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], "vm" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), "3bus_unbal.primary" => Dict{String, Any}("va" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], "vm" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505]), "3bus_unbal.sourcebus" => Dict{String, Any}("va" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], "vm" => [124.83030630100751, 124.83048117738736, 124.8306695534823])), "per_unit" => false)
 
-[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}("multinetwork" => false, "boundary" => Dict{String, Any}("(100001, 5, voltage_source.3bus_unbal.source)" => Dict{String, Any}("pbound_fr" => [8068.452673591816], "qbound_fr" => [4367.184067738673]), "(100001, voltage_source.3bus_unbal.source, 5)" => Dict{String, Any}("pbound_to" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], "qbound_to" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369])))

Example Case #2: Solving a simple Multinetwork (Time-series) Multisystem (Multiple Distribution Systems) OPFITD

Test Case #2

In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a Multinetwork case where we have the PJM 5-bus system (case5_with2loads) as the transmission system and two copies of the IEEE 4 Node Test Feeder (case3_unbalanced_withoutgen_mn.dss) as the distribution systems, where each distribution system has load profiles for their respective loads for four timesteps. The boundary information that specifies the respective boundary buses for both the transmission and dsitribution systems can be found in case5_case3x2.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

Julia Code for Test Case #2

using PowerModelsITD
+[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}("multinetwork" => false, "boundary" => Dict{String, Any}("(100001, 5, voltage_source.3bus_unbal.source)" => Dict{String, Any}("pbound_fr" => [8068.452673591816], "qbound_fr" => [4367.184067738673]), "(100001, voltage_source.3bus_unbal.source, 5)" => Dict{String, Any}("pbound_to" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], "qbound_to" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369])))

Example Case #2: Solving a Multinetwork (Time-series) Multisystem (Multiple Distribution Systems) OPFITD

Test Case #2

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a Multinetwork case where we have the PJM 5-bus system (case5_with2loads) as the transmission system and two copies of the IEEE 4 Node Test Feeder (case3_unbalanced_withoutgen_mn.dss) as the distribution systems, where each distribution system has load profiles for their respective loads for four timesteps. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3x2.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

Julia Code for Test Case #2

using PowerModelsITD
 using Ipopt
 
 silence!()  # Silences the console, so warning messages or information are not displayed
@@ -53,7 +53,7 @@
 
 [ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}("nw" => Dict{String, Dict{String, Any}}("4" => Dict("line" => Dict{String, Any}("3bus_unbal_nogen_mn.ohline" => Dict{String, Any}("qf" => [400.5777180879746, 449.1439873945076, 448.7567158126756], "qt" => [-400.3834881406001, -449.61753973455666, -449.40808066075476], "pt" => [-1202.2047813968609, -900.9716820211081, -901.437570378043], "pf" => [1204.092342226798, 901.8028241168121, 902.6707125959695]), "3bus_unbal_nogen_mn_2.quad" => Dict{String, Any}("qf" => [400.3857159633698, 449.61909326817045, 449.40944838966254], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.206724198158, 900.9725348138786, 901.4388339186033]), "3bus_unbal_nogen_mn.quad" => Dict{String, Any}("qf" => [400.3834881406001, 449.61753973455666, 449.40808066075476], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2047813968609, 900.9716820211081, 901.437570378043]), "3bus_unbal_nogen_mn_2.ohline" => Dict{String, Any}("qf" => [400.5820103770306, 449.147016724407, 448.75940230925625], "qt" => [-400.3857159633698, -449.61909326817045, -449.40944838966254], "pt" => [-1202.206724198158, -900.9725348138786, -901.4388339186033], "pf" => [1204.0959489625075, 901.8044071741432, 902.673061143103])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal_nogen_mn_2.subxf" => Dict{String, Any}("q" => [[400.60383553276677, 449.1607731500957, 448.77317528774904], [-400.5820103770306, -449.147016724407, -448.75940230925625]], "p" => [[1204.0981313859945, 901.8057826939303, 902.6744388456775], [-1204.0959489625075, -901.8044071741432, -902.673061143103]]), "3bus_unbal_nogen_mn.subxf" => Dict{String, Any}("q" => [[400.59952401926625, 449.1577317466543, 448.77047663804154], [-400.5777180879746, -449.1439873945076, -448.7567158126756]], "p" => [[1204.0945224674979, 901.804198545205, 902.672088661453], [-1204.092342226798, -901.8028241168121, -902.6707125959695]])), "load" => Dict{String, Any}("3bus_unbal_nogen_mn_2.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn_2.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn_2.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001])), "bus" => Dict{String, Any}("3bus_unbal_nogen_mn.loadbus" => Dict{String, Any}("va" => [-0.8302295799057324, -120.79137859901346, 119.2504000096645], "vm" => [7.472201725143692, 7.48392238161073, 7.479449806375467]), "3bus_unbal_nogen_mn.sourcebus" => Dict{String, Any}("va" => [-0.7706229194665752, -120.77035368944988, 119.22965458272802], "vm" => [125.00492912857915, 125.0049742054994, 125.00503001738106]), "3bus_unbal_nogen_mn.primary" => Dict{String, Any}("va" => [-0.7991413115394987, -120.78074600616584, 119.23848685007212], "vm" => [7.487284000425346, 7.492696895897028, 7.490619086774545]), "3bus_unbal_nogen_mn_2.primary" => Dict{String, Any}("va" => [-0.855042232531755, -120.83663088144945, 119.18261888118052], "vm" => [7.484002753336548, 7.489418049928727, 7.487339328524334]), "3bus_unbal_nogen_mn.substation" => Dict{String, Any}("va" => [-0.7715260550666929, -120.77101852028557, 119.22898904907676], "vm" => [7.500242832893439, 7.500243675517293, 7.50024705477223]), "3bus_unbal_nogen_mn_2.sourcebus" => Dict{String, Any}("va" => [-0.8264989754781323, -120.82622950863666, 119.173778769923], "vm" => [124.95033736057859, 124.95038246062096, 124.95043829748143]), "3bus_unbal_nogen_mn_2.substation" => Dict{String, Any}("va" => [-0.8274029028977026, -120.8268949215367, 119.17311265297246], "vm" => [7.496967303220576, 7.496968146567504, 7.496971527361585]), "3bus_unbal_nogen_mn_2.loadbus" => Dict{String, Any}("va" => [-0.8861577649359917, -120.84727282112708, 119.19454256329932], "vm" => [7.468913830909152, 7.480639684348965, 7.476165145424161])), "per_unit" => false), "1" => Dict("line" => Dict{String, Any}("3bus_unbal_nogen_mn.ohline" => Dict{String, Any}("qf" => [400.57771808779745, 449.1439873947322, 448.7567158126303], "qt" => [-400.38348814059987, -449.6175397346913, -449.40808066071014], "pt" => [-1202.204781396862, -900.9716820213755, -901.4375703783082], "pf" => [1204.09234222689, 901.8028241171684, 902.6707125964111]), "3bus_unbal_nogen_mn_2.quad" => Dict{String, Any}("qf" => [400.3857159634153, 449.6190932679933, 449.40944838961826], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2067241982484, 900.9725348139676, 901.4388339183369]), "3bus_unbal_nogen_mn.quad" => Dict{String, Any}("qf" => [400.38348814059987, 449.6175397346913, 449.40808066071014], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.204781396862, 900.9716820213755, 901.4375703783082]), "3bus_unbal_nogen_mn_2.ohline" => Dict{String, Any}("qf" => [400.5820103772543, 449.14701672423075, 448.75940230921145], "qt" => [-400.3857159634153, -449.6190932679933, -449.40944838961826], "pt" => [-1202.2067241982484, -900.9725348139676, -901.4388339183369], "pf" => [1204.095948962688, 901.8044071742323, 902.6730611427464])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal_nogen_mn_2.subxf" => Dict{String, Any}("q" => [[400.60383553298436, 449.16077317266615, 448.77317528770436], [-400.5820103772543, -449.14701672423075, -448.75940230921145]], "p" => [[1204.0981315680738, 901.8057830578177, 902.6744392091184], [-1204.095948962688, -901.8044071742323, -902.6730611427464]]), "3bus_unbal_nogen_mn.subxf" => Dict{String, Any}("q" => [[400.59952401908913, 449.15773174687035, 448.7704766493643], [-400.57771808779745, -449.1439873947322, -448.7567158126303]], "p" => [[1204.0945221037925, 901.8041985455613, 902.6720886618943], [-1204.09234222689, -901.8028241171684, -902.6707125964111]])), "load" => Dict{String, Any}("3bus_unbal_nogen_mn_2.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn_2.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn_2.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001])), "bus" => Dict{String, Any}("3bus_unbal_nogen_mn.loadbus" => Dict{String, Any}("va" => [-0.830229579920092, -120.79137859902801, 119.25040000964974], "vm" => [7.4722017251430914, 7.483922381610104, 7.479449806374842]), "3bus_unbal_nogen_mn.sourcebus" => Dict{String, Any}("va" => [-0.7706229194809523, -120.77035368946459, 119.22965458271331], "vm" => [125.0049291285691, 125.00497420548916, 125.00503001737073]), "3bus_unbal_nogen_mn.primary" => Dict{String, Any}("va" => [-0.7991413115538781, -120.78074600618037, 119.23848685005738], "vm" => [7.4872840004247445, 7.4926968958964055, 7.490619086773919]), "3bus_unbal_nogen_mn_2.primary" => Dict{String, Any}("va" => [-0.8550422325640687, -120.83663088148208, 119.18261888114806], "vm" => [7.484002753335518, 7.489418049927689, 7.487339328523306]), "3bus_unbal_nogen_mn.substation" => Dict{String, Any}("va" => [-0.7715260550810701, -120.77101852030012, 119.22898904906208], "vm" => [7.5002428328928366, 7.500243675516679, 7.5002470547716085]), "3bus_unbal_nogen_mn_2.sourcebus" => Dict{String, Any}("va" => [-0.8264989755103133, -120.826229508669, 119.17377876989066], "vm" => [124.95033736056153, 124.95038246060375, 124.95043829746425]), "3bus_unbal_nogen_mn_2.substation" => Dict{String, Any}("va" => [-0.827402902930025, -120.82689492156933, 119.17311265293998], "vm" => [7.4969673032195505, 7.496968146566467, 7.496971527360553]), "3bus_unbal_nogen_mn_2.loadbus" => Dict{String, Any}("va" => [-0.8861577649683284, -120.84727282115972, 119.19454256326688], "vm" => [7.468913830908116, 7.4806396843479295, 7.476165145423132])), "per_unit" => false), "2" => Dict("line" => Dict{String, Any}("3bus_unbal_nogen_mn.ohline" => Dict{String, Any}("qf" => [400.5777180878409, 449.1439873945529, 448.75671581271985], "qt" => [-400.3834881405547, -449.6175397345132, -449.40808066079904], "pt" => [-1202.2047813968604, -900.9716820211088, -901.4375703779534], "pf" => [1204.0923422269757, 901.8028241166346, 902.6707125959689]), "3bus_unbal_nogen_mn_2.quad" => Dict{String, Any}("qf" => [400.3857159633255, 449.6190932685255, 449.40944838966266], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2067241982472, 900.9725348141451, 901.4388339188698]), "3bus_unbal_nogen_mn.quad" => Dict{String, Any}("qf" => [400.3834881405547, 449.6175397345132, 449.40808066079904], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2047813968604, 900.9716820211088, 901.4375703779534]), "3bus_unbal_nogen_mn_2.ohline" => Dict{String, Any}("qf" => [400.58201037707516, 449.1470167248505, 448.75940230925687], "qt" => [-400.3857159633255, -449.6190932685255, -449.40944838966266], "pt" => [-1202.2067241982472, -900.9725348141451, -901.4388339188698], "pf" => [1204.095948962507, 901.8044071744985, 902.6730611437251])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal_nogen_mn_2.subxf" => Dict{String, Any}("q" => [[400.6038355441561, 449.16077316190854, 448.7731752991101], [-400.58201037707516, -449.1470167248505, -448.75940230925687]], "p" => [[1204.098131204093, 901.8057832399824, 902.6744390281976], [-1204.095948962507, -901.8044071744985, -902.6730611437251]]), "3bus_unbal_nogen_mn.subxf" => Dict{String, Any}("q" => [[400.5995240305012, 449.157731758069, 448.77047663808975], [-400.5777180878409, -449.1439873945529, -448.75671581271985]], "p" => [[1204.0945224676755, 901.8041985450279, 902.6720886614527], [-1204.0923422269757, -901.8028241166346, -902.6707125959689]])), "load" => Dict{String, Any}("3bus_unbal_nogen_mn_2.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn_2.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn_2.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001])), "bus" => Dict{String, Any}("3bus_unbal_nogen_mn.loadbus" => Dict{String, Any}("va" => [-0.8302295799209277, -120.79137859902852, 119.25040000964935], "vm" => [7.472201725143105, 7.483922381610151, 7.479449806374883]), "3bus_unbal_nogen_mn.sourcebus" => Dict{String, Any}("va" => [-0.7706229194816114, -120.77035368946491, 119.22965458271298], "vm" => [125.00492912856943, 125.00497420548972, 125.00503001737137]), "3bus_unbal_nogen_mn.primary" => Dict{String, Any}("va" => [-0.79914131155471, -120.78074600618085, 119.23848685005699], "vm" => [7.48728400042476, 7.492696895896448, 7.4906190867739575]), "3bus_unbal_nogen_mn_2.primary" => Dict{String, Any}("va" => [-0.85504223255677, -120.83663088147543, 119.18261888115482], "vm" => [7.4840027533357, 7.489418049927836, 7.487339328523451]), "3bus_unbal_nogen_mn.substation" => Dict{String, Any}("va" => [-0.77152605508187, -120.77101852030057, 119.2289890490616], "vm" => [7.500242832892855, 7.5002436755167095, 7.500247054771646]), "3bus_unbal_nogen_mn_2.sourcebus" => Dict{String, Any}("va" => [-0.826498975503429, -120.82622950866259, 119.1737787698974], "vm" => [124.95033736056432, 124.95038246060629, 124.95043829746685]), "3bus_unbal_nogen_mn_2.substation" => Dict{String, Any}("va" => [-0.8274029029227165, -120.82689492156277, 119.17311265294684], "vm" => [7.496967303219722, 7.496968146566622, 7.49697152736071]), "3bus_unbal_nogen_mn_2.loadbus" => Dict{String, Any}("va" => [-0.8861577649610355, -120.84727282115303, 119.19454256327364], "vm" => [7.468913830908303, 7.480639684348074, 7.476165145423272])), "per_unit" => false), "3" => Dict("line" => Dict{String, Any}("3bus_unbal_nogen_mn.ohline" => Dict{String, Any}("qf" => [400.5777180877519, 449.1439873945082, 448.75671581263083], "qt" => [-400.38348814055513, -449.6175397345571, -449.4080806607989], "pt" => [-1202.20478139695, -900.9716820211972, -901.4375703778643], "pf" => [1204.092342226887, 901.8028241168124, 902.6707125957021]), "3bus_unbal_nogen_mn_2.quad" => Dict{String, Any}("qf" => [400.38571596332577, 449.6190932680813, 449.40944838961764], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.2067241981586, 900.9725348138778, 901.4388339183367]), "3bus_unbal_nogen_mn.quad" => Dict{String, Any}("qf" => [400.38348814055513, 449.6175397345571, 449.4080806607989], "qt" => [-399.999, -450.00000000000006, -450.00000000000006], "pt" => [-1200.0, -900.0000000000001, -900.0000000000001], "pf" => [1202.20478139695, 900.9716820211972, 901.4375703778643]), "3bus_unbal_nogen_mn_2.ohline" => Dict{String, Any}("qf" => [400.5820103769862, 449.14701672440617, 448.759402309122], "qt" => [-400.38571596332577, -449.6190932680813, -449.40944838961764], "pt" => [-1202.2067241981586, -900.9725348138778, -901.4388339183367], "pf" => [1204.0959489624188, 901.8044071739638, 902.6730611429242])), "settings" => Dict{String, Any}("sbase" => 100000.0), "transformer" => Dict{String, Any}("3bus_unbal_nogen_mn_2.subxf" => Dict{String, Any}("q" => [[400.6038355327163, 449.16077315009466, 448.773175287606], [-400.5820103769862, -449.14701672440617, -448.759402309122]], "p" => [[1204.0981315678043, 901.8057826937508, 902.6744388454978], [-1204.0959489624188, -901.8044071739638, -902.6730611429242]]), "3bus_unbal_nogen_mn.subxf" => Dict{String, Any}("q" => [[400.5995240190437, 449.1577317239183, 448.7704766379962], [-400.5777180877519, -449.1439873945082, -448.75671581263083]], "p" => [[1204.0945224675868, 901.8041985452063, 902.6720886611851], [-1204.092342226887, -901.8028241168124, -902.6707125957021]])), "load" => Dict{String, Any}("3bus_unbal_nogen_mn_2.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn.l1" => Dict{String, Any}("qd_bus" => [399.999], "pd_bus" => [1200.0], "qd" => [399.999], "pd" => [1200.0]), "3bus_unbal_nogen_mn_2.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn_2.l2" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001]), "3bus_unbal_nogen_mn.l3" => Dict{String, Any}("qd_bus" => [450.00000000000006], "pd_bus" => [900.0000000000001], "qd" => [450.00000000000006], "pd" => [900.0000000000001])), "bus" => Dict{String, Any}("3bus_unbal_nogen_mn.loadbus" => Dict{String, Any}("va" => [-0.8302295799131064, -120.79137859902089, 119.25040000965717], "vm" => [7.4722017251435435, 7.483922381610589, 7.479449806375325]), "3bus_unbal_nogen_mn.sourcebus" => Dict{String, Any}("va" => [-0.7706229194739376, -120.77035368945725, 119.22965458272064], "vm" => [125.00492912857676, 125.00497420549705, 125.00503001737864]), "3bus_unbal_nogen_mn.primary" => Dict{String, Any}("va" => [-0.7991413115468873, -120.78074600617322, 119.23848685006479], "vm" => [7.487284000425199, 7.492696895896888, 7.490619086774399]), "3bus_unbal_nogen_mn_2.primary" => Dict{String, Any}("va" => [-0.85504223254311, -120.8366308814605, 119.18261888116959], "vm" => [7.484002753336263, 7.489418049928443, 7.487339328524058]), "3bus_unbal_nogen_mn.substation" => Dict{String, Any}("va" => [-0.7715260550740553, -120.77101852029291, 119.2289890490694], "vm" => [7.500242832893295, 7.500243675517153, 7.500247054772084]), "3bus_unbal_nogen_mn_2.sourcebus" => Dict{String, Any}("va" => [-0.8264989754893535, -120.82622950864773, 119.17377876991193], "vm" => [124.95033736057383, 124.95038246061625, 124.95043829747675]), "3bus_unbal_nogen_mn_2.substation" => Dict{String, Any}("va" => [-0.8274029029090649, -120.82689492154778, 119.17311265296155], "vm" => [7.496967303220288, 7.496968146567221, 7.496971527361306]), "3bus_unbal_nogen_mn_2.loadbus" => Dict{String, Any}("va" => [-0.8861577649473606, -120.84727282113812, 119.19454256328841], "vm" => [7.468913830908865, 7.480639684348685, 7.4761651454238836])), "per_unit" => false)))
 
-[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}("multinetwork" => true, "nw" => Dict{String, Any}("4" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049622880614, -901.8100181254906, -902.6783506307055], "qbound_to" => [-400.630030776433, -449.177722118188, -448.78980036204024]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.593331044258], "qbound_fr" => [1298.597553256661]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.5857746079846], "qbound_fr" => [1298.5874491212335]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.101347358377, -901.8084302478388, -902.6759970017687], "qbound_to" => [-400.6256962072555, -449.17466583314587, -448.7870870808322]))), "1" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049624672987, -901.8100184922217, -902.6783509913059], "qbound_to" => [-400.6300307993883, -449.17772215213427, -448.78980037337016]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.5933319508263], "qbound_fr" => [1298.5975533248927]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.5857742450717], "qbound_fr" => [1298.5874491439454]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.1013469861416, -901.8084302538781, -902.6759970050523], "qbound_to" => [-400.6256961956958, -449.17466584472527, -448.78708710352413]))), "2" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049621118384, -901.8100186687032, -902.6783508103842], "qbound_to" => [-400.63003079917036, -449.17772213001075, -448.7898003847704]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.593331590926], "qbound_fr" => [1298.5975533139513]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.585774607983], "qbound_fr" => [1298.5874491439235]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.1013473528665, -901.8084302476616, -902.6759970074544], "qbound_to" => [-400.6256962184772, -449.1746658331913, -448.7870870922549]))), "3" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049624727136, -901.8100181281534, -902.6783506390512], "qbound_to" => [-400.6300307763823, -449.1777221295564, -448.7898003846302]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.5933312399184], "qbound_fr" => [1298.5975532905688]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.58577461065], "qbound_fr" => [1298.587449086865]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.1013473527794, -901.8084302506836, -902.6759970071865], "qbound_to" => [-400.62569618428887, -449.1746658104148, -448.7870870921613])))))

As you can see on the output, the dictionary results have extra keys such as nw, which indicate that this is a multinetwork (multi-timestep) optimization problem. Below the nw, you can find the solutions of the respective multinetwork (i.e., timestep) as "#" (e.g., ["nw"]["3"] represents the results for the 3th timestep).

Example Case #3: Solving a simple OPFITD with voltage bounds (support for PowerModelsDistribution (PMD) Transformations)

Test Case #3

In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

Additionally, we are specificying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).

Julia Code for Test Case #3

using PowerModelsITD
+[ Main | Info ] : Solution Values for Boundary(ies): Dict{String, Any}("multinetwork" => true, "nw" => Dict{String, Any}("4" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049622880614, -901.8100181254906, -902.6783506307055], "qbound_to" => [-400.630030776433, -449.177722118188, -448.78980036204024]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.593331044258], "qbound_fr" => [1298.597553256661]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.5857746079846], "qbound_fr" => [1298.5874491212335]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.101347358377, -901.8084302478388, -902.6759970017687], "qbound_to" => [-400.6256962072555, -449.17466583314587, -448.7870870808322]))), "1" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049624672987, -901.8100184922217, -902.6783509913059], "qbound_to" => [-400.6300307993883, -449.17772215213427, -448.78980037337016]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.5933319508263], "qbound_fr" => [1298.5975533248927]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.5857742450717], "qbound_fr" => [1298.5874491439454]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.1013469861416, -901.8084302538781, -902.6759970050523], "qbound_to" => [-400.6256961956958, -449.17466584472527, -448.78708710352413]))), "2" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049621118384, -901.8100186687032, -902.6783508103842], "qbound_to" => [-400.63003079917036, -449.17772213001075, -448.7898003847704]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.593331590926], "qbound_fr" => [1298.5975533139513]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.585774607983], "qbound_fr" => [1298.5874491439235]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.1013473528665, -901.8084302476616, -902.6759970074544], "qbound_to" => [-400.6256962184772, -449.1746658331913, -448.7870870922549]))), "3" => Dict{String, Any}("boundary" => Dict{String, Any}("(100002, voltage_source.3bus_unbal_nogen_mn_2.source, 6)" => Dict{String, Any}("pbound_to" => [-1204.1049624727136, -901.8100181281534, -902.6783506390512], "qbound_to" => [-400.6300307763823, -449.1777221295564, -448.7898003846302]), "(100002, 6, voltage_source.3bus_unbal_nogen_mn_2.source)" => Dict{String, Any}("pbound_fr" => [3008.5933312399184], "qbound_fr" => [1298.5975532905688]), "(100001, 5, voltage_source.3bus_unbal_nogen_mn.source)" => Dict{String, Any}("pbound_fr" => [3008.58577461065], "qbound_fr" => [1298.587449086865]), "(100001, voltage_source.3bus_unbal_nogen_mn.source, 5)" => Dict{String, Any}("pbound_to" => [-1204.1013473527794, -901.8084302506836, -902.6759970071865], "qbound_to" => [-400.62569618428887, -449.1746658104148, -448.7870870921613])))))

As you can see on the output, the dictionary results have extra keys such as nw, which indicate that this is a multinetwork (multi-timestep) optimization problem. Below the nw, you can find the solutions of the respective multinetwork (i.e., timestep) as "#" (e.g., ["nw"]["3"] represents the results for the 3th timestep).

Example Case #3: Solving OPFITD with voltage bounds (support for PowerModelsDistribution (PMD) Transformations)

Test Case #3

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

Additionally, we are specifying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).

Julia Code for Test Case #3

using PowerModelsITD
 using Ipopt
 
 silence!()  # Silences the console, so warning messages or information are not displayed
@@ -77,7 +77,7 @@
 [ Main | Info ] : Termination Status of Solver: LOCALLY_SOLVED
 [ Main | Info ] : Solve Time: 0.06421494483947754 [seconds]
 
-[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("va" => [-0.8977463887653532, -120.78309685941274, 119.34177620647625], "vm" => [0.9899999900302301, 0.9946671975187621, 0.9928991397184561]), "3bus_unbal.substation" => Dict{String, Any}("va" => [-0.7693363623113275, -120.76782278704773, 119.23219208890347], "vm" => [0.999742728740167, 0.999743306402737, 0.9997446568367797]), "3bus_unbal.primary" => Dict{String, Any}("va" => [-0.8297020935620707, -120.77556386286943, 119.28178890967312], "vm" => [0.9952384467648019, 0.9973943491437465, 0.9965725113327532]), "3bus_unbal.sourcebus" => Dict{String, Any}("va" => [-0.7671158858601453, -120.76631338622572, 119.23370678684667], "vm" => [0.9997629892456953, 0.9997641961144075, 0.9997655262819723]))

You can see in these results that the voltage magnitude values of the distribution system nodes is between the 0.99 and 1.01 bounds.

Example Case #4: Solving a simple OPFITD with Solution Processors (apply solution processor to convert voltage values solutions from rectangular to polar coordinates)

Test Case #4

In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

Additionally, we are specificying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).

Finally, we also want to solve this problem using the ACR-ACRU formulation (i.e., AC OPF in rectangular coordinates) instead of the ACP-ACPU formulation used previously. We also want to show that by applying the solution processor to the solve_opfitd(...) function, we can convert the solution from rectangular to polar corrdinates (after the problem has been solved in rectangular coordinates).

Julia Code for Test Case #4

using PowerModelsITD
+[ Main | Info ] : Solution Values for Distribution system(s): Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("va" => [-0.8977463887653532, -120.78309685941274, 119.34177620647625], "vm" => [0.9899999900302301, 0.9946671975187621, 0.9928991397184561]), "3bus_unbal.substation" => Dict{String, Any}("va" => [-0.7693363623113275, -120.76782278704773, 119.23219208890347], "vm" => [0.999742728740167, 0.999743306402737, 0.9997446568367797]), "3bus_unbal.primary" => Dict{String, Any}("va" => [-0.8297020935620707, -120.77556386286943, 119.28178890967312], "vm" => [0.9952384467648019, 0.9973943491437465, 0.9965725113327532]), "3bus_unbal.sourcebus" => Dict{String, Any}("va" => [-0.7671158858601453, -120.76631338622572, 119.23370678684667], "vm" => [0.9997629892456953, 0.9997641961144075, 0.9997655262819723]))

You can see in these results that the voltage magnitude values of the distribution system nodes is between the 0.99 and 1.01 bounds.

Example Case #4: Solving OPFITD with Solution Processors (apply solution processor to convert voltage values solutions from rectangular to polar coordinates)

Test Case #4

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

Additionally, we are specificying a PMD transformation for the distribution system data. This transformation applies voltage bounds to all the nodes in the distribution system(s). The function is called apply_voltage_bounds!(...).

Finally, we also want to solve this problem using the ACR-ACRU formulation (i.e., AC OPF in rectangular coordinates) instead of the ACP-ACPU formulation used previously. We also want to show that by applying the solution processor to the solve_opfitd(...) function, we can convert the solution from rectangular to polar coordinates (after the problem has been solved in rectangular coordinates).

Julia Code for Test Case #4

using PowerModelsITD
 using Ipopt
 
 silence!()  # Silences the console, so warning messages or information are not displayed
@@ -103,7 +103,7 @@
 @info "Distribution system(s) voltages in rectangular coordinates: $(result_rect["solution"]["it"]["pmd"]["bus"])"
 @info "Distribution system(s) voltages in polar coordinates: $(result_polar["solution"]["it"]["pmd"]["bus"])"

Console Output for Test Case #4

After running the corresponding code, the user should get the following output displayed on the console.

[ Main | Info ] : Distribution system(s) voltages in rectangular coordinates: Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("vi" => [-0.015511309363640641, -0.8545294554234174, 0.8655223138026301], "vr" => [0.9898784720063777, -0.5090601668099762, -0.4865386272048753]), "3bus_unbal.substation" => Dict{String, Any}("vi" => [-0.013423594907906103, -0.8590267647200966, 0.872425011363218], "vr" => [0.9996526099437699, -0.5114290820733716, -0.48822534573738224]), "3bus_unbal.primary" => Dict{String, Any}("vi" => [-0.014411577636549404, -0.8569394862376708, 0.8692352392326611], "vr" => [0.9951341025954522, -0.5103432319817417, -0.4874288450833038]), "3bus_unbal.sourcebus" => Dict{String, Any}("vi" => [-0.01338512498983875, -0.8590581872270858, 0.8724303155121654], "vr" => [0.9996733881089848, -0.5114171375591623, -0.4882586014767347]))
 
-[ Main | Info ] : Distribution system(s) voltages in polar coordinates: Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("va" => [-0.8977463956228972, -120.78309686739179, 119.34177619725007], "vm" => [0.989999994979725, 0.9946672024445378, 0.9928991446530021]), "3bus_unbal.substation" => Dict{String, Any}("va" => [-0.7693363704348831, -120.76782279518537, 119.23219208076581], "vm" => [0.9997427336408314, 0.9997433113034004, 0.9997446617374346]), "3bus_unbal.primary" => Dict{String, Any}("va" => [-0.8297021010938084, -120.77556387092758, 119.28178890104428], "vm" => [0.9952384516880516, 0.9973943540560338, 0.9965725162491212]), "3bus_unbal.sourcebus" => Dict{String, Any}("va" => [-0.767115894005601, -120.7663133943784, 119.23370677869384], "vm" => [0.9997629941462579, 0.9997642010149662, 0.9997655311825235]))

Example Case #5: Solving a simple OPFITD with Results in MATH Model (instead of default ENG)

Test Case #5

In this example case, we want to solve the optimal power flow for integrated transmission-distribution (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

However, different from all the examples presented above, in this case, the result of the distribution systems will be obtained in the MATH model instead of the default ENG model. See here for a more detailed explanation regarding the different models supported by PMD/PMITD.

Julia Code for Test Case #5

using PowerModelsITD
+[ Main | Info ] : Distribution system(s) voltages in polar coordinates: Dict{String, Any}("3bus_unbal.loadbus" => Dict{String, Any}("va" => [-0.8977463956228972, -120.78309686739179, 119.34177619725007], "vm" => [0.989999994979725, 0.9946672024445378, 0.9928991446530021]), "3bus_unbal.substation" => Dict{String, Any}("va" => [-0.7693363704348831, -120.76782279518537, 119.23219208076581], "vm" => [0.9997427336408314, 0.9997433113034004, 0.9997446617374346]), "3bus_unbal.primary" => Dict{String, Any}("va" => [-0.8297021010938084, -120.77556387092758, 119.28178890104428], "vm" => [0.9952384516880516, 0.9973943540560338, 0.9965725162491212]), "3bus_unbal.sourcebus" => Dict{String, Any}("va" => [-0.767115894005601, -120.7663133943784, 119.23370677869384], "vm" => [0.9997629941462579, 0.9997642010149662, 0.9997655311825235]))

Example Case #5: Solving OPFITD with Results in MATH Model (instead of default ENG)

Test Case #5

In this example case, we want to solve the integrated T&D optimal power flow (opfitd) problem for a case where we have the PJM 5-bus system (case5_withload) as the transmission system and the IEEE 4 Node Test Feeder (case3_unbalanced.dss) as the distribution system. The boundary information that specifies the respective boundary buses for both the transmission and distribution systems can be found in case5_case3_unbal.json.

The formulation used to solve this optimization problem is the ACP-ACPU formulation.

However, different from all the examples presented above, in this case, the result of the distribution systems will be obtained in the MATH model instead of the default ENG model. See here for a more detailed explanation regarding the different models supported by PMD/PMITD.

Julia Code for Test Case #5

using PowerModelsITD
 using Ipopt
 
 silence!()  # Silences the console, so warning messages or information are not displayed
@@ -128,4 +128,4 @@
 
 [ Main | Info ] : Solution Values (MATH model) for Distribution system(s): Dict{String, Any}("branch" => Dict{String, Any}("4" => Dict{String, Any}("qf" => [1354.795202241865, 1507.3400640138161, 1504.5761375753734], "qt" => [-1354.6163225169614, -1507.2344513630767, -1504.4700979169072], "pt" => [-3367.119671256992, -2346.3650144634003, -2354.829891017304], "pf" => [3367.119671256992, 2346.3650144634003, 2354.8298910173044]), "1" => Dict{String, Any}("qf" => [1344.7785535214057, 1503.9392726830868, 1502.43791779139], "qt" => [-1333.3300000000002, -1500.0000000000002, -1500.0000000000002], "pt" => [-3333.3323371531164, -2333.3323371935803, -2333.3323371900296], "pf" => [3351.5305232165006, 2340.3516279866967, 2344.8964126191295]), "5" => Dict{String, Any}("qf" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], "qt" => [-1354.795202241865, -1507.3400640138161, -1504.5761375753734], "pt" => [-3367.119671256992, -2346.3650144634003, -2354.8298910173044], "pf" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), "2" => Dict{String, Any}("qf" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], "qt" => [-1344.7785535214057, -1503.9392726830868, -1502.43791779139], "pt" => [-3351.5305232165006, -2340.3516279866967, -2344.8964126191295], "pf" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895]), "6" => Dict{String, Any}("qf" => [1355.0096276913357, 1507.4706735124998, 1504.7037665348369], "qt" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], "pt" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], "pf" => [3367.1850486607445, 2346.4026604158908, 2354.8649645151804]), "3" => Dict{String, Any}("qf" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], "qt" => [1354.6163225169614, 1507.2344513630767, 1504.4700979169072], "pt" => [3367.119671256992, 2346.3650144634003, 2354.829891017304], "pf" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), "gen" => Dict{String, Any}("1" => Dict{String, Any}("qg_bus" => [-0.0, -0.0, -0.0], "qg" => [-0.0, -0.0, -0.0], "pg" => [666.6676628468832, 666.6676628064197, 666.6676628099706], "pg_bus" => [666.6676628468832, 666.6676628064197, 666.6676628099706])), "transformer" => Dict{String, Any}("1" => Dict{String, Any}("qf" => [1354.7952022418647, 1507.3400640138161, 1504.5761375753734], "qt" => [-1354.7952022418647, -1507.3400640138161, -1504.5761375753734], "pt" => [-3367.1286152278885, -2346.3702946258413, -2354.835193007617], "pf" => [3367.1286152278885, 2346.3702946258413, 2354.835193007617]), "2" => Dict{String, Any}("qf" => [-1354.6163225169614, -1507.2344513630765, -1504.4700979169072], "qt" => [1354.6163225169614, 1507.2344513630765, 1504.4700979169072], "pt" => [3367.110727286094, 2346.3597337552624, 2354.8245890269895], "pf" => [-3367.110727286094, -2346.3597337552624, -2354.8245890269895])), "settings" => Dict{String, Any}("sbase_default" => 100000.0, "vbases_default" => Dict{String, Real}("4" => 132.79056191361394), "voltage_scale_factor" => 1000.0, "sbase" => 100000.0, "power_scale_factor" => 1000.0, "base_frequency" => 60.0), "multinetwork" => false, "load" => Dict{String, Any}("1" => Dict{String, Any}("qd_bus" => [1500.0000000000002], "pd_bus" => [3000.0000000000005], "qd" => [1500.0000000000002], "pd" => [3000.0000000000005]), "2" => Dict{String, Any}("qd_bus" => [1500.0000000000002], "pd_bus" => [3000.0000000000005], "qd" => [1500.0000000000002], "pd" => [3000.0000000000005]), "3" => Dict{String, Any}("qd_bus" => [1333.3300000000002], "pd_bus" => [4000.0], "qd" => [1333.3300000000002], "pd" => [4000.0])), "bus" => Dict{String, Any}("8" => Dict{String, Any}("va" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], "vm" => [0.5427404621782935, 0.5427412225103798, 0.5427420415368795]), "4" => Dict{String, Any}("va" => [-0.8064197613818459, -120.80551025323088, 119.19451148306055], "vm" => [124.83030630100751, 124.83048117738736, 124.8306695534823]), "1" => Dict{String, Any}("va" => [-0.9542852429015141, -120.82463162589393, 119.31695673367102], "vm" => [7.406969380817659, 7.446613395025093, 7.431619824571949]), "5" => Dict{String, Any}("va" => [-0.8089868491003656, -120.80727720360223, 119.19273784447546], "vm" => [0.5427292370876581, 0.542729249043147, 0.5427300853404582]), "2" => Dict{String, Any}("va" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], "vm" => [7.489646348633082, 7.489651704574486, 7.489663202448464]), "6" => Dict{String, Any}("va" => [-0.8089341499650244, -120.8072185671511, 119.19279637320398], "vm" => [0.5427279962777596, 0.5427283843894555, 0.5427292175687293]), "7" => Dict{String, Any}("va" => [-0.8063670574676239, -120.8054516152584, 119.19457001333551], "vm" => [0.5427392213907619, 0.5427403578738178, 0.5427411737823131]), "9" => Dict{String, Any}("va" => [-0.8036120919989638, -120.80361209199894, 119.19638790800104], "vm" => [124.83485996888251, 124.83485996888251, 124.83485996888251]), "3" => Dict{String, Any}("va" => [-0.8772138344778904, -120.81603057758366, 119.24896754768255], "vm" => [7.4514218741879255, 7.4697354940559455, 7.462765580863505])), "per_unit" => false)
 
-[ Main | Info ] : Solution Values (MATH model) for Boundary(ies): Dict{String, Any}("multinetwork" => false, "boundary" => Dict{String, Any}("(100001, 9, 5)" => Dict{String, Any}("pbound_to" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], "qbound_to" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369]), "(100001, 5, 9)" => Dict{String, Any}("pbound_fr" => [8068.452673591816], "qbound_fr" => [4367.184067738673])))
+[ Main | Info ] : Solution Values (MATH model) for Boundary(ies): Dict{String, Any}("multinetwork" => false, "boundary" => Dict{String, Any}("(100001, 9, 5)" => Dict{String, Any}("pbound_to" => [-3367.1850486607445, -2346.4026604158908, -2354.8649645151804], "qbound_to" => [-1355.0096276913357, -1507.4706735124998, -1504.7037665348369]), "(100001, 5, 9)" => Dict{String, Any}("pbound_fr" => [8068.452673591816], "qbound_fr" => [4367.184067738673])))

As seen in the console output, the nodes/buses are now referenced by their MATH names (i.e., numbers) and not their actual ENG name.