00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _PATCHGODUNOV_H_
00012 #define _PATCHGODUNOV_H_
00013
00014 #include "Box.H"
00015 #include "IntVectSet.H"
00016 #include "Vector.H"
00017 #include "FluxBox.H"
00018
00019 #include "GodunovPhysics.H"
00020 #include "GodunovUtilities.H"
00021 #include "NamespaceHeader.H"
00022
00023 class HDF5HeaderData;
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 class PatchGodunov
00034 {
00035 public:
00036
00037
00038
00039 PatchGodunov();
00040
00041
00042
00043
00044 virtual ~PatchGodunov();
00045
00046
00047
00048
00049 virtual void define(
00050 const ProblemDomain& a_domain,
00051
00052 const Real& a_dx,
00053
00054 const GodunovPhysics* const a_gdnvPhysicsPtr,
00055
00056 const int& a_normalPredOrder,
00057
00058 const bool& a_useFourthOrderSlopes,
00059
00060 const bool& a_usePrimLimiting,
00061
00062 const bool& a_useCharLimiting,
00063
00064 const bool& a_useFlattening,
00065
00066 const bool& a_useArtificialViscosity,
00067
00068 const Real& a_artificialViscosity);
00069
00070
00071
00072
00073 virtual void setCurrentTime(const Real& a_currentTime);
00074
00075
00076
00077
00078 virtual void setCurrentBox(const Box& a_currentBox);
00079
00080
00081
00082
00083 virtual void updateState(
00084 FArrayBox& a_U,
00085
00086 FluxBox& a_F,
00087
00088 Real& a_maxWaveSpeed,
00089
00090 const FArrayBox& a_S,
00091
00092 const Real& a_dt,
00093
00094 const Box& a_box);
00095
00096 virtual void updateState(
00097 FArrayBox& a_U,
00098
00099 FluxBox& a_F,
00100
00101 FluxBox& a_wHalf,
00102
00103 Real& a_maxWaveSpeed,
00104
00105 const FArrayBox& a_S,
00106
00107 const Real& a_dt,
00108
00109 const Box& a_box);
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 virtual void computeWHalf(
00121 FluxBox& a_WHalf,
00122
00123 const FArrayBox& a_U,
00124
00125 const FArrayBox& a_S,
00126
00127 const Real& a_dt,
00128
00129 const Box& a_box);
00130
00131
00132
00133
00134
00135
00136 virtual void computeUpdate(
00137 FArrayBox& a_dU,
00138
00139 FluxBox& a_F,
00140
00141 const FArrayBox& a_U,
00142
00143 const FluxBox& a_WHalf,
00144
00145 const Real& a_dt,
00146
00147 const Box& a_box);
00148
00149
00150
00151
00152 void computeFluxes(FluxBox& a_F,
00153 const FluxBox& a_WHalf,
00154 const Box& a_box);
00155
00156
00157
00158
00159
00160
00161 void CTUNormalPred(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
00170
00171
00172
00173
00174 void PLMNormalPred(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
00183
00184
00185
00186
00187 void PPMNormalPred(FArrayBox& a_WMinus,
00188 FArrayBox& a_WPlus,
00189 const Real& a_dt,
00190 const Real& a_dx,
00191 const FArrayBox& a_W,
00192 const FArrayBox& a_flat,
00193 const int& a_dir,
00194 const Box& a_box);
00195
00196
00197
00198
00199 GodunovPhysics* getGodunovPhysicsPtr();
00200
00201
00202 const ProblemDomain& problemDomain() const;
00203
00204
00205
00206
00207
00208 virtual bool isDefined() const;
00209
00210
00211 void highOrderLimiter(bool a_highOrderLimiter);
00212
00213
00214 Real dx() const;
00215
00216 #ifdef CH_USE_HDF5
00217 virtual void expressions(HDF5HeaderData& a_holder) const
00218 {
00219 }
00220 #endif
00221
00222 protected:
00223
00224 ProblemDomain m_domain;
00225 Real m_dx;
00226
00227
00228 GodunovPhysics* m_gdnvPhysics;
00229
00230
00231 GodunovUtilities m_util;
00232
00233
00234 int m_normalPredOrder;
00235
00236
00237 bool m_useFourthOrderSlopes;
00238
00239
00240 bool m_usePrimLimiting;
00241 bool m_useCharLimiting;
00242
00243
00244 bool m_useFlattening;
00245
00246
00247 bool m_useArtificialViscosity;
00248 Real m_artificialViscosity;
00249
00250
00251 Real m_currentTime;
00252 bool m_isCurrentTimeSet;
00253
00254
00255 Box m_currentBox;
00256 bool m_isCurrentBoxSet;
00257
00258
00259 bool m_isDefined;
00260
00261 private:
00262
00263
00264 void operator=(const PatchGodunov&);
00265 PatchGodunov(const PatchGodunov&);
00266 };
00267
00268 #include "NamespaceFooter.H"
00269 #endif