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