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
00030 #ifndef SPACECONVERGENCETESTER_HPP_
00031 #define SPACECONVERGENCETESTER_HPP_
00032
00033
00034 #include "AbstractConvergenceTester.hpp"
00035
00040 template<class CELL, class CARDIAC_PROBLEM, unsigned DIM, unsigned PROBLEM_DIM>
00041 class SpaceConvergenceTester : public AbstractConvergenceTester<CELL, CARDIAC_PROBLEM, DIM, PROBLEM_DIM>
00042 {
00043 public:
00047 void SetInitialConvergenceParameters()
00048 {
00049 this->MeshNum=0;
00050 }
00055 void UpdateConvergenceParameters()
00056 {
00057 this->MeshNum++;
00058
00059 }
00064 bool GiveUpConvergence()
00065 {
00066 switch(DIM)
00067 {
00068 case 1:
00069 {
00070 return this->MeshNum>10;
00071 break;
00072 }
00073 case 2:
00074 {
00075 return this->MeshNum>6;
00076 break;
00077 }
00078 case 3:
00079 {
00080 return this->MeshNum>4;
00081 break;
00082 }
00083 default:
00084 NEVER_REACHED;
00085 return true;
00086 }
00087 return true;
00088 }
00092 double Abscissa()
00093 {
00094 unsigned mesh_size = (unsigned) SmallPow(2, this->MeshNum+2);
00095 return this->mMeshWidth/(double) mesh_size;
00096 }
00097
00101 int GetMeshNum()
00102 {
00103 return (int) this->MeshNum;
00104 }
00108 double GetSpaceStep()
00109 {
00110 unsigned mesh_size = (unsigned) SmallPow(2, this->MeshNum+2);
00111 double scaling = this->mMeshWidth/(double) mesh_size;
00112 return scaling;
00113 }
00114
00115 };
00116
00117 #endif