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=0 to force download-blis to not build with OpenMP when with-openmp is provided

  • Add PetscBLASSetNumThreads() and PetscBLASGetNumThreads() for controlling how many threads the BLAS routines use

  • Change win_cl and similar win32fe compiler wrappers to win32fe_cl

  • Add build support for Intel oneAPI compilers icx and ifx on Microsoft Windows with compiler wrappers win32fe_icx and 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:

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:

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_gemv to let VecMDot(), VecMTDot() use BLAS2 gemv() instead of custom unrolled kernel. Default is on

  • Add -vec_maxpy_use_gemv to 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:

PetscPartitioner:

Mat:

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 PCGAMG and MatCoarsen (eg, change PetscCDSetChuckSize() to PetscCDSetChunckSize()), remove Mat argument from``PetscCDGetASMBlocks()``

PC:

  • Add PCGAMGSetLowMemoryFilter() with corresponding option -pc_gamg_low_memory_threshold_filter. Use the system MatFilter graph/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

  • PCMAT use MatSolve() if implemented by the matrix type

  • 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_ROWL1 to PCJacobiType to use (scaled) l1 row norms for diagonal approximation with scaling of off-diagonal elements

  • Add PCJacobiSetRowl1Scale() and -pc_jacobi_rowl1_scale scale to 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 PCBJACOBI now 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:

SNESLineSearch:

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_step to -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_stepdirection in 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_step in 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 Tao monitor routine names in favor of the standard PETSc naming conventions

DM/DA:

DMSwarm:

DMPlex:

FE/FV:

DMNetwork:

DMStag:

DT:

Fortran: