/* * @(#)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.opf.matpower; 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.adapter.opf.matpower.OpfMatpowerAdapter; import org.ieee.odm.model.aclf.AclfModelParser; import org.ieee.odm.model.aclf.AclfParserHelper; import org.ieee.odm.model.opf.OpfModelParser; import org.ieee.odm.schema.ApparentPowerUnitType; import org.ieee.odm.schema.CostModelEnumType; 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.OpfGenBusXmlType; import org.ieee.odm.schema.OpfGenOperatingModeEnumType; import org.ieee.odm.schema.OpfNetworkXmlType; 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 OPF_Matpower_ODMTest { @Test public void testCase3buslp() throws Exception { final LogManager logMgr = LogManager.getLogManager(); Logger logger = Logger.getLogger("OPF_Matpower Logger"); logger.setLevel(Level.INFO); logMgr.addLogger(logger); IODMAdapter adapter = new OpfMatpowerAdapter(); assertTrue(adapter.parseInputFile("testdata/matpower/case3bus.m")); OpfModelParser parser = (OpfModelParser)adapter.getModel(); //System.out.println(parser.toXmlDoc("out/matpower/case3bus.xml")); //LoadflowNetXmlType baseCaseNet = parser.getAclfNet(); OpfNetworkXmlType net = parser.getOpfNetwork(); assertTrue(net.getBusList().getBus().size() == 3); assertTrue(net.getBranchList().getBranch().size() == 3); assertTrue(net.getBasePower().getValue() == 100.0); assertTrue(net.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 OpfGenBusXmlType busRec = parser.getOpfGenBus("Bus1"); //System.out.println(busRec); assertTrue(busRec.getBaseVoltage().getValue() == 10.0); assertTrue(busRec.getVoltage().getValue() == 1.0); assertTrue(busRec.getAngle().getValue() == 0.0); //LoadflowGenDataXmlType defaultGen = AclfParserHelper.getDefaultGen(busRec.getGenData()); assertTrue(busRec.getGenData().getCode() == LFGenCodeEnumType.SWING); //assertTrue(busRec.getLoadData().getEquivLoad() == null); assertTrue(busRec.getOperatingMode().equals(OpfGenOperatingModeEnumType.PV_GENERATOR)); assertTrue(busRec.getIncCost().getCostModel().equals(CostModelEnumType.PIECE_WISE_LINEAR_MODEL)); assertTrue(busRec.getIncCost().getPieceWiseLinearModel().getStairStep().get(0).getPrice().getValue()==10); assertTrue(busRec.getIncCost().getPieceWiseLinearModel().getStairStep().get(0).getAmount().getValue()==20); assertTrue(busRec.getConstraints().getActivePowerLimit().getMax() == 200); assertTrue(busRec.getConstraints().getActivePowerLimit().getMin() == 20); // 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 LoadflowBusXmlType bus3 = parser.getBus("Bus3"); //System.out.println(busRec); LoadflowLoadDataXmlType defaultLoad = AclfParserHelper.getDefaultLoad(bus3.getLoadData()); assertTrue(defaultLoad.getConstPLoad().getRe()==150); assertTrue(defaultLoad.getCode() == LFLoadCodeEnumType.CONST_P); assertTrue(defaultLoad.getConstPLoad().getIm() == 0); assertTrue(defaultLoad.getConstPLoad().getUnit() == ApparentPowerUnitType.MVA); // Check Branch Data // ================= LineBranchXmlType braRec = parser.getLineBranch("Bus1", "Bus2", "1"); assertTrue(braRec != null); assertTrue(braRec.getZ().getRe() == 0); assertTrue(braRec.getZ().getIm() == 0.2); assertTrue(braRec.getZ().getUnit() == ZUnitType.PU); assertTrue(braRec.getRatingLimit().getMw().getRating1() == 30); //parser.stdout(); } @Test public void testCase3busqp() throws Exception { final LogManager logMgr = LogManager.getLogManager(); Logger logger = Logger.getLogger("OPF_Matpower Logger"); logger.setLevel(Level.INFO); logMgr.addLogger(logger); IODMAdapter adapter = new OpfMatpowerAdapter(); assertTrue(adapter.parseInputFile("testdata/matpower/case3bus_qp.m")); OpfModelParser parser = (OpfModelParser)adapter.getModel(); //System.out.println(parser.toXmlDoc("out/matpower/case3bus_qp.xml")); LoadflowNetXmlType baseCaseNet = parser.getNet(); OpfNetworkXmlType net = parser.getOpfNetwork(); assertTrue(baseCaseNet.getBusList().getBus().size() == 3); assertTrue(baseCaseNet.getBranchList().getBranch().size() == 3); 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 OpfGenBusXmlType busRec = (OpfGenBusXmlType) parser.getBus("Bus1"); //System.out.println(busRec); assertTrue(busRec.getBaseVoltage().getValue() == 10.0); assertTrue(busRec.getVoltage().getValue() == 1.0); assertTrue(busRec.getAngle().getValue() == 0.0); //LoadflowGenDataXmlType defaultGen = AclfParserHelper.getDefaultGen(busRec.getGenData()); assertTrue(busRec.getGenData().getCode() == LFGenCodeEnumType.SWING); assertTrue(busRec.getOperatingMode().equals(OpfGenOperatingModeEnumType.PV_GENERATOR)); assertTrue(busRec.getIncCost().getCostModel().equals(CostModelEnumType.QUADRATIC_MODEL)); assertTrue(busRec.getIncCost().getQuadraticModel().getSqrCoeff().getValue() == 0.00463); assertTrue(busRec.getIncCost().getQuadraticModel().getLinCoeff().getValue() == 10.694); assertTrue(busRec.getIncCost().getQuadraticModel().getConstCoeff() == 10000); assertTrue(busRec.getConstraints().getActivePowerLimit().getMax() == 200); assertTrue(busRec.getConstraints().getActivePowerLimit().getMin() == 20); LoadflowLoadDataXmlType defaultLoad = AclfParserHelper.getDefaultLoad(busRec.getLoadData()); assertTrue(defaultLoad.getConstPLoad().getRe()== 132.66); assertTrue(defaultLoad.getConstPLoad().getUnit() == ApparentPowerUnitType.MVA); // Check Branch Data // ================= LineBranchXmlType braRec = parser.getLineBranch("Bus1", "Bus2", "1"); assertTrue(braRec != null); assertTrue(braRec.getZ().getRe() == 0); assertTrue(braRec.getZ().getIm() == 0.2); assertTrue(braRec.getZ().getUnit() == ZUnitType.PU); assertTrue(braRec.getRatingLimit().getMw().getRating1() == 55); //parser.stdout(); } }