86 const double*
const QL,
87 const double*
const QR,
94 constexpr int numberOfData = numberOfVariables + numberOfParameters;
95 constexpr int basisSize = order + 1;
98 kernels::idx3 idx_FLR(basisSize, basisSize, numberOfVariables);
100 double FLn, FLm, FLl, FRn, FRm, FRl;
101 double FLx, FLy, FLz, FRx, FRy, FRz;
102 double FL_n, FL_m, FL_l, FR_n, FR_m, FR_l;
103 double FL_x, FL_y, FL_z, FR_x, FR_y, FR_z;
105 for (
int i = 0; i < basisSize; i++) {
106 for (
int j = 0; j < basisSize; j++) {
108 const double* Q_p = QR + idx_QLR(i, j, 0);
109 const double* Q_m = QL + idx_QLR(i, j, 0);
111 double* F_m = FL + idx_FLR(i, j, 0);
112 double* F_p = FR + idx_FLR(i, j, 0);
113 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;
114 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;
122 double n_m[3], m_m[3], l_m[3];
123 double n_p[3], m_p[3], l_p[3];
124 double norm_p, norm_m;
129 double Tx_m, Ty_m, Tz_m;
130 double Tx_p, Ty_p, Tz_p;
134 double vx_m, vy_m, vz_m;
135 double vx_p, vy_p, vz_p;
142 double Tn_m, Tm_m, Tl_m;
143 double Tn_p, Tm_p, Tl_p;
149 double vn_m, vm_m, vl_m;
150 double vn_p, vm_p, vl_p;
158 zs_m[0] = rho_m * cs_m[0];
159 zs_m[1] = rho_m * cs_m[1];
161 zs_p[0] = rho_m * cs_p[0];
162 zs_p[1] = rho_m * cs_p[1];
164 double zp_m = rho_m * cp_m;
165 double zp_p = rho_p * cp_p;
168 assertion3(!(zp_p <= 0.0 || zp_m <= 0.0),
"Impedance must be greater than zero !", zp_p, zs_p);
172 double vn_hat_p, vm_hat_p, vl_hat_p;
173 double Tn_hat_p, Tm_hat_p, Tl_hat_p;
174 double vn_hat_m, vm_hat_m, vl_hat_m;
175 double Tn_hat_m, Tm_hat_m, Tl_hat_m;
177 if (isBoundaryFace) {
179 double r = faceIndex == 2 ? 1 : 0;
218 riemannSolverNodal(vn_p, vn_m, Tn_p, Tn_m, zp_p, zp_m, vn_hat_p, vn_hat_m, Tn_hat_p, Tn_hat_m);
219 riemannSolverNodal(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);
220 riemannSolverNodal(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);
235 FL_m = FLm / zs_m[0];
240 FL_l = FLl / zs_m[1];
247 FR_m = FRm / zs_p[0];
253 FR_l = FRl / zs_p[1];
267 F_p[Shortcuts::v + 0] = norm_p / rho_p * FRx;
268 F_m[Shortcuts::v + 0] = norm_m / rho_m * FLx;
270 F_p[Shortcuts::v + 1] = norm_p / rho_p * FRy;
271 F_m[Shortcuts::v + 1] = norm_m / rho_m * FLy;
273 F_p[Shortcuts::v + 2] = norm_p / rho_p * FRz;
274 F_m[Shortcuts::v + 2] = norm_m / rho_m * FLz;
276 F_m[Shortcuts::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);
277 F_m[Shortcuts::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);
278 F_m[Shortcuts::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);
280 F_p[Shortcuts::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);
281 F_p[Shortcuts::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);
282 F_p[Shortcuts::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);
284 F_m[Shortcuts::sigma + 3] = norm_m * c44_m * (n_m[1] * FL_x + n_m[0] * FL_y);
285 F_m[Shortcuts::sigma + 4] = norm_m * c55_m * (n_m[2] * FL_x + n_m[0] * FL_z);
286 F_m[Shortcuts::sigma + 5] = norm_m * c66_m * (n_m[2] * FL_y + n_m[1] * FL_z);
288 F_p[Shortcuts::sigma + 3] = -norm_p * c44_p * (n_p[1] * FR_x + n_p[0] * FR_y);
289 F_p[Shortcuts::sigma + 4] = -norm_p * c55_p * (n_p[2] * FR_x + n_p[0] * FR_z);
290 F_p[Shortcuts::sigma + 5] = -norm_p * c66_p * (n_p[2] * FR_y + n_p[1] * FR_z);