Skip to content

feat: MGR strategy for single phase flow + ALM poromechanics - #4125

Open
victorapm wants to merge 43 commits into
developfrom
feature/paludettomag1/ALM-singlephase
Open

feat: MGR strategy for single phase flow + ALM poromechanics#4125
victorapm wants to merge 43 commits into
developfrom
feature/paludettomag1/ALM-singlephase

Conversation

@victorapm

@victorapm victorapm commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Completes the fully implicit single-phase poromechanics + conforming-fractures ALM path started in #3961 and the MGR recipe work in #3962.

On top of #3961 / #3962, this PR adds:

  • Production-ready coupled sparsity: setSparsityPattern builds the exact union of flow and mechanics patterns (incl. well/perforation blocks for reservoir-and-wells)
  • Per-mesh-body dR/dAperture row offsets through assembleHydrofracFluxTerms (fixes multi-body row aliasing); reject unsupported multi-target setups
  • Dedicated ALM kernels and a nested MGR strategy for the displacement/bubble F-block
  • singlePhasePoromechanicsConformingFracturesALMReservoirFVM MGR strategy that eliminates the well block on a third level
  • hypredrive near-null space from rigid-body modes (six vectors per mesh body)
  • Shared appendSparsityPattern utility and tighter ALM MGR field/thermal guards

jafranc and others added 30 commits February 2, 2026 13:59
This reverts commit b877903.
…ciepe

# Conflicts:
#	src/coreComponents/linearAlgebra/utilities/LinearSolverParameters.hpp
  - The mechanics solver replaced the existing flow sparsity pattern, discarding flow and custom FIM couplings.
  - Pressure–bubble couplings checked for the nonexistent wrapper bubbleElementsList instead of the registered bubbleCells key.

Fixed both by unioning the flow and mechanics patterns before adding FIM couplings, and by using the correct wrapper key
jafranc and others added 10 commits August 13, 2026 13:47
…romechanicsConformingFracturesALM-FullyImplicit' into jafranc/feat/ALMreciepe
- Replace the solver's setupSystem override with a setSparsityPattern hook, and
  build the coupled pattern as the exact union of the flow and mechanics
  patterns in one resizeFromRowCapacities pass.
- Assemble the well and perforation blocks for the reservoir-and-wells
  instantiation, which previously left every well row empty.
- Give dR/dAperture per-mesh-body row offsets, threaded to the flow solver
  through assembleHydrofracFluxTerms, so several mesh bodies no longer share a
  single row space.
- Add the singlePhasePoromechanicsConformingFracturesALMReservoirFVM MGR
  strategy, which eliminates the well block on a third level rather than leaving
  well rate and BHP rows in the coarse grid.
- Restrict the well-free ALM MGR strategy to exactly three fields, and reject
  thermal input, which the single-component fracture assembly cannot represent.
- Supply rigid-body modes as the near-null space when hypredrive drives the
  solve, emitting one set of six vectors per mesh body.
- Reject multi-target setups in HydrofractureSolver and
  PoromechanicsConformingFractures, whose dR/dAperture indexing carries no
  per-mesh offset and silently aliased rows.
- Move dR/dAperture between host and device without touching it, so the
  immutable sparsity structure is not re-uploaded every Newton iteration.
- Collapse assembleHydrofracFluxTerms to a single virtual carrying the row
  offsets, removing the mutually forwarding seven- and eight-argument overloads.
- Extract appendSparsityPattern into linearAlgebra/utilities and use it for the
  five duplicated row-copy loops; move MGR block counting into MGRStrategyBase.
- Fix is_formattable_v under C++20, where probing with std::format reports every
  type as formattable, and add the formatter static_asserts back to LogPart and
  TableData.
- Merge the exact and coordinate-based 2D-to-3D neighbour lists in VTKUtilities
  instead of letting the coordinate result overwrite the exact one.
@victorapm victorapm self-assigned this Aug 18, 2026
@victorapm victorapm added the ci: run CUDA builds Allows to triggers (costly) CUDA jobs label Aug 18, 2026
@victorapm
victorapm requested a review from rrsettgast as a code owner August 18, 2026 22:51
@victorapm victorapm added the ci: run integrated tests Allows to run the integrated tests in GEOS CI label Aug 18, 2026
@victorapm victorapm added the flag: no rebaseline Does not require rebaseline label Aug 18, 2026
@victorapm victorapm added the ci: run code coverage enables running of the code coverage CI jobs label Aug 18, 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: no rebaseline Does not require rebaseline flag: ready for review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants