Changes: Development#

General:

  • Change behavior of -options_left when set to true: it no longer triggers a call to PetscOptionsView()

  • Change \(PETSC_DIR/lib/petsc/bin/petscfreesharedmemory to \)PETSC_DIR/lib/petsc/bin/petscfreesharedmemory.sh

Configure/Build:

  • Make SYCL a devicePackage, i.e., builds --with-sycl now have PETSC_HAVE_DEVICE defined

  • Add the option --with-devicelanguage to compile PetscDevice code using either a C or C++ compiler

  • Add Caliper, an instrumentation and performance profiling library that can be used to profile Hypre.

  • Add typing stubs for the Python extension module petsc4py.PETSc.

  • Remove --with-mumps-serial option, rely on --with-mpi=0

Sys:

  • Add PetscCallHYPRE() to check HYPRE error codes and print error messages on failure

  • Add PetscBTCountSet() to count set bits in PetscBT

  • Add the option -hypre_umpire_device_pool_size <n> to set the Umpire device memory pool size (in MiB), which is used by HYPRE and 4 Gib by default

  • Change PetscStackCallExternalVoid() to PetscCallExternalVoid()

Event Logging:

  • Add two approaches for GPU energy monitoring: -log_view_gpu_energy and -log_view_gpu_energy_meter

  • Add API PetscLogGpuEnergy(), PetscLogGpuEnergyMeter(), PetscLogGpuEnergyMeterBegin() and PetscLogGpuEnergyMeterEnd() for GPU energy monitoring

  • Remove TAO_ObjectiveEval, TAO_GradientEval, TAO_ObjGradEval, TAO_HessianEval log events; objective, gradient, objective-and-gradient, and Hessian evaluations are now logged as TAOTERM_ObjectiveEval, TAOTERM_GradientEval, TAOTERM_ObjGradEval, TAOTERM_HessianEval under TAOTERM_CLASSID. These log events reflect the actual user callback invoked, not the TaoCompute*() function called by the solver; for example, calling TaoComputeGradient() when only an objective-and-gradient callback is provided logs TAOTERM_ObjGradEval

  • Add TAO_ResidualEval log event for TaoComputeResidual(); previously TaoComputeResidual() reused TAO_ObjectiveEval

PetscViewer:

PetscDraw:

AO:

IS:

VecScatter / PetscSF:

PF:

Vec:

PetscSection:

PetscPartitioner:

Mat:

MatCoarsen:

PC:

KSP:

SNES:

SNESLineSearch:

TS:

  • Add TSPseudoComputeFunction() to get nonlinear residual while avoiding recalculation if possible

  • Remove unused TSPseudoVerifyTimeStepDefault()

  • Remove TSPseudoComputeTimeStep() and TSPseudoVerifyTimeStep()

  • Change the destroy() function argument of TSTrajectorySetTransform() to type PetscCtxDestroyFn *. This means the destroy function must dereference the argument before operating on it

  • Correct option -ts_max_reject to -ts_max_step_rejections

  • Correct option -ts_dt to -ts_time_step

  • Change TSAdaptCheckStage() to call function set by TSAdaptSetCheckStage() before other checks

  • Fix -ts_ssp_nstages to -ts_ssp_num_stages

TAO:

  • Add TaoTerm object to allow easily constructing and using objective functions, and their derivatives that are the sum of two or more terms. This will allow the easy implementation of Tao solvers that utilize the sum structure

  • Add TaoGetTerm() and TaoAddTerm() for manipulating the objective, gradient, and Hessian evaluation of a Tao using TaoTerm

  • Add TaoGetHessianMatrices() to get the Hessian and preconditioner matrices from a Tao

  • Fix TAOBRGN such that TAOBRGN subsolver properly appends TAOBRGN’s prefix

  • Change TaoComputeResidual() to increment a new residual evaluation counter instead of the objective function evaluation counter

  • Change -tao_view to report residual evaluations separately and to include matrix-free finite-difference gradient evaluations in the gradient evaluation count

TaoTerm:

PetscRegressor:

PetscDA:

DM:

DMSwarm:

DMPlex:

FE/FV:

DMNetwork:

DMStag:

DT:

Fortran:

  • Replace ./configure option --with-mpi-f90module-visibility with --with-mpi-ftn-module=<mpi or mpi_f08>

  • Add PETSC_INT_KIND and PETSC_MPIINT_KIND

  • Fortran code should now use MPIU_Comm instead of MPI_Comm, and similarly for other MPI types, see section “Fortran and MPI” in the users guide

  • Fortran interface definitions are now automatically generated for all functions that take context variable arguments, represented in the C source code with a type of PetscCtx, allowing the use of any Fortran derived type (or PETSc object) as the context

  • For all PETSc functions XXXGetYYY() that return a context variable as an argument, represented in the C source code with an argument type of PetscCtxRt, a macro is generated used with Interface_XXXGetYYY(AppCtx) which tells the Fortran compiler that a pointer to that derived type type(AppCtx) is returned from the Fortran version of XXXGetYYY(). See src/snes/tutorials/ex5f90.F90`