/* * @(#)GEGenDataMapper.java * * Copyright (C) 2006-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 06/01/2008 * * Revision History * ================ * */ package org.ieee.odm.adapter.ge.mapper; import org.ieee.odm.adapter.ge.GePslfAdapter; import org.ieee.odm.adapter.ge.parser.GEGenDataParser; import org.ieee.odm.common.ODMException; import org.ieee.odm.model.IODMModelParser; import org.ieee.odm.model.aclf.AclfModelParser; import org.ieee.odm.model.aclf.AclfParserHelper; import org.ieee.odm.model.base.BaseDataSetter; import org.ieee.odm.schema.ActivePowerUnitType; import org.ieee.odm.schema.ApparentPowerUnitType; import org.ieee.odm.schema.LoadflowBusXmlType; import org.ieee.odm.schema.LoadflowGenDataXmlType; import org.ieee.odm.schema.ReactivePowerUnitType; import org.ieee.odm.schema.ZUnitType; public class GEGenDataMapper extends BaseGEDataMapper { public GEGenDataMapper(GePslfAdapter.Version ver) { super(ver); this.dataParser = new GEGenDataParser(); } public void mapLineStr(String lineStr, final AclfModelParser parser) throws ODMException { dataParser.parseFields(lineStr); final String busId = IODMModelParser.BusIdPreFix+dataParser.getString("bus"); // get the responding-bus data with busId LoadflowBusXmlType busRec = parser.getBus(busId); if (busRec==null) throw new ODMException("Error: Bus not found in the network, bus number: " + busId); // ODM allows one equiv gen has many contribute generators, but here, we assume there is only one contribute gen. LoadflowGenDataXmlType contriGen = AclfParserHelper.createContriGen(busRec); contriGen.setId(dataParser.getString("id")); String longId = dataParser.getString("long_id"); if (longId != null && !longId.equals("")) contriGen.setDesc(longId); contriGen.setAreaNumber(dataParser.getInt("ar")); contriGen.setZoneNumber(dataParser.getInt("z")); // <st> gen status 1 = in service; 0 = out of service contriGen.setOffLine(dataParser.getInt("st") != 1); // <stn> Normal gen status 1=in service; 0=out of service contriGen.setNormalOffLineStatus(dataParser.getInt("stn") != 1); contriGen.setRemoteVoltageControlBus(parser.createBusRef(IODMModelParser.BusIdPreFix+dataParser.getString("igreg_bus"))); contriGen.setMwControlParticipateFactor(dataParser.getDouble("prf")); contriGen.setMvarVControlParticipateFactor(dataParser.getDouble("qrf")); contriGen.setMvaBase(BaseDataSetter.createPowerMvaValue(dataParser.getDouble("mbase"))); contriGen.setPower(BaseDataSetter.createPowerValue(dataParser.getDouble("pgen"), dataParser.getDouble("qgen"), ApparentPowerUnitType.MVA)); contriGen.setPLimit(BaseDataSetter.createActivePowerLimit(dataParser.getDouble("pmax"), dataParser.getDouble("pmin"), ActivePowerUnitType.MW)); contriGen.setQLimit(BaseDataSetter.createReactivePowerLimit(dataParser.getDouble("qmax"), dataParser.getDouble("qmin"), ReactivePowerUnitType.MVAR)); double rcomp = dataParser.getDouble("rcomp"); double xcomp = dataParser.getDouble("xcomp"); if (rcomp != 0.0 || xcomp != 0.0) contriGen.setSourceZ(BaseDataSetter.createZValue(rcomp, xcomp, ZUnitType.PU)); double zgenr = dataParser.getDouble("zgenr"); double zgenx = dataParser.getDouble("zgenx"); if (zgenr != 0.0 || zgenx != 0.0) contriGen.setXfrZ(BaseDataSetter.createZValue(zgenr, zgenx, ZUnitType.PU)); } }