diff --git a/apptainer/libmesh.def b/apptainer/libmesh.def index 032eee03044f..0913914e9e90 100644 --- a/apptainer/libmesh.def +++ b/apptainer/libmesh.def @@ -112,8 +112,14 @@ Fingerprints: 0CFFCAB55E806363601C442D211817B01E0911DB IFS=' ' read -r -a LIBMESH_ARR_OPTIONS <<< "{{ LIBMESH_OPTIONS }}" if [ -n "$CUDA_DIR" ]; then LIBMESH_ARR_OPTIONS+=("--with-nvtx=${CUDA_DIR}" "--enable-perflog") + # The build environment lacks libnvidia-ml.so.1, so we use -Wl,--as-needed to drop that + # dependency, which is inherited from PETSc, when linking the simple program that netCDF + # uses to check the compiler during configuration so that the dynamic linker does not + # complain when configure subsequently runs it. + SUB_LDFLAGS=-Wl,--as-needed fi + SUB_LDFLAGS=${SUB_LDFLAGS} \ LIBMESH_SRC_DIR=${LIBMESH_SRC_DIR} LIBMESH_DIR=${LIBMESH_DIR} MOOSE_JOBS=${MOOSE_JOBS} METHODS=${METHODS} ./scripts/{{ LIBMESH_BUILD_SCRIPT }} \ "${LIBMESH_ARR_OPTIONS[@]}" --skip-submodule-update 2>&1 | tee ${LIBMESH_DIR}/logs/build.log cp ${LIBMESH_SRC_DIR}/build/config.log ${LIBMESH_DIR}/logs/ diff --git a/apptainer/moose-dev.def b/apptainer/moose-dev.def index ff32811b9f63..e562fda2675b 100644 --- a/apptainer/moose-dev.def +++ b/apptainer/moose-dev.def @@ -232,6 +232,8 @@ Fingerprints: 0CFFCAB55E806363601C442D211817B01E0911DB PYTORCH_CONDA_ENV=pytorch_build conda create -yq -n ${PYTORCH_CONDA_ENV} python=3.14 source activate ${MINIFORGE_DIR}/envs/${PYTORCH_CONDA_ENV} + # Make sure that pip matches the python version we requested above + conda install -yq pip pip3 install --no-cache -r ${PYTORCH_DIR}/requirements.txt # Require CUDA if we have cuda available @@ -330,6 +332,9 @@ Fingerprints: 0CFFCAB55E806363601C442D211817B01E0911DB if [ -n "$CUDA_DIR" ]; then # Additional options with cuda MFEM_OPTIONS+=("-DMFEM_USE_CUDA=ON" "-DCUDA_ARCH=sm_80") + # The build environment lacks libnvidia-ml.so.1, which PETSc needs, so we bypass the test that + # MFEM uses to check PETSc's installation during CMake configuration. + MFEM_OPTIONS+=("-DPETSC_EXECUTABLE_RUNS=YES") # Expose the compat libraries if we haven't already if [[ "$LD_LIBRARY_PATH" != *"${CUDA_DIR}/compat"* ]]; then export LD_LIBRARY_PATH=${CUDA_DIR}/compat:${LD_LIBRARY_PATH} diff --git a/apptainer/petsc.def b/apptainer/petsc.def index 70a144907bcd..1ffa2c2d1523 100644 --- a/apptainer/petsc.def +++ b/apptainer/petsc.def @@ -83,10 +83,20 @@ Fingerprints: 0CFFCAB55E806363601C442D211817B01E0911DB if [ -n "$CUDA_DIR" ]; then # Additional options with cuda PETSC_OPTIONS+=("--with-cuda" "--with-cuda-dir=${CUDA_DIR}" "--with-cuda-arch=80" "--download-slate" "--download-hypre-configure-arguments='--enable-gpu-aware-mpi'") + # The build environment lacks libnvidia-ml.so.1, so we use -Wl,--as-needed to drop that + # dependency, which is inherited from PETSc, when linking the simple program that SLATE + # uses to check the compiler during CMake configuration so that the dynamic linker does + # not complain when CMake subsequently runs it. + PETSC_OPTIONS+=("--download-slate-cmake-arguments='-DCMAKE_EXE_LINKER_FLAGS=-Wl,--as-needed'") # Expose the compat libraries that can be linked to during configure for building without a GPU present export LD_LIBRARY_PATH=${CUDA_DIR}/compat:${LD_LIBRARY_PATH} fi + if [ -n "$ONEAPI_ROOT" ]; then + # OpenBLAS fails to correctly detect mpif90(ifx), so we override relevant variables + PETSC_OPTIONS+=("--download-openblas-make-options=DYNAMIC_ARCH=1 NOFORTRAN=0 F_COMPILER=INTEL FEXTRALIB=") + fi + # Build PETSc umask 022 cd ${ROOT_BUILD_DIR} diff --git a/conda/libmesh/meta.yaml b/conda/libmesh/meta.yaml index 117c25003b6b..1742af52b60c 100644 --- a/conda/libmesh/meta.yaml +++ b/conda/libmesh/meta.yaml @@ -5,7 +5,7 @@ # As well as any directions pertaining to modifying those files. # ALSO: Follow the directions in scripts/tests/versioner_hashes.yaml {% set build = 0 %} -{% set version = "2026.04.13_0185b8b" %} +{% set version = "2026.05.01_870e4eb" %} package: name: moose-libmesh @@ -30,7 +30,7 @@ build: # things that depend on this moose-libmesh must use the # exact moose-petsc and moose-libmesh-vtk that this was # built with - - moose-petsc 3.24.6 {{ mpi }}_0 + - moose-petsc 3.25.1 {{ mpi }}_0 - moose-libmesh-vtk 9.6.1 {{ mpi }}_0 requirements: @@ -45,7 +45,7 @@ requirements: - pkg-config host: - {{ mpi }} {{ mpi_version }} - - moose-petsc 3.24.6 {{ mpi }}_0 + - moose-petsc 3.25.1 {{ mpi }}_0 - moose-libmesh-vtk 9.6.1 {{ mpi }}_0 - _openmp_mutex # [linux] - hdf5 {{ hdf5 }} @@ -58,7 +58,7 @@ requirements: - llvm-openmp # [osx] - zlib run: - - moose-petsc 3.24.6 {{ mpi }}_0 + - moose-petsc 3.25.1 {{ mpi }}_0 - moose-libmesh-vtk 9.6.1 {{ mpi }}_0 test: diff --git a/conda/moose-dev/meta.yaml b/conda/moose-dev/meta.yaml index ca798fc64919..b3c53a713213 100644 --- a/conda/moose-dev/meta.yaml +++ b/conda/moose-dev/meta.yaml @@ -2,7 +2,7 @@ # REMEMBER TO UPDATE the .yaml files for the following packages: # moose/conda_build_config.yaml # As well as any directions pertaining to modifying those files. -{% set version = "2026.04.21" %} +{% set version = "2026.05.01" %} package: name: moose-dev @@ -20,14 +20,14 @@ build: # things that depend on this moose-dev must use the # exact moose-* packages that this was built with - moose-build 2026.04.21 {{ mpi }} - - moose-libmesh 2026.04.13_0185b8b {{ mpi }}_0 + - moose-libmesh 2026.05.01_870e4eb {{ mpi }}_0 - moose-wasp 2025.09.19_02960f1 build_6 - moose-tools 2026.04.21 requirements: run: - moose-build 2026.04.21 {{ mpi }} - - moose-libmesh 2026.04.13_0185b8b {{ mpi }}_0 + - moose-libmesh 2026.05.01_870e4eb {{ mpi }}_0 - moose-wasp 2025.09.19_02960f1 build_6 - moose-tools 2026.04.21 run_constrained: diff --git a/conda/moose/meta.yaml b/conda/moose/meta.yaml index f47e86ddcbbe..99be3dd36e0d 100644 --- a/conda/moose/meta.yaml +++ b/conda/moose/meta.yaml @@ -29,7 +29,7 @@ requirements: - {{ compiler('fortran') }} - {{ stdlib('c') }} # for libmesh libtool - - moose-libmesh 2026.04.13_0185b8b {{ mpi }}_0 + - moose-libmesh 2026.05.01_870e4eb {{ mpi }}_0 # build utilities - make - packaging @@ -46,12 +46,12 @@ requirements: - libfabric {{ libfabric }} # [linux] {% endif %} - libpng - - moose-libmesh 2026.04.13_0185b8b {{ mpi }}_0 + - moose-libmesh 2026.05.01_870e4eb {{ mpi }}_0 - moose-wasp 2025.09.19_02960f1 build_6 - zlib run: - {{ mpi }} {{ mpi_version }} - - moose-libmesh 2026.04.13_0185b8b {{ mpi }}_0 + - moose-libmesh 2026.05.01_870e4eb {{ mpi }}_0 - moose-wasp 2025.09.19_02960f1 build_6 # c++ compiler for jit - gxx_linux-64 {{ cxx_compiler_version }}.* # [linux] diff --git a/conda/petsc/build.sh b/conda/petsc/build.sh index bfc2021d5ccf..cf7ea612f7b3 100755 --- a/conda/petsc/build.sh +++ b/conda/petsc/build.sh @@ -103,7 +103,14 @@ done # Strip GCC runtime libs on mac if [[ $(uname) == Darwin ]]; then echo "Stripping GCC runtime libs" - sed -i '' 's/-lemutls_w//g; s/-lheapt_w//g; s/-lgcc_s\.1[^ ]*//g' "$PREFIX"/lib/pkgconfig/PETSc.pc "$PREFIX"/lib/petsc/conf/petscvariables + sed -i '' 's/-lemutls_w//g; s/-lheapt_w//g; s/-lgcc_s\.1[^ ]*//g' \ + "$PREFIX"/lib/pkgconfig/PETSc.pc \ + "$PREFIX"/lib/petsc/conf/petscvariables \ + "$PREFIX"/lib/cmake/scalapack-*/scalapack-targets.cmake + # scalapack-targets.cmake also embeds absolute paths from the CI build machine + # that conda relocation doesn't reach; strip any -rpath/-L not under $PREFIX + perl -i -pe "s|-Wl,-rpath,(?!\Q${PREFIX}\E)\S+||g; s|-L(?!\Q${PREFIX}\E)/\S+||g" \ + "$PREFIX"/lib/cmake/scalapack-*/scalapack-targets.cmake fi echo "Removing example files" diff --git a/conda/petsc/meta.yaml b/conda/petsc/meta.yaml index 575c71c1456d..2f475283bd5d 100644 --- a/conda/petsc/meta.yaml +++ b/conda/petsc/meta.yaml @@ -8,7 +8,7 @@ # As well as any directions pertaining to modifying those files. # ALSO: Follow the directions in scripts/tests/versioner_hashes.yaml {% set build = 0 %} -{% set version = "3.24.6" %} +{% set version = "3.25.1" %} package: name: moose-petsc diff --git a/framework/contrib/conduit b/framework/contrib/conduit index 8543892a5827..4ae5a69cce5c 160000 --- a/framework/contrib/conduit +++ b/framework/contrib/conduit @@ -1 +1 @@ -Subproject commit 8543892a582737eb5941b1e90df068a75543df92 +Subproject commit 4ae5a69cce5ca51c63dbf86c8fff6c70b7d854ac diff --git a/framework/contrib/mfem b/framework/contrib/mfem index 64ef39bbe61e..e52948f9e5b2 160000 --- a/framework/contrib/mfem +++ b/framework/contrib/mfem @@ -1 +1 @@ -Subproject commit 64ef39bbe61ee5093a817026a2bb50314abafc25 +Subproject commit e52948f9e5b28a5d8c6f6cf0645de392d0dd9424 diff --git a/framework/include/mfem/solvers/MFEMHyprePatch.h b/framework/include/mfem/solvers/MFEMHyprePatch.h deleted file mode 100644 index f25ed7685ae4..000000000000 --- a/framework/include/mfem/solvers/MFEMHyprePatch.h +++ /dev/null @@ -1,48 +0,0 @@ -//* This file is part of the MOOSE framework -//* https://mooseframework.inl.gov -//* -//* All rights reserved, see COPYRIGHT for full restrictions -//* https://github.com/idaholab/moose/blob/master/COPYRIGHT -//* -//* Licensed under LGPL 2.1, please see LICENSE for details -//* https://www.gnu.org/licenses/lgpl-2.1.html - -// To be removed as soon as we have a fix upstream in either hypre or mfem - -#ifdef MOOSE_MFEM_ENABLED - -namespace mfem -{ -namespace patched -{ -/** - * Patch for mfem::HypreGMRES to reset preconditioning matrix at every nonlinear/time iteration - */ -class HypreGMRES : public mfem::HypreGMRES -{ -public: - using mfem::HypreGMRES::HypreGMRES; - void SetOperator(const mfem::Operator & op) - { - mfem::HypreGMRES::SetOperator(op); - HYPRE_GMRESSetPrecondMatrix(HYPRE_Solver(*this), nullptr); - } -}; - -/** - * Patch for mfem::HyprePCG to reset preconditioning matrix at every nonlinear/time iteration - */ -class HyprePCG : public mfem::HyprePCG -{ -public: - using mfem::HyprePCG::HyprePCG; - void SetOperator(const mfem::Operator & op) - { - mfem::HyprePCG::SetOperator(op); - HYPRE_PCGSetPrecondMatrix(HYPRE_Solver(*this), nullptr); - } -}; -} -} - -#endif diff --git a/framework/include/mfem/solvers/MFEMSolverBase.h b/framework/include/mfem/solvers/MFEMSolverBase.h index 635c44f577e3..4893cfacc5a1 100644 --- a/framework/include/mfem/solvers/MFEMSolverBase.h +++ b/framework/include/mfem/solvers/MFEMSolverBase.h @@ -12,7 +12,6 @@ #pragma once #include "MFEMObject.h" -#include "MFEMHyprePatch.h" /** * Base class for wrapping mfem::Solver-derived classes. diff --git a/framework/src/mfem/solvers/MFEMHypreGMRES.C b/framework/src/mfem/solvers/MFEMHypreGMRES.C index 3358e196bd6b..127b5bbbb31e 100644 --- a/framework/src/mfem/solvers/MFEMHypreGMRES.C +++ b/framework/src/mfem/solvers/MFEMHypreGMRES.C @@ -39,7 +39,7 @@ MFEMHypreGMRES::MFEMHypreGMRES(const InputParameters & parameters) : MFEMSolverB void MFEMHypreGMRES::constructSolver() { - auto solver = std::make_unique(getMFEMProblem().getComm()); + auto solver = std::make_unique(getMFEMProblem().getComm()); solver->SetTol(getParam("l_tol")); solver->SetAbsTol(getParam("l_abs_tol")); solver->SetMaxIter(getParam("l_max_its")); diff --git a/framework/src/mfem/solvers/MFEMHyprePCG.C b/framework/src/mfem/solvers/MFEMHyprePCG.C index d4deef96f949..4664918f7a6e 100644 --- a/framework/src/mfem/solvers/MFEMHyprePCG.C +++ b/framework/src/mfem/solvers/MFEMHyprePCG.C @@ -38,7 +38,7 @@ MFEMHyprePCG::MFEMHyprePCG(const InputParameters & parameters) : MFEMSolverBase( void MFEMHyprePCG::constructSolver() { - auto solver = std::make_unique(getMFEMProblem().getComm()); + auto solver = std::make_unique(getMFEMProblem().getComm()); solver->SetTol(getParam("l_tol")); solver->SetAbsTol(getParam("l_abs_tol")); solver->SetMaxIter(getParam("l_max_its")); diff --git a/framework/src/mfem/solvers/MFEMSolverBase.C b/framework/src/mfem/solvers/MFEMSolverBase.C index dfb1ed6c7009..76971c50eecd 100644 --- a/framework/src/mfem/solvers/MFEMSolverBase.C +++ b/framework/src/mfem/solvers/MFEMSolverBase.C @@ -60,9 +60,6 @@ template void MFEMSolverBase::setPreconditioner(mfem::HypreFGMRES &); template void MFEMSolverBase::setPreconditioner(mfem::HypreGMRES &); template void MFEMSolverBase::setPreconditioner(mfem::HyprePCG &); -template void MFEMSolverBase::setPreconditioner(mfem::patched::HypreGMRES &); -template void MFEMSolverBase::setPreconditioner(mfem::patched::HyprePCG &); - void MFEMSolverBase::checkSpectralEquivalence(mfem::ParBilinearForm & blf) const { diff --git a/libmesh b/libmesh index 0185b8b2a7e3..870e4eb6b27b 160000 --- a/libmesh +++ b/libmesh @@ -1 +1 @@ -Subproject commit 0185b8b2a7e31300bdf020b323342c49030b8da0 +Subproject commit 870e4eb6b27ba407762776931d2c2a4dd1b63ff0 diff --git a/petsc b/petsc index 1467453aedb6..14aaa922d81a 160000 --- a/petsc +++ b/petsc @@ -1 +1 @@ -Subproject commit 1467453aedb62826efc970ceafc4bd6dab8229ab +Subproject commit 14aaa922d81a3fd5bec16ff31319561e7c729148 diff --git a/scripts/configure_petsc.sh b/scripts/configure_petsc.sh index 94970f2c80f4..909be43fcf03 100644 --- a/scripts/configure_petsc.sh +++ b/scripts/configure_petsc.sh @@ -108,6 +108,7 @@ function configure_petsc() cd "$PETSC_DIR" || exit 1 python3 ./configure --with-64-bit-indices \ --with-cxx-dialect=C++17 \ + --ignoreCxxBoundCheck=1 \ --with-debugging=no \ --with-fortran-bindings=0 \ --with-mpi=1 \ @@ -128,7 +129,9 @@ function configure_petsc() --download-strumpack=1 \ --download-superlu_dist=1 \ --download-kokkos=1 \ + --download-kokkos-commit=4.7.04 \ --download-kokkos-kernels=1 \ + --download-kokkos-kernels-commit=4.7.04 \ --download-libceed=1 \ --download-umpire \ --download-umpire-commit=v2025.12.0 \ diff --git a/scripts/tests/versioner_hashes.yaml b/scripts/tests/versioner_hashes.yaml index d3a73b016bf9..56b43b129d41 100644 --- a/scripts/tests/versioner_hashes.yaml +++ b/scripts/tests/versioner_hashes.yaml @@ -1764,3 +1764,37 @@ d41b47a41b7edac3875e308fb77df6069de32269: # 32404 wasp: full_version: 2025.09.19_02960f1_5 hash: 9ce59ea +bc090e25230b4b632541b1f26c83330d732930e4: # 32757 + build: + full_version: 2026.04.21 + hash: ae2c988 + libmesh: + full_version: 2026.05.01_870e4eb_0 + hash: 583f3ed + libmesh-vtk: + full_version: 9.6.1_0 + hash: de4f8ad + moose-dev: + full_version: 2026.05.01 + hash: cc067d7 + mpi: + full_version: 2026.04.21 + hash: f6f315e + petsc: + full_version: 3.25.1_0 + hash: b035b4c + pprof: + full_version: 2026.03.01_a15ffb7 + hash: '4869696' + pyhit: + full_version: 2026.04.21 + hash: 1528d6d + seacas: + full_version: 2025.10.14_3 + hash: 2115cf6 + tools: + full_version: 2026.04.21 + hash: eef89ae + wasp: + full_version: 2025.09.19_02960f1_6 + hash: 4b8a7ec diff --git a/scripts/versioner.yaml b/scripts/versioner.yaml index 576e52e09305..e8eba5c9293e 100644 --- a/scripts/versioner.yaml +++ b/scripts/versioner.yaml @@ -43,7 +43,7 @@ packages: - conda/libmesh-vtk # dependers: libmesh, moose-dev petsc: - version: 3.24.6 + version: 3.25.1 build_number: 0 conda: conda/petsc templates: @@ -62,7 +62,7 @@ packages: - scripts/apple-silicon-hdf5-autogen.patch # dependers: moose-dev libmesh: - version: 2026.04.13_0185b8b + version: 2026.05.01_870e4eb build_number: 0 conda: conda/libmesh templates: @@ -111,7 +111,7 @@ packages: conda/pyhit/meta.yaml.template: conda/pyhit/meta.yaml # dependers: none moose-dev: - version: 2026.04.21 + version: 2026.05.01 conda: conda/moose-dev templates: conda/moose-dev/meta.yaml.template: conda/moose-dev/meta.yaml diff --git a/unit/src/TestNonLinearIntegrators.C b/unit/src/TestNonLinearIntegrators.C index 4724c48b6269..b4cf5ae12cf5 100644 --- a/unit/src/TestNonLinearIntegrators.C +++ b/unit/src/TestNonLinearIntegrators.C @@ -2,7 +2,6 @@ #include "gtest/gtest.h" #include "Moose.h" -#include "MFEMHyprePatch.h" class VectorPowerLawNLFIntegrator : public mfem::NonlinearFormIntegrator { @@ -218,7 +217,7 @@ TEST(CheckData, NonlinearIntegratorTest) // Solver for the Jacobian solve in the Newton method mfem::Solver * jacobian_solver; // Set up the Jacobian solver - mfem::patched::HyprePCG j_pcg(h_curl_fe_space.GetComm()); + mfem::HyprePCG j_pcg(h_curl_fe_space.GetComm()); mfem::HypreAMS ams(&h_curl_fe_space); ams.SetPrintLevel(1); j_pcg.SetTol(1e-7);