From 73e934c17098281ffccd214f7517cd0f6ce03ab6 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Sat, 14 Jul 2018 09:04:40 -0300 Subject: fault and control system implementation error fixed --- Project/Electromechanical.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Project/Electromechanical.cpp') diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index ea8b1bb..d140215 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -73,7 +73,7 @@ bool Electromechanical::RunStabilityCalculation() SetSyncMachinesModel(); // Calculate the admittance matrix with the synchronous machines. - if(!GetYBus(m_yBus, m_powerSystemBase, POSITIVE_SEQ, false, true)) { + if(!GetYBus(m_yBus, m_powerSystemBase, POSITIVE_SEQ, false, true, true)) { m_errorMsg = _("It was not possible to build the admittance matrix."); return false; } -- cgit From f4de628c999810808d961899299686a9f0c50b5b Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Sat, 14 Jul 2018 13:08:45 -0300 Subject: Some vector pre-allocation and test curves implementation --- Project/Electromechanical.cpp | 57 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 11 deletions(-) (limited to 'Project/Electromechanical.cpp') diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index ea8b1bb..5bb9a1d 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -15,8 +15,8 @@ * along with this program. If not, see . */ -#include "Electromechanical.h" #include "ControlElementSolver.h" +#include "Electromechanical.h" Electromechanical::Electromechanical(wxWindow* parent, std::vector elementList, SimulationData data) { @@ -70,6 +70,7 @@ bool Electromechanical::RunStabilityCalculation() wxProgressDialog pbd(_("Running simulation"), _("Initializing..."), 100, m_parent, wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_CAN_ABORT | wxPD_SMOOTH); + PreallocateVectors(); // Reserve the vectors' memory with a estimated size, this can optimize the simulation. SetSyncMachinesModel(); // Calculate the admittance matrix with the synchronous machines. @@ -996,6 +997,7 @@ bool Electromechanical::SolveSynchronousMachines() return false; } } + m_iterationsNum = iterations; // Solve controllers. int ctrlRatio = static_cast(1 / m_ctrlTimeStepMultiplier); @@ -1006,7 +1008,8 @@ bool Electromechanical::SolveSynchronousMachines() data.avrSolver->SetSwitchStatus(syncGenerator->IsOnline()); data.avrSolver->SetCurrentTime(m_currentTime); data.avrSolver->SetTerminalVoltage(std::abs(data.terminalVoltage)); - data.avrSolver->SetDeltaActivePower((data.electricalPower.real() - data.avrSolver->GetActivePower()) / m_timeStep); + data.avrSolver->SetDeltaActivePower((data.electricalPower.real() - data.avrSolver->GetActivePower()) / + m_timeStep); data.avrSolver->SetActivePower(data.electricalPower.real()); data.avrSolver->SetReactivePower(data.electricalPower.imag()); data.avrSolver->SetDeltaVelocity((data.speed - data.avrSolver->GetVelocity()) / m_timeStep); @@ -1066,6 +1069,7 @@ void Electromechanical::SaveData() load->SetElectricalData(data); } } + m_iterationsNumVector.push_back(m_iterationsNum); } void Electromechanical::SetSyncMachinesModel() @@ -1089,9 +1093,7 @@ bool Electromechanical::CalculateSyncMachineNonIntVariables(SyncGenerator* syncG auto data = syncGenerator->GetElectricalData(); int n = static_cast(syncGenerator->GetParentList()[0])->GetElectricalData().number; - if(syncGenerator->IsOnline()) { - data.terminalVoltage = m_vBus[n]; - } + if(syncGenerator->IsOnline()) { data.terminalVoltage = m_vBus[n]; } double vd, vq; ABCtoDQ0(data.terminalVoltage, data.delta, vd, vq); @@ -1287,9 +1289,7 @@ bool Electromechanical::CalculateSyncMachineSaturation(SyncGenerator* syncMachin auto smDataModel = GetSyncMachineModelData(syncMachine); int n = static_cast(syncMachine->GetParentList()[0])->GetElectricalData().number; - if(syncMachine->IsOnline()) { - data.terminalVoltage = m_vBus[n]; - } + if(syncMachine->IsOnline()) { data.terminalVoltage = m_vBus[n]; } double idCalc = id; double iqCalc = iq; double sdCalc = sd; @@ -1394,9 +1394,7 @@ SyncMachineModelData Electromechanical::GetSyncMachineModelData(SyncGenerator* s smModelData.xq = data.transXq * k; if(smModelData.xq == 0.0) { smModelData.xq = data.syncXq * k; - if(smModelData.xq == 0.0) { - smModelData.xq = data.syncXd * k; - } + if(smModelData.xq == 0.0) { smModelData.xq = data.syncXd * k; } } } break; case Machines::SM_MODEL_3: { @@ -1418,3 +1416,40 @@ SyncMachineModelData Electromechanical::GetSyncMachineModelData(SyncGenerator* s } return smModelData; } + +void Electromechanical::PreallocateVectors() +{ + int numPoints = static_cast(m_simTime / m_plotTime); + + m_timeVector.reserve(numPoints); + for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) { + SyncGenerator* syncGenerator = *it; + auto data = syncGenerator->GetElectricalData(); + if(data.plotSyncMachine) { + data.terminalVoltageVector.reserve(numPoints); + data.electricalPowerVector.reserve(numPoints); + data.mechanicalPowerVector.reserve(numPoints); + data.freqVector.reserve(numPoints); + data.fieldVoltageVector.reserve(numPoints); + data.deltaVector.reserve(numPoints); + syncGenerator->SetElectricalData(data); + } + } + for(auto it = m_busList.begin(), itEnd = m_busList.end(); it != itEnd; ++it) { + Bus* bus = *it; + auto data = bus->GetElectricalData(); + if(data.plotBus) { + data.stabVoltageVector.reserve(numPoints); + bus->SetElectricalData(data); + } + } + for(auto it = m_loadList.begin(), itEnd = m_loadList.end(); it != itEnd; ++it) { + Load* load = *it; + auto data = load->GetElectricalData(); + if(data.plotLoad) { + data.voltageVector.reserve(numPoints); + data.electricalPowerVector.reserve(numPoints); + load->SetElectricalData(data); + } + } +} -- cgit From aad89bf4d16d45c0790bd2fc010d9ec06cc35430 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Sat, 29 Dec 2018 13:38:13 -0200 Subject: wxWidgets update (3.1.2) and bugfixes --- Project/Electromechanical.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Project/Electromechanical.cpp') diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index 4ebb3b3..66d5bb2 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -235,7 +235,7 @@ void Electromechanical::SetEvent(double currentTime) Bus* parentBus = static_cast(load->GetParentList()[0]); int n = parentBus->GetElectricalData().number; std::complex v = parentBus->GetElectricalData().voltage; - m_yBus[n][n] -= std::complex(data.activePower, -data.reactivePower) / (v * v); + m_yBus[n][n] -= std::complex(data.activePower, -data.reactivePower) / (std::abs(v) * std::abs(v)); } // Insert load (only disconnected load) @@ -245,7 +245,7 @@ void Electromechanical::SetEvent(double currentTime) Bus* parentBus = static_cast(load->GetParentList()[0]); int n = parentBus->GetElectricalData().number; std::complex v = parentBus->GetElectricalData().voltage; - m_yBus[n][n] += std::complex(data.activePower, -data.reactivePower) / (v * v); + m_yBus[n][n] += std::complex(data.activePower, -data.reactivePower) / (std::abs(v) * std::abs(v)); } } } -- cgit From fc820e8a03cd670835ac7fc7434226fad1c8e444 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Fri, 11 Jan 2019 10:20:43 -0200 Subject: ZIP load bugfix --- Project/Electromechanical.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Project/Electromechanical.cpp') diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index 4ebb3b3..0504bab 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -235,7 +235,7 @@ void Electromechanical::SetEvent(double currentTime) Bus* parentBus = static_cast(load->GetParentList()[0]); int n = parentBus->GetElectricalData().number; std::complex v = parentBus->GetElectricalData().voltage; - m_yBus[n][n] -= std::complex(data.activePower, -data.reactivePower) / (v * v); + m_yBus[n][n] -= std::complex(data.activePower, -data.reactivePower) / (abs(v) * abs(v)); } // Insert load (only disconnected load) @@ -245,7 +245,7 @@ void Electromechanical::SetEvent(double currentTime) Bus* parentBus = static_cast(load->GetParentList()[0]); int n = parentBus->GetElectricalData().number; std::complex v = parentBus->GetElectricalData().voltage; - m_yBus[n][n] += std::complex(data.activePower, -data.reactivePower) / (v * v); + m_yBus[n][n] += std::complex(data.activePower, -data.reactivePower) / (abs(v) * abs(v)); } } } -- cgit From db3fadbcc9f396ca22c4578101bbcd0a7e81609e Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Wed, 16 Jan 2019 09:35:35 -0200 Subject: Stability and site updates --- Project/Electromechanical.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'Project/Electromechanical.cpp') diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index de30184..50ce4e5 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -235,11 +235,8 @@ void Electromechanical::SetEvent(double currentTime) Bus* parentBus = static_cast(load->GetParentList()[0]); int n = parentBus->GetElectricalData().number; std::complex v = parentBus->GetElectricalData().voltage; -<<<<<<< HEAD - m_yBus[n][n] -= std::complex(data.activePower, -data.reactivePower) / (abs(v) * abs(v)); -======= m_yBus[n][n] -= std::complex(data.activePower, -data.reactivePower) / (std::abs(v) * std::abs(v)); ->>>>>>> aad89bf4d16d45c0790bd2fc010d9ec06cc35430 + } // Insert load (only disconnected load) @@ -249,11 +246,7 @@ void Electromechanical::SetEvent(double currentTime) Bus* parentBus = static_cast(load->GetParentList()[0]); int n = parentBus->GetElectricalData().number; std::complex v = parentBus->GetElectricalData().voltage; -<<<<<<< HEAD - m_yBus[n][n] += std::complex(data.activePower, -data.reactivePower) / (abs(v) * abs(v)); -======= m_yBus[n][n] += std::complex(data.activePower, -data.reactivePower) / (std::abs(v) * std::abs(v)); ->>>>>>> aad89bf4d16d45c0790bd2fc010d9ec06cc35430 } } } -- cgit