49 #include <Xyce_config.h>
53 #include "NOX_Common.H"
54 #include "NOX_Solver_Generic.H"
55 #include "NOX_Abstract_Group.H"
61 tolerance(tolerance_),
65 status(NOX::StatusTest::Unconverged)
75 NOX::StatusTest::StatusType
78 status = NOX::StatusTest::Unconverged;
81 int niters = problem.getNumIterations();
87 normFInit = problem.getSolutionGroup().getNormF();
88 return NOX::StatusTest::Unconverged;
94 bool isCounted =
false;
95 if (niters == lastIteration) {
99 lastIteration = niters;
104 convRate = problem.getSolutionGroup().getNormF() /
105 problem.getPreviousSolutionGroup().getNormF();
107 if (fabs(convRate - 1.0) <= tolerance) {
109 if ((numSteps == 0) || (convRate < minConvRate))
110 minConvRate = convRate;
119 if (numSteps >= maxSteps) {
121 double initConvRate = problem.getSolutionGroup().getNormF()/normFInit;
123 if ((initConvRate <= 0.9) && (minConvRate <= 1.0)) {
124 status = NOX::StatusTest::Converged;
127 status = NOX::StatusTest::Failed;
141 for (
int j = 0; j < indent; ++j )
144 stream <<
"Stagnation Count = " << numSteps <<
" = " << maxSteps <<
"\n";
146 for (
int j = 0; j < indent; ++j )
148 stream <<
" (convergence rate = " << convRate <<
")";
150 if (status == NOX::StatusTest::Converged) {
151 stream <<
"\n (Near Convergence!)" << std::endl;