#ifndef ELECTROMECHANICAL_H #define ELECTROMECHANICAL_H #include "ElectricCalculation.h" #include class ControlElementSolver; class Electromechanical : public ElectricCalculation { public: Electromechanical(wxWindow* parent, std::vector elementList, SimulationData data); ~Electromechanical(); bool RunStabilityCalculation(); wxString GetErrorMessage() const { return m_errorMsg; } std::vector GetTimeVector() const { return m_timeVector; } std::vector m_wErrorVector; std::vector m_deltaErrorVector; std::vector m_transEdErrorVector; std::vector m_transEqErrorVector; std::vector m_numItVector; protected: void SetEventTimeList(); bool HasEvent(double currentTime); void SetEvent(double currentTime); inline bool EventTrigger(double eventTime, double currentTime); double GetPowerValue(double value, ElectricalUnit unit); void InsertSyncMachinesOnYBus(); std::complex GetSyncMachineAdmittance(SyncGenerator* generator); bool InitializeDynamicElements(); void CalculateMachinesCurrents(); void CalculateIntegrationConstants(SyncGenerator* syncGenerator, double id, double iq, double k = 1.0); bool SolveSynchronousMachines(); void SetSyncMachinesModel(); double CalculateSyncMachineIntVariables(SyncGenerator* syncGenerator, double id, double iq, double pe, double k = 1.0); void CalculateSyncMachineNonIntVariables(SyncGenerator* syncGenerator, double& id, double& iq, double& pe, double k = 1.0); void CalculateReferenceSpeed(); void SaveData(); wxWindow* m_parent = NULL; wxString m_errorMsg = _("Unknown error"); double m_systemFreq = 60.0; double m_refSpeed = 2.0 * M_PI * 60.0; bool m_useCOI = false; std::vector > > m_yBus; std::vector > > m_yBusU; std::vector > > m_yBusL; std::vector > m_vBus; std::vector > m_iBus; double m_powerSystemBase = 100e6; double m_simTime = 10.0; double m_plotTime = 1e-2; double m_timeStep = 1e-2; double m_ctrlTimeStepMultiplier = 0.1; double m_tolerance = 1e-8; int m_maxIterations = 100; std::vector m_eventTimeList; std::vector m_eventOccurrenceList; std::vector m_timeVector; // tests double m_wError = 0.0; double m_numIt = 0; }; #endif // ELECTROMECHANICAL_H