Changes: 3.21#
General:
- Add single precision support for using HYPRE and MFEM 
- Require Fortran 2003 compiler with GET_COMMAND_ARGUMENT() support for building PETSc with Fortran bindings 
Configure/Build:
- Add - --download-blis-use-openmp=0to force- download-blisto not build with OpenMP when- with-openmpis provided
- Add - PetscBLASSetNumThreads()and- PetscBLASGetNumThreads()for controlling how many threads the BLAS routines use
- Change - win_cland similar- win32fecompiler wrappers to- win32fe_cl
- Add build support for Intel oneAPI compilers - icxand- ifxon Microsoft Windows with compiler wrappers- win32fe_icxand- win32fe_ifx(only static library build with- ifx)
- Add lib/petsc/bin/maint/runjobs.py list-of-jobs script to allow submitting a subset of the jobs to the CI 
Sys:
- Add - PetscBenchan object class for managing benchmarks in PETSc
- Deprecate - PetscVoidFunction,- PetscVoidStarFunction, and- PetscErrorCodeFunctiontypedefs in favor of- PetscVoidFnand- PetscErrorCodeFn
- Add - PetscOptionsBoundedReal()and- PetscOptionsRangeReal()
- Rename Petsc stream types to - PETSC_STREAM_DEFAULT,- PETSC_STREAM_NONBLOCKING,- PETSC_STREAM_DEFAULT_WITH_BARRIERand- PETSC_STREAM_NONBLOCKING_WITH_BARRIER. The root device context uses- PETSC_STREAM_DEFAULTby default
Event Logging:
PetscViewer:
- Change - PetscViewerRestoreSubViewer()to no longer need a call to- PetscViewerFlush()after it
- Introduce - PetscOptionsRestoreViewer()that must be called after- PetscOptionsGetViewer()and- PetscOptionsGetViewers()to ensure thread safety
- Add - PetscViewerASCIIWORLDSetFileUnit()
PetscDraw:
AO:
IS:
- Add - ISLocalToGlobalMappingGetNodeInfo()and- ISLocalToGlobalMappingRestoreNodeInfo()to access neighboring information of local indices
- Add support to load an - ISLocalToGlobalMappingvia- ISLocalToGlobalMappingLoad()from data previously stored using- ISLocalToGlobalMappingView()
- Add - ISLocalToGlobalMappingGetBlockMultiLeavesSF()to share local block data
VecScatter / PetscSF:
- Add MPI-4.0 persistent neighborhood collectives support. Use -sf_neighbor_persistent along with -sf_type neighbor to enable it 
- Add - PetscSFCreateStridedSF()to communicate strided blocks of data
PF:
Vec:
- Add - VecGhostGetGhostIS()to get the ghost indices of a ghosted vector
- Add - -vec_mdot_use_gemvto let- VecMDot(),- VecMTDot()use BLAS2- gemv()instead of custom unrolled kernel. Default is on
- Add - -vec_maxpy_use_gemvto let- VecMAXPY()use BLAS2- gemv()instead of custom unrolled kernel. Default is off
- VecReplaceArray()on the first Vec obtained from- VecDuplicateVecs()with either of the two above *_use_gemv options won’t work anymore. If needed, turn them off or use- VecDuplicateVec()instead
- VecScale()is now a logically collective operation
- Add - VecISShift()to shift a part of the vector
- VecISSet()does no longer accept NULL as index set
- VecLoad()automatically determines whether the file was written using 32-bit or 64-bit indices, and files can read with PETSc built either way
PetscSection:
- Add - PetscSectionGetBlockStarts()and- PetscSectionSetBlockStarts()
- Add argument to - PetscSectionCreateGlobalSection()that can ignore the local section permutation
PetscPartitioner:
- Add edge weights to - PetscPartitionerPartition()
Mat:
- Reset - MATLMVMhistory vectors if size is changed
- Add specific support for - MatMultHermitianTranspose()and- MatMultHermitianTransposeAdd()in- MATSHELL,- MATDENSE,- MATNEST, and- MATSCALAPACK
- Add function - MatProductGetAlgorithm()
- MATTRANSPOSEVIRTUAL,- MATHERMITIANTRANSPOSEVIRTUAL,- MATNORMAL,- MATNORMALHERMITIAN, and- MATCOMPOSITEnow derive from- MATSHELL. This implies a new behavior for those- Mat, as calling- MatAssemblyBegin()/- MatAssemblyEnd()destroys scalings and shifts for- MATSHELL, but it was not previously the case for other- MatType
- Add function - MatGetRowSumAbs()to compute vector of L1 norms of rows ([B]AIJ only)
- Add partial support for - MatBackwardSolve()/- MatForwardSolve()with- MATSOLVERMKL_PARDISOand- MATSOLVERMKL_CPARDISO
- Deprecate - MATISoptions- -matis_xxx. Use- -mat_is_xxx
- Add support for repeated entries in the local part of the local to global map for - MATISvia the routines- MatISSetAllowRepeated()and- MatISGetAllowRepeated()
- Add support to dump and load a matrix of - MATIStype
- Add dense representations of symmetric Broyden matrices - MATLMVMDBFGS,- MATLMVMDDFP, and- MATLMVMDQN
- Add - MATSELLHIPand the corresponding HIP kernels for matrix-vector multiplication
MatCoarsen:
- Add - MatCoarsenSetMaximumIterations()with corresponding option- -mat_coarsen_max_it <4>. The number of iteration of the coarsening method. Used for the HEM coarsener
- Add - MatCoarsenSetThreshold()with corresponding option- -mat_coarsen_threshold <-1>. Threshold for filtering graph for HEM. Like GAMG < 0 means no filtering
- Change API for several PetscCD methods used internally in - PCGAMGand- MatCoarsen(eg, change- PetscCDSetChuckSize()to- PetscCDSetChunckSize()), remove- Matargument from``PetscCDGetASMBlocks()``
PC:
- Add - PCGAMGSetLowMemoryFilter()with corresponding option- -pc_gamg_low_memory_threshold_filter. Use the system- MatFiltergraph/matrix filter, without a temporary copy of the graph, otherwise use method that can be faster
- Add - PCGAMGASMSetHEM()with corresponding option- -pc_gamg_asm_hem_aggs N. Use ASM smoother constructed from N applications of heavy edge matching
- Add - PCLMVMSetUpdateVec()for the automatic update of the LMVM preconditioner inside a SNES solve
- Add - PCGAMGSetInjectionIndex()with corresponding option- -pc_gamg_injection_index i,j,k.... Inject provided indices of fine grid operator as first coarse grid restriction (sort of p-multigrid for C1 elements)
- Add - PC_JACOBI_ROWL1to- PCJacobiTypeto use (scaled) l1 row norms for diagonal approximation with scaling of off-diagonal elements
- Add - PCJacobiSetRowl1Scale()and- -pc_jacobi_rowl1_scale scaleto access new scale member of PC_Jacobi class, for new row l1 Jacobi
- Add - -mg_fine_...prefix alias for fine grid options to override- -mg_levels_...options, like- -mg_coarse_...
- The generated sub-matrices in - PCFIELDSPLIT,- PCASM, and- PCBJACOBInow retain any null space or near null space attached to them even if the non-zero structure of the outer matrix changes
- Add support for multiple subdomain per MPI process in - PCBDDC
- Add PCJacobiGetDiagonal() to access the Jacobi inverted matrix diagonal and its square root variant 
KSP:
SNES:
- Add support for Quasi-Newton models in - SNESNEWTONTRvia- SNESNewtonTRSetQNType
- Add support for trust region norm customization in - SNESNEWTONTRvia- SNESNewtonTRSetNormType
- Remove default of - KSPPREONLYand- PCLUfor- SNESNASMsubdomain solves: for- SNESASPINuse- -npc_sub_ksp_type preonly -npc_sub_pc_type lu
- Add function typedefs - SNESInitialGuessFn,- SNESFunctionFn,- SNESObjectiveFn,- SNESJacobianFn, and- SNESNGSFn
- Deprecate - DMDASNESFunction,- DMDASNESJacobian,- DMDASNESObjective,- DMDASNESFunctionVec,- DMDASNESJacobianVec, and- DMDASNESObjectiveVecin favor of- DMDASNESFunctionFn,- DMDASNESJacobianFn,- DMDASNESObjectiveFn,- DMDASNESFunctionVecFn,- DMDASNESJacobianVecFn, and- DMDASNESObjectiveVecFn
SNESLineSearch:
- Deprecate - SNESLineSearchShellSetUserFunc()and- SNESLineSearchShellGetUserFunc()in favor of- SNESLineSearchShellSetApply()and- SNESLineSearchShellGetApply()
TS:
- Add support for custom predictor callbacks in the second-order generalized-alpha method using - TSAlpha2SetPredictor()
- Allow adaptivity to change time step size in first step of second-order generalized-alpha method 
- Add - TSSetPostEventStep()to control the first step after event
- Rename - TSSetPostEventIntervalStep()to- TSSetPostEventSecondStep(), controlling the second step after event
- Rename option - -ts_event_post_eventinterval_stepto- -ts_event_post_event_second_step
- Change the (event) indicator functions type from - PetscScalar[]to- PetscReal[]in the user- indicator()callback set by- TSSetEventHandler()
- Add - TSGetStepRollBack()to access the internal rollback flag
- Add boolean flag to - TSSetResize()to control when to resize
TAO:
- Deprecate - TaoCancelMonitors()(resp.- -tao_cancelmonitors) in favor of- TaoMonitorCancel()(resp.- -tao_monitor_cancel)
- Deprecate - -tao_view_gradient,- -tao_view_ls_residual,- -tao_view_solution, and- -tao_view_stepdirectionin favor of- -tao_monitor_gradient,- -tao_monitor_ls_residual,- -tao_monitor_solution, and- -tao_monitor_step
- Deprecate - -tao_draw_solution,- -tao_draw_gradient, and- -tao_draw_stepin favor of- -tao_monitor_solution_draw,- -tao_monitor_gradient_draw, and- -tao_monitor_step_draw
- Deprecate - TaoSetMonitor()in favor of- TaoMonitorSet()
- Deprecate all of the provided - Taomonitor routine names in favor of the standard PETSc naming conventions
DM/DA:
- Add MPI reduction inside - SNESComputeObjective_DMDA(). No need to call reduction in local callback
- Deprecate - PetscSimplePointFuncin favor of- PetscSimplePointFn
- Move - DMPlexReorderDefaultFlagto- DMReorderDefaultFlag
- Add - DMCreateSectionPermutation(),- DMReorderSectionGetType(), and- DMReorderSectionSetType()
- Add - DMReorderSectionGetDefault()and- DMReorderSectionSetDefault()to allow point permutations when sections are built automatically
- Change interface to - DMCreateSectionSubDM()to add component specification
- Add - DMDAGetBoundaryType()
DMSwarm:
- Add continuous - DMargument to- DMSwarmProjectFields()
- Add - DMSwarmGetFieldInfo()
- Add - DMSwarmVectorGetField()
DMPlex:
- Drop support for MED, i.e. remove - DMPlexCreateMedFromFile()and- --with-med
- Change protototype of - DMPlexSetSNESLocalFEM(). Now it accepts a single context and a Boolean indicating to use the objective function callback
- Replace - DMProjectCoordinates()with- DMSetCoordinateDisc()
- Add argument to - DMPlexCreateCoordinateSpace()
- Add - DMPlexCoordMapand some default maps
- Add Boolean argument to - DMPlexPartitionLabelCreateSF()to sort ranks
- Add - DMClearAuxiliaryVec()to clear the auxiliary data
- Add ignoreLabelHalo, sanitizeSubmesh, and ownershipTransferSF arguments to - DMPlexFilter()
- Change - DMPlexSetIsoperiodicFaceSF(),- DMPlexGetIsoperiodicFaceSF(), and- DMPlexSetIsoperiodicFaceTransform()to accept multiple values for different periodic pairings
FE/FV:
- Add Jacobian type argument to - PetscFEIntegrateBdJacobian()
- Add - PetscFVClone()
- Add - PetscFVCreateDualSpace()
DMNetwork:
DMStag:
- Add support for - DMLocalToLocalBegin()and- DMLocalToLocalEnd()
- Add - DMStagSetRefinementFactor()and- DMStagGetRefinementFactor()to set and get the refinement ratio
- Add support for arbitrary refinement ratio and degree of freedom in interpolation and restriction 
DT:
Fortran: