3 #include "../../misc/universal_error.hpp" 4 #include "../../misc/utils.hpp" 13 WaveSpeeds(
double left_i,
27 WaveSpeeds estimate_wave_speeds
34 const double dr = right.
Density;
38 const double sl =
min(vl - cl, vr - cr);
39 const double sr =
max(vl + cl, vr + cr);
40 const double ss = (pr - pl + dl*vl*(sl - vl) - dr*vr*(sr - vr)) /
41 (dl*(sl - vl) - dr*(sr - vr));
42 return WaveSpeeds(sl, ss, sr);
50 double left_wave_speed,
51 double center_wave_speed,
52 double right_wave_speed)
55 res.AddEntry(
"left density", left.
Density);
56 res.AddEntry(
"left pressure", left.
Pressure);
57 res.AddEntry(
"left x velocity", left.
Velocity.
x);
58 res.AddEntry(
"left y velocity", left.
Velocity.
y);
59 res.AddEntry(
"left sound speed", left.
SoundSpeed);
60 res.AddEntry(
"left energy", left.
Energy);
61 res.AddEntry(
"right density", right.
Density);
62 res.AddEntry(
"right pressure", right.
Pressure);
63 res.AddEntry(
"right x velocity", right.
Velocity.
x);
64 res.AddEntry(
"right y velocity", right.
Velocity.
y);
65 res.AddEntry(
"right sound speed", right.
SoundSpeed);
66 res.AddEntry(
"right energy", right.
Energy);
67 res.AddEntry(
"interface velocity", velocity);
68 res.AddEntry(
"left wave speed", left_wave_speed);
69 res.AddEntry(
"center wave speed", center_wave_speed);
70 res.AddEntry(
"right wave speed", right_wave_speed);
77 (
Primitive const& state,
double sk,
double ss)
79 const double dk = state.
Density;
83 const double ds = dk*(sk - uk) / (sk - ss);
90 ds*(ss - uk)*(ss + pk / dk / (sk - uk));
100 double velocity)
const 102 if (
is_nan(right.Velocity.x))
109 local_left.
Velocity -= velocity*normaldir;
110 local_right.
Velocity -= velocity*normaldir;
114 WaveSpeeds ws2 = estimate_wave_speeds(local_left, local_right);
116 local_left.
Velocity -= ws2.center*normaldir;
117 local_right.
Velocity -= ws2.center*normaldir;
118 velocity += ws2.center;
121 WaveSpeeds ws = estimate_wave_speeds(local_left, local_right);
130 const Conserved usl = starred_state(local_left, ws.left, ws.center);
131 const Conserved usr = starred_state(local_right, ws.right, ws.center);
136 else if (ws.left <= 0 && ws.center >= 0)
137 f_gr = fl + ws.left*(usl - ul);
138 else if (ws.center<0 && ws.right >= 0)
139 f_gr = fr + ws.right*(usr - ur);
143 throw invalid_wave_speeds(local_left,
151 0.5*f_gr.
Mass*velocity*velocity;
Set of conserved variables (extensive)
Vector2D Momentum
Momentum.
double SoundSpeed
Speed of sound.
Container for error reports.
Vector2D Velocity
Velocity.
double max(vector< double > const &v)
returns the maximal term in a vector
double Energy
Total energy (kinetic + thermal)
double TotalEnergyDensity(Primitive const &p)
Calculates the total energy density.
double y
Component in the y direction.
Conserved Primitive2Conserved(Primitive const &p)
Converts primitive variables to conserved intensive.
HLLC riemann solver on an eulerian grid.
Conserved Primitive2Flux(Primitive const &p, Vector2D const &n)
Converts primitive variables to flux.
double ScalarProd(Vector3D const &v1, Vector3D const &v2)
Scalar product of two vectors.
double min(vector< double > const &v)
Returns the minimal term in a vector.
double Energy
Thermal energy per unit mass, entahalpy in relativistic case.
bool is_nan(double x)
Checks whether a number is a nan.
Primitive hydrodynamic variables.
Hllc(bool massflux=true)
Class constructor.
double x
Component in the x direction.