2021 PyLith Hackathon

Overview of Hackathon

The 2021 PyLith hackathon will be held online over 7 days, June 7-10 (Mon-Thu) and June 14-16 (Mon-Wed), 2021. We plan to have 3-4 projects with 3-4 people working on each project. In addition to the list of potential projects below, prospective participants may also propose projects by posting a 1-2 page description under this topic.

All projects involve implementing new features in the code along with appropriate tests, examples, and documentation.

See the 2021 PyLith Hackathon webpage for additional details, including the registration process.

Recommended prerequisites for participating in the hackathon:

  • Desire to learn modern software development techniques

  • Comfortable with using the command line (terminal) on Unix operating systems

  • Familiar with C, C++, and/or Python

  • Familiar with boundary value problems and partial differential equations

  • Ability to spend time preparing for the hackathon

  • At least some knowledge of object-oriented programming

Potential Projects

Adaptive mesh refinement

Add support for adaptive mesh refinement (AMR) in PyLith by leveraging the AMR capabilities in PETSc. The main tasks include:

  • Remove any remaining dependencies of the problem specification on the finite-element mesh.

  • Add the ability to switch to a different (refined) mesh within a given problem/simulation.

  • Develop an appropriate error metric that can be used to refine the mesh.

Earthquake cycle

Couple quasi-static interseismic and dynamic coseismic simulations to resolve the full dynamics of the earthquake cycle, including rupture propagation and radiated seismic waves and viscoelastic relaxation and aseismic creep.

The main tasks include:

  • Transferring the solution and state information from one problem/mesh/solver to another.

  • Creating a new problem type for earthquake cycle simulations with appropriate high-level parameters.

  • Implement the appropriate trigger for switching between the quasi-static and dynamic solvers leveraging previous studies.

Poroelasticity

Extend the current poroelasticity implementation.

The main tasks include:

  • Add examples and benchmarks.

  • Add poroelastic effects for faulting,

Time-dependent Green’s functions

Implement time-dependent Green’s functions using either the traditional forward simulation or reciprocity and strain Green’s tensors.

The main tasks include:

  • Updating the PyLith output implementation to accomodate 4-D arrays (Green’s function id, time, point, components).

  • Implementing the impulses (forward simulation case) or point loads (reciprocity with strain Green’s tensor approach).

  • Updating the GreensFn problem implementation to include time dependence.

Additional recommended prerequisites:

  • Comfortable writing code in Python and C++

  • Understanding of Green’s functions

Point dislocation earthquake sources

Implement point dislocation earthquake sources. This provide a point source implementation to complement the finite-source implementation of cohesive cells. Point dislocations are useful for modeling events whose rupture dimensions are small compared to the discretization size.

The main tasks include:

  • Implement point dislocations via a moment tensor.

  • Comfortable writing code in Python and C++

  • Understanding of Green’s functions

Import meshes from Gmsh

Add support for reading Gmsh files. This would include becoming familiar with using Gmsh to generate finite-element mesh and updating several examples with Gmsh Python scripts.

Viscoelastic bulk rheologies using strain rate

The current Maxwell and power-law viscoelastic rheologies are formulated with strain as the primary variable. The time-dependent nature of the viscoelastic relaxation is approximated with a series expansion. A more natural formulation is to use strain rate rather than strain as the primary variable. This project would add new implementations of the Maxwell, generalized Maxwell, and power-law viscoelastic bulk rheologies that use strain rate rather than strain as the primary variable.

Before the hackathon we expect that the project participants would work with the PyLith developers to derive the new bulk constitutive equations. The hackathon would be used to implement the new bulk constitutive models, create appropriate tests, benchmarks, and examples, and update the documentation.

Prospective participants can also send an email with a description of a proposed project to baagaard@usgs.gov if you would prefer not to post the description on the CIG Community Forum.

2021 PyLith Hackathon

7 days over 2 weeks

June 7-10 (Monday-Thursday) and June 14-16 (Monday-Wednesday)

Application is now available.

Hackathon web page: https://geodynamics.org/cig/events/calendar/2021-pylith-hack/

Updated list of potential hackathon projects

Prospective participants can also send an email with a description of a proposed project to baagaard@usgs.gov.

Poroelasticity

Extend the current poroelasticity implementation.

The main tasks include:

  • Add examples and benchmarks.
  • Add poroelastic effects for faulting,

Point sources

Implement point dislocation earthquake sources and/or fluid injection wells. This provide a point source implementation to complement the finite-source implementation of cohesive cells. Point dislocations are useful for modeling events whose rupture dimensions are small compared to the discretization size.

The main tasks include:

  • Implement fluid injection wells via pressure source.
  • Implement point dislocations via a moment tensor.
  • Implement a flexible specification of point source locations.

Earthquake cycle

Couple quasi-static interseismic and dynamic coseismic simulations to resolve the full dynamics of the earthquake cycle, including rupture propagation and radiated seismic waves and viscoelastic relaxation and aseismic creep.

The main tasks include:

  • Creating a new problem type for earthquake cycle simulations with appropriate high-level parameters.
  • Transferring the solution and state information from one problem/mesh/solver to another.
  • Implement the appropriate trigger for switching between the quasi-static and dynamic solvers leveraging previous studies.

Gmsh integration

Add Gmsh Python scripts for examples to complement existing CUBIT/Trelis journal scripts.

Full-scale tests

Add additional full-scale tests, filling in gaps in the current testing scheme.

The main tasks include:

  • Creating PyLith simulations for boundary value problems with analytical solutions.
  • Create Python scripts implementing the analytical solution.
  • Gmsh Python scripts for examples to complement existing CUBIT/Trelis journal scripts.

Reimplement static Green’s functions

Migrate the static Green’s functions implementation from PyLith v2 to v3.

The main tasks include:

  • Updating the GreensFn problem implementation for the current Python/C++ separation.
  • Migrate the slip impulse fault implementation to the auxiliary field layout.

More ambitious projects

Viscoelastic bulk rheologies using strain rate

The current Maxwell and power-law viscoelastic rheologies are formulated with strain as the primary variable. The time-dependent nature of the viscoelastic relaxation is approximated with a series expansion. A more natural formulation is to use strain rate rather than strain as the primary variable. This project would add new implementations of the Maxwell, generalized Maxwell, and power-law viscoelastic bulk rheologies that use strain rate rather than strain as the primary variable.

Before the hackathon the project participants would need to work with the PyLith developers to derive the new bulk constitutive equations. The hackathon would be used to implement the new bulk constitutive models, create appropriate tests, benchmarks, and examples, and update the documentation.

Time-dependent Green’s functions

Implement time-dependent Green’s functions using either the traditional forward simulation or reciprocity and strain Green’s tensors.

The main tasks include:

  • Updating the PyLith output implementation to accomodate 4-D arrays (Green’s function id, time, point, components).
  • Implementing the impulses (forward simulation case) or point loads (reciprocity with strain Green’s tensor approach).
  • Updating the GreensFn problem implementation to include time dependence.

Adaptive mesh refinement

Add support for adaptive mesh refinement (AMR) in PyLith by leveraging the AMR capabilities in PETSc. The main tasks include:

  • Remove any remaining dependencies of the problem specification on the finite-element mesh.
  • Add the ability to switch to a different (refined) mesh within a given problem/simulation.
  • Develop an appropriate error metric that can be used to refine the mesh.