/* * @(#)PSSEBusDataMapper.java * * Copyright (C) 2006 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 09/15/2006 * * Revision History * ================ * */ package org.ieee.odm.adapter.psse.mapper.aclf; import org.ieee.odm.adapter.psse.PSSEAdapter.PsseVersion; import org.ieee.odm.adapter.psse.parser.aclf.PSSEBusDataParser; import org.ieee.odm.common.ODMException; import org.ieee.odm.common.ODMLogger; import org.ieee.odm.model.IODMModelParser; import org.ieee.odm.model.aclf.AclfDataSetter; import org.ieee.odm.model.aclf.BaseAclfModelParser; import org.ieee.odm.model.base.BaseDataSetter; import org.ieee.odm.model.base.BaseJaxbHelper; import org.ieee.odm.schema.AngleUnitType; import org.ieee.odm.schema.LFGenCodeEnumType; import org.ieee.odm.schema.LoadflowBusXmlType; import org.ieee.odm.schema.NetworkXmlType; import org.ieee.odm.schema.VoltageUnitType; import org.ieee.odm.schema.YUnitType; public class PSSEBusDataMapper extends BasePSSEDataMapper{ public PSSEBusDataMapper(PsseVersion ver) { super(ver); this.dataParser = new PSSEBusDataParser(ver); } public void procLineString(String lineStr, BaseAclfModelParser<? extends NetworkXmlType> parser) throws ODMException { dataParser.parseFields(lineStr); int i = dataParser.getInt("I"); String iStr = IODMModelParser.BusIdPreFix+i; LoadflowBusXmlType aclfBusXml; try { aclfBusXml = (LoadflowBusXmlType) parser.createBus(iStr, i); } catch (Exception e) { ODMLogger.getLogger().severe(e.toString()); return; } aclfBusXml.setNumber((long)i); aclfBusXml.setAreaNumber(dataParser.getInt("AREA", 0)); aclfBusXml.setZoneNumber(dataParser.getInt("ZONE", 0)); if (dataParser.exist("OWNER")) { BaseJaxbHelper.addOwner(aclfBusXml, dataParser.getString("OWNER")); } aclfBusXml.setName(dataParser.getString("NAME")); aclfBusXml.setBaseVoltage(BaseDataSetter.createVoltageValue(dataParser.getDouble("BASKV"), VoltageUnitType.KV)); double vm = dataParser.getDouble("VM", 1.0); double va = dataParser.getDouble("VA", 0.0); aclfBusXml.setVoltage(BaseDataSetter.createVoltageValue(vm, VoltageUnitType.PU)); aclfBusXml.setAngle(BaseDataSetter.createAngleValue(va, AngleUnitType.DEG)); double gl = dataParser.getDouble("GL", 0.0); double bl = dataParser.getDouble("BL", 0.0); if (gl != 0.0 || bl != 0.0) { double factor = parser.getNet().getBasePower().getValue(); // for transfer G+jB to PU on system base, gl, bl are entered in MW at one per unit voltage // bl is reactive power consumed, - for capactor aclfBusXml.getShuntYData().setEquivY(BaseDataSetter.createYValue(gl/factor, bl/factor, YUnitType.PU)); } /* Bus type code: 1 - load bus (no generator boundary condition) 2 - generator or plant bus (either voltage regulating or fixed Mvar) 3 - swing bus 4 - disconnected (isolated) bus IDE = 1 by default. */ int ide = dataParser.getInt("IDE", 1); // set input data to the bus object LFGenCodeEnumType genType = ide == 3? LFGenCodeEnumType.SWING : ( ide == 1? LFGenCodeEnumType.NONE_GEN : ( ide == 2 ? LFGenCodeEnumType.PV : ide==4?LFGenCodeEnumType.OFF: LFGenCodeEnumType.NONE_GEN )); AclfDataSetter.setGenData(aclfBusXml, genType); if (ide == 1 || ide == 2 || ide == 3) aclfBusXml.setOffLine(false); else aclfBusXml.setOffLine(true); } }