/*
* @(#)UCTE_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.ucte;
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.ucte.UCTE_DEFAdapter;
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.CurrentUnitType;
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.LoadflowLoadDataXmlType;
import org.ieee.odm.schema.LoadflowNetXmlType;
import org.ieee.odm.schema.VoltageUnitType;
import org.ieee.odm.schema.XfrBranchXmlType;
import org.ieee.odm.schema.YUnitType;
import org.ieee.odm.schema.ZUnitType;
import org.junit.Test;
public class UCTE_ODMTest {
@Test
public void testCaseAclf() throws Exception {
final LogManager logMgr = LogManager.getLogManager();
Logger logger = Logger.getLogger("IEEE ODM Logger");
logger.setLevel(Level.INFO);
logMgr.addLogger(logger);
IODMAdapter adapter = new UCTE_DEFAdapter();
assertTrue(adapter.parseInputFile("testdata/ucte/AusPower_TestCase_Xfr.uct"));
AclfModelParser parser = (AclfModelParser)adapter.getModel();
LoadflowNetXmlType baseCaseNet = parser.getNet();
assertTrue(baseCaseNet.getBusList().getBus().size() == 18);
assertTrue(baseCaseNet.getBranchList().getBranch().size() == 30);
// A1____1 is a load bus, voltage code 1 -> 380kv
// A1 1 0 280.000 .000000 .000000 .000000
LoadflowBusXmlType busRec = parser.getBus("A1____1");
assertTrue(busRec.getBaseVoltage().getValue() == 380.0);
assertTrue(busRec.getBaseVoltage().getUnit() == VoltageUnitType.KV);
// if voltage not defined, it is equal to the base voltage
assertTrue(busRec.getVoltage().getValue() == 380.0);
assertTrue(busRec.getVoltage().getUnit() == VoltageUnitType.KV);
LoadflowLoadDataXmlType defaultLoad = AclfParserHelper.getDefaultLoad(busRec.getLoadData());
assertTrue(defaultLoad.getConstPLoad().getRe() == 280.0);
assertTrue(defaultLoad.getConstPLoad().getIm() == 0.0);
assertTrue(defaultLoad.getConstPLoad().getUnit() == ApparentPowerUnitType.MVA);
assertTrue(busRec.getShuntYData().getEquivY() == null);
// A2____1 is a load bus
// A2 1 0 .000000 .000000 -150.00 .000000
busRec = parser.getBus("A2____1");
LoadflowGenDataXmlType defaultGen = AclfParserHelper.getDefaultGen(busRec.getGenData());
assertTrue(busRec.getGenData().getCode() == LFGenCodeEnumType.PQ);
assertTrue(defaultGen.getPower().getRe() == 150.0);
assertTrue(defaultGen.getPower().getIm() == 0.0);
assertTrue(defaultGen.getPower().getUnit() == ApparentPowerUnitType.MVA);
//assertTrue(busRec.getLoadData().getEquivLoad() == null);
// B4____1 is a swing bus
// B4 1 3 405.00 70.0000 .000000 .000000 .000000
busRec = parser.getBus("B4____1");
assertTrue(busRec.getVoltage().getValue() == 405.0);
assertTrue(busRec.getVoltage().getUnit() == VoltageUnitType.KV);
assertTrue(busRec.getAngle().getValue() == 0.0);
defaultGen = AclfParserHelper.getDefaultGen(busRec.getGenData());
assertTrue(busRec.getGenData().getCode() == LFGenCodeEnumType.SWING);
defaultLoad = AclfParserHelper.getDefaultLoad(busRec.getLoadData());
assertTrue(defaultLoad.getConstPLoad().getRe() == 70.0);
assertTrue(defaultLoad.getConstPLoad().getIm() == 0.0);
assertTrue(defaultLoad.getConstPLoad().getUnit() == ApparentPowerUnitType.MVA);
// A1____1->A2____1 is a line
// A1 1 A2 1 1 0 1.3600 19.350 240.9601 480
LineBranchXmlType lineRec = parser.getLineBranch("A1____1", "A2____1", "1");
assertTrue(lineRec.getZ().getRe() == 1.3600);
assertTrue(lineRec.getZ().getIm() == 19.350);
assertTrue(lineRec.getZ().getUnit() == ZUnitType.OHM);
assertTrue(lineRec.getTotalShuntY().getRe() == 0.0);
assertTrue(lineRec.getTotalShuntY().getIm() == 240.9601);
assertTrue(lineRec.getTotalShuntY().getUnit() == YUnitType.MICROMHO);
assertTrue(lineRec.getRatingLimit().getCurrent().getValue() == 480.0);
assertTrue(lineRec.getRatingLimit().getCurrent().getUnit() == CurrentUnitType.AMP);
// D1____1->D3____2 is a Xfr
// D1 1 D3 2 1 0 400. 230. 600.0 .20000 15.000 -16.0000 5.0000 1000
XfrBranchXmlType xfrRec = parser.getXfrBranch("D1____1", "D3____2", "1");
assertTrue(xfrRec.getZ().getRe() == 0.20);
assertTrue(xfrRec.getZ().getIm() == 15.0);
assertTrue(xfrRec.getZ().getUnit() == ZUnitType.OHM);
assertTrue(xfrRec.getFromTurnRatio().getValue() == 1.0); // from ratio not defined, set to default 1.0
assertTrue(xfrRec.getToTurnRatio().getValue() == 1.0);
assertTrue(xfrRec.getMagnitizingY().getRe() == 5.0);
assertTrue(xfrRec.getMagnitizingY().getIm() == -16.0);
assertTrue(xfrRec.getMagnitizingY().getUnit() == YUnitType.MICROMHO);
assertTrue(xfrRec.getXfrInfo().getFromRatedVoltage().getValue() == 400.0);
assertTrue(xfrRec.getXfrInfo().getFromRatedVoltage().getUnit() == VoltageUnitType.KV);
assertTrue(xfrRec.getXfrInfo().getToRatedVoltage().getValue() == 230.0);
assertTrue(xfrRec.getXfrInfo().getToRatedVoltage().getUnit() == VoltageUnitType.KV);
assertTrue(xfrRec.getXfrInfo().getRatedPower().getValue() == 600.0);
assertTrue(xfrRec.getXfrInfo().getRatedPower().getUnit() == ApparentPowerUnitType.MVA);
assertTrue(xfrRec.getRatingLimit().getCurrent().getValue() == 1000.0);
}
}