diff options
author | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2019-04-26 02:29:47 -0300 |
---|---|---|
committer | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2019-04-26 02:29:47 -0300 |
commit | a40d5a405d60b4e429f6f578dcfe3c33ab5ad81a (patch) | |
tree | 0f88240b49798ce5e3d9b96ca2951145a7978343 /Project/Workspace.cpp | |
parent | 4dabf27f998db83e20bc0eca7e18672777f0bf5b (diff) | |
download | PSP.git-a40d5a405d60b4e429f6f578dcfe3c33ab5ad81a.tar.gz PSP.git-a40d5a405d60b4e429f6f578dcfe3c33ab5ad81a.tar.xz PSP.git-a40d5a405d60b4e429f6f578dcfe3c33ab5ad81a.zip |
Frequency response implemented
Need a form
Diffstat (limited to 'Project/Workspace.cpp')
-rw-r--r-- | Project/Workspace.cpp | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index a17faae..6b8d197 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -1491,8 +1491,8 @@ void Workspace::OnMiddleDoubleClick(wxMouseEvent& event) bool Workspace::RunStaticStudies() { - bool pfStatus, faultStatus, scStatus; - pfStatus = faultStatus = scStatus = false; + bool pfStatus, faultStatus, scStatus, harmStatus; + pfStatus = faultStatus = scStatus = harmStatus = false; pfStatus = RunPowerFlow(); @@ -1507,8 +1507,14 @@ bool Workspace::RunStaticStudies() } else { scStatus = true; } + + if(m_properties->GetSimulationPropertiesData().harmDistortionAfterPowerFlow) { + if(pfStatus) harmStatus = RunHarmonicDistortion(); + } else { + harmStatus = true; + } - if(pfStatus && faultStatus && scStatus) return true; + if(pfStatus && faultStatus && scStatus && harmStatus) return true; return false; } @@ -1523,5 +1529,43 @@ bool Workspace::RunHarmonicDistortion() basePower *= 1e3; if(!RunPowerFlow()) return false; PowerQuality pq(GetElementList()); - return pq.CalculateDistortions(basePower); + bool result = pq.CalculateDistortions(basePower); + + UpdateTextElements(); + Redraw(); + + return result; +} + +bool Workspace::RunFrequencyResponse() +{ + auto simProp = m_properties->GetSimulationPropertiesData(); + double basePower = simProp.basePower; + if(simProp.basePowerUnit == UNIT_MVA) + basePower *= 1e6; + else if(simProp.basePowerUnit == UNIT_kVA) + basePower *= 1e3; + PowerQuality pq(GetElementList()); + bool result = pq.CalculateFrequencyResponse(simProp.stabilityFrequency, 0.0, 1500.0, 1.0, basePower); + + wxMessageDialog msgDialog( + this, + wxString::Format(_("Calculations done.\nDo you wish to open the frequency response graphics?")), + _("Question"), wxYES_NO | wxCENTRE | wxICON_QUESTION); + if(msgDialog.ShowModal() == wxID_YES) { + std::vector<ElementPlotData> plotDataList; + for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) { + PowerElement* element = *it; + ElementPlotData plotData; + if(element->GetPlotData(plotData, FREQRESPONSE)) plotDataList.push_back(plotData); + } + + ChartView* cView = new ChartView(this, plotDataList, pq.GetFrequencies()); + cView->Show(); + } + + UpdateTextElements(); + Redraw(); + + return result; } |