69 const double*
const QL,
70 const double*
const QR,
77 constexpr int numberOfData = numberOfVariables + numberOfParameters;
78 constexpr int basisSize = order + 1;
81 kernels::idx3 idx_FLR(basisSize, basisSize, numberOfVariables);
83 double FLn, FLm, FLl, FRn, FRm, FRl;
84 double FLx, FLy, FLz, FRx, FRy, FRz;
85 double FL_n, FL_m, FL_l, FR_n, FR_m, FR_l;
86 double FL_x, FL_y, FL_z, FR_x, FR_y, FR_z;
89 for (
int i = 0; i < basisSize; i++) {
90 for (
int j = 0; j < basisSize; j++) {
92 const double* Q_p = QR + idx_QLR(i, j, 0);
93 const double* Q_m = QL + idx_QLR(i, j, 0);
95 double* F_m = FL + idx_FLR(i, j, 0);
96 double* F_p = FR + idx_FLR(i, j, 0);
97 double rho_m, cp_m, cs_m[2], c11_m, c22_m, c33_m, c44_m, c55_m, c66_m, c12_m, c13_m, c23_m;
98 double rho_p, cp_p, cs_p[2], c11_p, c22_p, c33_p, c44_p, c55_p, c66_p, c12_p, c13_p, c23_p;
100 Numerics::get_stiffness_tensor<Shortcuts>(Q_m, c11_m, c22_m, c33_m, c44_m, c55_m, c66_m, c12_m, c13_m, c23_m);
101 Numerics::get_stiffness_tensor<Shortcuts>(Q_p, c11_p, c22_p, c33_p, c44_p, c55_p, c66_p, c12_p, c13_p, c23_p);
103 compute_parameters<Shortcuts>(Q_m, rho_m, cp_m, cs_m, direction);
104 compute_parameters<Shortcuts>(Q_p, rho_p, cp_p, cs_p, direction);
106 double n_m[3], m_m[3], l_m[3];
107 double n_p[3], m_p[3], l_p[3];
108 double norm_p, norm_m;
110 get_normals<Shortcuts>(Q_m, direction, norm_m, n_m);
111 get_normals<Shortcuts>(Q_p, direction, norm_p, n_p);
113 double Tx_m, Ty_m, Tz_m;
114 double Tx_p, Ty_p, Tz_p;
115 compute_tractions<Shortcuts>(Q_p, n_p, Tx_p, Ty_p, Tz_p);
116 compute_tractions<Shortcuts>(Q_m, n_m, Tx_m, Ty_m, Tz_m);
118 double vx_m, vy_m, vz_m;
119 double vx_p, vy_p, vz_p;
120 get_velocities<Shortcuts>(Q_p, vx_p, vy_p, vz_p);
121 get_velocities<Shortcuts>(Q_m, vx_m, vy_m, vz_m);
126 double Tn_m, Tm_m, Tl_m;
127 double Tn_p, Tm_p, Tl_p;
133 double vn_m, vm_m, vl_m;
134 double vn_p, vm_p, vl_p;
142 zs_m[0] = rho_m * cs_m[0];
143 zs_m[1] = rho_m * cs_m[1];
145 zs_p[0] = rho_m * cs_p[0];
146 zs_p[1] = rho_m * cs_p[1];
148 double zp_m = rho_m * cp_m;
149 double zp_p = rho_p * cp_p;
152 assertion3(!(zp_p <= 0.0 || zp_m <= 0.0),
"Impedance must be greater than zero !", zp_p, zs_p);
156 double vn_hat_p, vm_hat_p, vl_hat_p;
157 double Tn_hat_p, Tm_hat_p, Tl_hat_p;
158 double vn_hat_m, vm_hat_m, vl_hat_m;
159 double Tn_hat_m, Tm_hat_m, Tl_hat_m;
161 if (isBoundaryFace) {
163 double r = faceIndex == 2 ? 1 : 0;
202 riemannSolver_Nodal(vn_p, vn_m, Tn_p, Tn_m, zp_p, zp_m, vn_hat_p, vn_hat_m, Tn_hat_p, Tn_hat_m);
203 riemannSolver_Nodal(vm_p, vm_m, Tm_p, Tm_m, zs_p[0], zs_m[0], vm_hat_p, vm_hat_m, Tm_hat_p, Tm_hat_m);
204 riemannSolver_Nodal(vl_p, vl_m, Tl_p, Tl_m, zs_p[1], zs_m[1], vl_hat_p, vl_hat_m, Tl_hat_p, Tl_hat_m);
219 FL_m = FLm / zs_m[0];
224 FL_l = FLl / zs_m[1];
231 FR_m = FRm / zs_p[0];
237 FR_l = FRl / zs_p[1];
251 F_p[s.v + 0] = norm_p / rho_p * FRx;
252 F_m[s.v + 0] = norm_m / rho_m * FLx;
254 F_p[s.v + 1] = norm_p / rho_p * FRy;
255 F_m[s.v + 1] = norm_m / rho_m * FLy;
257 F_p[s.v + 2] = norm_p / rho_p * FRz;
258 F_m[s.v + 2] = norm_m / rho_m * FLz;
260 F_m[s.sigma + 0] = norm_m * (c11_m * n_m[0] * FL_x + c12_m * n_m[1] * FL_y + c13_m * n_m[2] * FL_z);
261 F_m[s.sigma + 1] = norm_m * (c12_m * n_m[0] * FL_x + c22_m * n_m[1] * FL_y + c23_m * n_m[2] * FL_z);
262 F_m[s.sigma + 2] = norm_m * (c13_m * n_m[0] * FL_x + c23_m * n_m[1] * FL_y + c33_m * n_m[2] * FL_z);
264 F_p[s.sigma + 0] = -norm_p * (c11_p * n_p[0] * FR_x + c12_p * n_p[1] * FR_y + c13_p * n_p[2] * FR_z);
265 F_p[s.sigma + 1] = -norm_p * (c12_p * n_p[0] * FR_x + c22_p * n_p[1] * FR_y + c23_p * n_p[2] * FR_z);
266 F_p[s.sigma + 2] = -norm_p * (c13_p * n_p[0] * FR_x + c23_p * n_p[1] * FR_y + c33_p * n_p[2] * FR_z);
268 F_m[s.sigma + 3] = norm_m * c44_m * (n_m[1] * FL_x + n_m[0] * FL_y);
269 F_m[s.sigma + 4] = norm_m * c55_m * (n_m[2] * FL_x + n_m[0] * FL_z);
270 F_m[s.sigma + 5] = norm_m * c66_m * (n_m[2] * FL_y + n_m[1] * FL_z);
272 F_p[s.sigma + 3] = -norm_p * c44_p * (n_p[1] * FR_x + n_p[0] * FR_y);
273 F_p[s.sigma + 4] = -norm_p * c55_p * (n_p[2] * FR_x + n_p[0] * FR_z);
274 F_p[s.sigma + 5] = -norm_p * c66_p * (n_p[2] * FR_y + n_p[1] * FR_z);