SpaceConvergenceTester.hpp
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