5 template <
class Shortcuts,
typename T>
14 Tx = n[0] * sigma_xx + n[1] * sigma_xy + n[2] * sigma_xz;
15 Ty = n[0] * sigma_xy + n[1] * sigma_yy + n[2] * sigma_yz;
16 Tz = n[0] * sigma_xz + n[1] * sigma_yz + n[2] * sigma_zz;
19 template <
class Shortcuts,
typename T>
30 T a_yz =
y[0] * z[0] +
y[1] * z[1] +
y[2] * z[2];
32 for (
int i = 0; i < 3; i++) {
33 z[i] = z[i] - a_yz *
y[i];
36 T norm_z = std::sqrt(z[0] * z[0] + z[1] * z[1] + z[2] * z[2]);
38 for (
int i = 0; i < 3; i++) {
51 m[0] = n[1] * l[2] - n[2] * l[1];
52 m[1] = -(n[0] * l[2] - n[2] * l[0]);
53 m[2] = n[0] * l[1] - n[1] * l[0];
56 T tol, diff_norm1, diff_norm2;
62 diff_norm1 = std::sqrt(pow(n[0] - m[0], 2) + pow(n[1] - m[1], 2) + pow(n[2] - m[2], 2));
63 diff_norm2 = std::sqrt(pow(n[0] + m[0], 2) + pow(n[1] + m[1], 2) + pow(n[2] + m[2], 2));
65 if (diff_norm1 >= tol && diff_norm2 >= tol) {
73 l[0] = n[1] * m[2] - n[2] * m[1];
74 l[1] = -(n[0] * m[2] - n[2] * m[0]);
75 l[2] = n[0] * m[1] - n[1] * m[0];
94 T
p = z_p * v_p + sigma_p;
95 T q = z_m * v_m - sigma_m;
97 if (z_p > 0 && z_m > 0) {
99 T eta = (z_p * z_m) / (z_p + z_m);
100 T phi = eta * (
p / z_p - q / z_m);
105 v_hat_p = (q + phi) / z_m;
106 v_hat_m = (
p - phi) / z_p;
107 }
else if (z_p > 0) {
109 sigma_hat_m = sigma_m;
113 }
else if (z_m > 0) {
114 sigma_hat_p = sigma_p;
120 sigma_hat_p = sigma_p;
121 sigma_hat_m = sigma_m;
132 v_hat = (1 + r) / z *
p;
133 sigma_hat = (1 - r) *
p;
142 T q = 0.5 * (z *
v -
sigma);
144 v_hat = (1 + r) / z * q;
145 sigma_hat = -(1 - r) * q;
154 T* n, T* m, T* l, T Tx, T Ty, T Tz, T& Tn, T& Tm, T& Tl
156 Tn = Tx * n[0] + Ty * n[1] + Tz * n[2];
157 Tm = Tx * m[0] + Ty * m[1] + Tz * m[2];
158 Tl = Tx * l[0] + Ty * l[1] + Tz * l[2];
163 T* n, T* m, T* l, T Fn, T Fm, T Fl, T& Fx, T& Fy, T& Fz
165 Fx = n[0] * Fn + m[0] * Fm + l[0] * Fl;
166 Fy = n[1] * Fn + m[1] * Fm + l[1] * Fl;
167 Fz = n[2] * Fn + m[2] * Fm + l[2] * Fl;
173 F = 0.5 * (z * (
v - v_hat) + (myT - T_hat));
178 F = 0.5 * (z * (
v - v_hat) - (myT - T_hat));
void computeFluctuationsLeft(T z, T myT, T T_hat, T v, T v_hat, T &F)
void GramSchmidt(T *y, T *z)
void rotateIntoOrthogonalBasis(T *n, T *m, T *l, T Tx, T Ty, T Tz, T &Tn, T &Tm, T &Tl)
void riemannSolverNodal(T v_p, T v_m, T sigma_p, T sigma_m, T z_p, T z_m, T &v_hat_p, T &v_hat_m, T &sigma_hat_p, T &sigma_hat_m)
void riemannSolverBCn(T v, T sigma, T z, T r, T &v_hat, T &sigma_hat)
void createLocalBasis(T *n, T *m, T *l)
void getVelocities(const T *Q, T &vx, T &vy, T &vz)
void computeFluctuationsRight(T z, T myT, T T_hat, T v, T v_hat, T &F)
void rotateIntoPhysicalBasis(T *n, T *m, T *l, T Fn, T Fm, T Fl, T &Fx, T &Fy, T &Fz)
void computeTractions(const T *Q, const T *n, T &Tx, T &Ty, T &Tz)
void riemannSolverBC0(T v, T sigma, T z, T r, T &v_hat, T &sigma_hat)