xref: /petsc/doc/changes/314.md (revision 7f296bb328fcd4c99f2da7bfe8ba7ed8a4ebceee)
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