69 rho_L = std::max(0.0,rho_L);
70 rho_R = std::max(0.0,rho_R);
73 Set::Scalar ke_L = 0.5 * (Mn_L * Mn_L ) / (rho_L+small);
76 Set::Scalar h_TL = (ke_L + ue_L + p_L) / (rho_L+small);
78 Set::Scalar ke_R = 0.5 * (Mn_R * Mn_R ) / (rho_R+small);
81 Set::Scalar h_TR = (ke_R + ue_R + p_R) / (rho_R+small);
83 Set::Scalar u_L = Mn_L/(rho_L+small), u_R = Mn_R/(rho_R+small);
84 Set::Scalar v_L = Mt_L/(rho_L+small), v_R = Mt_R/(rho_R+small);
90 Set::Scalar u_RL = (std::sqrt(rho_L) * u_L + std::sqrt(rho_R) * u_R ) / (std::sqrt(rho_L) + std::sqrt(rho_R) + small);
91 Set::Scalar h_RL = (std::sqrt(rho_L) * h_TL + std::sqrt(rho_R) * h_TR) / (std::sqrt(rho_L) + std::sqrt(rho_R) + small);
92 Set::Scalar a_RL_sq = std::max(0.0,(gamma - 1.0) * (h_RL - 0.5 * u_RL * u_RL));
94 if (
verbose && ((a_RL_sq<0) || (a_RL_sq!=a_RL_sq)))
132 Set::Scalar deltav1 = deltarho - deltap / (a_RL_sq + small);
133 Set::Scalar deltav2 = deltau + deltap / (rho_RL * a_RL + small);
134 Set::Scalar deltav3 = deltau - deltap / (rho_RL * a_RL + small);
143 Set::Scalar r22 = 0.5*rho_RL/a_RL * ( u_RL + a_RL );
144 Set::Scalar r23 = 0.5*rho_RL/a_RL * ( h_RL + a_RL*u_RL );
146 Set::Scalar r32 = -0.5*rho_RL/a_RL * ( u_RL - a_RL );
147 Set::Scalar r33 = -0.5*rho_RL/a_RL * ( h_RL - a_RL*u_RL );
157 lambda1 = fabs(lambda1);
158 lambda2 = fabs(lambda2);
159 lambda3 = fabs(lambda3);
160 if ( lambda1 < deltau ) lambda1 = 0.5*(lambda1*lambda1 + deltau*deltau)/deltau;
161 if ( lambda2 < deltau ) lambda2 = 0.5*(lambda2*lambda2 + deltau*deltau)/deltau;
162 if ( lambda3 < deltau ) lambda3 = 0.5*(lambda3*lambda3 + deltau*deltau)/deltau;
165 Set::Scalar a_L = std::sqrt(gamma * p_L / (rho_L + small));
166 Set::Scalar a_R = std::sqrt(gamma * p_R / (rho_R + small));
170 Set::Scalar fix1 = std::max(0.0, std::max(lambda1 - lambda1_L, lambda1_R - lambda1));
171 Set::Scalar fix2 = std::max(0.0, std::max(lambda2 - lambda2_L, lambda2_R - lambda2));
172 Set::Scalar fix3 = std::max(0.0, std::max(lambda3 - lambda3_L, lambda3_R - lambda3));
173 if ( lambda1 < fix1 ) lambda1 = fix1;
174 if ( lambda2 < fix2 ) lambda2 = fix2;
175 if ( lambda3 < fix3 ) lambda3 = fix3;
183 fl.
mass = (0.5*(rho_L*u_L + rho_R*u_R) - 0.5*(
184 r11*fabs(lambda1)*deltav1 +
185 r21*fabs(lambda2)*deltav2 +
186 r31*fabs(lambda3)*deltav3)
213 fl.
momentum_normal = ( 0.5*(rho_L*u_L*u_L + p_L + rho_R*u_R*u_R + p_R) - 0.5*(
214 r12*fabs(lambda1)*deltav1 +
215 r22*fabs(lambda2)*deltav2 +
216 r32*fabs(lambda3)*deltav3)
220 fl.
energy = ( 0.5*(u_L*(ke_L + p_L + ue_L) + u_R*(ke_R + p_R + ue_R)) - 0.5*
222 r13*fabs(lambda1)*deltav1 +
223 r23*fabs(lambda2)*deltav2 +
224 r33*fabs(lambda3)*deltav3)
249 State left (1.0, 1.0, 0.0, 1.0);
250 State center(1.0, 1.0, 1.0, 1.0);
251 State right (1.0, 1.0, 2.0, 1.0);
252 Flux fluxlo = solver.
Solve(center, right, gamma, pref, small);
253 Flux fluxhi = solver.
Solve(left, center, gamma, pref, small);
255 if (fabs(fluxhi.
mass - fluxlo.
mass) > 1E-10
263 Util::Exception(
INFO,
"Tangential velocity difference incorrectly affecting normal flux.");
266 }
catch (
const std::runtime_error& e)
274 State left (1.0, 0.0, 0.0, 1.0);
275 State center(1.0, 0.0, 1.0, 1.0);
276 State right (1.0, 0.0, 2.0, 1.0);
277 Flux fluxlo = solver.
Solve(left, center, gamma, pref, small);
278 Flux fluxhi = solver.
Solve(center, right, gamma, pref, small);
279 if (fabs(fluxhi.
mass - fluxlo.
mass) > 1E-10
290 }
catch (
const std::runtime_error& e)
298 State left(1.0, 0.0, 0.0, 1.0);
299 State center(1.0, 0.0, 0.0, 1.0);
300 State right(1.0, 0.0, 0.0, 1.0);
301 Flux fluxhi = solver.
Solve(center, right, gamma, pref, small);
302 Flux fluxlo = solver.
Solve(left, center, gamma, pref, small);
303 if (fabs(fluxhi.
mass - fluxlo.
mass) > 1E-10
316 }
catch (
const std::runtime_error& e)
324 State left (1.0, 1.0, 0.5, 1.0);
325 State center(1.0, 1.0, 0.5, 1.0);
326 State right (1.0, 1.0, 0.5, 1.0);
327 Flux fluxhi = solver.
Solve(center, right, gamma, pref, small);
328 Flux fluxlo = solver.
Solve(left, center, gamma, pref, small);
329 if (fabs(fluxhi.
mass - fluxlo.
mass) > 1E-10 ||
340 }
catch (
const std::runtime_error& e)