feat: MGR strategy for single phase flow + ALM poromechanics - #4125
Open
victorapm wants to merge 43 commits into
Open
feat: MGR strategy for single phase flow + ALM poromechanics#4125victorapm wants to merge 43 commits into
victorapm wants to merge 43 commits into
Conversation
… into jafranc/feat/ALMreciepe
This reverts commit b877903.
…csConformingFracturesALM-FullyImplicit
…csConformingFracturesALM-FullyImplicit
…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
…phase' into jafranc/feat/ALMreciepe
…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
requested review from
OmarDuran,
frankfeifan,
jhuang2601 and
tjb-ltk
as code owners
August 18, 2026 22:51
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
setSparsityPatternbuilds the exact union of flow and mechanics patterns (incl. well/perforation blocks for reservoir-and-wells)dR/dAperturerow offsets throughassembleHydrofracFluxTerms(fixes multi-body row aliasing); reject unsupported multi-target setupssinglePhasePoromechanicsConformingFracturesALMReservoirFVMMGR strategy that eliminates the well block on a third levelappendSparsityPatternutility and tighter ALM MGR field/thermal guards