Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
bd68d98
first pass
jafranc Feb 2, 2026
8b2fc7f
Add FIM coupling for single phase fracture ALM
npillardou Feb 4, 2026
dedd57e
missing guards
jafranc Feb 4, 2026
0a29b7b
Merge commit '8b2fc7f10411c61baf85f5d7ceca8087840586dc' into jafranc/…
jafranc Feb 4, 2026
9143dd1
Add fix to fracture state in case of high cohesion
npillardou Feb 5, 2026
616626b
Correct traction in limit
npillardou Feb 5, 2026
24cf0ef
Add fix on synchronization for ghost issue remaining
npillardou Feb 5, 2026
68d789c
uncrustify
jhuang2601 Feb 5, 2026
552cb9c
Merge remote-tracking branch 'origin/fix/ALM-cohesion-stick-slip-bug'…
jafranc Feb 6, 2026
c381048
Update with other branch
npillardou Feb 4, 2026
edac1f9
Correct sign convention + hardcoded constitutive
npillardou Feb 11, 2026
889de70
Correct sparsity pattern
npillardou Feb 12, 2026
fa6fe03
Merge remote-tracking branch 'origin/develop' into jafranc/feat/ALMre…
jafranc Feb 12, 2026
b877903
Change MGR config
npillardou Feb 12, 2026
02cf3e1
Revert "Change MGR config"
jafranc Mar 10, 2026
f20ccca
Merge remote-tracking branch 'origin/develop' into jafranc/feat/ALMre…
jafranc Mar 10, 2026
6721e09
Merge branch 'develop' into feature/npillardou/SinglePhasePoromechani…
jhuang2601 Jul 8, 2026
70f565b
Merge branch 'develop' into feature/npillardou/SinglePhasePoromechani…
jhuang2601 Jul 10, 2026
1759535
Add missing A^bp coupling term
npillardou Jul 10, 2026
edfbf9f
Merge branch 'develop' into feature/paludettomag1/ALM-singlephase
victorapm Aug 6, 2026
11d6133
Fix VTK mesh redistribution
victorapm Aug 6, 2026
39f04b1
Improve ALM HypreDrive support
victorapm Aug 6, 2026
68fe9d5
Improved MGR strategy for SinglePhasePoromechanicsConformingFracturesALM
victorapm Aug 7, 2026
ab89e2b
Merge remote-tracking branch 'origin/develop' into jafranc/feat/ALMre…
victorapm Aug 8, 2026
bf48697
Fix compilation error
victorapm Aug 8, 2026
4c29442
Add missing MGR strategy bridge
victorapm Aug 8, 2026
35205fa
Add compatibility with vtk 9.6.2
victorapm Aug 8, 2026
8fe08f2
Fix bug in the fully coupled ALM + single-phase sparsity construction
victorapm Aug 8, 2026
1cba563
Fix SIGFPE issue
victorapm Aug 8, 2026
bccf477
Merge remote-tracking branch 'origin/feature/paludettomag1/ALM-single…
jafranc Aug 13, 2026
e495ee3
Merge remote-tracking branch 'origin/feature/npillardou/SinglePhasePo…
jafranc Aug 13, 2026
43b7c06
missing guards
jafranc Aug 13, 2026
308882c
Merge branch 'develop' into jafranc/feat/ALMreciepe
jafranc Aug 13, 2026
23af402
Merge branch 'develop' into jafranc/feat/ALMreciepe
victorapm Aug 14, 2026
238ef9e
Merge branch 'develop' into feature/paludettomag1/ALM-singlephase
victorapm Aug 14, 2026
b2f8c6e
Merge branch 'jafranc/feat/ALMreciepe' into feature/paludettomag1/ALM…
victorapm Aug 14, 2026
bfb673d
Complete the ALM conforming-fractures single-phase poromechanics solver
victorapm Aug 15, 2026
46081ff
Merge branch 'develop' into feature/paludettomag1/ALM-singlephase
victorapm Aug 15, 2026
606bc59
Improve MGR strategy for fully-coupled ALM-flow
victorapm Aug 16, 2026
9145bbd
Merge branch 'develop' into feature/paludettomag1/ALM-singlephase
victorapm Aug 18, 2026
2c26dd7
Fix format issue
victorapm Aug 18, 2026
4c632f8
Apply uncrustify.
victorapm Aug 19, 2026
50e62a5
Minor
victorapm Aug 19, 2026
ae1138e
Merge branch 'develop' into feature/paludettomag1/ALM-singlephase
jhuang2601 Aug 20, 2026
0b321e8
Merge develop
victorapm Aug 27, 2026
8360937
Update src/coreComponents/physicsSolvers/multiphysics/HydrofractureSo…
victorapm Aug 28, 2026
b7002e9
Update src/coreComponents/linearAlgebra/interfaces/hypre/hypredrive.cpp
victorapm Aug 28, 2026
f2ff416
Fix code style
victorapm Aug 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/coreComponents/common/format/Format.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

#include <type_traits>
#include <optional>
#include <sstream>
#include <string>

#define GEOS_USE_FMT

Expand Down
3 changes: 3 additions & 0 deletions src/coreComponents/linearAlgebra/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ set( linearAlgebra_headers
utilities/ComponentMask.hpp
utilities/InverseNormalOperator.hpp
utilities/LAIHelperFunctions.hpp
utilities/SparsityPatternUtilities.hpp
utilities/LinearSolverParameters.hpp
utilities/LinearSolverResult.hpp
utilities/NormalOperator.hpp
Expand Down Expand Up @@ -168,6 +169,8 @@ if( ENABLE_HYPRE )
interfaces/hypre/mgrStrategies/MultiphasePoromechanics.hpp
interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsEmbeddedFractures.hpp
interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsConformingFractures.hpp
interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsConformingFracturesALM.hpp
interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsConformingFracturesALMReservoirFVM.hpp
interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsReservoirFVM.hpp
interfaces/hypre/mgrStrategies/SinglePhaseReservoirFVM.hpp
interfaces/hypre/mgrStrategies/SinglePhaseReservoirHybridFVM.hpp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,15 @@ class LinearSolverBase : public PreconditionerBase< LAI >
GEOS_UNUSED_VAR( context );
}

/**
* @brief Supply near-null-space vectors used to construct physics-aware preconditioners.
* @param nearNullKernel Distributed vectors spanning the near null space.
*/
virtual void setNearNullKernel( arrayView1d< Vector const > const & nearNullKernel )
{
GEOS_UNUSED_VAR( nearNullKernel );
}

/**
* @brief @return parameters of the solver.
*/
Expand Down
12 changes: 12 additions & 0 deletions src/coreComponents/linearAlgebra/interfaces/hypre/HypreMGR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
#include "linearAlgebra/interfaces/hypre/mgrStrategies/SinglePhasePoromechanics.hpp"
#include "linearAlgebra/interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsEmbeddedFractures.hpp"
#include "linearAlgebra/interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsConformingFractures.hpp"
#include "linearAlgebra/interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsConformingFracturesALM.hpp"
#include "linearAlgebra/interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsConformingFracturesALMReservoirFVM.hpp"
#include "linearAlgebra/interfaces/hypre/mgrStrategies/SinglePhasePoromechanicsReservoirFVM.hpp"
#include "linearAlgebra/interfaces/hypre/mgrStrategies/SinglePhaseReservoirFVM.hpp"
#include "linearAlgebra/interfaces/hypre/mgrStrategies/SinglePhaseReservoirHybridFVM.hpp"
Expand Down Expand Up @@ -188,6 +190,16 @@ void hypre::mgr::createMGR( LinearSolverParameters const & params,
setStrategy< SinglePhasePoromechanicsConformingFractures >( params.mgr, numComponentsPerField, precond, mgrData );
break;
}
case LinearSolverParameters::MGR::StrategyType::singlePhasePoromechanicsConformingFracturesALM:
{
setStrategy< SinglePhasePoromechanicsConformingFracturesALM >( params.mgr, numComponentsPerField, precond, mgrData );
break;
}
case LinearSolverParameters::MGR::StrategyType::singlePhasePoromechanicsConformingFracturesALMReservoirFVM:
{
setStrategy< SinglePhasePoromechanicsConformingFracturesALMReservoirFVM >( params.mgr, numComponentsPerField, precond, mgrData );
break;
}
case LinearSolverParameters::MGR::StrategyType::singlePhasePoromechanicsReservoirFVM:
{
setStrategy< SinglePhasePoromechanicsReservoirFVM >( params.mgr, numComponentsPerField, precond, mgrData );
Expand Down
68 changes: 68 additions & 0 deletions src/coreComponents/linearAlgebra/interfaces/hypre/HypreMGR.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ struct HypreMGRData
array1d< HYPRE_Int > pointMarkers; ///< array1d of unique tags for local degrees of freedom
HyprePrecWrapper coarseSolver; ///< MGR coarse solver pointer and functions
HyprePrecWrapper mechSolver; ///< MGR mechanics fine solver pointer and functions
HyprePrecWrapper nestedSolver; ///< Optional nested MGR F-relaxation wrapper
};

namespace hypre
Expand Down Expand Up @@ -98,6 +99,21 @@ class MGRStrategyBase
// HYPRE_Int m_numRestrictSweeps{ -1 }; ///< Number of restrict sweeps
// HYPRE_Int m_numInterpSweeps{ -1 }; ///< Number of interpolation sweeps

/**
* @brief Total number of dof labels, i.e. the sum of all fields' components.
* @param numComponentsPerField number of components of each field
* @return the total number of blocks
*/
static HYPRE_Int totalNumBlocks( arrayView1d< int const > const & numComponentsPerField )
{
HYPRE_Int result = 0;
for( localIndex i = 0; i < numComponentsPerField.size(); ++i )
{
result += LvArray::integerConversion< HYPRE_Int >( numComponentsPerField[i] );
}
return result;
}

/**
* @brief Constructor.
* @param numBlocks number of blocks
Expand Down Expand Up @@ -196,6 +212,58 @@ class MGRStrategyBase
solver.destroy = HYPRE_BoomerAMGDestroy;
}

/**
* @brief Set up one of the two BoomerAMG instances used by the fully
* coupled single-phase ALM hierarchy.
* @param solver solver wrapper to initialize
* @param separateComponents whether displacement components are filtered
* @param bubbleCoarse true for the inner (bubble-displacement) coarse solve
*
* The CPU values mirror the reference nested-MGR YAML. The device branch
* retains the device-safe smoother choices used by the existing strategies.
*/
void setALMDisplacementAMG( HyprePrecWrapper & solver,
integer const separateComponents,
bool const bubbleCoarse )
{
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGCreate( &solver.ptr ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetTol( solver.ptr, 0.0 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetMaxIter( solver.ptr, 1 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetPrintLevel( solver.ptr, 0 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetMaxRowSum( solver.ptr, 1.0 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetStrongThreshold( solver.ptr, bubbleCoarse ? 0.75 : 0.8 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetNumFunctions( solver.ptr, 3 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetFilterFunctions( solver.ptr, bubbleCoarse ? 0 : separateComponents ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetPMaxElmts( solver.ptr, bubbleCoarse ? 10 : 20 ) );

if( !bubbleCoarse )
{
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetAggNumLevels( solver.ptr, 1 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetCoarsenType( solver.ptr,
hypre::getAMGCoarseningType( LinearSolverParameters::AMG::CoarseningType::Falgout ) ) );
}

#if GEOS_USE_HYPRE_DEVICE == GEOS_USE_HYPRE_CUDA || GEOS_USE_HYPRE_DEVICE == GEOS_USE_HYPRE_HIP
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetCoarsenType( solver.ptr,
hypre::getAMGCoarseningType( LinearSolverParameters::AMG::CoarseningType::PMIS ) ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetRelaxType( solver.ptr,
hypre::getAMGRelaxationType( LinearSolverParameters::AMG::SmootherType::chebyshev ) ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetNumSweeps( solver.ptr, bubbleCoarse ? 1 : 2 ) );
#else
HYPRE_Int constexpr l1SymmetricHybridGaussSeidel = 89;
HYPRE_Int constexpr gaussianElimination = 9;
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetCycleRelaxType( solver.ptr, l1SymmetricHybridGaussSeidel, 1 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetCycleRelaxType( solver.ptr, l1SymmetricHybridGaussSeidel, 2 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetCycleRelaxType( solver.ptr, gaussianElimination, 3 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetNumSweeps( solver.ptr, bubbleCoarse ? 1 : 2 ) );
GEOS_LAI_CHECK_ERROR( HYPRE_BoomerAMGSetRelaxOrder( solver.ptr, 0 ) );
#endif

solver.setup = HYPRE_BoomerAMGSetup;
solver.solve = HYPRE_BoomerAMGSolve;
solver.destroy = HYPRE_BoomerAMGDestroy;
}

/**
* @brief Set up BoomerAMG to perform the solve for the pressure system
* @param solver the solver wrapper
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,10 @@ void HyprePreconditioner::clear()
{
GEOS_LAI_CHECK_ERROR( m_mgrData->mechSolver.destroy( m_mgrData->mechSolver.ptr ) );
}
if( m_mgrData && m_mgrData->nestedSolver.ptr && m_mgrData->nestedSolver.destroy )
{
GEOS_LAI_CHECK_ERROR( m_mgrData->nestedSolver.destroy( m_mgrData->nestedSolver.ptr ) );
}
m_precond.reset();
m_mgrData.reset();
}
Expand Down
Loading
Loading