From b32c2281cff97d1902f963b782c1b10342945f77 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Thu, 21 Dec 2017 02:14:45 -0200 Subject: Math expression solver implemented --- Project/Electromechanical.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'Project/Electromechanical.cpp') diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index 1100300..4f416a6 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -98,24 +98,23 @@ bool Electromechanical::RunStabilityCalculation() if(!InitializeDynamicElements()) return false; double pbdTime = m_plotTime; - double currentTime = 0.0; double currentPlotTime = 0.0; double currentPbdTime = 0.0; - while(currentTime < m_simTime) { - if(HasEvent(currentTime)) { - SetEvent(currentTime); + while(m_currentTime < m_simTime) { + if(HasEvent(m_currentTime)) { + SetEvent(m_currentTime); GetLUDecomposition(m_yBus, m_yBusL, m_yBusU); } - if(currentPlotTime >= m_plotTime || currentTime == 0.0) { - m_timeVector.push_back(currentTime); + if(currentPlotTime >= m_plotTime || m_currentTime == 0.0) { + m_timeVector.push_back(m_currentTime); SaveData(); currentPlotTime = 0.0; } if(currentPbdTime > pbdTime) { - if(!pbd.Update((currentTime / m_simTime) * 100, wxString::Format("Time = %.2fs", currentTime))) { - m_errorMsg = wxString::Format(_("Simulation cancelled at %.2fs."), currentTime); + if(!pbd.Update((m_currentTime / m_simTime) * 100, wxString::Format("Time = %.2fs", m_currentTime))) { + m_errorMsg = wxString::Format(_("Simulation cancelled at %.2fs."), m_currentTime); pbd.Update(100); return false; } @@ -124,7 +123,7 @@ bool Electromechanical::RunStabilityCalculation() if(!SolveSynchronousMachines()) return false; - currentTime += m_timeStep; + m_currentTime += m_timeStep; currentPlotTime += m_timeStep; currentPbdTime += m_timeStep; } @@ -662,6 +661,7 @@ bool Electromechanical::InitializeDynamicElements() if(data.avrSolver) delete data.avrSolver; data.avrSolver = new ControlElementSolver(data.avr, m_timeStep * m_ctrlTimeStepMultiplier, m_tolerance, m_parent); + data.avrSolver->SetCurrentTime(m_currentTime); data.avrSolver->SetTerminalVoltage(std::abs(data.terminalVoltage)); data.avrSolver->SetInitialTerminalVoltage(std::abs(data.terminalVoltage)); data.avrSolver->SetActivePower(dataPU.activePower); @@ -680,6 +680,7 @@ bool Electromechanical::InitializeDynamicElements() if(data.speedGovSolver) delete data.speedGovSolver; data.speedGovSolver = new ControlElementSolver(data.speedGov, m_timeStep * m_ctrlTimeStepMultiplier, m_tolerance, m_parent); + data.speedGovSolver->SetCurrentTime(m_currentTime); data.speedGovSolver->SetActivePower(dataPU.activePower); data.speedGovSolver->SetReactivePower(dataPU.reactivePower); data.speedGovSolver->SetVelocity(data.speed); @@ -999,6 +1000,7 @@ bool Electromechanical::SolveSynchronousMachines() SyncGenerator* syncGenerator = *it; auto data = syncGenerator->GetElectricalData(); if(data.useAVR && data.avrSolver) { + data.avrSolver->SetCurrentTime(m_currentTime); data.avrSolver->SetTerminalVoltage(std::abs(data.terminalVoltage)); data.avrSolver->SetDeltaActivePower(data.electricalPower.real() - data.avrSolver->GetActivePower()); data.avrSolver->SetActivePower(data.electricalPower.real()); @@ -1012,6 +1014,7 @@ bool Electromechanical::SolveSynchronousMachines() } if(data.useSpeedGovernor && data.speedGovSolver) { + data.speedGovSolver->SetCurrentTime(m_currentTime); data.speedGovSolver->SetVelocity(data.speed); data.speedGovSolver->SetActivePower(data.electricalPower.real()); data.speedGovSolver->SetReactivePower(data.electricalPower.imag()); -- cgit From 0a014922be0ee9a11668751a956ceeb8034494ee Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Thu, 21 Dec 2017 02:16:21 -0200 Subject: gh-desktop error fix --- Project/Electromechanical.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'Project/Electromechanical.cpp') diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index 4f416a6..3b6466a 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -98,6 +98,7 @@ bool Electromechanical::RunStabilityCalculation() if(!InitializeDynamicElements()) return false; double pbdTime = m_plotTime; + m_currentTime = 0.0; double currentPlotTime = 0.0; double currentPbdTime = 0.0; while(m_currentTime < m_simTime) { -- cgit From ff52be4e9705d443a4fde091525806322c2dc032 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Thu, 21 Dec 2017 17:36:07 -0200 Subject: Some math expression implementations --- 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 3b6466a..1cadc97 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -1003,10 +1003,10 @@ bool Electromechanical::SolveSynchronousMachines() if(data.useAVR && data.avrSolver) { data.avrSolver->SetCurrentTime(m_currentTime); data.avrSolver->SetTerminalVoltage(std::abs(data.terminalVoltage)); - data.avrSolver->SetDeltaActivePower(data.electricalPower.real() - data.avrSolver->GetActivePower()); + 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()); + data.avrSolver->SetDeltaVelocity((data.speed - data.avrSolver->GetVelocity()) / m_timeStep); data.avrSolver->SetVelocity(data.speed); for(int i = 0; i < ctrlRatio; ++i) data.avrSolver->SolveNextStep(); -- cgit From dbe0b112622f8e91fa3e44a6b6e1aa7e230d3ded Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Sun, 31 Dec 2017 17:59:10 -0200 Subject: Math Expression implemented --- Project/Electromechanical.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Project/Electromechanical.cpp') diff --git a/Project/Electromechanical.cpp b/Project/Electromechanical.cpp index 1cadc97..ea8b1bb 100644 --- a/Project/Electromechanical.cpp +++ b/Project/Electromechanical.cpp @@ -662,6 +662,7 @@ bool Electromechanical::InitializeDynamicElements() if(data.avrSolver) delete data.avrSolver; data.avrSolver = new ControlElementSolver(data.avr, m_timeStep * m_ctrlTimeStepMultiplier, m_tolerance, m_parent); + data.avrSolver->SetSwitchStatus(syncGenerator->IsOnline()); data.avrSolver->SetCurrentTime(m_currentTime); data.avrSolver->SetTerminalVoltage(std::abs(data.terminalVoltage)); data.avrSolver->SetInitialTerminalVoltage(std::abs(data.terminalVoltage)); @@ -681,6 +682,7 @@ bool Electromechanical::InitializeDynamicElements() if(data.speedGovSolver) delete data.speedGovSolver; data.speedGovSolver = new ControlElementSolver(data.speedGov, m_timeStep * m_ctrlTimeStepMultiplier, m_tolerance, m_parent); + data.speedGovSolver->SetSwitchStatus(syncGenerator->IsOnline()); data.speedGovSolver->SetCurrentTime(m_currentTime); data.speedGovSolver->SetActivePower(dataPU.activePower); data.speedGovSolver->SetReactivePower(dataPU.reactivePower); @@ -1001,6 +1003,7 @@ bool Electromechanical::SolveSynchronousMachines() SyncGenerator* syncGenerator = *it; auto data = syncGenerator->GetElectricalData(); if(data.useAVR && data.avrSolver) { + 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); @@ -1015,6 +1018,7 @@ bool Electromechanical::SolveSynchronousMachines() } if(data.useSpeedGovernor && data.speedGovSolver) { + data.speedGovSolver->SetSwitchStatus(syncGenerator->IsOnline()); data.speedGovSolver->SetCurrentTime(m_currentTime); data.speedGovSolver->SetVelocity(data.speed); data.speedGovSolver->SetActivePower(data.electricalPower.real()); -- cgit