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 #ifndef _EBISLAYOUT_H_
00030 #define _EBISLAYOUT_H_
00031
00032 #include "REAL.H"
00033 #include "IntVect.H"
00034 #include "IntVectSet.H"
00035 #include "VolIndex.H"
00036 #include "FaceIndex.H"
00037 #include "IntVectSet.H"
00038 #include "EBISBox.H"
00039 #include "DisjointBoxLayout.H"
00040 #include "LevelData.H"
00041 #include "EBGraph.H"
00042
00043 class EBISLayoutImplem;
00044
00046
00052 class EBISLayout
00053 {
00054 public:
00056
00061 const EBISBox& operator[](const DataIndex& a_index) const;
00062
00064
00070 void setMaxRefinementRatio(const int& a_maxRefine);
00071
00072
00074
00080 void setMaxCoarseningRatio(const int& a_maxCoarsen);
00081
00082
00084 EBISLayout();
00085
00086
00088
00091 const BoxLayout& getGrownLayout() const;
00092
00094
00097 const DisjointBoxLayout& getDisjointLayout() const;
00098
00100 ~EBISLayout();
00101
00103
00109 VolIndex coarsen(const VolIndex& a_vof,
00110 const int& a_ratio,
00111 const DataIndex& a_datInd) const;
00112
00114
00120 Vector<VolIndex> refine(const VolIndex& a_vof,
00121 const int& a_ratio,
00122 const DataIndex& a_datInd) const;
00123
00125 int getMaxCoarseningRatio() const;
00126
00128 int getMaxRefinementRatio() const;
00129
00131 void define(const Box& a_domain,
00132 const DisjointBoxLayout& a_grids,
00133 const int& a_nghost,
00134 const LevelData<EBGraph>& a_graph,
00135 const LevelData<EBData> & a_data);
00136
00137 protected:
00139 RefCountedPtr<EBISLayoutImplem> m_implem;
00140 };
00141
00142
00144
00149 class EBISLayoutImplem
00150 {
00151 public:
00152
00154 const EBISBox& operator[](const DataIndex&) const;
00155
00157 EBISLayoutImplem();
00158
00160 ~EBISLayoutImplem();
00161
00163 const BoxLayout& getGrownLayout() const
00164 {
00165 return m_blGhostDom;
00166 }
00167
00168 const DisjointBoxLayout& getDisjointLayout() const
00169 {
00170 return m_dblInputDom;
00171 }
00172
00174
00180 VolIndex coarsen(const VolIndex& a_vof,
00181 const int& a_ratio,
00182 const DataIndex& a_datInd) const;
00183
00185
00191 Vector<VolIndex> refine(const VolIndex& a_vof,
00192 const int& a_ratio,
00193 const DataIndex& a_datInd) const;
00194
00196
00202 void setMaxRefinementRatio(const int& a_maxRefine);
00203
00204
00206
00212 void setMaxCoarseningRatio(const int& a_maxCoarsen);
00213
00215 int getMaxCoarseningRatio() const;
00216
00218 int getMaxRefinementRatio() const;
00219
00221 void define(const Box& a_domain,
00222 const DisjointBoxLayout& a_grids,
00223 const int& a_nghost,
00224 const LevelData<EBGraph>& a_graph,
00225 const LevelData<EBData> & a_data);
00226
00227
00228 private:
00230 BoxLayout m_blGhostDom;
00231
00233 DisjointBoxLayout m_dblInputDom;
00234
00236 Vector<EBISLayout> m_fineLevels;
00237
00239 Vector<EBISLayout> m_coarLevels;
00240
00242 int m_nghost;
00243
00245 int m_maxCoarseningRatio;
00246
00248 int m_maxRefinementRatio;
00249
00251 Box m_domain;
00252
00254 LayoutData<EBISBox> m_ebisBoxes;
00255
00256 private:
00257 void operator=(const EBISLayoutImplem& ebiin)
00258 {;}
00259 EBISLayoutImplem(const EBISLayoutImplem& ebiin)
00260 {;}
00261
00262 };
00263
00264
00265
00266 #endif