simple_waves_ideal_gas.cpp
1 #include <cmath>
3 
4 double calc_entropy(double d, double p, double g)
5 {
6  return p/pow(d,g);
7 }
8 
10  double s, double g):
11  density_(density), s_(s), g_(g) {}
12 
13 double ConstEntropy::operator()(double x) const
14 {
15  const double d = density_(x);
16  return s_*pow(d,g_);
17 }
18 
20 (SpatialDistribution1D const& pressure,
21  SpatialDistribution1D const& density,
22  EquationOfState const& eos):
23  pressure_(pressure), density_(density), eos_(eos) {}
24 
25 double SoundSpeedDist::operator()(double x) const
26 {
27  const double p = pressure_(x);
28  const double d = density_(x);
29  return eos_.dp2c(d,p);
30 }
31 
32 double calc_riemann_invariant(double v, double c,
33  double g, bool dir)
34 {
35  double fdir = 2*dir-1;
36  return v+fdir*2*c/(g-1);
37 }
38 
40  SpatialDistribution1D const& sound_speed,
41  double g):
42  rv_(rv), dir_(dir), sound_speed_(sound_speed), g_(g) {}
43 
44 double ConstRiemannInv::operator()(double x) const
45 {
46  const double c = sound_speed_(x);
47  return rv_-calc_riemann_invariant(0,c,g_,dir_);
48 }
49 
51 (SpatialDistribution1D const& density,
52  double entropy, double adiabatic_index,
53  double edge):
54  density_(density),
55  pressure_(density_,entropy,adiabatic_index),
56  eos_(adiabatic_index),
57  sound_speed_(pressure_,
58  density_,
59  eos_),
60  c_edge_(sound_speed_(edge)),
61  rv_edge_(calc_riemann_invariant(0,c_edge_,adiabatic_index,0)),
62  xvelocity_(rv_edge_,0,sound_speed_,adiabatic_index),
63  yvelocity_(0) {}
64 
66 {
67  return eos_;
68 }
69 
71 {
72  if("density"==pname)
73  return density_;
74  else if("pressure"==pname)
75  return pressure_;
76  else if("xvelocity"==pname)
77  return xvelocity_;
78  else if("yvelocity"==pname)
79  return yvelocity_;
80  else
81  throw UniversalError("Unknown variable name "+pname);
82 }
83 
85  SpatialDistribution1D const& pressure,
86  double adiabatic_index):
87  density_(density), pressure_(pressure),
88  g_(adiabatic_index) {}
89 
90 double EntropyProf::operator()(double x) const
91 {
92  const double d = density_(x);
93  const double p = pressure_(x);
94  return calc_entropy(d,p,g_);
95 }
Ideal gas equation of state.
Definition: ideal_gas.hpp:13
SoundSpeedDist(SpatialDistribution1D const &pressure, SpatialDistribution1D const &density, EquationOfState const &eos)
Class constructor.
Container for error reports.
SimpleWaveIdealGasInitCond(SpatialDistribution1D const &density, double entropy, double adiabatic_index, double edge=3)
Class constructor.
double calc_riemann_invariant(double v, double c, double g, bool dir)
Calculates the Riemann invariant.
Base class for initial conditions.
Base class for equation of state.
ConstRiemannInv(double rv, bool dir, SpatialDistribution1D const &sound_speed, double g)
Class constructor.
Initial conditions for simple waves problem in an ideal gas.
EntropyProf(SpatialDistribution1D const &density, SpatialDistribution1D const &pressure, double adiabatic_index)
Class constructor.
double operator()(double x) const
Calculates initial conditions.
double operator()(double x) const
Calculates initial conditions.
IdealGas const & getEOS(void) const
Returns the equation of state.
double calc_entropy(double d, double p, double g)
Calculates the entropy of an ideal gas.
ConstEntropy(SpatialDistribution1D const &density, double s, double g)
Class constructor.
double operator()(double x) const
Calculates initial conditions.
SpatialDistribution1D const & getProfile(string pname) const
Returns the appropriate spatial profile.
double operator()(double x) const
Calculates initial conditions.