00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013 #ifndef _EBLEVELGODUNOV_H_
00014 #define _EBLEVELGODUNOV_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 "EBPatchGodunovFactory.H"
00024 #include "EBLevelRedist.H"
00025 #include "NamespaceHeader.H"
00026
00027
00028
00029
00030 class EBLevelGodunov
00031 {
00032 public:
00033
00034
00035
00036
00037 EBLevelGodunov();
00038
00039
00040
00041
00042
00043
00044 ~EBLevelGodunov();
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 void define(const DisjointBoxLayout& a_thisDBL,
00061 const DisjointBoxLayout& a_coarDBL,
00062 const EBISLayout& a_thisEBISL,
00063 const EBISLayout& a_coarEBISL,
00064 const ProblemDomain& a_DProblem,
00065 const int& a_nRefine,
00066 const RealVect& a_dx,
00067 const bool& a_useMassRedist,
00068 const bool& a_doSmushing,
00069 const bool& a_doRZCoords,
00070 const bool& a_hasSourceTerm,
00071 const EBPatchGodunovFactory* const a_patchGodunov,
00072 const bool& a_hasCoarser,
00073 const bool& a_hasFiner,
00074 const IntVect & a_ivGhost,
00075 const bool& a_forceNoEBCF = false
00076 );
00077
00078
00079 void floorConserved(LevelData<EBCellFAB>& a_consState,
00080 Real a_time, Real a_dt);
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 Real step(LevelData<EBCellFAB>& a_consState,
00096 LevelData<BaseIVFAB<Real> >& a_massDiff,
00097 EBFluxRegister& a_fineFluxRegister,
00098 EBFluxRegister& a_coarFluxRegister,
00099 const LevelData<EBCellFAB>& a_consStateCoarseOld,
00100 const LevelData<EBCellFAB>& a_consStateCoarseNew,
00101 const Real& a_time,
00102 const Real& a_TCold,
00103 const Real& a_TCNew,
00104 const Real& a_dt);
00105
00106 void
00107 getDrhoDtOverRho(LevelData<EBCellFAB>& a_drhoDt,
00108 const LevelData<EBCellFAB>& a_rhoNew,
00109 const LevelData<EBCellFAB>& a_rhoOld,
00110 const Real& a_dt);
00111
00112
00113 Real getMaxWaveSpeed(const LevelData<EBCellFAB>& a_state);
00114
00115 bool isDefined() const;
00116
00117
00118 protected:
00119 void fillConsState(LevelData<EBCellFAB>& a_consState,
00120 const LevelData<EBCellFAB>& a_consStateCoarseOld,
00121 const LevelData<EBCellFAB>& a_consStateCoarseNew,
00122 const Real& a_time,
00123 const Real& a_coarTimeOld,
00124 const Real& a_coarTimeNew);
00125
00126 void computeFlattening(Real a_time, Real a_dt,
00127 LevelData<EBCellFAB>& a_consState);
00128
00129 void doRegularUpdate(EBFluxRegister& a_fineFluxRegister,
00130 EBFluxRegister& a_coarFluxRegister,
00131 Real a_time, Real a_dt,
00132 LevelData<EBCellFAB>& a_consState);
00133
00134 Real doIrregularUpdate(EBFluxRegister& a_fineFluxRegister,
00135 EBFluxRegister& a_coarFluxRegister,
00136 LevelData<BaseIVFAB<Real> >& a_massDiff,
00137 Real a_time, Real a_dt,
00138 LevelData<EBCellFAB>& a_consState);
00139
00140
00141
00142 LayoutData<IntVectSet> m_irregSetsSmall;
00143
00144
00145 LayoutData<IntVectSet> m_irregSetsGrown[SpaceDim];
00146
00147 LevelData<BaseIFFAB<Real> > m_fluxInterpolants[SpaceDim];
00148 LevelData<BaseIVFAB<Real> > m_nonConsDivergence;
00149 LevelData<BaseIVFAB<Real> > m_ebIrregFaceFlux;
00150 LayoutData<IntVectSet> m_cfIVS;
00151 bool m_hasCoarser;
00152 bool m_hasFiner;
00153 DisjointBoxLayout m_thisGrids;
00154 DisjointBoxLayout m_coarGrids;
00155 EBISLayout m_thisEBISL;
00156 EBISLayout m_coarEBISL;
00157 bool m_isDefined;
00158 LayoutData<EBPatchGodunov*> m_ebPatchGodunov;
00159
00160 EBPatchGodunov* m_ebPatchGodunovSP;
00161 RealVect m_dx;
00162 ProblemDomain m_domain;
00163 int m_refRatCrse;
00164 int m_nCons;
00165 int m_nFlux;
00166 int m_nGhost;
00167 AggEBPWLFillPatch m_patcher;
00168 bool m_useMassRedist;
00169 EBLevelRedist m_ebLevelRedist;
00170 static int s_timestep;
00171 bool m_doSmushing;
00172 bool m_doRZCoords;
00173 bool m_hasSourceTerm;
00174 LevelData<EBCellFAB> m_flattening;
00175 bool m_forceNoEBCF;
00176 IntVect m_ivGhost;
00177 private:
00178
00179 void operator=(const EBLevelGodunov& a_input)
00180 {
00181 MayDay::Error("invalid operator");
00182 }
00183 EBLevelGodunov(const EBLevelGodunov& a_input)
00184 {
00185 MayDay::Error("invalid operator");
00186 }
00187 };
00188
00189 #include "NamespaceFooter.H"
00190 #endif