00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBLEVELGRID_H_
00014 #define _EBLEVELGRID_H_
00015
00016 #include "REAL.H"
00017 #include "FArrayBox.H"
00018 #include "LevelData.H"
00019 #include "DisjointBoxLayout.H"
00020 #include "EBISLayout.H"
00021 #include "EBCellFAB.H"
00022 #include "Interval.H"
00023 #include "EBIndexSpace.H"
00024 #include "NamespaceHeader.H"
00025
00026
00027
00028
00029
00030 class EBLevelGrid
00031 {
00032 public:
00033
00034
00035
00036
00037 EBLevelGrid();
00038
00039
00040 ~EBLevelGrid();
00041
00042
00043
00044
00045
00046
00047 EBLevelGrid(const DisjointBoxLayout& a_dbl,
00048 const ProblemDomain& a_domain,
00049 const int& a_numGhostEBISL,
00050 const EBIndexSpace* a_ebisPtr);
00051
00052
00053 EBLevelGrid(const DisjointBoxLayout& a_dbl,
00054 const EBISLayout& a_ebisl,
00055 const ProblemDomain& a_domain);
00056
00057
00058
00059
00060
00061 void define(const DisjointBoxLayout& a_dbl,
00062 const ProblemDomain& a_domain,
00063 const int& a_numGhostEBISL,
00064 const EBIndexSpace* a_ebisPtr);
00065
00066
00067
00068
00069
00070
00071 void define(const DisjointBoxLayout& a_dbl,
00072 const EBISLayout& a_ebisl,
00073 const ProblemDomain& a_domain);
00074
00075
00076 EBLevelGrid(const EBLevelGrid& ebcin);
00077
00078
00079 int getGhost() const
00080 {
00081 CH_assert(m_isDefined);
00082 return m_nghost;
00083 }
00084
00085
00086 DisjointBoxLayout getDBL() const
00087 {
00088 CH_assert(m_isDefined);
00089 return m_grids;
00090 }
00091
00092
00093 EBISLayout getEBISL() const
00094 {
00095 CH_assert(m_isDefined);
00096 return m_ebisl;
00097 }
00098
00099
00100 RefCountedPtr<LayoutData<IntVectSet> > getCFIVS() const
00101 {
00102 CH_assert(m_isDefined);
00103 return m_cfivs;
00104 }
00105
00106
00107 bool isDefined() const
00108 {
00109 return m_isDefined;
00110 }
00111
00112
00113 const EBIndexSpace* getEBIS() const
00114 {
00115 CH_assert(m_isDefined);
00116 return m_ebisPtr;
00117 }
00118
00119
00120 const IntVectSet& getCoveringIVS() const
00121 {
00122 CH_assert(m_isDefined);
00123 if (!m_isCoveringIVSDefined)
00124 {
00125 EBLevelGrid& getAroundConst = (EBLevelGrid&)(*this);
00126 getAroundConst.defineCoveringIVS();
00127 }
00128 return m_coveringIVS;
00129 }
00130
00131
00132 const ProblemDomain& getDomain() const
00133 {
00134 CH_assert(m_isDefined);
00135 return m_domain;
00136 }
00137
00138
00139
00140
00141
00142
00143
00144
00145 void setMaxRefinementRatio(const int& a_maxRefine)
00146 {
00147 CH_assert(m_isDefined);
00148 m_ebisl.setMaxRefinementRatio(a_maxRefine,m_ebisPtr);
00149 }
00150
00151
00152
00153
00154
00155
00156
00157
00158 void setMaxCoarseningRatio(const int& a_maxCoarsen,
00159 const EBIndexSpace* const a_ebisPtr)
00160 {
00161 CH_assert(m_isDefined);
00162 m_ebisl.setMaxCoarseningRatio(a_maxCoarsen,a_ebisPtr);
00163 }
00164
00165 int getMaxCoarseningRatio() const
00166 {
00167 CH_assert(m_isDefined);
00168 return m_ebisl.getMaxCoarseningRatio();
00169 }
00170
00171 int
00172 getMaxRefinementRatio() const
00173 {
00174 CH_assert(m_isDefined);
00175 return m_ebisl.getMaxRefinementRatio();
00176 }
00177
00178
00179
00180
00181 bool
00182 coarsenable(const int& a_ref) const;
00183
00184
00185
00186
00187
00188 friend void coarsen(EBLevelGrid& a_eblgCoar,
00189 const EBLevelGrid& a_eblgFine,
00190 const int& a_ref);
00191
00192
00193 friend void refine(EBLevelGrid& a_eblgCoar,
00194 const EBLevelGrid& a_eblgFine,
00195 const int& a_ref);
00196
00197 protected:
00198 void defineCoveringIVS();
00199 void setDefaultValues();
00200 bool m_isDefined, m_isCoveringIVSDefined;
00201
00202 DisjointBoxLayout m_grids;
00203 EBISLayout m_ebisl;
00204 ProblemDomain m_domain;
00205 RefCountedPtr<LayoutData<IntVectSet> > m_cfivs;
00206 IntVectSet m_coveringIVS;
00207 const EBIndexSpace* m_ebisPtr;
00208 int m_nghost;
00209
00210 private:
00211 };
00212
00213 #include "NamespaceFooter.H"
00214 #endif