/* * @(#)IEEECDF_ODMTest.java * * Copyright (C) 2008 www.interpss.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * @Author Stephen Hou * @Version 1.0 * @Date 02/01/2008 * * Revision History * ================ * */ package org.ieee.odm.psse; import static org.junit.Assert.assertTrue; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; import org.ieee.odm.adapter.IODMAdapter; import org.ieee.odm.adapter.psse.PSSEAdapter; import org.ieee.odm.adapter.psse.PSSEAdapter.PsseVersion; import org.ieee.odm.model.aclf.AclfModelParser; import org.ieee.odm.model.aclf.AclfParserHelper; import org.ieee.odm.schema.DCLineData2TXmlType; import org.ieee.odm.schema.DcLineControlModeEnumType; import org.ieee.odm.schema.LFGenCodeEnumType; import org.ieee.odm.schema.LineBranchXmlType; import org.ieee.odm.schema.LoadflowBusXmlType; import org.ieee.odm.schema.LoadflowGenDataXmlType; import org.ieee.odm.schema.LoadflowNetXmlType; import org.ieee.odm.schema.PSXfr3WBranchXmlType; import org.ieee.odm.schema.VoltageUnitType; import org.ieee.odm.schema.XfrBranchXmlType; import org.junit.Test; public class PSSEV30_NEISO_ODMTest { @Test public void testCase1() throws Exception { final LogManager logMgr = LogManager.getLogManager(); Logger logger = Logger.getLogger("IEEE ODM Logger"); logger.setLevel(Level.INFO); logMgr.addLogger(logger); IODMAdapter adapter = new PSSEAdapter(PsseVersion.PSSE_30); assertTrue(adapter.parseInputFile("testData/psse/Model_testV30.raw")); AclfModelParser parser = (AclfModelParser)adapter.getModel(); //parser.stdout(); LoadflowNetXmlType net = parser.getNet(); assertTrue(net.getBasePower().getValue() == 100.0); /* <bus id="Bus1" number="1" areaNumber="1" name="'0000 '" offLine="false"> <ownerList> <owner id="1"/> </ownerList> <baseVoltage value="345.0" unit="KV"/> <loadflowData> <voltage value="1.0384173" unit="PU"/> <angle value="3.08" unit="DEG"/> <genData> <equivGen code="NoneGen"/> </genData> </loadflowData> </bus> */ LoadflowBusXmlType bus = parser.getBus("Bus1"); assertTrue(bus.getBaseVoltage().getValue() == 345.0); assertTrue(bus.getBaseVoltage().getUnit() == VoltageUnitType.KV); //LoadflowGenDataXmlType defaultGen = AclfParserHelper.getDefaultGen(bus.getGenData()); assertTrue(bus.getGenData().getCode() == LFGenCodeEnumType.NONE_GEN); /* <bus id="Bus3" number="3" areaNumber="1" name="'0001 '" offLine="false"> <loadflowData> <genData> <equivGen code="PV"> <power re="0.0" im="-65.628" unit="MVA"/> <desiredVoltage value="1.0384173" unit="PU"/> <remoteVoltageControlBus idRef="Bus1"/> <qLimit max="441.0" min="-155.0" unit="MVAR"/> <pLimit max="9999.0" min="-9999.0" unit="MW"/> </equivGen> <contributeGenList> <contributeGen id="'1 '" name="Gen:'1 '(3)" offLine="false"> <ratedMva value="100.0" unit="MVA"/> <genData> <power re="0.0" im="-65.628" unit="MVA"/> <desiredVoltage value="1.03842" unit="PU"/> <remoteVoltageControlBus idRef="Bus1"/> <qLimit max="441.0" min="-155.0" unit="MVAR"/> <pLimit max="9999.0" min="-9999.0" unit="MW"/> </genData> <sourceZ re="0.0" im="1.0" unit="PU"/> <mvarVControlParticipateFactor>1.0</mvarVControlParticipateFactor> </contributeGen> </contributeGenList> </genData> </loadflowData> </bus> */ bus = parser.getBus("Bus3"); //defaultGen = AclfParserHelper.getDefaultGen(bus.getGenData()); assertTrue(bus.getGenData().getCode() == LFGenCodeEnumType.PV); LoadflowGenDataXmlType Gen1= bus.getGenData().getContributeGen().get(0).getValue(); assertTrue(Gen1.getPower().getRe() == 0.0); assertTrue(Gen1.getPower().getIm() == -65.628); assertTrue(Gen1.getDesiredVoltage().getValue() == 1.03842); assertTrue(Gen1.getQLimit().getMax() == 441.0); assertTrue(bus.getGenData().getContributeGen().size() == 1); /* <branch id="Bus19_to_Bus18_cirId_2" circuitId="2" offLine="true"> <ownerList> <owner id="1" ownership="1.0"/> </ownerList> <fromBus idRef="Bus19"/> <toBus idRef="Bus18"/> <loadflowData code="Line"> <z re="0.0" im="1.0E-5" unit="PU"/> <meterLocation>FromSide</meterLocation> <branchRatingLimit> <mva rating1="9999.0" rating2="9999.0" rating3="9999.0" unit="MVA"/> </branchRatingLimit> </loadflowData> </branch> */ LineBranchXmlType line = parser.getLineBranch("Bus19", "Bus18", "2"); //assertTrue(line.isOffLine()); assertTrue(line.getZ().getIm() == 1.0E-5); /* <branch id="Bus26_to_Bus54_cirId_1" circuitId="1" name=" " offLine="false"> <ownerList> <owner id="1" ownership="1.0"/> </ownerList> <fromBus idRef="Bus26"/> <toBus idRef="Bus54"/> <loadflowData code="Transformer" xfr3W="false"> <z re="3.5E-4" im="0.0091" unit="PU"/> <fromTap value="0.975" unit="PU"/> <toTap value="1.0" unit="PU"/> <meterLocation>ToSide</meterLocation> <xfrInfo> <ratedPower12 value="100.0" unit="MVA"/> <dataOnSystemBase>true</dataOnSystemBase> </xfrInfo> <branchRatingLimit> <mva rating1="363.0" rating2="398.0" rating3="510.0" unit="MVA"/> </branchRatingLimit> </loadflowData> </branch> */ XfrBranchXmlType xfr = parser.getXfrBranch("Bus26", "Bus54", "1"); assertTrue(!xfr.isOffLine()); assertTrue(xfr.getZ().getIm() == 0.0091); assertTrue(xfr.getFromTurnRatio().getValue() == 0.975); assertTrue(xfr.getToTurnRatio().getValue() == 1.0); assertTrue(xfr.getXfrInfo().getRatedPower().getValue() == 100.0); assertTrue(xfr.getRatingLimit().getMva().getRating1() == 363.0); /* <aclf3WPSXfr wind1OffLine="false" wind2OffLine="false" wind3OffLine="false" circuitId="W" id="Bus27824_to_Bus27871_n_Bus27857_cirId_W" areaNumber="1" zoneNumber="1" offLine="false" name="D575121 "> <ownerList id="1"> <ownership unit="PU" value="1.0"/> </ownerList> <fromBus idRef="Bus27824"/> <toBus idRef="Bus27871"/> <tertiaryBus idRef="Bus27857"/> <z unit="PU" re="0.001477777777777778" im="0.12743333333333332"/> <ratingLimit> <mva unit="MVA" rating1="150.0" rating2="150.0" rating3="150.0"/> </ratingLimit> <meterLocation>FromSide</meterLocation> <fromTurnRatio unit="PU" value="1.0202927536231883"/> <toTurnRatio unit="PU" value="0.9963768115942029"/> <magnitizingY unit="PU" re="8.9E-4" im="-0.00448"/> <xfrInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Transformer3WInfoXmlType"> <dataOnSystemBase>true</dataOnSystemBase> <ratedPower unit="MVA" value="90.0"/> <starVMag unit="PU" value="1.00436"/> <starVAng unit="DEG" value="-9.5049"/> <ratedPower23 unit="MVA" value="22.29"/> <ratedPower31 unit="MVA" value="22.29"/> </xfrInfo> <z23 unit="PU" re="0.005563032750112159" im="0.12539255271422164"/> <z31 unit="PU" re="0.004845222072678332" im="0.2810228802153433"/> <tertTurnRatio unit="PU" value="0.25"/> <ratingLimit23> <mva unit="MVA" rating1="150.0" rating2="150.0" rating3="150.0"/> </ratingLimit23> <ratingLimit13> <mva unit="MVA" rating1="22.29" rating2="22.29" rating3="22.29"/> </ratingLimit13> <fromAngle unit="DEG" value="0.0"/> <tertShiftAngle unit="DEG" value="-30.0"/> </aclf3WPSXfr> */ PSXfr3WBranchXmlType psXfr3W = parser.getPSXfr3WBranch("Bus27824", "Bus27871", "Bus27857", "W"); //PSXfr3WBranchXmlType psXfr3W= (PSXfr3WBranchXmlType) parser.getBranch("Bus27824_to_Bus27871_n_Bus27857_cirId_W"); // assertTrue(!psXfr3W.isOffLine()); // Input Z12_0=0.00133, tj=1.0 CW=2 wind voltage in kV; CZ=2: Transformer based,90MW // Therefore, the actual Z12 = Z12_0*(SYS_BASE/XFR_BASE)=0.00133/0.9=0.0014777 assertTrue(Math.abs(psXfr3W.getZ().getRe()-0.001477)<1.0E-5); assertTrue(psXfr3W.getFromAngle().getValue() == 0.0); assertTrue(psXfr3W.getTertShiftAngle().getValue() == -30.0); //assertTrue(psXfr3W.getXfrInfo().getFromRatedVoltage().getValue() == 360.); assertTrue(psXfr3W.getXfrInfo().getRatedPower().getValue() == 90.0); assertTrue(psXfr3W.getRatingLimit23().getMva().getRating1() == 150.0); /* <dcLint2T id="Bus615600_to_Bus615353_cirId_1" number="1"> <controlMode>power</controlMode> <lineZ re="13.75" im="0.0" unit="OHM"/> <powerDemand value="552.0" unit="MW"/> <controlOnRectifierSide>true</controlOnRectifierSide> <scheduledDCVoltage value="410.0" unit="KV"/> <meterdEnd>inverter</meterdEnd> <modeSwitchDCVoltage value="-1.0" unit="KV"/> <compoundingR re="13.75" im="0.0" unit="OHM"/> <powerOrCurrentMarginPU>0.1</powerOrCurrentMarginPU> <minDCVoltage value="0.0" unit="KV"/> <rectifier> <type>rectifier</type> <busId idRef="Bus615600"/> <numberofBridges>2</numberofBridges> <minFiringAngle value="15.0" unit="DEG"/> <maxFiringAngle value="19.0" unit="DEG"/> <acSideRatedVoltage value="230.0" unit="KV"/> <commutatingZ re="0.0" im="21.6" unit="OHM"/> <commutatingCapacitor>0.0</commutatingCapacitor> <xformerTurnRatio>0.7426</xformerTurnRatio> <xformerTapSetting value="0.975" unit="PU"/> <xformerTapLimit max="1.2" min="0.9" unit="PU"/> <xformerTapStepSize>0.0125</xformerTapStepSize> </rectifier> <inverter> <type>inverter</type> <busId idRef="Bus615353"/> <numberofBridges>2</numberofBridges> <minFiringAngle value="18.0" unit="DEG"/> <maxFiringAngle value="18.0" unit="DEG"/> <acSideRatedVoltage value="345.0" unit="KV"/> <commutatingZ re="0.0" im="19.8" unit="OHM"/> <commutatingCapacitor>0.0</commutatingCapacitor> <xformerTurnRatio>0.4714</xformerTurnRatio> <xformerTapSetting value="0.95221" unit="PU"/> <xformerTapLimit max="1.2125" min="0.9125" unit="PU"/> <xformerTapStepSize>1.0E-5</xformerTapStepSize> </inverter> </dcLint2T> */ //System.out.println(parser.getObjectCache()); DCLineData2TXmlType dcLine = parser.getDcLine2TRecord("Bus615600", "Bus615353", "1"); assertTrue(dcLine.getControlMode() == DcLineControlModeEnumType.POWER); assertTrue(dcLine.getPowerDemand().getValue() == 552.0); assertTrue(dcLine.getPowerOrCurrentMarginPU() == 0.1); assertTrue(dcLine.getRectifier().getNumberofBridges() == 2); assertTrue(dcLine.getInverter().getMaxFiringAngle().getValue() == 18.0); assertTrue(dcLine.getInverter().getMinFiringAngle().getValue() == 18.0); assertTrue(dcLine.getInverter().getAcSideRatedVoltage().getValue() == 345.0); } }