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
00036 template<class CELL, class CARDIAC_PROBLEM, unsigned DIM, unsigned PROBLEM_DIM>
00037 class SpaceConvergenceTester : public AbstractConvergenceTester<CELL, CARDIAC_PROBLEM, DIM, PROBLEM_DIM>
00038 {
00039 public:
00040 void SetInitialConvergenceParameters()
00041 {
00042 this->MeshNum=0;
00043 }
00044 void UpdateConvergenceParameters()
00045 {
00046 this->MeshNum++;
00047
00048 }
00049 bool GiveUpConvergence()
00050 {
00051 switch(DIM)
00052 {
00053 case 1:
00054 {
00055 return this->MeshNum>6;
00056 break;
00057 }
00058 case 2:
00059 {
00060 return this->MeshNum>6;
00061 break;
00062 }
00063 case 3:
00064 {
00065 return this->MeshNum>4;
00066 break;
00067 }
00068 default:
00069 assert(0);
00070 return true;
00071 }
00072 return true;
00073 }
00074 double Abscissa()
00075 {
00076 unsigned mesh_size = (unsigned) pow(2, this->MeshNum+2);
00077 return this->mMeshWidth/(double) mesh_size;
00078 }
00079
00080 int GetMeshNum()
00081 {
00082 return (int) this->MeshNum;
00083 }
00084 double GetSpaceStep()
00085 {
00086 unsigned mesh_size = (unsigned) pow(2, this->MeshNum+2);
00087 double scaling = this->mMeshWidth/(double) mesh_size;
00088 return scaling;
00089 }
00090
00091 };
00092
00093 #endif