From c692b1d2cacba940093e5c15a350d225ff33a199 Mon Sep 17 00:00:00 2001 From: Qiuhua Huang Date: Wed, 12 Apr 2017 14:37:03 -0700 Subject: [PATCH 01/36] update the dynamic load models for 3phase --- .../dynamic/impl/DStabNetwork3phaseImpl.java | 1532 +++++++------- .../dynamic/model/DynLoadModel1Phase.java | 278 +-- .../dynamic/model/DynamicModel1Phase.java | 420 ++-- .../dynamic/model/DynamicModel3Phase.java | 403 ++-- .../model/impl/SinglePhaseACMotor.java | 1756 ++++++++--------- .../test/TestSinglePhaseACMotorModel.java | 662 +++---- .../threeSeq/algo/DStab3SeqSolverImpl.java | 633 +++--- 7 files changed, 2842 insertions(+), 2842 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java index fad36b7..f48eedc 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java @@ -1,766 +1,766 @@ -package org.ipss.threePhase.dynamic.impl; - -import static com.interpss.common.util.IpssLogger.ipssLogger; -import static org.ipss.threePhase.util.ThreePhaseUtilFunction.threePhaseGenAptr; - -import java.util.Hashtable; -import java.util.LinkedList; -import java.util.Queue; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.interpss.numeric.datatype.Complex3x3; -import org.interpss.numeric.datatype.Unit.UnitType; -import org.interpss.numeric.exp.IpssNumericException; -import org.interpss.numeric.sparse.ISparseEqnComplexMatrix3x3; -import org.ipss.threePhase.basic.Branch3Phase; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Gen3Phase; -import org.ipss.threePhase.basic.Load3Phase; -import org.ipss.threePhase.dynamic.DStabNetwork3Phase; -import org.ipss.threePhase.dynamic.model.DStabGen3PhaseAdapter; -import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; -import org.ipss.threePhase.dynamic.model.DynLoadModel3Phase; -import org.ipss.threePhase.util.ThreeSeqLoadProcessor; - -import com.interpss.common.datatype.Constants; -import com.interpss.common.exp.InterpssException; -import com.interpss.common.util.IpssLogger; -import com.interpss.core.aclf.AclfBus; -import com.interpss.core.aclf.AclfGen; -import com.interpss.core.aclf.AclfLoad; -import com.interpss.core.acsc.AcscBranch; -import com.interpss.core.acsc.AcscBus; -import com.interpss.core.acsc.SequenceCode; -import com.interpss.core.acsc.XfrConnectCode; -import com.interpss.core.net.Branch; -import com.interpss.core.net.Bus; -import com.interpss.core.net.NetworkType; -import com.interpss.core.sparse.impl.SparseEqnComplexMatrix3x3Impl; -import com.interpss.dstab.DStabBus; -import com.interpss.dstab.DStabGen; -import com.interpss.dstab.dynLoad.DynLoadModel; -import com.interpss.dstab.impl.DStabilityNetworkImpl; - -public class DStabNetwork3phaseImpl extends DStabilityNetworkImpl implements DStabNetwork3Phase { - - protected ISparseEqnComplexMatrix3x3 yMatrixAbc = null; - protected boolean is3PhaseNetworkInitialized = false; - protected Hashtable threePhaseCurInjTable = null; - private boolean isLoadModelConverted = false; - - - @Override - public boolean initThreePhaseFromLfResult() { - - /* - * initialize the bus phase voltages. - * Special attentions need to be paid to the buses within the subtransmission and the distribution system, if any, - * connected to the LV side of Delta/Yg connected step-down transformer - * - * steps: - * - * (1) initialization by setting the visited status false - * (2) search the step-down delta/Y connected transformers - * (3) starting from the low voltage side of the transformers, set the phase voltage with 30 deg lagging w.r.t the positive sequenc voltage, - * by assuming the connection meeting the U.S. Delta connection standard, with high voltage side leading 30 degree, always - * Finally, set the visited attribute to be true. - * (4) iterate over all step-down transformers and the connected subtransmissions - * (5) for the rest of the buses, set the phase votlages directly based on the positive sequence voltage - * - */ - - //step (1) - for(AcscBranch bra: this.getBranchList()){ - bra.setBooleanFlag(false); - } - for(Bus b: this.getBusList()){ - b.setBooleanFlag(false); - b.setIntFlag(0); - } - - double phaseShiftDeg = 0; - - for(AcscBranch bra: this.getBranchList()){ - if(bra.isActive() && bra.isXfr()){ - if((isDeltaConnected(bra.getXfrFromConnectCode()) && - !isDeltaConnected(bra.getXfrToConnectCode())) - - || - (!isDeltaConnected(bra.getXfrFromConnectCode()) && - isDeltaConnected(bra.getXfrToConnectCode()))){ - - bra.setBooleanFlag(true); - - //NOTE When Delta connection is on the low voltage side (step up), such as the case of Generation connection - // all buses on the low side should be shifted -30 deg. On the hand, if the the Delta Connection is on the high - // voltage side, the low voltage side should be shifted - 30 deg. - // - phaseShiftDeg = -30; - Bus3Phase StartingBus =null; - - //high voltage side leads 30 deg, always starts from the low voltage side - if(bra.getFromAclfBus().getBaseVoltage()>bra.getToAclfBus().getBaseVoltage()){ - - StartingBus = (Bus3Phase) bra.getToAclfBus(); - - if(isDeltaConnected(bra.getXfrFromConnectCode())) { // if low voltage side is delta connected, then it is delta11 - //TODO fix the input xfr connect code issue - bra.setXfrFromConnectCode(XfrConnectCode.DELTA11); - } - } - else { - - StartingBus = (Bus3Phase) bra.getFromAclfBus(); - if(isDeltaConnected(bra.getXfrToConnectCode())) { // if low voltage side is delta connected, then it is delta11 - - //TODO fix the input xfr connect code issue - bra.setXfrToConnectCode(XfrConnectCode.DELTA11); - } - } - - Complex vpos = StartingBus.getVoltage(); - Complex va = vpos.multiply(phaseShiftCplxFactor(phaseShiftDeg)); - Complex vb = va.multiply(phaseShiftCplxFactor(-120)); - Complex vc = va.multiply(phaseShiftCplxFactor(120)); - StartingBus.set3PhaseVoltages(new Complex3x1(va,vb,vc)); - StartingBus.setVoltage(StartingBus.getThreeSeqVoltage().b_1); - - Queue q = new LinkedList(); - q.add(StartingBus); - - BFSSubTransmission(phaseShiftDeg,q); - } - } - } - - - - // initialize the phase voltages of those which are not set before, three-phase generation power output and load - for(AcscBus b: this.getBusList()){ - - if(b.isActive() && !b.isBooleanFlag()){ - Complex vpos = b.getVoltage(); - Complex va = vpos; - Complex vb = va.multiply(phaseShiftCplxFactor(-120)); - Complex vc = va.multiply(phaseShiftCplxFactor(120)); - ((Bus3Phase) b).set3PhaseVoltages(new Complex3x1(va,vb,vc)); - } - - //initialize the 3p power output of generation; - if(b.isGen()){ - for(AclfGen gen: b.getContributeGenList()){ - if(gen instanceof Gen3Phase){ - Gen3Phase ph3Gen = (Gen3Phase) gen; - Complex phaseGen = gen.getGen();// phase gen and 3-phase gen are of the same value in PU - ph3Gen.setPower3Phase(new Complex3x1(phaseGen,phaseGen,phaseGen), UnitType.PU); - } - } - } - - // initialize the load 3-phase power - if(b.isLoad()){ - for(AclfLoad load: b.getContributeLoadList()){ - if(load instanceof Load3Phase){ - Load3Phase ph3Load = (Load3Phase) load; - Complex phaseLoad = load.getLoad(b.getVoltageMag()); // phase load and 3-phase load are of the same value in PU - - ph3Load.set3PhaseLoad(new Complex3x1(phaseLoad,phaseLoad,phaseLoad)); - } - } - } - - } - - - - return is3PhaseNetworkInitialized= true; - } - - private boolean isDeltaConnected(XfrConnectCode code){ - return code ==XfrConnectCode.DELTA || - code== XfrConnectCode.DELTA11; - } - - private void BFSSubTransmission (double phaseShiftDeg, Queue onceVisitedBuses){ - - //Retrieves and removes the head of this queue, or returns null if this queue is empty. - while(!onceVisitedBuses.isEmpty()){ - Bus3Phase startingBus = onceVisitedBuses.poll(); - startingBus.setBooleanFlag(true); - startingBus.setIntFlag(2); - - if(startingBus!=null){ - for(Branch connectedBra: startingBus.getBranchList()){ - if(connectedBra.isActive() && !connectedBra.isBooleanFlag()){ - try { - Bus findBus = connectedBra.getOppositeBus(startingBus); - - //update status - connectedBra.setBooleanFlag(true); - - //for first time visited buses - - if(findBus.getIntFlag()==0){ - findBus.setIntFlag(1); - onceVisitedBuses.add((Bus3Phase) findBus); - - // update the phase voltage - Complex vpos = ((AclfBus)findBus).getVoltage(); - Complex va = vpos.multiply(phaseShiftCplxFactor(phaseShiftDeg)); - Complex vb = va.multiply(phaseShiftCplxFactor(-120.0d)); - Complex vc = va.multiply(phaseShiftCplxFactor(120.0d)); - - ((Bus3Phase) findBus).set3PhaseVoltages(new Complex3x1(va,vb,vc)); - ((AclfBus)findBus).setVoltage(((Bus3Phase) findBus).getThreeSeqVoltage().b_1); - } - } catch (InterpssException e) { - - e.printStackTrace(); - } - - } - } - - } - - } - } - - private Complex phaseShiftCplxFactor(double shiftDeg){ - return new Complex(Math.cos(shiftDeg/180.0d*Math.PI),Math.sin(shiftDeg/180.0d*Math.PI)); - } - - @Override - public ISparseEqnComplexMatrix3x3 formYMatrixABC() throws Exception { - - double yiiMinTolerance = 1.0E-8; - - // check if load model is converted - if(!this.isLoadModelConverted ) - convertLoadModel(); - - yMatrixAbc = new SparseEqnComplexMatrix3x3Impl(getNoBus()); - - for(DStabBus b:this.getBusList()){ - if(b.isActive()){ - if(b instanceof Bus3Phase){ - int i = b.getSortNumber(); - Bus3Phase ph3Bus = (Bus3Phase) b; - Complex3x3 yii = ph3Bus.getYiiAbc(); - // check if there is any Yii = 0.0 (abs(Yii) <1.0E-8) - - if(yii.aa.abs()0){ - - for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ - if(load3p.isActive()){ - threePhasedynLoadEquivY = threePhasedynLoadEquivY.add(load3p.getEquivYabc()); - } - } - } - - //TODO process 1-phase dynamic loads on each phase - Complex phaseAdynLoadEquivY = new Complex(0,0); - Complex phaseBdynLoadEquivY = new Complex(0,0); - Complex phaseCdynLoadEquivY = new Complex(0,0); - - if(bus3p.getPhaseADynLoadList().size()>0){ - - for(DynLoadModel1Phase load:bus3p.getPhaseADynLoadList()){ - if(load.isActive()){ - phaseAdynLoadEquivY = phaseAdynLoadEquivY.add(load.getEquivY()); - - } - } - - } - - if(bus3p.getPhaseBDynLoadList().size()>0){ - - for(DynLoadModel1Phase load:bus3p.getPhaseBDynLoadList()){ - if(load.isActive()){ - phaseBdynLoadEquivY = phaseBdynLoadEquivY.add(load.getEquivY()); - - } - } - - } - - if(bus3p.getPhaseCDynLoadList().size()>0){ - - for(DynLoadModel1Phase load:bus3p.getPhaseCDynLoadList()){ - if(load.isActive()){ - phaseCdynLoadEquivY = phaseCdynLoadEquivY.add(load.getEquivY()); - - } - } - - - } - - if(phaseAdynLoadEquivY.abs()>0 || phaseBdynLoadEquivY.abs()>0 || phaseCdynLoadEquivY.abs()>0 ){ - Complex3x3 y = new Complex3x3(phaseAdynLoadEquivY,phaseBdynLoadEquivY,phaseCdynLoadEquivY) ; - - - yMatrixAbc.addToA(y, bus.getSortNumber(), bus.getSortNumber()); - } - - - // Consider the equivalent Y of three-phase dynamic loads - if(threePhasedynLoadEquivY.abs()>0){ - yMatrixAbc.addToA(threePhasedynLoadEquivY, bus.getSortNumber(), bus.getSortNumber()); - } - - - } - } - - - - - setYMatrixDirty(true); - - return yMatrixAbc; - } - - private void convertLoadModel() { - for ( DStabBus busi : getBusList() ) { - //only the active buses will be initialized - if(busi.isActive()){ - //init three sequence load - ThreeSeqLoadProcessor.initEquivLoadY120(busi); - } - } - this.isLoadModelConverted = true; - - } - - @Override - public ISparseEqnComplexMatrix3x3 getYMatrixABC(){ - return this.yMatrixAbc; - } - - @Override - public boolean run3PhaseLoadflow() { - throw new UnsupportedOperationException(); - } - - - @Override - public boolean solveNetEqn() { - try { - - if(isYMatrixDirty()){ - getYMatrixABC().luMatrix(Constants.Matrix_LU_Tolerance); - setYMatrixDirty(false); - } - - // Calculate and set generator injection current - for( Bus b : getBusList()) { - DStabBus bus = (DStabBus)b; - - if(bus.isActive()){ - Bus3Phase bus3p = (Bus3Phase) bus; - Complex3x1 iInject = new Complex3x1(); - - if(bus.getContributeGenList().size()>0){ - for(AclfGen gen: bus.getContributeGenList()){ - if(gen.isActive() && gen instanceof DStabGen){ - DStabGen dynGen = (DStabGen)gen; - if( dynGen.getDynamicGenDevice()!=null){ - DStabGen3PhaseAdapter gen3P = threePhaseGenAptr.apply(dynGen); - iInject = iInject.add(gen3P.getISource3Phase()); - - //System.out.println("Iinj@Gen-"+dynGen.getId()+", "+iInject.toString()); - } - - } - } - } - //TODO 3-phase dynamic load list - //if(bus3p.getp) - if(bus3p.isLoad()){ - - //// Phase A - if(bus3p.getPhaseADynLoadList().size()>0){ - Complex iPhAInj = new Complex(0,0); - - for(DynLoadModel1Phase load1p:bus3p.getPhaseADynLoadList()){ - if(load1p.isActive()){ - iPhAInj = iPhAInj.add(load1p.getCompensateCurInj()); - // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); - } - } - - if(iPhAInj.abs()>0.0) - iInject.a_0 = iInject.a_0.add(iPhAInj); - } - - // Phase B - if(bus3p.getPhaseBDynLoadList().size()>0){ - Complex iPhBInj = new Complex(0,0); - - for(DynLoadModel1Phase load1p:bus3p.getPhaseBDynLoadList()){ - if(load1p.isActive()){ - iPhBInj = iPhBInj.add(load1p.getCompensateCurInj()); - // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); - } - } - - if(iPhBInj.abs()>0.0) - iInject.b_1 = iInject.b_1.add(iPhBInj); - } - - // Phase C - if(bus3p.getPhaseCDynLoadList().size()>0){ - Complex iPhCInj = new Complex(0,0); - - for(DynLoadModel1Phase load1p:bus3p.getPhaseCDynLoadList()){ - if(load1p.isActive()){ - iPhCInj = iPhCInj.add(load1p.getCompensateCurInj()); - // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); - } - } - - if(iPhCInj.abs()>0.0) - iInject.c_2 = iInject.c_2.add(iPhCInj); - } - - //TODO three-phase dynamic loads - - if(bus3p.getThreePhaseDynLoadList().size()>0){ - for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ - if(load3p.isActive()){ - iInject = iInject.add(load3p.getISource3Phase()); - } - } - } - } - - if(iInject == null){ - throw new Error (bus.getId()+" current injection is null"); - } - - // add external/customized bus current injection - if(this.get3phaseCustomCurrInjTable()!=null){ - if(this.get3phaseCustomCurrInjTable().get(bus.getId())!=null) - iInject = iInject.add(this.get3phaseCustomCurrInjTable().get(bus.getId())); - } - - getYMatrixABC().setBi(iInject, bus.getSortNumber()); - } - } - - // ISparseEqnComplexMatrix3x3 Yabc = getYMatrixABC(); - // System.out.println(Yabc.getSparseEqnComplex()); - - getYMatrixABC().solveEqn(); - - // update bus voltage and machine Pe - for( Bus b : getBusList()) { - DStabBus bus = (DStabBus)b; - if(bus.isActive()){ - Complex3x1 vabc = getYMatrixABC().getX(bus.getSortNumber()); - //if(bus.getId().equals("Bus12")) - //System.out.println("Bus, Vabc:"+b.getId()+","+vabc.toString()); - - if(!vabc.a_0.isNaN()){ - - //if(bus instanceof Bus3Phase){ - Bus3Phase bus3P = (Bus3Phase) bus; - bus3P.set3PhaseVoltages(vabc); - - // update the positive sequence voltage - Complex v = bus3P.getThreeSeqVoltage().b_1; - bus.setVoltage(v); - // System.out.println("posV @ bus :"+v.toString()+","+bus.getId()); - - // } - - } - else - throw new Error (bus.getId()+" solution voltage is NaN"); - } - } - - } - catch (IpssNumericException e) { - ipssLogger.severe(e.toString()); - return false; - } - - return true; - } - - @Override - public boolean initDStabNet() { - boolean initFlag = true; - IpssLogger.getLogger().info("Start three-phase DStabNetwork initialization..."); - - - //TODO this is a must step, otherwise the system cannot be initialized properly - if(this.getNetworkType()==NetworkType.TRANSMISSION && !is3PhaseNetworkInitialized) - initThreePhaseFromLfResult(); - - for ( DStabBus b : getBusList() ) { - - if( b instanceof Bus3Phase){ - Bus3Phase bus =(Bus3Phase) b; - - //only the active buses will be initialized - if(b.isActive()){ - // set bus initial vaule - bus.setInitLoad(bus.getLoadPQ()); - bus.setInitVoltMag(bus.getVoltageMag()); - bus.setVoltage(bus.getThreeSeqVoltage().b_1); // make sure the positive sequence voltage is set up; - - //save the three-phase voltage - bus.setThreePhaseInitVoltage(bus.get3PhaseVotlages()); - - //1) init bus dynamic signal calculation, - // for example, bus Frequency measurement - bus.initStates(); - - - //2) initialize the bus generator - //TODO add the three-phase dynamic generation list to the bus - bus.getContributeGenList().addAll(bus.getThreePhaseGenList()); - - for(AclfGen gen: bus.getContributeGenList()){ - if(gen.isActive() && gen instanceof DStabGen){ - DStabGen dynGen = (DStabGen) gen; - //TODO 11/19/2015 consider generic generation models - /* - if(dynGen.getMach()!=null){ - dynGen.getMach().calMultiFactors(); - if(!dynGen.getMach().initStates(bus)) - initFlag = false; - } - */ - - if(dynGen.getDynamicGenDevice()!=null){ - if(!dynGen.getDynamicGenDevice().initStates(bus)) - initFlag = false; - } - - } - } - - - //3) process the dynamic loads, for each load, subtract the portion of dynamic loads, including - // 3-phase dynamic loads and 1-phase dynamic loads from the total loads - - - if(b.isLoad()){ - - // first process the 3phase dynamic loads - double totalDynLoadPercent = 0; - Complex totalPosSeqDynLoadPQ = new Complex(0,0); - - if( b.getDynLoadModelList().size()>0){ - for(DynLoadModel load:bus.getDynLoadModelList()){ - if(load.isActive()){ - totalDynLoadPercent += load.getLoadPercent(); - - } - } - - // check the value of totalDynLoadPercent, it must be <=100.0; otherwise rescale it down to 100. - if(totalDynLoadPercent>100.0){ - ipssLogger.severe("The total dynamic loads accout for more than 100% of the bus load. Rescaled down to 100%"); - for(DynLoadModel load:bus.getDynLoadModelList()){ - if(load.isActive()){ - load.setLoadPercent(load.getLoadPercent()*100.0/totalDynLoadPercent); - } - } - totalDynLoadPercent = 100.0; - } - - // the init load is only available after initialization - for(DynLoadModel load:bus.getDynLoadModelList()){ - if(load.isActive()){ - load.initStates(); - totalPosSeqDynLoadPQ = totalPosSeqDynLoadPQ.add(load.getInitLoadPQ()); - } - } - - - } - - Complex orginalLoadPQ = bus.getNetLoadResults(); - bus.setNetLoadResults(orginalLoadPQ.subtract(totalPosSeqDynLoadPQ)); - - - //TODO init the single-phase, three-phase dynamic loads - - - // second, process the 1-phase dynamic loads - - - Complex totalPhaseADynLoadPQ = new Complex(0,0); - Complex totalPhaseBDynLoadPQ = new Complex(0,0); - Complex totalPhaseCDynLoadPQ = new Complex(0,0); - Complex3x1 total3PhaseDynLoadPQ = new Complex3x1(); - - - //TODO check the total dynamic LOAD percentage - - - for(DynLoadModel1Phase dynLoadPA : bus.getPhaseADynLoadList()){ - if(dynLoadPA.isActive()){ - dynLoadPA.initStates(); - - totalPhaseADynLoadPQ = totalPhaseADynLoadPQ.add(dynLoadPA.getInitLoadPQ()); - } - } - - for(DynLoadModel1Phase dynLoadPB : bus.getPhaseBDynLoadList()){ - if(dynLoadPB.isActive()){ - dynLoadPB.initStates(); - - totalPhaseBDynLoadPQ = totalPhaseBDynLoadPQ.add(dynLoadPB.getInitLoadPQ()); - } - } - - - for(DynLoadModel1Phase dynLoadPC : bus.getPhaseCDynLoadList()){ - if(dynLoadPC.isActive()){ - dynLoadPC.initStates(); - - totalPhaseCDynLoadPQ = totalPhaseCDynLoadPQ.add(dynLoadPC.getInitLoadPQ()); - } - } - - - for(DynLoadModel3Phase dynLoad3P : bus.getThreePhaseDynLoadList()){ - if(dynLoad3P.isActive()){ - dynLoad3P.initStates(); - total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add(dynLoad3P.getInitLoadPQ3Phase()); - } - } - - // sum up the 1-phase and 3-phase dynamic loads - total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add( - new Complex3x1(totalPhaseADynLoadPQ,totalPhaseBDynLoadPQ,totalPhaseCDynLoadPQ)); - - - if(bus.get3PhaseTotalLoad().abs()>0){ - - bus.set3PhaseNetLoadResults(bus.get3PhaseTotalLoad().subtract(total3PhaseDynLoadPQ)); - } - - - - // add the dynamic loads to dynamicBusDeviceList() - bus.getDynamicBusDeviceList().addAll(bus.getDynLoadModelList()); //three-sequence based - bus.getDynamicBusDeviceList().addAll(bus.getPhaseADynLoadList()); // single-phase based - bus.getDynamicBusDeviceList().addAll(bus.getPhaseBDynLoadList()); // single-phase based - bus.getDynamicBusDeviceList().addAll(bus.getPhaseCDynLoadList()); // single-phase based - bus.getDynamicBusDeviceList().addAll(bus.getThreePhaseDynLoadList()); // three-phase based - - }//end if-isLoad - - - } - - - - } - //end of if- check if the processing bus is of Bus3Phase type - else{ - throw new Error("The processing bus is not a Bus3Phase type # "+b.getId()); - } - } - - //form the Ymatrix - try { - formYMatrixABC(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - initFlag = false; - } - - if(initFlag) this.isInitialized = true; - return initFlag; - } - - @Override - public boolean solvePosSeqNetEqn() { -// if(this.getYMatrix()== null){ -// this.yMatrix = this.formYMatrix(SequenceCode.POSITIVE, false); -// this.setYMatrixDirty(true); -// } - return super.solveNetEqn(); - } - - @Override - public boolean initPosSeqDStabNet() { - - return super.initDStabNet(); - } - - @Override - public Hashtable get3phaseCustomCurrInjTable() { - - return this.threePhaseCurInjTable; - } - - @Override - public void set3phaseCustomCurrInjTable( - Hashtable new3PhaseCurInjTable) { - this.threePhaseCurInjTable = new3PhaseCurInjTable; - - } - - - - - -} +package org.ipss.threePhase.dynamic.impl; + +import static com.interpss.common.util.IpssLogger.ipssLogger; +import static org.ipss.threePhase.util.ThreePhaseUtilFunction.threePhaseGenAptr; + +import java.util.Hashtable; +import java.util.LinkedList; +import java.util.Queue; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Complex3x3; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.interpss.numeric.exp.IpssNumericException; +import org.interpss.numeric.sparse.ISparseEqnComplexMatrix3x3; +import org.ipss.threePhase.basic.Branch3Phase; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Gen3Phase; +import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.dynamic.model.DStabGen3PhaseAdapter; +import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; +import org.ipss.threePhase.dynamic.model.DynLoadModel3Phase; +import org.ipss.threePhase.util.ThreeSeqLoadProcessor; + +import com.interpss.common.datatype.Constants; +import com.interpss.common.exp.InterpssException; +import com.interpss.common.util.IpssLogger; +import com.interpss.core.aclf.AclfBus; +import com.interpss.core.aclf.AclfGen; +import com.interpss.core.aclf.AclfLoad; +import com.interpss.core.acsc.AcscBranch; +import com.interpss.core.acsc.AcscBus; +import com.interpss.core.acsc.SequenceCode; +import com.interpss.core.acsc.XfrConnectCode; +import com.interpss.core.net.Branch; +import com.interpss.core.net.Bus; +import com.interpss.core.net.NetworkType; +import com.interpss.core.sparse.impl.SparseEqnComplexMatrix3x3Impl; +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.DStabGen; +import com.interpss.dstab.dynLoad.DynLoadModel; +import com.interpss.dstab.impl.DStabilityNetworkImpl; + +public class DStabNetwork3phaseImpl extends DStabilityNetworkImpl implements DStabNetwork3Phase { + + protected ISparseEqnComplexMatrix3x3 yMatrixAbc = null; + protected boolean is3PhaseNetworkInitialized = false; + protected Hashtable threePhaseCurInjTable = null; + private boolean isLoadModelConverted = false; + + + @Override + public boolean initThreePhaseFromLfResult() { + + /* + * initialize the bus phase voltages. + * Special attentions need to be paid to the buses within the subtransmission and the distribution system, if any, + * connected to the LV side of Delta/Yg connected step-down transformer + * + * steps: + * + * (1) initialization by setting the visited status false + * (2) search the step-down delta/Y connected transformers + * (3) starting from the low voltage side of the transformers, set the phase voltage with 30 deg lagging w.r.t the positive sequenc voltage, + * by assuming the connection meeting the U.S. Delta connection standard, with high voltage side leading 30 degree, always + * Finally, set the visited attribute to be true. + * (4) iterate over all step-down transformers and the connected subtransmissions + * (5) for the rest of the buses, set the phase votlages directly based on the positive sequence voltage + * + */ + + //step (1) + for(AcscBranch bra: this.getBranchList()){ + bra.setBooleanFlag(false); + } + for(Bus b: this.getBusList()){ + b.setBooleanFlag(false); + b.setIntFlag(0); + } + + double phaseShiftDeg = 0; + + for(AcscBranch bra: this.getBranchList()){ + if(bra.isActive() && bra.isXfr()){ + if((isDeltaConnected(bra.getXfrFromConnectCode()) && + !isDeltaConnected(bra.getXfrToConnectCode())) + + || + (!isDeltaConnected(bra.getXfrFromConnectCode()) && + isDeltaConnected(bra.getXfrToConnectCode()))){ + + bra.setBooleanFlag(true); + + //NOTE When Delta connection is on the low voltage side (step up), such as the case of Generation connection + // all buses on the low side should be shifted -30 deg. On the hand, if the the Delta Connection is on the high + // voltage side, the low voltage side should be shifted - 30 deg. + // + phaseShiftDeg = -30; + Bus3Phase StartingBus =null; + + //high voltage side leads 30 deg, always starts from the low voltage side + if(bra.getFromAclfBus().getBaseVoltage()>bra.getToAclfBus().getBaseVoltage()){ + + StartingBus = (Bus3Phase) bra.getToAclfBus(); + + if(isDeltaConnected(bra.getXfrFromConnectCode())) { // if low voltage side is delta connected, then it is delta11 + //TODO fix the input xfr connect code issue + bra.setXfrFromConnectCode(XfrConnectCode.DELTA11); + } + } + else { + + StartingBus = (Bus3Phase) bra.getFromAclfBus(); + if(isDeltaConnected(bra.getXfrToConnectCode())) { // if low voltage side is delta connected, then it is delta11 + + //TODO fix the input xfr connect code issue + bra.setXfrToConnectCode(XfrConnectCode.DELTA11); + } + } + + Complex vpos = StartingBus.getVoltage(); + Complex va = vpos.multiply(phaseShiftCplxFactor(phaseShiftDeg)); + Complex vb = va.multiply(phaseShiftCplxFactor(-120)); + Complex vc = va.multiply(phaseShiftCplxFactor(120)); + StartingBus.set3PhaseVoltages(new Complex3x1(va,vb,vc)); + StartingBus.setVoltage(StartingBus.getThreeSeqVoltage().b_1); + + Queue q = new LinkedList(); + q.add(StartingBus); + + BFSSubTransmission(phaseShiftDeg,q); + } + } + } + + + + // initialize the phase voltages of those which are not set before, three-phase generation power output and load + for(AcscBus b: this.getBusList()){ + + if(b.isActive() && !b.isBooleanFlag()){ + Complex vpos = b.getVoltage(); + Complex va = vpos; + Complex vb = va.multiply(phaseShiftCplxFactor(-120)); + Complex vc = va.multiply(phaseShiftCplxFactor(120)); + ((Bus3Phase) b).set3PhaseVoltages(new Complex3x1(va,vb,vc)); + } + + //initialize the 3p power output of generation; + if(b.isGen()){ + for(AclfGen gen: b.getContributeGenList()){ + if(gen instanceof Gen3Phase){ + Gen3Phase ph3Gen = (Gen3Phase) gen; + Complex phaseGen = gen.getGen();// phase gen and 3-phase gen are of the same value in PU + ph3Gen.setPower3Phase(new Complex3x1(phaseGen,phaseGen,phaseGen), UnitType.PU); + } + } + } + + // initialize the load 3-phase power + if(b.isLoad()){ + for(AclfLoad load: b.getContributeLoadList()){ + if(load instanceof Load3Phase){ + Load3Phase ph3Load = (Load3Phase) load; + Complex phaseLoad = load.getLoad(b.getVoltageMag()); // phase load and 3-phase load are of the same value in PU + + ph3Load.set3PhaseLoad(new Complex3x1(phaseLoad,phaseLoad,phaseLoad)); + } + } + } + + } + + + + return is3PhaseNetworkInitialized= true; + } + + private boolean isDeltaConnected(XfrConnectCode code){ + return code ==XfrConnectCode.DELTA || + code== XfrConnectCode.DELTA11; + } + + private void BFSSubTransmission (double phaseShiftDeg, Queue onceVisitedBuses){ + + //Retrieves and removes the head of this queue, or returns null if this queue is empty. + while(!onceVisitedBuses.isEmpty()){ + Bus3Phase startingBus = onceVisitedBuses.poll(); + startingBus.setBooleanFlag(true); + startingBus.setIntFlag(2); + + if(startingBus!=null){ + for(Branch connectedBra: startingBus.getBranchList()){ + if(connectedBra.isActive() && !connectedBra.isBooleanFlag()){ + try { + Bus findBus = connectedBra.getOppositeBus(startingBus); + + //update status + connectedBra.setBooleanFlag(true); + + //for first time visited buses + + if(findBus.getIntFlag()==0){ + findBus.setIntFlag(1); + onceVisitedBuses.add((Bus3Phase) findBus); + + // update the phase voltage + Complex vpos = ((AclfBus)findBus).getVoltage(); + Complex va = vpos.multiply(phaseShiftCplxFactor(phaseShiftDeg)); + Complex vb = va.multiply(phaseShiftCplxFactor(-120.0d)); + Complex vc = va.multiply(phaseShiftCplxFactor(120.0d)); + + ((Bus3Phase) findBus).set3PhaseVoltages(new Complex3x1(va,vb,vc)); + ((AclfBus)findBus).setVoltage(((Bus3Phase) findBus).getThreeSeqVoltage().b_1); + } + } catch (InterpssException e) { + + e.printStackTrace(); + } + + } + } + + } + + } + } + + private Complex phaseShiftCplxFactor(double shiftDeg){ + return new Complex(Math.cos(shiftDeg/180.0d*Math.PI),Math.sin(shiftDeg/180.0d*Math.PI)); + } + + @Override + public ISparseEqnComplexMatrix3x3 formYMatrixABC() throws Exception { + + double yiiMinTolerance = 1.0E-8; + + // check if load model is converted + if(!this.isLoadModelConverted ) + convertLoadModel(); + + yMatrixAbc = new SparseEqnComplexMatrix3x3Impl(getNoBus()); + + for(DStabBus b:this.getBusList()){ + if(b.isActive()){ + if(b instanceof Bus3Phase){ + int i = b.getSortNumber(); + Bus3Phase ph3Bus = (Bus3Phase) b; + Complex3x3 yii = ph3Bus.getYiiAbc(); + // check if there is any Yii = 0.0 (abs(Yii) <1.0E-8) + + if(yii.aa.abs()0){ + + for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ + if(load3p.isActive()){ + threePhasedynLoadEquivY = threePhasedynLoadEquivY.add(load3p.getEquivYabc()); + } + } + } + + //TODO process 1-phase dynamic loads on each phase + Complex phaseAdynLoadEquivY = new Complex(0,0); + Complex phaseBdynLoadEquivY = new Complex(0,0); + Complex phaseCdynLoadEquivY = new Complex(0,0); + + if(bus3p.getPhaseADynLoadList().size()>0){ + + for(DynLoadModel1Phase load:bus3p.getPhaseADynLoadList()){ + if(load.isActive()){ + phaseAdynLoadEquivY = phaseAdynLoadEquivY.add(load.getEquivY()); + + } + } + + } + + if(bus3p.getPhaseBDynLoadList().size()>0){ + + for(DynLoadModel1Phase load:bus3p.getPhaseBDynLoadList()){ + if(load.isActive()){ + phaseBdynLoadEquivY = phaseBdynLoadEquivY.add(load.getEquivY()); + + } + } + + } + + if(bus3p.getPhaseCDynLoadList().size()>0){ + + for(DynLoadModel1Phase load:bus3p.getPhaseCDynLoadList()){ + if(load.isActive()){ + phaseCdynLoadEquivY = phaseCdynLoadEquivY.add(load.getEquivY()); + + } + } + + + } + + if(phaseAdynLoadEquivY.abs()>0 || phaseBdynLoadEquivY.abs()>0 || phaseCdynLoadEquivY.abs()>0 ){ + Complex3x3 y = new Complex3x3(phaseAdynLoadEquivY,phaseBdynLoadEquivY,phaseCdynLoadEquivY) ; + + + yMatrixAbc.addToA(y, bus.getSortNumber(), bus.getSortNumber()); + } + + + // Consider the equivalent Y of three-phase dynamic loads + if(threePhasedynLoadEquivY.abs()>0){ + yMatrixAbc.addToA(threePhasedynLoadEquivY, bus.getSortNumber(), bus.getSortNumber()); + } + + + } + } + + + + + setYMatrixDirty(true); + + return yMatrixAbc; + } + + private void convertLoadModel() { + for ( DStabBus busi : getBusList() ) { + //only the active buses will be initialized + if(busi.isActive()){ + //init three sequence load + ThreeSeqLoadProcessor.initEquivLoadY120(busi); + } + } + this.isLoadModelConverted = true; + + } + + @Override + public ISparseEqnComplexMatrix3x3 getYMatrixABC(){ + return this.yMatrixAbc; + } + + @Override + public boolean run3PhaseLoadflow() { + throw new UnsupportedOperationException(); + } + + + @Override + public boolean solveNetEqn() { + try { + + if(isYMatrixDirty()){ + getYMatrixABC().luMatrix(Constants.Matrix_LU_Tolerance); + setYMatrixDirty(false); + } + + // Calculate and set generator injection current + for( Bus b : getBusList()) { + DStabBus bus = (DStabBus)b; + + if(bus.isActive()){ + Bus3Phase bus3p = (Bus3Phase) bus; + Complex3x1 iInject = new Complex3x1(); + + if(bus.getContributeGenList().size()>0){ + for(AclfGen gen: bus.getContributeGenList()){ + if(gen.isActive() && gen instanceof DStabGen){ + DStabGen dynGen = (DStabGen)gen; + if( dynGen.getDynamicGenDevice()!=null){ + DStabGen3PhaseAdapter gen3P = threePhaseGenAptr.apply(dynGen); + iInject = iInject.add(gen3P.getISource3Phase()); + + //System.out.println("Iinj@Gen-"+dynGen.getId()+", "+iInject.toString()); + } + + } + } + } + //TODO 3-phase dynamic load list + //if(bus3p.getp) + if(bus3p.isLoad()){ + + //// Phase A + if(bus3p.getPhaseADynLoadList().size()>0){ + Complex iPhAInj = new Complex(0,0); + + for(DynLoadModel1Phase load1p:bus3p.getPhaseADynLoadList()){ + if(load1p.isActive()){ + iPhAInj = iPhAInj.add(load1p.getNortonCurInj()); + // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); + } + } + + if(iPhAInj.abs()>0.0) + iInject.a_0 = iInject.a_0.add(iPhAInj); + } + + // Phase B + if(bus3p.getPhaseBDynLoadList().size()>0){ + Complex iPhBInj = new Complex(0,0); + + for(DynLoadModel1Phase load1p:bus3p.getPhaseBDynLoadList()){ + if(load1p.isActive()){ + iPhBInj = iPhBInj.add(load1p.getNortonCurInj()); + // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); + } + } + + if(iPhBInj.abs()>0.0) + iInject.b_1 = iInject.b_1.add(iPhBInj); + } + + // Phase C + if(bus3p.getPhaseCDynLoadList().size()>0){ + Complex iPhCInj = new Complex(0,0); + + for(DynLoadModel1Phase load1p:bus3p.getPhaseCDynLoadList()){ + if(load1p.isActive()){ + iPhCInj = iPhCInj.add(load1p.getNortonCurInj()); + // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); + } + } + + if(iPhCInj.abs()>0.0) + iInject.c_2 = iInject.c_2.add(iPhCInj); + } + + //TODO three-phase dynamic loads + + if(bus3p.getThreePhaseDynLoadList().size()>0){ + for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ + if(load3p.isActive()){ + iInject = iInject.add(load3p.getISource3Phase()); + } + } + } + } + + if(iInject == null){ + throw new Error (bus.getId()+" current injection is null"); + } + + // add external/customized bus current injection + if(this.get3phaseCustomCurrInjTable()!=null){ + if(this.get3phaseCustomCurrInjTable().get(bus.getId())!=null) + iInject = iInject.add(this.get3phaseCustomCurrInjTable().get(bus.getId())); + } + + getYMatrixABC().setBi(iInject, bus.getSortNumber()); + } + } + + // ISparseEqnComplexMatrix3x3 Yabc = getYMatrixABC(); + // System.out.println(Yabc.getSparseEqnComplex()); + + getYMatrixABC().solveEqn(); + + // update bus voltage and machine Pe + for( Bus b : getBusList()) { + DStabBus bus = (DStabBus)b; + if(bus.isActive()){ + Complex3x1 vabc = getYMatrixABC().getX(bus.getSortNumber()); + //if(bus.getId().equals("Bus12")) + //System.out.println("Bus, Vabc:"+b.getId()+","+vabc.toString()); + + if(!vabc.a_0.isNaN()){ + + //if(bus instanceof Bus3Phase){ + Bus3Phase bus3P = (Bus3Phase) bus; + bus3P.set3PhaseVoltages(vabc); + + // update the positive sequence voltage + Complex v = bus3P.getThreeSeqVoltage().b_1; + bus.setVoltage(v); + // System.out.println("posV @ bus :"+v.toString()+","+bus.getId()); + + // } + + } + else + throw new Error (bus.getId()+" solution voltage is NaN"); + } + } + + } + catch (IpssNumericException e) { + ipssLogger.severe(e.toString()); + return false; + } + + return true; + } + + @Override + public boolean initDStabNet() { + boolean initFlag = true; + IpssLogger.getLogger().info("Start three-phase DStabNetwork initialization..."); + + + //TODO this is a must step, otherwise the system cannot be initialized properly + if(this.getNetworkType()==NetworkType.TRANSMISSION && !is3PhaseNetworkInitialized) + initThreePhaseFromLfResult(); + + for ( DStabBus b : getBusList() ) { + + if( b instanceof Bus3Phase){ + Bus3Phase bus =(Bus3Phase) b; + + //only the active buses will be initialized + if(b.isActive()){ + // set bus initial vaule + bus.setInitLoad(bus.getLoadPQ()); + bus.setInitVoltMag(bus.getVoltageMag()); + bus.setVoltage(bus.getThreeSeqVoltage().b_1); // make sure the positive sequence voltage is set up; + + //save the three-phase voltage + bus.setThreePhaseInitVoltage(bus.get3PhaseVotlages()); + + //1) init bus dynamic signal calculation, + // for example, bus Frequency measurement + bus.initStates(); + + + //2) initialize the bus generator + //TODO add the three-phase dynamic generation list to the bus + bus.getContributeGenList().addAll(bus.getThreePhaseGenList()); + + for(AclfGen gen: bus.getContributeGenList()){ + if(gen.isActive() && gen instanceof DStabGen){ + DStabGen dynGen = (DStabGen) gen; + //TODO 11/19/2015 consider generic generation models + /* + if(dynGen.getMach()!=null){ + dynGen.getMach().calMultiFactors(); + if(!dynGen.getMach().initStates(bus)) + initFlag = false; + } + */ + + if(dynGen.getDynamicGenDevice()!=null){ + if(!dynGen.getDynamicGenDevice().initStates(bus)) + initFlag = false; + } + + } + } + + + //3) process the dynamic loads, for each load, subtract the portion of dynamic loads, including + // 3-phase dynamic loads and 1-phase dynamic loads from the total loads + + + if(b.isLoad()){ + + // first process the 3phase dynamic loads + double totalDynLoadPercent = 0; + Complex totalPosSeqDynLoadPQ = new Complex(0,0); + + if( b.getDynLoadModelList().size()>0){ + for(DynLoadModel load:bus.getDynLoadModelList()){ + if(load.isActive()){ + totalDynLoadPercent += load.getLoadPercent(); + + } + } + + // check the value of totalDynLoadPercent, it must be <=100.0; otherwise rescale it down to 100. + if(totalDynLoadPercent>100.0){ + ipssLogger.severe("The total dynamic loads accout for more than 100% of the bus load. Rescaled down to 100%"); + for(DynLoadModel load:bus.getDynLoadModelList()){ + if(load.isActive()){ + load.setLoadPercent(load.getLoadPercent()*100.0/totalDynLoadPercent); + } + } + totalDynLoadPercent = 100.0; + } + + // the init load is only available after initialization + for(DynLoadModel load:bus.getDynLoadModelList()){ + if(load.isActive()){ + load.initStates(); + totalPosSeqDynLoadPQ = totalPosSeqDynLoadPQ.add(load.getInitLoadPQ()); + } + } + + + } + + Complex orginalLoadPQ = bus.getNetLoadResults(); + bus.setNetLoadResults(orginalLoadPQ.subtract(totalPosSeqDynLoadPQ)); + + + //TODO init the single-phase, three-phase dynamic loads + + + // second, process the 1-phase dynamic loads + + + Complex totalPhaseADynLoadPQ = new Complex(0,0); + Complex totalPhaseBDynLoadPQ = new Complex(0,0); + Complex totalPhaseCDynLoadPQ = new Complex(0,0); + Complex3x1 total3PhaseDynLoadPQ = new Complex3x1(); + + + //TODO check the total dynamic LOAD percentage + + + for(DynLoadModel1Phase dynLoadPA : bus.getPhaseADynLoadList()){ + if(dynLoadPA.isActive()){ + dynLoadPA.initStates(); + + totalPhaseADynLoadPQ = totalPhaseADynLoadPQ.add(dynLoadPA.getInitLoadPQ()); + } + } + + for(DynLoadModel1Phase dynLoadPB : bus.getPhaseBDynLoadList()){ + if(dynLoadPB.isActive()){ + dynLoadPB.initStates(); + + totalPhaseBDynLoadPQ = totalPhaseBDynLoadPQ.add(dynLoadPB.getInitLoadPQ()); + } + } + + + for(DynLoadModel1Phase dynLoadPC : bus.getPhaseCDynLoadList()){ + if(dynLoadPC.isActive()){ + dynLoadPC.initStates(); + + totalPhaseCDynLoadPQ = totalPhaseCDynLoadPQ.add(dynLoadPC.getInitLoadPQ()); + } + } + + + for(DynLoadModel3Phase dynLoad3P : bus.getThreePhaseDynLoadList()){ + if(dynLoad3P.isActive()){ + dynLoad3P.initStates(); + total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add(dynLoad3P.getInitLoadPQ3Phase()); + } + } + + // sum up the 1-phase and 3-phase dynamic loads + total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add( + new Complex3x1(totalPhaseADynLoadPQ,totalPhaseBDynLoadPQ,totalPhaseCDynLoadPQ)); + + + if(bus.get3PhaseTotalLoad().abs()>0){ + + bus.set3PhaseNetLoadResults(bus.get3PhaseTotalLoad().subtract(total3PhaseDynLoadPQ)); + } + + + + // add the dynamic loads to dynamicBusDeviceList() + bus.getDynamicBusDeviceList().addAll(bus.getDynLoadModelList()); //three-sequence based + bus.getDynamicBusDeviceList().addAll(bus.getPhaseADynLoadList()); // single-phase based + bus.getDynamicBusDeviceList().addAll(bus.getPhaseBDynLoadList()); // single-phase based + bus.getDynamicBusDeviceList().addAll(bus.getPhaseCDynLoadList()); // single-phase based + bus.getDynamicBusDeviceList().addAll(bus.getThreePhaseDynLoadList()); // three-phase based + + }//end if-isLoad + + + } + + + + } + //end of if- check if the processing bus is of Bus3Phase type + else{ + throw new Error("The processing bus is not a Bus3Phase type # "+b.getId()); + } + } + + //form the Ymatrix + try { + formYMatrixABC(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + initFlag = false; + } + + if(initFlag) this.isInitialized = true; + return initFlag; + } + + @Override + public boolean solvePosSeqNetEqn() { +// if(this.getYMatrix()== null){ +// this.yMatrix = this.formYMatrix(SequenceCode.POSITIVE, false); +// this.setYMatrixDirty(true); +// } + return super.solveNetEqn(); + } + + @Override + public boolean initPosSeqDStabNet() { + + return super.initDStabNet(); + } + + @Override + public Hashtable get3phaseCustomCurrInjTable() { + + return this.threePhaseCurInjTable; + } + + @Override + public void set3phaseCustomCurrInjTable( + Hashtable new3PhaseCurInjTable) { + this.threePhaseCurInjTable = new3PhaseCurInjTable; + + } + + + + + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynLoadModel1Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynLoadModel1Phase.java index 13cce95..f2f2cf0 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynLoadModel1Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynLoadModel1Phase.java @@ -1,139 +1,139 @@ -package org.ipss.threePhase.dynamic.model; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.ipss.threePhase.basic.Bus3Phase; - -import com.interpss.dstab.DStabBus; -import com.interpss.dstab.dynLoad.DynLoadModel; - -public abstract class DynLoadModel1Phase extends DynamicModel1Phase implements DynLoadModel{ - - - protected double loadPercent; - protected double mva; - - protected double loadFactor = 0.85; - - protected DStabBus bus; - - - protected Complex equivY = null; - - protected Complex compensateCurrInj; - protected Complex currInj2Net = null; - - protected Complex initLoadPQ = null; - protected Complex loadPQ; - protected Complex compensateShuntY; - - - public double getLoadPercent() { - - return this.loadPercent; - } - - @Override - public void setLoadPercent(double percentOfTotalLoad) { - this.loadPercent = percentOfTotalLoad; - - } - - @Override - public double getMVABase() { - - return this.mva; - } - - @Override - public void setMVABase(double loadMVABase) { - this.mva = loadMVABase; - - } - - public double getLoadFactor() { - return loadFactor; - } - - public void setLoadFactor(double loadFactor) { - this.loadFactor = loadFactor; - } - - - @Override - public Complex getPosSeqEquivY() { - throw new UnsupportedOperationException(); - } - - public Complex getEquivY(){ - return this.equivY ; - } - - - @Override - public void setEquivY(Complex value) { - this.equivY = value; - - } - - - @Override - public Complex getCompensateShuntY() { - return this.compensateShuntY; - - } - - @Override - public void setCompensateShuntY(Complex value) { - this.compensateShuntY = value; - - } - - @Override - public Complex getInitLoadPQ() { - - return this.initLoadPQ; - } - - @Override - public void setInitLoadPQ(Complex initLoadPQ) { - this.initLoadPQ = initLoadPQ; - - } - - @Override - public Complex getLoadPQ() { - - return this.loadPQ; - - } - - @Override - public void setLoadPQ(Complex loadPQ) { - this.loadPQ = loadPQ; - } - - @Override - public Complex getCurrInj2Net() { - - return this.currInj2Net = getCompensateCurInj().subtract(getBusPhaseVoltage().multiply( getCompensateShuntY())); - } - - @Override - public void setCurrInj2Net(Complex value) { - this.currInj2Net = value; - - } - - @Override - public Complex getCompensateCurInj(){ - return this.compensateCurrInj; - } - - @Override - public void setCompensateCurInj(Complex compCurrent){ - this.compensateCurrInj = compCurrent; - } - - -} +package org.ipss.threePhase.dynamic.model; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.ipss.threePhase.basic.Bus3Phase; + +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.dynLoad.DynLoadModel; + +public abstract class DynLoadModel1Phase extends DynamicModel1Phase implements DynLoadModel{ + + + protected double loadPercent; + protected double mva; + + protected double loadFactor = 0.85; + + protected DStabBus bus; + + + protected Complex equivY = null; + + protected Complex compensateCurrInj; + protected Complex currInj2Net = null; + + protected Complex initLoadPQ = null; + protected Complex loadPQ; + protected Complex compensateShuntY; + + + public double getLoadPercent() { + + return this.loadPercent; + } + + @Override + public void setLoadPercent(double percentOfTotalLoad) { + this.loadPercent = percentOfTotalLoad; + + } + + @Override + public double getMVABase() { + + return this.mva; + } + + @Override + public void setMVABase(double loadMVABase) { + this.mva = loadMVABase; + + } + + public double getLoadFactor() { + return loadFactor; + } + + public void setLoadFactor(double loadFactor) { + this.loadFactor = loadFactor; + } + + + @Override + public Complex getPosSeqEquivY() { + throw new UnsupportedOperationException(); + } + + public Complex getEquivY(){ + return this.equivY ; + } + + + @Override + public void setEquivY(Complex value) { + this.equivY = value; + + } + + + @Override + public Complex getCompensateShuntY() { + return this.compensateShuntY; + + } + + @Override + public void setCompensateShuntY(Complex value) { + this.compensateShuntY = value; + + } + + @Override + public Complex getInitLoadPQ() { + + return this.initLoadPQ; + } + + @Override + public void setInitLoadPQ(Complex initLoadPQ) { + this.initLoadPQ = initLoadPQ; + + } + + @Override + public Complex getLoadPQ() { + + return this.loadPQ; + + } + + @Override + public void setLoadPQ(Complex loadPQ) { + this.loadPQ = loadPQ; + } + + @Override + public Complex getCurrInj2Net() { + + return this.currInj2Net = getNortonCurInj().subtract(getBusPhaseVoltage().multiply( getCompensateShuntY())); + } + + @Override + public void setCurrInj2Net(Complex value) { + this.currInj2Net = value; + + } + + @Override + public Complex getNortonCurInj(){ + return this.compensateCurrInj; + } + + @Override + public void setNortonCurInj(Complex compCurrent){ + this.compensateCurrInj = compCurrent; + } + + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynamicModel1Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynamicModel1Phase.java index c3af4c6..db367fb 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynamicModel1Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynamicModel1Phase.java @@ -1,211 +1,209 @@ -package org.ipss.threePhase.dynamic.model; - -import java.util.Hashtable; -import java.util.List; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Phase; -import org.ipss.threePhase.dynamic.IDynamicModel1Phase; - -import com.interpss.core.net.Network; -import com.interpss.core.net.impl.NameTagImpl; -import com.interpss.dstab.DStabBus; -import com.interpss.dstab.algo.DynamicSimuMethod; -import com.interpss.dstab.device.impl.DynamicBusDeviceImpl; -import com.interpss.dstab.mach.Machine; - -public abstract class DynamicModel1Phase extends DynamicBusDeviceImpl implements - IDynamicModel1Phase { - - protected Phase connectPhase = null; - protected Bus3Phase parentBus = null; - - public Bus3Phase getParentBus(){ - if(this.getDStabBus() instanceof Bus3Phase) - return (Bus3Phase)this.getDStabBus(); - else - throw new Error("The parentBus is not a Bus3Phase type, #"+this.getDStabBus().getId()); - } - - @Override - public Phase getPhase() { - return this.connectPhase; - } - - @Override - public void setPhase(Phase p) { - this.connectPhase = p; - - } - - public Complex getBusPhaseVoltage(){ - Complex3x1 vabc = ((Bus3Phase)this.getDStabBus()).get3PhaseVotlages(); - - switch(this.connectPhase){ - case A: - return vabc.a_0; - case B: - return vabc.b_1; - default: - return vabc.c_2; - } - - } - - /** - * - * - * @generated - */ - public boolean initStates() { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean initStates(DStabBus abus) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean initStates(DStabBus abus, Machine mach) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean nextStep(double dt, DynamicSimuMethod method) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean nextStep(double dt, DynamicSimuMethod method, Machine mach) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean nextStepMechanical(double dt, DynamicSimuMethod method, Network net) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean nextStepElectrical(double dt, DynamicSimuMethod method, Network net) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated NOT - */ - public Hashtable getStates(Object ref) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated NOT - */ - public Hashtable getStates(Machine mach, Object ref) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public double getOutput() { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public double getOutput(Machine mach) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public Object getOutputObject() { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public List getOutputList() { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean updateAttributes(boolean netChange) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - -} +package org.ipss.threePhase.dynamic.model; + +import java.util.Hashtable; +import java.util.List; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Phase; +import org.ipss.threePhase.dynamic.IDynamicModel1Phase; + +import com.interpss.core.net.Network; +import com.interpss.core.net.impl.NameTagImpl; +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.device.impl.DynamicBusDeviceImpl; +import com.interpss.dstab.mach.Machine; + +public abstract class DynamicModel1Phase extends DynamicBusDeviceImpl implements + IDynamicModel1Phase { + + protected Phase connectPhase = null; + protected Bus3Phase parentBus = null; + + public Bus3Phase getParentBus(){ + if(this.getDStabBus() instanceof Bus3Phase) + return (Bus3Phase)this.getDStabBus(); + else + throw new Error("The parentBus is not a Bus3Phase type, #"+this.getDStabBus().getId()); + } + + @Override + public Phase getPhase() { + return this.connectPhase; + } + + @Override + public void setPhase(Phase p) { + this.connectPhase = p; + + } + + public Complex getBusPhaseVoltage(){ + Complex3x1 vabc = ((Bus3Phase)this.getDStabBus()).get3PhaseVotlages(); + + switch(this.connectPhase){ + case A: + return vabc.a_0; + case B: + return vabc.b_1; + default: + return vabc.c_2; + } + + } + + /** + * + * + * @generated + */ + public boolean initStates() { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean initStates(DStabBus abus) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean initStates(DStabBus abus, Machine mach) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean nextStep(double dt, DynamicSimuMethod method) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean nextStep(double dt, DynamicSimuMethod method, Machine mach) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean nextStepMechanical(double dt, DynamicSimuMethod method, Network net) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean nextStepElectrical(double dt, DynamicSimuMethod method, Network net) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated NOT + */ + public Hashtable getStates(Object ref) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated NOT + */ + public Hashtable getStates(Machine mach, Object ref) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public double getOutput() { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public double getOutput(Machine mach) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public Object getOutputObject() { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public List getOutputList() { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean updateAttributes(boolean netChange) { + return true; + } + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynamicModel3Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynamicModel3Phase.java index b560388..804b10d 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynamicModel3Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynamicModel3Phase.java @@ -1,202 +1,201 @@ -package org.ipss.threePhase.dynamic.model; - -import java.util.Hashtable; -import java.util.List; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.interpss.numeric.datatype.Complex3x3; -import org.interpss.numeric.datatype.Unit.UnitType; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Phase; -import org.ipss.threePhase.dynamic.IDynamicModel3Phase; - -import com.interpss.core.net.Network; -import com.interpss.core.net.impl.NameTagImpl; -import com.interpss.dstab.DStabBus; -import com.interpss.dstab.algo.DynamicSimuMethod; -import com.interpss.dstab.device.impl.DynamicBusDeviceImpl; -import com.interpss.dstab.mach.Machine; - -public abstract class DynamicModel3Phase extends DynamicBusDeviceImpl implements - IDynamicModel3Phase { - - protected Bus3Phase parentBus = null; - protected Complex3x3 equivYabc = new Complex3x3(); - - - public Bus3Phase getParentBus(){ - if(parentBus != null) - return parentBus; - else{ - if(this.getDStabBus() instanceof Bus3Phase) - return parentBus = (Bus3Phase) this.getDStabBus(); - } - return null; - - } - - @Override - public Complex3x3 getEquivYabc(){ - equivYabc = getYabc(false); - if(equivYabc ==null) equivYabc = new Complex3x3(); - return equivYabc; - } - - /** - * - * - * @generated - */ - public boolean initStates() { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean initStates(DStabBus abus) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean initStates(DStabBus abus, Machine mach) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean nextStep(double dt, DynamicSimuMethod method) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean nextStep(double dt, DynamicSimuMethod method, Machine mach) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean nextStepMechanical(double dt, DynamicSimuMethod method, Network net) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean nextStepElectrical(double dt, DynamicSimuMethod method, Network net) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated NOT - */ - public Hashtable getStates(Object ref) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated NOT - */ - public Hashtable getStates(Machine mach, Object ref) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public double getOutput() { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public double getOutput(Machine mach) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - - - /** - * - * - * @generated - */ - public Object getOutputObject() { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public List getOutputList() { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - - /** - * - * - * @generated - */ - public boolean updateAttributes(boolean netChange) { - // TODO: implement this method - // Ensure that you remove @generated or mark it @generated NOT - throw new UnsupportedOperationException(); - } - -} +package org.ipss.threePhase.dynamic.model; + +import java.util.Hashtable; +import java.util.List; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Complex3x3; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Phase; +import org.ipss.threePhase.dynamic.IDynamicModel3Phase; + +import com.interpss.core.net.Network; +import com.interpss.core.net.impl.NameTagImpl; +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.device.impl.DynamicBusDeviceImpl; +import com.interpss.dstab.mach.Machine; + +public abstract class DynamicModel3Phase extends DynamicBusDeviceImpl implements + IDynamicModel3Phase { + + protected Bus3Phase parentBus = null; + protected Complex3x3 equivYabc = new Complex3x3(); + + + public Bus3Phase getParentBus(){ + if(parentBus != null) + return parentBus; + else{ + if(this.getDStabBus() instanceof Bus3Phase) + return parentBus = (Bus3Phase) this.getDStabBus(); + } + return null; + + } + + @Override + public Complex3x3 getEquivYabc(){ + equivYabc = getYabc(false); + if(equivYabc ==null) equivYabc = new Complex3x3(); + return equivYabc; + } + + /** + * + * + * @generated + */ + public boolean initStates() { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean initStates(DStabBus abus) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean initStates(DStabBus abus, Machine mach) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean nextStep(double dt, DynamicSimuMethod method) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean nextStep(double dt, DynamicSimuMethod method, Machine mach) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean nextStepMechanical(double dt, DynamicSimuMethod method, Network net) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean nextStepElectrical(double dt, DynamicSimuMethod method, Network net) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated NOT + */ + public Hashtable getStates(Object ref) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated NOT + */ + public Hashtable getStates(Machine mach, Object ref) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public double getOutput() { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public double getOutput(Machine mach) { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + + + /** + * + * + * @generated + */ + public Object getOutputObject() { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public List getOutputList() { + // TODO: implement this method + // Ensure that you remove @generated or mark it @generated NOT + throw new UnsupportedOperationException(); + } + + /** + * + * + * @generated + */ + public boolean updateAttributes(boolean netChange) { + return true; + } + + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java index 3526947..cd909ca 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java @@ -1,878 +1,878 @@ -package org.ipss.threePhase.dynamic.model.impl; - -import java.util.Hashtable; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Phase; -import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; - -import com.interpss.common.util.IpssLogger; -import com.interpss.dstab.DStabBus; -import com.interpss.dstab.algo.DynamicSimuMethod; -import com.interpss.dstab.common.DStabOutSymbol; -import com.interpss.dstab.device.DynamicBusDeviceType; -/** - * This dynamic model of single phase AC motor must be used under the condition that the - * loads in the power flow data is input as Load3phase in the threePhaseLoadList. - * - * Reference: WECC Dynamic Composite Load Model (CMPLDW) Specifications published 01-27-2015 - * The compressor motor model is divided into two parts: - Motor A : Those compressors that cann't restart soon after stalling - Motor B : Those compressors that can restart soon after stalling - - The motors are represented by algebraic equations, as follows: - If V > 0.86: - P = Po * (1 + df ) - Q = [Qo + 6 * (V -0.86) ^2 ] * (1 - 3.3 * df ) - If V < 0.86 and V > Vstal - P = [Po + 12 * (0.86- V)^3.2 ] * (1 +df ) - Q = [Qo + 11 * (0.86 -V)^ 2.5 ] * (1 - 3.3 * df ) - If V < Vstall: - P = Gstall * V * V - Q = - Bstall * V * V - If V < Vstall for t > Tstall, motor stays in stalled state. - - For restartable motor, if V > Vrst for t > Trst, the motor restarts. - - Initialization calculations: - Qo = Po * tan ( acos(CompPF) ) - 6 * (1-0.86) ^2 - - V’stall is calculated to determine the voltage level at which there is an intersection between the stall power characteristic and the transition characteristic used for V < 0.86: - for ( V = 0.4; V < Vstall; V += 0.01 ) - { - pst = Gstall * V2 - p_comp = Po + 12 * (0.86- V) 3.2 - if ( p_comp < pst ) - { - Vstall = V - break - } - } - - * - * @author Qiuhua - * - */ -public class SinglePhaseACMotor extends DynLoadModel1Phase { - - - - //Model data - - private double p=0,q=0; // load pq values without considering load characterisitc factors - private double P0 = 0.0,Q0 =0.0; // initial load exponential characteristic factors - private double pac =0.0,qac = 0.0; // actual load pq after considering load characterisitc factors - // there are 3 stages: 0 - running; 1 - stall ; 2- a fraction of motors restart - private int stage = 0; - private double powerFactor = 0.97; - - - - //stalling setting - private double Vstall = 0.6; - private double Rstall = 0.1140; //0.1240; - private double Xstall = 0.1040; // 0.1140; - private double Tstall = 0.033; - - private double LFadj = 0.0; - - private double Kp1 = 0.0; - private double Np1 = 1.0; - - private double Kq1 = 6.0; - private double Nq1 = 2.0; - - private double Kp2 = 12.0; - private double Np2 = 3.2; - - - private double Kq2 = 11.0; - private double Nq2 = 2.5; - - //breaking point - private double Vbrk =0.86; - - - // restart - private double Frst = 0.0; // 0.2 - private double Vrst = 0.9; - private double Trst = 0.4; - - // real and reactive power frequency sensitivity - private double CmpKpf = 1.0; - private double CmpKqf = -3.3; - - - //UVRelay - private double fuvr = 0.0; - private double vtr1 = 0.0; - private double ttr1 = 999.0; - private double vtr2 = 0.0; - private double ttr2 = 999.0; - - //Contractor setting - private double Vc1off = 0.5; - private double Vc2off = 0.4; - private double Vc1on = 0.6; - private double Vc2on = 0.5; - - //Thermal relay setting - // Based on "WECC air conditioner motor model test report", Page.75 - private double Tth = 8; - private double Th1t = 1.3; - private double Th2t = 4.3; - - - - //Affiliated control component - //UV Relay - - //Contractor - - //Thermal relays - // the tripping characterisic is modeled as y = Ax +B for x within {Th1t, Th2t} - - private double thEqnA = -1.0/3; - private double thEqnB = 1.433; // default value - - private double temperature = 0.0d; - private double remainFraction = 1.0; // Remained fraction on-line after thermal tripping - - // Timers for relays and internal controls - - private double UVRelayTimer1 = 0.0; - private double UVRelayTimer2 = 0.0; - - //Timers for stalling and recovery - private double acStallTimer = 0.0; - private double acRestartTimer = 0.0; - - - private Complex loadPQFactor = null; - - private double pfactor = 0.; - private double qfactor = 0.; - private double pfactorStall = 0.; - private double qfactorStall = 0.; - - private boolean disableInternalStallControl = false; - - private Hashtable states = null; - private static final String OUT_SYMBOL_P ="ACMotorP"; - private static final String OUT_SYMBOL_Q ="ACMotorQ"; - private static final String OUT_SYMBOL_VT ="ACMotorVt"; - private static final String OUT_SYMBOL_STATE ="ACMotorState"; - private static final String OUT_SYMBOL_RemainFraction ="ACMotorRemainFraction"; - private String extended_device_Id = ""; - - public SinglePhaseACMotor(){ - states = new Hashtable<>(); - - } - - public SinglePhaseACMotor(String Id){ - this(); - this.id = Id; - } - - /** - * create an instance of SinglePhaseACMotor - * @param bus - * @param Id - */ - public SinglePhaseACMotor(Bus3Phase bus,String Id){ - this(Id); - this.setDStabBus(bus); - - - } - - - @Override - public boolean initStates() { - boolean flag = true; - - - - //TODO the initLoad is the total load at the bus ,include constant Z and I load - //In the future, this may need to be update to consider the constant P load only - - //TODO 11/19/2015 need to add three-phase InitLoad to differentiate phase loads - - - Complex phaseTotalLoad = null; - Complex3x1 totalLoad3Phase = this.getParentBus().get3PhaseTotalLoad(); - if(totalLoad3Phase.abs()>0.0){ - switch(this.getPhase()){ - case A: phaseTotalLoad = totalLoad3Phase.a_0; break; - case B: phaseTotalLoad = totalLoad3Phase.b_1; break; - case C: phaseTotalLoad = totalLoad3Phase.c_2; break; - } - - } - else{ // TODO assuming three-phase balanced - phaseTotalLoad = this.getDStabBus().getInitLoad(); - - } - - pac = phaseTotalLoad.getReal()*this.loadPercent/100.0d; - qac = pac*Math.tan(Math.acos(this.powerFactor)); - - - // pac and qac is the initial power - this.setInitLoadPQ(new Complex(pac,qac)); - this.setLoadPQ(new Complex(pac,qac)); - - // if mva is not defined and loading factor is available - if(this.getMVABase()==0.0){ - if(this.loadFactor >0 && this.loadFactor<=1.0) - IpssLogger.getLogger().fine("AC motor MVABase will be calculated based on load factor"); - else - this.loadFactor = 1.0; - // phase mva base is the 1/3 of the system 3phaes mva base - double calcMva = this.pac*this.getDStabBus().getNetwork().getBaseMva()/3.0d/this.loadFactor; - this.setMVABase(calcMva); - } - - - - //Check whether a compensation is needed. If yes, calculate the compensation shuntY - - // if bus.loadQ < ld1pac.q, then compShuntB = ld1pac.q-bus.loadQ - if(qac >phaseTotalLoad.getImaginary()){ - double v = this.getBusPhaseVoltage().abs(); - double b = (qac - phaseTotalLoad.getImaginary())/v/v; - this.compensateShuntY = new Complex(0,b); - } - - - // update the Vstall and Vbrk if necessary - //Vstall(adj) = Vstall*(1+LFadj*(CompLF-1)) - //Vbrk(adj) = Vbrk*(1+LFadj*(CompLF-1)) - - // Calcuate the P0 and Q0 at stage 0 - P0 = 1 - Kp1*Math.pow((1-Vbrk),Np1); - Q0 = Math.sqrt(1 - this.powerFactor*this.powerFactor)/this.powerFactor - - this.Kq1*Math.pow((1.0-Vbrk),Nq1); - - Complex loadPQFactor = calcLoadCharacterFactor(); - p = pac/loadPQFactor.getReal(); - q = qac/loadPQFactor.getImaginary(); - - - //calculate the thermal protection equation coefficient - if(Th1t >0 && Th2t>Th1t){ - thEqnA = -1/(Th2t-Th1t); - thEqnB = Th2t/(Th2t-Th1t); - } - else{ - thEqnA = 0.0; - thEqnB = 0.0; - } - - this.equivY = this.getEquivY(); - - extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); - this.states.put(DStabOutSymbol.OUT_SYMBOL_BUS_DEVICE_ID, extended_device_Id); - - return flag; - } - - - - - /** - * The thermal protection heating increase is modeled as - * differential equation, thus it must be represented with the nextStep(); - * - * The stall timer as well as the recovery timer are also counted and updated in this method - */ - @Override - public boolean nextStep(double dt, DynamicSimuMethod method) { - boolean flag = true; - - // stage update - if(!this.disableInternalStallControl){ - if(acStallTimer>=Tstall){ - stage = 1; - } - } - - // switch to restart stage - if (stage == 1 && Frst>0.0 && acRestartTimer >= Trst) - stage = 2; - - // check whether the ac motor is stalled or not - double v = this.getBusPhaseVoltage().abs(); - - if(v<=this.Vstall){ - acStallTimer += dt; - } - else{ - acStallTimer = 0.0; - } - - - // update restart counter - if(stage == 1 && v>this.Vrst && Frst>0.0){ - acRestartTimer +=dt; - } - else - acRestartTimer = 0.0; - - - - // thermal overload protection - /* - * When the motor is stalled, the temperature of the motor is computed by - integrating I^2 R through the thermal time constant Tth. If the temperature reaches Th2t, all of the load is - tripped. If the temperature is between Th1t and Th2t, a linear fraction of the load is tripped. The - restartable and non-restartable portions of the load are computed separately. The fractions of the Frst - and 1-Frst parts of the load that have not been tripped by the thermal protection is output as fthA and fthB, respectively. - */ - - if(stage ==1){ - - - // Iac_pu = Vt/Zstall - Complex zstall = new Complex(this.Rstall,this.Xstall); - double Iac_pu = this.getBusPhaseVoltage().divide(zstall).abs(); - - //dTemp = (Ic*Ic*Rstall- Temp)/Tth - double dTemp = (Iac_pu* Iac_pu*this.Rstall)/this.Tth; - - this.temperature += dTemp*dt; - - if(this.temperature>=this.Th1t){ - if(this.thEqnA<0.0){ - this.remainFraction = this.temperature*this.thEqnA+this.thEqnB; - - if( this.remainFraction <0) this.remainFraction = 0.0; - - - // stage = -1, means it is tripped; - if(this.remainFraction <=0.0) stage = -1; - } - } - } - - - // contractor - /* - * Contactor--If the voltage drops to below Vc2off, all of the load is tripped; if the voltage is between - Vc1off and Vc2off, a linear fraction of the load is tripped. If the voltage later recovers to above Vc2on, all - of the motor is reconnected; if the voltage recovers to between Vc2on and Vc1on, a linear fraction of the - load is reconnected. The fraction of the load that has not been tripped by the contactor is output as fcon. - */ - - - //TODO the compensation current is only update once in order to solve the convergence issue. - - calculateCompensateCurInj(); - - //loadPQFactor = calcLoadCharacterFactor(); - - return flag; - } - - - private Complex calcLoadCharacterFactor(){ - // this can be replaced by a protected method getBusVoltageMag(), which is applicable to both pos-seq and single-phase - double v = getBusPhaseVoltage().abs(); - // exponential factor - - if(v>this.Vbrk & stage == 0){ - pfactor = P0 +Kp1*Math.pow((v-Vbrk),Np1); - qfactor = Q0 +Kq1*Math.pow((v-Vbrk),Nq1); - } - //TODO remove the constraint v> Vstall & - else if( v Vstall & stage == 0){ - pfactor = P0 +Kp2*Math.pow((Vbrk-v),Np2); - qfactor = Q0 +Kq2*Math.pow((Vbrk-v),Nq2); - pfactorStall = pfactor; - qfactorStall = qfactor; - } - //TODO how about v<= Vstall? modeled as a constant impedance Zstall?? - else if(v<= Vstall & stage == 0){ - - //TODO Need to be updated - pfactor = pfactorStall*(v/Vstall)*(v/Vstall); - qfactor = qfactorStall*(v/Vstall)*(v/Vstall); - } - - // consider the frequency dependence - if(pfactor !=0.0 ||qfactor!=0){ - double dFreq = getDStabBus().getFreq()-1.0; - pfactor = pfactor*(1+CmpKpf*dFreq); - qfactor = qfactor*(1+CmpKqf*dFreq/Math.sqrt(1-powerFactor*powerFactor)); - } - - return new Complex(pfactor,qfactor); - } - - - - - private double getMotor2SysMVARatio(){ - double ratio = this.remainFraction*this.mva*3.0d/this.getDStabBus().getNetwork().getBaseMva(); - return ratio; - } - - - @Override - public Complex getCompensateCurInj() { - - if(this.compensateCurrInj == null) calculateCompensateCurInj(); - - Complex v = this.getBusPhaseVoltage(); - - //TODO based on the WECC Dynamic Composite Load Model (CMPLDW) Specifications published 01-27-2015 - // A/C are modeled as like "stalled A/C", if V getStates(Object ref) { - states.put(OUT_SYMBOL_P, this.getPac()); - states.put(OUT_SYMBOL_Q, this.getQac()); - states.put(OUT_SYMBOL_VT, this.getBusPhaseVoltage().abs()); - states.put(OUT_SYMBOL_STATE, stage==1?0:(stage ==-1? -1:1)); - states.put(OUT_SYMBOL_RemainFraction, this.remainFraction); - return this.states; - } - - @Override - public Complex getEquivY() { - if(this.equivY == null){ - Complex zstall = new Complex(this.Rstall,this.Xstall); - Complex y = new Complex(1.0,0).divide(zstall); - this.equivY = y.multiply(this.mva/this.getDStabBus().getNetwork().getBaseMva()*3.0d); - } - return this.equivY; - } - - - - @Override - public Complex getLoadPQ() { - - - return this.loadPQ = new Complex(getPac(),getQac()); - - } - - - @Override - public String getScripts() { - throw new UnsupportedOperationException(); - } - - @Override - public void setScripts(String value) { - throw new UnsupportedOperationException(); - - } - - - public double getPac() { - if(this.stage ==1){ - double vt = this.getBusPhaseVoltage().abs(); - Complex PQ =this.getEquivY().conjugate().multiply(vt*vt*this.remainFraction); - this.pac = PQ.getReal(); - this.qac = PQ.getImaginary(); - } - else if (stage ==-1) pac = 0.0; - - return pac; - } - - public void setPac(double pac) { - this.pac = pac; - } - - public double getQac() { - if(this.stage ==1){ - double vt = this.getBusPhaseVoltage().abs(); - Complex PQ =this.getEquivY().conjugate().multiply(vt*vt*this.remainFraction); - this.pac = PQ.getReal(); - this.qac = PQ.getImaginary(); - } - else if (stage ==-1) qac = 0.0; - return qac; - } - - public void setQac(double qac) { - this.qac = qac; - } - - public int getStage() { - return stage; - } - - public void setStage(int stage) { - this.stage = stage; - } - - public double getPowerFactor() { - return powerFactor; - } - - public void setPowerFactor(double powerFactor) { - this.powerFactor = powerFactor; - } - - public double getVstall() { - return Vstall; - } - - public void setVstall(double vstall) { - Vstall = vstall; - } - - public double getRstall() { - return Rstall; - } - - public void setRstall(double rstall) { - Rstall = rstall; - } - - public double getXstall() { - return Xstall; - } - - public void setXstall(double xstall) { - Xstall = xstall; - } - - public double getTstall() { - return Tstall; - } - - public void setTstall(double tstall) { - Tstall = tstall; - } - - public double getLFadj() { - return LFadj; - } - - public void setLFadj(double lFadj) { - LFadj = lFadj; - } - - public double getKp1() { - return Kp1; - } - - public void setKp1(double kp1) { - Kp1 = kp1; - } - - public double getNp1() { - return Np1; - } - - public void setNp1(double np1) { - Np1 = np1; - } - - public double getKq1() { - return Kq1; - } - - public void setKq1(double kq1) { - Kq1 = kq1; - } - - public double getNq1() { - return Nq1; - } - - public void setNq1(double nq1) { - Nq1 = nq1; - } - - public double getKp2() { - return Kp2; - } - - public void setKp2(double kp2) { - Kp2 = kp2; - } - - public double getNp2() { - return Np2; - } - - public void setNp2(double np2) { - Np2 = np2; - } - - public double getKq2() { - return Kq2; - } - - public void setKq2(double kq2) { - Kq2 = kq2; - } - - public double getNq2() { - return Nq2; - } - - public void setNq2(double nq2) { - Nq2 = nq2; - } - - public double getVbrk() { - return Vbrk; - } - - public void setVbrk(double vbrk) { - Vbrk = vbrk; - } - - public double getFrst() { - return Frst; - } - - public void setFrst(double frst) { - Frst = frst; - } - - public double getVrst() { - return Vrst; - } - - public void setVrst(double vrst) { - Vrst = vrst; - } - - public double getTrst() { - return Trst; - } - - public void setTrst(double trst) { - Trst = trst; - } - - public double getCmpKpf() { - return CmpKpf; - } - - public void setCmpKpf(double cmpKpf) { - CmpKpf = cmpKpf; - } - - public double getCmpKqf() { - return CmpKqf; - } - - public void setCmpKqf(double cmpKqf) { - CmpKqf = cmpKqf; - } - - public double getFuvr() { - return fuvr; - } - - public void setFuvr(double fuvr) { - this.fuvr = fuvr; - } - - public double getVtr1() { - return vtr1; - } - - public void setVtr1(double vtr1) { - this.vtr1 = vtr1; - } - - public double getTtr1() { - return ttr1; - } - - public void setTtr1(double ttr1) { - this.ttr1 = ttr1; - } - - public double getVtr2() { - return vtr2; - } - - public void setVtr2(double vtr2) { - this.vtr2 = vtr2; - } - - public double getTtr2() { - return ttr2; - } - - public void setTtr2(double ttr2) { - this.ttr2 = ttr2; - } - - public double getVc1off() { - return Vc1off; - } - - public void setVc1off(double vc1off) { - Vc1off = vc1off; - } - - public double getVc2off() { - return Vc2off; - } - - public void setVc2off(double vc2off) { - Vc2off = vc2off; - } - - public double getVc1on() { - return Vc1on; - } - - public void setVc1on(double vc1on) { - Vc1on = vc1on; - } - - public double getVc2on() { - return Vc2on; - } - - public void setVc2on(double vc2on) { - Vc2on = vc2on; - } - - public double getTth() { - return Tth; - } - - public void setTth(double tth) { - Tth = tth; - } - - public double getTh1t() { - return Th1t; - } - - public void setTh1t(double th1t) { - Th1t = th1t; - } - - public double getTh2t() { - return Th2t; - } - - public void setTh2t(double th2t) { - Th2t = th2t; - } - - public double getUVRelayTimer1() { - return UVRelayTimer1; - } - - public void setUVRelayTimer1(double uVRelayTimer1) { - UVRelayTimer1 = uVRelayTimer1; - } - - public double getUVRelayTimer2() { - return UVRelayTimer2; - } - - public void setUVRelayTimer2(double uVRelayTimer2) { - UVRelayTimer2 = uVRelayTimer2; - } - - - - public void disableInternalStallControl(boolean disableStallControl){ - this.disableInternalStallControl = disableStallControl; - } - - - - - - - -} +package org.ipss.threePhase.dynamic.model.impl; + +import java.util.Hashtable; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Phase; +import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; + +import com.interpss.common.util.IpssLogger; +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.common.DStabOutSymbol; +import com.interpss.dstab.device.DynamicBusDeviceType; +/** + * This dynamic model of single phase AC motor must be used under the condition that the + * loads in the power flow data is input as Load3phase in the threePhaseLoadList. + * + * Reference: WECC Dynamic Composite Load Model (CMPLDW) Specifications published 01-27-2015 + * The compressor motor model is divided into two parts: + Motor A : Those compressors that cann't restart soon after stalling + Motor B : Those compressors that can restart soon after stalling + + The motors are represented by algebraic equations, as follows: + If V > 0.86: + P = Po * (1 + df ) + Q = [Qo + 6 * (V -0.86) ^2 ] * (1 - 3.3 * df ) + If V < 0.86 and V > Vstal + P = [Po + 12 * (0.86- V)^3.2 ] * (1 +df ) + Q = [Qo + 11 * (0.86 -V)^ 2.5 ] * (1 - 3.3 * df ) + If V < Vstall: + P = Gstall * V * V + Q = - Bstall * V * V + If V < Vstall for t > Tstall, motor stays in stalled state. + + For restartable motor, if V > Vrst for t > Trst, the motor restarts. + + Initialization calculations: + Qo = Po * tan ( acos(CompPF) ) - 6 * (1-0.86) ^2 + + V’stall is calculated to determine the voltage level at which there is an intersection between the stall power characteristic and the transition characteristic used for V < 0.86: + for ( V = 0.4; V < Vstall; V += 0.01 ) + { + pst = Gstall * V2 + p_comp = Po + 12 * (0.86- V) 3.2 + if ( p_comp < pst ) + { + Vstall = V + break + } + } + + * + * @author Qiuhua + * + */ +public class SinglePhaseACMotor extends DynLoadModel1Phase { + + + + //Model data + + private double p=0,q=0; // load pq values without considering load characterisitc factors + private double P0 = 0.0,Q0 =0.0; // initial load exponential characteristic factors + private double pac =0.0,qac = 0.0; // actual load pq after considering load characterisitc factors + // there are 3 stages: 0 - running; 1 - stall ; 2- a fraction of motors restart + private int stage = 0; + private double powerFactor = 0.97; + + + + //stalling setting + private double Vstall = 0.6; + private double Rstall = 0.1140; //0.1240; + private double Xstall = 0.1040; // 0.1140; + private double Tstall = 0.033; + + private double LFadj = 0.0; + + private double Kp1 = 0.0; + private double Np1 = 1.0; + + private double Kq1 = 6.0; + private double Nq1 = 2.0; + + private double Kp2 = 12.0; + private double Np2 = 3.2; + + + private double Kq2 = 11.0; + private double Nq2 = 2.5; + + //breaking point + private double Vbrk =0.86; + + + // restart + private double Frst = 0.0; // 0.2 + private double Vrst = 0.9; + private double Trst = 0.4; + + // real and reactive power frequency sensitivity + private double CmpKpf = 1.0; + private double CmpKqf = -3.3; + + + //UVRelay + private double fuvr = 0.0; + private double vtr1 = 0.0; + private double ttr1 = 999.0; + private double vtr2 = 0.0; + private double ttr2 = 999.0; + + //Contractor setting + private double Vc1off = 0.5; + private double Vc2off = 0.4; + private double Vc1on = 0.6; + private double Vc2on = 0.5; + + //Thermal relay setting + // Based on "WECC air conditioner motor model test report", Page.75 + private double Tth = 8; + private double Th1t = 1.3; + private double Th2t = 4.3; + + + + //Affiliated control component + //UV Relay + + //Contractor + + //Thermal relays + // the tripping characterisic is modeled as y = Ax +B for x within {Th1t, Th2t} + + private double thEqnA = -1.0/3; + private double thEqnB = 1.433; // default value + + private double temperature = 0.0d; + private double remainFraction = 1.0; // Remained fraction on-line after thermal tripping + + // Timers for relays and internal controls + + private double UVRelayTimer1 = 0.0; + private double UVRelayTimer2 = 0.0; + + //Timers for stalling and recovery + private double acStallTimer = 0.0; + private double acRestartTimer = 0.0; + + + private Complex loadPQFactor = null; + + private double pfactor = 0.; + private double qfactor = 0.; + private double pfactorStall = 0.; + private double qfactorStall = 0.; + + private boolean disableInternalStallControl = false; + + private Hashtable states = null; + private static final String OUT_SYMBOL_P ="ACMotorP"; + private static final String OUT_SYMBOL_Q ="ACMotorQ"; + private static final String OUT_SYMBOL_VT ="ACMotorVt"; + private static final String OUT_SYMBOL_STATE ="ACMotorState"; + private static final String OUT_SYMBOL_RemainFraction ="ACMotorRemainFraction"; + private String extended_device_Id = ""; + + public SinglePhaseACMotor(){ + states = new Hashtable<>(); + + } + + public SinglePhaseACMotor(String Id){ + this(); + this.id = Id; + } + + /** + * create an instance of SinglePhaseACMotor + * @param bus + * @param Id + */ + public SinglePhaseACMotor(Bus3Phase bus,String Id){ + this(Id); + this.setDStabBus(bus); + + + } + + + @Override + public boolean initStates() { + boolean flag = true; + + + + //TODO the initLoad is the total load at the bus ,include constant Z and I load + //In the future, this may need to be update to consider the constant P load only + + //TODO 11/19/2015 need to add three-phase InitLoad to differentiate phase loads + + + Complex phaseTotalLoad = null; + Complex3x1 totalLoad3Phase = this.getParentBus().get3PhaseTotalLoad(); + if(totalLoad3Phase.abs()>0.0){ + switch(this.getPhase()){ + case A: phaseTotalLoad = totalLoad3Phase.a_0; break; + case B: phaseTotalLoad = totalLoad3Phase.b_1; break; + case C: phaseTotalLoad = totalLoad3Phase.c_2; break; + } + + } + else{ // TODO assuming three-phase balanced + phaseTotalLoad = this.getDStabBus().getInitLoad(); + + } + + pac = phaseTotalLoad.getReal()*this.loadPercent/100.0d; + qac = pac*Math.tan(Math.acos(this.powerFactor)); + + + // pac and qac is the initial power + this.setInitLoadPQ(new Complex(pac,qac)); + this.setLoadPQ(new Complex(pac,qac)); + + // if mva is not defined and loading factor is available + if(this.getMVABase()==0.0){ + if(this.loadFactor >0 && this.loadFactor<=1.0) + IpssLogger.getLogger().fine("AC motor MVABase will be calculated based on load factor"); + else + this.loadFactor = 1.0; + // phase mva base is the 1/3 of the system 3phaes mva base + double calcMva = this.pac*this.getDStabBus().getNetwork().getBaseMva()/3.0d/this.loadFactor; + this.setMVABase(calcMva); + } + + + + //Check whether a compensation is needed. If yes, calculate the compensation shuntY + + // if bus.loadQ < ld1pac.q, then compShuntB = ld1pac.q-bus.loadQ + if(qac >phaseTotalLoad.getImaginary()){ + double v = this.getBusPhaseVoltage().abs(); + double b = (qac - phaseTotalLoad.getImaginary())/v/v; + this.compensateShuntY = new Complex(0,b); + } + + + // update the Vstall and Vbrk if necessary + //Vstall(adj) = Vstall*(1+LFadj*(CompLF-1)) + //Vbrk(adj) = Vbrk*(1+LFadj*(CompLF-1)) + + // Calcuate the P0 and Q0 at stage 0 + P0 = 1 - Kp1*Math.pow((1-Vbrk),Np1); + Q0 = Math.sqrt(1 - this.powerFactor*this.powerFactor)/this.powerFactor - + this.Kq1*Math.pow((1.0-Vbrk),Nq1); + + Complex loadPQFactor = calcLoadCharacterFactor(); + p = pac/loadPQFactor.getReal(); + q = qac/loadPQFactor.getImaginary(); + + + //calculate the thermal protection equation coefficient + if(Th1t >0 && Th2t>Th1t){ + thEqnA = -1/(Th2t-Th1t); + thEqnB = Th2t/(Th2t-Th1t); + } + else{ + thEqnA = 0.0; + thEqnB = 0.0; + } + + this.equivY = this.getEquivY(); + + extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); + this.states.put(DStabOutSymbol.OUT_SYMBOL_BUS_DEVICE_ID, extended_device_Id); + + return flag; + } + + + + + /** + * The thermal protection heating increase is modeled as + * differential equation, thus it must be represented with the nextStep(); + * + * The stall timer as well as the recovery timer are also counted and updated in this method + */ + @Override + public boolean nextStep(double dt, DynamicSimuMethod method) { + boolean flag = true; + + // stage update + if(!this.disableInternalStallControl){ + if(acStallTimer>=Tstall){ + stage = 1; + } + } + + // switch to restart stage + if (stage == 1 && Frst>0.0 && acRestartTimer >= Trst) + stage = 2; + + // check whether the ac motor is stalled or not + double v = this.getBusPhaseVoltage().abs(); + + if(v<=this.Vstall){ + acStallTimer += dt; + } + else{ + acStallTimer = 0.0; + } + + + // update restart counter + if(stage == 1 && v>this.Vrst && Frst>0.0){ + acRestartTimer +=dt; + } + else + acRestartTimer = 0.0; + + + + // thermal overload protection + /* + * When the motor is stalled, the temperature of the motor is computed by + integrating I^2 R through the thermal time constant Tth. If the temperature reaches Th2t, all of the load is + tripped. If the temperature is between Th1t and Th2t, a linear fraction of the load is tripped. The + restartable and non-restartable portions of the load are computed separately. The fractions of the Frst + and 1-Frst parts of the load that have not been tripped by the thermal protection is output as fthA and fthB, respectively. + */ + + if(stage ==1){ + + + // Iac_pu = Vt/Zstall + Complex zstall = new Complex(this.Rstall,this.Xstall); + double Iac_pu = this.getBusPhaseVoltage().divide(zstall).abs(); + + //dTemp = (Ic*Ic*Rstall- Temp)/Tth + double dTemp = (Iac_pu* Iac_pu*this.Rstall)/this.Tth; + + this.temperature += dTemp*dt; + + if(this.temperature>=this.Th1t){ + if(this.thEqnA<0.0){ + this.remainFraction = this.temperature*this.thEqnA+this.thEqnB; + + if( this.remainFraction <0) this.remainFraction = 0.0; + + + // stage = -1, means it is tripped; + if(this.remainFraction <=0.0) stage = -1; + } + } + } + + + // contractor + /* + * Contactor--If the voltage drops to below Vc2off, all of the load is tripped; if the voltage is between + Vc1off and Vc2off, a linear fraction of the load is tripped. If the voltage later recovers to above Vc2on, all + of the motor is reconnected; if the voltage recovers to between Vc2on and Vc1on, a linear fraction of the + load is reconnected. The fraction of the load that has not been tripped by the contactor is output as fcon. + */ + + + //TODO the compensation current is only update once in order to solve the convergence issue. + + calculateCompensateCurInj(); + + //loadPQFactor = calcLoadCharacterFactor(); + + return flag; + } + + + private Complex calcLoadCharacterFactor(){ + // this can be replaced by a protected method getBusVoltageMag(), which is applicable to both pos-seq and single-phase + double v = getBusPhaseVoltage().abs(); + // exponential factor + + if(v>this.Vbrk & stage == 0){ + pfactor = P0 +Kp1*Math.pow((v-Vbrk),Np1); + qfactor = Q0 +Kq1*Math.pow((v-Vbrk),Nq1); + } + //TODO remove the constraint v> Vstall & + else if( v Vstall & stage == 0){ + pfactor = P0 +Kp2*Math.pow((Vbrk-v),Np2); + qfactor = Q0 +Kq2*Math.pow((Vbrk-v),Nq2); + pfactorStall = pfactor; + qfactorStall = qfactor; + } + //TODO how about v<= Vstall? modeled as a constant impedance Zstall?? + else if(v<= Vstall & stage == 0){ + + //TODO Need to be updated + pfactor = pfactorStall*(v/Vstall)*(v/Vstall); + qfactor = qfactorStall*(v/Vstall)*(v/Vstall); + } + + // consider the frequency dependence + if(pfactor !=0.0 ||qfactor!=0){ + double dFreq = getDStabBus().getFreq()-1.0; + pfactor = pfactor*(1+CmpKpf*dFreq); + qfactor = qfactor*(1+CmpKqf*dFreq/Math.sqrt(1-powerFactor*powerFactor)); + } + + return new Complex(pfactor,qfactor); + } + + + + + private double getMotor2SysMVARatio(){ + double ratio = this.remainFraction*this.mva*3.0d/this.getDStabBus().getNetwork().getBaseMva(); + return ratio; + } + + + @Override + public Complex getNortonCurInj() { + + if(this.compensateCurrInj == null) calculateCompensateCurInj(); + + Complex v = this.getBusPhaseVoltage(); + + //TODO based on the WECC Dynamic Composite Load Model (CMPLDW) Specifications published 01-27-2015 + // A/C are modeled as like "stalled A/C", if V getStates(Object ref) { + states.put(OUT_SYMBOL_P, this.getPac()); + states.put(OUT_SYMBOL_Q, this.getQac()); + states.put(OUT_SYMBOL_VT, this.getBusPhaseVoltage().abs()); + states.put(OUT_SYMBOL_STATE, stage==1?0:(stage ==-1? -1:1)); + states.put(OUT_SYMBOL_RemainFraction, this.remainFraction); + return this.states; + } + + @Override + public Complex getEquivY() { + if(this.equivY == null){ + Complex zstall = new Complex(this.Rstall,this.Xstall); + Complex y = new Complex(1.0,0).divide(zstall); + this.equivY = y.multiply(this.mva/this.getDStabBus().getNetwork().getBaseMva()*3.0d); + } + return this.equivY; + } + + + + @Override + public Complex getLoadPQ() { + + + return this.loadPQ = new Complex(getPac(),getQac()); + + } + + + @Override + public String getScripts() { + throw new UnsupportedOperationException(); + } + + @Override + public void setScripts(String value) { + throw new UnsupportedOperationException(); + + } + + + public double getPac() { + if(this.stage ==1){ + double vt = this.getBusPhaseVoltage().abs(); + Complex PQ =this.getEquivY().conjugate().multiply(vt*vt*this.remainFraction); + this.pac = PQ.getReal(); + this.qac = PQ.getImaginary(); + } + else if (stage ==-1) pac = 0.0; + + return pac; + } + + public void setPac(double pac) { + this.pac = pac; + } + + public double getQac() { + if(this.stage ==1){ + double vt = this.getBusPhaseVoltage().abs(); + Complex PQ =this.getEquivY().conjugate().multiply(vt*vt*this.remainFraction); + this.pac = PQ.getReal(); + this.qac = PQ.getImaginary(); + } + else if (stage ==-1) qac = 0.0; + return qac; + } + + public void setQac(double qac) { + this.qac = qac; + } + + public int getStage() { + return stage; + } + + public void setStage(int stage) { + this.stage = stage; + } + + public double getPowerFactor() { + return powerFactor; + } + + public void setPowerFactor(double powerFactor) { + this.powerFactor = powerFactor; + } + + public double getVstall() { + return Vstall; + } + + public void setVstall(double vstall) { + Vstall = vstall; + } + + public double getRstall() { + return Rstall; + } + + public void setRstall(double rstall) { + Rstall = rstall; + } + + public double getXstall() { + return Xstall; + } + + public void setXstall(double xstall) { + Xstall = xstall; + } + + public double getTstall() { + return Tstall; + } + + public void setTstall(double tstall) { + Tstall = tstall; + } + + public double getLFadj() { + return LFadj; + } + + public void setLFadj(double lFadj) { + LFadj = lFadj; + } + + public double getKp1() { + return Kp1; + } + + public void setKp1(double kp1) { + Kp1 = kp1; + } + + public double getNp1() { + return Np1; + } + + public void setNp1(double np1) { + Np1 = np1; + } + + public double getKq1() { + return Kq1; + } + + public void setKq1(double kq1) { + Kq1 = kq1; + } + + public double getNq1() { + return Nq1; + } + + public void setNq1(double nq1) { + Nq1 = nq1; + } + + public double getKp2() { + return Kp2; + } + + public void setKp2(double kp2) { + Kp2 = kp2; + } + + public double getNp2() { + return Np2; + } + + public void setNp2(double np2) { + Np2 = np2; + } + + public double getKq2() { + return Kq2; + } + + public void setKq2(double kq2) { + Kq2 = kq2; + } + + public double getNq2() { + return Nq2; + } + + public void setNq2(double nq2) { + Nq2 = nq2; + } + + public double getVbrk() { + return Vbrk; + } + + public void setVbrk(double vbrk) { + Vbrk = vbrk; + } + + public double getFrst() { + return Frst; + } + + public void setFrst(double frst) { + Frst = frst; + } + + public double getVrst() { + return Vrst; + } + + public void setVrst(double vrst) { + Vrst = vrst; + } + + public double getTrst() { + return Trst; + } + + public void setTrst(double trst) { + Trst = trst; + } + + public double getCmpKpf() { + return CmpKpf; + } + + public void setCmpKpf(double cmpKpf) { + CmpKpf = cmpKpf; + } + + public double getCmpKqf() { + return CmpKqf; + } + + public void setCmpKqf(double cmpKqf) { + CmpKqf = cmpKqf; + } + + public double getFuvr() { + return fuvr; + } + + public void setFuvr(double fuvr) { + this.fuvr = fuvr; + } + + public double getVtr1() { + return vtr1; + } + + public void setVtr1(double vtr1) { + this.vtr1 = vtr1; + } + + public double getTtr1() { + return ttr1; + } + + public void setTtr1(double ttr1) { + this.ttr1 = ttr1; + } + + public double getVtr2() { + return vtr2; + } + + public void setVtr2(double vtr2) { + this.vtr2 = vtr2; + } + + public double getTtr2() { + return ttr2; + } + + public void setTtr2(double ttr2) { + this.ttr2 = ttr2; + } + + public double getVc1off() { + return Vc1off; + } + + public void setVc1off(double vc1off) { + Vc1off = vc1off; + } + + public double getVc2off() { + return Vc2off; + } + + public void setVc2off(double vc2off) { + Vc2off = vc2off; + } + + public double getVc1on() { + return Vc1on; + } + + public void setVc1on(double vc1on) { + Vc1on = vc1on; + } + + public double getVc2on() { + return Vc2on; + } + + public void setVc2on(double vc2on) { + Vc2on = vc2on; + } + + public double getTth() { + return Tth; + } + + public void setTth(double tth) { + Tth = tth; + } + + public double getTh1t() { + return Th1t; + } + + public void setTh1t(double th1t) { + Th1t = th1t; + } + + public double getTh2t() { + return Th2t; + } + + public void setTh2t(double th2t) { + Th2t = th2t; + } + + public double getUVRelayTimer1() { + return UVRelayTimer1; + } + + public void setUVRelayTimer1(double uVRelayTimer1) { + UVRelayTimer1 = uVRelayTimer1; + } + + public double getUVRelayTimer2() { + return UVRelayTimer2; + } + + public void setUVRelayTimer2(double uVRelayTimer2) { + UVRelayTimer2 = uVRelayTimer2; + } + + + + public void disableInternalStallControl(boolean disableStallControl){ + this.disableInternalStallControl = disableStallControl; + } + + + + + + + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestSinglePhaseACMotorModel.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestSinglePhaseACMotorModel.java index 3add918..f524ac7 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestSinglePhaseACMotorModel.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestSinglePhaseACMotorModel.java @@ -1,331 +1,331 @@ -package org.ipss.threePhase.test; - -import static org.junit.Assert.assertTrue; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.IpssCorePlugin; -import org.interpss.numeric.datatype.Complex3x1; -import org.interpss.numeric.datatype.Unit.UnitType; -import org.interpss.numeric.util.NumericUtil; -import org.ipss.threePhase.basic.Branch3Phase; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Load3Phase; -import org.ipss.threePhase.basic.Phase; -import org.ipss.threePhase.basic.impl.Load3PhaseImpl; -import org.ipss.threePhase.dynamic.DStabNetwork3Phase; -import org.ipss.threePhase.dynamic.algo.DynamicEventProcessor3Phase; -import org.ipss.threePhase.dynamic.impl.DStabNetwork3phaseImpl; -import org.ipss.threePhase.dynamic.model.impl.SinglePhaseACMotor; -import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; -import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; -import org.ipss.threePhase.util.ThreePhaseObjectFactory; -import org.junit.Test; - -import com.interpss.DStabObjectFactory; -import com.interpss.common.exp.InterpssException; -import com.interpss.core.aclf.AclfBranchCode; -import com.interpss.core.aclf.AclfGenCode; -import com.interpss.core.aclf.AclfLoadCode; -import com.interpss.core.acsc.fault.SimpleFaultCode; -import com.interpss.core.net.NetworkType; -import com.interpss.dstab.DStabGen; -import com.interpss.dstab.algo.DynamicSimuAlgorithm; -import com.interpss.dstab.algo.DynamicSimuMethod; -import com.interpss.dstab.cache.StateMonitor; -import com.interpss.dstab.cache.StateMonitor.DynDeviceType; -import com.interpss.dstab.mach.EConstMachine; -import com.interpss.dstab.mach.MachineType; - -public class TestSinglePhaseACMotorModel { - - @Test - public void test_dstab_1PAC() throws InterpssException{ - IpssCorePlugin.init(); - - DStabNetwork3Phase net = create2BusSys(); - - net.setNetworkType(NetworkType.DISTRIBUTION); - - DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); - //distPFAlgo.orderDistributionBuses(true); - - assertTrue(distPFAlgo.powerflow()); - - System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); - - - /* - * create the 1-phase AC model - */ - - Bus3Phase bus1 = (Bus3Phase) net.getBus("Bus1"); - - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus1,"1"); - ac1.setLoadPercent(25); - ac1.setPhase(Phase.A); - ac1.setMVABase(25); - bus1.getPhaseADynLoadList().add(ac1); - - - - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus1,"2"); - ac2.setLoadPercent(30); - ac2.setPhase(Phase.B); - ac2.setMVABase(30); - bus1.getPhaseBDynLoadList().add(ac2); - - - - SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus1,"3"); - ac3.setLoadPercent(20); - ac3.setPhase(Phase.C); - ac3.setMVABase(20); - bus1.getPhaseCDynLoadList().add(ac3); - - // run dstab to test 1-phase ac model - // initGenLoad-- summarize the effects of contributive Gen/Load to make equivGen/load for power flow calculation // net.initContributeGenLoad(); - - DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( - net, IpssCorePlugin.getMsgHub()); - - - dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); - dstabAlgo.setSimuStepSec(0.005d); - dstabAlgo.setTotalSimuTimeSec(.2); - - StateMonitor sm = new StateMonitor(); - sm.addGeneratorStdMonitor(new String[]{"Bus3-mach1"}); - sm.addBusStdMonitor(new String[]{"Bus3","Bus1"}); - sm.add3PhaseBusStdMonitor("Bus1"); - - // AC MOTOR extended Id - //"ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); - sm.addMultiDynDeviceMonitor(DynDeviceType.ACMotor, new String[]{"ACMotor_1@Bus1_phaseA","ACMotor_2@Bus1_phaseB"}); - - - // set the output handler - dstabAlgo.setSimuOutputHandler(sm); - dstabAlgo.setOutPutPerSteps(1); - - net.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("Bus1", net, SimpleFaultCode.GROUND_3P,new Complex(0,0.1),null, 0.1,0.06), "SLG@Bus1"); - dstabAlgo.setDynamicEventHandler(new DynamicEventProcessor3Phase()); - - if(dstabAlgo.initialization()){ - System.out.print(net.getYMatrixABC().getSparseEqnComplex().toString()); - while(dstabAlgo.getSimuTime()<=dstabAlgo.getTotalSimuTimeSec()){ - System.out.print("\n\n time = "+dstabAlgo.getSimuTime()+"\n"); - dstabAlgo.solveDEqnStep(true); - sm.addBusPhaseVoltageMonitorRecord("Bus1", dstabAlgo.getSimuTime(), bus1.get3PhaseVotlages()); - } - } - - - //System.out.println(sm.toCSVString(sm.getBusAngleTable())); -// System.out.println(sm.toCSVString(sm.getBusVoltTable())); - System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); - System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); - System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); - System.out.println(sm.toCSVString(sm.getAcMotorPTable())); - System.out.println(sm.toCSVString( sm.getAcMotorRemainFractionTable())); - - - - assertTrue(Math.abs(sm.getBusAngleTable().get("Bus1").get(1).getValue()- - sm.getBusAngleTable().get("Bus1").get(10).getValue())<1.0E-1); - assertTrue(Math.abs(sm.getBusVoltTable().get("Bus1").get(1).getValue()- - sm.getBusVoltTable().get("Bus1").get(10).getValue())<1.0E-3); - assertTrue(Math.abs(sm.getAcMotorPTable().get("ACMotor_1@Bus1_phaseA").get(1).getValue()- - sm.getAcMotorPTable().get("ACMotor_1@Bus1_phaseA").get(10).getValue())<1.0E-3); - - assertTrue(Math.abs(sm.getBusPhAVoltTable().get("Bus1").get(1).getValue()- - sm.getBusPhAVoltTable().get("Bus1").get(10).getValue())<1.0E-3); - } - - //@Test - public void test1PAC() throws InterpssException{ - - IpssCorePlugin.init(); - - DStabNetwork3Phase net = create2BusSys(); - net.setNetworkType(NetworkType.DISTRIBUTION); - - DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); - //distPFAlgo.orderDistributionBuses(true); - - assertTrue(distPFAlgo.powerflow()); - - System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); - - /* - * create the 1-phase AC model - */ - - Bus3Phase bus1 = (Bus3Phase) net.getBus("Bus1"); - - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus1,"1"); - ac1.setLoadPercent(50); - ac1.setPhase(Phase.A); - ac1.setMVABase(50); - bus1.getPhaseADynLoadList().add(ac1); - - - - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus1,"2"); - ac2.setLoadPercent(50); - ac2.setPhase(Phase.B); - ac2.setMVABase(50); - bus1.getPhaseBDynLoadList().add(ac2); - - - - SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus1,"3"); - ac3.setLoadPercent(50); - ac3.setPhase(Phase.C); - ac3.setMVABase(50); - bus1.getPhaseCDynLoadList().add(ac3); - - // run dstab to test 1-phase ac model - // initGenLoad-- summarize the effects of contributive Gen/Load to make equivGen/load for power flow calculation // net.initContributeGenLoad(); - - DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( - net, IpssCorePlugin.getMsgHub()); - - - dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); - dstabAlgo.setSimuStepSec(0.005d); - dstabAlgo.setTotalSimuTimeSec(0.01); - - StateMonitor sm = new StateMonitor(); - sm.addGeneratorStdMonitor(new String[]{"Bus3-mach1"}); - sm.addBusStdMonitor(new String[]{"Bus3","Bus1"}); - - // set the output handler - dstabAlgo.setSimuOutputHandler(sm); - dstabAlgo.setOutPutPerSteps(1); - if(dstabAlgo.initialization()){ - - // check init load - Complex loadPQ = new Complex(0.5,0.5*Math.tan(Math.acos(0.97))); - assertTrue( NumericUtil.equals(ac1.getInitLoadPQ(),loadPQ,1.0E-5)); - - // check the calculated loadPQ - assertTrue(NumericUtil.equals(ac1.getLoadPQ(),loadPQ,1.0E-5)); - - //check only 50% load left as static load - Complex remainLoadPQ = new Complex(1,0.2).subtract(loadPQ); - assertTrue( NumericUtil.equals(bus1.get3PhaseNetLoadResults().a_0,remainLoadPQ,1.0E-5)); - - // correct equivY = 1/(0.124+j0.114) - Complex y = new Complex(1.5,0).divide(new Complex(ac1.getRstall(),ac1.getXstall())); - assertTrue( NumericUtil.equals(ac1.getEquivY(),y,1.0E-5)); - - - - double v = 0.599; - bus1.get3PhaseVotlages().a_0 = new Complex(v,0.0); - //Tstall = 0.033; - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - - // check the power before stalling - System.out.println(ac1.getLoadPQ()); - - // check the current injection compensation under normal running condition - Complex Iinj = ac1.getLoadPQ().subtract(ac1.getEquivY().multiply(v*v).conjugate()); - Iinj = Iinj.divide( bus1.get3PhaseVotlages().a_0).conjugate().multiply(-1.0); - assertTrue(ac1.getCompensateCurInj().subtract(Iinj).abs()<1.0E-6); - - - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - // check the stall status - assertTrue(ac1.getStage() ==1); - - System.out.println(ac1.getLoadPQ()); - - // check the current injection compesation under stalling condition - assertTrue(ac1.getCompensateCurInj().abs()==0.0); - } - } - - - private DStabNetwork3Phase create2BusSys() throws InterpssException{ - - DStabNetwork3Phase net = new DStabNetwork3phaseImpl(); - - double baseKva = 100000.0; - - // set system basekva for loadflow calculation - net.setBaseKva(baseKva); - - //Bus 1 - Bus3Phase bus1 = ThreePhaseObjectFactory.create3PDStabBus("Bus1", net); - // set bus name and description attributes - bus1.setAttributes("Bus 1", ""); - // set bus base voltage - bus1.setBaseVoltage(230000.0); - // set bus to be a swing bus - bus1.setGenCode(AclfGenCode.NON_GEN); - // adapt the bus object to a swing bus object - bus1.setLoadCode(AclfLoadCode.CONST_P); - - //bus1.setLoadPQ(new Complex(1.0,0.2)); - Load3Phase load1 = new Load3PhaseImpl(); - load1.set3PhaseLoad(new Complex3x1(new Complex(1.0,0.2),new Complex(1.0,0.2),new Complex(1.0,0.2))); - bus1.getThreePhaseLoadList().add(load1); - //bus1.setScLoadShuntY2( new Complex (1.0,0.2)); - //bus1.setScLoadShuntY0( new Complex (1.0,0.2)); - - - // Bus 3 - Bus3Phase bus3 = ThreePhaseObjectFactory.create3PDStabBus("Bus3", net); - // set bus name and description attributes - bus3.setAttributes("Bus 3", ""); - // set bus base voltage - bus3.setBaseVoltage(230000.0); - // set bus to be a swing bus - bus3.setGenCode(AclfGenCode.SWING); - - bus3.setSortNumber(1); - - DStabGen gen2 = DStabObjectFactory.createDStabGen("Gen2"); - gen2.setMvaBase(100.0); - gen2.setDesiredVoltMag(1.025); - //gen2.setGen(new Complex(0.7164,0.2710)); - gen2.setPosGenZ(new Complex(0.002,0.02)); - gen2.setNegGenZ(new Complex(0.002,0.02)); - gen2.setZeroGenZ(new Complex(0.000,1.0E9)); - - //add to contributed gen list - bus3.getContributeGenList().add(gen2); - - EConstMachine mach2 = (EConstMachine)DStabObjectFactory. - createMachine("1", "Mach-1", MachineType.ECONSTANT, net, "Bus3", "Gen2"); - - mach2.setRating(100, UnitType.mVA, net.getBaseKva()); - mach2.setRatedVoltage(230000.0); - mach2.calMultiFactors(); - mach2.setH(5.0E6); - mach2.setD(0.01); - mach2.setRa(0.0020); - mach2.setXd1(0.020); - - - Branch3Phase bra = ThreePhaseObjectFactory.create3PBranch("Bus1", "Bus3", "0", net); - bra.setBranchCode(AclfBranchCode.LINE); - bra.setZ( new Complex(0.000, 0.0500)); - bra.setHShuntY(new Complex(0, 0.200/2)); - bra.setZ0( new Complex(0.0, 0.15)); - bra.setHB0(0.200/2); - - - //net.setBusNumberArranged(true); - return net; - - } - -} +package org.ipss.threePhase.test; + +import static org.junit.Assert.assertTrue; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.IpssCorePlugin; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.interpss.numeric.util.NumericUtil; +import org.ipss.threePhase.basic.Branch3Phase; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.basic.Phase; +import org.ipss.threePhase.basic.impl.Load3PhaseImpl; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.dynamic.algo.DynamicEventProcessor3Phase; +import org.ipss.threePhase.dynamic.impl.DStabNetwork3phaseImpl; +import org.ipss.threePhase.dynamic.model.impl.SinglePhaseACMotor; +import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; +import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; +import org.ipss.threePhase.util.ThreePhaseObjectFactory; +import org.junit.Test; + +import com.interpss.DStabObjectFactory; +import com.interpss.common.exp.InterpssException; +import com.interpss.core.aclf.AclfBranchCode; +import com.interpss.core.aclf.AclfGenCode; +import com.interpss.core.aclf.AclfLoadCode; +import com.interpss.core.acsc.fault.SimpleFaultCode; +import com.interpss.core.net.NetworkType; +import com.interpss.dstab.DStabGen; +import com.interpss.dstab.algo.DynamicSimuAlgorithm; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.cache.StateMonitor; +import com.interpss.dstab.cache.StateMonitor.DynDeviceType; +import com.interpss.dstab.mach.EConstMachine; +import com.interpss.dstab.mach.MachineType; + +public class TestSinglePhaseACMotorModel { + + @Test + public void test_dstab_1PAC() throws InterpssException{ + IpssCorePlugin.init(); + + DStabNetwork3Phase net = create2BusSys(); + + net.setNetworkType(NetworkType.DISTRIBUTION); + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); + //distPFAlgo.orderDistributionBuses(true); + + assertTrue(distPFAlgo.powerflow()); + + System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); + + + /* + * create the 1-phase AC model + */ + + Bus3Phase bus1 = (Bus3Phase) net.getBus("Bus1"); + + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus1,"1"); + ac1.setLoadPercent(25); + ac1.setPhase(Phase.A); + ac1.setMVABase(25); + bus1.getPhaseADynLoadList().add(ac1); + + + + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus1,"2"); + ac2.setLoadPercent(30); + ac2.setPhase(Phase.B); + ac2.setMVABase(30); + bus1.getPhaseBDynLoadList().add(ac2); + + + + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus1,"3"); + ac3.setLoadPercent(20); + ac3.setPhase(Phase.C); + ac3.setMVABase(20); + bus1.getPhaseCDynLoadList().add(ac3); + + // run dstab to test 1-phase ac model + // initGenLoad-- summarize the effects of contributive Gen/Load to make equivGen/load for power flow calculation // net.initContributeGenLoad(); + + DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( + net, IpssCorePlugin.getMsgHub()); + + + dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); + dstabAlgo.setSimuStepSec(0.005d); + dstabAlgo.setTotalSimuTimeSec(.2); + + StateMonitor sm = new StateMonitor(); + sm.addGeneratorStdMonitor(new String[]{"Bus3-mach1"}); + sm.addBusStdMonitor(new String[]{"Bus3","Bus1"}); + sm.add3PhaseBusStdMonitor("Bus1"); + + // AC MOTOR extended Id + //"ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); + sm.addMultiDynDeviceMonitor(DynDeviceType.ACMotor, new String[]{"ACMotor_1@Bus1_phaseA","ACMotor_2@Bus1_phaseB"}); + + + // set the output handler + dstabAlgo.setSimuOutputHandler(sm); + dstabAlgo.setOutPutPerSteps(1); + + net.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("Bus1", net, SimpleFaultCode.GROUND_3P,new Complex(0,0.1),null, 0.1,0.06), "SLG@Bus1"); + dstabAlgo.setDynamicEventHandler(new DynamicEventProcessor3Phase()); + + if(dstabAlgo.initialization()){ + System.out.print(net.getYMatrixABC().getSparseEqnComplex().toString()); + while(dstabAlgo.getSimuTime()<=dstabAlgo.getTotalSimuTimeSec()){ + System.out.print("\n\n time = "+dstabAlgo.getSimuTime()+"\n"); + dstabAlgo.solveDEqnStep(true); + sm.addBusPhaseVoltageMonitorRecord("Bus1", dstabAlgo.getSimuTime(), bus1.get3PhaseVotlages()); + } + } + + + //System.out.println(sm.toCSVString(sm.getBusAngleTable())); +// System.out.println(sm.toCSVString(sm.getBusVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); + System.out.println(sm.toCSVString(sm.getAcMotorPTable())); + System.out.println(sm.toCSVString( sm.getAcMotorRemainFractionTable())); + + + + assertTrue(Math.abs(sm.getBusAngleTable().get("Bus1").get(1).getValue()- + sm.getBusAngleTable().get("Bus1").get(10).getValue())<1.0E-1); + assertTrue(Math.abs(sm.getBusVoltTable().get("Bus1").get(1).getValue()- + sm.getBusVoltTable().get("Bus1").get(10).getValue())<1.0E-3); + assertTrue(Math.abs(sm.getAcMotorPTable().get("ACMotor_1@Bus1_phaseA").get(1).getValue()- + sm.getAcMotorPTable().get("ACMotor_1@Bus1_phaseA").get(10).getValue())<1.0E-3); + + assertTrue(Math.abs(sm.getBusPhAVoltTable().get("Bus1").get(1).getValue()- + sm.getBusPhAVoltTable().get("Bus1").get(10).getValue())<1.0E-3); + } + + //@Test + public void test1PAC() throws InterpssException{ + + IpssCorePlugin.init(); + + DStabNetwork3Phase net = create2BusSys(); + net.setNetworkType(NetworkType.DISTRIBUTION); + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); + //distPFAlgo.orderDistributionBuses(true); + + assertTrue(distPFAlgo.powerflow()); + + System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); + + /* + * create the 1-phase AC model + */ + + Bus3Phase bus1 = (Bus3Phase) net.getBus("Bus1"); + + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus1,"1"); + ac1.setLoadPercent(50); + ac1.setPhase(Phase.A); + ac1.setMVABase(50); + bus1.getPhaseADynLoadList().add(ac1); + + + + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus1,"2"); + ac2.setLoadPercent(50); + ac2.setPhase(Phase.B); + ac2.setMVABase(50); + bus1.getPhaseBDynLoadList().add(ac2); + + + + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus1,"3"); + ac3.setLoadPercent(50); + ac3.setPhase(Phase.C); + ac3.setMVABase(50); + bus1.getPhaseCDynLoadList().add(ac3); + + // run dstab to test 1-phase ac model + // initGenLoad-- summarize the effects of contributive Gen/Load to make equivGen/load for power flow calculation // net.initContributeGenLoad(); + + DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( + net, IpssCorePlugin.getMsgHub()); + + + dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); + dstabAlgo.setSimuStepSec(0.005d); + dstabAlgo.setTotalSimuTimeSec(0.01); + + StateMonitor sm = new StateMonitor(); + sm.addGeneratorStdMonitor(new String[]{"Bus3-mach1"}); + sm.addBusStdMonitor(new String[]{"Bus3","Bus1"}); + + // set the output handler + dstabAlgo.setSimuOutputHandler(sm); + dstabAlgo.setOutPutPerSteps(1); + if(dstabAlgo.initialization()){ + + // check init load + Complex loadPQ = new Complex(0.5,0.5*Math.tan(Math.acos(0.97))); + assertTrue( NumericUtil.equals(ac1.getInitLoadPQ(),loadPQ,1.0E-5)); + + // check the calculated loadPQ + assertTrue(NumericUtil.equals(ac1.getLoadPQ(),loadPQ,1.0E-5)); + + //check only 50% load left as static load + Complex remainLoadPQ = new Complex(1,0.2).subtract(loadPQ); + assertTrue( NumericUtil.equals(bus1.get3PhaseNetLoadResults().a_0,remainLoadPQ,1.0E-5)); + + // correct equivY = 1/(0.124+j0.114) + Complex y = new Complex(1.5,0).divide(new Complex(ac1.getRstall(),ac1.getXstall())); + assertTrue( NumericUtil.equals(ac1.getEquivY(),y,1.0E-5)); + + + + double v = 0.599; + bus1.get3PhaseVotlages().a_0 = new Complex(v,0.0); + //Tstall = 0.033; + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + + // check the power before stalling + System.out.println(ac1.getLoadPQ()); + + // check the current injection compensation under normal running condition + Complex Iinj = ac1.getLoadPQ().subtract(ac1.getEquivY().multiply(v*v).conjugate()); + Iinj = Iinj.divide( bus1.get3PhaseVotlages().a_0).conjugate().multiply(-1.0); + assertTrue(ac1.getNortonCurInj().subtract(Iinj).abs()<1.0E-6); + + + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + // check the stall status + assertTrue(ac1.getStage() ==1); + + System.out.println(ac1.getLoadPQ()); + + // check the current injection compesation under stalling condition + assertTrue(ac1.getNortonCurInj().abs()==0.0); + } + } + + + private DStabNetwork3Phase create2BusSys() throws InterpssException{ + + DStabNetwork3Phase net = new DStabNetwork3phaseImpl(); + + double baseKva = 100000.0; + + // set system basekva for loadflow calculation + net.setBaseKva(baseKva); + + //Bus 1 + Bus3Phase bus1 = ThreePhaseObjectFactory.create3PDStabBus("Bus1", net); + // set bus name and description attributes + bus1.setAttributes("Bus 1", ""); + // set bus base voltage + bus1.setBaseVoltage(230000.0); + // set bus to be a swing bus + bus1.setGenCode(AclfGenCode.NON_GEN); + // adapt the bus object to a swing bus object + bus1.setLoadCode(AclfLoadCode.CONST_P); + + //bus1.setLoadPQ(new Complex(1.0,0.2)); + Load3Phase load1 = new Load3PhaseImpl(); + load1.set3PhaseLoad(new Complex3x1(new Complex(1.0,0.2),new Complex(1.0,0.2),new Complex(1.0,0.2))); + bus1.getThreePhaseLoadList().add(load1); + //bus1.setScLoadShuntY2( new Complex (1.0,0.2)); + //bus1.setScLoadShuntY0( new Complex (1.0,0.2)); + + + // Bus 3 + Bus3Phase bus3 = ThreePhaseObjectFactory.create3PDStabBus("Bus3", net); + // set bus name and description attributes + bus3.setAttributes("Bus 3", ""); + // set bus base voltage + bus3.setBaseVoltage(230000.0); + // set bus to be a swing bus + bus3.setGenCode(AclfGenCode.SWING); + + bus3.setSortNumber(1); + + DStabGen gen2 = DStabObjectFactory.createDStabGen("Gen2"); + gen2.setMvaBase(100.0); + gen2.setDesiredVoltMag(1.025); + //gen2.setGen(new Complex(0.7164,0.2710)); + gen2.setPosGenZ(new Complex(0.002,0.02)); + gen2.setNegGenZ(new Complex(0.002,0.02)); + gen2.setZeroGenZ(new Complex(0.000,1.0E9)); + + //add to contributed gen list + bus3.getContributeGenList().add(gen2); + + EConstMachine mach2 = (EConstMachine)DStabObjectFactory. + createMachine("1", "Mach-1", MachineType.ECONSTANT, net, "Bus3", "Gen2"); + + mach2.setRating(100, UnitType.mVA, net.getBaseKva()); + mach2.setRatedVoltage(230000.0); + mach2.calMultiFactors(); + mach2.setH(5.0E6); + mach2.setD(0.01); + mach2.setRa(0.0020); + mach2.setXd1(0.020); + + + Branch3Phase bra = ThreePhaseObjectFactory.create3PBranch("Bus1", "Bus3", "0", net); + bra.setBranchCode(AclfBranchCode.LINE); + bra.setZ( new Complex(0.000, 0.0500)); + bra.setHShuntY(new Complex(0, 0.200/2)); + bra.setZ0( new Complex(0.0, 0.15)); + bra.setHB0(0.200/2); + + + //net.setBusNumberArranged(true); + return net; + + } + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threeSeq/algo/DStab3SeqSolverImpl.java b/ipss.plugin.3phase/src/org/ipss/threeSeq/algo/DStab3SeqSolverImpl.java index 148f25a..7850ff4 100644 --- a/ipss.plugin.3phase/src/org/ipss/threeSeq/algo/DStab3SeqSolverImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threeSeq/algo/DStab3SeqSolverImpl.java @@ -1,315 +1,318 @@ -package org.ipss.threeSeq.algo; - -import java.util.Hashtable; -import java.util.Map.Entry; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.interpss.numeric.exp.IpssNumericException; -import org.interpss.numeric.sparse.ISparseEqnComplex; -import org.interpss.numeric.util.NumericUtil; -import org.ipss.threePhase.dynamic.DStabNetwork3Phase; - -import com.interpss.common.exp.InterpssException; -import com.interpss.common.msg.IPSSMsgHub; -import com.interpss.common.util.IpssLogger; -import com.interpss.core.aclf.AclfGen; -import com.interpss.core.acsc.SequenceCode; -import com.interpss.core.net.Branch; -import com.interpss.core.net.Bus; -import com.interpss.dstab.DStabBranch; -import com.interpss.dstab.DStabBus; -import com.interpss.dstab.DStabGen; -import com.interpss.dstab.DStabilityNetwork; -import com.interpss.dstab.algo.DynamicSimuAlgorithm; -import com.interpss.dstab.algo.DynamicSimuMethod; -import com.interpss.dstab.algo.defaultImpl.DStabSolverImpl; -import com.interpss.dstab.common.DStabSimuException; -import com.interpss.dstab.device.DynamicBranchDevice; -import com.interpss.dstab.device.DynamicBusDevice; -import com.interpss.dstab.mach.Machine; - -public class DStab3SeqSolverImpl extends DStabSolverImpl { - - private DStabilityNetwork net = null; - - private double negZeroSeqCurrTolerance = 1.0E-3; - - public DStab3SeqSolverImpl(DynamicSimuAlgorithm algo, IPSSMsgHub msg) { - super(algo, msg); - this.net = dstabAlgo.getNetwork(); - } - - @Override public boolean initialization() { - boolean flag = super.initialization(); - - // check three-sequence data - if(this.net.isPositiveSeqDataOnly()){ - IpssLogger.getLogger().severe("Three-seq data is required, but the network model has only positive sequence data!"); - return false; - } - //build the negative and zero sequence Y matrix - this.net.formScYMatrix(SequenceCode.NEGATIVE, true); - - this.net.formScYMatrix(SequenceCode.ZERO, true); - - - return flag; - - } - - @Override - public boolean networkSolutionStep() throws DStabSimuException{ - boolean netSolConverged = true; - //maxIterationTimes =1; - for(int i=0;i=1){ - if(!NumericUtil.equals(bus.getVoltage(),voltageRecTable.get(bus.getId()),this.converge_tol)) - netSolConverged =false; - - } - voltageRecTable.put(bus.getId(), bus.getVoltage()); - bus.getThreeSeqVoltage().b_1 = bus.getVoltage(); - } - } - - // check whether the network solution is converged? - if(i>=1 && netSolConverged) { - IpssLogger.getLogger().fine("SimuTime: "+dstabAlgo.getSimuTime()+"\n Network solution converges with "+(i+1)+" iterations"); - break; - } - - } // END OF for maxIterationTimes loop - return netSolConverged; - } - - - @Override public void nextStep(double time, double dt, DynamicSimuMethod method) throws DStabSimuException { - - super.nextStep(time, dt, method); - - //////////////////////////////////// The following is for the negative and zero sequences ///////////////// - - //solve the negative- and zero-sequence networks - Hashtable threeSeqCurInjTable = this.net.getCustom3SeqBusCurrInjHashtable(); - - - - Hashtable negCurTable = new Hashtable<>(); - - Hashtable zeroCurTable = new Hashtable<>(); - - if(threeSeqCurInjTable!=null){ - negCurTable = getSeqCurInjTable(threeSeqCurInjTable, SequenceCode.NEGATIVE); - zeroCurTable = getSeqCurInjTable(threeSeqCurInjTable, SequenceCode.ZERO); - - } - - //TODO add the internal unbalanced bus fault effects to the negCurTable and zeroCurTable - addInternalFaultCurrentToCurTable( time,negCurTable,zeroCurTable); - - //solve sequence networks and save bus voltages - - // negative sequence - if(this.getMaxCurMag(negCurTable)>this.negZeroSeqCurrTolerance){ - Hashtable negVoltTable = this.solveSeqNetwork(net,SequenceCode.NEGATIVE, negCurTable); - - for(Entry e: negVoltTable.entrySet()){ - net.getBus(e.getKey()).getThreeSeqVoltage().c_2 =e.getValue(); - } - } - - // zero sequence - - if(this.getMaxCurMag(zeroCurTable)>this.negZeroSeqCurrTolerance){ - Hashtable zeroVoltTable = this.solveSeqNetwork(net,SequenceCode.ZERO, zeroCurTable); - - if(zeroVoltTable == null) - System.out.println("zeroVoltTable == null "); - - for(Entry e: zeroVoltTable.entrySet()){ - net.getBus(e.getKey()).getThreeSeqVoltage().a_0 =e.getValue(); - } - } - - - - } - - - @Override protected void output(DStabBus bus, double t, boolean plotOutput) throws DStabSimuException { - super.output(bus, t, plotOutput); - - //TODO output three-sequence bus voltages - } - - private Hashtable solveSeqNetwork(DStabilityNetwork subnet, SequenceCode seq,Hashtable seqCurInjTable){ - - Hashtable busVoltResults = new Hashtable<>(); - // solve the Ymatrix - switch (seq){ - - // Positive sequence - case POSITIVE: - subnet.setCustomBusCurrInjHashtable(null); - - ISparseEqnComplex subNetY= subnet.getYMatrix(); - - subNetY.setB2Zero(); - - for(Entry e: seqCurInjTable.entrySet()){ - subNetY.setBi(e.getValue(),subnet.getBus(e.getKey()).getSortNumber()); - } - try { - // solve network to obtain Vext_injection - subNetY.solveEqn(); - - - } catch (IpssNumericException e1) { - - e1.printStackTrace(); - return null; - } - for(DStabBus bus:subnet.getBusList()){ - busVoltResults.put(bus.getId(), subNetY.getX(bus.getSortNumber())); - } - - - //TODO extract the current and map them to the buses - - break; - case NEGATIVE: - ISparseEqnComplex negSeqYMatrix = subnet.getNegSeqYMatrix(); - if(!negSeqYMatrix.isFactorized()){ - try { - negSeqYMatrix.luMatrix(1.0E-8); - } catch (IpssNumericException e2) { - // TODO Auto-generated catch block - e2.printStackTrace(); - } - } - - - negSeqYMatrix.setB2Zero(); - - for(Entry e: seqCurInjTable.entrySet()){ - negSeqYMatrix.setBi(e.getValue(),subnet.getBus(e.getKey()).getSortNumber()); - } - - //System.out.println("\n\n negative Ymatrix =\n"+negSeqYMatrix.toString()); - - try { - // solve network to obtain Vext_injection - negSeqYMatrix.solveEqn(); - - } catch (IpssNumericException e1) { - - e1.printStackTrace(); - return null; - } - - for(DStabBus bus:subnet.getBusList()){ - busVoltResults.put(bus.getId(), negSeqYMatrix.getX(bus.getSortNumber())); - } - - - break; - case ZERO: - ISparseEqnComplex zeroSeqYMatrix = subnet.getZeroSeqYMatrix(); - - if(!zeroSeqYMatrix.isFactorized()){ - try { - zeroSeqYMatrix.luMatrix(1.0E-8); - } catch (IpssNumericException e2) { - // TODO Auto-generated catch block - e2.printStackTrace(); - } - } - zeroSeqYMatrix.setB2Zero(); - - for(Entry e: seqCurInjTable.entrySet()){ - zeroSeqYMatrix.setBi(e.getValue(),subnet.getBus(e.getKey()).getSortNumber()); - } - try { - // solve network to obtain Vext_injection - zeroSeqYMatrix.solveEqn(); - - } catch (IpssNumericException e1) { - - e1.printStackTrace(); - return null; - } - - for(DStabBus bus:subnet.getBusList()){ - busVoltResults.put(bus.getId(), zeroSeqYMatrix.getX(bus.getSortNumber())); - } - - break; - } - - // save the seq bus voltage result; - - return busVoltResults; - } - - private Hashtable getSeqCurInjTable(Hashtable curInjTable, SequenceCode seq){ - - Hashtable seqCurInjTable = new Hashtable<>(); - if(curInjTable !=null){ - switch(seq){ - case POSITIVE: - for(Entry nvpair :curInjTable.entrySet()){ - seqCurInjTable.put(nvpair.getKey(), nvpair.getValue().b_1); - } - break; - case NEGATIVE: - for(Entry nvpair :curInjTable.entrySet()){ - seqCurInjTable.put(nvpair.getKey(), nvpair.getValue().c_2); - } - break; - case ZERO: - for(Entry nvpair :curInjTable.entrySet()){ - seqCurInjTable.put(nvpair.getKey(), nvpair.getValue().a_0); - } - break; - - } - - return seqCurInjTable; - } - else - return null; - } - - private double getMaxCurMag(Hashtable seqCurInjTable){ - double imax = 0; - for(Complex i :seqCurInjTable.values()){ - if(imax negCurTable,Hashtable zeroCurTable){ - //TODO - } -} +package org.ipss.threeSeq.algo; + +import java.util.Hashtable; +import java.util.Map.Entry; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.exp.IpssNumericException; +import org.interpss.numeric.sparse.ISparseEqnComplex; +import org.interpss.numeric.util.NumericUtil; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; + +import com.interpss.common.exp.InterpssException; +import com.interpss.common.msg.IPSSMsgHub; +import com.interpss.common.util.IpssLogger; +import com.interpss.core.aclf.AclfGen; +import com.interpss.core.acsc.SequenceCode; +import com.interpss.core.net.Branch; +import com.interpss.core.net.Bus; +import com.interpss.dstab.DStabBranch; +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.DStabGen; +import com.interpss.dstab.DStabilityNetwork; +import com.interpss.dstab.algo.DynamicSimuAlgorithm; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.algo.defaultImpl.DStabSolverImpl; +import com.interpss.dstab.common.DStabSimuException; +import com.interpss.dstab.device.DynamicBranchDevice; +import com.interpss.dstab.device.DynamicBusDevice; +import com.interpss.dstab.mach.Machine; + +public class DStab3SeqSolverImpl extends DStabSolverImpl { + + private DStabilityNetwork net = null; + + private double negZeroSeqCurrTolerance = 1.0E-3; + + public DStab3SeqSolverImpl(DynamicSimuAlgorithm algo, IPSSMsgHub msg) { + super(algo, msg); + this.net = dstabAlgo.getNetwork(); + } + + @Override public boolean initialization() { + boolean flag = super.initialization(); + + // check three-sequence data + if(this.net.isPositiveSeqDataOnly()){ + IpssLogger.getLogger().severe("Three-seq data is required, but the network model has only positive sequence data!"); + return false; + } + //build the negative and zero sequence Y matrix +// this.net.formScYMatrix(SequenceCode.NEGATIVE, true); +// +// this.net.formScYMatrix(SequenceCode.ZERO, true); + + this.net.formYMatrix(SequenceCode.NEGATIVE, true); + + this.net.formYMatrix(SequenceCode.ZERO, true); + + return flag; + + } + + @Override + public boolean networkSolutionStep() throws DStabSimuException{ + boolean netSolConverged = true; + //maxIterationTimes =1; + for(int i=0;i=1){ + if(!NumericUtil.equals(bus.getVoltage(),voltageRecTable.get(bus.getId()),this.converge_tol)) + netSolConverged =false; + + } + voltageRecTable.put(bus.getId(), bus.getVoltage()); + bus.getThreeSeqVoltage().b_1 = bus.getVoltage(); + } + } + + // check whether the network solution is converged? + if(i>=1 && netSolConverged) { + IpssLogger.getLogger().fine("SimuTime: "+dstabAlgo.getSimuTime()+"\n Network solution converges with "+(i+1)+" iterations"); + break; + } + + } // END OF for maxIterationTimes loop + return netSolConverged; + } + + + @Override public void nextStep(double time, double dt, DynamicSimuMethod method) throws DStabSimuException { + + super.nextStep(time, dt, method); + + //////////////////////////////////// The following is for the negative and zero sequences ///////////////// + + //solve the negative- and zero-sequence networks + Hashtable threeSeqCurInjTable = this.net.getCustom3SeqBusCurrInjHashtable(); + + + + Hashtable negCurTable = new Hashtable<>(); + + Hashtable zeroCurTable = new Hashtable<>(); + + if(threeSeqCurInjTable!=null){ + negCurTable = getSeqCurInjTable(threeSeqCurInjTable, SequenceCode.NEGATIVE); + zeroCurTable = getSeqCurInjTable(threeSeqCurInjTable, SequenceCode.ZERO); + + } + + //TODO add the internal unbalanced bus fault effects to the negCurTable and zeroCurTable + addInternalFaultCurrentToCurTable( time,negCurTable,zeroCurTable); + + //solve sequence networks and save bus voltages + + // negative sequence + if(this.getMaxCurMag(negCurTable)>this.negZeroSeqCurrTolerance){ + Hashtable negVoltTable = this.solveSeqNetwork(net,SequenceCode.NEGATIVE, negCurTable); + + for(Entry e: negVoltTable.entrySet()){ + net.getBus(e.getKey()).getThreeSeqVoltage().c_2 =e.getValue(); + } + } + + // zero sequence + + if(this.getMaxCurMag(zeroCurTable)>this.negZeroSeqCurrTolerance){ + Hashtable zeroVoltTable = this.solveSeqNetwork(net,SequenceCode.ZERO, zeroCurTable); + + if(zeroVoltTable == null) + System.out.println("zeroVoltTable == null "); + + for(Entry e: zeroVoltTable.entrySet()){ + net.getBus(e.getKey()).getThreeSeqVoltage().a_0 =e.getValue(); + } + } + + + + } + + + @Override protected void output(DStabBus bus, double t, boolean plotOutput) throws DStabSimuException { + super.output(bus, t, plotOutput); + + //TODO output three-sequence bus voltages + } + + private Hashtable solveSeqNetwork(DStabilityNetwork subnet, SequenceCode seq,Hashtable seqCurInjTable){ + + Hashtable busVoltResults = new Hashtable<>(); + // solve the Ymatrix + switch (seq){ + + // Positive sequence + case POSITIVE: + subnet.setCustomBusCurrInjHashtable(null); + + ISparseEqnComplex subNetY= subnet.getYMatrix(); + + subNetY.setB2Zero(); + + for(Entry e: seqCurInjTable.entrySet()){ + subNetY.setBi(e.getValue(),subnet.getBus(e.getKey()).getSortNumber()); + } + try { + // solve network to obtain Vext_injection + subNetY.solveEqn(); + + + } catch (IpssNumericException e1) { + + e1.printStackTrace(); + return null; + } + for(DStabBus bus:subnet.getBusList()){ + busVoltResults.put(bus.getId(), subNetY.getX(bus.getSortNumber())); + } + + + //TODO extract the current and map them to the buses + + break; + case NEGATIVE: + ISparseEqnComplex negSeqYMatrix = subnet.getNegSeqYMatrix(); + if(!negSeqYMatrix.isFactorized()){ + try { + negSeqYMatrix.luMatrix(1.0E-8); + } catch (IpssNumericException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + } + } + + + negSeqYMatrix.setB2Zero(); + + for(Entry e: seqCurInjTable.entrySet()){ + negSeqYMatrix.setBi(e.getValue(),subnet.getBus(e.getKey()).getSortNumber()); + } + + //System.out.println("\n\n negative Ymatrix =\n"+negSeqYMatrix.toString()); + + try { + // solve network to obtain Vext_injection + negSeqYMatrix.solveEqn(); + + } catch (IpssNumericException e1) { + + e1.printStackTrace(); + return null; + } + + for(DStabBus bus:subnet.getBusList()){ + busVoltResults.put(bus.getId(), negSeqYMatrix.getX(bus.getSortNumber())); + } + + + break; + case ZERO: + ISparseEqnComplex zeroSeqYMatrix = subnet.getZeroSeqYMatrix(); + + if(!zeroSeqYMatrix.isFactorized()){ + try { + zeroSeqYMatrix.luMatrix(1.0E-8); + } catch (IpssNumericException e2) { + // TODO Auto-generated catch block + e2.printStackTrace(); + } + } + zeroSeqYMatrix.setB2Zero(); + + for(Entry e: seqCurInjTable.entrySet()){ + zeroSeqYMatrix.setBi(e.getValue(),subnet.getBus(e.getKey()).getSortNumber()); + } + try { + // solve network to obtain Vext_injection + zeroSeqYMatrix.solveEqn(); + + } catch (IpssNumericException e1) { + + e1.printStackTrace(); + return null; + } + + for(DStabBus bus:subnet.getBusList()){ + busVoltResults.put(bus.getId(), zeroSeqYMatrix.getX(bus.getSortNumber())); + } + + break; + } + + // save the seq bus voltage result; + + return busVoltResults; + } + + private Hashtable getSeqCurInjTable(Hashtable curInjTable, SequenceCode seq){ + + Hashtable seqCurInjTable = new Hashtable<>(); + if(curInjTable !=null){ + switch(seq){ + case POSITIVE: + for(Entry nvpair :curInjTable.entrySet()){ + seqCurInjTable.put(nvpair.getKey(), nvpair.getValue().b_1); + } + break; + case NEGATIVE: + for(Entry nvpair :curInjTable.entrySet()){ + seqCurInjTable.put(nvpair.getKey(), nvpair.getValue().c_2); + } + break; + case ZERO: + for(Entry nvpair :curInjTable.entrySet()){ + seqCurInjTable.put(nvpair.getKey(), nvpair.getValue().a_0); + } + break; + + } + + return seqCurInjTable; + } + else + return null; + } + + private double getMaxCurMag(Hashtable seqCurInjTable){ + double imax = 0; + for(Complex i :seqCurInjTable.values()){ + if(imax negCurTable,Hashtable zeroCurTable){ + //TODO + } +} From 8c1d4aba6f66af4bb0debded696333e73d9a27cd Mon Sep 17 00:00:00 2001 From: thuang Date: Wed, 12 Apr 2017 14:43:09 -0700 Subject: [PATCH 02/36] start to work on parser --- .../org.eclipse.core.resources.prefs | 4 + .../threePhase/basic/LineConfiguration.java | 32 +++ .../data_parser/OpenDSSDataParser.java | 12 + .../data_parser/OpenDSSLineCodeParser.java | 8 + .../data_parser/OpenDSSLoadParser.java | 5 + .../data_parser/OpenDSSRegulatorParser.java | 5 + .../testData/feeder/IEEE123/IEEE123Loads.DSS | 100 ++++++++ .../testData/feeder/IEEE123/IEEE123Master.dss | 221 ++++++++++++++++++ .../feeder/IEEE123/IEEE123Regulators.DSS | 18 ++ .../testData/feeder/IEEE123/IEEELineCodes.DSS | 213 +++++++++++++++++ .../feeder/IEEE123/Run_IEEE123Bus.DSS | 113 +++++++++ .../testData/feeder/IEEE13/IEEE13Nodeckt.dss | 176 ++++++++++++++ .../testData/feeder/IEEE13/IEEELineCodes.DSS | 213 +++++++++++++++++ 13 files changed, 1120 insertions(+) create mode 100644 ipss.plugin.3phase/.settings/org.eclipse.core.resources.prefs create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads.DSS create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master.dss create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Regulators.DSS create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/IEEELineCodes.DSS create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/Run_IEEE123Bus.DSS create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE13/IEEE13Nodeckt.dss create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE13/IEEELineCodes.DSS diff --git a/ipss.plugin.3phase/.settings/org.eclipse.core.resources.prefs b/ipss.plugin.3phase/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..343af7a --- /dev/null +++ b/ipss.plugin.3phase/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java=UTF-8 +encoding//src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java=UTF-8 +encoding//src/org/ipss/threePhase/test/ThreeBus_3Phase_Test.java=UTF-8 diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java new file mode 100644 index 0000000..62c94cc --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java @@ -0,0 +1,32 @@ +package org.ipss.threePhase.basic; + +import org.interpss.numeric.datatype.Complex3x3; + +public class LineConfiguration { + + enum InputType { Physical, ZYMatrix, LineCode} + + + + private Complex3x3 zMtx = null; + + private Complex3x3 shuntYMtx = null; + + + public Complex3x3 getZ3x3Matrix() { + return zMtx; + } + + public void setZ3x3Matrix(Complex3x3 zMtx) { + this.zMtx = zMtx; + } + + public Complex3x3 getShuntY3x3Matrix() { + return shuntYMtx; + } + + public void setShuntY3x3Matrix(Complex3x3 shuntYMtx) { + this.shuntYMtx = shuntYMtx; + } + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java new file mode 100644 index 0000000..966cdb5 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -0,0 +1,12 @@ +package org.ipss.threePhase.data_parser; + +import java.util.Hashtable; + +import org.ipss.threePhase.basic.LineConfiguration; + +public class OpenDSSDataParser { + + // Line configuration table + protected Hashtable lineConfigTable = null; + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java new file mode 100644 index 0000000..add0bd5 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java @@ -0,0 +1,8 @@ +package org.ipss.threePhase.data_parser; + +public class OpenDSSLineCodeParser { + + + + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java new file mode 100644 index 0000000..f6d5975 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java @@ -0,0 +1,5 @@ +package org.ipss.threePhase.data_parser; + +public class OpenDSSLoadParser { + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java new file mode 100644 index 0000000..b3f7fda --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java @@ -0,0 +1,5 @@ +package org.ipss.threePhase.data_parser; + +public class OpenDSSRegulatorParser { + +} diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads.DSS b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads.DSS new file mode 100644 index 0000000..db94265 --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads.DSS @@ -0,0 +1,100 @@ +! +! LOAD DEFINITIONS +! +! Note that 1-phase loads have a voltage rating = to actual voltage across terminals +! This could be either 2.4kV for Wye connectoin or 4.16 kV for Delta or Line-Line connection. +! 3-phase loads are rated Line-Line (as are 2-phase loads, but there are none in this case). +! Only the balanced 3-phase loads are declared as 3-phase; unbalanced 3-phase loads are declared +! as three 1-phase loads. + +New Load.S1a Bus1=1.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S2b Bus1=2.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S4c Bus1=4.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S5c Bus1=5.3 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S6c Bus1=6.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S7a Bus1=7.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S9a Bus1=9.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S10a Bus1=10.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S11a Bus1=11.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S12b Bus1=12.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S16c Bus1=16.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S17c Bus1=17.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S19a Bus1=19.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S20a Bus1=20.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=40.0 kvar=20.0 +New Load.S22b Bus1=22.2 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S24c Bus1=24.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S28a Bus1=28.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=40.0 kvar=20.0 +New Load.S29a Bus1=29.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S30c Bus1=30.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S31c Bus1=31.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S32c Bus1=32.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S33a Bus1=33.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=40.0 kvar=20.0 +New Load.S34c Bus1=34.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S35a Bus1=35.1.2 Phases=1 Conn=Delta Model=1 kV=4.160 kW=40.0 kvar=20.0 +New Load.S37a Bus1=37.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S38b Bus1=38.2 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S39b Bus1=39.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S41c Bus1=41.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S42a Bus1=42.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S43b Bus1=43.2 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S45a Bus1=45.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S46a Bus1=46.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S47 Bus1=47 Phases=3 Conn=Wye Model=5 kV=4.160 kW=105.0 kvar=75.0 +New Load.S48 Bus1=48 Phases=3 Conn=Wye Model=2 kV=4.160 kW=210.0 kVAR=150.0 +New Load.S49a Bus1=49.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=35.0 kvar=25.0 +New Load.S49b Bus1=49.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=70.0 kvar=50.0 +New Load.S49c Bus1=49.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=35.0 kvar=20.0 ! used to be 25 in on-line document +New Load.S50c Bus1=50.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S51a Bus1=51.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S52a Bus1=52.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S53a Bus1=53.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S55a Bus1=55.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=20.0 kvar=10.0 +New Load.S56b Bus1=56.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S58b Bus1=58.2 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S59b Bus1=59.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S60a Bus1=60.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S62c Bus1=62.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S63a Bus1=63.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S64b Bus1=64.2 Phases=1 Conn=Wye Model=5 kV=2.4 kW=75.0 kvar=35.0 +New Load.S65a Bus1=65.1.2 Phases=1 Conn=Delta Model=2 kV=4.160 kW=35.0 kvar=25.0 +New Load.S65b Bus1=65.2.3 Phases=1 Conn=Delta Model=2 kV=4.160 kW=35.0 kvar=25.0 +New Load.S65c Bus1=65.3.1 Phases=1 Conn=Delta Model=2 kV=4.160 kW=70.0 kvar=50.0 +New Load.S66c Bus1=66.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=75.0 kvar=35.0 +New Load.S68a Bus1=68.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S69a Bus1=69.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S70a Bus1=70.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S71a Bus1=71.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S73c Bus1=73.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S74c Bus1=74.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S75c Bus1=75.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S76a Bus1=76.1.2 Phases=1 Conn=Delta Model=5 kV=4.160 kW=105.0 kvar=80.0 +New Load.S76b Bus1=76.2.3 Phases=1 Conn=Delta Model=5 kV=4.160 kW=70.0 kvar=50.0 +New Load.S76c Bus1=76.3.1 Phases=1 Conn=Delta Model=5 kV=4.160 kW=70.0 kvar=50.0 +New Load.S77b Bus1=77.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S79a Bus1=79.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S80b Bus1=80.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S82a Bus1=82.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S83c Bus1=83.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S84c Bus1=84.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S85c Bus1=85.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S86b Bus1=86.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S87b Bus1=87.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S88a Bus1=88.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S90b Bus1=90.2 Phases=1 Conn=Wye Model=5 kV=2.4 kW=40.0 kvar=20.0 +New Load.S92c Bus1=92.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S94a Bus1=94.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S95b Bus1=95.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S96b Bus1=96.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S98a Bus1=98.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S99b Bus1=99.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S100c Bus1=100.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S102c Bus1=102.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S103c Bus1=103.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S104c Bus1=104.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S106b Bus1=106.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S107b Bus1=107.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S109a Bus1=109.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S111a Bus1=111.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S112a Bus1=112.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S113a Bus1=113.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S114a Bus1=114.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master.dss b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master.dss new file mode 100644 index 0000000..fd4582b --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master.dss @@ -0,0 +1,221 @@ +! Annotated Master file for the IEEE 123-bus test case. +! +! This file is meant to be invoked from the Compile command in the "Run_IEEE123Bus.DSS" file. +! +! Note: DSS commands, property names, etc., are NOT case sensitive. Capitalize as you please. +! You should always do a "Clear" before making a new circuit: + +Clear + +! INSTANTIATE A NEW CIRCUIT AND DEFINE A STIFF 4160V SOURCE +! The new circuit is called "ieee123" +! This creates a Vsource object connected to "sourcebus". This is now the active circuit element, so +! you can simply continue to edit its property value. +! The basekV is redefined to 4.16 kV. The bus name is changed to "150" to match one of the buses in the test feeder. +! The source is set for 1.0 per unit and the Short circuit impedance is set to a small value (0.0001 ohms) +! The ~ is just shorthad for "more" for the New or Edit commands + +New object=circuit.ieee123 +~ basekv=4.16 Bus1=150 pu=1.00 R1=0 X1=0.0001 R0=0 X0=0.0001 + +! 3-PHASE GANGED REGULATOR AT HEAD OF FEEDER (KERSTING ASSUMES NO IMPEDANCE IN THE REGULATOR) +! the first line defines the 3-phase transformer to be controlled by the regulator control. +! The 2nd line defines the properties of the regulator control according to the test case + +new transformer.reg1a phases=3 windings=2 buses=[150 150r] conns=[wye wye] kvs=[4.16 4.16] kvas=[5000 5000] XHL=.001 %LoadLoss=0.00001 ppm=0.0 +new regcontrol.creg1a transformer=reg1a winding=2 vreg=120 band=2 ptratio=20 ctprim=700 R=3 X=7.5 + +! REDIRECT INPUT STREAM TO FILE CONTAINING DEFINITIONS OF LINECODES +! This file defines the line impedances is a similar manner to the description in the test case. + +Redirect IEEELinecodes.DSS + +! LINE DEFINITIONS +! Lines are defined by referring to a "linecode" that contains the impedances per unit length +! So the only properties required are the LineCode name and Length. Units are assumed to match the definition +! since no units property is defined in either the Linecodes file or this file. +! Note that it is not necessary to explicitly specify the node connections for the 3-phase lines +! unless they are not ".1.2.3". However, they are spelled out here for clarity. +! The DSS assumes .1.2.3.0.0 ... for connections of 3 or more phases. +! Likewise, .1 is not necessary for 1-phase lines connected to phase 1. However, if it is connected +! to any other phase, it must be specified. For completeness, everything is spelled out here. +! +! Note that it is recommended that the "units=" property be used here and in the Linecode definition as well +! to avoid confusion in the future + +! *** Original *** New Line.L115 Phases=3 Bus1=149.1.2.3 Bus2=1.1.2.3 LineCode=1 Length=0.4 +! Since the default is 3-phase, the definition of this line can be simpler: + +New Line.L115 Bus1=149 Bus2=1 LineCode=1 Length=0.4 + +New Line.L1 Phases=1 Bus1=1.2 Bus2=2.2 LineCode=10 Length=0.175 +New Line.L2 Phases=1 Bus1=1.3 Bus2=3.3 LineCode=11 Length=0.25 +New Line.L3 Phases=3 Bus1=1.1.2.3 Bus2=7.1.2.3 LineCode=1 Length=0.3 +New Line.L4 Phases=1 Bus1=3.3 Bus2=4.3 LineCode=11 Length=0.2 +New Line.L5 Phases=1 Bus1=3.3 Bus2=5.3 LineCode=11 Length=0.325 +New Line.L6 Phases=1 Bus1=5.3 Bus2=6.3 LineCode=11 Length=0.25 +New Line.L7 Phases=3 Bus1=7.1.2.3 Bus2=8.1.2.3 LineCode=1 Length=0.2 +New Line.L8 Phases=1 Bus1=8.2 Bus2=12.2 LineCode=10 Length=0.225 +New Line.L9 Phases=1 Bus1=8.1 Bus2=9.1 LineCode=9 Length=0.225 +New Line.L10 Phases=3 Bus1=8.1.2.3 Bus2=13.1.2.3 LineCode=1 Length=0.3 +New Line.L11 Phases=1 Bus1=9r.1 Bus2=14.1 LineCode=9 Length=0.425 +New Line.L12 Phases=1 Bus1=13.3 Bus2=34.3 LineCode=11 Length=0.15 +New Line.L13 Phases=3 Bus1=13.1.2.3 Bus2=18.1.2.3 LineCode=2 Length=0.825 +New Line.L14 Phases=1 Bus1=14.1 Bus2=11.1 LineCode=9 Length=0.25 +New Line.L15 Phases=1 Bus1=14.1 Bus2=10.1 LineCode=9 Length=0.25 +New Line.L16 Phases=1 Bus1=15.3 Bus2=16.3 LineCode=11 Length=0.375 +New Line.L17 Phases=1 Bus1=15.3 Bus2=17.3 LineCode=11 Length=0.35 +New Line.L18 Phases=1 Bus1=18.1 Bus2=19.1 LineCode=9 Length=0.25 +New Line.L19 Phases=3 Bus1=18.1.2.3 Bus2=21.1.2.3 LineCode=2 Length=0.3 +New Line.L20 Phases=1 Bus1=19.1 Bus2=20.1 LineCode=9 Length=0.325 +New Line.L21 Phases=1 Bus1=21.2 Bus2=22.2 LineCode=10 Length=0.525 +New Line.L22 Phases=3 Bus1=21.1.2.3 Bus2=23.1.2.3 LineCode=2 Length=0.25 +New Line.L23 Phases=1 Bus1=23.3 Bus2=24.3 LineCode=11 Length=0.55 +New Line.L24 Phases=3 Bus1=23.1.2.3 Bus2=25.1.2.3 LineCode=2 Length=0.275 +New Line.L25 Phases=2 Bus1=25r.1.3 Bus2=26.1.3 LineCode=7 Length=0.35 +New Line.L26 Phases=3 Bus1=25.1.2.3 Bus2=28.1.2.3 LineCode=2 Length=0.2 +New Line.L27 Phases=2 Bus1=26.1.3 Bus2=27.1.3 LineCode=7 Length=0.275 +New Line.L28 Phases=1 Bus1=26.3 Bus2=31.3 LineCode=11 Length=0.225 +New Line.L29 Phases=1 Bus1=27.1 Bus2=33.1 LineCode=9 Length=0.5 +New Line.L30 Phases=3 Bus1=28.1.2.3 Bus2=29.1.2.3 LineCode=2 Length=0.3 +New Line.L31 Phases=3 Bus1=29.1.2.3 Bus2=30.1.2.3 LineCode=2 Length=0.35 +New Line.L32 Phases=3 Bus1=30.1.2.3 Bus2=250.1.2.3 LineCode=2 Length=0.2 +New Line.L33 Phases=1 Bus1=31.3 Bus2=32.3 LineCode=11 Length=0.3 +New Line.L34 Phases=1 Bus1=34.3 Bus2=15.3 LineCode=11 Length=0.1 +New Line.L35 Phases=2 Bus1=35.1.2 Bus2=36.1.2 LineCode=8 Length=0.65 +New Line.L36 Phases=3 Bus1=35.1.2.3 Bus2=40.1.2.3 LineCode=1 Length=0.25 +New Line.L37 Phases=1 Bus1=36.1 Bus2=37.1 LineCode=9 Length=0.3 +New Line.L38 Phases=1 Bus1=36.2 Bus2=38.2 LineCode=10 Length=0.25 +New Line.L39 Phases=1 Bus1=38.2 Bus2=39.2 LineCode=10 Length=0.325 +New Line.L40 Phases=1 Bus1=40.3 Bus2=41.3 LineCode=11 Length=0.325 +New Line.L41 Phases=3 Bus1=40.1.2.3 Bus2=42.1.2.3 LineCode=1 Length=0.25 +New Line.L42 Phases=1 Bus1=42.2 Bus2=43.2 LineCode=10 Length=0.5 +New Line.L43 Phases=3 Bus1=42.1.2.3 Bus2=44.1.2.3 LineCode=1 Length=0.2 +New Line.L44 Phases=1 Bus1=44.1 Bus2=45.1 LineCode=9 Length=0.2 +New Line.L45 Phases=3 Bus1=44.1.2.3 Bus2=47.1.2.3 LineCode=1 Length=0.25 +New Line.L46 Phases=1 Bus1=45.1 Bus2=46.1 LineCode=9 Length=0.3 +New Line.L47 Phases=3 Bus1=47.1.2.3 Bus2=48.1.2.3 LineCode=4 Length=0.15 +New Line.L48 Phases=3 Bus1=47.1.2.3 Bus2=49.1.2.3 LineCode=4 Length=0.25 +New Line.L49 Phases=3 Bus1=49.1.2.3 Bus2=50.1.2.3 LineCode=4 Length=0.25 +New Line.L50 Phases=3 Bus1=50.1.2.3 Bus2=51.1.2.3 LineCode=4 Length=0.25 +New Line.L51 Phases=3 Bus1=51.1.2.3 Bus2=151.1.2.3 LineCode=4 Length=0.5 +New Line.L52 Phases=3 Bus1=52.1.2.3 Bus2=53.1.2.3 LineCode=1 Length=0.2 +New Line.L53 Phases=3 Bus1=53.1.2.3 Bus2=54.1.2.3 LineCode=1 Length=0.125 +New Line.L54 Phases=3 Bus1=54.1.2.3 Bus2=55.1.2.3 LineCode=1 Length=0.275 +New Line.L55 Phases=3 Bus1=54.1.2.3 Bus2=57.1.2.3 LineCode=3 Length=0.35 +New Line.L56 Phases=3 Bus1=55.1.2.3 Bus2=56.1.2.3 LineCode=1 Length=0.275 +New Line.L57 Phases=1 Bus1=57.2 Bus2=58.2 LineCode=10 Length=0.25 +New Line.L58 Phases=3 Bus1=57.1.2.3 Bus2=60.1.2.3 LineCode=3 Length=0.75 +New Line.L59 Phases=1 Bus1=58.2 Bus2=59.2 LineCode=10 Length=0.25 +New Line.L60 Phases=3 Bus1=60.1.2.3 Bus2=61.1.2.3 LineCode=5 Length=0.55 +New Line.L61 Phases=3 Bus1=60.1.2.3 Bus2=62.1.2.3 LineCode=12 Length=0.25 +New Line.L62 Phases=3 Bus1=62.1.2.3 Bus2=63.1.2.3 LineCode=12 Length=0.175 +New Line.L63 Phases=3 Bus1=63.1.2.3 Bus2=64.1.2.3 LineCode=12 Length=0.35 +New Line.L64 Phases=3 Bus1=64.1.2.3 Bus2=65.1.2.3 LineCode=12 Length=0.425 +New Line.L65 Phases=3 Bus1=65.1.2.3 Bus2=66.1.2.3 LineCode=12 Length=0.325 +New Line.L66 Phases=1 Bus1=67.1 Bus2=68.1 LineCode=9 Length=0.2 +New Line.L67 Phases=3 Bus1=67.1.2.3 Bus2=72.1.2.3 LineCode=3 Length=0.275 +New Line.L68 Phases=3 Bus1=67.1.2.3 Bus2=97.1.2.3 LineCode=3 Length=0.25 +New Line.L69 Phases=1 Bus1=68.1 Bus2=69.1 LineCode=9 Length=0.275 +New Line.L70 Phases=1 Bus1=69.1 Bus2=70.1 LineCode=9 Length=0.325 +New Line.L71 Phases=1 Bus1=70.1 Bus2=71.1 LineCode=9 Length=0.275 +New Line.L72 Phases=1 Bus1=72.3 Bus2=73.3 LineCode=11 Length=0.275 +New Line.L73 Phases=3 Bus1=72.1.2.3 Bus2=76.1.2.3 LineCode=3 Length=0.2 +New Line.L74 Phases=1 Bus1=73.3 Bus2=74.3 LineCode=11 Length=0.35 +New Line.L75 Phases=1 Bus1=74.3 Bus2=75.3 LineCode=11 Length=0.4 +New Line.L76 Phases=3 Bus1=76.1.2.3 Bus2=77.1.2.3 LineCode=6 Length=0.4 +New Line.L77 Phases=3 Bus1=76.1.2.3 Bus2=86.1.2.3 LineCode=3 Length=0.7 +New Line.L78 Phases=3 Bus1=77.1.2.3 Bus2=78.1.2.3 LineCode=6 Length=0.1 +New Line.L79 Phases=3 Bus1=78.1.2.3 Bus2=79.1.2.3 LineCode=6 Length=0.225 +New Line.L80 Phases=3 Bus1=78.1.2.3 Bus2=80.1.2.3 LineCode=6 Length=0.475 +New Line.L81 Phases=3 Bus1=80.1.2.3 Bus2=81.1.2.3 LineCode=6 Length=0.175 +New Line.L82 Phases=3 Bus1=81.1.2.3 Bus2=82.1.2.3 LineCode=6 Length=0.25 +New Line.L83 Phases=1 Bus1=81.3 Bus2=84.3 LineCode=11 Length=0.675 +New Line.L84 Phases=3 Bus1=82.1.2.3 Bus2=83.1.2.3 LineCode=6 Length=0.25 +New Line.L85 Phases=1 Bus1=84.3 Bus2=85.3 LineCode=11 Length=0.475 +New Line.L86 Phases=3 Bus1=86.1.2.3 Bus2=87.1.2.3 LineCode=6 Length=0.45 +New Line.L87 Phases=1 Bus1=87.1 Bus2=88.1 LineCode=9 Length=0.175 +New Line.L88 Phases=3 Bus1=87.1.2.3 Bus2=89.1.2.3 LineCode=6 Length=0.275 +New Line.L89 Phases=1 Bus1=89.2 Bus2=90.2 LineCode=10 Length=0.25 +New Line.L90 Phases=3 Bus1=89.1.2.3 Bus2=91.1.2.3 LineCode=6 Length=0.225 +New Line.L91 Phases=1 Bus1=91.3 Bus2=92.3 LineCode=11 Length=0.3 +New Line.L92 Phases=3 Bus1=91.1.2.3 Bus2=93.1.2.3 LineCode=6 Length=0.225 +New Line.L93 Phases=1 Bus1=93.1 Bus2=94.1 LineCode=9 Length=0.275 +New Line.L94 Phases=3 Bus1=93.1.2.3 Bus2=95.1.2.3 LineCode=6 Length=0.3 +New Line.L95 Phases=1 Bus1=95.2 Bus2=96.2 LineCode=10 Length=0.2 +New Line.L96 Phases=3 Bus1=97.1.2.3 Bus2=98.1.2.3 LineCode=3 Length=0.275 +New Line.L97 Phases=3 Bus1=98.1.2.3 Bus2=99.1.2.3 LineCode=3 Length=0.55 +New Line.L98 Phases=3 Bus1=99.1.2.3 Bus2=100.1.2.3 LineCode=3 Length=0.3 +New Line.L99 Phases=3 Bus1=100.1.2.3 Bus2=450.1.2.3 LineCode=3 Length=0.8 +New Line.L118 Phases=3 Bus1=197.1.2.3 Bus2=101.1.2.3 LineCode=3 Length=0.25 +New Line.L100 Phases=1 Bus1=101.3 Bus2=102.3 LineCode=11 Length=0.225 +New Line.L101 Phases=3 Bus1=101.1.2.3 Bus2=105.1.2.3 LineCode=3 Length=0.275 +New Line.L102 Phases=1 Bus1=102.3 Bus2=103.3 LineCode=11 Length=0.325 +New Line.L103 Phases=1 Bus1=103.3 Bus2=104.3 LineCode=11 Length=0.7 +New Line.L104 Phases=1 Bus1=105.2 Bus2=106.2 LineCode=10 Length=0.225 +New Line.L105 Phases=3 Bus1=105.1.2.3 Bus2=108.1.2.3 LineCode=3 Length=0.325 +New Line.L106 Phases=1 Bus1=106.2 Bus2=107.2 LineCode=10 Length=0.575 +New Line.L107 Phases=1 Bus1=108.1 Bus2=109.1 LineCode=9 Length=0.45 +New Line.L108 Phases=3 Bus1=108.1.2.3 Bus2=300.1.2.3 LineCode=3 Length=1 +New Line.L109 Phases=1 Bus1=109.1 Bus2=110.1 LineCode=9 Length=0.3 +New Line.L110 Phases=1 Bus1=110.1 Bus2=111.1 LineCode=9 Length=0.575 +New Line.L111 Phases=1 Bus1=110.1 Bus2=112.1 LineCode=9 Length=0.125 +New Line.L112 Phases=1 Bus1=112.1 Bus2=113.1 LineCode=9 Length=0.525 +New Line.L113 Phases=1 Bus1=113.1 Bus2=114.1 LineCode=9 Length=0.325 +New Line.L114 Phases=3 Bus1=135.1.2.3 Bus2=35.1.2.3 LineCode=4 Length=0.375 +New Line.L116 Phases=3 Bus1=152.1.2.3 Bus2=52.1.2.3 LineCode=1 Length=0.4 +New Line.L117 Phases=3 Bus1=160r.1.2.3 Bus2=67.1.2.3 LineCode=6 Length=0.35 + + +! NORMALLY CLOSED SWITCHES ARE DEFINED AS SHORT LINES +! Could also be defned by setting the Switch=Yes property + +New Line.Sw1 phases=3 Bus1=150r Bus2=149 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw2 phases=3 Bus1=13 Bus2=152 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw3 phases=3 Bus1=18 Bus2=135 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw4 phases=3 Bus1=60 Bus2=160 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw5 phases=3 Bus1=97 Bus2=197 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw6 phases=3 Bus1=61 Bus2=61s r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 + +! NORMALLY OPEN SWITCHES; DEFINED AS SHORT LINE TO OPEN BUS SO WE CAN SEE OPEN POINT VOLTAGES. +! COULD ALSO BE DEFINED AS DISABLED OR THE TERMINCAL COULD BE OPENED AFTER BEING DEFINED + +New Line.Sw7 phases=3 Bus1=151 Bus2=300_OPEN r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw8 phases=1 Bus1=54.1 Bus2=94_OPEN.1 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 + +! LOAD TRANSFORMER AT 61s/610 +! This is a 150 kVA Delta-Delta stepdown from 4160V to 480V. + +New Transformer.XFM1 Phases=3 Windings=2 Xhl=2.72 +~ wdg=1 bus=61s conn=Delta kv=4.16 kva=150 %r=0.635 +~ wdg=2 bus=610 conn=Delta kv=0.48 kva=150 %r=0.635 + +! CAPACITORS +! Capacitors are 2-terminal devices. The 2nd terminal (Bus2=...) defaults to all phases +! connected to ground (Node 0). Thus, it need not be specified if a Y-connected or L-N connected +! capacitor is desired + +New Capacitor.C83 Bus1=83 Phases=3 kVAR=600 kV=4.16 +New Capacitor.C88a Bus1=88.1 Phases=1 kVAR=50 kV=2.402 +New Capacitor.C90b Bus1=90.2 Phases=1 kVAR=50 kV=2.402 +New Capacitor.C92c Bus1=92.3 Phases=1 kVAR=50 kV=2.402 + + +!REGULATORS - REDIRECT TO DEFINITIONS FILE +! This file contains definitions for the remainder of regulators on the feeder: + +Redirect IEEE123Regulators.DSS + +! SPOT LOADS -- REDIRECT INPUT STREAM TO LOAD DEFINITIONS FILE + +Redirect IEEE123Loads.DSS + +! All devices in the test feeder are now defined. +! +! Many of the voltages are reported in per unit, so it is important to establish the base voltages at each bus so +! that we can compare with the result with greater ease. +! We will let the DSS compute the voltage bases by doing a zero-load power flow. +! There are only two voltage bases in the problem: 4160V and 480V. These must be expressed in kV + +Set VoltageBases = [4.16, 0.48] ! ARRAY OF VOLTAGES IN KV +CalcVoltageBases ! PERFORMS ZERO LOAD POWER FLOW TO ESTIMATE VOLTAGE BASES diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Regulators.DSS b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Regulators.DSS new file mode 100644 index 0000000..863c6cd --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Regulators.DSS @@ -0,0 +1,18 @@ +!DEFINE TRANSFORMERS FOR REGULATORS +! Have to assume basically zero impedance regulators to match the test case +new transformer.reg2a phases=1 windings=2 buses=[9.1 9r.1] conns=[wye wye] kvs=[2.402 2.402] kvas=[2000 2000] XHL=.01 %LoadLoss=0.00001 ppm=0.0 +new transformer.reg3a phases=1 windings=2 buses=[25.1 25r.1] conns=[wye wye] kvs=[2.402 2.402] kvas=[2000 2000] XHL=.01 %LoadLoss=0.00001 ppm=0.0 +new transformer.reg4a phases=1 windings=2 buses=[160.1 160r.1] conns=[wye wye] kvs=[2.402 2.402] kvas=[2000 2000] XHL=.01 %LoadLoss=0.00001 ppm=0.0 +new transformer.reg3c like=reg3a buses=[25.3 25r.3] ppm=0.0 +new transformer.reg4b like=reg4a buses=[160.2 160r.2] ppm=0.0 +new transformer.reg4c like=reg4a buses=[160.3 160r.3] ppm=0.0 + +! POINT REGULATOR CONTROLS TO REGULATOR TRANSFORMER AND SET PARAMETERS +new regcontrol.creg2a transformer=reg2a winding=2 vreg=120 band=2 ptratio=20 ctprim=50 R=0.4 X=0.4 +new regcontrol.creg3a transformer=reg3a winding=2 vreg=120 band=1 ptratio=20 ctprim=50 R=0.4 X=0.4 +new regcontrol.creg3c like=creg3a transformer=reg3c +new regcontrol.creg4a transformer=reg4a winding=2 vreg=124 band=2 ptratio=20 ctprim=300 R=0.6 X=1.3 +new regcontrol.creg4b like=creg4a transformer=reg4b R=1.4 X=2.6 +new regcontrol.creg4c like=creg4a transformer=reg4c R=0.2 X=1.4 + +! NOTE: WHEN LIKE= IS USED, IT IS NECESSARY TO SPECIFY ONLY THOSE PROPERTIES THAT ARE DIFFERENT \ No newline at end of file diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/IEEELineCodes.DSS b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEELineCodes.DSS new file mode 100644 index 0000000..1d0da3f --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEELineCodes.DSS @@ -0,0 +1,213 @@ +! this file was corrected 9/16/2010 to match the values in Kersting's files + + + +! These line codes are used in the 123-bus circuit + +New linecode.1 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.088205 | 0.0312137 0.0901946 | 0.0306264 0.0316143 0.0889665 ) +!!!~ xmatrix = (0.20744 | 0.0935314 0.200783 | 0.0760312 0.0855879 0.204877 ) +!!!~ cmatrix = (2.90301 | -0.679335 3.15896 | -0.22313 -0.481416 2.8965 ) +~ rmatrix = [0.086666667 | 0.029545455 0.088371212 | 0.02907197 0.029924242 0.087405303] +~ xmatrix = [0.204166667 | 0.095018939 0.198522727 | 0.072897727 0.080227273 0.201723485] +~ cmatrix = [2.851710072 | -0.920293787 3.004631862 | -0.350755566 -0.585011253 2.71134756] + +New linecode.2 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0901946 | 0.0316143 0.0889665 | 0.0312137 0.0306264 0.088205 ) +!!!~ xmatrix = (0.200783 | 0.0855879 0.204877 | 0.0935314 0.0760312 0.20744 ) +!!!~ cmatrix = (3.15896 | -0.481416 2.8965 | -0.679335 -0.22313 2.90301 ) +~ rmatrix = [0.088371212 | 0.02992424 0.087405303 | 0.029545455 0.02907197 0.086666667] +~ xmatrix = [0.198522727 | 0.080227273 0.201723485 | 0.095018939 0.072897727 0.204166667] +~ cmatrix = [3.004631862 | -0.585011253 2.71134756 | -0.920293787 -0.350755566 2.851710072] + +New linecode.3 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0889665 | 0.0306264 0.088205 | 0.0316143 0.0312137 0.0901946 ) +!!!~ xmatrix = (0.204877 | 0.0760312 0.20744 | 0.0855879 0.0935314 0.200783 ) +!!!~ cmatrix = (2.8965 | -0.22313 2.90301 | -0.481416 -0.679335 3.15896 ) + +~ rmatrix = [0.087405303 | 0.02907197 0.086666667 | 0.029924242 0.029545455 0.088371212] +~ xmatrix = [0.201723485 | 0.072897727 0.204166667 | 0.080227273 0.095018939 0.198522727] +~ cmatrix = [2.71134756 | -0.350755566 2.851710072 | -0.585011253 -0.920293787 3.004631862] + +New linecode.4 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0889665 | 0.0316143 0.0901946 | 0.0306264 0.0312137 0.088205 ) +!!!~ xmatrix = (0.204877 | 0.0855879 0.200783 | 0.0760312 0.0935314 0.20744 ) +!!!~ cmatrix = (2.8965 | -0.481416 3.15896 | -0.22313 -0.679335 2.90301 ) +~ rmatrix = [0.087405303 | 0.029924242 0.088371212 | 0.02907197 0.029545455 0.086666667] +~ xmatrix = [0.201723485 | 0.080227273 0.198522727 | 0.072897727 0.095018939 0.204166667] +~ cmatrix = [2.71134756 | 0.585011253 3.004631862 | -0.350755566 -0.920293787 2.851710072] + +New linecode.5 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0901946 | 0.0312137 0.088205 | 0.0316143 0.0306264 0.0889665 ) +!!!~ xmatrix = (0.200783 | 0.0935314 0.20744 | 0.0855879 0.0760312 0.204877 ) +!!!~ cmatrix = (3.15896 | -0.679335 2.90301 | -0.481416 -0.22313 2.8965 ) + +~ rmatrix = [0.088371212 | 0.029545455 0.086666667 | 0.029924242 0.02907197 0.087405303] +~ xmatrix = [0.198522727 | 0.095018939 0.204166667 | 0.080227273 0.072897727 0.201723485] +~ cmatrix = [3.004631862 | -0.920293787 2.851710072 | -0.585011253 -0.350755566 2.71134756] + +New linecode.6 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.088205 | 0.0306264 0.0889665 | 0.0312137 0.0316143 0.0901946 ) +!!!~ xmatrix = (0.20744 | 0.0760312 0.204877 | 0.0935314 0.0855879 0.200783 ) +!!!~ cmatrix = (2.90301 | -0.22313 2.8965 | -0.679335 -0.481416 3.15896 ) +~ rmatrix = [0.086666667 | 0.02907197 0.087405303 | 0.029545455 0.029924242 0.088371212] +~ xmatrix = [0.204166667 | 0.072897727 0.201723485 | 0.095018939 0.080227273 0.198522727] +~ cmatrix = [2.851710072 | -0.350755566 2.71134756 | -0.920293787 -0.585011253 3.004631862] +New linecode.7 nphases=2 BaseFreq=60 +!!!~ rmatrix = (0.088205 | 0.0306264 0.0889665 ) +!!!~ xmatrix = (0.20744 | 0.0760312 0.204877 ) +!!!~ cmatrix = (2.75692 | -0.326659 2.82313 ) +~ rmatrix = [0.086666667 | 0.02907197 0.087405303] +~ xmatrix = [0.204166667 | 0.072897727 0.201723485] +~ cmatrix = [2.569829596 | -0.52995137 2.597460011] +New linecode.8 nphases=2 BaseFreq=60 +!!!~ rmatrix = (0.088205 | 0.0306264 0.0889665 ) +!!!~ xmatrix = (0.20744 | 0.0760312 0.204877 ) +!!!~ cmatrix = (2.75692 | -0.326659 2.82313 ) +~ rmatrix = [0.086666667 | 0.02907197 0.087405303] +~ xmatrix = [0.204166667 | 0.072897727 0.201723485] +~ cmatrix = [2.569829596 | -0.52995137 2.597460011] +New linecode.9 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.254428 ) +!!!~ xmatrix = (0.259546 ) +!!!~ cmatrix = (2.50575 ) +~ rmatrix = [0.251742424] +~ xmatrix = [0.255208333] +~ cmatrix = [2.270366128] +New linecode.10 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.254428 ) +!!!~ xmatrix = (0.259546 ) +!!!~ cmatrix = (2.50575 ) +~ rmatrix = [0.251742424] +~ xmatrix = [0.255208333] +~ cmatrix = [2.270366128] +New linecode.11 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.254428 ) +!!!~ xmatrix = (0.259546 ) +!!!~ cmatrix = (2.50575 ) +~ rmatrix = [0.251742424] +~ xmatrix = [0.255208333] +~ cmatrix = [2.270366128] +New linecode.12 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.291814 | 0.101656 0.294012 | 0.096494 0.101656 0.291814 ) +!!!~ xmatrix = (0.141848 | 0.0517936 0.13483 | 0.0401881 0.0517936 0.141848 ) +!!!~ cmatrix = (53.4924 | 0 53.4924 | 0 0 53.4924 ) +~ rmatrix = [0.288049242 | 0.09844697 0.29032197 | 0.093257576 0.09844697 0.288049242] +~ xmatrix = [0.142443182 | 0.052556818 0.135643939 | 0.040852273 0.052556818 0.142443182] +~ cmatrix = [33.77150149 | 0 33.77150149 | 0 0 33.77150149] + +! These line codes are used in the 34-node test feeder + +New linecode.300 nphases=3 basefreq=60 ! ohms per 1000ft Corrected 11/30/05 +~ rmatrix = [0.253181818 | 0.039791667 0.250719697 | 0.040340909 0.039128788 0.251780303] !ABC ORDER +~ xmatrix = [0.252708333 | 0.109450758 0.256988636 | 0.094981061 0.086950758 0.255132576] +~ CMATRIX = [2.680150309 | -0.769281006 2.5610381 | -0.499507676 -0.312072984 2.455590387] +New linecode.301 nphases=3 basefreq=60 +~ rmatrix = [0.365530303 | 0.04407197 0.36282197 | 0.04467803 0.043333333 0.363996212] +~ xmatrix = [0.267329545 | 0.122007576 0.270473485 | 0.107784091 0.099204545 0.269109848] +~ cmatrix = [2.572492163 | -0.72160598 2.464381882 | -0.472329395 -0.298961096 2.368881119] +New linecode.302 nphases=1 basefreq=60 +~ rmatrix = (0.530208 ) +~ xmatrix = (0.281345 ) +~ cmatrix = (2.12257 ) +New linecode.303 nphases=1 basefreq=60 +~ rmatrix = (0.530208 ) +~ xmatrix = (0.281345 ) +~ cmatrix = (2.12257 ) +New linecode.304 nphases=1 basefreq=60 +~ rmatrix = (0.363958 ) +~ xmatrix = (0.269167 ) +~ cmatrix = (2.1922 ) + + +! This may be for the 4-node test feeder, but is not actually referenced. +! instead, the 4Bus*.dss files all use the wiredata and linegeometry inputs +! to calculate these matrices from physical data. + +New linecode.400 nphases=3 BaseFreq=60 +~ rmatrix = (0.088205 | 0.0312137 0.0901946 | 0.0306264 0.0316143 0.0889665 ) +~ xmatrix = (0.20744 | 0.0935314 0.200783 | 0.0760312 0.0855879 0.204877 ) +~ cmatrix = (2.90301 | -0.679335 3.15896 | -0.22313 -0.481416 2.8965 ) + +! These are for the 13-node test feeder + +New linecode.601 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0674673 | 0.0312137 0.0654777 | 0.0316143 0.0306264 0.0662392 ) +!!!~ xmatrix = (0.195204 | 0.0935314 0.201861 | 0.0855879 0.0760312 0.199298 ) +!!!~ cmatrix = (3.32591 | -0.743055 3.04217 | -0.525237 -0.238111 3.03116 ) +~ rmatrix = [0.065625 | 0.029545455 0.063920455 | 0.029924242 0.02907197 0.064659091] +~ xmatrix = [0.192784091 | 0.095018939 0.19844697 | 0.080227273 0.072897727 0.195984848] +~ cmatrix = [3.164838036 | -1.002632425 2.993981593 | -0.632736516 -0.372608713 2.832670203] +New linecode.602 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.144361 | 0.0316143 0.143133 | 0.0312137 0.0306264 0.142372 ) +!!!~ xmatrix = (0.226028 | 0.0855879 0.230122 | 0.0935314 0.0760312 0.232686 ) +!!!~ cmatrix = (3.01091 | -0.443561 2.77543 | -0.624494 -0.209615 2.77847 ) +~ rmatrix = [0.142537879 | 0.029924242 0.14157197 | 0.029545455 0.02907197 0.140833333] +~ xmatrix = [0.22375 | 0.080227273 0.226950758 | 0.095018939 0.072897727 0.229393939] +~ cmatrix = [2.863013423 | -0.543414918 2.602031589 | -0.8492585 -0.330962141 2.725162768] +New linecode.603 nphases=2 BaseFreq=60 +!!!~ rmatrix = (0.254472 | 0.0417943 0.253371 ) +!!!~ xmatrix = (0.259467 | 0.0912376 0.261431 ) +!!!~ cmatrix = (2.54676 | -0.28882 2.49502 ) +~ rmatrix = [0.251780303 | 0.039128788 0.250719697] +~ xmatrix = [0.255132576 | 0.086950758 0.256988636] +~ cmatrix = [2.366017603 | -0.452083836 2.343963508] +New linecode.604 nphases=2 BaseFreq=60 +!!!~ rmatrix = (0.253371 | 0.0417943 0.254472 ) +!!!~ xmatrix = (0.261431 | 0.0912376 0.259467 ) +!!!~ cmatrix = (2.49502 | -0.28882 2.54676 ) +~ rmatrix = [0.250719697 | 0.039128788 0.251780303] +~ xmatrix = [0.256988636 | 0.086950758 0.255132576] +~ cmatrix = [2.343963508 | -0.452083836 2.366017603] +New linecode.605 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.254428 ) +!!!~ xmatrix = (0.259546 ) +!!!~ cmatrix = (2.50575 ) +~ rmatrix = [0.251742424] +~ xmatrix = [0.255208333] +~ cmatrix = [2.270366128] +New linecode.606 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.152193 | 0.0611362 0.15035 | 0.0546992 0.0611362 0.152193 ) +!!!~ xmatrix = (0.0825685 | 0.00548281 0.0745027 | -0.00339824 0.00548281 0.0825685 ) +!!!~ cmatrix = (72.7203 | 0 72.7203 | 0 0 72.7203 ) +~ rmatrix = [0.151174242 | 0.060454545 0.149450758 | 0.053958333 0.060454545 0.151174242] +~ xmatrix = [0.084526515 | 0.006212121 0.076534091 | -0.002708333 0.006212121 0.084526515] +~ cmatrix = [48.67459408 | 0 48.67459408 | 0 0 48.67459408] +New linecode.607 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.255799 ) +!!!~ xmatrix = (0.092284 ) +!!!~ cmatrix = (50.7067 ) +~ rmatrix = [0.254261364] +~ xmatrix = [0.097045455] +~ cmatrix = [44.70661522] + +! These are for the 37-node test feeder, all underground + +New linecode.721 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0554906 | 0.0127467 0.0501597 | 0.00640446 0.0127467 0.0554906 ) +!!!~ xmatrix = (0.0372331 | -0.00704588 0.0358645 | -0.00796424 -0.00704588 0.0372331 ) +!!!~ cmatrix = (124.851 | 0 124.851 | 0 0 124.851 ) +~ rmatrix = [0.055416667 | 0.012746212 0.050113636 | 0.006382576 0.012746212 0.055416667] +~ xmatrix = [0.037367424 | -0.006969697 0.035984848 | -0.007897727 -0.006969697 0.037367424] +~ cmatrix = [80.27484728 | 0 80.27484728 | 0 0 80.27484728] +New linecode.722 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0902251 | 0.0309584 0.0851482 | 0.0234946 0.0309584 0.0902251 ) +!!!~ xmatrix = (0.055991 | -0.00646552 0.0504025 | -0.0117669 -0.00646552 0.055991 ) +!!!~ cmatrix = (93.4896 | 0 93.4896 | 0 0 93.4896 ) +~ rmatrix = [0.089981061 | 0.030852273 0.085 | 0.023371212 0.030852273 0.089981061] +~ xmatrix = [0.056306818 | -0.006174242 0.050719697 | -0.011496212 -0.006174242 0.056306818] +~ cmatrix = [64.2184109 | 0 64.2184109 | 0 0 64.2184109] +New linecode.723 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.247572 | 0.0947678 0.249104 | 0.0893782 0.0947678 0.247572 ) +!!!~ xmatrix = (0.126339 | 0.0390337 0.118816 | 0.0279344 0.0390337 0.126339 ) +!!!~ cmatrix = (58.108 | 0 58.108 | 0 0 58.108 ) +~ rmatrix = [0.245 | 0.092253788 0.246628788 | 0.086837121 0.092253788 0.245] +~ xmatrix = [0.127140152 | 0.039981061 0.119810606 | 0.028806818 0.039981061 0.127140152] +~ cmatrix = [37.5977112 | 0 37.5977112 | 0 0 37.5977112] +New linecode.724 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.399883 | 0.101765 0.402011 | 0.0965199 0.101765 0.399883 ) +!!!~ xmatrix = (0.146325 | 0.0510963 0.139305 | 0.0395402 0.0510963 0.146325 ) +!!!~ cmatrix = (46.9685 | 0 46.9685 | 0 0 46.9685 ) +~ rmatrix = [0.396818182 | 0.098560606 0.399015152 | 0.093295455 0.098560606 0.396818182] +~ xmatrix = [0.146931818 | 0.051856061 0.140113636 | 0.040208333 0.051856061 0.146931818] +~ cmatrix = [30.26701029 | 0 30.26701029 | 0 0 30.26701029] diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/Run_IEEE123Bus.DSS b/ipss.plugin.3phase/testData/feeder/IEEE123/Run_IEEE123Bus.DSS new file mode 100644 index 0000000..b15f1a8 --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/Run_IEEE123Bus.DSS @@ -0,0 +1,113 @@ +! Annotated "Run" file for the IEEE 123 Bus Test Case +! + +! This file contains two DSS scripts for executing the IEEE 123-bus test case. + +! The first script lets the DSS compute the regulator taps, which are generally one off from the +! presently posted solution. The second script uses the tap values determined by Kersting. This is done by +! setting the taps on the transformers representing the regulators and then inhibiting the regulator control + +! The circuit definition is controlled by a "master" file, which invokes other files. This is but one +! logical way to oganize your files. You are free to choose another scheme of your choosing. + +! ================================================================= +! 1st Script +! ================================================================= + + +Compile (IEEE123Master.dss) + +! 'Compile' differs from "redirect" in that it changes the default directory +! to the one in which the referenced file is located. +! 'Redirect' returns to the directory from which it was invoked. + +! After compiling, the next series of script commands modify to the regulator control definitions to +! limit the maximum tap change to 1 per solution control iteration. In most cases, this will +! allow the standard DSS solution algorithm to better represent an actual control. +! Note the time delay is also chnaged. This forces the regulator at the head of the feeder to move first. + +RegControl.creg1a.maxtapchange=1 Delay=15 !Allow only one tap change per solution. This one moves first +RegControl.creg2a.maxtapchange=1 Delay=30 !Allow only one tap change per solution +RegControl.creg3a.maxtapchange=1 Delay=30 !Allow only one tap change per solution +RegControl.creg4a.maxtapchange=1 Delay=30 !Allow only one tap change per solution +RegControl.creg3c.maxtapchange=1 Delay=30 !Allow only one tap change per solution +RegControl.creg4b.maxtapchange=1 Delay=30 !Allow only one tap change per solution +RegControl.creg4c.maxtapchange=1 Delay=30 !Allow only one tap change per solution + +! The default maximum control iterations is 10. With so many regulators each moving only one tap at a time, +! this is insufficient for the 123-bus test case, which will need 15 control iterations for the initial solution. +! Therefore, the 'MaxControlIter' option is set to 30 to be safe. + +Set MaxControlIter=30 + +! Solve executes the solution for the present solution mode, which is "snapshot". + +New EnergyMeter.Feeder Line.L115 1 + +solve +Buscoords Buscoords.dat ! load in bus coordinates + +! Show some selected results + +Plot Profile +plot profile phases=all + +Show Voltage LN Nodes ! this shows the voltages by node, Line-to-Neutral voltage. +Show Currents Elements ! this produces a report of the currents, element-by-element. +Show Powers kva Elements ! This produces a report of the powers, in kVA, element-by-element +Show taps ! shows the present regulator taps + +Redirect CircuitplottingScripts.DSS + +! ================================================================= +! 2nd Script +! ================================================================= + +! This script give results closer to the posted results by forcing +! the regulators to the same tap as the solution posted + +Compile (IEEE123Master.dss) + +! set regulators on same tap as Kersting computes +! (uses RPN inline math feature of OpenDSS) +! Transformer taps are expressed in per unit + +Transformer.reg1a.wdg=2 Tap=(0.00625 7 * 1 +) ! Tap 7 +Transformer.reg2a.wdg=2 Tap=(0.00625 -1 * 1 +) ! Tap -1 +Transformer.reg3a.wdg=2 Tap=(0.00625 0 * 1 +) ! Tap 0 +Transformer.reg3c.wdg=2 Tap=(0.00625 -1 * 1 +) ! Tap -1 +Transformer.reg4a.wdg=2 Tap=(0.00625 8 * 1 +) ! Tap 8 +Transformer.reg4b.wdg=2 Tap=(0.00625 1 * 1 +) ! Tap 1 +Transformer.reg4c.wdg=2 Tap=(0.00625 5 * 1 +) ! Tap 5 + +! Lock the regulators so they don't move +! Another way of doing this is to Set ControlMode=OFF + +RegControl.creg1a.maxtapchange=0 !Fixed at present tap +RegControl.creg2a.maxtapchange=0 !Fixed at present tap +RegControl.creg3a.maxtapchange=0 !Fixed at present tap +RegControl.creg4a.maxtapchange=0 !Fixed at present tap +RegControl.creg3c.maxtapchange=0 !Fixed at present tap +RegControl.creg4b.maxtapchange=0 !Fixed at present tap +RegControl.creg4c.maxtapchange=0 !Fixed at present tap + +! No need to revise the MaxControlIter option in this case; +! there will be only one control iteration + +New EnergyMeter.Feeder Line.L115 1 + +solve +Buscoords Buscoords.dat ! load in bus coordinates + +! Show some selected results + +Plot Profile + +Show Voltage LN Nodes +Show Currents Elements +Show Powers kva Elements +Show taps + + +help +plot Loadshape Object=default diff --git a/ipss.plugin.3phase/testData/feeder/IEEE13/IEEE13Nodeckt.dss b/ipss.plugin.3phase/testData/feeder/IEEE13/IEEE13Nodeckt.dss new file mode 100644 index 0000000..f9ea511 --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE13/IEEE13Nodeckt.dss @@ -0,0 +1,176 @@ +Clear + +! +! This script is based on a script developed by Tennessee Tech Univ students +! Tyler Patton, Jon Wood, and David Woods, April 2009 +! + +new circuit.IEEE13Nodeckt +~ basekv=115 pu=1.0001 phases=3 bus1=SourceBus +~ Angle=30 ! advance angle 30 deg so result agree with published angle +~ MVAsc3=20000 MVASC1=21000 ! stiffen the source to approximate inf source + + + +!SUB TRANSFORMER DEFINITION +! Although this data was given, it does not appear to be used in the test case results +! The published test case starts at 1.0 per unit at Bus 650. To make this happen, we will change the impedance +! on the transformer to something tiny by dividing by 1000 using the DSS in-line RPN math +New Transformer.Sub Phases=3 Windings=2 XHL=(8 1000 /) +~ wdg=1 bus=SourceBus conn=delta kv=115 kva=5000 %r=(.5 1000 /) XHT=4 +~ wdg=2 bus=650 conn=wye kv=4.16 kva=5000 %r=(.5 1000 /) XLT=4 + +! FEEDER 1-PHASE VOLTAGE REGULATORS +! Define low-impedance 2-wdg transformer + +New Transformer.Reg1 phases=1 XHL=0.01 kVAs=[1666 1666] +~ Buses=[650.1 RG60.1] kVs=[2.4 2.4] %LoadLoss=0.01 +new regcontrol.Reg1 transformer=Reg1 winding=2 vreg=122 band=2 ptratio=20 ctprim=700 R=3 X=9 + +New Transformer.Reg2 phases=1 XHL=0.01 kVAs=[1666 1666] +~ Buses=[650.2 RG60.2] kVs=[2.4 2.4] %LoadLoss=0.01 +new regcontrol.Reg2 transformer=Reg2 winding=2 vreg=122 band=2 ptratio=20 ctprim=700 R=3 X=9 + +New Transformer.Reg3 phases=1 XHL=0.01 kVAs=[1666 1666] +~ Buses=[650.3 RG60.3] kVs=[2.4 2.4] %LoadLoss=0.01 +new regcontrol.Reg3 transformer=Reg3 winding=2 vreg=122 band=2 ptratio=20 ctprim=700 R=3 X=9 + + +!TRANSFORMER DEFINITION +New Transformer.XFM1 Phases=3 Windings=2 XHL=2 +~ wdg=1 bus=633 conn=Wye kv=4.16 kva=500 %r=.55 XHT=1 +~ wdg=2 bus=634 conn=Wye kv=0.480 kva=500 %r=.55 XLT=1 + + +!LINE CODES +redirect IEEELineCodes.dss + +// these are local matrix line codes +// corrected 9-14-2011 +New linecode.mtx601 nphases=3 BaseFreq=60 +~ rmatrix = (0.3465 | 0.1560 0.3375 | 0.1580 0.1535 0.3414 ) +~ xmatrix = (1.0179 | 0.5017 1.0478 | 0.4236 0.3849 1.0348 ) +~ units=mi +New linecode.mtx602 nphases=3 BaseFreq=60 +~ rmatrix = (0.7526 | 0.1580 0.7475 | 0.1560 0.1535 0.7436 ) +~ xmatrix = (1.1814 | 0.4236 1.1983 | 0.5017 0.3849 1.2112 ) +~ units=mi +New linecode.mtx603 nphases=2 BaseFreq=60 +~ rmatrix = (1.3238 | 0.2066 1.3294 ) +~ xmatrix = (1.3569 | 0.4591 1.3471 ) +~ units=mi +New linecode.mtx604 nphases=2 BaseFreq=60 +~ rmatrix = (1.3238 | 0.2066 1.3294 ) +~ xmatrix = (1.3569 | 0.4591 1.3471 ) +~ units=mi +New linecode.mtx605 nphases=1 BaseFreq=60 +~ rmatrix = (1.3292 ) +~ xmatrix = (1.3475 ) +~ units=mi + +/*********** Original 606 Linecode ********************* + +You have to use this to match Kersting's results: + +New linecode.mtx606 nphases=3 BaseFreq=60 +~ rmatrix = (0.7982 | 0.3192 0.7891 | 0.2849 0.3192 0.7982 ) +~ xmatrix = (0.4463 | 0.0328 0.4041 | -0.0143 0.0328 0.4463 ) +~ Cmatrix = [257 | 0 257 | 0 0 257] ! <--- This is too low by 1.5 +~ units=mi + +Corrected mtx606 Feb 3 2016 by RDugan + +The new LineCode.606 is computed using the following CN cable definition and +LineGeometry definition: + +New CNDATA.250_1/3 k=13 DiaStrand=0.064 Rstrand=2.816666667 epsR=2.3 +~ InsLayer=0.220 DiaIns=1.06 DiaCable=1.16 Rac=0.076705 GMRac=0.20568 diam=0.573 +~ Runits=kft Radunits=in GMRunits=in + +New LineGeometry.606 nconds=3 nphases=3 units=ft +~ cond=1 cncable=250_1/3 x=-0.5 h= -4 +~ cond=2 cncable=250_1/3 x=0 h= -4 +~ cond=3 cncable=250_1/3 x=0.5 h= -4 + +****End Comment******/ + +New Linecode.mtx606 nphases=3 Units=mi +~ Rmatrix=[0.791721 |0.318476 0.781649 |0.28345 0.318476 0.791721 ] +~ Xmatrix=[0.438352 |0.0276838 0.396697 |-0.0184204 0.0276838 0.438352 ] +~ Cmatrix=[383.948 |0 383.948 |0 0 383.948 ] +New linecode.mtx607 nphases=1 BaseFreq=60 +~ rmatrix = (1.3425 ) +~ xmatrix = (0.5124 ) +~ cmatrix = [236] +~ units=mi + + +!LOAD DEFINITIONS +New Load.671 Bus1=671.1.2.3 Phases=3 Conn=Delta Model=1 kV=4.16 kW=1155 kvar=660 +New Load.634a Bus1=634.1 Phases=1 Conn=Wye Model=1 kV=0.277 kW=160 kvar=110 +New Load.634b Bus1=634.2 Phases=1 Conn=Wye Model=1 kV=0.277 kW=120 kvar=90 +New Load.634c Bus1=634.3 Phases=1 Conn=Wye Model=1 kV=0.277 kW=120 kvar=90 +New Load.645 Bus1=645.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=170 kvar=125 +New Load.646 Bus1=646.2.3 Phases=1 Conn=Delta Model=2 kV=4.16 kW=230 kvar=132 +New Load.692 Bus1=692.3.1 Phases=1 Conn=Delta Model=5 kV=4.16 kW=170 kvar=151 +New Load.675a Bus1=675.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=485 kvar=190 +New Load.675b Bus1=675.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=68 kvar=60 +New Load.675c Bus1=675.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=290 kvar=212 +New Load.611 Bus1=611.3 Phases=1 Conn=Wye Model=5 kV=2.4 kW=170 kvar=80 +New Load.652 Bus1=652.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=128 kvar=86 +New Load.670a Bus1=670.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=17 kvar=10 +New Load.670b Bus1=670.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=66 kvar=38 +New Load.670c Bus1=670.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=117 kvar=68 + +!CAPACITOR DEFINITIONS +New Capacitor.Cap1 Bus1=675 phases=3 kVAR=600 kV=4.16 +New Capacitor.Cap2 Bus1=611.3 phases=1 kVAR=100 kV=2.4 + +!Bus 670 is the concentrated point load of the distributed load on line 632 to 671 located at 1/3 the distance from node 632 + +!LINE DEFINITIONS +New Line.650632 Phases=3 Bus1=RG60.1.2.3 Bus2=632.1.2.3 LineCode=mtx601 Length=2000 units=ft +New Line.632670 Phases=3 Bus1=632.1.2.3 Bus2=670.1.2.3 LineCode=mtx601 Length=667 units=ft +New Line.670671 Phases=3 Bus1=670.1.2.3 Bus2=671.1.2.3 LineCode=mtx601 Length=1333 units=ft +New Line.671680 Phases=3 Bus1=671.1.2.3 Bus2=680.1.2.3 LineCode=mtx601 Length=1000 units=ft +New Line.632633 Phases=3 Bus1=632.1.2.3 Bus2=633.1.2.3 LineCode=mtx602 Length=500 units=ft +New Line.632645 Phases=2 Bus1=632.3.2 Bus2=645.3.2 LineCode=mtx603 Length=500 units=ft +New Line.645646 Phases=2 Bus1=645.3.2 Bus2=646.3.2 LineCode=mtx603 Length=300 units=ft +New Line.692675 Phases=3 Bus1=692.1.2.3 Bus2=675.1.2.3 LineCode=mtx606 Length=500 units=ft +New Line.671684 Phases=2 Bus1=671.1.3 Bus2=684.1.3 LineCode=mtx604 Length=300 units=ft +New Line.684611 Phases=1 Bus1=684.3 Bus2=611.3 LineCode=mtx605 Length=300 units=ft +New Line.684652 Phases=1 Bus1=684.1 Bus2=652.1 LineCode=mtx607 Length=800 units=ft + + +!SWITCH DEFINITIONS +New Line.671692 Phases=3 Bus1=671 Bus2=692 Switch=y r1=1e-4 r0=1e-4 x1=0.000 x0=0.000 c1=0.000 c0=0.000 + +Set Voltagebases=[115, 4.16, .48] +calcv +Solve +BusCoords IEEE13Node_BusXY.csv + +!--------------------------------------------------------------------------------------------------------------------------------------------------- +!----------------Show some Results ----------------------------------------------------------------------------------------------------------------- +!--------------------------------------------------------------------------------------------------------------------------------------------------- + + +// Show Voltages LN Nodes +// Show Currents Elem +// Show Powers kVA Elem +// Show Losses +// Show Taps + +!--------------------------------------------------------------------------------------------------------------------------------------------------- +!--------------------------------------------------------------------------------------------------------------------------------------------------- +! Alternate Solution Script +! To force the taps to be same as published results, set the transformer taps manually and disable the controls +!--------------------------------------------------------------------------------------------------------------------------------------------------- +/* +Transformer.Reg1.Taps=[1.0 1.0625] +Transformer.Reg2.Taps=[1.0 1.0500] +Transformer.Reg3.Taps=[1.0 1.06875] +Set Controlmode=OFF + +Solve +*/ \ No newline at end of file diff --git a/ipss.plugin.3phase/testData/feeder/IEEE13/IEEELineCodes.DSS b/ipss.plugin.3phase/testData/feeder/IEEE13/IEEELineCodes.DSS new file mode 100644 index 0000000..1d0da3f --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE13/IEEELineCodes.DSS @@ -0,0 +1,213 @@ +! this file was corrected 9/16/2010 to match the values in Kersting's files + + + +! These line codes are used in the 123-bus circuit + +New linecode.1 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.088205 | 0.0312137 0.0901946 | 0.0306264 0.0316143 0.0889665 ) +!!!~ xmatrix = (0.20744 | 0.0935314 0.200783 | 0.0760312 0.0855879 0.204877 ) +!!!~ cmatrix = (2.90301 | -0.679335 3.15896 | -0.22313 -0.481416 2.8965 ) +~ rmatrix = [0.086666667 | 0.029545455 0.088371212 | 0.02907197 0.029924242 0.087405303] +~ xmatrix = [0.204166667 | 0.095018939 0.198522727 | 0.072897727 0.080227273 0.201723485] +~ cmatrix = [2.851710072 | -0.920293787 3.004631862 | -0.350755566 -0.585011253 2.71134756] + +New linecode.2 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0901946 | 0.0316143 0.0889665 | 0.0312137 0.0306264 0.088205 ) +!!!~ xmatrix = (0.200783 | 0.0855879 0.204877 | 0.0935314 0.0760312 0.20744 ) +!!!~ cmatrix = (3.15896 | -0.481416 2.8965 | -0.679335 -0.22313 2.90301 ) +~ rmatrix = [0.088371212 | 0.02992424 0.087405303 | 0.029545455 0.02907197 0.086666667] +~ xmatrix = [0.198522727 | 0.080227273 0.201723485 | 0.095018939 0.072897727 0.204166667] +~ cmatrix = [3.004631862 | -0.585011253 2.71134756 | -0.920293787 -0.350755566 2.851710072] + +New linecode.3 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0889665 | 0.0306264 0.088205 | 0.0316143 0.0312137 0.0901946 ) +!!!~ xmatrix = (0.204877 | 0.0760312 0.20744 | 0.0855879 0.0935314 0.200783 ) +!!!~ cmatrix = (2.8965 | -0.22313 2.90301 | -0.481416 -0.679335 3.15896 ) + +~ rmatrix = [0.087405303 | 0.02907197 0.086666667 | 0.029924242 0.029545455 0.088371212] +~ xmatrix = [0.201723485 | 0.072897727 0.204166667 | 0.080227273 0.095018939 0.198522727] +~ cmatrix = [2.71134756 | -0.350755566 2.851710072 | -0.585011253 -0.920293787 3.004631862] + +New linecode.4 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0889665 | 0.0316143 0.0901946 | 0.0306264 0.0312137 0.088205 ) +!!!~ xmatrix = (0.204877 | 0.0855879 0.200783 | 0.0760312 0.0935314 0.20744 ) +!!!~ cmatrix = (2.8965 | -0.481416 3.15896 | -0.22313 -0.679335 2.90301 ) +~ rmatrix = [0.087405303 | 0.029924242 0.088371212 | 0.02907197 0.029545455 0.086666667] +~ xmatrix = [0.201723485 | 0.080227273 0.198522727 | 0.072897727 0.095018939 0.204166667] +~ cmatrix = [2.71134756 | 0.585011253 3.004631862 | -0.350755566 -0.920293787 2.851710072] + +New linecode.5 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0901946 | 0.0312137 0.088205 | 0.0316143 0.0306264 0.0889665 ) +!!!~ xmatrix = (0.200783 | 0.0935314 0.20744 | 0.0855879 0.0760312 0.204877 ) +!!!~ cmatrix = (3.15896 | -0.679335 2.90301 | -0.481416 -0.22313 2.8965 ) + +~ rmatrix = [0.088371212 | 0.029545455 0.086666667 | 0.029924242 0.02907197 0.087405303] +~ xmatrix = [0.198522727 | 0.095018939 0.204166667 | 0.080227273 0.072897727 0.201723485] +~ cmatrix = [3.004631862 | -0.920293787 2.851710072 | -0.585011253 -0.350755566 2.71134756] + +New linecode.6 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.088205 | 0.0306264 0.0889665 | 0.0312137 0.0316143 0.0901946 ) +!!!~ xmatrix = (0.20744 | 0.0760312 0.204877 | 0.0935314 0.0855879 0.200783 ) +!!!~ cmatrix = (2.90301 | -0.22313 2.8965 | -0.679335 -0.481416 3.15896 ) +~ rmatrix = [0.086666667 | 0.02907197 0.087405303 | 0.029545455 0.029924242 0.088371212] +~ xmatrix = [0.204166667 | 0.072897727 0.201723485 | 0.095018939 0.080227273 0.198522727] +~ cmatrix = [2.851710072 | -0.350755566 2.71134756 | -0.920293787 -0.585011253 3.004631862] +New linecode.7 nphases=2 BaseFreq=60 +!!!~ rmatrix = (0.088205 | 0.0306264 0.0889665 ) +!!!~ xmatrix = (0.20744 | 0.0760312 0.204877 ) +!!!~ cmatrix = (2.75692 | -0.326659 2.82313 ) +~ rmatrix = [0.086666667 | 0.02907197 0.087405303] +~ xmatrix = [0.204166667 | 0.072897727 0.201723485] +~ cmatrix = [2.569829596 | -0.52995137 2.597460011] +New linecode.8 nphases=2 BaseFreq=60 +!!!~ rmatrix = (0.088205 | 0.0306264 0.0889665 ) +!!!~ xmatrix = (0.20744 | 0.0760312 0.204877 ) +!!!~ cmatrix = (2.75692 | -0.326659 2.82313 ) +~ rmatrix = [0.086666667 | 0.02907197 0.087405303] +~ xmatrix = [0.204166667 | 0.072897727 0.201723485] +~ cmatrix = [2.569829596 | -0.52995137 2.597460011] +New linecode.9 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.254428 ) +!!!~ xmatrix = (0.259546 ) +!!!~ cmatrix = (2.50575 ) +~ rmatrix = [0.251742424] +~ xmatrix = [0.255208333] +~ cmatrix = [2.270366128] +New linecode.10 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.254428 ) +!!!~ xmatrix = (0.259546 ) +!!!~ cmatrix = (2.50575 ) +~ rmatrix = [0.251742424] +~ xmatrix = [0.255208333] +~ cmatrix = [2.270366128] +New linecode.11 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.254428 ) +!!!~ xmatrix = (0.259546 ) +!!!~ cmatrix = (2.50575 ) +~ rmatrix = [0.251742424] +~ xmatrix = [0.255208333] +~ cmatrix = [2.270366128] +New linecode.12 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.291814 | 0.101656 0.294012 | 0.096494 0.101656 0.291814 ) +!!!~ xmatrix = (0.141848 | 0.0517936 0.13483 | 0.0401881 0.0517936 0.141848 ) +!!!~ cmatrix = (53.4924 | 0 53.4924 | 0 0 53.4924 ) +~ rmatrix = [0.288049242 | 0.09844697 0.29032197 | 0.093257576 0.09844697 0.288049242] +~ xmatrix = [0.142443182 | 0.052556818 0.135643939 | 0.040852273 0.052556818 0.142443182] +~ cmatrix = [33.77150149 | 0 33.77150149 | 0 0 33.77150149] + +! These line codes are used in the 34-node test feeder + +New linecode.300 nphases=3 basefreq=60 ! ohms per 1000ft Corrected 11/30/05 +~ rmatrix = [0.253181818 | 0.039791667 0.250719697 | 0.040340909 0.039128788 0.251780303] !ABC ORDER +~ xmatrix = [0.252708333 | 0.109450758 0.256988636 | 0.094981061 0.086950758 0.255132576] +~ CMATRIX = [2.680150309 | -0.769281006 2.5610381 | -0.499507676 -0.312072984 2.455590387] +New linecode.301 nphases=3 basefreq=60 +~ rmatrix = [0.365530303 | 0.04407197 0.36282197 | 0.04467803 0.043333333 0.363996212] +~ xmatrix = [0.267329545 | 0.122007576 0.270473485 | 0.107784091 0.099204545 0.269109848] +~ cmatrix = [2.572492163 | -0.72160598 2.464381882 | -0.472329395 -0.298961096 2.368881119] +New linecode.302 nphases=1 basefreq=60 +~ rmatrix = (0.530208 ) +~ xmatrix = (0.281345 ) +~ cmatrix = (2.12257 ) +New linecode.303 nphases=1 basefreq=60 +~ rmatrix = (0.530208 ) +~ xmatrix = (0.281345 ) +~ cmatrix = (2.12257 ) +New linecode.304 nphases=1 basefreq=60 +~ rmatrix = (0.363958 ) +~ xmatrix = (0.269167 ) +~ cmatrix = (2.1922 ) + + +! This may be for the 4-node test feeder, but is not actually referenced. +! instead, the 4Bus*.dss files all use the wiredata and linegeometry inputs +! to calculate these matrices from physical data. + +New linecode.400 nphases=3 BaseFreq=60 +~ rmatrix = (0.088205 | 0.0312137 0.0901946 | 0.0306264 0.0316143 0.0889665 ) +~ xmatrix = (0.20744 | 0.0935314 0.200783 | 0.0760312 0.0855879 0.204877 ) +~ cmatrix = (2.90301 | -0.679335 3.15896 | -0.22313 -0.481416 2.8965 ) + +! These are for the 13-node test feeder + +New linecode.601 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0674673 | 0.0312137 0.0654777 | 0.0316143 0.0306264 0.0662392 ) +!!!~ xmatrix = (0.195204 | 0.0935314 0.201861 | 0.0855879 0.0760312 0.199298 ) +!!!~ cmatrix = (3.32591 | -0.743055 3.04217 | -0.525237 -0.238111 3.03116 ) +~ rmatrix = [0.065625 | 0.029545455 0.063920455 | 0.029924242 0.02907197 0.064659091] +~ xmatrix = [0.192784091 | 0.095018939 0.19844697 | 0.080227273 0.072897727 0.195984848] +~ cmatrix = [3.164838036 | -1.002632425 2.993981593 | -0.632736516 -0.372608713 2.832670203] +New linecode.602 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.144361 | 0.0316143 0.143133 | 0.0312137 0.0306264 0.142372 ) +!!!~ xmatrix = (0.226028 | 0.0855879 0.230122 | 0.0935314 0.0760312 0.232686 ) +!!!~ cmatrix = (3.01091 | -0.443561 2.77543 | -0.624494 -0.209615 2.77847 ) +~ rmatrix = [0.142537879 | 0.029924242 0.14157197 | 0.029545455 0.02907197 0.140833333] +~ xmatrix = [0.22375 | 0.080227273 0.226950758 | 0.095018939 0.072897727 0.229393939] +~ cmatrix = [2.863013423 | -0.543414918 2.602031589 | -0.8492585 -0.330962141 2.725162768] +New linecode.603 nphases=2 BaseFreq=60 +!!!~ rmatrix = (0.254472 | 0.0417943 0.253371 ) +!!!~ xmatrix = (0.259467 | 0.0912376 0.261431 ) +!!!~ cmatrix = (2.54676 | -0.28882 2.49502 ) +~ rmatrix = [0.251780303 | 0.039128788 0.250719697] +~ xmatrix = [0.255132576 | 0.086950758 0.256988636] +~ cmatrix = [2.366017603 | -0.452083836 2.343963508] +New linecode.604 nphases=2 BaseFreq=60 +!!!~ rmatrix = (0.253371 | 0.0417943 0.254472 ) +!!!~ xmatrix = (0.261431 | 0.0912376 0.259467 ) +!!!~ cmatrix = (2.49502 | -0.28882 2.54676 ) +~ rmatrix = [0.250719697 | 0.039128788 0.251780303] +~ xmatrix = [0.256988636 | 0.086950758 0.255132576] +~ cmatrix = [2.343963508 | -0.452083836 2.366017603] +New linecode.605 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.254428 ) +!!!~ xmatrix = (0.259546 ) +!!!~ cmatrix = (2.50575 ) +~ rmatrix = [0.251742424] +~ xmatrix = [0.255208333] +~ cmatrix = [2.270366128] +New linecode.606 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.152193 | 0.0611362 0.15035 | 0.0546992 0.0611362 0.152193 ) +!!!~ xmatrix = (0.0825685 | 0.00548281 0.0745027 | -0.00339824 0.00548281 0.0825685 ) +!!!~ cmatrix = (72.7203 | 0 72.7203 | 0 0 72.7203 ) +~ rmatrix = [0.151174242 | 0.060454545 0.149450758 | 0.053958333 0.060454545 0.151174242] +~ xmatrix = [0.084526515 | 0.006212121 0.076534091 | -0.002708333 0.006212121 0.084526515] +~ cmatrix = [48.67459408 | 0 48.67459408 | 0 0 48.67459408] +New linecode.607 nphases=1 BaseFreq=60 +!!!~ rmatrix = (0.255799 ) +!!!~ xmatrix = (0.092284 ) +!!!~ cmatrix = (50.7067 ) +~ rmatrix = [0.254261364] +~ xmatrix = [0.097045455] +~ cmatrix = [44.70661522] + +! These are for the 37-node test feeder, all underground + +New linecode.721 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0554906 | 0.0127467 0.0501597 | 0.00640446 0.0127467 0.0554906 ) +!!!~ xmatrix = (0.0372331 | -0.00704588 0.0358645 | -0.00796424 -0.00704588 0.0372331 ) +!!!~ cmatrix = (124.851 | 0 124.851 | 0 0 124.851 ) +~ rmatrix = [0.055416667 | 0.012746212 0.050113636 | 0.006382576 0.012746212 0.055416667] +~ xmatrix = [0.037367424 | -0.006969697 0.035984848 | -0.007897727 -0.006969697 0.037367424] +~ cmatrix = [80.27484728 | 0 80.27484728 | 0 0 80.27484728] +New linecode.722 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.0902251 | 0.0309584 0.0851482 | 0.0234946 0.0309584 0.0902251 ) +!!!~ xmatrix = (0.055991 | -0.00646552 0.0504025 | -0.0117669 -0.00646552 0.055991 ) +!!!~ cmatrix = (93.4896 | 0 93.4896 | 0 0 93.4896 ) +~ rmatrix = [0.089981061 | 0.030852273 0.085 | 0.023371212 0.030852273 0.089981061] +~ xmatrix = [0.056306818 | -0.006174242 0.050719697 | -0.011496212 -0.006174242 0.056306818] +~ cmatrix = [64.2184109 | 0 64.2184109 | 0 0 64.2184109] +New linecode.723 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.247572 | 0.0947678 0.249104 | 0.0893782 0.0947678 0.247572 ) +!!!~ xmatrix = (0.126339 | 0.0390337 0.118816 | 0.0279344 0.0390337 0.126339 ) +!!!~ cmatrix = (58.108 | 0 58.108 | 0 0 58.108 ) +~ rmatrix = [0.245 | 0.092253788 0.246628788 | 0.086837121 0.092253788 0.245] +~ xmatrix = [0.127140152 | 0.039981061 0.119810606 | 0.028806818 0.039981061 0.127140152] +~ cmatrix = [37.5977112 | 0 37.5977112 | 0 0 37.5977112] +New linecode.724 nphases=3 BaseFreq=60 +!!!~ rmatrix = (0.399883 | 0.101765 0.402011 | 0.0965199 0.101765 0.399883 ) +!!!~ xmatrix = (0.146325 | 0.0510963 0.139305 | 0.0395402 0.0510963 0.146325 ) +!!!~ cmatrix = (46.9685 | 0 46.9685 | 0 0 46.9685 ) +~ rmatrix = [0.396818182 | 0.098560606 0.399015152 | 0.093295455 0.098560606 0.396818182] +~ xmatrix = [0.146931818 | 0.051856061 0.140113636 | 0.040208333 0.051856061 0.146931818] +~ cmatrix = [30.26701029 | 0 30.26701029 | 0 0 30.26701029] From 1106acfcd400f53253d5e97e5f7da97107273c04 Mon Sep 17 00:00:00 2001 From: thuang Date: Wed, 12 Apr 2017 16:44:12 -0700 Subject: [PATCH 03/36] working on the feeder parser --- .../threePhase/basic/LineConfiguration.java | 42 ++++++- .../data_parser/OpenDSSDataParser.java | 10 ++ .../data_parser/OpenDSSLineCodeParser.java | 108 ++++++++++++++++++ .../dynamic/model/DynLoadModel1Phase.java | 4 +- 4 files changed, 161 insertions(+), 3 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java index 62c94cc..6171e31 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java @@ -6,13 +6,50 @@ public class LineConfiguration { enum InputType { Physical, ZYMatrix, LineCode} - + private String id = ""; + private int nphases = 1; + private int baseFreq = 60; + private InputType type =null; + + //TODO units private Complex3x3 zMtx = null; private Complex3x3 shuntYMtx = null; + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getNphases() { + return nphases; + } + + public void setNphases(int nphases) { + this.nphases = nphases; + } + + public int getBaseFreq() { + return baseFreq; + } + + public void setBaseFreq(int baseFreq) { + this.baseFreq = baseFreq; + } + + public InputType getType() { + return type; + } + + public void setType(InputType type) { + this.type = type; + } + public Complex3x3 getZ3x3Matrix() { return zMtx; } @@ -28,5 +65,8 @@ public Complex3x3 getShuntY3x3Matrix() { public void setShuntY3x3Matrix(Complex3x3 shuntYMtx) { this.shuntYMtx = shuntYMtx; } + + + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 966cdb5..67b203e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -9,4 +9,14 @@ public class OpenDSSDataParser { // Line configuration table protected Hashtable lineConfigTable = null; + public Hashtable getLineConfigTable() { + return lineConfigTable; + } + + public void setLineConfigTable(Hashtable lineConfigTable) { + this.lineConfigTable = lineConfigTable; + } + + + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java index add0bd5..ad6da13 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java @@ -1,8 +1,116 @@ package org.ipss.threePhase.data_parser; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +import org.ieee.odm.common.IFileReader; +import org.ieee.odm.common.ODMLogger; +import org.ieee.odm.common.ODMTextFileReader; +import org.ipss.threePhase.basic.LineConfiguration; + public class OpenDSSLineCodeParser { + private OpenDSSDataParser dataParser = null; + public OpenDSSLineCodeParser(OpenDSSDataParser parser){ + this.dataParser = parser; + } + + public boolean parseLineCode(String fileName) { + + + try { + final File file = new File(fileName); + final InputStream stream = new FileInputStream(file); + ODMLogger.getLogger().info("Parse input file and create the parser object, " + fileName); + + final BufferedReader din = new BufferedReader(new InputStreamReader(stream)); + IFileReader reader = new ODMTextFileReader(din); + + + String str; + int busCnt = 0; + String lineCodeId = ""; + int nphases = 0; + int baseFreq = 60; + + String[] lineData = null; + String code_id =""; + String nphaseStr =""; + String baseFreqStr =""; + LineConfiguration lineConfig = null; + + do { + str = din.readLine(); + if (str != null && !str.trim().equals("")) { + str = str.trim(); + if(str.startsWith("!")){ + //bypass the comment + } + else if(str.startsWith("New")){ + //tokenizer by blank + //StringTokenizer st = new StringTokenizer(str); + //while (st.hasMoreTokens()) { + + lineData = str.split("\\s"); + code_id =lineData[1]; + nphaseStr =lineData[2]; + baseFreqStr =lineData[3]; + + + // set lineCodeId, nphases and baseFreq + lineCodeId = code_id.substring(code_id.indexOf(".")+1); + + nphases = Integer.valueOf(nphaseStr.substring(nphaseStr.indexOf("=")+1)); + + baseFreq = Integer.valueOf(baseFreqStr.substring(baseFreqStr.indexOf("=")+1)); + + lineConfig = new LineConfiguration(); + lineConfig.setId(lineCodeId); + lineConfig.setNphases(nphases); + this.dataParser.getLineConfigTable().put(lineCodeId, lineConfig); + + + } + else if(str.contains("rmatrix")){ + // get the matrix data within the brackets, + + // if it has "|", tokenizer by "|", otherwise it is only one phase data, need to check + + } + else if(str.contains("xmatrix")){ + + // get the matrix data within the brackets, + + // if it has "|", tokenizer by "|", otherwise it is only one phase data, need to check + + + //since the Zmatrix will be created when processing the rmatrix, so here just update the imaginary part of the Zmatrix + + } + else if(str.contains("cmatrix")){ + + } + + + + } + } while(str != null); + + + return true; + } catch (Exception e) { + ODMLogger.getLogger().severe(e.toString()); + + e.printStackTrace(); + return false; + } + + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynLoadModel1Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynLoadModel1Phase.java index f2f2cf0..17b4a58 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynLoadModel1Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/DynLoadModel1Phase.java @@ -1,8 +1,7 @@ + package org.ipss.threePhase.dynamic.model; import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.ipss.threePhase.basic.Bus3Phase; import com.interpss.dstab.DStabBus; import com.interpss.dstab.dynLoad.DynLoadModel; @@ -137,3 +136,4 @@ public void setNortonCurInj(Complex compCurrent){ } + From 83af128f6c2e7f26d8d56ba9d1ef80ca8a5c7fa2 Mon Sep 17 00:00:00 2001 From: thuang Date: Fri, 14 Apr 2017 15:31:51 -0700 Subject: [PATCH 04/36] completed line code parser --- .../data_parser/OpenDSSDataParser.java | 9 +- .../data_parser/OpenDSSLineCodeParser.java | 184 +++++++++++++++++- 2 files changed, 189 insertions(+), 4 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 67b203e..2d05c13 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -10,6 +10,9 @@ public class OpenDSSDataParser { protected Hashtable lineConfigTable = null; public Hashtable getLineConfigTable() { + if(lineConfigTable == null){ + lineConfigTable = new Hashtable<>(); + } return lineConfigTable; } @@ -18,5 +21,9 @@ public void setLineConfigTable(Hashtable lineConfigTa } - + } + + + + diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java index ad6da13..fa8442e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java @@ -7,9 +7,11 @@ import java.io.InputStreamReader; import java.util.StringTokenizer; +import org.apache.commons.math3.complex.Complex; import org.ieee.odm.common.IFileReader; import org.ieee.odm.common.ODMLogger; import org.ieee.odm.common.ODMTextFileReader; +import org.interpss.numeric.datatype.Complex3x3; import org.ipss.threePhase.basic.LineConfiguration; public class OpenDSSLineCodeParser { @@ -44,7 +46,10 @@ public boolean parseLineCode(String fileName) { String nphaseStr =""; String baseFreqStr =""; LineConfiguration lineConfig = null; - + + double[] rMatrixData = new double[6]; + double[] xMatrixData = new double[6]; + double[] cMatrixData = new double[6]; do { str = din.readLine(); if (str != null && !str.trim().equals("")) { @@ -79,22 +84,195 @@ else if(str.startsWith("New")){ } else if(str.contains("rmatrix")){ // get the matrix data within the brackets, - + int startIdx = str.indexOf("["); + int lastIdx = str.indexOf("]"); // if it has "|", tokenizer by "|", otherwise it is only one phase data, need to check - + String dataStr = str.substring(startIdx+1, lastIdx).trim(); + String[] rDataStr = null; + + if (dataStr.contains("|")){ + rDataStr = dataStr.split("|"); + + int idx = 0; + for(int i = 0; i< rDataStr.length;i++){ + if(i==0){ + xMatrixData[idx] = Double.valueOf(rDataStr[i]); + idx +=1; + } + else if(i==1){ + String[] xDataStr2 = rDataStr[i].split("\\s"); + for(int j =0; j + String dataStr = str.substring(startIdx+1, lastIdx).trim(); + + String[] xDataStr = null; + if (dataStr.contains("|")){ + xDataStr = dataStr.split("|"); + + int idx = 0; + for(int i = 0; i< xDataStr.length;i++){ + if(i==0){ + xMatrixData[idx] = Double.valueOf(xDataStr[i]); + idx +=1; + } + else if(i==1){ + String[] xDataStr2 = xDataStr[i].split("\\s"); + for(int j =0; j=1){ + zMatrix.aa = new Complex (rMatrixData[0], xMatrixData[0]); + } + if(nphases>=2){ + + zMatrix.ab = new Complex (rMatrixData[1], xMatrixData[1]); + zMatrix.ba = new Complex (rMatrixData[1], xMatrixData[1]); + zMatrix.bb = new Complex (rMatrixData[2], xMatrixData[2]); + + } + if(nphases==3){ + zMatrix.ac = new Complex (rMatrixData[3], xMatrixData[3]); + zMatrix.ca = new Complex (rMatrixData[3], xMatrixData[3]); + + zMatrix.bc = new Complex (rMatrixData[4], xMatrixData[4]); + zMatrix.cb = new Complex (rMatrixData[4], xMatrixData[4]); + + zMatrix.cc = new Complex (rMatrixData[5], xMatrixData[5]); + + } + else if(nphases>3){ + throw new Exception("nphases > 3 not supported yet"); + } + + lineConfig.setZ3x3Matrix(zMatrix); } else if(str.contains("cmatrix")){ +// get the matrix data within the brackets, + + int startIdx = str.indexOf("["); + int lastIdx = str.indexOf("]"); + // if it has "|", tokenizer by "|", otherwise it is only one phase data, need to check + String dataStr = str.substring(startIdx+1, lastIdx).trim(); + + String[] cDataStr = null; + if (dataStr.contains("|")){ + cDataStr = dataStr.split("|"); + + int idx = 0; + for(int i = 0; i< cDataStr.length;i++){ + if(i==0){ + cMatrixData[idx] = Double.valueOf(cDataStr[i]); + idx +=1; + } + else if(i==1){ + String[] cDataStr2 = cDataStr[i].split("\\s"); + for(int j =0; j=1){ + yMatrix.aa = new Complex (0.0, cMatrixData[0]); + } + if(nphases>=2){ + + yMatrix.ab = new Complex (0.0, cMatrixData[1]); + yMatrix.ba = new Complex (0.0, xMatrixData[1]); + yMatrix.bb = new Complex (0.0, xMatrixData[2]); + + } + if(nphases==3){ + yMatrix.ac = new Complex (0.0, xMatrixData[3]); + yMatrix.ca = new Complex (0.0, xMatrixData[3]); + + yMatrix.bc = new Complex (0.0, xMatrixData[4]); + yMatrix.cb = new Complex (0.0, xMatrixData[4]); + + yMatrix.cc = new Complex (0.0, xMatrixData[5]); + + } + else if(nphases>3){ + throw new Exception("nphases > 3 not supported yet"); + } + + lineConfig.setShuntY3x3Matrix(yMatrix); + } From 6e942f8fafda4246e39b378339008bf2a8de62d3 Mon Sep 17 00:00:00 2001 From: thuang Date: Fri, 14 Apr 2017 15:47:36 -0700 Subject: [PATCH 05/36] Start working on the line parser --- .../threePhase/data_parser/OpenDSSLineCodeParser.java | 6 +++++- .../ipss/threePhase/data_parser/OpenDSSLineParser.java | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java index fa8442e..58c1471 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java @@ -274,10 +274,14 @@ else if(nphases>3){ lineConfig.setShuntY3x3Matrix(yMatrix); } - + else if( str.contains("units")){ + //TODO + } } + + } while(str != null); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java new file mode 100644 index 0000000..c6a6356 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -0,0 +1,10 @@ +package org.ipss.threePhase.data_parser; + +public class OpenDSSLineParser { + +private OpenDSSDataParser dataParser = null; + + public OpenDSSLineParser(OpenDSSDataParser parser){ + this.dataParser = parser; + } +} From b236fe218987496f583f0ccd86c03257cf1d7702 Mon Sep 17 00:00:00 2001 From: thuang Date: Fri, 21 Apr 2017 11:55:45 -0700 Subject: [PATCH 06/36] completed line code parser --- .../threePhase/basic/LineConfiguration.java | 158 +++++++++-------- .../data_parser/OpenDSSCapacitorParser.java | 11 ++ .../data_parser/OpenDSSDataParser.java | 70 +++++++- .../data_parser/OpenDSSLineCodeParser.java | 83 ++++++--- .../data_parser/OpenDSSLineParser.java | 166 +++++++++++++++++- .../data_parser/OpenDSSTransformerParser.java | 11 ++ .../test/TestOpenDSSDataParser.java | 88 ++++++++++ 7 files changed, 484 insertions(+), 103 deletions(-) create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java index 6171e31..e2d0b39 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java @@ -1,72 +1,86 @@ -package org.ipss.threePhase.basic; - -import org.interpss.numeric.datatype.Complex3x3; - -public class LineConfiguration { - - enum InputType { Physical, ZYMatrix, LineCode} - - private String id = ""; - private int nphases = 1; - private int baseFreq = 60; - private InputType type =null; - - //TODO units - - private Complex3x3 zMtx = null; - - private Complex3x3 shuntYMtx = null; - - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public int getNphases() { - return nphases; - } - - public void setNphases(int nphases) { - this.nphases = nphases; - } - - public int getBaseFreq() { - return baseFreq; - } - - public void setBaseFreq(int baseFreq) { - this.baseFreq = baseFreq; - } - - public InputType getType() { - return type; - } - - public void setType(InputType type) { - this.type = type; - } - - public Complex3x3 getZ3x3Matrix() { - return zMtx; - } - - public void setZ3x3Matrix(Complex3x3 zMtx) { - this.zMtx = zMtx; - } - - public Complex3x3 getShuntY3x3Matrix() { - return shuntYMtx; - } - - public void setShuntY3x3Matrix(Complex3x3 shuntYMtx) { - this.shuntYMtx = shuntYMtx; - } - - - - -} +package org.ipss.threePhase.basic; + +import org.interpss.numeric.datatype.Complex3x3; + +public class LineConfiguration { + + enum InputType { Physical, ZYMatrix, LineCode} + + private String id = ""; + private int nphases = 1; + private int baseFreq = 60; + private InputType type =null; + + //TODO units + + private Complex3x3 zMtx = null; + + private Complex3x3 shuntYMtx = null; + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getNphases() { + return nphases; + } + + public void setNphases(int nphases) { + this.nphases = nphases; + } + + public int getBaseFreq() { + return baseFreq; + } + + public void setBaseFreq(int baseFreq) { + this.baseFreq = baseFreq; + } + + public InputType getType() { + return type; + } + + public void setType(InputType type) { + this.type = type; + } + + public Complex3x3 getZ3x3Matrix() { + return zMtx; + } + + public void setZ3x3Matrix(Complex3x3 zMtx) { + this.zMtx = zMtx; + } + + public Complex3x3 getShuntY3x3Matrix() { + return shuntYMtx; + } + + public void setShuntY3x3Matrix(Complex3x3 shuntYMtx) { + this.shuntYMtx = shuntYMtx; + } + + + public String toString(){ + StringBuffer sb = new StringBuffer(); + sb.append("Line Configuration:\n"); + sb.append("Id: "+id+"\n"); + sb.append("InputType: "+type+"\n"); + sb.append("nphases: "+nphases+"\n"); + sb.append("baseFreq: "+baseFreq+"\n"); + sb.append("zmatrix: "+this.zMtx.toString()+"\n"); + sb.append("ymatrix: "+ (this.shuntYMtx==null? "":this.shuntYMtx.toString())+"\n"); + + return sb.toString(); + } + + + + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java new file mode 100644 index 0000000..c5d3d02 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java @@ -0,0 +1,11 @@ +package org.ipss.threePhase.data_parser; + +public class OpenDSSCapacitorParser { + + private OpenDSSDataParser dataParser = null; + + public OpenDSSCapacitorParser(OpenDSSDataParser parser){ + this.dataParser = parser; + } + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 2d05c13..7fc8898 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -3,12 +3,33 @@ import java.util.Hashtable; import org.ipss.threePhase.basic.LineConfiguration; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.util.ThreePhaseObjectFactory; + +import com.interpss.core.net.NetworkType; public class OpenDSSDataParser { // Line configuration table protected Hashtable lineConfigTable = null; - + + protected DStabNetwork3Phase distNet = null; + protected OpenDSSLineCodeParser lineCodeParser = null; + protected OpenDSSLineParser lineParser = null; + protected OpenDSSLoadParser loadParser = null; + protected OpenDSSCapacitorParser capParser = null; + protected OpenDSSRegulatorParser regulatorParser = null; + + public OpenDSSDataParser(){ + if(this.distNet == null){ + this.distNet = ThreePhaseObjectFactory.create3PhaseDStabNetwork(); + this.distNet.setNetworkType(NetworkType.DISTRIBUTION); + } + + this.lineCodeParser = new OpenDSSLineCodeParser (this); + + } + public Hashtable getLineConfigTable() { if(lineConfigTable == null){ lineConfigTable = new Hashtable<>(); @@ -20,7 +41,54 @@ public void setLineConfigTable(Hashtable lineConfigTa this.lineConfigTable = lineConfigTable; } + public DStabNetwork3Phase getDistNetwork(){ + if(this.distNet == null){ + this.distNet = ThreePhaseObjectFactory.create3PhaseDStabNetwork(); + this.distNet.setNetworkType(NetworkType.DISTRIBUTION); + } + return this.distNet; + } + + public boolean parseFeederData(String lineCodeFile, String feederFile, String loadFile, String regulatorFile){ + + boolean no_error = true; + //TODO parse the linecode,if any + no_error=this.lineCodeParser.parseLineCode(lineCodeFile); + + //parse the master file, first create an network object as well as the sourceBus + + //parse the lines, transformers, regulators, loads and capacitors + + + boolean initFlag=initNetwork(); + + no_error=no_error&initFlag; + + return no_error; + } + + + public boolean initNetwork(){ + boolean no_error = initBusBasekV() & convertBranchZYMatrixToPU(); + return no_error; + } + private boolean initBusBasekV(){ + boolean no_error = true; + + //TODO + + return no_error; + } + + private boolean convertBranchZYMatrixToPU(){ + boolean no_error = true; + + //TODO + + return no_error; + } + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java index 58c1471..e3ae1c5 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java @@ -62,7 +62,7 @@ else if(str.startsWith("New")){ //StringTokenizer st = new StringTokenizer(str); //while (st.hasMoreTokens()) { - lineData = str.split("\\s"); + lineData = str.split("\\s+"); code_id =lineData[1]; nphaseStr =lineData[2]; baseFreqStr =lineData[3]; @@ -86,30 +86,38 @@ else if(str.contains("rmatrix")){ // get the matrix data within the brackets, int startIdx = str.indexOf("["); int lastIdx = str.indexOf("]"); + if( startIdx <0 ){ + startIdx= str.indexOf("("); + if(startIdx<0){ + throw new Error("line code format error: "+ str); + } + else + lastIdx=str.indexOf(")"); + } // if it has "|", tokenizer by "|", otherwise it is only one phase data, need to check String dataStr = str.substring(startIdx+1, lastIdx).trim(); String[] rDataStr = null; if (dataStr.contains("|")){ - rDataStr = dataStr.split("|"); + rDataStr = dataStr.split("\\|"); int idx = 0; for(int i = 0; i< rDataStr.length;i++){ if(i==0){ - xMatrixData[idx] = Double.valueOf(rDataStr[i]); + rMatrixData[idx] = Double.valueOf(rDataStr[i]); idx +=1; } else if(i==1){ - String[] xDataStr2 = rDataStr[i].split("\\s"); - for(int j =0; j String dataStr = str.substring(startIdx+1, lastIdx).trim(); String[] xDataStr = null; if (dataStr.contains("|")){ - xDataStr = dataStr.split("|"); + xDataStr = dataStr.split("\\|"); int idx = 0; for(int i = 0; i< xDataStr.length;i++){ @@ -142,14 +158,14 @@ else if(str.contains("xmatrix")){ idx +=1; } else if(i==1){ - String[] xDataStr2 = xDataStr[i].split("\\s"); + String[] xDataStr2 = xDataStr[i].trim().split("\\s+"); for(int j =0; j String dataStr = str.substring(startIdx+1, lastIdx).trim(); String[] cDataStr = null; if (dataStr.contains("|")){ - cDataStr = dataStr.split("|"); + cDataStr = dataStr.split("\\|"); int idx = 0; for(int i = 0; i< cDataStr.length;i++){ @@ -218,14 +243,14 @@ else if(str.contains("cmatrix")){ idx +=1; } else if(i==1){ - String[] cDataStr2 = cDataStr[i].split("\\s"); + String[] cDataStr2 = cDataStr[i].trim().split("\\s+"); for(int j =0; j=2){ yMatrix.ab = new Complex (0.0, cMatrixData[1]); - yMatrix.ba = new Complex (0.0, xMatrixData[1]); - yMatrix.bb = new Complex (0.0, xMatrixData[2]); + yMatrix.ba = new Complex (0.0, cMatrixData[1]); + yMatrix.bb = new Complex (0.0, cMatrixData[2]); } if(nphases==3){ - yMatrix.ac = new Complex (0.0, xMatrixData[3]); - yMatrix.ca = new Complex (0.0, xMatrixData[3]); + yMatrix.ac = new Complex (0.0, cMatrixData[3]); + yMatrix.ca = new Complex (0.0, cMatrixData[3]); - yMatrix.bc = new Complex (0.0, xMatrixData[4]); - yMatrix.cb = new Complex (0.0, xMatrixData[4]); + yMatrix.bc = new Complex (0.0, cMatrixData[4]); + yMatrix.cb = new Complex (0.0, cMatrixData[4]); - yMatrix.cc = new Complex (0.0, xMatrixData[5]); + yMatrix.cc = new Complex (0.0, cMatrixData[5]); } else if(nphases>3){ diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index c6a6356..8e7a5e1 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -1,10 +1,174 @@ package org.ipss.threePhase.data_parser; +import org.apache.commons.math3.complex.Complex; +import org.ieee.odm.model.IODMModelParser; +import org.interpss.numeric.datatype.Complex3x3; +import org.ipss.threePhase.basic.Branch3Phase; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.LineConfiguration; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.util.ThreePhaseObjectFactory; + +import com.interpss.common.exp.InterpssException; +import com.interpss.core.aclf.AclfBranchCode; + public class OpenDSSLineParser { -private OpenDSSDataParser dataParser = null; + private OpenDSSDataParser dataParser = null; public OpenDSSLineParser(OpenDSSDataParser parser){ this.dataParser = parser; } + + public void parseLineString(String lineStr) throws InterpssException{ + + final String DOT = "."; + + String lineId = ""; + String fromBusId = ""; + String fromBusPhases ="1.2.3"; // by default;; + String toBusId = ""; + String toBusPhases = "1.2.3"; // by default; + String lineCodeId = ""; + double lineLength = 0; + int phaseNum = 3; // 3 phases by default + + String fromBusStr = ""; + String toBusStr = ""; + + DStabNetwork3Phase distNet = this.dataParser.getDistNetwork(); + + Bus3Phase fromBus = null, toBus = null; + + + int lineIdIdx = 1, phaseIdx = 2, fromBusIdx = 3, toBusIdx = 4, lineCodeIdx = 5, lengthIdx = 6; + + if (!lineStr.contains("Phases=")){ + phaseIdx = -1; + fromBusIdx =2; + toBusIdx = 3; + lineCodeIdx = 4; + lengthIdx = 5; + + } + String[] lineStrAry = lineStr.split("\\s+"); + + if(phaseIdx>0) + phaseNum = Integer.valueOf(lineStrAry[phaseIdx].substring(7)); + + lineId = lineStrAry[lineIdIdx].substring(4); + fromBusStr = lineStrAry[fromBusIdx].substring(4); + toBusStr = lineStrAry[toBusIdx].substring(4); + lineCodeId = lineStrAry[lineCodeIdx].substring(9); + lineLength = Double.valueOf(lineStrAry[lengthIdx].substring(7)); + + //busId is the substring before the first DOT + //phases info is defined in the substring after the first DOT + if(fromBusStr.contains(DOT)){ + fromBusId = fromBusStr.substring(0, fromBusStr.indexOf(DOT)); + fromBusPhases = fromBusId = fromBusStr.substring( fromBusStr.indexOf(DOT)+1); + }else{ + fromBusId = fromBusStr; + + } + + if(toBusStr.contains(DOT)){ + toBusId = toBusStr.substring(0, toBusStr.indexOf(DOT)); + toBusPhases = toBusId = toBusStr.substring( toBusStr.indexOf(DOT)+1); + }else{ + fromBusId = toBusStr; + + } + + + + if(distNet.getBus(fromBusId)==null) + fromBus = ThreePhaseObjectFactory.create3PDStabBus(fromBusId, distNet); + + if(distNet.getBus(toBusId)==null) + toBus = ThreePhaseObjectFactory.create3PDStabBus(toBusId, distNet); + + Branch3Phase line = ThreePhaseObjectFactory.create3PBranch(fromBusId, toBusId, "1", distNet); + line.setBranchCode(AclfBranchCode.LINE); + // the format of Zmatrix need to be consistent with the number of phases and the phases in use. + + LineConfiguration config = this.dataParser.getLineConfigTable().get(lineCodeId); + Complex3x3 zabc = null; + Complex3x3 yshuntabc = new Complex3x3(); + + if(config!=null){ + zabc = config.getZ3x3Matrix(); + + if(!fromBusPhases.equals(toBusPhases)){ + throw new Error("different phase arrangements on both terminals not support yet, from: "+fromBusPhases+ ", to: "+toBusPhases); + } + if(phaseNum==3){ + // no change is needed + } + else if(phaseNum==2){ + if(fromBusPhases.equals("1.2")){ + //no change is needed + } + else if (fromBusPhases.equals("1.3")){ + //no change is needed + zabc.ac = zabc.ab; + zabc.ab = new Complex(0.0); + + zabc.ca = zabc.ba; + zabc.ba = new Complex(0.0); + + zabc.cc = zabc.bb; + zabc.bb = new Complex(0.0); + } + else if (fromBusPhases.equals("2.3")){ + + zabc.cc = zabc.bb; + + zabc.bb = zabc.aa; + zabc.aa = new Complex(0.0); + + zabc.bc = zabc.ab; + zabc.ab = new Complex(0.0); + + zabc.cb = zabc.ba; + zabc.ba = new Complex(0.0); + + } + else{ + throw new Error("phase arrangement not support yet : "+fromBusPhases); + } + } + else if(phaseNum==1){ + // by default, phase = "1" + + if(fromBusPhases.equals("2")){ + zabc.bb = zabc.aa; + zabc.aa = new Complex(0.0); + } + else if(fromBusPhases.equals("3")){ + zabc.cc = zabc.aa; + zabc.aa = new Complex(0.0); + } + else{ + throw new Error("phase arrangement not support yet : "+fromBusPhases); + } + } + else{ + throw new Error("phase number must be 1, 2 or 3"); + } + + } + else{ + throw new Error("LineConfiguration definition not found, LineCodeId:"+lineCodeId); + } + + line.setZabc(zabc); + + //TODO ShuntY is not considered for this initial implementation + //line.setFromShuntYabc(yshuntabc.multiply(0.5)); + //line.setToShuntYabc(yshuntabc.multiply(0.5)); + + } + + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java new file mode 100644 index 0000000..1a187ea --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java @@ -0,0 +1,11 @@ +package org.ipss.threePhase.data_parser; + +public class OpenDSSTransformerParser { + + private OpenDSSDataParser dataParser = null; + + public OpenDSSTransformerParser(OpenDSSDataParser parser){ + this.dataParser = parser; + } + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java new file mode 100644 index 0000000..9b5d2b0 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -0,0 +1,88 @@ +package org.ipss.threePhase.test; + +import static org.junit.Assert.assertTrue; + +import java.util.Map.Entry; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x3; +import org.ipss.threePhase.basic.LineConfiguration; +import org.ipss.threePhase.data_parser.OpenDSSDataParser; +import org.junit.Test; + +public class TestOpenDSSDataParser { + + @Test + public void test_LineCodeParser(){ + OpenDSSDataParser parser = new OpenDSSDataParser(); + parser.parseFeederData("testData\\feeder\\IEEE123\\IEEELineCodes.DSS", "", "", ""); + + System.out.print("line code table:\n" ); + + for(Entry configSet: parser.getLineConfigTable().entrySet()){ + System.out.println(configSet.getKey()+": " +configSet.getValue().toString()); + } + + /* + * New linecode.1 nphases=3 BaseFreq=60 + ~ rmatrix = [0.086666667 | 0.029545455 0.088371212 | 0.02907197 0.029924242 0.087405303] + ~ xmatrix = [0.204166667 | 0.095018939 0.198522727 | 0.072897727 0.080227273 0.201723485] + ~ cmatrix = [2.851710072 | -0.920293787 3.004631862 | -0.350755566 -0.585011253 2.71134756] + */ + LineConfiguration linecode_1 = parser.getLineConfigTable().get("1"); + + assertTrue(linecode_1.getNphases()==3); + Complex3x3 zabc1 = new Complex3x3(new Complex[][]{ + {new Complex(0.086666667, 0.204166667), new Complex(0.029545455, 0.095018939), new Complex(0.02907197, 0.072897727)}, + {new Complex(0.029545455, 0.095018939), new Complex(0.088371212, 0.198522727), new Complex(0.029924242, 0.080227273)}, + {new Complex(0.02907197, 0.072897727), new Complex(0.029924242, 0.080227273) , new Complex(0.087405303, 0.201723485)}}); + + Complex3x3 yabc1 = new Complex3x3(new Complex[][]{ + {new Complex(0.0, 2.851710072), new Complex(0.0, -0.920293787), new Complex(0.0, -0.350755566)}, + {new Complex(0.0, -0.920293787), new Complex(0.0, 3.004631862), new Complex(0.0, -0.585011253)}, + {new Complex(0.0, -0.350755566), new Complex(0.0, -0.585011253) , new Complex(0.0, 2.71134756)}}); + + assertTrue(linecode_1.getZ3x3Matrix().subtract(zabc1).absMax()<1.0E-6); + assertTrue(linecode_1.getShuntY3x3Matrix().subtract(yabc1).absMax()<1.0E-6); + + + /* + * New linecode.7 nphases=2 BaseFreq=60 + ~ rmatrix = [0.086666667 | 0.02907197 0.087405303] + ~ xmatrix = [0.204166667 | 0.072897727 0.201723485] + ~ cmatrix = [2.569829596 | -0.52995137 2.597460011] + */ + + LineConfiguration linecode_7 = parser.getLineConfigTable().get("7"); + + assertTrue(linecode_7.getNphases()==2); + Complex3x3 zabc7 = new Complex3x3(new Complex[][]{ + {new Complex(0.086666667, 0.204166667), new Complex(0.02907197, 0.072897727), new Complex(0.)}, + {new Complex(0.02907197, 0.072897727), new Complex(0.087405303, 0.201723485), new Complex(0.)}, + {new Complex(0.0), new Complex(0.0) , new Complex(0.)}}); + + assertTrue(linecode_7.getZ3x3Matrix().subtract(zabc7).absMax()<1.0E-6); + + /* + * New linecode.9 nphases=1 BaseFreq=60 + ~ rmatrix = [0.251742424] + ~ xmatrix = [0.255208333] + ~ cmatrix = [2.270366128] + */ + + LineConfiguration linecode_9 = parser.getLineConfigTable().get("9"); + + assertTrue(linecode_9.getNphases()==1); + Complex3x3 zabc9 = new Complex3x3(new Complex[][]{ + {new Complex(0.251742424, 0.255208333), new Complex(0.0), new Complex(0.)}, + {new Complex(0.0), new Complex(0.0), new Complex(0.)}, + {new Complex(0.0), new Complex(0.0) , new Complex(0.)}}); + + Complex3x3 yabc9 = new Complex3x3(new Complex(0,2.270366128), new Complex(0.), new Complex(0.)); + + assertTrue(linecode_9.getZ3x3Matrix().subtract(zabc9).absMax()<1.0E-6); + + assertTrue(linecode_9.getShuntY3x3Matrix().subtract(yabc9).absMax()<1.0E-6); + } + +} From 93c3bdc547d68800876586d0af28d5eaa8b7cea5 Mon Sep 17 00:00:00 2001 From: thuang Date: Fri, 21 Apr 2017 15:43:56 -0700 Subject: [PATCH 07/36] continue to work on data parser --- .../ipss/threePhase/data_parser/OpenDSSDataParser.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 7fc8898..89306a7 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -54,9 +54,16 @@ public boolean parseFeederData(String lineCodeFile, String feederFile, String lo boolean no_error = true; //TODO parse the linecode,if any - no_error=this.lineCodeParser.parseLineCode(lineCodeFile); + if(!lineCodeFile.equals("")) + no_error=this.lineCodeParser.parseLineCode(lineCodeFile); //parse the master file, first create an network object as well as the sourceBus + if(!feederFile.equals("")){ + //TODO + //check if start with (new) || NEW + } + + //parse the lines, transformers, regulators, loads and capacitors From 8aacdbb742a5a0ac52be64b51f7c9cb672a0ba10 Mon Sep 17 00:00:00 2001 From: thuang Date: Fri, 21 Apr 2017 23:45:38 -0700 Subject: [PATCH 08/36] opendss line data parser --- .../data_parser/OpenDSSLineParser.java | 248 ++++++++++++++++-- 1 file changed, 231 insertions(+), 17 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index 8e7a5e1..052a3d2 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -20,9 +20,225 @@ public OpenDSSLineParser(OpenDSSDataParser parser){ this.dataParser = parser; } - public void parseLineString(String lineStr) throws InterpssException{ + public boolean parseLineData(String lineStr) throws InterpssException{ + boolean no_error = true; + + final String DOT = "."; - final String DOT = "."; + String lineId = ""; + String fromBusId = ""; + String fromBusPhases ="1.2.3"; // by default;; + String toBusId = ""; + String toBusPhases = "1.2.3"; // by default; + String lineCodeId = ""; + double lineLength = 0; + int phaseNum = 3; // 3 phases by default + + String fromBusStr = ""; + String toBusStr = ""; + + DStabNetwork3Phase distNet = this.dataParser.getDistNetwork(); + + Bus3Phase fromBus = null, toBus = null; + + int phaseIdx = -1, lineCodeIdx = -1; + + double r1= 0,r0 = 0, x1 = 0, x0 = 0, c1 = 0, c0 = 0; + + + String[] lineStrAry = lineStr.split("\\s+"); + + for(int i = 0;i= 0 & x1>0){ + + Complex z1 = new Complex(r1,x1); + Complex z0 = new Complex(r0,x0); + + zabc = new Complex3x3(z1,z1,z0); + } + else{ + throw new Error("Error in Line Z, Y parameter raw data: "+lineStr); + } + + } + + if(!fromBusPhases.equals(toBusPhases)){ + throw new Error("different phase arrangements on both terminals not support yet, from: "+fromBusPhases+ ", to: "+toBusPhases); + } + if(phaseNum==3){ + // no change is needed + } + else if(phaseNum==2){ + if(fromBusPhases.equals("1.2")){ + //no change is needed + } + else if (fromBusPhases.equals("1.3")){ + //no change is needed + zabc.ac = zabc.ab; + zabc.ab = new Complex(0.0); + + zabc.ca = zabc.ba; + zabc.ba = new Complex(0.0); + + zabc.cc = zabc.bb; + zabc.bb = new Complex(0.0); + } + else if (fromBusPhases.equals("2.3")){ + + zabc.cc = zabc.bb; + + zabc.bb = zabc.aa; + zabc.aa = new Complex(0.0); + + zabc.bc = zabc.ab; + zabc.ab = new Complex(0.0); + + zabc.cb = zabc.ba; + zabc.ba = new Complex(0.0); + + } + else{ + throw new Error("phase arrangement not support yet : "+fromBusPhases); + } + } + else if(phaseNum==1){ + // by default, phase = "1" + + if(fromBusPhases.equals("2")){ + zabc.bb = zabc.aa; + zabc.aa = new Complex(0.0); + } + else if(fromBusPhases.equals("3")){ + zabc.cc = zabc.aa; + zabc.aa = new Complex(0.0); + } + else{ + throw new Error("phase arrangement not support yet : "+fromBusPhases); + } + } + else{ + throw new Error("phase number must be 1, 2 or 3"); + } + + + + + + // line parameters defined by raw input data + + + if(distNet.getBus(fromBusId)==null) + fromBus = ThreePhaseObjectFactory.create3PDStabBus(fromBusId, distNet); + + if(distNet.getBus(toBusId)==null) + toBus = ThreePhaseObjectFactory.create3PDStabBus(toBusId, distNet); + + Branch3Phase line = ThreePhaseObjectFactory.create3PBranch(fromBusId, toBusId, "1", distNet); + line.setBranchCode(AclfBranchCode.LINE); + // the format of Zmatrix need to be consistent with the number of phases and the phases in use. + + + + line.setZabc(zabc); + + //TODO ShuntY is not considered for this initial implementation + //line.setFromShuntYabc(yshuntabc.multiply(0.5)); + //line.setToShuntYabc(yshuntabc.multiply(0.5)); + + return no_error; + + } + + private boolean parseLineDataWithoutLineCode(String lineStr) throws InterpssException{ + boolean no_error = true; + + final String DOT = "."; String lineId = ""; String fromBusId = ""; @@ -80,18 +296,6 @@ public void parseLineString(String lineStr) throws InterpssException{ } - - - if(distNet.getBus(fromBusId)==null) - fromBus = ThreePhaseObjectFactory.create3PDStabBus(fromBusId, distNet); - - if(distNet.getBus(toBusId)==null) - toBus = ThreePhaseObjectFactory.create3PDStabBus(toBusId, distNet); - - Branch3Phase line = ThreePhaseObjectFactory.create3PBranch(fromBusId, toBusId, "1", distNet); - line.setBranchCode(AclfBranchCode.LINE); - // the format of Zmatrix need to be consistent with the number of phases and the phases in use. - LineConfiguration config = this.dataParser.getLineConfigTable().get(lineCodeId); Complex3x3 zabc = null; Complex3x3 yshuntabc = new Complex3x3(); @@ -162,12 +366,22 @@ else if(fromBusPhases.equals("3")){ throw new Error("LineConfiguration definition not found, LineCodeId:"+lineCodeId); } + + if(distNet.getBus(fromBusId)==null) + fromBus = ThreePhaseObjectFactory.create3PDStabBus(fromBusId, distNet); + + if(distNet.getBus(toBusId)==null) + toBus = ThreePhaseObjectFactory.create3PDStabBus(toBusId, distNet); + + Branch3Phase line = ThreePhaseObjectFactory.create3PBranch(fromBusId, toBusId, "1", distNet); + line.setBranchCode(AclfBranchCode.LINE); + // the format of Zmatrix need to be consistent with the number of phases and the phases in use. + + line.setZabc(zabc); - //TODO ShuntY is not considered for this initial implementation - //line.setFromShuntYabc(yshuntabc.multiply(0.5)); - //line.setToShuntYabc(yshuntabc.multiply(0.5)); + return no_error; } From d25a98855bc80c6eaa98d681a3eff3d917c8447d Mon Sep 17 00:00:00 2001 From: thuang Date: Sat, 22 Apr 2017 19:02:39 -0700 Subject: [PATCH 09/36] work on transformer data parser --- .../data_parser/OpenDSSLineCodeParser.java | 20 ++- .../data_parser/OpenDSSLineParser.java | 26 ++-- .../data_parser/OpenDSSLoadParser.java | 23 ++- .../data_parser/OpenDSSTransformerParser.java | 138 ++++++++++++++++++ 4 files changed, 188 insertions(+), 19 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java index e3ae1c5..f8eebb5 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java @@ -54,7 +54,7 @@ public boolean parseLineCode(String fileName) { str = din.readLine(); if (str != null && !str.trim().equals("")) { str = str.trim(); - if(str.startsWith("!")){ + if(str.startsWith("!") || str.startsWith("//")){ //bypass the comment } else if(str.startsWith("New")){ @@ -82,6 +82,11 @@ else if(str.startsWith("New")){ } + + /* + * rmatrix Resistance matrix, lower triangle, ohms per unit length. + */ + else if(str.contains("rmatrix")){ // get the matrix data within the brackets, int startIdx = str.indexOf("["); @@ -97,7 +102,9 @@ else if(str.contains("rmatrix")){ // if it has "|", tokenizer by "|", otherwise it is only one phase data, need to check String dataStr = str.substring(startIdx+1, lastIdx).trim(); String[] rDataStr = null; - + + // Symmetrical matrices can be entered in a lower triangle form, for example + // Xmatrix=[ 1.2 | .3 1.2 | .3 .3 1.2 ] ! (3x3 matrix lower triangle) if (dataStr.contains("|")){ rDataStr = dataStr.split("\\|"); @@ -130,6 +137,9 @@ else if(i==2){ rMatrixData[0] = Double.valueOf(dataStr); } } + /* + * xmatrix: Reactance matrix, lower triangle, ohms per unit length. + */ else if(str.contains("xmatrix")){ // get the matrix data within the brackets, @@ -214,6 +224,12 @@ else if(nphases>3){ lineConfig.setZ3x3Matrix(zMatrix); } + + /* + * + * Nodal Capacitance matrix, lower triangle, nf per unit length.Order of the matrix is the number of phases. May be used to specify the shunt capacitance of any line configuration + */ + else if(str.contains("cmatrix")){ // get the matrix data within the brackets, diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index 052a3d2..138f76b 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -43,6 +43,14 @@ public boolean parseLineData(String lineStr) throws InterpssException{ int phaseIdx = -1, lineCodeIdx = -1; + /* + * (6) r1 Positive sequence Resistance, ohms per unit length. See also Rmatrix. + (7) x1 Positive sequence Reactance, ohms per unit length. See also Xmatrix + (8) r0 Zero sequence Resistance, ohms per unit length. + (9) x0 Zero sequence Reactance, ohms per unit length. + (10) c1 Positive sequence capacitance, nf per unit length. See also Cmatrix. + (11) c0 Zero sequence capacitance, nf per unit length. + */ double r1= 0,r0 = 0, x1 = 0, x0 = 0, c1 = 0, c0 = 0; @@ -91,15 +99,7 @@ else if(lineStrAry[i].contains("c0=")){ } - -// if(phaseIdx>0) -// phaseNum = Integer.valueOf(lineStrAry[phaseIdx].substring(7)); -// -// lineId = lineStrAry[lineIdIdx].substring(4); -// fromBusStr = lineStrAry[fromBusIdx].substring(4); -// toBusStr = lineStrAry[toBusIdx].substring(4); -// lineCodeId = lineStrAry[lineCodeIdx].substring(9); -// lineLength = Double.valueOf(lineStrAry[lengthIdx].substring(7)); + //busId is the substring before the first DOT //phases info is defined in the substring after the first DOT @@ -140,7 +140,8 @@ else if(lineStrAry[i].contains("c0=")){ Complex z1 = new Complex(r1,x1); Complex z0 = new Complex(r0,x0); - zabc = new Complex3x3(z1,z1,z0); + // input as three sequence data and then converted it three-phase + zabc = new Complex3x3(z1,z1,z0).ToAbc(); } else{ throw new Error("Error in Line Z, Y parameter raw data: "+lineStr); @@ -224,8 +225,9 @@ else if(fromBusPhases.equals("3")){ // the format of Zmatrix need to be consistent with the number of phases and the phases in use. - - line.setZabc(zabc); + // need to consider the line length + //TODO consistency of the unit types + line.setZabc(zabc.multiply(lineLength)); //TODO ShuntY is not considered for this initial implementation //line.setFromShuntYabc(yshuntabc.multiply(0.5)); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java index f6d5975..a153315 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java @@ -1,5 +1,18 @@ -package org.ipss.threePhase.data_parser; - -public class OpenDSSLoadParser { - -} +package org.ipss.threePhase.data_parser; + +public class OpenDSSLoadParser { + + + + /* + * ! + ! LOAD DEFINITIONS + ! + ! Note that 1-phase loads have a voltage rating = to actual voltage across terminals + ! This could be either 2.4kV for Wye connectoin or 4.16 kV for Delta or Line-Line connection. + ! 3-phase loads are rated Line-Line (as are 2-phase loads, but there are none in this case). + ! Only the balanced 3-phase loads are declared as 3-phase; unbalanced 3-phase loads are declared + ! as three 1-phase loads. + */ + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java index 1a187ea..3a9575f 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java @@ -1,5 +1,17 @@ package org.ipss.threePhase.data_parser; +import static com.interpss.core.funcImpl.AcscFunction.acscXfrAptr; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.ipss.threePhase.basic.Branch3Phase; +import org.ipss.threePhase.util.ThreePhaseObjectFactory; + +import com.interpss.common.exp.InterpssException; +import com.interpss.core.aclf.AclfBranchCode; +import com.interpss.core.acsc.XfrConnectCode; +import com.interpss.core.acsc.adpter.AcscXformer; + public class OpenDSSTransformerParser { private OpenDSSDataParser dataParser = null; @@ -7,5 +19,131 @@ public class OpenDSSTransformerParser { public OpenDSSTransformerParser(OpenDSSDataParser parser){ this.dataParser = parser; } + + + public boolean parseTransformerData(String[] xfrStr) throws InterpssException{ + + + /* + * ! LOAD TRANSFORMER AT 61s/610 + ! This is a 150 kVA Delta-Delta stepdown from 4160V to 480V. + + New Transformer.XFM1 Phases=3 Windings=2 Xhl=2.72 + ~ wdg=1 bus=61s conn=Delta kv=4.16 kva=150 %r=0.635 + ~ wdg=2 bus=610 conn=Delta kv=0.48 kva=150 %r=0.635 + */ + + boolean no_error = true; + + + + int phaseNum = 3; + int windingNum = 2; + double xhl = 0; + double losspercent1 = 0,losspercent2; + double kva1 = 0, kva2 = 0; + double normKV1 = 0, normKV2 = 0; + String xfrId = ""; + String fromBusId = "", toBusId = ""; + String fromConnection="", toConnection = ""; + + String defStr = xfrStr[0].trim(); + String wdg1Str = xfrStr[1].trim(); + String wdg2Str = xfrStr[1].trim(); + + String[] defStrAry = defStr.split("\\s+"); + String[] wdg1StrAry = defStr.split("\\s+"); + String[] wdg2StrAry = defStr.split("\\s+"); + + for(int i = 0; i Date: Sun, 23 Apr 2017 12:16:07 -0700 Subject: [PATCH 10/36] completed the coding part of load data parser, need to test it --- .../ipss/threePhase/basic/DistLoadType.java | 16 ++ .../org/ipss/threePhase/basic/Load3Phase.java | 28 +++ .../threePhase/basic/LoadConnectionType.java | 7 + .../org/ipss/threePhase/basic/LoadType.java | 7 - .../threePhase/basic/impl/Load3PhaseImpl.java | 41 ++++ .../data_parser/OpenDSSLineCodeParser.java | 2 +- .../data_parser/OpenDSSLoadParser.java | 181 +++++++++++++++++- .../data_parser/OpenDSSTransformerParser.java | 1 + 8 files changed, 273 insertions(+), 10 deletions(-) create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/basic/LoadConnectionType.java delete mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/basic/LoadType.java diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java new file mode 100644 index 0000000..de26108 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java @@ -0,0 +1,16 @@ +package org.ipss.threePhase.basic; + +/* + * load model code: + * 1:Standard constant P+jQ load. (Default) + 2:Constant impedance load. + 3:Const P, Quadratic Q (like a motor). + 4:Nominal Linear P, Quadratic Q (feeder mix). Use this with CVRfactor. + 5:Constant Current Magnitude + 6:Const P, Fixed Q + 7:Const P, Fixed Impedance Q + 8:ZIPV (7 values) + */ +public enum DistLoadType { + CONST_PQ, CONST_I,CONST_Z, CONST_P_QUAD_Q, LINEAR_P_QUAD_Q,CONST_P_FIXED_Q,CONST_P_FIXED_Z_Q,ZIP +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java index 38116a4..13a58b9 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java @@ -52,5 +52,33 @@ public interface Load3Phase extends AclfLoad { * @return */ public Complex3x1 getEquivCurrInj(Complex3x1 vabc); + + /** + * set the load model type, such as constant PQ, constant current, constant impedance, etc. + * @param loadModelType + */ + public void setLoadModelType(DistLoadType loadModelType); + + /** + * get the load model type, such as constant PQ, constant current, constant impedance, etc. + * @return + */ + public DistLoadType getLoadModelType(); + + /** + * set the load connection type. The connection type could be single phase wye, single phase delta, three phase wye and three phase delta. + * @param loadConnectType + */ + public void setLoadConnectionType(LoadConnectionType loadConnectType); + + /** + * get the load connection type. The connection type could be single phase wye, single phase delta, three phase wye and three phase delta. + * @return + */ + public LoadConnectionType getLoadConnectionType(); + + public void setNominalKV(double ratedkV); + + public double getNominalKV(); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LoadConnectionType.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LoadConnectionType.java new file mode 100644 index 0000000..5b07828 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LoadConnectionType.java @@ -0,0 +1,7 @@ +package org.ipss.threePhase.basic; + +public enum LoadConnectionType { + + Single_Phase_Wye, Single_Phase_Delta,Three_Phase_Wye, Three_Phase_Delta; + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LoadType.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LoadType.java deleted file mode 100644 index 44efc60..0000000 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LoadType.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.ipss.threePhase.basic; - -public enum LoadType { - - Single_Phase, Three_Phase_Wye, Three_Phase_Delta; - -} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java index 9d54620..afb3e04 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java @@ -4,12 +4,18 @@ import org.interpss.numeric.datatype.Complex3x1; import org.interpss.numeric.datatype.Complex3x3; import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.DistLoadType; import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.basic.LoadConnectionType; import com.interpss.core.aclf.impl.AclfLoadImpl; import com.interpss.core.acsc.PhaseCode; public class Load3PhaseImpl extends AclfLoadImpl implements Load3Phase { + + DistLoadType loadType = DistLoadType.CONST_PQ; // by default constant PQ + LoadConnectionType loadConnectType = LoadConnectionType.Three_Phase_Wye; // by default three-phase wye; + double nominalKV = 0; Complex3x1 ph3Load = new Complex3x1(); Complex3x3 equivYabc = new Complex3x3(); @@ -76,4 +82,39 @@ public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { return equivCurInj = ph3Load.divide(vabc).conjugate().multiply(-1.0); } + @Override + public void setLoadModelType(DistLoadType loadModelType) { + this.loadType = loadModelType; + + } + + @Override + public DistLoadType getLoadModelType() { + return this.loadType; + } + + @Override + public void setLoadConnectionType(LoadConnectionType loadConnectType) { + this.loadConnectType = loadConnectType; + + } + + @Override + public LoadConnectionType getLoadConnectionType() { + + return this.loadConnectType; + } + + @Override + public void setNominalKV(double ratedkV) { + this.nominalKV = ratedkV; + + } + + @Override + public double getNominalKV() { + + return this.nominalKV; + } + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java index f8eebb5..898a18e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java @@ -57,7 +57,7 @@ public boolean parseLineCode(String fileName) { if(str.startsWith("!") || str.startsWith("//")){ //bypass the comment } - else if(str.startsWith("New")){ + else if(str.startsWith("New")||str.startsWith("new")){ //tokenizer by blank //StringTokenizer st = new StringTokenizer(str); //while (st.hasMoreTokens()) { diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java index a153315..7856db5 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java @@ -1,8 +1,27 @@ package org.ipss.threePhase.data_parser; +import org.apache.commons.math3.complex.Complex; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.DistLoadType; +import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.basic.LoadConnectionType; +import org.ipss.threePhase.basic.impl.Load3PhaseImpl; + +import com.interpss.common.exp.InterpssException; + public class OpenDSSLoadParser { - + /* + * load model code: + * 1:Standard constant P+jQ load. (Default) + 2:Constant impedance load. + 3:Const P, Quadratic Q (like a motor). + 4:Nominal Linear P, Quadratic Q (feeder mix). Use this with CVRfactor. + 5:Constant Current Magnitude + 6:Const P, Fixed Q + 7:Const P, Fixed Impedance Q + 8:ZIPV (7 values) + */ /* * ! @@ -14,5 +33,163 @@ public class OpenDSSLoadParser { ! Only the balanced 3-phase loads are declared as 3-phase; unbalanced 3-phase loads are declared ! as three 1-phase loads. */ - + private OpenDSSDataParser dataParser = null; + + public OpenDSSLoadParser(OpenDSSDataParser parser){ + this.dataParser = parser; + } + + public boolean parseLoadData(String loadStr) throws InterpssException{ + boolean no_error = true; + + /* + * New Load.S1a Bus1=1.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 + * + * NOTE: + * 1) if kvar is not used, need to use PF + * 2) for loads connected between two phases, Bus1=BusName.1.2, Phases=1 + * To model loads connected between phases, use a pair of <-Iload, Iload> for the two phases. + * For the load modeling, need to add connection type, phase1, phase2 attributes + */ + final String DOT = "."; + String loadId =""; + String loadId_phases =""; + String busName =""; + String phase1 =""; + String phase2 =""; + String phase3 =""; + String connectionType = ""; + int phaseNum = 3; // three phases by default + int modelType = 1; // constant power load by default + double nominalKV = 0; + double loadP = 0.0, loadQ = 0.0; + double powerfactor = 0.0; + + String[] loadStrAry = loadStr.trim().split("\\s+"); + + for(int i = 0; i 0 && phase2.length()>0) + load.setLoadConnectionType(LoadConnectionType.Single_Phase_Delta); + else{ + no_error = false; + throw new Error("Connection phases info is not consistent with the connection type # "+loadStr); + } + } + else{ + no_error = false; + throw new Error("Load connection type not supported yet! # "+connectionType); + } + } + + + + bus.getThreePhaseLoadList().add(load); + + return no_error; + + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java index 3a9575f..af5eee2 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java @@ -112,6 +112,7 @@ else if(wdg2StrAry[i].contains("%r=")){ // create a transformer object Branch3Phase xfrBranch = ThreePhaseObjectFactory.create3PBranch(fromBusId, toBusId, "0", this.dataParser.getDistNetwork()); xfrBranch.setBranchCode(AclfBranchCode.XFORMER); + xfrBranch.getFromAclfBus().setBaseVoltage(normKV1, UnitType.kV); xfrBranch.getToAclfBus().setBaseVoltage(normKV2, UnitType.kV); From 46b74550760b378b7daa045d8b0e8f61e9827866 Mon Sep 17 00:00:00 2001 From: thuang Date: Sat, 29 Apr 2017 12:49:43 -0700 Subject: [PATCH 11/36] a "logic complete" version of opendss data parser--only the master feeder file is needed. Tests of component parsers are needed --- .../data_parser/OpenDSSCapacitorParser.java | 7 + .../data_parser/OpenDSSDataParser.java | 382 +++++++++++++++++- .../data_parser/OpenDSSLineCodeParser.java | 294 +++++++++++++- .../data_parser/OpenDSSLineParser.java | 1 + .../data_parser/OpenDSSRegulatorParser.java | 14 +- .../test/TestOpenDSSDataParser.java | 11 +- 6 files changed, 693 insertions(+), 16 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java index c5d3d02..f64939c 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java @@ -7,5 +7,12 @@ public class OpenDSSCapacitorParser { public OpenDSSCapacitorParser(OpenDSSDataParser parser){ this.dataParser = parser; } + + public boolean parseCapDataString(String capStr){ + boolean no_error = true; + + + return no_error; + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 89306a7..3802cc1 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -1,7 +1,19 @@ package org.ipss.threePhase.data_parser; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; import java.util.Hashtable; +import java.util.List; +import org.ieee.odm.common.IFileReader; +import org.ieee.odm.common.ODMLogger; +import org.ieee.odm.common.ODMTextFileReader; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.basic.LineConfiguration; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.ipss.threePhase.util.ThreePhaseObjectFactory; @@ -17,17 +29,24 @@ public class OpenDSSDataParser { protected OpenDSSLineCodeParser lineCodeParser = null; protected OpenDSSLineParser lineParser = null; protected OpenDSSLoadParser loadParser = null; + protected OpenDSSTransformerParser xfrParser = null; protected OpenDSSCapacitorParser capParser = null; protected OpenDSSRegulatorParser regulatorParser = null; public OpenDSSDataParser(){ + //create and initialize the distribution network model if(this.distNet == null){ this.distNet = ThreePhaseObjectFactory.create3PhaseDStabNetwork(); this.distNet.setNetworkType(NetworkType.DISTRIBUTION); } this.lineCodeParser = new OpenDSSLineCodeParser (this); + this.lineParser = new OpenDSSLineParser (this); + this.loadParser = new OpenDSSLoadParser (this); + this.capParser = new OpenDSSCapacitorParser (this); + //TODO tentatively, treat regulator as a fixed tap transformer + this.regulatorParser = new OpenDSSRegulatorParser(this); } public Hashtable getLineConfigTable() { @@ -50,18 +69,194 @@ public DStabNetwork3Phase getDistNetwork(){ } - public boolean parseFeederData(String lineCodeFile, String feederFile, String loadFile, String regulatorFile){ + + public DStabNetwork3Phase getDistNet() { + return distNet; + } + + public OpenDSSLineCodeParser getLineCodeParser() { + return lineCodeParser; + } + + public OpenDSSLineParser getLineParser() { + return lineParser; + } + + public OpenDSSLoadParser getLoadParser() { + return loadParser; + } + + public OpenDSSTransformerParser getXfrParser() { + return xfrParser; + } + + public OpenDSSCapacitorParser getCapacitorParser() { + return capParser; + } + + public OpenDSSRegulatorParser getRegulatorParser() { + return regulatorParser; + } + + public boolean parseFeederData(String folderPath,String feederFile){ boolean no_error = true; - //TODO parse the linecode,if any - if(!lineCodeFile.equals("")) - no_error=this.lineCodeParser.parseLineCode(lineCodeFile); - + //parse the master file, first create an network object as well as the sourceBus + + String str ="", nextLine = ""; + int lineCnt = 0; + boolean useLastStepLine = true; + + List redirectFiles = new ArrayList<>(); + if(!feederFile.equals("")){ - //TODO - //check if start with (new) || NEW - } + try { + String fullFilePath = folderPath+"\\"+feederFile; + final File file = new File(fullFilePath); + final InputStream stream = new FileInputStream(file); + final BufferedReader din = new BufferedReader(new InputStreamReader(stream)); + IFileReader reader = new ODMTextFileReader(din); + + ODMLogger.getLogger().info("Start to parse feeder file and create the parser object # " + fullFilePath); + + do { + if(useLastStepLine){ + str = nextLine; + } + else{ + str = reader.readLine(); + lineCnt++; + } + if (str != null && !str.trim().equals("")) { + str = str.trim(); + if(str.startsWith("!") || str.startsWith("//")){ + //bypass the comment + } + else if(str.startsWith("New")||str.startsWith("new")){ + String[] tempAry = str.split("\\s+"); + if(tempAry[1].contains("object=")||tempAry[1].contains("Object=")){ + tempAry[1] = tempAry[1].substring(7); + } + if(tempAry[1].contains("Circuit.") ||tempAry[1].contains("circuit.")){ + //create a network object and add the source bus + String circuitId = tempAry[1].substring(8); + this.getDistNetwork().setId(circuitId); + + String sourceBusId = ""; + double basekv = 0.0; + double volt_pu = 1.0; + Bus3Phase sourceBus = null; + + if(!str.contains("basekv=")){ + nextLine = reader.readLine(); + lineCnt++; + + int continueIdx = nextLine.indexOf("~"); + if(continueIdx>0){ + nextLine = nextLine.substring(continueIdx+1); + String[] tempAry2 = nextLine.split("\\s+"); + + for(int i=0;i0){ + if(distNet.getBus(sourceBusId)==null) + sourceBus = ThreePhaseObjectFactory.create3PDStabBus(sourceBusId, distNet); + + sourceBus.setBaseVoltage(basekv, UnitType.kV); + + sourceBus.setVoltageMag(basekv); + } + else{ + throw new Error("source bus name is not properly parse! # "+ nextLine); + } + } + } + + else if(tempAry[1].contains("Line.") ||tempAry[1].contains("line.")){ + this.lineParser.parseLineData(str); + } + else if(tempAry[1].contains("Transformer.") ||tempAry[1].contains("transformer.")){ + String [] xfrStrAry = new String[3]; + xfrStrAry[0] = str; + + //TODO call the getNextDataInputString() function + nextLine = reader.readLine().trim(); + lineCnt++; + + if(nextLine.startsWith("~")){ + xfrStrAry[1] = nextLine; + // by default there are three line strings for one transformer definition + nextLine =reader.readLine().trim(); + lineCnt++; + if(nextLine.startsWith("~")){ + xfrStrAry[2] = nextLine; + } + else{ + useLastStepLine = true; + } + } + else{ + useLastStepLine = true; + } + + //TODO in the next phase, append all continuation lines to one line to simplify the implementation + this.xfrParser.parseTransformerData(xfrStrAry); + } + else if(tempAry[1].contains("Load.") ||tempAry[1].contains("load.")){ + this.loadParser.parseLoadData(str); + } + else if(tempAry[1].contains("Capacitor.") ||tempAry[1].contains("capacitor.")){ + this.capParser.parseCapDataString(str); + } + + else{ + ODMLogger.getLogger().severe("Non-supported object for line # "+str); + } + } + else if(str.startsWith("redirect")||str.startsWith("Redirect")){ + ODMLogger.getLogger().info(str); + String redictFileName = str.split("\\s+")[1]; + if(redictFileName.contains("LineCode")|| redictFileName.contains("linecode")){ + no_error=this.lineCodeParser.parseLineCodeFile(redictFileName); + } + else{ + no_error = no_error&&parseFile(folderPath,redictFileName); + } + } + else{ + ODMLogger.getLogger().severe("Non-supported syntax/data model in line # "+lineCnt+" :\n "+str); + } + } + }while(str!=null); + } catch (Exception e) { + ODMLogger.getLogger().severe("processing line #"+str); + ODMLogger.getLogger().severe(e.toString()); + + e.printStackTrace(); + return false; + }// end of try + } // end of if file name is not empty + + + @@ -75,6 +270,161 @@ public boolean parseFeederData(String lineCodeFile, String feederFile, String lo return no_error; } + private boolean parseFile(String folderPath, String fileName){ + + boolean no_error = true; + String str ="", nextLine = ""; + int lineCnt = 0; + boolean useLastStepLine = true; + + List redirectFiles = new ArrayList<>(); + + if(!fileName.equals("")){ + try { + String fullFilePath = folderPath+"\\"+fileName; + final File file = new File(fullFilePath); + final InputStream stream = new FileInputStream(file); + final BufferedReader din = new BufferedReader(new InputStreamReader(stream)); + IFileReader reader = new ODMTextFileReader(din); + + ODMLogger.getLogger().info("Start to parse file: " + fullFilePath); + + do { + if(useLastStepLine){ + str = nextLine; + } + else{ + str = reader.readLine(); + lineCnt++; + } + if (str != null && !str.trim().equals("")) { + str = str.trim(); + if(str.startsWith("!") || str.startsWith("//")){ + //bypass the comment + } + else if(str.startsWith("New")||str.startsWith("new")){ + String[] tempAry = str.split("\\s+"); + if(tempAry[1].contains("object=")||tempAry[1].contains("Object=")){ + tempAry[1] = tempAry[1].substring(7); + } + if(tempAry[1].contains("Circuit.") ||tempAry[1].contains("circuit.")){ + //create a network object and add the source bus + String circuitId = tempAry[1].substring(8); + this.getDistNetwork().setId(circuitId); + + String sourceBusId = ""; + double basekv = 0.0; + double volt_pu = 1.0; + Bus3Phase sourceBus = null; + + if(!str.contains("basekv=")){ + nextLine = reader.readLine(); + lineCnt++; + + int continueIdx = nextLine.indexOf("~"); + if(continueIdx>0){ + nextLine = nextLine.substring(continueIdx+1); + String[] tempAry2 = nextLine.split("\\s+"); + + for(int i=0;i0){ + if(distNet.getBus(sourceBusId)==null) + sourceBus = ThreePhaseObjectFactory.create3PDStabBus(sourceBusId, distNet); + + sourceBus.setBaseVoltage(basekv, UnitType.kV); + + sourceBus.setVoltageMag(basekv); + } + else{ + no_error = false; + throw new Error("source bus name is not properly parse! # "+ nextLine); + } + } + } + + else if(tempAry[1].contains("Line.") ||tempAry[1].contains("line.")){ + this.lineParser.parseLineData(str); + } + else if(tempAry[1].contains("Transformer.") ||tempAry[1].contains("transformer.")){ + String [] xfrStrAry = new String[3]; + xfrStrAry[0] = str; + + //TODO call the getNextDataInputString() function + nextLine = reader.readLine().trim(); + lineCnt++; + + if(nextLine.startsWith("~")){ + xfrStrAry[1] = nextLine; + // by default there are three line strings for one transformer definition + nextLine = reader.readLine().trim(); + lineCnt++; + if(nextLine.startsWith("~")){ + xfrStrAry[2] = nextLine; + } + else{ + useLastStepLine = true; + } + } + else{ + useLastStepLine = true; + } + + //TODO in the next phase, append all continuation lines to one line to simplify the implementation + this.xfrParser.parseTransformerData(xfrStrAry); + } + else if(tempAry[1].contains("Load.") ||tempAry[1].contains("load.")){ + this.loadParser.parseLoadData(str); + } + else if(tempAry[1].contains("Capacitor.") ||tempAry[1].contains("capacitor.")){ + this.capParser.parseCapDataString(str); + } + + else{ + ODMLogger.getLogger().severe("Non-supported object for line # "+str); + } + } + else if(str.startsWith("redirect")||str.startsWith("Redirect")){ + ODMLogger.getLogger().info(str); + } + else{ + ODMLogger.getLogger().severe("Non-supported syntax/data model in line # "+lineCnt+" :\n "+str); + } + } + }while(str!=null); + + ODMLogger.getLogger().info("End of parsing file: " + fullFilePath); + } catch (Exception e) { + + ODMLogger.getLogger().severe("processing line #"+str); + ODMLogger.getLogger().severe(e.toString()); + + e.printStackTrace(); + return false; + }// end of try + + + } // end of if file name is not empty + return no_error; + } + public boolean initNetwork(){ boolean no_error = initBusBasekV() & convertBranchZYMatrixToPU(); @@ -95,6 +445,22 @@ private boolean convertBranchZYMatrixToPU(){ return no_error; } + + /** + * skip all the comment lines (including in-line comments and block comments) to get the next data input line string, so that processing can be performed to check + * if the next data input string is a valid input or only comments + * @param din + * @param useLastLineString + * @return + */ + private String getNextDataInputString(BufferedReader din, boolean useLastLineString){ + String dataString = ""; + + + + return dataString; + + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java index 898a18e..83048a5 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java @@ -22,7 +22,7 @@ public OpenDSSLineCodeParser(OpenDSSDataParser parser){ this.dataParser = parser; } - public boolean parseLineCode(String fileName) { + public boolean parseLineCodeFile(String fileName) { try { @@ -51,7 +51,7 @@ public boolean parseLineCode(String fileName) { double[] xMatrixData = new double[6]; double[] cMatrixData = new double[6]; do { - str = din.readLine(); + str = reader.readLine(); if (str != null && !str.trim().equals("")) { str = str.trim(); if(str.startsWith("!") || str.startsWith("//")){ @@ -335,5 +335,295 @@ else if( str.contains("units")){ } } + + public LineConfiguration parseLineCodeString(String linecodeStr) throws Exception{ + int busCnt = 0; + String lineCodeId = ""; + int nphases = 0; + int baseFreq = 60; + + String[] lineData = null; + String code_id =""; + String nphaseStr =""; + String baseFreqStr =""; + LineConfiguration lineConfig = null; + + double[] rMatrixData = new double[6]; + double[] xMatrixData = new double[6]; + double[] cMatrixData = new double[6]; + + + String str = linecodeStr.trim(); + if(str.startsWith("!") || str.startsWith("//")){ + //bypass the comment + } + else if(str.startsWith("New")||str.startsWith("new")){ + //tokenizer by blank + //StringTokenizer st = new StringTokenizer(str); + //while (st.hasMoreTokens()) { + + lineData = str.split("\\s+"); + code_id =lineData[1]; + nphaseStr =lineData[2]; + baseFreqStr =lineData[3]; + + + // set lineCodeId, nphases and baseFreq + lineCodeId = code_id.substring(code_id.indexOf(".")+1); + + nphases = Integer.valueOf(nphaseStr.substring(nphaseStr.indexOf("=")+1)); + + baseFreq = Integer.valueOf(baseFreqStr.substring(baseFreqStr.indexOf("=")+1)); + + lineConfig = new LineConfiguration(); + lineConfig.setId(lineCodeId); + lineConfig.setNphases(nphases); + this.dataParser.getLineConfigTable().put(lineCodeId, lineConfig); + + + } + + /* + * rmatrix Resistance matrix, lower triangle, ohms per unit length. + */ + + else if(str.contains("rmatrix")){ + // get the matrix data within the brackets, + int startIdx = str.indexOf("["); + int lastIdx = str.indexOf("]"); + if( startIdx <0 ){ + startIdx= str.indexOf("("); + if(startIdx<0){ + throw new Error("line code format error: "+ str); + } + else + lastIdx=str.indexOf(")"); + } + // if it has "|", tokenizer by "|", otherwise it is only one phase data, need to check + String dataStr = str.substring(startIdx+1, lastIdx).trim(); + String[] rDataStr = null; + + // Symmetrical matrices can be entered in a lower triangle form, for example + // Xmatrix=[ 1.2 | .3 1.2 | .3 .3 1.2 ] ! (3x3 matrix lower triangle) + if (dataStr.contains("|")){ + rDataStr = dataStr.split("\\|"); + + int idx = 0; + for(int i = 0; i< rDataStr.length;i++){ + if(i==0){ + rMatrixData[idx] = Double.valueOf(rDataStr[i]); + idx +=1; + } + else if(i==1){ + String[] rDataStr2 = rDataStr[i].trim().split("\\s+"); + for(int j =0; j + String dataStr = str.substring(startIdx+1, lastIdx).trim(); + + String[] xDataStr = null; + if (dataStr.contains("|")){ + xDataStr = dataStr.split("\\|"); + + int idx = 0; + for(int i = 0; i< xDataStr.length;i++){ + if(i==0){ + xMatrixData[idx] = Double.valueOf(xDataStr[i]); + idx +=1; + } + else if(i==1){ + String[] xDataStr2 = xDataStr[i].trim().split("\\s+"); + for(int j =0; j=1){ + zMatrix.aa = new Complex (rMatrixData[0], xMatrixData[0]); + } + if(nphases>=2){ + + zMatrix.ab = new Complex (rMatrixData[1], xMatrixData[1]); + zMatrix.ba = new Complex (rMatrixData[1], xMatrixData[1]); + zMatrix.bb = new Complex (rMatrixData[2], xMatrixData[2]); + + } + if(nphases==3){ + zMatrix.ac = new Complex (rMatrixData[3], xMatrixData[3]); + zMatrix.ca = new Complex (rMatrixData[3], xMatrixData[3]); + + zMatrix.bc = new Complex (rMatrixData[4], xMatrixData[4]); + zMatrix.cb = new Complex (rMatrixData[4], xMatrixData[4]); + + zMatrix.cc = new Complex (rMatrixData[5], xMatrixData[5]); + + } + else if(nphases>3){ + throw new Exception("nphases > 3 not supported yet"); + } + + lineConfig.setZ3x3Matrix(zMatrix); + + } + + /* + * + * Nodal Capacitance matrix, lower triangle, nf per unit length.Order of the matrix is the number of phases. May be used to specify the shunt capacitance of any line configuration + */ + + else if(str.contains("cmatrix")){ + +//get the matrix data within the brackets, + + int startIdx = str.indexOf("["); + int lastIdx = str.indexOf("]"); + + if( startIdx <0 ){ + startIdx= str.indexOf("("); + if(startIdx<0){ + throw new Error("line code format error: "+ str); + } + else + lastIdx=str.indexOf(")"); + } + // if it has "|", tokenizer by "|", otherwise it is only one phase data, need to check + String dataStr = str.substring(startIdx+1, lastIdx).trim(); + + String[] cDataStr = null; + if (dataStr.contains("|")){ + cDataStr = dataStr.split("\\|"); + + int idx = 0; + for(int i = 0; i< cDataStr.length;i++){ + if(i==0){ + cMatrixData[idx] = Double.valueOf(cDataStr[i]); + idx +=1; + } + else if(i==1){ + String[] cDataStr2 = cDataStr[i].trim().split("\\s+"); + for(int j =0; j=1){ + yMatrix.aa = new Complex (0.0, cMatrixData[0]); + } + if(nphases>=2){ + + yMatrix.ab = new Complex (0.0, cMatrixData[1]); + yMatrix.ba = new Complex (0.0, cMatrixData[1]); + yMatrix.bb = new Complex (0.0, cMatrixData[2]); + + } + if(nphases==3){ + yMatrix.ac = new Complex (0.0, cMatrixData[3]); + yMatrix.ca = new Complex (0.0, cMatrixData[3]); + + yMatrix.bc = new Complex (0.0, cMatrixData[4]); + yMatrix.cb = new Complex (0.0, cMatrixData[4]); + + yMatrix.cc = new Complex (0.0, cMatrixData[5]); + + } + else if(nphases>3){ + throw new Exception("nphases > 3 not supported yet"); + } + + lineConfig.setShuntY3x3Matrix(yMatrix); + + } + else if( str.contains("units")){ + //TODO + } + + + return lineConfig; + + + + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index 138f76b..b5a6b9e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -221,6 +221,7 @@ else if(fromBusPhases.equals("3")){ toBus = ThreePhaseObjectFactory.create3PDStabBus(toBusId, distNet); Branch3Phase line = ThreePhaseObjectFactory.create3PBranch(fromBusId, toBusId, "1", distNet); + line.setBranchCode(AclfBranchCode.LINE); // the format of Zmatrix need to be consistent with the number of phases and the phases in use. diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java index b3f7fda..4cf8aa8 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java @@ -1,5 +1,9 @@ -package org.ipss.threePhase.data_parser; - -public class OpenDSSRegulatorParser { - -} +package org.ipss.threePhase.data_parser; + +public class OpenDSSRegulatorParser { + + public OpenDSSRegulatorParser(OpenDSSDataParser openDSSDataParser) { + // TODO Auto-generated constructor stub + } + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java index 9b5d2b0..a76cb41 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -15,7 +15,8 @@ public class TestOpenDSSDataParser { @Test public void test_LineCodeParser(){ OpenDSSDataParser parser = new OpenDSSDataParser(); - parser.parseFeederData("testData\\feeder\\IEEE123\\IEEELineCodes.DSS", "", "", ""); + + parser.getLineCodeParser().parseLineCodeFile("testData\\feeder\\IEEE123\\IEEELineCodes.DSS"); System.out.print("line code table:\n" ); @@ -84,5 +85,13 @@ public void test_LineCodeParser(){ assertTrue(linecode_9.getShuntY3x3Matrix().subtract(yabc9).absMax()<1.0E-6); } + +// @Test + public void testLineParser(){ + OpenDSSDataParser parser = new OpenDSSDataParser(); + parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master.dss"); + + + } } From 543cd0d2439133b5a8fbb8ae0bb40e51e1a818b1 Mon Sep 17 00:00:00 2001 From: thuang Date: Sun, 30 Apr 2017 15:29:34 -0700 Subject: [PATCH 12/36] Completed the OpenDSS data parser code. Need further testing. --- .../ipss/threePhase/basic/Branch3Phase.java | 2 +- .../data_parser/OpenDSSDataParser.java | 146 ++++++++--- .../data_parser/OpenDSSLineParser.java | 31 ++- .../data_parser/OpenDSSLoadParser.java | 2 +- .../data_parser/OpenDSSTransformerParser.java | 232 +++++++++++++++++- .../test/TestOpenDSSDataParser.java | 11 +- 6 files changed, 359 insertions(+), 65 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Branch3Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Branch3Phase.java index 6d14944..2fe2c39 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Branch3Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Branch3Phase.java @@ -9,7 +9,7 @@ public interface Branch3Phase extends DStabBranch{ - //TODO add phase info + //TODO add phase info, public void setZabc(Complex3x3 Zabc); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 3802cc1..f66df37 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -10,14 +10,17 @@ import java.util.List; import org.ieee.odm.common.IFileReader; +import org.ieee.odm.common.ODMException; import org.ieee.odm.common.ODMLogger; import org.ieee.odm.common.ODMTextFileReader; import org.interpss.numeric.datatype.Unit.UnitType; +import org.ipss.threePhase.basic.Branch3Phase; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.basic.LineConfiguration; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.ipss.threePhase.util.ThreePhaseObjectFactory; +import com.interpss.core.net.Branch; import com.interpss.core.net.NetworkType; public class OpenDSSDataParser { @@ -44,7 +47,7 @@ public OpenDSSDataParser(){ this.lineParser = new OpenDSSLineParser (this); this.loadParser = new OpenDSSLoadParser (this); this.capParser = new OpenDSSCapacitorParser (this); - + this.xfrParser = new OpenDSSTransformerParser (this); //TODO tentatively, treat regulator as a fixed tap transformer this.regulatorParser = new OpenDSSRegulatorParser(this); } @@ -70,11 +73,7 @@ public DStabNetwork3Phase getDistNetwork(){ - public DStabNetwork3Phase getDistNet() { - return distNet; - } - - public OpenDSSLineCodeParser getLineCodeParser() { + public OpenDSSLineCodeParser getLineCodeParser() { return lineCodeParser; } @@ -106,7 +105,7 @@ public boolean parseFeederData(String folderPath,String feederFile){ String str ="", nextLine = ""; int lineCnt = 0; - boolean useLastStepLine = true; + boolean useLastLineString = false; List redirectFiles = new ArrayList<>(); @@ -121,19 +120,27 @@ public boolean parseFeederData(String folderPath,String feederFile){ ODMLogger.getLogger().info("Start to parse feeder file and create the parser object # " + fullFilePath); do { - if(useLastStepLine){ + if(useLastLineString){ str = nextLine; + useLastLineString = false; } else{ str = reader.readLine(); lineCnt++; } + System.out.println("Parsing: "+str); if (str != null && !str.trim().equals("")) { str = str.trim(); if(str.startsWith("!") || str.startsWith("//")){ //bypass the comment } else if(str.startsWith("New")||str.startsWith("new")){ + + //Consider in-line comment using ! + if(str.indexOf("!")>0){ + str = str.substring(0, str.indexOf("!")); + } + String[] tempAry = str.split("\\s+"); if(tempAry[1].contains("object=")||tempAry[1].contains("Object=")){ tempAry[1] = tempAry[1].substring(7); @@ -149,12 +156,12 @@ else if(str.startsWith("New")||str.startsWith("new")){ Bus3Phase sourceBus = null; if(!str.contains("basekv=")){ - nextLine = reader.readLine(); + nextLine = reader.readLine().trim(); lineCnt++; int continueIdx = nextLine.indexOf("~"); - if(continueIdx>0){ - nextLine = nextLine.substring(continueIdx+1); + if(continueIdx==0){ + nextLine = nextLine.substring(continueIdx+1).trim(); String[] tempAry2 = nextLine.split("\\s+"); for(int i=0;i redirectFiles = new ArrayList<>(); @@ -290,13 +303,15 @@ private boolean parseFile(String folderPath, String fileName){ ODMLogger.getLogger().info("Start to parse file: " + fullFilePath); do { - if(useLastStepLine){ + if(useLastLineString){ str = nextLine; + useLastLineString =false; } else{ str = reader.readLine(); lineCnt++; } + System.out.println("Parsing :" +str); if (str != null && !str.trim().equals("")) { str = str.trim(); if(str.startsWith("!") || str.startsWith("//")){ @@ -367,9 +382,13 @@ else if(tempAry[1].contains("Transformer.") ||tempAry[1].contains("transformer." String [] xfrStrAry = new String[3]; xfrStrAry[0] = str; - //TODO call the getNextDataInputString() function - nextLine = reader.readLine().trim(); - lineCnt++; + + String[] nextStrAry = getNextDataInputString(reader); + if(nextStrAry[0]==null){ + break; + } + nextLine = nextStrAry[0].trim(); + lineCnt = lineCnt + Integer.valueOf(nextStrAry[1]); if(nextLine.startsWith("~")){ xfrStrAry[1] = nextLine; @@ -380,15 +399,18 @@ else if(tempAry[1].contains("Transformer.") ||tempAry[1].contains("transformer." xfrStrAry[2] = nextLine; } else{ - useLastStepLine = true; + useLastLineString = true; } } else{ - useLastStepLine = true; + useLastLineString = true; } - //TODO in the next phase, append all continuation lines to one line to simplify the implementation - this.xfrParser.parseTransformerData(xfrStrAry); + + if(useLastLineString) // all data in one line + this.xfrParser.parseTransformerDataOneLine(str); + else + this.xfrParser.parseTransformerDataMultiLines(xfrStrAry); } else if(tempAry[1].contains("Load.") ||tempAry[1].contains("load.")){ this.loadParser.parseLoadData(str); @@ -449,18 +471,68 @@ private boolean convertBranchZYMatrixToPU(){ /** * skip all the comment lines (including in-line comments and block comments) to get the next data input line string, so that processing can be performed to check * if the next data input string is a valid input or only comments + * + * The first return string is the data string, while the second return string is the skip line numbers * @param din * @param useLastLineString - * @return + * @return String[2] + * @throws ODMException */ - private String getNextDataInputString(BufferedReader din, boolean useLastLineString){ - String dataString = ""; - - - - return dataString; + private String[] getNextDataInputString(IFileReader reader) throws ODMException{ + String dataString = null; + int skipLineNum = 0; + do{ + dataString =reader.readLine(); + if(dataString!=null){ + dataString = dataString.trim().toLowerCase(); + if(dataString.trim().length()>0){ + if(dataString.startsWith("!") ||dataString.startsWith("//")){ + //it is a comment line, skip + skipLineNum++; + } + else if(dataString.startsWith("/*")){ + //keep search until find the "*/", which denotes the end of the comment block. + skipLineNum++; + if(!dataString.contains("*/")){ + + do{ + dataString =reader.readLine(); + skipLineNum++; + + if(dataString!=null){ + + if(dataString.contains("*/")){ + break; + } + + } + + }while(dataString !=null); + } + } + else{ + // now we find the next non-comment data string; + break; + } + } + } + + }while(dataString !=null); + + String[] returnStr = new String[]{dataString,Integer.toString(skipLineNum)}; + + return returnStr; } + + public Branch3Phase getBranchByName(String branchName){ + for(Branch bra: this.getDistNetwork().getBranchList()){ + if(bra.getName().equals(branchName)){ + return (Branch3Phase) bra; + } + } + return null; + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index b5a6b9e..c0028f9 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -25,7 +25,7 @@ public boolean parseLineData(String lineStr) throws InterpssException{ final String DOT = "."; - String lineId = ""; + String lineName = ""; String fromBusId = ""; String fromBusPhases ="1.2.3"; // by default;; String toBusId = ""; @@ -58,7 +58,7 @@ public boolean parseLineData(String lineStr) throws InterpssException{ for(int i = 0;i1){ phase1 = idPhasesAry[1]; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java index af5eee2..0da479b 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java @@ -21,7 +21,7 @@ public OpenDSSTransformerParser(OpenDSSDataParser parser){ } - public boolean parseTransformerData(String[] xfrStr) throws InterpssException{ + public boolean parseTransformerDataMultiLines(String[] xfrStr) throws InterpssException{ /* @@ -31,6 +31,7 @@ public boolean parseTransformerData(String[] xfrStr) throws InterpssException{ New Transformer.XFM1 Phases=3 Windings=2 Xhl=2.72 ~ wdg=1 bus=61s conn=Delta kv=4.16 kva=150 %r=0.635 ~ wdg=2 bus=610 conn=Delta kv=0.48 kva=150 %r=0.635 + */ boolean no_error = true; @@ -47,26 +48,26 @@ public boolean parseTransformerData(String[] xfrStr) throws InterpssException{ String fromBusId = "", toBusId = ""; String fromConnection="", toConnection = ""; - String defStr = xfrStr[0].trim(); - String wdg1Str = xfrStr[1].trim(); - String wdg2Str = xfrStr[1].trim(); + String defStr = xfrStr[0].trim().toLowerCase(); + String wdg1Str = xfrStr[1].trim().toLowerCase(); + String wdg2Str = xfrStr[2].trim().toLowerCase(); String[] defStrAry = defStr.split("\\s+"); - String[] wdg1StrAry = defStr.split("\\s+"); - String[] wdg2StrAry = defStr.split("\\s+"); + String[] wdg1StrAry = wdg1Str.split("\\s+"); + String[] wdg2StrAry = wdg2Str.split("\\s+"); for(int i = 0; itoBus(cirId) as the unique branchId, here the original Id is set as the name. + xfrBranch.setName(xfrId); + xfrBranch.setBranchCode(AclfBranchCode.XFORMER); + + Branch3Phase likeBranch = null; + + if(!referenceXfrName.equals("")){ + likeBranch= this.dataParser.getBranchByName(referenceXfrName); + } + + if(likeBranch!=null){ + if(xhl==0.0){ + xhl = likeBranch.getZ().getImaginary(); + + } + if(normKV1==0.0){ + normKV1 = likeBranch.getFromBus().getBaseVoltage()/1000.0; + } + if(normKV2==0.0){ + normKV2 = likeBranch.getToBus().getBaseVoltage()/1000.0; + } + if(kva1==0.0){ + kva1 = likeBranch.getXfrRatedKVA(); + } + if(kva2==0.0){ + kva2 = likeBranch.getXfrRatedKVA(); + } + AcscXformer likexfr = acscXfrAptr.apply(likeBranch); + + if(fromConnection.equals("")){ + if(likexfr.getFromConnect().equals(XfrConnectCode.DELTA)||likexfr.getFromConnect().equals(XfrConnectCode.DELTA11)){ + fromConnection ="delta"; + } + else{ + fromConnection ="wye"; + } + } + if(toConnection.equals("")){ + if(likexfr.getToConnect().equals(XfrConnectCode.DELTA)||likexfr.getToConnect().equals(XfrConnectCode.DELTA11)){ + toConnection ="delta"; + } + else{ + toConnection ="wye"; + } + } + } + + xfrBranch.getFromBus().setBaseVoltage(normKV1, UnitType.kV); + xfrBranch.getToBus().setBaseVoltage(normKV2, UnitType.kV); + + //TODO calculate r based on loss percent + xfrBranch.setZ( new Complex( 0.0, xhl )); + + xfrBranch.setXfrRatedKVA(kva1); + + + AcscXformer xfr0 = acscXfrAptr.apply(xfrBranch); + + if(fromConnection.equalsIgnoreCase("Delta")){ + xfr0.setFromConnectGroundZ(XfrConnectCode.DELTA11, new Complex(0.0,0.0), UnitType.PU); + } + else if(fromConnection.equalsIgnoreCase("Wye")){ + xfr0.setFromConnectGroundZ(XfrConnectCode.WYE_SOLID_GROUNDED, new Complex(0.0,0.0), UnitType.PU); + } + else{ + throw new Error("Transformer connection type at winding 1 is not supported yet #"+fromConnection); + } + + if(toConnection.equalsIgnoreCase("Delta")){ + xfr0.setToConnectGroundZ(XfrConnectCode.DELTA, new Complex(0.0,0.0), UnitType.PU); + } + else if(toConnection.equalsIgnoreCase("Wye")){ + xfr0.setToConnectGroundZ(XfrConnectCode.WYE_SOLID_GROUNDED, new Complex(0.0,0.0), UnitType.PU); + } + else{ + throw new Error("Transformer connection type at winding 2 is not supported yet #"+toConnection); + } + + + + return no_error; + } + + public boolean parseXfrControlData(String regulateStr){ + + /* + * new transformer.reg1a phases=3 windings=2 buses=[150 150r] conns=[wye wye] kvs=[4.16 4.16] kvas=[5000 5000] XHL=.001 %LoadLoss=0.00001 ppm=0.0 + new regcontrol.creg1a transformer=reg1a winding=2 vreg=120 band=2 ptratio=20 ctprim=700 R=3 X=7.5 + + */ + + boolean no_error = true; + + return no_error; + } + + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java index a76cb41..f563cee 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -3,8 +3,10 @@ import static org.junit.Assert.assertTrue; import java.util.Map.Entry; +import java.util.logging.Level; import org.apache.commons.math3.complex.Complex; +import org.interpss.IpssCorePlugin; import org.interpss.numeric.datatype.Complex3x3; import org.ipss.threePhase.basic.LineConfiguration; import org.ipss.threePhase.data_parser.OpenDSSDataParser; @@ -12,7 +14,7 @@ public class TestOpenDSSDataParser { - @Test + //@Test public void test_LineCodeParser(){ OpenDSSDataParser parser = new OpenDSSDataParser(); @@ -86,11 +88,16 @@ public void test_LineCodeParser(){ assertTrue(linecode_9.getShuntY3x3Matrix().subtract(yabc9).absMax()<1.0E-6); } -// @Test + @Test public void testLineParser(){ + + IpssCorePlugin.init(); + IpssCorePlugin.setLoggerLevel(Level.INFO); + OpenDSSDataParser parser = new OpenDSSDataParser(); parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master.dss"); + System.out.println(parser.getDistNetwork().toString()); } From 1569028f91055e96b2bdf3ccd5b7a99f98bd0552 Mon Sep 17 00:00:00 2001 From: thuang Date: Sun, 30 Apr 2017 17:48:57 -0700 Subject: [PATCH 13/36] add opendss data parser --- .../data_parser/OpenDSSDataParser.java | 4 +- .../data_parser/OpenDSSLineParser.java | 44 +++++++++++-------- .../data_parser/OpenDSSLoadParser.java | 9 ++-- .../test/TestOpenDSSDataParser.java | 13 ++++++ 4 files changed, 47 insertions(+), 23 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index f66df37..59c0ce0 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -132,7 +132,7 @@ public boolean parseFeederData(String folderPath,String feederFile){ if (str != null && !str.trim().equals("")) { str = str.trim(); if(str.startsWith("!") || str.startsWith("//")){ - //bypass the comment + //bypass the comments } else if(str.startsWith("New")||str.startsWith("new")){ @@ -169,7 +169,7 @@ else if(str.startsWith("New")||str.startsWith("new")){ basekv = Double.valueOf(tempAry2[i].substring(7)); } else if(tempAry2[i].contains("Bus1=")){ - sourceBusId = tempAry2[i].substring(4); + sourceBusId = tempAry2[i].substring(5); } else if(tempAry2[i].contains("pu=")){ volt_pu = Double.valueOf(tempAry2[i].substring(3)); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index c0028f9..fb20728 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -31,6 +31,7 @@ public boolean parseLineData(String lineStr) throws InterpssException{ String toBusId = ""; String toBusPhases = "1.2.3"; // by default; String lineCodeId = ""; + String units = ""; double lineLength = 0; int phaseNum = 3; // 3 phases by default @@ -54,30 +55,33 @@ public boolean parseLineData(String lineStr) throws InterpssException{ double r1= 0,r0 = 0, x1 = 0, x0 = 0, c1 = 0, c0 = 0; - String[] lineStrAry = lineStr.split("\\s+"); + String[] lineStrAry = lineStr.toLowerCase().split("\\s+"); for(int i = 0;i0 && phase2.length()>0) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java index f563cee..1567bca 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -10,8 +10,11 @@ import org.interpss.numeric.datatype.Complex3x3; import org.ipss.threePhase.basic.LineConfiguration; import org.ipss.threePhase.data_parser.OpenDSSDataParser; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.junit.Test; +import com.interpss.core.net.Bus; + public class TestOpenDSSDataParser { //@Test @@ -97,7 +100,17 @@ public void testLineParser(){ OpenDSSDataParser parser = new OpenDSSDataParser(); parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master.dss"); + + DStabNetwork3Phase distNet = parser.getDistNetwork(); + + System.out.println(parser.getDistNetwork().toString()); + System.out.println("total number of buses: "+distNet.getNoActiveBus()); +// assertTrue(distNet.getNoActiveBus()==123); + + for(Bus b: distNet.getBusList()){ + System.out.println(b.getId()); + } } From 875bee4ebe71a489b4cb53e2f285a51f87dccf63 Mon Sep 17 00:00:00 2001 From: thuang Date: Sun, 30 Apr 2017 17:49:47 -0700 Subject: [PATCH 14/36] separate 1-phase and 3-phase loads --- .../org/ipss/threePhase/basic/Load1Phase.java | 64 +++++++ .../org/ipss/threePhase/basic/Load3Phase.java | 21 ++- .../threePhase/basic/impl/Load1PhaseImpl.java | 162 ++++++++++++++++++ .../threePhase/basic/impl/Load3PhaseImpl.java | 18 +- 4 files changed, 261 insertions(+), 4 deletions(-) create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java new file mode 100644 index 0000000..d7352b7 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java @@ -0,0 +1,64 @@ +package org.ipss.threePhase.basic; + +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Complex3x3; + +import com.interpss.core.aclf.AclfLoad; +import com.interpss.core.acsc.PhaseCode; + +public interface Load1Phase extends AclfLoad { + + public void setPhaseCode (PhaseCode phCode); + + public PhaseCode getPhaseCode (); + + /** + * The Norton equivalent admittance. Used in power flow and short circuit analysis. + * @return + */ + public Complex3x3 getEquivYabc(); + + /** + * calculate the equivalent current injection of the load, mainly used in power flow solution. + * @param vabc + * @return + */ + public Complex3x1 getEquivCurrInj(Complex3x1 vabc); + + /** + * set the load model type, such as constant PQ, constant current, constant impedance, etc. + * @param loadModelType + */ + public void setLoadModelType(DistLoadType loadModelType); + + /** + * get the load model type, such as constant PQ, constant current, constant impedance, etc. + * @return + */ + public DistLoadType getLoadModelType(); + + /** + * set the load connection type. The connection type could be single phase wye, single phase delta, three phase wye and three phase delta. + * @param loadConnectType + */ + public void setLoadConnectionType(LoadConnectionType loadConnectType); + + /** + * get the load connection type. The connection type could be single phase wye, single phase delta, three phase wye and three phase delta. + * @return + */ + public LoadConnectionType getLoadConnectionType(); + + /** + * set the nominal KV level of the load + * @param ratedkV + */ + public void setNominalKV(double ratedkV); + + /** + * return the nominal KV level of the load + * @return + */ + public double getNominalKV(); + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java index 13a58b9..f5aa08a 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java @@ -9,6 +9,9 @@ public interface Load3Phase extends AclfLoad { + public void setPhaseCode (PhaseCode phCode); + + public PhaseCode getPhaseCode (); /** * calcuate the Yabc from Y120 * @param y1 equivalent positive sequence admittance of the load which is not represented by dynamic load @@ -30,7 +33,7 @@ public interface Load3Phase extends AclfLoad { /** - * + * set three-phase load * @param threePhaseLoad three phase loads in pu * @return */ @@ -38,14 +41,20 @@ public interface Load3Phase extends AclfLoad { /** - * + * get single-phase load * @param phase * @return */ public Complex getPhaseLoad(PhaseCode phase); + /** + * + * @param phaseLoad + * @param phase + */ public void setPhaseLoad(Complex phaseLoad, PhaseCode phase); + /** * calculate the equivalent current injection of the load, used in power flow solution * @param vabc @@ -77,8 +86,16 @@ public interface Load3Phase extends AclfLoad { */ public LoadConnectionType getLoadConnectionType(); + /** + * set the nominal KV level of the load + * @param ratedkV + */ public void setNominalKV(double ratedkV); + /** + * return the nominal KV level of the load + * @return + */ public double getNominalKV(); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java new file mode 100644 index 0000000..5e65c4c --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java @@ -0,0 +1,162 @@ +package org.ipss.threePhase.basic.impl; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Complex3x3; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.DistLoadType; +import org.ipss.threePhase.basic.Load1Phase; +import org.ipss.threePhase.basic.LoadConnectionType; + +import com.interpss.core.aclf.impl.AclfLoadImpl; +import com.interpss.core.acsc.PhaseCode; + +public class Load1PhaseImpl extends AclfLoadImpl implements Load1Phase { + + DistLoadType loadType = DistLoadType.CONST_PQ; // by default constant PQ + LoadConnectionType loadConnectType = LoadConnectionType.Single_Phase_Wye; // by default three-phase wye; + double nominalKV = 0; + + PhaseCode ph = PhaseCode.A; //connected phase(s) + + Complex3x3 equivYabc = new Complex3x3(); + + Complex3x1 equivCurInj = null; + + + @Override + public void setPhaseCode(PhaseCode phCode) { + this.ph = phCode; + + } + + @Override + public PhaseCode getPhaseCode() { + + return this.ph; + } + + @Override + public Complex3x3 getEquivYabc() { + + return this.equivYabc; + } + + @Override + public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { + equivCurInj = new Complex3x1(); + + Bus3Phase bus = ((Bus3Phase)this.getParentBus()); + + + Complex vt = null; + double vmag=1.0; + switch (this.loadConnectType){ + case Single_Phase_Wye: + if(this.ph==PhaseCode.A){ + vt = vabc.a_0; + vmag = vt.abs(); + equivCurInj.a_0=this.getLoad(vmag).divide(vt).conjugate().multiply(-1); + } + else if(this.ph==PhaseCode.B){ + + vt = vabc.b_1; + vmag = vt.abs(); + equivCurInj.b_1=this.getLoad(vmag).divide(vt).conjugate().multiply(-1); + } + else if(this.ph==PhaseCode.C){ + + vt = vabc.c_2; + vmag = vt.abs(); + equivCurInj.c_2=this.getLoad(vmag).divide(vt).conjugate().multiply(-1); + + } + else{ + throw new Error("Connection type and phases are not consisent!! Bus, load id,connectType, phases: " + +bus.getId()+","+this.getId()+","+this.loadConnectType+","+this.ph); + } + + + break; + + /* + * phase1 + * 0------- + * | + * load + * phase2 | + * 0------- + */ + case Single_Phase_Delta: + if(this.ph==PhaseCode.AB){ + vt=vabc.a_0.subtract(vabc.b_1); + vmag = vt.abs(); + equivCurInj.a_0=this.getLoad(vmag).divide(vt).conjugate().multiply(-1); + equivCurInj.b_1=equivCurInj.a_0.multiply(-1); + + } + else if(this.ph==PhaseCode.BC){ + vt = vabc.b_1.subtract(vabc.c_2); + vmag = vt.abs(); + equivCurInj.b_1=this.getLoad(vmag).divide(vt).conjugate().multiply(-1); + equivCurInj.c_2=equivCurInj.b_1.multiply(-1); + } + else if(this.ph==PhaseCode.AC){ + vt = vabc.a_0.subtract(vabc.c_2); + vmag = vt.abs(); + equivCurInj.a_0=this.getLoad(vmag).divide(vt).conjugate().multiply(-1); + equivCurInj.c_2=equivCurInj.a_0.multiply(-1); + } + else{ + throw new Error("Connection type and phases are not consisent!! Bus, load id,connectType, phases: " + +bus.getId()+","+this.getId()+","+this.loadConnectType+","+this.ph); + } + + break; + + default: + throw new Error("No supported load connection type:"+this.loadConnectType); + + } + + + return equivCurInj; + } + + @Override + public void setLoadModelType(DistLoadType loadModelType) { + this.loadType = loadModelType; + + } + + @Override + public DistLoadType getLoadModelType() { + + return this.loadType; + } + + @Override + public void setLoadConnectionType(LoadConnectionType loadConnectType) { + this.loadConnectType = loadConnectType; + + } + + @Override + public LoadConnectionType getLoadConnectionType() { + + return this.loadConnectType; + } + + @Override + public void setNominalKV(double ratedkV) { + this.nominalKV = ratedkV; + + } + + @Override + public double getNominalKV() { + + return this.nominalKV; + } + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java index afb3e04..1b4678e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java @@ -20,8 +20,9 @@ public class Load3PhaseImpl extends AclfLoadImpl implements Load3Phase { Complex3x1 ph3Load = new Complex3x1(); Complex3x3 equivYabc = new Complex3x3(); - //TODO - // ADD load connection type, either wye- or delta-connected + PhaseCode ph = PhaseCode.ABC; + // ADD load connection type, either wye- or delta-connected + private Complex3x1 equivCurInj = null; @@ -117,4 +118,17 @@ public double getNominalKV() { return this.nominalKV; } + @Override + public void setPhaseCode(PhaseCode phCode) { + this.ph = phCode; + + } + + @Override + public PhaseCode getPhaseCode() { + + return this.ph; + } + + } From d37d8082bc57553ae26e0061ef75105943f75a11 Mon Sep 17 00:00:00 2001 From: thuang Date: Sun, 30 Apr 2017 18:18:27 -0700 Subject: [PATCH 15/36] refactor 3phase load and update the load parser --- .../org/ipss/threePhase/basic/Load3Phase.java | 54 +----------- .../threePhase/basic/impl/Load3PhaseImpl.java | 84 +++++++++---------- .../data_parser/OpenDSSLoadParser.java | 32 +++++-- 3 files changed, 66 insertions(+), 104 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java index f5aa08a..40d89a1 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java @@ -7,11 +7,9 @@ import com.interpss.core.aclf.AclfLoad; import com.interpss.core.acsc.PhaseCode; -public interface Load3Phase extends AclfLoad { +public interface Load3Phase extends Load1Phase { - public void setPhaseCode (PhaseCode phCode); - public PhaseCode getPhaseCode (); /** * calcuate the Yabc from Y120 * @param y1 equivalent positive sequence admittance of the load which is not represented by dynamic load @@ -23,12 +21,7 @@ public interface Load3Phase extends AclfLoad { * get three phase load equivalent 3x3 admittance matrix in pu * @return */ - public Complex3x3 getEquivYabc(); - /** - * get three phase loads in pu - * @return - */ public Complex3x1 get3PhaseLoad(); @@ -55,47 +48,4 @@ public interface Load3Phase extends AclfLoad { public void setPhaseLoad(Complex phaseLoad, PhaseCode phase); - /** - * calculate the equivalent current injection of the load, used in power flow solution - * @param vabc - * @return - */ - public Complex3x1 getEquivCurrInj(Complex3x1 vabc); - - /** - * set the load model type, such as constant PQ, constant current, constant impedance, etc. - * @param loadModelType - */ - public void setLoadModelType(DistLoadType loadModelType); - - /** - * get the load model type, such as constant PQ, constant current, constant impedance, etc. - * @return - */ - public DistLoadType getLoadModelType(); - - /** - * set the load connection type. The connection type could be single phase wye, single phase delta, three phase wye and three phase delta. - * @param loadConnectType - */ - public void setLoadConnectionType(LoadConnectionType loadConnectType); - - /** - * get the load connection type. The connection type could be single phase wye, single phase delta, three phase wye and three phase delta. - * @return - */ - public LoadConnectionType getLoadConnectionType(); - - /** - * set the nominal KV level of the load - * @param ratedkV - */ - public void setNominalKV(double ratedkV); - - /** - * return the nominal KV level of the load - * @return - */ - public double getNominalKV(); - -} + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java index 1b4678e..1c83fc1 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java @@ -5,13 +5,14 @@ import org.interpss.numeric.datatype.Complex3x3; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.basic.DistLoadType; +import org.ipss.threePhase.basic.Load1Phase; import org.ipss.threePhase.basic.Load3Phase; import org.ipss.threePhase.basic.LoadConnectionType; import com.interpss.core.aclf.impl.AclfLoadImpl; import com.interpss.core.acsc.PhaseCode; -public class Load3PhaseImpl extends AclfLoadImpl implements Load3Phase { +public class Load3PhaseImpl extends Load1PhaseImpl implements Load3Phase { DistLoadType loadType = DistLoadType.CONST_PQ; // by default constant PQ LoadConnectionType loadConnectType = LoadConnectionType.Three_Phase_Wye; // by default three-phase wye; @@ -80,55 +81,50 @@ public void initEquivYabc(Complex y1, Complex y2, Complex y0) { @Override public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { - return equivCurInj = ph3Load.divide(vabc).conjugate().multiply(-1.0); - } - - @Override - public void setLoadModelType(DistLoadType loadModelType) { - this.loadType = loadModelType; - - } - - @Override - public DistLoadType getLoadModelType() { - return this.loadType; - } - - @Override - public void setLoadConnectionType(LoadConnectionType loadConnectType) { - this.loadConnectType = loadConnectType; - - } - - @Override - public LoadConnectionType getLoadConnectionType() { + Complex3x1 loadPQ = ph3Load; - return this.loadConnectType; - } - - @Override - public void setNominalKV(double ratedkV) { - this.nominalKV = ratedkV; - } - - @Override - public double getNominalKV() { + switch (this.loadConnectType){ + case Three_Phase_Wye: + if(this.loadType==DistLoadType.CONST_PQ){ + // default + } + else if(this.loadType==DistLoadType.CONST_I){ + loadPQ.a_0 = ph3Load.a_0.multiply(vabc.a_0.abs()); + loadPQ.b_1 = ph3Load.b_1.multiply(vabc.b_1.abs()); + loadPQ.c_2 = ph3Load.c_2.multiply(vabc.c_2.abs()); + } + else if(this.loadType==DistLoadType.CONST_Z){ + double va = vabc.a_0.abs(); + double vb = vabc.b_1.abs(); + double vc = vabc.c_2.abs(); + loadPQ.a_0 = ph3Load.a_0.multiply(va*va); + loadPQ.b_1 = ph3Load.b_1.multiply(vb*vb); + loadPQ.c_2 = ph3Load.c_2.multiply(vc*vc); + } + else{ + throw new Error("Load model type not supported yet!! Bus, load id,model type, phases: " + +this.getParentBus().getId()+","+this.getId()+","+this.loadType+","+this.ph); + } + + + break; + case Three_Phase_Delta: + throw new Error("Connection type not supported yet!! Bus, load id,connectType, phases: " + +this.getParentBus().getId()+","+this.getId()+","+this.loadConnectType+","+this.ph); + + default: + + throw new Error("Connection type and phases are not consisent!! Bus, load id,connectType, phases: " + +this.getParentBus().getId()+","+this.getId()+","+this.loadConnectType+","+this.ph); + + } - return this.nominalKV; - } - - @Override - public void setPhaseCode(PhaseCode phCode) { - this.ph = phCode; + return equivCurInj = loadPQ.divide(vabc).conjugate().multiply(-1.0); } - @Override - public PhaseCode getPhaseCode() { - - return this.ph; - } + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java index 18e79ca..360416e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java @@ -1,10 +1,13 @@ package org.ipss.threePhase.data_parser; import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.basic.DistLoadType; +import org.ipss.threePhase.basic.Load1Phase; import org.ipss.threePhase.basic.Load3Phase; import org.ipss.threePhase.basic.LoadConnectionType; +import org.ipss.threePhase.basic.impl.Load1PhaseImpl; import org.ipss.threePhase.basic.impl.Load3PhaseImpl; import com.interpss.common.exp.InterpssException; @@ -126,7 +129,11 @@ else if(loadStrAry[i].startsWith("PF=")||loadStrAry[i].startsWith("pf=")){ //get the bus object Bus3Phase bus = (Bus3Phase) this.dataParser.getDistNetwork().getBus(busName); - Load3Phase load= new Load3PhaseImpl(); + Load1Phase load= null; + if(phaseNum==3) + load= new Load3PhaseImpl(); + else + load= new Load1PhaseImpl(); // rated KV load.setNominalKV(nominalKV); @@ -134,15 +141,24 @@ else if(loadStrAry[i].startsWith("PF=")||loadStrAry[i].startsWith("pf=")){ //load model type if(modelType==1){ load.setLoadModelType(DistLoadType.CONST_PQ); - + if(phaseNum==3) + ((Load3Phase)load).set3PhaseLoad(new Complex3x1(loadPQ.divide(3),loadPQ.divide(3),loadPQ.divide(3))); + else + load.setLoadCP(loadPQ); } else if(modelType==2){ load.setLoadModelType(DistLoadType.CONST_Z); - + if(phaseNum==3) + ((Load3Phase)load).set3PhaseLoad(new Complex3x1(loadPQ.divide(3),loadPQ.divide(3),loadPQ.divide(3))); + else + load.setLoadCZ(loadPQ); } else if(modelType==5){ load.setLoadModelType(DistLoadType.CONST_I); - + if(phaseNum==3) + ((Load3Phase)load).set3PhaseLoad(new Complex3x1(loadPQ.divide(3),loadPQ.divide(3),loadPQ.divide(3))); + else + load.setLoadCI(loadPQ); } else{ no_error = false; @@ -168,8 +184,6 @@ else if(phaseNum==2){ } else if(phaseNum==1){ - - if(connectionType.equalsIgnoreCase("wye")){ load.setLoadConnectionType(LoadConnectionType.Single_Phase_Wye); @@ -189,8 +203,10 @@ else if(connectionType.equalsIgnoreCase("delta")){ } - - bus.getThreePhaseLoadList().add(load); + if(phaseNum==1) + bus.getContributeLoadList().add(load); + else if(phaseNum==3) + bus.getThreePhaseLoadList().add((Load3Phase) load); return no_error; From ae8dcab4023f678886082c3a57030ce9a6c3e7ab Mon Sep 17 00:00:00 2001 From: thuang Date: Mon, 1 May 2017 12:05:26 -0700 Subject: [PATCH 16/36] completed the first testing of the data adapter before data conversion --- .../ipss/threePhase/basic/DistLoadType.java | 6 +- .../org/ipss/threePhase/basic/Load1Phase.java | 14 +- .../threePhase/basic/impl/Load1PhaseImpl.java | 25 +- .../threePhase/basic/impl/Load3PhaseImpl.java | 15 +- .../data_parser/OpenDSSDataParser.java | 2 + .../data_parser/OpenDSSLineParser.java | 2 +- .../data_parser/OpenDSSLoadParser.java | 58 +- .../data_parser/OpenDSSTransformerParser.java | 47 +- .../test/TestOpenDSSDataParser.java | 130 +- .../feeder/IEEE123/ieee123_netString.dat | 7957 +++++++++++++++++ 10 files changed, 8206 insertions(+), 50 deletions(-) create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java index de26108..47d3e39 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java @@ -11,6 +11,6 @@ 7:Const P, Fixed Impedance Q 8:ZIPV (7 values) */ -public enum DistLoadType { - CONST_PQ, CONST_I,CONST_Z, CONST_P_QUAD_Q, LINEAR_P_QUAD_Q,CONST_P_FIXED_Q,CONST_P_FIXED_Z_Q,ZIP -} +//public enum DistLoadType { +// CONST_PQ, CONST_I,CONST_Z, CONST_P_QUAD_Q, LINEAR_P_QUAD_Q,CONST_P_FIXED_Q,CONST_P_FIXED_Z_Q,ZIP +//} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java index d7352b7..46cc27e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java @@ -29,13 +29,13 @@ public interface Load1Phase extends AclfLoad { * set the load model type, such as constant PQ, constant current, constant impedance, etc. * @param loadModelType */ - public void setLoadModelType(DistLoadType loadModelType); - - /** - * get the load model type, such as constant PQ, constant current, constant impedance, etc. - * @return - */ - public DistLoadType getLoadModelType(); +// public void setLoadModelType(DistLoadType loadModelType); +// +// /** +// * get the load model type, such as constant PQ, constant current, constant impedance, etc. +// * @return +// */ +// public DistLoadType getLoadModelType(); /** * set the load connection type. The connection type could be single phase wye, single phase delta, three phase wye and three phase delta. diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java index 5e65c4c..91e352b 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java @@ -4,7 +4,6 @@ import org.interpss.numeric.datatype.Complex3x1; import org.interpss.numeric.datatype.Complex3x3; import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.DistLoadType; import org.ipss.threePhase.basic.Load1Phase; import org.ipss.threePhase.basic.LoadConnectionType; @@ -13,7 +12,7 @@ public class Load1PhaseImpl extends AclfLoadImpl implements Load1Phase { - DistLoadType loadType = DistLoadType.CONST_PQ; // by default constant PQ + LoadConnectionType loadConnectType = LoadConnectionType.Single_Phase_Wye; // by default three-phase wye; double nominalKV = 0; @@ -123,17 +122,17 @@ else if(this.ph==PhaseCode.AC){ return equivCurInj; } - @Override - public void setLoadModelType(DistLoadType loadModelType) { - this.loadType = loadModelType; - - } - - @Override - public DistLoadType getLoadModelType() { - - return this.loadType; - } +// @Override +// public void setLoadModelType(DistLoadType loadModelType) { +// this.loadType = loadModelType; +// +// } +// +// @Override +// public DistLoadType getLoadModelType() { +// +// return this.loadType; +// } @Override public void setLoadConnectionType(LoadConnectionType loadConnectType) { diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java index 1c83fc1..0a81e4c 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java @@ -4,17 +4,17 @@ import org.interpss.numeric.datatype.Complex3x1; import org.interpss.numeric.datatype.Complex3x3; import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.DistLoadType; import org.ipss.threePhase.basic.Load1Phase; import org.ipss.threePhase.basic.Load3Phase; import org.ipss.threePhase.basic.LoadConnectionType; +import com.interpss.core.aclf.AclfLoadCode; import com.interpss.core.aclf.impl.AclfLoadImpl; import com.interpss.core.acsc.PhaseCode; public class Load3PhaseImpl extends Load1PhaseImpl implements Load3Phase { - DistLoadType loadType = DistLoadType.CONST_PQ; // by default constant PQ + LoadConnectionType loadConnectType = LoadConnectionType.Three_Phase_Wye; // by default three-phase wye; double nominalKV = 0; @@ -83,18 +83,21 @@ public void initEquivYabc(Complex y1, Complex y2, Complex y0) { public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { Complex3x1 loadPQ = ph3Load; + if(this.code ==AclfLoadCode.NON_LOAD){ + code = AclfLoadCode.CONST_P; // by default constant PQ + } switch (this.loadConnectType){ case Three_Phase_Wye: - if(this.loadType==DistLoadType.CONST_PQ){ + if(this.code==AclfLoadCode.CONST_P){ // default } - else if(this.loadType==DistLoadType.CONST_I){ + else if(this.code==AclfLoadCode.CONST_I){ loadPQ.a_0 = ph3Load.a_0.multiply(vabc.a_0.abs()); loadPQ.b_1 = ph3Load.b_1.multiply(vabc.b_1.abs()); loadPQ.c_2 = ph3Load.c_2.multiply(vabc.c_2.abs()); } - else if(this.loadType==DistLoadType.CONST_Z){ + else if(this.code==AclfLoadCode.CONST_Z){ double va = vabc.a_0.abs(); double vb = vabc.b_1.abs(); double vc = vabc.c_2.abs(); @@ -104,7 +107,7 @@ else if(this.loadType==DistLoadType.CONST_Z){ } else{ throw new Error("Load model type not supported yet!! Bus, load id,model type, phases: " - +this.getParentBus().getId()+","+this.getId()+","+this.loadType+","+this.ph); + +this.getParentBus().getId()+","+this.getId()+","+this.code+","+this.ph); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 59c0ce0..56f186b 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -20,6 +20,7 @@ import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.ipss.threePhase.util.ThreePhaseObjectFactory; +import com.interpss.core.aclf.AclfGenCode; import com.interpss.core.net.Branch; import com.interpss.core.net.NetworkType; @@ -187,6 +188,7 @@ else if(tempAry2[i].contains("pu=")){ if(distNet.getBus(sourceBusId)==null) sourceBus = ThreePhaseObjectFactory.create3PDStabBus(sourceBusId, distNet); + sourceBus.setGenCode(AclfGenCode.SWING); sourceBus.setBaseVoltage(basekv, UnitType.kV); sourceBus.setVoltageMag(basekv); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index fb20728..85d4dc7 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -59,7 +59,7 @@ public boolean parseLineData(String lineStr) throws InterpssException{ for(int i = 0;i150r(0) + number: 0 + name: reg1a + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.0010 + Ratio : from side 4160.0000 to side 4160.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j0.00076 pu 0.0000 + j75.96154 kva + p+jq(t->f) : 0.0000 + j-0.00018 pu 0.0000 + j-18.25999 kva + current : 0.0000 + j-0.00018 pu 2.53423 Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 149->1(1) + number: 0 + name: l115 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 1->2(1) + number: 0 + name: l1 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 1->3(1) + number: 0 + name: l2 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 1->7(1) + number: 0 + name: l3 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 3->4(1) + number: 0 + name: l4 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 3->5(1) + number: 0 + name: l5 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 5->6(1) + number: 0 + name: l6 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 7->8(1) + number: 0 + name: l7 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 8->12(1) + number: 0 + name: l8 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 8->9(1) + number: 0 + name: l9 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 8->13(1) + number: 0 + name: l10 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 9r->14(1) + number: 0 + name: l11 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 13->34(1) + number: 0 + name: l12 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 13->18(1) + number: 0 + name: l13 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 14->11(1) + number: 0 + name: l14 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 14->10(1) + number: 0 + name: l15 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 15->16(1) + number: 0 + name: l16 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 15->17(1) + number: 0 + name: l17 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 18->19(1) + number: 0 + name: l18 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 18->21(1) + number: 0 + name: l19 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 19->20(1) + number: 0 + name: l20 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 21->22(1) + number: 0 + name: l21 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 21->23(1) + number: 0 + name: l22 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 23->24(1) + number: 0 + name: l23 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 23->25(1) + number: 0 + name: l24 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 25r->26(1) + number: 0 + name: l25 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 25->28(1) + number: 0 + name: l26 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 26->27(1) + number: 0 + name: l27 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 26->31(1) + number: 0 + name: l28 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 27->33(1) + number: 0 + name: l29 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 28->29(1) + number: 0 + name: l30 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 29->30(1) + number: 0 + name: l31 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 30->250(1) + number: 0 + name: l32 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 31->32(1) + number: 0 + name: l33 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 34->15(1) + number: 0 + name: l34 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 35->36(1) + number: 0 + name: l35 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 35->40(1) + number: 0 + name: l36 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 36->37(1) + number: 0 + name: l37 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 36->38(1) + number: 0 + name: l38 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 38->39(1) + number: 0 + name: l39 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 40->41(1) + number: 0 + name: l40 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 40->42(1) + number: 0 + name: l41 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 42->43(1) + number: 0 + name: l42 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 42->44(1) + number: 0 + name: l43 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 44->45(1) + number: 0 + name: l44 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 44->47(1) + number: 0 + name: l45 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 45->46(1) + number: 0 + name: l46 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 47->48(1) + number: 0 + name: l47 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 47->49(1) + number: 0 + name: l48 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 49->50(1) + number: 0 + name: l49 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 50->51(1) + number: 0 + name: l50 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 51->151(1) + number: 0 + name: l51 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 52->53(1) + number: 0 + name: l52 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 53->54(1) + number: 0 + name: l53 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 54->55(1) + number: 0 + name: l54 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 54->57(1) + number: 0 + name: l55 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 55->56(1) + number: 0 + name: l56 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 57->58(1) + number: 0 + name: l57 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 57->60(1) + number: 0 + name: l58 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 58->59(1) + number: 0 + name: l59 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 60->61(1) + number: 0 + name: l60 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 60->62(1) + number: 0 + name: l61 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 62->63(1) + number: 0 + name: l62 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 63->64(1) + number: 0 + name: l63 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 64->65(1) + number: 0 + name: l64 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 65->66(1) + number: 0 + name: l65 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 67->68(1) + number: 0 + name: l66 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 67->72(1) + number: 0 + name: l67 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 67->97(1) + number: 0 + name: l68 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 68->69(1) + number: 0 + name: l69 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 69->70(1) + number: 0 + name: l70 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 70->71(1) + number: 0 + name: l71 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 72->73(1) + number: 0 + name: l72 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 72->76(1) + number: 0 + name: l73 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 73->74(1) + number: 0 + name: l74 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 74->75(1) + number: 0 + name: l75 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 76->77(1) + number: 0 + name: l76 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 76->86(1) + number: 0 + name: l77 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 77->78(1) + number: 0 + name: l78 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 78->79(1) + number: 0 + name: l79 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 78->80(1) + number: 0 + name: l80 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 80->81(1) + number: 0 + name: l81 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 81->82(1) + number: 0 + name: l82 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 81->84(1) + number: 0 + name: l83 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 82->83(1) + number: 0 + name: l84 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 84->85(1) + number: 0 + name: l85 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 86->87(1) + number: 0 + name: l86 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 87->88(1) + number: 0 + name: l87 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 87->89(1) + number: 0 + name: l88 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 89->90(1) + number: 0 + name: l89 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 89->91(1) + number: 0 + name: l90 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 91->92(1) + number: 0 + name: l91 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 91->93(1) + number: 0 + name: l92 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 93->94(1) + number: 0 + name: l93 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 93->95(1) + number: 0 + name: l94 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 95->96(1) + number: 0 + name: l95 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 97->98(1) + number: 0 + name: l96 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 98->99(1) + number: 0 + name: l97 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 99->100(1) + number: 0 + name: l98 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 100->450(1) + number: 0 + name: l99 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 197->101(1) + number: 0 + name: l118 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 101->102(1) + number: 0 + name: l100 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 101->105(1) + number: 0 + name: l101 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 102->103(1) + number: 0 + name: l102 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 103->104(1) + number: 0 + name: l103 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 105->106(1) + number: 0 + name: l104 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 105->108(1) + number: 0 + name: l105 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 106->107(1) + number: 0 + name: l106 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 108->109(1) + number: 0 + name: l107 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 108->300(1) + number: 0 + name: l108 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 109->110(1) + number: 0 + name: l109 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 110->111(1) + number: 0 + name: l110 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 110->112(1) + number: 0 + name: l111 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 112->113(1) + number: 0 + name: l112 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 113->114(1) + number: 0 + name: l113 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 135->35(1) + number: 0 + name: l114 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 152->52(1) + number: 0 + name: l116 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 160r->67(1) + number: 0 + name: l117 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 150r->149(1) + number: 0 + name: sw1 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 13->152(1) + number: 0 + name: sw2 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 18->135(1) + number: 0 + name: sw3 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 60->160(1) + number: 0 + name: sw4 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 97->197(1) + number: 0 + name: sw5 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 61->61s(1) + number: 0 + name: sw6 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 151->300_open(1) + number: 0 + name: sw7 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 54->94_open(1) + number: 0 + name: sw8 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 61s->610(0) + number: 0 + name: xfm1 + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j2.7200 + Ratio : from side 4160.0000 to side 480.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j-0.0000 pu 0.0000 + j-0.01629 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.14116 kva + current : 0.0000 + j0.0000 pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: Delta + xfrToConnectCode: Delta + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 9->9r(0) + number: 0 + name: reg2a + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.0100 + Ratio : from side 2402.0000 to side 2402.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + current : 0.0000 + j0.0000 pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 25->25r(0) + number: 0 + name: reg3a + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.0100 + Ratio : from side 2402.0000 to side 2402.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + current : 0.0000 + j0.0000 pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 160->160r(0) + number: 0 + name: reg4a + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.0100 + Ratio : from side 2402.0000 to side 2402.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + current : 0.0000 + j0.0000 pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 25->25r(1) + number: 0 + name: reg3c + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.0100 + Ratio : from side 0.0000 to side 0.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 160->160r(1) + number: 0 + name: reg4b + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.0100 + Ratio : from side 0.0000 to side 0.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 160->160r(2) + number: 0 + name: reg4c + desc: + status: true (booleanFlag: false, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.0100 + Ratio : from side 0.0000 to side 0.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + From 50986d77d59e2cdf5b6b7373557d6bd375f8d213 Mon Sep 17 00:00:00 2001 From: thuang Date: Mon, 1 May 2017 14:02:40 -0700 Subject: [PATCH 17/36] calculated base voltages --- .../data_parser/OpenDSSDataParser.java | 101 +++++++++++++++++- .../DistributionPowerFlowAlgorithmImpl.java | 4 + .../test/TestOpenDSSDataParser.java | 44 ++++++++ 3 files changed, 146 insertions(+), 3 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 56f186b..7f8d0fe 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -7,7 +7,9 @@ import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Hashtable; +import java.util.LinkedList; import java.util.List; +import java.util.Queue; import org.ieee.odm.common.IFileReader; import org.ieee.odm.common.ODMException; @@ -20,8 +22,12 @@ import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.ipss.threePhase.util.ThreePhaseObjectFactory; +import com.interpss.common.exp.InterpssException; +import com.interpss.core.aclf.AclfBranch; +import com.interpss.core.aclf.AclfBus; import com.interpss.core.aclf.AclfGenCode; import com.interpss.core.net.Branch; +import com.interpss.core.net.Bus; import com.interpss.core.net.NetworkType; public class OpenDSSDataParser { @@ -451,13 +457,94 @@ else if(str.startsWith("redirect")||str.startsWith("Redirect")){ public boolean initNetwork(){ - boolean no_error = initBusBasekV() & convertBranchZYMatrixToPU(); + boolean no_error = calcVoltageBases() & convertActualValuesToPU(); return no_error; } - private boolean initBusBasekV(){ + public boolean calcVoltageBases(){ boolean no_error = true; - //TODO + Queue onceVisitedBuses = new LinkedList<>(); + + // find the source bus, which is the swing bus for radial feeders; + for(AclfBus b: distNet.getBusList()){ + if(b.isActive() && b.isSwing()){ + onceVisitedBuses.add((Bus3Phase) b); + b.setIntFlag(1); + } + else{ + b.setIntFlag(0); + b.setBooleanFlag(false); + } + } + + //make sure all internal branches are unvisited + for(AclfBranch bra:distNet.getBranchList()){ + bra.setBooleanFlag(false); + } + + // perform BFS and set the bus sortNumber + BFS(onceVisitedBuses); + + + + return no_error; + } + + + private void BFS (Queue onceVisitedBuses){ + int orderNumber = 0; + //Retrieves and removes the head of this queue, or returns null if this queue is empty. + while(!onceVisitedBuses.isEmpty()){ + Bus3Phase startingBus = onceVisitedBuses.poll(); + startingBus.setSortNumber(orderNumber++); + startingBus.setBooleanFlag(true); + startingBus.setIntFlag(2); + + if(startingBus!=null){ + for(Branch connectedBra: startingBus.getBranchList()){ + AclfBranch aclfBra = (AclfBranch) connectedBra; + if(!connectedBra.isBooleanFlag()){ + try { + Bus findBus = connectedBra.getOppositeBus(startingBus); + + //update status + connectedBra.setBooleanFlag(true); + + //for first time visited buses + if(findBus.getIntFlag()==0){ + findBus.setIntFlag(1); + onceVisitedBuses.add((Bus3Phase) findBus); + + //update the L-L basekV + if(aclfBra.isLine()){ + findBus.setBaseVoltage(startingBus.getBaseVoltage()); + } + else{ + //check from/ to relationship before using the turn ratio info + if(aclfBra.getFromBus().getId().equals(startingBus.getId())) + findBus.setBaseVoltage(startingBus.getBaseVoltage()*aclfBra.getToTurnRatio()/aclfBra.getFromTurnRatio()); + else + findBus.setBaseVoltage(startingBus.getBaseVoltage()*aclfBra.getFromTurnRatio()/aclfBra.getToTurnRatio()); + } + + } + } catch (InterpssException e) { + + e.printStackTrace(); + } + + } + } + + } + + } + } + + public boolean convertActualValuesToPU(){ + boolean no_error = convertBranchZYMatrixToPU()&&convertLoadCapacitorToPU(); + + //TODO set the distribution system mvabase to 10 MVA return no_error; } @@ -470,6 +557,14 @@ private boolean convertBranchZYMatrixToPU(){ return no_error; } + private boolean convertLoadCapacitorToPU(){ + boolean no_error = true; + + //TODO + + return no_error; + } + /** * skip all the comment lines (including in-line comments and block comments) to get the next data input line string, so that processing can be performed to check * if the next data input string is a valid input or only comments diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java index 22a5a39..389fd3e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java @@ -60,6 +60,10 @@ public boolean orderDistributionBuses(boolean radialOnly) { for(AclfBus b: distNet.getBusList()){ if(b.isActive() && b.isSwing()){ onceVisitedBuses.add((Bus3Phase) b); + b.setIntFlag(1); + } + else{ + b.setIntFlag(0); } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java index 076f5ed..5679e79 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -239,5 +239,49 @@ public void testDataParser(){ //4. test capacitor parser } + + @Test + public void testCalcBaseVoltage(){ + + IpssCorePlugin.init(); + IpssCorePlugin.setLoggerLevel(Level.INFO); + + OpenDSSDataParser parser = new OpenDSSDataParser(); + parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master.dss"); + + parser.calcVoltageBases(); + DStabNetwork3Phase distNet = parser.getDistNetwork(); + + System.out.println("bus Id, baseVoltage"); + double vll4160 = 4160.0; + double vll480 = 480.0; + double sumDiff = 0.0; + for(Bus b: distNet.getBusList()){ + //System.out.println(b.getId()+","+b.getBaseVoltage()); + if(b.getId().equals("610")) + sumDiff += b.getBaseVoltage()-vll480; + else + sumDiff += b.getBaseVoltage()-vll4160; + + } + + assertTrue(Math.abs(sumDiff)<1.0E-9); + } + + @Test + public void testConvertValuesToPU(){ + + IpssCorePlugin.init(); + IpssCorePlugin.setLoggerLevel(Level.INFO); + + OpenDSSDataParser parser = new OpenDSSDataParser(); + parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master.dss"); + + parser.calcVoltageBases(); + parser.convertActualValuesToPU(); + + + } + } From 62129063d29373dbb8805a0a636c4b20e01ac74a Mon Sep 17 00:00:00 2001 From: thuang Date: Mon, 1 May 2017 16:53:30 -0700 Subject: [PATCH 18/36] updated the load models and completed network data conversion --- .../ipss/threePhase/basic/Branch3Phase.java | 6 +- .../basic/impl/Branch3PhaseImpl.java | 14 ++ .../data_parser/OpenDSSDataParser.java | 96 +++++++++-- .../data_parser/OpenDSSTransformerParser.java | 47 ++++- .../test/TestOpenDSSDataParser.java | 160 +++++++++++++++++- .../threePhase/test/threePhaseTestSuite.java | 2 + 6 files changed, 296 insertions(+), 29 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Branch3Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Branch3Phase.java index 2fe2c39..6d52ad0 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Branch3Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Branch3Phase.java @@ -5,11 +5,15 @@ import org.interpss.numeric.datatype.Complex3x3; import com.interpss.core.acsc.AcscBranch; +import com.interpss.core.acsc.PhaseCode; import com.interpss.dstab.DStabBranch; public interface Branch3Phase extends DStabBranch{ - //TODO add phase info, + // phase code is currently used in the transformer; for lines, Zabc reflects the connection phases + public void setPhaseCode(PhaseCode phCode); + + public PhaseCode getPhaseCode(); public void setZabc(Complex3x3 Zabc); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Branch3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Branch3PhaseImpl.java index e76a6ef..76935a6 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Branch3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Branch3PhaseImpl.java @@ -10,10 +10,12 @@ import org.ipss.threePhase.basic.Branch3Phase; import org.ipss.threePhase.basic.Transformer3Phase; +import com.interpss.core.acsc.PhaseCode; import com.interpss.dstab.impl.DStabBranchImpl; public class Branch3PhaseImpl extends DStabBranchImpl implements Branch3Phase{ + private PhaseCode phaseCode = PhaseCode.ABC; private Complex3x3 Zabc =null; private Complex3x3 Yabc =null; private Complex3x3 fromShuntYabc =null; @@ -391,4 +393,16 @@ public void setCurrentAbcAtToSide(Complex3x1 IabcToBus) { } + @Override + public void setPhaseCode(PhaseCode phCode) { + this.phaseCode = phCode; + + } + + @Override + public PhaseCode getPhaseCode() { + + return this.phaseCode; + } + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 7f8d0fe..d9159a4 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -11,6 +11,7 @@ import java.util.List; import java.util.Queue; +import org.apache.commons.math3.complex.Complex; import org.ieee.odm.common.IFileReader; import org.ieee.odm.common.ODMException; import org.ieee.odm.common.ODMLogger; @@ -19,6 +20,8 @@ import org.ipss.threePhase.basic.Branch3Phase; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.basic.LineConfiguration; +import org.ipss.threePhase.basic.Load1Phase; +import org.ipss.threePhase.basic.Load3Phase; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.ipss.threePhase.util.ThreePhaseObjectFactory; @@ -26,9 +29,13 @@ import com.interpss.core.aclf.AclfBranch; import com.interpss.core.aclf.AclfBus; import com.interpss.core.aclf.AclfGenCode; +import com.interpss.core.aclf.AclfLoad; +import com.interpss.core.acsc.PhaseCode; import com.interpss.core.net.Branch; import com.interpss.core.net.Bus; import com.interpss.core.net.NetworkType; +import com.interpss.dstab.DStabBranch; +import com.interpss.dstab.DStabBus; public class OpenDSSDataParser { @@ -277,14 +284,8 @@ else if(str.startsWith("redirect")||str.startsWith("Redirect")){ } // end of if file name is not empty - - - - - //parse the lines, transformers, regulators, loads and capacitors - - - boolean initFlag=initNetwork(); + // we should separate the network initialization from the importing data stage to provide more flexibility to users + boolean initFlag= true;//initNetwork(); no_error=no_error&initFlag; @@ -457,7 +458,8 @@ else if(str.startsWith("redirect")||str.startsWith("Redirect")){ public boolean initNetwork(){ - boolean no_error = calcVoltageBases() & convertActualValuesToPU(); + double mvaBase = 10.0; // initial mvaBase + boolean no_error = calcVoltageBases() & convertActualValuesToPU(mvaBase); return no_error; } public boolean calcVoltageBases(){ @@ -541,26 +543,88 @@ private void BFS (Queue onceVisitedBuses){ } } - public boolean convertActualValuesToPU(){ - boolean no_error = convertBranchZYMatrixToPU()&&convertLoadCapacitorToPU(); + public boolean convertActualValuesToPU(double mvaBase){ - //TODO set the distribution system mvabase to 10 MVA + if(mvaBase>0) { + if(mvaBase>20){ + ODMLogger.getLogger().warning("The input mvaBase is beyond the normal range of [5, 20] MVA, input mvabase = "+mvaBase); + } + this.getDistNetwork().setBaseKva(mvaBase*1000.0); + } + else{ + ODMLogger.getLogger().severe("The input mvabase <= 0. mvabase = 10 MVA will be used"); + mvaBase = 10; + this.getDistNetwork().setBaseKva(mvaBase*1000.0); + } + + boolean no_error = convertBranchZYMatrixToPU()&&convertLoadCapacitorToPU(); return no_error; } private boolean convertBranchZYMatrixToPU(){ boolean no_error = true; - - //TODO + + double mvabase = this.getDistNetwork().getBaseMva(); + double vBase = 0.0, zBase = 0.0; + for(DStabBranch bra: this.getDistNetwork().getBranchList()){ + Branch3Phase bra3Phase = (Branch3Phase) bra; + + if(bra3Phase.isLine()){ + vBase = bra.getFromBus().getBaseVoltage(); + zBase = vBase*vBase*1.0E-6/mvabase; + + bra3Phase.setZabc(bra3Phase.getZabc().multiply(1.0/zBase)); + } + else if(bra3Phase.isXfr() || bra3Phase.isPSXfr()){ + // convert the Z to high voltage side + vBase = bra3Phase.getFromBus().getBaseVoltage()>=bra3Phase.getToBus().getBaseVoltage()? + bra3Phase.getFromBus().getBaseVoltage():bra3Phase.getToBus().getBaseVoltage(); + zBase = vBase*vBase*1.0E-6/mvabase; + bra3Phase.setZ(bra3Phase.getZ().divide(zBase)); + + // convert the turn ratios + double vllfactor = 1.0; + if(bra3Phase.getPhaseCode()!=PhaseCode.ABC){ + vllfactor = Math.sqrt(3); + } + bra3Phase.setFromTurnRatio(bra3Phase.getFromTurnRatio()*vllfactor /bra3Phase.getFromBus().getBaseVoltage()); + bra3Phase.setToTurnRatio(bra3Phase.getToTurnRatio()*vllfactor/bra3Phase.getToBus().getBaseVoltage()); + } + else{ + ODMLogger.getLogger().severe("Sepcial branch type is not supported, branchId = "+bra.getId()); + } + + } return no_error; } private boolean convertLoadCapacitorToPU(){ boolean no_error = true; - - //TODO + + double baseKVA3P = this.getDistNetwork().getBaseKva(); + double baseKVA1P = baseKVA3P/3.0; + + for(DStabBus b: this.getDistNetwork().getBusList()){ + + Bus3Phase bus3P = (Bus3Phase)b; + if(bus3P.getContributeLoadList().size()>0){ + for(AclfLoad load:bus3P.getContributeLoadList()){ + Load1Phase ld1P = (Load1Phase) load; + ld1P.setLoadCP(ld1P.getLoadCP().divide(baseKVA1P)); + ld1P.setLoadCI(ld1P.getLoadCI().divide(baseKVA1P)); + ld1P.setLoadCZ(ld1P.getLoadCZ().divide(baseKVA1P)); + } + } + + if(bus3P.getThreePhaseLoadList().size()>0){ + for(Load3Phase load3P:bus3P.getThreePhaseLoadList()){ + load3P.set3PhaseLoad(load3P.get3PhaseLoad().multiply(1.0/baseKVA1P)); + } + } + } + return no_error; } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java index 975b172..2997827 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java @@ -9,6 +9,7 @@ import com.interpss.common.exp.InterpssException; import com.interpss.core.aclf.AclfBranchCode; +import com.interpss.core.acsc.PhaseCode; import com.interpss.core.acsc.XfrConnectCode; import com.interpss.core.acsc.adpter.AcscXformer; @@ -133,6 +134,8 @@ else if(wdg2StrAry[i].contains("%r=")){ xfrBranch.setXfrRatedKVA(kva1); + //TODO to add the phase info to the Branch3Phase + AcscXformer xfr0 = acscXfrAptr.apply(xfrBranch); @@ -189,7 +192,7 @@ public boolean parseTransformerDataOneLine(String xfrStr) throws InterpssExcepti String fromBusId = "", toBusId = ""; String fromConnection="", toConnection = ""; String referenceXfrName = ""; - + String phase1 = "", phase2 = "",phase3 = ""; String[] xfrStrAry = xfrStr.trim().toLowerCase().split("\\s+(?![^\\[]*\\])"); @@ -214,15 +217,31 @@ else if(xfrStrAry[i].contains("buses=")){ String[] busIds = xfrStrAry[i].substring(startIdx,endIdx).trim().split("\\s+"); fromBusId = busIds[0]; if(fromBusId.contains(".")){ - int dotIdx = fromBusId.indexOf("."); - fromBusId = fromBusId.substring(0, dotIdx); + +// int dotIdx = fromBusId.indexOf("."); +// fromBusId = fromBusId.substring(0, dotIdx); + + String[] tempAry = fromBusId.split("\\."); + fromBusId = tempAry[0]; + + if(tempAry.length>1){ + phase1 = tempAry[1]; + } + else if(tempAry.length>2){ + phase2 = tempAry[2]; + } + else if(tempAry.length>3){ + phase3 = tempAry[3]; + } } toBusId = busIds[1]; if(toBusId.contains(".")){ - int dotIdx = toBusId.indexOf("."); - toBusId = toBusId.substring(0, dotIdx); +// int dotIdx = toBusId.indexOf("."); +// toBusId = toBusId.substring(0, dotIdx); + String[] tempAry = toBusId.split("\\."); + toBusId = tempAry[0]; } @@ -322,6 +341,24 @@ else if (xfrStrAry[i].contains("like=")){ xfrBranch.setFromTurnRatio(normKV1*1000.0); xfrBranch.setToTurnRatio(normKV2*1000.0); + //phase info + + if(phaseNum ==3){ + xfrBranch.setPhaseCode(PhaseCode.ABC); + } + else if(phaseNum ==1){ + if(phase1.equals("1")) + xfrBranch.setPhaseCode(PhaseCode.A); + else if(phase1.equals("2")) + xfrBranch.setPhaseCode(PhaseCode.B); + else if(phase1.equals("3")) + xfrBranch.setPhaseCode(PhaseCode.C); + else{ + throw new Error("Transformer connection phase currently must be either 1, 2 or 3. xfr #" +xfrId); + } + + } + // xfrBranch.getFromBus().setBaseVoltage(normKV1, UnitType.kV); // xfrBranch.getToBus().setBaseVoltage(normKV2, UnitType.kV); // diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java index 5679e79..b41a9d4 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -16,6 +16,7 @@ import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.basic.LineConfiguration; import org.ipss.threePhase.basic.Load1Phase; +import org.ipss.threePhase.basic.Load3Phase; import org.ipss.threePhase.basic.LoadConnectionType; import org.ipss.threePhase.data_parser.OpenDSSDataParser; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; @@ -132,9 +133,9 @@ public void testDataParser(){ System.out.println("total number of buses: "+distNet.getNoActiveBus()); // assertTrue(distNet.getNoActiveBus()==123); - for(Bus b: distNet.getBusList()){ - System.out.println(b.getId()); - } +// for(Bus b: distNet.getBusList()){ +// System.out.println(b.getId()); +// } //1. test lineParser //1.a Zabc, Yabc for 3phase line @@ -214,8 +215,10 @@ public void testDataParser(){ assertTrue(xfr20.getToConnect()==XfrConnectCode.WYE_SOLID_GROUNDED); //3. test load parser - - //New Load.S1a Bus1=1.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 + + /* 1-phase wye + * New Load.S1a Bus1=1.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 + */ Bus3Phase bus1 = (Bus3Phase) distNet.getBus("1"); Load1Phase ld_s1a= (Load1Phase) bus1.getContributeLoad("s1a"); assertTrue(ld_s1a.getLoadCP().subtract(new Complex(40,20)).abs()<1.0E-9); @@ -226,6 +229,7 @@ public void testDataParser(){ /* + * 1-phase delta * New Load.S35a Bus1=35.1.2 Phases=1 Conn=Delta Model=1 kV=4.160 kW=40.0 kvar=20.0 */ Bus3Phase bus35 = (Bus3Phase) distNet.getBus("35"); @@ -236,6 +240,20 @@ public void testDataParser(){ assertTrue(ld_s35a.getCode()==AclfLoadCode.CONST_P); assertTrue(ld_s35a.getPhaseCode()==PhaseCode.AB); + /* + * New Load.S48 Bus1=48 Phases=3 Conn=Wye Model=2 kV=4.160 kW=210.0 kVAR=150.0 + */ + Bus3Phase bus48 = (Bus3Phase) distNet.getBus("48"); + Load3Phase ld_s48= (Load3Phase) bus48.getThreePhaseLoadList().get(0); // only one load + System.out.println("ld_s48 = "+ld_s48.get3PhaseLoad().toString()); + assertTrue(ld_s48.get3PhaseLoad().a_0.subtract(new Complex(70.0,50.0)).abs()<1.0E-9); + assertTrue(ld_s48.get3PhaseLoad().b_1.subtract(new Complex(70,50)).abs()<1.0E-9); + assertTrue(ld_s48.get3PhaseLoad().c_2.subtract(new Complex(70,50)).abs()<1.0E-9); + assertTrue(ld_s48.getLoadConnectionType()==LoadConnectionType.Three_Phase_Wye); + assertTrue(Math.abs(ld_s48.getNominalKV()-4.160)<1.0E-9); + assertTrue(ld_s48.getCode()==AclfLoadCode.CONST_Z); + assertTrue(ld_s48.getPhaseCode()==PhaseCode.ABC); + //4. test capacitor parser } @@ -257,7 +275,7 @@ public void testCalcBaseVoltage(){ double vll480 = 480.0; double sumDiff = 0.0; for(Bus b: distNet.getBusList()){ - //System.out.println(b.getId()+","+b.getBaseVoltage()); + System.out.println(b.getId()+","+b.getBaseVoltage()); if(b.getId().equals("610")) sumDiff += b.getBaseVoltage()-vll480; else @@ -278,9 +296,137 @@ public void testConvertValuesToPU(){ parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master.dss"); parser.calcVoltageBases(); - parser.convertActualValuesToPU(); + double mvaBase = 10.0; + parser.convertActualValuesToPU(10.0); + + DStabNetwork3Phase distNet = parser.getDistNetwork(); + + + //1. test lineParser + //1.a Zabc, Yabc for 3phase line + + /*New Line.L10 Phases=3 Bus1=8.1.2.3 Bus2=13.1.2.3 LineCode=1 Length=0.3*/ + //NOTE: all are converted to lowercase + Branch3Phase line3phase = parser.getBranchByName("l10"); + double length = 0.3; + double zbase = 4.160*4.160/mvaBase; + + LineConfiguration lc1 = parser.getLineConfigTable().get("1"); + assertTrue(line3phase.getZabc().subtract(lc1.getZ3x3Matrix().multiply(length).multiply(1.0/zbase)).absMax()<1.0E-9); + + //1.b Zabc, Yabc for 1-phase and 2-phase lines + + //New Line.L27 Phases=2 Bus1=26.1.3 Bus2=27.1.3 LineCode=7 Length=0.275 + Branch3Phase line2phase = parser.getBranchByName("l27"); + System.out.println("L27 Zabc =" +line2phase.getZabc().toString()); + length = 0.275; + + LineConfiguration lc7 = parser.getLineConfigTable().get("7"); + assertTrue(line2phase.getZabc().aa.subtract(lc7.getZ3x3Matrix().aa.multiply(length).multiply(1.0/zbase)).abs()<1.0E-9); + assertTrue(line2phase.getZabc().ac.subtract(lc7.getZ3x3Matrix().ac.multiply(length).multiply(1.0/zbase)).abs()<1.0E-9); + assertTrue(line2phase.getZabc().cc.subtract(lc7.getZ3x3Matrix().cc.multiply(length).multiply(1.0/zbase)).abs()<1.0E-9); + assertTrue(line2phase.getZabc().ab.abs()<1.0E-9); + assertTrue(line2phase.getZabc().ba.abs()<1.0E-9); + + //New Line.L28 Phases=1 Bus1=26.3 Bus2=31.3 LineCode=11 Length=0.225 + Branch3Phase line1phase = parser.getBranchByName("l28"); + LineConfiguration lc11 = parser.getLineConfigTable().get("11"); + length = 0.225; + + assertTrue(line1phase.getZabc().cc.subtract(lc11.getZ3x3Matrix().cc.multiply(length).multiply(1.0/zbase)).abs()<1.0E-9); + assertTrue(line1phase.getZabc().bb.abs()<1.0E-9); + assertTrue(line1phase.getZabc().aa.abs()<1.0E-9); + assertTrue(line1phase.getZabc().ab.abs()<1.0E-9); + assertTrue(line1phase.getZabc().ac.abs()<1.0E-9); + + //2. test transformer parser + /* + * New Transformer.XFM1 Phases=3 Windings=2 Xhl=2.72 + ~ wdg=1 bus=61s conn=Delta kv=4.16 kva=150 %r=0.635 + ~ wdg=2 bus=610 conn=Delta kv=0.48 kva=150 %r=0.635 + */ + + Branch3Phase xfr1 = parser.getBranchByName("xfm1"); + assertTrue(xfr1.getZ().subtract(new Complex(0,2.72).multiply(1.0/zbase)).abs()<1.0E-9); + assertTrue(xfr1.getFromBus().getId().equals("61s")); + assertTrue(xfr1.getToBus().getId().equals("610")); + + //TODO in the future, could add the nominalKV info to the transformer + assertTrue(Math.abs(xfr1.getFromTurnRatio()/xfr1.getToTurnRatio()-1.0)<1.0E-6); + + + assertTrue(Math.abs(xfr1.getXfrRatedKVA()-150)<1.0E-6); + + AcscXformer xfr10 = acscXfrAptr.apply(xfr1); + assertTrue(xfr10.getFromConnect()==XfrConnectCode.DELTA); + assertTrue(xfr10.getToConnect()==XfrConnectCode.DELTA); + + /* + * new transformer.reg4a phases=1 windings=2 buses=[160.1 160r.1] conns=[wye wye] kvs=[2.402 2.402] kvas=[2000 2000] XHL=.01 %LoadLoss=0.00001 ppm=0.0 + */ + + Branch3Phase xfr2 = parser.getBranchByName("reg4a"); + assertTrue(xfr2.getZ().subtract(new Complex(0,0.01).multiply(1.0/zbase)).abs()<1.0E-9); + assertTrue(xfr2.getFromBus().getId().equals("160")); + assertTrue(xfr2.getToBus().getId().equals("160r")); + + double basevolt = 4160/Math.sqrt(3); + + //TODO in the future, could add the nominalKV info to the transformer + System.out.println("reg4a tap = "+xfr2.getFromTurnRatio()); + assertTrue(Math.abs(xfr2.getFromTurnRatio()-2402.0/basevolt)<1.0E-6); + assertTrue(Math.abs(xfr2.getToTurnRatio()-2402.0/basevolt)<1.0E-6); + + assertTrue(Math.abs(xfr2.getXfrRatedKVA()-2000)<1.0E-6); + + AcscXformer xfr20 = acscXfrAptr.apply(xfr2); + assertTrue(xfr20.getFromConnect()==XfrConnectCode.WYE_SOLID_GROUNDED); + assertTrue(xfr20.getToConnect()==XfrConnectCode.WYE_SOLID_GROUNDED); + + //3. test load parser + + /* 1-phase wye + * New Load.S1a Bus1=1.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 + */ + double baseKVA1P = distNet.getBaseKva()/3.0; + Bus3Phase bus1 = (Bus3Phase) distNet.getBus("1"); + Load1Phase ld_s1a= (Load1Phase) bus1.getContributeLoad("s1a"); + assertTrue(ld_s1a.getLoadCP().subtract(new Complex(40,20).divide(baseKVA1P)).abs()<1.0E-9); + assertTrue(ld_s1a.getLoadConnectionType()==LoadConnectionType.Single_Phase_Wye); + assertTrue(Math.abs(ld_s1a.getNominalKV()-2.4)<1.0E-9); + assertTrue(ld_s1a.getCode()==AclfLoadCode.CONST_P); + assertTrue(ld_s1a.getPhaseCode()==PhaseCode.A); + + + /* + * 1-phase delta + * New Load.S35a Bus1=35.1.2 Phases=1 Conn=Delta Model=1 kV=4.160 kW=40.0 kvar=20.0 + */ + Bus3Phase bus35 = (Bus3Phase) distNet.getBus("35"); + Load1Phase ld_s35a= (Load1Phase) bus35.getContributeLoad("s35a"); + assertTrue(ld_s35a.getLoadCP().subtract(new Complex(40,20).divide(baseKVA1P)).abs()<1.0E-9); + assertTrue(ld_s35a.getLoadConnectionType()==LoadConnectionType.Single_Phase_Delta); + assertTrue(Math.abs(ld_s35a.getNominalKV()-4.160)<1.0E-9); + assertTrue(ld_s35a.getCode()==AclfLoadCode.CONST_P); + assertTrue(ld_s35a.getPhaseCode()==PhaseCode.AB); + + /* + * New Load.S48 Bus1=48 Phases=3 Conn=Wye Model=2 kV=4.160 kW=210.0 kVAR=150.0 + */ + Bus3Phase bus48 = (Bus3Phase) distNet.getBus("48"); + Load3Phase ld_s48= (Load3Phase) bus48.getThreePhaseLoadList().get(0); // only one load + System.out.println("ld_s48 = "+ld_s48.get3PhaseLoad().toString()); + assertTrue(ld_s48.get3PhaseLoad().a_0.subtract(new Complex(70.0,50.0).divide(baseKVA1P)).abs()<1.0E-9); + assertTrue(ld_s48.get3PhaseLoad().b_1.subtract(new Complex(70,50).divide(baseKVA1P)).abs()<1.0E-9); + assertTrue(ld_s48.get3PhaseLoad().c_2.subtract(new Complex(70,50).divide(baseKVA1P)).abs()<1.0E-9); + assertTrue(ld_s48.getLoadConnectionType()==LoadConnectionType.Three_Phase_Wye); + assertTrue(Math.abs(ld_s48.getNominalKV()-4.160)<1.0E-9); + assertTrue(ld_s48.getCode()==AclfLoadCode.CONST_Z); + assertTrue(ld_s48.getPhaseCode()==PhaseCode.ABC); + + //4. test capacitor parser } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java index fffb6b4..134f210 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java @@ -15,6 +15,8 @@ TwoBus_3Phase_Test.class, ThreeBus_3Phase_Test.class, + //OpenDSS data adapter + TestOpenDSSDataParser.class, // Init from positive sequence load flow IEEE9Bus_3phase_LF_init_test.class, From e9889ed15614a72727541301a3c1b713b9a85d47 Mon Sep 17 00:00:00 2001 From: thuang Date: Tue, 2 May 2017 00:36:38 -0700 Subject: [PATCH 19/36] can run PF with IEEE123 case now, but still need to add capacitors --- .../threePhase/basic/impl/Bus3PhaseImpl.java | 26 ++- .../threePhase/basic/impl/Load1PhaseImpl.java | 10 +- .../data_parser/OpenDSSDataParser.java | 10 +- .../DistributionPowerFlowAlgorithmImpl.java | 12 +- .../test/TestIEEETestFeederPowerFlow.java | 69 ++++++ .../feeder/IEEE123/IEEE123Master_Modified.DSS | 221 ++++++++++++++++++ .../feeder/IEEE123/IEEE123Regulators2.DSS | 27 +++ 7 files changed, 362 insertions(+), 13 deletions(-) create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master_Modified.DSS create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Regulators2.DSS diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java index ac519e3..cd9445d 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java @@ -11,6 +11,7 @@ import org.ipss.threePhase.basic.Branch3Phase; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.basic.Gen3Phase; +import org.ipss.threePhase.basic.Load1Phase; import org.ipss.threePhase.basic.Load3Phase; import org.ipss.threePhase.dynamic.model.DStabGen3PhaseAdapter; import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; @@ -18,6 +19,7 @@ import org.ipss.threePhase.util.ThreeSeqLoadProcessor; import com.interpss.core.aclf.AclfGen; +import com.interpss.core.aclf.AclfLoad; import com.interpss.core.net.Branch; import com.interpss.dstab.DStabGen; import com.interpss.dstab.dynLoad.DynLoadModel; @@ -179,14 +181,32 @@ public List getThreePhaseLoadList() { private Complex3x1 calcLoad3PhEquivCurInj() { this.load3PhEquivCurInj = new Complex3x1(); - if(this.isLoad() && this.getThreePhaseLoadList().size()>0){ - if (Vabc == null ||Vabc.abs()<1.0E-5) - Vabc = new Complex3x1(new Complex(1,0),new Complex(-Math.sin(Math.PI/6),-Math.cos(Math.PI/6)),new Complex(-Math.sin(Math.PI/6),Math.cos(Math.PI/6))); + if (Vabc == null ||Vabc.abs()<1.0E-5) + Vabc = new Complex3x1(new Complex(1,0),new Complex(-Math.sin(Math.PI/6),-Math.cos(Math.PI/6)),new Complex(-Math.sin(Math.PI/6),Math.cos(Math.PI/6))); + + //single-phase loads + if(this.getContributeLoadList().size()>0){ + for(AclfLoad load: this.getContributeLoadList()){ + if(load instanceof Load1Phase){ + Load1Phase load1P = (Load1Phase) load; + this.load3PhEquivCurInj=this.load3PhEquivCurInj.add(load1P.getEquivCurrInj(Vabc)); + } + else{ + throw new Error("Load instance is not single-phase load! Bus, load = "+this.getId()+","+load.getId()); + } + } + } + + //three phase loads + if(this.getThreePhaseLoadList().size()>0){ + for(Load3Phase load:this.getThreePhaseLoadList()){ this.load3PhEquivCurInj=this.load3PhEquivCurInj.add(load.getEquivCurrInj(Vabc)); } } + + return this.load3PhEquivCurInj; } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java index 91e352b..48137ef 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java @@ -47,7 +47,9 @@ public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { Bus3Phase bus = ((Bus3Phase)this.getParentBus()); - + if(bus.getId().equals("113")){ + System.out.println("Debug bus equiv Current calculation"); + } Complex vt = null; double vmag=1.0; switch (this.loadConnectType){ @@ -89,20 +91,20 @@ else if(this.ph==PhaseCode.C){ case Single_Phase_Delta: if(this.ph==PhaseCode.AB){ vt=vabc.a_0.subtract(vabc.b_1); - vmag = vt.abs(); + vmag = vt.abs()/Math.sqrt(3); // the per unit is based on L-L Volt equivCurInj.a_0=this.getLoad(vmag).divide(vt).conjugate().multiply(-1); equivCurInj.b_1=equivCurInj.a_0.multiply(-1); } else if(this.ph==PhaseCode.BC){ vt = vabc.b_1.subtract(vabc.c_2); - vmag = vt.abs(); + vmag = vt.abs()/Math.sqrt(3);// the per unit is based on L-L Volt equivCurInj.b_1=this.getLoad(vmag).divide(vt).conjugate().multiply(-1); equivCurInj.c_2=equivCurInj.b_1.multiply(-1); } else if(this.ph==PhaseCode.AC){ vt = vabc.a_0.subtract(vabc.c_2); - vmag = vt.abs(); + vmag = vt.abs()/Math.sqrt(3);// the per unit is based on L-L Volt equivCurInj.a_0=this.getLoad(vmag).divide(vt).conjugate().multiply(-1); equivCurInj.c_2=equivCurInj.a_0.multiply(-1); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index d9159a4..3ce1940 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -204,7 +204,7 @@ else if(tempAry2[i].contains("pu=")){ sourceBus.setGenCode(AclfGenCode.SWING); sourceBus.setBaseVoltage(basekv, UnitType.kV); - sourceBus.setVoltageMag(basekv); + sourceBus.setVoltageMag(volt_pu); } else{ throw new Error("source bus name is not properly parse! # "+ nextLine); @@ -354,7 +354,7 @@ else if(str.startsWith("New")||str.startsWith("new")){ if(tempAry2[i].contains("basekv=")){ basekv = Double.valueOf(tempAry2[i].substring(7)); } - else if(tempAry2[i].contains("Bus1=")){ + else if(tempAry2[i].contains("Bus1=")||tempAry2[i].contains("bus1=")){ sourceBusId = tempAry2[i].substring(4); } else if(tempAry2[i].contains("pu=")){ @@ -375,7 +375,7 @@ else if(tempAry2[i].contains("pu=")){ sourceBus.setBaseVoltage(basekv, UnitType.kV); - sourceBus.setVoltageMag(basekv); + sourceBus.setVoltageMag(volt_pu); } else{ no_error = false; @@ -552,8 +552,8 @@ public boolean convertActualValuesToPU(double mvaBase){ this.getDistNetwork().setBaseKva(mvaBase*1000.0); } else{ - ODMLogger.getLogger().severe("The input mvabase <= 0. mvabase = 10 MVA will be used"); - mvaBase = 10; + ODMLogger.getLogger().severe("The input mvabase <= 0. mvabase = 1.0 MVA will be used"); + mvaBase = 1.0; this.getDistNetwork().setBaseKva(mvaBase*1000.0); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java index 389fd3e..6a54023 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java @@ -273,7 +273,9 @@ private boolean FBSPowerflow(){ if(bra.getFromBus().getId().equals(bus.getId())){ - + if(bra3P.getCurrentAbcAtFromSide()==null){ + System.out.println("Current At From Side is null for branch #"+ bra3P.getId()); + } sumOfBranchCurrents= sumOfBranchCurrents.add(bra3P.getCurrentAbcAtFromSide()); } else{ @@ -307,6 +309,14 @@ else if(bra.isActive() && bra.getIntFlag() ==0){ // consider the existing bus current injection into the network from generators, loads, shunt capacitors, etc. Complex3x1 busSelfEquivCurInj3Ph =bus3P.calc3PhEquivCurInj(); + if(busSelfEquivCurInj3Ph == null){ + throw new Error("Bus current injection is NULL @ Bus: "+bus3P.getId()); + } + else if(busSelfEquivCurInj3Ph.a_0.isNaN()){ + throw new Error("Bus current injection is NaN @ Bus: "+bus3P.getId()); + } + + // add the branch current flows to obtain the current injections Branch3Phase upStreamBranch = (Branch3Phase) this.distNet.getBranch(upStreamBranchId); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java new file mode 100644 index 0000000..b073e53 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java @@ -0,0 +1,69 @@ +package org.ipss.threePhase.test; + +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.logging.Level; + +import org.interpss.IpssCorePlugin; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.data_parser.OpenDSSDataParser; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; +import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; +import org.ipss.threePhase.util.ThreePhaseObjectFactory; +import org.junit.Test; + +import com.interpss.core.aclf.AclfBus; + +public class TestIEEETestFeederPowerFlow { + + + @Test + public void testIEEE123BusPowerflow(){ + + IpssCorePlugin.init(); + IpssCorePlugin.setLoggerLevel(Level.INFO); + + OpenDSSDataParser parser = new OpenDSSDataParser(); + parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master_Modified.dss"); + + parser.calcVoltageBases(); + + double mvaBase = 1.0; + parser.convertActualValuesToPU(1.0); + + DStabNetwork3Phase distNet = parser.getDistNetwork(); + + String netStrFileName = "testData\\feeder\\IEEE123\\ieee123_modified_netString.dat"; + try { + Files.write(Paths.get(netStrFileName), parser.getDistNetwork().net2String().getBytes()); + } catch (IOException e) { + + e.printStackTrace(); + } + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(distNet); + //distPFAlgo.orderDistributionBuses(true); + distPFAlgo.setInitBusVoltageEnabled(true); + //distPFAlgo.setMaxIteration(1); + distPFAlgo.setTolerance(1.0E-2); + assertTrue(distPFAlgo.powerflow()); + + /* + * Vabc of bus -Bus1,1.0100 + j0.0000 -0.5050 + j-0.87469 -0.5050 + j0.87469 + Vabc of bus -Bus2,0.99636 + j-0.05941 -0.54963 + j-0.83317 -0.44673 + j0.89258 + Vabc of bus -Bus3,0.99075 + j-0.07914 -0.56392 + j-0.81844 -0.42683 + j0.89759 + Vabc of bus -Bus4,0.98834 + j-0.09907 -0.57997 + j-0.80639 -0.40837 + j0.90546 + */ + for(AclfBus bus:distNet.getBusList()){ + Bus3Phase bus3P = (Bus3Phase) bus; + System.out.println("Vabc of bus -"+bus3P.getId()+","+bus3P.get3PhaseVotlages().toString()); + } + + System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(distNet)); + + } +} diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master_Modified.DSS b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master_Modified.DSS new file mode 100644 index 0000000..b02b169 --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master_Modified.DSS @@ -0,0 +1,221 @@ +! Annotated Master file for the IEEE 123-bus test case. +! +! This file is meant to be invoked from the Compile command in the "Run_IEEE123Bus.DSS" file. +! +! Note: DSS commands, property names, etc., are NOT case sensitive. Capitalize as you please. +! You should always do a "Clear" before making a new circuit: + +Clear + +! INSTANTIATE A NEW CIRCUIT AND DEFINE A STIFF 4160V SOURCE +! The new circuit is called "ieee123" +! This creates a Vsource object connected to "sourcebus". This is now the active circuit element, so +! you can simply continue to edit its property value. +! The basekV is redefined to 4.16 kV. The bus name is changed to "150" to match one of the buses in the test feeder. +! The source is set for 1.0 per unit and the Short circuit impedance is set to a small value (0.0001 ohms) +! The ~ is just shorthad for "more" for the New or Edit commands + +New object=circuit.ieee123 +~ basekv=4.16 Bus1=150 pu=1.00 R1=0 X1=0.0001 R0=0 X0=0.0001 + +! 3-PHASE GANGED REGULATOR AT HEAD OF FEEDER (KERSTING ASSUMES NO IMPEDANCE IN THE REGULATOR) +! the first line defines the 3-phase transformer to be controlled by the regulator control. +! The 2nd line defines the properties of the regulator control according to the test case + +new transformer.reg1a phases=3 windings=2 buses=[150 150r] conns=[wye wye] kvs=[4.16 4.16] kvas=[5000 5000] XHL=.001 %LoadLoss=0.00001 ppm=0.0 +new regcontrol.creg1a transformer=reg1a winding=2 vreg=120 band=2 ptratio=20 ctprim=700 R=3 X=7.5 + +! REDIRECT INPUT STREAM TO FILE CONTAINING DEFINITIONS OF LINECODES +! This file defines the line impedances is a similar manner to the description in the test case. + +Redirect IEEELinecodes.DSS + +! LINE DEFINITIONS +! Lines are defined by referring to a "linecode" that contains the impedances per unit length +! So the only properties required are the LineCode name and Length. Units are assumed to match the definition +! since no units property is defined in either the Linecodes file or this file. +! Note that it is not necessary to explicitly specify the node connections for the 3-phase lines +! unless they are not ".1.2.3". However, they are spelled out here for clarity. +! The DSS assumes .1.2.3.0.0 ... for connections of 3 or more phases. +! Likewise, .1 is not necessary for 1-phase lines connected to phase 1. However, if it is connected +! to any other phase, it must be specified. For completeness, everything is spelled out here. +! +! Note that it is recommended that the "units=" property be used here and in the Linecode definition as well +! to avoid confusion in the future + +! *** Original *** New Line.L115 Phases=3 Bus1=149.1.2.3 Bus2=1.1.2.3 LineCode=1 Length=0.4 +! Since the default is 3-phase, the definition of this line can be simpler: + +New Line.L115 Bus1=149 Bus2=1 LineCode=1 Length=0.4 + +New Line.L1 Phases=1 Bus1=1.2 Bus2=2.2 LineCode=10 Length=0.175 +New Line.L2 Phases=1 Bus1=1.3 Bus2=3.3 LineCode=11 Length=0.25 +New Line.L3 Phases=3 Bus1=1.1.2.3 Bus2=7.1.2.3 LineCode=1 Length=0.3 +New Line.L4 Phases=1 Bus1=3.3 Bus2=4.3 LineCode=11 Length=0.2 +New Line.L5 Phases=1 Bus1=3.3 Bus2=5.3 LineCode=11 Length=0.325 +New Line.L6 Phases=1 Bus1=5.3 Bus2=6.3 LineCode=11 Length=0.25 +New Line.L7 Phases=3 Bus1=7.1.2.3 Bus2=8.1.2.3 LineCode=1 Length=0.2 +New Line.L8 Phases=1 Bus1=8.2 Bus2=12.2 LineCode=10 Length=0.225 +New Line.L9 Phases=1 Bus1=8.1 Bus2=9.1 LineCode=9 Length=0.225 +New Line.L10 Phases=3 Bus1=8.1.2.3 Bus2=13.1.2.3 LineCode=1 Length=0.3 +New Line.L11 Phases=1 Bus1=9r.1 Bus2=14.1 LineCode=9 Length=0.425 +New Line.L12 Phases=1 Bus1=13.3 Bus2=34.3 LineCode=11 Length=0.15 +New Line.L13 Phases=3 Bus1=13.1.2.3 Bus2=18.1.2.3 LineCode=2 Length=0.825 +New Line.L14 Phases=1 Bus1=14.1 Bus2=11.1 LineCode=9 Length=0.25 +New Line.L15 Phases=1 Bus1=14.1 Bus2=10.1 LineCode=9 Length=0.25 +New Line.L16 Phases=1 Bus1=15.3 Bus2=16.3 LineCode=11 Length=0.375 +New Line.L17 Phases=1 Bus1=15.3 Bus2=17.3 LineCode=11 Length=0.35 +New Line.L18 Phases=1 Bus1=18.1 Bus2=19.1 LineCode=9 Length=0.25 +New Line.L19 Phases=3 Bus1=18.1.2.3 Bus2=21.1.2.3 LineCode=2 Length=0.3 +New Line.L20 Phases=1 Bus1=19.1 Bus2=20.1 LineCode=9 Length=0.325 +New Line.L21 Phases=1 Bus1=21.2 Bus2=22.2 LineCode=10 Length=0.525 +New Line.L22 Phases=3 Bus1=21.1.2.3 Bus2=23.1.2.3 LineCode=2 Length=0.25 +New Line.L23 Phases=1 Bus1=23.3 Bus2=24.3 LineCode=11 Length=0.55 +New Line.L24 Phases=3 Bus1=23.1.2.3 Bus2=25.1.2.3 LineCode=2 Length=0.275 +New Line.L25 Phases=2 Bus1=25r.1.3 Bus2=26.1.3 LineCode=7 Length=0.35 +New Line.L26 Phases=3 Bus1=25.1.2.3 Bus2=28.1.2.3 LineCode=2 Length=0.2 +New Line.L27 Phases=2 Bus1=26.1.3 Bus2=27.1.3 LineCode=7 Length=0.275 +New Line.L28 Phases=1 Bus1=26.3 Bus2=31.3 LineCode=11 Length=0.225 +New Line.L29 Phases=1 Bus1=27.1 Bus2=33.1 LineCode=9 Length=0.5 +New Line.L30 Phases=3 Bus1=28.1.2.3 Bus2=29.1.2.3 LineCode=2 Length=0.3 +New Line.L31 Phases=3 Bus1=29.1.2.3 Bus2=30.1.2.3 LineCode=2 Length=0.35 +New Line.L32 Phases=3 Bus1=30.1.2.3 Bus2=250.1.2.3 LineCode=2 Length=0.2 +New Line.L33 Phases=1 Bus1=31.3 Bus2=32.3 LineCode=11 Length=0.3 +New Line.L34 Phases=1 Bus1=34.3 Bus2=15.3 LineCode=11 Length=0.1 +New Line.L35 Phases=2 Bus1=35.1.2 Bus2=36.1.2 LineCode=8 Length=0.65 +New Line.L36 Phases=3 Bus1=35.1.2.3 Bus2=40.1.2.3 LineCode=1 Length=0.25 +New Line.L37 Phases=1 Bus1=36.1 Bus2=37.1 LineCode=9 Length=0.3 +New Line.L38 Phases=1 Bus1=36.2 Bus2=38.2 LineCode=10 Length=0.25 +New Line.L39 Phases=1 Bus1=38.2 Bus2=39.2 LineCode=10 Length=0.325 +New Line.L40 Phases=1 Bus1=40.3 Bus2=41.3 LineCode=11 Length=0.325 +New Line.L41 Phases=3 Bus1=40.1.2.3 Bus2=42.1.2.3 LineCode=1 Length=0.25 +New Line.L42 Phases=1 Bus1=42.2 Bus2=43.2 LineCode=10 Length=0.5 +New Line.L43 Phases=3 Bus1=42.1.2.3 Bus2=44.1.2.3 LineCode=1 Length=0.2 +New Line.L44 Phases=1 Bus1=44.1 Bus2=45.1 LineCode=9 Length=0.2 +New Line.L45 Phases=3 Bus1=44.1.2.3 Bus2=47.1.2.3 LineCode=1 Length=0.25 +New Line.L46 Phases=1 Bus1=45.1 Bus2=46.1 LineCode=9 Length=0.3 +New Line.L47 Phases=3 Bus1=47.1.2.3 Bus2=48.1.2.3 LineCode=4 Length=0.15 +New Line.L48 Phases=3 Bus1=47.1.2.3 Bus2=49.1.2.3 LineCode=4 Length=0.25 +New Line.L49 Phases=3 Bus1=49.1.2.3 Bus2=50.1.2.3 LineCode=4 Length=0.25 +New Line.L50 Phases=3 Bus1=50.1.2.3 Bus2=51.1.2.3 LineCode=4 Length=0.25 +New Line.L51 Phases=3 Bus1=51.1.2.3 Bus2=151.1.2.3 LineCode=4 Length=0.5 +New Line.L52 Phases=3 Bus1=52.1.2.3 Bus2=53.1.2.3 LineCode=1 Length=0.2 +New Line.L53 Phases=3 Bus1=53.1.2.3 Bus2=54.1.2.3 LineCode=1 Length=0.125 +New Line.L54 Phases=3 Bus1=54.1.2.3 Bus2=55.1.2.3 LineCode=1 Length=0.275 +New Line.L55 Phases=3 Bus1=54.1.2.3 Bus2=57.1.2.3 LineCode=3 Length=0.35 +New Line.L56 Phases=3 Bus1=55.1.2.3 Bus2=56.1.2.3 LineCode=1 Length=0.275 +New Line.L57 Phases=1 Bus1=57.2 Bus2=58.2 LineCode=10 Length=0.25 +New Line.L58 Phases=3 Bus1=57.1.2.3 Bus2=60.1.2.3 LineCode=3 Length=0.75 +New Line.L59 Phases=1 Bus1=58.2 Bus2=59.2 LineCode=10 Length=0.25 +New Line.L60 Phases=3 Bus1=60.1.2.3 Bus2=61.1.2.3 LineCode=5 Length=0.55 +New Line.L61 Phases=3 Bus1=60.1.2.3 Bus2=62.1.2.3 LineCode=12 Length=0.25 +New Line.L62 Phases=3 Bus1=62.1.2.3 Bus2=63.1.2.3 LineCode=12 Length=0.175 +New Line.L63 Phases=3 Bus1=63.1.2.3 Bus2=64.1.2.3 LineCode=12 Length=0.35 +New Line.L64 Phases=3 Bus1=64.1.2.3 Bus2=65.1.2.3 LineCode=12 Length=0.425 +New Line.L65 Phases=3 Bus1=65.1.2.3 Bus2=66.1.2.3 LineCode=12 Length=0.325 +New Line.L66 Phases=1 Bus1=67.1 Bus2=68.1 LineCode=9 Length=0.2 +New Line.L67 Phases=3 Bus1=67.1.2.3 Bus2=72.1.2.3 LineCode=3 Length=0.275 +New Line.L68 Phases=3 Bus1=67.1.2.3 Bus2=97.1.2.3 LineCode=3 Length=0.25 +New Line.L69 Phases=1 Bus1=68.1 Bus2=69.1 LineCode=9 Length=0.275 +New Line.L70 Phases=1 Bus1=69.1 Bus2=70.1 LineCode=9 Length=0.325 +New Line.L71 Phases=1 Bus1=70.1 Bus2=71.1 LineCode=9 Length=0.275 +New Line.L72 Phases=1 Bus1=72.3 Bus2=73.3 LineCode=11 Length=0.275 +New Line.L73 Phases=3 Bus1=72.1.2.3 Bus2=76.1.2.3 LineCode=3 Length=0.2 +New Line.L74 Phases=1 Bus1=73.3 Bus2=74.3 LineCode=11 Length=0.35 +New Line.L75 Phases=1 Bus1=74.3 Bus2=75.3 LineCode=11 Length=0.4 +New Line.L76 Phases=3 Bus1=76.1.2.3 Bus2=77.1.2.3 LineCode=6 Length=0.4 +New Line.L77 Phases=3 Bus1=76.1.2.3 Bus2=86.1.2.3 LineCode=3 Length=0.7 +New Line.L78 Phases=3 Bus1=77.1.2.3 Bus2=78.1.2.3 LineCode=6 Length=0.1 +New Line.L79 Phases=3 Bus1=78.1.2.3 Bus2=79.1.2.3 LineCode=6 Length=0.225 +New Line.L80 Phases=3 Bus1=78.1.2.3 Bus2=80.1.2.3 LineCode=6 Length=0.475 +New Line.L81 Phases=3 Bus1=80.1.2.3 Bus2=81.1.2.3 LineCode=6 Length=0.175 +New Line.L82 Phases=3 Bus1=81.1.2.3 Bus2=82.1.2.3 LineCode=6 Length=0.25 +New Line.L83 Phases=1 Bus1=81.3 Bus2=84.3 LineCode=11 Length=0.675 +New Line.L84 Phases=3 Bus1=82.1.2.3 Bus2=83.1.2.3 LineCode=6 Length=0.25 +New Line.L85 Phases=1 Bus1=84.3 Bus2=85.3 LineCode=11 Length=0.475 +New Line.L86 Phases=3 Bus1=86.1.2.3 Bus2=87.1.2.3 LineCode=6 Length=0.45 +New Line.L87 Phases=1 Bus1=87.1 Bus2=88.1 LineCode=9 Length=0.175 +New Line.L88 Phases=3 Bus1=87.1.2.3 Bus2=89.1.2.3 LineCode=6 Length=0.275 +New Line.L89 Phases=1 Bus1=89.2 Bus2=90.2 LineCode=10 Length=0.25 +New Line.L90 Phases=3 Bus1=89.1.2.3 Bus2=91.1.2.3 LineCode=6 Length=0.225 +New Line.L91 Phases=1 Bus1=91.3 Bus2=92.3 LineCode=11 Length=0.3 +New Line.L92 Phases=3 Bus1=91.1.2.3 Bus2=93.1.2.3 LineCode=6 Length=0.225 +New Line.L93 Phases=1 Bus1=93.1 Bus2=94.1 LineCode=9 Length=0.275 +New Line.L94 Phases=3 Bus1=93.1.2.3 Bus2=95.1.2.3 LineCode=6 Length=0.3 +New Line.L95 Phases=1 Bus1=95.2 Bus2=96.2 LineCode=10 Length=0.2 +New Line.L96 Phases=3 Bus1=97.1.2.3 Bus2=98.1.2.3 LineCode=3 Length=0.275 +New Line.L97 Phases=3 Bus1=98.1.2.3 Bus2=99.1.2.3 LineCode=3 Length=0.55 +New Line.L98 Phases=3 Bus1=99.1.2.3 Bus2=100.1.2.3 LineCode=3 Length=0.3 +New Line.L99 Phases=3 Bus1=100.1.2.3 Bus2=450.1.2.3 LineCode=3 Length=0.8 +New Line.L118 Phases=3 Bus1=197.1.2.3 Bus2=101.1.2.3 LineCode=3 Length=0.25 +New Line.L100 Phases=1 Bus1=101.3 Bus2=102.3 LineCode=11 Length=0.225 +New Line.L101 Phases=3 Bus1=101.1.2.3 Bus2=105.1.2.3 LineCode=3 Length=0.275 +New Line.L102 Phases=1 Bus1=102.3 Bus2=103.3 LineCode=11 Length=0.325 +New Line.L103 Phases=1 Bus1=103.3 Bus2=104.3 LineCode=11 Length=0.7 +New Line.L104 Phases=1 Bus1=105.2 Bus2=106.2 LineCode=10 Length=0.225 +New Line.L105 Phases=3 Bus1=105.1.2.3 Bus2=108.1.2.3 LineCode=3 Length=0.325 +New Line.L106 Phases=1 Bus1=106.2 Bus2=107.2 LineCode=10 Length=0.575 +New Line.L107 Phases=1 Bus1=108.1 Bus2=109.1 LineCode=9 Length=0.45 +New Line.L108 Phases=3 Bus1=108.1.2.3 Bus2=300.1.2.3 LineCode=3 Length=1 +New Line.L109 Phases=1 Bus1=109.1 Bus2=110.1 LineCode=9 Length=0.3 +New Line.L110 Phases=1 Bus1=110.1 Bus2=111.1 LineCode=9 Length=0.575 +New Line.L111 Phases=1 Bus1=110.1 Bus2=112.1 LineCode=9 Length=0.125 +New Line.L112 Phases=1 Bus1=112.1 Bus2=113.1 LineCode=9 Length=0.525 +New Line.L113 Phases=1 Bus1=113.1 Bus2=114.1 LineCode=9 Length=0.325 +New Line.L114 Phases=3 Bus1=135.1.2.3 Bus2=35.1.2.3 LineCode=4 Length=0.375 +New Line.L116 Phases=3 Bus1=152.1.2.3 Bus2=52.1.2.3 LineCode=1 Length=0.4 +New Line.L117 Phases=3 Bus1=160r.1.2.3 Bus2=67.1.2.3 LineCode=6 Length=0.35 + + +! NORMALLY CLOSED SWITCHES ARE DEFINED AS SHORT LINES +! Could also be defned by setting the Switch=Yes property + +New Line.Sw1 phases=3 Bus1=150r Bus2=149 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw2 phases=3 Bus1=13 Bus2=152 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw3 phases=3 Bus1=18 Bus2=135 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw4 phases=3 Bus1=60 Bus2=160 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw5 phases=3 Bus1=97 Bus2=197 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw6 phases=3 Bus1=61 Bus2=61s r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 + +! NORMALLY OPEN SWITCHES; DEFINED AS SHORT LINE TO OPEN BUS SO WE CAN SEE OPEN POINT VOLTAGES. +! COULD ALSO BE DEFINED AS DISABLED OR THE TERMINCAL COULD BE OPENED AFTER BEING DEFINED + +New Line.Sw7 phases=3 Bus1=151 Bus2=300_OPEN r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 +New Line.Sw8 phases=1 Bus1=54.1 Bus2=94_OPEN.1 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.001 + +! LOAD TRANSFORMER AT 61s/610 +! This is a 150 kVA Delta-Delta stepdown from 4160V to 480V. + +New Transformer.XFM1 Phases=3 Windings=2 Xhl=2.72 +~ wdg=1 bus=61s conn=Delta kv=4.16 kva=150 %r=0.635 +~ wdg=2 bus=610 conn=Delta kv=0.48 kva=150 %r=0.635 + +! CAPACITORS +! Capacitors are 2-terminal devices. The 2nd terminal (Bus2=...) defaults to all phases +! connected to ground (Node 0). Thus, it need not be specified if a Y-connected or L-N connected +! capacitor is desired + +New Capacitor.C83 Bus1=83 Phases=3 kVAR=600 kV=4.16 +New Capacitor.C88a Bus1=88.1 Phases=1 kVAR=50 kV=2.402 +New Capacitor.C90b Bus1=90.2 Phases=1 kVAR=50 kV=2.402 +New Capacitor.C92c Bus1=92.3 Phases=1 kVAR=50 kV=2.402 + + +!REGULATORS - REDIRECT TO DEFINITIONS FILE +! This file contains definitions for the remainder of regulators on the feeder: + +Redirect IEEE123Regulators2.DSS + +! SPOT LOADS -- REDIRECT INPUT STREAM TO LOAD DEFINITIONS FILE + +Redirect IEEE123Loads.DSS + +! All devices in the test feeder are now defined. +! +! Many of the voltages are reported in per unit, so it is important to establish the base voltages at each bus so +! that we can compare with the result with greater ease. +! We will let the DSS compute the voltage bases by doing a zero-load power flow. +! There are only two voltage bases in the problem: 4160V and 480V. These must be expressed in kV + +Set VoltageBases = [4.16, 0.48] ! ARRAY OF VOLTAGES IN KV +CalcVoltageBases ! PERFORMS ZERO LOAD POWER FLOW TO ESTIMATE VOLTAGE BASES diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Regulators2.DSS b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Regulators2.DSS new file mode 100644 index 0000000..60632ff --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Regulators2.DSS @@ -0,0 +1,27 @@ +!DEFINE TRANSFORMERS FOR REGULATORS +! Have to assume basically zero impedance regulators to match the test case +new transformer.reg2a phases=1 windings=2 buses=[9.1 9r.1] conns=[wye wye] kvs=[2.402 2.402] kvas=[2000 2000] XHL=.01 %LoadLoss=0.00001 ppm=0.0 + +!!!! COMBINE THEM INTO ONE TRANSFORMER, DUE TO THE LIMITATION OF InterPSS [05/01/2017] +!new transformer.reg3a phases=1 windings=2 buses=[25.1 25r.1] conns=[wye wye] kvs=[2.402 2.402] kvas=[2000 2000] XHL=.01 %LoadLoss=0.00001 ppm=0.0 +!new transformer.reg3c like=reg3a buses=[25.3 25r.3] ppm=0.0 +new transformer.reg3 phases=3 windings=2 buses=[25 25r] conns=[wye wye] kvs=[4.16 4.16] kvas=[6000 6000] XHL=.01 %LoadLoss=0.00001 ppm=0.0 + + +!!!! COMBINE THEM INTO ONE REGULATOR, DUE TO THE LIMITATION OF InterPSS [05/01/2017] +!new transformer.reg4a phases=1 windings=2 buses=[160.1 160r.1] conns=[wye wye] kvs=[2.402 2.402] kvas=[2000 2000] XHL=.01 %LoadLoss=0.00001 ppm=0.0 +!new transformer.reg4b like=reg4a buses=[160.2 160r.2] ppm=0.0 +!new transformer.reg4c like=reg4a buses=[160.3 160r.3] ppm=0.0 + +new transformer.reg4 phases=3 windings=2 buses=[160 160r] conns=[wye wye] kvs=[4.16 4.16] kvas=[6000 6000] XHL=.01 %LoadLoss=0.00001 ppm=0.0 + + +! POINT REGULATOR CONTROLS TO REGULATOR TRANSFORMER AND SET PARAMETERS +new regcontrol.creg2a transformer=reg2a winding=2 vreg=120 band=2 ptratio=20 ctprim=50 R=0.4 X=0.4 +new regcontrol.creg3a transformer=reg3a winding=2 vreg=120 band=1 ptratio=20 ctprim=50 R=0.4 X=0.4 +new regcontrol.creg3c like=creg3a transformer=reg3c +new regcontrol.creg4a transformer=reg4a winding=2 vreg=124 band=2 ptratio=20 ctprim=300 R=0.6 X=1.3 +new regcontrol.creg4b like=creg4a transformer=reg4b R=1.4 X=2.6 +new regcontrol.creg4c like=creg4a transformer=reg4c R=0.2 X=1.4 + +! NOTE: WHEN LIKE= IS USED, IT IS NECESSARY TO SPECIFY ONLY THOSE PROPERTIES THAT ARE DIFFERENT \ No newline at end of file From c3843e0aab1056afdaa06ee3cd2333a709b07f89 Mon Sep 17 00:00:00 2001 From: thuang Date: Tue, 2 May 2017 09:46:02 -0700 Subject: [PATCH 20/36] capacitor data parser + passed first PF test of IEEE 123 test case --- .../ipss/threePhase/basic/DistLoadType.java | 16 --- .../threePhase/basic/impl/Load3PhaseImpl.java | 2 +- .../data_parser/OpenDSSCapacitorParser.java | 116 ++++++++++++++++++ .../test/TestIEEETestFeederPowerFlow.java | 59 +++++++-- 4 files changed, 168 insertions(+), 25 deletions(-) delete mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java deleted file mode 100644 index 47d3e39..0000000 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/DistLoadType.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.ipss.threePhase.basic; - -/* - * load model code: - * 1:Standard constant P+jQ load. (Default) - 2:Constant impedance load. - 3:Const P, Quadratic Q (like a motor). - 4:Nominal Linear P, Quadratic Q (feeder mix). Use this with CVRfactor. - 5:Constant Current Magnitude - 6:Const P, Fixed Q - 7:Const P, Fixed Impedance Q - 8:ZIPV (7 values) - */ -//public enum DistLoadType { -// CONST_PQ, CONST_I,CONST_Z, CONST_P_QUAD_Q, LINEAR_P_QUAD_Q,CONST_P_FIXED_Q,CONST_P_FIXED_Z_Q,ZIP -//} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java index 0a81e4c..685f1c1 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java @@ -109,9 +109,9 @@ else if(this.code==AclfLoadCode.CONST_Z){ throw new Error("Load model type not supported yet!! Bus, load id,model type, phases: " +this.getParentBus().getId()+","+this.getId()+","+this.code+","+this.ph); } + break; - break; case Three_Phase_Delta: throw new Error("Connection type not supported yet!! Bus, load id,connectType, phases: " +this.getParentBus().getId()+","+this.getId()+","+this.loadConnectType+","+this.ph); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java index f64939c..32e2960 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java @@ -1,5 +1,16 @@ package org.ipss.threePhase.data_parser; +import org.apache.commons.math3.complex.Complex; +import org.ieee.odm.common.ODMLogger; +import org.interpss.numeric.datatype.Complex3x1; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.basic.LoadConnectionType; +import org.ipss.threePhase.basic.impl.Load3PhaseImpl; + +import com.interpss.core.aclf.AclfLoadCode; +import com.interpss.core.acsc.PhaseCode; + public class OpenDSSCapacitorParser { private OpenDSSDataParser dataParser = null; @@ -11,6 +22,111 @@ public OpenDSSCapacitorParser(OpenDSSDataParser parser){ public boolean parseCapDataString(String capStr){ boolean no_error = true; + /* + * New Capacitor.C83 Bus1=83 Phases=3 kVAR=600 kV=4.16 + New Capacitor.C88a Bus1=88.1 Phases=1 kVAR=50 kV=2.402 + */ + + + String capId = ""; + String busId = ""; + String phase1 = ""; + String phase2 = ""; + String phase3 = ""; + + int phaseNum = 3; // 3 phases by default + + double capKVAR = 0; + double nominalKV = 0; + + String[] capStrAry = capStr.toLowerCase().trim().split("\\s+"); + + for(int i = 0;i1){ + phase1 = tempAry[1]; + } + else if(tempAry.length>2){ + phase2 = tempAry[2]; + } + else if(tempAry.length>3){ + phase3 = tempAry[3]; + } + } + } + else if(capStrAry[i].contains("phases=")){ + phaseNum = Integer.valueOf(capStrAry[i].substring(7)); + } + else if(capStrAry[i].contains("kvar=")){ + capKVAR = Double.valueOf(capStrAry[i].substring(5)); + } + else if(capStrAry[i].contains("kv=")){ + nominalKV = Double.valueOf(capStrAry[i].substring(3)); + } + } + + + //get the bus object + Bus3Phase bus = (Bus3Phase) this.dataParser.getDistNetwork().getBus(busId); + + if(bus==null){ + throw new Error("Bus for a capacitor cannot be found, busId, capId = "+busId+","+capId ); + + } + + // tentatively modeled by constant Z Type of loads + + Load3Phase load= new Load3PhaseImpl(); + + load.setId(capId); + load.setCode(AclfLoadCode.CONST_Z); + load.setLoadConnectionType(LoadConnectionType.Three_Phase_Wye); + load.setPhaseCode(PhaseCode.ABC); + + // single phase and three-phase capacitors are all modeled by three-phase shunts + double kva1Phase = capKVAR/3.0; + Complex3x1 capShunt = new Complex3x1(); + if(phaseNum==1){ + kva1Phase = capKVAR; + Complex shunt1Phase = new Complex(0,kva1Phase); + if(phase1.equals("1")){ + capShunt.a_0 = shunt1Phase; + //load.setPhaseCode(PhaseCode.A); + } + else if(phase1.equals("2")){ + capShunt.b_1 = shunt1Phase; + //load.setPhaseCode(PhaseCode.B); + } + else if(phase1.equals("3")){ + capShunt.c_2 = shunt1Phase; + //load.setPhaseCode(PhaseCode.C); + } + else + throw new Error("Connection phase for a capacitor cannot be found! busId, capId = "+busId+","+capId ); + + } + else if(phaseNum==3){ + + capShunt.a_0 = new Complex(0,kva1Phase); + capShunt.b_1 = new Complex(0,kva1Phase); + capShunt.c_2 = new Complex(0,kva1Phase); + + } + else if(phaseNum==2){ + throw new Error("Two phases connection for a capacitor is not supported yet! busId, capId = "+busId+","+capId ); + } + + load.set3PhaseLoad(capShunt.multiply(-1)); // capacitors are modeled as "negative" loads + + bus.getThreePhaseLoadList().add(load); return no_error; } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java index b073e53..2991d5e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java @@ -7,7 +7,9 @@ import java.nio.file.Paths; import java.util.logging.Level; +import org.apache.commons.math3.complex.Complex; import org.interpss.IpssCorePlugin; +import org.interpss.numeric.datatype.Complex3x1; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.data_parser.OpenDSSDataParser; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; @@ -37,19 +39,22 @@ public void testIEEE123BusPowerflow(){ DStabNetwork3Phase distNet = parser.getDistNetwork(); - String netStrFileName = "testData\\feeder\\IEEE123\\ieee123_modified_netString.dat"; - try { - Files.write(Paths.get(netStrFileName), parser.getDistNetwork().net2String().getBytes()); - } catch (IOException e) { - - e.printStackTrace(); - } +// String netStrFileName = "testData\\feeder\\IEEE123\\ieee123_modified_netString.dat"; +// try { +// Files.write(Paths.get(netStrFileName), parser.getDistNetwork().net2String().getBytes()); +// } catch (IOException e) { +// +// e.printStackTrace(); +// } + + // set the turn ratios of regulators + parser.getBranchByName("reg1a").setToTurnRatio(1.0438); DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(distNet); //distPFAlgo.orderDistributionBuses(true); distPFAlgo.setInitBusVoltageEnabled(true); //distPFAlgo.setMaxIteration(1); - distPFAlgo.setTolerance(1.0E-2); + distPFAlgo.setTolerance(5.0E-3); // tolearnce = 5 kva assertTrue(distPFAlgo.powerflow()); /* @@ -61,9 +66,47 @@ public void testIEEE123BusPowerflow(){ for(AclfBus bus:distNet.getBusList()){ Bus3Phase bus3P = (Bus3Phase) bus; System.out.println("Vabc of bus -"+bus3P.getId()+","+bus3P.get3PhaseVotlages().toString()); + } System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(distNet)); + Bus3Phase bus150r = (Bus3Phase) distNet.getBus("150r"); + Complex3x1 vabc_150r = bus150r.get3PhaseVotlages(); + /* + * 150r,1.0444156221522982,-3.212270295862824E-4,1.043045526755821,4.1894310060612145,1.0433712760113691,2.0939131182587714,1.04442 + j-0.00034 -0.52094 + j-0.90364 -0.52125 + j0.90384 + */ + assertTrue(vabc_150r.subtract(new Complex3x1(new Complex(1.04442,-0.00034),new Complex(-0.52094,-0.90364),new Complex(-0.52125,0.90384))).absMax()<1.0E-4); + + /// Compared with IEEE TEST FEEDER RESULTS + //RG1 | 1.0437 at .00 | 1.0438 at -120.00 | 1.0438 at 120.00 | + assertTrue(Math.abs(vabc_150r.a_0.abs()-1.0437)<1.0E-3); + assertTrue(Math.abs(vabc_150r.b_1.abs()-1.0438)<1.0E-3); + assertTrue(Math.abs(vabc_150r.c_2.abs()-1.0438)<1.0E-3); + + Bus3Phase bus21 = (Bus3Phase) distNet.getBus("21"); + Complex3x1 vabc_21 = bus21.get3PhaseVotlages(); + /* + * 21,0.9976629334520096,-0.039839533149384404,1.0320577255690082,4.166775074256249,1.0114596191804741,2.0742543870511136,0.99687 + j-0.03974 -0.53558 + j-0.88221 -0.48799 + j0.88596 + */ + + + /// Compared with IEEE TEST FEEDER RESULTS + // 21 | .9983 at -2.34 | 1.0320 at -121.22 | 1.0111 at 118.81 | .441 + assertTrue(Math.abs(vabc_21.a_0.abs()-0.9983)<1.0E-3); //0.9983 is IEEE TEST FEEDER RESULT + assertTrue(Math.abs(vabc_21.b_1.abs()-1.0320)<1.0E-3); + assertTrue(Math.abs(vabc_21.c_2.abs()-1.0111)<1.0E-3); + + Bus3Phase bus30 = (Bus3Phase) distNet.getBus("30"); + Complex3x1 vabc_30 = bus30.get3PhaseVotlages(); + /* + *30,0.9963094030535219,-0.04263498620437,1.0332257087662153,4.167548363697641,1.008218641157312,2.073577445296613,0.9954 + j-0.04246 -0.5355 + j-0.88362 -0.48582 + j0.88345 + */ + + /// Compared with IEEE TEST FEEDER RESULTS + // 30 | .9969 at -2.50 | 1.0331 at -121.18 | 1.0078 at 118.77 | .701 + assertTrue(Math.abs(vabc_30.a_0.abs()-0.9969)<1.0E-3); + assertTrue(Math.abs(vabc_30.b_1.abs()-1.0331)<1.0E-3); + assertTrue(Math.abs(vabc_30.c_2.abs()-1.0078)<1.0E-3); } } From 31385c3c3501274e37b065d10093e1357362d7de Mon Sep 17 00:00:00 2001 From: thuang Date: Thu, 4 May 2017 15:50:01 -0700 Subject: [PATCH 21/36] Test IEEE123 bus dynamic simulation, still some issues remained --- .../org/ipss/threePhase/basic/Load3Phase.java | 4 +- .../basic/impl/Branch3PhaseImpl.java | 2 +- .../threePhase/basic/impl/Bus3PhaseImpl.java | 37 +- .../threePhase/basic/impl/Load1PhaseImpl.java | 6 +- .../threePhase/basic/impl/Load3PhaseImpl.java | 55 +- .../data_parser/OpenDSSDataParser.java | 12 +- .../data_parser/OpenDSSLineParser.java | 39 +- .../dynamic/impl/DStabNetwork3phaseImpl.java | 1532 ++-- .../DistributionPowerFlowAlgorithmImpl.java | 8 +- .../test/IEEE123Feeder_Dstab_Test.java | 236 + .../test/IEEE9Bus_3phase_LF_init_test.java | 4 +- .../test/IEEE_13BusFeeder_Test.java | 10 + .../ipss/threePhase/test/Test6BusFeeder.java | 13 +- .../test/TestIEEETestFeederPowerFlow.java | 1 + .../test/TestOpenDSSDataParser.java | 28 +- .../threePhase/test/threePhaseTestSuite.java | 1 + .../IEEE123/IEEE123Loads_noSingleDelta.DSS | 107 + .../IEEE123Loads_noSingleDelta_constPQ.DSS | 107 + .../IEEE123/IEEE123Master_Modified_v2.DSS | 223 + .../IEEE123/ieee123_modified_netString.dat | 7879 +++++++++++++++++ .../feeder/IEEE123/ieee123_netString.dat | 12 +- 21 files changed, 9507 insertions(+), 809 deletions(-) create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads_noSingleDelta.DSS create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads_noSingleDelta_constPQ.DSS create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master_Modified_v2.DSS create mode 100644 ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_modified_netString.dat diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java index 40d89a1..2e18d4d 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java @@ -22,7 +22,9 @@ public interface Load3Phase extends Load1Phase { * @return */ - public Complex3x1 get3PhaseLoad(); + public Complex3x1 getInit3PhaseLoad(); + + public Complex3x1 get3PhaseLoad(Complex3x1 vabc); /** diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Branch3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Branch3PhaseImpl.java index 76935a6..8ed265a 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Branch3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Branch3PhaseImpl.java @@ -97,7 +97,7 @@ public Complex3x3 getBranchYabc() { } if(dim == 0){ - throw new Error(" The branch Yii diagonal elements are zero! # "+this.getId()); + throw new Error(" The branch Yii diagonal elements are all zero! # "+this.getId()); } else if(dim ==1){ if( hasPhaseA) { diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java index cd9445d..9b11f4c 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java @@ -13,6 +13,7 @@ import org.ipss.threePhase.basic.Gen3Phase; import org.ipss.threePhase.basic.Load1Phase; import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.basic.LoadConnectionType; import org.ipss.threePhase.dynamic.model.DStabGen3PhaseAdapter; import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; import org.ipss.threePhase.dynamic.model.DynLoadModel3Phase; @@ -289,8 +290,42 @@ public void set3PhaseNetLoadResults(Complex3x1 netLoad3Phase) { public Complex3x1 get3PhaseTotalLoad() { this.totalLoad3Phase = new Complex3x1(); for(Load3Phase load: this.getThreePhaseLoadList()){ - this.totalLoad3Phase = this.totalLoad3Phase.add(load.get3PhaseLoad()); + if(load.isActive()) + this.totalLoad3Phase = this.totalLoad3Phase.add(load.get3PhaseLoad(this.get3PhaseVotlages())); } + //consider single-phase Wye connected load included in the contributeLoadList() + // TODO how about delta connected load?? + for(AclfLoad load: this.getContributeLoadList()){ + if(load.isActive() && load instanceof Load1Phase){ + Load1Phase load1P = (Load1Phase) load; + if(load1P.getLoadConnectionType()==LoadConnectionType.Single_Phase_Delta){ + throw new Error (" get3PhaseTotalLoad() does not support LoadConnectionType.Single_Phase_Delta yet! bus, load = "+this.getId()+","+load.getId()); + } + else{ + switch(load1P.getPhaseCode()){ + case A: + double vmag = this.get3PhaseVotlages().a_0.abs(); + this.totalLoad3Phase.a_0 = this.totalLoad3Phase.a_0.add(load1P.getLoad(vmag)); + break; + case B: + vmag = this.get3PhaseVotlages().b_1.abs(); + this.totalLoad3Phase.b_1 = this.totalLoad3Phase.b_1.add(load1P.getLoad(vmag)); + break; + + case C: + vmag = this.get3PhaseVotlages().c_2.abs(); + this.totalLoad3Phase.c_2 = this.totalLoad3Phase.c_2.add(load1P.getLoad(vmag)); + break; + default: + throw new Error (" get3PhaseTotalLoad() does not support the phase code of this single load yet! bus, load, phase code = "+this.getId()+","+load.getId()+","+load1P.getPhaseCode()); + + + } + } + } + } + + return this.totalLoad3Phase; } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java index 48137ef..16ca3c5 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java @@ -47,9 +47,9 @@ public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { Bus3Phase bus = ((Bus3Phase)this.getParentBus()); - if(bus.getId().equals("113")){ - System.out.println("Debug bus equiv Current calculation"); - } +// if(bus.getId().equals("113")){ +// System.out.println("Debug bus equiv Current calculation"); +// } Complex vt = null; double vmag=1.0; switch (this.loadConnectType){ diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java index 685f1c1..975b401 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java @@ -63,10 +63,59 @@ public void setPhaseLoad(Complex phaseLoad, PhaseCode phase) { } @Override - public Complex3x1 get3PhaseLoad() { - return ph3Load; + public Complex3x1 get3PhaseLoad( Complex3x1 vabc) { + Complex3x1 loadPQ = ph3Load; + +// Complex3x1 vabc =((Bus3Phase)this.getParentBus()).get3PhaseVotlages(); + + if(this.code ==AclfLoadCode.NON_LOAD){ + code = AclfLoadCode.CONST_P; // by default constant PQ + } + + switch (this.loadConnectType){ + case Three_Phase_Wye: + if(this.code==AclfLoadCode.CONST_P){ + // default + } + else if(this.code==AclfLoadCode.CONST_I){ + loadPQ.a_0 = ph3Load.a_0.multiply(vabc.a_0.abs()); + loadPQ.b_1 = ph3Load.b_1.multiply(vabc.b_1.abs()); + loadPQ.c_2 = ph3Load.c_2.multiply(vabc.c_2.abs()); + } + else if(this.code==AclfLoadCode.CONST_Z){ + double va = vabc.a_0.abs(); + double vb = vabc.b_1.abs(); + double vc = vabc.c_2.abs(); + loadPQ.a_0 = ph3Load.a_0.multiply(va*va); + loadPQ.b_1 = ph3Load.b_1.multiply(vb*vb); + loadPQ.c_2 = ph3Load.c_2.multiply(vc*vc); + } + else{ + throw new Error("Load model type not supported yet!! Bus, load id,model type, phases: " + +this.getParentBus().getId()+","+this.getId()+","+this.code+","+this.ph); + } + break; + + + case Three_Phase_Delta: + throw new Error("Connection type not supported yet!! Bus, load id,connectType, phases: " + +this.getParentBus().getId()+","+this.getId()+","+this.loadConnectType+","+this.ph); + + default: + + throw new Error("Connection type and phases are not consisent!! Bus, load id,connectType, phases: " + +this.getParentBus().getId()+","+this.getId()+","+this.loadConnectType+","+this.ph); + + } + + return loadPQ; } - + + @Override + public Complex3x1 getInit3PhaseLoad() { + return ph3Load; + } + @Override public void set3PhaseLoad(Complex3x1 threePhaseLoad) { diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 3ce1940..d2b0e34 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -50,6 +50,8 @@ public class OpenDSSDataParser { protected OpenDSSCapacitorParser capParser = null; protected OpenDSSRegulatorParser regulatorParser = null; + boolean debug = false; + public OpenDSSDataParser(){ //create and initialize the distribution network model if(this.distNet == null){ @@ -65,6 +67,10 @@ public OpenDSSDataParser(){ //TODO tentatively, treat regulator as a fixed tap transformer this.regulatorParser = new OpenDSSRegulatorParser(this); } + + public void setDebugMode(boolean enableDebug){ + this.debug = enableDebug; + } public Hashtable getLineConfigTable() { if(lineConfigTable == null){ @@ -142,7 +148,7 @@ public boolean parseFeederData(String folderPath,String feederFile){ str = reader.readLine(); lineCnt++; } - System.out.println("Parsing: "+str); + if (this.debug) System.out.println("Parsing: "+str); if (str != null && !str.trim().equals("")) { str = str.trim(); if(str.startsWith("!") || str.startsWith("//")){ @@ -320,7 +326,7 @@ private boolean parseFile(String folderPath, String fileName){ str = reader.readLine(); lineCnt++; } - System.out.println("Parsing :" +str); + if(this.debug)System.out.println("Parsing :" +str); if (str != null && !str.trim().equals("")) { str = str.trim(); if(str.startsWith("!") || str.startsWith("//")){ @@ -620,7 +626,7 @@ private boolean convertLoadCapacitorToPU(){ if(bus3P.getThreePhaseLoadList().size()>0){ for(Load3Phase load3P:bus3P.getThreePhaseLoadList()){ - load3P.set3PhaseLoad(load3P.get3PhaseLoad().multiply(1.0/baseKVA1P)); + load3P.set3PhaseLoad(load3P.getInit3PhaseLoad().multiply(1.0/baseKVA1P)); } } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index 85d4dc7..46f69b3 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -103,7 +103,10 @@ else if(lineStrAry[i].contains("c0=")){ } - + + if(lineName.equals("l4")){ + System.out.println("processing line :"+lineName); + } //busId is the substring before the first DOT //phases info is defined in the substring after the first DOT @@ -125,11 +128,11 @@ else if(lineStrAry[i].contains("c0=")){ Complex3x3 zabc = null; Complex3x3 yshuntabc = new Complex3x3(); + LineConfiguration config = null; if(lineCodeIdx> 0){ // line parameters defined by line code - LineConfiguration config = this.dataParser.getLineConfigTable().get(lineCodeId); - + config = this.dataParser.getLineConfigTable().get(lineCodeId); if(config!=null){ zabc = config.getZ3x3Matrix(); @@ -199,12 +202,29 @@ else if(phaseNum==1){ // by default, phase = "1", no change is needed } else if(fromBusPhases.equals("2")){ - zabc.bb = zabc.aa; - zabc.aa = new Complex(0.0); + if(zabc.aa.abs()<1.0E-8 && zabc.bb.abs()>1.0E-5){ + zabc.aa = new Complex(0.0); + zabc.cc = new Complex(0.0); + // no change to zabc.cc is needed + } + else{ + zabc.bb = zabc.aa; + zabc.aa = new Complex(0.0); + zabc.cc = new Complex(0.0); + } } else if(fromBusPhases.equals("3")){ - zabc.cc = zabc.aa; - zabc.aa = new Complex(0.0); + Complex diag = null; + if(zabc.aa.abs()<1.0E-8 && zabc.cc.abs()>1.0E-5){ + zabc.aa = new Complex(0.0); + zabc.bb = new Complex(0.0); + // no change to zabc.cc is needed + } + else{ + zabc.cc = zabc.aa; + zabc.aa = new Complex(0.0); + zabc.bb = new Complex(0.0); + } } else{ throw new Error("phase arrangement not support yet : "+lineStr); @@ -224,6 +244,7 @@ else if(fromBusPhases.equals("3")){ Branch3Phase line = ThreePhaseObjectFactory.create3PBranch(fromBusId, toBusId, "1", distNet); line.setName(lineName); + line.setBranchCode(AclfBranchCode.LINE); // the format of Zmatrix need to be consistent with the number of phases and the phases in use. @@ -233,6 +254,10 @@ else if(fromBusPhases.equals("3")){ //TODO consistency of the unit types line.setZabc(zabc.multiply(lineLength)); + if(line.getZabc().absMax()<1.0E-7){ + throw new Error("Line Zabc.absMax() is less than 1.0E-7. LineID, Name = "+line.getId()+", "+line.getName()); + } + //TODO ShuntY is not considered for this initial implementation //line.setFromShuntYabc(yshuntabc.multiply(0.5)); //line.setToShuntYabc(yshuntabc.multiply(0.5)); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java index f48eedc..2278ad7 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java @@ -1,766 +1,766 @@ -package org.ipss.threePhase.dynamic.impl; - -import static com.interpss.common.util.IpssLogger.ipssLogger; -import static org.ipss.threePhase.util.ThreePhaseUtilFunction.threePhaseGenAptr; - -import java.util.Hashtable; -import java.util.LinkedList; -import java.util.Queue; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.interpss.numeric.datatype.Complex3x3; -import org.interpss.numeric.datatype.Unit.UnitType; -import org.interpss.numeric.exp.IpssNumericException; -import org.interpss.numeric.sparse.ISparseEqnComplexMatrix3x3; -import org.ipss.threePhase.basic.Branch3Phase; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Gen3Phase; -import org.ipss.threePhase.basic.Load3Phase; -import org.ipss.threePhase.dynamic.DStabNetwork3Phase; -import org.ipss.threePhase.dynamic.model.DStabGen3PhaseAdapter; -import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; -import org.ipss.threePhase.dynamic.model.DynLoadModel3Phase; -import org.ipss.threePhase.util.ThreeSeqLoadProcessor; - -import com.interpss.common.datatype.Constants; -import com.interpss.common.exp.InterpssException; -import com.interpss.common.util.IpssLogger; -import com.interpss.core.aclf.AclfBus; -import com.interpss.core.aclf.AclfGen; -import com.interpss.core.aclf.AclfLoad; -import com.interpss.core.acsc.AcscBranch; -import com.interpss.core.acsc.AcscBus; -import com.interpss.core.acsc.SequenceCode; -import com.interpss.core.acsc.XfrConnectCode; -import com.interpss.core.net.Branch; -import com.interpss.core.net.Bus; -import com.interpss.core.net.NetworkType; -import com.interpss.core.sparse.impl.SparseEqnComplexMatrix3x3Impl; -import com.interpss.dstab.DStabBus; -import com.interpss.dstab.DStabGen; -import com.interpss.dstab.dynLoad.DynLoadModel; -import com.interpss.dstab.impl.DStabilityNetworkImpl; - -public class DStabNetwork3phaseImpl extends DStabilityNetworkImpl implements DStabNetwork3Phase { - - protected ISparseEqnComplexMatrix3x3 yMatrixAbc = null; - protected boolean is3PhaseNetworkInitialized = false; - protected Hashtable threePhaseCurInjTable = null; - private boolean isLoadModelConverted = false; - - - @Override - public boolean initThreePhaseFromLfResult() { - - /* - * initialize the bus phase voltages. - * Special attentions need to be paid to the buses within the subtransmission and the distribution system, if any, - * connected to the LV side of Delta/Yg connected step-down transformer - * - * steps: - * - * (1) initialization by setting the visited status false - * (2) search the step-down delta/Y connected transformers - * (3) starting from the low voltage side of the transformers, set the phase voltage with 30 deg lagging w.r.t the positive sequenc voltage, - * by assuming the connection meeting the U.S. Delta connection standard, with high voltage side leading 30 degree, always - * Finally, set the visited attribute to be true. - * (4) iterate over all step-down transformers and the connected subtransmissions - * (5) for the rest of the buses, set the phase votlages directly based on the positive sequence voltage - * - */ - - //step (1) - for(AcscBranch bra: this.getBranchList()){ - bra.setBooleanFlag(false); - } - for(Bus b: this.getBusList()){ - b.setBooleanFlag(false); - b.setIntFlag(0); - } - - double phaseShiftDeg = 0; - - for(AcscBranch bra: this.getBranchList()){ - if(bra.isActive() && bra.isXfr()){ - if((isDeltaConnected(bra.getXfrFromConnectCode()) && - !isDeltaConnected(bra.getXfrToConnectCode())) - - || - (!isDeltaConnected(bra.getXfrFromConnectCode()) && - isDeltaConnected(bra.getXfrToConnectCode()))){ - - bra.setBooleanFlag(true); - - //NOTE When Delta connection is on the low voltage side (step up), such as the case of Generation connection - // all buses on the low side should be shifted -30 deg. On the hand, if the the Delta Connection is on the high - // voltage side, the low voltage side should be shifted - 30 deg. - // - phaseShiftDeg = -30; - Bus3Phase StartingBus =null; - - //high voltage side leads 30 deg, always starts from the low voltage side - if(bra.getFromAclfBus().getBaseVoltage()>bra.getToAclfBus().getBaseVoltage()){ - - StartingBus = (Bus3Phase) bra.getToAclfBus(); - - if(isDeltaConnected(bra.getXfrFromConnectCode())) { // if low voltage side is delta connected, then it is delta11 - //TODO fix the input xfr connect code issue - bra.setXfrFromConnectCode(XfrConnectCode.DELTA11); - } - } - else { - - StartingBus = (Bus3Phase) bra.getFromAclfBus(); - if(isDeltaConnected(bra.getXfrToConnectCode())) { // if low voltage side is delta connected, then it is delta11 - - //TODO fix the input xfr connect code issue - bra.setXfrToConnectCode(XfrConnectCode.DELTA11); - } - } - - Complex vpos = StartingBus.getVoltage(); - Complex va = vpos.multiply(phaseShiftCplxFactor(phaseShiftDeg)); - Complex vb = va.multiply(phaseShiftCplxFactor(-120)); - Complex vc = va.multiply(phaseShiftCplxFactor(120)); - StartingBus.set3PhaseVoltages(new Complex3x1(va,vb,vc)); - StartingBus.setVoltage(StartingBus.getThreeSeqVoltage().b_1); - - Queue q = new LinkedList(); - q.add(StartingBus); - - BFSSubTransmission(phaseShiftDeg,q); - } - } - } - - - - // initialize the phase voltages of those which are not set before, three-phase generation power output and load - for(AcscBus b: this.getBusList()){ - - if(b.isActive() && !b.isBooleanFlag()){ - Complex vpos = b.getVoltage(); - Complex va = vpos; - Complex vb = va.multiply(phaseShiftCplxFactor(-120)); - Complex vc = va.multiply(phaseShiftCplxFactor(120)); - ((Bus3Phase) b).set3PhaseVoltages(new Complex3x1(va,vb,vc)); - } - - //initialize the 3p power output of generation; - if(b.isGen()){ - for(AclfGen gen: b.getContributeGenList()){ - if(gen instanceof Gen3Phase){ - Gen3Phase ph3Gen = (Gen3Phase) gen; - Complex phaseGen = gen.getGen();// phase gen and 3-phase gen are of the same value in PU - ph3Gen.setPower3Phase(new Complex3x1(phaseGen,phaseGen,phaseGen), UnitType.PU); - } - } - } - - // initialize the load 3-phase power - if(b.isLoad()){ - for(AclfLoad load: b.getContributeLoadList()){ - if(load instanceof Load3Phase){ - Load3Phase ph3Load = (Load3Phase) load; - Complex phaseLoad = load.getLoad(b.getVoltageMag()); // phase load and 3-phase load are of the same value in PU - - ph3Load.set3PhaseLoad(new Complex3x1(phaseLoad,phaseLoad,phaseLoad)); - } - } - } - - } - - - - return is3PhaseNetworkInitialized= true; - } - - private boolean isDeltaConnected(XfrConnectCode code){ - return code ==XfrConnectCode.DELTA || - code== XfrConnectCode.DELTA11; - } - - private void BFSSubTransmission (double phaseShiftDeg, Queue onceVisitedBuses){ - - //Retrieves and removes the head of this queue, or returns null if this queue is empty. - while(!onceVisitedBuses.isEmpty()){ - Bus3Phase startingBus = onceVisitedBuses.poll(); - startingBus.setBooleanFlag(true); - startingBus.setIntFlag(2); - - if(startingBus!=null){ - for(Branch connectedBra: startingBus.getBranchList()){ - if(connectedBra.isActive() && !connectedBra.isBooleanFlag()){ - try { - Bus findBus = connectedBra.getOppositeBus(startingBus); - - //update status - connectedBra.setBooleanFlag(true); - - //for first time visited buses - - if(findBus.getIntFlag()==0){ - findBus.setIntFlag(1); - onceVisitedBuses.add((Bus3Phase) findBus); - - // update the phase voltage - Complex vpos = ((AclfBus)findBus).getVoltage(); - Complex va = vpos.multiply(phaseShiftCplxFactor(phaseShiftDeg)); - Complex vb = va.multiply(phaseShiftCplxFactor(-120.0d)); - Complex vc = va.multiply(phaseShiftCplxFactor(120.0d)); - - ((Bus3Phase) findBus).set3PhaseVoltages(new Complex3x1(va,vb,vc)); - ((AclfBus)findBus).setVoltage(((Bus3Phase) findBus).getThreeSeqVoltage().b_1); - } - } catch (InterpssException e) { - - e.printStackTrace(); - } - - } - } - - } - - } - } - - private Complex phaseShiftCplxFactor(double shiftDeg){ - return new Complex(Math.cos(shiftDeg/180.0d*Math.PI),Math.sin(shiftDeg/180.0d*Math.PI)); - } - - @Override - public ISparseEqnComplexMatrix3x3 formYMatrixABC() throws Exception { - - double yiiMinTolerance = 1.0E-8; - - // check if load model is converted - if(!this.isLoadModelConverted ) - convertLoadModel(); - - yMatrixAbc = new SparseEqnComplexMatrix3x3Impl(getNoBus()); - - for(DStabBus b:this.getBusList()){ - if(b.isActive()){ - if(b instanceof Bus3Phase){ - int i = b.getSortNumber(); - Bus3Phase ph3Bus = (Bus3Phase) b; - Complex3x3 yii = ph3Bus.getYiiAbc(); - // check if there is any Yii = 0.0 (abs(Yii) <1.0E-8) - - if(yii.aa.abs()0){ - - for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ - if(load3p.isActive()){ - threePhasedynLoadEquivY = threePhasedynLoadEquivY.add(load3p.getEquivYabc()); - } - } - } - - //TODO process 1-phase dynamic loads on each phase - Complex phaseAdynLoadEquivY = new Complex(0,0); - Complex phaseBdynLoadEquivY = new Complex(0,0); - Complex phaseCdynLoadEquivY = new Complex(0,0); - - if(bus3p.getPhaseADynLoadList().size()>0){ - - for(DynLoadModel1Phase load:bus3p.getPhaseADynLoadList()){ - if(load.isActive()){ - phaseAdynLoadEquivY = phaseAdynLoadEquivY.add(load.getEquivY()); - - } - } - - } - - if(bus3p.getPhaseBDynLoadList().size()>0){ - - for(DynLoadModel1Phase load:bus3p.getPhaseBDynLoadList()){ - if(load.isActive()){ - phaseBdynLoadEquivY = phaseBdynLoadEquivY.add(load.getEquivY()); - - } - } - - } - - if(bus3p.getPhaseCDynLoadList().size()>0){ - - for(DynLoadModel1Phase load:bus3p.getPhaseCDynLoadList()){ - if(load.isActive()){ - phaseCdynLoadEquivY = phaseCdynLoadEquivY.add(load.getEquivY()); - - } - } - - - } - - if(phaseAdynLoadEquivY.abs()>0 || phaseBdynLoadEquivY.abs()>0 || phaseCdynLoadEquivY.abs()>0 ){ - Complex3x3 y = new Complex3x3(phaseAdynLoadEquivY,phaseBdynLoadEquivY,phaseCdynLoadEquivY) ; - - - yMatrixAbc.addToA(y, bus.getSortNumber(), bus.getSortNumber()); - } - - - // Consider the equivalent Y of three-phase dynamic loads - if(threePhasedynLoadEquivY.abs()>0){ - yMatrixAbc.addToA(threePhasedynLoadEquivY, bus.getSortNumber(), bus.getSortNumber()); - } - - - } - } - - - - - setYMatrixDirty(true); - - return yMatrixAbc; - } - - private void convertLoadModel() { - for ( DStabBus busi : getBusList() ) { - //only the active buses will be initialized - if(busi.isActive()){ - //init three sequence load - ThreeSeqLoadProcessor.initEquivLoadY120(busi); - } - } - this.isLoadModelConverted = true; - - } - - @Override - public ISparseEqnComplexMatrix3x3 getYMatrixABC(){ - return this.yMatrixAbc; - } - - @Override - public boolean run3PhaseLoadflow() { - throw new UnsupportedOperationException(); - } - - - @Override - public boolean solveNetEqn() { - try { - - if(isYMatrixDirty()){ - getYMatrixABC().luMatrix(Constants.Matrix_LU_Tolerance); - setYMatrixDirty(false); - } - - // Calculate and set generator injection current - for( Bus b : getBusList()) { - DStabBus bus = (DStabBus)b; - - if(bus.isActive()){ - Bus3Phase bus3p = (Bus3Phase) bus; - Complex3x1 iInject = new Complex3x1(); - - if(bus.getContributeGenList().size()>0){ - for(AclfGen gen: bus.getContributeGenList()){ - if(gen.isActive() && gen instanceof DStabGen){ - DStabGen dynGen = (DStabGen)gen; - if( dynGen.getDynamicGenDevice()!=null){ - DStabGen3PhaseAdapter gen3P = threePhaseGenAptr.apply(dynGen); - iInject = iInject.add(gen3P.getISource3Phase()); - - //System.out.println("Iinj@Gen-"+dynGen.getId()+", "+iInject.toString()); - } - - } - } - } - //TODO 3-phase dynamic load list - //if(bus3p.getp) - if(bus3p.isLoad()){ - - //// Phase A - if(bus3p.getPhaseADynLoadList().size()>0){ - Complex iPhAInj = new Complex(0,0); - - for(DynLoadModel1Phase load1p:bus3p.getPhaseADynLoadList()){ - if(load1p.isActive()){ - iPhAInj = iPhAInj.add(load1p.getNortonCurInj()); - // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); - } - } - - if(iPhAInj.abs()>0.0) - iInject.a_0 = iInject.a_0.add(iPhAInj); - } - - // Phase B - if(bus3p.getPhaseBDynLoadList().size()>0){ - Complex iPhBInj = new Complex(0,0); - - for(DynLoadModel1Phase load1p:bus3p.getPhaseBDynLoadList()){ - if(load1p.isActive()){ - iPhBInj = iPhBInj.add(load1p.getNortonCurInj()); - // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); - } - } - - if(iPhBInj.abs()>0.0) - iInject.b_1 = iInject.b_1.add(iPhBInj); - } - - // Phase C - if(bus3p.getPhaseCDynLoadList().size()>0){ - Complex iPhCInj = new Complex(0,0); - - for(DynLoadModel1Phase load1p:bus3p.getPhaseCDynLoadList()){ - if(load1p.isActive()){ - iPhCInj = iPhCInj.add(load1p.getNortonCurInj()); - // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); - } - } - - if(iPhCInj.abs()>0.0) - iInject.c_2 = iInject.c_2.add(iPhCInj); - } - - //TODO three-phase dynamic loads - - if(bus3p.getThreePhaseDynLoadList().size()>0){ - for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ - if(load3p.isActive()){ - iInject = iInject.add(load3p.getISource3Phase()); - } - } - } - } - - if(iInject == null){ - throw new Error (bus.getId()+" current injection is null"); - } - - // add external/customized bus current injection - if(this.get3phaseCustomCurrInjTable()!=null){ - if(this.get3phaseCustomCurrInjTable().get(bus.getId())!=null) - iInject = iInject.add(this.get3phaseCustomCurrInjTable().get(bus.getId())); - } - - getYMatrixABC().setBi(iInject, bus.getSortNumber()); - } - } - - // ISparseEqnComplexMatrix3x3 Yabc = getYMatrixABC(); - // System.out.println(Yabc.getSparseEqnComplex()); - - getYMatrixABC().solveEqn(); - - // update bus voltage and machine Pe - for( Bus b : getBusList()) { - DStabBus bus = (DStabBus)b; - if(bus.isActive()){ - Complex3x1 vabc = getYMatrixABC().getX(bus.getSortNumber()); - //if(bus.getId().equals("Bus12")) - //System.out.println("Bus, Vabc:"+b.getId()+","+vabc.toString()); - - if(!vabc.a_0.isNaN()){ - - //if(bus instanceof Bus3Phase){ - Bus3Phase bus3P = (Bus3Phase) bus; - bus3P.set3PhaseVoltages(vabc); - - // update the positive sequence voltage - Complex v = bus3P.getThreeSeqVoltage().b_1; - bus.setVoltage(v); - // System.out.println("posV @ bus :"+v.toString()+","+bus.getId()); - - // } - - } - else - throw new Error (bus.getId()+" solution voltage is NaN"); - } - } - - } - catch (IpssNumericException e) { - ipssLogger.severe(e.toString()); - return false; - } - - return true; - } - - @Override - public boolean initDStabNet() { - boolean initFlag = true; - IpssLogger.getLogger().info("Start three-phase DStabNetwork initialization..."); - - - //TODO this is a must step, otherwise the system cannot be initialized properly - if(this.getNetworkType()==NetworkType.TRANSMISSION && !is3PhaseNetworkInitialized) - initThreePhaseFromLfResult(); - - for ( DStabBus b : getBusList() ) { - - if( b instanceof Bus3Phase){ - Bus3Phase bus =(Bus3Phase) b; - - //only the active buses will be initialized - if(b.isActive()){ - // set bus initial vaule - bus.setInitLoad(bus.getLoadPQ()); - bus.setInitVoltMag(bus.getVoltageMag()); - bus.setVoltage(bus.getThreeSeqVoltage().b_1); // make sure the positive sequence voltage is set up; - - //save the three-phase voltage - bus.setThreePhaseInitVoltage(bus.get3PhaseVotlages()); - - //1) init bus dynamic signal calculation, - // for example, bus Frequency measurement - bus.initStates(); - - - //2) initialize the bus generator - //TODO add the three-phase dynamic generation list to the bus - bus.getContributeGenList().addAll(bus.getThreePhaseGenList()); - - for(AclfGen gen: bus.getContributeGenList()){ - if(gen.isActive() && gen instanceof DStabGen){ - DStabGen dynGen = (DStabGen) gen; - //TODO 11/19/2015 consider generic generation models - /* - if(dynGen.getMach()!=null){ - dynGen.getMach().calMultiFactors(); - if(!dynGen.getMach().initStates(bus)) - initFlag = false; - } - */ - - if(dynGen.getDynamicGenDevice()!=null){ - if(!dynGen.getDynamicGenDevice().initStates(bus)) - initFlag = false; - } - - } - } - - - //3) process the dynamic loads, for each load, subtract the portion of dynamic loads, including - // 3-phase dynamic loads and 1-phase dynamic loads from the total loads - - - if(b.isLoad()){ - - // first process the 3phase dynamic loads - double totalDynLoadPercent = 0; - Complex totalPosSeqDynLoadPQ = new Complex(0,0); - - if( b.getDynLoadModelList().size()>0){ - for(DynLoadModel load:bus.getDynLoadModelList()){ - if(load.isActive()){ - totalDynLoadPercent += load.getLoadPercent(); - - } - } - - // check the value of totalDynLoadPercent, it must be <=100.0; otherwise rescale it down to 100. - if(totalDynLoadPercent>100.0){ - ipssLogger.severe("The total dynamic loads accout for more than 100% of the bus load. Rescaled down to 100%"); - for(DynLoadModel load:bus.getDynLoadModelList()){ - if(load.isActive()){ - load.setLoadPercent(load.getLoadPercent()*100.0/totalDynLoadPercent); - } - } - totalDynLoadPercent = 100.0; - } - - // the init load is only available after initialization - for(DynLoadModel load:bus.getDynLoadModelList()){ - if(load.isActive()){ - load.initStates(); - totalPosSeqDynLoadPQ = totalPosSeqDynLoadPQ.add(load.getInitLoadPQ()); - } - } - - - } - - Complex orginalLoadPQ = bus.getNetLoadResults(); - bus.setNetLoadResults(orginalLoadPQ.subtract(totalPosSeqDynLoadPQ)); - - - //TODO init the single-phase, three-phase dynamic loads - - - // second, process the 1-phase dynamic loads - - - Complex totalPhaseADynLoadPQ = new Complex(0,0); - Complex totalPhaseBDynLoadPQ = new Complex(0,0); - Complex totalPhaseCDynLoadPQ = new Complex(0,0); - Complex3x1 total3PhaseDynLoadPQ = new Complex3x1(); - - - //TODO check the total dynamic LOAD percentage - - - for(DynLoadModel1Phase dynLoadPA : bus.getPhaseADynLoadList()){ - if(dynLoadPA.isActive()){ - dynLoadPA.initStates(); - - totalPhaseADynLoadPQ = totalPhaseADynLoadPQ.add(dynLoadPA.getInitLoadPQ()); - } - } - - for(DynLoadModel1Phase dynLoadPB : bus.getPhaseBDynLoadList()){ - if(dynLoadPB.isActive()){ - dynLoadPB.initStates(); - - totalPhaseBDynLoadPQ = totalPhaseBDynLoadPQ.add(dynLoadPB.getInitLoadPQ()); - } - } - - - for(DynLoadModel1Phase dynLoadPC : bus.getPhaseCDynLoadList()){ - if(dynLoadPC.isActive()){ - dynLoadPC.initStates(); - - totalPhaseCDynLoadPQ = totalPhaseCDynLoadPQ.add(dynLoadPC.getInitLoadPQ()); - } - } - - - for(DynLoadModel3Phase dynLoad3P : bus.getThreePhaseDynLoadList()){ - if(dynLoad3P.isActive()){ - dynLoad3P.initStates(); - total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add(dynLoad3P.getInitLoadPQ3Phase()); - } - } - - // sum up the 1-phase and 3-phase dynamic loads - total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add( - new Complex3x1(totalPhaseADynLoadPQ,totalPhaseBDynLoadPQ,totalPhaseCDynLoadPQ)); - - - if(bus.get3PhaseTotalLoad().abs()>0){ - - bus.set3PhaseNetLoadResults(bus.get3PhaseTotalLoad().subtract(total3PhaseDynLoadPQ)); - } - - - - // add the dynamic loads to dynamicBusDeviceList() - bus.getDynamicBusDeviceList().addAll(bus.getDynLoadModelList()); //three-sequence based - bus.getDynamicBusDeviceList().addAll(bus.getPhaseADynLoadList()); // single-phase based - bus.getDynamicBusDeviceList().addAll(bus.getPhaseBDynLoadList()); // single-phase based - bus.getDynamicBusDeviceList().addAll(bus.getPhaseCDynLoadList()); // single-phase based - bus.getDynamicBusDeviceList().addAll(bus.getThreePhaseDynLoadList()); // three-phase based - - }//end if-isLoad - - - } - - - - } - //end of if- check if the processing bus is of Bus3Phase type - else{ - throw new Error("The processing bus is not a Bus3Phase type # "+b.getId()); - } - } - - //form the Ymatrix - try { - formYMatrixABC(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - initFlag = false; - } - - if(initFlag) this.isInitialized = true; - return initFlag; - } - - @Override - public boolean solvePosSeqNetEqn() { -// if(this.getYMatrix()== null){ -// this.yMatrix = this.formYMatrix(SequenceCode.POSITIVE, false); -// this.setYMatrixDirty(true); -// } - return super.solveNetEqn(); - } - - @Override - public boolean initPosSeqDStabNet() { - - return super.initDStabNet(); - } - - @Override - public Hashtable get3phaseCustomCurrInjTable() { - - return this.threePhaseCurInjTable; - } - - @Override - public void set3phaseCustomCurrInjTable( - Hashtable new3PhaseCurInjTable) { - this.threePhaseCurInjTable = new3PhaseCurInjTable; - - } - - - - - -} +package org.ipss.threePhase.dynamic.impl; + +import static com.interpss.common.util.IpssLogger.ipssLogger; +import static org.ipss.threePhase.util.ThreePhaseUtilFunction.threePhaseGenAptr; + +import java.util.Hashtable; +import java.util.LinkedList; +import java.util.Queue; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Complex3x3; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.interpss.numeric.exp.IpssNumericException; +import org.interpss.numeric.sparse.ISparseEqnComplexMatrix3x3; +import org.ipss.threePhase.basic.Branch3Phase; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Gen3Phase; +import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.dynamic.model.DStabGen3PhaseAdapter; +import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; +import org.ipss.threePhase.dynamic.model.DynLoadModel3Phase; +import org.ipss.threePhase.util.ThreeSeqLoadProcessor; + +import com.interpss.common.datatype.Constants; +import com.interpss.common.exp.InterpssException; +import com.interpss.common.util.IpssLogger; +import com.interpss.core.aclf.AclfBus; +import com.interpss.core.aclf.AclfGen; +import com.interpss.core.aclf.AclfLoad; +import com.interpss.core.acsc.AcscBranch; +import com.interpss.core.acsc.AcscBus; +import com.interpss.core.acsc.SequenceCode; +import com.interpss.core.acsc.XfrConnectCode; +import com.interpss.core.net.Branch; +import com.interpss.core.net.Bus; +import com.interpss.core.net.NetworkType; +import com.interpss.core.sparse.impl.SparseEqnComplexMatrix3x3Impl; +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.DStabGen; +import com.interpss.dstab.dynLoad.DynLoadModel; +import com.interpss.dstab.impl.DStabilityNetworkImpl; + +public class DStabNetwork3phaseImpl extends DStabilityNetworkImpl implements DStabNetwork3Phase { + + protected ISparseEqnComplexMatrix3x3 yMatrixAbc = null; + protected boolean is3PhaseNetworkInitialized = false; + protected Hashtable threePhaseCurInjTable = null; + private boolean isLoadModelConverted = false; + + + @Override + public boolean initThreePhaseFromLfResult() { + + /* + * initialize the bus phase voltages. + * Special attentions need to be paid to the buses within the subtransmission and the distribution system, if any, + * connected to the LV side of Delta/Yg connected step-down transformer + * + * steps: + * + * (1) initialization by setting the visited status false + * (2) search the step-down delta/Y connected transformers + * (3) starting from the low voltage side of the transformers, set the phase voltage with 30 deg lagging w.r.t the positive sequenc voltage, + * by assuming the connection meeting the U.S. Delta connection standard, with high voltage side leading 30 degree, always + * Finally, set the visited attribute to be true. + * (4) iterate over all step-down transformers and the connected subtransmissions + * (5) for the rest of the buses, set the phase votlages directly based on the positive sequence voltage + * + */ + + //step (1) + for(AcscBranch bra: this.getBranchList()){ + bra.setBooleanFlag(false); + } + for(Bus b: this.getBusList()){ + b.setBooleanFlag(false); + b.setIntFlag(0); + } + + double phaseShiftDeg = 0; + + for(AcscBranch bra: this.getBranchList()){ + if(bra.isActive() && bra.isXfr()){ + if((isDeltaConnected(bra.getXfrFromConnectCode()) && + !isDeltaConnected(bra.getXfrToConnectCode())) + + || + (!isDeltaConnected(bra.getXfrFromConnectCode()) && + isDeltaConnected(bra.getXfrToConnectCode()))){ + + bra.setBooleanFlag(true); + + //NOTE When Delta connection is on the low voltage side (step up), such as the case of Generation connection + // all buses on the low side should be shifted -30 deg. On the hand, if the the Delta Connection is on the high + // voltage side, the low voltage side should be shifted - 30 deg. + // + phaseShiftDeg = -30; + Bus3Phase StartingBus =null; + + //high voltage side leads 30 deg, always starts from the low voltage side + if(bra.getFromAclfBus().getBaseVoltage()>bra.getToAclfBus().getBaseVoltage()){ + + StartingBus = (Bus3Phase) bra.getToAclfBus(); + + if(isDeltaConnected(bra.getXfrFromConnectCode())) { // if low voltage side is delta connected, then it is delta11 + //TODO fix the input xfr connect code issue + bra.setXfrFromConnectCode(XfrConnectCode.DELTA11); + } + } + else { + + StartingBus = (Bus3Phase) bra.getFromAclfBus(); + if(isDeltaConnected(bra.getXfrToConnectCode())) { // if low voltage side is delta connected, then it is delta11 + + //TODO fix the input xfr connect code issue + bra.setXfrToConnectCode(XfrConnectCode.DELTA11); + } + } + + Complex vpos = StartingBus.getVoltage(); + Complex va = vpos.multiply(phaseShiftCplxFactor(phaseShiftDeg)); + Complex vb = va.multiply(phaseShiftCplxFactor(-120)); + Complex vc = va.multiply(phaseShiftCplxFactor(120)); + StartingBus.set3PhaseVoltages(new Complex3x1(va,vb,vc)); + StartingBus.setVoltage(StartingBus.getThreeSeqVoltage().b_1); + + Queue q = new LinkedList(); + q.add(StartingBus); + + BFSSubTransmission(phaseShiftDeg,q); + } + } + } + + + + // initialize the phase voltages of those which are not set before, three-phase generation power output and load + for(AcscBus b: this.getBusList()){ + + if(b.isActive() && !b.isBooleanFlag()){ + Complex vpos = b.getVoltage(); + Complex va = vpos; + Complex vb = va.multiply(phaseShiftCplxFactor(-120)); + Complex vc = va.multiply(phaseShiftCplxFactor(120)); + ((Bus3Phase) b).set3PhaseVoltages(new Complex3x1(va,vb,vc)); + } + + //initialize the 3p power output of generation; + if(b.isGen()){ + for(AclfGen gen: b.getContributeGenList()){ + if(gen instanceof Gen3Phase){ + Gen3Phase ph3Gen = (Gen3Phase) gen; + Complex phaseGen = gen.getGen();// phase gen and 3-phase gen are of the same value in PU + ph3Gen.setPower3Phase(new Complex3x1(phaseGen,phaseGen,phaseGen), UnitType.PU); + } + } + } + + // initialize the load 3-phase power + if(b.isLoad()){ + for(AclfLoad load: b.getContributeLoadList()){ + if(load instanceof Load3Phase){ + Load3Phase ph3Load = (Load3Phase) load; + Complex phaseLoad = load.getLoad(b.getVoltageMag()); // phase load and 3-phase load are of the same value in PU + + ph3Load.set3PhaseLoad(new Complex3x1(phaseLoad,phaseLoad,phaseLoad)); + } + } + } + + } + + + + return is3PhaseNetworkInitialized= true; + } + + private boolean isDeltaConnected(XfrConnectCode code){ + return code ==XfrConnectCode.DELTA || + code== XfrConnectCode.DELTA11; + } + + private void BFSSubTransmission (double phaseShiftDeg, Queue onceVisitedBuses){ + + //Retrieves and removes the head of this queue, or returns null if this queue is empty. + while(!onceVisitedBuses.isEmpty()){ + Bus3Phase startingBus = onceVisitedBuses.poll(); + startingBus.setBooleanFlag(true); + startingBus.setIntFlag(2); + + if(startingBus!=null){ + for(Branch connectedBra: startingBus.getBranchList()){ + if(connectedBra.isActive() && !connectedBra.isBooleanFlag()){ + try { + Bus findBus = connectedBra.getOppositeBus(startingBus); + + //update status + connectedBra.setBooleanFlag(true); + + //for first time visited buses + + if(findBus.getIntFlag()==0){ + findBus.setIntFlag(1); + onceVisitedBuses.add((Bus3Phase) findBus); + + // update the phase voltage + Complex vpos = ((AclfBus)findBus).getVoltage(); + Complex va = vpos.multiply(phaseShiftCplxFactor(phaseShiftDeg)); + Complex vb = va.multiply(phaseShiftCplxFactor(-120.0d)); + Complex vc = va.multiply(phaseShiftCplxFactor(120.0d)); + + ((Bus3Phase) findBus).set3PhaseVoltages(new Complex3x1(va,vb,vc)); + ((AclfBus)findBus).setVoltage(((Bus3Phase) findBus).getThreeSeqVoltage().b_1); + } + } catch (InterpssException e) { + + e.printStackTrace(); + } + + } + } + + } + + } + } + + private Complex phaseShiftCplxFactor(double shiftDeg){ + return new Complex(Math.cos(shiftDeg/180.0d*Math.PI),Math.sin(shiftDeg/180.0d*Math.PI)); + } + + @Override + public ISparseEqnComplexMatrix3x3 formYMatrixABC() throws Exception { + + double yiiMinTolerance = 1.0E-8; + + // check if load model is converted + if(!this.isLoadModelConverted ) + convertLoadModel(); + + yMatrixAbc = new SparseEqnComplexMatrix3x3Impl(getNoBus()); + + for(DStabBus b:this.getBusList()){ + if(b.isActive()){ + if(b instanceof Bus3Phase){ + int i = b.getSortNumber(); + Bus3Phase ph3Bus = (Bus3Phase) b; + Complex3x3 yii = ph3Bus.getYiiAbc(); + // check if there is any Yii = 0.0 (abs(Yii) <1.0E-8) + + if(yii.aa.abs()0){ + + for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ + if(load3p.isActive()){ + threePhasedynLoadEquivY = threePhasedynLoadEquivY.add(load3p.getEquivYabc()); + } + } + } + + //TODO process 1-phase dynamic loads on each phase + Complex phaseAdynLoadEquivY = new Complex(0,0); + Complex phaseBdynLoadEquivY = new Complex(0,0); + Complex phaseCdynLoadEquivY = new Complex(0,0); + + if(bus3p.getPhaseADynLoadList().size()>0){ + + for(DynLoadModel1Phase load:bus3p.getPhaseADynLoadList()){ + if(load.isActive()){ + phaseAdynLoadEquivY = phaseAdynLoadEquivY.add(load.getEquivY()); + + } + } + + } + + if(bus3p.getPhaseBDynLoadList().size()>0){ + + for(DynLoadModel1Phase load:bus3p.getPhaseBDynLoadList()){ + if(load.isActive()){ + phaseBdynLoadEquivY = phaseBdynLoadEquivY.add(load.getEquivY()); + + } + } + + } + + if(bus3p.getPhaseCDynLoadList().size()>0){ + + for(DynLoadModel1Phase load:bus3p.getPhaseCDynLoadList()){ + if(load.isActive()){ + phaseCdynLoadEquivY = phaseCdynLoadEquivY.add(load.getEquivY()); + + } + } + + + } + + if(phaseAdynLoadEquivY.abs()>0 || phaseBdynLoadEquivY.abs()>0 || phaseCdynLoadEquivY.abs()>0 ){ + Complex3x3 y = new Complex3x3(phaseAdynLoadEquivY,phaseBdynLoadEquivY,phaseCdynLoadEquivY) ; + + + yMatrixAbc.addToA(y, bus.getSortNumber(), bus.getSortNumber()); + } + + + // Consider the equivalent Y of three-phase dynamic loads + if(threePhasedynLoadEquivY.abs()>0){ + yMatrixAbc.addToA(threePhasedynLoadEquivY, bus.getSortNumber(), bus.getSortNumber()); + } + + + } + } + + + + + setYMatrixDirty(true); + + return yMatrixAbc; + } + + private void convertLoadModel() { + for ( DStabBus busi : getBusList() ) { + //only the active buses will be initialized + if(busi.isActive()){ + //init three sequence load + ThreeSeqLoadProcessor.initEquivLoadY120(busi); + } + } + this.isLoadModelConverted = true; + + } + + @Override + public ISparseEqnComplexMatrix3x3 getYMatrixABC(){ + return this.yMatrixAbc; + } + + @Override + public boolean run3PhaseLoadflow() { + throw new UnsupportedOperationException(); + } + + + @Override + public boolean solveNetEqn() { + try { + + if(isYMatrixDirty()){ + getYMatrixABC().luMatrix(Constants.Matrix_LU_Tolerance); + setYMatrixDirty(false); + } + + // Calculate and set generator injection current + for( Bus b : getBusList()) { + DStabBus bus = (DStabBus)b; + + if(bus.isActive()){ + Bus3Phase bus3p = (Bus3Phase) bus; + Complex3x1 iInject = new Complex3x1(); + + if(bus.getContributeGenList().size()>0){ + for(AclfGen gen: bus.getContributeGenList()){ + if(gen.isActive() && gen instanceof DStabGen){ + DStabGen dynGen = (DStabGen)gen; + if( dynGen.getDynamicGenDevice()!=null){ + DStabGen3PhaseAdapter gen3P = threePhaseGenAptr.apply(dynGen); + iInject = iInject.add(gen3P.getISource3Phase()); + + //System.out.println("Iinj@Gen-"+dynGen.getId()+", "+iInject.toString()); + } + + } + } + } + //TODO 3-phase dynamic load list + //if(bus3p.getp) + if(bus3p.isLoad()){ + + //// Phase A + if(bus3p.getPhaseADynLoadList().size()>0){ + Complex iPhAInj = new Complex(0,0); + + for(DynLoadModel1Phase load1p:bus3p.getPhaseADynLoadList()){ + if(load1p.isActive()){ + iPhAInj = iPhAInj.add(load1p.getNortonCurInj()); + // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); + } + } + + if(iPhAInj.abs()>0.0) + iInject.a_0 = iInject.a_0.add(iPhAInj); + } + + // Phase B + if(bus3p.getPhaseBDynLoadList().size()>0){ + Complex iPhBInj = new Complex(0,0); + + for(DynLoadModel1Phase load1p:bus3p.getPhaseBDynLoadList()){ + if(load1p.isActive()){ + iPhBInj = iPhBInj.add(load1p.getNortonCurInj()); + // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); + } + } + + if(iPhBInj.abs()>0.0) + iInject.b_1 = iInject.b_1.add(iPhBInj); + } + + // Phase C + if(bus3p.getPhaseCDynLoadList().size()>0){ + Complex iPhCInj = new Complex(0,0); + + for(DynLoadModel1Phase load1p:bus3p.getPhaseCDynLoadList()){ + if(load1p.isActive()){ + iPhCInj = iPhCInj.add(load1p.getNortonCurInj()); + // System.out.println("Iinj@Load-"+bus3p.getId()+", "+ load1p.getId()+","+load1p.getCompensateCurInj().toString()); + } + } + + if(iPhCInj.abs()>0.0) + iInject.c_2 = iInject.c_2.add(iPhCInj); + } + + //TODO three-phase dynamic loads + + if(bus3p.getThreePhaseDynLoadList().size()>0){ + for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ + if(load3p.isActive()){ + iInject = iInject.add(load3p.getISource3Phase()); + } + } + } + } + + if(iInject == null){ + throw new Error (bus.getId()+" current injection is null"); + } + + // add external/customized bus current injection + if(this.get3phaseCustomCurrInjTable()!=null){ + if(this.get3phaseCustomCurrInjTable().get(bus.getId())!=null) + iInject = iInject.add(this.get3phaseCustomCurrInjTable().get(bus.getId())); + } + + getYMatrixABC().setBi(iInject, bus.getSortNumber()); + } + } + + // ISparseEqnComplexMatrix3x3 Yabc = getYMatrixABC(); + // System.out.println(Yabc.getSparseEqnComplex()); + + getYMatrixABC().solveEqn(); + + // update bus voltage and machine Pe + for( Bus b : getBusList()) { + DStabBus bus = (DStabBus)b; + if(bus.isActive()){ + Complex3x1 vabc = getYMatrixABC().getX(bus.getSortNumber()); + //if(bus.getId().equals("Bus12")) + //System.out.println("Bus, Vabc:"+b.getId()+","+vabc.toString()); + + if(!vabc.a_0.isNaN()){ + + //if(bus instanceof Bus3Phase){ + Bus3Phase bus3P = (Bus3Phase) bus; + bus3P.set3PhaseVoltages(vabc); + + // update the positive sequence voltage + Complex v = bus3P.getThreeSeqVoltage().b_1; + bus.setVoltage(v); + // System.out.println("posV @ bus :"+v.toString()+","+bus.getId()); + + // } + + } + else + throw new Error (bus.getId()+" solution voltage is NaN"); + } + } + + } + catch (IpssNumericException e) { + ipssLogger.severe(e.toString()); + return false; + } + + return true; + } + + @Override + public boolean initDStabNet() { + boolean initFlag = true; + IpssLogger.getLogger().info("Start three-phase DStabNetwork initialization..."); + + + //TODO this is a must step, otherwise the system cannot be initialized properly + if(this.getNetworkType()==NetworkType.TRANSMISSION && !is3PhaseNetworkInitialized) + initThreePhaseFromLfResult(); + + for ( DStabBus b : getBusList() ) { + + if( b instanceof Bus3Phase){ + Bus3Phase bus =(Bus3Phase) b; + + //only the active buses will be initialized + if(b.isActive()){ + // set bus initial vaule + bus.setInitLoad(bus.getLoadPQ()); + bus.setInitVoltMag(bus.getVoltageMag()); + bus.setVoltage(bus.getThreeSeqVoltage().b_1); // make sure the positive sequence voltage is set up; + + //save the three-phase voltage + bus.setThreePhaseInitVoltage(bus.get3PhaseVotlages()); + + //1) init bus dynamic signal calculation, + // for example, bus Frequency measurement + bus.initStates(); + + + //2) initialize the bus generator + //TODO add the three-phase dynamic generation list to the bus + bus.getContributeGenList().addAll(bus.getThreePhaseGenList()); + + for(AclfGen gen: bus.getContributeGenList()){ + if(gen.isActive() && gen instanceof DStabGen){ + DStabGen dynGen = (DStabGen) gen; + //TODO 11/19/2015 consider generic generation models + /* + if(dynGen.getMach()!=null){ + dynGen.getMach().calMultiFactors(); + if(!dynGen.getMach().initStates(bus)) + initFlag = false; + } + */ + + if(dynGen.getDynamicGenDevice()!=null){ + if(!dynGen.getDynamicGenDevice().initStates(bus)) + initFlag = false; + } + + } + } + + + //3) process the dynamic loads, for each load, subtract the portion of dynamic loads, including + // 3-phase dynamic loads and 1-phase dynamic loads from the total loads + + + if(b.isLoad()){ + + // first process the 3phase dynamic loads + double totalDynLoadPercent = 0; + Complex totalPosSeqDynLoadPQ = new Complex(0,0); + + if( b.getDynLoadModelList().size()>0){ + for(DynLoadModel load:bus.getDynLoadModelList()){ + if(load.isActive()){ + totalDynLoadPercent += load.getLoadPercent(); + + } + } + + // check the value of totalDynLoadPercent, it must be <=100.0; otherwise rescale it down to 100. + if(totalDynLoadPercent>100.0){ + ipssLogger.severe("The total dynamic loads accout for more than 100% of the bus load. Rescaled down to 100%"); + for(DynLoadModel load:bus.getDynLoadModelList()){ + if(load.isActive()){ + load.setLoadPercent(load.getLoadPercent()*100.0/totalDynLoadPercent); + } + } + totalDynLoadPercent = 100.0; + } + + // the initialized load power is only available after initialization of the dynLoadModel + for(DynLoadModel load:bus.getDynLoadModelList()){ + if(load.isActive()){ + load.initStates(); + totalPosSeqDynLoadPQ = totalPosSeqDynLoadPQ.add(load.getInitLoadPQ()); + } + } + + + } + + Complex orginalLoadPQ = bus.getNetLoadResults(); + bus.setNetLoadResults(orginalLoadPQ.subtract(totalPosSeqDynLoadPQ)); + + + //TODO init the single-phase, three-phase dynamic loads + + + // second, process the 1-phase dynamic loads + + + Complex totalPhaseADynLoadPQ = new Complex(0,0); + Complex totalPhaseBDynLoadPQ = new Complex(0,0); + Complex totalPhaseCDynLoadPQ = new Complex(0,0); + Complex3x1 total3PhaseDynLoadPQ = new Complex3x1(); + + + //TODO check the total dynamic LOAD percentage + + + for(DynLoadModel1Phase dynLoadPA : bus.getPhaseADynLoadList()){ + if(dynLoadPA.isActive()){ + dynLoadPA.initStates(); + + totalPhaseADynLoadPQ = totalPhaseADynLoadPQ.add(dynLoadPA.getInitLoadPQ()); + } + } + + for(DynLoadModel1Phase dynLoadPB : bus.getPhaseBDynLoadList()){ + if(dynLoadPB.isActive()){ + dynLoadPB.initStates(); + + totalPhaseBDynLoadPQ = totalPhaseBDynLoadPQ.add(dynLoadPB.getInitLoadPQ()); + } + } + + + for(DynLoadModel1Phase dynLoadPC : bus.getPhaseCDynLoadList()){ + if(dynLoadPC.isActive()){ + dynLoadPC.initStates(); + + totalPhaseCDynLoadPQ = totalPhaseCDynLoadPQ.add(dynLoadPC.getInitLoadPQ()); + } + } + + + for(DynLoadModel3Phase dynLoad3P : bus.getThreePhaseDynLoadList()){ + if(dynLoad3P.isActive()){ + dynLoad3P.initStates(); + total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add(dynLoad3P.getInitLoadPQ3Phase()); + } + } + + // sum up the 1-phase and 3-phase dynamic loads + total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add( + new Complex3x1(totalPhaseADynLoadPQ,totalPhaseBDynLoadPQ,totalPhaseCDynLoadPQ)); + + + if(bus.get3PhaseTotalLoad().abs()>0){ + + bus.set3PhaseNetLoadResults(bus.get3PhaseTotalLoad().subtract(total3PhaseDynLoadPQ)); + } + + + + // add the dynamic loads to dynamicBusDeviceList() + bus.getDynamicBusDeviceList().addAll(bus.getDynLoadModelList()); //three-sequence based + bus.getDynamicBusDeviceList().addAll(bus.getPhaseADynLoadList()); // single-phase based + bus.getDynamicBusDeviceList().addAll(bus.getPhaseBDynLoadList()); // single-phase based + bus.getDynamicBusDeviceList().addAll(bus.getPhaseCDynLoadList()); // single-phase based + bus.getDynamicBusDeviceList().addAll(bus.getThreePhaseDynLoadList()); // three-phase based + + }//end if-isLoad + + + } + + + + } + //end of if- check if the processing bus is of Bus3Phase type + else{ + throw new Error("The processing bus is not a Bus3Phase type # "+b.getId()); + } + } + + //form the Ymatrix + try { + formYMatrixABC(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + initFlag = false; + } + + if(initFlag) this.isInitialized = true; + return initFlag; + } + + @Override + public boolean solvePosSeqNetEqn() { +// if(this.getYMatrix()== null){ +// this.yMatrix = this.formYMatrix(SequenceCode.POSITIVE, false); +// this.setYMatrixDirty(true); +// } + return super.solveNetEqn(); + } + + @Override + public boolean initPosSeqDStabNet() { + + return super.initDStabNet(); + } + + @Override + public Hashtable get3phaseCustomCurrInjTable() { + + return this.threePhaseCurInjTable; + } + + @Override + public void set3phaseCustomCurrInjTable( + Hashtable new3PhaseCurInjTable) { + this.threePhaseCurInjTable = new3PhaseCurInjTable; + + } + + + + + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java index 6a54023..3287aef 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java @@ -273,9 +273,9 @@ private boolean FBSPowerflow(){ if(bra.getFromBus().getId().equals(bus.getId())){ - if(bra3P.getCurrentAbcAtFromSide()==null){ - System.out.println("Current At From Side is null for branch #"+ bra3P.getId()); - } +// if(bra3P.getCurrentAbcAtFromSide()==null){ +// System.out.println("Current At From Side is null for branch #"+ bra3P.getId()); +// } sumOfBranchCurrents= sumOfBranchCurrents.add(bra3P.getCurrentAbcAtFromSide()); } else{ @@ -312,7 +312,7 @@ else if(bra.isActive() && bra.getIntFlag() ==0){ if(busSelfEquivCurInj3Ph == null){ throw new Error("Bus current injection is NULL @ Bus: "+bus3P.getId()); } - else if(busSelfEquivCurInj3Ph.a_0.isNaN()){ + else if(busSelfEquivCurInj3Ph.a_0.isNaN()||busSelfEquivCurInj3Ph.b_1.isNaN()||busSelfEquivCurInj3Ph.c_2.isNaN()){ throw new Error("Bus current injection is NaN @ Bus: "+bus3P.getId()); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java new file mode 100644 index 0000000..832cb83 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java @@ -0,0 +1,236 @@ +package org.ipss.threePhase.test; + +import static org.junit.Assert.assertTrue; + +import java.util.logging.Level; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.IpssCorePlugin; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.data_parser.OpenDSSDataParser; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.dynamic.algo.DynamicEventProcessor3Phase; +import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; +import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; +import org.ipss.threePhase.util.ThreePhaseAclfOutFunc; +import org.ipss.threePhase.util.ThreePhaseObjectFactory; +import org.junit.Test; + +import com.interpss.DStabObjectFactory; +import com.interpss.common.exp.InterpssException; +import com.interpss.core.acsc.fault.SimpleFaultCode; +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.DStabGen; +import com.interpss.dstab.algo.DynamicSimuAlgorithm; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.cache.StateMonitor; +import com.interpss.dstab.cache.StateMonitor.MonitorRecord; +import com.interpss.dstab.mach.EConstMachine; +import com.interpss.dstab.mach.MachineType; + +public class IEEE123Feeder_Dstab_Test { + + //@Test + public void testIEEE123BusPowerflow(){ + + IpssCorePlugin.init(); + IpssCorePlugin.setLoggerLevel(Level.INFO); + + OpenDSSDataParser parser = new OpenDSSDataParser(); + parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master_Modified_v2.dss"); + + parser.calcVoltageBases(); + + double mvaBase = 1.0; + parser.convertActualValuesToPU(1.0); + + DStabNetwork3Phase distNet = parser.getDistNetwork(); + +// String netStrFileName = "testData\\feeder\\IEEE123\\ieee123_modified_netString.dat"; +// try { +// Files.write(Paths.get(netStrFileName), parser.getDistNetwork().net2String().getBytes()); +// } catch (IOException e) { +// +// e.printStackTrace(); +// } + + // set the turn ratios of regulators + parser.getBranchByName("reg1a").setToTurnRatio(1.0438); + + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(distNet); + //distPFAlgo.orderDistributionBuses(true); + distPFAlgo.setInitBusVoltageEnabled(true); + //distPFAlgo.setMaxIteration(1); + distPFAlgo.setTolerance(5.0E-3); // tolearnce = 5 kva + assertTrue(distPFAlgo.powerflow()); + + System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(distNet)); + + Bus3Phase bus150r = (Bus3Phase) distNet.getBus("150r"); + Complex3x1 vabc_150r = bus150r.get3PhaseVotlages(); + /* + * 150r,1.0444156221522982,-3.212270295862824E-4,1.043045526755821,4.1894310060612145,1.0433712760113691,2.0939131182587714,1.04442 + j-0.00034 -0.52094 + j-0.90364 -0.52125 + j0.90384 + */ + //assertTrue(vabc_150r.subtract(new Complex3x1(new Complex(1.04442,-0.00034),new Complex(-0.52094,-0.90364),new Complex(-0.52125,0.90384))).absMax()<1.0E-4); + + /// Compared with IEEE TEST FEEDER RESULTS + //RG1 | 1.0437 at .00 | 1.0438 at -120.00 | 1.0438 at 120.00 | +// assertTrue(Math.abs(vabc_150r.a_0.abs()-1.0437)<1.0E-3); +// assertTrue(Math.abs(vabc_150r.b_1.abs()-1.0438)<1.0E-3); +// assertTrue(Math.abs(vabc_150r.c_2.abs()-1.0438)<1.0E-3); + + Bus3Phase bus21 = (Bus3Phase) distNet.getBus("21"); + Complex3x1 vabc_21 = bus21.get3PhaseVotlages(); + /* + * 21,0.9976629334520096,-0.039839533149384404,1.0320577255690082,4.166775074256249,1.0114596191804741,2.0742543870511136,0.99687 + j-0.03974 -0.53558 + j-0.88221 -0.48799 + j0.88596 + */ + + + /// Compared with IEEE TEST FEEDER RESULTS + // 21 | .9983 at -2.34 | 1.0320 at -121.22 | 1.0111 at 118.81 | .441 +// assertTrue(Math.abs(vabc_21.a_0.abs()-0.9983)<1.0E-3); //0.9983 is IEEE TEST FEEDER RESULT +// assertTrue(Math.abs(vabc_21.b_1.abs()-1.0320)<1.0E-3); +// assertTrue(Math.abs(vabc_21.c_2.abs()-1.0111)<1.0E-3); + + Bus3Phase bus30 = (Bus3Phase) distNet.getBus("30"); + Complex3x1 vabc_30 = bus30.get3PhaseVotlages(); + + /* + *30,0.9963094030535219,-0.04263498620437,1.0332257087662153,4.167548363697641,1.008218641157312,2.073577445296613,0.9954 + j-0.04246 -0.5355 + j-0.88362 -0.48582 + j0.88345 + */ + + /// Compared with IEEE TEST FEEDER RESULTS + // 30 | .9969 at -2.50 | 1.0331 at -121.18 | 1.0078 at 118.77 | .701 +// assertTrue(Math.abs(vabc_30.a_0.abs()-0.9969)<1.0E-3); +// assertTrue(Math.abs(vabc_30.b_1.abs()-1.0331)<1.0E-3); +// assertTrue(Math.abs(vabc_30.c_2.abs()-1.0078)<1.0E-3); + } + + @Test + public void testIEEE123BusDstabSim() throws InterpssException{ + + IpssCorePlugin.init(); + IpssCorePlugin.setLoggerLevel(Level.INFO); + + OpenDSSDataParser parser = new OpenDSSDataParser(); + parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master_Modified_v2.dss"); + + parser.calcVoltageBases(); + + double mvaBase = 100.0; + parser.convertActualValuesToPU(mvaBase); + + DStabNetwork3Phase distNet = parser.getDistNetwork(); + +// String netStrFileName = "testData\\feeder\\IEEE123\\ieee123_modified_netString.dat"; +// try { +// Files.write(Paths.get(netStrFileName), parser.getDistNetwork().net2String().getBytes()); +// } catch (IOException e) { +// +// e.printStackTrace(); +// } + + // set the turn ratios of regulators + parser.getBranchByName("reg1a").setToTurnRatio(1.0438); + + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(distNet); + //distPFAlgo.orderDistributionBuses(true); + //distPFAlgo.setInitBusVoltageEnabled(true); + //distPFAlgo.setMaxIteration(1); + distPFAlgo.setTolerance(5.0E-3); // tolearnce = max voltage difference of two steps + assertTrue(distPFAlgo.powerflow()); + + // output three phase total load + for(DStabBus bus: distNet.getBusList()){ + Bus3Phase bus3P = (Bus3Phase) bus; + bus3P.get3PhaseTotalLoad(); + } + + // Add the dyanmic machine to the source Bus + Bus3Phase bus150 = (Bus3Phase) distNet.getBus("150"); + + DStabGen constantGen = DStabObjectFactory.createDStabGen(); + constantGen.setId("Source"); + constantGen.setMvaBase(100); + constantGen.setPosGenZ(new Complex(0.0,0.05)); + constantGen.setNegGenZ(new Complex(0.0,0.05)); + constantGen.setZeroGenZ(new Complex(0.0,0.05)); + bus150.getContributeGenList().add(constantGen); + + + EConstMachine mach = (EConstMachine)DStabObjectFactory. + createMachine("MachId", "MachName", MachineType.ECONSTANT, distNet, "150", "Source"); + + mach.setRating(100, UnitType.mVA, distNet.getBaseKva()); + mach.setRatedVoltage(4160.0); + mach.setH(50000.0); + mach.setXd1(0.05); + + + DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( + distNet, IpssCorePlugin.getMsgHub()); + + + + dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); + dstabAlgo.setSimuStepSec(0.005d); + dstabAlgo.setTotalSimuTimeSec(1.0); + //dstabAlgo.setRefMachine(net.getMachine("Bus3-mach1")); + distNet.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("150r", distNet, SimpleFaultCode.GROUND_LG,new Complex(0,0.0),new Complex(0,0.0), 0.5,0.07), "SLG@Bus1"); + + + StateMonitor sm = new StateMonitor(); + //sm.addGeneratorStdMonitor(new String[]{"Bus1-mach1","Bus2-mach1"}); + sm.addBusStdMonitor(new String[]{"150","150r","300","30","21"}); + sm.add3PhaseBusStdMonitor(new String[]{"150","150r","300","30","21"}); + // set the output handler + dstabAlgo.setSimuOutputHandler(sm); + dstabAlgo.setOutPutPerSteps(1); + + dstabAlgo.setDynamicEventHandler(new DynamicEventProcessor3Phase()); + + if(dstabAlgo.initialization()){ + System.out.println(ThreePhaseAclfOutFunc.busLfSummary(distNet)); + System.out.println(distNet.getMachineInitCondition()); + + for(String busId: sm.getBusPhAVoltTable().keySet()){ + + sm.addBusPhaseVoltageMonitorRecord( busId,dstabAlgo.getSimuTime(), ((Bus3Phase)distNet.getBus(busId)).get3PhaseVotlages()); + } + + //dstabAlgo.performSimulation(); + while(dstabAlgo.getSimuTime()<=dstabAlgo.getTotalSimuTimeSec()){ + + dstabAlgo.solveDEqnStep(true); + + for(String busId: sm.getBusPhAVoltTable().keySet()){ + + sm.addBusPhaseVoltageMonitorRecord( busId,dstabAlgo.getSimuTime(), ((Bus3Phase)distNet.getBus(busId)).get3PhaseVotlages()); + } + + } + } + System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); + +// System.out.println(sm.toCSVString(sm.getBusAngleTable())); + System.out.println(sm.toCSVString(sm.getBusVoltTable())); + MonitorRecord rec1 = sm.getBusVoltTable().get("30").get(1); + MonitorRecord rec20 = sm.getBusVoltTable().get("30").get(20); + assertTrue(Math.abs(rec1.getValue()-rec20.getValue())<1.0E-4); + + + MonitorRecord rec0 = sm.getBusVoltTable().get("21").get(0); + MonitorRecord rec50 = sm.getBusVoltTable().get("21").get(50); + assertTrue(Math.abs(rec0.getValue()-rec50.getValue())<1.0E-4); + + + + } + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE9Bus_3phase_LF_init_test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE9Bus_3phase_LF_init_test.java index 465b159..efec1e1 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE9Bus_3phase_LF_init_test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE9Bus_3phase_LF_init_test.java @@ -185,8 +185,8 @@ BusID Code Volt(pu) Angle(deg) P(pu) Q(pu) Bus if(bus.getId().equals("Bus5")){ //System.out.println("Phase A load@Bus5 ="+ph3Load.get3PhaseLoad().a_0); - assertTrue(Math.abs(ph3Load.get3PhaseLoad().a_0.getReal()-1.25)<1.0E-4); - assertTrue(ph3Load.get3PhaseLoad().a_0.abs() ==ph3Load.get3PhaseLoad().b_1.abs()); + assertTrue(Math.abs(ph3Load.get3PhaseLoad(ph3Bus.get3PhaseVotlages()).a_0.getReal()-1.25)<1.0E-4); + assertTrue(ph3Load.get3PhaseLoad(ph3Bus.get3PhaseVotlages()).a_0.abs() ==ph3Load.get3PhaseLoad(ph3Bus.get3PhaseVotlages()).b_1.abs()); // assertTrue(ph3Load .getZabc(false).aa.subtract(new Complex(0.0,0.04)).abs()<1.0E-5); // assertTrue(ph3Load .getZabc(false).ab.abs()<1.0E-5); // assertTrue(ph3Load .getZabc(false).ca.abs()<1.0E-5); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java index f8e62da..568944f 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java @@ -37,6 +37,7 @@ import com.interpss.dstab.algo.DynamicSimuAlgorithm; import com.interpss.dstab.algo.DynamicSimuMethod; import com.interpss.dstab.cache.StateMonitor; +import com.interpss.dstab.cache.StateMonitor.MonitorRecord; import com.interpss.dstab.mach.EConstMachine; import com.interpss.dstab.mach.MachineType; @@ -125,6 +126,15 @@ public void test_ieee13feeder_dstab() throws InterpssException{ } System.out.println(sm.toCSVString(sm.getBusAngleTable())); System.out.println(sm.toCSVString(sm.getBusVoltTable())); + + MonitorRecord rec1 = sm.getBusVoltTable().get("Bus684").get(1); + MonitorRecord rec20 = sm.getBusVoltTable().get("Bus684").get(20); + assertTrue(Math.abs(rec1.getValue()-rec20.getValue())<1.0E-4); + + +// MonitorRecord rec0 = sm.getBusVoltTable().get("Bus652").get(0); +// MonitorRecord rec50 = sm.getBusVoltTable().get("Bus652").get(50); +// assertTrue(Math.abs(rec0.getValue()-rec50.getValue())<1.0E-4); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test6BusFeeder.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test6BusFeeder.java index d02e89c..a22214d 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test6BusFeeder.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test6BusFeeder.java @@ -83,8 +83,8 @@ public void test6BusFeederDstabSim() throws InterpssException{ StateMonitor sm = new StateMonitor(); //sm.addGeneratorStdMonitor(new String[]{"Bus1-mach1","Bus2-mach1"}); - sm.addBusStdMonitor(new String[]{"Bus2","Bus1"}); - sm.add3PhaseBusStdMonitor(new String[]{"Bus2","Bus1"}); + sm.addBusStdMonitor(new String[]{"Bus2","Bus1","Bus4"}); + sm.add3PhaseBusStdMonitor(new String[]{"Bus2","Bus1","Bus4"}); // set the output handler dstabAlgo.setSimuOutputHandler(sm); dstabAlgo.setOutPutPerSteps(1); @@ -109,9 +109,14 @@ public void test6BusFeederDstabSim() throws InterpssException{ } //System.out.println(sm.toCSVString(sm.getBusAngleTable())); //System.out.println(sm.toCSVString(sm.getBusVoltTable())); - MonitorRecord rec1 = sm.getBusVoltTable().get("Bus2").get(1); + MonitorRecord rec10 = sm.getBusVoltTable().get("Bus2").get(0); MonitorRecord rec20 = sm.getBusVoltTable().get("Bus2").get(20); - assertTrue(Math.abs(rec1.getValue()-rec20.getValue())<1.0E-4); + assertTrue(Math.abs(rec10.getValue()-rec20.getValue())<1.0E-4); + + + MonitorRecord rec0 = sm.getBusVoltTable().get("Bus4").get(0); + MonitorRecord rec50 = sm.getBusVoltTable().get("Bus4").get(50); + assertTrue(Math.abs(rec0.getValue()-rec50.getValue())<1.0E-4); System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java index 2991d5e..4243bfb 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java @@ -99,6 +99,7 @@ public void testIEEE123BusPowerflow(){ Bus3Phase bus30 = (Bus3Phase) distNet.getBus("30"); Complex3x1 vabc_30 = bus30.get3PhaseVotlages(); + /* *30,0.9963094030535219,-0.04263498620437,1.0332257087662153,4.167548363697641,1.008218641157312,2.073577445296613,0.9954 + j-0.04246 -0.5355 + j-0.88362 -0.48582 + j0.88345 */ diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java index b41a9d4..e432474 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -103,6 +103,15 @@ public void test_LineCodeParser(){ assertTrue(linecode_9.getZ3x3Matrix().subtract(zabc9).absMax()<1.0E-6); assertTrue(linecode_9.getShuntY3x3Matrix().subtract(yabc9).absMax()<1.0E-6); + + LineConfiguration linecode_11 = parser.getLineConfigTable().get("11"); + + System.out.println("linecode 11 zabc :\n "+linecode_11.getZ3x3Matrix().toString()); + + Complex3x3 zabc11 = new Complex3x3(new Complex(0.251742424,0.255208333), new Complex(0.), new Complex(0.)); + + assertTrue(linecode_11.getZ3x3Matrix().subtract(zabc11).absMax()<1.0E-6); + } @Test @@ -112,6 +121,9 @@ public void testDataParser(){ IpssCorePlugin.setLoggerLevel(Level.INFO); OpenDSSDataParser parser = new OpenDSSDataParser(); + + //parser.setDebugMode(True); + parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master.dss"); @@ -245,10 +257,10 @@ public void testDataParser(){ */ Bus3Phase bus48 = (Bus3Phase) distNet.getBus("48"); Load3Phase ld_s48= (Load3Phase) bus48.getThreePhaseLoadList().get(0); // only one load - System.out.println("ld_s48 = "+ld_s48.get3PhaseLoad().toString()); - assertTrue(ld_s48.get3PhaseLoad().a_0.subtract(new Complex(70.0,50.0)).abs()<1.0E-9); - assertTrue(ld_s48.get3PhaseLoad().b_1.subtract(new Complex(70,50)).abs()<1.0E-9); - assertTrue(ld_s48.get3PhaseLoad().c_2.subtract(new Complex(70,50)).abs()<1.0E-9); + System.out.println("ld_s48 = "+ld_s48.getInit3PhaseLoad().toString()); + assertTrue(ld_s48.getInit3PhaseLoad().a_0.subtract(new Complex(70.0,50.0)).abs()<1.0E-9); + assertTrue(ld_s48.getInit3PhaseLoad().b_1.subtract(new Complex(70,50)).abs()<1.0E-9); + assertTrue(ld_s48.getInit3PhaseLoad().c_2.subtract(new Complex(70,50)).abs()<1.0E-9); assertTrue(ld_s48.getLoadConnectionType()==LoadConnectionType.Three_Phase_Wye); assertTrue(Math.abs(ld_s48.getNominalKV()-4.160)<1.0E-9); assertTrue(ld_s48.getCode()==AclfLoadCode.CONST_Z); @@ -417,10 +429,10 @@ public void testConvertValuesToPU(){ */ Bus3Phase bus48 = (Bus3Phase) distNet.getBus("48"); Load3Phase ld_s48= (Load3Phase) bus48.getThreePhaseLoadList().get(0); // only one load - System.out.println("ld_s48 = "+ld_s48.get3PhaseLoad().toString()); - assertTrue(ld_s48.get3PhaseLoad().a_0.subtract(new Complex(70.0,50.0).divide(baseKVA1P)).abs()<1.0E-9); - assertTrue(ld_s48.get3PhaseLoad().b_1.subtract(new Complex(70,50).divide(baseKVA1P)).abs()<1.0E-9); - assertTrue(ld_s48.get3PhaseLoad().c_2.subtract(new Complex(70,50).divide(baseKVA1P)).abs()<1.0E-9); + System.out.println("ld_s48 = "+ld_s48.getInit3PhaseLoad().toString()); + assertTrue(ld_s48.getInit3PhaseLoad().a_0.subtract(new Complex(70.0,50.0).divide(baseKVA1P)).abs()<1.0E-9); + assertTrue(ld_s48.getInit3PhaseLoad().b_1.subtract(new Complex(70,50).divide(baseKVA1P)).abs()<1.0E-9); + assertTrue(ld_s48.getInit3PhaseLoad().c_2.subtract(new Complex(70,50).divide(baseKVA1P)).abs()<1.0E-9); assertTrue(ld_s48.getLoadConnectionType()==LoadConnectionType.Three_Phase_Wye); assertTrue(Math.abs(ld_s48.getNominalKV()-4.160)<1.0E-9); assertTrue(ld_s48.getCode()==AclfLoadCode.CONST_Z); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java index 134f210..d2588c9 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java @@ -24,6 +24,7 @@ // distribution load flow algo TestDistributionPowerflowAlgo.class, + TestIEEETestFeederPowerFlow.class, // dynamic models TestSinglePhaseACMotorModel.class, diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads_noSingleDelta.DSS b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads_noSingleDelta.DSS new file mode 100644 index 0000000..ca65c7b --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads_noSingleDelta.DSS @@ -0,0 +1,107 @@ +! +! LOAD DEFINITIONS +! +! Note that 1-phase loads have a voltage rating = to actual voltage across terminals +! This could be either 2.4kV for Wye connectoin or 4.16 kV for Delta or Line-Line connection. +! 3-phase loads are rated Line-Line (as are 2-phase loads, but there are none in this case). +! Only the balanced 3-phase loads are declared as 3-phase; unbalanced 3-phase loads are declared +! as three 1-phase loads. + +New Load.S1a Bus1=1.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S2b Bus1=2.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S4c Bus1=4.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S5c Bus1=5.3 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S6c Bus1=6.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S7a Bus1=7.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S9a Bus1=9.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S10a Bus1=10.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S11a Bus1=11.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S12b Bus1=12.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S16c Bus1=16.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S17c Bus1=17.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S19a Bus1=19.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S20a Bus1=20.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=40.0 kvar=20.0 +New Load.S22b Bus1=22.2 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S24c Bus1=24.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S28a Bus1=28.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=40.0 kvar=20.0 +New Load.S29a Bus1=29.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S30c Bus1=30.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S31c Bus1=31.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S32c Bus1=32.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S33a Bus1=33.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=40.0 kvar=20.0 +New Load.S34c Bus1=34.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +!!New Load.S35a Bus1=35.1.2 Phases=1 Conn=Delta Model=1 kV=4.160 kW=40.0 kvar=20.0 +New Load.S35a Bus1=35.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S37a Bus1=37.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S38b Bus1=38.2 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S39b Bus1=39.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S41c Bus1=41.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S42a Bus1=42.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S43b Bus1=43.2 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S45a Bus1=45.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S46a Bus1=46.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S47 Bus1=47 Phases=3 Conn=Wye Model=5 kV=4.160 kW=105.0 kvar=75.0 +New Load.S48 Bus1=48 Phases=3 Conn=Wye Model=2 kV=4.160 kW=210.0 kVAR=150.0 +New Load.S49a Bus1=49.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=35.0 kvar=25.0 +New Load.S49b Bus1=49.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=70.0 kvar=50.0 +New Load.S49c Bus1=49.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=35.0 kvar=20.0 ! used to be 25 in on-line document +New Load.S50c Bus1=50.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S51a Bus1=51.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S52a Bus1=52.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S53a Bus1=53.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S55a Bus1=55.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=20.0 kvar=10.0 +New Load.S56b Bus1=56.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S58b Bus1=58.2 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S59b Bus1=59.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S60a Bus1=60.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S62c Bus1=62.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S63a Bus1=63.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S64b Bus1=64.2 Phases=1 Conn=Wye Model=5 kV=2.4 kW=75.0 kvar=35.0 +!!New Load.S65a Bus1=65.1.2 Phases=1 Conn=Delta Model=2 kV=4.160 kW=35.0 kvar=25.0 +!!New Load.S65b Bus1=65.2.3 Phases=1 Conn=Delta Model=2 kV=4.160 kW=35.0 kvar=25.0 +!!New Load.S65c Bus1=65.3.1 Phases=1 Conn=Delta Model=2 kV=4.160 kW=70.0 kvar=50.0 +New Load.S65a Bus1=65.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=35.0 kvar=25.0 +New Load.S65b Bus1=65.2 Phases=1 Conn=Wye Model=2 kV=2.4 kW=35.0 kvar=25.0 +New Load.S65c Bus1=65.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=70.0 kvar=50.0 +New Load.S66c Bus1=66.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=75.0 kvar=35.0 +New Load.S68a Bus1=68.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S69a Bus1=69.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S70a Bus1=70.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S71a Bus1=71.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S73c Bus1=73.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S74c Bus1=74.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S75c Bus1=75.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +!!New Load.S76a Bus1=76.1.2 Phases=1 Conn=Delta Model=5 kV=4.160 kW=105.0 kvar=80.0 +!!New Load.S76b Bus1=76.2.3 Phases=1 Conn=Delta Model=5 kV=4.160 kW=70.0 kvar=50.0 +!!New Load.S76c Bus1=76.3.1 Phases=1 Conn=Delta Model=5 kV=4.160 kW=70.0 kvar=50.0 +New Load.S76a Bus1=76.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=105.0 kvar=80.0 +New Load.S76b Bus1=76.2 Phases=1 Conn=Wye Model=5 kV=2.4 kW=70.0 kvar=50.0 +New Load.S76c Bus1=76.3 Phases=1 Conn=Wye Model=5 kV=2.4 kW=70.0 kvar=50.0 +New Load.S77b Bus1=77.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S79a Bus1=79.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S80b Bus1=80.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S82a Bus1=82.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S83c Bus1=83.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S84c Bus1=84.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S85c Bus1=85.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S86b Bus1=86.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S87b Bus1=87.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S88a Bus1=88.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S90b Bus1=90.2 Phases=1 Conn=Wye Model=5 kV=2.4 kW=40.0 kvar=20.0 +New Load.S92c Bus1=92.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S94a Bus1=94.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S95b Bus1=95.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S96b Bus1=96.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S98a Bus1=98.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S99b Bus1=99.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S100c Bus1=100.3 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S102c Bus1=102.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S103c Bus1=103.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S104c Bus1=104.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S106b Bus1=106.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S107b Bus1=107.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S109a Bus1=109.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S111a Bus1=111.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S112a Bus1=112.1 Phases=1 Conn=Wye Model=5 kV=2.4 kW=20.0 kvar=10.0 +New Load.S113a Bus1=113.1 Phases=1 Conn=Wye Model=2 kV=2.4 kW=40.0 kvar=20.0 +New Load.S114a Bus1=114.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads_noSingleDelta_constPQ.DSS b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads_noSingleDelta_constPQ.DSS new file mode 100644 index 0000000..0823073 --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Loads_noSingleDelta_constPQ.DSS @@ -0,0 +1,107 @@ +! +! LOAD DEFINITIONS +! +! Note that 1-phase loads have a voltage rating = to actual voltage across terminals +! This could be either 2.4kV for Wye connectoin or 4.16 kV for Delta or Line-Line connection. +! 3-phase loads are rated Line-Line (as are 2-phase loads, but there are none in this case). +! Only the balanced 3-phase loads are declared as 3-phase; unbalanced 3-phase loads are declared +! as three 1-phase loads. + +New Load.S1a Bus1=1.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S2b Bus1=2.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S4c Bus1=4.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S5c Bus1=5.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S6c Bus1=6.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S7a Bus1=7.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S9a Bus1=9.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S10a Bus1=10.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S11a Bus1=11.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S12b Bus1=12.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S16c Bus1=16.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S17c Bus1=17.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S19a Bus1=19.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S20a Bus1=20.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S22b Bus1=22.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S24c Bus1=24.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S28a Bus1=28.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S29a Bus1=29.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S30c Bus1=30.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S31c Bus1=31.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S32c Bus1=32.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S33a Bus1=33.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S34c Bus1=34.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +!!New Load.S35a Bus1=35.1.2 Phases=1 Conn=Delta Model=1 kV=4.160 kW=40.0 kvar=20.0 +New Load.S35a Bus1=35.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S37a Bus1=37.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S38b Bus1=38.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S39b Bus1=39.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S41c Bus1=41.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S42a Bus1=42.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S43b Bus1=43.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S45a Bus1=45.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S46a Bus1=46.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S47 Bus1=47 Phases=3 Conn=Wye Model=1 kV=4.160 kW=105.0 kvar=75.0 +New Load.S48 Bus1=48 Phases=3 Conn=Wye Model=1 kV=4.160 kW=210.0 kVAR=150.0 +New Load.S49a Bus1=49.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=35.0 kvar=25.0 +New Load.S49b Bus1=49.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=70.0 kvar=50.0 +New Load.S49c Bus1=49.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=35.0 kvar=20.0 ! used to be 25 in on-line document +New Load.S50c Bus1=50.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S51a Bus1=51.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S52a Bus1=52.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S53a Bus1=53.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S55a Bus1=55.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S56b Bus1=56.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S58b Bus1=58.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S59b Bus1=59.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S60a Bus1=60.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S62c Bus1=62.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S63a Bus1=63.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S64b Bus1=64.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=75.0 kvar=35.0 +!!New Load.S65a Bus1=65.1.2 Phases=1 Conn=Delta Model=2 kV=4.160 kW=35.0 kvar=25.0 +!!New Load.S65b Bus1=65.2.3 Phases=1 Conn=Delta Model=2 kV=4.160 kW=35.0 kvar=25.0 +!!New Load.S65c Bus1=65.3.1 Phases=1 Conn=Delta Model=2 kV=4.160 kW=70.0 kvar=50.0 +New Load.S65a Bus1=65.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=35.0 kvar=25.0 +New Load.S65b Bus1=65.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=35.0 kvar=25.0 +New Load.S65c Bus1=65.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=70.0 kvar=50.0 +New Load.S66c Bus1=66.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=75.0 kvar=35.0 +New Load.S68a Bus1=68.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S69a Bus1=69.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S70a Bus1=70.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S71a Bus1=71.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S73c Bus1=73.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S74c Bus1=74.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S75c Bus1=75.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +!!New Load.S76a Bus1=76.1.2 Phases=1 Conn=Delta Model=5 kV=4.160 kW=105.0 kvar=80.0 +!!New Load.S76b Bus1=76.2.3 Phases=1 Conn=Delta Model=5 kV=4.160 kW=70.0 kvar=50.0 +!!New Load.S76c Bus1=76.3.1 Phases=1 Conn=Delta Model=5 kV=4.160 kW=70.0 kvar=50.0 +New Load.S76a Bus1=76.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=105.0 kvar=80.0 +New Load.S76b Bus1=76.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=70.0 kvar=50.0 +New Load.S76c Bus1=76.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=70.0 kvar=50.0 +New Load.S77b Bus1=77.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S79a Bus1=79.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S80b Bus1=80.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S82a Bus1=82.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S83c Bus1=83.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S84c Bus1=84.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S85c Bus1=85.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S86b Bus1=86.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S87b Bus1=87.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S88a Bus1=88.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S90b Bus1=90.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S92c Bus1=92.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S94a Bus1=94.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S95b Bus1=95.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S96b Bus1=96.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S98a Bus1=98.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S99b Bus1=99.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S100c Bus1=100.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S102c Bus1=102.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S103c Bus1=103.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S104c Bus1=104.3 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S106b Bus1=106.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S107b Bus1=107.2 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S109a Bus1=109.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S111a Bus1=111.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S112a Bus1=112.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 +New Load.S113a Bus1=113.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=40.0 kvar=20.0 +New Load.S114a Bus1=114.1 Phases=1 Conn=Wye Model=1 kV=2.4 kW=20.0 kvar=10.0 diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master_Modified_v2.DSS b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master_Modified_v2.DSS new file mode 100644 index 0000000..f73e855 --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/IEEE123Master_Modified_v2.DSS @@ -0,0 +1,223 @@ +! Annotated Master file for the IEEE 123-bus test case. +! +! This file is meant to be invoked from the Compile command in the "Run_IEEE123Bus.DSS" file. +! +! Note: DSS commands, property names, etc., are NOT case sensitive. Capitalize as you please. +! You should always do a "Clear" before making a new circuit: + +Clear + +! INSTANTIATE A NEW CIRCUIT AND DEFINE A STIFF 4160V SOURCE +! The new circuit is called "ieee123" +! This creates a Vsource object connected to "sourcebus". This is now the active circuit element, so +! you can simply continue to edit its property value. +! The basekV is redefined to 4.16 kV. The bus name is changed to "150" to match one of the buses in the test feeder. +! The source is set for 1.0 per unit and the Short circuit impedance is set to a small value (0.0001 ohms) +! The ~ is just shorthad for "more" for the New or Edit commands + +New object=circuit.ieee123 +~ basekv=4.16 Bus1=150 pu=1.00 R1=0 X1=0.0001 R0=0 X0=0.0001 + +! 3-PHASE GANGED REGULATOR AT HEAD OF FEEDER (KERSTING ASSUMES NO IMPEDANCE IN THE REGULATOR) +! the first line defines the 3-phase transformer to be controlled by the regulator control. +! The 2nd line defines the properties of the regulator control according to the test case + +new transformer.reg1a phases=3 windings=2 buses=[150 150r] conns=[wye wye] kvs=[4.16 4.16] kvas=[5000 5000] XHL=.001 %LoadLoss=0.00001 ppm=0.0 +new regcontrol.creg1a transformer=reg1a winding=2 vreg=120 band=2 ptratio=20 ctprim=700 R=3 X=7.5 + +! REDIRECT INPUT STREAM TO FILE CONTAINING DEFINITIONS OF LINECODES +! This file defines the line impedances is a similar manner to the description in the test case. + +Redirect IEEELinecodes.DSS + +! LINE DEFINITIONS +! Lines are defined by referring to a "linecode" that contains the impedances per unit length +! So the only properties required are the LineCode name and Length. Units are assumed to match the definition +! since no units property is defined in either the Linecodes file or this file. +! Note that it is not necessary to explicitly specify the node connections for the 3-phase lines +! unless they are not ".1.2.3". However, they are spelled out here for clarity. +! The DSS assumes .1.2.3.0.0 ... for connections of 3 or more phases. +! Likewise, .1 is not necessary for 1-phase lines connected to phase 1. However, if it is connected +! to any other phase, it must be specified. For completeness, everything is spelled out here. +! +! Note that it is recommended that the "units=" property be used here and in the Linecode definition as well +! to avoid confusion in the future + +! *** Original *** New Line.L115 Phases=3 Bus1=149.1.2.3 Bus2=1.1.2.3 LineCode=1 Length=0.4 +! Since the default is 3-phase, the definition of this line can be simpler: + +New Line.L115 Bus1=149 Bus2=1 LineCode=1 Length=0.4 + +New Line.L1 Phases=1 Bus1=1.2 Bus2=2.2 LineCode=10 Length=0.175 +New Line.L2 Phases=1 Bus1=1.3 Bus2=3.3 LineCode=11 Length=0.25 +New Line.L3 Phases=3 Bus1=1.1.2.3 Bus2=7.1.2.3 LineCode=1 Length=0.3 +New Line.L4 Phases=1 Bus1=3.3 Bus2=4.3 LineCode=11 Length=0.2 +New Line.L5 Phases=1 Bus1=3.3 Bus2=5.3 LineCode=11 Length=0.325 +New Line.L6 Phases=1 Bus1=5.3 Bus2=6.3 LineCode=11 Length=0.25 +New Line.L7 Phases=3 Bus1=7.1.2.3 Bus2=8.1.2.3 LineCode=1 Length=0.2 +New Line.L8 Phases=1 Bus1=8.2 Bus2=12.2 LineCode=10 Length=0.225 +New Line.L9 Phases=1 Bus1=8.1 Bus2=9.1 LineCode=9 Length=0.225 +New Line.L10 Phases=3 Bus1=8.1.2.3 Bus2=13.1.2.3 LineCode=1 Length=0.3 +New Line.L11 Phases=1 Bus1=9r.1 Bus2=14.1 LineCode=9 Length=0.425 +New Line.L12 Phases=1 Bus1=13.3 Bus2=34.3 LineCode=11 Length=0.15 +New Line.L13 Phases=3 Bus1=13.1.2.3 Bus2=18.1.2.3 LineCode=2 Length=0.825 +New Line.L14 Phases=1 Bus1=14.1 Bus2=11.1 LineCode=9 Length=0.25 +New Line.L15 Phases=1 Bus1=14.1 Bus2=10.1 LineCode=9 Length=0.25 +New Line.L16 Phases=1 Bus1=15.3 Bus2=16.3 LineCode=11 Length=0.375 +New Line.L17 Phases=1 Bus1=15.3 Bus2=17.3 LineCode=11 Length=0.35 +New Line.L18 Phases=1 Bus1=18.1 Bus2=19.1 LineCode=9 Length=0.25 +New Line.L19 Phases=3 Bus1=18.1.2.3 Bus2=21.1.2.3 LineCode=2 Length=0.3 +New Line.L20 Phases=1 Bus1=19.1 Bus2=20.1 LineCode=9 Length=0.325 +New Line.L21 Phases=1 Bus1=21.2 Bus2=22.2 LineCode=10 Length=0.525 +New Line.L22 Phases=3 Bus1=21.1.2.3 Bus2=23.1.2.3 LineCode=2 Length=0.25 +New Line.L23 Phases=1 Bus1=23.3 Bus2=24.3 LineCode=11 Length=0.55 +New Line.L24 Phases=3 Bus1=23.1.2.3 Bus2=25.1.2.3 LineCode=2 Length=0.275 +New Line.L25 Phases=2 Bus1=25r.1.3 Bus2=26.1.3 LineCode=7 Length=0.35 +New Line.L26 Phases=3 Bus1=25.1.2.3 Bus2=28.1.2.3 LineCode=2 Length=0.2 +New Line.L27 Phases=2 Bus1=26.1.3 Bus2=27.1.3 LineCode=7 Length=0.275 +New Line.L28 Phases=1 Bus1=26.3 Bus2=31.3 LineCode=11 Length=0.225 +New Line.L29 Phases=1 Bus1=27.1 Bus2=33.1 LineCode=9 Length=0.5 +New Line.L30 Phases=3 Bus1=28.1.2.3 Bus2=29.1.2.3 LineCode=2 Length=0.3 +New Line.L31 Phases=3 Bus1=29.1.2.3 Bus2=30.1.2.3 LineCode=2 Length=0.35 +New Line.L32 Phases=3 Bus1=30.1.2.3 Bus2=250.1.2.3 LineCode=2 Length=0.2 +New Line.L33 Phases=1 Bus1=31.3 Bus2=32.3 LineCode=11 Length=0.3 +New Line.L34 Phases=1 Bus1=34.3 Bus2=15.3 LineCode=11 Length=0.1 +New Line.L35 Phases=2 Bus1=35.1.2 Bus2=36.1.2 LineCode=8 Length=0.65 +New Line.L36 Phases=3 Bus1=35.1.2.3 Bus2=40.1.2.3 LineCode=1 Length=0.25 +New Line.L37 Phases=1 Bus1=36.1 Bus2=37.1 LineCode=9 Length=0.3 +New Line.L38 Phases=1 Bus1=36.2 Bus2=38.2 LineCode=10 Length=0.25 +New Line.L39 Phases=1 Bus1=38.2 Bus2=39.2 LineCode=10 Length=0.325 +New Line.L40 Phases=1 Bus1=40.3 Bus2=41.3 LineCode=11 Length=0.325 +New Line.L41 Phases=3 Bus1=40.1.2.3 Bus2=42.1.2.3 LineCode=1 Length=0.25 +New Line.L42 Phases=1 Bus1=42.2 Bus2=43.2 LineCode=10 Length=0.5 +New Line.L43 Phases=3 Bus1=42.1.2.3 Bus2=44.1.2.3 LineCode=1 Length=0.2 +New Line.L44 Phases=1 Bus1=44.1 Bus2=45.1 LineCode=9 Length=0.2 +New Line.L45 Phases=3 Bus1=44.1.2.3 Bus2=47.1.2.3 LineCode=1 Length=0.25 +New Line.L46 Phases=1 Bus1=45.1 Bus2=46.1 LineCode=9 Length=0.3 +New Line.L47 Phases=3 Bus1=47.1.2.3 Bus2=48.1.2.3 LineCode=4 Length=0.15 +New Line.L48 Phases=3 Bus1=47.1.2.3 Bus2=49.1.2.3 LineCode=4 Length=0.25 +New Line.L49 Phases=3 Bus1=49.1.2.3 Bus2=50.1.2.3 LineCode=4 Length=0.25 +New Line.L50 Phases=3 Bus1=50.1.2.3 Bus2=51.1.2.3 LineCode=4 Length=0.25 +New Line.L51 Phases=3 Bus1=51.1.2.3 Bus2=151.1.2.3 LineCode=4 Length=0.5 +New Line.L52 Phases=3 Bus1=52.1.2.3 Bus2=53.1.2.3 LineCode=1 Length=0.2 +New Line.L53 Phases=3 Bus1=53.1.2.3 Bus2=54.1.2.3 LineCode=1 Length=0.125 +New Line.L54 Phases=3 Bus1=54.1.2.3 Bus2=55.1.2.3 LineCode=1 Length=0.275 +New Line.L55 Phases=3 Bus1=54.1.2.3 Bus2=57.1.2.3 LineCode=3 Length=0.35 +New Line.L56 Phases=3 Bus1=55.1.2.3 Bus2=56.1.2.3 LineCode=1 Length=0.275 +New Line.L57 Phases=1 Bus1=57.2 Bus2=58.2 LineCode=10 Length=0.25 +New Line.L58 Phases=3 Bus1=57.1.2.3 Bus2=60.1.2.3 LineCode=3 Length=0.75 +New Line.L59 Phases=1 Bus1=58.2 Bus2=59.2 LineCode=10 Length=0.25 +New Line.L60 Phases=3 Bus1=60.1.2.3 Bus2=61.1.2.3 LineCode=5 Length=0.55 +New Line.L61 Phases=3 Bus1=60.1.2.3 Bus2=62.1.2.3 LineCode=12 Length=0.25 +New Line.L62 Phases=3 Bus1=62.1.2.3 Bus2=63.1.2.3 LineCode=12 Length=0.175 +New Line.L63 Phases=3 Bus1=63.1.2.3 Bus2=64.1.2.3 LineCode=12 Length=0.35 +New Line.L64 Phases=3 Bus1=64.1.2.3 Bus2=65.1.2.3 LineCode=12 Length=0.425 +New Line.L65 Phases=3 Bus1=65.1.2.3 Bus2=66.1.2.3 LineCode=12 Length=0.325 +New Line.L66 Phases=1 Bus1=67.1 Bus2=68.1 LineCode=9 Length=0.2 +New Line.L67 Phases=3 Bus1=67.1.2.3 Bus2=72.1.2.3 LineCode=3 Length=0.275 +New Line.L68 Phases=3 Bus1=67.1.2.3 Bus2=97.1.2.3 LineCode=3 Length=0.25 +New Line.L69 Phases=1 Bus1=68.1 Bus2=69.1 LineCode=9 Length=0.275 +New Line.L70 Phases=1 Bus1=69.1 Bus2=70.1 LineCode=9 Length=0.325 +New Line.L71 Phases=1 Bus1=70.1 Bus2=71.1 LineCode=9 Length=0.275 +New Line.L72 Phases=1 Bus1=72.3 Bus2=73.3 LineCode=11 Length=0.275 +New Line.L73 Phases=3 Bus1=72.1.2.3 Bus2=76.1.2.3 LineCode=3 Length=0.2 +New Line.L74 Phases=1 Bus1=73.3 Bus2=74.3 LineCode=11 Length=0.35 +New Line.L75 Phases=1 Bus1=74.3 Bus2=75.3 LineCode=11 Length=0.4 +New Line.L76 Phases=3 Bus1=76.1.2.3 Bus2=77.1.2.3 LineCode=6 Length=0.4 +New Line.L77 Phases=3 Bus1=76.1.2.3 Bus2=86.1.2.3 LineCode=3 Length=0.7 +New Line.L78 Phases=3 Bus1=77.1.2.3 Bus2=78.1.2.3 LineCode=6 Length=0.1 +New Line.L79 Phases=3 Bus1=78.1.2.3 Bus2=79.1.2.3 LineCode=6 Length=0.225 +New Line.L80 Phases=3 Bus1=78.1.2.3 Bus2=80.1.2.3 LineCode=6 Length=0.475 +New Line.L81 Phases=3 Bus1=80.1.2.3 Bus2=81.1.2.3 LineCode=6 Length=0.175 +New Line.L82 Phases=3 Bus1=81.1.2.3 Bus2=82.1.2.3 LineCode=6 Length=0.25 +New Line.L83 Phases=1 Bus1=81.3 Bus2=84.3 LineCode=11 Length=0.675 +New Line.L84 Phases=3 Bus1=82.1.2.3 Bus2=83.1.2.3 LineCode=6 Length=0.25 +New Line.L85 Phases=1 Bus1=84.3 Bus2=85.3 LineCode=11 Length=0.475 +New Line.L86 Phases=3 Bus1=86.1.2.3 Bus2=87.1.2.3 LineCode=6 Length=0.45 +New Line.L87 Phases=1 Bus1=87.1 Bus2=88.1 LineCode=9 Length=0.175 +New Line.L88 Phases=3 Bus1=87.1.2.3 Bus2=89.1.2.3 LineCode=6 Length=0.275 +New Line.L89 Phases=1 Bus1=89.2 Bus2=90.2 LineCode=10 Length=0.25 +New Line.L90 Phases=3 Bus1=89.1.2.3 Bus2=91.1.2.3 LineCode=6 Length=0.225 +New Line.L91 Phases=1 Bus1=91.3 Bus2=92.3 LineCode=11 Length=0.3 +New Line.L92 Phases=3 Bus1=91.1.2.3 Bus2=93.1.2.3 LineCode=6 Length=0.225 +New Line.L93 Phases=1 Bus1=93.1 Bus2=94.1 LineCode=9 Length=0.275 +New Line.L94 Phases=3 Bus1=93.1.2.3 Bus2=95.1.2.3 LineCode=6 Length=0.3 +New Line.L95 Phases=1 Bus1=95.2 Bus2=96.2 LineCode=10 Length=0.2 +New Line.L96 Phases=3 Bus1=97.1.2.3 Bus2=98.1.2.3 LineCode=3 Length=0.275 +New Line.L97 Phases=3 Bus1=98.1.2.3 Bus2=99.1.2.3 LineCode=3 Length=0.55 +New Line.L98 Phases=3 Bus1=99.1.2.3 Bus2=100.1.2.3 LineCode=3 Length=0.3 +New Line.L99 Phases=3 Bus1=100.1.2.3 Bus2=450.1.2.3 LineCode=3 Length=0.8 +New Line.L118 Phases=3 Bus1=197.1.2.3 Bus2=101.1.2.3 LineCode=3 Length=0.25 +New Line.L100 Phases=1 Bus1=101.3 Bus2=102.3 LineCode=11 Length=0.225 +New Line.L101 Phases=3 Bus1=101.1.2.3 Bus2=105.1.2.3 LineCode=3 Length=0.275 +New Line.L102 Phases=1 Bus1=102.3 Bus2=103.3 LineCode=11 Length=0.325 +New Line.L103 Phases=1 Bus1=103.3 Bus2=104.3 LineCode=11 Length=0.7 +New Line.L104 Phases=1 Bus1=105.2 Bus2=106.2 LineCode=10 Length=0.225 +New Line.L105 Phases=3 Bus1=105.1.2.3 Bus2=108.1.2.3 LineCode=3 Length=0.325 +New Line.L106 Phases=1 Bus1=106.2 Bus2=107.2 LineCode=10 Length=0.575 +New Line.L107 Phases=1 Bus1=108.1 Bus2=109.1 LineCode=9 Length=0.45 +New Line.L108 Phases=3 Bus1=108.1.2.3 Bus2=300.1.2.3 LineCode=3 Length=1 +New Line.L109 Phases=1 Bus1=109.1 Bus2=110.1 LineCode=9 Length=0.3 +New Line.L110 Phases=1 Bus1=110.1 Bus2=111.1 LineCode=9 Length=0.575 +New Line.L111 Phases=1 Bus1=110.1 Bus2=112.1 LineCode=9 Length=0.125 +New Line.L112 Phases=1 Bus1=112.1 Bus2=113.1 LineCode=9 Length=0.525 +New Line.L113 Phases=1 Bus1=113.1 Bus2=114.1 LineCode=9 Length=0.325 +New Line.L114 Phases=3 Bus1=135.1.2.3 Bus2=35.1.2.3 LineCode=4 Length=0.375 +New Line.L116 Phases=3 Bus1=152.1.2.3 Bus2=52.1.2.3 LineCode=1 Length=0.4 +New Line.L117 Phases=3 Bus1=160r.1.2.3 Bus2=67.1.2.3 LineCode=6 Length=0.35 + + +! NORMALLY CLOSED SWITCHES ARE DEFINED AS SHORT LINES +! Could also be defned by setting the Switch=Yes property + +New Line.Sw1 phases=3 Bus1=150r Bus2=149 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.1 +New Line.Sw2 phases=3 Bus1=13 Bus2=152 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.1 +New Line.Sw3 phases=3 Bus1=18 Bus2=135 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.1 +New Line.Sw4 phases=3 Bus1=60 Bus2=160 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.1 +New Line.Sw5 phases=3 Bus1=97 Bus2=197 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.1 +New Line.Sw6 phases=3 Bus1=61 Bus2=61s r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.1 + +! NORMALLY OPEN SWITCHES; DEFINED AS SHORT LINE TO OPEN BUS SO WE CAN SEE OPEN POINT VOLTAGES. +! COULD ALSO BE DEFINED AS DISABLED OR THE TERMINCAL COULD BE OPENED AFTER BEING DEFINED + +New Line.Sw7 phases=3 Bus1=151 Bus2=300_OPEN r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.1 +New Line.Sw8 phases=1 Bus1=54.1 Bus2=94_OPEN.1 r1=1e-3 r0=1e-3 x1=0.000 x0=0.000 c1=0.000 c0=0.000 Length=0.1 + +! LOAD TRANSFORMER AT 61s/610 +! This is a 150 kVA Delta-Delta stepdown from 4160V to 480V. + +!New Transformer.XFM1 Phases=3 Windings=2 Xhl=2.72 +!~ wdg=1 bus=61s conn=Delta kv=4.16 kva=150 %r=0.635 +!~ wdg=2 bus=610 conn=Delta kv=0.48 kva=150 %r=0.635 + +! CAPACITORS +! Capacitors are 2-terminal devices. The 2nd terminal (Bus2=...) defaults to all phases +! connected to ground (Node 0). Thus, it need not be specified if a Y-connected or L-N connected +! capacitor is desired + +New Capacitor.C83 Bus1=83 Phases=3 kVAR=600 kV=4.16 +New Capacitor.C88a Bus1=88.1 Phases=1 kVAR=50 kV=2.402 +New Capacitor.C90b Bus1=90.2 Phases=1 kVAR=50 kV=2.402 +New Capacitor.C92c Bus1=92.3 Phases=1 kVAR=50 kV=2.402 + + +!REGULATORS - REDIRECT TO DEFINITIONS FILE +! This file contains definitions for the remainder of regulators on the feeder: + +Redirect IEEE123Regulators2.DSS + +! SPOT LOADS -- REDIRECT INPUT STREAM TO LOAD DEFINITIONS FILE + +!Redirect IEEE123Loads.DSS +!Redirect IEEE123Loads_noSingleDelta.DSS +Redirect IEEE123Loads_noSingleDelta_constPQ.DSS + +! All devices in the test feeder are now defined. +! +! Many of the voltages are reported in per unit, so it is important to establish the base voltages at each bus so +! that we can compare with the result with greater ease. +! We will let the DSS compute the voltage bases by doing a zero-load power flow. +! There are only two voltage bases in the problem: 4160V and 480V. These must be expressed in kV + +Set VoltageBases = [4.16, 0.48] ! ARRAY OF VOLTAGES IN KV +CalcVoltageBases ! PERFORMS ZERO LOAD POWER FLOW TO ESTIMATE VOLTAGE BASES diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_modified_netString.dat b/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_modified_netString.dat new file mode 100644 index 0000000..0470eab --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_modified_netString.dat @@ -0,0 +1,7879 @@ + +DStabilityNetwork Info: + +AcscNetwork Info: + id: ieee123 + name: + desc: + BaseKva: 1000.0000 kva + Frequency: 50.0000 Hz + lfDataLoaded: No + lfConverged: No + potiveSeqDataOnly: false + scDataLoaded: No + +Total Area : 0 + + +AcscBus Info + id: 150 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 0) (extensionObject: null) + baseVoltage: 4160.0 + genCode: Swing + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 150r + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 1) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 149 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 2) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 1 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 3) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s1a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 2 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 4) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s2b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 3 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 5) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 7 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 6) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s7a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 4 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 7) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s4c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 5 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 8) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0600 + j0.0300, id: s5c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 6 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 10) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s6c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 8 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 9) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 12 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 11) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s12b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 9 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 12) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s9a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 13 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 13) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 9r + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 14) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 14 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 18) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 34 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 15) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s34c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 18 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 16) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 11 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 24) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s11a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 10 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 25) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0600 + j0.0300, id: s10a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 15 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 19) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 16 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 26) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s16c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 17 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 27) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s17c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 19 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 20) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s19a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 21 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 21) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 20 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 28) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.1200 + j0.0600, id: s20a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 22 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 29) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s22b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 23 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 30) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 24 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 33) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s24c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 25 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 34) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 25r + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 39) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 26 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 48) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 28 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 38) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.1200 + j0.0600, id: s28a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 27 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 56) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 31 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 57) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s31c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 33 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 65) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.1200 + j0.0600, id: s33a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 29 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 47) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s29a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 30 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 55) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s30c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 250 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 64) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 32 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 66) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s32c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 35 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 31) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s35a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 36 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 35) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 40 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 36) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 37 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 40) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s37a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 38 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 41) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0600 + j0.0300, id: s38b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 39 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 49) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s39b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 41 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 42) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s41c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 42 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 43) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s42a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 43 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 50) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s43b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 44 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 51) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 45 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 58) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0600 + j0.0300, id: s45a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 47 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 59) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 46 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 67) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s46a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 48 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 68) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 49 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 69) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.4200 + j0.2850 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.4200 + j0.2850 pu 420.0000 + j285.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1050 + j0.0750, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s49a, name: ) + (code: ConstP, loadCP: 0.2100 + j0.1500, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s49b, name: ) + (code: ConstP, loadCP: 0.1050 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s49c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 50 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 73) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s50c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 51 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 77) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s51a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 151 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 82) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 52 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 23) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s52a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 53 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 32) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s53a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 54 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 37) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 55 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 44) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.0600 + j0.0300, loadCI: 0.0000 + j0.0000, id: s55a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 57 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 45) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 56 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 52) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s56b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 58 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 53) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0600 + j0.0300, id: s58b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 60 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 54) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s60a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 59 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 60) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s59b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 61 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 61) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 62 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 62) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s62c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 63 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 71) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s63a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 64 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 75) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.2250 + j0.1050 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.2250 + j0.1050 pu 225.0000 + j105.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.2250 + j0.1050, id: s64b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 65 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 78) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.4200 + j0.3000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.4200 + j0.3000 pu 420.0000 + j300.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1050 + j0.0750, loadCI: 0.0000 + j0.0000, id: s65a, name: ) + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1050 + j0.0750, loadCI: 0.0000 + j0.0000, id: s65b, name: ) + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.2100 + j0.1500, loadCI: 0.0000 + j0.0000, id: s65c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 66 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 83) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.2250 + j0.1050 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.2250 + j0.1050 pu 225.0000 + j105.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.2250 + j0.1050, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s66c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 67 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 76) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 68 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 79) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s68a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 72 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 80) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 97 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 81) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 69 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 84) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s69a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 70 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 90) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s70a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 71 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 96) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s71a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 73 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 85) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s73c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 76 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 86) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.7350 + j0.5400 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.7350 + j0.5400 pu 735.0000 + j540.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.3150 + j0.2400, id: s76a, name: ) + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.2100 + j0.1500, id: s76b, name: ) + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.2100 + j0.1500, id: s76c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 74 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 91) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s74c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 75 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 97) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s75c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 77 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 92) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s77b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 86 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 93) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s86b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 78 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 98) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 79 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 103) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s79a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 80 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 104) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s80b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 81 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 111) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 82 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 118) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s82a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 84 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 119) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s84c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 83 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 123) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s83c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 85 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 124) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s85c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 87 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 99) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s87b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 88 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 105) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s88a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 89 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 106) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 90 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 112) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.1200 + j0.0600, id: s90b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 91 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 113) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 92 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 120) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s92c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 93 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 121) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 94 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 125) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s94a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 95 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 126) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s95b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 96 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 129) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s96b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 98 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 87) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s98a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 99 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 94) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s99b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 100 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 100) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s100c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 450 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 107) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 197 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 88) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 101 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 95) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 102 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 101) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s102c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 105 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 102) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 103 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 108) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s103c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 104 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 114) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s104c, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 106 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 109) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s106b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 108 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 110) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 107 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 115) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s107b, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 109 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 116) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.1200 + j0.0600, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s109a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 300 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 117) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 110 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 122) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 111 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 127) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s111a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 112 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 128) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0600 + j0.0300, id: s112a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 113 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 130) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.1200 + j0.0600 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.1200 + j0.0600 pu 120.0000 + j60.0000 kva + +Contributing Load: + (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 0.1200 + j0.0600, loadCI: 0.0000 + j0.0000, id: s113a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 114 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 131) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: ConstP + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0600 + j0.0300 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0600 + j0.0300 pu 60.0000 + j30.0000 kva + +Contributing Load: + (code: ConstP, loadCP: 0.0600 + j0.0300, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s114a, name: ) + + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 135 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 22) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 152 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 17) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 160r + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 72) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 160 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 63) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 61s + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 70) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 300_open + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 89) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 94_open + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 46) (extensionObject: null) + baseVoltage: 4160.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 4160.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + id: 610 + number: 0 + name: + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 2, sortNumber: 74) (extensionObject: null) + baseVoltage: 480.0 + genCode: NonGen + loadCode: NonLoad + Desired voltageMag: 1.0 + Desired voltageAng: 0.0 + voltageMag: 1.0 + voltageAng: 0.0 + gen: 0.0000 + j0.0000 + capacitor: 0.0000 + load: 0.0000 + j0.0000 + shuntY: 0.0000 + j0.0000 + distFactor: 0.0000 + vLimit: ( 0.0, 0.0 ) + LF Results : + voltage : 1.0000 pu 480.0000 v + angle : 0.0000 deg + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + + SC Info: + scCode: NonContri + z1: 0.0000 + j10000000000.0000 + z2: 0.0000 + j10000000000.0000 + z0: 0.0000 + j10000000000.0000 + groundCode: Ungrounded + groundZpu: 0.0000 + j0.0000 + + DStab Info: + + + +AcscBranch Info + id: 150->150r(0) + number: 0 + name: reg1a + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.00006 + Ratio : from side 1.0000 to side 1.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + current : 0.0000 + j0.0000 pu 0.0000 Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 149->1(1) + number: 0 + name: l115 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 1->2(1) + number: 0 + name: l1 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 1->3(1) + number: 0 + name: l2 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 1->7(1) + number: 0 + name: l3 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 3->4(1) + number: 0 + name: l4 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 3->5(1) + number: 0 + name: l5 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 5->6(1) + number: 0 + name: l6 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 7->8(1) + number: 0 + name: l7 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 8->12(1) + number: 0 + name: l8 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 8->9(1) + number: 0 + name: l9 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 8->13(1) + number: 0 + name: l10 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 9r->14(1) + number: 0 + name: l11 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 13->34(1) + number: 0 + name: l12 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 13->18(1) + number: 0 + name: l13 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 14->11(1) + number: 0 + name: l14 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 14->10(1) + number: 0 + name: l15 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 15->16(1) + number: 0 + name: l16 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 15->17(1) + number: 0 + name: l17 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 18->19(1) + number: 0 + name: l18 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 18->21(1) + number: 0 + name: l19 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 19->20(1) + number: 0 + name: l20 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 21->22(1) + number: 0 + name: l21 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 21->23(1) + number: 0 + name: l22 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 23->24(1) + number: 0 + name: l23 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 23->25(1) + number: 0 + name: l24 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 25r->26(1) + number: 0 + name: l25 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 25->28(1) + number: 0 + name: l26 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 26->27(1) + number: 0 + name: l27 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 26->31(1) + number: 0 + name: l28 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 27->33(1) + number: 0 + name: l29 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 28->29(1) + number: 0 + name: l30 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 29->30(1) + number: 0 + name: l31 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 30->250(1) + number: 0 + name: l32 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 31->32(1) + number: 0 + name: l33 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 34->15(1) + number: 0 + name: l34 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 35->36(1) + number: 0 + name: l35 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 35->40(1) + number: 0 + name: l36 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 36->37(1) + number: 0 + name: l37 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 36->38(1) + number: 0 + name: l38 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 38->39(1) + number: 0 + name: l39 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 40->41(1) + number: 0 + name: l40 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 40->42(1) + number: 0 + name: l41 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 42->43(1) + number: 0 + name: l42 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 42->44(1) + number: 0 + name: l43 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 44->45(1) + number: 0 + name: l44 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 44->47(1) + number: 0 + name: l45 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 45->46(1) + number: 0 + name: l46 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 47->48(1) + number: 0 + name: l47 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 47->49(1) + number: 0 + name: l48 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 49->50(1) + number: 0 + name: l49 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 50->51(1) + number: 0 + name: l50 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 51->151(1) + number: 0 + name: l51 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 52->53(1) + number: 0 + name: l52 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 53->54(1) + number: 0 + name: l53 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 54->55(1) + number: 0 + name: l54 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 54->57(1) + number: 0 + name: l55 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 55->56(1) + number: 0 + name: l56 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 57->58(1) + number: 0 + name: l57 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 57->60(1) + number: 0 + name: l58 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 58->59(1) + number: 0 + name: l59 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 60->61(1) + number: 0 + name: l60 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 60->62(1) + number: 0 + name: l61 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 62->63(1) + number: 0 + name: l62 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 63->64(1) + number: 0 + name: l63 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 64->65(1) + number: 0 + name: l64 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 65->66(1) + number: 0 + name: l65 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 67->68(1) + number: 0 + name: l66 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 67->72(1) + number: 0 + name: l67 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 67->97(1) + number: 0 + name: l68 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 68->69(1) + number: 0 + name: l69 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 69->70(1) + number: 0 + name: l70 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 70->71(1) + number: 0 + name: l71 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 72->73(1) + number: 0 + name: l72 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 72->76(1) + number: 0 + name: l73 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 73->74(1) + number: 0 + name: l74 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 74->75(1) + number: 0 + name: l75 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 76->77(1) + number: 0 + name: l76 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 76->86(1) + number: 0 + name: l77 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 77->78(1) + number: 0 + name: l78 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 78->79(1) + number: 0 + name: l79 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 78->80(1) + number: 0 + name: l80 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 80->81(1) + number: 0 + name: l81 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 81->82(1) + number: 0 + name: l82 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 81->84(1) + number: 0 + name: l83 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 82->83(1) + number: 0 + name: l84 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 84->85(1) + number: 0 + name: l85 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 86->87(1) + number: 0 + name: l86 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 87->88(1) + number: 0 + name: l87 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 87->89(1) + number: 0 + name: l88 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 89->90(1) + number: 0 + name: l89 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 89->91(1) + number: 0 + name: l90 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 91->92(1) + number: 0 + name: l91 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 91->93(1) + number: 0 + name: l92 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 93->94(1) + number: 0 + name: l93 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 93->95(1) + number: 0 + name: l94 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 95->96(1) + number: 0 + name: l95 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 97->98(1) + number: 0 + name: l96 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 98->99(1) + number: 0 + name: l97 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 99->100(1) + number: 0 + name: l98 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 100->450(1) + number: 0 + name: l99 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 197->101(1) + number: 0 + name: l118 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 101->102(1) + number: 0 + name: l100 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 101->105(1) + number: 0 + name: l101 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 102->103(1) + number: 0 + name: l102 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 103->104(1) + number: 0 + name: l103 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 105->106(1) + number: 0 + name: l104 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 105->108(1) + number: 0 + name: l105 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 106->107(1) + number: 0 + name: l106 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 108->109(1) + number: 0 + name: l107 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 108->300(1) + number: 0 + name: l108 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 109->110(1) + number: 0 + name: l109 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 110->111(1) + number: 0 + name: l110 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 110->112(1) + number: 0 + name: l111 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 112->113(1) + number: 0 + name: l112 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 113->114(1) + number: 0 + name: l113 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 135->35(1) + number: 0 + name: l114 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 152->52(1) + number: 0 + name: l116 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 160r->67(1) + number: 0 + name: l117 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 150r->149(1) + number: 0 + name: sw1 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 13->152(1) + number: 0 + name: sw2 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 18->135(1) + number: 0 + name: sw3 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 60->160(1) + number: 0 + name: sw4 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 97->197(1) + number: 0 + name: sw5 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 61->61s(1) + number: 0 + name: sw6 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 151->300_open(1) + number: 0 + name: sw7 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 54->94_open(1) + number: 0 + name: sw8 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 1 + branchCode: Line + z: 0.0000 + j0.0000 + 1/2 B : 0.0000 pu + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : ? + j? pu ? + j? kva + p+jq(t->f) : ? + j? pu ? + j? kva + current : ? + j? pu ? Amps + + SC Info: + z0: 0.0000 + j0.0000 + hB0: 0.0 + + + id: 61s->610(0) + number: 0 + name: xfm1 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.15717 + Ratio : from side 1.0000 to side 1.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + current : 0.0000 + j0.0000 pu 0.0000 Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: Delta + xfrToConnectCode: Delta + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 9->9r(0) + number: 0 + name: reg2a + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.00058 + Ratio : from side 1.00009 to side 1.00009 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + current : 0.0000 + j0.0000 pu 0.0000 Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 25->25r(0) + number: 0 + name: reg3 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.00058 + Ratio : from side 1.0000 to side 1.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + current : 0.0000 + j0.0000 pu 0.0000 Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + + + id: 160->160r(0) + number: 0 + name: reg4 + desc: + status: true (booleanFlag: true, weight: (0.0, 0.0), intFlag: 0, sortNumber: 0) (extensionObject: null) + circuitNumber: 0 + branchCode: XFormer + z: 0.0000 + j0.00058 + Ratio : from side 1.0000 to side 1.0000 pu + Z multiplying factor: 1.0000 Z Adj Table number: 0 + fromShuntY: 0.0000 + j0.0000 pu + toShuntY: 0.0000 + j0.0000 pu + mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 + LF results + p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + current : 0.0000 + j0.0000 pu 0.0000 Amps + + SC Info: + z0: 0.0000 + j0.0000 + xfrFromConnectCode: WyeSolidGrounded + xfrToConnectCode: WyeSolidGrounded + xfrFromGroundZ: 0.0000 + j0.0000 + xfrToGroundZ: 0.0000 + j0.0000 + diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat b/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat index c634c46..c527c48 100644 --- a/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat @@ -26,7 +26,7 @@ AcscBus Info loadCode: NonLoad Desired voltageMag: 1.0 Desired voltageAng: 0.0 - voltageMag: 4.16 + voltageMag: 1.0 voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 @@ -35,9 +35,9 @@ AcscBus Info distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) LF Results : - voltage : 4.1600 pu 17305.6000 v + voltage : 1.0000 pu 4160.0000 v angle : 0.0000 deg - gen : 0.0000 + j0.00076 pu 0.0000 + j75.96154 kva + gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: @@ -4990,9 +4990,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : 0.0000 + j0.00076 pu 0.0000 + j75.96154 kva - p+jq(t->f) : 0.0000 + j-0.00018 pu 0.0000 + j-18.25999 kva - current : 0.0000 + j-0.00018 pu 2.53423 Amps + p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva + current : 0.0000 + j0.0000 pu 0.0000 Amps SC Info: z0: 0.0000 + j0.0000 From 8e44e372dc3747dcfc5bd78a285726ef52cc5a20 Mon Sep 17 00:00:00 2001 From: thuang Date: Thu, 4 May 2017 16:37:34 -0700 Subject: [PATCH 22/36] add single-phase load list to avoid use of contributeLoadList; pass test --- .../org/ipss/threePhase/basic/Bus3Phase.java | 1 + .../threePhase/basic/impl/Bus3PhaseImpl.java | 54 +- .../data_parser/OpenDSSDataParser.java | 4 +- .../data_parser/OpenDSSLoadParser.java | 2 +- .../test/IEEE123Feeder_Dstab_Test.java | 2 +- .../test/TestOpenDSSDataParser.java | 4 +- .../feeder/IEEE123/ieee123_netString.dat | 670 +++++------------- 7 files changed, 214 insertions(+), 523 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Bus3Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Bus3Phase.java index b689889..28f4ed7 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Bus3Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Bus3Phase.java @@ -30,6 +30,7 @@ public interface Bus3Phase extends DStabBus { public List getThreePhaseDynLoadList(); + public List getSinglePhaseLoadList(); public List getThreePhaseLoadList(); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java index 9b11f4c..7298991 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java @@ -43,8 +43,9 @@ public class Bus3PhaseImpl extends DStabBusImpl implements Bus3Phase{ private List threePhaseDynLoadList; + private List singlePhaseLoadList = null; private List threePhaseLoadList = null; - private List threePhaseGenList = null; + private List threePhaseGenList = null; private Complex3x1 load3PhEquivCurInj = null; private Complex3x1 equivCurInj3Phase = null; @@ -101,7 +102,7 @@ public Complex3x3 getYiiAbc() { } - // the shuntYabc + //TODO add setter/getter for the shuntYabc if(shuntYabc != null){ yiiAbc= yiiAbc.add(shuntYabc); } @@ -116,6 +117,7 @@ public Complex3x3 getYiiAbc() { //EquivLoadYabc does not limit to load buses, otherwise buses with sequence shuntY cannot be correctly modeled //ALSO NOTE: The contribution from the generators has been considered in the above + //TODO 05/04/2017 yiiAbc= yiiAbc.add(ThreeSeqLoadProcessor.getEquivLoadYabc(this)); @@ -178,6 +180,14 @@ public List getThreePhaseLoadList() { threePhaseLoadList = new ArrayList<>(); return threePhaseLoadList; } + + @Override + public List getSinglePhaseLoadList() { + if(singlePhaseLoadList ==null) + singlePhaseLoadList = new ArrayList<>(); + return singlePhaseLoadList; + + } private Complex3x1 calcLoad3PhEquivCurInj() { @@ -186,14 +196,13 @@ private Complex3x1 calcLoad3PhEquivCurInj() { Vabc = new Complex3x1(new Complex(1,0),new Complex(-Math.sin(Math.PI/6),-Math.cos(Math.PI/6)),new Complex(-Math.sin(Math.PI/6),Math.cos(Math.PI/6))); //single-phase loads - if(this.getContributeLoadList().size()>0){ - for(AclfLoad load: this.getContributeLoadList()){ - if(load instanceof Load1Phase){ - Load1Phase load1P = (Load1Phase) load; + if(this.getSinglePhaseLoadList().size()>0){ + for(Load1Phase load1P: this.getSinglePhaseLoadList()){ + if(load1P.isActive()){ this.load3PhEquivCurInj=this.load3PhEquivCurInj.add(load1P.getEquivCurrInj(Vabc)); } else{ - throw new Error("Load instance is not single-phase load! Bus, load = "+this.getId()+","+load.getId()); + throw new Error("Load instance is not single-phase load! Bus, load = "+this.getId()+","+load1P.getId()); } } } @@ -202,7 +211,8 @@ private Complex3x1 calcLoad3PhEquivCurInj() { if(this.getThreePhaseLoadList().size()>0){ for(Load3Phase load:this.getThreePhaseLoadList()){ - this.load3PhEquivCurInj=this.load3PhEquivCurInj.add(load.getEquivCurrInj(Vabc)); + if(load.isActive()) + this.load3PhEquivCurInj=this.load3PhEquivCurInj.add(load.getEquivCurrInj(Vabc)); } } @@ -285,6 +295,23 @@ public void set3PhaseNetLoadResults(Complex3x1 netLoad3Phase) { } + @Override + public AclfLoad getContributeLoad(String id) { + for (AclfLoad load : this.getContributeLoadList()) + if (id.equals(load.getId())) + return load; + + for (AclfLoad load : this.getSinglePhaseLoadList()) + if (id.equals(load.getId())) + return load; + + for (AclfLoad load : this.getThreePhaseLoadList()) + if (id.equals(load.getId())) + return load; + + return null; + } + @Override public Complex3x1 get3PhaseTotalLoad() { @@ -295,11 +322,10 @@ public Complex3x1 get3PhaseTotalLoad() { } //consider single-phase Wye connected load included in the contributeLoadList() // TODO how about delta connected load?? - for(AclfLoad load: this.getContributeLoadList()){ - if(load.isActive() && load instanceof Load1Phase){ - Load1Phase load1P = (Load1Phase) load; + for(Load1Phase load1P: this.getSinglePhaseLoadList()){ + if(load1P.isActive()){ if(load1P.getLoadConnectionType()==LoadConnectionType.Single_Phase_Delta){ - throw new Error (" get3PhaseTotalLoad() does not support LoadConnectionType.Single_Phase_Delta yet! bus, load = "+this.getId()+","+load.getId()); + throw new Error (" get3PhaseTotalLoad() does not support LoadConnectionType.Single_Phase_Delta yet! bus, load = "+this.getId()+","+load1P.getId()); } else{ switch(load1P.getPhaseCode()){ @@ -317,7 +343,7 @@ public Complex3x1 get3PhaseTotalLoad() { this.totalLoad3Phase.c_2 = this.totalLoad3Phase.c_2.add(load1P.getLoad(vmag)); break; default: - throw new Error (" get3PhaseTotalLoad() does not support the phase code of this single load yet! bus, load, phase code = "+this.getId()+","+load.getId()+","+load1P.getPhaseCode()); + throw new Error (" get3PhaseTotalLoad() does not support the phase code of this single load yet! bus, load, phase code = "+this.getId()+","+load1P.getId()+","+load1P.getPhaseCode()); } @@ -344,6 +370,8 @@ public Complex3x1 get3PhaseInitVoltage() { + + diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index d2b0e34..97a0a85 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -615,8 +615,8 @@ private boolean convertLoadCapacitorToPU(){ for(DStabBus b: this.getDistNetwork().getBusList()){ Bus3Phase bus3P = (Bus3Phase)b; - if(bus3P.getContributeLoadList().size()>0){ - for(AclfLoad load:bus3P.getContributeLoadList()){ + if(bus3P.getSinglePhaseLoadList().size()>0){ + for(Load1Phase load:bus3P.getSinglePhaseLoadList()){ Load1Phase ld1P = (Load1Phase) load; ld1P.setLoadCP(ld1P.getLoadCP().divide(baseKVA1P)); ld1P.setLoadCI(ld1P.getLoadCI().divide(baseKVA1P)); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java index 85d1758..abededf 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java @@ -247,7 +247,7 @@ else if((phase1.equals("2") && phase2.equals("3"))||(phase1.equals("3") && phase } if(phaseNum==1) - bus.getContributeLoadList().add(load); + bus.getSinglePhaseLoadList().add(load); else if(phaseNum==3) bus.getThreePhaseLoadList().add((Load3Phase) load); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java index 832cb83..98063cc 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java @@ -147,7 +147,7 @@ public void testIEEE123BusDstabSim() throws InterpssException{ // output three phase total load for(DStabBus bus: distNet.getBusList()){ Bus3Phase bus3P = (Bus3Phase) bus; - bus3P.get3PhaseTotalLoad(); + System.out.println(bus.getId()+", total loads, "+ bus3P.get3PhaseTotalLoad().multiply(100.0*1000.0/3).toString()); } // Add the dyanmic machine to the source Bus diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java index e432474..aabbcc4 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -114,7 +114,7 @@ public void test_LineCodeParser(){ } - @Test + //@Test public void testDataParser(){ IpssCorePlugin.init(); @@ -270,7 +270,7 @@ public void testDataParser(){ } - @Test + //@Test public void testCalcBaseVoltage(){ IpssCorePlugin.init(); diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat b/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat index c527c48..47fd9a7 100644 --- a/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat @@ -135,7 +135,7 @@ AcscBus Info voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -143,11 +143,7 @@ AcscBus Info voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s1a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -174,7 +170,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -182,11 +178,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s2b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -248,7 +240,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -256,11 +248,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s7a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -287,7 +275,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -295,11 +283,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s4c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -326,7 +310,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -334,11 +318,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 20.0000 + j10.0000, id: s5c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -365,7 +345,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -373,11 +353,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s6c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -439,7 +415,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -447,11 +423,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s12b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -478,7 +450,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -486,11 +458,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s9a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -622,7 +590,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -630,11 +598,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s34c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -696,7 +660,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -704,11 +668,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s11a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -735,7 +695,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -743,11 +703,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 20.0000 + j10.0000, id: s10a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -809,7 +765,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -817,11 +773,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s16c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -848,7 +800,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -856,11 +808,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s17c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -887,7 +835,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -895,11 +843,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s19a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -961,7 +905,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -969,11 +913,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 40.0000 + j20.0000, id: s20a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1000,7 +940,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1008,11 +948,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s22b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1074,7 +1010,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1082,11 +1018,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s24c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1218,7 +1150,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1226,11 +1158,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 40.0000 + j20.0000, id: s28a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1292,7 +1220,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1300,11 +1228,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s31c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1331,7 +1255,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1339,11 +1263,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 40.0000 + j20.0000, id: s33a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1370,7 +1290,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1378,11 +1298,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s29a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1409,7 +1325,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1417,11 +1333,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s30c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1483,7 +1395,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1491,11 +1403,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s32c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1522,7 +1430,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1530,11 +1438,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s35a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1631,7 +1535,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1639,11 +1543,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s37a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1670,7 +1570,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1678,11 +1578,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 20.0000 + j10.0000, id: s38b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1709,7 +1605,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1717,11 +1613,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s39b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1748,7 +1640,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1756,11 +1648,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s41c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1787,7 +1675,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1795,11 +1683,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s42a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1826,7 +1710,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1834,11 +1718,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s43b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1900,7 +1780,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1908,11 +1788,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 20.0000 + j10.0000, id: s45a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -1974,7 +1850,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -1982,11 +1858,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s46a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2048,7 +1920,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 140.0000 + j95.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2056,13 +1928,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 140.0000 + j95.0000 pu 14000000.0000 + j9500000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 35.0000 + j25.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s49a, name: ) - (code: ConstP, loadCP: 70.0000 + j50.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s49b, name: ) - (code: ConstP, loadCP: 35.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s49c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2089,7 +1955,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2097,11 +1963,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s50c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2128,7 +1990,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2136,11 +1998,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s51a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2202,7 +2060,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2210,11 +2068,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s52a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2241,7 +2095,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2249,11 +2103,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s53a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2315,7 +2165,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2323,11 +2173,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 20.0000 + j10.0000, loadCI: 0.0000 + j0.0000, id: s55a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2389,7 +2235,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2397,11 +2243,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s56b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2428,7 +2270,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2436,11 +2278,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 20.0000 + j10.0000, id: s58b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2467,7 +2305,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2475,11 +2313,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s60a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2506,7 +2340,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2514,11 +2348,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s59b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2580,7 +2410,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2588,11 +2418,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s62c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2619,7 +2445,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2627,11 +2453,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s63a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2658,7 +2480,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 75.0000 + j35.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2666,11 +2488,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 75.0000 + j35.0000 pu 7500000.0000 + j3500000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 75.0000 + j35.0000, id: s64b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2697,7 +2515,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 140.0000 + j100.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2705,13 +2523,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 140.0000 + j100.0000 pu 14000000.0000 + j10000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 35.0000 + j25.0000, loadCI: 0.0000 + j0.0000, id: s65a, name: ) - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 35.0000 + j25.0000, loadCI: 0.0000 + j0.0000, id: s65b, name: ) - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 70.0000 + j50.0000, loadCI: 0.0000 + j0.0000, id: s65c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2738,7 +2550,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 75.0000 + j35.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2746,11 +2558,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 75.0000 + j35.0000 pu 7500000.0000 + j3500000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 75.0000 + j35.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s66c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2812,7 +2620,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2820,11 +2628,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s68a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2921,7 +2725,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2929,11 +2733,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s69a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2960,7 +2760,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -2968,11 +2768,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s70a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -2999,7 +2795,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3007,11 +2803,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s71a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3038,7 +2830,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3046,11 +2838,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s73c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3077,7 +2865,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 245.0000 + j180.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3085,13 +2873,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 245.0000 + j180.0000 pu 24500000.0000 + j18000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 105.0000 + j80.0000, id: s76a, name: ) - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 70.0000 + j50.0000, id: s76b, name: ) - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 70.0000 + j50.0000, id: s76c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3118,7 +2900,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3126,11 +2908,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s74c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3157,7 +2935,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3165,11 +2943,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s75c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3196,7 +2970,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3204,11 +2978,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s77b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3235,7 +3005,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3243,11 +3013,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s86b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3309,7 +3075,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3317,11 +3083,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s79a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3348,7 +3110,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3356,11 +3118,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s80b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3422,7 +3180,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3430,11 +3188,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s82a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3461,7 +3215,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3469,11 +3223,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s84c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3500,7 +3250,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3508,11 +3258,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s83c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3539,7 +3285,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3547,11 +3293,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s85c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3578,7 +3320,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3586,11 +3328,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s87b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3617,7 +3355,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3625,11 +3363,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s88a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3691,7 +3425,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3699,11 +3433,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 40.0000 + j20.0000, id: s90b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3765,7 +3495,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3773,11 +3503,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s92c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3839,7 +3565,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3847,11 +3573,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s94a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3878,7 +3600,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3886,11 +3608,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s95b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3917,7 +3635,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3925,11 +3643,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s96b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3956,7 +3670,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -3964,11 +3678,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s98a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -3995,7 +3705,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4003,11 +3713,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s99b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4034,7 +3740,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4042,11 +3748,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s100c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4178,7 +3880,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4186,11 +3888,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s102c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4252,7 +3950,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4260,11 +3958,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s103c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4291,7 +3985,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4299,11 +3993,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s104c, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4330,7 +4020,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4338,11 +4028,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s106b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4404,7 +4090,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4412,11 +4098,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s107b, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4443,7 +4125,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4451,11 +4133,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 40.0000 + j20.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s109a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4552,7 +4230,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4560,11 +4238,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s111a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4591,7 +4265,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4599,11 +4273,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstI, loadCP: 0.0000 + j0.0000, loadCZ: 0.0000 + j0.0000, loadCI: 20.0000 + j10.0000, id: s112a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4630,7 +4300,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 40.0000 + j20.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4638,11 +4308,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 40.0000 + j20.0000 pu 4000000.0000 + j2000000.0000 kva - -Contributing Load: - (code: ConstZ, loadCP: 0.0000 + j0.0000, loadCZ: 40.0000 + j20.0000, loadCI: 0.0000 + j0.0000, id: s113a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri @@ -4669,7 +4335,7 @@ Contributing Load: voltageAng: 0.0 gen: 0.0000 + j0.0000 capacitor: 0.0000 - load: 20.0000 + j10.0000 + load: 0.0000 + j0.0000 shuntY: 0.0000 + j0.0000 distFactor: 0.0000 vLimit: ( 0.0, 0.0 ) @@ -4677,11 +4343,7 @@ Contributing Load: voltage : 1.0000 pu 0.0000 v angle : 0.0000 deg gen : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - load : 20.0000 + j10.0000 pu 2000000.0000 + j1000000.0000 kva - -Contributing Load: - (code: ConstP, loadCP: 20.0000 + j10.0000, loadCZ: 0.0000 + j0.0000, loadCI: 0.0000 + j0.0000, id: s114a, name: ) - + load : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva SC Info: scCode: NonContri From 65633830060797a8cb7bb87a38621bbac27150f5 Mon Sep 17 00:00:00 2001 From: thuang Date: Sun, 7 May 2017 16:14:26 -0700 Subject: [PATCH 23/36] update the single-phase AC motor implementation --- .../model/impl/SinglePhaseACMotor.java | 1931 +++++++++-------- 1 file changed, 1053 insertions(+), 878 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java index cd909ca..a9c13be 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java @@ -1,878 +1,1053 @@ -package org.ipss.threePhase.dynamic.model.impl; - -import java.util.Hashtable; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Phase; -import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; - -import com.interpss.common.util.IpssLogger; -import com.interpss.dstab.DStabBus; -import com.interpss.dstab.algo.DynamicSimuMethod; -import com.interpss.dstab.common.DStabOutSymbol; -import com.interpss.dstab.device.DynamicBusDeviceType; -/** - * This dynamic model of single phase AC motor must be used under the condition that the - * loads in the power flow data is input as Load3phase in the threePhaseLoadList. - * - * Reference: WECC Dynamic Composite Load Model (CMPLDW) Specifications published 01-27-2015 - * The compressor motor model is divided into two parts: - Motor A : Those compressors that cann't restart soon after stalling - Motor B : Those compressors that can restart soon after stalling - - The motors are represented by algebraic equations, as follows: - If V > 0.86: - P = Po * (1 + df ) - Q = [Qo + 6 * (V -0.86) ^2 ] * (1 - 3.3 * df ) - If V < 0.86 and V > Vstal - P = [Po + 12 * (0.86- V)^3.2 ] * (1 +df ) - Q = [Qo + 11 * (0.86 -V)^ 2.5 ] * (1 - 3.3 * df ) - If V < Vstall: - P = Gstall * V * V - Q = - Bstall * V * V - If V < Vstall for t > Tstall, motor stays in stalled state. - - For restartable motor, if V > Vrst for t > Trst, the motor restarts. - - Initialization calculations: - Qo = Po * tan ( acos(CompPF) ) - 6 * (1-0.86) ^2 - - V’stall is calculated to determine the voltage level at which there is an intersection between the stall power characteristic and the transition characteristic used for V < 0.86: - for ( V = 0.4; V < Vstall; V += 0.01 ) - { - pst = Gstall * V2 - p_comp = Po + 12 * (0.86- V) 3.2 - if ( p_comp < pst ) - { - Vstall = V - break - } - } - - * - * @author Qiuhua - * - */ -public class SinglePhaseACMotor extends DynLoadModel1Phase { - - - - //Model data - - private double p=0,q=0; // load pq values without considering load characterisitc factors - private double P0 = 0.0,Q0 =0.0; // initial load exponential characteristic factors - private double pac =0.0,qac = 0.0; // actual load pq after considering load characterisitc factors - // there are 3 stages: 0 - running; 1 - stall ; 2- a fraction of motors restart - private int stage = 0; - private double powerFactor = 0.97; - - - - //stalling setting - private double Vstall = 0.6; - private double Rstall = 0.1140; //0.1240; - private double Xstall = 0.1040; // 0.1140; - private double Tstall = 0.033; - - private double LFadj = 0.0; - - private double Kp1 = 0.0; - private double Np1 = 1.0; - - private double Kq1 = 6.0; - private double Nq1 = 2.0; - - private double Kp2 = 12.0; - private double Np2 = 3.2; - - - private double Kq2 = 11.0; - private double Nq2 = 2.5; - - //breaking point - private double Vbrk =0.86; - - - // restart - private double Frst = 0.0; // 0.2 - private double Vrst = 0.9; - private double Trst = 0.4; - - // real and reactive power frequency sensitivity - private double CmpKpf = 1.0; - private double CmpKqf = -3.3; - - - //UVRelay - private double fuvr = 0.0; - private double vtr1 = 0.0; - private double ttr1 = 999.0; - private double vtr2 = 0.0; - private double ttr2 = 999.0; - - //Contractor setting - private double Vc1off = 0.5; - private double Vc2off = 0.4; - private double Vc1on = 0.6; - private double Vc2on = 0.5; - - //Thermal relay setting - // Based on "WECC air conditioner motor model test report", Page.75 - private double Tth = 8; - private double Th1t = 1.3; - private double Th2t = 4.3; - - - - //Affiliated control component - //UV Relay - - //Contractor - - //Thermal relays - // the tripping characterisic is modeled as y = Ax +B for x within {Th1t, Th2t} - - private double thEqnA = -1.0/3; - private double thEqnB = 1.433; // default value - - private double temperature = 0.0d; - private double remainFraction = 1.0; // Remained fraction on-line after thermal tripping - - // Timers for relays and internal controls - - private double UVRelayTimer1 = 0.0; - private double UVRelayTimer2 = 0.0; - - //Timers for stalling and recovery - private double acStallTimer = 0.0; - private double acRestartTimer = 0.0; - - - private Complex loadPQFactor = null; - - private double pfactor = 0.; - private double qfactor = 0.; - private double pfactorStall = 0.; - private double qfactorStall = 0.; - - private boolean disableInternalStallControl = false; - - private Hashtable states = null; - private static final String OUT_SYMBOL_P ="ACMotorP"; - private static final String OUT_SYMBOL_Q ="ACMotorQ"; - private static final String OUT_SYMBOL_VT ="ACMotorVt"; - private static final String OUT_SYMBOL_STATE ="ACMotorState"; - private static final String OUT_SYMBOL_RemainFraction ="ACMotorRemainFraction"; - private String extended_device_Id = ""; - - public SinglePhaseACMotor(){ - states = new Hashtable<>(); - - } - - public SinglePhaseACMotor(String Id){ - this(); - this.id = Id; - } - - /** - * create an instance of SinglePhaseACMotor - * @param bus - * @param Id - */ - public SinglePhaseACMotor(Bus3Phase bus,String Id){ - this(Id); - this.setDStabBus(bus); - - - } - - - @Override - public boolean initStates() { - boolean flag = true; - - - - //TODO the initLoad is the total load at the bus ,include constant Z and I load - //In the future, this may need to be update to consider the constant P load only - - //TODO 11/19/2015 need to add three-phase InitLoad to differentiate phase loads - - - Complex phaseTotalLoad = null; - Complex3x1 totalLoad3Phase = this.getParentBus().get3PhaseTotalLoad(); - if(totalLoad3Phase.abs()>0.0){ - switch(this.getPhase()){ - case A: phaseTotalLoad = totalLoad3Phase.a_0; break; - case B: phaseTotalLoad = totalLoad3Phase.b_1; break; - case C: phaseTotalLoad = totalLoad3Phase.c_2; break; - } - - } - else{ // TODO assuming three-phase balanced - phaseTotalLoad = this.getDStabBus().getInitLoad(); - - } - - pac = phaseTotalLoad.getReal()*this.loadPercent/100.0d; - qac = pac*Math.tan(Math.acos(this.powerFactor)); - - - // pac and qac is the initial power - this.setInitLoadPQ(new Complex(pac,qac)); - this.setLoadPQ(new Complex(pac,qac)); - - // if mva is not defined and loading factor is available - if(this.getMVABase()==0.0){ - if(this.loadFactor >0 && this.loadFactor<=1.0) - IpssLogger.getLogger().fine("AC motor MVABase will be calculated based on load factor"); - else - this.loadFactor = 1.0; - // phase mva base is the 1/3 of the system 3phaes mva base - double calcMva = this.pac*this.getDStabBus().getNetwork().getBaseMva()/3.0d/this.loadFactor; - this.setMVABase(calcMva); - } - - - - //Check whether a compensation is needed. If yes, calculate the compensation shuntY - - // if bus.loadQ < ld1pac.q, then compShuntB = ld1pac.q-bus.loadQ - if(qac >phaseTotalLoad.getImaginary()){ - double v = this.getBusPhaseVoltage().abs(); - double b = (qac - phaseTotalLoad.getImaginary())/v/v; - this.compensateShuntY = new Complex(0,b); - } - - - // update the Vstall and Vbrk if necessary - //Vstall(adj) = Vstall*(1+LFadj*(CompLF-1)) - //Vbrk(adj) = Vbrk*(1+LFadj*(CompLF-1)) - - // Calcuate the P0 and Q0 at stage 0 - P0 = 1 - Kp1*Math.pow((1-Vbrk),Np1); - Q0 = Math.sqrt(1 - this.powerFactor*this.powerFactor)/this.powerFactor - - this.Kq1*Math.pow((1.0-Vbrk),Nq1); - - Complex loadPQFactor = calcLoadCharacterFactor(); - p = pac/loadPQFactor.getReal(); - q = qac/loadPQFactor.getImaginary(); - - - //calculate the thermal protection equation coefficient - if(Th1t >0 && Th2t>Th1t){ - thEqnA = -1/(Th2t-Th1t); - thEqnB = Th2t/(Th2t-Th1t); - } - else{ - thEqnA = 0.0; - thEqnB = 0.0; - } - - this.equivY = this.getEquivY(); - - extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); - this.states.put(DStabOutSymbol.OUT_SYMBOL_BUS_DEVICE_ID, extended_device_Id); - - return flag; - } - - - - - /** - * The thermal protection heating increase is modeled as - * differential equation, thus it must be represented with the nextStep(); - * - * The stall timer as well as the recovery timer are also counted and updated in this method - */ - @Override - public boolean nextStep(double dt, DynamicSimuMethod method) { - boolean flag = true; - - // stage update - if(!this.disableInternalStallControl){ - if(acStallTimer>=Tstall){ - stage = 1; - } - } - - // switch to restart stage - if (stage == 1 && Frst>0.0 && acRestartTimer >= Trst) - stage = 2; - - // check whether the ac motor is stalled or not - double v = this.getBusPhaseVoltage().abs(); - - if(v<=this.Vstall){ - acStallTimer += dt; - } - else{ - acStallTimer = 0.0; - } - - - // update restart counter - if(stage == 1 && v>this.Vrst && Frst>0.0){ - acRestartTimer +=dt; - } - else - acRestartTimer = 0.0; - - - - // thermal overload protection - /* - * When the motor is stalled, the temperature of the motor is computed by - integrating I^2 R through the thermal time constant Tth. If the temperature reaches Th2t, all of the load is - tripped. If the temperature is between Th1t and Th2t, a linear fraction of the load is tripped. The - restartable and non-restartable portions of the load are computed separately. The fractions of the Frst - and 1-Frst parts of the load that have not been tripped by the thermal protection is output as fthA and fthB, respectively. - */ - - if(stage ==1){ - - - // Iac_pu = Vt/Zstall - Complex zstall = new Complex(this.Rstall,this.Xstall); - double Iac_pu = this.getBusPhaseVoltage().divide(zstall).abs(); - - //dTemp = (Ic*Ic*Rstall- Temp)/Tth - double dTemp = (Iac_pu* Iac_pu*this.Rstall)/this.Tth; - - this.temperature += dTemp*dt; - - if(this.temperature>=this.Th1t){ - if(this.thEqnA<0.0){ - this.remainFraction = this.temperature*this.thEqnA+this.thEqnB; - - if( this.remainFraction <0) this.remainFraction = 0.0; - - - // stage = -1, means it is tripped; - if(this.remainFraction <=0.0) stage = -1; - } - } - } - - - // contractor - /* - * Contactor--If the voltage drops to below Vc2off, all of the load is tripped; if the voltage is between - Vc1off and Vc2off, a linear fraction of the load is tripped. If the voltage later recovers to above Vc2on, all - of the motor is reconnected; if the voltage recovers to between Vc2on and Vc1on, a linear fraction of the - load is reconnected. The fraction of the load that has not been tripped by the contactor is output as fcon. - */ - - - //TODO the compensation current is only update once in order to solve the convergence issue. - - calculateCompensateCurInj(); - - //loadPQFactor = calcLoadCharacterFactor(); - - return flag; - } - - - private Complex calcLoadCharacterFactor(){ - // this can be replaced by a protected method getBusVoltageMag(), which is applicable to both pos-seq and single-phase - double v = getBusPhaseVoltage().abs(); - // exponential factor - - if(v>this.Vbrk & stage == 0){ - pfactor = P0 +Kp1*Math.pow((v-Vbrk),Np1); - qfactor = Q0 +Kq1*Math.pow((v-Vbrk),Nq1); - } - //TODO remove the constraint v> Vstall & - else if( v Vstall & stage == 0){ - pfactor = P0 +Kp2*Math.pow((Vbrk-v),Np2); - qfactor = Q0 +Kq2*Math.pow((Vbrk-v),Nq2); - pfactorStall = pfactor; - qfactorStall = qfactor; - } - //TODO how about v<= Vstall? modeled as a constant impedance Zstall?? - else if(v<= Vstall & stage == 0){ - - //TODO Need to be updated - pfactor = pfactorStall*(v/Vstall)*(v/Vstall); - qfactor = qfactorStall*(v/Vstall)*(v/Vstall); - } - - // consider the frequency dependence - if(pfactor !=0.0 ||qfactor!=0){ - double dFreq = getDStabBus().getFreq()-1.0; - pfactor = pfactor*(1+CmpKpf*dFreq); - qfactor = qfactor*(1+CmpKqf*dFreq/Math.sqrt(1-powerFactor*powerFactor)); - } - - return new Complex(pfactor,qfactor); - } - - - - - private double getMotor2SysMVARatio(){ - double ratio = this.remainFraction*this.mva*3.0d/this.getDStabBus().getNetwork().getBaseMva(); - return ratio; - } - - - @Override - public Complex getNortonCurInj() { - - if(this.compensateCurrInj == null) calculateCompensateCurInj(); - - Complex v = this.getBusPhaseVoltage(); - - //TODO based on the WECC Dynamic Composite Load Model (CMPLDW) Specifications published 01-27-2015 - // A/C are modeled as like "stalled A/C", if V getStates(Object ref) { - states.put(OUT_SYMBOL_P, this.getPac()); - states.put(OUT_SYMBOL_Q, this.getQac()); - states.put(OUT_SYMBOL_VT, this.getBusPhaseVoltage().abs()); - states.put(OUT_SYMBOL_STATE, stage==1?0:(stage ==-1? -1:1)); - states.put(OUT_SYMBOL_RemainFraction, this.remainFraction); - return this.states; - } - - @Override - public Complex getEquivY() { - if(this.equivY == null){ - Complex zstall = new Complex(this.Rstall,this.Xstall); - Complex y = new Complex(1.0,0).divide(zstall); - this.equivY = y.multiply(this.mva/this.getDStabBus().getNetwork().getBaseMva()*3.0d); - } - return this.equivY; - } - - - - @Override - public Complex getLoadPQ() { - - - return this.loadPQ = new Complex(getPac(),getQac()); - - } - - - @Override - public String getScripts() { - throw new UnsupportedOperationException(); - } - - @Override - public void setScripts(String value) { - throw new UnsupportedOperationException(); - - } - - - public double getPac() { - if(this.stage ==1){ - double vt = this.getBusPhaseVoltage().abs(); - Complex PQ =this.getEquivY().conjugate().multiply(vt*vt*this.remainFraction); - this.pac = PQ.getReal(); - this.qac = PQ.getImaginary(); - } - else if (stage ==-1) pac = 0.0; - - return pac; - } - - public void setPac(double pac) { - this.pac = pac; - } - - public double getQac() { - if(this.stage ==1){ - double vt = this.getBusPhaseVoltage().abs(); - Complex PQ =this.getEquivY().conjugate().multiply(vt*vt*this.remainFraction); - this.pac = PQ.getReal(); - this.qac = PQ.getImaginary(); - } - else if (stage ==-1) qac = 0.0; - return qac; - } - - public void setQac(double qac) { - this.qac = qac; - } - - public int getStage() { - return stage; - } - - public void setStage(int stage) { - this.stage = stage; - } - - public double getPowerFactor() { - return powerFactor; - } - - public void setPowerFactor(double powerFactor) { - this.powerFactor = powerFactor; - } - - public double getVstall() { - return Vstall; - } - - public void setVstall(double vstall) { - Vstall = vstall; - } - - public double getRstall() { - return Rstall; - } - - public void setRstall(double rstall) { - Rstall = rstall; - } - - public double getXstall() { - return Xstall; - } - - public void setXstall(double xstall) { - Xstall = xstall; - } - - public double getTstall() { - return Tstall; - } - - public void setTstall(double tstall) { - Tstall = tstall; - } - - public double getLFadj() { - return LFadj; - } - - public void setLFadj(double lFadj) { - LFadj = lFadj; - } - - public double getKp1() { - return Kp1; - } - - public void setKp1(double kp1) { - Kp1 = kp1; - } - - public double getNp1() { - return Np1; - } - - public void setNp1(double np1) { - Np1 = np1; - } - - public double getKq1() { - return Kq1; - } - - public void setKq1(double kq1) { - Kq1 = kq1; - } - - public double getNq1() { - return Nq1; - } - - public void setNq1(double nq1) { - Nq1 = nq1; - } - - public double getKp2() { - return Kp2; - } - - public void setKp2(double kp2) { - Kp2 = kp2; - } - - public double getNp2() { - return Np2; - } - - public void setNp2(double np2) { - Np2 = np2; - } - - public double getKq2() { - return Kq2; - } - - public void setKq2(double kq2) { - Kq2 = kq2; - } - - public double getNq2() { - return Nq2; - } - - public void setNq2(double nq2) { - Nq2 = nq2; - } - - public double getVbrk() { - return Vbrk; - } - - public void setVbrk(double vbrk) { - Vbrk = vbrk; - } - - public double getFrst() { - return Frst; - } - - public void setFrst(double frst) { - Frst = frst; - } - - public double getVrst() { - return Vrst; - } - - public void setVrst(double vrst) { - Vrst = vrst; - } - - public double getTrst() { - return Trst; - } - - public void setTrst(double trst) { - Trst = trst; - } - - public double getCmpKpf() { - return CmpKpf; - } - - public void setCmpKpf(double cmpKpf) { - CmpKpf = cmpKpf; - } - - public double getCmpKqf() { - return CmpKqf; - } - - public void setCmpKqf(double cmpKqf) { - CmpKqf = cmpKqf; - } - - public double getFuvr() { - return fuvr; - } - - public void setFuvr(double fuvr) { - this.fuvr = fuvr; - } - - public double getVtr1() { - return vtr1; - } - - public void setVtr1(double vtr1) { - this.vtr1 = vtr1; - } - - public double getTtr1() { - return ttr1; - } - - public void setTtr1(double ttr1) { - this.ttr1 = ttr1; - } - - public double getVtr2() { - return vtr2; - } - - public void setVtr2(double vtr2) { - this.vtr2 = vtr2; - } - - public double getTtr2() { - return ttr2; - } - - public void setTtr2(double ttr2) { - this.ttr2 = ttr2; - } - - public double getVc1off() { - return Vc1off; - } - - public void setVc1off(double vc1off) { - Vc1off = vc1off; - } - - public double getVc2off() { - return Vc2off; - } - - public void setVc2off(double vc2off) { - Vc2off = vc2off; - } - - public double getVc1on() { - return Vc1on; - } - - public void setVc1on(double vc1on) { - Vc1on = vc1on; - } - - public double getVc2on() { - return Vc2on; - } - - public void setVc2on(double vc2on) { - Vc2on = vc2on; - } - - public double getTth() { - return Tth; - } - - public void setTth(double tth) { - Tth = tth; - } - - public double getTh1t() { - return Th1t; - } - - public void setTh1t(double th1t) { - Th1t = th1t; - } - - public double getTh2t() { - return Th2t; - } - - public void setTh2t(double th2t) { - Th2t = th2t; - } - - public double getUVRelayTimer1() { - return UVRelayTimer1; - } - - public void setUVRelayTimer1(double uVRelayTimer1) { - UVRelayTimer1 = uVRelayTimer1; - } - - public double getUVRelayTimer2() { - return UVRelayTimer2; - } - - public void setUVRelayTimer2(double uVRelayTimer2) { - UVRelayTimer2 = uVRelayTimer2; - } - - - - public void disableInternalStallControl(boolean disableStallControl){ - this.disableInternalStallControl = disableStallControl; - } - - - - - - - -} +package org.ipss.threePhase.dynamic.model.impl; + +import java.util.Hashtable; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Phase; +import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; + +import com.interpss.common.util.IpssLogger; +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.common.DStabOutSymbol; +import com.interpss.dstab.device.DynamicBusDeviceType; +/** + * This dynamic model of single phase AC motor must be used under the condition that the + * loads in the power flow data is input as Load3phase in the threePhaseLoadList. + * + * Reference: WECC Dynamic Composite Load Model (CMPLDW) Specifications published 01-27-2015 + * The compressor motor model is divided into two parts: + Motor A : Those compressors that cann't restart soon after stalling + Motor B : Those compressors that can restart soon after stalling + + The motors are represented by algebraic equations, as follows: + If V > 0.86: + P = Po * (1 + df ) + Q = [Qo + 6 * (V -0.86) ^2 ] * (1 - 3.3 * df ) + If V < 0.86 and V > Vstal + P = [Po + 12 * (0.86- V)^3.2 ] * (1 +df ) + Q = [Qo + 11 * (0.86 -V)^ 2.5 ] * (1 - 3.3 * df ) + If V < Vstall: + P = Gstall * V * V + Q = - Bstall * V * V + If V < Vstall for t > Tstall, motor stays in stalled state. + + For restartable motor, if V > Vrst for t > Trst, the motor restarts. + + Initialization calculations: + Qo = Po * tan ( acos(CompPF) ) - 6 * (1-0.86) ^2 + + V’stall is calculated to determine the voltage level at which there is an intersection between the stall power characteristic and the transition characteristic used for V < 0.86: + for ( V = 0.4; V < Vstall; V += 0.01 ) + { + pst = Gstall * V2 + p_comp = Po + 12 * (0.86- V) 3.2 + if ( p_comp < pst ) + { + Vstall = V + break + } + } + + * + * @author Qiuhua + * + */ +public class SinglePhaseACMotor extends DynLoadModel1Phase { + + + + //Model data + + private double p=0,q=0; // load pq values without considering load characteristic factors + private double p0 = 0.0,q0 =0.0; // initial load exponential characteristic factors + private double pac =0.0,qac = 0.0; // actual load pq after considering load characteristic factors + + + private double pac_a = 0.0, qac_a = 0.0, pac_b = 0.0, qac_b = 0.0; + + // there are 3 stages: 0 - running; 1 - stall ; 2- a fraction of motors restart + private int stage = 0; + private double powerFactor = 0.97; + + + + //stalling setting + private double Vstall = 0.6; + private double Rstall = 0.1140; //0.1240; + private double Xstall = 0.1040; // 0.1140; + private double Tstall = 0.033; + private double Gstall = 0.0, Bstall = 0.0; + private Complex Ystall = null; + + private double LFadj = 0.0; + + private double Kp1 = 0.0; + private double Np1 = 1.0; + + private double Kq1 = 6.0; + private double Nq1 = 2.0; + + private double Kp2 = 12.0; + private double Np2 = 3.2; + + + private double Kq2 = 11.0; + private double Nq2 = 2.5; + + //breaking point + private double Vbrk =0.86; + // cross point of two curves for the run stage 2 and the stall stage + private double Vstallbrk = 0.0; + + // restart + private double Frst = 0.0; // 0.2 + private double Vrst = 0.9; + private double Trst = 0.4; + + // real and reactive power frequency sensitivity + private double CmpKpf = 1.0; + private double CmpKqf = -3.3; + + + //UVRelay + private double Fuvr = 0.0; + private double UVtr1 = 0.0; + private double Ttr1 = 999.0; + private double UVtr2 = 0.0; + private double Ttr2 = 999.0; + + //Contractor setting + private double Vc1off = 0.5; + private double Vc2off = 0.4; + private double Vc1on = 0.6; + private double Vc2on = 0.5; + + //Thermal relay setting + // Based on "WECC air conditioner motor model test report", Page.75 + private double Tth = 8; + private double Th1t = 1.3; + private double Th2t = 4.3; + + + + //Affiliated control component + //UV Relay and Contractor + + private double kuv =1.0, kcon = 1.0, fcon_trip = 0.0; + + private boolean isContractorActioned = false; + + + + //Thermal relays + // the tripping characterisic is modeled as y = Ax +B for x within {Th1t, Th2t} + + private double thEqnA = -1.0/3; + private double thEqnB = 1.433; // default value + + private double temperature = 0.0d; + + private double remainFraction = 1.0; // Remained fraction on-line after thermal tripping + + // internally modeled as two motors, i.e., motor A and B + private int statusA =1, statusB = 1; + + protected double fcon = 1.0; // fraction not tripped by the contractor + + protected double fthA = 1.0; // fraction not tripped by the motor A thermal protection + + protected double fthB = 1.0; // fraction not tripped by the motor B thermal protection + + protected double tempA = 0.0; // Temperature of the motor A + + protected double tempB = 0.0; // Temperature of the motor B + + protected double tv = 0.05; // voltage measurement time constant + + protected double complf = 1.0; + + // Timers for relays and internal controls + + private double UVRelayTimer1 = 0.0; + private double UVRelayTimer2 = 0.0; + + //Timers for stalling and recovery + private double acStallTimer = 0.0; + private double acRestartTimer = 0.0; + + + private double vt_measured = 0.0; + + private double timestep = 0.0; + + private boolean disableInternalStallControl = false; + + + + private double I_CONV_FACTOR_M2S = 0.0; + + + + + + private Hashtable states = null; + private static final String OUT_SYMBOL_P ="ACMotorP"; + private static final String OUT_SYMBOL_Q ="ACMotorQ"; + private static final String OUT_SYMBOL_VT ="ACMotorVt"; + private static final String OUT_SYMBOL_STATE ="ACMotorState"; + private static final String OUT_SYMBOL_RemainFraction ="ACMotorRemainFraction"; + private String extended_device_Id = ""; + private Complex PQmotor; + private Complex equivYpq; + private Complex nortonCurInj; + + + public SinglePhaseACMotor(){ + states = new Hashtable<>(); + + } + + public SinglePhaseACMotor(String Id){ + this(); + this.id = Id; + } + + /** + * create an instance of SinglePhaseACMotor + * @param bus + * @param Id + */ + public SinglePhaseACMotor(Bus3Phase bus,String Id){ + this(Id); + this.setDStabBus(bus); + + + } + + + @Override + public boolean initStates() { + boolean flag = true; + + + //TODO the initLoad is the total load at the bus ,include constant Z and I load + //In the future, this may need to be update to consider the constant P load only + + //TODO 11/19/2015 need to add three-phase InitLoad to differentiate phase loads + + + Complex phaseTotalLoad = null; + Complex3x1 totalLoad3Phase = this.getParentBus().get3PhaseTotalLoad(); + if(totalLoad3Phase.abs()>0.0){ + switch(this.getPhase()){ + case A: phaseTotalLoad = totalLoad3Phase.a_0; break; + case B: phaseTotalLoad = totalLoad3Phase.b_1; break; + case C: phaseTotalLoad = totalLoad3Phase.c_2; break; + } + + } + else{ // TODO assuming three-phase balanced + phaseTotalLoad = this.getDStabBus().getInitLoad(); + + } + + this.stage = 1; // initialized to running state + + this.Gstall = this.Rstall/(this.Rstall*this.Rstall + this.Xstall*this.Xstall); + this.Bstall = -this.Xstall/(this.Rstall*this.Rstall + this.Xstall*this.Xstall); + + this.Ystall = new Complex(this.Gstall, this.Bstall); + + pac = phaseTotalLoad.getReal()*this.loadPercent/100.0d; // pu on system base + qac = pac*Math.tan(Math.acos(this.powerFactor)); + + + // pac and qac is the initial power + this.setInitLoadPQ(new Complex(pac,qac)); + this.setLoadPQ(new Complex(pac,qac)); + + // if mva is not defined and loading factor is available + if(this.getMVABase()==0.0){ + if(this.loadFactor >0 && this.loadFactor<=1.0) + IpssLogger.getLogger().fine("AC motor MVABase will be calculated based on load factor"); + else + this.loadFactor = 1.0; + // phase mva base is the 1/3 of the system 3phaes mva base + double calcMva = this.pac*this.getDStabBus().getNetwork().getBaseMva()/3.0d/this.loadFactor; + this.setMVABase(calcMva); + } + + this.I_CONV_FACTOR_M2S = this.getMVABase()/this.getDStabBus().getNetwork().getBaseMva(); + + + + double vt = this.getBusPhaseVoltage().abs(); + this.vt_measured = vt; + + //Check whether a compensation is needed. If yes, calculate the compensation shuntY + // if bus.loadQ < ld1pac.q, then compShuntB = ld1pac.q-bus.loadQ + if(qac >phaseTotalLoad.getImaginary()){ + + double b = (qac - phaseTotalLoad.getImaginary())/vt/vt; + this.compensateShuntY = new Complex(0,b); + } + + + + Complex Sac = new Complex (pac, qac); + double i_motor = Sac.abs()/vt; + + this.tempA = i_motor*i_motor*this.Rstall; + this.tempB = this.tempA; + + + // update the Vstall and Vbrk if necessary + this.Vstall= this.Vstall*(1+this.LFadj*(this.loadFactor-1)); + this.Vbrk = this.Vbrk*(1+this.LFadj*(this.loadFactor-1)); + + // motor P and Q on motor mvabase + double pac_mbase = this.pac*this.getDStabBus().getNetwork().getBaseMva()/this.getMVABase(); + double qac_mbase = this.qac*this.getDStabBus().getNetwork().getBaseMva()/this.getMVABase(); + + // initialize the parts A and B of the motor + this.pac_a = pac_mbase; + this.pac_b = pac_mbase; + + this.qac_a = qac_mbase; + this.qac_b = qac_mbase; + + + // Calculate the P0 and Q0 at stage 0 + this.p0 = pac_mbase - this.Kp1*Math.pow((vt-this.Vbrk),this.Np1); + this.q0 = qac_mbase - this.Kq1*Math.pow((vt-this.Vbrk),this.Nq1); + + + + double pst = 0.0, pac_calc = 0.0; + for (double v = 0.4; vthis.Vstall){ + this.Vstallbrk = this.Vstall; + } + + + //calculate the thermal protection equation coefficient + if(Th1t >0 && Th2t>Th1t){ + thEqnA = -1/(Th2t-Th1t); + thEqnB = Th2t/(Th2t-Th1t); + } + else{ + thEqnA = 0.0; + thEqnB = 0.0; + } + + this.equivY = this.getEquivY(); + + extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); + this.states.put(DStabOutSymbol.OUT_SYMBOL_BUS_DEVICE_ID, extended_device_Id); + + return flag; + } + + + + + /** + * The thermal protection heating increase is modeled as + * differential equation, thus it must be represented with the nextStep(); + * + * The stall timer as well as the recovery timer are also counted and updated in this method + */ + @Override + public boolean nextStep(double dt, DynamicSimuMethod method) { + boolean flag = true; + + // check the protection actions and update the status of AC motor accordingly + timestep = dt; + + + double vmag = this.getBusPhaseVoltage().abs(); + + + // voltage measurements + + double dv_dt0 = (vmag-this.vt_measured)/this.tv; + + double vt_measured1 = this.vt_measured+dv_dt0*dt; + + double dv_dt1 = (vmag-vt_measured1)/this.tv; + + this.vt_measured = this.vt_measured+ (dv_dt0+dv_dt1)*0.5d*dt; + + // thermal overload protection + /* + * When the motor is stalled, the temperature of the motor is computed by + integrating I^2 R through the thermal time constant Tth. If the temperature reaches Th2t, all of the load is + tripped. If the temperature is between Th1t and Th2t, a linear fraction of the load is tripped. The termperature + of the A and B portions of the load are computed separately. The fractions of the A + and B parts of the load that have not been tripped by the thermal protection is output as fthA and fthB, respectively. + */ + + Complex vt = this.getDStabBus().getVoltage(); + + Complex ImotorA_pu = new Complex(0.0); + Complex ImotorB_pu = new Complex(0.0); + + if(this.statusA ==0) + ImotorA_pu = vt.multiply(this.equivY); + else + ImotorA_pu = new Complex(pac_a, qac_a).divide(vt).conjugate(); + + if(this.statusB ==0) + ImotorB_pu = vt.multiply(this.equivY); + else + ImotorB_pu = new Complex(pac_b, qac_b).divide(vt).conjugate(); + + double dThA_dt0 = (Math.pow(ImotorA_pu.abs(),2)*this.Rstall - this.tempA)/this.Tth; + + double dThB_dt0 = (Math.pow(ImotorB_pu.abs(),2)*this.Rstall - this.tempB)/this.Tth; + + double tempA1 = this.tempA+ dThA_dt0*dt; + double tempB1 = this.tempB+ dThB_dt0*dt; + + double dThA_dt1 = (Math.pow(ImotorA_pu.abs(),2)*this.Rstall - tempA1)/this.Tth; + + double dThB_dt1 = (Math.pow(ImotorB_pu.abs(),2)*this.Rstall - tempB1)/this.Tth; + + this.tempA = this.tempA + (dThA_dt0+dThA_dt1)*0.5d*dt; + this.tempB = this.tempB + (dThB_dt0+dThB_dt1)*0.5d*dt; + + + return flag; + } + + /** + * to check whether AC motor stalls, restarts and the actions of the protections + % this should be perform after the network solution step + */ + private boolean post_process_step(double dt){ + boolean flag = true; + /* + % UV Relay + % Two levels of undervoltage load shedding can be represented: If the voltage drops + % below uvtr1 for ttr1 seconds, the fraction “fuvtr” of the load is tripped; If the voltage drops below uvtr2 + % for ttr2 seconds, the fraction “fuvr” of the load is tripped + */ + + if(this.vt_measured 0.0){ + this.UVRelayTimer1 = this.UVRelayTimer1 +dt; + } + else + this.UVRelayTimer1 = 0.0; + + if(this.vt_measured 0.0){ + this.UVRelayTimer2 = this.UVRelayTimer2 +dt; + } + else + this.UVRelayTimer2 = 0.0; + + // trip the portion with under voltage relays + if(this.UVRelayTimer1> this.Ttr1){ + this.kuv = 1.0 - this.Fuvr; + } + + if(this.UVRelayTimer2> this.Ttr2){ + this.kuv = 1.0 - this.Fuvr; + } + + /* + % contractor + % Contactor – If the voltage drops to below Vc2off, all of the load is tripped; if the voltage is between + % Vc1off and Vc2off, a linear fraction of the load is tripped. If the voltage later recovers to above Vc2on, all + % of the motor is reconnected; if the voltage recovers to between Vc2on and Vc1on, a linear fraction of the + % load is reconnected. + */ + + if(this.vt_measured < this.Vc2off){ + this.kcon = 0.0; + this.fcon_trip = 1.0; + } + else if(this.vt_measured>=this.Vc2off && this.vt_measured =this.Vc1on){ + this.kcon = 1.0; + } + else if(this.vt_measured < this.Vc1on && this.vt_measured >= this.Vc2on){ + double Frecv = (this.vt_measured - this.Vc2on)/(this.Vc1on- this.Vc2on); + this.kcon = 1 - this.fcon_trip*(1-Frecv); + } + + + /* + * Thermal protection + */ + + // update the timer for thermal protection + + double vmag = this.getBusPhaseVoltage().abs(); + + if (this.statusA ==1){ + if(vmag < this.Vstall){ + this.acStallTimer = this.acStallTimer+ dt; + } + else + this.acStallTimer = 0.0; + } + + + if (this.statusB ==0){ + if(vmag > this.Vrst){ + this.acRestartTimer = this.acRestartTimer+ dt; + } + else + this.acRestartTimer = 0.0; + } + + /* + * % update the status of the motor. transition from running to + % stalling is the same for the equivalent Motor A and B + */ + + if(this.acStallTimer > this.Tstall && this.statusA ==1){ + this.statusA = 0; + this.statusB = 0; + this.stage = 0; + } + + // considering AC restarting + if(this.Frst >0.0 && this.statusB ==0 && this.acRestartTimer > this.Trst){ + this.statusB = 1; + this.stage = 2; + } + + + /* + % check whether AC motor will be trip next step, and what will be + % the remaining fraction; + */ + + if(this.thEqnA< 0.0){ + if(this.tempA > this.Th1t){ + if(this.statusA == 0){ + this.fthA = this.tempA*this.thEqnA + this.thEqnB; + + if(this.fthA<0.0) + this.fthA = 0.0; + } + } + + if(this.tempB > this.Th1t){ + if(this.statusB == 0){ + this.fthB = this.tempB*this.thEqnB + this.thEqnB; + + if(this.fthB<0.0) + this.fthB = 0.0; + } + } + } + + + // Calculate the AC motor power + + // call this method to update "this.PQmotor" + calculateMotorPower(); + + // update the equivalent admittance for calculating AC power + this.equivYpq = this.PQmotor.conjugate().divide(vmag*vmag); // on motor MVABase + + return flag; + } + + /** + * calculate the motor power, return value is pu on motor mvabase; + * @return + */ + private Complex calculateMotorPower(){ + + // Calculate the AC motor power + double freq = this.getDStabBus().getFreq(); + double vmag = this.getBusPhaseVoltage().abs(); + + if(this.statusA == 1){ + if(vmag >= this.Vbrk){ + this.pac_a = (p0 +Kp1*Math.pow((vmag-this.Vbrk),this.Np1))*(1+this.CmpKpf*(freq-1.0)); + this.qac_a = (q0 +Kq1*Math.pow((vmag-this.Vbrk),this.Nq1))*(1+this.CmpKqf*(freq-1.0)); + + } + else if(vmag this.Vstallbrk){ + this.pac_a = (p0 +Kp2*Math.pow((this.Vbrk-vmag),this.Np2))*(1+this.CmpKpf*(freq-1.0)); + this.qac_a = (q0 +Kq2*Math.pow((this.Vbrk-vmag),this.Np2))*(1+this.CmpKqf*(freq-1.0)); + } + else{ + this.pac_a =this.Gstall*vmag*vmag; + this.qac_a =-this.Bstall*vmag*vmag; + } + + } + // stall + else { + this.pac_a =this.Gstall*vmag*vmag; + this.qac_a =-this.Bstall*vmag*vmag; + } + + if(this.Frst> 0.0){ + + if(this.statusB == 1){ + if(vmag >= this.Vbrk){ + this.pac_b = (p0 +Kp1*Math.pow((vmag-Vbrk),Np1))*(1+this.CmpKpf*(freq-1.0)); + this.qac_b = (q0 +Kq1*Math.pow((vmag-Vbrk),Nq1))*(1+this.CmpKqf*(freq-1.0)); + + } + else if(vmag this.Vstallbrk){ + this.pac_b = (p0 +Kp2*Math.pow((Vbrk-vmag),Np2))*(1+this.CmpKpf*(freq-1.0)); + this.qac_b = (q0 +Kq2*Math.pow((Vbrk-vmag),Nq2))*(1+this.CmpKqf*(freq-1.0)); + } + else{ + this.pac_b =this.Gstall*vmag*vmag; + this.qac_b =-this.Bstall*vmag*vmag; + } + + } + // stall + else { + this.pac_b =this.Gstall*vmag*vmag; + this.qac_b =-this.Bstall*vmag*vmag; + } + } + + // ac motor total power on motor base + + double Pmotor = this.pac_a*(1-this.Frst)*this.fthA+this.pac_b*this.Frst*this.fthB; + double Qmotor = this.qac_a*(1-this.Frst)*this.fthA+this.qac_b*this.Frst*this.fthB; + + // consider the UR Relay and contractor + Pmotor = this.kuv*this.kcon*Pmotor; + Qmotor = this.kuv*this.kcon*Qmotor; + + this.PQmotor = new Complex(Pmotor, Qmotor); + this.setLoadPQ(this.PQmotor.multiply(getPowerConvFactorM2S())); + + this.pac = this.getLoadPQ().getReal(); // both are on system base + this.qac = this.getLoadPQ().getImaginary(); + + return this.PQmotor; + } + + /** + * calculation the factor for converting current from motor mvabase to system vabase + * @return + */ + private double getPowerConvFactorM2S(){ + return this.getMVABase()/this.getDStabBus().getNetwork().getBaseMva(); + } + + @Override + public Complex getNortonCurInj() { + + + Complex vt = this.getBusPhaseVoltage(); + + Complex Imotor_systembase = null; + if(vt.abs()>this.Vbrk){ + // call this method to update "this.PQmotor" + calculateMotorPower(); + Imotor_systembase = this.PQmotor.divide(vt).conjugate().multiply(this.I_CONV_FACTOR_M2S); + } + else + Imotor_systembase = this.equivYpq.multiply(vt).multiply(this.I_CONV_FACTOR_M2S); + + + + + this.nortonCurInj = getEquivY().multiply(vt).subtract(Imotor_systembase); + + return this.nortonCurInj; + + } + + + + @Override + public Object getOutputObject() { + + return this.getNortonCurInj(); + } + + // This must be overrided to implement the post processing step after network solution converges at each time step + @Override + public boolean updateAttributes(boolean netChange) { + return post_process_step(this.timestep); + } + + @Override + public Hashtable getStates(Object ref) { + states.put(OUT_SYMBOL_P, this.getPac()); + states.put(OUT_SYMBOL_Q, this.getQac()); + states.put(OUT_SYMBOL_VT, this.getBusPhaseVoltage().abs()); + states.put(OUT_SYMBOL_STATE, stage==1?0:(stage ==-1? -1:1)); + states.put(OUT_SYMBOL_RemainFraction, this.remainFraction); + return this.states; + } + + @Override + public Complex getEquivY() { + if(this.equivY == null){ + Complex zstall = new Complex(this.Rstall,this.Xstall); + Complex y = new Complex(1.0,0).divide(zstall); + this.equivY = y.multiply(this.mva/this.getDStabBus().getNetwork().getBaseMva()*3.0d); + } + return this.equivY; + } + + + + @Override + public Complex getLoadPQ() { + + + return this.loadPQ = new Complex(getPac(),getQac()); + + } + + + @Override + public String getScripts() { + throw new UnsupportedOperationException(); + } + + @Override + public void setScripts(String value) { + throw new UnsupportedOperationException(); + + } + + + public double getPac() { + + + return pac; + } + + public void setPac(double pac) { + this.pac = pac; + } + + public double getQac() { + + return qac; + } + + public void setQac(double qac) { + this.qac = qac; + } + + public int getStage() { + return stage; + } + + public void setStage(int stage) { + this.stage = stage; + } + + public double getPowerFactor() { + return powerFactor; + } + + public void setPowerFactor(double powerFactor) { + this.powerFactor = powerFactor; + } + + public double getVstall() { + return Vstall; + } + + public void setVstall(double vstall) { + Vstall = vstall; + } + + public double getRstall() { + return Rstall; + } + + public void setRstall(double rstall) { + Rstall = rstall; + } + + public double getXstall() { + return Xstall; + } + + public void setXstall(double xstall) { + Xstall = xstall; + } + + public double getTstall() { + return Tstall; + } + + public void setTstall(double tstall) { + Tstall = tstall; + } + + public double getLFadj() { + return LFadj; + } + + public void setLFadj(double lFadj) { + LFadj = lFadj; + } + + public double getKp1() { + return Kp1; + } + + public void setKp1(double kp1) { + Kp1 = kp1; + } + + public double getNp1() { + return Np1; + } + + public void setNp1(double np1) { + Np1 = np1; + } + + public double getKq1() { + return Kq1; + } + + public void setKq1(double kq1) { + Kq1 = kq1; + } + + public double getNq1() { + return Nq1; + } + + public void setNq1(double nq1) { + Nq1 = nq1; + } + + public double getKp2() { + return Kp2; + } + + public void setKp2(double kp2) { + Kp2 = kp2; + } + + public double getNp2() { + return Np2; + } + + public void setNp2(double np2) { + Np2 = np2; + } + + public double getKq2() { + return Kq2; + } + + public void setKq2(double kq2) { + Kq2 = kq2; + } + + public double getNq2() { + return Nq2; + } + + public void setNq2(double nq2) { + Nq2 = nq2; + } + + public double getVbrk() { + return Vbrk; + } + + public void setVbrk(double vbrk) { + Vbrk = vbrk; + } + + public double getFrst() { + return Frst; + } + + public void setFrst(double frst) { + Frst = frst; + } + + public double getVrst() { + return Vrst; + } + + public void setVrst(double vrst) { + Vrst = vrst; + } + + public double getTrst() { + return Trst; + } + + public void setTrst(double trst) { + Trst = trst; + } + + public double getCmpKpf() { + return CmpKpf; + } + + public void setCmpKpf(double cmpKpf) { + CmpKpf = cmpKpf; + } + + public double getCmpKqf() { + return CmpKqf; + } + + public void setCmpKqf(double cmpKqf) { + CmpKqf = cmpKqf; + } + + public double getFuvr() { + return Fuvr; + } + + public void setFuvr(double fuvr) { + this.Fuvr = fuvr; + } + + public double getUVtr1() { + return UVtr1; + } + + public void setUVtr1(double vtr1) { + this.UVtr1 = vtr1; + } + + public double getTtr1() { + return Ttr1; + } + + public void setTtr1(double ttr1) { + this.Ttr1 = ttr1; + } + + public double getUVtr2() { + return UVtr2; + } + + public void setUVtr2(double vtr2) { + this.UVtr2 = vtr2; + } + + public double getTtr2() { + return Ttr2; + } + + public void setTtr2(double ttr2) { + this.Ttr2 = ttr2; + } + + public double getVc1off() { + return Vc1off; + } + + public void setVc1off(double vc1off) { + Vc1off = vc1off; + } + + public double getVc2off() { + return Vc2off; + } + + public void setVc2off(double vc2off) { + Vc2off = vc2off; + } + + public double getVc1on() { + return Vc1on; + } + + public void setVc1on(double vc1on) { + Vc1on = vc1on; + } + + public double getVc2on() { + return Vc2on; + } + + public void setVc2on(double vc2on) { + Vc2on = vc2on; + } + + public double getTth() { + return Tth; + } + + public void setTth(double tth) { + Tth = tth; + } + + public double getTh1t() { + return Th1t; + } + + public void setTh1t(double th1t) { + Th1t = th1t; + } + + public double getTh2t() { + return Th2t; + } + + public void setTh2t(double th2t) { + Th2t = th2t; + } + + public double getUVRelayTimer1() { + return UVRelayTimer1; + } + + public void setUVRelayTimer1(double uVRelayTimer1) { + UVRelayTimer1 = uVRelayTimer1; + } + + public double getUVRelayTimer2() { + return UVRelayTimer2; + } + + public void setUVRelayTimer2(double uVRelayTimer2) { + UVRelayTimer2 = uVRelayTimer2; + } + + + + public void disableInternalStallControl(boolean disableStallControl){ + this.disableInternalStallControl = disableStallControl; + } + + + + + + + +} From 7fe517bcbb71543d77aed78f3b5a58497f73c3e6 Mon Sep 17 00:00:00 2001 From: thuang Date: Thu, 11 May 2017 16:51:29 -0700 Subject: [PATCH 24/36] fixed the bug with load3Phase equivCurInj calculation --- .../threePhase/basic/impl/Bus3PhaseImpl.java | 4 +- .../threePhase/basic/impl/Load3PhaseImpl.java | 3 +- .../data_parser/OpenDSSCapacitorParser.java | 1 + .../data_parser/OpenDSSDataParser.java | 19 +- .../data_parser/OpenDSSLineParser.java | 322 +++++++++--------- .../data_parser/OpenDSSLoadParser.java | 1 + .../data_parser/OpenDSSTransformerParser.java | 5 +- .../model/impl/SinglePhaseACMotor.java | 8 +- .../DistributionPowerFlowAlgorithmImpl.java | 19 +- .../test/IEEE123Feeder_Dstab_Test.java | 211 +++++++++++- .../test/TestDistributionPowerflowAlgo.java | 4 +- .../test/TestIEEETestFeederPowerFlow.java | 26 +- .../test/TestOpenDSSDataParser.java | 6 +- 13 files changed, 438 insertions(+), 191 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java index 7298991..4412287 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java @@ -226,9 +226,9 @@ private Complex3x1 calcLoad3PhEquivCurInj() { // for power flow purpose @Override public Complex3x1 calc3PhEquivCurInj() { - calcLoad3PhEquivCurInj(); - this.equivCurInj3Phase = this.load3PhEquivCurInj; + + this.equivCurInj3Phase = calcLoad3PhEquivCurInj(); for(Gen3Phase gen:this.getThreePhaseGenList()){ this.equivCurInj3Phase = this.equivCurInj3Phase.add(gen.getPowerflowEquivCurrInj()); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java index 975b401..ec7d623 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java @@ -130,7 +130,7 @@ public void initEquivYabc(Complex y1, Complex y2, Complex y0) { @Override public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { - Complex3x1 loadPQ = ph3Load; + Complex3x1 loadPQ = new Complex3x1(); if(this.code ==AclfLoadCode.NON_LOAD){ code = AclfLoadCode.CONST_P; // by default constant PQ @@ -140,6 +140,7 @@ public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { case Three_Phase_Wye: if(this.code==AclfLoadCode.CONST_P){ // default + loadPQ = ph3Load; } else if(this.code==AclfLoadCode.CONST_I){ loadPQ.a_0 = ph3Load.a_0.multiply(vabc.a_0.abs()); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java index 32e2960..3ac9ac6 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java @@ -75,6 +75,7 @@ else if(capStrAry[i].contains("kv=")){ //get the bus object + busId = this.dataParser.getBusIdPrefix()+busId; Bus3Phase bus = (Bus3Phase) this.dataParser.getDistNetwork().getBus(busId); if(bus==null){ diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java index 97a0a85..300c53e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java @@ -39,6 +39,7 @@ public class OpenDSSDataParser { + protected String busIdPrefix = ""; // Line configuration table protected Hashtable lineConfigTable = null; @@ -50,6 +51,7 @@ public class OpenDSSDataParser { protected OpenDSSCapacitorParser capParser = null; protected OpenDSSRegulatorParser regulatorParser = null; + boolean debug = false; public OpenDSSDataParser(){ @@ -83,6 +85,13 @@ public void setLineConfigTable(Hashtable lineConfigTa this.lineConfigTable = lineConfigTable; } + public void setDistNetwork( DStabNetwork3Phase distNet){ + if(distNet != null){ + this.distNet = distNet; + } + + } + public DStabNetwork3Phase getDistNetwork(){ if(this.distNet == null){ this.distNet = ThreePhaseObjectFactory.create3PhaseDStabNetwork(); @@ -205,7 +214,7 @@ else if(tempAry2[i].contains("pu=")){ // create the source bus if(sourceBusId.length()>0){ if(distNet.getBus(sourceBusId)==null) - sourceBus = ThreePhaseObjectFactory.create3PDStabBus(sourceBusId, distNet); + sourceBus = ThreePhaseObjectFactory.create3PDStabBus(this.busIdPrefix+sourceBusId, distNet); sourceBus.setGenCode(AclfGenCode.SWING); sourceBus.setBaseVoltage(basekv, UnitType.kV); @@ -700,6 +709,14 @@ public Branch3Phase getBranchByName(String branchName){ } return null; } + + public String getBusIdPrefix() { + return busIdPrefix; + } + + public void setBusIdPrefix(String busIdPrefix) { + this.busIdPrefix = busIdPrefix; + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index 46f69b3..d65ba52 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -233,7 +233,9 @@ else if(fromBusPhases.equals("3")){ else{ throw new Error("phase number must be 1, 2 or 3"); } - + + fromBusId =this.dataParser.getBusIdPrefix()+fromBusId; + toBusId =this.dataParser.getBusIdPrefix()+toBusId; if(distNet.getBus(fromBusId)==null) fromBus = ThreePhaseObjectFactory.create3PDStabBus(fromBusId, distNet); @@ -243,7 +245,7 @@ else if(fromBusPhases.equals("3")){ Branch3Phase line = ThreePhaseObjectFactory.create3PBranch(fromBusId, toBusId, "1", distNet); - line.setName(lineName); + line.setName(this.dataParser.getBusIdPrefix()+lineName); line.setBranchCode(AclfBranchCode.LINE); @@ -266,164 +268,164 @@ else if(fromBusPhases.equals("3")){ } - private boolean parseLineDataWithLineCode(String lineStr) throws InterpssException{ - boolean no_error = true; - - final String DOT = "."; - - String lineId = ""; - String fromBusId = ""; - String fromBusPhases ="1.2.3"; // by default;; - String toBusId = ""; - String toBusPhases = "1.2.3"; // by default; - String lineCodeId = ""; - String units = ""; - double lineLength = 1.0; // by default is 1.0 - int phaseNum = 3; // 3 phases by default - - String fromBusStr = ""; - String toBusStr = ""; - - - DStabNetwork3Phase distNet = this.dataParser.getDistNetwork(); - - Bus3Phase fromBus = null, toBus = null; - - - int lineIdIdx = 1, phaseIdx = 2, fromBusIdx = 3, toBusIdx = 4, lineCodeIdx = 5, lengthIdx = 6; - - if (!lineStr.contains("Phases=")){ - phaseIdx = -1; - fromBusIdx =2; - toBusIdx = 3; - lineCodeIdx = 4; - lengthIdx = 5; - - } - String[] lineStrAry = lineStr.split("\\s+"); - - if(phaseIdx>0) - phaseNum = Integer.valueOf(lineStrAry[phaseIdx].substring(7)); - - lineId = lineStrAry[lineIdIdx].substring(4); - fromBusStr = lineStrAry[fromBusIdx].substring(4); - toBusStr = lineStrAry[toBusIdx].substring(4); - lineCodeId = lineStrAry[lineCodeIdx].substring(9); - lineLength = Double.valueOf(lineStrAry[lengthIdx].substring(7)); - - for(int i =0;i0) +// phaseNum = Integer.valueOf(lineStrAry[phaseIdx].substring(7)); +// +// lineId = lineStrAry[lineIdIdx].substring(4); +// fromBusStr = lineStrAry[fromBusIdx].substring(4); +// toBusStr = lineStrAry[toBusIdx].substring(4); +// lineCodeId = lineStrAry[lineCodeIdx].substring(9); +// lineLength = Double.valueOf(lineStrAry[lengthIdx].substring(7)); +// +// for(int i =0;itoBus(cirId) as the unique branchId, here the original Id is set as the name. - xfrBranch.setName(xfrId); + xfrBranch.setName(this.dataParser.getBusIdPrefix()+xfrId); xfrBranch.setBranchCode(AclfBranchCode.XFORMER); Branch3Phase likeBranch = null; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java index a9c13be..86146a6 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java @@ -199,7 +199,7 @@ public class SinglePhaseACMotor extends DynLoadModel1Phase { private static final String OUT_SYMBOL_VT ="ACMotorVt"; private static final String OUT_SYMBOL_STATE ="ACMotorState"; private static final String OUT_SYMBOL_RemainFraction ="ACMotorRemainFraction"; - private String extended_device_Id = ""; + private Complex PQmotor; private Complex equivYpq; private Complex nortonCurInj; @@ -361,7 +361,11 @@ public boolean initStates() { return flag; } - + @Override public String getExtendedDeviceId(){ + extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); + return this.extended_device_Id; + } + /** diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java index 3287aef..d3a44a8 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java @@ -34,7 +34,7 @@ public class DistributionPowerFlowAlgorithmImpl implements DistributionPowerFlow private DistributionPFMethod pfMethod = DistributionPFMethod.Forward_Backword_Sweep; private double tol = 1.0E-6; - private int maxIteration = 20; + private int maxIteration = 30; private boolean radialNetworkOnly = true; private boolean pfFlag =false; private Hashtable busVoltTable =null; @@ -218,11 +218,25 @@ private boolean FBSPowerflow(){ for (int i=0;i=1){ mis=bus3P.get3PhaseVotlages().subtract(busVoltTable.get(bus3P.getId())).absMax(); if(mis>this.getTolerance()){ + //System.out.println("bus, mismatch = "+bus3P.getId()+","+mis); this.pfFlag = false; } } @@ -457,7 +472,7 @@ else if (upStreamBranch.isXfr()){ // power flow is converged, break the outer iteration and return if(i>0 && this.pfFlag) { - System.out.println("\n\nDistribution power flow converged, iterations = "+i+"\n"); + System.out.println("\n\nDistribution power flow converged, iterations = "+(i+1)+"\n"); calcSwingBusGenPower(); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java index 98063cc..4b57792 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java @@ -2,16 +2,26 @@ import static org.junit.Assert.assertTrue; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.List; +import java.util.Random; import java.util.logging.Level; import org.apache.commons.math3.complex.Complex; import org.interpss.IpssCorePlugin; import org.interpss.numeric.datatype.Complex3x1; import org.interpss.numeric.datatype.Unit.UnitType; +import org.interpss.util.FileUtil; import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Load1Phase; +import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.basic.Phase; import org.ipss.threePhase.data_parser.OpenDSSDataParser; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.ipss.threePhase.dynamic.algo.DynamicEventProcessor3Phase; +import org.ipss.threePhase.dynamic.model.InductionMotor3PhaseAdapter; +import org.ipss.threePhase.dynamic.model.impl.SinglePhaseACMotor; import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; import org.ipss.threePhase.util.ThreePhaseAclfOutFunc; @@ -26,7 +36,9 @@ import com.interpss.dstab.algo.DynamicSimuAlgorithm; import com.interpss.dstab.algo.DynamicSimuMethod; import com.interpss.dstab.cache.StateMonitor; +import com.interpss.dstab.cache.StateMonitor.DynDeviceType; import com.interpss.dstab.cache.StateMonitor.MonitorRecord; +import com.interpss.dstab.dynLoad.InductionMotor; import com.interpss.dstab.mach.EConstMachine; import com.interpss.dstab.mach.MachineType; @@ -170,6 +182,12 @@ public void testIEEE123BusDstabSim() throws InterpssException{ mach.setH(50000.0); mach.setXd1(0.05); + double ACMotorPercent = 50; + double IndMotorPercent = 0; + double ACPhaseUnbalance = 0; + + List acMotorIds= buildFeederDynModel(distNet, ACMotorPercent, IndMotorPercent,ACPhaseUnbalance); + DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( distNet, IpssCorePlugin.getMsgHub()); @@ -180,13 +198,17 @@ public void testIEEE123BusDstabSim() throws InterpssException{ dstabAlgo.setSimuStepSec(0.005d); dstabAlgo.setTotalSimuTimeSec(1.0); //dstabAlgo.setRefMachine(net.getMachine("Bus3-mach1")); - distNet.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("150r", distNet, SimpleFaultCode.GROUND_LG,new Complex(0,0.0),new Complex(0,0.0), 0.5,0.07), "SLG@Bus1"); + //distNet.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("150r", distNet, SimpleFaultCode.GROUND_LG,new Complex(0,0.0),new Complex(0,0.0), 0.5,0.07), "SLG@Bus1"); StateMonitor sm = new StateMonitor(); //sm.addGeneratorStdMonitor(new String[]{"Bus1-mach1","Bus2-mach1"}); sm.addBusStdMonitor(new String[]{"150","150r","300","30","21"}); sm.add3PhaseBusStdMonitor(new String[]{"150","150r","300","30","21"}); + + for(String acMotorId: acMotorIds) + sm.addDynDeviceMonitor(DynDeviceType.ACMotor, acMotorId); + // set the output handler dstabAlgo.setSimuOutputHandler(sm); dstabAlgo.setOutPutPerSteps(1); @@ -201,7 +223,7 @@ public void testIEEE123BusDstabSim() throws InterpssException{ sm.addBusPhaseVoltageMonitorRecord( busId,dstabAlgo.getSimuTime(), ((Bus3Phase)distNet.getBus(busId)).get3PhaseVotlages()); } - + double vsag = 0.4; //dstabAlgo.performSimulation(); while(dstabAlgo.getSimuTime()<=dstabAlgo.getTotalSimuTimeSec()){ @@ -212,8 +234,19 @@ public void testIEEE123BusDstabSim() throws InterpssException{ sm.addBusPhaseVoltageMonitorRecord( busId,dstabAlgo.getSimuTime(), ((Bus3Phase)distNet.getBus(busId)).get3PhaseVotlages()); } + + if(dstabAlgo.getSimuTime()>0.5 && dstabAlgo.getSimuTime()<0.5833){ + mach.setE(vsag); + } + else if (dstabAlgo.getSimuTime()>=0.6){ + mach.setE(1.0); + } } } + + + + System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); @@ -227,10 +260,180 @@ public void testIEEE123BusDstabSim() throws InterpssException{ MonitorRecord rec0 = sm.getBusVoltTable().get("21").get(0); MonitorRecord rec50 = sm.getBusVoltTable().get("21").get(50); - assertTrue(Math.abs(rec0.getValue()-rec50.getValue())<1.0E-4); - + //assertTrue(Math.abs(rec0.getValue()-rec50.getValue())<1.0E-4); + FileUtil.writeText2File("output//IEEE123//AcMotorState.csv", + sm.toCSVString(sm.getAcMotorStateTable())); + FileUtil.writeText2File("output//IEEE123////AcMotorP.csv", + sm.toCSVString(sm.getAcMotorPTable())); + FileUtil.writeText2File("output//IEEE123//AcMotorQ.csv", + sm.toCSVString(sm.getAcMotorQTable())); } + + private List buildFeederDynModel(DStabNetwork3Phase dsNet, double ACMotorPercent, double IndMotorPercent,double ACPhaseUnbalance) { + + List monList = new ArrayList<>(); + double Vstallmin = 0.40,Vstallmax = 0.5; + double Tstallmin = 2/60.0,Tstallmax = 5.0/60.0; + + double tstall = 0.033; + double vstall = 0.45; + + Hashtable tStallTable = new Hashtable<>(); + Hashtable vStallTable = new Hashtable<>(); + + int k = 0; + for(DStabBus bus: dsNet.getBusList()){ + if(bus.isLoad()){ + Bus3Phase loadBus = (Bus3Phase) bus; + + /* + Load3Phase load1 = new Load3PhaseImpl(); + load1.set3PhaseLoad(new Complex3x1(new Complex(0.3,0.05),new Complex(0.3,0.05),new Complex(0.3,0.05))); + loadBus.getThreePhaseLoadList().add(load1); + */ + + + // AC motor, 50% + if(loadBus.getSinglePhaseLoadList().size()>0.0){ + + for(Load1Phase ld1P: loadBus.getSinglePhaseLoadList()){ + switch (ld1P.getPhaseCode()){ + + case A: + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(loadBus,"1"); + ac1.setLoadPercent(ACMotorPercent-ACPhaseUnbalance); + ac1.setPhase(Phase.A); + + tstall = randDouble(Tstallmin,Tstallmax); + vstall = randDouble(Vstallmin,Vstallmax); + + ac1.setTstall(tstall); // disable ac stalling + ac1.setVstall(vstall); + loadBus.getPhaseADynLoadList().add(ac1); + + monList.add(ac1.getExtendedDeviceId()); + + tStallTable.put(ac1.getExtendedDeviceId(), tstall); + vStallTable.put(ac1.getExtendedDeviceId(), vstall); + + break; + case B: + + + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(loadBus,"2"); + ac2.setLoadPercent(ACMotorPercent); + ac2.setPhase(Phase.B); + tstall = randDouble(Tstallmin,Tstallmax); + vstall = randDouble(Vstallmin,Vstallmax); + + ac2.setTstall(tstall); // disable ac stalling + ac2.setVstall(vstall); + loadBus.getPhaseBDynLoadList().add(ac2); + monList.add(ac2.getExtendedDeviceId()); + + tStallTable.put(ac2.getExtendedDeviceId(), tstall); + vStallTable.put(ac2.getExtendedDeviceId(), vstall); + break; + + case C: + + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(loadBus,"3"); + ac3.setLoadPercent(ACMotorPercent+ACPhaseUnbalance); + ac3.setPhase(Phase.C); + tstall = randDouble(Tstallmin,Tstallmax); + vstall = randDouble(Vstallmin,Vstallmax); + + ac3.setTstall(tstall); // disable ac stalling + ac3.setVstall(vstall); + loadBus.getPhaseCDynLoadList().add(ac3); + monList.add(ac3.getExtendedDeviceId()); + + tStallTable.put(ac3.getExtendedDeviceId(), tstall); + vStallTable.put(ac3.getExtendedDeviceId(), vstall); + + break; + } + } + } + + for(Load3Phase ld3P: loadBus.getThreePhaseLoadList()){ + // 3 phase motor, 20% + if(IndMotorPercent>0.0){ + InductionMotor indMotor= DStabObjectFactory.createInductionMotor("1"); + indMotor.setDStabBus(loadBus); + + indMotor.setXm(3.0); + indMotor.setXl(0.07); + indMotor.setRa(0.032); + indMotor.setXr1(0.3); + indMotor.setRr1(0.01); + + double motorMVA = ld3P.getLoad(1.0).getReal()*IndMotorPercent/100.0/0.8; + indMotor.setMVABase(motorMVA); + indMotor.setH(0.3); + indMotor.setA(0.0); //Toreque = (a+bw+cw^2)*To; + indMotor.setB(0.0); //Toreque = (a+bw+cw^2)*To; + indMotor.setC(1.0); //Toreque = (a+bw+cw^2)*To; + InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); + indMotor3Phase.setLoadPercent(IndMotorPercent); //0.06 MW + loadBus.getThreePhaseDynLoadList().add(indMotor3Phase); + } + } + // PV generation + +// Gen3Phase gen1 = new Gen3PhaseImpl(); +// gen1.setParentBus(loadBus); +// gen1.setId("PV1"); +// gen1.setGen(new Complex(pvGen,0)); // total gen power, system mva based +// +// loadBus.getThreePhaseGenList().add(gen1); +// +// double pvMVABase = pvGen/0.8*100; +// gen1.setMvaBase(pvMVABase); // for dynamic simulation only +// gen1.setPosGenZ(new Complex(0,1.0E-1)); // assuming open-circuit +// gen1.setNegGenZ(new Complex(0,1.0E-1)); +// gen1.setZeroGenZ(new Complex(0,1.0E-1)); +// //create the PV Distributed generation model +// PVDistGen3Phase pv = new PVDistGen3Phase(gen1); +// pv.setId("1"); +// pv.setUnderVoltTripAll(0.4); +// pv.setUnderVoltTripStart(0.8); + + + k++; + } + } + + System.out.println("tstall settings:"+tStallTable.values()); + System.out.println("vstall settings:"+vStallTable.values()); + + return monList; + } + + private static int randInt(int min, int max) { + + // Usually this can be a field rather than a method variable + Random rand = new Random(); + + // nextInt is normally exclusive of the top value, + // so add 1 to make it inclusive + int randomNum = rand.nextInt((max - min) + 1) + min; + + return randomNum; + } + + private static double randDouble(double min, double max) { + + // Usually this can be a field rather than a method variable + Random rand = new Random(); + + // nextInt is normally exclusive of the top value, + // so add 1 to make it inclusive + double randomNum = rand.nextDouble()*(max - min) + min; + + return randomNum; + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestDistributionPowerflowAlgo.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestDistributionPowerflowAlgo.java index 25fc91f..cd0077c 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestDistributionPowerflowAlgo.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestDistributionPowerflowAlgo.java @@ -33,7 +33,7 @@ public class TestDistributionPowerflowAlgo { - //@Test + @Test public void testLineAndXfrGeneralizedMatrices() throws InterpssException { AclfNetwork3Phase net = createDistNetNoDG(); @@ -270,7 +270,7 @@ public void testDistBusOrdering() throws InterpssException { } - //@Test + @Test public void testDistBusPF() throws InterpssException { AclfNetwork3Phase net = createDistNetNoDG(); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java index 4243bfb..a262cee 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java @@ -30,12 +30,12 @@ public void testIEEE123BusPowerflow(){ IpssCorePlugin.setLoggerLevel(Level.INFO); OpenDSSDataParser parser = new OpenDSSDataParser(); - parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master_Modified.dss"); + parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master_Modified_v2.dss"); parser.calcVoltageBases(); double mvaBase = 1.0; - parser.convertActualValuesToPU(1.0); + parser.convertActualValuesToPU(mvaBase); DStabNetwork3Phase distNet = parser.getDistNetwork(); @@ -53,8 +53,8 @@ public void testIEEE123BusPowerflow(){ DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(distNet); //distPFAlgo.orderDistributionBuses(true); distPFAlgo.setInitBusVoltageEnabled(true); - //distPFAlgo.setMaxIteration(1); - distPFAlgo.setTolerance(5.0E-3); // tolearnce = 5 kva + //distPFAlgo.setMaxIteration(15); + distPFAlgo.setTolerance(1.0E-4); // tolearnce = 5 kva assertTrue(distPFAlgo.powerflow()); /* @@ -74,9 +74,9 @@ public void testIEEE123BusPowerflow(){ Bus3Phase bus150r = (Bus3Phase) distNet.getBus("150r"); Complex3x1 vabc_150r = bus150r.get3PhaseVotlages(); /* - * 150r,1.0444156221522982,-3.212270295862824E-4,1.043045526755821,4.1894310060612145,1.0433712760113691,2.0939131182587714,1.04442 + j-0.00034 -0.52094 + j-0.90364 -0.52125 + j0.90384 - */ - assertTrue(vabc_150r.subtract(new Complex3x1(new Complex(1.04442,-0.00034),new Complex(-0.52094,-0.90364),new Complex(-0.52125,0.90384))).absMax()<1.0E-4); + * 150r,1.0436958711168833,-2.3401129732907437E-4,1.043751961975151,4.188644578364089,1.0437277807878227,2.094204336986655,1.0437 + j-0.00024 -0.52201 + j-0.90384 -0.52169 + j0.90399 + */ + assertTrue(vabc_150r.subtract(new Complex3x1(new Complex(1.0437, -0.00024),new Complex(-0.52201,-0.90384),new Complex(-0.52169, 0.90399))).absMax()<1.0E-4); /// Compared with IEEE TEST FEEDER RESULTS //RG1 | 1.0437 at .00 | 1.0438 at -120.00 | 1.0438 at 120.00 | @@ -93,9 +93,9 @@ public void testIEEE123BusPowerflow(){ /// Compared with IEEE TEST FEEDER RESULTS // 21 | .9983 at -2.34 | 1.0320 at -121.22 | 1.0111 at 118.81 | .441 - assertTrue(Math.abs(vabc_21.a_0.abs()-0.9983)<1.0E-3); //0.9983 is IEEE TEST FEEDER RESULT - assertTrue(Math.abs(vabc_21.b_1.abs()-1.0320)<1.0E-3); - assertTrue(Math.abs(vabc_21.c_2.abs()-1.0111)<1.0E-3); + assertTrue(Math.abs(vabc_21.a_0.abs()-0.9983)<5.0E-3); //0.9983 is IEEE TEST FEEDER RESULT + assertTrue(Math.abs(vabc_21.b_1.abs()-1.0320)<6.0E-3); + assertTrue(Math.abs(vabc_21.c_2.abs()-1.0111)<5.0E-3); Bus3Phase bus30 = (Bus3Phase) distNet.getBus("30"); Complex3x1 vabc_30 = bus30.get3PhaseVotlages(); @@ -106,8 +106,8 @@ public void testIEEE123BusPowerflow(){ /// Compared with IEEE TEST FEEDER RESULTS // 30 | .9969 at -2.50 | 1.0331 at -121.18 | 1.0078 at 118.77 | .701 - assertTrue(Math.abs(vabc_30.a_0.abs()-0.9969)<1.0E-3); - assertTrue(Math.abs(vabc_30.b_1.abs()-1.0331)<1.0E-3); - assertTrue(Math.abs(vabc_30.c_2.abs()-1.0078)<1.0E-3); + assertTrue(Math.abs(vabc_30.a_0.abs()-0.9969)<5.0E-3); + assertTrue(Math.abs(vabc_30.b_1.abs()-1.0331)<6.0E-3); + assertTrue(Math.abs(vabc_30.c_2.abs()-1.0078)<5.0E-3); } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java index aabbcc4..be87042 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -31,7 +31,7 @@ public class TestOpenDSSDataParser { - //@Test + @Test public void test_LineCodeParser(){ OpenDSSDataParser parser = new OpenDSSDataParser(); @@ -114,7 +114,7 @@ public void test_LineCodeParser(){ } - //@Test + @Test public void testDataParser(){ IpssCorePlugin.init(); @@ -270,7 +270,7 @@ public void testDataParser(){ } - //@Test + @Test public void testCalcBaseVoltage(){ IpssCorePlugin.init(); From f5ff8476414e0beec8518be5f94f7507064d6fa2 Mon Sep 17 00:00:00 2001 From: thuang Date: Thu, 11 May 2017 18:03:57 -0700 Subject: [PATCH 25/36] update IEEE test cases --- .../data_parser/OpenDSSLineParser.java | 6 +- .../test/IEEE123Feeder_Dstab_Test.java | 13 ++- .../test/IEEE_13BusFeeder_Test.java | 8 +- .../test/TestIEEETestFeederPowerFlow.java | 95 ++++++++++++++++++- .../threePhase/test/threePhaseTestSuite.java | 2 + 5 files changed, 105 insertions(+), 19 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java index d65ba52..b223383 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java @@ -104,9 +104,9 @@ else if(lineStrAry[i].contains("c0=")){ } - if(lineName.equals("l4")){ - System.out.println("processing line :"+lineName); - } +// if(lineName.equals("l4")){ +// System.out.println("processing line :"+lineName); +// } //busId is the substring before the first DOT //phases info is defined in the substring after the first DOT diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java index 4b57792..a04c7a6 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java @@ -150,10 +150,7 @@ public void testIEEE123BusDstabSim() throws InterpssException{ DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(distNet); - //distPFAlgo.orderDistributionBuses(true); - //distPFAlgo.setInitBusVoltageEnabled(true); - //distPFAlgo.setMaxIteration(1); - distPFAlgo.setTolerance(5.0E-3); // tolearnce = max voltage difference of two steps + assertTrue(distPFAlgo.powerflow()); // output three phase total load @@ -258,9 +255,11 @@ else if (dstabAlgo.getSimuTime()>=0.6){ assertTrue(Math.abs(rec1.getValue()-rec20.getValue())<1.0E-4); - MonitorRecord rec0 = sm.getBusVoltTable().get("21").get(0); - MonitorRecord rec50 = sm.getBusVoltTable().get("21").get(50); - //assertTrue(Math.abs(rec0.getValue()-rec50.getValue())<1.0E-4); + MonitorRecord rec0_21 = sm.getBusVoltTable().get("21").get(0); + MonitorRecord rec1_21 = sm.getBusVoltTable().get("21").get(50); + MonitorRecord rec50_21 = sm.getBusVoltTable().get("21").get(50); + assertTrue(Math.abs(rec0_21.getValue()-rec1_21.getValue())<1.0E-2); + assertTrue(Math.abs(rec1_21.getValue()-rec50_21.getValue())<1.0E-4); FileUtil.writeText2File("output//IEEE123//AcMotorState.csv", sm.toCSVString(sm.getAcMotorStateTable())); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java index 568944f..24bbd02 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java @@ -45,7 +45,7 @@ public class IEEE_13BusFeeder_Test { private final double ft2mile = 1.0/5280.0; - //@Test + @Test public void test_ieee13feeder_powerflow() throws InterpssException{ IpssCorePlugin.init(); @@ -132,9 +132,9 @@ public void test_ieee13feeder_dstab() throws InterpssException{ assertTrue(Math.abs(rec1.getValue()-rec20.getValue())<1.0E-4); -// MonitorRecord rec0 = sm.getBusVoltTable().get("Bus652").get(0); -// MonitorRecord rec50 = sm.getBusVoltTable().get("Bus652").get(50); -// assertTrue(Math.abs(rec0.getValue()-rec50.getValue())<1.0E-4); + MonitorRecord rec0 = sm.getBusVoltTable().get("Bus652").get(0); + MonitorRecord rec50 = sm.getBusVoltTable().get("Bus652").get(50); + assertTrue(Math.abs(rec0.getValue()-rec50.getValue())<1.0E-4); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java index a262cee..ca996f9 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java @@ -39,6 +39,91 @@ public void testIEEE123BusPowerflow(){ DStabNetwork3Phase distNet = parser.getDistNetwork(); +// String netStrFileName = "testData\\feeder\\IEEE123\\ieee123_modified_netString.dat"; +// try { +// Files.write(Paths.get(netStrFileName), parser.getDistNetwork().net2String().getBytes()); +// } catch (IOException e) { +// +// e.printStackTrace(); +// } + + // set the turn ratios of regulators + parser.getBranchByName("reg1a").setToTurnRatio(1.0438); + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(distNet); + + assertTrue(distPFAlgo.powerflow()); + + /* + * Vabc of bus -Bus1,1.0100 + j0.0000 -0.5050 + j-0.87469 -0.5050 + j0.87469 + Vabc of bus -Bus2,0.99636 + j-0.05941 -0.54963 + j-0.83317 -0.44673 + j0.89258 + Vabc of bus -Bus3,0.99075 + j-0.07914 -0.56392 + j-0.81844 -0.42683 + j0.89759 + Vabc of bus -Bus4,0.98834 + j-0.09907 -0.57997 + j-0.80639 -0.40837 + j0.90546 + */ +// for(AclfBus bus:distNet.getBusList()){ +// Bus3Phase bus3P = (Bus3Phase) bus; +// System.out.println("Vabc of bus -"+bus3P.getId()+","+bus3P.get3PhaseVotlages().toString()); +// +// } + + System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(distNet)); + + Bus3Phase bus150r = (Bus3Phase) distNet.getBus("150r"); + Complex3x1 vabc_150r = bus150r.get3PhaseVotlages(); + /* + * 150r,1.0436958711168833,-2.3401129732907437E-4,1.043751961975151,4.188644578364089,1.0437277807878227,2.094204336986655,1.0437 + j-0.00024 -0.52201 + j-0.90384 -0.52169 + j0.90399 + */ + assertTrue(vabc_150r.subtract(new Complex3x1(new Complex(1.0437, -0.00024),new Complex(-0.52201,-0.90384),new Complex(-0.52169, 0.90399))).absMax()<1.0E-4); + + /// Compared with IEEE TEST FEEDER RESULTS + //RG1 | 1.0437 at .00 | 1.0438 at -120.00 | 1.0438 at 120.00 | + assertTrue(Math.abs(vabc_150r.a_0.abs()-1.0437)<1.0E-3); + assertTrue(Math.abs(vabc_150r.b_1.abs()-1.0438)<1.0E-3); + assertTrue(Math.abs(vabc_150r.c_2.abs()-1.0438)<1.0E-3); + + Bus3Phase bus21 = (Bus3Phase) distNet.getBus("21"); + Complex3x1 vabc_21 = bus21.get3PhaseVotlages(); + /* + * 21,0.9976629334520096,-0.039839533149384404,1.0320577255690082,4.166775074256249,1.0114596191804741,2.0742543870511136,0.99687 + j-0.03974 -0.53558 + j-0.88221 -0.48799 + j0.88596 + */ + + + /// Compared with IEEE TEST FEEDER RESULTS + // 21 | .9983 at -2.34 | 1.0320 at -121.22 | 1.0111 at 118.81 | .441 + assertTrue(Math.abs(vabc_21.a_0.abs()-0.9983)<5.0E-3); //0.9983 is IEEE TEST FEEDER RESULT + assertTrue(Math.abs(vabc_21.b_1.abs()-1.0320)<6.0E-3); + assertTrue(Math.abs(vabc_21.c_2.abs()-1.0111)<5.0E-3); + + Bus3Phase bus30 = (Bus3Phase) distNet.getBus("30"); + Complex3x1 vabc_30 = bus30.get3PhaseVotlages(); + + /* + *30,0.9963094030535219,-0.04263498620437,1.0332257087662153,4.167548363697641,1.008218641157312,2.073577445296613,0.9954 + j-0.04246 -0.5355 + j-0.88362 -0.48582 + j0.88345 + */ + + /// Compared with IEEE TEST FEEDER RESULTS + // 30 | .9969 at -2.50 | 1.0331 at -121.18 | 1.0078 at 118.77 | .701 + assertTrue(Math.abs(vabc_30.a_0.abs()-0.9969)<5.0E-3); + assertTrue(Math.abs(vabc_30.b_1.abs()-1.0331)<6.0E-3); + assertTrue(Math.abs(vabc_30.c_2.abs()-1.0078)<5.0E-3); + } + + @Test + public void testIEEE123BusPowerflow_2(){ + + IpssCorePlugin.init(); + IpssCorePlugin.setLoggerLevel(Level.INFO); + + OpenDSSDataParser parser = new OpenDSSDataParser(); + parser.parseFeederData("testData\\feeder\\IEEE123","IEEE123Master_Modified.dss"); + + parser.calcVoltageBases(); + + double mvaBase = 1.0; + parser.convertActualValuesToPU(mvaBase); + + DStabNetwork3Phase distNet = parser.getDistNetwork(); + // String netStrFileName = "testData\\feeder\\IEEE123\\ieee123_modified_netString.dat"; // try { // Files.write(Paths.get(netStrFileName), parser.getDistNetwork().net2String().getBytes()); @@ -63,11 +148,11 @@ public void testIEEE123BusPowerflow(){ Vabc of bus -Bus3,0.99075 + j-0.07914 -0.56392 + j-0.81844 -0.42683 + j0.89759 Vabc of bus -Bus4,0.98834 + j-0.09907 -0.57997 + j-0.80639 -0.40837 + j0.90546 */ - for(AclfBus bus:distNet.getBusList()){ - Bus3Phase bus3P = (Bus3Phase) bus; - System.out.println("Vabc of bus -"+bus3P.getId()+","+bus3P.get3PhaseVotlages().toString()); - - } +// for(AclfBus bus:distNet.getBusList()){ +// Bus3Phase bus3P = (Bus3Phase) bus; +// System.out.println("Vabc of bus -"+bus3P.getId()+","+bus3P.get3PhaseVotlages().toString()); +// +// } System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(distNet)); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java index d2588c9..02986c8 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/threePhaseTestSuite.java @@ -31,10 +31,12 @@ IEEE9_3Phase_1PAC_test.class, TestPVDistGen3Phase.class, Test3PhaseInductionMotor.class, + //dynamic simulation Test6BusFeeder.class, + IEEE123Feeder_Dstab_Test.class, }) public class threePhaseTestSuite { From 05fdd47d525d0e4ba7357d2ae8f5a899c4585c1e Mon Sep 17 00:00:00 2001 From: thuang Date: Tue, 6 Jun 2017 16:41:49 -0700 Subject: [PATCH 26/36] data adapter refactoring --- .../src/org/ipss/threePhase/basic/LineConfiguration.java | 8 ++++++++ .../org/ipss/threePhase/dataParser/BaseDataParser.java | 5 +++++ .../dataParser/gridlabd/GridLabDDataParser.java | 5 +++++ .../gridlabd/GridLabDLineConfigurationParser.java | 5 +++++ .../dataParser/gridlabd/GridLabDNodeParser.java | 5 +++++ .../opendss}/OpenDSSCapacitorParser.java | 2 +- .../opendss}/OpenDSSDataParser.java | 2 +- .../opendss}/OpenDSSLineCodeParser.java | 2 +- .../opendss}/OpenDSSLineParser.java | 2 +- .../opendss}/OpenDSSLoadParser.java | 2 +- .../opendss}/OpenDSSRegulatorParser.java | 2 +- .../opendss}/OpenDSSTransformerParser.java | 2 +- .../threePhase/dynamic/impl/DStabNetwork3phaseImpl.java | 2 +- .../dynamic/model/InductionMotor3PhaseAdapter.java | 6 ++++++ .../ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java | 2 +- .../ipss/threePhase/test/TestIEEETestFeederPowerFlow.java | 2 +- .../org/ipss/threePhase/test/TestOpenDSSDataParser.java | 2 +- 17 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/BaseDataParser.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDDataParser.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDLineConfigurationParser.java create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDNodeParser.java rename ipss.plugin.3phase/src/org/ipss/threePhase/{data_parser => dataParser/opendss}/OpenDSSCapacitorParser.java (95%) rename ipss.plugin.3phase/src/org/ipss/threePhase/{data_parser => dataParser/opendss}/OpenDSSDataParser.java (99%) rename ipss.plugin.3phase/src/org/ipss/threePhase/{data_parser => dataParser/opendss}/OpenDSSLineCodeParser.java (99%) rename ipss.plugin.3phase/src/org/ipss/threePhase/{data_parser => dataParser/opendss}/OpenDSSLineParser.java (99%) rename ipss.plugin.3phase/src/org/ipss/threePhase/{data_parser => dataParser/opendss}/OpenDSSLoadParser.java (96%) rename ipss.plugin.3phase/src/org/ipss/threePhase/{data_parser => dataParser/opendss}/OpenDSSRegulatorParser.java (73%) rename ipss.plugin.3phase/src/org/ipss/threePhase/{data_parser => dataParser/opendss}/OpenDSSTransformerParser.java (96%) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java index e2d0b39..32367e4 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/LineConfiguration.java @@ -5,6 +5,8 @@ public class LineConfiguration { enum InputType { Physical, ZYMatrix, LineCode} + enum LengthUnit {Feet, Mile, Meter, kM} + private String id = ""; private int nphases = 1; @@ -17,6 +19,8 @@ enum InputType { Physical, ZYMatrix, LineCode} private Complex3x3 shuntYMtx = null; + //physical parameters + public String getId() { return id; @@ -67,6 +71,10 @@ public void setShuntY3x3Matrix(Complex3x3 shuntYMtx) { } + public boolean calculateZYMatrixWithPhyiscalConfiguration(){ + return true; + } + public String toString(){ StringBuffer sb = new StringBuffer(); sb.append("Line Configuration:\n"); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/BaseDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/BaseDataParser.java new file mode 100644 index 0000000..0331318 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/BaseDataParser.java @@ -0,0 +1,5 @@ +package org.ipss.threePhase.dataParser; + +public class BaseDataParser { + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDDataParser.java new file mode 100644 index 0000000..cf70e46 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDDataParser.java @@ -0,0 +1,5 @@ +package org.ipss.threePhase.dataParser.gridlabd; + +public class GridLabDDataParser { + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDLineConfigurationParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDLineConfigurationParser.java new file mode 100644 index 0000000..fc98342 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDLineConfigurationParser.java @@ -0,0 +1,5 @@ +package org.ipss.threePhase.dataParser.gridlabd; + +public class GridLabDLineConfigurationParser { + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDNodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDNodeParser.java new file mode 100644 index 0000000..1128664 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/gridlabd/GridLabDNodeParser.java @@ -0,0 +1,5 @@ +package org.ipss.threePhase.dataParser.gridlabd; + +public class GridLabDNodeParser { + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSCapacitorParser.java similarity index 95% rename from ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java rename to ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSCapacitorParser.java index 3ac9ac6..9e70de0 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSCapacitorParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSCapacitorParser.java @@ -1,4 +1,4 @@ -package org.ipss.threePhase.data_parser; +package org.ipss.threePhase.dataParser.opendss; import org.apache.commons.math3.complex.Complex; import org.ieee.odm.common.ODMLogger; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSDataParser.java similarity index 99% rename from ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java rename to ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSDataParser.java index 300c53e..248b375 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSDataParser.java @@ -1,4 +1,4 @@ -package org.ipss.threePhase.data_parser; +package org.ipss.threePhase.dataParser.opendss; import java.io.BufferedReader; import java.io.File; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSLineCodeParser.java similarity index 99% rename from ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java rename to ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSLineCodeParser.java index 83048a5..7407580 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineCodeParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSLineCodeParser.java @@ -1,4 +1,4 @@ -package org.ipss.threePhase.data_parser; +package org.ipss.threePhase.dataParser.opendss; import java.io.BufferedReader; import java.io.File; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSLineParser.java similarity index 99% rename from ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java rename to ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSLineParser.java index b223383..d2c5b30 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLineParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSLineParser.java @@ -1,4 +1,4 @@ -package org.ipss.threePhase.data_parser; +package org.ipss.threePhase.dataParser.opendss; import org.apache.commons.math3.complex.Complex; import org.ieee.odm.model.IODMModelParser; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSLoadParser.java similarity index 96% rename from ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java rename to ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSLoadParser.java index c83de2f..4166db3 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSLoadParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSLoadParser.java @@ -1,4 +1,4 @@ -package org.ipss.threePhase.data_parser; +package org.ipss.threePhase.dataParser.opendss; import org.apache.commons.math3.complex.Complex; import org.interpss.numeric.datatype.Complex3x1; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSRegulatorParser.java similarity index 73% rename from ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java rename to ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSRegulatorParser.java index 4cf8aa8..fc3d8db 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSRegulatorParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSRegulatorParser.java @@ -1,4 +1,4 @@ -package org.ipss.threePhase.data_parser; +package org.ipss.threePhase.dataParser.opendss; public class OpenDSSRegulatorParser { diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSTransformerParser.java similarity index 96% rename from ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java rename to ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSTransformerParser.java index 013fbb7..e860d68 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/data_parser/OpenDSSTransformerParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dataParser/opendss/OpenDSSTransformerParser.java @@ -1,4 +1,4 @@ -package org.ipss.threePhase.data_parser; +package org.ipss.threePhase.dataParser.opendss; import static com.interpss.core.funcImpl.AcscFunction.acscXfrAptr; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java index 2278ad7..f71671f 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java @@ -510,7 +510,7 @@ public boolean solveNetEqn() { //if(bus.getId().equals("Bus12")) //System.out.println("Bus, Vabc:"+b.getId()+","+vabc.toString()); - if(!vabc.a_0.isNaN()){ + if(!vabc.a_0.isNaN()&& !vabc.b_1.isNaN() && !vabc.c_2.isNaN()){ //if(bus instanceof Bus3Phase){ Bus3Phase bus3P = (Bus3Phase) bus; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java index 912dde4..c98edb2 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java @@ -140,6 +140,12 @@ public Object getOutputObject() { return getISource3Phase() ; } + + + @Override + public boolean updateAttributes(boolean netChange) { + return this.getInductionMotor().updateAttributes(netChange); + } public void setInductionMotor(InductionMotor indMotor) { diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java index a04c7a6..4d2b576 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java @@ -17,7 +17,7 @@ import org.ipss.threePhase.basic.Load1Phase; import org.ipss.threePhase.basic.Load3Phase; import org.ipss.threePhase.basic.Phase; -import org.ipss.threePhase.data_parser.OpenDSSDataParser; +import org.ipss.threePhase.dataParser.opendss.OpenDSSDataParser; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.ipss.threePhase.dynamic.algo.DynamicEventProcessor3Phase; import org.ipss.threePhase.dynamic.model.InductionMotor3PhaseAdapter; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java index ca996f9..af2f58c 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestIEEETestFeederPowerFlow.java @@ -11,7 +11,7 @@ import org.interpss.IpssCorePlugin; import org.interpss.numeric.datatype.Complex3x1; import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.data_parser.OpenDSSDataParser; +import org.ipss.threePhase.dataParser.opendss.OpenDSSDataParser; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java index be87042..5a2f2e1 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestOpenDSSDataParser.java @@ -18,7 +18,7 @@ import org.ipss.threePhase.basic.Load1Phase; import org.ipss.threePhase.basic.Load3Phase; import org.ipss.threePhase.basic.LoadConnectionType; -import org.ipss.threePhase.data_parser.OpenDSSDataParser; +import org.ipss.threePhase.dataParser.opendss.OpenDSSDataParser; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.junit.Test; From f409c65e8fc9e804d8f92e229ca40a079314c3f8 Mon Sep 17 00:00:00 2001 From: thuang Date: Tue, 6 Jun 2017 16:42:29 -0700 Subject: [PATCH 27/36] add a new commercial test feeder --- .../test/Test_GC_12_47_1_Feeder.java | 414 ++ .../GC_12_47_1/GC-12.47-1.glm | 761 +++ .../GC_12_47_1/GC-12.47-1_impedance_dump.xml | 2297 ++++++++ .../GC_12_47_1/GC_1247_1.xml | 5164 +++++++++++++++++ 4 files changed, 8636 insertions(+) create mode 100644 ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java create mode 100644 ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC-12.47-1.glm create mode 100644 ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC-12.47-1_impedance_dump.xml create mode 100644 ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC_1247_1.xml diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java new file mode 100644 index 0000000..b9b4a94 --- /dev/null +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java @@ -0,0 +1,414 @@ +package org.ipss.threePhase.test; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.IpssCorePlugin; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Complex3x3; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.ipss.threePhase.basic.Branch3Phase; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.basic.impl.Load3PhaseImpl; +import org.ipss.threePhase.dataParser.opendss.OpenDSSDataParser; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; +import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; +import org.ipss.threePhase.util.ThreePhaseObjectFactory; +import org.junit.Test; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import com.interpss.DStabObjectFactory; +import com.interpss.common.exp.InterpssException; +import com.interpss.core.aclf.AclfBranchCode; +import com.interpss.core.aclf.AclfBus; +import com.interpss.core.aclf.AclfGenCode; +import com.interpss.core.aclf.AclfLoadCode; +import com.interpss.core.net.NetworkType; +import com.interpss.dstab.DStabGen; +import com.interpss.dstab.mach.EConstMachine; +import com.interpss.dstab.mach.MachineType; + +public class Test_GC_12_47_1_Feeder { + @Test + public void testPowerflow(){ + + IpssCorePlugin.init(); + DStabNetwork3Phase net = null; + try { + net = createTestFeeder(12470,480,28,3,"",1.0); + } catch (InterpssException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + System.out.println(net.net2String()); + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); + //distPFAlgo.orderDistributionBuses(true); + + assertTrue(distPFAlgo.powerflow()); + + /* + * Vabc of bus -Bus1,1.0100 + j0.0000 -0.5050 + j-0.87469 -0.5050 + j0.87469 + Vabc of bus -Bus2,0.99636 + j-0.05941 -0.54963 + j-0.83317 -0.44673 + j0.89258 + Vabc of bus -Bus3,0.99075 + j-0.07914 -0.56392 + j-0.81844 -0.42683 + j0.89759 + Vabc of bus -Bus4,0.98834 + j-0.09907 -0.57997 + j-0.80639 -0.40837 + j0.90546 + */ + for(AclfBus bus:net.getBusList()){ + Bus3Phase bus3P = (Bus3Phase) bus; + System.out.println("Vabc of bus -"+bus3P.getId()+","+bus3P.get3PhaseVotlages().toString()); + } + + System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); + } + + private DStabNetwork3Phase createTestFeeder(double primaryVolt, double secondaryVolt, int busNum, int loadNum, String feederPrefix, double mvaBase) throws InterpssException{ + DStabNetwork3Phase net = ThreePhaseObjectFactory.create3PhaseDStabNetwork(); + net.setNetworkType(NetworkType.DISTRIBUTION); + net.setBaseKva(mvaBase*1000.0); + + String nodePrefix = "node:GC-12-47-1_"; + Hashtable lineZTable = new Hashtable<>(); + + //read the branch impedance data + try { + File inputFile = new File("testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC-12.47-1_impedance_dump.xml"); + DocumentBuilderFactory dbFactory + = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + Document doc = dBuilder.parse(inputFile); + doc.getDocumentElement().normalize(); + System.out.println("Root element :" + + doc.getDocumentElement().getNodeName()); + NodeList nList = doc.getElementsByTagName("underground_line"); + System.out.println("----------------------------"); + + String from_node="",to_node=""; + + for (int temp = 0; temp < nList.getLength(); temp++) { + Node nNode = nList.item(temp); + System.out.println("\nCurrent Element :" + nNode.getNodeName()); + if (nNode.getNodeType() == Node.ELEMENT_NODE) { + Element eElement = (Element) nNode; + from_node = eElement.getElementsByTagName("from_node").item(0).getTextContent(); + to_node = eElement.getElementsByTagName("to_node").item(0).getTextContent(); + + System.out.println("from node : " + from_node); + System.out.println("to node : " + to_node); + System.out.println("b_matrix : "); + + NodeList bMatrixList = eElement.getElementsByTagName("b_matrix").item(0).getChildNodes(); + + Complex[][] bMatrixAry = new Complex[3][3]; + int m = 0; + int n = 0; + for (int i = 0; i fuseList = Arrays.asList("node_11:node_12","node_15:node_16","node_16:node_17") ; + List switchList = Arrays.asList("node_10:node_25","node_22:node_23","node_13:node_14","node_18:node_19","node_20:node_21") ; + + + for(int i =1;i<=busNum;i++){ + Bus3Phase bus = ThreePhaseObjectFactory.create3PDStabBus("node_"+i, net); + bus.setAttributes("feeder bus "+i, ""); + bus.setBaseVoltage(primaryVolt); + // set the bus to a non-generator bus + bus.setGenCode(AclfGenCode.GEN_PQ); + // set the bus to a constant power load bus + bus.setLoadCode(AclfLoadCode.CONST_P); + + + //capacitor + if(i ==21){ + Load3Phase Shuntload = new Load3PhaseImpl(); + Complex3x1 shuntY = new Complex3x1(new Complex(0,-600),new Complex(0.0,-600),new Complex(0.0,-600)); + Shuntload.set3PhaseLoad(shuntY); + bus.getThreePhaseLoadList().add(Shuntload); + } + + // source bus + if(i ==28){ + bus.setGenCode(AclfGenCode.SWING); + bus.setVoltage(1.0, 0.0); + +// DStabGen constantGen = DStabObjectFactory.createDStabGen(); +// constantGen.setId("Source"); +// constantGen.setMvaBase(100); +// constantGen.setPosGenZ(new Complex(0.0,0.05)); +// constantGen.setNegGenZ(new Complex(0.0,0.05)); +// constantGen.setZeroGenZ(new Complex(0.0,0.05)); +// bus1.getContributeGenList().add(constantGen); +// +// +// EConstMachine mach = (EConstMachine)DStabObjectFactory. +// createMachine("MachId", "MachName", MachineType.ECONSTANT, net, "Bus1", "Source"); + // +// mach.setRating(100, UnitType.mVA, net.getBaseKva()); +// mach.setRatedVoltage(baseVolt); +// mach.setH(50000.0); +// mach.setXd1(0.05); + } + + } + + + for(int i =1;i<=loadNum;i++){ + Bus3Phase bus = ThreePhaseObjectFactory.create3PDStabBus("meter_"+i, net); + bus.setAttributes("load bus "+i, ""); + bus.setBaseVoltage(secondaryVolt); + // set the bus to a non-generator bus + bus.setGenCode(AclfGenCode.GEN_PQ); + // set the bus to a constant power load bus + bus.setLoadCode(AclfLoadCode.CONST_P); + + /* + * object load:36 { + name GC-12-47-1_load_1; + parent GC-12-47-1_meter_1; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + constant_power_A 585277.7504+357997.618j; + constant_power_B 596917.157+361239.5414j; + constant_power_C 592476.6189+358995.6939j; + nominal_voltage 480; + load_class I; + } + + object load:37 { + name GC-12-47-1_load_2; + parent GC-12-47-1_meter_2; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + constant_power_A 585277.7504+357997.618j; + constant_power_B 596917.157+361239.5414j; + constant_power_C 592476.6189+358995.6939j; + nominal_voltage 480; + load_class I; + } + + object load:38 { + name GC-12-47-1_load_3; + parent GC-12-47-1_meter_3; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + constant_power_A 585277.7504+357997.618j; + constant_power_B 596917.157+361239.5414j; + constant_power_C 592476.6189+358995.6939j; + nominal_voltage 480; + load_class I; + } + */ + + Load3Phase load1 = new Load3PhaseImpl(); + Complex3x1 load3Phase = new Complex3x1(new Complex(585277.7504,357997.618),new Complex(596917.157,361239.5414),new Complex(592476.6189,358995.6939)).multiply(0.001); + load1.set3PhaseLoad(load3Phase); + bus.getThreePhaseLoadList().add(load1); + + + + } + + // the regulator bus + Bus3Phase bus = ThreePhaseObjectFactory.create3PDStabBus("meter_"+(loadNum+1), net); + bus.setAttributes("meter bus "+1, ""); + bus.setBaseVoltage(primaryVolt); + // set the bus to a non-generator bus + bus.setGenCode(AclfGenCode.NON_GEN); + // set the bus to a constant power load bus + bus.setLoadCode(AclfLoadCode.NON_LOAD); + + + + + for(int i =0;i3000.000000 + 0.000030 + 0.000170 + */ + + Complex zpercent = new Complex(0.000030,0.000170); // unit + double powerRating = 3000.0; // kva + double zbase = primaryVolt*primaryVolt/(powerRating*1000); + Complex z = zpercent.multiply(zbase); + xfr.setZ(z); + xfr.setXfrRatedKVA(3000.0); + + + } + + } + + // use the OpenDSSDataParser to convert the system parameter to p.u. + OpenDSSDataParser parser = new OpenDSSDataParser(); + parser.setDistNetwork(net); + parser.convertActualValuesToPU(mvaBase); + + return net; + + } + +} diff --git a/ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC-12.47-1.glm b/ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC-12.47-1.glm new file mode 100644 index 0000000..a281553 --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC-12.47-1.glm @@ -0,0 +1,761 @@ +// 12.47 kV feeder +//********************************************* +clock{ + timezone EST+8EDT; + timestamp '2000-01-01 0:00:00'; +} + +#set profiler=1 +//********************************************* +// modules +module tape; +module powerflow{ + solver_method NR; + default_maximum_voltage_error 1e-6; +}; + +//********************************************* +object regulator:74 { + name GC-12-47-1_reg_1; + from GC-12-47-1_node_28; + to GC-12-47-1_meter_4; + phases ABCN; + configuration feeder_reg_cfg; +} + +object regulator_configuration:75 { + name feeder_reg_cfg; + Control OUTPUT_VOLTAGE; + band_center 7500.0; + band_width 120; + connect_type WYE_WYE; + time_delay 30; + raise_taps 16; + lower_taps 16; + regulation 0.10; + tap_pos_A 0; + tap_pos_B 0; + tap_pos_C 0; +} + +object capacitor:72 { + name GC-12-47-1_cap_1; + phases ABCN; + pt_phase A; + parent GC-12-47-1_node_21; + phases_connected ABC; + control VOLT; + voltage_set_high 7300; + voltage_set_low 7200; + capacitor_A 0.6 MVAr; + capacitor_B 0.6 MVAr; + capacitor_C 0.6 MVAr; + control_level INDIVIDUAL; + time_delay 30.0; + dwell_time 30.0; + cap_nominal_voltage 7200; + nominal_voltage 7200; +} + +object fuse:64 { + name GC-12-47-1_fuse_1; + phases ABCN; + from GC-12-47-1_node_11; + to GC-12-47-1_node_12; + current_limit 50000;// 750; + status CLOSED; +} + +object fuse:65 { + name GC-12-47-1_fuse_2; + phases ABCN; + from GC-12-47-1_node_16; + to GC-12-47-1_node_15; + current_limit 50000;// 750; + status CLOSED; +} + +object fuse:66 { + name GC-12-47-1_fuse_3; + phases ABCN; + from GC-12-47-1_node_16; + to GC-12-47-1_node_17; + current_limit 50000;// 750; + status CLOSED; +} + +object line_configuration:6 { + conductor_A underground_line_conductor:2; + conductor_B underground_line_conductor:2; + conductor_C underground_line_conductor:2; + conductor_N underground_line_conductor:2; + spacing line_spacing:5; +} + +object line_configuration:7 { + conductor_A underground_line_conductor:3; + conductor_B underground_line_conductor:3; + conductor_C underground_line_conductor:3; + conductor_N underground_line_conductor:3; + spacing line_spacing:5; +} + +object line_configuration:8 { + conductor_A underground_line_conductor:4; + conductor_B underground_line_conductor:4; + conductor_C underground_line_conductor:4; + conductor_N underground_line_conductor:4; + spacing line_spacing:5; +} + +object line_spacing:5 { + distance_AB 3.0 in; + distance_BC 3.0 in; + distance_AC 3.0 in; + distance_AN 2.0 in; + distance_BN 2.0 in; + distance_CN 2.0 in; +} + +object load:36 { + name GC-12-47-1_load_1; + parent GC-12-47-1_meter_1; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + constant_power_A 585277.7504+357997.618j; + constant_power_B 596917.157+361239.5414j; + constant_power_C 592476.6189+358995.6939j; + nominal_voltage 480; + load_class I; +} + +object load:37 { + name GC-12-47-1_load_2; + parent GC-12-47-1_meter_2; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + constant_power_A 585277.7504+357997.618j; + constant_power_B 596917.157+361239.5414j; + constant_power_C 592476.6189+358995.6939j; + nominal_voltage 480; + load_class I; +} + +object load:38 { + name GC-12-47-1_load_3; + parent GC-12-47-1_meter_3; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + constant_power_A 585277.7504+357997.618j; + constant_power_B 596917.157+361239.5414j; + constant_power_C 592476.6189+358995.6939j; + nominal_voltage 480; + load_class I; +} + +object meter:39 { + name GC-12-47-1_meter_1; + phases ABCN; + nominal_voltage 480; +} + +object meter:40 { + name GC-12-47-1_meter_2; + phases ABCN; + nominal_voltage 480; +} + +object meter:41 { + name GC-12-47-1_meter_3; + phases ABCN; + nominal_voltage 480; +} + +// Meter at feeder +object meter:73 { + name GC-12-47-1_meter_4; + phases ABCN; + nominal_voltage 480; +} + +object node:9 { + name GC-12-47-1_node_1; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:10 { + name GC-12-47-1_node_2; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:11 { + name GC-12-47-1_node_3; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:12 { + name GC-12-47-1_node_4; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:13 { + name GC-12-47-1_node_5; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:14 { + name GC-12-47-1_node_6; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:15 { + name GC-12-47-1_node_7; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:16 { + name GC-12-47-1_node_8; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:17 { + name GC-12-47-1_node_9; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:18 { + name GC-12-47-1_node_10; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:19 { + name GC-12-47-1_node_11; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:20 { + name GC-12-47-1_node_12; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:21 { + name GC-12-47-1_node_13; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:22 { + name GC-12-47-1_node_14; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:23 { + name GC-12-47-1_node_15; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:24 { + name GC-12-47-1_node_16; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:25 { + name GC-12-47-1_node_17; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:26 { + name GC-12-47-1_node_18; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:27 { + name GC-12-47-1_node_19; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:28 { + name GC-12-47-1_node_20; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:29 { + name GC-12-47-1_node_21; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:30 { + name GC-12-47-1_node_22; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:31 { + name GC-12-47-1_node_23; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:32 { + name GC-12-47-1_node_24; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:33 { + name GC-12-47-1_node_25; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:34 { + name GC-12-47-1_node_26; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:35 { + name GC-12-47-1_node_27; + parent GC-12-47-1_meter_4; + phases ABCN; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; + nominal_voltage 7200; +} + +object node:76 { + name GC-12-47-1_node_28; + phases ABCN; + bustype SWING; + nominal_voltage 7200; + voltage_A 7200+0.0j; + voltage_B -3600-6235j; + voltage_C -3600+6235j; +} + +object switch:67 { + name GC-12-47-1_switch_1; + phases ABCN; + from GC-12-47-1_node_21; + to GC-12-47-1_node_20; + status CLOSED; +} + +object switch:68 { + name GC-12-47-1_switch_2; + phases ABCN; + from GC-12-47-1_node_22; + to GC-12-47-1_node_23; + status CLOSED; +} + +object switch:69 { + name GC-12-47-1_switch_3; + phases ABCN; + from GC-12-47-1_node_10; + to GC-12-47-1_node_25; + status CLOSED; +} + +object switch:70 { + name GC-12-47-1_switch_4; + phases ABCN; + from GC-12-47-1_node_14; + to GC-12-47-1_node_13; + status CLOSED; +} + +object switch:71 { + name GC-12-47-1_switch_5; + phases ABCN; + from GC-12-47-1_node_19; + to GC-12-47-1_node_18; + status CLOSED; +} + +object transformer:43 { + name GC-12-47-1_xfmr_1; + phases ABCN; + from GC-12-47-1_node_8; + to GC-12-47-1_meter_1; + configuration transformer_configuration:42; +} + +object transformer:44 { + name GC-12-47-1_xfmr_2; + phases ABCN; + from GC-12-47-1_node_9; + to GC-12-47-1_meter_2; + configuration transformer_configuration:42; +} + +object transformer:45 { + name GC-12-47-1_xfmr_3; + phases ABCN; + from GC-12-47-1_node_7; + to GC-12-47-1_meter_3; + configuration transformer_configuration:42; +} + +object transformer_configuration:42 { + connect_type WYE_WYE; + install_type PADMOUNT; + primary_voltage 12470.000 V; + secondary_voltage 480 V; + power_rating 3000.0; + powerA_rating 1000.0; + powerB_rating 1000.0; + powerC_rating 1000.0; + resistance 0.00003; + reactance 0.00017; + shunt_impedance 6545.460+6655.949j; +} + +object triplex_line_conductor: { + name triplex_4/0 AA; + resistance 0.48; + geometric_mean_radius 0.0158; +} + +object triplex_line_configuration:1 { + conductor_1 triplex_4/0 AA; + conductor_2 triplex_4/0 AA; + conductor_N triplex_4/0 AA; + insulation_thickness 0.08; + diameter 0.522; +} + +object underground_line:46 { + name GC-12-47-1_ul_1; + phases ABCN; + from GC-12-47-1_node_5; + to GC-12-47-1_node_6; + length 340.889; + configuration line_configuration:6; +} + +object underground_line:47 { + name GC-12-47-1_ul_2; + phases ABCN; + from GC-12-47-1_node_4; + to GC-12-47-1_node_5; + length 448.867; + configuration line_configuration:6; +} + +object underground_line:48 { + name GC-12-47-1_ul_3; + phases ABCN; + from GC-12-47-1_node_6; + to GC-12-47-1_node_21; + length 494.713; + configuration line_configuration:6; +} + +object underground_line:49 { + name GC-12-47-1_ul_4; + phases ABCN; + from GC-12-47-1_node_23; + to GC-12-47-1_node_10; + length 10.407; + configuration line_configuration:6; +} + +object underground_line:50 { + name GC-12-47-1_ul_5; + phases ABCN; + from GC-12-47-1_node_18; + to GC-12-47-1_node_14; + length 59.815; + configuration line_configuration:6; +} + +object underground_line:51 { + name GC-12-47-1_ul_6; + phases ABCN; + from GC-12-47-1_node_15; + to GC-12-47-1_node_8; + length 102.239; + configuration line_configuration:7; +} + +object underground_line:52 { + name GC-12-47-1_ul_7; + phases ABCN; + from GC-12-47-1_node_17; + to GC-12-47-1_node_9; + length 101.838; + configuration line_configuration:7; +} + +object underground_line:53 { + name GC-12-47-1_ul_8; + phases ABCN; + from GC-12-47-1_node_12; + to GC-12-47-1_node_7; + length 89.605; + configuration line_configuration:7; +} + +object underground_line:54 { + name GC-12-47-1_ul_9; + phases ABCN; + from GC-12-47-1_node_3; + to GC-12-47-1_node_4; + length 441.533; + configuration line_configuration:8; +} + +object underground_line:55 { + name GC-12-47-1_ul_10; + phases ABCN; + from GC-12-47-1_node_2; + to GC-12-47-1_node_3; + length 222.528; + configuration line_configuration:6; +} + +object underground_line:56 { + name GC-12-47-1_ul_11; + phases ABCN; + from GC-12-47-1_node_1; + to GC-12-47-1_node_2; + length 385.577; + configuration line_configuration:6; +} + +object underground_line:57 { + name GC-12-47-1_ul_12; + phases ABCN; + from GC-12-47-1_node_3; + to GC-12-47-1_node_24; + length 17.087; + configuration line_configuration:6; +} + +object underground_line:58 { + name GC-12-47-1_ul_13; + phases ABCN; + from GC-12-47-1_node_11; + to GC-12-47-1_node_22; + length 14.140; + configuration line_configuration:6; +} + +object underground_line:59 { + name GC-12-47-1_ul_14; + phases ABCN; + from GC-12-47-1_node_13; + to GC-12-47-1_node_11; + length 12.958; + configuration line_configuration:6; +} + +object underground_line:60 { + name GC-12-47-1_ul_15; + phases ABCN; + from GC-12-47-1_node_20; + to GC-12-47-1_node_16; + length 14.829; + configuration line_configuration:6; +} + +object underground_line:61 { + name GC-12-47-1_ul_16; + phases ABCN; + from GC-12-47-1_node_16; + to GC-12-47-1_node_19; + length 12.475; + configuration line_configuration:6; +} + +object underground_line:62 { + name GC-12-47-1_ul_17; + phases ABCN; + from GC-12-47-1_node_27; + to GC-12-47-1_node_26; + length 138.440; + configuration line_configuration:6; +} + +object underground_line:63 { + name GC-12-47-1_ul_18; + phases ABCN; + from GC-12-47-1_node_26; + to GC-12-47-1_node_1; + length 401.610; + configuration line_configuration:6; +} + +object underground_line_conductor:2 { + //name 1000 AAC (Conc); + rating.summer.continuous 488.0; + outer_diameter 2.15; + conductor_gmr 0.0371 ft; + conductor_diameter 1.152; + conductor_resistance 0.091872; + neutral_gmr 0.0842565914341201 ft; + neutral_resistance 5.3856; + neutral_diameter 0.1019; + neutral_strands 20.0; + shield_gmr 0.00; + shield_resistance 0.00; +} + +object underground_line_conductor:3 { + //name 2 AL (Conc); + rating.summer.continuous 112.0; + outer_diameter 1.09; + conductor_gmr 0.0088 ft; + conductor_diameter 0.292; + conductor_resistance 1.38336; + neutral_gmr 0.0348162687755351 ft; + neutral_resistance 13.5696; + neutral_diameter 0.0641; + neutral_strands 6.0; + shield_gmr 0.00; + shield_resistance 0.00; +} + +object underground_line_conductor:4 { + //name 1000 AAC (Tape); + rating.summer.continuous 775.0; + outer_diameter 1.87; + conductor_gmr 0.0371 ft; + conductor_diameter 1.15; + conductor_resistance 0.0222; + neutral_gmr 0.0732739718442675 ft; + neutral_resistance 0.05; + neutral_diameter 0.102; + neutral_strands 20.0; + shield_gmr 0.00; + shield_resistance 0.00; +} + +// Recorders + +object recorder { + parent GC-12-47-1_reg_1; + property tap_A,tap_B,tap_C,power_in_A.real,power_in_A.imag,power_in_B.real,power_in_B.imag,power_in_C.real,power_in_C.imag,power_in.real,power_in.imag; + limit 1440; + interval 60; + file "GC-12.47-1_reg1_output.csv"; +}; + +object recorder { + parent GC-12-47-1_cap_1; + property "switchA,switchB,switchC,voltage_A.real,voltage_A.imag,voltage_B.real,voltage_B.imag,voltage_C.real,voltage_C.imag"; + file GC-12.47-1_capacitor1.csv; + interval 60; + limit 1440; +}; + + +object impedance_dump { + filename the_impedance_dump.xml; +}; diff --git a/ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC-12.47-1_impedance_dump.xml b/ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC-12.47-1_impedance_dump.xml new file mode 100644 index 0000000..68b2889 --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC-12.47-1_impedance_dump.xml @@ -0,0 +1,2297 @@ + + + + + + GC-12-47-1_fuse_1 + fuse:3 + node:GC-12-47-1_node_11 + node:GC-12-47-1_node_12 + 7167.382606 + 7167.381020 + ABCN + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + + GC-12-47-1_fuse_2 + fuse:4 + node:GC-12-47-1_node_16 + node:GC-12-47-1_node_15 + 7167.744599 + 7167.743013 + ABCN + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + + GC-12-47-1_fuse_3 + fuse:5 + node:GC-12-47-1_node_16 + node:GC-12-47-1_node_17 + 7167.744599 + 7167.743013 + ABCN + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + + GC-12-47-1_reg_1 + regulator:0 + node:GC-12-47-1_node_28 + meter:GC-12-47-1_meter_4 + 7200.000000 + 7199.975523 + ABCN + 0 + 0 + 0 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +10000.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +10000.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +10000.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + + GC-12-47-1_switch_1 + switch:45 + node:GC-12-47-1_node_21 + node:GC-12-47-1_node_20 + 7167.936608 + 7167.931850 + ABCN + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + + GC-12-47-1_switch_2 + switch:46 + node:GC-12-47-1_node_22 + node:GC-12-47-1_node_23 + 7167.382606 + 7167.382606 + ABCN + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + + GC-12-47-1_switch_3 + switch:47 + node:GC-12-47-1_node_10 + node:GC-12-47-1_node_25 + 7167.382606 + 7167.382606 + ABCN + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + + GC-12-47-1_switch_4 + switch:48 + node:GC-12-47-1_node_14 + node:GC-12-47-1_node_13 + 7167.438734 + 7167.437148 + ABCN + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + + GC-12-47-1_switch_5 + switch:49 + node:GC-12-47-1_node_19 + node:GC-12-47-1_node_18 + 7167.692090 + 7167.690504 + ABCN + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + + GC-12-47-1_xfmr_1 + transformer:50 + node:GC-12-47-1_node_8 + meter:GC-12-47-1_meter_1 + 7165.146921 + 275.781731 + 1 + ABCN + 3000.000000 + 0.000030 + 0.000170 + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +13108.221476510062000-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +13108.221476510062000-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +13108.221476510062000-0.000000000000000j + + + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + + + +19.421972658601447-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +19.421972658601447-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +19.421972658601447-0.000000000000000j + + + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + + + +0.000002304000211+0.000013055999557j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000002304000211+0.000013055999557j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000002304000211+0.000013055999557j + + + + GC-12-47-1_xfmr_2 + transformer:51 + node:GC-12-47-1_node_9 + meter:GC-12-47-1_meter_2 + 7165.157107 + 275.782123 + 1 + ABCN + 3000.000000 + 0.000030 + 0.000170 + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +13108.221476510062000-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +13108.221476510062000-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +13108.221476510062000-0.000000000000000j + + + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + + + +19.421972658601447-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +19.421972658601447-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +19.421972658601447-0.000000000000000j + + + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + + + +0.000002304000211+0.000013055999557j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000002304000211+0.000013055999557j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000002304000211+0.000013055999557j + + + + GC-12-47-1_xfmr_3 + transformer:52 + node:GC-12-47-1_node_7 + meter:GC-12-47-1_meter_3 + 7165.105727 + 275.780146 + 1 + ABCN + 3000.000000 + 0.000030 + 0.000170 + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +13108.221476510062000-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +13108.221476510062000-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +13108.221476510062000-0.000000000000000j + + + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + + + +19.421972658601447-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +19.421972658601447-0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +19.421972658601447-0.000000000000000j + + + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +25.979166666666668+0.000000000000000j + + + +0.000002304000211+0.000013055999557j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000002304000211+0.000013055999557j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000002304000211+0.000013055999557j + + + + GC-12-47-1_ul_1 + underground_line:56 + node:GC-12-47-1_node_5 + node:GC-12-47-1_node_6 + 7178.489563 + 7174.184053 + ABCN + 340.889000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.014032445624579+0.011225507583057j + +0.004627030278992-0.011225506663322j + +0.004627030278992-0.011225506663322j + +0.004627030278992-0.011225506663322j + +0.014032445624579+0.011225507583057j + +0.004627030278992-0.011225506663322j + +0.004627030278992-0.011225506663322j + +0.004627030278992-0.011225506663322j + +0.014032445624579+0.011225507583057j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.014032445624579+0.011225507583057j + +0.004627030278992-0.011225506663322j + +0.004627030278992-0.011225506663322j + +0.004627030278992-0.011225506663322j + +0.014032445624579+0.011225507583057j + +0.004627030278992-0.011225506663322j + +0.004627030278992-0.011225506663322j + +0.004627030278992-0.011225506663322j + +0.014032445624579+0.011225507583057j + + + + GC-12-47-1_ul_2 + underground_line:57 + node:GC-12-47-1_node_4 + node:GC-12-47-1_node_5 + 7184.159631 + 7178.489563 + ABCN + 448.867000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.018477280786907+0.014781233516729j + +0.006092661248207-0.014781229197979j + +0.006092661248207-0.014781229197979j + +0.006092661248207-0.014781229197979j + +0.018477280786907+0.014781233516729j + +0.006092661248207-0.014781229197979j + +0.006092661248207-0.014781229197979j + +0.006092661248207-0.014781229197979j + +0.018477280786907+0.014781233516729j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.018477280786907+0.014781233516729j + +0.006092661248207-0.014781229197979j + +0.006092661248207-0.014781229197979j + +0.006092661248207-0.014781229197979j + +0.018477280786907+0.014781233516729j + +0.006092661248207-0.014781229197979j + +0.006092661248207-0.014781229197979j + +0.006092661248207-0.014781229197979j + +0.018477280786907+0.014781233516729j + + + + GC-12-47-1_ul_3 + underground_line:58 + node:GC-12-47-1_node_6 + node:GC-12-47-1_node_21 + 7174.184053 + 7167.936608 + ABCN + 494.713000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.020364497746399+0.016290946709741j + +0.006714948356828-0.016290932893753j + +0.006714948356828-0.016290932893753j + +0.006714948356828-0.016290932893753j + +0.020364497746399+0.016290946709741j + +0.006714948356828-0.016290932893753j + +0.006714948356828-0.016290932893753j + +0.006714948356828-0.016290932893753j + +0.020364497746399+0.016290946709741j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.020364497746399+0.016290946709741j + +0.006714948356828-0.016290932893753j + +0.006714948356828-0.016290932893753j + +0.006714948356828-0.016290932893753j + +0.020364497746399+0.016290946709741j + +0.006714948356828-0.016290932893753j + +0.006714948356828-0.016290932893753j + +0.006714948356828-0.016290932893753j + +0.020364497746399+0.016290946709741j + + + + GC-12-47-1_ul_4 + underground_line:59 + node:GC-12-47-1_node_23 + node:GC-12-47-1_node_10 + 7167.382606 + 7167.382606 + ABCN + 10.407000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000428396520906+0.000342703511750j + +0.000141258603573-0.000342703424394j + +0.000141258603573-0.000342703424394j + +0.000141258603573-0.000342703424394j + +0.000428396520906+0.000342703511750j + +0.000141258603573-0.000342703424394j + +0.000141258603573-0.000342703424394j + +0.000141258603573-0.000342703424394j + +0.000428396520906+0.000342703511750j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000428396520906+0.000342703511750j + +0.000141258603573-0.000342703424394j + +0.000141258603573-0.000342703424394j + +0.000141258603573-0.000342703424394j + +0.000428396520906+0.000342703511750j + +0.000141258603573-0.000342703424394j + +0.000141258603573-0.000342703424394j + +0.000141258603573-0.000342703424394j + +0.000428396520906+0.000342703511750j + + + + GC-12-47-1_ul_5 + underground_line:60 + node:GC-12-47-1_node_18 + node:GC-12-47-1_node_14 + 7167.690504 + 7167.438734 + ABCN + 59.815000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.002462240597479+0.001969713707631j + +0.000811894241638-0.001969711855054j + +0.000811894241638-0.001969711855054j + +0.000811894241638-0.001969711855054j + +0.002462240597479+0.001969713707631j + +0.000811894241638-0.001969711855054j + +0.000811894241638-0.001969711855054j + +0.000811894241638-0.001969711855054j + +0.002462240597479+0.001969713707631j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.002462240597479+0.001969713707631j + +0.000811894241638-0.001969711855054j + +0.000811894241638-0.001969711855054j + +0.000811894241638-0.001969711855054j + +0.002462240597479+0.001969713707631j + +0.000811894241638-0.001969711855054j + +0.000811894241638-0.001969711855054j + +0.000811894241638-0.001969711855054j + +0.002462240597479+0.001969713707631j + + + + GC-12-47-1_ul_6 + underground_line:61 + node:GC-12-47-1_node_15 + node:GC-12-47-1_node_8 + 7167.743013 + 7165.146921 + ABCN + 102.239000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.037454993425010+0.012499240032984j + +0.010277665335108+0.004667282417634j + +0.010277665335108+0.004667282417634j + +0.010277665335108+0.004667282417634j + +0.037454993425010+0.012499240032984j + +0.010277665335108+0.004667282417634j + +0.010277665335108+0.004667282417634j + +0.010277665335108+0.004667282417634j + +0.037454993425010+0.012499240032984j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.037454993425010+0.012499240032984j + +0.010277665335108+0.004667282417634j + +0.010277665335108+0.004667282417634j + +0.010277665335108+0.004667282417634j + +0.037454993425010+0.012499240032984j + +0.010277665335108+0.004667282417634j + +0.010277665335108+0.004667282417634j + +0.010277665335108+0.004667282417634j + +0.037454993425010+0.012499240032984j + + + + GC-12-47-1_ul_7 + underground_line:62 + node:GC-12-47-1_node_17 + node:GC-12-47-1_node_9 + 7167.743013 + 7165.157107 + ABCN + 101.838000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.037308088111349+0.012450215734495j + +0.010237354457660+0.004648976484972j + +0.010237354457660+0.004648976484972j + +0.010237354457660+0.004648976484972j + +0.037308088111349+0.012450215734495j + +0.010237354457660+0.004648976484972j + +0.010237354457660+0.004648976484972j + +0.010237354457660+0.004648976484972j + +0.037308088111349+0.012450215734495j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.037308088111349+0.012450215734495j + +0.010237354457660+0.004648976484972j + +0.010237354457660+0.004648976484972j + +0.010237354457660+0.004648976484972j + +0.037308088111349+0.012450215734495j + +0.010237354457660+0.004648976484972j + +0.010237354457660+0.004648976484972j + +0.010237354457660+0.004648976484972j + +0.037308088111349+0.012450215734495j + + + + GC-12-47-1_ul_8 + underground_line:63 + node:GC-12-47-1_node_12 + node:GC-12-47-1_node_7 + 7167.381020 + 7165.105727 + ABCN + 89.605000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.032826560176137+0.010954668992807j + +0.009007621380807+0.004090531412007j + +0.009007621380807+0.004090531412007j + +0.009007621380807+0.004090531412007j + +0.032826560176137+0.010954668992807j + +0.009007621380807+0.004090531412007j + +0.009007621380807+0.004090531412007j + +0.009007621380807+0.004090531412007j + +0.032826560176137+0.010954668992807j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.032826560176137+0.010954668992807j + +0.009007621380807+0.004090531412007j + +0.009007621380807+0.004090531412007j + +0.009007621380807+0.004090531412007j + +0.032826560176137+0.010954668992807j + +0.009007621380807+0.004090531412007j + +0.009007621380807+0.004090531412007j + +0.009007621380807+0.004090531412007j + +0.032826560176137+0.010954668992807j + + + + GC-12-47-1_ul_9 + underground_line:64 + node:GC-12-47-1_node_3 + node:GC-12-47-1_node_4 + 7185.467262 + 7184.159631 + ABCN + 441.533000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.002107932523801+0.005303008816165j + -0.002107931300998+0.000066294580695j + -0.002107931300998+0.000066294580695j + -0.002107931300998+0.000066294580695j + +0.002107932523801+0.005303008816165j + -0.002107931300998+0.000066294580695j + -0.002107931300998+0.000066294580695j + -0.002107931300998+0.000066294580695j + +0.002107932523801+0.005303008816165j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.002107932523801+0.005303008816165j + -0.002107931300998+0.000066294580695j + -0.002107931300998+0.000066294580695j + -0.002107931300998+0.000066294580695j + +0.002107932523801+0.005303008816165j + -0.002107931300998+0.000066294580695j + -0.002107931300998+0.000066294580695j + -0.002107931300998+0.000066294580695j + +0.002107932523801+0.005303008816165j + + + + GC-12-47-1_ul_10 + underground_line:65 + node:GC-12-47-1_node_2 + node:GC-12-47-1_node_3 + 7188.278715 + 7185.467262 + ABCN + 222.528000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.009160201883740+0.007327868459946j + +0.003020466468333-0.007327865809202j + +0.003020466468333-0.007327865809202j + +0.003020466468333-0.007327865809202j + +0.009160201883740+0.007327868459946j + +0.003020466468333-0.007327865809202j + +0.003020466468333-0.007327865809202j + +0.003020466468333-0.007327865809202j + +0.009160201883740+0.007327868459946j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.009160201883740+0.007327868459946j + +0.003020466468333-0.007327865809202j + +0.003020466468333-0.007327865809202j + +0.003020466468333-0.007327865809202j + +0.009160201883740+0.007327868459946j + +0.003020466468333-0.007327865809202j + +0.003020466468333-0.007327865809202j + +0.003020466468333-0.007327865809202j + +0.009160201883740+0.007327868459946j + + + + GC-12-47-1_ul_11 + underground_line:66 + node:GC-12-47-1_node_1 + node:GC-12-47-1_node_2 + 7193.150661 + 7188.278715 + ABCN + 385.577000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.015871994363527+0.012697087724604j + +0.005233599364845-0.012697085738182j + +0.005233599364845-0.012697085738182j + +0.005233599364845-0.012697085738182j + +0.015871994363527+0.012697087724604j + +0.005233599364845-0.012697085738182j + +0.005233599364845-0.012697085738182j + +0.005233599364845-0.012697085738182j + +0.015871994363527+0.012697087724604j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.015871994363527+0.012697087724604j + +0.005233599364845-0.012697085738182j + +0.005233599364845-0.012697085738182j + +0.005233599364845-0.012697085738182j + +0.015871994363527+0.012697087724604j + +0.005233599364845-0.012697085738182j + +0.005233599364845-0.012697085738182j + +0.005233599364845-0.012697085738182j + +0.015871994363527+0.012697087724604j + + + + GC-12-47-1_ul_12 + underground_line:67 + node:GC-12-47-1_node_3 + node:GC-12-47-1_node_24 + 7185.467262 + 7185.467262 + ABCN + 17.087000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000703373820766+0.000562676554749j + +0.000231929063059-0.000562676228583j + +0.000231929063059-0.000562676228583j + +0.000231929063059-0.000562676228583j + +0.000703373820766+0.000562676554749j + +0.000231929063059-0.000562676228583j + +0.000231929063059-0.000562676228583j + +0.000231929063059-0.000562676228583j + +0.000703373820766+0.000562676554749j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000703373820766+0.000562676554749j + +0.000231929063059-0.000562676228583j + +0.000231929063059-0.000562676228583j + +0.000231929063059-0.000562676228583j + +0.000703373820766+0.000562676554749j + +0.000231929063059-0.000562676228583j + +0.000231929063059-0.000562676228583j + +0.000231929063059-0.000562676228583j + +0.000703373820766+0.000562676554749j + + + + GC-12-47-1_ul_13 + underground_line:68 + node:GC-12-47-1_node_11 + node:GC-12-47-1_node_22 + 7167.382606 + 7167.382606 + ABCN + 14.140000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000582062727549+0.000465631561078j + +0.000191928188193-0.000465631484985j + +0.000191928188193-0.000465631484985j + +0.000191928188193-0.000465631484985j + +0.000582062727549+0.000465631561078j + +0.000191928188193-0.000465631484985j + +0.000191928188193-0.000465631484985j + +0.000191928188193-0.000465631484985j + +0.000582062727549+0.000465631561078j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000582062727549+0.000465631561078j + +0.000191928188193-0.000465631484985j + +0.000191928188193-0.000465631484985j + +0.000191928188193-0.000465631484985j + +0.000582062727549+0.000465631561078j + +0.000191928188193-0.000465631484985j + +0.000191928188193-0.000465631484985j + +0.000191928188193-0.000465631484985j + +0.000582062727549+0.000465631561078j + + + + GC-12-47-1_ul_14 + underground_line:69 + node:GC-12-47-1_node_13 + node:GC-12-47-1_node_11 + 7167.437148 + 7167.382606 + ABCN + 12.958000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000533406564610+0.000426708187302j + +0.000175884403296-0.000426708022133j + +0.000175884403296-0.000426708022133j + +0.000175884403296-0.000426708022133j + +0.000533406564610+0.000426708187302j + +0.000175884403296-0.000426708022133j + +0.000175884403296-0.000426708022133j + +0.000175884403296-0.000426708022133j + +0.000533406564610+0.000426708187302j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000533406564610+0.000426708187302j + +0.000175884403296-0.000426708022133j + +0.000175884403296-0.000426708022133j + +0.000175884403296-0.000426708022133j + +0.000533406564610+0.000426708187302j + +0.000175884403296-0.000426708022133j + +0.000175884403296-0.000426708022133j + +0.000175884403296-0.000426708022133j + +0.000533406564610+0.000426708187302j + + + + GC-12-47-1_ul_15 + underground_line:70 + node:GC-12-47-1_node_20 + node:GC-12-47-1_node_16 + 7167.931850 + 7167.744599 + ABCN + 14.829000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000610424907131+0.000488320397400j + +0.000201280276005-0.000488320365548j + +0.000201280276005-0.000488320365548j + +0.000201280276005-0.000488320365548j + +0.000610424907131+0.000488320397400j + +0.000201280276005-0.000488320365548j + +0.000201280276005-0.000488320365548j + +0.000201280276005-0.000488320365548j + +0.000610424907131+0.000488320397400j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000610424907131+0.000488320397400j + +0.000201280276005-0.000488320365548j + +0.000201280276005-0.000488320365548j + +0.000201280276005-0.000488320365548j + +0.000610424907131+0.000488320397400j + +0.000201280276005-0.000488320365548j + +0.000201280276005-0.000488320365548j + +0.000201280276005-0.000488320365548j + +0.000610424907131+0.000488320397400j + + + + GC-12-47-1_ul_16 + underground_line:71 + node:GC-12-47-1_node_16 + node:GC-12-47-1_node_19 + 7167.744599 + 7167.692090 + ABCN + 12.475000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000513524223916+0.000410802950810j + +0.000169328440432-0.000410802895203j + +0.000169328440432-0.000410802895203j + +0.000169328440432-0.000410802895203j + +0.000513524223916+0.000410802950810j + +0.000169328440432-0.000410802895203j + +0.000169328440432-0.000410802895203j + +0.000169328440432-0.000410802895203j + +0.000513524223916+0.000410802950810j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.000513524223916+0.000410802950810j + +0.000169328440432-0.000410802895203j + +0.000169328440432-0.000410802895203j + +0.000169328440432-0.000410802895203j + +0.000513524223916+0.000410802950810j + +0.000169328440432-0.000410802895203j + +0.000169328440432-0.000410802895203j + +0.000169328440432-0.000410802895203j + +0.000513524223916+0.000410802950810j + + + + GC-12-47-1_ul_17 + underground_line:72 + node:GC-12-47-1_node_27 + node:GC-12-47-1_node_26 + 7199.975523 + 7198.225873 + ABCN + 138.440000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.005698781046812+0.004558842525862j + +0.001879104552578-0.004558838903904j + +0.001879104552578-0.004558838903904j + +0.001879104552578-0.004558838903904j + +0.005698781046812+0.004558842525862j + +0.001879104552578-0.004558838903904j + +0.001879104552578-0.004558838903904j + +0.001879104552578-0.004558838903904j + +0.005698781046812+0.004558842525862j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.005698781046812+0.004558842525862j + +0.001879104552578-0.004558838903904j + +0.001879104552578-0.004558838903904j + +0.001879104552578-0.004558838903904j + +0.005698781046812+0.004558842525862j + +0.001879104552578-0.004558838903904j + +0.001879104552578-0.004558838903904j + +0.001879104552578-0.004558838903904j + +0.005698781046812+0.004558842525862j + + + + GC-12-47-1_ul_18 + underground_line:73 + node:GC-12-47-1_node_26 + node:GC-12-47-1_node_1 + 7198.225873 + 7193.150661 + ABCN + 401.610000 + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.016531981047459+0.013225055957897j + +0.005451222041033-0.013225048780441j + +0.005451222041033-0.013225048780441j + +0.005451222041033-0.013225048780441j + +0.016531981047459+0.013225055957897j + +0.005451222041033-0.013225048780441j + +0.005451222041033-0.013225048780441j + +0.005451222041033-0.013225048780441j + +0.016531981047459+0.013225055957897j + + + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +0.000000000000000+0.000000000000000j + +1.000000000000000+0.000000000000000j + + + +0.016531981047459+0.013225055957897j + +0.005451222041033-0.013225048780441j + +0.005451222041033-0.013225048780441j + +0.005451222041033-0.013225048780441j + +0.016531981047459+0.013225055957897j + +0.005451222041033-0.013225048780441j + +0.005451222041033-0.013225048780441j + +0.005451222041033-0.013225048780441j + +0.016531981047459+0.013225055957897j + + + + GC-12-47-1_cap_1 + cap:2 + node:GC-12-47-1_node_21 + ABCN + 600000.000000 + 600000.000000 + 600000.000000 + + \ No newline at end of file diff --git a/ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC_1247_1.xml b/ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC_1247_1.xml new file mode 100644 index 0000000..9f79921 --- /dev/null +++ b/ipss.plugin.3phase/testData/feeder/PNNL_taxonomy_feeder/GC_12_47_1/GC_1247_1.xml @@ -0,0 +1,5164 @@ + + + + 3 + 2 + 1 + 5473 + Jojoba + "gridlabd GC-12.47-1.glm" + batch + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + FALSE + 100 + C:\Users\d3x289\Documents\GridLABD\branch\3.2\VS2005\x64\Release + gridlabd.xml + GC_1247_1.xml + FALSE + FALSE + 1 + TRUE + FALSE + test.txt + 8 + 2000-01-01 01:00:00 EST + 2000-01-01 00:00:00 EST + 2000-01-01 01:00:00 EST + %+lg + %+lg%+lg%c + %s:%d + %[^:]:%d + FALSE + "" + GC-12.47-1.glm + gridlabd + TRUE + http://www.gridlabd.org/ + http://www.gridlabd.org/ + 90663168 + "" + "" + FALSE + "C:\Users\d3x289\Local Settings\Temp\gridlabd" + 0 + FALSE + FALSE + ISO + DEFERRED + 1 + WINDOWS + TRUE + 60 + FALSE + TRUE + FALSE + FALSE + FALSE + iexplore + 6267 + FALSE + TRUE + QUALIFIED + TRUE + NONE + "" + 0 + 0 + FALSE + FALSE + RNG3 + DONE + NEVER + nothing + localhost + 127.0.0.1 + TRUE + "" + 0 + STANDALONE + NONE + 5000 + 6267 + 0 + 0 + NONE + 64 + FALSE + 1048576 + TSTD|RALL + NAMES|POSITIONS + GLD_ + .txt + "" + EVENT + 10000000 + 3600000000000 + 0 + +0 + tape,powerflow + 10 + FALSE + +0 + EST8EDT + + + pretopdown + + 6 + + GC-12-47-1_node_28 + 44 + + + + 5 + + GC-12-47-1_meter_1 + 13 + + + GC-12-47-1_meter_2 + 14 + + + GC-12-47-1_meter_3 + 15 + + + GC-12-47-1_meter_4 + 16 + + + GC-12-47-1_node_1 + 17 + + + GC-12-47-1_node_2 + 18 + + + GC-12-47-1_node_3 + 19 + + + GC-12-47-1_node_4 + 20 + + + GC-12-47-1_node_5 + 21 + + + GC-12-47-1_node_6 + 22 + + + GC-12-47-1_node_7 + 23 + + + GC-12-47-1_node_8 + 24 + + + GC-12-47-1_node_9 + 25 + + + GC-12-47-1_node_10 + 26 + + + GC-12-47-1_node_11 + 27 + + + GC-12-47-1_node_12 + 28 + + + GC-12-47-1_node_13 + 29 + + + GC-12-47-1_node_14 + 30 + + + GC-12-47-1_node_15 + 31 + + + GC-12-47-1_node_16 + 32 + + + GC-12-47-1_node_17 + 33 + + + GC-12-47-1_node_18 + 34 + + + GC-12-47-1_node_19 + 35 + + + GC-12-47-1_node_20 + 36 + + + GC-12-47-1_node_21 + 37 + + + GC-12-47-1_node_22 + 38 + + + GC-12-47-1_node_23 + 39 + + + GC-12-47-1_node_24 + 40 + + + GC-12-47-1_node_25 + 41 + + + GC-12-47-1_node_26 + 42 + + + + 4 + + GC-12-47-1_cap_1 + 2 + + + GC-12-47-1_load_3 + 12 + + + GC-12-47-1_load_2 + 11 + + + GC-12-47-1_node_27 + 43 + + + GC-12-47-1_load_1 + 10 + + + + 2 + + GC-12-47-1_switch_2 + 46 + + + GC-12-47-1_ul_13 + 68 + + + GC-12-47-1_ul_14 + 69 + + + GC-12-47-1_fuse_2 + 4 + + + GC-12-47-1_ul_2 + 57 + + + GC-12-47-1_switch_4 + 48 + + + GC-12-47-1_switch_1 + 45 + + + GC-12-47-1_ul_3 + 58 + + + GC-12-47-1_xfmr_2 + 51 + + + GC-12-47-1_ul_7 + 62 + + + GC-12-47-1_xfmr_1 + 50 + + + GC-12-47-1_ul_10 + 65 + + + GC-12-47-1_switch_3 + 47 + + + GC-12-47-1_ul_9 + 64 + + + GC-12-47-1_ul_4 + 59 + + + GC-12-47-1_ul_17 + 72 + + + GC-12-47-1_ul_12 + 67 + + + GC-12-47-1_switch_5 + 49 + + + GC-12-47-1_xfmr_3 + 52 + + + GC-12-47-1_ul_8 + 63 + + + GC-12-47-1_ul_1 + 56 + + + GC-12-47-1_ul_16 + 71 + + + GC-12-47-1_ul_11 + 66 + + + GC-12-47-1_ul_6 + 61 + + + GC-12-47-1_fuse_1 + 3 + + + GC-12-47-1_ul_18 + 73 + + + GC-12-47-1_fuse_3 + 5 + + + GC-12-47-1_ul_15 + 70 + + + GC-12-47-1_ul_5 + 60 + + + + 1 + + GC-12-47-1_reg_1 + 0 + + + + + bottomup + + 1 + + GC-12-47-1_reg_1 + 0 + + + + 2 + + GC-12-47-1_ul_3 + 58 + + + GC-12-47-1_ul_8 + 63 + + + GC-12-47-1_xfmr_1 + 50 + + + GC-12-47-1_xfmr_3 + 52 + + + GC-12-47-1_ul_2 + 57 + + + GC-12-47-1_xfmr_2 + 51 + + + GC-12-47-1_ul_12 + 67 + + + GC-12-47-1_ul_7 + 62 + + + GC-12-47-1_ul_5 + 60 + + + GC-12-47-1_ul_18 + 73 + + + GC-12-47-1_switch_2 + 46 + + + GC-12-47-1_ul_14 + 69 + + + GC-12-47-1_ul_11 + 66 + + + GC-12-47-1_ul_16 + 71 + + + GC-12-47-1_fuse_3 + 5 + + + GC-12-47-1_ul_1 + 56 + + + GC-12-47-1_ul_9 + 64 + + + GC-12-47-1_ul_4 + 59 + + + GC-12-47-1_switch_5 + 49 + + + GC-12-47-1_ul_10 + 65 + + + GC-12-47-1_switch_4 + 48 + + + GC-12-47-1_ul_15 + 70 + + + GC-12-47-1_ul_13 + 68 + + + GC-12-47-1_fuse_1 + 3 + + + GC-12-47-1_switch_1 + 45 + + + GC-12-47-1_fuse_2 + 4 + + + GC-12-47-1_ul_6 + 61 + + + GC-12-47-1_ul_17 + 72 + + + GC-12-47-1_switch_3 + 47 + + + + 4 + + GC-12-47-1_load_1 + 10 + + + GC-12-47-1_cap_1 + 2 + + + GC-12-47-1_node_27 + 43 + + + GC-12-47-1_load_2 + 11 + + + GC-12-47-1_load_3 + 12 + + + + 5 + + GC-12-47-1_meter_1 + 13 + + + GC-12-47-1_meter_2 + 14 + + + GC-12-47-1_meter_3 + 15 + + + GC-12-47-1_meter_4 + 16 + + + GC-12-47-1_node_1 + 17 + + + GC-12-47-1_node_2 + 18 + + + GC-12-47-1_node_3 + 19 + + + GC-12-47-1_node_4 + 20 + + + GC-12-47-1_node_5 + 21 + + + GC-12-47-1_node_6 + 22 + + + GC-12-47-1_node_7 + 23 + + + GC-12-47-1_node_8 + 24 + + + GC-12-47-1_node_9 + 25 + + + GC-12-47-1_node_10 + 26 + + + GC-12-47-1_node_11 + 27 + + + GC-12-47-1_node_12 + 28 + + + GC-12-47-1_node_13 + 29 + + + GC-12-47-1_node_14 + 30 + + + GC-12-47-1_node_15 + 31 + + + GC-12-47-1_node_16 + 32 + + + GC-12-47-1_node_17 + 33 + + + GC-12-47-1_node_18 + 34 + + + GC-12-47-1_node_19 + 35 + + + GC-12-47-1_node_20 + 36 + + + GC-12-47-1_node_21 + 37 + + + GC-12-47-1_node_22 + 38 + + + GC-12-47-1_node_23 + 39 + + + GC-12-47-1_node_24 + 40 + + + GC-12-47-1_node_25 + 41 + + + GC-12-47-1_node_26 + 42 + + + + 6 + + GC-12-47-1_node_28 + 44 + + + + + posttopdown + + 6 + + GC-12-47-1_node_28 + 44 + + + + 5 + + GC-12-47-1_node_9 + 25 + + + GC-12-47-1_node_21 + 37 + + + GC-12-47-1_node_24 + 40 + + + GC-12-47-1_node_10 + 26 + + + GC-12-47-1_node_26 + 42 + + + GC-12-47-1_node_17 + 33 + + + GC-12-47-1_node_16 + 32 + + + GC-12-47-1_node_3 + 19 + + + GC-12-47-1_node_11 + 27 + + + GC-12-47-1_node_2 + 18 + + + GC-12-47-1_node_5 + 21 + + + GC-12-47-1_meter_1 + 13 + + + GC-12-47-1_node_12 + 28 + + + GC-12-47-1_node_23 + 39 + + + GC-12-47-1_meter_3 + 15 + + + GC-12-47-1_node_6 + 22 + + + GC-12-47-1_node_13 + 29 + + + GC-12-47-1_node_18 + 34 + + + GC-12-47-1_node_19 + 35 + + + GC-12-47-1_node_8 + 24 + + + GC-12-47-1_meter_4 + 16 + + + GC-12-47-1_node_25 + 41 + + + GC-12-47-1_node_22 + 38 + + + GC-12-47-1_node_20 + 36 + + + GC-12-47-1_node_15 + 31 + + + GC-12-47-1_node_14 + 30 + + + GC-12-47-1_node_4 + 20 + + + GC-12-47-1_meter_2 + 14 + + + GC-12-47-1_node_7 + 23 + + + GC-12-47-1_node_1 + 17 + + + + 4 + + GC-12-47-1_load_2 + 11 + + + GC-12-47-1_load_3 + 12 + + + GC-12-47-1_load_1 + 10 + + + GC-12-47-1_cap_1 + 2 + + + GC-12-47-1_node_27 + 43 + + + + 2 + + GC-12-47-1_ul_2 + 57 + + + GC-12-47-1_switch_1 + 45 + + + GC-12-47-1_switch_5 + 49 + + + GC-12-47-1_ul_15 + 70 + + + GC-12-47-1_xfmr_1 + 50 + + + GC-12-47-1_fuse_1 + 3 + + + GC-12-47-1_ul_3 + 58 + + + GC-12-47-1_ul_6 + 61 + + + GC-12-47-1_ul_10 + 65 + + + GC-12-47-1_switch_2 + 46 + + + GC-12-47-1_ul_7 + 62 + + + GC-12-47-1_ul_8 + 63 + + + GC-12-47-1_ul_4 + 59 + + + GC-12-47-1_ul_13 + 68 + + + GC-12-47-1_ul_12 + 67 + + + GC-12-47-1_ul_1 + 56 + + + GC-12-47-1_switch_4 + 48 + + + GC-12-47-1_ul_11 + 66 + + + GC-12-47-1_xfmr_3 + 52 + + + GC-12-47-1_ul_18 + 73 + + + GC-12-47-1_switch_3 + 47 + + + GC-12-47-1_fuse_2 + 4 + + + GC-12-47-1_ul_9 + 64 + + + GC-12-47-1_ul_14 + 69 + + + GC-12-47-1_fuse_3 + 5 + + + GC-12-47-1_ul_5 + 60 + + + GC-12-47-1_ul_17 + 72 + + + GC-12-47-1_ul_16 + 71 + + + GC-12-47-1_xfmr_2 + 51 + + + + 1 + + GC-12-47-1_reg_1 + 0 + + + + 0 + + (recorder:78) + 78 + + + (recorder:77) + 77 + + + + + + 3 + 2 + + + + + + + 77 + 0 + NEVER + GC-12-47-1_reg_1 + 2000-01-01 01:00:00 EST + (recorder:77) + tap_A,tap_B,tap_C,power_in_A.real,power_in_A.imag,power_in_B.real,power_in_B.imag,power_in_C.real,power_in_C.imag,power_in.real,power_in.imag + "" + GC-12.47-1_reg1_output.csv + txt + file + "" + 1440 + "" + "" + "" + +60 s + SCREEN + DEFAULT + DEFAULT + + + 78 + 0 + NEVER + GC-12-47-1_cap_1 + 2000-01-01 01:00:00 EST + (recorder:78) + switchA,switchB,switchC,voltage_A.real,voltage_A.imag,voltage_B.real,voltage_B.imag,voltage_C.real,voltage_C.imag + "" + GC-12.47-1_capacitor1.csv + txt + file + "" + 1440 + "" + "" + "" + +60 s + SCREEN + DEFAULT + DEFAULT + + + + + + + + + + + + + 3 + 2 + + powerflow_object + + 17 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_1 + PQ + HASSOURCE + +0.0072 V + +7473.93-0.0220615d V + +7473.44-120.024d V + +7473.47+119.979d V + +12944.9+29.976d V + +12944.2-90.0224d V + +12944.9+149.979d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 18 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_2 + PQ + HASSOURCE + +0.0072 V + +7469.24-0.0379156d V + +7468.65-120.04d V + +7468.7+119.963d V + +12936.7+29.9598d V + +12936-90.0385d V + +12936.7+149.964d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 19 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_3 + PQ + HASSOURCE + +0.0072 V + +7466.54-0.0470745d V + +7465.89-120.049d V + +7465.94+119.953d V + +12932+29.9505d V + +12931.2-90.0478d V + +12931.9+149.954d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 20 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_4 + PQ + HASSOURCE + +0.0072 V + +7465.28-0.0541837d V + +7464.61-120.056d V + +7464.68+119.946d V + +12929.8+29.9432d V + +12929-90.055d V + +12929.7+149.947d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 21 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_5 + PQ + HASSOURCE + +0.0072 V + +7459.82-0.072687d V + +7459.04-120.075d V + +7459.12+119.927d V + +12920.3+29.9244d V + +12919.4-90.0738d V + +12920.2+149.929d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 22 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_6 + PQ + HASSOURCE + +0.0072 V + +7455.68-0.0867572d V + +7454.81-120.089d V + +7454.91+119.913d V + +12913+29.91d V + +12912.1-90.0881d V + +12912.9+149.915d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 23 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_7 + PQ + HASSOURCE + +0.0072 V + +7446.95-0.103978d V + +7445.86-120.107d V + +7446.02+119.895d V + +12897.7+29.8922d V + +12896.6-90.1057d V + +12897.6+149.897d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 24 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_8 + PQ + HASSOURCE + +0.0072 V + +7446.99-0.102234d V + +7445.9-120.105d V + +7446.06+119.897d V + +12897.8+29.8939d V + +12896.7-90.1039d V + +12897.7+149.899d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 25 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_9 + PQ + HASSOURCE + +0.0072 V + +7447-0.102255d V + +7445.91-120.105d V + +7446.07+119.896d V + +12897.8+29.8939d V + +12896.7-90.1039d V + +12897.7+149.899d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 26 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_10 + PQ + HASSOURCE + +0.0072 V + +7449.14-0.10875d V + +7448.12-120.112d V + +7448.25+119.89d V + +12901.6+29.8876d V + +12900.5-90.1104d V + +12901.4+149.893d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 27 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_11 + PQ + HASSOURCE + +0.0072 V + +7449.14-0.10875d V + +7448.12-120.112d V + +7448.25+119.89d V + +12901.6+29.8876d V + +12900.5-90.1104d V + +12901.4+149.893d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 28 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_12 + PQ + HASSOURCE + +0.0072 V + +7449.14-0.108701d V + +7448.12-120.112d V + +7448.25+119.89d V + +12901.6+29.8876d V + +12900.5-90.1104d V + +12901.4+149.893d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 29 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_13 + PQ + HASSOURCE + +0.0072 V + +7449.19-0.108571d V + +7448.17-120.111d V + +7448.3+119.89d V + +12901.7+29.8878d V + +12900.6-90.1102d V + +12901.5+149.893d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 30 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_14 + PQ + HASSOURCE + +0.0072 V + +7449.19-0.10862d V + +7448.17-120.111d V + +7448.3+119.89d V + +12901.7+29.8877d V + +12900.6-90.1103d V + +12901.5+149.893d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 31 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_15 + PQ + HASSOURCE + +0.0072 V + +7449.48-0.107623d V + +7448.47-120.11d V + +7448.6+119.891d V + +12902.2+29.8887d V + +12901.1-90.1093d V + +12902.1+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 32 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_16 + PQ + HASSOURCE + +0.0072 V + +7449.49-0.107672d V + +7448.48-120.11d V + +7448.6+119.891d V + +12902.2+29.8887d V + +12901.1-90.1093d V + +12902.1+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 33 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_17 + PQ + HASSOURCE + +0.0072 V + +7449.48-0.107623d V + +7448.47-120.11d V + +7448.6+119.891d V + +12902.2+29.8887d V + +12901.1-90.1093d V + +12902.1+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 34 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_18 + PQ + HASSOURCE + +0.0072 V + +7449.43-0.107795d V + +7448.42-120.111d V + +7448.55+119.891d V + +12902.1+29.8885d V + +12901-90.1094d V + +12902+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 35 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_19 + PQ + HASSOURCE + +0.0072 V + +7449.44-0.107844d V + +7448.42-120.111d V + +7448.55+119.891d V + +12902.1+29.8885d V + +12901-90.1095d V + +12902+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 36 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_20 + PQ + HASSOURCE + +0.0072 V + +7449.67-0.107058d V + +7448.66-120.11d V + +7448.79+119.892d V + +12902.5+29.8893d V + +12901.4-90.1087d V + +12902.4+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 37 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_21 + PQ + HASSOURCE + +0.0072 V + +7449.67-0.107204d V + +7448.66-120.11d V + +7448.79+119.892d V + +12902.5+29.8892d V + +12901.5-90.1088d V + +12902.4+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 38 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_22 + PQ + HASSOURCE + +0.0072 V + +7449.14-0.10875d V + +7448.12-120.112d V + +7448.25+119.89d V + +12901.6+29.8876d V + +12900.5-90.1104d V + +12901.4+149.893d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 39 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_23 + PQ + HASSOURCE + +0.0072 V + +7449.14-0.10875d V + +7448.12-120.112d V + +7448.25+119.89d V + +12901.6+29.8876d V + +12900.5-90.1104d V + +12901.4+149.893d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 40 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_24 + PQ + HASSOURCE + +0.0072 V + +7466.54-0.0470745d V + +7465.89-120.049d V + +7465.94+119.953d V + +12932+29.9505d V + +12931.2-90.0478d V + +12931.9+149.954d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 41 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_25 + PQ + HASSOURCE + +0.0072 V + +7449.14-0.10875d V + +7448.12-120.112d V + +7448.25+119.89d V + +12901.6+29.8876d V + +12900.5-90.1104d V + +12901.4+149.893d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 42 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_26 + PQ + HASSOURCE + +0.0072 V + +7478.81-0.00556927d V + +7478.43-120.007d V + +7478.44+119.996d V + +12953.5+29.9928d V + +12952.8-90.0057d V + +12953.4+149.996d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + 43 + 4 + NEVER + GC-12-47-1_meter_4 + 2000-01-01 01:00:00 EST + GC-12-47-1_node_27 + PQ + HASSOURCE + +0.00048 V + +7480.5+0.000110809d V + +7480.15-120.001d V + +7480.15+120.002d V + +12956.4+29.9986d V + +12955.8-89.9999d V + +12956.4+150.002d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + GC-12-47-1_meter_4 + ABCN + +480 V + + + 44 + 6 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_node_28 + SWING + HASSOURCE + +0.0072 V + +7200+0d V + +7199.67-120.002d V + +7199.67+120.002d V + +12470.6+29.9985d V + +12470-90d V + +12470.6+150.002d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +7200 V + + + + powerflow_object + + + node + + 2 + 4 + NEVER + GC-12-47-1_node_21 + 2000-01-01 01:00:00 EST + GC-12-47-1_cap_1 + A + CBA + OPEN + OPEN + OPEN + VOLT + +2 + +0 + +0 + +7300 V + +7200 V + +0 VAr + +0 VAr + +0 A + +0 A + +600000 VAr + +600000 VAr + +600000 VAr + +7200 V + +30 s + +30 s + +0 s + INDIVIDUAL + PQ + HASSOURCE + +0.0072 V + +7449.67-0.107204d V + +7448.66-120.11d V + +7448.79+119.892d V + +12902.5+29.8892d V + +12901.5-90.1088d V + +12902.4+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0j S + +0+0j S + +0+0j S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + GC-12-47-1_node_21 + ABCN + +7200 V + + + + link + + 3 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_fuse_1 + GOOD + GOOD + GOOD + NONE + +50000 A + +3600 s + +0.0001 Ohm + CLOSED + GC-12-47-1_node_11 + GC-12-47-1_node_12 + +1.77533e+006+1.07864e+006j VA + +1.77533e+006+1.07864e+006j VA + +1.77533e+006 W + +1.29641-1.29641j VA + +585493+358129j VA + +597142+361377j VA + +592696+359132j VA + +585493+358129j VA + +597141+361377j VA + +592695+359133j VA + +0.424456-0.424456j VA + +0.439095-0.439095j VA + +0.432855-0.432855j VA + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +3600 s + +1000 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 4 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_fuse_2 + GOOD + GOOD + GOOD + NONE + +50000 A + +3600 s + +0.0001 Ohm + CLOSED + GC-12-47-1_node_16 + GC-12-47-1_node_15 + +1.77542e+006+1.07866e+006j VA + +1.77542e+006+1.07866e+006j VA + +1.77542e+006 W + +1.29639-1.29639j VA + +585521+358137j VA + +597172+361385j VA + +592725+359141j VA + +585521+358137j VA + +597171+361386j VA + +592724+359141j VA + +0.424452-0.424452j VA + +0.439091-0.439091j VA + +0.43285-0.43285j VA + +78.5084-48.223j A + -82.1916-45.015j A + +2.14497+93.0183j A + +78.5084-48.223j A + -82.1916-45.015j A + +2.14497+93.0183j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +3600 s + +1000 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 5 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_fuse_3 + GOOD + GOOD + GOOD + NONE + +50000 A + +3600 s + +0.0001 Ohm + CLOSED + GC-12-47-1_node_16 + GC-12-47-1_node_17 + +1.77542e+006+1.07866e+006j VA + +1.77541e+006+1.07866e+006j VA + +1.77541e+006 W + +1.29639-1.29639j VA + +585520+358137j VA + +597171+361385j VA + +592724+359140j VA + +585520+358137j VA + +597170+361386j VA + +592724+359141j VA + +0.42445-0.42445j VA + +0.43909-0.43909j VA + +0.432849-0.432849j VA + +78.5083-48.223j A + -82.1915-45.0149j A + +2.145+93.0182j A + +78.5083-48.223j A + -82.1915-45.0149j A + +2.145+93.0182j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +3600 s + +1000 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + + node + + 13 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_meter_1 + +1.77467e+006 Wh + +1.07823e+006 VAh + +2.07655e+006+31.2815d VA + +686085+31.4529d VA + +697713+31.1813d VA + +692753+31.2127d VA + +1.77467e+006 W + +1.77467e+006 W + +1.07823e+006 VAr + +0+0j VA + +286.631-0.106987d V + +286.589-120.11d V + +286.595+119.892d V + +496.431+29.8891d V + +496.388-90.1088d V + +496.426+149.894d V + +2039.58-1252.79j A + -2135.27-1169.45j A + +55.7245+2416.54j A + FALSE + FALSE + +0 $ + +0 $ + +0 kWh + +0 $ + +0 kWh + NONE + 15 + +0 $/kWh + +0 $/kWh + +0 $/kWh + +0 kWh + +0 $/kWh + +0 kWh + +0 $/kWh + +0 kWh + PQ + HASSOURCE + +0.00048 V + +286.631-0.106987d V + +286.589-120.11d V + +286.595+119.892d V + +496.431+29.8891d V + +496.388-90.1088d V + +496.426+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +480 V + + + 14 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_meter_2 + +1.77467e+006 Wh + +1.07823e+006 VAh + +2.07655e+006+31.2815d VA + +686085+31.4529d VA + +697713+31.1813d VA + +692753+31.2127d VA + +1.77467e+006 W + +1.77467e+006 W + +1.07823e+006 VAr + +0+0j VA + +286.632-0.107008d V + +286.59-120.11d V + +286.596+119.892d V + +496.431+29.8891d V + +496.389-90.1088d V + +496.426+149.894d V + +2039.58-1252.79j A + -2135.27-1169.45j A + +55.7253+2416.53j A + FALSE + FALSE + +0 $ + +0 $ + +0 kWh + +0 $ + +0 kWh + NONE + 15 + +0 $/kWh + +0 $/kWh + +0 $/kWh + +0 kWh + +0 $/kWh + +0 kWh + +0 $/kWh + +0 kWh + PQ + HASSOURCE + +0.00048 V + +286.632-0.107008d V + +286.59-120.11d V + +286.596+119.892d V + +496.431+29.8891d V + +496.389-90.1088d V + +496.426+149.894d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +480 V + + + 15 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_meter_3 + +1.77467e+006 Wh + +1.07823e+006 VAh + +2.07655e+006+31.2815d VA + +686085+31.4529d VA + +697713+31.1813d VA + +692753+31.2127d VA + +1.77467e+006 W + +1.77467e+006 W + +1.07823e+006 VAr + +0+0j VA + +286.63-0.108731d V + +286.588-120.112d V + +286.594+119.89d V + +496.428+29.8874d V + +496.386-90.1105d V + +496.423+149.893d V + +2039.56-1252.86j A + -2135.32-1169.39j A + +55.7983+2416.55j A + FALSE + FALSE + +0 $ + +0 $ + +0 kWh + +0 $ + +0 kWh + NONE + 15 + +0 $/kWh + +0 $/kWh + +0 $/kWh + +0 kWh + +0 $/kWh + +0 kWh + +0 $/kWh + +0 kWh + PQ + HASSOURCE + +0.00048 V + +286.63-0.108731d V + +286.588-120.112d V + +286.594+119.89d V + +496.428+29.8874d V + +496.386-90.1105d V + +496.423+149.893d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +480 V + + + 16 + 5 + NEVER + GC-12-47-1_node_28 + 2000-01-01 01:00:00 EST + GC-12-47-1_meter_4 + +5.3425e+006 Wh + +3.23909e+006 VAh + +6.25851e+006+31.3906d VA + +2.06767e+006+31.5606d VA + +2.10293e+006+31.2904d VA + +2.08793e+006+31.3232d VA + +5.34398e+006 W + +5.34249e+006 W + +3.25987e+006 VAr + +0+0j VA + +7480.5+0.000110809d V + +7480.15-120.001d V + +7480.15+120.002d V + +12956.4+29.9986d V + +12955.8-89.9999d V + +12956.4+150.002d V + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + FALSE + FALSE + +0 $ + +0 $ + +0 kWh + +0 $ + +0 kWh + NONE + 15 + +0 $/kWh + +0 $/kWh + +0 $/kWh + +0 kWh + +0 $/kWh + +0 kWh + +0 $/kWh + +0 kWh + PQ + HASSOURCE + +0.00048 V + +7480.5+0.000110809d V + +7480.15-120.001d V + +7480.15+120.002d V + +12956.4+29.9986d V + +12955.8-89.9999d V + +12956.4+150.002d V + +0+0i A + +0+0i A + +0+0i A + +0+0i VA + +0+0i VA + +0+0i VA + +0+0i S + +0+0i S + +0+0i S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + ABCN + +480 V + + + + link + + + + 9 + 0 + NEVER + 2000-01-01 00:00:00 EST + (line_spacing:9) + +0.25 ft + +0.25 ft + +0.25 ft + +0.166667 ft + +0.166667 ft + +0.166667 ft + +0 ft + +0 ft + +0 ft + +0 ft + + + + line + + + line + + 56 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_1 + line_configuration:6 + +340.889 ft + CLOSED + GC-12-47-1_node_5 + GC-12-47-1_node_6 + +5.33171e+006+3.24389e+006j VA + +5.32952e+006+3.24074e+006j VA + +5.32952e+006 W + +2194.87+3149.54j VA + +1.75834e+006+1.077e+006j VA + +1.79338e+006+1.08682e+006j VA + +1.78e+006+1.08008e+006j VA + +1.75762e+006+1.07597e+006j VA + +1.79263e+006+1.08576e+006j VA + +1.77927e+006+1.07902e+006j VA + +712.131+1029.65j VA + +748.002+1061.85j VA + +734.733+1058.03j VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 57 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_2 + line_configuration:6 + +448.867 ft + CLOSED + GC-12-47-1_node_4 + GC-12-47-1_node_5 + +5.3346e+006+3.24804e+006j VA + +5.33171e+006+3.24389e+006j VA + +5.33171e+006 W + +2890.1+4147.17j VA + +1.75927e+006+1.07835e+006j VA + +1.79436e+006+1.08822e+006j VA + +1.78097e+006+1.08147e+006j VA + +1.75834e+006+1.077e+006j VA + +1.79338e+006+1.08682e+006j VA + +1.78e+006+1.08008e+006j VA + +937.701+1355.8j VA + +984.935+1398.2j VA + +967.463+1393.17j VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 58 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_3 + line_configuration:6 + +494.713 ft + CLOSED + GC-12-47-1_node_6 + GC-12-47-1_node_21 + +5.32952e+006+3.24074e+006j VA + +5.32633e+006+3.23617e+006j VA + +5.32633e+006 W + +3185.29+4570.75j VA + +1.75762e+006+1.07597e+006j VA + +1.79263e+006+1.08576e+006j VA + +1.77927e+006+1.07902e+006j VA + +1.75659e+006+1.07447e+006j VA + +1.79154e+006+1.08422e+006j VA + +1.7782e+006+1.07748e+006j VA + +1033.47+1494.27j VA + +1085.53+1541.01j VA + +1066.28+1535.47j VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 59 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_4 + line_configuration:6 + +10.407 ft + CLOSED + GC-12-47-1_node_23 + GC-12-47-1_node_10 + +0.000136903-6.91834e-005j VA + +0.000136903-6.91834e-005j VA + +0.000136903 W + +8.47033e-020+9.31736e-020j VA + +9.88059e-005-3.79384e-005j VA + +4.55585e-005-6.9388e-006j VA + -7.46121e-006-2.43062e-005j VA + +9.88059e-005-3.79384e-005j VA + +4.55585e-005-6.9388e-006j VA + -7.46121e-006-2.43062e-005j VA + +6.77626e-020+6.09864e-020j VA + +1.35525e-020+2.20229e-020j VA + +3.38813e-021+1.01644e-020j VA + +1.32737e-008+5.0678e-009j A + -2.2628e-009-5.7587e-009j A + -2.33005e-009-2.49474e-009j A + +1.32737e-008+5.0678e-009j A + -2.2628e-009-5.7587e-009j A + -2.33005e-009-2.49474e-009j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CN|BN|AN + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 60 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_5 + line_configuration:6 + +59.815 ft + CLOSED + GC-12-47-1_node_18 + GC-12-47-1_node_14 + +1.77538e+006+1.07871e+006j VA + +1.77534e+006+1.07865e+006j VA + +1.77534e+006 W + +42.7923+61.4052j VA + +585510+358153j VA + +597160+361402j VA + +592714+359157j VA + +585496+358133j VA + +597145+361381j VA + +592699+359136j VA + +13.8841+20.0747j VA + +14.5835+20.7025j VA + +14.3248+20.628j VA + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 61 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_6 + line_configuration:7 + +102.239 ft + CLOSED + GC-12-47-1_node_15 + GC-12-47-1_node_8 + +1.77542e+006+1.07866e+006j VA + +1.77471e+006+1.07846e+006j VA + +1.77471e+006 W + +704.674+203.077j VA + +585521+358137j VA + +597171+361386j VA + +592724+359141j VA + +585291+358072j VA + +596931+361317j VA + +592490+359072j VA + +230.004+65.0318j VA + +240.306+68.889j VA + +234.365+69.1562j VA + +78.5084-48.223j A + -82.1916-45.015j A + +2.14497+93.0183j A + +78.5084-48.223j A + -82.1916-45.015j A + +2.14497+93.0183j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +112 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 62 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_7 + line_configuration:7 + +101.838 ft + CLOSED + GC-12-47-1_node_17 + GC-12-47-1_node_9 + +1.77541e+006+1.07866e+006j VA + +1.77471e+006+1.07846e+006j VA + +1.77471e+006 W + +701.909+202.28j VA + +585520+358137j VA + +597170+361386j VA + +592724+359141j VA + +585291+358072j VA + +596931+361317j VA + +592490+359072j VA + +229.101+64.7766j VA + +239.363+68.6186j VA + +233.445+68.8848j VA + +78.5083-48.223j A + -82.1915-45.0149j A + +2.145+93.0182j A + +78.5083-48.223j A + -82.1915-45.0149j A + +2.145+93.0182j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +112 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 63 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_8 + line_configuration:7 + +89.605 ft + CLOSED + GC-12-47-1_node_12 + GC-12-47-1_node_7 + +1.77533e+006+1.07864e+006j VA + +1.77471e+006+1.07846e+006j VA + +1.77471e+006 W + +617.602+177.984j VA + +585493+358129j VA + +597141+361377j VA + +592695+359133j VA + +585291+358072j VA + +596931+361317j VA + +592490+359072j VA + +201.583+56.9963j VA + +210.613+60.3768j VA + +205.406+60.611j VA + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +112 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 64 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_9 + line_configuration:8 + +441.533 ft + CLOSED + GC-12-47-1_node_3 + GC-12-47-1_node_4 + +5.3351e+006+3.24926e+006j VA + +5.3346e+006+3.24804e+006j VA + +5.3346e+006 W + +496.516+1222j VA + +1.75944e+006+1.07875e+006j VA + +1.79453e+006+1.08863e+006j VA + +1.78114e+006+1.08188e+006j VA + +1.75927e+006+1.07835e+006j VA + +1.79436e+006+1.08822e+006j VA + +1.78097e+006+1.08147e+006j VA + +162.639+400.043j VA + +168.177+413.982j VA + +165.7+407.97j VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +775 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 65 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_10 + line_configuration:6 + +222.528 ft + CLOSED + GC-12-47-1_node_2 + GC-12-47-1_node_3 + +5.33653e+006+3.25132e+006j VA + +5.3351e+006+3.24926e+006j VA + +5.3351e+006 W + +1432.78+2055.98j VA + +1.7599e+006+1.07942e+006j VA + +1.79502e+006+1.08933e+006j VA + +1.78162e+006+1.08257e+006j VA + +1.75944e+006+1.07875e+006j VA + +1.79453e+006+1.08863e+006j VA + +1.78114e+006+1.08188e+006j VA + +464.87+672.143j VA + +488.286+693.164j VA + +479.625+690.671j VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 66 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_11 + line_configuration:6 + +385.577 ft + CLOSED + GC-12-47-1_node_1 + GC-12-47-1_node_2 + +5.33902e+006+3.25488e+006j VA + +5.33653e+006+3.25132e+006j VA + +5.33653e+006 W + +2482.6+3562.42j VA + +1.76071e+006+1.08059e+006j VA + +1.79586e+006+1.09053e+006j VA + +1.78245e+006+1.08377e+006j VA + +1.7599e+006+1.07942e+006j VA + +1.79502e+006+1.08933e+006j VA + +1.78162e+006+1.08257e+006j VA + +805.485+1164.63j VA + +846.059+1201.05j VA + +831.052+1196.73j VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 67 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_12 + line_configuration:6 + +17.087 ft + CLOSED + GC-12-47-1_node_3 + GC-12-47-1_node_24 + +5.306e-007+7.16175e-006j VA + +5.306e-007+7.16175e-006j VA + +5.306e-007 W + +9.52912e-022+6.35275e-022j VA + -4.73369e-006+6.93964e-006j VA + +8.31218e-008+1.29393e-006j VA + +5.18117e-006-1.07182e-006j VA + -4.73369e-006+6.93964e-006j VA + +8.31218e-008+1.29393e-006j VA + +5.18117e-006-1.07182e-006j VA + +8.47033e-022+0j VA + +1.05879e-022+2.11758e-022j VA + +0+4.23516e-022j VA + -6.34751e-010-9.28911e-010j A + -1.55594e-010+7.71479e-011j A + -4.70883e-010+5.29603e-010j A + -6.34751e-010-9.28911e-010j A + -1.55594e-010+7.71479e-011j A + -4.70883e-010+5.29603e-010j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CN|BN|AN + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 68 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_13 + line_configuration:6 + +14.14 ft + CLOSED + GC-12-47-1_node_11 + GC-12-47-1_node_22 + -0.000227352-1.28036e-005j VA + -0.000227352-1.28036e-005j VA + -0.000227352 W + +4.87891e-019+4.84503e-019j VA + -3.04774e-005-1.74476e-005j VA + -0.00015944+0.000114011j VA + -3.74345e-005-0.000109367j VA + -3.04774e-005-1.74476e-005j VA + -0.00015944+0.000114011j VA + -3.74345e-005-0.000109367j VA + +2.71051e-020-3.38813e-021j VA + +4.06576e-019+4.20128e-019j VA + +5.42101e-020+6.77626e-020j VA + -4.08694e-009+2.34999e-009j A + -2.50213e-009+2.61974e-008j A + -1.02257e-008-1.16748e-008j A + -4.08694e-009+2.34999e-009j A + -2.50213e-009+2.61974e-008j A + -1.02257e-008-1.16748e-008j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CN|BN|AN + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 69 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_14 + line_configuration:6 + +12.958 ft + CLOSED + GC-12-47-1_node_13 + GC-12-47-1_node_11 + +1.77534e+006+1.07865e+006j VA + +1.77533e+006+1.07864e+006j VA + +1.77533e+006 W + +9.2703+13.3025j VA + +585496+358133j VA + +597145+361381j VA + +592699+359137j VA + +585493+358129j VA + +597142+361377j VA + +592696+359132j VA + +3.00778+4.34887j VA + +3.15928+4.48487j VA + +3.10324+4.46875j VA + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 70 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_15 + line_configuration:6 + +14.829 ft + CLOSED + GC-12-47-1_node_20 + GC-12-47-1_node_16 + +5.32632e+006+3.23619e+006j VA + +5.32623e+006+3.23605e+006j VA + +5.32623e+006 W + +95.4788+137.008j VA + +1.75659e+006+1.07448e+006j VA + +1.79154e+006+1.08422e+006j VA + +1.7782e+006+1.07749e+006j VA + +1.75656e+006+1.07443e+006j VA + +1.79151e+006+1.08418e+006j VA + +1.77817e+006+1.07744e+006j VA + +30.9784+44.7908j VA + +32.5388+46.1916j VA + +31.9616+46.0255j VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 71 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_16 + line_configuration:6 + +12.475 ft + CLOSED + GC-12-47-1_node_16 + GC-12-47-1_node_19 + +1.77539e+006+1.07872e+006j VA + +1.77539e+006+1.07871e+006j VA + +1.77539e+006 W + +8.92476+12.8066j VA + +585514+358157j VA + +597164+361405j VA + +592717+359161j VA + +585511+358153j VA + +597160+361401j VA + +592714+359156j VA + +2.89566+4.18676j VA + +3.04152+4.3177j VA + +2.98757+4.30218j VA + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 72 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_17 + line_configuration:6 + +138.44 ft + CLOSED + GC-12-47-1_node_27 + GC-12-47-1_node_26 + +6.25851e+006+31.3906d VA + +5.3416e+006+3.25859e+006j VA + +5.3416e+006 W + +1559.03+55.1279d VA + +2.06767e+006+31.5606d VA + +2.10293e+006+31.2904d VA + +2.08793e+006+31.3232d VA + +1.76155e+006+1.0818e+006j VA + +1.79674e+006+1.09178e+006j VA + +1.78331e+006+1.08501e+006j VA + +508.424+55.3314d VA + +527.486+54.838d VA + +523.127+55.2226d VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +480 V + + + 73 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_ul_18 + line_configuration:6 + +401.61 ft + CLOSED + GC-12-47-1_node_26 + GC-12-47-1_node_1 + +5.3416e+006+3.25859e+006j VA + +5.33902e+006+3.25488e+006j VA + +5.33902e+006 W + +2585.83+3710.55j VA + +1.76155e+006+1.0818e+006j VA + +1.79674e+006+1.09178e+006j VA + +1.78331e+006+1.08501e+006j VA + +1.76071e+006+1.08059e+006j VA + +1.79586e+006+1.09053e+006j VA + +1.78245e+006+1.08377e+006j VA + +838.979+1213.06j VA + +881.24+1251j VA + +865.608+1246.5j VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +488 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + + + + + 74 + 0 + NEVER + 2000-01-01 00:00:00 EST + (underground_line_conductor:74) + +2.15 in + +0.0371 ft + +1.152 in + +0.091872 Ohm/mile + +0.0842566 ft + +0.1019 in + +5.3856 Ohm/mile + 20 + +0 in + +0 in + +1 unit + +0 ft + +0 Ohm/mile + +488 A + +2000 A + +1000 A + +2000 A + + + 75 + 0 + NEVER + 2000-01-01 00:00:00 EST + (underground_line_conductor:75) + +1.09 in + +0.0088 ft + +0.292 in + +1.38336 Ohm/mile + +0.0348163 ft + +0.0641 in + +13.5696 Ohm/mile + 6 + +0 in + +0 in + +1 unit + +0 ft + +0 Ohm/mile + +112 A + +2000 A + +1000 A + +2000 A + + + 76 + 0 + NEVER + 2000-01-01 00:00:00 EST + (underground_line_conductor:76) + +1.87 in + +0.0371 ft + +1.15 in + +0.0222 Ohm/mile + +0.073274 ft + +0.102 in + +0.05 Ohm/mile + 20 + +0 in + +0 in + +1 unit + +0 ft + +0 Ohm/mile + +775 A + +2000 A + +1000 A + +2000 A + + + + + 6 + 0 + NEVER + 2000-01-01 00:00:00 EST + (line_configuration:6) + underground_line_conductor:74 + underground_line_conductor:74 + underground_line_conductor:74 + underground_line_conductor:74 + line_spacing:9 + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + + + 7 + 0 + NEVER + 2000-01-01 00:00:00 EST + (line_configuration:7) + underground_line_conductor:75 + underground_line_conductor:75 + underground_line_conductor:75 + underground_line_conductor:75 + line_spacing:9 + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + + + 8 + 0 + NEVER + 2000-01-01 00:00:00 EST + (line_configuration:8) + underground_line_conductor:76 + underground_line_conductor:76 + underground_line_conductor:76 + underground_line_conductor:76 + line_spacing:9 + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + +0 nF/mile + + + + + 53 + 0 + NEVER + 2000-01-01 00:00:00 EST + (transformer_configuration:53) + WYE_WYE + PADMOUNT + UNKNOWN + UNKNOWN + +12470 V + +480 V + +3000 kVA + +1000 kVA + +1000 kVA + +1000 kVA + +3e-005 pu*Ohm + +0.00017 pu*Ohm + +3e-005+0.00017j pu*Ohm + +0 pu*Ohm + +0 pu*Ohm + +0+0j pu*Ohm + +0 pu*Ohm + +0 pu*Ohm + +0+0j pu*Ohm + +6545.46 pu*Ohm + +6655.95 pu*Ohm + +6545.46+6655.95j pu*Ohm + +0 lb + +0 lb + +0 gal + +0 h + +0 degC + +0 degC + +0 pu + +0 pu + +4.5 + +0 h + + + + link + + 50 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_xfmr_1 + transformer_configuration:53 + +0 degC + +0 degC + +0 degC + +0 + +0 + FALSE + +0 + +0 s + CLOSED + GC-12-47-1_node_8 + GC-12-47-1_meter_1 + +1.77471e+006+1.07846e+006j VA + +2.07655e+006+31.2815d VA + +1.77467e+006 W + +40.318+228.469j VA + +585291+358072j VA + +596931+361317j VA + +592490+359072j VA + +686085+31.4529d VA + +697713+31.1813d VA + +692753+31.2127d VA + +13.2005+74.8029j VA + +13.6558+77.3829j VA + +13.4617+76.283j VA + +2039.58-1252.79j A + -2135.27-1169.45j A + +55.7245+2416.54j A + +78.5084-48.223j A + -82.1916-45.015j A + +2.14497+93.0183j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +3000 A + +3000 A + +0.0001 V + ABCN + +7200 V + + + 51 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_xfmr_2 + transformer_configuration:53 + +0 degC + +0 degC + +0 degC + +0 + +0 + FALSE + +0 + +0 s + CLOSED + GC-12-47-1_node_9 + GC-12-47-1_meter_2 + +1.77471e+006+1.07846e+006j VA + +2.07655e+006+31.2815d VA + +1.77467e+006 W + +40.3179+228.468j VA + +585291+358072j VA + +596931+361317j VA + +592490+359072j VA + +686085+31.4529d VA + +697713+31.1813d VA + +692753+31.2127d VA + +13.2005+74.8027j VA + +13.6558+77.3827j VA + +13.4617+76.2828j VA + +2039.58-1252.79j A + -2135.27-1169.45j A + +55.7253+2416.53j A + +78.5083-48.223j A + -82.1915-45.0149j A + +2.145+93.0182j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +3000 A + +3000 A + +0.0001 V + ABCN + +7200 V + + + 52 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_xfmr_3 + transformer_configuration:53 + +0 degC + +0 degC + +0 degC + +0 + +0 + FALSE + +0 + +0 s + CLOSED + GC-12-47-1_node_7 + GC-12-47-1_meter_3 + +1.77471e+006+1.07846e+006j VA + +2.07655e+006+31.2815d VA + +1.77467e+006 W + +40.3185+228.471j VA + +585291+358072j VA + +596931+361317j VA + +592490+359072j VA + +686085+31.4529d VA + +697713+31.1813d VA + +692753+31.2127d VA + +13.2007+74.8037j VA + +13.6559+77.3837j VA + +13.4619+76.2839j VA + +2039.56-1252.86j A + -2135.32-1169.39j A + +55.7983+2416.55j A + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +3000 A + +3000 A + +0.0001 V + ABCN + +7200 V + + + + node + + 10 + 4 + NEVER + GC-12-47-1_meter_1 + 2000-01-01 01:00:00 EST + GC-12-47-1_load_1 + I + +585278+357998j VA + +596917+361240j VA + +592477+358996j VA + +585278 W + +596917 W + +592477 W + +357998 VAr + +361240 VAr + +358996 VAr + +0+0j A + +0+0j A + +0+0j A + +0 A + +0 A + +0 A + +0 A + +0 A + +0 A + +0+0j Ohm + +0+0j Ohm + +0+0j Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0+0j VA + +0+0j VA + +0+0j VA + +0 W + +0 W + +0 W + +0 VAr + +0 VAr + +0 VAr + +0+0j A + +0+0j A + +0+0j A + +0 A + +0 A + +0 A + +0 A + +0 A + +0 A + +0+0j Ohm + +0+0j Ohm + +0+0j Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0+0j VA + +0+0j VA + +0+0j VA + +0 W + +0 W + +0 W + +0 VAr + +0 VAr + +0 VAr + +0+0j A + +0+0j A + +0+0j A + +0 A + +0 A + +0 A + +0 A + +0 A + +0 A + +0+0j Ohm + +0+0j Ohm + +0+0j Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +286.631-0.106987d + +286.589-120.11d + +286.595+119.892d + +496.431+29.8891d + +496.388-90.1088d + +496.426+149.894d + FALSE + +0 VA + +0 VA + +0 VA + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + PQ + HASSOURCE + +0.00048 V + +286.631-0.106987d V + +286.589-120.11d V + +286.595+119.892d V + +496.431+29.8891d V + +496.388-90.1088d V + +496.426+149.894d V + +0+0j A + +0+0j A + +0+0j A + +585278+357998j VA + +596917+361240j VA + +592477+358996j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + GC-12-47-1_meter_1 + ABCN + +480 V + + + 11 + 4 + NEVER + GC-12-47-1_meter_2 + 2000-01-01 01:00:00 EST + GC-12-47-1_load_2 + I + +585278+357998j VA + +596917+361240j VA + +592477+358996j VA + +585278 W + +596917 W + +592477 W + +357998 VAr + +361240 VAr + +358996 VAr + +0+0j A + +0+0j A + +0+0j A + +0 A + +0 A + +0 A + +0 A + +0 A + +0 A + +0+0j Ohm + +0+0j Ohm + +0+0j Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0+0j VA + +0+0j VA + +0+0j VA + +0 W + +0 W + +0 W + +0 VAr + +0 VAr + +0 VAr + +0+0j A + +0+0j A + +0+0j A + +0 A + +0 A + +0 A + +0 A + +0 A + +0 A + +0+0j Ohm + +0+0j Ohm + +0+0j Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0+0j VA + +0+0j VA + +0+0j VA + +0 W + +0 W + +0 W + +0 VAr + +0 VAr + +0 VAr + +0+0j A + +0+0j A + +0+0j A + +0 A + +0 A + +0 A + +0 A + +0 A + +0 A + +0+0j Ohm + +0+0j Ohm + +0+0j Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +286.632-0.107008d + +286.59-120.11d + +286.596+119.892d + +496.431+29.8891d + +496.389-90.1088d + +496.426+149.894d + FALSE + +0 VA + +0 VA + +0 VA + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + PQ + HASSOURCE + +0.00048 V + +286.632-0.107008d V + +286.59-120.11d V + +286.596+119.892d V + +496.431+29.8891d V + +496.389-90.1088d V + +496.426+149.894d V + +0+0j A + +0+0j A + +0+0j A + +585278+357998j VA + +596917+361240j VA + +592477+358996j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + GC-12-47-1_meter_2 + ABCN + +480 V + + + 12 + 4 + NEVER + GC-12-47-1_meter_3 + 2000-01-01 01:00:00 EST + GC-12-47-1_load_3 + I + +585278+357998j VA + +596917+361240j VA + +592477+358996j VA + +585278 W + +596917 W + +592477 W + +357998 VAr + +361240 VAr + +358996 VAr + +0+0j A + +0+0j A + +0+0j A + +0 A + +0 A + +0 A + +0 A + +0 A + +0 A + +0+0j Ohm + +0+0j Ohm + +0+0j Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0+0j VA + +0+0j VA + +0+0j VA + +0 W + +0 W + +0 W + +0 VAr + +0 VAr + +0 VAr + +0+0j A + +0+0j A + +0+0j A + +0 A + +0 A + +0 A + +0 A + +0 A + +0 A + +0+0j Ohm + +0+0j Ohm + +0+0j Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0+0j VA + +0+0j VA + +0+0j VA + +0 W + +0 W + +0 W + +0 VAr + +0 VAr + +0 VAr + +0+0j A + +0+0j A + +0+0j A + +0 A + +0 A + +0 A + +0 A + +0 A + +0 A + +0+0j Ohm + +0+0j Ohm + +0+0j Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +0 Ohm + +286.63-0.108731d + +286.588-120.112d + +286.594+119.89d + +496.428+29.8874d + +496.386-90.1105d + +496.423+149.893d + FALSE + +0 VA + +0 VA + +0 VA + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +1 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + +0 pu + PQ + HASSOURCE + +0.00048 V + +286.63-0.108731d V + +286.588-120.112d V + +286.594+119.89d V + +496.428+29.8874d V + +496.386-90.1105d V + +496.423+149.893d V + +0+0j A + +0+0j A + +0+0j A + +585278+357998j VA + +596917+361240j VA + +592477+358996j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0+0j S + +0 s + IN_SERVICE + -1 + -1 min + +60 min + FALSE + GC-12-47-1_meter_3 + ABCN + +480 V + + + + + 1 + 0 + NEVER + 2000-01-01 00:00:00 EST + feeder_reg_cfg + WYE_WYE + +7500 V + +120 V + +30 s + +0 s + 16 + 16 + +0 pu + +0 pu + +0 V + +0 V + +0 V + +0 V + +0 V + +0 V + CBA + CBA + +0.1 + INDIVIDUAL + OUTPUT_VOLTAGE + LOCK_NONE + B + 0 + 0 + 0 + + + + link + + 0 + 1 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_reg_1 + feeder_reg_cfg + 6 + 6 + 6 + +6 + +6 + +6 + +0.0001 Ohm + CLOSED + GC-12-47-1_node_28 + GC-12-47-1_meter_4 + +5.34252e+006+3.25987e+006j VA + +6.25851e+006+31.3906d VA + +5.34249e+006 W + +23.3351-4.65661e-010j VA + +1.76184e+006+1.08222e+006j VA + +1.79706e+006+1.09221e+006j VA + +1.78362e+006+1.08544e+006j VA + +2.06767e+006+31.5606d VA + +2.10293e+006+31.2904d VA + +2.08793e+006+31.3232d VA + +7.64015-2.32831e-010j VA + +7.90365+0j VA + +7.79132-2.32831e-010j VA + +235.524-144.672j A + -246.577-135.043i A + +6.43778+279.055i A + +244.7-150.308j A + -256.184-140.304j A + +6.6886+289.927j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +1000 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + + powerflow_object + + + triplex_node + + + line + + + + 55 + 0 + NEVER + 2000-01-01 00:00:00 EST + (triplex_line_configuration:55) + triplex_4/0 AA + triplex_4/0 AA + triplex_4/0 AA + +0.08 in + +0.522 in + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + +0+0j Ohm/mile + + + + + 54 + 0 + NEVER + 2000-01-01 00:00:00 EST + triplex_4/0 AA + +0.48 Ohm/mile + +0.0158 ft + +202 A + +212.1 A + +202 A + +212.1 A + + + + link + + 45 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_switch_1 + CLOSED + CLOSED + CLOSED + BANKED + +0.0001 Ohm + CLOSED + GC-12-47-1_node_21 + GC-12-47-1_node_20 + +5.32633e+006+3.23617e+006j VA + +5.32632e+006+3.23619e+006j VA + +5.32632e+006 W + +11.6676-11.6676j VA + +1.75659e+006+1.07447e+006j VA + +1.79154e+006+1.08422e+006j VA + +1.7782e+006+1.07748e+006j VA + +1.75659e+006+1.07448e+006j VA + +1.79154e+006+1.08422e+006j VA + +1.7782e+006+1.07749e+006j VA + +3.82007-3.82007j VA + +3.95183-3.95183j VA + +3.89566-3.89566j VA + +235.524-144.672j A + -246.577-135.043j A + +6.43778+279.055j A + +235.524-144.672i A + -246.577-135.043i A + +6.43778+279.055i A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +1000 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 46 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_switch_2 + CLOSED + CLOSED + CLOSED + BANKED + +0.0001 Ohm + CLOSED + GC-12-47-1_node_22 + GC-12-47-1_node_23 + -1.32574e-007-1.32072e-007j VA + -1.32574e-007-1.32072e-007j VA + -1.32574e-007 W + +0+0j VA + -1.32574e-007-1.32072e-007j VA + -0+0j VA + +0+0j VA + -1.32574e-007-1.32072e-007j VA + -0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + -1.77636e-011+1.77636e-011j A + +0+0j A + +0+0j A + -1.77636e-011+1.77636e-011i A + +0+0i A + +0+0i A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CN|BN|AN + +0 s + +1000 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 47 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_switch_3 + CLOSED + CLOSED + CLOSED + BANKED + +0.0001 Ohm + CLOSED + GC-12-47-1_node_10 + GC-12-47-1_node_25 + +3.97723e-007+3.96216e-007j VA + +3.97723e-007+3.96216e-007j VA + +3.97723e-007 W + +0+0j VA + +3.97723e-007+3.96216e-007j VA + -0+0j VA + +0+0j VA + +3.97723e-007+3.96216e-007j VA + -0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +0+0j VA + +5.32907e-011-5.32907e-011j A + +0+0j A + +0+0j A + +5.32907e-011-5.32907e-011i A + +0+0i A + +0+0i A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CN|BN|AN + +0 s + +1000 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 48 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_switch_4 + CLOSED + CLOSED + CLOSED + BANKED + +0.0001 Ohm + CLOSED + GC-12-47-1_node_14 + GC-12-47-1_node_13 + +1.77534e+006+1.07865e+006j VA + +1.77534e+006+1.07865e+006j VA + +1.77534e+006 W + +1.29641-1.29641j VA + +585496+358133j VA + +597145+361381j VA + +592699+359136j VA + +585496+358133j VA + +597145+361381j VA + +592699+359137j VA + +0.424456-0.424456j VA + +0.439095-0.439095j VA + +0.432855-0.432855j VA + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +78.5074-48.2257i A + -82.1934-45.0127i A + +2.14781+93.0187i A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +1000 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + 49 + 2 + NEVER + 2000-01-01 01:00:00 EST + GC-12-47-1_switch_5 + CLOSED + CLOSED + CLOSED + BANKED + +0.0001 Ohm + CLOSED + GC-12-47-1_node_19 + GC-12-47-1_node_18 + +1.77539e+006+1.07871e+006j VA + +1.77538e+006+1.07871e+006j VA + +1.77538e+006 W + +1.29641-1.29641j VA + +585511+358153j VA + +597160+361401j VA + +592714+359156j VA + +585510+358153j VA + +597160+361402j VA + +592714+359157j VA + +0.424456-0.424456j VA + +0.439095-0.439095j VA + +0.432855-0.432855j VA + +78.5074-48.2257j A + -82.1934-45.0127j A + +2.14781+93.0187j A + +78.5074-48.2257i A + -82.1934-45.0127i A + +2.14781+93.0187i A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + +0+0j A + CF|BF|AF + +0 s + +1000 A + +2000 A + +0.0001 V + ABCN + +7200 V + + + + node + + + load + + + + + link + + + + + + + + + + + node + + + + + + + + + switch + + + switch + + + + + + + triplex_node + + + From 3b8123cbcc48ea882efef37bfe2ce7946db2c5a5 Mon Sep 17 00:00:00 2001 From: thuang Date: Tue, 20 Jun 2017 18:43:53 -0700 Subject: [PATCH 28/36] update the GC test feeder with building loads --- .../test/Test_GC_12_47_1_Feeder.java | 831 +++++++++++++++++- 1 file changed, 812 insertions(+), 19 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java index b9b4a94..2d33807 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java @@ -1,5 +1,6 @@ package org.ipss.threePhase.test; +import static com.interpss.core.funcImpl.AcscFunction.acscXfrAptr; import static org.junit.Assert.assertTrue; import java.io.File; @@ -19,11 +20,16 @@ import org.ipss.threePhase.basic.Branch3Phase; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.basic.Phase; import org.ipss.threePhase.basic.impl.Load3PhaseImpl; import org.ipss.threePhase.dataParser.opendss.OpenDSSDataParser; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.dynamic.algo.DynamicEventProcessor3Phase; +import org.ipss.threePhase.dynamic.model.InductionMotor3PhaseAdapter; +import org.ipss.threePhase.dynamic.model.impl.SinglePhaseACMotor; import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; +import org.ipss.threePhase.util.ThreePhaseAclfOutFunc; import org.ipss.threePhase.util.ThreePhaseObjectFactory; import org.junit.Test; import org.w3c.dom.Document; @@ -37,13 +43,20 @@ import com.interpss.core.aclf.AclfBus; import com.interpss.core.aclf.AclfGenCode; import com.interpss.core.aclf.AclfLoadCode; +import com.interpss.core.acsc.XfrConnectCode; +import com.interpss.core.acsc.adpter.AcscXformer; import com.interpss.core.net.NetworkType; import com.interpss.dstab.DStabGen; +import com.interpss.dstab.algo.DynamicSimuAlgorithm; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.cache.StateMonitor; +import com.interpss.dstab.cache.StateMonitor.DynDeviceType; +import com.interpss.dstab.dynLoad.InductionMotor; import com.interpss.dstab.mach.EConstMachine; import com.interpss.dstab.mach.MachineType; public class Test_GC_12_47_1_Feeder { - @Test + //@Test public void testPowerflow(){ IpssCorePlugin.init(); @@ -55,7 +68,7 @@ public void testPowerflow(){ e.printStackTrace(); } - System.out.println(net.net2String()); + //System.out.println(net.net2String()); DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); //distPFAlgo.orderDistributionBuses(true); @@ -68,6 +81,7 @@ public void testPowerflow(){ Vabc of bus -Bus3,0.99075 + j-0.07914 -0.56392 + j-0.81844 -0.42683 + j0.89759 Vabc of bus -Bus4,0.98834 + j-0.09907 -0.57997 + j-0.80639 -0.40837 + j0.90546 */ + for(AclfBus bus:net.getBusList()){ Bus3Phase bus3P = (Bus3Phase) bus; System.out.println("Vabc of bus -"+bus3P.getId()+","+bus3P.get3PhaseVotlages().toString()); @@ -76,6 +90,223 @@ public void testPowerflow(){ System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); } + //@Test + public void test3PhDynamic() throws InterpssException{ + + IpssCorePlugin.init(); + DStabNetwork3Phase net = null; + try { + net = createTestFeeder(12470,480,28,3,"",100.0); + } catch (InterpssException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // Add the dyanmic machine to the source Bus + //TODO The contributeGen has to be enter before running power flow, otherwise it will not be properly initialized + Bus3Phase node_28 = (Bus3Phase) net.getBus("node_28"); + + DStabGen constantGen = DStabObjectFactory.createDStabGen(); + constantGen.setId("Source"); + constantGen.setMvaBase(100); + constantGen.setPosGenZ(new Complex(0.0,0.05)); + constantGen.setNegGenZ(new Complex(0.0,0.05)); + constantGen.setZeroGenZ(new Complex(0.0,1.0E9)); + node_28.getContributeGenList().add(constantGen); + + + + EConstMachine mach = (EConstMachine)DStabObjectFactory. + createMachine("MachId", "MachName", MachineType.ECONSTANT, net, "node_28", "Source"); + + mach.setRating(100, UnitType.mVA, net.getBaseKva()); + mach.setRatedVoltage(12470); + mach.setH(500.0); + mach.setXd1(0.05); + //System.out.println(net.net2String()); + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); + //distPFAlgo.orderDistributionBuses(true); + + assertTrue(distPFAlgo.powerflow()); + + + for(AclfBus bus:net.getBusList()){ + Bus3Phase bus3P = (Bus3Phase) bus; + System.out.println("Vabc of bus -"+bus3P.getId()+","+bus3P.get3PhaseVotlages().toString()); + } + + //System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); + + + + DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm(net, IpssCorePlugin.getMsgHub()); + + + dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); + dstabAlgo.setSimuStepSec(0.005d); + dstabAlgo.setTotalSimuTimeSec(.005); + //dstabAlgo.setRefMachine(net.getMachine("Bus3-mach1")); + //distNet.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("150r", distNet, SimpleFaultCode.GROUND_LG,new Complex(0,0.0),new Complex(0,0.0), 0.5,0.07), "SLG@Bus1"); + + + StateMonitor sm = new StateMonitor(); + //sm.addGeneratorStdMonitor(new String[]{"Bus1-mach1","Bus2-mach1"}); + sm.addBusStdMonitor(new String[]{"node_7","node_8","node_9","node_28","node_27"}); + sm.add3PhaseBusStdMonitor(new String[]{"node_7","node_8","node_9","node_28","node_27"}); + +// for(String acMotorId: acMotorIds) +// sm.addDynDeviceMonitor(DynDeviceType.ACMotor, acMotorId); +// + // set the output handler + dstabAlgo.setSimuOutputHandler(sm); + dstabAlgo.setOutPutPerSteps(1); + + dstabAlgo.setDynamicEventHandler(new DynamicEventProcessor3Phase()); + + if(dstabAlgo.initialization()){ + System.out.println(ThreePhaseAclfOutFunc.busLfSummary(net)); + System.out.println(net.getMachineInitCondition()); + + for(String busId: sm.getBusPhAVoltTable().keySet()){ + + sm.addBusPhaseVoltageMonitorRecord( busId,dstabAlgo.getSimuTime(), ((Bus3Phase)net.getBus(busId)).get3PhaseVotlages()); + } + double vsag = 0.4; + //dstabAlgo.performSimulation(); + while(dstabAlgo.getSimuTime()<=dstabAlgo.getTotalSimuTimeSec()){ + + dstabAlgo.solveDEqnStep(true); + + for(String busId: sm.getBusPhAVoltTable().keySet()){ + + sm.addBusPhaseVoltageMonitorRecord( busId,dstabAlgo.getSimuTime(), ((Bus3Phase)net.getBus(busId)).get3PhaseVotlages()); + } + + + if(dstabAlgo.getSimuTime()>0.5 && dstabAlgo.getSimuTime()<0.5833){ + mach.setE(vsag); + } + else if (dstabAlgo.getSimuTime()>=0.6){ + mach.setE(1.0); + } + } + } + + System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); + } + + + @Test + public void test3PhDynamic_WithBuidingLoad() throws InterpssException{ + IpssCorePlugin.init(); + DStabNetwork3Phase net = null; + try { + net = createTestFeeder(12470,480,28,3,"",100.0); + } catch (InterpssException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // Add the dyanmic machine to the source Bus + //TODO The contributeGen has to be enter before running power flow, otherwise it will not be properly initialized + Bus3Phase node_28 = (Bus3Phase) net.getBus("node_28"); + + DStabGen constantGen = DStabObjectFactory.createDStabGen(); + constantGen.setId("Source"); + constantGen.setMvaBase(100); + constantGen.setPosGenZ(new Complex(0.0,0.05)); + constantGen.setNegGenZ(new Complex(0.0,0.05)); + constantGen.setZeroGenZ(new Complex(0.0,1.0E9)); + node_28.getContributeGenList().add(constantGen); + + + + EConstMachine mach = (EConstMachine)DStabObjectFactory. + createMachine("MachId", "MachName", MachineType.ECONSTANT, net, "node_28", "Source"); + + mach.setRating(100, UnitType.mVA, net.getBaseKva()); + mach.setRatedVoltage(12470); + mach.setH(500.0); + mach.setXd1(0.05); + //System.out.println(net.net2String()); + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); + //distPFAlgo.orderDistributionBuses(true); + + assertTrue(distPFAlgo.powerflow()); + + + for(AclfBus bus:net.getBusList()){ + Bus3Phase bus3P = (Bus3Phase) bus; + System.out.println("Vabc of bus -"+bus3P.getId()+","+bus3P.get3PhaseVotlages().toString()); + } + + //System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); + + + + DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm(net, IpssCorePlugin.getMsgHub()); + + + dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); + dstabAlgo.setSimuStepSec(0.005d); + dstabAlgo.setTotalSimuTimeSec(.1); + //dstabAlgo.setRefMachine(net.getMachine("Bus3-mach1")); + //distNet.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("150r", distNet, SimpleFaultCode.GROUND_LG,new Complex(0,0.0),new Complex(0,0.0), 0.5,0.07), "SLG@Bus1"); + + + StateMonitor sm = new StateMonitor(); + //sm.addGeneratorStdMonitor(new String[]{"Bus1-mach1","Bus2-mach1"}); + sm.addBusStdMonitor(new String[]{"node_7","node_8","node_9","node_28","node_27"}); + sm.add3PhaseBusStdMonitor(new String[]{"node_7","node_8","node_9","node_28","node_27"}); + +// for(String acMotorId: acMotorIds) +// sm.addDynDeviceMonitor(DynDeviceType.ACMotor, acMotorId); +// + // set the output handler + dstabAlgo.setSimuOutputHandler(sm); + dstabAlgo.setOutPutPerSteps(1); + + dstabAlgo.setDynamicEventHandler(new DynamicEventProcessor3Phase()); + + if(dstabAlgo.initialization()){ + System.out.println(ThreePhaseAclfOutFunc.busLfSummary(net)); + System.out.println(net.getMachineInitCondition()); + + for(String busId: sm.getBusPhAVoltTable().keySet()){ + + sm.addBusPhaseVoltageMonitorRecord( busId,dstabAlgo.getSimuTime(), ((Bus3Phase)net.getBus(busId)).get3PhaseVotlages()); + } + double vsag = 0.4; + //dstabAlgo.performSimulation(); + while(dstabAlgo.getSimuTime()<=dstabAlgo.getTotalSimuTimeSec()){ + + dstabAlgo.solveDEqnStep(true); + + for(String busId: sm.getBusPhAVoltTable().keySet()){ + + sm.addBusPhaseVoltageMonitorRecord( busId,dstabAlgo.getSimuTime(), ((Bus3Phase)net.getBus(busId)).get3PhaseVotlages()); + } + + + if(dstabAlgo.getSimuTime()>0.5 && dstabAlgo.getSimuTime()<0.5833){ + mach.setE(vsag); + } + else if (dstabAlgo.getSimuTime()>=0.6){ + mach.setE(1.0); + } + } + } + + System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); + } + + private DStabNetwork3Phase createTestFeeder(double primaryVolt, double secondaryVolt, int busNum, int loadNum, String feederPrefix, double mvaBase) throws InterpssException{ DStabNetwork3Phase net = ThreePhaseObjectFactory.create3PhaseDStabNetwork(); net.setNetworkType(NetworkType.DISTRIBUTION); @@ -107,9 +338,9 @@ private DStabNetwork3Phase createTestFeeder(double primaryVolt, double secondary from_node = eElement.getElementsByTagName("from_node").item(0).getTextContent(); to_node = eElement.getElementsByTagName("to_node").item(0).getTextContent(); - System.out.println("from node : " + from_node); - System.out.println("to node : " + to_node); - System.out.println("b_matrix : "); +// System.out.println("from node : " + from_node); +// System.out.println("to node : " + to_node); +// System.out.println("b_matrix : "); NodeList bMatrixList = eElement.getElementsByTagName("b_matrix").item(0).getChildNodes(); @@ -135,13 +366,15 @@ private DStabNetwork3Phase createTestFeeder(double primaryVolt, double secondary else{ String[] zstrAry = zstr.split("\\-"); re = Double.valueOf(zstrAry[0]); - im = Double.valueOf(zstrAry[1]); + im = -Double.valueOf(zstrAry[1]); } Complex zmn = new Complex(re,im); - System.out.println(m+","+n+","+zstr0+","+zmn.toString()); + bMatrixAry[m][n] = zmn; + // System.out.println(m+","+n+","+zstr0+","+zmn.toString()); + n++; if(n==3){ n=0; @@ -216,23 +449,25 @@ private DStabNetwork3Phase createTestFeeder(double primaryVolt, double secondary bus.setAttributes("feeder bus "+i, ""); bus.setBaseVoltage(primaryVolt); // set the bus to a non-generator bus - bus.setGenCode(AclfGenCode.GEN_PQ); + bus.setGenCode(AclfGenCode.NON_GEN); // set the bus to a constant power load bus - bus.setLoadCode(AclfLoadCode.CONST_P); + bus.setLoadCode(AclfLoadCode.NON_LOAD); //capacitor if(i ==21){ Load3Phase Shuntload = new Load3PhaseImpl(); + Complex3x1 shuntY = new Complex3x1(new Complex(0,-600),new Complex(0.0,-600),new Complex(0.0,-600)); Shuntload.set3PhaseLoad(shuntY); - bus.getThreePhaseLoadList().add(Shuntload); + // not used in GridLAB-D +// bus.getThreePhaseLoadList().add(Shuntload); } // source bus if(i ==28){ bus.setGenCode(AclfGenCode.SWING); - bus.setVoltage(1.0, 0.0); + bus.setVoltage(new Complex(1.0, 0.0)); // DStabGen constantGen = DStabObjectFactory.createDStabGen(); // constantGen.setId("Source"); @@ -240,14 +475,14 @@ private DStabNetwork3Phase createTestFeeder(double primaryVolt, double secondary // constantGen.setPosGenZ(new Complex(0.0,0.05)); // constantGen.setNegGenZ(new Complex(0.0,0.05)); // constantGen.setZeroGenZ(new Complex(0.0,0.05)); -// bus1.getContributeGenList().add(constantGen); +// bus.getContributeGenList().add(constantGen); // // // EConstMachine mach = (EConstMachine)DStabObjectFactory. // createMachine("MachId", "MachName", MachineType.ECONSTANT, net, "Bus1", "Source"); - // +// // mach.setRating(100, UnitType.mVA, net.getBaseKva()); -// mach.setRatedVoltage(baseVolt); +// mach.setRatedVoltage(primaryVolt); // mach.setH(50000.0); // mach.setXd1(0.05); } @@ -260,7 +495,7 @@ private DStabNetwork3Phase createTestFeeder(double primaryVolt, double secondary bus.setAttributes("load bus "+i, ""); bus.setBaseVoltage(secondaryVolt); // set the bus to a non-generator bus - bus.setGenCode(AclfGenCode.GEN_PQ); + bus.setGenCode(AclfGenCode.NON_GEN); // set the bus to a constant power load bus bus.setLoadCode(AclfLoadCode.CONST_P); @@ -319,7 +554,7 @@ private DStabNetwork3Phase createTestFeeder(double primaryVolt, double secondary // the regulator bus Bus3Phase bus = ThreePhaseObjectFactory.create3PDStabBus("meter_"+(loadNum+1), net); - bus.setAttributes("meter bus "+1, ""); + bus.setAttributes("meter bus "+(loadNum+1), ""); bus.setBaseVoltage(primaryVolt); // set the bus to a non-generator bus bus.setGenCode(AclfGenCode.NON_GEN); @@ -339,7 +574,7 @@ private DStabNetwork3Phase createTestFeeder(double primaryVolt, double secondary if(fuseList.contains(lineNode)||switchList.contains(lineNode) || lineNode.equals("meter_4:node_27")){ //(Complex selfZorY, Complex mutualZorY) - line.setZabc(new Complex3x3(new Complex(0.0001,0), new Complex(0))); + line.setZabc(new Complex3x3(new Complex(0.001,0), new Complex(0))); } else{ // under_ground line @@ -376,11 +611,16 @@ else if(lineZTable.containsKey(reverseID)){ if(xfrNode.equals("meter_4:node_28")){ // regulator - + double tap = 1.00; xfr.setFromTurnRatio(primaryVolt); + xfr.setToTurnRatio(primaryVolt*tap); - xfr.setZ(new Complex(0.0001)); + xfr.setZ(new Complex(0,0.001)); xfr.setXfrRatedKVA(3000.0); + + AcscXformer xfr0 = acscXfrAptr.apply(xfr); + xfr0.setFromConnectGroundZ(XfrConnectCode.WYE_SOLID_GROUNDED, new Complex(0.0,0.0), UnitType.PU); + xfr0.setToConnectGroundZ(XfrConnectCode.WYE_SOLID_GROUNDED, new Complex(0.0,0.0), UnitType.PU); } else{ // step-down transformers for connecting loads @@ -397,10 +637,25 @@ else if(lineZTable.containsKey(reverseID)){ xfr.setZ(z); xfr.setXfrRatedKVA(3000.0); + AcscXformer xfr0 = acscXfrAptr.apply(xfr); + xfr0.setFromConnectGroundZ(XfrConnectCode.WYE_SOLID_GROUNDED, new Complex(0.0,0.0), UnitType.PU); + xfr0.setToConnectGroundZ(XfrConnectCode.WYE_SOLID_GROUNDED, new Complex(0.0,0.0), UnitType.PU); + } } + + // add building motor models + try { +// addLargeOffice(net,"meter_1",1,3000.0, 80.0); + addSmallOffice(net,"meter_2",3,300.0, 70.0); + addHotel(net,"meter_3",1,2000.0, 75.0); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } // use the OpenDSSDataParser to convert the system parameter to p.u. OpenDSSDataParser parser = new OpenDSSDataParser(); @@ -410,5 +665,543 @@ else if(lineZTable.containsKey(reverseID)){ return net; } + + private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildingNum, double totalKW, double indMotorPercent) throws Exception{ + boolean flag = true; + + double kvaBase = net.getBaseKva(); + + double totalBuildingLoad = totalKW*buildingNum; + + double totalMotorKW = totalKW*indMotorPercent/100.0; + + // double totalBuildingLoadPU = totalKW/kvaBase; + + Bus3Phase bus3p = (Bus3Phase) net.getBus(busId); + + Complex sumOfBusLoad = new Complex(0,0); + + if(bus3p==null){ + throw new Exception("The bus is not found with ID: "+ busId); + + } + + + // if the bus is a load bus + // if the total power is larger than totalKW*buildingNum + // subtract the totalKW*buildingNum from the load + + // else, rescale the bus load to meet the new total load + if(bus3p.isLoad() || bus3p.getThreePhaseLoadList().size()>0){ + + for(Load3Phase ld3P: bus3p.getThreePhaseLoadList()){ + Complex loadPQ = ld3P.getInit3PhaseTotalLoad(); + sumOfBusLoad = sumOfBusLoad.add(loadPQ); + } + + if(sumOfBusLoad.getReal()0){ + + for(Load3Phase ld3P: bus3p.getThreePhaseLoadList()){ + //NOTE, this is for SI input + Complex loadPQ = ld3P.getInit3PhaseTotalLoad(); + sumOfBusLoad = sumOfBusLoad.add(loadPQ); + } + + if(sumOfBusLoad.getReal()0){ + + for(Load3Phase ld3P: bus3p.getThreePhaseLoadList()){ + Complex loadPQ = ld3P.getInit3PhaseTotalLoad(); + sumOfBusLoad = sumOfBusLoad.add(loadPQ); + } + + if(sumOfBusLoad.getReal() Date: Wed, 21 Jun 2017 09:39:03 -0700 Subject: [PATCH 29/36] added 3phase motor protections to GC feeder --- .../test/Test_GC_12_47_1_Feeder.java | 209 +++++++++++++++++- 1 file changed, 207 insertions(+), 2 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java index 2d33807..e24d682 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java @@ -16,6 +16,7 @@ import org.interpss.IpssCorePlugin; import org.interpss.numeric.datatype.Complex3x1; import org.interpss.numeric.datatype.Complex3x3; +import org.interpss.numeric.datatype.Point; import org.interpss.numeric.datatype.Unit.UnitType; import org.ipss.threePhase.basic.Branch3Phase; import org.ipss.threePhase.basic.Bus3Phase; @@ -52,6 +53,11 @@ import com.interpss.dstab.cache.StateMonitor; import com.interpss.dstab.cache.StateMonitor.DynDeviceType; import com.interpss.dstab.dynLoad.InductionMotor; +import com.interpss.dstab.dynLoad.impl.MotorContactorControl; +import com.interpss.dstab.dynLoad.impl.MotorEMSControl; +import com.interpss.dstab.dynLoad.impl.MotorElectronicRelayProtection; +import com.interpss.dstab.dynLoad.impl.MotorOverLoadProtection; +import com.interpss.dstab.dynLoad.impl.MotorThermalProtection; import com.interpss.dstab.mach.EConstMachine; import com.interpss.dstab.mach.MachineType; @@ -648,7 +654,7 @@ else if(lineZTable.containsKey(reverseID)){ // add building motor models try { -// addLargeOffice(net,"meter_1",1,3000.0, 80.0); + addLargeOffice(net,"meter_1",1,3000.0, 80.0); addSmallOffice(net,"meter_2",3,300.0, 70.0); addHotel(net,"meter_3",1,2000.0, 75.0); @@ -830,7 +836,74 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin throw new Error("motor type must be among [1, 2, 3, 4]"); } - + + // add the motor protections and controls + if(motorProtectionType[j].contains("1")){ + //create electronic relay and add it to the list + MotorElectronicRelayProtection eleRelay = new MotorElectronicRelayProtection(indMotor); + eleRelay.getTripVoltTimeCurve().getPoints().add(new Point(0.05,0.7)); // x-axis is time, y-axis is voltage + + eleRelay.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,0.95)); // x-axis is time, y-axis is voltage + indMotor.getProtectionControlList().add(eleRelay); + + } + if(motorProtectionType[j].contains("2")){ + + MotorOverLoadProtection olProtection = new MotorOverLoadProtection(indMotor); + olProtection.getTripVoltTimeCurve().getPoints().add(new Point(0.33,0.6)); // x-axis is time, y-axis is voltage + olProtection.getTripVoltTimeCurve().getPoints().add(new Point(0.5, 0.7)); // x-axis is time, y-axis is voltage + olProtection.getTripVoltTimeCurve().getPoints().add(new Point(1.0, 0.8)); // x-axis is time, y-axis is voltage + //olProtection.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,1.0)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(olProtection); + + } + if(motorProtectionType[j].contains("3")){ + + MotorThermalProtection thermalProtection = new MotorThermalProtection(indMotor); + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(0.5,0.55)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(1.0, 0.6)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(2.0, 0.65)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(4.0, 0.7)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(8.0, 0.75)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(10.0, 0.8)); // x-axis is time, y-axis is voltage + //olProtection.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,1.0)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(thermalProtection); + + } + if(motorProtectionType[j].contains("4")){ + + MotorContactorControl contactor = new MotorContactorControl(indMotor); + + contactor.getTripVoltTimeCurve().getPoints().add(new Point(0.083,0.55)); // x-axis is time, y-axis is voltage + + + contactor.getReconnectVoltTimeCurve().getPoints().add(new Point(0.1,0.7)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(contactor); + + + } + if(motorProtectionType[j].contains("5")){ + + MotorEMSControl ems = new MotorEMSControl(indMotor); + + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.083,0.0)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.1,0.4)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.166, 0.5)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.25, 0.6)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.5, 0.7)); // x-axis is time, y-axis is voltage + + + + ems.getReconnectVoltTimeCurve().getPoints().add(new Point(2.0,0.95)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(ems); + + } + + // apply the motor adapter InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); indMotor3Phase.setLoadPercent(motorkW/sumOfBusLoad.getReal()); bus3p.getThreePhaseDynLoadList().add(indMotor3Phase); @@ -1005,6 +1078,72 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin throw new Error("motor type must be among [1, 2, 3, 4]"); } + + // add the motor protections and controls + if(motorProtectionType[j].contains("1")){ + //create electronic relay and add it to the list + MotorElectronicRelayProtection eleRelay = new MotorElectronicRelayProtection(indMotor); + eleRelay.getTripVoltTimeCurve().getPoints().add(new Point(0.05,0.7)); // x-axis is time, y-axis is voltage + + eleRelay.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,0.95)); // x-axis is time, y-axis is voltage + indMotor.getProtectionControlList().add(eleRelay); + + } + if(motorProtectionType[j].contains("2")){ + + MotorOverLoadProtection olProtection = new MotorOverLoadProtection(indMotor); + olProtection.getTripVoltTimeCurve().getPoints().add(new Point(0.33,0.6)); // x-axis is time, y-axis is voltage + olProtection.getTripVoltTimeCurve().getPoints().add(new Point(0.5, 0.7)); // x-axis is time, y-axis is voltage + olProtection.getTripVoltTimeCurve().getPoints().add(new Point(1.0, 0.8)); // x-axis is time, y-axis is voltage + //olProtection.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,1.0)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(olProtection); + + } + if(motorProtectionType[j].contains("3")){ + + MotorThermalProtection thermalProtection = new MotorThermalProtection(indMotor); + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(0.5,0.55)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(1.0, 0.6)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(2.0, 0.65)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(4.0, 0.7)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(8.0, 0.75)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(10.0, 0.8)); // x-axis is time, y-axis is voltage + //olProtection.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,1.0)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(thermalProtection); + + } + if(motorProtectionType[j].contains("4")){ + + MotorContactorControl contactor = new MotorContactorControl(indMotor); + + contactor.getTripVoltTimeCurve().getPoints().add(new Point(0.083,0.55)); // x-axis is time, y-axis is voltage + + + contactor.getReconnectVoltTimeCurve().getPoints().add(new Point(0.1,0.7)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(contactor); + + + } + if(motorProtectionType[j].contains("5")){ + + MotorEMSControl ems = new MotorEMSControl(indMotor); + + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.083,0.0)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.1,0.4)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.166, 0.5)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.25, 0.6)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.5, 0.7)); // x-axis is time, y-axis is voltage + + + + ems.getReconnectVoltTimeCurve().getPoints().add(new Point(2.0,0.95)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(ems); + + } InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); indMotor3Phase.setLoadPercent(motorkW/sumOfBusLoad.getReal()); @@ -1178,6 +1317,72 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, throw new Error("motor type must be among [1, 2, 3, 4]"); } + + // add the motor protections and controls + if(motorProtectionType[j].contains("1")){ + //create electronic relay and add it to the list + MotorElectronicRelayProtection eleRelay = new MotorElectronicRelayProtection(indMotor); + eleRelay.getTripVoltTimeCurve().getPoints().add(new Point(0.05,0.7)); // x-axis is time, y-axis is voltage + + eleRelay.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,0.95)); // x-axis is time, y-axis is voltage + indMotor.getProtectionControlList().add(eleRelay); + + } + if(motorProtectionType[j].contains("2")){ + + MotorOverLoadProtection olProtection = new MotorOverLoadProtection(indMotor); + olProtection.getTripVoltTimeCurve().getPoints().add(new Point(0.33,0.6)); // x-axis is time, y-axis is voltage + olProtection.getTripVoltTimeCurve().getPoints().add(new Point(0.5, 0.7)); // x-axis is time, y-axis is voltage + olProtection.getTripVoltTimeCurve().getPoints().add(new Point(1.0, 0.8)); // x-axis is time, y-axis is voltage + //olProtection.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,1.0)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(olProtection); + + } + if(motorProtectionType[j].contains("3")){ + + MotorThermalProtection thermalProtection = new MotorThermalProtection(indMotor); + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(0.5,0.55)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(1.0, 0.6)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(2.0, 0.65)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(4.0, 0.7)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(8.0, 0.75)); // x-axis is time, y-axis is voltage + thermalProtection.getTripVoltTimeCurve().getPoints().add(new Point(10.0, 0.8)); // x-axis is time, y-axis is voltage + //olProtection.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,1.0)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(thermalProtection); + + } + if(motorProtectionType[j].contains("4")){ + + MotorContactorControl contactor = new MotorContactorControl(indMotor); + + contactor.getTripVoltTimeCurve().getPoints().add(new Point(0.083,0.55)); // x-axis is time, y-axis is voltage + + + contactor.getReconnectVoltTimeCurve().getPoints().add(new Point(0.1,0.7)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(contactor); + + + } + if(motorProtectionType[j].contains("5")){ + + MotorEMSControl ems = new MotorEMSControl(indMotor); + + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.083,0.0)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.1,0.4)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.166, 0.5)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.25, 0.6)); // x-axis is time, y-axis is voltage + ems.getTripVoltTimeCurve().getPoints().add(new Point(0.5, 0.7)); // x-axis is time, y-axis is voltage + + + + ems.getReconnectVoltTimeCurve().getPoints().add(new Point(2.0,0.95)); // x-axis is time, y-axis is voltage + + indMotor.getProtectionControlList().add(ems); + + } InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); indMotor3Phase.setLoadPercent(motorkW/sumOfBusLoad.getReal()); From af48d89fea634e2ceb2173b8c6c25385b27c2b7d Mon Sep 17 00:00:00 2001 From: thuang Date: Wed, 21 Jun 2017 14:27:05 -0700 Subject: [PATCH 30/36] fixed the motor id naming bug --- .../test/Test_GC_12_47_1_Feeder.java | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java index e24d682..8fee78e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java @@ -26,6 +26,7 @@ import org.ipss.threePhase.dataParser.opendss.OpenDSSDataParser; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; import org.ipss.threePhase.dynamic.algo.DynamicEventProcessor3Phase; +import org.ipss.threePhase.dynamic.model.DynLoadModel3Phase; import org.ipss.threePhase.dynamic.model.InductionMotor3PhaseAdapter; import org.ipss.threePhase.dynamic.model.impl.SinglePhaseACMotor; import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; @@ -269,6 +270,17 @@ public void test3PhDynamic_WithBuidingLoad() throws InterpssException{ sm.addBusStdMonitor(new String[]{"node_7","node_8","node_9","node_28","node_27"}); sm.add3PhaseBusStdMonitor(new String[]{"node_7","node_8","node_9","node_28","node_27"}); + String[] motorBuses = {"meter_1","meter_2","meter_3"}; + List motorIds = new ArrayList<>(); + for(int i = 0; i=0.6){ System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); + System.out.println(sm.toCSVString(sm.getMotorPTable())); + System.out.println(sm.toCSVString(sm.getMotorFuvTable())); } @@ -773,7 +787,7 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin double acmotorbase = totalMotorKW /1000.0*motorLoadPercent[j]/100.0/0.8/3; // assuming 0.8 loading factor - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, bus3p.getId()+"_largeOffice_"+buildingNum+"_"+motorName[j]+"_A"); + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, bus3p.getId()+"_largeOffice_"+i+"_"+motorName[j]+"_A"); ac1.setLoadPercent(motorLoadPercent[j]); ac1.setPhase(Phase.A); ac1.setMVABase(acmotorbase); @@ -781,7 +795,7 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_largeOffice_"+buildingNum+"_"+motorName[j]+"_B"); + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_largeOffice_"+i+"_"+motorName[j]+"_B"); ac2.setLoadPercent(motorLoadPercent[j]); ac2.setPhase(Phase.B); ac2.setMVABase(acmotorbase); @@ -797,7 +811,7 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin } else{ - InductionMotor indMotor= DStabObjectFactory.createInductionMotor(bus3p.getId()+"_largeOffice_"+buildingNum+"_"+motorName[j]); + InductionMotor indMotor= DStabObjectFactory.createInductionMotor(bus3p.getId()+"_largeOffice_"+i+"_"+motorName[j]); indMotor.setDStabBus(bus3p); indMotor.setXm(3.0); @@ -1014,7 +1028,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin double acmotorbase = totalMotorKW /1000.0*motorLoadPercent[j]/100.0/0.8/3; // assuming 0.8 loading factor - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, bus3p.getId()+"_smallOffice_"+buildingNum+"_"+motorName[j]+"_A"); + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, bus3p.getId()+"_smallOffice_"+i+"_"+motorName[j]+"_A"); ac1.setLoadPercent(motorLoadPercent[j]); ac1.setPhase(Phase.A); ac1.setMVABase(acmotorbase); @@ -1022,7 +1036,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_smallOffice_"+buildingNum+"_"+motorName[j]+"_B"); + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_smallOffice_"+i+"_"+motorName[j]+"_B"); ac2.setLoadPercent(motorLoadPercent[j]); ac2.setPhase(Phase.B); ac2.setMVABase(acmotorbase); @@ -1030,7 +1044,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin - SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_smallOffice_"+buildingNum+"_"+motorName[j]+"_C"); + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_smallOffice_"+i+"_"+motorName[j]+"_C"); ac3.setLoadPercent(motorLoadPercent[j]); ac3.setPhase(Phase.C); ac3.setMVABase(acmotorbase); @@ -1038,7 +1052,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin } else{ - InductionMotor indMotor= DStabObjectFactory.createInductionMotor(bus3p.getId()+"_smallOffice_"+buildingNum+"_"+motorName[j]); + InductionMotor indMotor= DStabObjectFactory.createInductionMotor(bus3p.getId()+"_smallOffice_"+i+"_"+motorName[j]); indMotor.setDStabBus(bus3p); indMotor.setXm(3.0); @@ -1254,7 +1268,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, double acmotorbase = totalMotorKW /1000.0*motorLoadPercent[j]/100.0/0.8/3; // assuming 0.8 loading factor - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, bus3p.getId()+"_hotel_"+buildingNum+"_"+motorName[j]+"_A"); + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, bus3p.getId()+"_hotel_"+i+"_"+motorName[j]+"_A"); ac1.setLoadPercent(motorLoadPercent[j]); ac1.setPhase(Phase.A); ac1.setMVABase(acmotorbase); @@ -1262,7 +1276,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_hotel_"+buildingNum+"_"+motorName[j]+"_B"); + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_hotel_"+i+"_"+motorName[j]+"_B"); ac2.setLoadPercent(motorLoadPercent[j]); ac2.setPhase(Phase.B); ac2.setMVABase(acmotorbase); @@ -1270,7 +1284,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, - SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_hotel_"+buildingNum+"_"+motorName[j]+"_C"); + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_hotel_"+i+"_"+motorName[j]+"_C"); ac3.setLoadPercent(motorLoadPercent[j]); ac3.setPhase(Phase.C); ac3.setMVABase(acmotorbase); @@ -1278,7 +1292,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, } else{ - InductionMotor indMotor= DStabObjectFactory.createInductionMotor(bus3p.getId()+"_hotel_"+buildingNum+"_"+motorName[j]); + InductionMotor indMotor= DStabObjectFactory.createInductionMotor(bus3p.getId()+"_hotel_"+i+"_"+motorName[j]); indMotor.setDStabBus(bus3p); indMotor.setXm(3.0); From 52145ff8b10c7e141618c5d16c14d21b5f92a83b Mon Sep 17 00:00:00 2001 From: thuang Date: Wed, 21 Jun 2017 14:49:37 -0700 Subject: [PATCH 31/36] Load3Phase initial 3phase total load --- .../src/org/ipss/threePhase/basic/Load3Phase.java | 2 ++ .../src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java | 6 ++++++ .../dynamic/model/InductionMotor3PhaseAdapter.java | 4 ++++ .../src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java | 2 +- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java index 2e18d4d..21199b8 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load3Phase.java @@ -24,6 +24,8 @@ public interface Load3Phase extends Load1Phase { public Complex3x1 getInit3PhaseLoad(); + public Complex getInit3PhaseTotalLoad(); + public Complex3x1 get3PhaseLoad(Complex3x1 vabc); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java index ec7d623..14426e0 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java @@ -177,6 +177,12 @@ else if(this.code==AclfLoadCode.CONST_Z){ return equivCurInj = loadPQ.divide(vabc).conjugate().multiply(-1.0); } + @Override + public Complex getInit3PhaseTotalLoad() { + + return ph3Load.a_0.add(ph3Load.b_1).add(ph3Load.c_2); + } + diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java index c98edb2..300dceb 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java @@ -170,5 +170,9 @@ public Hashtable getStates(Object ref) { return this.indMotor.getStates(ref); } + + @Override public String getExtendedDeviceId(){ + return this.indMotor.getExtendedDeviceId(); + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java index 24bbd02..daaaa03 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE_13BusFeeder_Test.java @@ -127,7 +127,7 @@ public void test_ieee13feeder_dstab() throws InterpssException{ System.out.println(sm.toCSVString(sm.getBusAngleTable())); System.out.println(sm.toCSVString(sm.getBusVoltTable())); - MonitorRecord rec1 = sm.getBusVoltTable().get("Bus684").get(1); + MonitorRecord rec1 = sm.getBusVoltTable().get("Bus684").get(0); MonitorRecord rec20 = sm.getBusVoltTable().get("Bus684").get(20); assertTrue(Math.abs(rec1.getValue()-rec20.getValue())<1.0E-4); From 382f974b294f0b290ad5f5ca82dd75011dc51485 Mon Sep 17 00:00:00 2001 From: thuang Date: Sun, 25 Jun 2017 19:33:02 -0700 Subject: [PATCH 32/36] fixed a bug related to using adapter to create 3p dyn loads --- .../dynamic/impl/DStabNetwork3phaseImpl.java | 105 ++- .../model/InductionMotor3PhaseAdapter.java | 9 + .../test/IEEE123Feeder_Dstab_Test.java | 7 +- .../test/Test3PhaseInductionMotor.java | 12 +- .../test/TestSinglePhaseACMotorModel.java | 663 +++++++++--------- .../test/Test_GC_12_47_1_Feeder.java | 156 +++-- .../util/ThreePhaseUtilFunction.java | 8 + 7 files changed, 555 insertions(+), 405 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java index f71671f..31df683 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java @@ -2,6 +2,7 @@ import static com.interpss.common.util.IpssLogger.ipssLogger; import static org.ipss.threePhase.util.ThreePhaseUtilFunction.threePhaseGenAptr; +import static org.ipss.threePhase.util.ThreePhaseUtilFunction.threePhaseInductionMotorAptr; import java.util.Hashtable; import java.util.LinkedList; @@ -39,7 +40,9 @@ import com.interpss.core.sparse.impl.SparseEqnComplexMatrix3x3Impl; import com.interpss.dstab.DStabBus; import com.interpss.dstab.DStabGen; +import com.interpss.dstab.device.DynamicBusDevice; import com.interpss.dstab.dynLoad.DynLoadModel; +import com.interpss.dstab.dynLoad.InductionMotor; import com.interpss.dstab.impl.DStabilityNetworkImpl; public class DStabNetwork3phaseImpl extends DStabilityNetworkImpl implements DStabNetwork3Phase { @@ -296,13 +299,31 @@ public ISparseEqnComplexMatrix3x3 formYMatrixABC() throws Exception { Complex3x3 threePhasedynLoadEquivY = new Complex3x3(); //TODO process three-phase dynamic loads - if(bus3p.getThreePhaseDynLoadList().size()>0){ - - for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ - if(load3p.isActive()){ - threePhasedynLoadEquivY = threePhasedynLoadEquivY.add(load3p.getEquivYabc()); - } - } +// if(bus3p.getThreePhaseDynLoadList().size()>0){ +// +// for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ +// if(load3p.isActive()){ +// threePhasedynLoadEquivY = threePhasedynLoadEquivY.add(load3p.getEquivYabc()); +// } +// } +// } + + for(DynamicBusDevice dynDevice: bus.getDynamicBusDeviceList()){ + if(dynDevice instanceof InductionMotor ){ + DynLoadModel3Phase dynLoad3P = threePhaseInductionMotorAptr.apply((InductionMotor) dynDevice); + if(dynLoad3P.isActive()){ + //dynLoad3P.initStates(); + threePhasedynLoadEquivY = threePhasedynLoadEquivY.add(dynLoad3P.getEquivYabc()); + } + } + else if (dynDevice instanceof DynLoadModel3Phase){ + DynLoadModel3Phase dynLoad3P = (DynLoadModel3Phase) dynDevice; + if(dynLoad3P.isActive()){ + //dynLoad3P.initStates(); + threePhasedynLoadEquivY = threePhasedynLoadEquivY.add(dynLoad3P.getEquivYabc()); + } + } + } //TODO process 1-phase dynamic loads on each phase @@ -474,13 +495,32 @@ public boolean solveNetEqn() { //TODO three-phase dynamic loads - if(bus3p.getThreePhaseDynLoadList().size()>0){ - for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ - if(load3p.isActive()){ - iInject = iInject.add(load3p.getISource3Phase()); - } - } - } +// if(bus3p.getThreePhaseDynLoadList().size()>0){ +// for(DynLoadModel3Phase load3p:bus3p.getThreePhaseDynLoadList()){ +// if(load3p.isActive()){ +// iInject = iInject.add(load3p.getISource3Phase()); +// } +// } +// } + + for(DynamicBusDevice dynDevice: bus.getDynamicBusDeviceList()){ + if(dynDevice.isActive()){ + if(dynDevice instanceof InductionMotor ){ + DynLoadModel3Phase dynLoad3P = threePhaseInductionMotorAptr.apply((InductionMotor) dynDevice); + iInject = iInject.add(dynLoad3P.getISource3Phase()); + + } + else if (dynDevice instanceof DynLoadModel3Phase){ + DynLoadModel3Phase dynLoad3P = (DynLoadModel3Phase) dynDevice; + + iInject = iInject.add(dynLoad3P.getISource3Phase()); + + } + } + + } + + } if(iInject == null){ @@ -603,6 +643,7 @@ public boolean initDStabNet() { double totalDynLoadPercent = 0; Complex totalPosSeqDynLoadPQ = new Complex(0,0); + if( b.getDynLoadModelList().size()>0){ for(DynLoadModel load:bus.getDynLoadModelList()){ if(load.isActive()){ @@ -678,12 +719,31 @@ public boolean initDStabNet() { } - for(DynLoadModel3Phase dynLoad3P : bus.getThreePhaseDynLoadList()){ - if(dynLoad3P.isActive()){ - dynLoad3P.initStates(); - total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add(dynLoad3P.getInitLoadPQ3Phase()); +// for(DynLoadModel3Phase dynLoad3P : bus.getThreePhaseDynLoadList()){ +// if(dynLoad3P.isActive()){ +// dynLoad3P.initStates(); +// total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add(dynLoad3P.getInitLoadPQ3Phase()); +// } +// } + + //TODO comment out the threePhaesDynLoadList above to avoid double counting, as all the dynamic load models are already in the DynamicBusDeviceList() + for(DynamicBusDevice dynDevice: bus.getDynamicBusDeviceList()){ + if(dynDevice instanceof InductionMotor ){ + DynLoadModel3Phase dynLoad3P = threePhaseInductionMotorAptr.apply((InductionMotor) dynDevice); + if(dynLoad3P.isActive()){ + dynLoad3P.initStates(); + total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add(dynLoad3P.getInitLoadPQ3Phase()); + } + } + else if (dynDevice instanceof DynLoadModel3Phase){ + DynLoadModel3Phase dynLoad3P = (DynLoadModel3Phase) dynDevice; + if(dynLoad3P.isActive()){ + dynLoad3P.initStates(); + total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add(dynLoad3P.getInitLoadPQ3Phase()); + } } - } + + } // sum up the 1-phase and 3-phase dynamic loads total3PhaseDynLoadPQ = total3PhaseDynLoadPQ.add( @@ -698,11 +758,14 @@ public boolean initDStabNet() { // add the dynamic loads to dynamicBusDeviceList() - bus.getDynamicBusDeviceList().addAll(bus.getDynLoadModelList()); //three-sequence based + // TODO this need to be fixed, as it causes duplication issues for adapter implementation of existing dynamic load models, such as inductionMotor3PhaseLoad + // because DynLoadModel extends from DynamicBusDevice, as the DynLoadModel.setDStabBus() method will create the bus-loadmodel containing relationship. + bus.getDynamicBusDeviceList().addAll(bus.getDynLoadModelList()); // three-sequence based bus.getDynamicBusDeviceList().addAll(bus.getPhaseADynLoadList()); // single-phase based bus.getDynamicBusDeviceList().addAll(bus.getPhaseBDynLoadList()); // single-phase based bus.getDynamicBusDeviceList().addAll(bus.getPhaseCDynLoadList()); // single-phase based - bus.getDynamicBusDeviceList().addAll(bus.getThreePhaseDynLoadList()); // three-phase based + + //bus.getDynamicBusDeviceList().addAll(bus.getThreePhaseDynLoadList()); // three-phase based }//end if-isLoad diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java index 300dceb..f1d1348 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java @@ -43,6 +43,9 @@ public InductionMotor3PhaseAdapter(){ public InductionMotor3PhaseAdapter(InductionMotor motor){ this.indMotor = motor; this.parentBus = (Bus3Phase) motor.getDStabBus(); + + this.loadPercent = this.indMotor.getLoadPercent(); + this.indMotor.setLoadPercent(-100); // such that the load percent is not used, used the initLoadPQ instead } @Override @@ -114,6 +117,7 @@ public Complex3x1 getIinj2Network3Phase() { @Override public boolean initStates() { //TODO here assuming balanced + //TODO in the future, it can be improved by using the average power Complex initMotorLoad = this.getParentBus().get3PhaseTotalLoad().a_0.multiply(this.loadPercent/100.0); this.getInductionMotor().setInitLoadPQ(initMotorLoad); @@ -175,4 +179,9 @@ public Hashtable getStates(Object ref) { return this.indMotor.getExtendedDeviceId(); } + @Override + public double getMVABase(){ + return this.indMotor.getMVABase(); + + } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java index 4d2b576..f32346e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/IEEE123Feeder_Dstab_Test.java @@ -362,6 +362,7 @@ private List buildFeederDynModel(DStabNetwork3Phase dsNet, double ACMoto if(IndMotorPercent>0.0){ InductionMotor indMotor= DStabObjectFactory.createInductionMotor("1"); indMotor.setDStabBus(loadBus); + indMotor.setLoadPercent(IndMotorPercent); indMotor.setXm(3.0); indMotor.setXl(0.07); @@ -375,9 +376,9 @@ private List buildFeederDynModel(DStabNetwork3Phase dsNet, double ACMoto indMotor.setA(0.0); //Toreque = (a+bw+cw^2)*To; indMotor.setB(0.0); //Toreque = (a+bw+cw^2)*To; indMotor.setC(1.0); //Toreque = (a+bw+cw^2)*To; - InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); - indMotor3Phase.setLoadPercent(IndMotorPercent); //0.06 MW - loadBus.getThreePhaseDynLoadList().add(indMotor3Phase); +// InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); +// indMotor3Phase.setLoadPercent(IndMotorPercent); //0.06 MW +// loadBus.getThreePhaseDynLoadList().add(indMotor3Phase); } } // PV generation diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java index 2c7fbac..0301532 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java @@ -65,6 +65,7 @@ public void testIndMotor() throws InterpssException{ Bus3Phase bus1 = (Bus3Phase) net.getDStabBus("Bus1"); InductionMotor indMotor= DStabObjectFactory.createInductionMotor("1"); indMotor.setDStabBus(bus1); + indMotor.setLoadPercent(50); indMotor.setXm(3.0); indMotor.setXl(0.07); @@ -76,9 +77,9 @@ public void testIndMotor() throws InterpssException{ indMotor.setMVABase(50); indMotor.setH(1.0); - InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); - indMotor3Phase.setLoadPercent(50); - bus1.getThreePhaseDynLoadList().add(indMotor3Phase); + + + //bus1.getThreePhaseDynLoadList().add(indMotor3Phase); @@ -114,9 +115,7 @@ public void testIndMotor() throws InterpssException{ //3phase equivY - - - System.out.println(indMotor3Phase.getInitLoadPQ3Phase().toString()); + dstabAlgo.performSimulation(); @@ -125,5 +124,6 @@ public void testIndMotor() throws InterpssException{ System.out.println(sm.toCSVString(sm.getBusAngleTable())); System.out.println(sm.toCSVString(sm.getBusVoltTable())); + assertTrue(bus1.getDynamicBusDeviceList().size()==1); } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestSinglePhaseACMotorModel.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestSinglePhaseACMotorModel.java index f524ac7..71c4e5e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestSinglePhaseACMotorModel.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/TestSinglePhaseACMotorModel.java @@ -1,331 +1,332 @@ -package org.ipss.threePhase.test; - -import static org.junit.Assert.assertTrue; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.IpssCorePlugin; -import org.interpss.numeric.datatype.Complex3x1; -import org.interpss.numeric.datatype.Unit.UnitType; -import org.interpss.numeric.util.NumericUtil; -import org.ipss.threePhase.basic.Branch3Phase; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Load3Phase; -import org.ipss.threePhase.basic.Phase; -import org.ipss.threePhase.basic.impl.Load3PhaseImpl; -import org.ipss.threePhase.dynamic.DStabNetwork3Phase; -import org.ipss.threePhase.dynamic.algo.DynamicEventProcessor3Phase; -import org.ipss.threePhase.dynamic.impl.DStabNetwork3phaseImpl; -import org.ipss.threePhase.dynamic.model.impl.SinglePhaseACMotor; -import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; -import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; -import org.ipss.threePhase.util.ThreePhaseObjectFactory; -import org.junit.Test; - -import com.interpss.DStabObjectFactory; -import com.interpss.common.exp.InterpssException; -import com.interpss.core.aclf.AclfBranchCode; -import com.interpss.core.aclf.AclfGenCode; -import com.interpss.core.aclf.AclfLoadCode; -import com.interpss.core.acsc.fault.SimpleFaultCode; -import com.interpss.core.net.NetworkType; -import com.interpss.dstab.DStabGen; -import com.interpss.dstab.algo.DynamicSimuAlgorithm; -import com.interpss.dstab.algo.DynamicSimuMethod; -import com.interpss.dstab.cache.StateMonitor; -import com.interpss.dstab.cache.StateMonitor.DynDeviceType; -import com.interpss.dstab.mach.EConstMachine; -import com.interpss.dstab.mach.MachineType; - -public class TestSinglePhaseACMotorModel { - - @Test - public void test_dstab_1PAC() throws InterpssException{ - IpssCorePlugin.init(); - - DStabNetwork3Phase net = create2BusSys(); - - net.setNetworkType(NetworkType.DISTRIBUTION); - - DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); - //distPFAlgo.orderDistributionBuses(true); - - assertTrue(distPFAlgo.powerflow()); - - System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); - - - /* - * create the 1-phase AC model - */ - - Bus3Phase bus1 = (Bus3Phase) net.getBus("Bus1"); - - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus1,"1"); - ac1.setLoadPercent(25); - ac1.setPhase(Phase.A); - ac1.setMVABase(25); - bus1.getPhaseADynLoadList().add(ac1); - - - - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus1,"2"); - ac2.setLoadPercent(30); - ac2.setPhase(Phase.B); - ac2.setMVABase(30); - bus1.getPhaseBDynLoadList().add(ac2); - - - - SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus1,"3"); - ac3.setLoadPercent(20); - ac3.setPhase(Phase.C); - ac3.setMVABase(20); - bus1.getPhaseCDynLoadList().add(ac3); - - // run dstab to test 1-phase ac model - // initGenLoad-- summarize the effects of contributive Gen/Load to make equivGen/load for power flow calculation // net.initContributeGenLoad(); - - DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( - net, IpssCorePlugin.getMsgHub()); - - - dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); - dstabAlgo.setSimuStepSec(0.005d); - dstabAlgo.setTotalSimuTimeSec(.2); - - StateMonitor sm = new StateMonitor(); - sm.addGeneratorStdMonitor(new String[]{"Bus3-mach1"}); - sm.addBusStdMonitor(new String[]{"Bus3","Bus1"}); - sm.add3PhaseBusStdMonitor("Bus1"); - - // AC MOTOR extended Id - //"ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); - sm.addMultiDynDeviceMonitor(DynDeviceType.ACMotor, new String[]{"ACMotor_1@Bus1_phaseA","ACMotor_2@Bus1_phaseB"}); - - - // set the output handler - dstabAlgo.setSimuOutputHandler(sm); - dstabAlgo.setOutPutPerSteps(1); - - net.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("Bus1", net, SimpleFaultCode.GROUND_3P,new Complex(0,0.1),null, 0.1,0.06), "SLG@Bus1"); - dstabAlgo.setDynamicEventHandler(new DynamicEventProcessor3Phase()); - - if(dstabAlgo.initialization()){ - System.out.print(net.getYMatrixABC().getSparseEqnComplex().toString()); - while(dstabAlgo.getSimuTime()<=dstabAlgo.getTotalSimuTimeSec()){ - System.out.print("\n\n time = "+dstabAlgo.getSimuTime()+"\n"); - dstabAlgo.solveDEqnStep(true); - sm.addBusPhaseVoltageMonitorRecord("Bus1", dstabAlgo.getSimuTime(), bus1.get3PhaseVotlages()); - } - } - - - //System.out.println(sm.toCSVString(sm.getBusAngleTable())); -// System.out.println(sm.toCSVString(sm.getBusVoltTable())); - System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); - System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); - System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); - System.out.println(sm.toCSVString(sm.getAcMotorPTable())); - System.out.println(sm.toCSVString( sm.getAcMotorRemainFractionTable())); - - - - assertTrue(Math.abs(sm.getBusAngleTable().get("Bus1").get(1).getValue()- - sm.getBusAngleTable().get("Bus1").get(10).getValue())<1.0E-1); - assertTrue(Math.abs(sm.getBusVoltTable().get("Bus1").get(1).getValue()- - sm.getBusVoltTable().get("Bus1").get(10).getValue())<1.0E-3); - assertTrue(Math.abs(sm.getAcMotorPTable().get("ACMotor_1@Bus1_phaseA").get(1).getValue()- - sm.getAcMotorPTable().get("ACMotor_1@Bus1_phaseA").get(10).getValue())<1.0E-3); - - assertTrue(Math.abs(sm.getBusPhAVoltTable().get("Bus1").get(1).getValue()- - sm.getBusPhAVoltTable().get("Bus1").get(10).getValue())<1.0E-3); - } - - //@Test - public void test1PAC() throws InterpssException{ - - IpssCorePlugin.init(); - - DStabNetwork3Phase net = create2BusSys(); - net.setNetworkType(NetworkType.DISTRIBUTION); - - DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); - //distPFAlgo.orderDistributionBuses(true); - - assertTrue(distPFAlgo.powerflow()); - - System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); - - /* - * create the 1-phase AC model - */ - - Bus3Phase bus1 = (Bus3Phase) net.getBus("Bus1"); - - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus1,"1"); - ac1.setLoadPercent(50); - ac1.setPhase(Phase.A); - ac1.setMVABase(50); - bus1.getPhaseADynLoadList().add(ac1); - - - - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus1,"2"); - ac2.setLoadPercent(50); - ac2.setPhase(Phase.B); - ac2.setMVABase(50); - bus1.getPhaseBDynLoadList().add(ac2); - - - - SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus1,"3"); - ac3.setLoadPercent(50); - ac3.setPhase(Phase.C); - ac3.setMVABase(50); - bus1.getPhaseCDynLoadList().add(ac3); - - // run dstab to test 1-phase ac model - // initGenLoad-- summarize the effects of contributive Gen/Load to make equivGen/load for power flow calculation // net.initContributeGenLoad(); - - DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( - net, IpssCorePlugin.getMsgHub()); - - - dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); - dstabAlgo.setSimuStepSec(0.005d); - dstabAlgo.setTotalSimuTimeSec(0.01); - - StateMonitor sm = new StateMonitor(); - sm.addGeneratorStdMonitor(new String[]{"Bus3-mach1"}); - sm.addBusStdMonitor(new String[]{"Bus3","Bus1"}); - - // set the output handler - dstabAlgo.setSimuOutputHandler(sm); - dstabAlgo.setOutPutPerSteps(1); - if(dstabAlgo.initialization()){ - - // check init load - Complex loadPQ = new Complex(0.5,0.5*Math.tan(Math.acos(0.97))); - assertTrue( NumericUtil.equals(ac1.getInitLoadPQ(),loadPQ,1.0E-5)); - - // check the calculated loadPQ - assertTrue(NumericUtil.equals(ac1.getLoadPQ(),loadPQ,1.0E-5)); - - //check only 50% load left as static load - Complex remainLoadPQ = new Complex(1,0.2).subtract(loadPQ); - assertTrue( NumericUtil.equals(bus1.get3PhaseNetLoadResults().a_0,remainLoadPQ,1.0E-5)); - - // correct equivY = 1/(0.124+j0.114) - Complex y = new Complex(1.5,0).divide(new Complex(ac1.getRstall(),ac1.getXstall())); - assertTrue( NumericUtil.equals(ac1.getEquivY(),y,1.0E-5)); - - - - double v = 0.599; - bus1.get3PhaseVotlages().a_0 = new Complex(v,0.0); - //Tstall = 0.033; - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - - // check the power before stalling - System.out.println(ac1.getLoadPQ()); - - // check the current injection compensation under normal running condition - Complex Iinj = ac1.getLoadPQ().subtract(ac1.getEquivY().multiply(v*v).conjugate()); - Iinj = Iinj.divide( bus1.get3PhaseVotlages().a_0).conjugate().multiply(-1.0); - assertTrue(ac1.getNortonCurInj().subtract(Iinj).abs()<1.0E-6); - - - ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); - // check the stall status - assertTrue(ac1.getStage() ==1); - - System.out.println(ac1.getLoadPQ()); - - // check the current injection compesation under stalling condition - assertTrue(ac1.getNortonCurInj().abs()==0.0); - } - } - - - private DStabNetwork3Phase create2BusSys() throws InterpssException{ - - DStabNetwork3Phase net = new DStabNetwork3phaseImpl(); - - double baseKva = 100000.0; - - // set system basekva for loadflow calculation - net.setBaseKva(baseKva); - - //Bus 1 - Bus3Phase bus1 = ThreePhaseObjectFactory.create3PDStabBus("Bus1", net); - // set bus name and description attributes - bus1.setAttributes("Bus 1", ""); - // set bus base voltage - bus1.setBaseVoltage(230000.0); - // set bus to be a swing bus - bus1.setGenCode(AclfGenCode.NON_GEN); - // adapt the bus object to a swing bus object - bus1.setLoadCode(AclfLoadCode.CONST_P); - - //bus1.setLoadPQ(new Complex(1.0,0.2)); - Load3Phase load1 = new Load3PhaseImpl(); - load1.set3PhaseLoad(new Complex3x1(new Complex(1.0,0.2),new Complex(1.0,0.2),new Complex(1.0,0.2))); - bus1.getThreePhaseLoadList().add(load1); - //bus1.setScLoadShuntY2( new Complex (1.0,0.2)); - //bus1.setScLoadShuntY0( new Complex (1.0,0.2)); - - - // Bus 3 - Bus3Phase bus3 = ThreePhaseObjectFactory.create3PDStabBus("Bus3", net); - // set bus name and description attributes - bus3.setAttributes("Bus 3", ""); - // set bus base voltage - bus3.setBaseVoltage(230000.0); - // set bus to be a swing bus - bus3.setGenCode(AclfGenCode.SWING); - - bus3.setSortNumber(1); - - DStabGen gen2 = DStabObjectFactory.createDStabGen("Gen2"); - gen2.setMvaBase(100.0); - gen2.setDesiredVoltMag(1.025); - //gen2.setGen(new Complex(0.7164,0.2710)); - gen2.setPosGenZ(new Complex(0.002,0.02)); - gen2.setNegGenZ(new Complex(0.002,0.02)); - gen2.setZeroGenZ(new Complex(0.000,1.0E9)); - - //add to contributed gen list - bus3.getContributeGenList().add(gen2); - - EConstMachine mach2 = (EConstMachine)DStabObjectFactory. - createMachine("1", "Mach-1", MachineType.ECONSTANT, net, "Bus3", "Gen2"); - - mach2.setRating(100, UnitType.mVA, net.getBaseKva()); - mach2.setRatedVoltage(230000.0); - mach2.calMultiFactors(); - mach2.setH(5.0E6); - mach2.setD(0.01); - mach2.setRa(0.0020); - mach2.setXd1(0.020); - - - Branch3Phase bra = ThreePhaseObjectFactory.create3PBranch("Bus1", "Bus3", "0", net); - bra.setBranchCode(AclfBranchCode.LINE); - bra.setZ( new Complex(0.000, 0.0500)); - bra.setHShuntY(new Complex(0, 0.200/2)); - bra.setZ0( new Complex(0.0, 0.15)); - bra.setHB0(0.200/2); - - - //net.setBusNumberArranged(true); - return net; - - } - -} +package org.ipss.threePhase.test; + +import static org.junit.Assert.assertTrue; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.IpssCorePlugin; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.interpss.numeric.util.NumericUtil; +import org.ipss.threePhase.basic.Branch3Phase; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Load3Phase; +import org.ipss.threePhase.basic.Phase; +import org.ipss.threePhase.basic.impl.Load3PhaseImpl; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.dynamic.algo.DynamicEventProcessor3Phase; +import org.ipss.threePhase.dynamic.impl.DStabNetwork3phaseImpl; +import org.ipss.threePhase.dynamic.model.impl.SinglePhaseACMotor; +import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; +import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; +import org.ipss.threePhase.util.ThreePhaseObjectFactory; +import org.junit.Test; + +import com.interpss.DStabObjectFactory; +import com.interpss.common.exp.InterpssException; +import com.interpss.core.aclf.AclfBranchCode; +import com.interpss.core.aclf.AclfGenCode; +import com.interpss.core.aclf.AclfLoadCode; +import com.interpss.core.acsc.fault.SimpleFaultCode; +import com.interpss.core.net.NetworkType; +import com.interpss.dstab.DStabGen; +import com.interpss.dstab.algo.DynamicSimuAlgorithm; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.cache.StateMonitor; +import com.interpss.dstab.cache.StateMonitor.DynDeviceType; +import com.interpss.dstab.mach.EConstMachine; +import com.interpss.dstab.mach.MachineType; + +public class TestSinglePhaseACMotorModel { + + @Test + public void test_dstab_1PAC() throws InterpssException{ + IpssCorePlugin.init(); + + DStabNetwork3Phase net = create2BusSys(); + + net.setNetworkType(NetworkType.DISTRIBUTION); + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); + //distPFAlgo.orderDistributionBuses(true); + + assertTrue(distPFAlgo.powerflow()); + + System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); + + + /* + * create the 1-phase AC model + */ + + Bus3Phase bus1 = (Bus3Phase) net.getBus("Bus1"); + + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus1,"1"); + ac1.setLoadPercent(25); + ac1.setPhase(Phase.A); + ac1.setMVABase(25); + bus1.getPhaseADynLoadList().add(ac1); + + + + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus1,"2"); + ac2.setLoadPercent(30); + ac2.setPhase(Phase.B); + ac2.setMVABase(30); + bus1.getPhaseBDynLoadList().add(ac2); + + + + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus1,"3"); + ac3.setLoadPercent(20); + ac3.setPhase(Phase.C); + ac3.setMVABase(20); + bus1.getPhaseCDynLoadList().add(ac3); + + // run dstab to test 1-phase ac model + // initGenLoad-- summarize the effects of contributive Gen/Load to make equivGen/load for power flow calculation // net.initContributeGenLoad(); + + DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( + net, IpssCorePlugin.getMsgHub()); + + + dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); + dstabAlgo.setSimuStepSec(0.005d); + dstabAlgo.setTotalSimuTimeSec(.2); + + StateMonitor sm = new StateMonitor(); + sm.addGeneratorStdMonitor(new String[]{"Bus3-mach1"}); + sm.addBusStdMonitor(new String[]{"Bus3","Bus1"}); + sm.add3PhaseBusStdMonitor("Bus1"); + + // AC MOTOR extended Id + //"ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); + sm.addMultiDynDeviceMonitor(DynDeviceType.ACMotor, new String[]{"ACMotor_1@Bus1_phaseA","ACMotor_2@Bus1_phaseB"}); + + + // set the output handler + dstabAlgo.setSimuOutputHandler(sm); + dstabAlgo.setOutPutPerSteps(1); + + net.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("Bus1", net, SimpleFaultCode.GROUND_3P,new Complex(0,0.1),null, 0.1,0.06), "SLG@Bus1"); + dstabAlgo.setDynamicEventHandler(new DynamicEventProcessor3Phase()); + + if(dstabAlgo.initialization()){ + System.out.print(net.getYMatrixABC().getSparseEqnComplex().toString()); + while(dstabAlgo.getSimuTime()<=dstabAlgo.getTotalSimuTimeSec()){ + System.out.print("\n\n time = "+dstabAlgo.getSimuTime()+"\n"); + dstabAlgo.solveDEqnStep(true); + sm.addBusPhaseVoltageMonitorRecord("Bus1", dstabAlgo.getSimuTime(), bus1.get3PhaseVotlages()); + } + } + + + //System.out.println(sm.toCSVString(sm.getBusAngleTable())); +// System.out.println(sm.toCSVString(sm.getBusVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhAVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); + System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); + System.out.println(sm.toCSVString(sm.getAcMotorPTable())); + System.out.println(sm.toCSVString( sm.getAcMotorRemainFractionTable())); + + + + assertTrue(Math.abs(sm.getBusAngleTable().get("Bus1").get(1).getValue()- + sm.getBusAngleTable().get("Bus1").get(10).getValue())<1.0E-1); + assertTrue(Math.abs(sm.getBusVoltTable().get("Bus1").get(1).getValue()- + sm.getBusVoltTable().get("Bus1").get(10).getValue())<1.0E-3); + assertTrue(Math.abs(sm.getAcMotorPTable().get("ACMotor_1@Bus1_phaseA").get(1).getValue()- + sm.getAcMotorPTable().get("ACMotor_1@Bus1_phaseA").get(10).getValue())<1.0E-3); + + assertTrue(Math.abs(sm.getBusPhAVoltTable().get("Bus1").get(1).getValue()- + sm.getBusPhAVoltTable().get("Bus1").get(10).getValue())<1.0E-3); + assertTrue(bus1.getDynamicBusDeviceList().size()==3); + } + + //@Test + public void test1PAC() throws InterpssException{ + + IpssCorePlugin.init(); + + DStabNetwork3Phase net = create2BusSys(); + net.setNetworkType(NetworkType.DISTRIBUTION); + + DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); + //distPFAlgo.orderDistributionBuses(true); + + assertTrue(distPFAlgo.powerflow()); + + System.out.println(DistPowerFlowOutFunc.powerflowResultSummary(net)); + + /* + * create the 1-phase AC model + */ + + Bus3Phase bus1 = (Bus3Phase) net.getBus("Bus1"); + + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus1,"1"); + ac1.setLoadPercent(50); + ac1.setPhase(Phase.A); + ac1.setMVABase(50); + bus1.getPhaseADynLoadList().add(ac1); + + + + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus1,"2"); + ac2.setLoadPercent(50); + ac2.setPhase(Phase.B); + ac2.setMVABase(50); + bus1.getPhaseBDynLoadList().add(ac2); + + + + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus1,"3"); + ac3.setLoadPercent(50); + ac3.setPhase(Phase.C); + ac3.setMVABase(50); + bus1.getPhaseCDynLoadList().add(ac3); + + // run dstab to test 1-phase ac model + // initGenLoad-- summarize the effects of contributive Gen/Load to make equivGen/load for power flow calculation // net.initContributeGenLoad(); + + DynamicSimuAlgorithm dstabAlgo =DStabObjectFactory.createDynamicSimuAlgorithm( + net, IpssCorePlugin.getMsgHub()); + + + dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); + dstabAlgo.setSimuStepSec(0.005d); + dstabAlgo.setTotalSimuTimeSec(0.01); + + StateMonitor sm = new StateMonitor(); + sm.addGeneratorStdMonitor(new String[]{"Bus3-mach1"}); + sm.addBusStdMonitor(new String[]{"Bus3","Bus1"}); + + // set the output handler + dstabAlgo.setSimuOutputHandler(sm); + dstabAlgo.setOutPutPerSteps(1); + if(dstabAlgo.initialization()){ + + // check init load + Complex loadPQ = new Complex(0.5,0.5*Math.tan(Math.acos(0.97))); + assertTrue( NumericUtil.equals(ac1.getInitLoadPQ(),loadPQ,1.0E-5)); + + // check the calculated loadPQ + assertTrue(NumericUtil.equals(ac1.getLoadPQ(),loadPQ,1.0E-5)); + + //check only 50% load left as static load + Complex remainLoadPQ = new Complex(1,0.2).subtract(loadPQ); + assertTrue( NumericUtil.equals(bus1.get3PhaseNetLoadResults().a_0,remainLoadPQ,1.0E-5)); + + // correct equivY = 1/(0.124+j0.114) + Complex y = new Complex(1.5,0).divide(new Complex(ac1.getRstall(),ac1.getXstall())); + assertTrue( NumericUtil.equals(ac1.getEquivY(),y,1.0E-5)); + + + + double v = 0.599; + bus1.get3PhaseVotlages().a_0 = new Complex(v,0.0); + //Tstall = 0.033; + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + + // check the power before stalling + System.out.println(ac1.getLoadPQ()); + + // check the current injection compensation under normal running condition + Complex Iinj = ac1.getLoadPQ().subtract(ac1.getEquivY().multiply(v*v).conjugate()); + Iinj = Iinj.divide( bus1.get3PhaseVotlages().a_0).conjugate().multiply(-1.0); + assertTrue(ac1.getNortonCurInj().subtract(Iinj).abs()<1.0E-6); + + + ac1.nextStep(0.005, DynamicSimuMethod.MODIFIED_EULER); + // check the stall status + assertTrue(ac1.getStage() ==1); + + System.out.println(ac1.getLoadPQ()); + + // check the current injection compesation under stalling condition + assertTrue(ac1.getNortonCurInj().abs()==0.0); + } + } + + + private DStabNetwork3Phase create2BusSys() throws InterpssException{ + + DStabNetwork3Phase net = new DStabNetwork3phaseImpl(); + + double baseKva = 100000.0; + + // set system basekva for loadflow calculation + net.setBaseKva(baseKva); + + //Bus 1 + Bus3Phase bus1 = ThreePhaseObjectFactory.create3PDStabBus("Bus1", net); + // set bus name and description attributes + bus1.setAttributes("Bus 1", ""); + // set bus base voltage + bus1.setBaseVoltage(230000.0); + // set bus to be a swing bus + bus1.setGenCode(AclfGenCode.NON_GEN); + // adapt the bus object to a swing bus object + bus1.setLoadCode(AclfLoadCode.CONST_P); + + //bus1.setLoadPQ(new Complex(1.0,0.2)); + Load3Phase load1 = new Load3PhaseImpl(); + load1.set3PhaseLoad(new Complex3x1(new Complex(1.0,0.2),new Complex(1.0,0.2),new Complex(1.0,0.2))); + bus1.getThreePhaseLoadList().add(load1); + //bus1.setScLoadShuntY2( new Complex (1.0,0.2)); + //bus1.setScLoadShuntY0( new Complex (1.0,0.2)); + + + // Bus 3 + Bus3Phase bus3 = ThreePhaseObjectFactory.create3PDStabBus("Bus3", net); + // set bus name and description attributes + bus3.setAttributes("Bus 3", ""); + // set bus base voltage + bus3.setBaseVoltage(230000.0); + // set bus to be a swing bus + bus3.setGenCode(AclfGenCode.SWING); + + bus3.setSortNumber(1); + + DStabGen gen2 = DStabObjectFactory.createDStabGen("Gen2"); + gen2.setMvaBase(100.0); + gen2.setDesiredVoltMag(1.025); + //gen2.setGen(new Complex(0.7164,0.2710)); + gen2.setPosGenZ(new Complex(0.002,0.02)); + gen2.setNegGenZ(new Complex(0.002,0.02)); + gen2.setZeroGenZ(new Complex(0.000,1.0E9)); + + //add to contributed gen list + bus3.getContributeGenList().add(gen2); + + EConstMachine mach2 = (EConstMachine)DStabObjectFactory. + createMachine("1", "Mach-1", MachineType.ECONSTANT, net, "Bus3", "Gen2"); + + mach2.setRating(100, UnitType.mVA, net.getBaseKva()); + mach2.setRatedVoltage(230000.0); + mach2.calMultiFactors(); + mach2.setH(5.0E6); + mach2.setD(0.01); + mach2.setRa(0.0020); + mach2.setXd1(0.020); + + + Branch3Phase bra = ThreePhaseObjectFactory.create3PBranch("Bus1", "Bus3", "0", net); + bra.setBranchCode(AclfBranchCode.LINE); + bra.setZ( new Complex(0.000, 0.0500)); + bra.setHShuntY(new Complex(0, 0.200/2)); + bra.setZ0( new Complex(0.0, 0.15)); + bra.setHB0(0.200/2); + + + //net.setBusNumberArranged(true); + return net; + + } + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java index 8fee78e..077296d 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java @@ -1,6 +1,7 @@ package org.ipss.threePhase.test; import static com.interpss.core.funcImpl.AcscFunction.acscXfrAptr; +import static org.ipss.threePhase.util.ThreePhaseUtilFunction.threePhaseInductionMotorAptr; import static org.junit.Assert.assertTrue; import java.io.File; @@ -8,6 +9,7 @@ import java.util.Arrays; import java.util.Hashtable; import java.util.List; +import java.util.Map.Entry; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -18,6 +20,7 @@ import org.interpss.numeric.datatype.Complex3x3; import org.interpss.numeric.datatype.Point; import org.interpss.numeric.datatype.Unit.UnitType; +import org.interpss.util.FileUtil; import org.ipss.threePhase.basic.Branch3Phase; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.basic.Load3Phase; @@ -53,6 +56,7 @@ import com.interpss.dstab.algo.DynamicSimuMethod; import com.interpss.dstab.cache.StateMonitor; import com.interpss.dstab.cache.StateMonitor.DynDeviceType; +import com.interpss.dstab.device.DynamicBusDevice; import com.interpss.dstab.dynLoad.InductionMotor; import com.interpss.dstab.dynLoad.impl.MotorContactorControl; import com.interpss.dstab.dynLoad.impl.MotorEMSControl; @@ -152,7 +156,7 @@ public void test3PhDynamic() throws InterpssException{ dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); dstabAlgo.setSimuStepSec(0.005d); - dstabAlgo.setTotalSimuTimeSec(.005); + dstabAlgo.setTotalSimuTimeSec(.5); //dstabAlgo.setRefMachine(net.getMachine("Bus3-mach1")); //distNet.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("150r", distNet, SimpleFaultCode.GROUND_LG,new Complex(0,0.0),new Complex(0,0.0), 0.5,0.07), "SLG@Bus1"); @@ -191,10 +195,10 @@ public void test3PhDynamic() throws InterpssException{ } - if(dstabAlgo.getSimuTime()>0.5 && dstabAlgo.getSimuTime()<0.5833){ + if(dstabAlgo.getSimuTime()>0.1 && dstabAlgo.getSimuTime()<=0.2){ mach.setE(vsag); } - else if (dstabAlgo.getSimuTime()>=0.6){ + else if (dstabAlgo.getSimuTime()>=0.2){ mach.setE(1.0); } } @@ -260,7 +264,7 @@ public void test3PhDynamic_WithBuidingLoad() throws InterpssException{ dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); dstabAlgo.setSimuStepSec(0.005d); - dstabAlgo.setTotalSimuTimeSec(.1); + dstabAlgo.setTotalSimuTimeSec(0.5); //dstabAlgo.setRefMachine(net.getMachine("Bus3-mach1")); //distNet.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("150r", distNet, SimpleFaultCode.GROUND_LG,new Complex(0,0.0),new Complex(0,0.0), 0.5,0.07), "SLG@Bus1"); @@ -271,14 +275,32 @@ public void test3PhDynamic_WithBuidingLoad() throws InterpssException{ sm.add3PhaseBusStdMonitor(new String[]{"node_7","node_8","node_9","node_28","node_27"}); String[] motorBuses = {"meter_1","meter_2","meter_3"}; + sm.addBusStdMonitor(motorBuses); + sm.add3PhaseBusStdMonitor(motorBuses); List motorIds = new ArrayList<>(); + Hashtable motorRatingTable = new Hashtable<>(); + for(int i = 0; i entry: motorRatingTable.entrySet()){ +// sb.append(entry.getKey()+","+entry.getValue()+"\n"); +// } + +// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//motor_rating.csv",sb.toString()); + + System.out.println("\n"+sm.toCSVString(sm.getBusPhAVoltTable())); + //System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); + //System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); + //System.out.println(sm.toCSVString(sm.getMotorPTable())); System.out.println(sm.toCSVString(sm.getMotorFuvTable())); + +// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_normal_recov_motorP.csv", sm.toCSVString(sm.getMotorPTable())); +// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_normal_recov_motorFuv.csv", sm.toCSVString(sm.getMotorFuvTable())); +// +// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_delayed_recov_motorP.csv", sm.toCSVString(sm.getMotorPTable())); +// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_delayed_recov_motorFuv.csv", sm.toCSVString(sm.getMotorFuvTable())); + + } @@ -668,9 +735,9 @@ else if(lineZTable.containsKey(reverseID)){ // add building motor models try { - addLargeOffice(net,"meter_1",1,3000.0, 80.0); - addSmallOffice(net,"meter_2",3,300.0, 70.0); - addHotel(net,"meter_3",1,2000.0, 75.0); + //addLargeOffice(net,"meter_1",1,3000.0, 70.0); + addSmallOffice(net,"meter_2",1,300.0, 70.0); + //addHotel(net,"meter_3",1,2000.0, 75.0); } catch (Exception e) { // TODO Auto-generated catch block @@ -787,7 +854,7 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin double acmotorbase = totalMotorKW /1000.0*motorLoadPercent[j]/100.0/0.8/3; // assuming 0.8 loading factor - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, bus3p.getId()+"_largeOffice_"+i+"_"+motorName[j]+"_A"); + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, "type_"+motorType[j]+"_largeOffice_"+i+"_"+motorName[j]+"_A"); ac1.setLoadPercent(motorLoadPercent[j]); ac1.setPhase(Phase.A); ac1.setMVABase(acmotorbase); @@ -795,7 +862,7 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_largeOffice_"+i+"_"+motorName[j]+"_B"); + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,"type_"+motorType[j]+"_largeOffice_"+i+"_"+motorName[j]+"_B"); ac2.setLoadPercent(motorLoadPercent[j]); ac2.setPhase(Phase.B); ac2.setMVABase(acmotorbase); @@ -803,7 +870,7 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin - SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_largeOffice_"+buildingNum+"_"+motorName[j]+"_C"); + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,"type_"+motorType[j]+"_largeOffice_"+i+"_"+motorName[j]+"_C"); ac3.setLoadPercent(motorLoadPercent[j]); ac3.setPhase(Phase.C); ac3.setMVABase(acmotorbase); @@ -811,7 +878,7 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin } else{ - InductionMotor indMotor= DStabObjectFactory.createInductionMotor(bus3p.getId()+"_largeOffice_"+i+"_"+motorName[j]); + InductionMotor indMotor= DStabObjectFactory.createInductionMotor("type_"+motorType[j]+"_largeOffice_"+i+"_"+motorName[j]); indMotor.setDStabBus(bus3p); indMotor.setXm(3.0); @@ -822,7 +889,10 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin double motorkW = totalMotorKW*motorLoadPercent[j]/100.0; double motorP_sysbase = motorkW/kvaBase; + indMotor.setMVABase(motorkW*0.001/0.8); indMotor.setLoadFactor(0.8); + indMotor.setLoadPercent(motorkW/sumOfBusLoad.getReal()); // this is required for 3phaseAdapter to properly initialize the states in dynamic simulation + switch (motorType[j]){ case 1: // motor A @@ -916,11 +986,8 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin indMotor.getProtectionControlList().add(ems); } - - // apply the motor adapter - InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); - indMotor3Phase.setLoadPercent(motorkW/sumOfBusLoad.getReal()); - bus3p.getThreePhaseDynLoadList().add(indMotor3Phase); + + } @@ -1005,6 +1072,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin */ String[] motorName = {"AHU_Compressor","AHU_Fan", "VAV_Frac_Fan", "Boilers Ind_Draft","CRAC Compressor"}; + String[] motorProtectionType = {"1245","1245","345","345","145"}; int[] motorType = {1,2,4,4,1}; @@ -1028,7 +1096,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin double acmotorbase = totalMotorKW /1000.0*motorLoadPercent[j]/100.0/0.8/3; // assuming 0.8 loading factor - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, bus3p.getId()+"_smallOffice_"+i+"_"+motorName[j]+"_A"); + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, "type_"+motorType[j]+"_smallOffice_"+i+"_"+motorName[j]+"_A"); ac1.setLoadPercent(motorLoadPercent[j]); ac1.setPhase(Phase.A); ac1.setMVABase(acmotorbase); @@ -1036,7 +1104,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_smallOffice_"+i+"_"+motorName[j]+"_B"); + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,"type_"+motorType[j]+"_smallOffice_"+i+"_"+motorName[j]+"_B"); ac2.setLoadPercent(motorLoadPercent[j]); ac2.setPhase(Phase.B); ac2.setMVABase(acmotorbase); @@ -1044,7 +1112,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin - SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_smallOffice_"+i+"_"+motorName[j]+"_C"); + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,"type_"+motorType[j]+"_smallOffice_"+i+"_"+motorName[j]+"_C"); ac3.setLoadPercent(motorLoadPercent[j]); ac3.setPhase(Phase.C); ac3.setMVABase(acmotorbase); @@ -1052,8 +1120,9 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin } else{ - InductionMotor indMotor= DStabObjectFactory.createInductionMotor(bus3p.getId()+"_smallOffice_"+i+"_"+motorName[j]); + InductionMotor indMotor= DStabObjectFactory.createInductionMotor("type_"+motorType[j]+"_smallOffice_"+i+"_"+motorName[j]); indMotor.setDStabBus(bus3p); + indMotor.setXm(3.0); indMotor.setXl(0.07); @@ -1064,7 +1133,9 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin double motorkW = totalMotorKW*motorLoadPercent[j]/100.0; double motorP_sysbase = motorkW/kvaBase; - indMotor.setLoadFactor(0.8); + indMotor.setMVABase(motorkW*0.001/0.8); + //indMotor.setLoadFactor(0.8); + indMotor.setLoadPercent(motorkW/sumOfBusLoad.getReal()); // this is required for 3phaseAdapter to properly initialize the states in dynamic simulation switch (motorType[j]){ case 1: // motor A @@ -1159,10 +1230,6 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin } - InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); - indMotor3Phase.setLoadPercent(motorkW/sumOfBusLoad.getReal()); - bus3p.getThreePhaseDynLoadList().add(indMotor3Phase); - } } @@ -1268,7 +1335,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, double acmotorbase = totalMotorKW /1000.0*motorLoadPercent[j]/100.0/0.8/3; // assuming 0.8 loading factor - SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, bus3p.getId()+"_hotel_"+i+"_"+motorName[j]+"_A"); + SinglePhaseACMotor ac1 = new SinglePhaseACMotor(bus3p, "type_"+motorType[j]+"_hotel_"+i+"_"+motorName[j]+"_A"); ac1.setLoadPercent(motorLoadPercent[j]); ac1.setPhase(Phase.A); ac1.setMVABase(acmotorbase); @@ -1276,7 +1343,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, - SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_hotel_"+i+"_"+motorName[j]+"_B"); + SinglePhaseACMotor ac2 = new SinglePhaseACMotor(bus3p,"type_"+motorType[j]+"_hotel_"+i+"_"+motorName[j]+"_B"); ac2.setLoadPercent(motorLoadPercent[j]); ac2.setPhase(Phase.B); ac2.setMVABase(acmotorbase); @@ -1284,7 +1351,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, - SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,bus3p.getId()+"_hotel_"+i+"_"+motorName[j]+"_C"); + SinglePhaseACMotor ac3 = new SinglePhaseACMotor(bus3p,"type_"+motorType[j]+"_hotel_"+i+"_"+motorName[j]+"_C"); ac3.setLoadPercent(motorLoadPercent[j]); ac3.setPhase(Phase.C); ac3.setMVABase(acmotorbase); @@ -1292,7 +1359,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, } else{ - InductionMotor indMotor= DStabObjectFactory.createInductionMotor(bus3p.getId()+"_hotel_"+i+"_"+motorName[j]); + InductionMotor indMotor= DStabObjectFactory.createInductionMotor("type_"+motorType[j]+"_hotel_"+i+"_"+motorName[j]); indMotor.setDStabBus(bus3p); indMotor.setXm(3.0); @@ -1303,7 +1370,10 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, double motorkW = totalMotorKW*motorLoadPercent[j]/100.0; double motorP_sysbase = motorkW/kvaBase; - indMotor.setLoadFactor(0.8); + indMotor.setMVABase(motorkW*0.001/0.8); + //indMotor.setLoadFactor(0.8); + indMotor.setLoadPercent(motorkW/sumOfBusLoad.getReal()); // this is required for 3phaseAdapter to properly initialize the states in dynamic simulation + switch (motorType[j]){ case 1: // motor A @@ -1398,9 +1468,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, } - InductionMotor3PhaseAdapter indMotor3Phase = new InductionMotor3PhaseAdapter(indMotor); - indMotor3Phase.setLoadPercent(motorkW/sumOfBusLoad.getReal()); - bus3p.getThreePhaseDynLoadList().add(indMotor3Phase); + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/util/ThreePhaseUtilFunction.java b/ipss.plugin.3phase/src/org/ipss/threePhase/util/ThreePhaseUtilFunction.java index 2b14807..24deebf 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/util/ThreePhaseUtilFunction.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/util/ThreePhaseUtilFunction.java @@ -6,9 +6,11 @@ import org.ipss.threePhase.basic.Transformer3Phase; import com.interpss.dstab.DStabGen; +import com.interpss.dstab.dynLoad.InductionMotor; import org.ipss.threePhase.basic.Gen3Phase; import org.ipss.threePhase.dynamic.model.DStabGen3PhaseAdapter; +import org.ipss.threePhase.dynamic.model.InductionMotor3PhaseAdapter; public class ThreePhaseUtilFunction { @@ -25,6 +27,12 @@ public class ThreePhaseUtilFunction { return adpter; }; + public static Function threePhaseInductionMotorAptr = indMotor -> { + InductionMotor3PhaseAdapter adpter = new InductionMotor3PhaseAdapter(indMotor); + + return adpter; + }; + } From 2d607f5045b2197eb68f21a4e96b03483d7f8db4 Mon Sep 17 00:00:00 2001 From: thuang Date: Mon, 26 Jun 2017 08:28:19 -0700 Subject: [PATCH 33/36] fixed bugs in sumofLoad when creating motor loads in GC feeder test case --- .../test/Test3PhaseInductionMotor.java | 11 ++++ .../test/Test_GC_12_47_1_Feeder.java | 64 ++++++++++--------- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java index 0301532..7515712 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java @@ -1,10 +1,12 @@ package org.ipss.threePhase.test; +import static org.ipss.threePhase.util.ThreePhaseUtilFunction.threePhaseInductionMotorAptr; import static org.junit.Assert.assertTrue; import org.interpss.IpssCorePlugin; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.dynamic.model.DynLoadModel3Phase; import org.ipss.threePhase.dynamic.model.InductionMotor3PhaseAdapter; import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; @@ -18,6 +20,8 @@ import com.interpss.dstab.algo.DynamicSimuAlgorithm; import com.interpss.dstab.algo.DynamicSimuMethod; import com.interpss.dstab.cache.StateMonitor; +import com.interpss.dstab.cache.StateMonitor.DynDeviceType; +import com.interpss.dstab.device.DynamicBusDevice; import com.interpss.dstab.dynLoad.InductionMotor; import com.interpss.dstab.dynLoad.impl.InductionMotorImpl; @@ -98,6 +102,10 @@ public void testIndMotor() throws InterpssException{ sm.addGeneratorStdMonitor(new String[]{"Bus3-mach1"}); sm.addBusStdMonitor(new String[]{"Bus3","Bus1"}); + + sm.addDynDeviceMonitor(DynDeviceType.InductionMotor, indMotor.getExtendedDeviceId()); + + // set the output handler dstabAlgo.setSimuOutputHandler(sm); dstabAlgo.setOutPutPerSteps(1); @@ -125,5 +133,8 @@ public void testIndMotor() throws InterpssException{ System.out.println(sm.toCSVString(sm.getBusAngleTable())); System.out.println(sm.toCSVString(sm.getBusVoltTable())); assertTrue(bus1.getDynamicBusDeviceList().size()==1); + + System.out.println(sm.toCSVString(sm.getMotorPTable())); + System.out.println(sm.toCSVString(sm.getMotorSlipTable())); } } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java index 077296d..930737e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java @@ -285,12 +285,13 @@ public void test3PhDynamic_WithBuidingLoad() throws InterpssException{ for(DynamicBusDevice dynDevice: bus.getDynamicBusDeviceList()){ if(dynDevice instanceof InductionMotor ){ - DynLoadModel3Phase dynLoad3P = threePhaseInductionMotorAptr.apply((InductionMotor) dynDevice); - if(dynLoad3P.isActive()){ - motorIds.add(dynLoad3P.getExtendedDeviceId()); - motorRatingTable.put(dynLoad3P.getExtendedDeviceId(), dynLoad3P.getMVABase()); - sm.addDynDeviceMonitor(DynDeviceType.InductionMotor, dynLoad3P.getExtendedDeviceId()); - } + InductionMotor indMotor = (InductionMotor) dynDevice; + //DynLoadModel3Phase dynLoad3P = threePhaseInductionMotorAptr.apply((InductionMotor) dynDevice); + //if(dynLoad3P.isActive()){ + motorIds.add(dynDevice.getExtendedDeviceId()); + motorRatingTable.put(dynDevice.getExtendedDeviceId(), indMotor.getMVABase()); + sm.addDynDeviceMonitor(DynDeviceType.InductionMotor, dynDevice.getExtendedDeviceId()); + } } // for(DynLoadModel3Phase dynld3ph:bus.getThreePhaseDynLoadList()){ @@ -376,16 +377,16 @@ public void test3PhDynamic_WithBuidingLoad() throws InterpssException{ // sb.append(entry.getKey()+","+entry.getValue()+"\n"); // } -// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//motor_rating.csv",sb.toString()); + FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//motor_rating.csv",sb.toString()); System.out.println("\n"+sm.toCSVString(sm.getBusPhAVoltTable())); //System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); //System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); - //System.out.println(sm.toCSVString(sm.getMotorPTable())); + System.out.println(sm.toCSVString(sm.getMotorPTable())); System.out.println(sm.toCSVString(sm.getMotorFuvTable())); -// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_normal_recov_motorP.csv", sm.toCSVString(sm.getMotorPTable())); -// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_normal_recov_motorFuv.csv", sm.toCSVString(sm.getMotorFuvTable())); + FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_normal_recov_motorP.csv", sm.toCSVString(sm.getMotorPTable())); + FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_normal_recov_motorFuv.csv", sm.toCSVString(sm.getMotorFuvTable())); // // FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_delayed_recov_motorP.csv", sm.toCSVString(sm.getMotorPTable())); // FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_delayed_recov_motorFuv.csv", sm.toCSVString(sm.getMotorFuvTable())); @@ -735,9 +736,9 @@ else if(lineZTable.containsKey(reverseID)){ // add building motor models try { - //addLargeOffice(net,"meter_1",1,3000.0, 70.0); - addSmallOffice(net,"meter_2",1,300.0, 70.0); - //addHotel(net,"meter_3",1,2000.0, 75.0); + addLargeOffice(net,"meter_1",1,3000.0, 70.0); + addSmallOffice(net,"meter_2",5,300.0, 70.0); + addHotel(net,"meter_3",1,2000.0, 75.0); } catch (Exception e) { // TODO Auto-generated catch block @@ -792,6 +793,7 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin for(Load3Phase ld3P: bus3p.getThreePhaseLoadList()){ ld3P.set3PhaseLoad(ld3P.getInit3PhaseLoad().multiply(ratio)); } + sumOfBusLoad = sumOfBusLoad.multiply(ratio); } @@ -830,7 +832,7 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin */ String[] motorName = {"AHU_Fan", "VAV_Frac_Fan", "DOAS_Fan", "Chiller_Compressor","Chiller_Pump","Cool_Tower", - "Boilers Ind_Draft","Boilers Pump","CRAC Compressor","CRAC Fan","CRAC Frac_Condensor"}; + "Boilers_Ind_Draft","Boilers_Pump","CRAC_Compressor","CRAC_Fan","CRAC_Frac_Condensor"}; String[] motorProtectionType = {"245","345","245","145","25","245","145","25","145","145","345"}; int[] motorType = {2,4,2,1,3,2,2,3,1,2,4}; @@ -890,8 +892,8 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin double motorkW = totalMotorKW*motorLoadPercent[j]/100.0; double motorP_sysbase = motorkW/kvaBase; indMotor.setMVABase(motorkW*0.001/0.8); - indMotor.setLoadFactor(0.8); - indMotor.setLoadPercent(motorkW/sumOfBusLoad.getReal()); // this is required for 3phaseAdapter to properly initialize the states in dynamic simulation + //indMotor.setLoadFactor(0.8); + indMotor.setLoadPercent(motorkW/sumOfBusLoad.getReal()*100.0); // this is required for 3phaseAdapter to properly initialize the states in dynamic simulation switch (motorType[j]){ @@ -925,9 +927,9 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin if(motorProtectionType[j].contains("1")){ //create electronic relay and add it to the list MotorElectronicRelayProtection eleRelay = new MotorElectronicRelayProtection(indMotor); - eleRelay.getTripVoltTimeCurve().getPoints().add(new Point(0.05,0.7)); // x-axis is time, y-axis is voltage + eleRelay.getTripVoltTimeCurve().getPoints().add(new Point(0.08,0.6)); // x-axis is time, y-axis is voltage - eleRelay.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,0.95)); // x-axis is time, y-axis is voltage + eleRelay.getReconnectVoltTimeCurve().getPoints().add(new Point(0.033,0.90)); // x-axis is time, y-axis is voltage indMotor.getProtectionControlList().add(eleRelay); } @@ -960,10 +962,10 @@ private boolean addLargeOffice(DStabNetwork3Phase net, String busId, int buildin MotorContactorControl contactor = new MotorContactorControl(indMotor); - contactor.getTripVoltTimeCurve().getPoints().add(new Point(0.083,0.55)); // x-axis is time, y-axis is voltage + contactor.getTripVoltTimeCurve().getPoints().add(new Point(0.1,0.65)); // x-axis is time, y-axis is voltage - contactor.getReconnectVoltTimeCurve().getPoints().add(new Point(0.1,0.7)); // x-axis is time, y-axis is voltage + contactor.getReconnectVoltTimeCurve().getPoints().add(new Point(0.1,0.75)); // x-axis is time, y-axis is voltage indMotor.getProtectionControlList().add(contactor); @@ -1071,7 +1073,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin */ - String[] motorName = {"AHU_Compressor","AHU_Fan", "VAV_Frac_Fan", "Boilers Ind_Draft","CRAC Compressor"}; + String[] motorName = {"AHU_Compressor","AHU_Fan", "VAV_Frac_Fan", "Boilers_Ind_Draft","CRAC_Compressor"}; String[] motorProtectionType = {"1245","1245","345","345","145"}; @@ -1135,7 +1137,7 @@ private boolean addSmallOffice(DStabNetwork3Phase net, String busId, int buildin double motorP_sysbase = motorkW/kvaBase; indMotor.setMVABase(motorkW*0.001/0.8); //indMotor.setLoadFactor(0.8); - indMotor.setLoadPercent(motorkW/sumOfBusLoad.getReal()); // this is required for 3phaseAdapter to properly initialize the states in dynamic simulation + indMotor.setLoadPercent(motorkW/sumOfBusLoad.getReal()*100.0); // this is required for 3phaseAdapter to properly initialize the states in dynamic simulation switch (motorType[j]){ case 1: // motor A @@ -1300,12 +1302,12 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, } /* - Hotel PTAC Compressor MA P3P4 425 0.319069069 - Hotel PTAC Fan MD P3 123.0769231 0.092400092 - Hotel Exhaust Fan MD P3 23.08923077 0.017334257 - Hotel Split Fan MB P2P4 123.0769231 0.092400092 - Hotel Split Compressor MA P2P4 425 0.319069069 - Hotel Split Frac_Condensor MD P3P4 130 0.097597598 + Hotel PTAC Compressor MA P3P4 425 0.319069069 + Hotel PTAC Fan MD P3 123.0769231 0.092400092 + Hotel Exhaust Fan MD P3 23.08923077 0.017334257 + Hotel Split Fan MB P2P4 123.0769231 0.092400092 + Hotel Split Compressor MA P2P4 425 0.319069069 + Hotel Split Frac_Condensor MD P3P4 130 0.097597598 Hotel Split Frac_Ind_Draft MD P3P4 83.25 0.0625 */ @@ -1372,7 +1374,7 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, double motorP_sysbase = motorkW/kvaBase; indMotor.setMVABase(motorkW*0.001/0.8); //indMotor.setLoadFactor(0.8); - indMotor.setLoadPercent(motorkW/sumOfBusLoad.getReal()); // this is required for 3phaseAdapter to properly initialize the states in dynamic simulation + indMotor.setLoadPercent(motorkW/sumOfBusLoad.getReal()*100.0); // this is required for 3phaseAdapter to properly initialize the states in dynamic simulation switch (motorType[j]){ @@ -1406,9 +1408,9 @@ private boolean addHotel(DStabNetwork3Phase net, String busId, int buildingNum, if(motorProtectionType[j].contains("1")){ //create electronic relay and add it to the list MotorElectronicRelayProtection eleRelay = new MotorElectronicRelayProtection(indMotor); - eleRelay.getTripVoltTimeCurve().getPoints().add(new Point(0.05,0.7)); // x-axis is time, y-axis is voltage + eleRelay.getTripVoltTimeCurve().getPoints().add(new Point(0.08,0.7)); // x-axis is time, y-axis is voltage - eleRelay.getReconnectVoltTimeCurve().getPoints().add(new Point(0.016,0.95)); // x-axis is time, y-axis is voltage + eleRelay.getReconnectVoltTimeCurve().getPoints().add(new Point(0.05,0.95)); // x-axis is time, y-axis is voltage indMotor.getProtectionControlList().add(eleRelay); } From abe1d4fe7ba6fac029a06bb777b35858eb2c45c3 Mon Sep 17 00:00:00 2001 From: thuang Date: Thu, 5 Oct 2017 20:51:25 -0700 Subject: [PATCH 34/36] added Vminpu to load models for power flow under low voltage --- .../org/ipss/threePhase/basic/Load1Phase.java | 20 + .../threePhase/basic/impl/Bus3PhaseImpl.java | 2 +- .../threePhase/basic/impl/Load1PhaseImpl.java | 54 ++ .../threePhase/basic/impl/Load3PhaseImpl.java | 28 +- .../test/Test_GC_12_47_1_Feeder.java | 14 +- .../threePhase/test/ThreeBus_3Phase_Test.java | 2 +- .../feeder/IEEE123/ieee123_netString.dat | 782 +++++++++--------- 7 files changed, 502 insertions(+), 400 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java index 46cc27e..829995c 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/Load1Phase.java @@ -60,5 +60,25 @@ public interface Load1Phase extends AclfLoad { * @return */ public double getNominalKV(); + + /** + * Set the minimum voltage in pu, above which the original input load model (e.g., constant power) can be maintained, + * Once the terminal voltage is lower than this value, the load will be represented by constant impedance + */ + public void setVminpu(double newVminpu); + + /** + * Set the maximum voltage in pu to maintain the original input load model (e.g., constant power) + */ + public void setVmaxpu(double newVmaxpu); + + /** + * get the minimum voltage in pu to maintain the original input load model (e.g., constant power) + * If the voltage is above this value, the original input load model (e.g., constant power) can be maintained. + * Once the terminal voltage is lower than this value, the load will be represented by constant impedance + */ + public double getVminpu(); + + public double getVmaxpu(); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java index 4412287..aeb9372 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Bus3PhaseImpl.java @@ -192,7 +192,7 @@ public List getSinglePhaseLoadList() { private Complex3x1 calcLoad3PhEquivCurInj() { this.load3PhEquivCurInj = new Complex3x1(); - if (Vabc == null ||Vabc.abs()<1.0E-5) + if (Vabc == null) Vabc = new Complex3x1(new Complex(1,0),new Complex(-Math.sin(Math.PI/6),-Math.cos(Math.PI/6)),new Complex(-Math.sin(Math.PI/6),Math.cos(Math.PI/6))); //single-phase loads diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java index 16ca3c5..5385715 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java @@ -7,6 +7,7 @@ import org.ipss.threePhase.basic.Load1Phase; import org.ipss.threePhase.basic.LoadConnectionType; +import com.interpss.core.aclf.AclfLoadCode; import com.interpss.core.aclf.impl.AclfLoadImpl; import com.interpss.core.acsc.PhaseCode; @@ -15,6 +16,8 @@ public class Load1PhaseImpl extends AclfLoadImpl implements Load1Phase { LoadConnectionType loadConnectType = LoadConnectionType.Single_Phase_Wye; // by default three-phase wye; double nominalKV = 0; + double Vminpu = 0.90; // pu + double Vmaxpu = 1.1; // pu PhaseCode ph = PhaseCode.A; //connected phase(s) @@ -40,6 +43,29 @@ public Complex3x3 getEquivYabc() { return this.equivYabc; } + + @Override + public Complex getLoad(double vmag) { + if (this.code == AclfLoadCode.CONST_P){ + if(vmag>this.Vminpu) + return this.loadCP; + else + return this.loadCP.multiply(vmag*vmag); + } + else if (this.code == AclfLoadCode.CONST_I) + if(vmag>this.Vminpu) + return this.loadCI.multiply(vmag); + else + return this.loadCI.multiply(vmag*vmag); + else if (this.code == AclfLoadCode.CONST_Z) + return this.loadCZ.multiply(vmag*vmag); + else { + if(vmag>this.Vminpu) + return this.loadCP.add(this.loadCI.multiply(vmag)).add(loadCZ.multiply(vmag*vmag)); + else + return (this.loadCP.add(this.loadCI).add(loadCZ)).multiply(vmag*vmag); + } + } @Override public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { @@ -52,6 +78,10 @@ public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { // } Complex vt = null; double vmag=1.0; + + if(vabc.absMax()<0.001) // too low voltage, current equals to zero + return equivCurInj; + switch (this.loadConnectType){ case Single_Phase_Wye: if(this.ph==PhaseCode.A){ @@ -160,4 +190,28 @@ public double getNominalKV() { return this.nominalKV; } + @Override + public void setVminpu(double newVminpu) { + this.Vminpu = newVminpu; + + } + + @Override + public void setVmaxpu(double newVmaxpu) { + this.Vmaxpu = newVmaxpu; + + } + + @Override + public double getVminpu() { + + return this.Vminpu; + } + + @Override + public double getVmaxpu() { + + return this.Vmaxpu; + } + } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java index 14426e0..ad6b750 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load3PhaseImpl.java @@ -136,13 +136,38 @@ public Complex3x1 getEquivCurrInj(Complex3x1 vabc) { code = AclfLoadCode.CONST_P; // by default constant PQ } + if(vabc.absMax()<0.001) // too low voltage, current equals to zero + return new Complex3x1(); + switch (this.loadConnectType){ case Three_Phase_Wye: if(this.code==AclfLoadCode.CONST_P){ // default - loadPQ = ph3Load; + double va = vabc.a_0.abs(); + double vb = vabc.b_1.abs(); + double vc = vabc.c_2.abs(); + + if(va>this.Vminpu) + loadPQ.a_0 = ph3Load.a_0; + else + loadPQ.a_0 = ph3Load.a_0.multiply(va*va); + + if(vb>this.Vminpu) + loadPQ.b_1 = ph3Load.b_1; + else + loadPQ.b_1 = ph3Load.b_1.multiply(vb*vb); + + if(vc>this.Vminpu) + loadPQ.c_2 = ph3Load.c_2; + else + loadPQ.c_2 = ph3Load.c_2.multiply(vc*vc); + } else if(this.code==AclfLoadCode.CONST_I){ + double va = vabc.a_0.abs(); + double vb = vabc.b_1.abs(); + double vc = vabc.c_2.abs(); + loadPQ.a_0 = ph3Load.a_0.multiply(vabc.a_0.abs()); loadPQ.b_1 = ph3Load.b_1.multiply(vabc.b_1.abs()); loadPQ.c_2 = ph3Load.c_2.multiply(vabc.c_2.abs()); @@ -174,6 +199,7 @@ else if(this.code==AclfLoadCode.CONST_Z){ } + return equivCurInj = loadPQ.divide(vabc).conjugate().multiply(-1.0); } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java index 930737e..cda2534 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test_GC_12_47_1_Feeder.java @@ -264,7 +264,7 @@ public void test3PhDynamic_WithBuidingLoad() throws InterpssException{ dstabAlgo.setSimuMethod(DynamicSimuMethod.MODIFIED_EULER); dstabAlgo.setSimuStepSec(0.005d); - dstabAlgo.setTotalSimuTimeSec(0.5); + dstabAlgo.setTotalSimuTimeSec(1); //dstabAlgo.setRefMachine(net.getMachine("Bus3-mach1")); //distNet.addDynamicEvent(DStabObjectFactory.createBusFaultEvent("150r", distNet, SimpleFaultCode.GROUND_LG,new Complex(0,0.0),new Complex(0,0.0), 0.5,0.07), "SLG@Bus1"); @@ -335,11 +335,11 @@ public void test3PhDynamic_WithBuidingLoad() throws InterpssException{ } - if(dstabAlgo.getSimuTime()>=0.1 && dstabAlgo.getSimuTime()<=0.2){ + if(dstabAlgo.getSimuTime()>=0.1 && dstabAlgo.getSimuTime()<=0.183){ mach.setE(vsag); } - if (dstabAlgo.getSimuTime()>0.2){ + if (dstabAlgo.getSimuTime()>0.183){ if(delayRecoverFlag){ double rampRate = (1.0-vsag)/delayRecoverTime; double volt = vsag + (dstabAlgo.getSimuTime()-0.2)*rampRate; @@ -377,16 +377,18 @@ public void test3PhDynamic_WithBuidingLoad() throws InterpssException{ // sb.append(entry.getKey()+","+entry.getValue()+"\n"); // } - FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//motor_rating.csv",sb.toString()); +// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//motor_rating.csv",sb.toString()); System.out.println("\n"+sm.toCSVString(sm.getBusPhAVoltTable())); //System.out.println(sm.toCSVString(sm.getBusPhBVoltTable())); //System.out.println(sm.toCSVString(sm.getBusPhCVoltTable())); System.out.println(sm.toCSVString(sm.getMotorPTable())); System.out.println(sm.toCSVString(sm.getMotorFuvTable())); + System.out.println(sm.toCSVString(sm.getMotorSlipTable())); + FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_5cycles_normal_recov_phAVolt.csv", sm.toCSVString(sm.getBusPhAVoltTable())); - FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_normal_recov_motorP.csv", sm.toCSVString(sm.getMotorPTable())); - FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_normal_recov_motorFuv.csv", sm.toCSVString(sm.getMotorFuvTable())); +// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_5cycles_normal_recov_motorP.csv", sm.toCSVString(sm.getMotorPTable())); +// FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_5cycles_normal_recov_motorFuv.csv", sm.toCSVString(sm.getMotorFuvTable())); // // FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_delayed_recov_motorP.csv", sm.toCSVString(sm.getMotorPTable())); // FileUtil.writeText2File("C://Qiuhua//FY2016_Project_CompositeLoad//protection//GC_Feeders//vsag_0.4_0.1s_delayed_recov_motorFuv.csv", sm.toCSVString(sm.getMotorFuvTable())); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/ThreeBus_3Phase_Test.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/ThreeBus_3Phase_Test.java index 847586e..862a711 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/ThreeBus_3Phase_Test.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/ThreeBus_3Phase_Test.java @@ -675,7 +675,7 @@ private DStabNetwork3Phase create3BusFeeder_unbalanced() throws InterpssExceptio } -private DStabNetwork3Phase create3BusSys() throws InterpssException{ + private DStabNetwork3Phase create3BusSys() throws InterpssException{ DStabNetwork3Phase net = new DStabNetwork3phaseImpl(); diff --git a/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat b/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat index 47fd9a7..6f639c5 100644 --- a/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat +++ b/ipss.plugin.3phase/testData/feeder/IEEE123/ieee123_netString.dat @@ -4677,9 +4677,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4699,9 +4699,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4721,9 +4721,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4743,9 +4743,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4765,9 +4765,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4787,9 +4787,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4809,9 +4809,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4831,9 +4831,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4853,9 +4853,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4875,9 +4875,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4897,9 +4897,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4919,9 +4919,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4941,9 +4941,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4963,9 +4963,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -4985,9 +4985,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5007,9 +5007,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5029,9 +5029,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5051,9 +5051,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5073,9 +5073,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5095,9 +5095,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5117,9 +5117,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5139,9 +5139,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5161,9 +5161,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5183,9 +5183,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5205,9 +5205,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5227,9 +5227,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5249,9 +5249,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5271,9 +5271,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5293,9 +5293,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5315,9 +5315,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5337,9 +5337,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5359,9 +5359,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5381,9 +5381,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5403,9 +5403,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5425,9 +5425,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5447,9 +5447,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5469,9 +5469,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5491,9 +5491,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5513,9 +5513,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5535,9 +5535,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5557,9 +5557,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5579,9 +5579,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5601,9 +5601,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5623,9 +5623,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5645,9 +5645,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5667,9 +5667,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5689,9 +5689,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5711,9 +5711,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5733,9 +5733,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5755,9 +5755,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5777,9 +5777,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5799,9 +5799,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5821,9 +5821,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5843,9 +5843,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5865,9 +5865,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5887,9 +5887,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5909,9 +5909,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5931,9 +5931,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5953,9 +5953,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5975,9 +5975,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -5997,9 +5997,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6019,9 +6019,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6041,9 +6041,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6063,9 +6063,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6085,9 +6085,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6107,9 +6107,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6129,9 +6129,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6151,9 +6151,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6173,9 +6173,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6195,9 +6195,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6217,9 +6217,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6239,9 +6239,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6261,9 +6261,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6283,9 +6283,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6305,9 +6305,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6327,9 +6327,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6349,9 +6349,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6371,9 +6371,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6393,9 +6393,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6415,9 +6415,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6437,9 +6437,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6459,9 +6459,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6481,9 +6481,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6503,9 +6503,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6525,9 +6525,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6547,9 +6547,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6569,9 +6569,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6591,9 +6591,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6613,9 +6613,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6635,9 +6635,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6657,9 +6657,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6679,9 +6679,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6701,9 +6701,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6723,9 +6723,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6745,9 +6745,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6767,9 +6767,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6789,9 +6789,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6811,9 +6811,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6833,9 +6833,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6855,9 +6855,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6877,9 +6877,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6899,9 +6899,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6921,9 +6921,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6943,9 +6943,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6965,9 +6965,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -6987,9 +6987,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7009,9 +7009,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7031,9 +7031,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7053,9 +7053,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7075,9 +7075,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7097,9 +7097,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7119,9 +7119,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7141,9 +7141,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7163,9 +7163,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7185,9 +7185,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7207,9 +7207,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7229,9 +7229,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7251,9 +7251,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7273,9 +7273,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7295,9 +7295,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7317,9 +7317,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7339,9 +7339,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7361,9 +7361,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7383,9 +7383,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7405,9 +7405,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7427,9 +7427,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7452,7 +7452,7 @@ AcscBranch Info LF results p+jq(f->t) : 0.0000 + j-0.0000 pu 0.0000 + j-0.01629 kva p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.14116 kva - current : 0.0000 + j0.0000 pu ? Amps + current : 0.0000 + j0.0000 pu ∞ Amps SC Info: z0: 0.0000 + j0.0000 @@ -7478,7 +7478,7 @@ AcscBranch Info LF results p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - current : 0.0000 + j0.0000 pu ? Amps + current : 0.0000 + j0.0000 pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7504,7 +7504,7 @@ AcscBranch Info LF results p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - current : 0.0000 + j0.0000 pu ? Amps + current : 0.0000 + j0.0000 pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7530,7 +7530,7 @@ AcscBranch Info LF results p+jq(f->t) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva p+jq(t->f) : 0.0000 + j0.0000 pu 0.0000 + j0.0000 kva - current : 0.0000 + j0.0000 pu ? Amps + current : 0.0000 + j0.0000 pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7554,9 +7554,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7580,9 +7580,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 @@ -7606,9 +7606,9 @@ AcscBranch Info toShuntY: 0.0000 + j0.0000 pu mvaRating1,mvaRating2,mvaRating3: 0.0000, 0.0000, 0.0000 LF results - p+jq(f->t) : ? + j? pu ? + j? kva - p+jq(t->f) : ? + j? pu ? + j? kva - current : ? + j? pu ? Amps + p+jq(f->t) : � + j� pu � + j� kva + p+jq(t->f) : � + j� pu � + j� kva + current : � + j� pu � Amps SC Info: z0: 0.0000 + j0.0000 From 044587b86a573f3946a9123e33ad2306f3dfc1f3 Mon Sep 17 00:00:00 2001 From: thuang Date: Sun, 15 Oct 2017 16:23:40 -0700 Subject: [PATCH 35/36] fixed single-phase AC motor bugs and updated 3-phase dyn models --- .../threePhase/basic/impl/Load1PhaseImpl.java | 2 +- .../dynamic/impl/DStabNetwork3phaseImpl.java | 3 +- .../model/InductionMotor3PhaseAdapter.java | 6 +- .../model/impl/SinglePhaseACMotor.java | 122 +++++++++++------- .../DistributionPowerFlowAlgorithmImpl.java | 3 +- .../test/Test3PhaseInductionMotor.java | 19 --- 6 files changed, 83 insertions(+), 72 deletions(-) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java index 5385715..38c693a 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/basic/impl/Load1PhaseImpl.java @@ -16,7 +16,7 @@ public class Load1PhaseImpl extends AclfLoadImpl implements Load1Phase { LoadConnectionType loadConnectType = LoadConnectionType.Single_Phase_Wye; // by default three-phase wye; double nominalKV = 0; - double Vminpu = 0.90; // pu + double Vminpu = 0.85; // pu double Vmaxpu = 1.1; // pu PhaseCode ph = PhaseCode.A; //connected phase(s) diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java index 31df683..7fa21c9 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/impl/DStabNetwork3phaseImpl.java @@ -811,7 +811,8 @@ public boolean initPosSeqDStabNet() { @Override public Hashtable get3phaseCustomCurrInjTable() { - + if(this.threePhaseCurInjTable ==null) + this.threePhaseCurInjTable = new Hashtable(); return this.threePhaseCurInjTable; } diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java index f1d1348..50cc86e 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/InductionMotor3PhaseAdapter.java @@ -92,8 +92,12 @@ public Complex3x3 getYabc(boolean machineMVABase) { @Override public Complex3x1 getPower3Phase(UnitType unit) { //Power = VABC*conj(equivYABC*VABC - IgenABC) + Complex3x1 Vabc = ((Bus3Phase)this.indMotor.getDStabBus()).get3PhaseVotlages(); + Complex3x1 Iabc = getIinj2Network3Phase(); + + Complex3x1 Pabc = Vabc.multiply(Iabc.conjugate()); - return null; + return Pabc; } @Override diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java index 86146a6..7634217 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java @@ -103,9 +103,9 @@ public class SinglePhaseACMotor extends DynLoadModel1Phase { private double Vstallbrk = 0.0; // restart - private double Frst = 0.0; // 0.2 + private double Frst = 0.0; // no motor can restart private double Vrst = 0.9; - private double Trst = 0.4; + private double Trst = 0.4; // it task the ac 0.4 second to restart of stalling // real and reactive power frequency sensitivity private double CmpKpf = 1.0; @@ -122,14 +122,14 @@ public class SinglePhaseACMotor extends DynLoadModel1Phase { //Contractor setting private double Vc1off = 0.5; private double Vc2off = 0.4; - private double Vc1on = 0.6; - private double Vc2on = 0.5; + private double Vc1on = 0.65; + private double Vc2on = 0.55; //Thermal relay setting // Based on "WECC air conditioner motor model test report", Page.75 - private double Tth = 8; - private double Th1t = 1.3; - private double Th2t = 4.3; + private double Tth = 15; + private double Th1t = 0.7; + private double Th2t = 1.9; @@ -143,10 +143,12 @@ public class SinglePhaseACMotor extends DynLoadModel1Phase { //Thermal relays - // the tripping characterisic is modeled as y = Ax +B for x within {Th1t, Th2t} + // the tripping characterisic is modeled as y = thermalEqnCoeff1*x +thermalEqnCoeff2 for x within {Th1t, Th2t} + // here x is the internal temperature, y is the output for determining thermal tripping + // when x>Th1t, starting trippinng, when x>Th2t, all will be tripped - private double thEqnA = -1.0/3; - private double thEqnB = 1.433; // default value + private double thermalEqnCoeff1 = -1.0/3; + private double thermalEqnCoeff2 = 1.433; // default value private double temperature = 0.0d; @@ -204,6 +206,8 @@ public class SinglePhaseACMotor extends DynLoadModel1Phase { private Complex equivYpq; private Complex nortonCurInj; + private boolean debugMode = false; + public SinglePhaseACMotor(){ states = new Hashtable<>(); @@ -269,18 +273,21 @@ public boolean initStates() { this.setInitLoadPQ(new Complex(pac,qac)); this.setLoadPQ(new Complex(pac,qac)); + double mVABase1Phase = this.getDStabBus().getNetwork().getBaseMva()/3.0; + // if mva is not defined and loading factor is available if(this.getMVABase()==0.0){ if(this.loadFactor >0 && this.loadFactor<=1.0) IpssLogger.getLogger().fine("AC motor MVABase will be calculated based on load factor"); else this.loadFactor = 1.0; - // phase mva base is the 1/3 of the system 3phaes mva base - double calcMva = this.pac*this.getDStabBus().getNetwork().getBaseMva()/3.0d/this.loadFactor; + // single-phase mva base is the 1/3 of the system 3-phae mva base + double calcMva = this.pac*mVABase1Phase/this.loadFactor; this.setMVABase(calcMva); } - this.I_CONV_FACTOR_M2S = this.getMVABase()/this.getDStabBus().getNetwork().getBaseMva(); + // multiply factor 3 -- becuase this is for single phase, and the single-phase mvabase is 1/3 of the three-phase system MVAbase + this.I_CONV_FACTOR_M2S = this.getMVABase()/ mVABase1Phase; @@ -295,13 +302,7 @@ public boolean initStates() { this.compensateShuntY = new Complex(0,b); } - - - Complex Sac = new Complex (pac, qac); - double i_motor = Sac.abs()/vt; - - this.tempA = i_motor*i_motor*this.Rstall; - this.tempB = this.tempA; + this.equivYpq = new Complex(pac,qac).conjugate().divide(vt*vt); // on motor MVABase // update the Vstall and Vbrk if necessary @@ -309,8 +310,14 @@ public boolean initStates() { this.Vbrk = this.Vbrk*(1+this.LFadj*(this.loadFactor-1)); // motor P and Q on motor mvabase - double pac_mbase = this.pac*this.getDStabBus().getNetwork().getBaseMva()/this.getMVABase(); - double qac_mbase = this.qac*this.getDStabBus().getNetwork().getBaseMva()/this.getMVABase(); + double pac_mbase = this.pac* mVABase1Phase/this.getMVABase(); + double qac_mbase = this.qac* mVABase1Phase/this.getMVABase(); + + Complex Sac_motor_pu = new Complex (pac_mbase, qac_mbase); + double i_motor = Sac_motor_pu.abs()/vt; + + this.tempA = i_motor*i_motor*this.Rstall; + this.tempB = this.tempA; // initialize the parts A and B of the motor this.pac_a = pac_mbase; @@ -345,15 +352,15 @@ public boolean initStates() { //calculate the thermal protection equation coefficient if(Th1t >0 && Th2t>Th1t){ - thEqnA = -1/(Th2t-Th1t); - thEqnB = Th2t/(Th2t-Th1t); + thermalEqnCoeff1 = -1/(Th2t-Th1t); + thermalEqnCoeff2 = Th2t/(Th2t-Th1t); } else{ - thEqnA = 0.0; - thEqnB = 0.0; + thermalEqnCoeff1 = 0.0; + thermalEqnCoeff2 = 0.0; } - this.equivY = this.getEquivY(); + this.equivY = this.getEquivY(); // On system mva base, not motor mva base extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); this.states.put(DStabOutSymbol.OUT_SYMBOL_BUS_DEVICE_ID, extended_device_Id); @@ -381,8 +388,9 @@ public boolean nextStep(double dt, DynamicSimuMethod method) { // check the protection actions and update the status of AC motor accordingly timestep = dt; + Complex vt = this.getBusPhaseVoltage(); + double vmag = vt.abs(); - double vmag = this.getBusPhaseVoltage().abs(); // voltage measurements @@ -404,20 +412,29 @@ public boolean nextStep(double dt, DynamicSimuMethod method) { and B parts of the load that have not been tripped by the thermal protection is output as fthA and fthB, respectively. */ - Complex vt = this.getDStabBus().getVoltage(); + // motor stator current in motor mva base Complex ImotorA_pu = new Complex(0.0); Complex ImotorB_pu = new Complex(0.0); if(this.statusA ==0) - ImotorA_pu = vt.multiply(this.equivY); - else - ImotorA_pu = new Complex(pac_a, qac_a).divide(vt).conjugate(); + ImotorA_pu = vt.multiply(this.Ystall); + else{ + //Updated 10/14/2017 to fix the bug with the voltage is close to zero; + if(vt.abs()>this.Vstallbrk) + ImotorA_pu = new Complex(pac_a, qac_a).divide(vt).conjugate(); + else + ImotorA_pu = vt.multiply(this.Ystall); + } if(this.statusB ==0) - ImotorB_pu = vt.multiply(this.equivY); - else - ImotorB_pu = new Complex(pac_b, qac_b).divide(vt).conjugate(); + ImotorB_pu = vt.multiply(this.Ystall); + else{ + if(vt.abs()>this.Vstallbrk) + ImotorB_pu = new Complex(pac_b, qac_b).divide(vt).conjugate(); + else + ImotorB_pu = vt.multiply(this.Ystall); + } double dThA_dt0 = (Math.pow(ImotorA_pu.abs(),2)*this.Rstall - this.tempA)/this.Tth; @@ -432,7 +449,9 @@ public boolean nextStep(double dt, DynamicSimuMethod method) { this.tempA = this.tempA + (dThA_dt0+dThA_dt1)*0.5d*dt; this.tempB = this.tempB + (dThB_dt0+dThB_dt1)*0.5d*dt; - + + if(debugMode) + System.out.println("next step:" +extended_device_Id+" vt ="+vmag+", tempA = "+this.tempA); return flag; } @@ -547,10 +566,10 @@ else if(this.vt_measured < this.Vc1on && this.vt_measured >= this.Vc2on){ % the remaining fraction; */ - if(this.thEqnA< 0.0){ + if(this.thermalEqnCoeff1< 0.0){ if(this.tempA > this.Th1t){ if(this.statusA == 0){ - this.fthA = this.tempA*this.thEqnA + this.thEqnB; + this.fthA = this.tempA*this.thermalEqnCoeff1 + this.thermalEqnCoeff2; if(this.fthA<0.0) this.fthA = 0.0; @@ -559,7 +578,7 @@ else if(this.vt_measured < this.Vc1on && this.vt_measured >= this.Vc2on){ if(this.tempB > this.Th1t){ if(this.statusB == 0){ - this.fthB = this.tempB*this.thEqnB + this.thEqnB; + this.fthB = this.tempB*this.thermalEqnCoeff1 + this.thermalEqnCoeff2; if(this.fthB<0.0) this.fthB = 0.0; @@ -567,7 +586,10 @@ else if(this.vt_measured < this.Vc1on && this.vt_measured >= this.Vc2on){ } } - + if(debugMode){ + System.out.println("next step: motor, fthA, fthB = "+this.extended_device_Id+","+this.fthA+","+this.fthB ); + System.out.println("next step: motor, thEqnA, tempA, tempB = "+this.extended_device_Id+","+thermalEqnCoeff1+","+this.tempA+","+this.tempB ); + } // Calculate the AC motor power // call this method to update "this.PQmotor" @@ -589,6 +611,7 @@ private Complex calculateMotorPower(){ double freq = this.getDStabBus().getFreq(); double vmag = this.getBusPhaseVoltage().abs(); + // running mode if(this.statusA == 1){ if(vmag >= this.Vbrk){ this.pac_a = (p0 +Kp1*Math.pow((vmag-this.Vbrk),this.Np1))*(1+this.CmpKpf*(freq-1.0)); @@ -605,7 +628,7 @@ else if(vmag this.Vstallbrk){ } } - // stall + // stall mode else { this.pac_a =this.Gstall*vmag*vmag; this.qac_a =-this.Bstall*vmag*vmag; @@ -641,16 +664,19 @@ else if(vmag this.Vstallbrk){ double Pmotor = this.pac_a*(1-this.Frst)*this.fthA+this.pac_b*this.Frst*this.fthB; double Qmotor = this.qac_a*(1-this.Frst)*this.fthA+this.qac_b*this.Frst*this.fthB; - // consider the UR Relay and contractor + // consider the UR Relay and contractor status Pmotor = this.kuv*this.kcon*Pmotor; Qmotor = this.kuv*this.kcon*Qmotor; - this.PQmotor = new Complex(Pmotor, Qmotor); - this.setLoadPQ(this.PQmotor.multiply(getPowerConvFactorM2S())); - - this.pac = this.getLoadPQ().getReal(); // both are on system base - this.qac = this.getLoadPQ().getImaginary(); + this.PQmotor = new Complex(Pmotor, Qmotor); // on motor base + this.pac = Pmotor*getPowerConvFactorM2S(); // converted to system base + this.qac = Qmotor*getPowerConvFactorM2S(); + + if(debugMode){ + System.out.println(extended_device_Id+" statusA, pac_a,pac_b,kuv, kcon= "+this.statusA+","+this.pac_a+","+this.qac_a+","+this.kuv+","+this.kcon); + System.out.println(extended_device_Id+" power on system base = "+this.getLoadPQ().toString()); + } return this.PQmotor; } @@ -659,7 +685,7 @@ else if(vmag this.Vstallbrk){ * @return */ private double getPowerConvFactorM2S(){ - return this.getMVABase()/this.getDStabBus().getNetwork().getBaseMva(); + return this.getMVABase()/this.getDStabBus().getNetwork().getBaseMva()*3.0; } @Override diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java index d3a44a8..6304082 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java @@ -472,8 +472,7 @@ else if (upStreamBranch.isXfr()){ // power flow is converged, break the outer iteration and return if(i>0 && this.pfFlag) { - System.out.println("\n\nDistribution power flow converged, iterations = "+(i+1)+"\n"); - + //System.out.println("\n\nDistribution power flow converged, iterations = "+(i+1)+"\n"); calcSwingBusGenPower(); diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java index 7515712..31c4b76 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/test/Test3PhaseInductionMotor.java @@ -1,13 +1,10 @@ package org.ipss.threePhase.test; -import static org.ipss.threePhase.util.ThreePhaseUtilFunction.threePhaseInductionMotorAptr; import static org.junit.Assert.assertTrue; import org.interpss.IpssCorePlugin; import org.ipss.threePhase.basic.Bus3Phase; import org.ipss.threePhase.dynamic.DStabNetwork3Phase; -import org.ipss.threePhase.dynamic.model.DynLoadModel3Phase; -import org.ipss.threePhase.dynamic.model.InductionMotor3PhaseAdapter; import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; import org.ipss.threePhase.powerflow.impl.DistPowerFlowOutFunc; import org.ipss.threePhase.util.ThreePhaseObjectFactory; @@ -21,9 +18,7 @@ import com.interpss.dstab.algo.DynamicSimuMethod; import com.interpss.dstab.cache.StateMonitor; import com.interpss.dstab.cache.StateMonitor.DynDeviceType; -import com.interpss.dstab.device.DynamicBusDevice; import com.interpss.dstab.dynLoad.InductionMotor; -import com.interpss.dstab.dynLoad.impl.InductionMotorImpl; public class Test3PhaseInductionMotor extends TestBase{ @@ -35,20 +30,6 @@ public void testIndMotor() throws InterpssException{ DStabNetwork3Phase net = create2BusSys(); net.setNetworkType(NetworkType.DISTRIBUTION); -// // initGenLoad-- summarize the effects of contributive Gen/Load to make equivGen/load for power flow calculation -// net.initContributeGenLoad(); -// -// //create a load flow algorithm object -// LoadflowAlgorithm algo = CoreObjectFactory.createLoadflowAlgorithm(net); -// //run load flow using default setting -// -// // run power flow -// assertTrue(algo.loadflow()) ; -// -// -// System.out.println(AclfOutFunc.loadFlowSummary(net)); -// -// net.initThreePhaseFromLfResult(); DistributionPowerFlowAlgorithm distPFAlgo = ThreePhaseObjectFactory.createDistPowerFlowAlgorithm(net); //distPFAlgo.orderDistributionBuses(true); From 6ebf255b8f8639e4ca87f18706215a265dc0a358 Mon Sep 17 00:00:00 2001 From: qhuang-pnl Date: Thu, 26 Apr 2018 09:26:34 -0700 Subject: [PATCH 36/36] update PF algo for swing bus voltage init; AC motor load change --- ipss.plugin.3phase/.classpath | 48 +- .../model/impl/SinglePhaseACMotor.java | 2171 +++++++++-------- .../DistributionPowerFlowAlgorithmImpl.java | 1344 +++++----- 3 files changed, 1787 insertions(+), 1776 deletions(-) diff --git a/ipss.plugin.3phase/.classpath b/ipss.plugin.3phase/.classpath index a879e2c..13f9d10 100644 --- a/ipss.plugin.3phase/.classpath +++ b/ipss.plugin.3phase/.classpath @@ -1,24 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java index 7634217..f6b3160 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/dynamic/model/impl/SinglePhaseACMotor.java @@ -1,1083 +1,1088 @@ -package org.ipss.threePhase.dynamic.model.impl; - -import java.util.Hashtable; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Phase; -import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; - -import com.interpss.common.util.IpssLogger; -import com.interpss.dstab.DStabBus; -import com.interpss.dstab.algo.DynamicSimuMethod; -import com.interpss.dstab.common.DStabOutSymbol; -import com.interpss.dstab.device.DynamicBusDeviceType; -/** - * This dynamic model of single phase AC motor must be used under the condition that the - * loads in the power flow data is input as Load3phase in the threePhaseLoadList. - * - * Reference: WECC Dynamic Composite Load Model (CMPLDW) Specifications published 01-27-2015 - * The compressor motor model is divided into two parts: - Motor A : Those compressors that cann't restart soon after stalling - Motor B : Those compressors that can restart soon after stalling - - The motors are represented by algebraic equations, as follows: - If V > 0.86: - P = Po * (1 + df ) - Q = [Qo + 6 * (V -0.86) ^2 ] * (1 - 3.3 * df ) - If V < 0.86 and V > Vstal - P = [Po + 12 * (0.86- V)^3.2 ] * (1 +df ) - Q = [Qo + 11 * (0.86 -V)^ 2.5 ] * (1 - 3.3 * df ) - If V < Vstall: - P = Gstall * V * V - Q = - Bstall * V * V - If V < Vstall for t > Tstall, motor stays in stalled state. - - For restartable motor, if V > Vrst for t > Trst, the motor restarts. - - Initialization calculations: - Qo = Po * tan ( acos(CompPF) ) - 6 * (1-0.86) ^2 - - V’stall is calculated to determine the voltage level at which there is an intersection between the stall power characteristic and the transition characteristic used for V < 0.86: - for ( V = 0.4; V < Vstall; V += 0.01 ) - { - pst = Gstall * V2 - p_comp = Po + 12 * (0.86- V) 3.2 - if ( p_comp < pst ) - { - Vstall = V - break - } - } - - * - * @author Qiuhua - * - */ -public class SinglePhaseACMotor extends DynLoadModel1Phase { - - - - //Model data - - private double p=0,q=0; // load pq values without considering load characteristic factors - private double p0 = 0.0,q0 =0.0; // initial load exponential characteristic factors - private double pac =0.0,qac = 0.0; // actual load pq after considering load characteristic factors - - - private double pac_a = 0.0, qac_a = 0.0, pac_b = 0.0, qac_b = 0.0; - - // there are 3 stages: 0 - running; 1 - stall ; 2- a fraction of motors restart - private int stage = 0; - private double powerFactor = 0.97; - - - - //stalling setting - private double Vstall = 0.6; - private double Rstall = 0.1140; //0.1240; - private double Xstall = 0.1040; // 0.1140; - private double Tstall = 0.033; - private double Gstall = 0.0, Bstall = 0.0; - private Complex Ystall = null; - - private double LFadj = 0.0; - - private double Kp1 = 0.0; - private double Np1 = 1.0; - - private double Kq1 = 6.0; - private double Nq1 = 2.0; - - private double Kp2 = 12.0; - private double Np2 = 3.2; - - - private double Kq2 = 11.0; - private double Nq2 = 2.5; - - //breaking point - private double Vbrk =0.86; - // cross point of two curves for the run stage 2 and the stall stage - private double Vstallbrk = 0.0; - - // restart - private double Frst = 0.0; // no motor can restart - private double Vrst = 0.9; - private double Trst = 0.4; // it task the ac 0.4 second to restart of stalling - - // real and reactive power frequency sensitivity - private double CmpKpf = 1.0; - private double CmpKqf = -3.3; - - - //UVRelay - private double Fuvr = 0.0; - private double UVtr1 = 0.0; - private double Ttr1 = 999.0; - private double UVtr2 = 0.0; - private double Ttr2 = 999.0; - - //Contractor setting - private double Vc1off = 0.5; - private double Vc2off = 0.4; - private double Vc1on = 0.65; - private double Vc2on = 0.55; - - //Thermal relay setting - // Based on "WECC air conditioner motor model test report", Page.75 - private double Tth = 15; - private double Th1t = 0.7; - private double Th2t = 1.9; - - - - //Affiliated control component - //UV Relay and Contractor - - private double kuv =1.0, kcon = 1.0, fcon_trip = 0.0; - - private boolean isContractorActioned = false; - - - - //Thermal relays - // the tripping characterisic is modeled as y = thermalEqnCoeff1*x +thermalEqnCoeff2 for x within {Th1t, Th2t} - // here x is the internal temperature, y is the output for determining thermal tripping - // when x>Th1t, starting trippinng, when x>Th2t, all will be tripped - - private double thermalEqnCoeff1 = -1.0/3; - private double thermalEqnCoeff2 = 1.433; // default value - - private double temperature = 0.0d; - - private double remainFraction = 1.0; // Remained fraction on-line after thermal tripping - - // internally modeled as two motors, i.e., motor A and B - private int statusA =1, statusB = 1; - - protected double fcon = 1.0; // fraction not tripped by the contractor - - protected double fthA = 1.0; // fraction not tripped by the motor A thermal protection - - protected double fthB = 1.0; // fraction not tripped by the motor B thermal protection - - protected double tempA = 0.0; // Temperature of the motor A - - protected double tempB = 0.0; // Temperature of the motor B - - protected double tv = 0.05; // voltage measurement time constant - - protected double complf = 1.0; - - // Timers for relays and internal controls - - private double UVRelayTimer1 = 0.0; - private double UVRelayTimer2 = 0.0; - - //Timers for stalling and recovery - private double acStallTimer = 0.0; - private double acRestartTimer = 0.0; - - - private double vt_measured = 0.0; - - private double timestep = 0.0; - - private boolean disableInternalStallControl = false; - - - - private double I_CONV_FACTOR_M2S = 0.0; - - - - - - private Hashtable states = null; - private static final String OUT_SYMBOL_P ="ACMotorP"; - private static final String OUT_SYMBOL_Q ="ACMotorQ"; - private static final String OUT_SYMBOL_VT ="ACMotorVt"; - private static final String OUT_SYMBOL_STATE ="ACMotorState"; - private static final String OUT_SYMBOL_RemainFraction ="ACMotorRemainFraction"; - - private Complex PQmotor; - private Complex equivYpq; - private Complex nortonCurInj; - - private boolean debugMode = false; - - - public SinglePhaseACMotor(){ - states = new Hashtable<>(); - - } - - public SinglePhaseACMotor(String Id){ - this(); - this.id = Id; - } - - /** - * create an instance of SinglePhaseACMotor - * @param bus - * @param Id - */ - public SinglePhaseACMotor(Bus3Phase bus,String Id){ - this(Id); - this.setDStabBus(bus); - - - } - - - @Override - public boolean initStates() { - boolean flag = true; - - - //TODO the initLoad is the total load at the bus ,include constant Z and I load - //In the future, this may need to be update to consider the constant P load only - - //TODO 11/19/2015 need to add three-phase InitLoad to differentiate phase loads - - - Complex phaseTotalLoad = null; - Complex3x1 totalLoad3Phase = this.getParentBus().get3PhaseTotalLoad(); - if(totalLoad3Phase.abs()>0.0){ - switch(this.getPhase()){ - case A: phaseTotalLoad = totalLoad3Phase.a_0; break; - case B: phaseTotalLoad = totalLoad3Phase.b_1; break; - case C: phaseTotalLoad = totalLoad3Phase.c_2; break; - } - - } - else{ // TODO assuming three-phase balanced - phaseTotalLoad = this.getDStabBus().getInitLoad(); - - } - - this.stage = 1; // initialized to running state - - this.Gstall = this.Rstall/(this.Rstall*this.Rstall + this.Xstall*this.Xstall); - this.Bstall = -this.Xstall/(this.Rstall*this.Rstall + this.Xstall*this.Xstall); - - this.Ystall = new Complex(this.Gstall, this.Bstall); - - pac = phaseTotalLoad.getReal()*this.loadPercent/100.0d; // pu on system base - qac = pac*Math.tan(Math.acos(this.powerFactor)); - - - // pac and qac is the initial power - this.setInitLoadPQ(new Complex(pac,qac)); - this.setLoadPQ(new Complex(pac,qac)); - - double mVABase1Phase = this.getDStabBus().getNetwork().getBaseMva()/3.0; - - // if mva is not defined and loading factor is available - if(this.getMVABase()==0.0){ - if(this.loadFactor >0 && this.loadFactor<=1.0) - IpssLogger.getLogger().fine("AC motor MVABase will be calculated based on load factor"); - else - this.loadFactor = 1.0; - // single-phase mva base is the 1/3 of the system 3-phae mva base - double calcMva = this.pac*mVABase1Phase/this.loadFactor; - this.setMVABase(calcMva); - } - - // multiply factor 3 -- becuase this is for single phase, and the single-phase mvabase is 1/3 of the three-phase system MVAbase - this.I_CONV_FACTOR_M2S = this.getMVABase()/ mVABase1Phase; - - - - double vt = this.getBusPhaseVoltage().abs(); - this.vt_measured = vt; - - //Check whether a compensation is needed. If yes, calculate the compensation shuntY - // if bus.loadQ < ld1pac.q, then compShuntB = ld1pac.q-bus.loadQ - if(qac >phaseTotalLoad.getImaginary()){ - - double b = (qac - phaseTotalLoad.getImaginary())/vt/vt; - this.compensateShuntY = new Complex(0,b); - } - - this.equivYpq = new Complex(pac,qac).conjugate().divide(vt*vt); // on motor MVABase - - - // update the Vstall and Vbrk if necessary - this.Vstall= this.Vstall*(1+this.LFadj*(this.loadFactor-1)); - this.Vbrk = this.Vbrk*(1+this.LFadj*(this.loadFactor-1)); - - // motor P and Q on motor mvabase - double pac_mbase = this.pac* mVABase1Phase/this.getMVABase(); - double qac_mbase = this.qac* mVABase1Phase/this.getMVABase(); - - Complex Sac_motor_pu = new Complex (pac_mbase, qac_mbase); - double i_motor = Sac_motor_pu.abs()/vt; - - this.tempA = i_motor*i_motor*this.Rstall; - this.tempB = this.tempA; - - // initialize the parts A and B of the motor - this.pac_a = pac_mbase; - this.pac_b = pac_mbase; - - this.qac_a = qac_mbase; - this.qac_b = qac_mbase; - - - // Calculate the P0 and Q0 at stage 0 - this.p0 = pac_mbase - this.Kp1*Math.pow((vt-this.Vbrk),this.Np1); - this.q0 = qac_mbase - this.Kq1*Math.pow((vt-this.Vbrk),this.Nq1); - - - - double pst = 0.0, pac_calc = 0.0; - for (double v = 0.4; vthis.Vstall){ - this.Vstallbrk = this.Vstall; - } - - - //calculate the thermal protection equation coefficient - if(Th1t >0 && Th2t>Th1t){ - thermalEqnCoeff1 = -1/(Th2t-Th1t); - thermalEqnCoeff2 = Th2t/(Th2t-Th1t); - } - else{ - thermalEqnCoeff1 = 0.0; - thermalEqnCoeff2 = 0.0; - } - - this.equivY = this.getEquivY(); // On system mva base, not motor mva base - - extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); - this.states.put(DStabOutSymbol.OUT_SYMBOL_BUS_DEVICE_ID, extended_device_Id); - - return flag; - } - - @Override public String getExtendedDeviceId(){ - extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); - return this.extended_device_Id; - } - - - - /** - * The thermal protection heating increase is modeled as - * differential equation, thus it must be represented with the nextStep(); - * - * The stall timer as well as the recovery timer are also counted and updated in this method - */ - @Override - public boolean nextStep(double dt, DynamicSimuMethod method) { - boolean flag = true; - - // check the protection actions and update the status of AC motor accordingly - timestep = dt; - - Complex vt = this.getBusPhaseVoltage(); - double vmag = vt.abs(); - - - - // voltage measurements - - double dv_dt0 = (vmag-this.vt_measured)/this.tv; - - double vt_measured1 = this.vt_measured+dv_dt0*dt; - - double dv_dt1 = (vmag-vt_measured1)/this.tv; - - this.vt_measured = this.vt_measured+ (dv_dt0+dv_dt1)*0.5d*dt; - - // thermal overload protection - /* - * When the motor is stalled, the temperature of the motor is computed by - integrating I^2 R through the thermal time constant Tth. If the temperature reaches Th2t, all of the load is - tripped. If the temperature is between Th1t and Th2t, a linear fraction of the load is tripped. The termperature - of the A and B portions of the load are computed separately. The fractions of the A - and B parts of the load that have not been tripped by the thermal protection is output as fthA and fthB, respectively. - */ - - - // motor stator current in motor mva base - Complex ImotorA_pu = new Complex(0.0); - Complex ImotorB_pu = new Complex(0.0); - - if(this.statusA ==0) - ImotorA_pu = vt.multiply(this.Ystall); - else{ - //Updated 10/14/2017 to fix the bug with the voltage is close to zero; - if(vt.abs()>this.Vstallbrk) - ImotorA_pu = new Complex(pac_a, qac_a).divide(vt).conjugate(); - else - ImotorA_pu = vt.multiply(this.Ystall); - } - - if(this.statusB ==0) - ImotorB_pu = vt.multiply(this.Ystall); - else{ - if(vt.abs()>this.Vstallbrk) - ImotorB_pu = new Complex(pac_b, qac_b).divide(vt).conjugate(); - else - ImotorB_pu = vt.multiply(this.Ystall); - } - - double dThA_dt0 = (Math.pow(ImotorA_pu.abs(),2)*this.Rstall - this.tempA)/this.Tth; - - double dThB_dt0 = (Math.pow(ImotorB_pu.abs(),2)*this.Rstall - this.tempB)/this.Tth; - - double tempA1 = this.tempA+ dThA_dt0*dt; - double tempB1 = this.tempB+ dThB_dt0*dt; - - double dThA_dt1 = (Math.pow(ImotorA_pu.abs(),2)*this.Rstall - tempA1)/this.Tth; - - double dThB_dt1 = (Math.pow(ImotorB_pu.abs(),2)*this.Rstall - tempB1)/this.Tth; - - this.tempA = this.tempA + (dThA_dt0+dThA_dt1)*0.5d*dt; - this.tempB = this.tempB + (dThB_dt0+dThB_dt1)*0.5d*dt; - - if(debugMode) - System.out.println("next step:" +extended_device_Id+" vt ="+vmag+", tempA = "+this.tempA); - - return flag; - } - - /** - * to check whether AC motor stalls, restarts and the actions of the protections - % this should be perform after the network solution step - */ - private boolean post_process_step(double dt){ - boolean flag = true; - /* - % UV Relay - % Two levels of undervoltage load shedding can be represented: If the voltage drops - % below uvtr1 for ttr1 seconds, the fraction “fuvtr” of the load is tripped; If the voltage drops below uvtr2 - % for ttr2 seconds, the fraction “fuvr” of the load is tripped - */ - - if(this.vt_measured 0.0){ - this.UVRelayTimer1 = this.UVRelayTimer1 +dt; - } - else - this.UVRelayTimer1 = 0.0; - - if(this.vt_measured 0.0){ - this.UVRelayTimer2 = this.UVRelayTimer2 +dt; - } - else - this.UVRelayTimer2 = 0.0; - - // trip the portion with under voltage relays - if(this.UVRelayTimer1> this.Ttr1){ - this.kuv = 1.0 - this.Fuvr; - } - - if(this.UVRelayTimer2> this.Ttr2){ - this.kuv = 1.0 - this.Fuvr; - } - - /* - % contractor - % Contactor – If the voltage drops to below Vc2off, all of the load is tripped; if the voltage is between - % Vc1off and Vc2off, a linear fraction of the load is tripped. If the voltage later recovers to above Vc2on, all - % of the motor is reconnected; if the voltage recovers to between Vc2on and Vc1on, a linear fraction of the - % load is reconnected. - */ - - if(this.vt_measured < this.Vc2off){ - this.kcon = 0.0; - this.fcon_trip = 1.0; - } - else if(this.vt_measured>=this.Vc2off && this.vt_measured =this.Vc1on){ - this.kcon = 1.0; - } - else if(this.vt_measured < this.Vc1on && this.vt_measured >= this.Vc2on){ - double Frecv = (this.vt_measured - this.Vc2on)/(this.Vc1on- this.Vc2on); - this.kcon = 1 - this.fcon_trip*(1-Frecv); - } - - - /* - * Thermal protection - */ - - // update the timer for thermal protection - - double vmag = this.getBusPhaseVoltage().abs(); - - if (this.statusA ==1){ - if(vmag < this.Vstall){ - this.acStallTimer = this.acStallTimer+ dt; - } - else - this.acStallTimer = 0.0; - } - - - if (this.statusB ==0){ - if(vmag > this.Vrst){ - this.acRestartTimer = this.acRestartTimer+ dt; - } - else - this.acRestartTimer = 0.0; - } - - /* - * % update the status of the motor. transition from running to - % stalling is the same for the equivalent Motor A and B - */ - - if(this.acStallTimer > this.Tstall && this.statusA ==1){ - this.statusA = 0; - this.statusB = 0; - this.stage = 0; - } - - // considering AC restarting - if(this.Frst >0.0 && this.statusB ==0 && this.acRestartTimer > this.Trst){ - this.statusB = 1; - this.stage = 2; - } - - - /* - % check whether AC motor will be trip next step, and what will be - % the remaining fraction; - */ - - if(this.thermalEqnCoeff1< 0.0){ - if(this.tempA > this.Th1t){ - if(this.statusA == 0){ - this.fthA = this.tempA*this.thermalEqnCoeff1 + this.thermalEqnCoeff2; - - if(this.fthA<0.0) - this.fthA = 0.0; - } - } - - if(this.tempB > this.Th1t){ - if(this.statusB == 0){ - this.fthB = this.tempB*this.thermalEqnCoeff1 + this.thermalEqnCoeff2; - - if(this.fthB<0.0) - this.fthB = 0.0; - } - } - } - - if(debugMode){ - System.out.println("next step: motor, fthA, fthB = "+this.extended_device_Id+","+this.fthA+","+this.fthB ); - System.out.println("next step: motor, thEqnA, tempA, tempB = "+this.extended_device_Id+","+thermalEqnCoeff1+","+this.tempA+","+this.tempB ); - } - // Calculate the AC motor power - - // call this method to update "this.PQmotor" - calculateMotorPower(); - - // update the equivalent admittance for calculating AC power - this.equivYpq = this.PQmotor.conjugate().divide(vmag*vmag); // on motor MVABase - - return flag; - } - - /** - * calculate the motor power, return value is pu on motor mvabase; - * @return - */ - private Complex calculateMotorPower(){ - - // Calculate the AC motor power - double freq = this.getDStabBus().getFreq(); - double vmag = this.getBusPhaseVoltage().abs(); - - // running mode - if(this.statusA == 1){ - if(vmag >= this.Vbrk){ - this.pac_a = (p0 +Kp1*Math.pow((vmag-this.Vbrk),this.Np1))*(1+this.CmpKpf*(freq-1.0)); - this.qac_a = (q0 +Kq1*Math.pow((vmag-this.Vbrk),this.Nq1))*(1+this.CmpKqf*(freq-1.0)); - - } - else if(vmag this.Vstallbrk){ - this.pac_a = (p0 +Kp2*Math.pow((this.Vbrk-vmag),this.Np2))*(1+this.CmpKpf*(freq-1.0)); - this.qac_a = (q0 +Kq2*Math.pow((this.Vbrk-vmag),this.Np2))*(1+this.CmpKqf*(freq-1.0)); - } - else{ - this.pac_a =this.Gstall*vmag*vmag; - this.qac_a =-this.Bstall*vmag*vmag; - } - - } - // stall mode - else { - this.pac_a =this.Gstall*vmag*vmag; - this.qac_a =-this.Bstall*vmag*vmag; - } - - if(this.Frst> 0.0){ - - if(this.statusB == 1){ - if(vmag >= this.Vbrk){ - this.pac_b = (p0 +Kp1*Math.pow((vmag-Vbrk),Np1))*(1+this.CmpKpf*(freq-1.0)); - this.qac_b = (q0 +Kq1*Math.pow((vmag-Vbrk),Nq1))*(1+this.CmpKqf*(freq-1.0)); - - } - else if(vmag this.Vstallbrk){ - this.pac_b = (p0 +Kp2*Math.pow((Vbrk-vmag),Np2))*(1+this.CmpKpf*(freq-1.0)); - this.qac_b = (q0 +Kq2*Math.pow((Vbrk-vmag),Nq2))*(1+this.CmpKqf*(freq-1.0)); - } - else{ - this.pac_b =this.Gstall*vmag*vmag; - this.qac_b =-this.Bstall*vmag*vmag; - } - - } - // stall - else { - this.pac_b =this.Gstall*vmag*vmag; - this.qac_b =-this.Bstall*vmag*vmag; - } - } - - // ac motor total power on motor base - - double Pmotor = this.pac_a*(1-this.Frst)*this.fthA+this.pac_b*this.Frst*this.fthB; - double Qmotor = this.qac_a*(1-this.Frst)*this.fthA+this.qac_b*this.Frst*this.fthB; - - // consider the UR Relay and contractor status - Pmotor = this.kuv*this.kcon*Pmotor; - Qmotor = this.kuv*this.kcon*Qmotor; - - this.PQmotor = new Complex(Pmotor, Qmotor); // on motor base - - this.pac = Pmotor*getPowerConvFactorM2S(); // converted to system base - this.qac = Qmotor*getPowerConvFactorM2S(); - - if(debugMode){ - System.out.println(extended_device_Id+" statusA, pac_a,pac_b,kuv, kcon= "+this.statusA+","+this.pac_a+","+this.qac_a+","+this.kuv+","+this.kcon); - System.out.println(extended_device_Id+" power on system base = "+this.getLoadPQ().toString()); - } - return this.PQmotor; - } - - /** - * calculation the factor for converting current from motor mvabase to system vabase - * @return - */ - private double getPowerConvFactorM2S(){ - return this.getMVABase()/this.getDStabBus().getNetwork().getBaseMva()*3.0; - } - - @Override - public Complex getNortonCurInj() { - - - Complex vt = this.getBusPhaseVoltage(); - - Complex Imotor_systembase = null; - if(vt.abs()>this.Vbrk){ - // call this method to update "this.PQmotor" - calculateMotorPower(); - Imotor_systembase = this.PQmotor.divide(vt).conjugate().multiply(this.I_CONV_FACTOR_M2S); - } - else - Imotor_systembase = this.equivYpq.multiply(vt).multiply(this.I_CONV_FACTOR_M2S); - - - - - this.nortonCurInj = getEquivY().multiply(vt).subtract(Imotor_systembase); - - return this.nortonCurInj; - - } - - - - @Override - public Object getOutputObject() { - - return this.getNortonCurInj(); - } - - // This must be overrided to implement the post processing step after network solution converges at each time step - @Override - public boolean updateAttributes(boolean netChange) { - return post_process_step(this.timestep); - } - - @Override - public Hashtable getStates(Object ref) { - states.put(OUT_SYMBOL_P, this.getPac()); - states.put(OUT_SYMBOL_Q, this.getQac()); - states.put(OUT_SYMBOL_VT, this.getBusPhaseVoltage().abs()); - states.put(OUT_SYMBOL_STATE, stage==1?0:(stage ==-1? -1:1)); - states.put(OUT_SYMBOL_RemainFraction, this.remainFraction); - return this.states; - } - - @Override - public Complex getEquivY() { - if(this.equivY == null){ - Complex zstall = new Complex(this.Rstall,this.Xstall); - Complex y = new Complex(1.0,0).divide(zstall); - this.equivY = y.multiply(this.mva/this.getDStabBus().getNetwork().getBaseMva()*3.0d); - } - return this.equivY; - } - - - - @Override - public Complex getLoadPQ() { - - - return this.loadPQ = new Complex(getPac(),getQac()); - - } - - - @Override - public String getScripts() { - throw new UnsupportedOperationException(); - } - - @Override - public void setScripts(String value) { - throw new UnsupportedOperationException(); - - } - - - public double getPac() { - - - return pac; - } - - public void setPac(double pac) { - this.pac = pac; - } - - public double getQac() { - - return qac; - } - - public void setQac(double qac) { - this.qac = qac; - } - - public int getStage() { - return stage; - } - - public void setStage(int stage) { - this.stage = stage; - } - - public double getPowerFactor() { - return powerFactor; - } - - public void setPowerFactor(double powerFactor) { - this.powerFactor = powerFactor; - } - - public double getVstall() { - return Vstall; - } - - public void setVstall(double vstall) { - Vstall = vstall; - } - - public double getRstall() { - return Rstall; - } - - public void setRstall(double rstall) { - Rstall = rstall; - } - - public double getXstall() { - return Xstall; - } - - public void setXstall(double xstall) { - Xstall = xstall; - } - - public double getTstall() { - return Tstall; - } - - public void setTstall(double tstall) { - Tstall = tstall; - } - - public double getLFadj() { - return LFadj; - } - - public void setLFadj(double lFadj) { - LFadj = lFadj; - } - - public double getKp1() { - return Kp1; - } - - public void setKp1(double kp1) { - Kp1 = kp1; - } - - public double getNp1() { - return Np1; - } - - public void setNp1(double np1) { - Np1 = np1; - } - - public double getKq1() { - return Kq1; - } - - public void setKq1(double kq1) { - Kq1 = kq1; - } - - public double getNq1() { - return Nq1; - } - - public void setNq1(double nq1) { - Nq1 = nq1; - } - - public double getKp2() { - return Kp2; - } - - public void setKp2(double kp2) { - Kp2 = kp2; - } - - public double getNp2() { - return Np2; - } - - public void setNp2(double np2) { - Np2 = np2; - } - - public double getKq2() { - return Kq2; - } - - public void setKq2(double kq2) { - Kq2 = kq2; - } - - public double getNq2() { - return Nq2; - } - - public void setNq2(double nq2) { - Nq2 = nq2; - } - - public double getVbrk() { - return Vbrk; - } - - public void setVbrk(double vbrk) { - Vbrk = vbrk; - } - - public double getFrst() { - return Frst; - } - - public void setFrst(double frst) { - Frst = frst; - } - - public double getVrst() { - return Vrst; - } - - public void setVrst(double vrst) { - Vrst = vrst; - } - - public double getTrst() { - return Trst; - } - - public void setTrst(double trst) { - Trst = trst; - } - - public double getCmpKpf() { - return CmpKpf; - } - - public void setCmpKpf(double cmpKpf) { - CmpKpf = cmpKpf; - } - - public double getCmpKqf() { - return CmpKqf; - } - - public void setCmpKqf(double cmpKqf) { - CmpKqf = cmpKqf; - } - - public double getFuvr() { - return Fuvr; - } - - public void setFuvr(double fuvr) { - this.Fuvr = fuvr; - } - - public double getUVtr1() { - return UVtr1; - } - - public void setUVtr1(double vtr1) { - this.UVtr1 = vtr1; - } - - public double getTtr1() { - return Ttr1; - } - - public void setTtr1(double ttr1) { - this.Ttr1 = ttr1; - } - - public double getUVtr2() { - return UVtr2; - } - - public void setUVtr2(double vtr2) { - this.UVtr2 = vtr2; - } - - public double getTtr2() { - return Ttr2; - } - - public void setTtr2(double ttr2) { - this.Ttr2 = ttr2; - } - - public double getVc1off() { - return Vc1off; - } - - public void setVc1off(double vc1off) { - Vc1off = vc1off; - } - - public double getVc2off() { - return Vc2off; - } - - public void setVc2off(double vc2off) { - Vc2off = vc2off; - } - - public double getVc1on() { - return Vc1on; - } - - public void setVc1on(double vc1on) { - Vc1on = vc1on; - } - - public double getVc2on() { - return Vc2on; - } - - public void setVc2on(double vc2on) { - Vc2on = vc2on; - } - - public double getTth() { - return Tth; - } - - public void setTth(double tth) { - Tth = tth; - } - - public double getTh1t() { - return Th1t; - } - - public void setTh1t(double th1t) { - Th1t = th1t; - } - - public double getTh2t() { - return Th2t; - } - - public void setTh2t(double th2t) { - Th2t = th2t; - } - - public double getUVRelayTimer1() { - return UVRelayTimer1; - } - - public void setUVRelayTimer1(double uVRelayTimer1) { - UVRelayTimer1 = uVRelayTimer1; - } - - public double getUVRelayTimer2() { - return UVRelayTimer2; - } - - public void setUVRelayTimer2(double uVRelayTimer2) { - UVRelayTimer2 = uVRelayTimer2; - } - - - - public void disableInternalStallControl(boolean disableStallControl){ - this.disableInternalStallControl = disableStallControl; - } - - - - - - - -} +package org.ipss.threePhase.dynamic.model.impl; + +import java.util.Hashtable; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Phase; +import org.ipss.threePhase.dynamic.model.DynLoadModel1Phase; + +import com.interpss.common.util.IpssLogger; +import com.interpss.dstab.DStabBus; +import com.interpss.dstab.algo.DynamicSimuMethod; +import com.interpss.dstab.common.DStabOutSymbol; +import com.interpss.dstab.device.DynamicBusDeviceType; +/** + * This dynamic model of single phase AC motor must be used under the condition that the + * loads in the power flow data is input as Load3phase in the threePhaseLoadList. + * + * Reference: WECC Dynamic Composite Load Model (CMPLDW) Specifications published 01-27-2015 + * The compressor motor model is divided into two parts: + Motor A : Those compressors that cann't restart soon after stalling + Motor B : Those compressors that can restart soon after stalling + + The motors are represented by algebraic equations, as follows: + If V > 0.86: + P = Po * (1 + df ) + Q = [Qo + 6 * (V -0.86) ^2 ] * (1 - 3.3 * df ) + If V < 0.86 and V > Vstal + P = [Po + 12 * (0.86- V)^3.2 ] * (1 +df ) + Q = [Qo + 11 * (0.86 -V)^ 2.5 ] * (1 - 3.3 * df ) + If V < Vstall: + P = Gstall * V * V + Q = - Bstall * V * V + If V < Vstall for t > Tstall, motor stays in stalled state. + + For restartable motor, if V > Vrst for t > Trst, the motor restarts. + + Initialization calculations: + Qo = Po * tan ( acos(CompPF) ) - 6 * (1-0.86) ^2 + + V’stall is calculated to determine the voltage level at which there is an intersection between the stall power characteristic and the transition characteristic used for V < 0.86: + for ( V = 0.4; V < Vstall; V += 0.01 ) + { + pst = Gstall * V2 + p_comp = Po + 12 * (0.86- V) 3.2 + if ( p_comp < pst ) + { + Vstall = V + break + } + } + + * + * @author Qiuhua + * + */ +public class SinglePhaseACMotor extends DynLoadModel1Phase { + + + + //Model data + + private double p=0,q=0; // load pq values without considering load characteristic factors + private double p0 = 0.0,q0 =0.0; // initial load exponential characteristic factors + private double pac =0.0,qac = 0.0; // actual load pq after considering load characteristic factors + + + private double pac_a = 0.0, qac_a = 0.0, pac_b = 0.0, qac_b = 0.0; + + // there are 3 stages: 0 - running; 1 - stall ; 2- a fraction of motors restart + private int stage = 0; + private double powerFactor = 0.97; + + + + //stalling setting + private double Vstall = 0.6; + private double Rstall = 0.1140; //0.1240; + private double Xstall = 0.1040; // 0.1140; + private double Tstall = 0.033; + private double Gstall = 0.0, Bstall = 0.0; + private Complex Ystall = null; + + private double LFadj = 0.0; + + private double Kp1 = 0.0; + private double Np1 = 1.0; + + private double Kq1 = 6.0; + private double Nq1 = 2.0; + + private double Kp2 = 12.0; + private double Np2 = 3.2; + + + private double Kq2 = 11.0; + private double Nq2 = 2.5; + + //breaking point + private double Vbrk =0.86; + // cross point of two curves for the run stage 2 and the stall stage + private double Vstallbrk = 0.0; + + // restart + private double Frst = 0.0; // no motor can restart + private double Vrst = 0.9; + private double Trst = 0.4; // it task the ac 0.4 second to restart of stalling + + // real and reactive power frequency sensitivity + private double CmpKpf = 1.0; + private double CmpKqf = -3.3; + + + //UVRelay + private double Fuvr = 0.0; + private double UVtr1 = 0.0; + private double Ttr1 = 999.0; + private double UVtr2 = 0.0; + private double Ttr2 = 999.0; + + //Contractor setting + private double Vc1off = 0.5; + private double Vc2off = 0.4; + private double Vc1on = 0.65; + private double Vc2on = 0.55; + + //Thermal relay setting + // Based on "WECC air conditioner motor model test report", Page.75 + private double Tth = 15; + private double Th1t = 0.7; + private double Th2t = 1.9; + + + + //Affiliated control component + //UV Relay and Contractor + + private double kuv =1.0, kcon = 1.0, fcon_trip = 0.0; + + private boolean isContractorActioned = false; + + + + //Thermal relays + // the tripping characterisic is modeled as y = thermalEqnCoeff1*x +thermalEqnCoeff2 for x within {Th1t, Th2t} + // here x is the internal temperature, y is the output for determining thermal tripping + // when x>Th1t, starting trippinng, when x>Th2t, all will be tripped + + private double thermalEqnCoeff1 = -1.0/3; + private double thermalEqnCoeff2 = 1.433; // default value + + private double temperature = 0.0d; + + private double remainFraction = 1.0; // Remained fraction on-line after thermal tripping + + // internally modeled as two motors, i.e., motor A and B + private int statusA =1, statusB = 1; + + protected double fcon = 1.0; // fraction not tripped by the contractor + + protected double fthA = 1.0; // fraction not tripped by the motor A thermal protection + + protected double fthB = 1.0; // fraction not tripped by the motor B thermal protection + + protected double tempA = 0.0; // Temperature of the motor A + + protected double tempB = 0.0; // Temperature of the motor B + + protected double tv = 0.05; // voltage measurement time constant + + protected double complf = 1.0; + + // Timers for relays and internal controls + + private double UVRelayTimer1 = 0.0; + private double UVRelayTimer2 = 0.0; + + //Timers for stalling and recovery + private double acStallTimer = 0.0; + private double acRestartTimer = 0.0; + + + private double vt_measured = 0.0; + + private double timestep = 0.0; + + private boolean disableInternalStallControl = false; + + + + private double I_CONV_FACTOR_M2S = 0.0; + + + + + + private Hashtable states = null; + private static final String OUT_SYMBOL_P ="ACMotorP"; + private static final String OUT_SYMBOL_Q ="ACMotorQ"; + private static final String OUT_SYMBOL_VT ="ACMotorVt"; + private static final String OUT_SYMBOL_STATE ="ACMotorState"; + private static final String OUT_SYMBOL_RemainFraction ="ACMotorRemainFraction"; + + private Complex PQmotor; + private Complex equivYpq; + private Complex nortonCurInj; + + private boolean debugMode = false; + + + public SinglePhaseACMotor(){ + states = new Hashtable<>(); + + } + + public SinglePhaseACMotor(String Id){ + this(); + this.id = Id; + } + + /** + * create an instance of SinglePhaseACMotor + * @param bus + * @param Id + */ + public SinglePhaseACMotor(Bus3Phase bus,String Id){ + this(Id); + this.setDStabBus(bus); + + + } + + + @Override + public boolean initStates() { + boolean flag = true; + + + //TODO the initLoad is the total load at the bus ,include constant Z and I load + //In the future, this may need to be update to consider the constant P load only + + //TODO 11/19/2015 need to add three-phase InitLoad to differentiate phase loads + + + Complex phaseTotalLoad = null; + Complex3x1 totalLoad3Phase = this.getParentBus().get3PhaseTotalLoad(); + if(totalLoad3Phase.abs()>0.0){ + switch(this.getPhase()){ + case A: phaseTotalLoad = totalLoad3Phase.a_0; break; + case B: phaseTotalLoad = totalLoad3Phase.b_1; break; + case C: phaseTotalLoad = totalLoad3Phase.c_2; break; + } + + } + else{ // TODO assuming three-phase balanced + phaseTotalLoad = this.getDStabBus().getInitLoad(); + + } + + this.stage = 1; // initialized to running state + + this.Gstall = this.Rstall/(this.Rstall*this.Rstall + this.Xstall*this.Xstall); + this.Bstall = -this.Xstall/(this.Rstall*this.Rstall + this.Xstall*this.Xstall); + + this.Ystall = new Complex(this.Gstall, this.Bstall); + + pac = phaseTotalLoad.getReal()*this.loadPercent/100.0d; // pu on system base + qac = pac*Math.tan(Math.acos(this.powerFactor)); + + + // pac and qac is the initial power + this.setInitLoadPQ(new Complex(pac,qac)); + this.setLoadPQ(new Complex(pac,qac)); + + double mVABase1Phase = this.getDStabBus().getNetwork().getBaseMva()/3.0; + + // if mva is not defined and loading factor is available + if(this.getMVABase()==0.0){ + if(this.loadFactor >0 && this.loadFactor<=1.0) + IpssLogger.getLogger().fine("AC motor MVABase will be calculated based on load factor"); + else + this.loadFactor = 1.0; + // single-phase mva base is the 1/3 of the system 3-phae mva base + double calcMva = this.pac*mVABase1Phase/this.loadFactor; + this.setMVABase(calcMva); + } + + // multiply factor 3 -- becuase this is for single phase, and the single-phase mvabase is 1/3 of the three-phase system MVAbase + this.I_CONV_FACTOR_M2S = this.getMVABase()/ mVABase1Phase; + + + + double vt = this.getBusPhaseVoltage().abs(); + this.vt_measured = vt; + + //Check whether a compensation is needed. If yes, calculate the compensation shuntY + // if bus.loadQ < ld1pac.q, then compShuntB = ld1pac.q-bus.loadQ + if(qac >phaseTotalLoad.getImaginary()){ + + double b = (qac - phaseTotalLoad.getImaginary())/vt/vt; + this.compensateShuntY = new Complex(0,b); + } + + this.equivYpq = new Complex(pac,qac).conjugate().divide(vt*vt); // on motor MVABase + + + // update the Vstall and Vbrk if necessary + this.Vstall= this.Vstall*(1+this.LFadj*(this.loadFactor-1)); + this.Vbrk = this.Vbrk*(1+this.LFadj*(this.loadFactor-1)); + + // motor P and Q on motor mvabase + double pac_mbase = this.pac* mVABase1Phase/this.getMVABase(); + double qac_mbase = this.qac* mVABase1Phase/this.getMVABase(); + + Complex Sac_motor_pu = new Complex (pac_mbase, qac_mbase); + double i_motor = Sac_motor_pu.abs()/vt; + + this.tempA = i_motor*i_motor*this.Rstall; + this.tempB = this.tempA; + + // initialize the parts A and B of the motor + this.pac_a = pac_mbase; + this.pac_b = pac_mbase; + + this.qac_a = qac_mbase; + this.qac_b = qac_mbase; + + + // Calculate the P0 and Q0 at stage 0 + this.p0 = pac_mbase - this.Kp1*Math.pow((vt-this.Vbrk),this.Np1); + this.q0 = qac_mbase - this.Kq1*Math.pow((vt-this.Vbrk),this.Nq1); + + + + double pst = 0.0, pac_calc = 0.0; + for (double v = 0.4; vthis.Vstall){ + this.Vstallbrk = this.Vstall; + } + + + //calculate the thermal protection equation coefficient + if(Th1t >0 && Th2t>Th1t){ + thermalEqnCoeff1 = -1/(Th2t-Th1t); + thermalEqnCoeff2 = Th2t/(Th2t-Th1t); + } + else{ + thermalEqnCoeff1 = 0.0; + thermalEqnCoeff2 = 0.0; + } + + this.equivY = this.getEquivY(); // On system mva base, not motor mva base + + extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); + this.states.put(DStabOutSymbol.OUT_SYMBOL_BUS_DEVICE_ID, extended_device_Id); + + return flag; + } + + @Override public String getExtendedDeviceId(){ + extended_device_Id = "ACMotor_"+this.getId()+"@"+this.getParentBus().getId()+"_phase"+this.getPhase(); + return this.extended_device_Id; + } + + + + /** + * The thermal protection heating increase is modeled as + * differential equation, thus it must be represented with the nextStep(); + * + * The stall timer as well as the recovery timer are also counted and updated in this method + */ + @Override + public boolean nextStep(double dt, DynamicSimuMethod method) { + boolean flag = true; + + // check the protection actions and update the status of AC motor accordingly + timestep = dt; + + Complex vt = this.getBusPhaseVoltage(); + double vmag = vt.abs(); + + + + // voltage measurements + + double dv_dt0 = (vmag-this.vt_measured)/this.tv; + + double vt_measured1 = this.vt_measured+dv_dt0*dt; + + double dv_dt1 = (vmag-vt_measured1)/this.tv; + + this.vt_measured = this.vt_measured+ (dv_dt0+dv_dt1)*0.5d*dt; + + // thermal overload protection + /* + * When the motor is stalled, the temperature of the motor is computed by + integrating I^2 R through the thermal time constant Tth. If the temperature reaches Th2t, all of the load is + tripped. If the temperature is between Th1t and Th2t, a linear fraction of the load is tripped. The termperature + of the A and B portions of the load are computed separately. The fractions of the A + and B parts of the load that have not been tripped by the thermal protection is output as fthA and fthB, respectively. + */ + + + // motor stator current in motor mva base + Complex ImotorA_pu = new Complex(0.0); + Complex ImotorB_pu = new Complex(0.0); + + if(this.statusA ==0) + ImotorA_pu = vt.multiply(this.Ystall); + else{ + //Updated 10/14/2017 to fix the bug with the voltage is close to zero; + if(vt.abs()>this.Vstallbrk) + ImotorA_pu = new Complex(pac_a, qac_a).divide(vt).conjugate(); + else + ImotorA_pu = vt.multiply(this.Ystall); + } + + if(this.statusB ==0) + ImotorB_pu = vt.multiply(this.Ystall); + else{ + if(vt.abs()>this.Vstallbrk) + ImotorB_pu = new Complex(pac_b, qac_b).divide(vt).conjugate(); + else + ImotorB_pu = vt.multiply(this.Ystall); + } + + double dThA_dt0 = (Math.pow(ImotorA_pu.abs(),2)*this.Rstall - this.tempA)/this.Tth; + + double dThB_dt0 = (Math.pow(ImotorB_pu.abs(),2)*this.Rstall - this.tempB)/this.Tth; + + double tempA1 = this.tempA+ dThA_dt0*dt; + double tempB1 = this.tempB+ dThB_dt0*dt; + + double dThA_dt1 = (Math.pow(ImotorA_pu.abs(),2)*this.Rstall - tempA1)/this.Tth; + + double dThB_dt1 = (Math.pow(ImotorB_pu.abs(),2)*this.Rstall - tempB1)/this.Tth; + + this.tempA = this.tempA + (dThA_dt0+dThA_dt1)*0.5d*dt; + this.tempB = this.tempB + (dThB_dt0+dThB_dt1)*0.5d*dt; + + if(debugMode) + System.out.println("next step:" +extended_device_Id+" vt ="+vmag+", tempA = "+this.tempA); + + return flag; + } + + /** + * to check whether AC motor stalls, restarts and the actions of the protections + % this should be perform after the network solution step + */ + private boolean post_process_step(double dt){ + boolean flag = true; + /* + % UV Relay + % Two levels of undervoltage load shedding can be represented: If the voltage drops + % below uvtr1 for ttr1 seconds, the fraction “fuvtr” of the load is tripped; If the voltage drops below uvtr2 + % for ttr2 seconds, the fraction “fuvr” of the load is tripped + */ + + if(this.vt_measured 0.0){ + this.UVRelayTimer1 = this.UVRelayTimer1 +dt; + } + else + this.UVRelayTimer1 = 0.0; + + if(this.vt_measured 0.0){ + this.UVRelayTimer2 = this.UVRelayTimer2 +dt; + } + else + this.UVRelayTimer2 = 0.0; + + // trip the portion with under voltage relays + if(this.UVRelayTimer1> this.Ttr1){ + this.kuv = 1.0 - this.Fuvr; + } + + if(this.UVRelayTimer2> this.Ttr2){ + this.kuv = 1.0 - this.Fuvr; + } + + /* + % contractor + % Contactor – If the voltage drops to below Vc2off, all of the load is tripped; if the voltage is between + % Vc1off and Vc2off, a linear fraction of the load is tripped. If the voltage later recovers to above Vc2on, all + % of the motor is reconnected; if the voltage recovers to between Vc2on and Vc1on, a linear fraction of the + % load is reconnected. + */ + + if(this.vt_measured < this.Vc2off){ + this.kcon = 0.0; + this.fcon_trip = 1.0; + } + else if(this.vt_measured>=this.Vc2off && this.vt_measured =this.Vc1on){ + this.kcon = 1.0; + } + else if(this.vt_measured < this.Vc1on && this.vt_measured >= this.Vc2on){ + double Frecv = (this.vt_measured - this.Vc2on)/(this.Vc1on- this.Vc2on); + this.kcon = 1 - this.fcon_trip*(1-Frecv); + } + + + /* + * Thermal protection + */ + + // update the timer for thermal protection + + double vmag = this.getBusPhaseVoltage().abs(); + + if (this.statusA ==1){ + if(vmag < this.Vstall){ + this.acStallTimer = this.acStallTimer+ dt; + } + else + this.acStallTimer = 0.0; + } + + + if (this.statusB ==0){ + if(vmag > this.Vrst){ + this.acRestartTimer = this.acRestartTimer+ dt; + } + else + this.acRestartTimer = 0.0; + } + + /* + * % update the status of the motor. transition from running to + % stalling is the same for the equivalent Motor A and B + */ + + if(this.acStallTimer > this.Tstall && this.statusA ==1){ + this.statusA = 0; + this.statusB = 0; + this.stage = 0; + } + + // considering AC restarting + if(this.Frst >0.0 && this.statusB ==0 && this.acRestartTimer > this.Trst){ + this.statusB = 1; + this.stage = 2; + } + + + /* + % check whether AC motor will be trip next step, and what will be + % the remaining fraction; + */ + + if(this.thermalEqnCoeff1< 0.0){ + if(this.tempA > this.Th1t){ + if(this.statusA == 0){ + this.fthA = this.tempA*this.thermalEqnCoeff1 + this.thermalEqnCoeff2; + + if(this.fthA<0.0) + this.fthA = 0.0; + } + } + + if(this.tempB > this.Th1t){ + if(this.statusB == 0){ + this.fthB = this.tempB*this.thermalEqnCoeff1 + this.thermalEqnCoeff2; + + if(this.fthB<0.0) + this.fthB = 0.0; + } + } + } + + if(debugMode){ + System.out.println("next step: motor, fthA, fthB = "+this.extended_device_Id+","+this.fthA+","+this.fthB ); + System.out.println("next step: motor, thEqnA, tempA, tempB = "+this.extended_device_Id+","+thermalEqnCoeff1+","+this.tempA+","+this.tempB ); + } + // Calculate the AC motor power + + // call this method to update "this.PQmotor" + calculateMotorPower(); + + // update the equivalent admittance for calculating AC power + this.equivYpq = this.PQmotor.conjugate().divide(vmag*vmag); // on motor MVABase + + return flag; + } + + /** + * calculate the motor power, return value is pu on motor mvabase; + * @return + */ + private Complex calculateMotorPower(){ + + // Calculate the AC motor power + double freq = this.getDStabBus().getFreq(); + double vmag = this.getBusPhaseVoltage().abs(); + + // running mode + if(this.statusA == 1){ + if(vmag >= this.Vbrk){ + this.pac_a = (p0 +Kp1*Math.pow((vmag-this.Vbrk),this.Np1))*(1+this.CmpKpf*(freq-1.0)); + this.qac_a = (q0 +Kq1*Math.pow((vmag-this.Vbrk),this.Nq1))*(1+this.CmpKqf*(freq-1.0)); + + } + else if(vmag this.Vstallbrk){ + this.pac_a = (p0 +Kp2*Math.pow((this.Vbrk-vmag),this.Np2))*(1+this.CmpKpf*(freq-1.0)); + this.qac_a = (q0 +Kq2*Math.pow((this.Vbrk-vmag),this.Np2))*(1+this.CmpKqf*(freq-1.0)); + } + else{ + this.pac_a =this.Gstall*vmag*vmag; + this.qac_a =-this.Bstall*vmag*vmag; + } + + } + // stall mode + else { + this.pac_a =this.Gstall*vmag*vmag; + this.qac_a =-this.Bstall*vmag*vmag; + } + + if(this.Frst> 0.0){ + + if(this.statusB == 1){ + if(vmag >= this.Vbrk){ + this.pac_b = (p0 +Kp1*Math.pow((vmag-Vbrk),Np1))*(1+this.CmpKpf*(freq-1.0)); + this.qac_b = (q0 +Kq1*Math.pow((vmag-Vbrk),Nq1))*(1+this.CmpKqf*(freq-1.0)); + + } + else if(vmag this.Vstallbrk){ + this.pac_b = (p0 +Kp2*Math.pow((Vbrk-vmag),Np2))*(1+this.CmpKpf*(freq-1.0)); + this.qac_b = (q0 +Kq2*Math.pow((Vbrk-vmag),Nq2))*(1+this.CmpKqf*(freq-1.0)); + } + else{ + this.pac_b =this.Gstall*vmag*vmag; + this.qac_b =-this.Bstall*vmag*vmag; + } + + } + // stall + else { + this.pac_b =this.Gstall*vmag*vmag; + this.qac_b =-this.Bstall*vmag*vmag; + } + } + + // ac motor total power on motor base + + double Pmotor = this.pac_a*(1-this.Frst)*this.fthA+this.pac_b*this.Frst*this.fthB; + double Qmotor = this.qac_a*(1-this.Frst)*this.fthA+this.qac_b*this.Frst*this.fthB; + + // consider the UR Relay and contractor status + Pmotor = this.kuv*this.kcon*Pmotor; + Qmotor = this.kuv*this.kcon*Qmotor; + + this.PQmotor = new Complex(Pmotor, Qmotor); // on motor base + + this.pac = Pmotor*getPowerConvFactorM2S(); // converted to system base + this.qac = Qmotor*getPowerConvFactorM2S(); + + if(debugMode){ + System.out.println(extended_device_Id+" statusA, pac_a,pac_b,kuv, kcon= "+this.statusA+","+this.pac_a+","+this.qac_a+","+this.kuv+","+this.kcon); + System.out.println(extended_device_Id+" power on system base = "+this.getLoadPQ().toString()); + } + return this.PQmotor; + } + + /** + * calculation the factor for converting current from motor mvabase to system vabase + * @return + */ + private double getPowerConvFactorM2S(){ + return this.getMVABase()/this.getDStabBus().getNetwork().getBaseMva()*3.0; + } + + @Override + public Complex getNortonCurInj() { + + + Complex vt = this.getBusPhaseVoltage(); + + Complex Imotor_systembase = null; + if(vt.abs()>this.Vbrk){ + // call this method to update "this.PQmotor" + calculateMotorPower(); + Imotor_systembase = this.PQmotor.divide(vt).conjugate().multiply(this.I_CONV_FACTOR_M2S); + } + else + Imotor_systembase = this.equivYpq.multiply(vt).multiply(this.I_CONV_FACTOR_M2S); + + + + + this.nortonCurInj = getEquivY().multiply(vt).subtract(Imotor_systembase); + + return this.nortonCurInj; + + } + + + + @Override + public Object getOutputObject() { + + return this.getNortonCurInj(); + } + + // This must be overrided to implement the post processing step after network solution converges at each time step + @Override + public boolean updateAttributes(boolean netChange) { + return post_process_step(this.timestep); + } + + @Override + public Hashtable getStates(Object ref) { + states.put(OUT_SYMBOL_P, this.getPac()); + states.put(OUT_SYMBOL_Q, this.getQac()); + states.put(OUT_SYMBOL_VT, this.getBusPhaseVoltage().abs()); + states.put(OUT_SYMBOL_STATE, stage==1?0:(stage ==-1? -1:1)); + states.put(OUT_SYMBOL_RemainFraction, this.remainFraction); + return this.states; + } + + @Override + public Complex getEquivY() { + if(this.equivY == null){ + Complex zstall = new Complex(this.Rstall,this.Xstall); + Complex y = new Complex(1.0,0).divide(zstall); + this.equivY = y.multiply(this.mva/this.getDStabBus().getNetwork().getBaseMva()*3.0d); + } + return this.equivY; + } + + + + @Override + public Complex getLoadPQ() { + + + return this.loadPQ = new Complex(getPac(),getQac()); + + } + + + @Override + public String getScripts() { + throw new UnsupportedOperationException(); + } + + @Override + public void setScripts(String value) { + throw new UnsupportedOperationException(); + + } + + + public double getPac() { + + + return pac; + } + + public void setPac(double pac) { + this.pac = pac; + } + + public double getQac() { + + return qac; + } + + public void setQac(double qac) { + this.qac = qac; + } + + public int getStage() { + return stage; + } + + public void setStage(int stage) { + this.stage = stage; + } + + public double getPowerFactor() { + return powerFactor; + } + + public void setPowerFactor(double powerFactor) { + this.powerFactor = powerFactor; + } + + public double getVstall() { + return Vstall; + } + + public void setVstall(double vstall) { + Vstall = vstall; + } + + public double getRstall() { + return Rstall; + } + + public void setRstall(double rstall) { + Rstall = rstall; + } + + public double getXstall() { + return Xstall; + } + + public void setXstall(double xstall) { + Xstall = xstall; + } + + public double getTstall() { + return Tstall; + } + + public void setTstall(double tstall) { + Tstall = tstall; + } + + public double getLFadj() { + return LFadj; + } + + public void setLFadj(double lFadj) { + LFadj = lFadj; + } + + public double getKp1() { + return Kp1; + } + + public void setKp1(double kp1) { + Kp1 = kp1; + } + + public double getNp1() { + return Np1; + } + + public void setNp1(double np1) { + Np1 = np1; + } + + public double getKq1() { + return Kq1; + } + + public void setKq1(double kq1) { + Kq1 = kq1; + } + + public double getNq1() { + return Nq1; + } + + public void setNq1(double nq1) { + Nq1 = nq1; + } + + public double getKp2() { + return Kp2; + } + + public void setKp2(double kp2) { + Kp2 = kp2; + } + + public double getNp2() { + return Np2; + } + + public void setNp2(double np2) { + Np2 = np2; + } + + public double getKq2() { + return Kq2; + } + + public void setKq2(double kq2) { + Kq2 = kq2; + } + + public double getNq2() { + return Nq2; + } + + public void setNq2(double nq2) { + Nq2 = nq2; + } + + public double getVbrk() { + return Vbrk; + } + + public void setVbrk(double vbrk) { + Vbrk = vbrk; + } + + public double getFrst() { + return Frst; + } + + public void setFrst(double frst) { + Frst = frst; + } + + public double getVrst() { + return Vrst; + } + + public void setVrst(double vrst) { + Vrst = vrst; + } + + public double getTrst() { + return Trst; + } + + public void setTrst(double trst) { + Trst = trst; + } + + public double getCmpKpf() { + return CmpKpf; + } + + public void setCmpKpf(double cmpKpf) { + CmpKpf = cmpKpf; + } + + public double getCmpKqf() { + return CmpKqf; + } + + public void setCmpKqf(double cmpKqf) { + CmpKqf = cmpKqf; + } + + public double getFuvr() { + return Fuvr; + } + + public void setFuvr(double fuvr) { + this.Fuvr = fuvr; + } + + public double getUVtr1() { + return UVtr1; + } + + public void setUVtr1(double vtr1) { + this.UVtr1 = vtr1; + } + + public double getTtr1() { + return Ttr1; + } + + public void setTtr1(double ttr1) { + this.Ttr1 = ttr1; + } + + public double getUVtr2() { + return UVtr2; + } + + public void setUVtr2(double vtr2) { + this.UVtr2 = vtr2; + } + + public double getTtr2() { + return Ttr2; + } + + public void setTtr2(double ttr2) { + this.Ttr2 = ttr2; + } + + public double getVc1off() { + return Vc1off; + } + + public void setVc1off(double vc1off) { + Vc1off = vc1off; + } + + public double getVc2off() { + return Vc2off; + } + + public void setVc2off(double vc2off) { + Vc2off = vc2off; + } + + public double getVc1on() { + return Vc1on; + } + + public void setVc1on(double vc1on) { + Vc1on = vc1on; + } + + public double getVc2on() { + return Vc2on; + } + + public void setVc2on(double vc2on) { + Vc2on = vc2on; + } + + public double getTth() { + return Tth; + } + + public void setTth(double tth) { + Tth = tth; + } + + public double getTh1t() { + return Th1t; + } + + public void setTh1t(double th1t) { + Th1t = th1t; + } + + public double getTh2t() { + return Th2t; + } + + public void setTh2t(double th2t) { + Th2t = th2t; + } + + public double getUVRelayTimer1() { + return UVRelayTimer1; + } + + public void setUVRelayTimer1(double uVRelayTimer1) { + UVRelayTimer1 = uVRelayTimer1; + } + + public double getUVRelayTimer2() { + return UVRelayTimer2; + } + + public void setUVRelayTimer2(double uVRelayTimer2) { + UVRelayTimer2 = uVRelayTimer2; + } + + + + public void disableInternalStallControl(boolean disableStallControl){ + this.disableInternalStallControl = disableStallControl; + } + + @Override + public boolean changeLoad(double percentageFactor) { + throw new UnsupportedOperationException(); + } + + + + + + + +} diff --git a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java index 6304082..6d7289d 100644 --- a/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java +++ b/ipss.plugin.3phase/src/org/ipss/threePhase/powerflow/impl/DistributionPowerFlowAlgorithmImpl.java @@ -1,669 +1,675 @@ -package org.ipss.threePhase.powerflow.impl; - -import java.util.Hashtable; -import java.util.LinkedList; -import java.util.Map.Entry; -import java.util.Queue; -import java.util.Set; - -import org.apache.commons.math3.complex.Complex; -import org.interpss.numeric.datatype.Complex3x1; -import org.interpss.numeric.datatype.Unit.UnitType; -import org.ipss.threePhase.basic.Branch3Phase; -import org.ipss.threePhase.basic.Bus3Phase; -import org.ipss.threePhase.basic.Network3Phase; -import org.ipss.threePhase.basic.Transformer3Phase; -import org.ipss.threePhase.basic.impl.AclfNetwork3Phase; -import org.ipss.threePhase.dynamic.DStabNetwork3Phase; -import org.ipss.threePhase.powerflow.DistributionPFMethod; -import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; - -import com.interpss.common.exp.InterpssException; -import com.interpss.common.util.IpssLogger; -import com.interpss.core.aclf.AclfBranch; -import com.interpss.core.aclf.AclfBus; -import com.interpss.core.aclf.AclfNetwork; -import com.interpss.core.aclf.BaseAclfNetwork; -import com.interpss.core.net.Branch; -import com.interpss.core.net.Bus; - -public class DistributionPowerFlowAlgorithmImpl implements DistributionPowerFlowAlgorithm{ - - private BaseAclfNetwork distNet = null; - - private DistributionPFMethod pfMethod = DistributionPFMethod.Forward_Backword_Sweep; - - private double tol = 1.0E-6; - private int maxIteration = 30; - private boolean radialNetworkOnly = true; - private boolean pfFlag =false; - private Hashtable busVoltTable =null; - private boolean initBusVoltagesEnabled = true; - - - public DistributionPowerFlowAlgorithmImpl(){ - busVoltTable = new Hashtable<>(); - - } - - public DistributionPowerFlowAlgorithmImpl(BaseAclfNetwork net){ - this.distNet = net; - busVoltTable = new Hashtable<>(); - } - - - @Override - public boolean orderDistributionBuses(boolean radialOnly) { - Queue onceVisitedBuses = new LinkedList<>(); - - // find the source bus, which is the swing bus for radial feeders; - for(AclfBus b: distNet.getBusList()){ - if(b.isActive() && b.isSwing()){ - onceVisitedBuses.add((Bus3Phase) b); - b.setIntFlag(1); - } - else{ - b.setIntFlag(0); - } - } - - //make sure all internal branches are unvisited - for(AclfBranch bra:distNet.getBranchList()){ - bra.setBooleanFlag(false); - } - - // perform BFS and set the bus sortNumber - BFS(onceVisitedBuses); - - - distNet.setBusNumberArranged(true); - - - return true; - } - - - - private void BFS (Queue onceVisitedBuses){ - int orderNumber = 0; - //Retrieves and removes the head of this queue, or returns null if this queue is empty. - while(!onceVisitedBuses.isEmpty()){ - Bus3Phase startingBus = onceVisitedBuses.poll(); - startingBus.setSortNumber(orderNumber++); - startingBus.setBooleanFlag(true); - startingBus.setIntFlag(2); - - if(startingBus!=null){ - for(Branch connectedBra: startingBus.getConnectedPhysicalBranchList()){ - if(connectedBra.isActive() && !connectedBra.isBooleanFlag()){ - try { - Bus findBus = connectedBra.getOppositeBus(startingBus); - - //update status - connectedBra.setBooleanFlag(true); - - //for first time visited buses - if(findBus.getIntFlag()==0){ - findBus.setIntFlag(1); - onceVisitedBuses.add((Bus3Phase) findBus); - - } - } catch (InterpssException e) { - - e.printStackTrace(); - } - - } - } - - } - - } - } - - @Override - public boolean initBusVoltages() { - - - for(AclfBus b: distNet.getBusList()){ - Bus3Phase bus = (Bus3Phase) b; - - if(b.isSwing()) - bus.set3PhaseVoltages(getSwingBusThreePhaseVoltages(b.getVoltageMag(), b.getVoltageAng(UnitType.Deg))); - else if(b.isGenPV()) - bus.set3PhaseVoltages(getPVBusThreePhaseVoltages(b.getVoltageMag())); - else - bus.set3PhaseVoltages(getUnitThreePhaseVoltages()); - - } - - return true; - } - - private Complex phaseShiftCplxFactor(double shiftDeg){ - return new Complex(Math.cos(shiftDeg/180.0d*Math.PI),Math.sin(shiftDeg/180.0d*Math.PI)); - } - - private Complex3x1 getUnitThreePhaseVoltages(){ - return new Complex3x1(new Complex(1,0),new Complex(-Math.sin(Math.PI/6),-Math.cos(Math.PI/6)),new Complex(-Math.sin(Math.PI/6),Math.cos(Math.PI/6))); - } - - private Complex3x1 getPVBusThreePhaseVoltages(double Vset){ - return new Complex3x1(new Complex(Vset,0),new Complex(-1*Vset*Math.sin(Math.PI/6),-1*Vset*Math.cos(Math.PI/6)),new Complex(-1*Vset*Math.sin(Math.PI/6),Vset*Math.cos(Math.PI/6))); - } - - private Complex3x1 getSwingBusThreePhaseVoltages(double Vset, double angleDeg){ - return new Complex3x1(new Complex(Vset,0).multiply(phaseShiftCplxFactor(angleDeg)), - new Complex(-1*Vset*Math.sin(Math.PI/6),-1*Vset*Math.cos(Math.PI/6)).multiply(phaseShiftCplxFactor(angleDeg)), - new Complex(-1*Vset*Math.sin(Math.PI/6),Vset*Math.cos(Math.PI/6)).multiply(phaseShiftCplxFactor(angleDeg))); - - } - - @Override - public boolean powerflow() { - //step-1 order the network - pfFlag = orderDistributionBuses(radialNetworkOnly); - - - //step-2 initialize bus voltage - if(!pfFlag) - try { - throw new Exception("Error in odering the distribution buses"); - } catch (Exception e) { - e.printStackTrace(); - } - else{ - if(this.initBusVoltagesEnabled) - pfFlag = this.initBusVoltages(); - } - - if(!pfFlag) - try { - throw new Exception("Error in iniitalizing the three-phase voltages of distribution buses"); - } catch (Exception e) { - e.printStackTrace(); - } - //step-3 applied a power flow solver forward/backward sweep algorithm. - if(this.pfMethod==DistributionPFMethod.Forward_Backword_Sweep){ - - pfFlag = FBSPowerflow(); - if(pfFlag) { - IpssLogger.getLogger().fine("The distribution network power flow is converged."); - } - } - else{ - throw new UnsupportedOperationException("The power flow method is not supported yet:"+this.pfMethod); - } - - this.distNet.setLfConverged(pfFlag); - - //TODO avoid network initialization in initDstabNet() -// if(this.distNet instanceof DStabNetwork3Phase){ -// ((DStabNetwork3Phase)this.distNet).is -// } - return pfFlag; - } - - private boolean FBSPowerflow(){ - /* - * 1. Backward sweep: calculate the current injections of buses starting the most remote bus and the current flows in - * all active lines and transformers, all the way up to the source bus. - * - * 2. convergence checking: ||deltaV|| < tolerance. - * - * 3. Forward sweep: update the voltages of the buses in the downstream based on the voltages of the upstream bus and the current of the branch or transformer - * - */ - - - - for (int i=0;i0;sortNum--){ - AclfBus bus = this.distNet.getBus(sortNum); - if(bus==null){ - throw new Error(" The bus sort num # "+sortNum +" returns null bus object in distribution #"+this.distNet.getId()); - - } - if(bus.isActive()){ - Bus3Phase bus3P = null; - if(bus instanceof Bus3Phase){ - bus3P = (Bus3Phase) bus; - } - else{ - throw new UnsupportedOperationException("The bus oject is not a 3phase type:"+bus.getId()); - } - - - // update the non-visited branch current based on the bus current injection - // and all the currents of all other connected down-stream branches of this bus - - /* - * The line modeling - * - * Vabc,m Vabc,n - * --|->Iabc,m--------|Zline|----------->Iabc,n---|---- - * | | - * 1/2ShuntY 1/2ShuntY - * | | - * _ _ - * - */ - - Complex3x1 sumOfBranchCurrents = new Complex3x1(); - String upStreamBranchId = ""; - String upStreamBusId=""; - int unvisitedBranchNum = 0; - for (Branch bra: bus.getBranchList()){ - Branch3Phase bra3P = (Branch3Phase) bra; - // all visited branches are on the downstream side, and there should be only one upstream branch - if(bra.isActive() && bra.getIntFlag() ==1){ - - if(bra.getFromBus().getId().equals(bus.getId())){ - -// if(bra3P.getCurrentAbcAtFromSide()==null){ -// System.out.println("Current At From Side is null for branch #"+ bra3P.getId()); -// } - sumOfBranchCurrents= sumOfBranchCurrents.add(bra3P.getCurrentAbcAtFromSide()); - } - else{ - - - sumOfBranchCurrents= sumOfBranchCurrents.add(bra3P.getCurrentAbcAtToSide().multiply(-1.0)); - } - } - else if(bra.isActive() && bra.getIntFlag() ==0){ - - upStreamBranchId = bra.getId(); - unvisitedBranchNum +=1; - bra.setIntFlag(1); - - } - - } - - - //Error in the searching - if(bus.getBranchList().size()==1 && unvisitedBranchNum !=1 && !bus.isSwing()){ - throw new Error(" There must be only one 'upstream' unvisited branch for an active, non-swing bus:"+bus.getId()); - } - -// if(bus.getId().equals("Bus2")){ -// System.out.println("processing bus 2"); -// } - - //else { - - // consider the existing bus current injection into the network from generators, loads, shunt capacitors, etc. - Complex3x1 busSelfEquivCurInj3Ph =bus3P.calc3PhEquivCurInj(); - - if(busSelfEquivCurInj3Ph == null){ - throw new Error("Bus current injection is NULL @ Bus: "+bus3P.getId()); - } - else if(busSelfEquivCurInj3Ph.a_0.isNaN()||busSelfEquivCurInj3Ph.b_1.isNaN()||busSelfEquivCurInj3Ph.c_2.isNaN()){ - throw new Error("Bus current injection is NaN @ Bus: "+bus3P.getId()); - } - - - // add the branch current flows to obtain the current injections - Branch3Phase upStreamBranch = (Branch3Phase) this.distNet.getBranch(upStreamBranchId); - - Bus3Phase upStreamBus3P = null; - - /* - * The line modeling - * - * Vabc,m Vabc,n - * --|->Iabc,m--------|Zline|----------->Iabc,n---|---- - * | | - * 1/2ShuntY 1/2ShuntY - * | | - * _ _ - * - */ - - // update the upstream branch current and the upstream bus voltage - if(upStreamBranch != null && upStreamBranch.getFromBus().getId().equals(bus.getId())){ - - //calculate and set the upstream branch current - upStreamBranch.setCurrentAbcAtFromSide(busSelfEquivCurInj3Ph.subtract( sumOfBranchCurrents)); - - upStreamBus3P = (Bus3Phase) upStreamBranch.getToBus(); - - //calculate the voltages at the upstream end - //NOTE: For, current flowing through the branch, the direction from bus -> to bus is regarded as positive; - Complex3x1 vabc = null; - Complex3x1 iabc = null; - - - // line - if(upStreamBranch.isLine()){ - vabc = upStreamBranch.getToBusVabc2FromBusVabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( - upStreamBranch.getToBusIabc2FromBusVabcMatrix().multiply(upStreamBranch.getCurrentAbcAtFromSide().multiply(-1))); - - //calculate the current injection at the upstream end - - iabc= upStreamBranch.getToBusVabc2FromBusIabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( - upStreamBranch.getToBusIabc2FromBusIabcMatrix().multiply(upStreamBranch.getCurrentAbcAtFromSide().multiply(-1))); - - } - - // transformer - else if (upStreamBranch.isXfr()){ - Transformer3Phase xfr3p = upStreamBranch.to3PXformer(); - vabc = xfr3p.getLVBusVabc2HVBusVabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( - xfr3p.getLVBusIabc2HVBusVabcMatrix().multiply(upStreamBranch.getCurrentAbcAtFromSide().multiply(-1))); - - iabc= xfr3p.getLVBusVabc2HVBusIabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( - xfr3p.getLVBusIabc2HVBusIabcMatrix().multiply(upStreamBranch.getCurrentAbcAtFromSide().multiply(-1))); - - } - - - upStreamBranch.setCurrentAbcAtToSide(iabc.multiply(-1.0)); - - if(upStreamBus3P.getIntFlag()==0 && !upStreamBus3P.isSwing()){ - upStreamBus3P.set3PhaseVoltages(vabc); - upStreamBus3P.setIntFlag(1); - } - } - else{ - upStreamBranch.setCurrentAbcAtToSide(sumOfBranchCurrents.subtract(busSelfEquivCurInj3Ph)); - - upStreamBus3P = (Bus3Phase) upStreamBranch.getFromBus(); - - //calculate the bus voltage at the upstream end - Complex3x1 vabc = null; - Complex3x1 iabc = null; - - // line - if(upStreamBranch.isLine()){ - vabc = upStreamBranch.getToBusVabc2FromBusVabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( - upStreamBranch.getToBusIabc2FromBusVabcMatrix().multiply(upStreamBranch.getCurrentAbcAtToSide())); - - //calculate the current injection at the upstream end - - - iabc = upStreamBranch.getToBusVabc2FromBusIabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( - upStreamBranch.getToBusIabc2FromBusIabcMatrix().multiply(upStreamBranch.getCurrentAbcAtToSide())); - } - - // transformer - else if (upStreamBranch.isXfr()){ - Transformer3Phase xfr3p = upStreamBranch.to3PXformer(); - - vabc = xfr3p.getLVBusVabc2HVBusVabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( - xfr3p.getLVBusIabc2HVBusVabcMatrix().multiply(upStreamBranch.getCurrentAbcAtToSide())); - - //calculate the current injection at the upstream end - - - iabc = xfr3p.getLVBusVabc2HVBusIabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( - xfr3p.getLVBusIabc2HVBusIabcMatrix().multiply(upStreamBranch.getCurrentAbcAtToSide())); - - - } - - - upStreamBranch.setCurrentAbcAtFromSide(iabc.multiply(1.0)); - - - if(upStreamBus3P.getIntFlag()==0 && !upStreamBus3P.isSwing()){ - upStreamBus3P.set3PhaseVoltages(vabc); - upStreamBus3P.setIntFlag(1); - } - - } - - //} - - } - } - - - //----------------------------------------------------------------------- - //Step-2 check convergence. - //----------------------------------------------------------------------- - - // compare the voltage results of the last two steps - - - double mis = 0; - this.pfFlag =true; - for(AclfBus bus: this.distNet.getBusList()){ - if(bus.isActive()){ - Bus3Phase bus3P = (Bus3Phase) bus; - if(i>=1){ - mis=bus3P.get3PhaseVotlages().subtract(busVoltTable.get(bus3P.getId())).absMax(); - if(mis>this.getTolerance()){ - //System.out.println("bus, mismatch = "+bus3P.getId()+","+mis); - this.pfFlag = false; - } - } - busVoltTable.put(bus3P.getId(), bus3P.get3PhaseVotlages()); - } - } - - // power flow is converged, break the outer iteration and return - if(i>0 && this.pfFlag) { - //System.out.println("\n\nDistribution power flow converged, iterations = "+(i+1)+"\n"); - - calcSwingBusGenPower(); - - break; - } - - - //----------------------------------------------------------------------- - //Step-3 :backward sweep step - //----------------------------------------------------------------------- - - for(int sortNum2 = 0;sortNum20){ - bus.getContributeGenList().get(0).setGen(posGenPQ); - - } - } - } - } - - - - @Override - public DistributionPFMethod getPFMethod() { - - return this.pfMethod; - } - - @Override - public void setTolerance(double tolerance) { - this.tol = tolerance; - - } - - @Override - public double getTolerance() { - - return this.tol; - } - - @Override - public void setMaxIteration(int maxIterNum) { - this.maxIteration = maxIterNum; - - } - - @Override - public int getMaxIteration() { - - return this.maxIteration; - } - - @Override - public BaseAclfNetwork getNetwork() { - - return this.distNet; - } - - @Override - public void setNetwork(BaseAclfNetwork net) { - this.distNet = net; - - } - - @Override - public void setInitBusVoltageEnabled(boolean enableInitBus3PhaseVolts) { - this.initBusVoltagesEnabled = enableInitBus3PhaseVolts; - - } - - @Override - public boolean isInitBusVoltageEnabled() { - - return this.initBusVoltagesEnabled; - } - - -} +package org.ipss.threePhase.powerflow.impl; + +import java.util.Hashtable; +import java.util.LinkedList; +import java.util.Map.Entry; +import java.util.Queue; +import java.util.Set; + +import org.apache.commons.math3.complex.Complex; +import org.interpss.numeric.datatype.Complex3x1; +import org.interpss.numeric.datatype.Unit.UnitType; +import org.ipss.threePhase.basic.Branch3Phase; +import org.ipss.threePhase.basic.Bus3Phase; +import org.ipss.threePhase.basic.Network3Phase; +import org.ipss.threePhase.basic.Transformer3Phase; +import org.ipss.threePhase.basic.impl.AclfNetwork3Phase; +import org.ipss.threePhase.dynamic.DStabNetwork3Phase; +import org.ipss.threePhase.powerflow.DistributionPFMethod; +import org.ipss.threePhase.powerflow.DistributionPowerFlowAlgorithm; + +import com.interpss.common.exp.InterpssException; +import com.interpss.common.util.IpssLogger; +import com.interpss.core.aclf.AclfBranch; +import com.interpss.core.aclf.AclfBus; +import com.interpss.core.aclf.AclfNetwork; +import com.interpss.core.aclf.BaseAclfNetwork; +import com.interpss.core.net.Branch; +import com.interpss.core.net.Bus; + +public class DistributionPowerFlowAlgorithmImpl implements DistributionPowerFlowAlgorithm{ + + private BaseAclfNetwork distNet = null; + + private DistributionPFMethod pfMethod = DistributionPFMethod.Forward_Backword_Sweep; + + private double tol = 1.0E-6; + private int maxIteration = 30; + private boolean radialNetworkOnly = true; + private boolean pfFlag =false; + private Hashtable busVoltTable =null; + private boolean initBusVoltagesEnabled = true; + + + public DistributionPowerFlowAlgorithmImpl(){ + busVoltTable = new Hashtable<>(); + + } + + public DistributionPowerFlowAlgorithmImpl(BaseAclfNetwork net){ + this.distNet = net; + busVoltTable = new Hashtable<>(); + } + + + @Override + public boolean orderDistributionBuses(boolean radialOnly) { + Queue onceVisitedBuses = new LinkedList<>(); + + // find the source bus, which is the swing bus for radial feeders; + for(AclfBus b: distNet.getBusList()){ + if(b.isActive() && b.isSwing()){ + onceVisitedBuses.add((Bus3Phase) b); + b.setIntFlag(1); + } + else{ + b.setIntFlag(0); + } + } + + //make sure all internal branches are unvisited + for(AclfBranch bra:distNet.getBranchList()){ + bra.setBooleanFlag(false); + } + + // perform BFS and set the bus sortNumber + BFS(onceVisitedBuses); + + + distNet.setBusNumberArranged(true); + + + return true; + } + + + + private void BFS (Queue onceVisitedBuses){ + int orderNumber = 0; + //Retrieves and removes the head of this queue, or returns null if this queue is empty. + while(!onceVisitedBuses.isEmpty()){ + Bus3Phase startingBus = onceVisitedBuses.poll(); + startingBus.setSortNumber(orderNumber++); + startingBus.setBooleanFlag(true); + startingBus.setIntFlag(2); + + if(startingBus!=null){ + for(Branch connectedBra: startingBus.getConnectedPhysicalBranchList()){ + if(connectedBra.isActive() && !connectedBra.isBooleanFlag()){ + try { + Bus findBus = connectedBra.getOppositeBus(startingBus); + + //update status + connectedBra.setBooleanFlag(true); + + //for first time visited buses + if(findBus.getIntFlag()==0){ + findBus.setIntFlag(1); + onceVisitedBuses.add((Bus3Phase) findBus); + + } + } catch (InterpssException e) { + + e.printStackTrace(); + } + + } + } + + } + + } + } + + @Override + public boolean initBusVoltages() { + + + for(AclfBus b: distNet.getBusList()){ + Bus3Phase bus = (Bus3Phase) b; + + if(b.isSwing()){ + if(bus.get3PhaseVotlages()==null) + bus.set3PhaseVoltages(getSwingBusThreePhaseVoltages(b.getVoltageMag(), b.getVoltageAng(UnitType.Deg))); + else if(bus.get3PhaseVotlages()!=null && bus.get3PhaseVotlages().absMax()==0.0){ + bus.set3PhaseVoltages(getSwingBusThreePhaseVoltages(b.getVoltageMag(), b.getVoltageAng(UnitType.Deg))); + } + + } + else if(b.isGenPV()) + bus.set3PhaseVoltages(getPVBusThreePhaseVoltages(b.getVoltageMag())); + else + bus.set3PhaseVoltages(getUnitThreePhaseVoltages()); + + } + + return true; + } + + private Complex phaseShiftCplxFactor(double shiftDeg){ + return new Complex(Math.cos(shiftDeg/180.0d*Math.PI),Math.sin(shiftDeg/180.0d*Math.PI)); + } + + private Complex3x1 getUnitThreePhaseVoltages(){ + return new Complex3x1(new Complex(1,0),new Complex(-Math.sin(Math.PI/6),-Math.cos(Math.PI/6)),new Complex(-Math.sin(Math.PI/6),Math.cos(Math.PI/6))); + } + + private Complex3x1 getPVBusThreePhaseVoltages(double Vset){ + return new Complex3x1(new Complex(Vset,0),new Complex(-1*Vset*Math.sin(Math.PI/6),-1*Vset*Math.cos(Math.PI/6)),new Complex(-1*Vset*Math.sin(Math.PI/6),Vset*Math.cos(Math.PI/6))); + } + + private Complex3x1 getSwingBusThreePhaseVoltages(double Vset, double angleDeg){ + return new Complex3x1(new Complex(Vset,0).multiply(phaseShiftCplxFactor(angleDeg)), + new Complex(-1*Vset*Math.sin(Math.PI/6),-1*Vset*Math.cos(Math.PI/6)).multiply(phaseShiftCplxFactor(angleDeg)), + new Complex(-1*Vset*Math.sin(Math.PI/6),Vset*Math.cos(Math.PI/6)).multiply(phaseShiftCplxFactor(angleDeg))); + + } + + @Override + public boolean powerflow() { + //step-1 order the network + pfFlag = orderDistributionBuses(radialNetworkOnly); + + + //step-2 initialize bus voltage + if(!pfFlag) + try { + throw new Exception("Error in odering the distribution buses"); + } catch (Exception e) { + e.printStackTrace(); + } + else{ + if(this.initBusVoltagesEnabled) + pfFlag = this.initBusVoltages(); + } + + if(!pfFlag) + try { + throw new Exception("Error in iniitalizing the three-phase voltages of distribution buses"); + } catch (Exception e) { + e.printStackTrace(); + } + //step-3 applied a power flow solver forward/backward sweep algorithm. + if(this.pfMethod==DistributionPFMethod.Forward_Backword_Sweep){ + + pfFlag = FBSPowerflow(); + if(pfFlag) { + IpssLogger.getLogger().fine("The distribution network power flow is converged."); + } + } + else{ + throw new UnsupportedOperationException("The power flow method is not supported yet:"+this.pfMethod); + } + + this.distNet.setLfConverged(pfFlag); + + //TODO avoid network initialization in initDstabNet() +// if(this.distNet instanceof DStabNetwork3Phase){ +// ((DStabNetwork3Phase)this.distNet).is +// } + return pfFlag; + } + + private boolean FBSPowerflow(){ + /* + * 1. Backward sweep: calculate the current injections of buses starting the most remote bus and the current flows in + * all active lines and transformers, all the way up to the source bus. + * + * 2. convergence checking: ||deltaV|| < tolerance. + * + * 3. Forward sweep: update the voltages of the buses in the downstream based on the voltages of the upstream bus and the current of the branch or transformer + * + */ + + + + for (int i=0;i0;sortNum--){ + AclfBus bus = this.distNet.getBus(sortNum); + if(bus==null){ + throw new Error(" The bus sort num # "+sortNum +" returns null bus object in distribution #"+this.distNet.getId()); + + } + if(bus.isActive()){ + Bus3Phase bus3P = null; + if(bus instanceof Bus3Phase){ + bus3P = (Bus3Phase) bus; + } + else{ + throw new UnsupportedOperationException("The bus oject is not a 3phase type:"+bus.getId()); + } + + + // update the non-visited branch current based on the bus current injection + // and all the currents of all other connected down-stream branches of this bus + + /* + * The line modeling + * + * Vabc,m Vabc,n + * --|->Iabc,m--------|Zline|----------->Iabc,n---|---- + * | | + * 1/2ShuntY 1/2ShuntY + * | | + * _ _ + * + */ + + Complex3x1 sumOfBranchCurrents = new Complex3x1(); + String upStreamBranchId = ""; + String upStreamBusId=""; + int unvisitedBranchNum = 0; + for (Branch bra: bus.getBranchList()){ + Branch3Phase bra3P = (Branch3Phase) bra; + // all visited branches are on the downstream side, and there should be only one upstream branch + if(bra.isActive() && bra.getIntFlag() ==1){ + + if(bra.getFromBus().getId().equals(bus.getId())){ + +// if(bra3P.getCurrentAbcAtFromSide()==null){ +// System.out.println("Current At From Side is null for branch #"+ bra3P.getId()); +// } + sumOfBranchCurrents= sumOfBranchCurrents.add(bra3P.getCurrentAbcAtFromSide()); + } + else{ + + + sumOfBranchCurrents= sumOfBranchCurrents.add(bra3P.getCurrentAbcAtToSide().multiply(-1.0)); + } + } + else if(bra.isActive() && bra.getIntFlag() ==0){ + + upStreamBranchId = bra.getId(); + unvisitedBranchNum +=1; + bra.setIntFlag(1); + + } + + } + + + //Error in the searching + if(bus.getBranchList().size()==1 && unvisitedBranchNum !=1 && !bus.isSwing()){ + throw new Error(" There must be only one 'upstream' unvisited branch for an active, non-swing bus:"+bus.getId()); + } + +// if(bus.getId().equals("Bus2")){ +// System.out.println("processing bus 2"); +// } + + //else { + + // consider the existing bus current injection into the network from generators, loads, shunt capacitors, etc. + Complex3x1 busSelfEquivCurInj3Ph =bus3P.calc3PhEquivCurInj(); + + if(busSelfEquivCurInj3Ph == null){ + throw new Error("Bus current injection is NULL @ Bus: "+bus3P.getId()); + } + else if(busSelfEquivCurInj3Ph.a_0.isNaN()||busSelfEquivCurInj3Ph.b_1.isNaN()||busSelfEquivCurInj3Ph.c_2.isNaN()){ + throw new Error("Bus current injection is NaN @ Bus: "+bus3P.getId()); + } + + + // add the branch current flows to obtain the current injections + Branch3Phase upStreamBranch = (Branch3Phase) this.distNet.getBranch(upStreamBranchId); + + Bus3Phase upStreamBus3P = null; + + /* + * The line modeling + * + * Vabc,m Vabc,n + * --|->Iabc,m--------|Zline|----------->Iabc,n---|---- + * | | + * 1/2ShuntY 1/2ShuntY + * | | + * _ _ + * + */ + + // update the upstream branch current and the upstream bus voltage + if(upStreamBranch != null && upStreamBranch.getFromBus().getId().equals(bus.getId())){ + + //calculate and set the upstream branch current + upStreamBranch.setCurrentAbcAtFromSide(busSelfEquivCurInj3Ph.subtract( sumOfBranchCurrents)); + + upStreamBus3P = (Bus3Phase) upStreamBranch.getToBus(); + + //calculate the voltages at the upstream end + //NOTE: For, current flowing through the branch, the direction from bus -> to bus is regarded as positive; + Complex3x1 vabc = null; + Complex3x1 iabc = null; + + + // line + if(upStreamBranch.isLine()){ + vabc = upStreamBranch.getToBusVabc2FromBusVabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( + upStreamBranch.getToBusIabc2FromBusVabcMatrix().multiply(upStreamBranch.getCurrentAbcAtFromSide().multiply(-1))); + + //calculate the current injection at the upstream end + + iabc= upStreamBranch.getToBusVabc2FromBusIabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( + upStreamBranch.getToBusIabc2FromBusIabcMatrix().multiply(upStreamBranch.getCurrentAbcAtFromSide().multiply(-1))); + + } + + // transformer + else if (upStreamBranch.isXfr()){ + Transformer3Phase xfr3p = upStreamBranch.to3PXformer(); + vabc = xfr3p.getLVBusVabc2HVBusVabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( + xfr3p.getLVBusIabc2HVBusVabcMatrix().multiply(upStreamBranch.getCurrentAbcAtFromSide().multiply(-1))); + + iabc= xfr3p.getLVBusVabc2HVBusIabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( + xfr3p.getLVBusIabc2HVBusIabcMatrix().multiply(upStreamBranch.getCurrentAbcAtFromSide().multiply(-1))); + + } + + + upStreamBranch.setCurrentAbcAtToSide(iabc.multiply(-1.0)); + + if(upStreamBus3P.getIntFlag()==0 && !upStreamBus3P.isSwing()){ + upStreamBus3P.set3PhaseVoltages(vabc); + upStreamBus3P.setIntFlag(1); + } + } + else{ + upStreamBranch.setCurrentAbcAtToSide(sumOfBranchCurrents.subtract(busSelfEquivCurInj3Ph)); + + upStreamBus3P = (Bus3Phase) upStreamBranch.getFromBus(); + + //calculate the bus voltage at the upstream end + Complex3x1 vabc = null; + Complex3x1 iabc = null; + + // line + if(upStreamBranch.isLine()){ + vabc = upStreamBranch.getToBusVabc2FromBusVabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( + upStreamBranch.getToBusIabc2FromBusVabcMatrix().multiply(upStreamBranch.getCurrentAbcAtToSide())); + + //calculate the current injection at the upstream end + + + iabc = upStreamBranch.getToBusVabc2FromBusIabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( + upStreamBranch.getToBusIabc2FromBusIabcMatrix().multiply(upStreamBranch.getCurrentAbcAtToSide())); + } + + // transformer + else if (upStreamBranch.isXfr()){ + Transformer3Phase xfr3p = upStreamBranch.to3PXformer(); + + vabc = xfr3p.getLVBusVabc2HVBusVabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( + xfr3p.getLVBusIabc2HVBusVabcMatrix().multiply(upStreamBranch.getCurrentAbcAtToSide())); + + //calculate the current injection at the upstream end + + + iabc = xfr3p.getLVBusVabc2HVBusIabcMatrix().multiply(bus3P.get3PhaseVotlages()).add( + xfr3p.getLVBusIabc2HVBusIabcMatrix().multiply(upStreamBranch.getCurrentAbcAtToSide())); + + + } + + + upStreamBranch.setCurrentAbcAtFromSide(iabc.multiply(1.0)); + + + if(upStreamBus3P.getIntFlag()==0 && !upStreamBus3P.isSwing()){ + upStreamBus3P.set3PhaseVoltages(vabc); + upStreamBus3P.setIntFlag(1); + } + + } + + //} + + } + } + + + //----------------------------------------------------------------------- + //Step-2 check convergence. + //----------------------------------------------------------------------- + + // compare the voltage results of the last two steps + + + double mis = 0; + this.pfFlag =true; + for(AclfBus bus: this.distNet.getBusList()){ + if(bus.isActive()){ + Bus3Phase bus3P = (Bus3Phase) bus; + if(i>=1){ + mis=bus3P.get3PhaseVotlages().subtract(busVoltTable.get(bus3P.getId())).absMax(); + if(mis>this.getTolerance()){ + //System.out.println("bus, mismatch = "+bus3P.getId()+","+mis); + this.pfFlag = false; + } + } + busVoltTable.put(bus3P.getId(), bus3P.get3PhaseVotlages()); + } + } + + // power flow is converged, break the outer iteration and return + if(i>0 && this.pfFlag) { + //System.out.println("\n\nDistribution power flow converged, iterations = "+(i+1)+"\n"); + + calcSwingBusGenPower(); + + break; + } + + + //----------------------------------------------------------------------- + //Step-3 :backward sweep step + //----------------------------------------------------------------------- + + for(int sortNum2 = 0;sortNum20){ + bus.getContributeGenList().get(0).setGen(posGenPQ); + + } + } + } + } + + + + @Override + public DistributionPFMethod getPFMethod() { + + return this.pfMethod; + } + + @Override + public void setTolerance(double tolerance) { + this.tol = tolerance; + + } + + @Override + public double getTolerance() { + + return this.tol; + } + + @Override + public void setMaxIteration(int maxIterNum) { + this.maxIteration = maxIterNum; + + } + + @Override + public int getMaxIteration() { + + return this.maxIteration; + } + + @Override + public BaseAclfNetwork getNetwork() { + + return this.distNet; + } + + @Override + public void setNetwork(BaseAclfNetwork net) { + this.distNet = net; + + } + + @Override + public void setInitBusVoltageEnabled(boolean enableInitBus3PhaseVolts) { + this.initBusVoltagesEnabled = enableInitBus3PhaseVolts; + + } + + @Override + public boolean isInitBusVoltageEnabled() { + + return this.initBusVoltagesEnabled; + } + + +}