00001
00002
00003
00004
00005
00006 #ifndef AMROC_GFMLEVELSET_H
00007 #define AMROC_GFMLEVELSET_H
00008
00022 template <class DataType, int dim>
00023 class GFMLevelSet : public controlable {
00024
00025 public:
00026 typedef GridFunction<DataType,dim> grid_fct_type;
00027 typedef GridData<DataType,dim> grid_data_type;
00028
00029 GFMLevelSet() : _PlotPhi(0), _Stationary(0), _Ghosts(0), _Dim(dim) {
00030 _Hierarchy = (GridHierarchy*) 0;
00031 }
00032
00033 virtual ~GFMLevelSet() {}
00034
00035
00036
00037
00038 virtual void SetGrid(grid_data_type& gdphi, const int& Level, const double& t) = 0;
00039
00040
00041 virtual void register_at(ControlDevice& Ctrl) {}
00042 virtual void register_at(ControlDevice& Ctrl, const std::string& prefix) {}
00043 virtual void init() {}
00044 virtual void update() {}
00045 virtual void finish() {}
00046
00047 virtual void SetPhi(grid_fct_type& phi, const int Time, const int Level, double t) {
00048 forall (phi,Time,Level,c)
00049 SetGrid(phi(Time,Level,c),Level,t);
00050 end_forall
00051 START_WATCH
00052 Sync(phi,Time,Level);
00053 END_WATCH(LS_SYNC)
00054 START_WATCH
00055 ExternalBoundaryUpdate(phi,Time,Level);
00056 END_WATCH(BOUNDARIES_EXTERNAL)
00057 }
00058
00059 inline const int& PlotPhi() const { return _PlotPhi; }
00060 inline const int& Stationary() const { return _Stationary; }
00061
00062 virtual void SetupData(GridHierarchy* gh, const int& ghosts) {
00063 _Hierarchy = gh;
00064 _Ghosts = ghosts;
00065 }
00066
00067 GridHierarchy& GH() { return *_Hierarchy; }
00068 const GridHierarchy& GH() const { return *_Hierarchy; }
00069
00070 const int& NGhosts() const { return _Ghosts; }
00071 const int& Dim() const { return _Dim; }
00072
00073 protected:
00074 int _PlotPhi;
00075 int _Stationary;
00076 int _Ghosts;
00077 int _Dim;
00078 GridHierarchy* _Hierarchy;
00079 ControlDevice LocCtrl;
00080 };
00081
00082
00083 #endif