Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Force time nucleation for Rate and State friction #1081

Open
1 task done
jwjeremy opened this issue Mar 25, 2024 · 5 comments
Open
1 task done

Force time nucleation for Rate and State friction #1081

jwjeremy opened this issue Mar 25, 2024 · 5 comments

Comments

@jwjeremy
Copy link
Contributor

jwjeremy commented Mar 25, 2024

Rationale

The current rate-and-state friction requires both nucleation size and nucleation stress to initiate the rupture. The current implementation often requires high nucleation stress (even reaching a super high stress level? e.g. nucleation stress patch reaching R_nuc = 2.1) (I am using FL=103). Such a high-stress nucleation patch would lead to an artificial high stress-drop, high slip in the hypocenter region, and strong off-fault plastic deformation near the hypocenter region if off-fault plasticity is enabled.

An alternative is to force the friction to drop to a weakening level, with an artificial pattern. It would be similar to the current implementation in LSW and avoid the nucleation high-stress patch.

Description

We can follow the formulation of the nucleation procedure introduced by Gabriel et al., 2012 JGR:

  • Prescribe a nucleation region with time-dependent size, within which we force the friction coefficient to be smaller than a prescribed time-dependent value. The nucleation region first expand (and then contrast optionally).
  • Within the nucleation region, we keep updating the state variable according to the evolution equation. We set the friction coefficient to the minimum between the prescribed time-dependent value and the rate-and-state equation.

For reference and comparison, the current force_time_rutpure LSWis currently implemented as

  • current state variable is obtained by slip/dc, clampped between 0 - 1
  • variable f2 (clamp between 0 - 1)
    • = 1 if t > forcedRuptureTime
    • = t/t0 else, t0 to be the charateristic time
  • within the forced rupture time, the state variable is updated max(current value and f2)

(

for (unsigned pointIndex = 0; pointIndex < misc::numPaddedPoints; pointIndex++) {
// integrate slip rate to get slip = state variable
const auto update = resampledSlipRate[pointIndex] * this->deltaT[timeIndex];
this->accumulatedSlipMagnitude[ltsFace][pointIndex] += update;
// Actually slip is already the stateVariable for this FL, but to simplify the next equations
// we divide it here by the critical distance.
stateVariable[pointIndex] = std::min(
std::fabs(this->accumulatedSlipMagnitude[ltsFace][pointIndex]) / dC[ltsFace][pointIndex],
static_cast<real>(1.0));
// Forced rupture time
real f2 = 0.0;
if (this->drParameters->t0 == 0) {
// avoid branching
// if time > forcedRuptureTime, then f2 = 1.0, else f2 = 0.0
f2 = 1.0 * (time >= this->forcedRuptureTime[ltsFace][pointIndex]);
} else {
f2 = std::clamp((time - this->forcedRuptureTime[ltsFace][pointIndex]) /
this->drParameters->t0,
static_cast<real>(0.0),
static_cast<real>(1.0));
}
stateVariable[pointIndex] = std::max(stateVariable[pointIndex], f2);
)

I guess a similar implementation can be done by creating this clipping friction / state for the Rate-and-State friction?

For example, editing this state-update function in the FastVelocityWeakeningLaw?

Additional information

General information

  • I have searched the issues of this repo and believe this is not a duplicate

Other than that, thanks for taking the time to contribute to SeisSol!

@Thomas-Ulrich
Copy link
Contributor

Just commenting on "even reaching a super high stress level? e.g. nucleation stress patch reaching R_nuc = 2.1".
Something I realized recently:

(Tau_ini + Tau_nuc) / sigma_ini should exceed
mu_s = f0 + a ln(V/V_RS_iniSlipRate)
if V_RS_iniSlipRate=1e-16 and V=0.1 and a=0.01, mu_s = 0.94 (you can check the actual value using fault receivers).
Therefore, R seems to be super high, because computed based on mu_s = 0.6

@jwjeremy
Copy link
Contributor Author

jwjeremy commented Apr 10, 2024

Just commenting on "even reaching a super high stress level? e.g. nucleation stress patch reaching R_nuc = 2.1". Something I realized recently:

(Tau_ini + Tau_nuc) / sigma_ini should exceed mu_s = f0 + a ln(V/V_RS_iniSlipRate) if V_RS_iniSlipRate=1e-16 and V=0.1 and a=0.01, mu_s = 0.94 (you can check the actual value using fault receivers). Therefore, R seems to be super high, because computed based on mu_s = 0.6

I doubled checked the RS friction (FL103), friction would evolute according to $F_{LV}$ with slip rate $V &lt;&lt; V_W$ (weakening slide rate = 0.1 m/s) considering the start of the nucleation

$f_{LV} = f_0 - (b - a) ln(V/V_0)$ with $V_0$ as reference slip rate

if $f_0$ = 0.5, $V_0$ = 1E-6, (b-a) = -0.008, V = 0.1, $f_{LV}$ would be 0.59

or considering the rate effect only $f_{LV} = f_0 + a ln(V/V_0)$ with $V_0$ as reference slip rate , $f_{LV}$ would be 0.71
Let me double-check with the fault receiver

@jwjeremy
Copy link
Contributor Author

jwjeremy commented Apr 11, 2024

@Thomas-Ulrich @AliceGabriel I found out that when we take the nucleation stress tensor from the regional stress model, we also add the normal stress in addition to the shear traction (e.g. the Kaikora simulation, R = 5 for nucleation). That would lead to an increase in normal stress within the nucleation region, which leads to a very high-yielding stress even if the friction value is reasonable.

Below shows traction, friction, Pn0 evolution with time at nucleation (blue) and elsewhere (red). The friction increases slightly from $f_0 = 0.5$ to 0.62 only, but the Pn0 doubled at the hypocenter region.
image

@jwjeremy
Copy link
Contributor Author

jwjeremy commented Apr 11, 2024

@Thomas-Ulrich I also made a simple script to compute the nucleation stress tensor without normal stress with given fault geometry and stress level in the following pull request
#1095

@AliceGabriel
Copy link
Contributor

Tagging @gabriellemhobson here

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants