00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _POLYTROPICPHYSICS_H_
00012 #define _POLYTROPICPHYSICS_H_
00013
00014 #include <string>
00015 using std::string;
00016
00017 #include "Box.H"
00018 #include "IntVectSet.H"
00019 #include "Vector.H"
00020 #include "CH_HDF5.H"
00021
00022 #include "GodunovPhysics.H"
00023
00024 #include "UsingNamespace.H"
00025
00027
00038 class PolytropicPhysics: public GodunovPhysics
00039 {
00040 public:
00042
00044 PolytropicPhysics(const Real& a_smallPressure);
00045
00047
00049 ~PolytropicPhysics();
00050
00052
00054 Real getMaxWaveSpeed(const FArrayBox& a_U,
00055 const Box& a_box);
00056
00058
00060 virtual GodunovPhysics* new_godunovPhysics() const;
00061
00063
00066 int numConserved();
00067
00069
00074 Vector<string> stateNames();
00075
00077
00082 int numFluxes();
00083
00085
00087 void getFlux(FArrayBox& a_flux,
00088 const FArrayBox& a_whalf,
00089 const int& a_dir,
00090 const Box& a_box);
00091
00093
00098 int numPrimitives();
00099
00101
00109 void charAnalysis(FArrayBox& a_dW,
00110 const FArrayBox& a_W,
00111 const int& a_dir,
00112 const Box& a_box);
00113
00115
00123 void charSynthesis(FArrayBox& a_dW,
00124 const FArrayBox& a_W,
00125 const int& a_dir,
00126 const Box& a_box);
00127
00129
00136 void charValues(FArrayBox& a_lambda,
00137 const FArrayBox& a_W,
00138 const int& a_dir,
00139 const Box& a_box);
00140
00142
00147 void incrementSource(FArrayBox& a_S,
00148 const FArrayBox& a_W,
00149 const Box& a_box);
00150
00152
00156 void riemann(FArrayBox& a_WStar,
00157 const FArrayBox& a_WLeft,
00158 const FArrayBox& a_WRight,
00159 const FArrayBox& a_W,
00160 const Real& a_time,
00161 const int& a_dir,
00162 const Box& a_box);
00163
00165
00169 virtual void postNormalPred(FArrayBox& a_dWMinus,
00170 FArrayBox& a_dWPlus,
00171 const FArrayBox& a_W,
00172 const Real& a_dt,
00173 const Real& a_dx,
00174 const int& a_dir,
00175 const Box& a_box);
00176
00178
00180 void quasilinearUpdate(FArrayBox& a_dWdx,
00181 const FArrayBox& a_WHalf,
00182 const FArrayBox& a_W,
00183 const Real& a_scale,
00184 const int& a_dir,
00185 const Box& a_box);
00186
00188
00190 void consToPrim(FArrayBox& a_W,
00191 const FArrayBox& a_U,
00192 const Box& a_box);
00193
00195
00200 virtual Interval velocityInterval();
00201
00203
00207 virtual int pressureIndex();
00208
00210
00215 virtual Real smallPressure();
00216
00218
00223 virtual int bulkModulusIndex();
00224
00225 #ifdef CH_USE_HDF5
00226 virtual void expressions(HDF5HeaderData& a_holder) const;
00227 #endif
00228
00229 protected:
00230
00231 Real m_smallPressure;
00232
00233
00234 private:
00235
00236 void operator=(const PolytropicPhysics& a_input)
00237 {
00238 MayDay::Error("invalid operator");
00239 }
00240
00241
00242 PolytropicPhysics(const PolytropicPhysics& a_input)
00243 {
00244 MayDay::Error("invalid operator");
00245 }
00246 };
00247
00248 #endif