/*
* @(#)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.v26.PSSEV26Adapter;
import org.ieee.odm.model.aclf.AclfModelParser;
import org.ieee.odm.model.aclf.AclfParserHelper;
import org.ieee.odm.schema.LFGenCodeEnumType;
import org.ieee.odm.schema.LFLoadCodeEnumType;
import org.ieee.odm.schema.LineBranchXmlType;
import org.ieee.odm.schema.LoadflowBusXmlType;
import org.ieee.odm.schema.LoadflowGenDataXmlType;
import org.ieee.odm.schema.LoadflowLoadDataXmlType;
import org.ieee.odm.schema.LoadflowNetXmlType;
import org.ieee.odm.schema.XfrBranchXmlType;
import org.junit.Test;
public class PSSEV26_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 PSSEV26Adapter();
assertTrue(adapter.parseInputFile("testData/psse/LFModel_testV26.raw"));
//System.out.println(adapter.getModel().toXmlDoc());
AclfModelParser parser = (AclfModelParser)adapter.getModel();
LoadflowNetXmlType net = parser.getNet();
assertTrue(net.getBasePower().getValue() == 100.0);
/*
<bus id="No15021" number="15021" name="'PVERDE 1'" areaNumber="2" zoneNumber="4">
<genData code="Swing">
<equivGen>
<desiredVoltage value="1.07" unit="PU"/>
<desiredAngle value="3.1024" unit="DEG"/>
</equivGen>
</bus>
*/
LoadflowBusXmlType bus = parser.getBus("Bus15021");
LoadflowGenDataXmlType defaultGen = AclfParserHelper.getDefaultGen(bus.getGenData());
assertTrue(bus.getGenData().getCode() == LFGenCodeEnumType.SWING);
assertTrue(defaultGen.getDesiredVoltage().getValue() == 1.07);
/*
<baseVoltage value="115.0" unit="KV"/>
<loadflowData>
<voltage value="1.01273" unit="PU"/>
<angle value="-10.5533" unit="DEG"/>
<loadData/>
</loadflowData>
*/
bus = parser.getBus("Bus31212");
assertTrue(bus.getBaseVoltage().getValue() == 115.0);
assertTrue(bus.getVoltage().getValue() == 1.01273);
assertTrue(bus.getAngle().getValue() == -10.5533);
/*
<genData code="PV">
<contributeGen id="1" offLine="false">
<power unit="MVA" re="8.52" im="2.51"/>
<mvaBase unit="MVA" value="100.0"/>
<sourceZ unit="PU" re="0.0" im="1.0"/>
<xfrTap>1.0</xfrTap>
</contributeGen>
</genData>
*/
// gen bus
bus = parser.getBus("Bus31435");
defaultGen = AclfParserHelper.getDefaultGen(bus.getGenData());
assertTrue(bus.getGenData().getCode() == LFGenCodeEnumType.PV);
assertTrue(defaultGen.getPower().getRe() == 8.52);
assertTrue(defaultGen.getPower().getIm() == 2.51);
assertTrue(defaultGen.getDesiredVoltage().getValue() == 1.0203);
assertTrue(defaultGen.getQLimit().getMax() == 10.0);
assertTrue(defaultGen.getQLimit().getMin() == -6.0);
/*
<loadData code="CONST_P">
<equivLoad>
<constPLoad re="6.5" im="3.86" unit="MVA"/>
</equivLoad>
</loadData>
*/
bus = parser.getBus("Bus36016");
LoadflowLoadDataXmlType defaultLoad = AclfParserHelper.getDefaultLoad(bus.getLoadData());
assertTrue(defaultLoad.getCode() == LFLoadCodeEnumType.CONST_P);
assertTrue(defaultLoad.getConstPLoad().getRe() == 6.5);
assertTrue(defaultLoad.getConstPLoad().getIm() == 3.86);
/*
<shuntQData>
<equivQ value="75.0" unit="MVAR"/>
</shuntQData>
*/
bus = parser.getBus("Bus30810");
//assertTrue(bus.getShuntCompensatorData().getEquivQ().getValue() == 75.0);
// two loads on a bus, also, gen on the bus is turned off
/*
<loadData>
<contributeLoad code="CONST_P" id="' 1'" areaNumber="1" zoneNumber="1" offLine="false">
<ownerList id="1">
<ownership unit="PU" value="1.0"/>
</ownerList>
<constPLoad unit="MVA" re="12.82" im="0.58"/>
</contributeLoad>
<contributeLoad code="CONST_P" id="' 2'" areaNumber="1" zoneNumber="1" offLine="false">
<ownerList id="1">
<ownership unit="PU" value="1.0"/>
</ownerList>
<constPLoad unit="MVA" re="7.5" im="0.34"/>
</contributeLoad>
</loadData>
*/
bus = parser.getBus("Bus32252");
defaultGen = AclfParserHelper.getDefaultGen(bus.getGenData());
assertTrue(bus.getGenData().getCode() == LFGenCodeEnumType.PV);
defaultLoad = AclfParserHelper.getDefaultLoad(bus.getLoadData());
assertTrue(bus.getLoadData().getContributeLoad().get(0).getValue().getConstPLoad().getRe() == 12.82);
assertTrue(bus.getLoadData().getContributeLoad().get(1).getValue().getConstPLoad().getRe() == 7.5);
// bus turned off case
/*
<bus id="No367" number="367" name="'MORAGA 2'" offLine="true" areaNumber="1" zoneNumber="1">
<loadflowData>
<genData code="OFF">
<equivGen/>
<contributeGenList>
</contributeGenList>
</genData>
</loadflowData>
</bus>
*/
bus = parser.getBus("Bus32252");
assertTrue(bus.getGenData().getCode() == LFGenCodeEnumType.PV);
// Branch info
// =========
/*
<branch circuitId="' 1'" id="No31212_to_No31210_cirId_' 1'" offLine="false">
<fromBus idRef="No31212"/>
<toBus idRef="No31210"/>
<loadflowData code="Line">
<lineData>
<z re="0.00392" im="0.01132" unit="PU"/>
<totalShuntY re="0.0" im="0.0015" unit="PU"/>
</lineData>
<ratingLimit>
<mva rating1="97.8" rating2="111.7" rating3="0.0" unit="MVA"/>
</ratingLimit>
</loadflowData>
</branch>
*/
LineBranchXmlType line = parser.getLineBranch("Bus31212", "Bus31210", "_1");
assertTrue(line.getZ().getRe() == 0.00392);
assertTrue(line.getZ().getIm() == 0.01132);
assertTrue(line.getRatingLimit().getMva().getRating1() == 97.8);
assertTrue(line.getRatingLimit().getMva().getRating2() == 111.7);
assertTrue(line.getRatingLimit().getMva().getRating3() == 0.0);
/*
<branch circuitId="' 1'" id="No31212_to_No31435_cirId_' 1'" offLine="false">
<fromBus idRef="No31212"/>
<toBus idRef="No31435"/>
<loadflowData code="Transformer">
<xformerData>
<z re="0.0" im="0.266667" unit="PU"/>
<fromTap value="1.0" unit="PU"/>
<toTap value="1.0" unit="PU"/>
</xformerData>
<ratingLimit>
<mva rating1="30.0" rating2="30.0" rating3="0.0" unit="MVA"/>
</ratingLimit>
</loadflowData>
</branch>
*/
XfrBranchXmlType xfr = parser.getXfrBranch("Bus31212", "Bus31435", "_1");
assertTrue(xfr.getZ().getRe() == 0.0);
assertTrue(xfr.getZ().getIm() == 0.266667);
assertTrue(xfr.getFromTurnRatio().getValue() == 1.0);
assertTrue(xfr.getToTurnRatio().getValue() == 1.0);
}
}