LAMA
|
00001 00034 #ifndef LAMA_RESIDUALTHRESHOLD_HPP_ 00035 #define LAMA_RESIDUALTHRESHOLD_HPP_ 00036 00037 // for dll_import 00038 #include <lama/config.hpp> 00039 00040 // base classes 00041 #include <lama/solver/criteria/Criterion.hpp> 00042 00043 // others 00044 #include <lama/Scalar.hpp> 00045 00046 #include <lama/norm/Norm.hpp> 00047 00048 namespace lama 00049 { 00050 00060 class LAMA_DLL_IMPORTEXPORT ResidualThreshold : public Criterion 00061 { 00062 public: 00066 enum ResidualThresholdCheckMode 00067 { 00068 Absolute, 00069 Relative 00070 }; 00071 00072 /* 00073 * @brief Empty constructor first. Configured by setter methods. 00074 */ 00075 ResidualThreshold(); 00076 00082 ResidualThreshold(const NormPtr norm); 00083 00092 ResidualThreshold(const NormPtr norm, Scalar precision, ResidualThresholdCheckMode checkMode); 00093 00099 ResidualThreshold(const ResidualThreshold& other); 00100 00104 virtual ~ResidualThreshold(); 00105 00106 virtual Criterion* copy() const; 00107 00108 bool isSatisfied(const IterativeSolver& solver); 00109 00110 ResidualThresholdCheckMode getCheckMode() const; 00111 IndexType getIterationExtrema() const; 00112 Scalar getFirstNormResult() const; 00113 const NormPtr getNorm() const; 00114 Scalar getPrecision() const; 00115 00116 void setCheckMode(ResidualThresholdCheckMode mCheckMode); 00117 void setFirstNormResult(Scalar firstNormResult); 00118 void setPrecision( Scalar precision ); 00119 00120 virtual void writeAt(std::ostream& stream) const; 00121 00122 protected: 00123 LAMA_LOG_USING( Criterion::logger ); 00124 private: 00125 const NormPtr mNorm; 00126 ResidualThresholdCheckMode mCheckMode; 00127 Scalar mPrecision; 00128 Scalar mFirstNormResult; 00129 }; 00130 00131 } //namespace lama 00132 00133 #endif // LAMA_RESIDUALTHRESHOLD_HPP_