docs: Tutorial examples of a vertical fault using the ALM solver#4082
docs: Tutorial examples of a vertical fault using the ALM solver#4082jhuang2601 wants to merge 16 commits into
Conversation
dkachuma
left a comment
There was a problem hiding this comment.
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> |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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"/> |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
| 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
left a comment
There was a problem hiding this comment.
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#>`__). |
There was a problem hiding this comment.
| 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#>`__). |
There was a problem hiding this comment.
| 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#>`__). |
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. |
Yes, |
|
Expected failure for adding new tests and rebaseline is required |
|
|
||
| **Context** | ||
|
|
||
| In this example, the Augmented Lagrangian Method (ALM) `(Frigo et al., 2026) <https://www.sciencedirect.com/science/article/abs/pii/S0021999126003414>`__ is applied to solve a frictional fault contact problem in a depleted reservoir. This approach employs conformal discretization where discontinuities are explicitly represented by 2D interface elements placed between 3D continuum elements. The formulation overcomes the inf-sup instability of low-order discretizations by satisfying the Babuška–Brezzi condition via displacement enrichment with bubble functions and is coupled with a Coulomb friction law. Implemented in GEOS, the model computes displacement discontinuities (fault slip upon reactivation) along the frictionless fault, which are subsequently verified against the corresponding analytical solution `(Jansen and Meulenbroek, 2022) <https://njgjournal.nl/index.php/njg/article/view/11453/17972>`__. This comparison confirms the accuracy of our fault contact model and coupled poroelastic formulation. |
There was a problem hiding this comment.
| In this example, the Augmented Lagrangian Method (ALM) `(Frigo et al., 2026) <https://www.sciencedirect.com/science/article/abs/pii/S0021999126003414>`__ is applied to solve a frictional fault contact problem in a depleted reservoir. This approach employs conformal discretization where discontinuities are explicitly represented by 2D interface elements placed between 3D continuum elements. The formulation overcomes the inf-sup instability of low-order discretizations by satisfying the Babuška–Brezzi condition via displacement enrichment with bubble functions and is coupled with a Coulomb friction law. Implemented in GEOS, the model computes displacement discontinuities (fault slip upon reactivation) along the frictionless fault, which are subsequently verified against the corresponding analytical solution `(Jansen and Meulenbroek, 2022) <https://njgjournal.nl/index.php/njg/article/view/11453/17972>`__. This comparison confirms the accuracy of our fault contact model and coupled poroelastic formulation. | |
| In this example, the Augmented Lagrangian Method (ALM) `(Frigo et al., 2026) <https://www.sciencedirect.com/science/article/abs/pii/S0021999126003414>`__ is applied to solve a frictional fault contact problem in a depleted reservoir. This approach employs conformal discretization where discontinuities are explicitly represented by 2D interface elements placed between 3D continuum elements, coupled with a Coulomb friction law. The formulation overcomes the inf-sup instability of low-order discretizations by satisfying the Babuška–Brezzi condition via displacement enrichment with bubble functions. The model computes displacement discontinuities (fault slip upon reactivation) along the frictionless fault, which are subsequently verified against the corresponding analytical solution `(Jansen and Meulenbroek, 2022) <https://njgjournal.nl/index.php/njg/article/view/11453/17972>`__. This comparison confirms the accuracy of our fault contact model and coupled poroelastic formulation. |
| ------------------------------------------------------------------ | ||
|
|
||
| We simulate induced stresses and shear slip along a vertical fault in a depleted reservoir and compare our results against an analytical solution. | ||
| In conformity to the analytical set-up, the reservoir is divided into two parts by a vertical fault. The fault crosses and offsets the entire reservoir layer and is well contained with the domain. The domain is infinite, homogeneous, isotropic, and elastic. The reservoir is depressurized uniformly upon depletion, and we neglect the transient effect of fluid flow. A pressure drop is applied to the reservoir layer located in the center of the domain. The overburden and underburden are impermeable, and no pressure changes occur in these layers. Due to poromechanical effects, pore pressure changes in the reservoir cause a mechanical deformation of the entire domain. This deformation leads to a stress (normal and shear) perturbation on the fault plane, potentially leading to fault reactivation. For verification, the numerical model considers plane strain deformation and the Coulomb failure criterion. |
There was a problem hiding this comment.
| In conformity to the analytical set-up, the reservoir is divided into two parts by a vertical fault. The fault crosses and offsets the entire reservoir layer and is well contained with the domain. The domain is infinite, homogeneous, isotropic, and elastic. The reservoir is depressurized uniformly upon depletion, and we neglect the transient effect of fluid flow. A pressure drop is applied to the reservoir layer located in the center of the domain. The overburden and underburden are impermeable, and no pressure changes occur in these layers. Due to poromechanical effects, pore pressure changes in the reservoir cause a mechanical deformation of the entire domain. This deformation leads to a stress (normal and shear) perturbation on the fault plane, potentially leading to fault reactivation. For verification, the numerical model considers plane strain deformation and the Coulomb failure criterion. | |
| In the analytical problem definition, the reservoir is divided into two parts by a vertical fault. The fault crosses and offsets the entire reservoir layer and is well contained with the domain. The domain is infinite, homogeneous, isotropic, and elastic. The reservoir is depressurized uniformly upon depletion, and we neglect the transient effect of fluid flow. A pressure drop is applied to the reservoir layer located in the center of the domain. The overburden and underburden are impermeable, and no pressure changes occur in these layers. Due to poromechanical effects, pore pressure changes in the reservoir cause a mechanical deformation of the entire domain. This deformation leads to a stress (normal and shear) perturbation on the fault plane, potentially leading to fault reactivation. For verification, the numerical model considers plane strain deformation and the Coulomb failure criterion. |
| 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#>`__). | ||
|
|
||
|
|
||
| For internal workflow, only the domain mesh file ``verticalFault_ISG_benchmark.vtu`` is imported |
There was a problem hiding this comment.
| For internal workflow, only the domain mesh file ``verticalFault_ISG_benchmark.vtu`` is imported | |
| For the internal workflow, only the domain mesh file ``verticalFault_ISG_benchmark.vtu`` is imported |
|
|
||
| As mentioned before, the coupling solver and the solid mechanics solver require the specification of a discretization method called ``FE1``. | ||
| In GEOS, this discretization method represents a finite element method | ||
| using linear basis functions and Gaussian quadrature rules. |
There was a problem hiding this comment.
| using linear basis functions and Gaussian quadrature rules. | |
| using tri-linear basis functions and Gaussian quadrature rules. |
| As mentioned before, the coupling solver and the solid mechanics solver require the specification of a discretization method called ``FE1``. | ||
| In GEOS, this discretization method represents a finite element method | ||
| using linear basis functions and Gaussian quadrature rules. | ||
| For more information on defining finite elements numerical schemes, |
There was a problem hiding this comment.
| For more information on defining finite elements numerical schemes, | |
| For more information on defining the finite element numerical schemes, |
|
|
||
| **Context** | ||
|
|
||
| In this example, the Augmented Lagrangian Method (ALM) `(Frigo et al., 2026) <https://www.sciencedirect.com/science/article/abs/pii/S0021999126003414>`__ is applied to solve a friction and stable fault contact problem in a depleted reservoir. This approach employs conformal discretization where discontinuities are explicitly represented by 2D interface elements placed between 3D continuum elements. The formulation overcomes the inf-sup instability of low-order discretizations by satisfying the Babuška–Brezzi condition via displacement enrichment with bubble functions and is coupled with a Coulomb friction law. Implemented in GEOS, the model computes stress perturbations (normal and shear components) along the stable fault, which are subsequently verified against the corresponding analytical solution `(Jansen and Meulenbroek, 2022) <https://njgjournal.nl/index.php/njg/article/view/11453/17972>`__. This comparison confirms the accuracy of our fault contact model and coupled poroelastic formulation. |
There was a problem hiding this comment.
| In this example, the Augmented Lagrangian Method (ALM) `(Frigo et al., 2026) <https://www.sciencedirect.com/science/article/abs/pii/S0021999126003414>`__ is applied to solve a friction and stable fault contact problem in a depleted reservoir. This approach employs conformal discretization where discontinuities are explicitly represented by 2D interface elements placed between 3D continuum elements. The formulation overcomes the inf-sup instability of low-order discretizations by satisfying the Babuška–Brezzi condition via displacement enrichment with bubble functions and is coupled with a Coulomb friction law. Implemented in GEOS, the model computes stress perturbations (normal and shear components) along the stable fault, which are subsequently verified against the corresponding analytical solution `(Jansen and Meulenbroek, 2022) <https://njgjournal.nl/index.php/njg/article/view/11453/17972>`__. This comparison confirms the accuracy of our fault contact model and coupled poroelastic formulation. | |
| In this example, the Augmented Lagrangian Method (ALM) `(Frigo et al., 2026) <https://www.sciencedirect.com/science/article/abs/pii/S0021999126003414>`__ is applied to solve a friction and stable fault contact problem in a depleted reservoir. This approach employs conformal discretization where discontinuities are explicitly represented by 2D interface elements placed between 3D continuum elements, coupled with a Coulomb friction law. The formulation overcomes the inf-sup instability of low-order discretizations by satisfying the Babuška–Brezzi condition via displacement enrichment with bubble functions. The model computes stress perturbations (normal and shear components) along the stable fault, which are subsequently verified against the corresponding analytical solution `(Jansen and Meulenbroek, 2022) <https://njgjournal.nl/index.php/njg/article/view/11453/17972>`__. This comparison confirms the accuracy of our fault contact model and coupled poroelastic formulation. |
| @@ -0,0 +1,303 @@ | |||
| .. _unstableVerticalFault: | |||
There was a problem hiding this comment.
The description of the test cases (stable and slipped) is nearly identical. Perhaps we can merge into a single validation study with two subsections? Or simpler, make the second one much shorter, with a link to the other to get common details?
This PR