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