Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include <OpenFOAM/lduMatrix.H>
00030
00031
00032
00033 bool Foam::lduMatrix::solverPerformance::checkConvergence
00034 (
00035 const scalar Tolerance,
00036 const scalar RelTolerance
00037 )
00038 {
00039 if (debug >= 2)
00040 {
00041 Info<< solverName_
00042 << ": Iteration " << noIterations_
00043 << " residual = " << finalResidual_
00044 << endl;
00045 }
00046
00047 if
00048 (
00049 finalResidual_ < Tolerance
00050 || (
00051 RelTolerance > SMALL
00052 && finalResidual_ <= RelTolerance*initialResidual_
00053 )
00054
00055 )
00056 {
00057 converged_ = true;
00058 }
00059 else
00060 {
00061 converged_ = false;
00062 }
00063
00064 return converged_;
00065 }
00066
00067
00068 bool Foam::lduMatrix::solverPerformance::checkSingularity
00069 (
00070 const scalar residual
00071 )
00072 {
00073 if (residual > VSMALL)
00074 {
00075 singular_ = false;
00076 }
00077 else
00078 {
00079 singular_ = true;
00080 }
00081
00082 return singular_;
00083 }
00084
00085
00086 void Foam::lduMatrix::solverPerformance::print() const
00087 {
00088 if (debug)
00089 {
00090 Info<< solverName_ << ": Solving for " << fieldName_;
00091
00092 if (singular())
00093 {
00094 Info<< ": solution singularity" << endl;
00095 }
00096 else
00097 {
00098 Info<< ", Initial residual = " << initialResidual_
00099 << ", Final residual = " << finalResidual_
00100 << ", No Iterations " << noIterations_
00101 << endl;
00102 }
00103 }
00104 }
00105
00106
00107