xref: /petsc/doc/changes/316.md (revision 6ee04767cadfff0612518b5db6e53c426a4c5190)
17f296bb3SBarry Smith# Changes: 3.16
27f296bb3SBarry Smith
37f296bb3SBarry Smith% STYLE GUIDELINES:
47f296bb3SBarry Smith% * Capitalize sentences
57f296bb3SBarry Smith% * Use imperative, e.g., Add, Improve, Change, etc.
67f296bb3SBarry Smith% * Don't use a period (.) at the end of entries
77f296bb3SBarry Smith% * If multiple sentences are needed, use a period or semicolon to divide sentences, but not at the end of the final sentence
87f296bb3SBarry Smith
97f296bb3SBarry Smith```{rubric} General:
107f296bb3SBarry Smith```
117f296bb3SBarry Smith
127f296bb3SBarry Smith- Change `MPIU_Allreduce()` to always returns a MPI error code that
137f296bb3SBarry Smith  should be checked with `CHKERRMPI(ierr)`
147f296bb3SBarry Smith- Add support for A64FX and Cray compilers
157f296bb3SBarry Smith- Add support for ESSL 5.2 and later; drop support for ESSL \<=5.1
167f296bb3SBarry Smith- Add support for NEC-SX Tsubasa Vector Engine
177f296bb3SBarry Smith- Add support for NVIDIA HPC SDK
187f296bb3SBarry Smith
197f296bb3SBarry Smith```{rubric} Configure/Build:
207f296bb3SBarry Smith```
217f296bb3SBarry Smith
227f296bb3SBarry Smith- Configure requires Python-2.7 or Python-3.4+.
237f296bb3SBarry Smith- 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
247f296bb3SBarry Smith- For `--download-hdf5`, disable `--download-hdf5-fortran-bindings` by default
257f296bb3SBarry Smith- Add OpenCascade package to PETSc and allow `--download-opencascade`
267f296bb3SBarry Smith- Add support for hypre in device mode for both NVIDIA and AMD GPUs
277f296bb3SBarry Smith- 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
287f296bb3SBarry Smith
297f296bb3SBarry Smith```{rubric} Sys:
307f296bb3SBarry Smith```
317f296bb3SBarry Smith
327f296bb3SBarry Smith- Add `PetscDevice` class to manage discovered GPU devices
337f296bb3SBarry Smith- Add `PetscDeviceKind`
347f296bb3SBarry Smith- Add `PetscDeviceCreate()`, `PetscDeviceConfigure()`, and `PetscDeviceDestroy()`
357f296bb3SBarry Smith- Add `PetscDeviceContext` class to manage asynchronous GPU compute support via a fork-join model
367f296bb3SBarry Smith- Add `PetscStreamType` and `PetscDeviceContextJoinMode`
377f296bb3SBarry Smith- Add `PetscDeviceContextCreate()`, `PetscDeviceContextDestroy()`, `PetscDeviceContextSetDevice()`, `PetscDeviceContextGetDevice()`,
387f296bb3SBarry Smith  `PetscDeviceContextSetStreamType()`, `PetscDeviceContextGetStreamType()`, `PetscDeviceContextSetUp()`, `PetscDeviceContextDuplicate()`,
397f296bb3SBarry Smith  `PetscDeviceContextQueryIdle()`, `PetscDeviceContextWaitForContext()`, `PetscDeviceContextFork()`, `PetscDeviceContextJoin()`,
407f296bb3SBarry Smith  `PetscDeviceContextSynchronize()`, `PetscDeviceContextGetCurrentContext()`, `PetscDeviceContextSetCurrentContext()`, and
417f296bb3SBarry Smith  `PetscDeviceContextSetFromOptions()`
427f296bb3SBarry Smith- Deprecate `petsccublas.h` and `petschipblas.h` in favor of `petscdevice.h` and `petscdevicetypes.h`
437f296bb3SBarry Smith- Add GPU event timers to capture kernel execution time accurately
447f296bb3SBarry Smith- Remove `WaitForCUDA()` and `WaitForHIP()` before `PetscLogGpuTimeEnd()`
457f296bb3SBarry Smith- Add MPIU_REAL_INT and MPIU_SCALAR_INT datatypes to be used for reduction operations
467f296bb3SBarry Smith- Add MPIU_MAXLOC and MPIU_MINLOC operations
477f296bb3SBarry Smith- Add `CHKERRCXX()` to catch C++ exceptions and return a PETSc error code
487f296bb3SBarry Smith- Remove `PetscStack` routines from public headers, this class should now be considered private
497f296bb3SBarry Smith
507f296bb3SBarry Smith```{rubric} PetscViewer:
517f296bb3SBarry Smith```
527f296bb3SBarry Smith
537f296bb3SBarry Smith- `PetscViewerHDF5PushGroup()`: if input path begins with `/`, it is
547f296bb3SBarry Smith  taken as absolute, otherwise relative to the current group
557f296bb3SBarry Smith- Add `PetscViewerHDF5HasDataset()`
567f296bb3SBarry Smith- `PetscViewerHDF5HasAttribute()`,
577f296bb3SBarry Smith  `PetscViewerHDF5ReadAttribute()`,
587f296bb3SBarry Smith  `PetscViewerHDF5WriteAttribute()`,
597f296bb3SBarry Smith  `PetscViewerHDF5HasDataset()` and
607f296bb3SBarry Smith  `PetscViewerHDF5HasGroup()`
617f296bb3SBarry Smith  support absolute paths (starting with `/`)
627f296bb3SBarry Smith  and paths relative to the current pushed group
637f296bb3SBarry Smith- Add input argument to `PetscViewerHDF5ReadAttribute()` for default
647f296bb3SBarry Smith  value that is used if attribute is not found in the HDF5 file
657f296bb3SBarry Smith- Add `PetscViewerHDF5PushTimestepping()`,
667f296bb3SBarry Smith  `PetscViewerHDF5PopTimestepping()` and
677f296bb3SBarry Smith  `PetscViewerHDF5IsTimestepping()` to control timestepping mode.
687f296bb3SBarry Smith- One can call `PetscViewerHDF5IncrementTimestep()`,
697f296bb3SBarry Smith  `PetscViewerHDF5SetTimestep()` or `PetscViewerHDF5GetTimestep()` only
707f296bb3SBarry Smith  if timestepping mode is active
717f296bb3SBarry Smith- Error if timestepped dataset is read/written out of timestepping mode, or
727f296bb3SBarry Smith  vice-versa
737f296bb3SBarry Smith
747f296bb3SBarry Smith```{rubric} PetscDraw:
757f296bb3SBarry Smith```
767f296bb3SBarry Smith
777f296bb3SBarry Smith```{rubric} AO:
787f296bb3SBarry Smith```
797f296bb3SBarry Smith
807f296bb3SBarry Smith```{rubric} IS:
817f296bb3SBarry Smith```
827f296bb3SBarry Smith
837f296bb3SBarry Smith```{rubric} VecScatter / PetscSF:
847f296bb3SBarry Smith```
857f296bb3SBarry Smith
867f296bb3SBarry Smith```{rubric} PF:
877f296bb3SBarry Smith```
887f296bb3SBarry Smith
897f296bb3SBarry Smith```{rubric} Vec:
907f296bb3SBarry Smith```
917f296bb3SBarry Smith
927f296bb3SBarry Smith- Add `VecMean()` to calculate arithmetic mean of elements of a vector
937f296bb3SBarry Smith- Add `VecBoundToCPU()` to query information set with `VecBindToCPU()`
947f296bb3SBarry Smith
957f296bb3SBarry Smith```{rubric} PetscSection:
967f296bb3SBarry Smith```
977f296bb3SBarry Smith
987f296bb3SBarry Smith- Extend `PetscSectionView()` for section saving to HDF5
997f296bb3SBarry Smith- Add `PetscSectionLoad()` for section loading from HDF5
1007f296bb3SBarry Smith
1017f296bb3SBarry Smith```{rubric} PetscPartitioner:
1027f296bb3SBarry Smith```
1037f296bb3SBarry Smith
1047f296bb3SBarry Smith```{rubric} Mat:
1057f296bb3SBarry Smith```
1067f296bb3SBarry Smith
1077f296bb3SBarry Smith- `MATMPIKAIJ` now tracks the object state of the AIJ matrix describing the blockwise action of the KAIJ matrix and
1087f296bb3SBarry Smith  automatically rebuilds internal data structures before executing operations with the KAIJ matrix if the state has changed
1097f296bb3SBarry Smith- Factorization types now provide their preferred ordering (which
1107f296bb3SBarry Smith  may be `MATORDERINGEXTERNAL`) to prevent PETSc PCFactor from, by
1117f296bb3SBarry Smith  default, picking an ordering when it is not ideal
1127f296bb3SBarry Smith- Deprecate `MatFactorGetUseOrdering()`; Use
1137f296bb3SBarry Smith  `MatFactorGetCanUseOrdering()` instead
1147f296bb3SBarry Smith- Add `--download-htool` to use hierarchical matrices with the new
1157f296bb3SBarry Smith  type `MATHTOOL`
1167f296bb3SBarry Smith- Add `MATCENTERING` special matrix type that implements action of the
1177f296bb3SBarry Smith  centering matrix
1187f296bb3SBarry Smith- Remove -mat_mumps_icntl_7 1 option, use -pc_factor_mat_ordering_type \<type> to have PETSc perform the ordering (sequential only)
1197f296bb3SBarry Smith- Add `MATSOLVERSPQR` - interface to SuiteSparse QR factorization
1207f296bb3SBarry Smith- Add `MatSeqAIJKron()` - Kronecker product of two `MatSeqAIJ`
1217f296bb3SBarry Smith- Add `MatNormalGetMat()` to retrieve the underlying `Mat` of a `MATNORMAL`
1227f296bb3SBarry Smith- Add `MatNormalHermitianGetMat()` to retrieve the underlying `Mat` of a `MATNORMALHERMITIAN`
1237f296bb3SBarry Smith- Add `VecCreateMPICUDA()` and `VecCreateMPIHIP()` to create MPI device vectors
1247f296bb3SBarry Smith- Add accessor routines for device index data of `MATSEQAIJCUSPARSE` matrices: `MatSeqAIJCUSPARSEGetIJ()` and `MatSeqAIJCUSPARSERestoreIJ()`
1257f296bb3SBarry Smith- Add accessor routines for device data of `MATSEQAIJCUSPARSE` matrices: `MatSeqAIJCUSPARSEGetArray()`, `MatSeqAIJCUSPARSERestoreArray()`, `MatSeqAIJCUSPARSEGetArrayRead()`, `MatSeqAIJCUSPARSERestoreArrayRead()`. `MatSeqAIJCUSPARSEGetArrayWrite()`, `MatSeqAIJCUSPARSERestoreArrayWrite()`
1267f296bb3SBarry Smith- Add support for `MATHYPRE` matrices on NVIDIA and AMD GPUs
1277f296bb3SBarry Smith- `MatPreallocatorPreallocate` performance [significantly improved](https://gitlab.com/petsc/petsc/-/merge_requests/4273)
1287f296bb3SBarry Smith- Add `MatGetColumnReductions()` developer routine to calculate reductions over columns of a matrix
1297f296bb3SBarry Smith- Add `MatGetColumnSums()`, `MatGetColumnSumsRealPart()`, `MatGetColumnSumsImaginaryPart()` to compute sums over matrix columns
1307f296bb3SBarry Smith- Add `MatGetColumnMeans()`, `MatGetColumnMeansRealPart()`, `MatGetColumnMeansImaginaryPart()` to compute arithmetic means over matrix columns
1317f296bb3SBarry Smith- Add `MatBoundToCPU()` to query information set with `MatBindToCPU()`
1327f296bb3SBarry Smith- Rename `MATHARA` in `MATH2OPUS`, supporting distributed memory operations with hierarchical matrices
1337f296bb3SBarry Smith
1347f296bb3SBarry Smith```{rubric} PC:
1357f296bb3SBarry Smith```
1367f296bb3SBarry Smith
1377f296bb3SBarry Smith- Add `PCSetPreSolve()`
1387f296bb3SBarry Smith- Add `PCQR` - interface to SuiteSparse QR factorization for `MatSeqAIJ`,
1397f296bb3SBarry Smith  `MATNORMAL`, and `MATNORMALHERMITIAN`
1407f296bb3SBarry Smith- Add support for `MATNORMAL` in `PCASM` and `PCHPDDM`
1417f296bb3SBarry Smith- Add support for BoomerAMG from `PCHYPRE` to run on NVIDIA and AMD GPUs
1427f296bb3SBarry Smith- `PCShellGetContext()` now takes `void*` as return argument
1437f296bb3SBarry Smith- Rename `PCHARA` in `PCH2OPUS`, supporting distributed memory operations with hierarchical matrices
1447f296bb3SBarry Smith
1457f296bb3SBarry Smith```{rubric} KSP:
1467f296bb3SBarry Smith```
1477f296bb3SBarry Smith
1487f296bb3SBarry Smith- `KSPGetMonitorContext()` now takes `void*` as return argument
1497f296bb3SBarry Smith- `KSPGetConvergenceContext()` now takes `void*` as return argument
1507f296bb3SBarry Smith
1517f296bb3SBarry Smith```{rubric} SNES:
1527f296bb3SBarry Smith```
1537f296bb3SBarry Smith
1547f296bb3SBarry Smith- Add `SNESSetComputeMFFunction()`
1557f296bb3SBarry Smith- Add support for `-snes_mf_operator` for use with `SNESSetPicard()`
1567f296bb3SBarry Smith- `SNESShellGetContext()` now takes `void*` as return argument
1577f296bb3SBarry Smith
1587f296bb3SBarry Smith```{rubric} SNESLineSearch:
1597f296bb3SBarry Smith```
1607f296bb3SBarry Smith
1617f296bb3SBarry Smith```{rubric} TS:
1627f296bb3SBarry Smith```
1637f296bb3SBarry Smith
1647f296bb3SBarry Smith- Add `-ts_type irk` - fully implicit Runge-Kutta solvers
1657f296bb3SBarry Smith- Add `TSTrajectory` interface to the CAMS library for optimal offline checkpointing for multistage time stepping schemes
1667f296bb3SBarry Smith- Add option `-ts_trajectory_memory_type <revolve | cams | petsc>` to switch checkpointing schedule software
1677f296bb3SBarry Smith- Add option `-ts_trajectory_max_units_ram` to specify the maximum number of allowed checkpointing units
1687f296bb3SBarry Smith
1697f296bb3SBarry Smith```{rubric} TAO:
1707f296bb3SBarry Smith```
1717f296bb3SBarry Smith
1727f296bb3SBarry Smith- `TaoShellGetContext()` now takes `void*` as return argument
1737f296bb3SBarry Smith
1747f296bb3SBarry Smith```{rubric} DM/DA:
1757f296bb3SBarry Smith```
1767f296bb3SBarry Smith
1777f296bb3SBarry Smith- Change management of auxiliary data in DM from object composition
1787f296bb3SBarry Smith  to `DMGetAuxiliaryVec()`/`DMSetAuxiliaryVec()`, `DMCopyAuxiliaryVec()`
1797f296bb3SBarry Smith- Remove `DMGetNumBoundary()` and `DMGetBoundary()` in favor of DS
1807f296bb3SBarry Smith  counterparts
1817f296bb3SBarry Smith- Remove `DMCopyBoundary()`
1827f296bb3SBarry Smith- Change interface for `DMAddBoundary()`, `PetscDSAddBoundary()`,
1837f296bb3SBarry Smith  `PetscDSGetBoundary()`, `PetscDSUpdateBoundary()`
1847f296bb3SBarry Smith- Add `DMDAVecGetArrayDOFWrite()` and `DMDAVecRestoreArrayDOFWrite()`
1857f296bb3SBarry Smith- `DMShellGetContext()` now takes `void*` as return argument
1867f296bb3SBarry Smith
1877f296bb3SBarry Smith```{rubric} DMSwarm:
1887f296bb3SBarry Smith```
1897f296bb3SBarry Smith
1907f296bb3SBarry Smith- Add `DMSwarmGetCellSwarm()` and `DMSwarmRestoreCellSwarm()`
1917f296bb3SBarry Smith
1927f296bb3SBarry Smith```{rubric} DMPlex:
1937f296bb3SBarry Smith```
1947f296bb3SBarry Smith
1957f296bb3SBarry Smith- Add a `PETSCVIEWEREXODUSII` viewer type for `DMView()`/`DMLoad()` and
196*caff39ffSPierre Jolivet  `VecView()`/`VecLoad()`. Note that not all DMPlex can be saved in ExodusII
1977f296bb3SBarry Smith  format since this file format requires that the numbering of cell
1987f296bb3SBarry Smith  sets be compact
1997f296bb3SBarry Smith- Add `PetscViewerExodusIIOpen()` convenience function
2007f296bb3SBarry Smith- Add `PetscViewerExodusIISetOrder()` to
2017f296bb3SBarry Smith  generate "2nd order" elements (i.e. tri6, tet10, hex27) when using
2027f296bb3SBarry Smith  `DMView` with a `PETSCVIEWEREXODUSII` viewer
2037f296bb3SBarry Smith- Change `DMPlexComputeBdResidualSingle()` and
2047f296bb3SBarry Smith  `DMPlexComputeBdJacobianSingle()` to take a form key
2057f296bb3SBarry Smith- Add `DMPlexTopologyLoad()`, `DMPlexCoordinatesLoad()`, and
2067f296bb3SBarry Smith  `DMPlexLabelsLoad()` for incremental loading of a `DMPlex` object
2077f296bb3SBarry Smith  from an HDF5 file
2087f296bb3SBarry Smith- Add `DMPlexTopologyView()`, `DMPlexCoordinatesView()`, and
2097f296bb3SBarry Smith  `DMPlexLabelsView()` for incremental saving of a `DMPlex` object
2107f296bb3SBarry Smith  to an HDF5 file
2117f296bb3SBarry Smith- Add `DMPlexSectionView()` saving a `PetscSection` in
2127f296bb3SBarry Smith  association with a `DMPlex` mesh
2137f296bb3SBarry Smith- Add `DMPlexSectionLoad()` loading a `PetscSection` in
2147f296bb3SBarry Smith  association with a `DMPlex` mesh
2157f296bb3SBarry Smith- Add `DMPlexGlobalVectorView()` and `DMPlexLocalVectorView()` saving
2167f296bb3SBarry Smith  global and local vectors in association with a data layout on a `DMPlex` mesh
2177f296bb3SBarry Smith- Add `DMPlexGlobalVectorLoad()` and `DMPlexLocalVectorLoad()` loading
2187f296bb3SBarry Smith  global and local vectors in association with a data layout on a `DMPlex` mesh
2197f296bb3SBarry Smith- Add `DMPlexIsSimplex()` to check the shape of the first cell
2207f296bb3SBarry Smith- Add `DMPlexShape` to describe prebuilt mesh domains
2217f296bb3SBarry Smith- Add `DMPlexCreateCoordinateSpace()` to make an FE space for the coordinates
2227f296bb3SBarry Smith- Add the automatic creation of a Plex from options, see `DMSetFromOptions()`
2237f296bb3SBarry Smith- The old options for `DMPlexCreateBoxMesh()` NO LONGER WORK. They have been changed to make the interface more uniform
2247f296bb3SBarry Smith- Replace `DMPlexCreateSquareBoundary()` and `DMPlexCreateCubeBoundary()` with `DMPlexCreateBoxSurfaceMesh()`
2257f296bb3SBarry Smith- Remove `DMPlexCreateReferenceCellByType()`
2267f296bb3SBarry Smith- The number of refinements is no longer an argument to `DMPlexCreateHexCylinderMesh()`
2277f296bb3SBarry Smith- Add `DMSetLabel()`
2287f296bb3SBarry Smith- Replace `DMPlexComputeJacobianAction()` with `DMSNESComputeJacobianAction()`
2297f296bb3SBarry Smith- Add `DMSNESCreateJacobianMF()`
2307f296bb3SBarry Smith- Change `DMPlexComputeBdResidualSingle()` to take `PetscFormKey` instead of explicit label/value/field arguments
2317f296bb3SBarry Smith- Add `DMPlexInflateToGeomModel()` which pushes refined points out to a geometric boundary
2327f296bb3SBarry Smith- Separate EGADS and EGADSLite functionality, add `DMPlexCreateEGADSLiteFromFile()`
2337f296bb3SBarry Smith- Remove `DMPlexReverseCell()` and `DMPlexOrientCell()` in favor of `DMPlexOrientPoint()`
2347f296bb3SBarry Smith- Remove `DMPlexCompareOrientations()` in favor of `DMPolytopeMatchOrientation()`
2357f296bb3SBarry Smith- Add `DMPlexGetCompressedClosure()` and `DMPlexRestoreCompressedClosure()`
2367f296bb3SBarry Smith- Add `DMPlexMetricCreate` as a helper function for creating a (P1) Riemannian metric.
2377f296bb3SBarry Smith- Add `DMPlexMetricCreateUniform` as a helper function for creating a uniform metric.
2387f296bb3SBarry Smith- Add `DMPlexMetricCreateIsotropic` as a helper function for creating an isotropic metric.
2397f296bb3SBarry Smith- Add `DMPlexMetricEnforceSPD` for enforcing that a metric is symmetric positive-definite.
2407f296bb3SBarry Smith- Add `DMPlexMetricNormalize` to apply L-p metric normalization.
2417f296bb3SBarry Smith- Add `DMPlexMetricAverage` to average an arbitrary number of metrics.
2427f296bb3SBarry Smith- Add `DMPlexMetricAverage2` to average two metrics.
2437f296bb3SBarry Smith- Add `DMPlexMetricAverage3` to average three metrics.
2447f296bb3SBarry Smith- Add `DMPlexMetricIntersection` to intersect an arbitrary number of metrics.
2457f296bb3SBarry Smith- Add `DMPlexMetricIntersection2` to intersect two metrics.
2467f296bb3SBarry Smith- Add `DMPlexMetricIntersection3` to intersect three metrics.
2477f296bb3SBarry Smith
2487f296bb3SBarry Smith```{rubric} FE/FV:
2497f296bb3SBarry Smith```
2507f296bb3SBarry Smith
2517f296bb3SBarry Smith- Change `PetscFEIntegrateBdResidual()` and
2527f296bb3SBarry Smith  `PetscFEIntegrateBdJacobian()` to take both `PetscWeakForm` and form
2537f296bb3SBarry Smith  key
2547f296bb3SBarry Smith- Add `PetscFEGeomGetPoint()` and `PetscFEGeomGetCellPoint` to package up geometry handling
2557f296bb3SBarry Smith
2567f296bb3SBarry Smith```{rubric} DMNetwork:
2577f296bb3SBarry Smith```
2587f296bb3SBarry Smith
2597f296bb3SBarry Smith- Add `DMNetworkCreateIS()` and `DMNetworkCreateLocalIS()`
2607f296bb3SBarry Smith- Remove nv from `DMNetworkAddSubnetwork()`
2617f296bb3SBarry Smith
2627f296bb3SBarry Smith```{rubric} DMStag:
2637f296bb3SBarry Smith```
2647f296bb3SBarry Smith
2657f296bb3SBarry Smith- Add `DMStagStencilToIndexLocal()`
2667f296bb3SBarry Smith
2677f296bb3SBarry Smith```{rubric} DT:
2687f296bb3SBarry Smith```
2697f296bb3SBarry Smith
2707f296bb3SBarry Smith- Add `PetscWeakFormCopy()`, `PetscWeakFormClear()`, `PetscWeakFormRewriteKeys()` and `PetscWeakFormClearIndex()`
2717f296bb3SBarry Smith- Add `PetscDSDestroyBoundary()` and `PetscDSCopyExactSolutions()`
2727f296bb3SBarry Smith- `PetscDSGetContext()` now takes `void*` as return argument
2737f296bb3SBarry Smith- Add `PetscWeakFormReplaceLabel()` to change labels after mesh modification
2747f296bb3SBarry Smith
2757f296bb3SBarry Smith```{rubric} Fortran:
2767f296bb3SBarry Smith```
2777f296bb3SBarry Smith
2787f296bb3SBarry Smith- Add support for `PetscInitialize(filename,help,ierr)`,
2797f296bb3SBarry Smith  `PetscInitialize(ierr)` in addition to current `PetscInitialize(filename,ierr)`
280