1397{
1398 wxTextFile mFile(m_mFile.GetFullPath());
1399 if(!mFile.Open()) return false;
1400
1401
1402 wxString fileTxt = "";
1403 for(wxString line = mFile.GetFirstLine(); !mFile.Eof(); line = mFile.GetNextLine()) {
1404
1405 if(line.Trim()[0] != '%') {
1406
1407 if(line.Find("mpc.baseMVA") != wxNOT_FOUND) {
1408 if(!line.AfterFirst('=').BeforeFirst(';').ToCDouble(&m_mvaBase)) return false;
1409 }
1410 if(line.Find("mpc.bus ") != wxNOT_FOUND) {
1411 wxStringTokenizer busStrTok = GetMFileTokenData(mFile, line);
1412 while(busStrTok.HasMoreTokens()) {
1413 BusData* busData = new BusData();
1414 wxString busDataStr = busStrTok.GetNextToken();
1415 char tokenChar = '\t';
1416 if(busDataStr.Find('\t') == wxNOT_FOUND) { tokenChar = ' '; }
1417
1418 wxStringTokenizer busDataStrTok(busDataStr, tokenChar);
1419
1420 busData->id = wxAtoi(busDataStrTok.GetNextToken());
1421 busData->type = wxAtoi(busDataStrTok.GetNextToken());
1422 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->pd)) return false;
1423 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->qd)) return false;
1424 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->gs)) return false;
1425 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->bs)) return false;
1426 busData->area = wxAtoi(busDataStrTok.GetNextToken());
1427 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->voltage)) return false;
1428 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->angle)) return false;
1429 if(!busDataStrTok.GetNextToken().ToCDouble(&busData->baseVoltage)) return false;
1430
1431 m_busData.push_back(busData);
1432 }
1433 }
1434 if(line.Find("mpc.gen ") != wxNOT_FOUND) {
1435 wxStringTokenizer genStrTok = GetMFileTokenData(mFile, line);
1436 while(genStrTok.HasMoreTokens()) {
1437 GenData* genData = new GenData();
1438 wxString genDataStr = genStrTok.GetNextToken();
1439 char tokenChar = '\t';
1440 if(genDataStr.Find('\t') == wxNOT_FOUND) { tokenChar = ' '; }
1441
1442 wxStringTokenizer genDataStrTok(genDataStr, tokenChar);
1443 genData->busID = wxAtoi(genDataStrTok.GetNextToken());
1444 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->pg)) return false;
1445 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->qg)) return false;
1446 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->maxReactivePower))
1447 return false;
1448 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->minReactivePower))
1449 return false;
1450 genDataStrTok.GetNextToken();
1451 if(!genDataStrTok.GetNextToken().ToCDouble(&genData->baseMVA)) return false;
1452 double machineStatus = 0;
1453 if(!genDataStrTok.GetNextToken().ToCDouble(&machineStatus))
1454 return false;
1455 genData->isOnline = machineStatus > 1e-3 ? true : false;
1456
1457 m_genData.push_back(genData);
1458 }
1459 }
1460 if(line.Find("mpc.branch") != wxNOT_FOUND) {
1461 wxStringTokenizer branchStrTok = GetMFileTokenData(mFile, line);
1462 while(branchStrTok.HasMoreTokens()) {
1463 BranchData* branchData = new BranchData();
1464 wxString branchDataStr = branchStrTok.GetNextToken();
1465 char tokenChar = '\t';
1466 if(branchDataStr.Find('\t') == wxNOT_FOUND) { tokenChar = ' '; }
1467
1468 wxStringTokenizer branchDataStrTok(branchDataStr, tokenChar);
1469
1470 int fromBus = wxAtoi(branchDataStrTok.GetNextToken());
1471 int toBus = wxAtoi(branchDataStrTok.GetNextToken());
1472 branchData->busConnections = std::make_pair(fromBus, toBus);
1473 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->resistance)) return false;
1474 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->indReactance))
1475 return false;
1476 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->capSusceptance))
1477 return false;
1478 branchDataStrTok.GetNextToken();
1479 branchDataStrTok.GetNextToken();
1480 branchDataStrTok.GetNextToken();
1481 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->tap)) return false;
1482 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchData->phaseShift))
1483 return false;
1484 double branchStatus = 0;
1485 if(!branchDataStrTok.GetNextToken().ToCDouble(&branchStatus))
1486 return false;
1487 branchData->isOnline = branchStatus > 1e-3 ? true : false;
1488
1489 m_branchData.push_back(branchData);
1490 }
1491 }
1492 if(line.Find("mpc.bus_name") != wxNOT_FOUND) {
1493 wxString dataStr = "";
1494 while(line.Find('}', true) == wxNOT_FOUND) {
1495 dataStr += line;
1496 line = mFile.GetNextLine();
1497 }
1498 dataStr += line;
1499 dataStr = dataStr.AfterFirst('{').BeforeFirst('}');
1500 wxStringTokenizer dataStrTok(dataStr, ";");
1501 for(auto it = m_busData.begin(), itEnd = m_busData.end(); it != itEnd; ++it) {
1502 if(dataStrTok.HasMoreTokens())
1503 (*it)->busName = dataStrTok.GetNextToken().AfterFirst('\'').BeforeFirst('\'');
1504 }
1505 }
1506 }
1507 }
1508
1509
1510 return true;
1511}