1103{
1104 if(exeCode == "DCTE") {
1105
1106 wxString code = "";
1107 wxString value = "";
1108 for(unsigned int i = 0; i < data.length(); ++i) {
1109 code = data.Mid(i, 4);
1110 value = data.Mid(i + 5, 6).Trim(false);
1111 i += 11;
1112 if(code == "BASE") {
1113 if(!value.ToCDouble(&m_mvaBase)) return false;
1114 break;
1115 }
1116 }
1117 } else if(exeCode == "DBAR") {
1118 wxString lineData = "";
1119 while(data != "") {
1120 wxString rest = "";
1121 lineData = data.BeforeFirst('\n', &rest);
1122 data = rest;
1123 BusData* busData = new BusData();
1124
1125 if(!GetPWFStructuredData(lineData, 0, 5, busData->id)) return false;
1126 wxString isOnlineCode = lineData.Mid(6, 1);
1127 if(isOnlineCode == "L" || isOnlineCode == " ")
1128 busData->isOnline = true;
1129 else if(isOnlineCode == "D")
1130 busData->isOnline = false;
1131 else
1132 return false;
1133 if(!GetPWFStructuredData(lineData, 7, 1, busData->type)) return false;
1134 busData->voltageBase = lineData.Mid(8, 2);
1135 busData->busName = lineData.Mid(10, 12).Trim();
1136 if(!GetPWFStructuredData(lineData, 24, 4, busData->voltage, 1)) return false;
1137 if(!GetPWFStructuredData(lineData, 28, 4, busData->angle)) return false;
1138 double pg, qg;
1139 if(!GetPWFStructuredData(lineData, 32, 5, pg)) return false;
1140 if(!GetPWFStructuredData(lineData, 37, 5, qg)) return false;
1141 busData->genPower = std::complex<double>(pg, qg);
1142 if(!GetPWFStructuredData(lineData, 42, 5, busData->minReactivePower)) return false;
1143 if(!GetPWFStructuredData(lineData, 47, 5, busData->maxReactivePower)) return false;
1144 if(!GetPWFStructuredData(lineData, 52, 6, busData->ctrlBusID)) return false;
1145 double pl, ql;
1146 if(!GetPWFStructuredData(lineData, 58, 5, pl)) return false;
1147 if(!GetPWFStructuredData(lineData, 63, 5, ql)) return false;
1148 busData->loadPower = std::complex<double>(pl, ql);
1149 if(!GetPWFStructuredData(lineData, 68, 5, busData->shuntReactive)) return false;
1150
1151 m_busData.push_back(busData);
1152 }
1153 } else if(exeCode == "DLIN") {
1154 wxString lineData = "";
1155 while(data != "") {
1156 wxString rest = "";
1157 lineData = data.BeforeFirst('\n', &rest);
1158 data = rest;
1159 BranchData* branchData = new BranchData();
1160
1161 if(!GetPWFStructuredData(lineData, 15, 2, branchData->id)) return false;
1162 int from, to;
1163 if(!GetPWFStructuredData(lineData, 0, 5, from)) return false;
1164 if(!GetPWFStructuredData(lineData, 10, 5, to)) return false;
1165 branchData->busConnections = std::make_pair(from, to);
1166
1167 wxString isOnlineCode = lineData.Mid(6, 1) + lineData.Mid(9, 1) + lineData.Mid(17, 1);
1168 if(isOnlineCode.Find('D') == wxNOT_FOUND)
1169 branchData->isOnline = true;
1170 else
1171 branchData->isOnline = false;
1172 if(!GetPWFStructuredData(lineData, 20, 6, branchData->resistance, 4)) return false;
1173 if(!GetPWFStructuredData(lineData, 26, 6, branchData->indReactance, 4)) return false;
1174 if(!GetPWFStructuredData(lineData, 32, 6, branchData->capSusceptance, 4)) return false;
1175 if(!GetPWFStructuredData(lineData, 38, 5, branchData->tap, 2)) return false;
1176 if(!GetPWFStructuredData(lineData, 53, 5, branchData->phaseShift, 3)) return false;
1177
1178 if(branchData->tap < 1e-3)
1180 else
1182
1183 m_branchData.push_back(branchData);
1184 }
1185 } else if(exeCode == "DCAI") {
1186 wxString lineData = "";
1187 while(data != "") {
1188 wxString rest = "";
1189 lineData = data.BeforeFirst('\n', &rest);
1190 data = rest;
1191 IndElementData* indData = new IndElementData();
1193
1194 if(!GetPWFStructuredData(lineData, 9, 2, indData->id)) return false;
1195 if(!GetPWFStructuredData(lineData, 0, 5, indData->busConnection)) return false;
1196
1197 wxString isOnlineCode = lineData.Mid(13, 1);
1198 if(isOnlineCode == "L" || isOnlineCode == " ")
1199 indData->isOnline = true;
1200 else if(isOnlineCode == "D")
1201 indData->isOnline = false;
1202 else
1203 return false;
1204
1205 double pl, ql;
1206 if(!GetPWFStructuredData(lineData, 22, 5, pl)) return false;
1207 if(!GetPWFStructuredData(lineData, 28, 5, ql)) return false;
1208 indData->power = std::complex<double>(pl, ql);
1209
1210 if(!GetPWFStructuredData(lineData, 18, 3, indData->numUnits)) return false;
1211
1212 m_indElementData.push_back(indData);
1213 }
1214 } else if(exeCode == "DGEI") {
1215 wxString lineData = "";
1216 while(data != "") {
1217 wxString rest = "";
1218 lineData = data.BeforeFirst('\n', &rest);
1219 data = rest;
1220 IndGenData* genData = new IndGenData();
1222
1223 if(!GetPWFStructuredData(lineData, 9, 2, genData->id)) return false;
1224 if(!GetPWFStructuredData(lineData, 0, 5, genData->busConnection)) return false;
1225
1226 wxString isOnlineCode = lineData.Mid(12, 1);
1227 if(isOnlineCode == "L" || isOnlineCode == " ")
1228 genData->isOnline = true;
1229 else if(isOnlineCode == "D")
1230 genData->isOnline = false;
1231 else
1232 return false;
1233
1234 double pg, qg;
1235 if(!GetPWFStructuredData(lineData, 22, 5, pg)) return false;
1236 if(!GetPWFStructuredData(lineData, 27, 5, qg)) return false;
1237 genData->power = std::complex<double>(pg, qg);
1238
1239 if(!GetPWFStructuredData(lineData, 16, 3, genData->numUnits)) return false;
1240 if(!GetPWFStructuredData(lineData, 32, 5, genData->minReactivePower)) return false;
1241 if(!GetPWFStructuredData(lineData, 37, 5, genData->maxReactivePower)) return false;
1242 if(!GetPWFStructuredData(lineData, 42, 6, genData->xt, 2)) return false;
1243 if(!GetPWFStructuredData(lineData, 49, 5, genData->xd, 4)) return false;
1244 if(!GetPWFStructuredData(lineData, 54, 5, genData->xq, 4)) return false;
1245 if(!GetPWFStructuredData(lineData, 59, 5, genData->xl, 4)) return false;
1246 if(!GetPWFStructuredData(lineData, 69, 5, genData->ratedPower, 3)) return false;
1247
1248 m_indElementData.push_back(genData);
1249 }
1250 } else if(exeCode == "DBSH") {
1251 int lineNumber = 1;
1252 wxString lineData = "";
1253 int busNumber = -1;
1254
1255 while(data != "") {
1256 wxString rest = "";
1257 lineData = data.BeforeFirst('\n', &rest);
1258 data = rest;
1259
1260 if(lineNumber == 1) {
1261 if(!GetPWFStructuredData(lineData, 0, 5, busNumber)) return false;
1262 } else if(lineData == "FBAN") {
1263 lineNumber = 0;
1264 busNumber = -1;
1265 } else if(lineNumber >= 2 && busNumber != -1) {
1266 IndElementData* indShunt = new IndElementData();
1268 indShunt->busConnection = busNumber;
1269
1270 if(!GetPWFStructuredData(lineData, 0, 2, indShunt->id)) return false;
1271
1272 wxString isOnlineCode = lineData.Mid(6, 1);
1273 if(isOnlineCode == "L" || isOnlineCode == " ")
1274 indShunt->isOnline = true;
1275 else if(isOnlineCode == "D")
1276 indShunt->isOnline = false;
1277 else
1278 return false;
1279
1280 if(!GetPWFStructuredData(lineData, 12, 3, indShunt->numUnits)) return false;
1281 double ql;
1282 if(!GetPWFStructuredData(lineData, 16, 6, ql)) return false;
1283 indShunt->power = std::complex<double>(0.0, ql);
1284 m_indElementData.push_back(indShunt);
1285 }
1286 ++lineNumber;
1287 }
1288 }
1289
1290 return true;
1291}