/* * @(#)PSSELoadDataMapper.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.PSSELoadDataParser; import org.ieee.odm.common.ODMException; import org.ieee.odm.common.ODMLogger; import org.ieee.odm.model.IODMModelParser; import org.ieee.odm.model.aclf.AclfParserHelper; import org.ieee.odm.model.aclf.BaseAclfModelParser; import org.ieee.odm.model.acsc.AcscParserHelper; import org.ieee.odm.model.base.BaseDataSetter; import org.ieee.odm.model.base.BaseJaxbHelper; import org.ieee.odm.model.dstab.DStabParserHelper; import org.ieee.odm.schema.ApparentPowerUnitType; import org.ieee.odm.schema.BusXmlType; import org.ieee.odm.schema.DStabBusXmlType; import org.ieee.odm.schema.LoadflowBusXmlType; import org.ieee.odm.schema.LoadflowLoadDataXmlType; import org.ieee.odm.schema.NetworkXmlType; import org.ieee.odm.schema.ShortCircuitBusXmlType; public class PSSELoadDataMapper extends BasePSSEDataMapper{ public PSSELoadDataMapper(PsseVersion ver) { super(ver); this.dataParser = new PSSELoadDataParser(ver); } /* * LoadData I, ID, STATUS, AREA, ZONE, PL, QL, IP, IQ, YP, YQ, OWNER */ public void procLineString(String lineStr, BaseAclfModelParser<? extends NetworkXmlType> parser) throws ODMException { //procLineString(lineStr, version); this.dataParser.parseFields(lineStr); /* I, ID, STATUS, AREA, ZONE, PL, QL, IP, IQ, YP, YQ, OWNER */ int i = dataParser.getInt("I"); final String busId = IODMModelParser.BusIdPreFix+i; BusXmlType busRecXml = parser.getBus(busId); if (busRecXml == null){ ODMLogger.getLogger().severe("Bus "+ busId+ " not found in the network"); return; } LoadflowLoadDataXmlType contribLoad; if (busRecXml instanceof DStabBusXmlType) { contribLoad = DStabParserHelper.createDStabContriLoad((DStabBusXmlType)busRecXml); } else if (busRecXml instanceof ShortCircuitBusXmlType) { contribLoad = AcscParserHelper.createAcscContributeLoad((ShortCircuitBusXmlType)busRecXml); } else { contribLoad = AclfParserHelper.createContriLoad((LoadflowBusXmlType)busRecXml); } String id = dataParser.getString("ID"); contribLoad.setId(id); contribLoad.setName("Load:" + id + "(" + i + ")"); contribLoad.setDesc("PSSE Load " + id + " at Bus " + i); int status = dataParser.getInt("STATUS"); contribLoad.setOffLine(status!=1); contribLoad.setAreaNumber(dataParser.getInt("AREA", 1)); contribLoad.setZoneNumber(dataParser.getInt("ZONE", 1)); BaseJaxbHelper.addOwner(contribLoad, dataParser.getString("OWNER")); double pl = dataParser.getDouble("PL", 0.0); double ql = dataParser.getDouble("QL", 0.0); if (pl != 0.0 || ql != 0.0) contribLoad.setConstPLoad(BaseDataSetter.createPowerValue(pl, ql, ApparentPowerUnitType.MVA)); double ip = dataParser.getDouble("IP", 0.0); double iq = dataParser.getDouble("IQ", 0.0); if (ip != 0.0 || iq != 0.0) contribLoad.setConstILoad(BaseDataSetter.createPowerValue(ip, iq, ApparentPowerUnitType.MVA)); double yp = dataParser.getDouble("YP", 0.0); double yq = dataParser.getDouble("YQ", 0.0); //TODO Note YQ is negative for an inductive load in PSS/E. However, as a general convention, inductive load is positive if (yp != 0.0 || yq != 0.0) contribLoad.setConstZLoad(BaseDataSetter.createPowerValue(yp, -yq, ApparentPowerUnitType.MVA)); } }