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
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #ifndef _LEVELDATA_H_
00053 #define _LEVELDATA_H_
00054
00055 #include "IntVect.H"
00056 #include "BoxLayoutData.H"
00057 #include "DisjointBoxLayout.H"
00058 #include "Copier.H"
00059 #include "SPMD.H"
00060
00062
00075 template <class T>
00076 void aliasLevelData(LevelData<T>& a_alias,
00077 LevelData<T>* a_original,
00078 const Interval& a_interval);
00079
00080 template<class T> class LevelData : public BoxLayoutData<T>
00081 {
00082 public:
00083
00085 LevelData();
00086
00088 LevelData(const DisjointBoxLayout& dp, int comps,
00089 const IntVect& ghost = IntVect::Zero,
00090 const DataFactory<T>& a_factory = DefaultDataFactory<T>());
00091
00093 virtual ~LevelData();
00094
00096 virtual void define(const DisjointBoxLayout& dp, int comps,
00097 const IntVect& ghost = IntVect::Zero,
00098 const DataFactory<T>& a_factory = DefaultDataFactory<T>());
00099
00101
00104 virtual void define(const LevelData<T>& da,
00105 const DataFactory<T>& a_factory = DefaultDataFactory<T>());
00106
00108
00113 virtual void define(const LevelData<T>& da, const Interval& comps,
00114 const DataFactory<T>& a_factory = DefaultDataFactory<T>());
00115
00117 virtual void copyTo(const Interval& srcComps,
00118 BoxLayoutData<T>& dest,
00119 const Interval& destComps) const;
00120
00122 virtual void copyTo(BoxLayoutData<T>& dest) const;
00123
00125 virtual void copyTo(const Interval& srcComps,
00126 BoxLayoutData<T>& dest,
00127 const Interval& destComps,
00128 const Copier& copier) const;
00129
00131 virtual void copyTo(BoxLayoutData<T>& dest,
00132 const Copier& copier) const;
00134
00136 virtual void copyTo(const Interval& srcComps,
00137 LevelData<T>& dest,
00138 const Interval& destComps) const;
00139
00141 virtual void copyTo(LevelData<T>& dest) const;
00142
00144
00147 virtual void copyTo(const Interval& srcComps,
00148 LevelData<T>& dest,
00149 const Interval& destComps,
00150 const Copier& copier,
00151 const LDOperator<T>& a_op = LDOperator<T>()) const;
00152
00154 virtual void copyTo(LevelData<T>& dest,
00155 const Copier& copier,
00156 const LDOperator<T>& a_op = LDOperator<T>()) const;
00157
00159 virtual void exchange(const Interval& comps);
00160
00162 virtual void exchange(void);
00163
00165 virtual void exchange(const Interval& comps,
00166 const Copier& copier);
00167
00169 virtual void exchange(const Copier& copier);
00170
00172 const IntVect& ghostVect() const { return m_ghost;}
00173
00187 virtual void define(const BoxLayout& dp, int comps,
00188 const DataFactory<T>& factory);
00189
00191 virtual void define(const BoxLayoutData<T>& da,
00192 const DataFactory<T>& factory = DefaultDataFactory<T>());
00193
00195 virtual void define(const BoxLayoutData<T>& da, const Interval& comps,
00196 const DataFactory<T>& factory = DefaultDataFactory<T>());
00197
00198 virtual void define(const BoxLayout& deadFunction);
00201
00202 const DisjointBoxLayout& getBoxes() const
00203 {
00204 return m_disjointBoxLayout;
00205 }
00206
00208 const DisjointBoxLayout& disjointBoxLayout() const
00209 {
00210 return m_disjointBoxLayout;
00211 }
00212
00214
00238 virtual void apply(void (*a_Function)(const Box& box, int comps, T& t));
00239
00240 protected:
00241 DisjointBoxLayout m_disjointBoxLayout;
00242
00243 IntVect m_ghost;
00244
00245 friend void aliasLevelData<T>(LevelData<T>& a_alias,
00246 LevelData<T>* a_original,
00247 const Interval& a_interval);
00248 };
00249
00251
00278 template <class T>
00279 void aliasLevelData(LevelData<T>& a_alias, LevelData<T>* a_original,
00280 const Interval& a_interval)
00281 {
00282 AliasDataFactory<T> factory(a_original, a_interval);
00283 a_alias.define(a_original->disjointBoxLayout(), a_interval.size(), a_original->ghostVect(), factory);
00284 }
00285
00286
00287
00288
00289
00290
00291
00292 #include "LevelDataI.H"
00293
00294 #endif