Open baagaard-usgs opened 1 year ago
setKernelsResidual()
Context
f0u
(separate kernels for 2D and 3D)
cohesion
, normalTraction
(scalar), lagrangeMultiplier
(dim)f0u_neg
and f0u_pos
"entry" function that calls FaultFriction general kernels
We probably want to consider a zero tolerance (with a potentially separate tolerance for the fault normal direction) to detect "zero" slip and slip rate.
As in v2.x, these would be set in faults::FaultCohesiveDyn at the Python level and passed down to C++ with reasonable default values. These would be passed to the kernels in constants
and set via _updateKernelConstants()
.
@knepley The residual kernels for the contributions to the displacement field for the fault faces (which is the Lagrange multiplier) only get the solution for one side of the fault. For example, pylith::fekernels::FaultCohesiveKin::f0u_pos() gets passed in sOff with sOff[0] == 2. sOff
is being set by PetscDSGetComponentOffsetsCohesive() which takes the side of the fault as an argument.
For fault friction we want to compute slip and slip rate, which are parameters to the friction model, to compute the traction term which gets combined with the Lagrange multiplier. I think we want to pass in the solution for both sides of the fault for all kernels involving the cohesive cell, even though the kernel "output" is only for one side in the case of the functions for the fault faces.
@baagaard-usgs Oh, that is right. We wanted to mimic a regular kernel. If we now want it to take all values, we can just pass 0 instead of s to the OffsetCohesive(), or even have a switch to indicate what kind of kernel input you want.
We decided to change the PETSc code so that we always get all solution fields for both sides of the fault when integrating the fault faces or cohesive cells.
Matt has created a PETSc branch knepley/fix-cohesive-offsets
that updates the solution field offsets so that we will get solution fields for both sides of the fault in the kernels involving cohesive cells (fault faces and cohesive cell). I am working on a PyLith branch update-fault-kernels-solution-offsets
in my fork that updates the fault kernels accordingly. We hope to get these branches integrated into PETSc knepley/pylith
and PyLIth main
by the end of this week (Aug 4).
FaultCohesiveDyn
fault_rheology
traction_perturbation
open_free_surface
Friction
ISAFaultRheology
FaultRheology
implementsT(x,t)
without assuming friction coefficientFriction
implementsT_f = C + \mu_f T_n
Friction Models
StaticFriction
SlipWeakening
TractionPerturbation
[DONE]Implements
T_initial
with same T(x,t) as boundary conditionsIssues