Skip to content

docs: Tutorial examples of a vertical fault using the ALM solver#4082

Open
jhuang2601 wants to merge 11 commits into
developfrom
docs/jhuang/verticalFault
Open

docs: Tutorial examples of a vertical fault using the ALM solver#4082
jhuang2601 wants to merge 11 commits into
developfrom
docs/jhuang/verticalFault

Conversation

@jhuang2601

@jhuang2601 jhuang2601 commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

This PR

  • documents the analytical verification of ALM solver using a slipped vertical fault problem (shear slip for frictionless fault) in porous media
  • documents the analytical verification of ALM solver using a stable vertical fault problem (shear stress for friction and stable fault) in porous media
  • compares the results with both external (splitting fault with mesh doctor) and internal (internal surface generator) workflow
  • benchmarks the convergence of the relative 𝐿2-error with respect to mesh resolution
  • adds smoke tests for both workflows to the integratedTests

@jhuang2601 jhuang2601 marked this pull request as ready for review June 12, 2026 18:03
@jhuang2601 jhuang2601 changed the title docs: tutorial example with a vertical fault docs: Tutorial examples of a vertical fault using the ALM solver Jun 12, 2026
@jhuang2601 jhuang2601 added ci: run CUDA builds Allows to triggers (costly) CUDA jobs ci: run integrated tests Allows to run the integrated tests in GEOS CI ci: run code coverage enables running of the code coverage CI jobs labels Jun 12, 2026

@dkachuma dkachuma left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The two examples look quite similar. Can we possibly discuss them in the same context as a comparison?

<File name="ALM_verticalFault_base.xml"/>
</Included>

<Constitutive>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I would expect constitutive relations to be in the base file and shared between the smoke/bench and internal/external cases. Are they actually different across these models?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Fault mechanical properties (in constitutive block) are different for the case with stable and slipped fault.

name="mesh1"
useGlobalIds="0"
nodesetNames="{ faultNodes }"
file="../../MESH/verticalFault_ISG_benchmark.vtu"/>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

In these cases I have expected the internal workflow to be able to use the "domain" mesh from the external workflow. Are there differences between verticalFault_ISG_benchmark.vtu and Domain_verticalFault_benchmark.vtu?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes
The attribute faultNodes must be included in verticalFault_ISG_benchmark.vtu to define the location and extent of the fault plane, which will be used by SurfaceGenerator.
Domain_verticalFault_benchmark.vtu contains duplicated nodes after splitting the mesh with mesh-doc.

For more information on defining finite elements numerical schemes,
please see the dedicated :ref:`FiniteElement` section.

The finite volume method requires the specification of a discretization scheme.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
The finite volume method requires the specification of a discretization scheme.
The finite volume method, for the flow solver, requires the specification of a discretization scheme.

@bd713 bd713 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks, @jhuang2601.
Along the same lines as @dkachuma, we could probably also share the scripts (especially for the analytical solution).

:start-after: <!-- SPHINX_MESH -->
:end-before: <!-- SPHINX_MESH_END -->

The vtm file ``verticalFault_ESG_benchmark.vtm`` references two separate mesh files: the damain mesh ``Domain_verticalFault_benchmark.vtu`` and the fault mesh ``Fault_verticalFault_benchmark.vtu``, which are generated prior to running the GEOS simulation. The ``mesh doctor`` module provides a convenient way to prepare these meshes. For this case, functions ``generateFractures`` and ``generateGlobalIds`` are used (more information here: `mesh doctor <https://geosx-geosx.readthedocs-hosted.com/projects/geosx-geospythonpackages/en/latest/mesh-doctor.html#>`__).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
The vtm file ``verticalFault_ESG_benchmark.vtm`` references two separate mesh files: the damain mesh ``Domain_verticalFault_benchmark.vtu`` and the fault mesh ``Fault_verticalFault_benchmark.vtu``, which are generated prior to running the GEOS simulation. The ``mesh doctor`` module provides a convenient way to prepare these meshes. For this case, functions ``generateFractures`` and ``generateGlobalIds`` are used (more information here: `mesh doctor <https://geosx-geosx.readthedocs-hosted.com/projects/geosx-geospythonpackages/en/latest/mesh-doctor.html#>`__).
The vtm file ``verticalFault_ESG_benchmark.vtm`` references two separate mesh files: the domain mesh ``Domain_verticalFault_benchmark.vtu`` and the fault mesh ``Fault_verticalFault_benchmark.vtu``, which are generated prior to running the GEOS simulation. The ``mesh doctor`` module provides a convenient way to prepare these meshes. For this case, functions ``generateFractures`` and ``generateGlobalIds`` are used (more information here: `mesh doctor <https://geosx-geosx.readthedocs-hosted.com/projects/geosx-geospythonpackages/en/latest/mesh-doctor.html#>`__).

:start-after: <!-- SPHINX_MESH -->
:end-before: <!-- SPHINX_MESH_END -->

The vtm file ``verticalFault_ESG_benchmark.vtm`` references two separate mesh files: the damain mesh ``Domain_verticalFault_benchmark.vtu`` and the fault mesh ``Fault_verticalFault_benchmark.vtu``, which are generated prior to running the GEOS simulation. The ``mesh doctor`` module provides a convenient way to prepare these meshes. For this case, functions ``generateFractures`` and ``generateGlobalIds`` are used (more information here: `mesh doctor <https://geosx-geosx.readthedocs-hosted.com/projects/geosx-geospythonpackages/en/latest/mesh-doctor.html#>`__).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Suggested change
The vtm file ``verticalFault_ESG_benchmark.vtm`` references two separate mesh files: the damain mesh ``Domain_verticalFault_benchmark.vtu`` and the fault mesh ``Fault_verticalFault_benchmark.vtu``, which are generated prior to running the GEOS simulation. The ``mesh doctor`` module provides a convenient way to prepare these meshes. For this case, functions ``generateFractures`` and ``generateGlobalIds`` are used (more information here: `mesh doctor <https://geosx-geosx.readthedocs-hosted.com/projects/geosx-geospythonpackages/en/latest/mesh-doctor.html#>`__).
The vtm file ``verticalFault_ESG_benchmark.vtm`` references two separate mesh files: the domain mesh ``Domain_verticalFault_benchmark.vtu`` and the fault mesh ``Fault_verticalFault_benchmark.vtu``, which are generated prior to running the GEOS simulation. The ``mesh doctor`` module provides a convenient way to prepare these meshes. For this case, functions ``generateFractures`` and ``generateGlobalIds`` are used (more information here: `mesh doctor <https://geosx-geosx.readthedocs-hosted.com/projects/geosx-geospythonpackages/en/latest/mesh-doctor.html#>`__).

@jhuang2601

Copy link
Copy Markdown
Contributor Author

The two examples look quite similar. Can we possibly discuss them in the same context as a comparison?

As different fault modes (static vs slip), fault mechanical properties and resulting parameters (stress vs displacementJump) are used for two cases, I have to separate them into two examples to avoid confusion.

@jhuang2601

Copy link
Copy Markdown
Contributor Author

Thanks, @jhuang2601. Along the same lines as @dkachuma, we could probably also share the scripts (especially for the analytical solution).

Yes, generate_analytical.py has already been pushed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci: run code coverage enables running of the code coverage CI jobs ci: run CUDA builds Allows to triggers (costly) CUDA jobs ci: run integrated tests Allows to run the integrated tests in GEOS CI EPIC - FF/Contact Contact mechanics type: documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants