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.PSSEGensalDataParser; import org.ieee.odm.common.ODMException; import org.ieee.odm.common.ODMLogger; import org.ieee.odm.model.IODMModelParser; import org.ieee.odm.model.dstab.DStabDataSetter; import org.ieee.odm.model.dstab.DStabModelParser; import org.ieee.odm.model.dstab.DStabParserHelper; import org.ieee.odm.schema.DStabBusXmlType; import org.ieee.odm.schema.DStabGenDataXmlType; import org.ieee.odm.schema.Eq11MachineXmlType; import org.ieee.odm.schema.Eq1MachineXmlType.SeFmt1; public class PSSEGensalMapper extends BasePSSEDataMapper{ public PSSEGensalMapper(PsseVersion ver) { super(ver); this.dataParser = new PSSEGensalDataParser(ver); } public PSSEGensalMapper(AbstractDataFieldParser parser){ this.dataParser = parser; } public void procLineString(String lineStr, DStabModelParser parser) throws ODMException { this.dataParser.parseFields(lineStr); /* * // 0----------1----------2----------3----------4 "IBUS", "Type", "MachId", "T'do", "T''do", // 5----------6----------7----------8----------9 "T''qo", "H", "D", "Xd", "Xq", // 10----------11----------12--------13--------14 "X'd", "X''d", "Xl", "S(1.0)", "S(1.2)" */ int i = dataParser.getInt("IBUS"); final String busId = IODMModelParser.BusIdPreFix+i; String genId = dataParser.getString("MachId"); //check model type //GENSAL and GENSAE data format are the same if(!(dataParser.getString("Type").equals("GENSAL")|| dataParser.getString("Type").equals("GENSAE"))){ throw new ODMException("machine : Id"+ genId+" @ Bus"+i+"is not a GENSAL or GENSAE generator model"); } DStabBusXmlType busXml = parser.getBus(busId); if(busXml!=null){ DStabGenDataXmlType dstabGenData = DStabParserHelper.getDStabContritueGen(busXml, genId); if(dstabGenData!=null){ Eq11MachineXmlType mach = DStabParserHelper.createEq11Machine(dstabGenData); double Td1 = dataParser.getDouble("T'do"); double Td11 = dataParser.getDouble("T''do"); double Tq11 = dataParser.getDouble("T''qo"); double H = dataParser.getDouble("H"); double D = dataParser.getDouble("D"); double Xl = dataParser.getDouble("Xl"); double Xd = dataParser.getDouble("Xd"); double Xq = dataParser.getDouble("Xq"); double Xd1 = dataParser.getDouble("X'd"); double Xd11 = dataParser.getDouble("X''d"); double s100 = dataParser.getDouble("S(1.0)")*100; // in percentage double s120 = dataParser.getDouble("S(1.2)")*100; //set the type info mach.setDesc(dataParser.getString("Type")); mach.setD(D); mach.setH(H); //TODO Ra = RSource? mach.setRa(dstabGenData.getSourceZ().getRe()); //TODO it there a need to use time Unit? mach.setTd01(DStabDataSetter.createTimeConstSec(Td1)); mach.setTd011(DStabDataSetter.createTimeConstSec(Td11)); mach.setTq011(DStabDataSetter.createTimeConstSec(Tq11)); mach.setXl(Xl); mach.setXd(Xd); mach.setXq(Xq); mach.setXd1(Xd1); mach.setXq11(Xd11); // x''q = x''d mach.setXd11(Xd11); //saturation //A and B are such that the points (1.0, S1.0) and (1.2, S1.2) SeFmt1 s1= DStabParserHelper.createMachineSeFmt1(); //s1.setSliner(1.0); // by default s1.setSe100(s100); s1.setSe120(s120); mach.setSeFmt1(s1); } 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"); } } }