00001
00002
00003 #ifndef _included_GridFunctionFunctors_h
00004 #define _included_GridFunctionFunctors_h
00005
00011 template <class GFType, int dim>
00012 class GFBndryUpdateFunc {
00013 public:
00014 virtual ~GFBndryUpdateFunc() {}
00015 virtual void operator() (GridData<GFType,dim> &target, const int& target_level,
00016 const BBox &bb, const int &side, const double& phystime) = 0;
00017 };
00018
00019 template <class TClass, class GFType, int dim>
00020 class GFBndryUpdateSpecificFunc : public GFBndryUpdateFunc<GFType,dim> {
00021 public:
00022 typedef void (TClass::*Func) (GridData<GFType,dim> &target, const int& target_level,
00023 const BBox &bb, const int &side, const double& phystime);
00024
00025 GFBndryUpdateSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00026
00027 virtual ~GFBndryUpdateSpecificFunc() {}
00028 virtual void operator() (GridData<GFType,dim> &target, const int& target_level,
00029 const BBox &bb, const int &side, const double& phystime)
00030 { (*tcobj.*func)(target, target_level, bb, side, phystime); }
00031
00032 private:
00033 TClass* tcobj;
00034 Func func;
00035 };
00036
00037
00038 template <class GFType, int dim>
00039 class GFLevelTransferFunc {
00040 public:
00041 virtual ~GFLevelTransferFunc() {}
00042 virtual void operator() (GridData<GFType,dim> &source, const int& source_level,
00043 GridData<GFType,dim> &target, const int& target_level, const BBox &bb) = 0;
00044 };
00045
00046 template <class TClass, class GFType, int dim>
00047 class GFLevelTransferSpecificFunc : public GFLevelTransferFunc<GFType,dim> {
00048 public:
00049 typedef void (TClass::*Func) (GridData<GFType,dim> &source, const int& source_level,
00050 GridData<GFType,dim> &target, const int& target_level, const BBox &bb);
00051
00052 GFLevelTransferSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00053
00054 virtual ~GFLevelTransferSpecificFunc() {}
00055 virtual void operator() (GridData<GFType,dim> &source, const int& source_level,
00056 GridData<GFType,dim> &target, const int& target_level, const BBox &bb)
00057 { (*tcobj.*func)(source, source_level, target, target_level, bb); }
00058
00059 private:
00060 TClass* tcobj;
00061 Func func;
00062 };
00063
00064
00065 template <class GFType, int dim>
00066 class GFAdptBndryUpdateFunc {
00067 public:
00068 virtual ~GFAdptBndryUpdateFunc() {}
00069 virtual void operator() (GridData<GFType,dim> &target, GridData<GFType,dim> &source_next, const double &frac,
00070 GridData<GFType,dim> &source_previous, const double &oneminusfrac,
00071 const int &target_level, const BBox &bb) = 0;
00072 };
00073
00074 template <class TClass, class GFType, int dim>
00075 class GFAdptBndryUpdateSpecificFunc : public GFAdptBndryUpdateFunc<GFType,dim> {
00076 public:
00077 typedef void (TClass::*Func) (GridData<GFType,dim> &target, GridData<GFType,dim> &source_next, const double &frac,
00078 GridData<GFType,dim> &source_previous, const double &oneminusfrac,
00079 const int &target_level, const BBox &bb);
00080
00081 GFAdptBndryUpdateSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00082
00083 virtual ~GFAdptBndryUpdateSpecificFunc() {}
00084 virtual void operator() (GridData<GFType,dim> &target, GridData<GFType,dim> &source_next, const double &frac,
00085 GridData<GFType,dim> &source_previous, const double &oneminusfrac,
00086 const int &target_level, const BBox &bb)
00087 { (*tcobj.*func)(target, source_next, frac, source_previous, oneminusfrac, target_level, bb); }
00088
00089 private:
00090 TClass* tcobj;
00091 Func func;
00092 };
00093
00094
00095 template <class GFType, int dim>
00096 class GFIOFunc {
00097 public:
00098 virtual ~GFIOFunc() {}
00099 virtual void operator() (GridData<GFType,dim> &source, const int& source_level, const BBox &bb) = 0;
00100 };
00101
00102 template <class TClass, class GFType, int dim>
00103 class GFIOSpecificFunc : public GFIOFunc<GFType,dim> {
00104 public:
00105 typedef void (TClass::*Func) (GridData<GFType,dim> &source, const int& source_level, const BBox &bb);
00106
00107 GFIOSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00108
00109 virtual ~GFIOSpecificFunc() {}
00110 virtual void operator() (GridData<GFType,dim> &source, const int& source_level, const BBox &bb)
00111 { (*tcobj.*func)(source, source_level, bb); }
00112
00113 private:
00114 TClass* tcobj;
00115 Func func;
00116 };
00117
00118
00119 template <class GFType, int dim>
00120 class GFRecomposeFunc {
00121 public:
00122 virtual ~GFRecomposeFunc() {}
00123 virtual void operator() (GridFunction<GFType,dim> &gf, const int& time,
00124 const int& level, const double& phystime) = 0;
00125 };
00126
00127 template <class TClass, class GFType, int dim>
00128 class GFRecomposeSpecificFunc : public GFRecomposeFunc<GFType,dim> {
00129 public:
00130 typedef void (TClass::*Func) (GridFunction<GFType,dim> &gf, const int& time,
00131 const int& level, const double& phystime);
00132
00133 GFRecomposeSpecificFunc(TClass* _tcobj, Func _func) : tcobj(_tcobj), func(_func) {}
00134
00135 virtual ~GFRecomposeSpecificFunc() {}
00136 virtual void operator() (GridFunction<GFType,dim> &gf, const int& time,
00137 const int& level, const double& phystime)
00138 { (*tcobj.*func)(gf, time, level, phystime); }
00139
00140 private:
00141 TClass* tcobj;
00142 Func func;
00143 };
00144
00145
00146 #endif
00147
00148