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 #ifndef LEVEL_GODUNOV_H
00029 #define LEVEL_GODUNOV_H
00030
00031
00032
00033
00034
00035
00036
00037 #include "FArrayBox.H"
00038 #include "DisjointBoxLayout.H"
00039 #include "LevelData.H"
00040 #include "PiecewiseLinearFillPatch.H"
00041 #include "ExtrapFillPatch.H"
00042 #include "LevelFluxRegister.H"
00043 #include "ProblemDomain.H"
00044 #include "PatchGodunov.H"
00045
00047
00049 class LevelGodunov
00050 {
00051 public:
00053
00056 LevelGodunov();
00057
00059
00063 ~LevelGodunov();
00064
00066
00073 void define(const DisjointBoxLayout& a_thisDisjointBoxLayout,
00074 const DisjointBoxLayout& a_coarserDisjointBoxLayout,
00075 const ProblemDomain& a_domain,
00076 const int& a_refineCoarse,
00077 const Real& a_dx,
00078 const PatchGodunov* const a_patchGodunovFactory,
00079 const bool& a_hasCoarser,
00080 const bool& a_hasFiner);
00081
00083
00096 Real step(LevelData<FArrayBox>& a_U,
00097 LevelFluxRegister& a_finerFluxRegister,
00098 LevelFluxRegister& a_coarserFluxRegister,
00099 const LevelData<FArrayBox>& a_S,
00100 const LevelData<FArrayBox>& a_UCoarseOld,
00101 const Real& a_TCoarseOld,
00102 const LevelData<FArrayBox>& a_UCoarseNew,
00103 const Real& a_TCoarseNew,
00104 const Real& a_time,
00105 const Real& a_dt);
00106
00108
00110 Real getMaxWaveSpeed(const LevelData<FArrayBox>& a_U);
00111
00112 protected:
00113
00114 bool m_defined;
00115
00116
00117 DisjointBoxLayout m_grids;
00118
00119
00120 PatchGodunov* m_patchGodunov;
00121
00122
00123 int m_numGhost;
00124
00125
00126 PiecewiseLinearFillPatch m_patcher;
00127
00128
00129 Real m_dx;
00130
00131
00132 ProblemDomain m_domain;
00133
00134
00135 int m_refineCoarse;
00136
00137
00138 int m_numCons;
00139
00140
00141 int m_numFluxes;
00142
00143
00144 bool m_hasCoarser;
00145 bool m_hasFiner;
00146
00147 private:
00148
00149 void operator=(const LevelGodunov& a_input)
00150 {
00151 MayDay::Error("invalid operator");
00152 }
00153
00154
00155 LevelGodunov(const LevelGodunov& a_input)
00156 {
00157 MayDay::Error("invalid operator");
00158 }
00159 };
00160
00161 #endif