00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBADVECTLEVELINTEGRATOR_H_
00014 #define _EBADVECTLEVELINTEGRATOR_H_
00015
00016 #include "EBCellFAB.H"
00017 #include "DisjointBoxLayout.H"
00018 #include "LevelData.H"
00019 #include "PiecewiseLinearFillPatch.H"
00020 #include "AggEBPWLFillPatch.H"
00021 #include "EBFluxRegister.H"
00022 #include "ProblemDomain.H"
00023 #include "EBLevelGrid.H"
00024 #include "EBAdvectPatchIntegrator.H"
00025 #include "NamespaceHeader.H"
00026
00027
00028
00029
00030
00031 class EBAdvectLevelIntegrator
00032 {
00033 public:
00034
00035
00036
00037
00038
00039 ~EBAdvectLevelIntegrator()
00040 {;}
00041
00042
00043
00044
00045
00046
00047
00048 EBAdvectLevelIntegrator(const EBLevelGrid & a_thisEBLG,
00049 const EBLevelGrid & a_coarEBLG,
00050 const int& a_nRefine,
00051 const RealVect& a_dx,
00052 const bool& a_hasCoarser,
00053 const bool& a_hasFiner,
00054 const bool& a_useSlopeLimiting,
00055 const bool& a_forceNoEBCF = false,
00056 const EBIndexSpace* const a_eb = Chombo_EBIS::instance());
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 void
00073 advectToFacesCol(LevelData< EBFluxFAB >& a_extrapState,
00074 LayoutData< Vector< BaseIVFAB<Real>* > >& a_coveredPrimLo,
00075 LayoutData< Vector< BaseIVFAB<Real>* > >& a_coveredPrimHi,
00076 const LayoutData< Vector< Vector<VolIndex> > >& a_coveredFaceLo,
00077 const LayoutData< Vector< Vector<VolIndex> > >& a_coveredFaceHi,
00078 const LayoutData< Vector< IntVectSet> >& a_coveredSetsLo,
00079 const LayoutData< Vector< IntVectSet> >& a_coveredSetsHi,
00080 const LevelData< EBCellFAB >& a_consState,
00081 const LevelData< EBCellFAB >& a_normalVel,
00082 const LevelData< EBFluxFAB >& a_advectionVel,
00083 const LevelData< EBCellFAB >* a_consStateCoarseOld,
00084 const LevelData< EBCellFAB >* a_consStateCoarseNew,
00085 const LevelData< EBCellFAB >* a_normalVelCoarseOld,
00086 const LevelData< EBCellFAB >* a_normalVelCoarseNew,
00087 const Real& a_timeCoarseOld,
00088 const Real& a_timeCoarseNew,
00089 const Real& a_timeFine,
00090 const Real& a_dt,
00091 const LevelData<EBCellFAB>* const a_source = NULL,
00092 const LevelData<EBCellFAB>* const a_sourceCoarOld = NULL,
00093 const LevelData<EBCellFAB>* const a_sourceCoarNew = NULL);
00094
00095
00096
00097 void
00098 advectToFaces(EBFluxFAB& a_extrapState,
00099 Vector< BaseIVFAB<Real>* >& a_coveredPrimLo,
00100 Vector< BaseIVFAB<Real>* >& a_coveredPrimHi,
00101 const Vector< Vector<VolIndex> >& a_coveredFaceLo,
00102 const Vector< Vector<VolIndex> >& a_coveredFaceHi,
00103 const Vector< IntVectSet >& a_coveredSetsLo,
00104 const Vector< IntVectSet >& a_coveredSetsHi,
00105 const EBCellFAB & a_consState,
00106 const EBCellFAB & a_normalVel,
00107 const EBFluxFAB & a_advectionVel,
00108 const Box& a_cellBox,
00109 const EBISBox& a_ebisBox,
00110 const Real& a_dt,
00111 const Real& a_time,
00112 const EBCellFAB & a_source,
00113 const DataIndex& a_dit);
00114
00115
00116
00117 void
00118 advectToFacesBCG(LevelData< EBFluxFAB >& a_extrapState,
00119 const LevelData< EBCellFAB >& a_consState,
00120 const LevelData< EBCellFAB >& a_normalVel,
00121 const LevelData< EBFluxFAB >& a_advectionVel,
00122 const LevelData< EBCellFAB >* a_consStateCoarseOld,
00123 const LevelData< EBCellFAB >* a_consStateCoarseNew,
00124 const LevelData< EBCellFAB >* a_normalVelCoarseOld,
00125 const LevelData< EBCellFAB >* a_normalVelCoarseNew,
00126 const Real& a_timeCoarseOld,
00127 const Real& a_timeCoarseNew,
00128 const Real& a_timeFine,
00129 const Real& a_dt,
00130 const LevelData<EBCellFAB>* const a_source = NULL,
00131 const LevelData<EBCellFAB>* const a_sourceCoarOld = NULL,
00132 const LevelData<EBCellFAB>* const a_sourceCoarNew = NULL);
00133
00134
00135
00136 void
00137 advectToFacesBCG(EBFluxFAB& a_extrapState,
00138 const EBCellFAB & a_consState,
00139 const EBCellFAB & a_normalVel,
00140 const EBFluxFAB & a_advectionVel,
00141 const Box& a_cellBox,
00142 const EBISBox& a_ebisBox,
00143 const Real& a_dt,
00144 const Real& a_time,
00145 const EBCellFAB & a_source,
00146 const DataIndex& a_dit);
00147
00148
00149
00150 void
00151 computeNormalVel(LevelData<EBCellFAB>& a_normalVel,
00152 const LevelData<EBFluxFAB>& a_advectionVel,
00153 const LayoutData<Vector<BaseIVFAB<Real> * > >& a_coveredVeloLo,
00154 const LayoutData<Vector<BaseIVFAB<Real> * > >& a_coveredVeloHi,
00155 const LayoutData<Vector<Vector<VolIndex> > >& a_coveredFaceLo,
00156 const LayoutData<Vector<Vector<VolIndex> > >& a_coveredFaceHi) const;
00157
00158
00159 void resetBCs(const RefCountedPtr<EBPhysIBCFactory>& a_advectBC);
00160
00161 EBAdvectPatchIntegrator& getPatchAdvect(const DataIndex& a_dit)
00162 {
00163 return *(m_ebPatchAdvect[a_dit]);
00164 }
00165
00166 protected:
00167
00168 bool m_hasCoarser;
00169 bool m_hasFiner;
00170 bool m_useSlopeLimiting;
00171 bool m_forceNoEBCF;
00172 RealVect m_dx;
00173 int m_refRatCrse;
00174 int m_nVar;
00175 int m_nGhost;
00176
00177 EBLevelGrid m_thisEBLG;
00178 EBLevelGrid m_coarEBLG;
00179 RefCountedPtr<AggEBPWLFillPatch> m_fillPatch;
00180 RefCountedPtr<AggEBPWLFillPatch> m_fillPatchVel;
00181 ProblemDomain m_domain;
00182 LayoutData<RefCountedPtr<EBAdvectPatchIntegrator> > m_ebPatchAdvect;
00183
00184 private:
00185
00186
00187 void operator=(const EBAdvectLevelIntegrator& a_input)
00188 {
00189 MayDay::Error("invalid operator");
00190 }
00191 EBAdvectLevelIntegrator(const EBAdvectLevelIntegrator& a_input)
00192 {
00193 MayDay::Error("invalid operator");
00194 }
00195
00196 EBAdvectLevelIntegrator()
00197 {
00198 }
00199
00200 };
00201
00202 #include "NamespaceFooter.H"
00203 #endif