This repository provides MATLAB scripts that construct the bus admittance matrix for the following multi-phase distribution networks
- IEEE 37-bus feeder
- IEEE 123-bus feeder
- 8500-node feeder
- European 906-bus low voltage feeder (ELV 906-bus feeder)
The data files for the aforementioned feeders are downloaded from PES. Benchmark solutions for the IEEE 37-bus feeder and the ELV 906-bus feeder are taken from the EPRI distribution system simulator, OpenDSS. Benchmark solutions for the IEEE 123-bus and the 8500-node feeder are taken from PES.
If you are interested in using this material in your research, we kindly request you to cite the following publication:
M. Bazrafshan and N. Gatsis, "Comprehensive modeling of three-phase distribution systems via the bus admittance matrix," IEEE Trans. Power Syst., to be published, doi: 10.1109/TPWRS.2017.2728618. See the arXiv version.
An explanation is provided here for the most important scripts of this folder to simplify usage. Some additional scripts are also within the folder that replicate the results of the cited paper.
The modeling presented here takes into account mixed wye and delta ZIP loads, even though the model in the cited paper only assumes wye or delta ZIP loads.
This script is the starting point. It contains all the necessary steps from modeling, to computation of voltages as well as comparisons between solutions.
This function uses the data files of the folder feeder data provided from PES to create the bus admittance matrix.
network
a structure with the following fieldsSbase
Network power baseVbase
Network voltage baseZbase
Network impedance baseYnet
Bus admittance matrix including the slack busY
Bus admittance matrix excluding the slack busY_NS
The portion of bus admittance matrix relating the network to the slack busY_SS
The portion of bus admittance matrix relating only to the slack bus
The output of this function should typically be input to the function computeNoLoadVoltage.m
.
regulatorTypes
(optional) a string set to either 'ideal' or 'non-ideal' determining whether step-voltage regulators should be modeled as ideal or lossy. If not provided, 'non-ideal' regulators are assumed.epsilon
(optional) determines the value of the Epsilon needed to adjust the delta-connected transformers to ensure invertibility. If not provided, a default of 1e-5 is assumed.
This function computes some required no-load quantities for the network.
network
a structure with the following additional field:noLoadQuantities
is itself an structure that has the following fields:v0mag
Vector of magnitude for the slack bus voltage phasorv0phases
Vector of phases in degrees for the slack bus voltage phasorv0
Vector of slack bus complex voltage phasorw
Vector of no-load complex voltage profile for the networkw3phase
The no-load complex voltage profile organized in an (N+1)*3 matrix where the rows determining the bus numbers and the columns determine the phases.
The output of this function should typically be input to the function setupLoads<NetworkName>.m
.
network
a network structure created bysetupYbus<NetworkName>.m
.v0mags
(optional) A 3*1 vector of magnitudes for the slack bus voltage phasor.v0phases
(optional) A 3*1 vector of phases in degrees for the slack bus voltage phasor.
This function updates the network
structure created previously with information on loads.
The modeling of loads is based on the load type (constant-power, constant-current, constant-impedance, or any combination of these) as well as the connection (delta, wye, or a combination of these). The load model is explicitly given in the calculateIPQII.m
function and is highlighted here first.
The general load model is as follows:
iL_PQ= c(i,:)*[ fPQ( eVec1.' * v, sL(i,1)); fPQ(eVec2.'*v, sL(i,2))];
iL_I=c(i,:) *[ fI(eVec1.'*v, iL(i,1)); fI(eVec2.'*v, iL(i,2))];
iL_Y=c(i,:)*[fY(eVec1.'*v, yL(i,1)); fY(eVec2.'*v, yL(i,2))];
fv(i,1)=g(i,:)*[iL_PQ;iL_I;iL_Y];
The vector
network
a structure with the following additional field:loadQuantities
a structure with the following fields:sL_load
Vector of 'nominal power' of constant-power loadsiL_load
Vector of 'nominal current' of constant-current loadsyL_load
Vector of 'nominal admittance' of constant-impedance loadsePage
A page determining which indices of the voltage vector play a role in the considered phase of the current.gMat
A matrix determining the ZIP load combination.CMat
A matrix determining the wye, delta, or mixed wye delta connections. (See the above on load modeling)
The output of this function should typically be input to the function performZBus.m
.
network
a structure created bycomputeNoLoadVoltage.m
Computes the Z-Bus load flow.
network
a structure with the following additional field:ZBusResults
a structure with the following fields:v
vector of voltages (all phases in vector format)vsol
solution computed (similar tov
but does not include the slack voltage)success
success flagerr
the error at the final iteration
The output of this function should typically be input to the function obtainVoltages.m
.
network
structure created bymaxIt
(optional) Maximum iterations. If not specified, a default value of 10 is assumed
This function merely maps the computed voltage vector from the Z-Bus load-flow to appropriate data structure in terms of buses and their phases.
network
an structure with the following additional fields:solution
an structure with the following fields:resultsVMag
a Matrix (N+1)-by-3 corresponding to computed voltage magnitudesresultsVPhase
a Matrix (N+1)-by-3 corresponding to computed voltage phases in radiansv3phase
a Matrix (N+1)-by-3 corresponding to computed voltage phasorsv3phaseRegs
a Matrix (N+1+NREgs)-by-3 corresponding to computed voltage phasors including regulator secondary buses
network
an structure created byperformZBus.m