00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _EBPWQUADFILLPATCH_H_
00012 #define _EBPWQUADFILLPATCH_H_
00013
00014 #include "REAL.H"
00015 #include "FArrayBox.H"
00016 #include "LevelData.H"
00017 #include "DisjointBoxLayout.H"
00018 #include "EBISLayout.H"
00019 #include "EBCellFAB.H"
00020 #include "Interval.H"
00021 #include "Stencils.H"
00022 #include "BaseIVFAB.H"
00023 #include "EBIndexSpace.H"
00024 #include "EBArith.H"
00025 #include "CornerCopier.H"
00026 #include "NamespaceHeader.H"
00027
00029
00034 class EBPWQuadFillPatch
00035 {
00036 public:
00038
00041 EBPWQuadFillPatch();
00042
00044 ~EBPWQuadFillPatch();
00045
00047
00062 EBPWQuadFillPatch(const DisjointBoxLayout& a_dblFine,
00063 const DisjointBoxLayout& a_dblCoar,
00064 const EBISLayout& a_ebislFine,
00065 const EBISLayout& a_ebislCoar,
00066 const ProblemDomain& a_domainCoar,
00067 const int& a_nref,
00068 const int& a_nvar,
00069 const int& a_radius);
00070
00072
00086 void define(const DisjointBoxLayout& a_dblFine,
00087 const DisjointBoxLayout& a_dblCoar,
00088 const EBISLayout& a_ebislFine,
00089 const EBISLayout& a_ebislCoar,
00090 const ProblemDomain& a_domainCoar,
00091 const int& a_nref,
00092 const int& a_nvar,
00093 const int& a_radius,
00094 const EBIndexSpace* const a_eb = Chombo_EBIS::instance());
00095
00097
00101 bool isDefined() const;
00102
00104
00119 void
00120 interpolate(LevelData<EBCellFAB>& a_fineData,
00121 const LevelData<EBCellFAB>& a_coarDataOld,
00122 const LevelData<EBCellFAB>& a_coarDataNew,
00123 const Real& a_coarTimeOld,
00124 const Real& a_coarTimeNew,
00125 const Real& a_fineTime,
00126 const Interval& a_variables);
00127
00128 protected:
00129
00130
00131 void
00132 interpolateFAB(EBCellFAB& a_fine,
00133 const EBCellFAB& a_coarOld,
00134 const EBCellFAB& a_coarNew,
00135 const Real& a_coarTimeOld,
00136 const Real& a_coarTimeNew,
00137 const Real& a_fineTime,
00138 const DataIndex& a_datInd,
00139 const Interval& a_variables) const;
00140
00141 void
00142 makeStencils();
00143
00144 void setDefaultValues();
00145
00146 bool m_isDefined;
00147
00148 bool extractFromSten(Real& a_value,
00149 const VoFStencil& a_vofsten,
00150 const EBCellFAB& a_coarData,
00151 const int& ivar) const;
00152
00153 Real computeDMinMod(const BaseIVFAB<VoFStencil >& a_lostenBF,
00154 const BaseIVFAB<VoFStencil >& a_histenBF,
00155 const VolIndex& a_coarVoF,
00156 const EBCellFAB& a_coarData,
00157 const int& ivar,
00158 const IntVectSet& loInterpSet,
00159 const IntVectSet& hiInterpSet,
00160 const IntVectSet& ceInterpSet) const;
00161
00162
00163 ProblemDomain m_coarDomain;
00164 DisjointBoxLayout m_coarsenedFineGrids;
00165 DisjointBoxLayout m_fineGrids;
00166 DisjointBoxLayout m_coarGrids;
00167 EBISLayout m_coarsenedFineEBISL;
00168 EBISLayout m_fineEBISL;
00169
00170 LevelData<EBCellFAB> m_coarsenedFineData;
00171 LevelData<EBCellFAB> m_coarOnFDataOld;
00172 LevelData<EBCellFAB> m_coarOnFDataNew;
00173
00174 int m_refRat;
00175 int m_nComp;
00176 int m_radius;
00177 int m_coarGhostRad;
00178
00179
00180
00181 LayoutData<IntVectSet> m_irregRegionsFine;
00182
00183
00184
00185
00186 LayoutData<BaseIVFAB<VoFStencil> > m_hiStencils[SpaceDim];
00187 LayoutData<BaseIVFAB<VoFStencil> > m_loStencils[SpaceDim];
00188
00189
00190
00191
00192
00193 LayoutData<IntVectSet> m_coarCeInterp[SpaceDim];
00194 LayoutData<IntVectSet> m_coarLoInterp[SpaceDim];
00195 LayoutData<IntVectSet> m_coarHiInterp[SpaceDim];
00196
00197
00198 CornerCopier m_cornerCopier;
00199
00200 private:
00201
00202 EBPWQuadFillPatch(const EBPWQuadFillPatch& ebcin)
00203 {
00204 MayDay::Error("ebpwl 2 invalid operator");
00205 }
00206 void operator=(const EBPWQuadFillPatch& fabin)
00207 {
00208 MayDay::Error("ebpwl 3 invalid operator");
00209 }
00210 };
00211
00212 #include "NamespaceFooter.H"
00213 #endif