00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _ADVECTPHYSICS_H_
00012 #define _ADVECTPHYSICS_H_
00013
00014 #include "GodunovPhysics.H"
00015 #include "FluxBox.H"
00016
00017 #include "NamespaceHeader.H"
00018
00020
00022 class AdvectPhysics : public GodunovPhysics
00023 {
00024 public:
00026
00028 AdvectPhysics();
00029
00031
00033 ~AdvectPhysics();
00034
00036
00038 virtual Real getMaxWaveSpeed(const FArrayBox& a_U,
00039 const Box& a_box);
00040
00042
00046 virtual GodunovPhysics* new_godunovPhysics() const;
00047
00049
00052 virtual int numConserved()
00053 {
00054 return 1;
00055 }
00056
00058
00061 virtual Vector<string> stateNames()
00062 {
00063 Vector<string> retval(1, string("scalar"));
00064
00065 return retval;
00066 }
00067
00069
00074 virtual int numFluxes()
00075 {
00076 return 1;
00077 }
00078
00080
00082 virtual void getFlux(FArrayBox& a_flux,
00083 const FArrayBox& a_WHalf,
00084 const int& a_dir,
00085 const Box& a_box);
00086
00088
00091 virtual bool isDefined() const
00092 {
00093 return m_isDefined;
00094 }
00095
00097
00102 virtual int numPrimitives()
00103 {
00104 return 1;
00105 }
00106
00108
00116 virtual void charAnalysis(FArrayBox& a_dW,
00117 const FArrayBox& a_W,
00118 const int& a_dir,
00119 const Box& a_box)
00120 {
00121
00122
00123 }
00124
00126
00134 virtual void charSynthesis(FArrayBox& a_dW,
00135 const FArrayBox& a_W,
00136 const int& a_dir,
00137 const Box& a_box)
00138 {
00139
00140
00141 }
00142
00144
00151 virtual void charValues(FArrayBox& a_lambda,
00152 const FArrayBox& a_W,
00153 const int& a_dir,
00154 const Box& a_box);
00155
00157
00162 virtual void incrementSource(FArrayBox& a_S,
00163 const FArrayBox& a_W,
00164 const Box& a_box)
00165 {
00166
00167
00168 }
00169
00171
00175 virtual void riemann(FArrayBox& a_WGdnv,
00176 const FArrayBox& a_WLeft,
00177 const FArrayBox& a_WRight,
00178 const FArrayBox& a_W,
00179 const Real& a_time,
00180 const int& a_dir,
00181 const Box& a_box);
00182
00184
00188 virtual void postNormalPred(FArrayBox& a_dWMinus,
00189 FArrayBox& a_dWPlus,
00190 const FArrayBox& a_W,
00191 const Real& a_dt,
00192 const Real& a_dx,
00193 const int& a_dir,
00194 const Box& a_box)
00195 {
00196
00197 }
00198
00200
00202 virtual void quasilinearUpdate(FArrayBox& a_AdWdx,
00203 const FArrayBox& a_WHalf,
00204 const FArrayBox& a_W,
00205 const Real& a_scale,
00206 const int& a_dir,
00207 const Box& a_box);
00208
00210
00212 virtual void consToPrim(FArrayBox& a_W,
00213 const FArrayBox& a_U,
00214 const Box& a_box);
00215
00217
00222 virtual Interval velocityInterval()
00223 {
00224 MayDay::Error("AdvectPhysics::velocityInterval - not defined");
00225
00226 Interval retval(-1,-1);
00227 return retval;
00228 }
00229
00231
00237 virtual int pressureIndex()
00238 {
00239 MayDay::Error("AdvectPhysics::pressureIndex - not defined");
00240
00241 return -1;
00242 }
00243
00245
00252 virtual Real smallPressure()
00253 {
00254 MayDay::Error("AdvectPhysics::smallPressure - not defined");
00255
00256 return -1.0;
00257 }
00258
00260
00265 virtual int bulkModulusIndex()
00266 {
00267 MayDay::Error("AdvectPhysics::bulkModulusIndex - not defined");
00268
00269 return -1;
00270 }
00271
00272
00274 void setVelocities(FArrayBox* a_celVelPtr,
00275 FluxBox* a_advVelPtr)
00276 {
00277 m_isVelSet = true;
00278 m_advVelPtr = a_advVelPtr;
00279 m_cellVelPtr = a_celVelPtr;
00280 }
00281
00282 protected:
00283 bool m_isVelSet;
00285 FluxBox* m_advVelPtr;
00286
00288 FArrayBox* m_cellVelPtr;
00289
00290 };
00291
00292 #include "NamespaceFooter.H"
00293 #endif