Changes: 3.26#

General#

  • Increase the minimum required CUDA Toolkit version to 11.4

  • Change the policy so that documentation changes/fixes/additions are added to the main branch, not the release branch

  • Change petscdiff to treat < in expected output as text that must match instead of suppressing differences from numerical output

  • Change the make branch-review rule to [PETSC_LLM_CLI=command] [PETSC_LLM_MODEL=modelname] make branch-review. Add support for Gemini, Codex, OpenCode, and other LLM CLIs. Replace the use of CLAUDE_OPTS with PETSC_LLM_CLI_OPTS and PETSC_LLM_MODEL

  • Add a CodeGraph skill and repository guidance so LLM coding tools automatically use an existing local PETSc CodeGraph index when navigating or reviewing source

  • Add comm and prefix as initial arguments to PetscOptionsDeprecatedNoObject()

  • Change the macros PetscCallHDF5(), PetscCallHDF5ReturnNoCheck(), PetscCallHDF5Return(), PetscCallEGADS(), PetscCallSAWs(), PetscCallP4est(), and PetscCallP4estReturn() to be variadic and take the function arguments directly without requiring the parentheses that previously wrapped the function arguments. For functions that take no arguments, a trailing comma after the function name is required per previous C standards

  • Change all use of Metis in the PETSc API to use METIS

  • Change make clang-tidy to require --with-mpi=0; add PETSC_CLANG_TIDY_FIX=--fix to apply fixits

Configure/Build#

  • Increase the minimum required Python version for ./configure to 3.6

  • Add providesDocs and docsDirs package attributes so that an external package’s sources can be cloned and scanned to generate PETSc manual pages when the documentation is built

  • Add interface to LIBXSMM

  • Add package-version comparisons to test harness requires, such as superlu_dist_version_ge(9,0,0) or PETSC_PKG_SUPERLU_DIST_VERSION_GE(9,0,0), using the versions recorded by configure

  • Add --with-cuda-nvml, off by default, so a CUDA build no longer depends at runtime on the driver-provided libnvidia-ml and its libraries run on machines without an NVIDIA driver; configure with --with-cuda-nvml=1 (requires CUDA 12.2 or later) for GPU power and energy monitoring (-log_view_gpu_energy, -log_view_gpu_energy_meter)

  • Add detection of NVIDIA NVPL BLAS/LAPACK (for aarch64) so --with-blaslapack-dir pointing at an NVPL library directory works without listing the libraries by hand

  • Add OpenMP target offload support for CUDA/HIP with --with-openmp when compilers support it, and define macros PETSC_HAVE_OPENMP_TARGET_OFFLOAD_{CC, CXX, FC} accordingly

Sys#

Event Logging#

  • Change -log and -log_all to only take optional filename arguments. They no longer take optional boolean argument

PetscViewer#

PetscDraw#

AO#

IS#

VecScatter / PetscSF#

PF#

Vec#

PetscSection#

PetscPartitioner#

Mat#

MatCoarsen#

PC#

KSP#

SNES#

SNESLineSearch#

TS#

TAO#

  • Add TaoGetDM() and TaoSetDM()

  • Deprecate TaoMonitorDefaultShort(), -tao_monitor_short, and -tao_monitor_short_interval

  • Change the deprecated TaoSMonitor() and -tao_smonitor to use the full-precision default monitor

  • Add TaoGetConvergedReasonString() to retrieve a human readable string describing the TaoConvergedReason

TaoTerm#

PetscRegressor#

PetscDA#

DM#

DMSwarm#

DMPlex#

FE/FV#

DMNetwork#

DMStag#

DT#

Fortran#

  • Remove the PetscOffset datatype and the undocumented PetscOffsetFortran() routine; both were needed by the removed Fortran bindings that returned an array together with a separate index offset

  • PCASMGetLocalSubdomains() and PCASMGetLocalSubmatrices() now fill disassociated pointer outputs and return arrays that are absent in C as disassociated pointers. Pass PETSC_NULL_IS_POINTER or PETSC_NULL_MAT_POINTER to omit an array

  • Fix PCASMCreateSubdomains(), which misread the number of blocks. It now errors if given PETSC_NULL_IS_POINTER

  • PCASMDestroySubdomains() accepts PETSC_NULL_IS_POINTER for is_local, and PCASMGetSubKSP() and PCASMGetLocalSubmatrices() now return their errors instead of discarding them

  • PCASMGetSubKSP() and PCASMRestoreSubKSP() accept PETSC_NULL_KSP_POINTER to omit the KSP array. PCASMGetSubKSP() is no longer collective when first_local is PETSC_NULL_INTEGER. PCASMCreateSubdomains2D() now errors if given PETSC_NULL_IS_POINTER