Skip to content

QDYN version 2.0

Compare
Choose a tag to compare
@martijnende martijnende released this 11 Dec 08:37
· 30 commits to master since this release

What's new in version 2.0?

User features

CNS friction model

The Chen-Niemeijer-Spiers (CNS) microphysical model has been implemented, and an alternative to the commonly used rate-and-state friction model. The CNS model can be seen as a friction law based on the interplay between granular flow (grain sliding) and one or more creep mechanisms. QDYN supports multiple independent creep mechanisms operating simultaneously. This facilitates (temperature-dependent) transitions from one mechanism to another. See Van den Ende et al. (2018) for details of the model mechanics and implementation.

Thermal pressurization

Thermal pressurization is a dynamic weakening mechanism, which causes a strong reduction in shear strength at coseismic slip velocities by thermal expansion of the pore fluid. This mechanism is compatible with both the CNS and rate-and-state friction laws. NOTE: the implementation of thermal pressurization is under active development, and the accuracy of this module is not guaranteed.

Faults surrounded by a damaged zone

Mature faults are surrounded by damaged materials, more compliant than their host rocks. QDYN now handles faults that bisect a pre-existing compliant layer of uniform thickness and elastic properties, embedded in a stiffer elastic medium. See Idini and Ampuero (2017) for results of earthquake cycle simulations based on this new feature.

Runge-Kutta solver

A second ODE solver has been implemented based on the Runge-Kutta-Fehlberg method. This method is 4th-order accurate, with a 5th-order error estimator for the time step control. The Runge-Kutta solver tends to make smaller time-steps than the Bulirsch-Stoer solver, but each of which are computationally cheaper, so that overall the performance of both solvers is similar.

Free surface in 2D simulations

The effect of a free surface at z=0 on a 1D vertical, anti-plane fault in a 2D half-space (MESHDIM=1) can be accounted for exactly by a mirror image approach, introducing a plane of symmetry around the first mesh element. Previously this had to be done by the user, but now QDYN can enforce symmetry internally by setting FINITE = 2 for infinite faults, or FINITE = 3 for periodic faults.

Python wrapper

In addition to the MATLAB wrapper, a Python 3 wrapper (pyqdyn.py) has been created. This wrapper contains similar functionalities as the MATLAB wrapper. Currently thermal pressurization and the CNS model are only supported by the Python wrapper.

Windows 10 compatibility

QDYN is now compatible with Windows 10 platforms, enabled by the Ubuntu subsystem. See the documentation for installation instructions.

Developer features

Testing suite

Internal unit testing is now possible by calling QDYN with the test keyword. The unit tests currently cover only parts related to rate-and-state friction, and are embedded within the QDYN Fortran code (so that the outcomes are independent of the compiler/platform). Python-based integration tests can be found in the new test/ directory. The entire test suite (unit and integration tests) can be launched by running test/test_suite.py. It is recommended to run this test suite prior to pushing a commit upstream.

SCEC2018 benchmark results

The QDYN team participated in the two first benchmarks of the SCEC SEAS project (Southern California Earthquake Center, Sequences of Earthquakes and Aseismic Slip project). The input and output processing scripts for the first benchmark exercise (BP1) are found in examples/scec_benchmarks/BP1.

Code clean-up and re-structuring

  • Prior to the solver step, variables (theta, tau/v, etc.) are merged (packed) into a single variable and passed onto the solver subroutine. After the solver step, the resulting variable is split-up (unpacked) back into the original variables. This process is repeated on various locations in the code with some code duplication. The packing/unpacking procedure is now centralised as a subroutine in utils.f90.
  • Pieces of legacy code have been removed, comments/descriptions in the code have been updated.
  • Code preparations are made for the implementation of unstructured fault meshes.

Versioning and version control

The QDYN project will rely more heavily on git branches for code version control, each feature/patch being developed on and released from a dedicated branch. Features and bug fixes will be released more frequently and will be accompanied by a version number increment. This way, publications citing the QDYN project can refer to a specific version number.

Bug fixes since version 1.1

  • Index bug in domain partitioning that affected parallel (MPI) runs (pull request #8)
  • Stress variable now properly initialized. This may have been a bug for some compilers (commit 46ba675)
  • Mesh orientation input handling in kernel_calc/qdyn_okada_kernel.m (commit 8e76c65)
  • Crack size output now disabled in spring-block simulations (commit 9445b19)