Changes: 3.20#

General:

  • Add PetscOptionsBegin(), PetscOptionsEnd(), PetscOptionsInt(), PetscOptionsBool(), PetscOptionsIntArray(), PetscOptionsReal(), PetscOptionsRealArray(), and PetscOptionsScalar() for Fortran

  • Add PetscAssertPointer() as a replacement for PetscValidPointer(), PetscValidCharPointer(), PetscValidIntPointer(), PetscValidInt64Pointer(), PetscValidCountPointer(), PetscValidBoolPointer(), PetscvalidScalarPointer(), and PetscValidRealPointer()

  • Convert standard header-guards in PETSc header-files to #pragma once. Users relying on specific preprocessor definitions to determine whether particular PETSc headers (e.g. petscdm.h used to be guarded by PETSCDM_H) have been included will find that this no longer works. While header-guards are technically “public” (insofar that they appear in public header-files), their name and value are considered implementation details

Configure/Build:

  • Add support for external-packages to prefer tarball download for regular use - as currently all packages prefer git clones. MPICH is a package using this feature. Here MPICH tarball will be downloaded for regular use. However on providing --download-mpich-commit=main option - configure download and builds from MPICH git repository

  • Add support for external package SLATE, optional dependency for STRUMPACK

  • Add support for external package ZFP, optional dependency for STRUMPACK

  • Add support for external package ButterflyPACK, optional dependency for STRUMPACK

Sys:

Event Logging:

PetscViewer:

PetscDraw:

AO:

IS:

VecScatter / PetscSF:

PF:

Vec:

PetscSection:

PetscPartitioner:

Mat:

MatCoarsen:

PC:

  • Add PCMatGetApplyOperation() and PCMatSetApplyOperation()

  • Add PCReduceFailedReason()

  • Add PCSetKSPNestLevel() and PCSetKSPNestLevel()

  • Refactor PCMPI to be a private system used automatically when -mpi_linear_solver_server is used. The KSP and PC objects that solve the system now inherit any prefix provided initially with KSPSetPrefix() and do not require the previously required mpi_ prefix

  • Add option -fieldsplit_1_pc_hpddm_schur_precondition to use PCHPDDM on the Schur complements from PCFIELDSPLIT

  • Add PCGAMGSetAggressiveSquareGraph() to use square graph method for aggressive coarsening that was the previous default coarsening approach before release 3.19

  • Add PCGAMGSetAggressiveMISk() to set the number of levels (k) of aggressive MIS-k coarseing (2 is very common)

  • Add PCGAMGSetMinDegreeOrderingMISk() to use a minimum degree ordering for the (greedy) MIS-k algorithm

  • Change PCGAMGSetUseParallelCoarseGridSolve() to PCGAMGSetParallelCoarseGridSolve()

  • Add PCGAMGSetRecomputeEstEig() to set flag to have Chebyshev recompute its eigen estimates (default set to true)

KSP:

SNES:

  • Add a convenient, developer-level SNESConverged() function that runs the convergence test and updates the internal converged reason

  • Swap the order of monitor and convergence test. Now monitors are always called after a convergence test

  • Deprecate option -snes_ms_norms in favor of -snes_norm_schedule always

SNESLineSearch:

TS:

  • Remove TSErrorWeightedNormInfinity(), TSErrorWeightedNorm2(), TSErrorWeightedENormInfinity(), TSErrorWeightedENorm2() since the same functionality can be obtained with VecErrorWeightedNorms()

  • Add support for time-dependent solvers with varying solution size using TSSetResize()

  • Add support for Diagonally Implicit Runge-Kutta methods with the new TSDIRK type

TAO:

DM/DA:

DMSwarm:

  • Add scatter mode to DMSwarmProjectFields() and no longer create vectors

  • Promote DMSwarmDataFieldGetEntries(), DMSwarmDataFieldRestoreEntries(), DMSwarmDataBucketGetDMSwarmDataFieldByName(), DMSwarmDataBucketGetDMSwarmDataFieldIdByName(), and DMSwarmDataBucketQueryDMSwarmDataFieldByName() to public interface

DMPlex:

FE/FV:

  • Add PLEXFE_QFUNCTION macro to create CEED QFunctions from Plex pointwise functions

DMNetwork:

DMStag:

DT:

Fortran:

  • Add PetscCheck() and PetscCheckA() for Fortran

  • Change PETSC_HAVE_FORTRAN to PETSC_USE_FORTRAN_BINDINGS to indicate if PETSc is built with Fortran bindings