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
00027
00030 class EBLevelGrid
00031 {
00032 public:
00034
00037 EBLevelGrid();
00038
00040 ~EBLevelGrid();
00041
00043
00047 EBLevelGrid(const DisjointBoxLayout& a_dbl,
00048 const ProblemDomain& a_domain,
00049 const int& a_numGhostEBISL,
00050 const EBIndexSpace* a_ebisPtr);
00051
00053 EBLevelGrid(const DisjointBoxLayout& a_dbl,
00054 const EBISLayout& a_ebisl,
00055 const ProblemDomain& a_domain);
00056
00058
00061 void define(const DisjointBoxLayout& a_dbl,
00062 const ProblemDomain& a_domain,
00063 const int& a_numGhostEBISL,
00064 const EBIndexSpace* a_ebisPtr);
00065
00066
00068
00071 void define(const DisjointBoxLayout& a_dbl,
00072 const EBISLayout& a_ebisl,
00073 const ProblemDomain& a_domain);
00074
00076 EBLevelGrid(const EBLevelGrid& ebcin);
00077
00079 EBLevelGrid& operator=(const EBLevelGrid& fabin);
00080
00082 int getGhost() const
00083 {
00084 CH_assert(m_isDefined);
00085 return m_nghost;
00086 }
00087
00089 DisjointBoxLayout getDBL() const
00090 {
00091 CH_assert(m_isDefined);
00092 return m_grids;
00093 }
00094
00096 EBISLayout getEBISL() const
00097 {
00098 CH_assert(m_isDefined);
00099 return m_ebisl;
00100 }
00101
00103 RefCountedPtr<LayoutData<IntVectSet> > getCFIVS() const
00104 {
00105 CH_assert(m_isDefined);
00106 return m_cfivs;
00107 }
00108
00110 bool isDefined() const
00111 {
00112 return m_isDefined;
00113 }
00114
00116 const EBIndexSpace* getEBIS() const
00117 {
00118 CH_assert(m_isDefined);
00119 return m_ebisPtr;
00120 }
00121
00123 const IntVectSet& getCoveringIVS() const
00124 {
00125 CH_assert(m_isDefined);
00126 if(!m_isCoveringIVSDefined)
00127 {
00128 EBLevelGrid& getAroundConst = (EBLevelGrid&)(*this);
00129 getAroundConst.defineCoveringIVS();
00130 }
00131 return m_coveringIVS;
00132 }
00133
00135 const ProblemDomain& getDomain() const
00136 {
00137 CH_assert(m_isDefined);
00138 return m_domain;
00139 }
00140
00142
00148 void setMaxRefinementRatio(const int& a_maxRefine)
00149 {
00150 CH_assert(m_isDefined);
00151 m_ebisl.setMaxRefinementRatio(a_maxRefine,m_ebisPtr);
00152 }
00153
00155
00161 void setMaxCoarseningRatio(const int& a_maxCoarsen)
00162 {
00163 CH_assert(m_isDefined);
00164 m_ebisl.setMaxCoarseningRatio(a_maxCoarsen);
00165 }
00166
00167 int getMaxCoarseningRatio() const
00168 {
00169 CH_assert(m_isDefined);
00170 return m_ebisl.getMaxCoarseningRatio();
00171 }
00172
00173 int
00174 getMaxRefinementRatio() const
00175 {
00176 CH_assert(m_isDefined);
00177 return m_ebisl.getMaxRefinementRatio();
00178 }
00180
00181
00182
00183 bool
00184 coarsenable(const int& a_ref) const;
00185
00187
00190 friend void coarsen(EBLevelGrid& a_eblgCoar,
00191 const EBLevelGrid& a_eblgFine,
00192 const int& a_ref);
00193
00194 protected:
00195 void defineCoveringIVS();
00196 void setDefaultValues();
00197 bool m_isDefined, m_isCoveringIVSDefined;
00198
00199 DisjointBoxLayout m_grids;
00200 EBISLayout m_ebisl;
00201 ProblemDomain m_domain;
00202 RefCountedPtr<LayoutData<IntVectSet> > m_cfivs;
00203 IntVectSet m_coveringIVS;
00204 const EBIndexSpace* m_ebisPtr;
00205 int m_nghost;
00206
00207 private:
00208 };
00209
00210 #include "NamespaceFooter.H"
00211 #endif