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 _MHDPHYSICS_H_
00053 #define _MHDPHYSICS_H_
00054
00055 #include <string>
00056 using std::string;
00057
00058 #include "Box.H"
00059 #include "IntVectSet.H"
00060 #include "Vector.H"
00061
00062 #include "GodunovPhysics.H"
00063
00065
00072 class MHDPhysics: public GodunovPhysics
00073 {
00074 public:
00076
00078 MHDPhysics(const Real& a_smallPressure);
00079
00081
00083 ~MHDPhysics();
00084
00086
00088 Real getMaxWaveSpeed(const FArrayBox& a_U,
00089 const Box& a_box);
00090
00092
00094 virtual GodunovPhysics* new_godunovPhysics() const;
00095
00097
00100 int numConserved();
00101
00103
00106 Vector<string> stateNames();
00107
00109
00112 Vector<string> plotNames();
00113
00115
00118 int numFluxes();
00119
00121
00123 void getFlux(FArrayBox& a_flux,
00124 const FArrayBox& a_whalf,
00125 const int& a_dir,
00126 const Box& a_box);
00127
00129
00132 int numPrimitives();
00133
00135
00143 void charAnalysis(FArrayBox& a_dW,
00144 const FArrayBox& a_W,
00145 const int& a_dir,
00146 const Box& a_box);
00147
00149
00157 void charSynthesis(FArrayBox& a_dW,
00158 const FArrayBox& a_W,
00159 const int& a_dir,
00160 const Box& a_box);
00161
00163
00170 void charValues(FArrayBox& a_lambda,
00171 const FArrayBox& a_W,
00172 const int& a_dir,
00173 const Box& a_box);
00174
00176
00181 void incrementSource(FArrayBox& a_S,
00182 const FArrayBox& a_W,
00183 const Box& a_box);
00184
00186
00190 void riemann(FArrayBox& a_WStar,
00191 const FArrayBox& a_WLeft,
00192 const FArrayBox& a_WRight,
00193 const FArrayBox& a_W,
00194 const Real& a_time,
00195 const int& a_dir,
00196 const Box& a_box);
00197
00199
00203 virtual void postNormalPred(FArrayBox& a_dWMinus,
00204 FArrayBox& a_dWPlus,
00205 const FArrayBox& a_W,
00206 const Real& a_dt,
00207 const Real& a_dx,
00208 const int& a_dir,
00209 const Box& a_box);
00210
00212
00214 void quasilinearUpdate(FArrayBox& a_dWdx,
00215 const FArrayBox& a_WHalf,
00216 const FArrayBox& a_W,
00217 const Real& a_scale,
00218 const int& a_dir,
00219 const Box& a_box);
00220
00222
00224 void consToPrim(FArrayBox& a_W,
00225 const FArrayBox& a_U,
00226 const Box& a_box);
00227
00229
00234 virtual Interval velocityInterval();
00235
00237
00241 virtual int pressureIndex();
00242
00244
00249 virtual Real smallPressure();
00250
00252
00257 virtual int bulkModulusIndex();
00258
00259
00260 protected:
00262 Real m_smallPressure;
00263
00264
00265 private:
00266
00267 void operator=(const MHDPhysics& a_input)
00268 {
00269 MayDay::Error("invalid operator");
00270 }
00271
00272
00273 MHDPhysics(const MHDPhysics& a_input)
00274 {
00275 MayDay::Error("invalid operator");
00276 }
00277 };
00278
00279 #endif