00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013
00014 #ifndef _EBQUADCFINTERP_H_
00015 #define _EBQUADCFINTERP_H_
00016
00017 #include "REAL.H"
00018 #include "FArrayBox.H"
00019 #include "LevelData.H"
00020 #include "DisjointBoxLayout.H"
00021 #include "EBIndexSpace.H"
00022 #include "EBISLayout.H"
00023 #include "EBCellFAB.H"
00024 #include "Interval.H"
00025 #include "Stencils.H"
00026 #include "QuadCFInterp.H"
00027 #include "BaseIVFAB.H"
00028 #include "CornerCopier.H"
00029 #include "VoFIterator.H"
00030 #include "NamespaceHeader.H"
00031
00033
00038 class EBQuadCFInterp: public QuadCFInterp
00039 {
00040 public:
00042
00045 EBQuadCFInterp();
00046
00048 virtual ~EBQuadCFInterp();
00049
00051
00066 EBQuadCFInterp(const DisjointBoxLayout& a_dblFine,
00067 const DisjointBoxLayout& a_dblCoar,
00068 const EBISLayout& a_ebislFine,
00069 const EBISLayout& a_ebislCoar,
00070 const ProblemDomain& a_domainCoar,
00071 const int& a_nref,
00072 const int& a_nvar,
00073 const LayoutData<IntVectSet>& a_cfivs,
00074 const EBIndexSpace* const a_ebisPtr = Chombo_EBIS::instance(),
00075 bool a_doEBCFCrossing = true);
00076
00078
00092 void define(const DisjointBoxLayout& a_dblFine,
00093 const DisjointBoxLayout& a_dblCoar,
00094 const EBISLayout& a_ebislFine,
00095 const EBISLayout& a_ebislCoar,
00096 const ProblemDomain& a_domainCoar,
00097 const int& a_nref,
00098 const int& a_nvar,
00099 const LayoutData<IntVectSet>& a_cfivs,
00100 const EBIndexSpace* const a_ebisPtr = Chombo_EBIS::instance(),
00101 bool a_doEBCFCrossing = true);
00102
00103
00105
00121 void
00122 interpolate(LevelData<EBCellFAB>& a_fineData,
00123 const LevelData<EBCellFAB>& a_coarData,
00124 const Interval& a_variables,
00125 bool a_doOnlyRegularInterp = false);
00126
00127 bool isDefined() const;
00128
00129 protected:
00130
00132
00137 bool getEBCFIVS(const LayoutData<IntVectSet>& a_cfivs);
00138
00140
00144 void buildEBCFStencils();
00145
00147
00151 void buildEBCFCornerStencils(const LayoutData<IntVectSet>& a_cfivs);
00152
00154
00157 void interpEBCFCrossing(LevelData<EBCellFAB>& a_fineData,
00158 const LevelData<EBCellFAB>& a_coarData,
00159 const Interval& a_variables);
00160
00162
00166 void interpEBCFCorners(LevelData<EBCellFAB>& a_fineData,
00167 const LevelData<EBCellFAB>& a_coarData,
00168 const Interval& a_variables);
00169
00170
00171
00172 EBISLayout m_ebislCoar;
00173 EBISLayout m_ebislCoarsenedFine;
00174 EBISLayout m_ebislFine;
00175 DisjointBoxLayout m_gridsCoar;
00176 DisjointBoxLayout m_gridsCoarsenedFine;
00177 DisjointBoxLayout m_gridsFine;
00178 ProblemDomain m_domainFine;
00179 ProblemDomain m_domainCoar;
00180 bool m_isDefined;
00181 int m_nComp;
00182 int m_refRat;
00183
00184 LevelData<EBCellFAB> m_ebBufferCoarsenedFine;
00185
00186
00187 LayoutData<VoFIterator> m_vofItEBCFLo[SpaceDim];
00188 LayoutData<VoFIterator> m_vofItEBCFHi[SpaceDim];
00189 LayoutData<VoFIterator> m_vofItCorners;
00190 LayoutData<VoFIterator> m_vofItEdges;
00191
00192
00193
00194 LayoutData<BaseIVFAB<VoFStencil> > m_coarStencilLo[SpaceDim];
00195 LayoutData<BaseIVFAB<VoFStencil> > m_coarStencilHi[SpaceDim];
00196
00197
00198
00199
00200
00201 LayoutData<BaseIVFAB<VoFStencil> > m_fineStencilLo[SpaceDim];
00202 LayoutData<BaseIVFAB<VoFStencil> > m_fineStencilHi[SpaceDim];
00203
00204
00205 LayoutData<IntVectSet> m_ebcfivsLo[SpaceDim];
00206 LayoutData<IntVectSet> m_ebcfivsHi[SpaceDim];
00207 LayoutData<BaseIVFAB<VoFStencil> > m_stencilCorners;
00208 LayoutData<BaseIVFAB<VoFStencil> > m_stencilEdges;
00209
00210
00211 CornerCopier m_cornerCopier;
00212
00213 bool m_doEBCFCrossing;
00214
00215 private:
00216
00217
00218 EBQuadCFInterp(const EBQuadCFInterp& ebcin)
00219 {
00220 MayDay::Error("ebqcfi 2 invalid operator");
00221 }
00222 void operator=(const EBQuadCFInterp& fabin)
00223 {
00224 MayDay::Error("ebqcfi 3 invalid operator");
00225 }
00226 };
00227
00228 #include "NamespaceFooter.H"
00229 #endif