Skip to content

Commit

Permalink
chore: update trilinos, hypre and fmt. (#3214)
Browse files Browse the repository at this point in the history
Updated tpls:
- Trilinos: 15.1.1
- Hypre: hypre-v2.31.0-26-gf6cfb0355. Contains MGR improvements that required GEOS code changes.
- fmt 11.01.1
  • Loading branch information
CusiniM authored and rrsettgast committed Jul 18, 2024
1 parent eb6b6bc commit 38de4b9
Show file tree
Hide file tree
Showing 34 changed files with 113 additions and 147 deletions.
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"build": {
"dockerfile": "Dockerfile",
"args": {
"GEOS_TPL_TAG": "270-418"
"GEOS_TPL_TAG": "273-460"
}
},
"runArgs": [
Expand Down
45 changes: 11 additions & 34 deletions .github/workflows/ci_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -170,19 +170,6 @@ jobs:
ENABLE_HYPRE: ON
ENABLE_TRILINOS: OFF

- name: Pecan CPU (centos 7.7, gcc 8.2.0, open-mpi 4.0.1, mkl 2019.5)
CMAKE_BUILD_TYPE: Release
DOCKER_REPOSITORY: geosx/pecan-cpu-gcc8.2.0-openmpi4.0.1-mkl2019.5
HOST_CONFIG: host-configs/TOTAL/pecan-CPU.cmake
GCP_BUCKET: geosx/Pecan-CPU

- name: Pangea 2 (centos 7.6, gcc 8.3.0, open-mpi 2.1.5, mkl 2019.3)
CMAKE_BUILD_TYPE: Release
DOCKER_REPOSITORY: geosx/pangea2-gcc8.3.0-openmpi2.1.5-mkl2019.3
ENABLE_HYPRE: ON
ENABLE_TRILINOS: OFF
GCP_BUCKET: geosx/Pangea2

- name: Sherlock CPU (centos 7.9.2009, gcc 10.1.0, open-mpi 4.1.2, openblas 0.3.10)
CMAKE_BUILD_TYPE: Release
DOCKER_REPOSITORY: geosx/sherlock-gcc10.1.0-openmpi4.1.2-openblas0.3.10-zlib1.2.11
Expand Down Expand Up @@ -305,16 +292,6 @@ jobs:
DOCKER_RUN_ARGS: "--cpus=8 --memory=256g --runtime=nvidia --gpus all -v /etc/pki/ca-trust/source/anchors/:/usr/local/share/ca-certificates/llnl:ro"
DOCKER_CERTS_DIR: "/usr/local/share/ca-certificates"
DOCKER_CERTS_UPDATE_COMMAND: "update-ca-certificates"

- name: Centos (7.7, gcc 8.3.1, open-mpi 1.10.7, cuda 11.8.89)
BUILD_AND_TEST_CLI_ARGS: "--no-run-unit-tests --no-install-schema"
CMAKE_BUILD_TYPE: Release
DOCKER_REPOSITORY: geosx/centos7.7-gcc8.3.1-cuda11.8.89
RUNS_ON: streak2
NPROC: 8
DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/ca-trust/source/anchors/:/etc/pki/ca-trust/source/anchors/llnl:ro"
DOCKER_CERTS_DIR: "/etc/pki/ca-trust/source/anchors"
DOCKER_CERTS_UPDATE_COMMAND: "update-ca-trust"

# compiler error in ElasticFirstOrderWaveEquationSEMKernel::StressComputation::launch in call to FE_TYPE::computeFirstOrderStiffnessTermX
# - name: Rockylinux (8, clang 17.0.6, cuda 12.5)
Expand All @@ -325,20 +302,20 @@ jobs:
# NPROC: 2
# DOCKER_RUN_ARGS: "--cpus=1 --memory=128g --runtime=nvidia -v /etc/pki/ca-trust/source/anchors/:/etc/pki/ca-trust/source/anchors/llnl:ro"
# DOCKER_CERTS_DIR: "/etc/pki/ca-trust/source/anchors"
# DOCKER_CERTS_UPDATE_COMMAND: "update-ca-trust"

# compiler error in ElasticFirstOrderWaveEquationSEMKernel::StressComputation::launch in call to FE_TYPE::computeFirstOrderStiffnessTermX
# - name: Rockylinux (8, gcc 8.5, cuda 12.5)
# BUILD_AND_TEST_CLI_ARGS: "--no-run-unit-tests --no-install-schema"
# CMAKE_BUILD_TYPE: Release
# DOCKER_REPOSITORY: geosx/rockylinux8-gcc8-cuda12.5
# RUNS_ON: streak2
# NPROC: 2
# DOCKER_RUN_ARGS: "--cpus=1 --memory=128g --runtime=nvidia -v /etc/pki/ca-trust/source/anchors/:/etc/pki/ca-trust/source/anchors/llnl:ro"
# DOCKER_CERTS_DIR: "/etc/pki/ca-trust/source/anchors"
# DOCKER_CERTS_UPDATE_COMMAND: "update-ca-trust"

# Below this line, jobs that deploy to Google Cloud.
- name: Pecan GPU (centos 7.7, gcc 8.2.0, open-mpi 4.0.1, mkl 2019.5, cuda 11.5.119)
BUILD_AND_TEST_CLI_ARGS: "--build-exe-only --no-install-schema"
CMAKE_BUILD_TYPE: Release
DOCKER_REPOSITORY: geosx/pecan-gpu-gcc8.2.0-openmpi4.0.1-mkl2019.5-cuda11.5.119
HOST_CONFIG: host-configs/TOTAL/pecan-GPU.cmake
RUNS_ON: streak2
NPROC: 8
DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/ca-trust/source/anchors/:/etc/pki/ca-trust/source/anchors/llnl:ro"
DOCKER_CERTS_DIR: "/etc/pki/ca-trust/source/anchors"
DOCKER_CERTS_UPDATE_COMMAND: "update-ca-trust"

- name: Sherlock GPU (centos 7.9.2009, gcc 10.1.0, open-mpi 4.1.2, openblas 0.3.10, cuda 11.7.1,)
BUILD_AND_TEST_CLI_ARGS: "--no-run-unit-tests --no-install-schema"
CMAKE_BUILD_TYPE: Release
Expand Down
51 changes: 26 additions & 25 deletions src/cmake/thirdparty/SetupGeosxThirdParty.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,31 @@ if(DEFINED CAMP_DIR)
endif()
endif()

################################
# FMT
################################
if(DEFINED FMT_DIR)
message(STATUS "FMT_DIR = ${FMT_DIR}")

find_package(fmt REQUIRED
PATHS ${FMT_DIR}
NO_DEFAULT_PATH)

message( " ----> fmt_VERSION = ${fmt_VERSION}")

get_target_property(includeDirs fmt::fmt-header-only INTERFACE_INCLUDE_DIRECTORIES)

set_property(TARGET fmt::fmt-header-only
APPEND PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
${includeDirs})

set(ENABLE_FMT ON CACHE BOOL "")

set(thirdPartyLibs ${thirdPartyLibs} fmt::fmt-header-only )
else()
mandatory_tpl_doesnt_exist("{fmt}" FMT_DIR)
endif()

################################
# Umpire
################################
Expand Down Expand Up @@ -711,7 +736,7 @@ endif()
if(DEFINED TRILINOS_DIR AND ENABLE_TRILINOS)
message(STATUS "TRILINOS_DIR = ${TRILINOS_DIR}")

include(${TRILINOS_DIR}/lib/cmake/Trilinos/TrilinosConfig.cmake)
include(${TRILINOS_DIR}/lib64/cmake/Trilinos/TrilinosConfig.cmake)

list(REMOVE_ITEM Trilinos_LIBRARIES "gtest")
list(REMOVE_DUPLICATES Trilinos_LIBRARIES)
Expand Down Expand Up @@ -813,30 +838,6 @@ else()
message(STATUS "Not using VTK")
endif()

################################
# FMT
################################
if(DEFINED FMT_DIR)
message(STATUS "FMT_DIR = ${FMT_DIR}")

find_package(fmt REQUIRED
PATHS ${FMT_DIR}
NO_DEFAULT_PATH)

message( " ----> fmt_VERSION = ${fmt_VERSION}")

get_target_property(includeDirs fmt::fmt INTERFACE_INCLUDE_DIRECTORIES)

set_property(TARGET fmt::fmt
APPEND PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
${includeDirs})

set(ENABLE_FMT ON CACHE BOOL "")

set(thirdPartyLibs ${thirdPartyLibs} fmt::fmt )
else()
mandatory_tpl_doesnt_exist("{fmt}" FMT_DIR)
endif()

################################
# uncrustify
Expand Down
4 changes: 2 additions & 2 deletions src/coreComponents/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ if (TARGET conduit)
set( dependencyList ${dependencyList} conduit )
endif()

if (TARGET fmt::fmt)
set( dependencyList ${dependencyList} fmt::fmt )
if (TARGET fmt::fmt-header-only)
set( dependencyList ${dependencyList} fmt::fmt-header-only )
endif()

if (TARGET fmt)
Expand Down
2 changes: 1 addition & 1 deletion src/coreComponents/common/DataTypes.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -684,7 +684,7 @@ struct GEOS_FMT_NS::formatter< std::optional< T > > : GEOS_FMT_NS::formatter< T
* @param ctx formatting state consisting of the formatting arguments and the output iterator
* @return return the corresponding value string. If std::optional<T> is empty retun an empty string
*/
auto format( std::optional< T > const & opt, format_context & ctx )
auto format( std::optional< T > const & opt, format_context & ctx ) const
{
if( opt )
{
Expand Down
4 changes: 3 additions & 1 deletion src/coreComponents/common/Format.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@
#endif

#ifdef GEOS_USE_FMT
#ifndef FMT_HEADER_ONLY
#define FMT_HEADER_ONLY
#endif
// Differentiate between standalone fmt path and umpire's fmt path
#include "../include/fmt/core.h"
#include "../include/fmt/chrono.h"
Expand Down Expand Up @@ -63,7 +65,7 @@ struct fmt::formatter< T, std::enable_if_t< std::is_enum< T >::value > >
* @return An iterator pointing to the end of the formatted string.
*/
template< typename FormatContext >
auto format( const T & value, FormatContext & ctx )
auto format( const T & value, FormatContext & ctx ) const
{
return fmt::format_to( ctx.out(), "{}", static_cast< std::underlying_type_t< T > >( value ) );
}
Expand Down
2 changes: 1 addition & 1 deletion src/coreComponents/common/Units.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ struct GEOS_FMT_NS::formatter< geos::units::TimeFormatInfo > : GEOS_FMT_NS::form
* @param ctx formatting state consisting of the formatting arguments and the output iterator
* @return iterator to the output buffer
*/
auto format( geos::units::TimeFormatInfo const & durationData, format_context & ctx )
auto format( geos::units::TimeFormatInfo const & durationData, format_context & ctx ) const
{
return GEOS_FMT_NS::formatter< std::string >::format( durationData.toString(), ctx );
}
Expand Down
2 changes: 1 addition & 1 deletion src/coreComponents/dataRepository/DataContext.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ struct GEOS_FMT_NS::formatter< geos::dataRepository::DataContext > : GEOS_FMT_NS
* @param ctx formatting state consisting of the formatting arguments and the output iterator
* @return iterator to the output buffer
*/
auto format( geos::dataRepository::DataContext const & dataContext, format_context & ctx )
auto format( geos::dataRepository::DataContext const & dataContext, format_context & ctx ) const
{
return GEOS_FMT_NS::formatter< std::string >::format( dataContext.toString(), ctx );
}
Expand Down
4 changes: 2 additions & 2 deletions src/coreComponents/functions/unitTests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ if (TARGET pugixml)
list( APPEND dependencyList pugixml )
endif()

if (TARGET fmt::fmt)
list( APPEND dependencyList fmt::fmt )
if (TARGET fmt::fmt-header-only)
list( APPEND dependencyList fmt::fmt-header-only )
endif()

if (TARGET fmt)
Expand Down
28 changes: 17 additions & 11 deletions src/coreComponents/linearAlgebra/interfaces/hypre/HypreMGR.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,23 +73,28 @@ class MGRStrategyBase
{
public:

static constexpr HYPRE_Int numLevels = NLEVEL; ///< Number of levels
static constexpr HYPRE_Int numLevels = NLEVEL; ///< Number of levels

protected:

HYPRE_Int m_numBlocks{ 0 }; ///< Number of different matrix blocks treated separately
HYPRE_Int m_numBlocks{ 0 }; ///< Number of different matrix blocks treated separately

std::vector< HYPRE_Int > m_labels[numLevels]{}; ///< Dof labels kept at each level
HYPRE_Int m_numLabels[numLevels]{ -1 }; ///< Number of dof labels kept
HYPRE_Int * m_ptrLabels[numLevels]{ nullptr }; ///< Pointers to each level's labels, as consumed by MGR
std::vector< HYPRE_Int > m_labels[numLevels]{}; ///< Dof labels kept at each level
HYPRE_Int m_numLabels[numLevels]{ -1 }; ///< Number of dof labels kept
HYPRE_Int * m_ptrLabels[numLevels]{ nullptr }; ///< Pointers to each level's labels, as consumed by MGR

MGRFRelaxationType m_levelFRelaxType[numLevels]; ///< F-relaxation type for each level
HYPRE_Int m_levelFRelaxIters[numLevels]{ -1 }; ///< Number of F-relaxation iterations for each level
MGRInterpolationType m_levelInterpType[numLevels]; ///< Interpolation type for each level
MGRRestrictionType m_levelRestrictType[numLevels]; ///< Restriction type for each level
MGRCoarseGridMethod m_levelCoarseGridMethod[numLevels]; ///< Coarse grid method for each level
MGRFRelaxationType m_levelFRelaxType[numLevels]; ///< F-relaxation type for each level
HYPRE_Int m_levelFRelaxIters[numLevels]{ -1 }; ///< Number of F-relaxation iterations for each level
MGRInterpolationType m_levelInterpType[numLevels]; ///< Interpolation type for each level
MGRRestrictionType m_levelRestrictType[numLevels]; ///< Restriction type for each level
MGRCoarseGridMethod m_levelCoarseGridMethod[numLevels]; ///< Coarse grid method for each level
MGRGlobalSmootherType m_levelGlobalSmootherType[numLevels]; ///< Global smoother type for each level
HYPRE_Int m_levelGlobalSmootherIters[numLevels]{ -1 }; ///< Number of global smoother iterations for each level
HYPRE_Int m_levelGlobalSmootherIters[numLevels]{ -1 }; ///< Number of global smoother iterations for each level
#if GEOS_USE_HYPRE_DEVICE == GEOS_USE_HYPRE_CPU
HYPRE_Real m_coarseGridThreshold{ 1.0e-20 }; ///< Coarse grid truncation threshold
#else
HYPRE_Real m_coarseGridThreshold{ 0.0 }; ///< Coarse grid truncation threshold
#endif

// TODO: the following options are currently commented out in MGR's code.
// Let's consider their use when re-enable in hypre
Expand Down Expand Up @@ -159,6 +164,7 @@ class MGRStrategyBase
GEOS_LAI_CHECK_ERROR( HYPRE_MGRSetCoarseGridMethod( precond.ptr, toUnderlyingPtr( m_levelCoarseGridMethod ) ) );
GEOS_LAI_CHECK_ERROR( HYPRE_MGRSetLevelSmoothType( precond.ptr, toUnderlyingPtr( m_levelGlobalSmootherType ) ) );
GEOS_LAI_CHECK_ERROR( HYPRE_MGRSetLevelSmoothIters( precond.ptr, m_levelGlobalSmootherIters ) );
GEOS_LAI_CHECK_ERROR( HYPRE_MGRSetTruncateCoarseGridThreshold( precond.ptr, m_coarseGridThreshold ) );
GEOS_LAI_CHECK_ERROR( HYPRE_MGRSetNonCpointsToFpoints( precond.ptr, 1 ));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -515,9 +515,8 @@ enum class MGRCoarseGridMethod : HYPRE_Int
//!< approximated by its diagonal inverse
cprLikeBlockDiag = 3, //!< Non-Galerkin coarse grid computation with dropping strategy: CPR-like approximation with inv(A_FF)
//!< approximated by its block diagonal inverse
approximateInverse = 4, //!< Non-Galerkin coarse grid computation with dropping strategy: inv(A_FF) approximated by sparse approximate
approximateInverse = 4 //!< Non-Galerkin coarse grid computation with dropping strategy: inv(A_FF) approximated by sparse approximate
//!< inverse
galerkinRAI = 5 //!< Galerkin coarse grid computation with arbitrary classical restriction and injective prolongation
};

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class CompositionalMultiphaseFVM : public MGRStrategyBase< 2 >
m_levelFRelaxType[1] = MGRFRelaxationType::none;
m_levelInterpType[1] = MGRInterpolationType::injection;
m_levelRestrictType[1] = MGRRestrictionType::blockColLumped; // True-IMPES
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkinRAI;
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[1] = MGRGlobalSmootherType::ilu0;
m_levelGlobalSmootherIters[1] = 1;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class CompositionalMultiphaseHybridFVM : public MGRStrategyBase< 3 >
m_levelFRelaxType[1] = MGRFRelaxationType::none;
m_levelInterpType[1] = MGRInterpolationType::jacobi;
m_levelRestrictType[1] = MGRRestrictionType::blockColLumped; // True-IMPES
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkinRAI;
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[1] = MGRGlobalSmootherType::none;

// Level 2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class CompositionalMultiphaseReservoirFVM : public MGRStrategyBase< 3 >
m_levelFRelaxType[2] = MGRFRelaxationType::none;
m_levelInterpType[2] = MGRInterpolationType::injection;
m_levelRestrictType[2] = MGRRestrictionType::blockColLumped; // True-IMPES
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkinRAI;
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[2] = MGRGlobalSmootherType::ilu0;
m_levelGlobalSmootherIters[2] = 1;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ class CompositionalMultiphaseReservoirHybridFVM : public MGRStrategyBase< 4 >
m_levelFRelaxType[2] = MGRFRelaxationType::none;
m_levelInterpType[2] = MGRInterpolationType::injection;
m_levelRestrictType[2] = MGRRestrictionType::blockColLumped; // True-IMPES
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkinRAI;
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[2] = MGRGlobalSmootherType::none;

// Level 3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ class MultiphasePoromechanics : public MGRStrategyBase< 3 >
m_levelFRelaxType[2] = MGRFRelaxationType::none;
m_levelInterpType[2] = MGRInterpolationType::injection;
m_levelRestrictType[2] = MGRRestrictionType::blockColLumped; // True-IMPES
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkinRAI;
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[2] = MGRGlobalSmootherType::ilu0;
m_levelGlobalSmootherIters[2] = 1;
}
Expand All @@ -106,8 +106,6 @@ class MultiphasePoromechanics : public MGRStrategyBase< 3 >
{
setReduction( precond, mgrData );

GEOS_LAI_CHECK_ERROR( HYPRE_MGRSetPMaxElmts( precond.ptr, 0 ));

// Configure the BoomerAMG solver used as F-relaxation for the first level
setMechanicsFSolver( precond, mgrData );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,34 +83,34 @@ class MultiphasePoromechanicsReservoirFVM : public MGRStrategyBase< 4 >
setupLabels();

// Level 0
m_levelFRelaxType[0] = MGRFRelaxationType::amgVCycle;
m_levelFRelaxIters[0] = 1;
m_levelInterpType[0] = MGRInterpolationType::jacobi;
m_levelRestrictType[0] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[0] = MGRCoarseGridMethod::nonGalerkin;
m_levelGlobalSmootherType[0] = MGRGlobalSmootherType::none;
m_levelFRelaxType[0] = MGRFRelaxationType::amgVCycle;
m_levelFRelaxIters[0] = 1;
m_levelInterpType[0] = MGRInterpolationType::jacobi;
m_levelRestrictType[0] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[0] = MGRCoarseGridMethod::nonGalerkin;
m_levelGlobalSmootherType[0] = MGRGlobalSmootherType::none;

// Level 1
m_levelFRelaxType[1] = MGRFRelaxationType::gsElimWInverse;
m_levelFRelaxIters[1] = 1;
m_levelInterpType[1] = MGRInterpolationType::blockJacobi;
m_levelRestrictType[1] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[0] = MGRGlobalSmootherType::none;
m_levelFRelaxIters[1] = 1;
m_levelInterpType[1] = MGRInterpolationType::blockJacobi;
m_levelRestrictType[1] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[1] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[1] = MGRGlobalSmootherType::none;

// Level 2
m_levelFRelaxType[2] = MGRFRelaxationType::jacobi; //default, i.e. Jacobi
m_levelFRelaxIters[2] = 1;
m_levelInterpType[2] = MGRInterpolationType::jacobi;
m_levelRestrictType[2] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[2] = MGRGlobalSmootherType::none;
m_levelFRelaxType[2] = MGRFRelaxationType::jacobi; //default, i.e. Jacobi
m_levelFRelaxIters[2] = 1;
m_levelInterpType[2] = MGRInterpolationType::jacobi;
m_levelRestrictType[2] = MGRRestrictionType::injection;
m_levelCoarseGridMethod[2] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[2] = MGRGlobalSmootherType::none;

// Level 3
m_levelFRelaxType[3] = MGRFRelaxationType::none;
m_levelInterpType[3] = MGRInterpolationType::injection;
m_levelRestrictType[3] = MGRRestrictionType::blockColLumped; // True-IMPES
m_levelCoarseGridMethod[3] = MGRCoarseGridMethod::galerkinRAI;
m_levelCoarseGridMethod[3] = MGRCoarseGridMethod::galerkin;
m_levelGlobalSmootherType[3] = MGRGlobalSmootherType::ilu0;
m_levelGlobalSmootherIters[3] = 1;
}
Expand All @@ -134,8 +134,6 @@ class MultiphasePoromechanicsReservoirFVM : public MGRStrategyBase< 4 >

setReduction( precond, mgrData );

GEOS_LAI_CHECK_ERROR( HYPRE_MGRSetPMaxElmts( precond.ptr, 0 ));

// Configure the BoomerAMG solver used as F-relaxation for the first level
setMechanicsFSolver( precond, mgrData );

Expand Down
Loading

0 comments on commit 38de4b9

Please sign in to comment.