1*7f296bb3SBarry Smith# Changes: 3.19 2*7f296bb3SBarry Smith 3*7f296bb3SBarry Smith% STYLE GUIDELINES: 4*7f296bb3SBarry Smith% * Capitalize sentences 5*7f296bb3SBarry Smith% * Use imperative, e.g., Add, Improve, Change, etc. 6*7f296bb3SBarry Smith% * Don't use a period (.) at the end of entries 7*7f296bb3SBarry Smith% * If multiple sentences are needed, use a period or semicolon to divide sentences, but not at the end of the final sentence 8*7f296bb3SBarry Smith 9*7f296bb3SBarry Smith```{rubric} General: 10*7f296bb3SBarry Smith``` 11*7f296bb3SBarry Smith 12*7f296bb3SBarry Smith- Add perfstubs package, see {ref}`Users Manual: Profiling: Using TAU <sec_using_tau>` for more information on usage 13*7f296bb3SBarry Smith 14*7f296bb3SBarry Smith```{rubric} Configure/Build: 15*7f296bb3SBarry Smith``` 16*7f296bb3SBarry Smith 17*7f296bb3SBarry Smith- Remove unused preprocessor variables `PETSC_HAVE_VPRINTF_CHAR`, `PETSC_HAVE_VFPRINTF_CHAR`, `PETSC_STAT_MACROS_BROKEN`, `PETSC_HAVE_FORTRAN_GETARG`, `PETSC_uid_t`, `PETSC_gid_t`, `PETSC_HAVE_PTHREAD_BARRIER_T`, `PETSC_HAVE_SCHED_CPU_SET_T`, `PETSC_HAVE_SYS_SYSCTL_H`, `PETSC_HAVE_SYS_SYSINFO_H`, `PETSC_HAVE_SYSINFO_3ARG`, `PETSC_SIZEOF_SHORT`, and `PETSC_SIZEOF_ENUM` 18*7f296bb3SBarry Smith- Deprecate `--with-gcov` configure option in favor of `--with-coverage` 19*7f296bb3SBarry Smith- Add `--with-coverage-exec` configure option to specify the coverage-collection tool to be used e.g. `gcov` or `/path/to/llvm-cov-15` 20*7f296bb3SBarry Smith- Add `--with-strict-petscerrorcode` configure option to enable compile-time checking for correct usage of `PetscErrorCode`, see below 21*7f296bb3SBarry Smith- Add support for C++20 22*7f296bb3SBarry Smith- Add support for CUDA-12 23*7f296bb3SBarry Smith- Improved C++ dialect handling for non-conformal cases. In general `configure` will fail faster and with a more informative error message when the C++ compiler does not comply with restraints 24*7f296bb3SBarry Smith 25*7f296bb3SBarry Smith```{rubric} Sys: 26*7f296bb3SBarry Smith``` 27*7f296bb3SBarry Smith 28*7f296bb3SBarry Smith- Change `PetscOptionsMonitorDefault()` to also take in the option source, and `PetscOptionsMonitorSet()` to take the new monitor function 29*7f296bb3SBarry Smith 30*7f296bb3SBarry Smith- Deprecate `PetscTable` and related functions. Previous users of `PetscTable` are encouraged to use the more performant `PetscHMapI` instead, though they should note that this requires additional steps and limitations: 31*7f296bb3SBarry Smith 32*7f296bb3SBarry Smith 1. `#include <petscctable.h>` must be swapped for `#include <petsc/private/hashmapi.h>`. This of course requires that you have access to the private PETSc headers. 33*7f296bb3SBarry Smith 34*7f296bb3SBarry Smith 2. While most of the old `PetscTable` routines have direct analogues in `PetscHMapI`, `PetscAddCount()` does not. All uses of this routine should be replaced with the following snippet: 35*7f296bb3SBarry Smith 36*7f296bb3SBarry Smith ``` 37*7f296bb3SBarry Smith // PetscHMapI hash_table; 38*7f296bb3SBarry Smith // PetscInt key; 39*7f296bb3SBarry Smith 40*7f296bb3SBarry Smith PetscHashIter it; 41*7f296bb3SBarry Smith PetscBool missing; 42*7f296bb3SBarry Smith 43*7f296bb3SBarry Smith PetscCall(PetscHMapIPut(hash_table, key, &it, &missing)); 44*7f296bb3SBarry Smith if (missing) { 45*7f296bb3SBarry Smith PetscInt size; 46*7f296bb3SBarry Smith 47*7f296bb3SBarry Smith PetscCall(PetscHMapIGetSize(hash_table, &size)); 48*7f296bb3SBarry Smith PetscCall(PetscHMapIIterSet(hash_table, it, size)); 49*7f296bb3SBarry Smith } 50*7f296bb3SBarry Smith ``` 51*7f296bb3SBarry Smith 52*7f296bb3SBarry Smith Furthermore, users should note that `PetscHMapI` is based on -- and directly `#include` s -- `${PETSC_DIR}/include/petsc/private/khash/khash.h`. This file contains external source code that is licensed under the MIT license, which is separate from the PETSc license. 53*7f296bb3SBarry Smith 54*7f296bb3SBarry Smith- Remove undocumented `PETSC_MPI_WIN_FMT` and `PETSC_MPI_COMM_FMT`. Users should cast both `MPI_Comm` and `MPI_Win` to `PETSC_INTPTR_T` and use the `PETSC_INTPTR_T_FMT` format specifier instead: 55*7f296bb3SBarry Smith 56*7f296bb3SBarry Smith ``` 57*7f296bb3SBarry Smith MPI_Comm comm; 58*7f296bb3SBarry Smith MPI_Win win; 59*7f296bb3SBarry Smith 60*7f296bb3SBarry Smith // old 61*7f296bb3SBarry Smith PetscCall(PetscPrintf(..., "MPI Comm %" PETSC_MPI_COMM_FMT, comm)); 62*7f296bb3SBarry Smith PetscCall(PetscPrintf(..., "MPI Window %" PETSC_MPI_WIN_FMT, win)); 63*7f296bb3SBarry Smith 64*7f296bb3SBarry Smith // new 65*7f296bb3SBarry Smith PetscCall(PetscPrintf(..., "MPI Comm %" PETSC_INTPTR_T_FMT, (PETSC_INTPTR_T)comm)); 66*7f296bb3SBarry Smith PetscCall(PetscPrintf(..., "MPI Window %" PETSC_INTPTR_T_FMT, (PETSC_INTPTR_T)win)); 67*7f296bb3SBarry Smith ``` 68*7f296bb3SBarry Smith 69*7f296bb3SBarry Smith- Deprecate `PETSC_NULL` in favor of `PETSC_NULLPTR` as it does the right thing in both C and C++ 70*7f296bb3SBarry Smith 71*7f296bb3SBarry Smith- Significantly improve lookup and deletion performance of `PetscFunctionList`. This also improves performance of `PetscObjectComposeFunction()` and `PetscObjectQueryFunction()`. 72*7f296bb3SBarry Smith 73*7f296bb3SBarry Smith- Optionally define `PetscErrorCode` as an `enum`, and tag it as `PETSC_NODISCARD`. This feature may be enabled by configuring PETSc with `--with-strict-petscerrorcode` configure option. This feature allows catching the following logical errors at compile-time: 74*7f296bb3SBarry Smith 75*7f296bb3SBarry Smith 1. Not properly checking the return-code of PETSc calls via `PetscCall()`. PETSc is left in an inconsistent state when errors are detected and cannot generally recover from them, so is not supported. 76*7f296bb3SBarry Smith 2. Using the wrong `PetscCall()` variant, for example using `PetscCall()` on MPI functions (instead of `PetscCallMPI()`). 77*7f296bb3SBarry Smith 3. Returning `PetscErrorCode` from `main()` instead of `int`. 78*7f296bb3SBarry Smith 79*7f296bb3SBarry Smith Users should note that this comes with the following additional changes: 80*7f296bb3SBarry Smith 81*7f296bb3SBarry Smith 1. Add `PETSC_SUCCESS` to indicate success, always guaranteed to equal `0`. 82*7f296bb3SBarry Smith 83*7f296bb3SBarry Smith 2. `PetscFunctionReturn(0)` should be changed to `PetscFunctionReturn(PETSC_SUCCESS)`. While the original `0`-form will continue to work in C, it is required for C++. 84*7f296bb3SBarry Smith 85*7f296bb3SBarry Smith 3. Any user-defined macros using boolean short-circuiting to chain multiple calls in the same line, which logically return a `PetscErrorCode`, should now explicitly cast the "result" of the macro with `PetscErrorCode`: 86*7f296bb3SBarry Smith 87*7f296bb3SBarry Smith ``` 88*7f296bb3SBarry Smith // Both foo() and bar() defined as returning PetscErrorCode 89*7f296bb3SBarry Smith extern PetscErrorCode foo(int); 90*7f296bb3SBarry Smith extern PetscErrorCode bar(int); 91*7f296bb3SBarry Smith 92*7f296bb3SBarry Smith // The following macros logically "return" a PetscErrorCode, i.e. can 93*7f296bb3SBarry Smith // be used: 94*7f296bb3SBarry Smith // 95*7f296bb3SBarry Smith // PetscCall(MY_USER_MACRO(a, b)); 96*7f296bb3SBarry Smith // 97*7f296bb3SBarry Smith // but use boolean short-circuiting to chain the calls together. bar() 98*7f296bb3SBarry Smith // only executes if foo() returns PETSC_SUCCESS 99*7f296bb3SBarry Smith 100*7f296bb3SBarry Smith // old 101*7f296bb3SBarry Smith #define MY_USER_MACRO(a, b) (foo(a) || bar(b)) 102*7f296bb3SBarry Smith 103*7f296bb3SBarry Smith // new 104*7f296bb3SBarry Smith #define MY_BETTER_USER_MACRO(a, b) ((PetscErrorCode)(foo(a) || bar(b))) 105*7f296bb3SBarry Smith ``` 106*7f296bb3SBarry Smith 107*7f296bb3SBarry Smith While currently opt-in, this feature **will be enabled by default in a future release**. Users are highly encourage to enable it and fix any discrepancies before that point. Note that `PETSC_SUCCESS` is defined whether or not the feature is enabled, so users may incrementally update. 108*7f296bb3SBarry Smith 109*7f296bb3SBarry Smith- Add `PetscFFlush()` 110*7f296bb3SBarry Smith 111*7f296bb3SBarry Smith- Soft-deprecate `PetscStrcpy()` and `PetscStrcat()`. No diagnostics will be emitted if these routines are used, but users are highly encouraged to switch to the more secure (and possibly performant) `PetscStrncpy()` and `PetscStrlcat()` 112*7f296bb3SBarry Smith 113*7f296bb3SBarry Smith- Add `PETSC_REAL_MIN` for smallest normalized floating point number 114*7f296bb3SBarry Smith 115*7f296bb3SBarry Smith- Add `PETSC_ATTRIBUTE_MAY_ALIAS` to inform compilers that a type is not subjected to type-based alias analysis 116*7f296bb3SBarry Smith 117*7f296bb3SBarry Smith```{rubric} Event Logging: 118*7f296bb3SBarry Smith``` 119*7f296bb3SBarry Smith 120*7f296bb3SBarry Smith```{rubric} PetscViewer: 121*7f296bb3SBarry Smith``` 122*7f296bb3SBarry Smith 123*7f296bb3SBarry Smith- The VTK viewers (`.vts`, `.vtr`, and `.vtu`) now use `header_type="UInt64"` to enable writing large binary appended blocks 124*7f296bb3SBarry Smith 125*7f296bb3SBarry Smith```{rubric} PetscDraw: 126*7f296bb3SBarry Smith``` 127*7f296bb3SBarry Smith 128*7f296bb3SBarry Smith- Add `PetscDrawSetVisible()` to set if the drawing surface (the 'window') is visible on its display 129*7f296bb3SBarry Smith 130*7f296bb3SBarry Smith```{rubric} AO: 131*7f296bb3SBarry Smith``` 132*7f296bb3SBarry Smith 133*7f296bb3SBarry Smith```{rubric} IS: 134*7f296bb3SBarry Smith``` 135*7f296bb3SBarry Smith 136*7f296bb3SBarry Smith- Change `ISDuplicate()` to preserve the block size of the input in the output 137*7f296bb3SBarry Smith- Deprecate `ISCompressIndicesSorted()` 138*7f296bb3SBarry Smith 139*7f296bb3SBarry Smith```{rubric} VecScatter / PetscSF: 140*7f296bb3SBarry Smith``` 141*7f296bb3SBarry Smith 142*7f296bb3SBarry Smith- Add experimental support in PetscSF for MPICH MPIX_Stream (with MPICH-4.2.0 and higher). One can enable it via `-sf_use_stream_aware_mpi` 143*7f296bb3SBarry Smith- Add an alias option `-sf_use_gpu_aware_mpi` to `-use_gpu_aware_mpi` 144*7f296bb3SBarry Smith- Remove `SCATTER_LOCAL` from the enum type since it is not a public value 145*7f296bb3SBarry Smith- Change `PetscSFConcatenate()` to accept `PetscSFConcatenateRootMode` parameter; add option to concatenate root spaces globally 146*7f296bb3SBarry Smith- Add `PetscSFSetGraphFromCoordinates()` to construct a graph from fuzzy matching of coordinates; such as occurs for projections between different dimensions or for overlapping meshes 147*7f296bb3SBarry Smith 148*7f296bb3SBarry Smith```{rubric} PF: 149*7f296bb3SBarry Smith``` 150*7f296bb3SBarry Smith 151*7f296bb3SBarry Smith```{rubric} Vec: 152*7f296bb3SBarry Smith``` 153*7f296bb3SBarry Smith 154*7f296bb3SBarry Smith- Document `VecOperation` 155*7f296bb3SBarry Smith- Add `VECOP_SET` 156*7f296bb3SBarry Smith- Significantly improve performance of `VecMDot()`, `VecMAXPY()` and `VecDotNorm2()` for CUDA and HIP vector types. These routines should be between 2x and 4x faster. 157*7f296bb3SBarry Smith- Enforce the rule that `VecAssemblyBegin()` and `VecAssemblyEnd()` must be called on even sequential vectors after calls to `VecSetValues()`. This also applies to assignment of vector entries in petsc4py 158*7f296bb3SBarry Smith 159*7f296bb3SBarry Smith```{rubric} PetscSection: 160*7f296bb3SBarry Smith``` 161*7f296bb3SBarry Smith 162*7f296bb3SBarry Smith```{rubric} PetscPartitioner: 163*7f296bb3SBarry Smith``` 164*7f296bb3SBarry Smith 165*7f296bb3SBarry Smith```{rubric} Mat: 166*7f296bb3SBarry Smith``` 167*7f296bb3SBarry Smith 168*7f296bb3SBarry Smith- `MatSetValues()` and friends will now provide reasonable performance when no preallocation information is provided 169*7f296bb3SBarry Smith- Add `MatEliminateZeros()` 170*7f296bb3SBarry Smith- Improve efficiency of `MatConvert()` from `MATNORMAL` to `MATHYPRE` 171*7f296bb3SBarry Smith- Add `MatDenseGetArrayAndMemType()`, `MatDenseRestoreArrayAndMemType()`, `MatDenseGetArrayReadAndMemType()`, `MatDenseRestoreArrayReadAndMemType()`, `MatDenseGetArrayWriteAndMemType()` and `MatDenseRestoreArrayWriteAndMemType()` to return the array and memory type of a dense matrix 172*7f296bb3SBarry Smith- Deprecate all MatPreallocate\* routines. These are no longer needed since non-preallocated matrices will now be as fast as using them 173*7f296bb3SBarry Smith- Significantly improve performance of `MatScale()` and `MatAXPY()` for `MATDENSECUDA` and `MATDENSEHIP` in the case where the leading dimension is greater than the number of columns/rows. This situation arises when using e.g. sub-matrices. These routines should be between 3x and 4x faster 174*7f296bb3SBarry Smith 175*7f296bb3SBarry Smith```{rubric} MatCoarsen: 176*7f296bb3SBarry Smith``` 177*7f296bb3SBarry Smith 178*7f296bb3SBarry Smith```{rubric} PC: 179*7f296bb3SBarry Smith``` 180*7f296bb3SBarry Smith 181*7f296bb3SBarry Smith- Add `PCHPDDMSetSTShareSubKSP()` 182*7f296bb3SBarry Smith 183*7f296bb3SBarry Smith```{rubric} KSP: 184*7f296bb3SBarry Smith``` 185*7f296bb3SBarry Smith 186*7f296bb3SBarry Smith- Add `KSPMonitorDynamicToleranceCreate()` and `KSPMonitorDynamicToleranceSetCoefficient()` 187*7f296bb3SBarry Smith- Change `-sub_ksp_dynamic_tolerance_param` to `-sub_ksp_dynamic_tolerance` 188*7f296bb3SBarry Smith- Add support for `MATAIJCUSPARSE` and `VECCUDA` to `KSPHPDDM` 189*7f296bb3SBarry Smith- Deprecate `KSP_CONVERGED_CG_NEG_CURVE` in favor of `KSP_CONVERGED_NEG_CURVE` 190*7f296bb3SBarry Smith- Deprecate `KSP_CONVERGED_CG_CONSTRAINED` in favor of `KSP_CONVERGED_STEP_LENGTH` 191*7f296bb3SBarry Smith- Add fourth kind Chebyshev polynomials; see `KSPChebyshevKind` and `KSPChebyshevSetKind()` 192*7f296bb3SBarry Smith- Add `KSPSetConvergedNegativeCurvature()` to declare convergence if negative curvature is detected by the Krylov solver 193*7f296bb3SBarry Smith- Add MINRES-QLP, available via `KSPMINRESSetUseQLP()` or the command line `-ksp_minres_qlp` 194*7f296bb3SBarry Smith- Replace old MINRES implementation 195*7f296bb3SBarry Smith- Add `KSPMatSolveTranspose()` 196*7f296bb3SBarry Smith 197*7f296bb3SBarry Smith```{rubric} SNES: 198*7f296bb3SBarry Smith``` 199*7f296bb3SBarry Smith 200*7f296bb3SBarry Smith- Add `SNESPruneJacobianColor()` to improve the MFFD coloring 201*7f296bb3SBarry Smith- Add `SNESVIGetVariableBounds()` to access variable bounds of a `SNESVI` 202*7f296bb3SBarry Smith 203*7f296bb3SBarry Smith```{rubric} SNESLineSearch: 204*7f296bb3SBarry Smith``` 205*7f296bb3SBarry Smith 206*7f296bb3SBarry Smith```{rubric} TS: 207*7f296bb3SBarry Smith``` 208*7f296bb3SBarry Smith 209*7f296bb3SBarry Smith- Add `TSPruneIJacobianColor()` to improve the MFFD coloring 210*7f296bb3SBarry Smith- Add argument to `TSMonitorSPCtxCreate()` to enable multispecies plots 211*7f296bb3SBarry Smith- Add `TSMonitorHGCtxCreate()`, `TSMonitorHGCtxDestroy()`, `TSMonitorHGSwarmSolution()` to support histogram plots of particle swarms 212*7f296bb3SBarry Smith- Add support for first-order adjoint calculation for `TSARKIMEX` 213*7f296bb3SBarry Smith 214*7f296bb3SBarry Smith```{rubric} TAO: 215*7f296bb3SBarry Smith``` 216*7f296bb3SBarry Smith 217*7f296bb3SBarry Smith```{rubric} DM/DA: 218*7f296bb3SBarry Smith``` 219*7f296bb3SBarry Smith 220*7f296bb3SBarry Smith- Add `DMLabelGetType()`, `DMLabelSetType()`, `DMLabelSetUp()`, `DMLabelRegister()`, `DMLabelRegisterAll()`, `DMLabelRegisterDestroy()` 221*7f296bb3SBarry Smith- Add `DMLabelEphemeralGetLabel()`, `DMLabelEphemeralSetLabel()`, `DMLabelEphemeralGetTransform()`, `DMLabelEphemeralSetTransform()` 222*7f296bb3SBarry Smith- Now `DMGetCellDS()`, `DMGetRegionDS()`, `DMSetRegionDS()`, `DMGetRegionNumDS()`, `DMSetRegionNumDS()` can also set and return an input DS 223*7f296bb3SBarry Smith 224*7f296bb3SBarry Smith```{rubric} DMSwarm: 225*7f296bb3SBarry Smith``` 226*7f296bb3SBarry Smith 227*7f296bb3SBarry Smith- Add `DMSwarmGetMigrateType()` and `DMSwarmSetMigrateType()` 228*7f296bb3SBarry Smith 229*7f296bb3SBarry Smith```{rubric} DMPlex: 230*7f296bb3SBarry Smith``` 231*7f296bb3SBarry Smith 232*7f296bb3SBarry Smith- Add `DMPlexGetOrientedCone()` and `DMPlexRestoreOrientedCone()` to return both cone and orientation together 233*7f296bb3SBarry Smith- Add `DMPlexTransformGetChart()`, `DMPlexTransformGetCellType()`, `DMPlexTransformGetDepth()`, `DMPlexTransformGetDepthStratum()`, `DMPlexTransformGetConeSize()` to enable ephemeral meshes 234*7f296bb3SBarry Smith- Remove `DMPlexAddConeSize()` 235*7f296bb3SBarry Smith- Add `DMPlexCreateEphemeral()` 236*7f296bb3SBarry Smith- Both `DMView()` and `DMLoad()` now support parallel I/O with a new HDF5 format (see the manual for details) 237*7f296bb3SBarry Smith- Remove `DMPlexComputeGeometryFEM()` since it was broken 238*7f296bb3SBarry Smith- Change `DMPlexMarkBoundaryFaces()` to avoid marking faces on the parallel boundary. To get the prior behavior, you can temporarily remove the `PointSF` from the `DM` 239*7f296bb3SBarry Smith- Add `-dm_localize_height` to localize edges and faces 240*7f296bb3SBarry Smith- Add `DMPlexCreateHypercubicMesh()` to create hypercubic meshes needed for QCD 241*7f296bb3SBarry Smith- Add `-dm_plex_shape zbox` option to `DMSetFromOptions()` to generated born-parallel meshes in Z-ordering (a space-filling curve). This may be used as-is with `-petscpartitioner_type simple` or redistributed using `-petscpartitioner_type parmetis` (or `ptscotch`, etc.), which is more scalable than creating a serial mesh to partition and distribute. 242*7f296bb3SBarry Smith- Add `DMPlexSetIsoperiodicFaceSF()` to wrap a non-periodic mesh into periodic while preserving the local point representation for both donor and image sheet. This is supported with `zbox` above, and allows single-element periodicity. 243*7f296bb3SBarry Smith- Now `DMPlexGetCompressedClosure()` also takes the point orientation 244*7f296bb3SBarry Smith- Add `DMPlexReorderCohesiveSupports()` 245*7f296bb3SBarry Smith 246*7f296bb3SBarry Smith```{rubric} FE/FV: 247*7f296bb3SBarry Smith``` 248*7f296bb3SBarry Smith 249*7f296bb3SBarry Smith- Add `DMPlexGetLocalOffsetsSupport()` for interaction with libCEED for FV 250*7f296bb3SBarry Smith- Now `PetscFEIntegrateHybridResidual()` and `PetscFEIntegrateHybridJacobian()` also take the input DS 251*7f296bb3SBarry Smith 252*7f296bb3SBarry Smith```{rubric} DMNetwork: 253*7f296bb3SBarry Smith``` 254*7f296bb3SBarry Smith 255*7f296bb3SBarry Smith- Add DMNetworkGetNumVertices to retrieve the local and global number of vertices in DMNetwork 256*7f296bb3SBarry Smith- Add DMNetworkGetNumEdges to retrieve the local and global number of edges in DMNetwork 257*7f296bb3SBarry Smith- Add the ability to use `DMView()` on a DMNetwork with a PetscViewer with format `PETSC_VIEWER_ASCII_CSV` 258*7f296bb3SBarry Smith- Add the ability to use `-dmnetwork_view draw` and `-dmnetwork_view_distributed draw` to visualize a DMNetwork with an associated coordinate DM. This currently requires the configured Python environment to have `matplotlib` and `pandas` installed 259*7f296bb3SBarry Smith 260*7f296bb3SBarry Smith```{rubric} DMStag: 261*7f296bb3SBarry Smith``` 262*7f296bb3SBarry Smith 263*7f296bb3SBarry Smith```{rubric} DT: 264*7f296bb3SBarry Smith``` 265*7f296bb3SBarry Smith 266*7f296bb3SBarry Smith- Add `PetscDTCreateDefaultQuadrature()` 267*7f296bb3SBarry Smith- Add `PetscQuadratureComputePermutations()` to compute the quadrature permutation corresponding to a k-cell orientation and `PetscDSPermuteQuadPoint()` 268*7f296bb3SBarry Smith- Add `PetscQuadratureGetCellType()` and `PetscQuadratureSetCellType()` 269*7f296bb3SBarry Smith- Add `PetscDSCopy()` 270*7f296bb3SBarry Smith 271*7f296bb3SBarry Smith```{rubric} Fortran: 272*7f296bb3SBarry Smith``` 273*7f296bb3SBarry Smith 274*7f296bb3SBarry Smith- Add `MatMPIAIJGetSeqAIJF90()`, `MatMPIAIJRestoreSeqAIJF90()` 275*7f296bb3SBarry Smith- Deprecate `ISGetIndices()` in favor of `ISGetIndicesF90()` 276*7f296bb3SBarry Smith- Deprecate `ISRestoreIndices()` in favor of `ISRestoreIndicesF90()` 277*7f296bb3SBarry Smith- Deprecate `ISLocalToGlobalMappingGetIndices()` in favor of `ISLocalToGlobalMappingGetIndicesF90()` 278*7f296bb3SBarry Smith- Deprecate `ISLocalToGlobalMappingRestoreIndices()` in favor of `ISLocalToGlobalMappingRestoreIndicesF90()` 279*7f296bb3SBarry Smith- Deprecate `VecGetArray()` in favor of `VecGetArrayF90()` 280*7f296bb3SBarry Smith- Deprecate `VecRestoreArray()` in favor of `VecRestoreArrayF90()` 281*7f296bb3SBarry Smith- Deprecate `VecGetArrayRead()` in favor of `VecGetArrayReadF90()` 282*7f296bb3SBarry Smith- Deprecate `VecRestoreArrayRead()` in favor of `VecRestoreArrayReadF90()` 283*7f296bb3SBarry Smith- Deprecate `VecDuplicateVecs()` in favor of `VecDuplicateVecsF90()` 284*7f296bb3SBarry Smith- Deprecate `VecDestroyVecs()` in favor of `VecDestroyVecsF90()` 285*7f296bb3SBarry Smith- Deprecate `DMDAVecGetArray()` in favor of `DMDAVecGetArrayF90()` 286*7f296bb3SBarry Smith- Deprecate `DMDAVecRestoreArray()` in favor of `DMDAVecRestoreArrayF90()` 287*7f296bb3SBarry Smith- Deprecate `DMDAVecGetArrayRead()` in favor of `DMDAVecGetArrayReadF90()` 288*7f296bb3SBarry Smith- Deprecate `DMDAVecRestoreArrayRead()` in favor of `DMDAVecRestoreArrayReadF90()` 289*7f296bb3SBarry Smith- Deprecate `DMDAVecGetArrayWrite()` in favor of `DMDAVecGetArrayWriteF90()` 290*7f296bb3SBarry Smith- Deprecate `DMDAVecRestoreArrayWrite()` in favor of `DMDAVecRestoreArrayWriteF90()` 291*7f296bb3SBarry Smith- Deprecate `MatGetRowIJ()` in favor of `MatGetRowIJF90()` 292*7f296bb3SBarry Smith- Deprecate `MatRestoreRowIJ()` in favor of `MatRestoreRowIJF90()` 293*7f296bb3SBarry Smith- Deprecate `MatSeqAIJGetArray()` in favor of `MatSeqAIJGetArrayF90()` 294*7f296bb3SBarry Smith- Deprecate `MatSeqAIJRestoreArray()` in favor of `MatSeqAIJRestoreArrayF90()` 295*7f296bb3SBarry Smith- Deprecate `MatMPIAIJGetSeqAIJ()` in favor of `MatMPIAIJGetSeqAIJF90()` 296*7f296bb3SBarry Smith- Deprecate `MatDenseGetArray()` in favor of `MatDenseGetArrayF90()` 297*7f296bb3SBarry Smith- Deprecate `MatDenseRestoreArray()` in favor of `MatDenseRestoreArrayF90()` 298