OpenDSS Load Allocation Algorithm
OpenDSS Load Allocation Algorithm
Algorithm
Roger Dugan
Sr. Technical Executive
EPRI
942 Corridor Park Blvd.
Knoxville, TN 37932
October 16, 2008
This white paper describes the load allocation and state estimation algorithms presently
programmed into the OpenDSS program. Of course, the user may write another algorithm
in an external program and drive the OpenDSS accordingly.
(… other statements …)
For annual simulations, this is usually the peak current for the year, not counting
temporary conditions in which other feeders are attached to the feeder under study during
a contingency.
When the AllocateLoad function of the EnergyMeter object is invoked, it runs down the
feeder adjusting Load object AllocationFactor and Cfactor properties in the direction
needed to better match the Peakcurrent values.
With an EnergyMeter object at the head of the feeder, Sensor objects may be scattered
over the feeder.
A Sensor is a benign circuit element that represent a device on the feeder or load that can
sense and report some combination of voltage, current, kwatts, and kvars. For the load
1
allocation and estimation process, a Sensor takes responsibility for setting
AllocationFactors and Cfactors for any Load objects down stream from its location to
better match the values in its measurement registers. The measurement registers are
loaded using some combination of the V, I, P, and Q properties. These are array values
representing the number of phases monitored by the physical sensor. Before loading the
registers they should be cleared using the Clear property.
A simple example:
! Define a Sensor
New Sensor.MySensor Element=Line.SomeLine Terminal=1 kVBase=11
(… other statements …)
The sensor “MySensor” picks up its connection to the phase currents in the Line object
called “SomeLine” when it is attached to terminal 1 of the line in the New statement.
This defines the number of phases for the sensor and also defines which node voltages
correspond to the terminal. The Sensor copies the node references from the Line.
During the Allocation or Estimation process, the Sensor compares the values in its
registers to values calculated by the DSS. Then it computes correction factors for the
loads under its part of the circuit tree.
As the EnergyMeter at the head of the feeder builds its circuit tree zone, it assigns each
Load object to either itself or its closest upline Sensor. This establishes the connection
from the Load to its correction factors during the process. Thus, all the EnergyMeter has
to do during the process is ask each load to check its controlling sensor to obtain the
appropriate correction for the next step in the process.
2
The Allocation and Estimation processes are intended to find and set the kW and kvar
values from either connected kVA or metered kWh values. You must define some
(ideally, most) of the loads with one of the last two (4 or 5) methods for the Allocation
and Estimation algorithms to have the greatest success. If all the loads were known and
fixed, there would be no need for Allocation or Estimation.
Load objects that are subject to allocation are defined using either the xfkVA or kWh
properties and related properties.
Loads that are known are defined using a combination of the kW , PF, and kVA
properties.
Once the Allocation or Estimation has concluded, the kW and kvar values determined by
the algorithm as assumed to be the known values and are subsequently modified by load
shapes and growthshapes if desired.
Note that the PF property should be set by some means for the load allocation algorithms
to work. There is a reasonable default value for many types of composite loads. The
property may be explicitly set when each load is defined. Or you may set the kW and
kvar properties to a typical value, which has the side effect of establishing the nominal
power factor. Then you would override that specification by setting either the xfkVA or
kWh property.
The “allocationfactor” property of each load defined by XFKVA defaults to 0.5. Thus,
the nominal kW of the load is defined by the present values of allocationfactor, xfkVA,
and PF.
XFKVA Property
This is the kVA rating of the transformer supplying the load. In the case where several
loads are lumped together, use the total kVA rating. Obviously, you could use an
artificial value for this property simply to skew the allocation.
3
AllocationFactor Property
The AllocationFactor is multiplied times the XFKVA property to determine the estimate
of the total load kVA. This is then split into kW and kvar using the present value of the
PF property. The default value is 0.5, which is a common average value for many
feeders. You may set this to a different value. The load allocation algorithm will then
start from the value you set and ratios it up or down to gain a more satisfactory match to
the objective.
CFactor Property
This factor converts the average kW usage to peak kW, kvar at the specified PF. This
factor is adjusted for loads defined by the kWh property instead of the AllocationFactor
property. The default value is 4. Typical values run in the 1-4 range.
4
command again and it will repeat the process starting from where the last solution left
off.
Summary
In summary, load allocation is carried out by
1. Building the circuit model
a. Define Loads with XFKVA or kWH property
b. Introduce sufficient 1-phase loads to allow the allocation algorithm to
adjust for unbalance
2. Defining an EnergyMeter object at the head of each feeder of interest.
3. Defining Sensor objects at other places if desired.
4. Solve in snapshot model, adjusting allocation factors to converge if necessary
5. Issue AllocateLoads command or Estimate command
6. Check power flow results to check the allocation.
7. Export Estimate will produce a CSV file with a summary of how well each
EnergyMeter object and Sensor object register values match the present solution
8. Dump Allocationfactors will produce a script that can be used to define the
allocation factors in future simulations directly without having to perform the
allocation function. For example (a snippet from a dump file):
Load.s50c.AllocationFactor=0.57336
Load.s56b.AllocationFactor=0.58478
Load.s58b.AllocationFactor=0.58478
Load.s59b.AllocationFactor=0.58478
Load.s60a.CFactor=4.5404
Load.s62c.AllocationFactor=0.57336
Load.s63a.AllocationFactor=0.56755
Load.s64b.AllocationFactor=0.58478
Load.s69a.AllocationFactor=0.56944
Load.s70a.AllocationFactor=0.56944
Load.s71a.AllocationFactor=0.56944
Load.s73c.CFactor=4.468
Load.s74c.AllocationFactor=0.5585
Load.s75c.AllocationFactor=0.5585
Load.s76a.AllocationFactor=0.56944
Load.s76b.AllocationFactor=0.56743
Load.s76c.AllocationFactor=0.5585