00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBMGINTERP_H_
00014 #define _EBMGINTERP_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 "EBStencil.H"
00025 #include "EBLevelGrid.H"
00026 #include "NamespaceHeader.H"
00027
00029
00032 class EBMGInterp
00033 {
00034 public:
00036
00039 EBMGInterp();
00040
00042 ~EBMGInterp();
00043
00045
00058 EBMGInterp(const DisjointBoxLayout& dblFine,
00059 const DisjointBoxLayout& dblCoar,
00060 const EBISLayout& ebislFine,
00061 const EBISLayout& ebislCoar,
00062 const ProblemDomain& domainCoar,
00063 const int& nref,
00064 const int& nvar,
00065 const EBIndexSpace* ebisPtr,
00066 const IntVect& ghostCellsPhi);
00067
00068
00070
00082 void define(const DisjointBoxLayout& dblFine,
00083 const DisjointBoxLayout& dblCoar,
00084 const EBISLayout& ebislFine,
00085 const EBISLayout& ebislCoar,
00086 const ProblemDomain& domainCoar,
00087 const int& nref,
00088 const int& nvar,
00089 const EBIndexSpace* ebisPtr,
00090 const IntVect& ghostCellsPhi);
00091
00093
00097 bool isDefined() const;
00098
00100
00104 void
00105 pwcInterp(LevelData<EBCellFAB>& a_fineData,
00106 const LevelData<EBCellFAB>& a_coarseData,
00107 const Interval& a_variables);
00108
00110
00115 void
00116 pwcInterpMG(LevelData<EBCellFAB>& a_fineData,
00117 const LevelData<EBCellFAB>& a_coarseData,
00118 const Interval& a_variables);
00119
00120 protected:
00121 void
00122 pwcInterpFAB(EBCellFAB& a_refCoar,
00123
00124 const EBCellFAB& a_fine,
00125 const DataIndex& a_datInd,
00126 const Interval& a_variables) const;
00127
00128 void
00129 setDefaultValues();
00130
00131 bool m_isDefined;
00132 IntVect m_ghost;
00133 DisjointBoxLayout m_coarGrids;
00134 DisjointBoxLayout m_fineGrids;
00135 DisjointBoxLayout m_refinedCoarseGrids;
00136 Copier m_copierFtoRC;
00137 Copier m_copierRCtoF;
00138 ProblemDomain m_coarDomain;
00139 ProblemDomain m_fineDomain;
00140
00141 EBISLayout m_coarEBISL;
00142 EBISLayout m_fineEBISL;
00143
00144 EBISLayout m_refinedCoarseEBISL;
00145
00146 int m_refRat;
00147 int m_nComp;
00148 LevelData<EBCellFAB> m_refinedCoarseData;
00149
00150
00151 LayoutData<RefCountedPtr<EBStencil> > m_interpEBStencil;
00152
00153 private:
00154
00155 EBMGInterp(const EBMGInterp& ebcin)
00156 {
00157 MayDay::Error("ebmgi 2 invalid operator");
00158 }
00159 void operator=(const EBMGInterp& fabin)
00160 {
00161 MayDay::Error("ebmgi 3 invalid operator");
00162 }
00163
00164 };
00165
00166 #include "NamespaceFooter.H"
00167 #endif