00001 // $Id: NOX_StatusTest_MaxIters.C,v 1.14 2006/08/22 00:01:27 rppawlo Exp $ 00002 // $Source: /space/CVS/Trilinos/packages/nox/src/NOX_StatusTest_MaxIters.C,v $ 00003 00004 //@HEADER 00005 // ************************************************************************ 00006 // 00007 // NOX: An Object-Oriented Nonlinear Solver Package 00008 // Copyright (2002) Sandia Corporation 00009 // 00010 // LOCA: Library of Continuation Algorithms Package 00011 // Copyright (2005) Sandia Corporation 00012 // 00013 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00014 // license for use of this work by or on behalf of the U.S. Government. 00015 // 00016 // This library is free software; you can redistribute it and/or modify 00017 // it under the terms of the GNU Lesser General Public License as 00018 // published by the Free Software Foundation; either version 2.1 of the 00019 // License, or (at your option) any later version. 00020 // 00021 // This library is distributed in the hope that it will be useful, but 00022 // WITHOUT ANY WARRANTY; without even the implied warranty of 00023 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00024 // Lesser General Public License for more details. 00025 // 00026 // You should have received a copy of the GNU Lesser General Public 00027 // License along with this library; if not, write to the Free Software 00028 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00029 // USA 00030 // 00031 // Questions? Contact Roger Pawlowski (rppawlo@sandia.gov) or 00032 // Eric Phipps (etphipp@sandia.gov), Sandia National Laboratories. 00033 // ************************************************************************ 00034 // CVS Information 00035 // $Source: /space/CVS/Trilinos/packages/nox/src/NOX_StatusTest_MaxIters.C,v $ 00036 // $Author: rppawlo $ 00037 // $Date: 2006/08/22 00:01:27 $ 00038 // $Revision: 1.14 $ 00039 // ************************************************************************ 00040 //@HEADER 00041 00042 #include "NOX_StatusTest_MaxIters.H" // class definition 00043 #include "NOX_Common.H" 00044 #include "NOX_Solver_Generic.H" 00045 00046 NOX::StatusTest::MaxIters:: 00047 MaxIters(int maxIterations, const NOX::Utils* u) : 00048 maxiters(maxIterations), 00049 niters(0), 00050 status(Unevaluated) 00051 { 00052 if (u != NULL) 00053 utils = *u; 00054 00055 if (maxiters < 1) 00056 { 00057 utils.err() << "NOX::StatusTest::MaxIters - must choose a number greater than zero" << endl; 00058 throw "NOX Error"; 00059 } 00060 } 00061 00062 NOX::StatusTest::MaxIters::~MaxIters() 00063 { 00064 } 00065 00066 NOX::StatusTest::StatusType NOX::StatusTest::MaxIters:: 00067 checkStatus(const Solver::Generic& problem, 00068 NOX::StatusTest::CheckType checkType) 00069 { 00070 switch (checkType) 00071 { 00072 case NOX::StatusTest::Complete: 00073 case NOX::StatusTest::Minimal: 00074 niters = problem.getNumIterations(); 00075 status = (niters >= maxiters) ? Failed : Unconverged; 00076 break; 00077 00078 case NOX::StatusTest::None: 00079 default: 00080 niters = -1; 00081 status = Unevaluated; 00082 break; 00083 } 00084 00085 return status; 00086 } 00087 00088 NOX::StatusTest::StatusType NOX::StatusTest::MaxIters::getStatus() const 00089 { 00090 return status; 00091 } 00092 00093 ostream& NOX::StatusTest::MaxIters::print(ostream& stream, int indent) const 00094 { 00095 for (int j = 0; j < indent; j ++) 00096 stream << ' '; 00097 stream << status; 00098 stream << "Number of Iterations = " << niters << " < " << maxiters; 00099 stream << endl; 00100 return stream; 00101 } 00102 00103 int NOX::StatusTest::MaxIters::getMaxIters() const 00104 { 00105 return maxiters; 00106 } 00107 00108 int NOX::StatusTest::MaxIters::getNumIters() const 00109 { 00110 return niters; 00111 }