OpenDSS Circuit Reduction Updates

The circuit reduction algorithms in OpenDSS have been updated since the end of 2018. Key changes are:

Reduce Shortlines Option

The Reduce Stubs option was replaced with the Reduce ShortLines option. The functionality is similar, but the reduction is performed on a larger set of line objects. The nominal technique is to merge line objects with less positive-sequence impedance than the value specified by the Zmag option with the downline Line object. Zmag may be set on the same command line as a Set ReduceOption command. The bus between the two lines is eliminated.

In most cases, the Load, PVSystem and Storage elements on the eliminated bus are moved to the upline bus of the merged line. If the identified short line is at the end of a branch, the load elements are moved to the downline, or “to”, bus.

If the bus that would be eliminated is marked as a ‘keep’ bus or has either a shunt capacitor or shunt reactor, no merge is performed.

Similarly, if the short line identified has a Control element or is being monitored by another element, no merge is performed. Thus, controls and monitors are preserved.

Reduce Laterals Option

This option was updated from its previous implementation in Version 7. Its primary purpose is to quickly eliminate all 1-phase laterals to achieve a dramatic reduction in node count on circuits where the main planning interest is on the 3-phase sections. If the KeepLoad option is set (with Set Command – true by default), all loads and other shunt elements are moved to the corresponding node on the bus at the head of the lateral. Voltage bases are adjusted, if necessary. In the previous implementation, an equivalent load was created at the head of the lateral to match the kW and kvar of the power flow solution. However, this did not properly represent Load elements with different Loadshapes or the characteristics of PVSystem and Storage elements.

It is possible, and likely, that there could be dozens of Power Conversion (PC) elements on the same node. This is not a conceptual problem for OpenDSS because each element simply contributes its compensation current to the main current array. There is no limit on the number of PC elements and other shunt elements that may be connected to a node. There will be some overhead in the solution algorithm to collect all the individual current contributions. However, this will be offset in many cases of large circuits in which hundreds of 1-phase buses and corresponding nodes are eliminated

and removed from the System Y matrix.

In the future, all single-phase PC elements of the same class might be merged to save computational effort. However, there are complications with this with respect to OpenDSS loadshapes, irradiance shapes, and storage controllers. and it was not attempted in this revision

Controlled and monitored elements are removed or moved in this reduction option, which is the opposite of what happens in the Remove ShortLine option.

Any 1-phase Capacitor or Reactor elements present on the lateral are also moved and their contribution to reactive power preserved. These elements are linear and are completely modeled in the System Y matrix and do not contribute to the main current array.

One downside of this reduction algorithm is that the losses in the single-phase lateral are no longer represented in the analysis. See the example at the end of this document.

Access to Reduction Commands through the COM Interface

A special interface named ReduceCkt was added to the COM interface to make it easier for those driving the OpenDSS from some other tool to execute the circuit reduction algorithms. All the circuit reduction options may be executed and saving the reduced circuit is facilitated. See the description below. Of course, the text command interface may also be used to execute the reduction commands. An Excel VBA example is provided in this document. The spreadsheet is also posted to the OpenDSS Version 8 website:

The Circuit Reduction Process

The Circuit reduction function is executed through EnergyMeter elements in the circuit. An EnergyMeter element is the only place in OpenDSS where the radial circuit tree is built and maintained. Otherwise, all other functions are designed to work equally well whether the circuit is radial or meshed. The circuit tree was incorporated into the Energymeter element very early after the creation of the original DSS program to compute the Energy Exceeding Normal (EEN) and Unserved Energy (UE) values. These values are used to create a risk function for distribution planning and requires knowledge of series overloaded elements. Later, during the EPRI Green Circuits research project, many loss functions were added to the EnergyMeter model that

require radial circuits. The predictive reliability calculation also requires radial circuits and is, therefore, also incorporated into the EnergyMeter element.

Scripting Commands

The basic scripting process for circuit reduction from the text scripting interface or DSS file is:

1. Set ReduceOption = (see table below)

2. Execute the Reduce Command in one of the follow methods:

a. Reduce All (the default; reduces all meter zones using the ReductOption)

i. Or, simply Reduce

b. Reduce EnergyMeterName (reduces the zone of only one meter)

Alternatively, you can execute a specific EnergyMeter reduction function using the Action property of an EnergyMeter element”


It is recommended that you execute a Save Circuit command after performing a circuit reduction. Then read the saved reduced circuit back in so that OpenDSS properly reorganizes its circuit element structures. Otherwise, there is a high probability of having control elements and other circuit and general library elements left without proper references. Use the Dir=option on the Save Circuit command. OpenDSS will write a new Master file in this directory and reports the full path name in the Result window and variables.

Save Circuit Dir=MyDirName

To reload the circuit, copy the contents of the Result window to the clipboard and append to the Compile command.

Circuit Reduction Options

The updated options for the “Set ReduceOption=” command for setting the strategy for reducing feeders are:

Table 1. Circuit Reduction Options in OpenDSS (8.9.5)

Option Name


Default or [null]

The default reduction strategy is to eliminate all dangling

end buses and buses without load.

Shortlines [Zmag=nnn]

Merges short line sections having impedance less than

Zmag, expressed in ohms. The default value of Zmag is

0.01 ohms. Power conversion elements on buses

eliminated by the merging are generally moved to the

downline (“To” side) bus unless it is an end node. Buses

containing Capacitor or Reactor elements are not



Merges Line objects that are in parallel.


Disables one of the Line objects at the head of a loop to

force the circuit to be radial.


Merges Line objects in which the IsSwitch property is

true with the downline Line object. Eliminates dangling

switches. Does not check if a SwtControl object is

connected to a Line. The purpose is to eliminate very

short Line sections quickly. The ShortLines option can

also accomplish this (most Switch lines will have an

impedance of 1 millohm).


Eliminates dangling ends only.



Removes all 1-phase laterals. By default, lumps Load,

PVSystem, and Storage elements at the head of the

lateral where it branches from the main feeder. Keeplist

is ignored for this option; laterals are complete removed.

Marking buses with "Keeplist" will prevent their elimination.

Remove Command

Syntax: Remove {ElementName=} [KeepLoad=Y*/N] [EditString="..."]

Removes, by disabling, all branches downline from the PDelement named in the "ElementName" property. Circuit must have at least one Energymeter object at the head of the feeder and the branch must be part of the circuit tree that belongs to the Energymeter object (the Energymeter object’s zone). The zone is instantiated with the Energymeter is created on the first solution. It is updated for each subsequent solution.

If KeepLoad=Yes (which is the default) a new Load element is defined at the bus on the source side (“from” side) of the PDElement object. Its kW and kvar set to the present power flow solution for the “From”, or upstream, terminal of the first element eliminated. The new Load object voltage rating is set to the voltage base of the bus or the actual voltage if the voltage base is not defined.

The EditString is applied to each new Load element defined.

If KeepLoad=N, all downline elements are disabled.


Remove Line.Lin3021

Remove Line.L22 Editstring="Daily=Dailycurve Duty=SolarShape”

Remove Line.L333 KeepLoad=No

ReduceCkt Interface

In Version 8.5.9, the circuit reduction functions were made available through the COM interface with the addition of the ReductCkt interface. Figure 1 shows a screen capture of the interface from the Excel VBA Object Browser. There is a separate method (function) beginning with the “Do…” verb for each of the circuit reduction options (see next section). There are also properties in the interface to support the circuit reduction process.

Figure 1. Listing of Methods and Properities in ReduceCkt COM Interface (from

Microsoft Excel)

Table 2. ReduceCkt Interface Methods and Properties

Property/Method Name



Removes all 1-phase laterals in the active EnergyMeter’s

zone. Loads and other shunt elements are moved to the

parent 3-phase bus.


Remove an entire branch downline from designated

starting element. Specify StartPDElement, KeepLoad,

and EditString before executing.


Remove dangling end branches with nothing connected


Executes the default circuit reduction, which eliminates

all dangling end buses and buses without load.


Disables one of the Line objects at the head of a loop to

force the circuit to be radial.


Merges Line object that are in parallel


Removes Line objects with less impedance than

specified by the Zmag property. Specify the Zmag

property before executing.


Merges Line objects in which the IsSwitch property is

true with the downline Line object.


[String] String containing the OpenDSS command

appended to the BranchRemove option when a new load

is defined to represent the load on the removed branch.


[String] Name of EnergyMeter object for circuit reduction


[Boolean T/F] Set flag to keep load for reduce functions

that remove branches.


Execute the Save Circuit command from the COM

interface. Saves the reduced circuit in a directory with

the specified name. The full path name of the

Master.DSS file is return in the DSSText.Result property.


[String] Full name of the first PDelement for the

BranchRemove command.


[Double] Value of impedance value associated with the

DoShortLines method. Lines with less impedance will be

merged out of the circuit, eliminating one or more buses.


Circuit Reduction Script (for OpenDSS.exe)

CD C:\Users\prdu001\OpenDSS\Distrib\EPRITestCircuits\ckt5\

// Original EPRI Ckt5 model

Compile [Master_ckt5.dss]


Plot Circuit Power Max=1500 dots=y labels=n subs=y C1=Blue 1phlinestyle=3

Plot Profile

// 1st Reduction: Reduce out all 1-phase laterals

Set ReduceOption = Laterals ! reduce 1-phase laterals


Save Circuit Dir=Test1

// Reload reduced circuit

Compile "C:\Users\prdu001\OpenDSS\Distrib\EPRITestCircuits\ckt5\Test1\Master.DSS"




Plot Circuit Power Max=1500 dots=y labels=n subs=y C1=Blue 1phlinestyle=3

Plot Profile

// 2nd Reduction: Eliminate lines shorter than 1 ohm

Set Zmag=1.0 ! ohms

Set ReduceOption = Shortlines


Save Circuit Dir=Test2

// Reload reduced circuit

Compile "C:\Users\prdu001\OpenDSS\Distrib\EPRITestCircuits\ckt5\Test2\Master.DSS"




Plot Circuit Power Max=1500 dots=y labels=n subs=y C1=Blue 1phlinestyle=3

Plot Profile


In this section we show the results of the circuit reduction of EPRI Ckt5 graphically. Numerical results are given after the COM interface example that follows.

Figure 2. Original Circuit

Figure 3. After Removing 1-phase laterals

Figure 4. After 2nd Reduction




1-Phase Laterals Removed

Short Lines Merged

Figure 5. Voltage Profiles for the Three levels of Circuit Reduction.

Circuit Reduction Using the COM Interface (Excel VBA)

The VBA subroutine (also called a macro) below executes the same script as described above. It also prints out some of the results from each step of the reduction.

Public Sub TestReduce()


' VBA subroutine to illustrate using the ReduceCkt COM interface


Dim DSSReduce As OpenDSSEngine.ReduceCkt

Dim CompileStr As String

Dim V As Variant

' The ReduceCkt interface is connected through the Circuit interface

' The DSSCircuit variable points to the Circuit interface

Set DSSReduce = DSSCircuit.ReduceCkt

' Connect DSSReduce variable with the interface

DSSText.Command = "Compile



With DSSCircuit

Debug.Print "No. Buses Before Reduction ", .NumBuses

Debug.Print "No. Nodes Before Reduction ", .NumNodes

Debug.Print "Total power (kW, kvar) ", .TotalPower(0), .TotalPower(1)

Debug.Print "Losses (kW, kvar) ", .Losses(0) * 0.001, .Losses(1) * 0.001

End With

DSSText.Command = "Plot Circuit Power Max=1500 dots=y labels=n subs=y C1=Blue

1phlinestyle=3" ' Default Circuit plot (power)

DSSText.Command = "Plot Profile" ' Voltage profile

' First Reduction -- get rid of all 1-ph laterals

' This moves Load, PVSystem, Storage, Capacitor (shunt), and Reactor (shunt)

‘ elements on the laterals to the 3-phase buses at the head of the laterals


' After a reduction, save the reduced circuit. Otherwise, key values might be lost

DSSReduce.SaveCircuit "ComTest1"

CompileStr = DSSText.Result ' Get name of reduced Master file

DSSText.Command = "Compile " + CompileStr ' Read reduced circuit back in

Debug.Print CompileStr ' Print name of compile file for verification

' The reduction saves the voltage bases, but does not have a CalcVoltageBases

‘ command in the Master file.

‘ So execute it separately to set all the voltage bases

DSSText.Command = "CalcV"

DSSCircuit.Solution.Solve ' solve the reduced circuit

With DSSCircuit

Debug.Print "Buses After Reduction ", DSSCircuit.

Debug.Print "No. Nodes After Reduction ", .NumNodes

Debug.Print "Total power (kW, kvar) ", .TotalPower(0), .TotalPower(1)

Debug.Print "Losses (kW, kvar) ", .Losses(0) * 0.001, .Losses(1) * 0.001

End With

DSSText.Command = "Interpolate"

DSSText.Command = "Plot Circuit Power Max=1500 dots=y labels=n subs=y C1=Blue

1phlinestyle=3" ' Default Circuit plot (power)

DSSText.Command = "Plot Profile" ' Voltage profile


' Second Reduction -- Short Lines


' This reduction takes the remaining lines and

‘ merges out lines shorter than 1.0 ohms

DSSReduce.Zmag = 1# ' Set the Zmag value


DSSReduce.SaveCircuit "ComTest2" ' Save the circuit after reduction

CompileStr = DSSText.Result ' get name of reduced master file

Debug.Print CompileStr

' Read it back in

DSSText.Command = "Compile " + CompileStr

DSSText.Command = "CalcV" ' set the voltage bases


DSSText.Command = "Show Power kVA elem"

With DSSCircuit

Debug.Print "No. Buses After Reduction ", .NumBuses

Debug.Print "No. Nodes After Reduction ", .NumNodes

Debug.Print "Total power (kW, kvar) ", .TotalPower(0), .TotalPower(1)

Debug.Print "Losses (kW, kvar) ", .Losses(0) * 0.001, .Losses(1) * 0.001

End With

DSSText.Command = "Interpolate" ' fill in missing bus coordinates

DSSText.Command = "Plot Circuit Power Max=1500 dots=y labels=n subs=y C1=Blue


DSSText.Command = "Plot Profile"

Output of Excel Circuit Reduction Example

Case 1 ( EPRI Ckt5 model)

No. Buses Before Reduction 2998

No. Nodes Before Reduction 3437

Total power (kW, kvar) -7281.32785831483         -3584.31819736872

Losses (kW, kvar) 266.02500598923                 918.768306322668

Case 2 Remove 1-phase Laterals

No. Buses After Reduction 229

No. Nodes After Reduction 668

Total power (kW, kvar) -7237.20109540373         -3537.35138898462

Losses (kW, kvar) 121.214748918846                728.803882238189

Case 3 Merge Short Lines Less than 1 ohm

No. Buses After Reduction 127

No. Nodes After Reduction 368

Total power (kW, kvar) -7237.32110644758         -3537.63462528838

Losses (kW, kvar) 120.129009457863                 727.266472370997


• The new reduction strategies do a better job of retaining the total powers than the previous version

• Removing the 1-phase laterals removes 140 kW of losses from the circuit model. 100 kW is due to removing the 1-phase load transformers and about 40 kW in line losses.

Reduced Circuit Model Performance

The timing was determine for an 8760-hr yearly simulation for each of the three circuits models. These timings include demand interval metering, which adds about 2 s to the full circuit solution.

OpenDSS8.5.9.1 Dell Precision 5510 (1 actor)

1. Full circuit (Ckt5)

Devices = 4415

Buses = 2998

Nodes = 3437

Time = 50.18 s  (5.77283 ms/step)

2. Remove 1-phase laterals

Devices = 1632

Buses = 229

Nodes = 668

Time = 12.90 s (1.4726 ms/step)

3. Reduce ShortLines less than 1 ohm

Devices = 1529

Buses = 127

Nodes = 368

Time = 10.69 s  (1.2203 ms/step)