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

feat: Rate-and-state friction with explicit time integration #3450

Merged
merged 65 commits into from
Dec 10, 2024
Merged
Show file tree
Hide file tree
Changes from 59 commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
6246ded
feat: add rate- and state-dependent friction model.
CusiniM Aug 12, 2024
2dc8e16
wip rate and state impl.
CusiniM Aug 13, 2024
02c0918
WiP: implemented several rs functions.
CusiniM Aug 15, 2024
e959ca6
add TwoByTwo dense solver.
CusiniM Aug 15, 2024
634ee68
add solver and kernels.
CusiniM Aug 15, 2024
933f289
wip.
CusiniM Aug 20, 2024
4e16608
remove solvers.
CusiniM Aug 26, 2024
f1ac5b1
Merge remote-tracking branch 'origin/develop' into feature/cusini/rat…
CusiniM Aug 26, 2024
aa4590f
Merge remote-tracking branch 'origin/develop' into feature/cusini/rat…
CusiniM Sep 12, 2024
bd377d4
add physicsPackage.
CusiniM Sep 13, 2024
b013a8e
Merge remote-tracking branch 'origin/develop' into feature/cusini/rat…
CusiniM Sep 13, 2024
b002441
add o cmake list plus add some needed keys.
CusiniM Sep 13, 2024
0c23356
add missing files.
CusiniM Sep 13, 2024
b892630
added shearIMpedance.
CusiniM Sep 16, 2024
fdde350
fixed compilation errors.
CusiniM Sep 18, 2024
b4dec1b
Merge remote-tracking branch 'origin/develop' into feature/cusini/rat…
CusiniM Oct 3, 2024
26263d3
submodule update
CusiniM Oct 3, 2024
e146040
submodule update
CusiniM Oct 3, 2024
593ef7c
Use asinh.
CusiniM Oct 3, 2024
23e926d
compiles fine.
CusiniM Oct 3, 2024
b7ca2aa
wip: adding spring-slider example.
CusiniM Oct 7, 2024
91425f4
wip: spring-slider.
CusiniM Oct 7, 2024
272eb34
move changes.
CusiniM Oct 8, 2024
81772bf
wip spring-slider
CusiniM Oct 8, 2024
6a95883
added timestep control
CusiniM Oct 9, 2024
2032024
wip: running.
CusiniM Oct 10, 2024
863a6be
spring slider first timestep working. Wip on continuing.
CusiniM Oct 11, 2024
f57ea0b
Spring slider works
CusiniM Oct 11, 2024
f3e6573
add integratedTest.
CusiniM Oct 11, 2024
34616eb
Merge branch 'develop' into feature/cusini/rate-and-state
CusiniM Oct 11, 2024
7515bc3
wip: Use 2-component slip/slipRate in rate-and-state kernel
VidarStiernstrom Oct 14, 2024
5349711
1D spring slider with 2-component slip/sliprate working
VidarStiernstrom Oct 14, 2024
0ef3b42
Fix copy of slip rate vector
VidarStiernstrom Oct 17, 2024
7996ae6
wip: Add missing components to xml required for setting up 2D spring …
VidarStiernstrom Oct 17, 2024
067e13b
Use non-linear solve for slip rate + projection to compute slip velocity
VidarStiernstrom Oct 18, 2024
53e1fca
change size of spring slider.
CusiniM Oct 21, 2024
0fb4435
Merge branch 'develop' into feature/cusini/rate-and-state
CusiniM Oct 25, 2024
16fdabd
use nonlinearSolverParameters.
CusiniM Oct 25, 2024
bdc0afc
Merge branch 'feature/cusini/rate-and-state' of github.com:GEOS-DEV/G…
CusiniM Oct 25, 2024
e98519d
fix timestepping.
CusiniM Oct 25, 2024
a3b615f
Merge branch 'develop' into feature/cusini/rate-and-state
CusiniM Oct 28, 2024
b2b65e4
Merge branch 'develop' into feature/cusini/rate-and-state
CusiniM Nov 4, 2024
ae02875
Add rate-and-state kernel for explicit time stepping and quasi-dynami…
VidarStiernstrom Nov 17, 2024
a57165c
Remove commented-out line
VidarStiernstrom Nov 18, 2024
03d13bc
Update strings for added rate-and-state fields
VidarStiernstrom Nov 19, 2024
be6c4db
Change to using a single multi-d array for the Runge-Kutta stage rates
VidarStiernstrom Nov 21, 2024
1b3a893
Update string
VidarStiernstrom Nov 21, 2024
baa5aef
Add PID controller to adaptive time step update
VidarStiernstrom Nov 26, 2024
4ae1d9f
Bracket slip rate after Newton update
VidarStiernstrom Nov 26, 2024
7290dd1
Add kernel for EmbeddedRungeKutta time stepping of slip and state and…
VidarStiernstrom Nov 28, 2024
35abee2
Add some comments to QuasiDynamicEQRK32 solver
VidarStiernstrom Nov 28, 2024
806ac22
Add Bogacki-Shampine 3(2) Runge-Kutta method
VidarStiernstrom Nov 29, 2024
9d21e4e
Add PIDController class for time step control
VidarStiernstrom Nov 29, 2024
da0f674
Add comments
VidarStiernstrom Nov 29, 2024
4076576
Merge branch 'develop' into feature/cstierns/rate-and-state-explicit
VidarStiernstrom Dec 5, 2024
15f3116
Merge branch 'develop' into feature/cstierns/rate-and-state-explicit
VidarStiernstrom Dec 5, 2024
66ab9bc
Add xml input for explicit solver, update subrepo, add docs
VidarStiernstrom Dec 6, 2024
e9ac367
Address review comments
VidarStiernstrom Dec 6, 2024
c79e65a
Rename constructor arguments to prevent shadowing
VidarStiernstrom Dec 6, 2024
36fd40d
Update inputFiles/inducedSeismicity/inducedSeismicity.ats
CusiniM Dec 7, 2024
37d940c
Merge branch 'develop' into feature/cstierns/rate-and-state-explicit
VidarStiernstrom Dec 7, 2024
9dcdbbd
rebaseline
CusiniM Dec 8, 2024
62de8e9
make functions public for nvcc.
CusiniM Dec 9, 2024
1caf325
Change methods from private to public
VidarStiernstrom Dec 9, 2024
f861184
fix nvcc compilation erros.
CusiniM Dec 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 167 additions & 0 deletions inputFiles/inducedSeismicity/SpringSliderExplicit_base.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
<?xml version="1.0" ?>
<Problem>
<Solvers>
<QuasiDynamicEQRK32
name="SpringSlider"
targetRegions="{ Fault }"
shearImpedance="4.41"
initialDt="1e-5"
logLevel="1"
discretization="FE1">
</QuasiDynamicEQRK32>

<SurfaceGenerator
name="SurfaceGen"
targetRegions="{ Domain }"
rockToughness="1.0"
mpiCommOrder="1"
fractureRegion="Fault"/>
</Solvers>

<NumericalMethods>
<FiniteElements>
<FiniteElementSpace
name="FE1"
order="1"/>
</FiniteElements>
</NumericalMethods>

<Mesh>
<InternalMesh
name="mesh"
elementTypes="{ C3D8 }"
xCoords="{ 0, 1 }"
yCoords="{ 0, 2 }"
zCoords="{ 0, 1 }"
nx="{ 1 }"
ny="{ 2 }"
nz="{ 1 }"
cellBlockNames="{ cb1 }"/>
</Mesh>

<Geometry>
<ThickPlane
name="faultPlane"
normal="{ 0, 1, 0 }"
origin="{ 0, 1, 0 }"
thickness="0.1"/>
</Geometry>

<ElementRegions>
<CellElementRegion
name="Domain"
cellBlocks="{ cb1 }"
materialList="{}"/>

<SurfaceElementRegion
name="Fault"
materialList="{frictionLaw}"
defaultAperture="1e-3"/>
</ElementRegions>

<Constitutive>
<RateAndStateFriction
name="frictionLaw"
defaultA="0.01"
defaultB="0.015"
defaultDc="1.0e-5"
defaultReferenceVelocity="1.0e-6"
defaultReferenceFrictionCoefficient="0.6"/>
</Constitutive>

<FieldSpecifications>
<FieldSpecification
name="fault"
fieldName="ruptureState"
initialCondition="1"
objectPath="faceManager"
scale="1"
setNames="{ faultPlane }"/>

<FieldSpecification
name="normalTraction"
fieldName="traction"
initialCondition="1"
objectPath="ElementRegions/Fault/FractureSubRegion"
component="0"
scale="50"
setNames="{all}"/>

<FieldSpecification
name="shearTraction1"
fieldName="traction"
initialCondition="1"
objectPath="ElementRegions/Fault/FractureSubRegion"
component="1"
scale="21.2132034356"
setNames="{all}"/>
<FieldSpecification
name="shearTraction2"
fieldName="traction"
initialCondition="1"
objectPath="ElementRegions/Fault/FractureSubRegion"
component="2"
scale="21.2132034356"
setNames="{all}"/>
<FieldSpecification
name="stateVariable"
fieldName="stateVariable"
initialCondition="1"
objectPath="ElementRegions/Fault/FractureSubRegion"
scale="0.6"
setNames="{all}"/>
<FieldSpecification
name="slipRate"
fieldName="slipRate"
initialCondition="1"
objectPath="ElementRegions/Fault/FractureSubRegion"
scale="1.0e-6"
setNames="{all}"/>
<FieldSpecification
name="slipVelocity1"
fieldName="slipVelocity"
initialCondition="1"
objectPath="ElementRegions/Fault/FractureSubRegion"
component="0"
scale="0.70710678118e-6"
setNames="{all}"/>
<FieldSpecification
name="slipVelocity2"
fieldName="slipVelocity"
initialCondition="1"
objectPath="ElementRegions/Fault/FractureSubRegion"
component="1"
scale="0.70710678118e-6"
setNames="{all}"/>
</FieldSpecifications>

<Outputs>
<VTK
name="vtkOutput"
plotFileRoot="springSliderExplicit"/>
<Restart
name="restart"/>

<TimeHistory
name="timeHistoryOutput"
sources="{/Tasks/slipCollection,/Tasks/slipRateCollection,/Tasks/stateVariableCollection}"
filename="springSliderExplicit"/>
</Outputs>

<Tasks>
<PackCollection
name="slipCollection"
objectPath="ElementRegions/Fault/FractureSubRegion"
fieldName="displacementJump"/>

<PackCollection
name="slipRateCollection"
objectPath="ElementRegions/Fault/FractureSubRegion"
fieldName="slipRate"/>

<PackCollection
name="stateVariableCollection"
objectPath="ElementRegions/Fault/FractureSubRegion"
fieldName="stateVariable"/>
</Tasks>
</Problem>
32 changes: 32 additions & 0 deletions inputFiles/inducedSeismicity/SpringSliderExplicit_smoke.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0" ?>
<Problem>
<Included>
<File
name="./SpringSliderExplicit_base.xml"/>
</Included>

<Events
maxTime="4.5e4">

<SoloEvent
name="generateFault"
target="/Solvers/SurfaceGen"/>

<PeriodicEvent
name="vtkOutput"
cycleFrequency="1"
targetExactTimestep="0"
target="/Outputs/vtkOutput"/>

<PeriodicEvent
name="solverApplications"
maxEventDt="1e4"
target="/Solvers/SpringSlider"/>

<PeriodicEvent
name="resarts"
timeFrequency="2e4"
targetExactTimestep="0"
target="/Outputs/restart"/>
</Events>
</Problem>
4 changes: 2 additions & 2 deletions inputFiles/inducedSeismicity/SpringSlider_base.xml
Original file line number Diff line number Diff line change
Expand Up @@ -123,15 +123,15 @@
initialCondition="1"
objectPath="ElementRegions/Fault/FractureSubRegion"
component="0"
scale="0."
scale="0.70710678118e-6"
setNames="{all}"/>
<FieldSpecification
name="slipVelocity2"
fieldName="slipVelocity"
initialCondition="1"
objectPath="ElementRegions/Fault/FractureSubRegion"
component="1"
scale="0."
scale="0.70710678118e-6"
setNames="{all}"/>
</FieldSpecifications>

Expand Down
9 changes: 8 additions & 1 deletion inputFiles/inducedSeismicity/inducedSeismicity.ats
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@ decks = [
partitions=((1, 1, 1), ),
restart_step=0,
check_step=3262,
restartcheck_params=RestartcheckParameters(atol=1e-4, rtol=1e-3))
restartcheck_params=RestartcheckParameters(atol=1e-4, rtol=1e-3))
CusiniM marked this conversation as resolved.
Show resolved Hide resolved
TestDeck(
name="SpringSliderExplicit_smoke",
description="Spring slider 0D system",
partitions=((1, 1, 1), ),
restart_step=0,
check_step=532,
restartcheck_params=RestartcheckParameters(atol=1e-4, rtol=1e-3))
]
generate_geos_tests(decks)
16 changes: 16 additions & 0 deletions src/coreComponents/physicsSolvers/contact/ContactFields.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ DECLARE_FIELD( dispJump,
WRITE_AND_READ,
"Displacement jump vector in the local reference system" );

DECLARE_FIELD( dispJump_n,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should get rid of old at some point though.

"displacementJump",
array2d< real64 >,
0,
NOPLOT,
WRITE_AND_READ,
"Displacement jump vector in the local reference system at the current time-step" );

DECLARE_FIELD( slip,
"slip",
array1d< real64 >,
Expand Down Expand Up @@ -114,6 +122,14 @@ DECLARE_FIELD( traction,
WRITE_AND_READ,
"Fracture traction vector in the local reference system." );

DECLARE_FIELD( traction_n,
"traction_n",
array2d< real64 >,
0,
NOPLOT,
WRITE_AND_READ,
"Initial fracture traction vector in the local reference system at this time-step." );

DECLARE_FIELD( deltaTraction,
"deltaTraction",
array2d< real64 >,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ set( physicsSolvers_headers
inducedSeismicity/inducedSeismicityFields.hpp
inducedSeismicity/rateAndStateFields.hpp
inducedSeismicity/QuasiDynamicEQ.hpp
inducedSeismicity/QuasiDynamicEQRK32.hpp
inducedSeismicity/SeismicityRate.hpp
inducedSeismicity/kernels/RateAndStateKernels.hpp
inducedSeismicity/kernels/SeismicityRateKernels.hpp
Expand All @@ -12,6 +13,7 @@ set( physicsSolvers_headers
# Specify solver sources
set( physicsSolvers_sources
${physicsSolvers_sources}
inducedSeismicity/QuasiDynamicEQ.cpp
inducedSeismicity/QuasiDynamicEQ.cpp
inducedSeismicity/QuasiDynamicEQRK32.cpp
inducedSeismicity/SeismicityRate.cpp
PARENT_SCOPE )
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ namespace geos
using namespace dataRepository;
using namespace fields;
using namespace constitutive;
using namespace rateAndStateKernels;

QuasiDynamicEQ::QuasiDynamicEQ( const string & name,
Group * const parent ):
Expand Down Expand Up @@ -149,8 +150,8 @@ real64 QuasiDynamicEQ::solverStep( real64 const & time_n,

/// 2. Solve for slip rate and state variable and, compute slip
GEOS_LOG_LEVEL_RANK_0( 1, "Rate and State solver" );

integer const maxNewtonIter = m_nonlinearSolverParameters.m_maxIterNewton;
integer const maxIterNewton = m_nonlinearSolverParameters.m_maxIterNewton;
real64 const newtonTol = m_nonlinearSolverParameters.m_newtonTol;
forDiscretizationOnMeshTargets( domain.getMeshBodies(), [&]( string const &,
MeshLevel & mesh,
arrayView1d< string const > const & regionNames )
Expand All @@ -161,7 +162,8 @@ real64 QuasiDynamicEQ::solverStep( real64 const & time_n,
SurfaceElementSubRegion & subRegion )
{
// solve rate and state equations.
rateAndStateKernels::createAndLaunch< parallelDevicePolicy<> >( subRegion, viewKeyStruct::frictionLawNameString(), m_shearImpedance, maxNewtonIter, time_n, dtStress );
createAndLaunch< ImplicitFixedStressRateAndStateKernel, parallelDevicePolicy<> >( subRegion, viewKeyStruct::frictionLawNameString(), m_shearImpedance, maxIterNewton, newtonTol, time_n,
dtStress );
// save old state
saveOldStateAndUpdateSlip( subRegion, dtStress );
} );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class QuasiDynamicEQ : public PhysicsSolverBase
struct viewKeyStruct : public PhysicsSolverBase::viewKeyStruct
{
/// stress solver name
static constexpr char const * stressSolverNameString() { return "stressSolverName"; }
constexpr static char const * stressSolverNameString() { return "stressSolverName"; }
/// Friction law name string
constexpr static char const * frictionLawNameString() { return "frictionLawName"; }
/// Friction law name string
Expand Down
Loading
Loading