xref: /petsc/doc/changes/316.md (revision f8b9f887efa5534f423807e37a1fe2e87d779bac)
1# Changes: 3.16
2
3% STYLE GUIDELINES:
4% * Capitalize sentences
5% * Use imperative, e.g., Add, Improve, Change, etc.
6% * Don't use a period (.) at the end of entries
7% * If multiple sentences are needed, use a period or semicolon to divide sentences, but not at the end of the final sentence
8
9```{rubric} General:
10```
11
12- Change `MPIU_Allreduce()` to always returns a MPI error code that
13  should be checked with `CHKERRMPI(ierr)`
14- Add support for A64FX and Cray compilers
15- Add support for ESSL 5.2 and later; drop support for ESSL \<=5.1
16- Add support for NEC-SX Tsubasa Vector Engine
17- Add support for NVIDIA HPC SDK
18
19```{rubric} Configure/Build:
20```
21
22- Configure requires Python-2.7 or Python-3.4+.
23- Remove `--with-kokkos-cuda-arch`. One can use `-with-cuda-gencodearch` to specify the cuda arch for Kokkos. Usually not needed since PETSc auto detects that
24- For `--download-hdf5`, disable `--download-hdf5-fortran-bindings` by default
25- Add OpenCascade package to PETSc and allow `--download-opencascade`
26- Add support for hypre in device mode for both NVIDIA and AMD GPUs
27- Extend detection of C++ dialect to C++17. Configure now also takes minimum and maximum required C++ dialect of packages into account when choosing the C++ dialect
28
29```{rubric} Sys:
30```
31
32- Add `PetscDevice` class to manage discovered GPU devices
33- Add `PetscDeviceKind`
34- Add `PetscDeviceCreate()`, `PetscDeviceConfigure()`, and `PetscDeviceDestroy()`
35- Add `PetscDeviceContext` class to manage asynchronous GPU compute support via a fork-join model
36- Add `PetscStreamType` and `PetscDeviceContextJoinMode`
37- Add `PetscDeviceContextCreate()`, `PetscDeviceContextDestroy()`, `PetscDeviceContextSetDevice()`, `PetscDeviceContextGetDevice()`,
38  `PetscDeviceContextSetStreamType()`, `PetscDeviceContextGetStreamType()`, `PetscDeviceContextSetUp()`, `PetscDeviceContextDuplicate()`,
39  `PetscDeviceContextQueryIdle()`, `PetscDeviceContextWaitForContext()`, `PetscDeviceContextFork()`, `PetscDeviceContextJoin()`,
40  `PetscDeviceContextSynchronize()`, `PetscDeviceContextGetCurrentContext()`, `PetscDeviceContextSetCurrentContext()`, and
41  `PetscDeviceContextSetFromOptions()`
42- Deprecate `petsccublas.h` and `petschipblas.h` in favor of `petscdevice.h` and `petscdevicetypes.h`
43- Add GPU event timers to capture kernel execution time accurately
44- Remove `WaitForCUDA()` and `WaitForHIP()` before `PetscLogGpuTimeEnd()`
45- Add MPIU_REAL_INT and MPIU_SCALAR_INT datatypes to be used for reduction operations
46- Add MPIU_MAXLOC and MPIU_MINLOC operations
47- Add `CHKERRCXX()` to catch C++ exceptions and return a PETSc error code
48- Remove `PetscStack` routines from public headers, this class should now be considered private
49
50```{rubric} PetscViewer:
51```
52
53- `PetscViewerHDF5PushGroup()`: if input path begins with `/`, it is
54  taken as absolute, otherwise relative to the current group
55- Add `PetscViewerHDF5HasDataset()`
56- `PetscViewerHDF5HasAttribute()`,
57  `PetscViewerHDF5ReadAttribute()`,
58  `PetscViewerHDF5WriteAttribute()`,
59  `PetscViewerHDF5HasDataset()` and
60  `PetscViewerHDF5HasGroup()`
61  support absolute paths (starting with `/`)
62  and paths relative to the current pushed group
63- Add input argument to `PetscViewerHDF5ReadAttribute()` for default
64  value that is used if attribute is not found in the HDF5 file
65- Add `PetscViewerHDF5PushTimestepping()`,
66  `PetscViewerHDF5PopTimestepping()` and
67  `PetscViewerHDF5IsTimestepping()` to control timestepping mode.
68- One can call `PetscViewerHDF5IncrementTimestep()`,
69  `PetscViewerHDF5SetTimestep()` or `PetscViewerHDF5GetTimestep()` only
70  if timestepping mode is active
71- Error if timestepped dataset is read/written out of timestepping mode, or
72  vice-versa
73
74```{rubric} PetscDraw:
75```
76
77```{rubric} AO:
78```
79
80```{rubric} IS:
81```
82
83```{rubric} VecScatter / PetscSF:
84```
85
86```{rubric} PF:
87```
88
89```{rubric} Vec:
90```
91
92- Add `VecMean()` to calculate arithmetic mean of elements of a vector
93- Add `VecBoundToCPU()` to query information set with `VecBindToCPU()`
94
95```{rubric} PetscSection:
96```
97
98- Extend `PetscSectionView()` for section saving to HDF5
99- Add `PetscSectionLoad()` for section loading from HDF5
100
101```{rubric} PetscPartitioner:
102```
103
104```{rubric} Mat:
105```
106
107- `MATMPIKAIJ` now tracks the object state of the AIJ matrix describing the blockwise action of the KAIJ matrix and
108  automatically rebuilds internal data structures before executing operations with the KAIJ matrix if the state has changed
109- Factorization types now provide their preferred ordering (which
110  may be `MATORDERINGEXTERNAL`) to prevent PETSc PCFactor from, by
111  default, picking an ordering when it is not ideal
112- Deprecate `MatFactorGetUseOrdering()`; Use
113  `MatFactorGetCanUseOrdering()` instead
114- Add `--download-htool` to use hierarchical matrices with the new
115  type `MATHTOOL`
116- Add `MATCENTERING` special matrix type that implements action of the
117  centering matrix
118- Remove -mat_mumps_icntl_7 1 option, use -pc_factor_mat_ordering_type \<type> to have PETSc perform the ordering (sequential only)
119- Add `MATSOLVERSPQR` - interface to SuiteSparse QR factorization
120- Add `MatSeqAIJKron()` - Kronecker product of two `MatSeqAIJ`
121- Add `MatNormalGetMat()` to retrieve the underlying `Mat` of a `MATNORMAL`
122- Add `MatNormalHermitianGetMat()` to retrieve the underlying `Mat` of a `MATNORMALHERMITIAN`
123- Add `VecCreateMPICUDA()` and `VecCreateMPIHIP()` to create MPI device vectors
124- Add accessor routines for device index data of `MATSEQAIJCUSPARSE` matrices: `MatSeqAIJCUSPARSEGetIJ()` and `MatSeqAIJCUSPARSERestoreIJ()`
125- Add accessor routines for device data of `MATSEQAIJCUSPARSE` matrices: `MatSeqAIJCUSPARSEGetArray()`, `MatSeqAIJCUSPARSERestoreArray()`, `MatSeqAIJCUSPARSEGetArrayRead()`, `MatSeqAIJCUSPARSERestoreArrayRead()`. `MatSeqAIJCUSPARSEGetArrayWrite()`, `MatSeqAIJCUSPARSERestoreArrayWrite()`
126- Add support for `MATHYPRE` matrices on NVIDIA and AMD GPUs
127- `MatPreallocatorPreallocate` performance [significantly improved](https://gitlab.com/petsc/petsc/-/merge_requests/4273)
128- Add `MatGetColumnReductions()` developer routine to calculate reductions over columns of a matrix
129- Add `MatGetColumnSums()`, `MatGetColumnSumsRealPart()`, `MatGetColumnSumsImaginaryPart()` to compute sums over matrix columns
130- Add `MatGetColumnMeans()`, `MatGetColumnMeansRealPart()`, `MatGetColumnMeansImaginaryPart()` to compute arithmetic means over matrix columns
131- Add `MatBoundToCPU()` to query information set with `MatBindToCPU()`
132- Rename `MATHARA` in `MATH2OPUS`, supporting distributed memory operations with hierarchical matrices
133
134```{rubric} PC:
135```
136
137- Add `PCSetPreSolve()`
138- Add `PCQR` - interface to SuiteSparse QR factorization for `MatSeqAIJ`,
139  `MATNORMAL`, and `MATNORMALHERMITIAN`
140- Add support for `MATNORMAL` in `PCASM` and `PCHPDDM`
141- Add support for BoomerAMG from `PCHYPRE` to run on NVIDIA and AMD GPUs
142- `PCShellGetContext()` now takes `void*` as return argument
143- Rename `PCHARA` in `PCH2OPUS`, supporting distributed memory operations with hierarchical matrices
144
145```{rubric} KSP:
146```
147
148- `KSPGetMonitorContext()` now takes `void*` as return argument
149- `KSPGetConvergenceContext()` now takes `void*` as return argument
150
151```{rubric} SNES:
152```
153
154- Add `SNESSetComputeMFFunction()`
155- Add support for `-snes_mf_operator` for use with `SNESSetPicard()`
156- `SNESShellGetContext()` now takes `void*` as return argument
157
158```{rubric} SNESLineSearch:
159```
160
161```{rubric} TS:
162```
163
164- Add `-ts_type irk` - fully implicit Runge-Kutta solvers
165- Add `TSTrajectory` interface to the CAMS library for optimal offline checkpointing for multistage time stepping schemes
166- Add option `-ts_trajectory_memory_type <revolve | cams | petsc>` to switch checkpointing schedule software
167- Add option `-ts_trajectory_max_units_ram` to specify the maximum number of allowed checkpointing units
168
169```{rubric} TAO:
170```
171
172- `TaoShellGetContext()` now takes `void*` as return argument
173
174```{rubric} DM/DA:
175```
176
177- Change management of auxiliary data in DM from object composition
178  to `DMGetAuxiliaryVec()`/`DMSetAuxiliaryVec()`, `DMCopyAuxiliaryVec()`
179- Remove `DMGetNumBoundary()` and `DMGetBoundary()` in favor of DS
180  counterparts
181- Remove `DMCopyBoundary()`
182- Change interface for `DMAddBoundary()`, `PetscDSAddBoundary()`,
183  `PetscDSGetBoundary()`, `PetscDSUpdateBoundary()`
184- Add `DMDAVecGetArrayDOFWrite()` and `DMDAVecRestoreArrayDOFWrite()`
185- `DMShellGetContext()` now takes `void*` as return argument
186
187```{rubric} DMSwarm:
188```
189
190- Add `DMSwarmGetCellSwarm()` and `DMSwarmRestoreCellSwarm()`
191
192```{rubric} DMPlex:
193```
194
195- Add a `PETSCVIEWEREXODUSII` viewer type for `DMView()`/`DMLoad()` and
196  `VecView()`/`VecLoad()`. Note that not all DMPlex can be saved in exodusII
197  format since this file format requires that the numbering of cell
198  sets be compact
199- Add `PetscViewerExodusIIOpen()` convenience function
200- Add `PetscViewerExodusIISetOrder()` to
201  generate "2nd order" elements (i.e. tri6, tet10, hex27) when using
202  `DMView` with a `PETSCVIEWEREXODUSII` viewer
203- Change `DMPlexComputeBdResidualSingle()` and
204  `DMPlexComputeBdJacobianSingle()` to take a form key
205- Add `DMPlexTopologyLoad()`, `DMPlexCoordinatesLoad()`, and
206  `DMPlexLabelsLoad()` for incremental loading of a `DMPlex` object
207  from an HDF5 file
208- Add `DMPlexTopologyView()`, `DMPlexCoordinatesView()`, and
209  `DMPlexLabelsView()` for incremental saving of a `DMPlex` object
210  to an HDF5 file
211- Add `DMPlexSectionView()` saving a `PetscSection` in
212  association with a `DMPlex` mesh
213- Add `DMPlexSectionLoad()` loading a `PetscSection` in
214  association with a `DMPlex` mesh
215- Add `DMPlexGlobalVectorView()` and `DMPlexLocalVectorView()` saving
216  global and local vectors in association with a data layout on a `DMPlex` mesh
217- Add `DMPlexGlobalVectorLoad()` and `DMPlexLocalVectorLoad()` loading
218  global and local vectors in association with a data layout on a `DMPlex` mesh
219- Add `DMPlexIsSimplex()` to check the shape of the first cell
220- Add `DMPlexShape` to describe prebuilt mesh domains
221- Add `DMPlexCreateCoordinateSpace()` to make an FE space for the coordinates
222- Add the automatic creation of a Plex from options, see `DMSetFromOptions()`
223- The old options for `DMPlexCreateBoxMesh()` NO LONGER WORK. They have been changed to make the interface more uniform
224- Replace `DMPlexCreateSquareBoundary()` and `DMPlexCreateCubeBoundary()` with `DMPlexCreateBoxSurfaceMesh()`
225- Remove `DMPlexCreateReferenceCellByType()`
226- The number of refinements is no longer an argument to `DMPlexCreateHexCylinderMesh()`
227- Add `DMSetLabel()`
228- Replace `DMPlexComputeJacobianAction()` with `DMSNESComputeJacobianAction()`
229- Add `DMSNESCreateJacobianMF()`
230- Change `DMPlexComputeBdResidualSingle()` to take `PetscFormKey` instead of explicit label/value/field arguments
231- Add `DMPlexInflateToGeomModel()` which pushes refined points out to a geometric boundary
232- Separate EGADS and EGADSLite functionality, add `DMPlexCreateEGADSLiteFromFile()`
233- Remove `DMPlexReverseCell()` and `DMPlexOrientCell()` in favor of `DMPlexOrientPoint()`
234- Remove `DMPlexCompareOrientations()` in favor of `DMPolytopeMatchOrientation()`
235- Add `DMPlexGetCompressedClosure()` and `DMPlexRestoreCompressedClosure()`
236- Add `DMPlexMetricCreate` as a helper function for creating a (P1) Riemannian metric.
237- Add `DMPlexMetricCreateUniform` as a helper function for creating a uniform metric.
238- Add `DMPlexMetricCreateIsotropic` as a helper function for creating an isotropic metric.
239- Add `DMPlexMetricEnforceSPD` for enforcing that a metric is symmetric positive-definite.
240- Add `DMPlexMetricNormalize` to apply L-p metric normalization.
241- Add `DMPlexMetricAverage` to average an arbitrary number of metrics.
242- Add `DMPlexMetricAverage2` to average two metrics.
243- Add `DMPlexMetricAverage3` to average three metrics.
244- Add `DMPlexMetricIntersection` to intersect an arbitrary number of metrics.
245- Add `DMPlexMetricIntersection2` to intersect two metrics.
246- Add `DMPlexMetricIntersection3` to intersect three metrics.
247
248```{rubric} FE/FV:
249```
250
251- Change `PetscFEIntegrateBdResidual()` and
252  `PetscFEIntegrateBdJacobian()` to take both `PetscWeakForm` and form
253  key
254- Add `PetscFEGeomGetPoint()` and `PetscFEGeomGetCellPoint` to package up geometry handling
255
256```{rubric} DMNetwork:
257```
258
259- Add `DMNetworkCreateIS()` and `DMNetworkCreateLocalIS()`
260- Remove nv from `DMNetworkAddSubnetwork()`
261
262```{rubric} DMStag:
263```
264
265- Add `DMStagStencilToIndexLocal()`
266
267```{rubric} DT:
268```
269
270- Add `PetscWeakFormCopy()`, `PetscWeakFormClear()`, `PetscWeakFormRewriteKeys()` and `PetscWeakFormClearIndex()`
271- Add `PetscDSDestroyBoundary()` and `PetscDSCopyExactSolutions()`
272- `PetscDSGetContext()` now takes `void*` as return argument
273- Add `PetscWeakFormReplaceLabel()` to change labels after mesh modification
274
275```{rubric} Fortran:
276```
277
278- Add support for `PetscInitialize(filename,help,ierr)`,
279  `PetscInitialize(ierr)` in addition to current `PetscInitialize(filename,ierr)`
280