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 _GODUNOVPHYSICS_H_
00053 #define _GODUNOVPHYSICS_H_
00054
00055 #include <string>
00056 using std::string;
00057
00058 #include "Box.H"
00059 #include "IntVectSet.H"
00060 #include "Vector.H"
00061 #include "PhysIBC.H"
00062
00064
00075 class GodunovPhysics
00076 {
00077 public:
00079
00081 GodunovPhysics();
00082
00084
00086 PhysIBC* getPhysIBC() const;
00087
00089
00091 void setPhysIBC(PhysIBC* a_bc);
00092
00094
00096 virtual ~GodunovPhysics();
00097
00099
00101 virtual void define(const ProblemDomain& a_domain,
00102 const Real& a_dx);
00104
00106 virtual Real getMaxWaveSpeed(const FArrayBox& a_U,
00107 const Box& a_box) = 0;
00108
00110
00112 virtual GodunovPhysics* new_godunovPhysics() const = 0;
00113
00115
00118 virtual int numConserved() = 0;
00119
00121
00126 virtual Vector<string> stateNames() = 0;
00127
00129
00134 virtual int numFluxes() = 0;
00135
00137
00139 virtual void getFlux(FArrayBox& a_flux,
00140 const FArrayBox& a_whalf,
00141 const int& a_dir,
00142 const Box& a_box) = 0;
00143
00145
00148 virtual bool isDefined() const;
00149
00151
00156 virtual int numPrimitives() = 0;
00157
00159
00167 virtual void charAnalysis(FArrayBox& a_dW,
00168 const FArrayBox& a_W,
00169 const int& a_dir,
00170 const Box& a_box) = 0;
00171
00173
00177 virtual void charSynthesis(FArrayBox& a_dW,
00178 const FArrayBox& a_W,
00179 const int& a_dir,
00180 const Box& a_box) = 0;
00181
00183
00185 virtual void charValues(FArrayBox& a_lambda,
00186 const FArrayBox& a_W,
00187 const int& a_dir,
00188 const Box& a_box) = 0;
00189
00191
00196 virtual void incrementSource(FArrayBox& a_S,
00197 const FArrayBox& a_W,
00198 const Box& a_box) = 0;
00199
00201
00205 virtual void riemann(FArrayBox& a_WStar,
00206 const FArrayBox& a_WLeft,
00207 const FArrayBox& a_WRight,
00208 const FArrayBox& a_W,
00209 const Real& a_time,
00210 const int& a_dir,
00211 const Box& a_box) = 0;
00212
00214
00218 virtual void postNormalPred(FArrayBox& a_dWMinus,
00219 FArrayBox& a_dWPlus,
00220 const FArrayBox& a_W,
00221 const int& a_dir,
00222 const Box& a_box) = 0;
00223
00225
00227 virtual void quasilinearUpdate(FArrayBox& a_AdWdx,
00228 const FArrayBox& a_wHalf,
00229 const FArrayBox& a_W,
00230 const Real& a_scale,
00231 const int& a_dir,
00232 const Box& a_box) = 0;
00233
00235
00237 virtual void consToPrim(FArrayBox& a_W,
00238 const FArrayBox& a_U,
00239 const Box& a_box) = 0;
00240
00242
00247 virtual Interval velocityInterval() = 0;
00248
00250
00254 virtual int pressureIndex() = 0;
00255
00257
00262 virtual Real smallPressure() = 0;
00263
00265
00270 virtual int bulkModulusIndex() = 0;
00271
00272
00273 protected:
00274
00275 bool m_isDefined;
00276
00277
00278 ProblemDomain m_domain;
00279 Real m_dx;
00280
00281
00282 PhysIBC* m_bc;
00283 bool m_isBCSet;
00284
00285
00286 private:
00287
00288 void operator=(const GodunovPhysics& a_input)
00289 {
00290 MayDay::Error("invalid operator");
00291 }
00292
00293
00294 GodunovPhysics(const GodunovPhysics& a_input)
00295 {
00296 MayDay::Error("invalid operator");
00297 }
00298 };
00299
00300 #endif