44 const T
u = q[1]/q[0];
45 return (q[2] - 0.5*(q[0]*u*u))*
_gmm;
53 q[2] = p/
_gmm + 0.5*rho*u*
u;
59 const T
u = q[1]/q[0];
63 flux[1] = q[0]*u*u + p;
72 const T sr0 =
sqrt(q0[0]);
73 const T sr1 =
sqrt(q1[0]);
75 const T sr0psr1 = sr0 + sr1;
76 const T u0 = q0[1]/q0[0];
77 const T u1 = q1[1]/q1[0];
82 const T h0 = (q0[2]+p0) / q0[0];
83 const T h1 = (q1[2]+p1) / q1[0];
85 const T rho_f = sr0 * sr1;
86 const T u_f = (sr0*u0 + sr1*u1) / sr0psr1;
87 const T h_f = (sr0*h0 + sr1*h1) / sr0psr1;
89 const T c_f =
sqrt(
_gmm * (h_f - half*u_f*u_f));
91 const T abs_uf =
fabs(u_f);
92 const T abs_upc =
fabs(u_f + c_f);
93 const T abs_umc =
fabs(u_f - c_f);
99 const T dr = q1[0]-q0[0];
100 const T rdu = rho_f*(u1-u0);
104 const T dpc2 = dp*c_f*c_f;
106 const T a0 = half*(dpc2 + rdu*c_f)*abs_upc;
107 const T a4 = half*(dpc2 - rdu*c_f)*abs_umc;
109 const T drmdpc2 = dr-dpc2;
112 dFlux[0] = abs_uf*drmdpc2 + a0 + a4;
113 dFlux[1] = abs_uf*drmdpc2*u_f + a0*(u_f+c_f) + a4*(u_f-c_f);
114 dFlux[2] = abs_uf*(half*drmdpc2*u_f*u_f) + a0*(h_f+u_f*c_f) + a4*(h_f-u_f*c_f);
116 Vec3 flux(flux0+flux1-dFlux);
124 const T sr0 =
sqrt(q0[0]);
125 const T sr1 =
sqrt(q1[0]);
127 const T sr0psr1 = sr0 + sr1;
128 const T u0 = q0[1]/q0[0];
129 const T u1 = q1[1]/q1[0];
134 const T h0 = (q0[2]+p0) / q0[0];
135 const T h1 = (q1[2]+p1) / q1[0];
137 const T rho_f = sr0 * sr1;
138 const T u_f = (sr0*u0 + sr1*u1) / sr0psr1;
139 const T h_f = (sr0*h0 + sr1*h1) / sr0psr1;
141 const T c_f =
sqrt(
_gmm * (h_f - half*u_f*u_f));
143 const T abs_uf =
fabs(u_f);
144 const T abs_upc =
fabs(u_f + c_f);
145 const T abs_umc =
fabs(u_f - c_f);
151 const T dr = q1[0]-q0[0];
152 const T rdu = rho_f*(u1-u0);
156 const T dpbyc2 = dp/(c_f*c_f);
158 const T a0 = half*(dpbyc2 + rdu/c_f)*abs_upc;
159 const T a4 = half*(dpbyc2 - rdu/c_f)*abs_umc;
161 const T drmdpbyc2 = dr-dpbyc2;
164 dFlux[0] = abs_uf*drmdpbyc2 + a0 + a4;
165 dFlux[1] = abs_uf*drmdpbyc2*u_f + a0*(u_f+c_f) + a4*(u_f-c_f);
166 dFlux[2] = abs_uf*(half*drmdpbyc2*u_f*u_f) + a0*(h_f+u_f*c_f)
169 Vec3 flux(flux0+flux1-dFlux);
186 void solve(
const double dt,
const int nsteps)
194 for(
int n=0; n<nsteps; n++)
196 cout <<
"step " << n << endl;
217 q[c] = qN[c] - sCoeff*R[c];
226 u[c] =
q[c][1]/
q[c][0];
228 M[c] =
u[c]/soundSpeed;
void solve(const double dt, const int nsteps)
Vec3 getRoeFlux_Frink(const Vec3 &q0, const Vec3 &q1)
Array< double > _stageCoeffs
Vec3 getConservedVars(const T rho, const T p, const T u)
ArrayBase & getPressure()
Tangent sqrt(const Tangent &a)
ShockTube(const int nCells)
ArrayBase & getSolution()
Tangent fabs(const Tangent &a)
ArrayBase & getVelocity()
Vec3 getFlux(const Vec3 &q)
Vec3 getRoeFlux(const Vec3 &q0, const Vec3 &q1)
ArrayBase & getMachNumber()
T getPressure(const Vec3 &q)