From 7aed88dbcf9d37a1f40c8cad115f055c4d69e7a9 Mon Sep 17 00:00:00 2001 From: Thales1330 Date: Thu, 29 Dec 2016 19:03:16 -0200 Subject: Parent/child optimization implemented And others bugfixes. --- Project/ElectricCalculation.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'Project/ElectricCalculation.cpp') diff --git a/Project/ElectricCalculation.cpp b/Project/ElectricCalculation.cpp index 3c4c1e5..4514f05 100644 --- a/Project/ElectricCalculation.cpp +++ b/Project/ElectricCalculation.cpp @@ -139,8 +139,8 @@ bool ElectricCalculation::GetYBus(std::vector > else { // Complex turns ratio double radPhaseShift = wxDegToRad(data.phaseShift); - std::complex a = std::complex(data.turnsRatio * std::cos(radPhaseShift), - -data.turnsRatio * std::sin(radPhaseShift)); + std::complex a = std::complex( + data.turnsRatio * std::cos(radPhaseShift), -data.turnsRatio * std::sin(radPhaseShift)); // Transformer admitance std::complex y = 1.0 / std::complex(data.resistance, data.indReactance); @@ -157,11 +157,15 @@ bool ElectricCalculation::GetYBus(std::vector > } void ElectricCalculation::UpdateElementsPowerFlow(std::vector > voltage, - std::vector > power, - std::vector busType, - std::vector reactiveLimit, - double systemPowerBase) + std::vector > power, + std::vector busType, + std::vector reactiveLimit, + double systemPowerBase) { + for(int i = 0; i < (int)reactiveLimit.size(); ++i) { + if(reactiveLimit[i].maxLimit > -1e-5 && reactiveLimit[i].maxLimit < 1e-5) reactiveLimit[i].maxLimit = 1e-5; + if(reactiveLimit[i].minLimit > -1e-5 && reactiveLimit[i].minLimit < 1e-5) reactiveLimit[i].minLimit = 1e-5; + } // Buses voltages for(int i = 0; i < (int)m_busList.size(); i++) { Bus* bus = m_busList[i]; @@ -182,9 +186,9 @@ void ElectricCalculation::UpdateElementsPowerFlow(std::vector v2 = voltage[n2]; data.current[0] = (v1 - v2) / std::complex(data.resistance, data.indReactance) + - v1 * std::complex(0.0, data.capSusceptance / 2.0); + v1 * std::complex(0.0, data.capSusceptance / 2.0); data.current[1] = (v2 - v1) / std::complex(data.resistance, data.indReactance) + - v2 * std::complex(0.0, data.capSusceptance / 2.0); + v2 * std::complex(0.0, data.capSusceptance / 2.0); data.powerFlow[0] = v1 * std::conj(data.current[0]); data.powerFlow[1] = v2 * std::conj(data.current[1]); @@ -205,8 +209,8 @@ void ElectricCalculation::UpdateElementsPowerFlow(std::vectorGetElectricalData(); int n1 = ((Bus*)transformer->GetParentList()[0])->GetEletricalData().number; int n2 = ((Bus*)transformer->GetParentList()[1])->GetEletricalData().number; - std::complex v1 = voltage[n1]; // Primary voltage - std::complex v2 = voltage[n2]; // Secondary voltage + std::complex v1 = voltage[n1]; // Primary voltage + std::complex v2 = voltage[n2]; // Secondary voltage // Transformer admitance std::complex y = 1.0 / std::complex(data.resistance, data.indReactance); @@ -386,8 +390,8 @@ void ElectricCalculation::UpdateElementsPowerFlow(std::vector Date: Thu, 5 Jan 2017 19:31:28 -0200 Subject: Text bugs fixed --- Project/ElectricCalculation.cpp | 58 ++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 29 deletions(-) (limited to 'Project/ElectricCalculation.cpp') diff --git a/Project/ElectricCalculation.cpp b/Project/ElectricCalculation.cpp index 4514f05..c78864c 100644 --- a/Project/ElectricCalculation.cpp +++ b/Project/ElectricCalculation.cpp @@ -16,24 +16,24 @@ void ElectricCalculation::GetElementsFromList(std::vector elementList) // TODO: Bad design? for(auto it = elementList.begin(); it != elementList.end(); it++) { Element* element = *it; - if(typeid(*element) == typeid(Bus)) - m_busList.push_back((Bus*)element); - else if(typeid(*element) == typeid(Capacitor)) - m_capacitorList.push_back((Capacitor*)element); - else if(typeid(*element) == typeid(IndMotor)) - m_indMotorList.push_back((IndMotor*)element); - else if(typeid(*element) == typeid(Inductor)) - m_inductorList.push_back((Inductor*)element); - else if(typeid(*element) == typeid(Line)) - m_lineList.push_back((Line*)element); - else if(typeid(*element) == typeid(Load)) - m_loadList.push_back((Load*)element); - else if(typeid(*element) == typeid(SyncGenerator)) - m_syncGeneratorList.push_back((SyncGenerator*)element); - else if(typeid(*element) == typeid(SyncMotor)) - m_syncMotorList.push_back((SyncMotor*)element); - else if(typeid(*element) == typeid(Transformer)) - m_transformerList.push_back((Transformer*)element); + if(Bus* bus = dynamic_cast(element)) + m_busList.push_back(bus); + else if(Capacitor* capacitor = dynamic_cast(element)) + m_capacitorList.push_back(capacitor); + else if(IndMotor* indMotor = dynamic_cast(element)) + m_indMotorList.push_back(indMotor); + else if(Inductor* inductor = dynamic_cast(element)) + m_inductorList.push_back(inductor); + else if(Line* line = dynamic_cast(element)) + m_lineList.push_back(line); + else if(Load* load = dynamic_cast(element)) + m_loadList.push_back(load); + else if(SyncGenerator* syncGenerator = dynamic_cast(element)) + m_syncGeneratorList.push_back(syncGenerator); + else if(SyncMotor* syncMotor = dynamic_cast(element)) + m_syncMotorList.push_back(syncMotor); + else if(Transformer* transformer = dynamic_cast(element)) + m_transformerList.push_back(transformer); } } @@ -65,7 +65,7 @@ bool ElectricCalculation::GetYBus(std::vector > for(auto itlo = m_loadList.begin(); itlo != m_loadList.end(); itlo++) { Load* load = *itlo; if(load->IsOnline()) { - int n = ((Bus*)load->GetParentList()[0])->GetEletricalData().number; + int n = static_cast(load->GetParentList()[0])->GetEletricalData().number; LoadElectricalData data = load->GetPUElectricalData(systemPowerBase); if(data.loadType == CONST_IMPEDANCE) yBus[n][n] += std::complex(data.activePower, -data.reactivePower); @@ -76,7 +76,7 @@ bool ElectricCalculation::GetYBus(std::vector > for(auto itca = m_capacitorList.begin(); itca != m_capacitorList.end(); itca++) { Capacitor* capacitor = *itca; if(capacitor->IsOnline()) { - int n = ((Bus*)capacitor->GetParentList()[0])->GetEletricalData().number; + int n = static_cast(capacitor->GetParentList()[0])->GetEletricalData().number; CapacitorElectricalData data = capacitor->GetPUElectricalData(systemPowerBase); yBus[n][n] += std::complex(0.0, data.reactivePower); } @@ -86,7 +86,7 @@ bool ElectricCalculation::GetYBus(std::vector > for(auto itin = m_inductorList.begin(); itin != m_inductorList.end(); itin++) { Inductor* inductor = *itin; if(inductor->IsOnline()) { - int n = ((Bus*)inductor->GetParentList()[0])->GetEletricalData().number; + int n = static_cast(inductor->GetParentList()[0])->GetEletricalData().number; InductorElectricalData data = inductor->GetPUElectricalData(systemPowerBase); yBus[n][n] += std::complex(0.0, -data.reactivePower); } @@ -98,8 +98,8 @@ bool ElectricCalculation::GetYBus(std::vector > if(line->IsOnline()) { LineElectricalData data = line->GetElectricalData(); - int n1 = ((Bus*)line->GetParentList()[0])->GetEletricalData().number; - int n2 = ((Bus*)line->GetParentList()[1])->GetEletricalData().number; + int n1 = static_cast(line->GetParentList()[0])->GetEletricalData().number; + int n2 = static_cast(line->GetParentList()[1])->GetEletricalData().number; yBus[n1][n2] -= 1.0 / std::complex(data.resistance, data.indReactance); yBus[n2][n1] -= 1.0 / std::complex(data.resistance, data.indReactance); @@ -119,8 +119,8 @@ bool ElectricCalculation::GetYBus(std::vector > if(transformer->IsOnline()) { TransformerElectricalData data = transformer->GetElectricalData(); - int n1 = ((Bus*)transformer->GetParentList()[0])->GetEletricalData().number; - int n2 = ((Bus*)transformer->GetParentList()[1])->GetEletricalData().number; + int n1 = static_cast(transformer->GetParentList()[0])->GetEletricalData().number; + int n2 = static_cast(transformer->GetParentList()[1])->GetEletricalData().number; // If the transformer have nominal turns ratio (1.0) and no phase shifting, it will be modelled as series // impedance. @@ -178,8 +178,8 @@ void ElectricCalculation::UpdateElementsPowerFlow(std::vectorIsOnline()) { - int n1 = ((Bus*)line->GetParentList()[0])->GetEletricalData().number; - int n2 = ((Bus*)line->GetParentList()[1])->GetEletricalData().number; + int n1 = static_cast(line->GetParentList()[0])->GetEletricalData().number; + int n2 = static_cast(line->GetParentList()[1])->GetEletricalData().number; LineElectricalData data = line->GetElectricalData(); std::complex v1 = voltage[n1]; @@ -207,8 +207,8 @@ void ElectricCalculation::UpdateElementsPowerFlow(std::vectorIsOnline()) { TransformerElectricalData data = transformer->GetElectricalData(); - int n1 = ((Bus*)transformer->GetParentList()[0])->GetEletricalData().number; - int n2 = ((Bus*)transformer->GetParentList()[1])->GetEletricalData().number; + int n1 = static_cast(transformer->GetParentList()[0])->GetEletricalData().number; + int n2 = static_cast(transformer->GetParentList()[1])->GetEletricalData().number; std::complex v1 = voltage[n1]; // Primary voltage std::complex v2 = voltage[n2]; // Secondary voltage -- cgit