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 _EB_QUAD_CF_INTERP_H_
00030 #define _EB_QUAD_CF_INTERP_H_
00031
00032 #include "REAL.H"
00033 #include "FArrayBox.H"
00034 #include "LevelData.H"
00035 #include "DisjointBoxLayout.H"
00036 #include "EBISLayout.H"
00037 #include "EBCellFAB.H"
00038 #include "Interval.H"
00039 #include "Stencils.H"
00040 #include "QuadCFStencil.H"
00041 #include "BaseIVFAB.H"
00042
00044
00049 class EBQuadCFInterp
00050 {
00051 public:
00053
00056 EBQuadCFInterp();
00057
00059 ~EBQuadCFInterp();
00060
00062
00075 EBQuadCFInterp(const DisjointBoxLayout& a_dblFine,
00076 const DisjointBoxLayout& a_dblCoar,
00077 const EBISLayout& a_ebislFine,
00078 const EBISLayout& a_ebislCoar,
00079 const Box& a_domainCoar,
00080 const int& a_nref,
00081 const int& a_nvar);
00082
00084
00096 void define(const DisjointBoxLayout& a_dblFine,
00097 const DisjointBoxLayout& a_dblCoar,
00098 const EBISLayout& a_ebislFine,
00099 const EBISLayout& a_ebislCoar,
00100 const Box& a_domainCoar,
00101 const int& a_nref,
00102 const int& a_nvar);
00103
00105
00118 void
00119 interpolate(LevelData<EBCellFAB>& a_fineData,
00120 const LevelData<EBCellFAB>& a_coarData,
00121 const Interval& a_variables);
00122
00123 bool isDefined() const;
00124 protected:
00125
00126
00127
00128
00129
00130 void regCFInterp(BaseFab<Real> & a_phif,
00131 const BaseFab<Real> & a_phic,
00132 const QuadCFStencil& a_qcfs,
00133 const Side::LoHiSide a_hiorlo,
00134 const int& a_idir,
00135 const Interval& a_variables) const;
00136
00137 void irrCFInterp(EBCellFAB& a_phif,
00138 const EBCellFAB& a_phic,
00139 const DataIndex& a_datInd,
00140 const Interval& a_variables) const;
00141
00142
00143 void getPhiStar(BaseFab<Real> & a_phistar,
00144 const BaseFab<Real> & a_phic,
00145 const QuadCFStencil& a_qcfs,
00146 const Side::LoHiSide a_hiorlo,
00147 const int& a_idir,
00148 const Interval& a_variables) const;
00149
00150
00151 void interpOnIVS(BaseFab<Real> & a_phif,
00152 const BaseFab<Real> & a_phiStar,
00153 const QuadCFStencil& a_qcfs,
00154 const Side::LoHiSide a_hiorlo,
00155 const int& a_idir,
00156 const Interval& a_variables) const;
00157
00158
00159 bool extractFromSten(Real& a_value,
00160 const VoFStencil& a_vofsten,
00161 const EBCellFAB& a_coarData,
00162 const int& ivar) const;
00163
00164 void makeStencils();
00165
00166
00167 int m_nComp;
00168
00169
00170 int m_refRat;
00171
00172
00173
00174 LayoutData<QuadCFStencil> m_loQCFS[SpaceDim];
00175
00176
00177
00178 LayoutData<QuadCFStencil> m_hiQCFS[SpaceDim];
00179
00180
00181
00182 LevelData<EBCellFAB> m_coarBuffer;
00183
00184
00185
00186
00187
00188
00189
00190
00191 EBISLayout m_coarsenedFineEBISL;
00192 DisjointBoxLayout m_coarsenedFineGrids;
00193
00194
00195 DisjointBoxLayout m_inputFineGrids;
00196 DisjointBoxLayout m_inputCoarGrids;
00197 EBISLayout m_inputFineEBISL;
00198 EBISLayout m_inputCoarEBISL;
00199 Box m_domainCoar;
00200 Box m_domainFine;
00201
00203 bool m_isDefined;
00204
00205
00206
00207
00208 LayoutData<BaseIVFAB<VoFStencil> > m_stencils[SpaceDim];
00209
00210
00211
00212
00213 LayoutData<IntVectSet> m_irregRegions;
00214
00215 private:
00216
00217 EBQuadCFInterp(const EBQuadCFInterp& ebcin)
00218 {
00219 MayDay::Error("ebqcfi 2 invalid operator");
00220 }
00221 void operator=(const EBQuadCFInterp& fabin)
00222 {
00223 MayDay::Error("ebqcfi 3 invalid operator");
00224 }
00225 };
00226
00227 #endif