Skip to content

test: mixed-dimensional consistency#3957

Open
OmarDuran wants to merge 242 commits intodevelopfrom
feature/oduran/test_fem_stress_consistency
Open

test: mixed-dimensional consistency#3957
OmarDuran wants to merge 242 commits intodevelopfrom
feature/oduran/test_fem_stress_consistency

Conversation

@OmarDuran
Copy link
Contributor

@OmarDuran OmarDuran commented Feb 2, 2026

This PR introduces a new suite of integration tests designed to verify the consistency and correctness of several core capabilities: the Finite Element Method (FEM) mechanical solver SolidMechanicsAugmentedLagrangianContact, single-phase flow, compositional hydrostatic equilibrium, and the workflow for defining fractures using the SurfaceGenerator class.

These tests specifically target the resolution of mixed-dimensional problems generated with the internal Surface Generator, where fractures (2D entities) are conformal within a 3D matrix mesh. The test suite also includes verification of the topological modifications induced in the mesh by fracture generation.

Among its key benefits, this PR enables a more robust initialization procedure for mechanical problems with fractures. It allows for the following workflow: initialize the intact rock problem, perform a fracturing step (generation of fractures), initialize fracture tractions based on the already computed surrounding stress, and finally equilibrate the entire system with fractures before the actual dynamic simulation.

<Events minTime="0.0" maxTime="1.0">
    <SoloEvent name="IntactRockInitialization" targetTime="0.0" beginTime="0.0" target="/Tasks/PRE.SPLIT.STEP"/>
    <SoloEvent name="FracturingStep" target="/Solvers/SurfaceGen" targetTime="0.0" beginTime="0.0"/> 
    <SoloEvent name="FracturedRockInitialization" targetTime="0.0" beginTime="0.0" target="/Tasks/POST.SPLIT.STEP"/>
    <PeriodicEvent name="solverApplications" target="/Solvers/mechSolver" forceDt="1.0"/>
</Events>

The following four C++ integration test files are introduced; all other code modifications are strictly test-driven and were required to support these new integration tests.

All simulations shown in the image sequence were executed using 12 MPI ranks.
C1: Mesh configuration containing five fractures with no topological connection to the domain boundary.
(Expected Euler characteristic of the resulting 3D mesh: 2)

C2: Mesh configuration containing three intersecting fractures that are topologically connected to the domain boundary.
(Expected Euler characteristic of the resulting 3D mesh: 8)

C3: Mesh configuration containing three perfectly aligned fractures.
(Expected Euler characteristic of the resulting 3D mesh: 2)

Test description

testFEMConsistency.cpp (MPI test)

The test ensures that the mechanical solvers preserve stress equilibrium and correctly handle contact/interface conditions across different mesh types and fracture configurations.

The physical setup corresponds to a pure compression case (-10 [MPa]), with no shear induced by the boundary conditions. As a result, the stress field is constant, which allows for direct verification. For volume elements, the averaged computed stress tensor is checked against the applied boundary tractions. For fracture surfaces, the traction vector
𝑡=𝜎⋅𝑛 is applied neighboring volume cells onto the fracture faces, computed, and verified on both sides of the fracture against the expected traction. The value of the normal traction (-10 [MPa]) can be easily verified because the loading condition is hydrostatic and the displacement solution is trilinear and exact.
The test ensures that the mechanical solvers preserve stress equilibrium and correctly handle contact/interface conditions across different mesh types and fracture configurations.

Regardless of the DFN geometry, the normal traction is -10[MPa] and the displacement jump is zero; that is, continuity of stresses and displacements is obtained:
C1
stress_state

C2
stress_state_full_span

testMixedDimHydrostaticEquilibrium.cpp (MPI test)

This test verifies that a hydrostatic equilibrium state defined in both the matrix (3D elements) and fractures (2D elements) with compatible boundary conditions, it is indeed a valid solution of the underlying mixed-dimensional equilibrium problem.

Because the system is initialized exactly at equilibrium, executing a single simulation step should not modify the solution regardless of the time step size. The test therefore checks that the numerical solver preserves the hydrostatic state without introducing spurious pressure or saturation changes.

Regardless of the DFN geometry, saturation and pressure on fractures and matrix should be aligned:
C1
sat_pressure_example

C2
sat_pressure_example_full_span

testMixedDimSinglePhaseFlow.cpp (MPI test)

This test verifies that the single-phase flow solver reproduces exact linear pressure solutions in mixed-dimensional settings. It ensures that the solver correctly handles contact and interface conditions between matrix and fracture elements across different mesh configurations, while preserving the exactness of the analytical pressure solution.

C3 satisfies K-orthogonality; therefore, exactness in linear pressure solutions is expected:
pressure_state

testSurfaceGenerator.cpp (Serial and MPI test)

This test validates the correctness of the Surface Generator by ensuring that the mesh undergoes the expected topological modifications during fracture generation.

The tests cover a variety of fracture configurations and fracture networks (62 configurations), which are compiled in the following directory:src/coreComponents/integrationTests/meshTests/dfn_market. It verifies:

  • The expected number of fractures created in the mesh
  • The correct duplication of nodes required for fracture separation
  • The Euler characteristic of the mesh before and after the split, ensuring that the topological transformation is consistent

Special acknowledgments to @rrsettgast for his guidance and suggestions during the implementation of these changes, and to @castelletto1 for providing the five-fracture mesh configurations.

@OmarDuran OmarDuran self-assigned this Feb 2, 2026
wip: uncrustify

wip: fixing mpi test in release

wip: uncrustify

wip: test on docker container.

wip: test on docker container II.

wip: fixing mpi test in release

wip: test on docker container II.

wip: test on docker container III.

wip

wip

wip

wip

disables the graph-based partitioner (ParMETIS) and forces the use of a geometric partitioner

deterministic partitioning

deterministic partitioning

Update SurfaceGenerator.cpp

wip
@OmarDuran OmarDuran force-pushed the feature/oduran/test_fem_stress_consistency branch from 91c6153 to 8115845 Compare March 5, 2026 06:43
@OmarDuran OmarDuran added 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 labels Mar 5, 2026
@OmarDuran OmarDuran marked this pull request as ready for review March 5, 2026 10:38
@OmarDuran OmarDuran changed the title Feature/oduran/test fem stress consistency test: mixed-dimensional consistency Mar 5, 2026
@OmarDuran OmarDuran added flag: ready for review flag: requires rebaseline Requires rebaseline branch in integratedTests labels Mar 5, 2026
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 flag: ready for review flag: requires rebaseline Requires rebaseline branch in integratedTests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Initial Pressure in the Fracture Adding check and warning message for fracture pressure

3 participants