00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBPWLFILLPATCH_H_
00014 #define _EBPWLFILLPATCH_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 "Stencils.H"
00024 #include "PiecewiseLinearFillPatch.H"
00025 #include "BaseIVFAB.H"
00026 #include "EBIndexSpace.H"
00027 #include "NamespaceHeader.H"
00028
00029
00030
00031
00032
00033
00034
00035 class EBPWLFillPatch
00036 {
00037 public:
00038
00039
00040
00041
00042 EBPWLFillPatch();
00043
00044
00045 virtual ~EBPWLFillPatch();
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 EBPWLFillPatch(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 int& a_radius,
00074 const bool& a_forceNoEBCF = false,
00075 const EBIndexSpace* const a_eb = Chombo_EBIS::instance());
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 virtual void define(const DisjointBoxLayout& a_dblFine,
00096 const DisjointBoxLayout& a_dblCoar,
00097 const EBISLayout& a_ebislFine,
00098 const EBISLayout& a_ebislCoar,
00099 const ProblemDomain& a_domainCoar,
00100 const int& a_nref,
00101 const int& a_nvar,
00102 const int& a_radius,
00103 const bool& a_forceNoEBCF = false,
00104 const EBIndexSpace* const a_eb = Chombo_EBIS::instance());
00105
00106
00107
00108
00109
00110
00111 bool isDefined() const;
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 virtual void
00130 interpolate(LevelData<EBCellFAB>& a_fineData,
00131 const LevelData<EBCellFAB>& a_coarDataOld,
00132 const LevelData<EBCellFAB>& a_coarDataNew,
00133 const Real& a_coarTimeOld,
00134 const Real& a_coarTimeNew,
00135 const Real& a_fineTime,
00136 const Interval& a_variables);
00137
00138
00139 virtual void
00140 pwConstInterp(Real & a_fineValOld,
00141 Real & a_fineValNew,
00142 const VolIndex & a_fineVof,
00143 const int & a_ivar,
00144 const Real & a_coarDataOld,
00145 const Real & a_coarDataNew,
00146 const VolIndex & a_coarseVof)const;
00147
00148 virtual void
00149 incrementLinearInterp(Real & a_fineValOld,
00150 Real & a_fineValNew,
00151 const VolIndex & a_fineVof,
00152 const int & a_ivar,
00153 const Real & a_deltaOldOld,
00154 const Real & a_deltaNew,
00155 const Real & a_differenceFineLocCoarseLoc,
00156 const VolIndex & a_coarseVof)const;
00157
00158 virtual void
00159 definePieceWiseLinearFillPatch(const DisjointBoxLayout& a_dblfine,
00160 const DisjointBoxLayout& a_dblCoar);
00161
00162 protected:
00163
00164
00165 void
00166 interpolateFAB(EBCellFAB& a_fine,
00167 const EBCellFAB& a_coarOld,
00168 const EBCellFAB& a_coarNew,
00169 const Real& a_coarTimeOld,
00170 const Real& a_coarTimeNew,
00171 const Real& a_fineTime,
00172 const DataIndex& a_datInd,
00173 const Interval& a_variables) const;
00174
00175 void
00176 makeStencils();
00177
00178 void
00179 getIVS();
00180
00181 void
00182 getLoHiCenIVS();
00183
00184 void
00185 getSten();
00186
00187 void setDefaultValues();
00188
00189 bool m_isDefined;
00190
00191 bool extractFromSten(Real& a_value,
00192 const VoFStencil& a_vofsten,
00193 const EBCellFAB& a_coarData,
00194 const int& ivar) const;
00195
00196 virtual Real computeDMinMod(const BaseIVFAB<VoFStencil >& a_lostenBF,
00197 const BaseIVFAB<VoFStencil >& a_histenBF,
00198 const VolIndex& a_coarVoF,
00199 const EBCellFAB& a_coarData,
00200 const int& ivar,
00201 const IntVectSet& loInterpSet,
00202 const IntVectSet& hiInterpSet,
00203 const IntVectSet& ceInterpSet) const;
00204 bool m_forceNoEBCF;
00205
00206
00207 PiecewiseLinearFillPatch* m_patcher;
00208
00209
00210 ProblemDomain m_coarDomain;
00211 DisjointBoxLayout m_coarsenedFineGrids;
00212 DisjointBoxLayout m_fineGrids;
00213 DisjointBoxLayout m_coarGrids;
00214 EBISLayout m_coarsenedFineEBISL;
00215 EBISLayout m_fineEBISL;
00216
00217 LevelData<EBCellFAB> m_coarOnFDataOld;
00218 LevelData<EBCellFAB> m_coarOnFDataNew;
00219
00220 int m_refRat;
00221 int m_nComp;
00222 int m_radius;
00223 int m_coarGhostRad;
00224
00225
00226
00227 LayoutData<IntVectSet> m_irregRegionsFine;
00228
00229
00230
00231
00232 LayoutData<BaseIVFAB<VoFStencil> > m_hiStencils[SpaceDim];
00233 LayoutData<BaseIVFAB<VoFStencil> > m_loStencils[SpaceDim];
00234
00235
00236
00237
00238
00239 LayoutData<IntVectSet> m_coarCeInterp[SpaceDim];
00240 LayoutData<IntVectSet> m_coarLoInterp[SpaceDim];
00241 LayoutData<IntVectSet> m_coarHiInterp[SpaceDim];
00242
00243 private:
00244
00245 EBPWLFillPatch(const EBPWLFillPatch& ebcin)
00246 {
00247 MayDay::Error("ebpwl 2 invalid operator");
00248 }
00249 void operator=(const EBPWLFillPatch& fabin)
00250 {
00251 MayDay::Error("ebpwl 3 invalid operator");
00252 }
00253 };
00254
00255 #include "NamespaceFooter.H"
00256 #endif