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 #ifndef _LEVELDATA_H_
00029 #define _LEVELDATA_H_
00030
00031 #include "IntVect.H"
00032 #include "BoxLayoutData.H"
00033 #include "DisjointBoxLayout.H"
00034 #include "Copier.H"
00035 #include "SPMD.H"
00036
00037
00038
00040
00054 template <class T>
00055 void aliasLevelData(LevelData<T>& a_alias,
00056 LevelData<T>* a_original,
00057 const Interval& a_interval);
00058
00059 template<class T> class LevelData : public BoxLayoutData<T>
00060 {
00061 public:
00062
00064 LevelData();
00065
00067 LevelData(const DisjointBoxLayout& dp, int comps,
00068 const IntVect& ghost = IntVect::TheZeroVector(),
00069 const DataFactory<T>& a_factory = DefaultDataFactory<T>());
00070
00072 virtual ~LevelData();
00073
00074
00076 virtual void define(const DisjointBoxLayout& dp, int comps,
00077 const IntVect& ghost = IntVect::TheZeroVector(),
00078 const DataFactory<T>& a_factory = DefaultDataFactory<T>());
00079
00080
00082
00085 virtual void define(const LevelData<T>& da,
00086 const DataFactory<T>& a_factory = DefaultDataFactory<T>());
00087
00089
00094 virtual void define(const LevelData<T>& da, const Interval& comps,
00095 const DataFactory<T>& a_factory = DefaultDataFactory<T>());
00096
00098 virtual void copyTo(const Interval& srcComps,
00099 BoxLayoutData<T>& dest,
00100 const Interval& destComps) const;
00101
00103 virtual void copyTo(const Interval& srcComps,
00104 BoxLayoutData<T>& dest,
00105 const Interval& destComps,
00106 const Copier& copier) const;
00108
00110 virtual void copyTo(const Interval& srcComps,
00111 LevelData<T>& dest,
00112 const Interval& destComps) const;
00113
00115
00118 virtual void copyTo(const Interval& srcComps,
00119 LevelData<T>& dest,
00120 const Interval& destComps,
00121 const Copier& copier,
00122 const LDOperator<T>& a_op = LDOperator<T>()) const;
00123
00125 virtual void exchange(const Interval& comps);
00126
00128 virtual void exchange(const Interval& comps,
00129 const Copier& copier);
00130
00132 const IntVect& ghostVect() const { return m_ghost;}
00133
00147 virtual void define(const BoxLayout& dp, int comps,
00148 const DataFactory<T>& factory);
00149
00151 virtual void define(const BoxLayoutData<T>& da,
00152 const DataFactory<T>& factory = DefaultDataFactory<T>());
00153
00155 virtual void define(const BoxLayoutData<T>& da, const Interval& comps,
00156 const DataFactory<T>& factory = DefaultDataFactory<T>());
00157
00158 virtual void define(const BoxLayout& deadFunction);
00161
00162 const DisjointBoxLayout& getBoxes() const
00163 {
00164 return m_disjointBoxLayout;
00165 }
00166
00168 const DisjointBoxLayout& disjointBoxLayout() const
00169 {
00170 return m_disjointBoxLayout;
00171 }
00172
00174
00198 virtual void apply(void (*a_Function)(const Box& box, int comps, T& t));
00199
00200 protected:
00201
00202
00203 DisjointBoxLayout m_disjointBoxLayout;
00204
00205 IntVect m_ghost;
00206
00207 friend void aliasLevelData<T>(LevelData<T>& a_alias,
00208 LevelData<T>* a_original,
00209 const Interval& a_interval);
00210
00211 };
00212
00214
00241 template <class T>
00242 void aliasLevelData(LevelData<T>& a_alias, LevelData<T>* a_original,
00243 const Interval& a_interval)
00244 {
00245 AliasDataFactory<T> factory(a_original, a_interval);
00246 a_alias.define(a_original->disjointBoxLayout(), a_interval.size(), a_original->ghostVect(), factory);
00247 }
00248
00249
00250
00251
00252
00253
00254
00255
00256 #include "LevelDataI.H"
00257
00258
00259
00260 #endif