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::TheZeroVector(),
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::TheZeroVector(),
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(const Interval& srcComps,
00123 BoxLayoutData<T>& dest,
00124 const Interval& destComps,
00125 const Copier& copier) const;
00127
00129 virtual void copyTo(const Interval& srcComps,
00130 LevelData<T>& dest,
00131 const Interval& destComps) const;
00132
00134
00137 virtual void copyTo(const Interval& srcComps,
00138 LevelData<T>& dest,
00139 const Interval& destComps,
00140 const Copier& copier,
00141 const LDOperator<T>& a_op = LDOperator<T>()) const;
00142
00144 virtual void exchange(const Interval& comps);
00145
00147 virtual void exchange(const Interval& comps,
00148 const Copier& copier);
00149
00151 const IntVect& ghostVect() const { return m_ghost;}
00152
00166 virtual void define(const BoxLayout& dp, int comps,
00167 const DataFactory<T>& factory);
00168
00170 virtual void define(const BoxLayoutData<T>& da,
00171 const DataFactory<T>& factory = DefaultDataFactory<T>());
00172
00174 virtual void define(const BoxLayoutData<T>& da, const Interval& comps,
00175 const DataFactory<T>& factory = DefaultDataFactory<T>());
00176
00177 virtual void define(const BoxLayout& deadFunction);
00180
00181 const DisjointBoxLayout& getBoxes() const
00182 {
00183 return m_disjointBoxLayout;
00184 }
00185
00187 const DisjointBoxLayout& disjointBoxLayout() const
00188 {
00189 return m_disjointBoxLayout;
00190 }
00191
00193
00217 virtual void apply(void (*a_Function)(const Box& box, int comps, T& t));
00218
00219 protected:
00220 DisjointBoxLayout m_disjointBoxLayout;
00221
00222 IntVect m_ghost;
00223
00224 friend void aliasLevelData<T>(LevelData<T>& a_alias,
00225 LevelData<T>* a_original,
00226 const Interval& a_interval);
00227 };
00228
00230
00257 template <class T>
00258 void aliasLevelData(LevelData<T>& a_alias, LevelData<T>* a_original,
00259 const Interval& a_interval)
00260 {
00261 AliasDataFactory<T> factory(a_original, a_interval);
00262 a_alias.define(a_original->disjointBoxLayout(), a_interval.size(), a_original->ghostVect(), factory);
00263 }
00264
00265
00266
00267
00268
00269
00270
00271 #include "LevelDataI.H"
00272
00273 #endif