//------------------------------------------------------------------------------ Solver::SolverState Solver::AdvanceState() { switch (currentState) { case INITIALIZING: CompleteInitialization(); break; case NOMINAL: RunNominal(); break; case PERTURBING: RunPerturbation(); break; case ITERATING: RunIteration(); break; case CALCULATING: CalculateParameters(); break; case CHECKINGRUN: CheckCompletion(); break; case RUNEXTERNAL: RunExternal(); break; case FINISHED: RunComplete(); break; default: throw SolverException(wxT("Undefined Solver state")); }; ReportProgress(); return currentState; }
//------------------------------------------------------------------------------ Solver::SolverState SteepestDescent::AdvanceState() { switch (currentState) { case INITIALIZING: #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage(wxT("Entered state machine; ") wxT("INITIALIZING\n")); #endif iterationsTaken = 0; WriteToTextFile(); // ReportProgress(); CompleteInitialization(); #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage( wxT("SteepestDescent State Transitions from %d to %d\n"), INITIALIZING, currentState); #endif break; case NOMINAL: #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage(wxT("Entered state machine; ") wxT("NOMINAL\n")); #endif // ReportProgress(); RunNominal(); // ReportProgress(); #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage( wxT("SteepestDescent State Transitions from %d to %d\n"), NOMINAL, currentState); #endif // ReportProgress(); break; case PERTURBING: #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage(wxT("Entered state machine; ") wxT("PERTURBING\n")); #endif RunPerturbation(); #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage( wxT("SteepestDescent State Transitions from %d to %d\n"), PERTURBING, currentState); #endif // ReportProgress(); break; case Solver::CALCULATING: #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage(wxT("Entered state machine; ") wxT("CALCULATING\n")); #endif // ReportProgress(); CalculateParameters(); #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage( wxT("SteepestDescent State Transitions from %d to %d\n"), CALCULATING, currentState); #endif break; case CHECKINGRUN: #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage(wxT("Entered state machine; ") wxT("CHECKINGRUN\n")); #endif CheckCompletion(); #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage( wxT("SteepestDescent State Transitions from %d to %d\n"), CHECKINGRUN, currentState); #endif // ReportProgress(); break; case FINISHED: #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage(wxT("Entered state machine; ") wxT("FINISHED\n")); #endif RunComplete(); #ifdef SD_DEBUG_STATE_MACHINE MessageInterface::ShowMessage( wxT("SteepestDescent State Transitions from %d to %d\n"), FINISHED, currentState); #endif // ReportProgress(); break; default: throw SolverException( wxT("Steepest Descent Solver \"") + instanceName + wxT("\" encountered an unexpected state.")); } return currentState; }