1# Changes: 3.14 2 3```{rubric} General: 4``` 5 6- Deprecate PetscIgnoreErrorHandler(), use PetscReturnErrorHandler() 7- Replace -debugger_nodes with -debugger_ranks 8- Change PETSCABORT() to abort instead of MPI_Abort if run under 9 -start_in_debugger 10- Add PETSC_MPI_THREAD_REQUIRED to control the requested threading 11 level for MPI_Init 12- Add CUDA-11 support, but with CUDA-11, 13 -mat_cusparse_storage_format {ELL, HYB} are not supported anymore. 14 Only CSR is supported 15- Add CUDA-11 option -mat_cusparse_spmv_alg {MV_ALG_DEFAULT, 16 CSRMV_ALG1 (default), CSRMV_ALG2} for users to select cuSPARSE 17 SpMV algorithms 18- Add CUDA-11 option -mat_cusparse_spmm_alg {ALG_DEFAULT, CSR_ALG1 19 (default), CSR_ALG2} for users to select cuSPARSE SpMM algorithms 20- Add CUDA-11 option -mat_cusparse_csr2csc_alg {ALG1 (default), 21 ALG2} for users to select cuSPARSE CSR to CSC conversion 22 algorithms 23- Remove option -cuda_initialize, whose functionality is succeeded 24 by -cuda_device xxx 25- Change -cuda_set_device to -cuda_device, which can now accept 26 NONE, PETSC_DEFAULT, PETSC_DECIDE in addition to non-negative 27 integers 28- Change PetscCUDAInitialize(comm) to PetscCUDAInitialize(comm,dev) 29- Add PetscCUDAInitializeCheck() to do lazy CUDA initialization 30- Add -hip_device, -hip_view, -hip_synchronize, 31 PetscHIPInitialize(comm,dev) and PetscHIPInitializeCheck(). Their 32 usage is similar to their CUDA counterpart 33- Add PetscOptionsInsertStringYAML() and -options_string_yaml for 34 YAML-formatted options on the command line 35- Add PETSC_OPTIONS_YAML environment variable for setting options in 36 YAML format 37- Add PetscDetermineInitialFPTrap(); fix so that when Linux or macOS 38 Fortran linker enables catching floating point divide by zero the 39 trapping is disabled for LAPACK routines that generate divide by 40 zero, for example, the reference implementation of ieeeck() 41- Add floating point exception handling support for freebsd and 42 Windows 43- Consistently set exception handling for divide by zero, invalid, 44 underflow, and overflow for all systems when possible 45- -options_monitor and -options_monitor_cancel have immediate global 46 effect, see PetscInitialize() for details 47- Remove PetscOptionsSetFromOptions() 48- Remove PetscOptionsMonitorCancel() 49- Remove -h and -v options. Use -help and -version instead. The 50 short options -h and -v can now be used within user codes 51- Import petsc4py sources into PETSc source tree. Continue to use 52 --download-petsc4py to build petsc4py 53- Add an experimental Kokkos backend for PETSc GPU operations. For 54 example, one can use '--download-kokkos --download-kokkos-kernels 55 --with-kokkos-cuda-arch=TURING75' to build PETSc with a Kokkos 56 CUDA backend, and then use -vec_type kokkos -mat_type aijkokkos. 57 With that, vector and matrix operations on GPUs are done through 58 Kokkos kernels. Currently, VECKOKKOS supports all vector 59 operations, but MATAIJKOKKOS only supports MatMult() and its 60 variants. More complete support is coming 61 62```{rubric} Configure/Build: 63``` 64 65- Change --with-matlabengine-lib= to --with-matlab-engine-lib= to 66 match --with-matlab-engine, print error message for deprecated 67 form 68- Change --download-mpich default for optimized build to ch3:nemesis 69 and keep ch3:sock for debug build 70- On macOS, --with-macos-firewall-rules can be used to automate 71 addition of firewall rules during testing to prevent firewall 72 popup windows 73 74```{rubric} IS: 75``` 76 77```{rubric} PetscDraw: 78``` 79 80```{rubric} VecScatter / PetscSF: 81``` 82 83- Add a Kokkos backend to SF. Previously, SF could only handle CUDA 84 devices. Now it can handle other devices that Kokkos supports when 85 PETSc is configured with Kokkos. The command line option is: 86 -sf_backend cuda | kokkos 87 88```{rubric} PF: 89``` 90 91```{rubric} Vec: 92``` 93 94- Fix memory leaks when requesting -vec_type 95 {standard|cuda|viennacl} when the vector is already of the desired 96 type 97- Add VecViennaCLGetCL{Context|Queue|Mem} for VECVIENNACL to access 98 the CL objects underlying the PETSc Vecs 99- Add VecCreate{Seq|MPI}ViennaCLWithArray and 100 VecViennaCL{Place|Reset}Array 101- Add VecCreate{Seq|MPI}CUDAWithArrays to create VECCUDA sharing the 102 CPU and/or GPU memory spaces 103- Add VecCreate{Seq|MPI}ViennaCLWithArrays to create VECVIENNACL 104 sharing the CPU and/or GPU memory spaces 105- Add an experimental vector type VECKOKKOS 106- Add VecGetOffloadMask to query a Vec's offload mask 107 108```{rubric} PetscSection: 109``` 110 111- PetscSectionGetClosurePermutation(), 112 PetscSectionSetClosurePermutation(), and 113 PetscSectionGetClosureInversePermutation() all require a new 114 argument depth and the getters require closure size to be 115 specified by the caller. This allows multiple closure permutations 116 to be specified, e.g., for mixed topology meshes and boundary 117 faces and for variable-degree spaces. The previous behavior only 118 applied to points at height zero 119 120```{rubric} PetscPartitioner: 121``` 122 123```{rubric} Mat: 124``` 125 126- Add MatSetLayouts() 127- Add MatSeqAIJSetTotalPreallocation(Mat,PetscInt) for efficient row 128 by row setting of a matrix without requiring preallocating for 129 each row 130- Add full support for MKL sparse matrix-matrix products in 131 MATSEQAIJMKL 132- Fix few bugs for MATSEQSBAIJ when missing diagonal entries 133- Fix few bugs when trying to reuse matrices within MatMat 134 operations 135- Deprecate MatFreeIntermediateDataStructures() in favor of 136 MatProductClear() 137- Add MatShellSetMatProductOperation() to allow users specify 138 symbolic and numeric phases for MatMat operations with MATSHELL 139 matrices 140- Add support for distributed dense matrices on GPUs 141 (MATMPIDENSECUDA) 142- Add few missing get/set/replace array operations for MATDENSE and 143 MATDENSECUDA matrices 144- Add MatDense{Get|Restore}ColumnVec to access memory of a dense 145 matrix as a Vec, together with read-only and write-only variants 146- Add MatDense{Get|Restore}SubMatrix to access memory of a 147 contiguous subset of columns of a dense matrix as a Mat 148- Deprecate MatSeqDenseSetLDA in favor of MatDenseSetLDA 149- Add support for A\*B and A^t\*B operations with A = AIJCUSPARSE and 150 B = DENSECUDA matrices 151- Add basic support for MATPRODUCT_AB (resp. MATPRODUCT_AtB) for any 152 matrices with mult (multtranspose) operation defined and B dense 153- Add MATSCALAPACK, a new Mat type that wraps a ScaLAPACK matrix 154- Add support for MUMPS-5.3.0 distributed right-hand side 155- Add support for MatMultHermitianTranspose with SEQAIJCUSPARSE 156- Remove default generation of explicit matrix for MatMultTranspose 157 operations with SEQAIJCUSPARSE. Users can still require it via 158 MatSeqAIJCUSPARSESetGenerateTranspose 159- Add MatOrderingType external returns a NULL ordering to allow 160 solver types MATSOLVERUMFPACK and MATSOLVERCHOLMOD to use their 161 orderings 162- Add an experimental matrix type MATAIJKOKKOS 163 164```{rubric} PC: 165``` 166 167- Fix bugs related with reusing PCILU/PCICC/PCLU/PCCHOLESKY 168 preconditioners with SEQAIJCUSPARSE matrices 169- GAMG uses MAT_SPD to default to CG for the eigen estimate in 170 Chebyshev smoothers 171- Add PCMatApply() for applying a preconditioner to a block of 172 vectors 173- Add -pc_factor_mat_ordering_type external to use ordering methods 174 of MATSOLVERUMFPACK and MATSOLVERCHOLMOD 175- PCSetUp_LU,ILU,Cholesky,ICC() no longer compute an ordering if it 176 is not to be used by the factorization (optimization) 177 178```{rubric} KSP: 179``` 180 181- Add KSPGMRESSetBreakdownTolerance() along with option 182 -ksp_gmres_breakdown_tolerance to 3.14.3 183- Change KSPReasonView() to KSPConvergenceReasonView() 184- Change KSPReasonViewFromOptions() to 185 KSPConvergedReasonViewFromOptions() 186- Add KSPConvergedDefaultSetConvergedMaxits() to declare convergence 187 when the maximum number of iterations is reached 188- Fix many KSP implementations to actually perform the number of 189 iterations requested 190- Add KSPMatSolve() for solving iteratively (currently only with 191 KSPHPDDM and KSPPREONLY) systems with multiple right-hand sides, 192 and KSP{Set|Get}MatSolveBlockSize() to set a block size limit 193- Chebyshev uses MAT_SPD to default to CG for the eigen estimate 194- Add KSPPIPECG2, a pipelined solver that reduces the number of 195 allreduces to one per two iterations and overlaps it with two PCs 196 and SPMVs using non-blocking allreduce 197 198```{rubric} SNES: 199``` 200 201- Change SNESReasonView() to SNESConvergedReasonView() 202- Change SNESReasonViewFromOptions() to 203 SNESConvergedReasonViewFromOptions() 204 205```{rubric} SNESLineSearch: 206``` 207 208```{rubric} TS: 209``` 210 211- Fix examples using automatic differentiation. One can use 212 '--download-adolc --download-colpack' to install the AD tool 213- Improve shift handling in TSComputeXXXJacobian() 214- Update TSTrajectory (type memory) to preallocate a checkpoint pool 215 to be reused across multiple TS runs 216 217```{rubric} TAO: 218``` 219 220- Add lm regularizer to TAOBRGN. This regularizer turns BRGN into a 221 Levenberg-Marquardt algorithm. TAOBRGNGetDamping() vector returns 222 the damping vector used by this regularizer 223 224```{rubric} DM/DA: 225``` 226 227- Change DMComputeExactSolution() to also compute the time 228 derivative of the exact solution 229- Add time derivative of the solution argument to DMAddBoundary(), 230 DMGetBoundary(), PetscDSAddBoundary(), PetscDSUpdateBoundary(), 231 PetscDSGetBoundary() 232 233```{rubric} DMPlex: 234``` 235 236- Deprecate DMPlexCreateFromCellList\[Parallel\]() in favor of 237 DMPlexCreateFromCellList[Parallel]Petsc() which accept PETSc 238 datatypes (PetscInt, PetscReal) 239- Expose DMPlexBuildFromCellList(), 240 DMPlexBuildFromCellListParallel(), 241 DMPlexBuildCoordinatesFromCellList(), 242 DMPlexBuildCoordinatesFromCellListParallel(). They now accept 243 PETSc datatypes 244- Add DMPlexMatSetClosureGeneral() for different row and column 245 layouts 246- DMPlexGet/RestoreClosureIndices() now take argument for ignoring 247 the closure permutation and for modifying the input values for 248 SetClosure() 249- DMPlexComputeInterpolatorNested() now takes a flag allowing nested 250 interpolation between different spaces on the same mesh 251- Add DMPlexInsertBoundaryValuesEssentialBdField() to insert 252 boundary values using a field only supported on the boundary 253- Change DMPlexCreateSubpointIS() to DMPlexGetSubpointIS() 254- Add PetscDSGet/SetBdJacobianPreconditioner() to assembly a PC for 255 the boundary Jacobian 256- Add DMSetRegionNumDS() to directly set the DS for a given region 257- Add PetscDSGetQuadrature() to get the quadrature shared by all 258 fields in the DS 259- Add several refinement methods for Plex 260- Add DMPlexGet/SetActivePoint() to allow user to see which mesh 261 point is being handled by projection 262- Add DMPlexComputeOrthogonalQuality() to compute cell-wise 263 orthogonality quality mesh statistic 264- Change DMPlexSetClosurePermutationTensor() to set tensor 265 permutations at every depth, instead of just height 0 266- Add DMComputeExactSolution() which uses PetscDS information 267- Change DMSNESCheckFromOptions() and DMTSCheckFromOptions() to get 268 exact solution from PetscDS 269- Change DMPlexSNESGetGeometryFVM() to DMPlexGetGeometryFVM() 270- Change DMPlexSNESGetGradientDM() to DMPlexGetGradientDM() 271- Change DMPlexCreateSphereMesh() to take a radius 272- Add DMPlexCreateBallMesh() 273- Change DMSNESCheckDiscretization() to also take the time 274- Add argument to DMPlexExtrude() to allow setting normal and add 275 options for inputs 276- Add DMPlexInsertTimeDerivativeBoundaryValues() 277- Add field number argument to DMPlexCreateRigidBody() 278 279```{rubric} DT: 280``` 281 282- Add PetscDTJacobiNorm() for the weighted L2 norm of Jacobi 283 polynomials 284- Add PetscDTJacobiEvalJet() and PetscDTPKDEvalJet() for evaluating 285 the derivatives of orthogonal polynomials on the segment (Jacobi) 286 and simplex (PKD) 287- Add PetscDTIndexToGradedOrder() and PetscDTGradedOrderToIndex() 288 for indexing multivariate monomials and derivatives in a linear 289 order 290- Add PetscSpaceType "sum" for constructing FE spaces as the sum or 291 concatenation of other spaces 292- Add PetscDSGet/SetExactSolutionTimeDerivative() 293- Add PetscDSSelectDiscretizations() 294- Add argument to DM nullspace constructors 295 296```{rubric} PetscViewer: 297``` 298 299- Deprecate the legacy `.vtk` (PETSC_VIEWER_ASCII_VTK) viewer. 300 Please use `.vtr` or `.vts` for structured grids (DMDA) and 301 `.vtu` for unstructured (DMPlex) 302 303```{rubric} SYS: 304``` 305 306- Add PetscPowInt64 returning a 64bit integer result for cases where 307 PetscPowInt result overflows 32bit representations 308- Add PetscTimSort\[WithArray\]() for improved performance when 309 sorting semi-ordered arrays of any type 310- Add PetscIntSortSemiOrdered\[WithArray\](), 311 PetscMPIIntSortSemiOrdered\[WithArray\](), 312 PetscRealSort\[WithArrayInt\]() which employ 313 PetscTimSort\[WithArray\]() as backends respectively to more 314 efficiently sort semi-ordered arrays of various Petsc datatypes 315- Add PetscMallocTraceSet/Get() to allow tracing of all PetscMalloc 316 calls 317- Add PetscMallocLogRequestedSizeSet/Get() to allow reporting of the 318 original requested size for mallocs, rather than the total size 319 with alignment and header 320 321```{rubric} AO: 322``` 323 324```{rubric} Convest: 325``` 326 327- Add argument to PetscConvEstUseTS(), so you can use 328 -ts_convergence_temporal 0 to check spatial convergence of a TS 329 model 330 331```{rubric} Fortran: 332``` 333