/*
* @(#)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 Mike Zhou
* @Version 1.0
* @Date 02/01/2008
*
* Revision History
* ================
*
*/
package org.ieee.odm.ieeecdf;
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.ieeecdf.IeeeCDFAdapter;
import org.ieee.odm.model.aclf.AclfModelParser;
import org.ieee.odm.model.aclf.AclfParserHelper;
import org.ieee.odm.schema.ApparentPowerUnitType;
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.ReactivePowerUnitType;
import org.ieee.odm.schema.XfrBranchXmlType;
import org.ieee.odm.schema.YUnitType;
import org.ieee.odm.schema.ZUnitType;
import org.junit.Test;
public class IEEECDF_ODMTest {
@Test
public void testCaseInputLines() throws Exception {
final LogManager logMgr = LogManager.getLogManager();
Logger logger = Logger.getLogger("IEEE ODM Logger");
logger.setLevel(Level.INFO);
logMgr.addLogger(logger);
IODMAdapter adapter = new IeeeCDFAdapter();
assertTrue(adapter.parseInput(this.ieee14asLines));
AclfModelParser parser = (AclfModelParser)adapter.getModel();
//System.out.println(parser.toXmlDoc());
LoadflowNetXmlType baseCaseNet = parser.getNet();
assertTrue(baseCaseNet.getBusList().getBus().size() == 14);
assertTrue(baseCaseNet.getBranchList().getBranch().size() == 20);
assertTrue(baseCaseNet.getBasePower().getValue() == 100.0);
assertTrue(baseCaseNet.getBasePower().getUnit() == ApparentPowerUnitType.MVA);
}
@Test
public void testCaseInputFileSwingBusAngle() throws Exception {
final LogManager logMgr = LogManager.getLogManager();
Logger logger = Logger.getLogger("IEEE ODM Logger");
logger.setLevel(Level.INFO);
logMgr.addLogger(logger);
IODMAdapter adapter = new IeeeCDFAdapter();
assertTrue(adapter.parseInputFile("testdata/ieee_format/Ieee14Bus_SwingAng.ieee"));
AclfModelParser parser = (AclfModelParser)adapter.getModel();
//System.out.println(parser.toXmlDoc());
LoadflowBusXmlType busRec = parser.getBus("Bus1");
//System.out.println(busRec);
assertTrue(busRec.getBaseVoltage().getValue() == 132.0);
assertTrue(busRec.getVoltage().getValue() == 1.060);
assertTrue(busRec.getAngle().getValue() == 1.0);
}
@Test
public void testCaseInputFile() throws Exception {
final LogManager logMgr = LogManager.getLogManager();
Logger logger = Logger.getLogger("IEEE ODM Logger");
logger.setLevel(Level.INFO);
logMgr.addLogger(logger);
IODMAdapter adapter = new IeeeCDFAdapter();
assertTrue(adapter.parseInputFile("testdata/ieee_format/Ieee14Bus.ieee"));
AclfModelParser parser = (AclfModelParser)adapter.getModel();
//System.out.println(parser.toXmlDoc());
LoadflowNetXmlType baseCaseNet = parser.getNet();
assertTrue(baseCaseNet.getBusList().getBus().size() == 14);
assertTrue(baseCaseNet.getBranchList().getBranch().size() == 20);
assertTrue(baseCaseNet.getBasePower().getValue() == 100.0);
assertTrue(baseCaseNet.getBasePower().getUnit() == ApparentPowerUnitType.MVA);
// Check Bus Data
// ==============
// Bus 1 is a swing bus
// 1 Bus 1 HV 1 1 3 1.060 0.0 0.0 0.0 232.4 -16.9 132.0 1.060 0.0 0.0 0.0 0.0 0
LoadflowBusXmlType busRec = parser.getBus("Bus1");
//System.out.println(busRec);
assertTrue(busRec.getBaseVoltage().getValue() == 132.0);
assertTrue(busRec.getVoltage().getValue() == 1.060);
assertTrue(busRec.getAngle().getValue() == 0.0);
LoadflowGenDataXmlType defaultGen = AclfParserHelper.getDefaultGen(busRec.getGenData());
assertTrue(busRec.getGenData().getCode() == LFGenCodeEnumType.SWING);
assertTrue(busRec.getShuntYData().getEquivY() == null);
// Bus 2 is a PV bus with load
// 2 Bus 2 HV 1 1 2 1.045 -4.98 21.7 12.7 40.0 42.4 132.0 1.045 50.0 -40.0 0.0 0.0 0
busRec = parser.getBus("Bus2");
//System.out.println(busRec);
defaultGen = AclfParserHelper.getDefaultGen(busRec.getGenData());
assertTrue(busRec.getGenData().getCode() == LFGenCodeEnumType.PV);
assertTrue(defaultGen.getPower().getRe() == 40.0);
assertTrue(defaultGen.getPower().getUnit() == ApparentPowerUnitType.MVA);
assertTrue(defaultGen.getQLimit().getMax() == 50.0);
assertTrue(defaultGen.getQLimit().getMin() == -40.0);
assertTrue(defaultGen.getQLimit().getUnit() == ReactivePowerUnitType.MVAR);
LoadflowLoadDataXmlType defaultLoad = AclfParserHelper.getDefaultLoad(busRec.getLoadData());
assertTrue(defaultLoad.getCode() == LFLoadCodeEnumType.CONST_P);
assertTrue(defaultLoad.getConstPLoad().getRe() == 21.7);
assertTrue(defaultLoad.getConstPLoad().getIm() == 12.7);
assertTrue(defaultLoad.getConstPLoad().getUnit() == ApparentPowerUnitType.MVA);
// Bus 9 is a load bus, also there is a capacitor of 0.19 pu
// 9 Bus 9 LV 1 1 0 1.056 -14.94 29.5 16.6 0.0 0.0 35.0 0.0 0.0 0.0 0.0 0.19 0
busRec = parser.getBus("Bus9");
defaultLoad = AclfParserHelper.getDefaultLoad(busRec.getLoadData());
assertTrue(defaultLoad.getCode() == LFLoadCodeEnumType.CONST_P);
assertTrue(defaultLoad.getConstPLoad().getRe() == 29.5);
assertTrue(defaultLoad.getConstPLoad().getIm() == 16.6);
assertTrue(defaultLoad.getConstPLoad().getUnit() == ApparentPowerUnitType.MVA);
assertTrue(busRec.getShuntYData().getEquivY().getRe() == 0.0);
assertTrue(busRec.getShuntYData().getEquivY().getIm() == 0.19);
assertTrue(busRec.getShuntYData().getEquivY().getUnit() == YUnitType.PU);
// Bus 7 is non-gen and non-load bus
// 7 Bus 7 ZV 1 1 0 1.062 -13.37 0.0 0.0 0.0 0.0 35.0 0.0 0.0 0.0 0.0 0.0 0
busRec = parser.getBus("Bus7");
//assertTrue(busRec.getLoadflowData().getGenData() == null);
//defaultLoad = AclfParserHelper.getDefaultLoad(busRec.getLoadData());
assertTrue(busRec.getLoadData().getContributeLoad().size() == 0);
assertTrue(busRec.getShuntYData().getEquivY() == null);
// Check Branch Data
// =================
// Branch 1->2 is a LIne
// 1 2 1 1 1 0 0.01938 0.05917 0.0528 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
LineBranchXmlType braRec = parser.getLineBranch("Bus1", "Bus2", "1");
assertTrue(braRec != null);
assertTrue(braRec.getZ().getRe() == 0.01938);
assertTrue(braRec.getZ().getIm() == 0.05917);
assertTrue(braRec.getZ().getUnit() == ZUnitType.PU);
assertTrue(braRec.getTotalShuntY().getRe() == 0.0);
assertTrue(braRec.getTotalShuntY().getIm() == 0.0528);
assertTrue(braRec.getTotalShuntY().getUnit() == YUnitType.PU);
// Branch 4->7 is a Xfr
// 4 7 1 1 1 1 0.0 0.20912 0.0 0 0 0 0 0 0.978 0.0 0.0 0.0 0.0 0.0 0.0
XfrBranchXmlType xfrBraRec = parser.getXfrBranch("Bus4", "Bus7", "1");
assertTrue(braRec != null);
assertTrue(xfrBraRec.getZ().getRe() == 0.0);
assertTrue(xfrBraRec.getZ().getIm() == 0.20912);
assertTrue(xfrBraRec.getZ().getUnit() == ZUnitType.PU);
//System.out.println(braRec.getLoadflowData().getXformerData().getFromTap());
//System.out.println(braRec.getLoadflowData().getXformerData().getToTap());
assertTrue(xfrBraRec.getFromTurnRatio().getValue() == 0.978);
assertTrue(xfrBraRec.getToTurnRatio().getValue() == 1.0);
//parser.stdout();
}
String[] ieee14asLines = {
" 08/19/93 UW ARCHIVE 100.0 1962 W IEEE 14 Bus Test Case",
"BUS DATA FOLLOWS 14 ITEMS",
" 1 Bus 1 HV 1 1 3 1.060 0.0 0.0 0.0 232.4 -16.9 132.0 1.060 0.0 0.0 0.0 0.0 0",
" 2 Bus 2 HV 1 1 2 1.045 -4.98 21.7 12.7 40.0 42.4 132.0 1.045 50.0 -40.0 0.0 0.0 0",
" 3 Bus 3 HV 1 1 2 1.010 -12.72 94.2 19.0 0.0 23.4 132.0 1.010 40.0 0.0 0.0 0.0 0",
" 4 Bus 4 HV 1 1 0 1.019 -10.33 47.8 -3.9 0.0 0.0 132.0 0.0 0.0 0.0 0.0 0.0 0",
" 5 Bus 5 HV 1 1 0 1.020 -8.78 7.6 1.6 0.0 0.0 132.0 0.0 0.0 0.0 0.0 0.0 0",
" 6 Bus 6 LV 1 1 2 1.070 -14.22 11.2 7.5 0.0 12.2 35.0 1.070 24.0 -6.0 0.0 0.0 0",
" 7 Bus 7 ZV 1 1 0 1.062 -13.37 0.0 0.0 0.0 0.0 35.0 0.0 0.0 0.0 0.0 0.0 0",
" 8 Bus 8 TV 1 1 2 1.090 -13.36 0.0 0.0 0.0 17.4 10.0 1.090 24.0 -6.0 0.0 0.0 0",
" 9 Bus 9 LV 1 1 0 1.056 -14.94 29.5 16.6 0.0 0.0 35.0 0.0 0.0 0.0 0.0 0.19 0",
" 10 Bus 10 LV 1 1 0 1.051 -15.10 9.0 5.8 0.0 0.0 35.0 0.0 0.0 0.0 0.0 0.0 0",
" 11 Bus 11 LV 1 1 0 1.057 -14.79 3.5 1.8 0.0 0.0 35.0 0.0 0.0 0.0 0.0 0.0 0",
" 12 Bus 12 LV 1 1 0 1.055 -15.07 6.1 1.6 0.0 0.0 35.0 0.0 0.0 0.0 0.0 0.0 0",
" 13 Bus 13 LV 1 1 0 1.050 -15.16 13.5 5.8 0.0 0.0 35.0 0.0 0.0 0.0 0.0 0.0 0",
" 14 Bus 14 LV 1 1 0 1.036 -16.04 14.9 5.0 0.0 0.0 35.0 0.0 0.0 0.0 0.0 0.0 0",
"-999 ",
"BRANCH DATA FOLLOWS 20 ITEMS",
" 1 2 1 1 1 0 0.01938 0.05917 0.0528 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 1 5 1 1 1 0 0.05403 0.22304 0.0492 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 2 3 1 1 1 0 0.04699 0.19797 0.0438 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 2 4 1 1 1 0 0.05811 0.17632 0.0340 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 2 5 1 1 1 0 0.05695 0.17388 0.0346 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 3 4 1 1 1 0 0.06701 0.17103 0.0128 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 4 5 1 1 1 0 0.01335 0.04211 0.0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 4 7 1 1 1 1 0.0 0.20912 0.0 0 0 0 0 0 0.978 0.0 0.0 0.0 0.0 0.0 0.0",
" 4 9 1 1 1 1 0.0 0.55618 0.0 0 0 0 0 0 0.969 0.0 0.0 0.0 0.0 0.0 0.0",
" 5 6 1 1 1 1 0.0 0.25202 0.0 0 0 0 0 0 0.932 0.0 0.0 0.0 0.0 0.0 0.0",
" 6 11 1 1 1 0 0.09498 0.19890 0.0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 6 12 1 1 1 0 0.12291 0.25581 0.0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 6 13 1 1 1 0 0.06615 0.13027 0.0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 7 8 1 1 1 1 0.0 0.17615 0.0 0 0 0 0 0 1.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 7 9 1 1 1 1 0.0 0.11001 0.0 0 0 0 0 0 1.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 9 10 1 1 1 0 0.03181 0.08450 0.0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 9 14 1 1 1 0 0.12711 0.27038 0.0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 10 11 1 1 1 0 0.08205 0.19207 0.0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 12 13 1 1 1 0 0.22092 0.19988 0.0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
" 13 14 1 1 1 0 0.17093 0.34802 0.0 0 0 0 0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0",
"-999",
"LOSS ZONES FOLLOWS 1 ITEMS",
" 1 IEEE 14 BUS",
"-99",
"INTERCHANGE DATA FOLLOWS 1 ITEMS",
" 1 2 Bus 2 HV 0.0 999.99 IEEE14 IEEE 14 Bus Test Case",
"-9",
"TIE LINES FOLLOWS 0 ITEMS",
"-999",
"END OF DATA"
};
}