package org.ieee.odm.adapter.psse.mapper.dynamic.generator; import org.ieee.odm.adapter.AbstractDataFieldParser; import org.ieee.odm.adapter.psse.PSSEAdapter.PsseVersion; import org.ieee.odm.adapter.psse.mapper.aclf.BasePSSEDataMapper; import org.ieee.odm.adapter.psse.parser.dynamic.generator.PSSEGenclsDataParser; import org.ieee.odm.common.ODMException; import org.ieee.odm.common.ODMLogger; import org.ieee.odm.model.IODMModelParser; import org.ieee.odm.model.dstab.DStabModelParser; import org.ieee.odm.model.dstab.DStabParserHelper; import org.ieee.odm.schema.ClassicMachineXmlType; import org.ieee.odm.schema.DStabBusXmlType; import org.ieee.odm.schema.DStabGenDataXmlType; public class PSSEGenclsMapper extends BasePSSEDataMapper{ public PSSEGenclsMapper(PsseVersion ver) { super(ver); this.dataParser = new PSSEGenclsDataParser(ver); } public PSSEGenclsMapper(AbstractDataFieldParser parser){ this.dataParser = parser; } public void procLineString(String lineStr, DStabModelParser parser) throws ODMException { this.dataParser.parseFields(lineStr); /* * GENCLS is the classical constant voltage behind transient reactance generator model * // 0----------1----------2----------3----------4 "IBUS", "Type", "MachId", "H", "D", */ int i = dataParser.getInt("IBUS"); final String busId = IODMModelParser.BusIdPreFix+i; String genId = dataParser.getString("MachId"); //check model type if(!dataParser.getString("Type").equals("GENCLS")){ throw new ODMException("machine : Id"+ genId+" @ Bus"+i+"is not a classical generator model (GENCLS)"); } DStabBusXmlType busXml = parser.getBus(busId); if(busXml!=null){ DStabGenDataXmlType dstabGenData = DStabParserHelper.getDStabContritueGen(busXml, genId); if(dstabGenData!=null){ ClassicMachineXmlType mach = DStabParserHelper.createClassicMachine(dstabGenData); //set the type info mach.setDesc(dataParser.getString("Type")); mach.setH(dataParser.getDouble("H")); mach.setD(dataParser.getDouble("D")); //x'd = XSOURCE if(dstabGenData.getSourceZ()!=null){ if(dstabGenData.getSourceZ().getIm()>0){ mach.setRa(dstabGenData.getSourceZ().getRe()); mach.setXd1(dstabGenData.getSourceZ().getIm()); }else throw new ODMException("Source Z of of classic type(GENCLS) machine : Id"+ genId+" @ Bus"+i+"is not defined"); } } else{ ODMLogger.getLogger().severe("Machine # "+genId +" is not found in Bus #"+busId); } } else{ ODMLogger.getLogger().severe("Bus # "+busId +" is not available in load flow data"); } } }