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
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #ifndef _PATCHGODUNOV_H_
00053 #define _PATCHGODUNOV_H_
00054
00055 #include "Box.H"
00056 #include "IntVectSet.H"
00057 #include "Vector.H"
00058 #include "FluxBox.H"
00059
00060 #include "GodunovPhysics.H"
00061 #include "GodunovUtilities.H"
00062
00064
00071 class PatchGodunov
00072 {
00073 public:
00075
00077 PatchGodunov();
00078
00080
00082 virtual ~PatchGodunov();
00083
00085
00087 virtual void define(const ProblemDomain& a_domain,
00088 const Real& a_dx,
00089 const GodunovPhysics* const a_gdnvPhysicsPtr,
00090 const int& a_normalPredOrder,
00091 const bool& a_useFourthOrderSlopes,
00092 const bool& a_usePrimLimiting,
00093 const bool& a_useCharLimiting,
00094 const bool& a_useFlattening,
00095 const bool& a_useArtificialViscosity,
00096 const Real& a_artificialViscosity);
00097
00099
00101 virtual void setCurrentTime(const Real& a_currentTime);
00102
00104
00106 virtual void setCurrentBox(const Box& a_currentBox);
00107
00109
00116 virtual void updateState(FArrayBox& a_U,
00117 FluxBox& a_F,
00118 Real& a_maxWaveSpeed,
00119 const FArrayBox& a_S,
00120 const Real& a_dt,
00121 const Box& a_box);
00122
00124
00132 virtual void computeWHalf(FluxBox& a_WHalf,
00133 const FArrayBox& a_U,
00134 const FArrayBox& a_S,
00135 const Real& a_dt,
00136 const Box& a_box);
00137
00139
00143 virtual void computeUpdate(FArrayBox& a_dU,
00144 FluxBox& a_Flux,
00145 const FArrayBox& a_U,
00146 const FluxBox& a_WHalf,
00147 const Real& a_dt,
00148 const Box& a_box);
00149
00151
00153 void computeFluxes(FluxBox& a_F,
00154 const FluxBox& a_wHalf,
00155 const Box& a_box);
00156
00158
00161 void PLMNormalPred(FArrayBox& a_WMinus,
00162 FArrayBox& a_WPlus,
00163 const Real& a_dt,
00164 const Real& a_dx,
00165 const FArrayBox& a_W,
00166 const FArrayBox& a_flat,
00167 const int& a_dir,
00168 const Box& a_box);
00169
00171
00174 void PPMNormalPred(FArrayBox& a_WMinus,
00175 FArrayBox& a_WPlus,
00176 const Real& a_dt,
00177 const Real& a_dx,
00178 const FArrayBox& a_W,
00179 const FArrayBox& a_flat,
00180 const int& a_dir,
00181 const Box& a_box);
00182
00184
00186 GodunovPhysics* getGodunovPhysicsPtr();
00187
00189
00192 virtual bool isDefined() const;
00193
00194
00195 protected:
00196
00197 ProblemDomain m_domain;
00198 Real m_dx;
00199
00200
00201 GodunovPhysics* m_gdnvPhysics;
00202
00203
00204 GodunovUtilities m_util;
00205
00206
00207 int m_normalPredOrder;
00208
00209
00210 bool m_useFourthOrderSlopes;
00211
00212
00213 bool m_usePrimLimiting;
00214 bool m_useCharLimiting;
00215
00216
00217 bool m_useFlattening;
00218
00219
00220 bool m_useArtificialViscosity;
00221 Real m_artificialViscosity;
00222
00223
00224 Real m_currentTime;
00225 bool m_isCurrentTimeSet;
00226
00227
00228 Box m_currentBox;
00229 bool m_isCurrentBoxSet;
00230
00231
00232 bool m_isDefined;
00233
00234
00235 private:
00236
00237 void operator=(const PatchGodunov& a_input)
00238 {
00239 MayDay::Error("invalid operator");
00240 }
00241
00242
00243 PatchGodunov(const PatchGodunov& a_input)
00244 {
00245 MayDay::Error("invalid operator");
00246 }
00247 };
00248
00249 #endif