76 rho_L = std::max(0.0,rho_L);
77 rho_R = std::max(0.0,rho_R);
80 Set::Scalar ke_L = 0.5 * (Mn_L * Mn_L ) / (rho_L+small);
83 Set::Scalar h_TL = (ke_L + ue_L + p_L) / (rho_L+small);
85 Set::Scalar ke_R = 0.5 * (Mn_R * Mn_R ) / (rho_R+small);
88 Set::Scalar h_TR = (ke_R + ue_R + p_R) / (rho_R+small);
90 Set::Scalar u_L = Mn_L/(rho_L+small), u_R = Mn_R/(rho_R+small);
91 Set::Scalar v_L = Mt_L/(rho_L+small), v_R = Mt_R/(rho_R+small);
97 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);
98 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);
99 Set::Scalar a_RL_sq = std::max(0.0,(gamma - 1.0) * (h_RL - 0.5 * u_RL * u_RL));
103 if (
verbose && ((a_RL_sq<0) || (a_RL_sq!=a_RL_sq)))
144 Set::Scalar v_RL = (std::sqrt(rho_L) * v_L + std::sqrt(rho_R) * v_R ) /
145 (std::sqrt(rho_L) + std::sqrt(rho_R) + small);
146 Set::Scalar Ma = (std::abs(u_RL) + std::abs(v_RL)) / (a_RL + small);
147 Ma = std::min(Ma, 1.0);
151 Set::Scalar deltav1 = deltarho - deltap / (a_RL_sq + small);
152 Set::Scalar deltav2 = deltau + deltap / (rho_RL * a_RL + small);
153 Set::Scalar deltav3 = deltau - deltap / (rho_RL * a_RL + small);
162 Set::Scalar r22 = 0.5*rho_RL/a_RL * ( u_RL + a_RL );
163 Set::Scalar r23 = 0.5*rho_RL/a_RL * ( h_RL + a_RL*u_RL );
165 Set::Scalar r32 = -0.5*rho_RL/a_RL * ( u_RL - a_RL );
166 Set::Scalar r33 = -0.5*rho_RL/a_RL * ( h_RL - a_RL*u_RL );
176 lambda1 = fabs(lambda1);
177 lambda2 = fabs(lambda2);
178 lambda3 = fabs(lambda3);
179 if ( lambda1 < deltau ) lambda1 = 0.5*(lambda1*lambda1 + deltau*deltau)/deltau;
180 if ( lambda2 < deltau ) lambda2 = 0.5*(lambda2*lambda2 + deltau*deltau)/deltau;
181 if ( lambda3 < deltau ) lambda3 = 0.5*(lambda3*lambda3 + deltau*deltau)/deltau;
184 Set::Scalar a_L = std::sqrt(gamma * p_L / (rho_L + small));
185 Set::Scalar a_R = std::sqrt(gamma * p_R / (rho_R + small));
189 Set::Scalar fix1 = std::max(0.0, std::max(lambda1 - lambda1_L, lambda1_R - lambda1));
190 Set::Scalar fix2 = std::max(0.0, std::max(lambda2 - lambda2_L, lambda2_R - lambda2));
191 Set::Scalar fix3 = std::max(0.0, std::max(lambda3 - lambda3_L, lambda3_R - lambda3));
192 if ( lambda1 < fix1 ) lambda1 = fix1;
193 if ( lambda2 < fix2 ) lambda2 = fix2;
194 if ( lambda3 < fix3 ) lambda3 = fix3;
202 fl.
mass = (0.5*(rho_L*u_L + rho_R*u_R) - 0.5*(
203 r11*fabs(lambda1)*deltav1 +
204 r21*fabs(lambda2)*deltav2 +
205 r31*fabs(lambda3)*deltav3)
232 fl.
momentum_normal = ( 0.5*(rho_L*u_L*u_L + p_L + rho_R*u_R*u_R + p_R) - 0.5*(
233 r12*fabs(lambda1)*deltav1 +
234 r22*fabs(lambda2)*deltav2 +
235 r32*fabs(lambda3)*deltav3)
239 fl.
energy = ( 0.5*(u_L*(ke_L + p_L + ue_L) + u_R*(ke_R + p_R + ue_R)) - 0.5*
241 r13*fabs(lambda1)*deltav1 +
242 r23*fabs(lambda2)*deltav2 +
243 r33*fabs(lambda3)*deltav3)
268 State left (1.0, 1.0, 0.0, 1.0);
269 State center(1.0, 1.0, 1.0, 1.0);
270 State right (1.0, 1.0, 2.0, 1.0);
271 Flux fluxlo = solver.
Solve(center, right, gamma, pref, small);
272 Flux fluxhi = solver.
Solve(left, center, gamma, pref, small);
274 if (fabs(fluxhi.
mass - fluxlo.
mass) > 1E-10
282 Util::Exception(
INFO,
"Tangential velocity difference incorrectly affecting normal flux.");
285 }
catch (
const std::runtime_error& e)
293 State left (1.0, 0.0, 0.0, 1.0);
294 State center(1.0, 0.0, 1.0, 1.0);
295 State right (1.0, 0.0, 2.0, 1.0);
296 Flux fluxlo = solver.
Solve(left, center, gamma, pref, small);
297 Flux fluxhi = solver.
Solve(center, right, gamma, pref, small);
298 if (fabs(fluxhi.
mass - fluxlo.
mass) > 1E-10
309 }
catch (
const std::runtime_error& e)
317 State left(1.0, 0.0, 0.0, 1.0);
318 State center(1.0, 0.0, 0.0, 1.0);
319 State right(1.0, 0.0, 0.0, 1.0);
320 Flux fluxhi = solver.
Solve(center, right, gamma, pref, small);
321 Flux fluxlo = solver.
Solve(left, center, gamma, pref, small);
322 if (fabs(fluxhi.
mass - fluxlo.
mass) > 1E-10
335 }
catch (
const std::runtime_error& e)
343 State left (1.0, 1.0, 0.5, 1.0);
344 State center(1.0, 1.0, 0.5, 1.0);
345 State right (1.0, 1.0, 0.5, 1.0);
346 Flux fluxhi = solver.
Solve(center, right, gamma, pref, small);
347 Flux fluxlo = solver.
Solve(left, center, gamma, pref, small);
348 if (fabs(fluxhi.
mass - fluxlo.
mass) > 1E-10 ||
359 }
catch (
const std::runtime_error& e)