5 double sigma_xx = Q[2];
6 double sigma_yy = Q[3];
7 double sigma_xy = Q[4];
10 Tx = n[0]*sigma_xx + n[1]*sigma_xy;
11 Ty = n[0]*sigma_xy + n[1]*sigma_yy;
18 Tn= Tx*n[0] + Ty*n[1];
19 Tm= Tx*m[0] + Ty*m[1];
24 Fx = n[0]*Fn + m[0]*Fm;
25 Fy = n[1]*Fn + m[1]*Fm;
30 F = 0.5*(z*(
v-v_hat) + (T-T_hat));
34 F = 0.5*(z*(
v-v_hat) - (T-T_hat));
45 double q = 0.5*(z*
v -
sigma);
51 void riemannSolver_boundary(
int faceIndex,
double r,
double vn ,
double vm,
double Tn ,
double Tm,
double zp,
double zs ,
double& vn_hat ,
double& vm_hat,
double& Tn_hat ,
double& Tm_hat)
54 if (faceIndex < DIMENSIONS) {
70 void riemannSolver_Nodal(
double v_p,
double v_m,
double sigma_p,
double sigma_m,
double z_p ,
double z_m,
double& v_hat_p ,
double& v_hat_m,
double& sigma_hat_p,
double& sigma_hat_m){
80 if(z_p > 0 && z_m > 0){
81 eta=(z_p*z_m)/(z_p+z_m);
83 phi= eta*(
p/z_p - q/z_m);
120 constexpr
int numberOfVariables = ::exahype2::elastic::ElasticSolver::NumberOfUnknowns;
122 q_x =Q[numberOfVariables+4];
123 q_y =Q[numberOfVariables+5];
124 r_x =Q[numberOfVariables+6];
125 r_y =Q[numberOfVariables+7];
128 void get_normals(
int normalNonZeroIndex,
double& norm,
double* n,
const double* Q){
135 if (normalNonZeroIndex == 0){
136 norm = std::sqrt(q_x*q_x + q_y*q_y);
140 if (normalNonZeroIndex == 1){
141 norm = std::sqrt(r_x*r_x + r_y*r_y);
149 double phi_1,
double eta,
double tau_str,
double sigma_n){
151 double Phi = std::abs(phi_1);
152 Vel = (Phi - tau_str)/eta;
155 v1 = phi_1/(eta+tau_str/Vel);
158 tau1 = phi_1 - eta*v1;
169 if ((-
w+tol)<
x &&
x< (
w-tol)){
173 else if (std::abs(-
w-
x)<=tol || std::abs(
x-
w)<=tol){
182 void TauStrength(
double& tau_str,
double sigma_n,
double S,
double*
x,
double t)
187 double sigma0 = 120.0;
195 mu_s = mu_s + 1e10*(1.0-fy);
196 double fric_coeff = mu_s - (mu_s-mu_d) *
std::min(S,S_c)/S_c;
197 tau_str = fric_coeff*sigma_n;
221 Tx = n[0]*sxx + n[1]*sxy;
222 Ty = n[0]*sxy + n[1]*syy;
245 void prestress(
double& T0_n,
double& T0_m,
double*
x,
double t,
double* m,
double* n)
248 double sxx,syy,szz,sxy,sxz, syz;
265 T0_m = T0_m+11.6 *fy;
307 double& vn_hat_p,
double& vn_hat_m,
double& Tn_hat_p,
double& Tn_hat_m,
308 double vm_p,
double vm_m,
double Tm_p,
double Tm_m,
double zm_p ,
double zm_m,
309 double& vm_hat_p,
double& vm_hat_m,
double& Tm_hat_p,
double& Tm_hat_m,
310 double* m,
double* n,
double*
x,
double S)
313 double p_m = zm_p*vm_p + Tm_p;
314 double p_n = zn_p*vn_p + Tn_p;
317 double q_m = zm_m*vm_m - Tm_m;
318 double q_n = zn_m*vn_m - Tn_m;
321 double eta_s=(zm_p*zm_m)/(zm_p+zm_m);
322 double eta_n=(zn_p*zn_m)/(zn_p+zn_m);
324 double phi_m= eta_s*(p_m/zm_p - q_m/zm_m);
325 double phi_n= eta_n*(p_n/zn_p - q_n/zn_m);
333 vn_hat_m = (p_n - phi_n)/zn_p;
335 vn_hat_p = (q_n + phi_n)/zn_m;
338 double tau_lock = std::sqrt(std::pow(T0_m + phi_m, 2));
339 double sigma_n = std::max(0.0, -(T0_n + phi_n));
342 double Tl, Tm, vv_l, vv_m;
346 double fault_position= 40.0/27*(27-1)*0.5;
348 double r = std::sqrt((
x[0]-fault_position)*(
x[0]-fault_position) + (
x[1]-7.5)*(
x[1]-7.5));
350 if (tau_lock >= tau_str){
351 slip_weakening(vv_m, Vel, Tm, phi_m+T0_m, eta_s, tau_str, sigma_n);
353 Tm_hat_m = Tm - T0_m;
355 Tm_hat_p = Tm - T0_m;
367 vm_hat_p = (Tm_hat_m + q_m)/zm_m + vv_m;
369 vm_hat_m = (p_m - Tm_hat_p)/zm_p - vv_m;
static double min(double const x, double const y)
void localBasis(double *n, double *m)
void riemannSolver_boundary(int faceIndex, double r, double vn, double vm, double Tn, double Tm, double zp, double zs, double &vn_hat, double &vm_hat, double &Tn_hat, double &Tm_hat)
void initialstresstensor(double &sxx, double &syy, double &sxy, double *x)
void TauStrength(double &tau_str, double sigma_n, double S, double *x, double t)
void slip_weakening(double &v1, double &Vel, double &tau1, double phi_1, double eta, double tau_str, double sigma_n)
void extractTransformation(const double *const Q, double &q_x, double &q_y, double &r_x, double &r_y)
void generate_fluctuations_left(double z, double T, double T_hat, double v, double v_hat, double &F)
void extract_tractions_and_particle_velocity(double *n, const double *Q, double &Tx, double &Ty, double &vx, double &vy)
void rotate_into_physical_basis(double *n, double *m, double Fn, double Fm, double &Fx, double &Fy)
void rotate_into_orthogonal_basis(double *n, double *m, double Tx, double Ty, double &Tn, double &Tm)
void get_normals(int normalNonZeroIndex, double &norm, double *n, const double *Q)
void generate_fluctuations_right(double z, double T, double T_hat, double v, double v_hat, double &F)
void riemannSolver_Nodal(double v_p, double v_m, double sigma_p, double sigma_m, double z_p, double z_m, double &v_hat_p, double &v_hat_m, double &sigma_hat_p, double &sigma_hat_m)
void SlipWeakeningFriction(double vn_p, double vn_m, double Tn_p, double Tn_m, double zn_p, double zn_m, double &vn_hat_p, double &vn_hat_m, double &Tn_hat_p, double &Tn_hat_m, double vm_p, double vm_m, double Tm_p, double Tm_m, double zm_p, double zm_m, double &vm_hat_p, double &vm_hat_m, double &Tm_hat_p, double &Tm_hat_m, double *m, double *n, double *x, double S)
void prestress(double &T0_n, double &T0_m, double *x, double t, double *m, double *n)
void riemannSolver_BC0(double v, double sigma, double z, double r, double &v_hat, double &sigma_hat)
void extract_tractions(double sxx, double syy, double sxy, double *n, double &Tx, double &Ty)
void riemannSolver_BCn(double v, double sigma, double z, double r, double &v_hat, double &sigma_hat)
double boxcar(double &f, double x, double w)