1*7f296bb3SBarry Smith# Changes: 3.20 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 `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsInt()`, `PetscOptionsBool()`, `PetscOptionsIntArray()`, 13*7f296bb3SBarry Smith `PetscOptionsReal()`, `PetscOptionsRealArray()`, and `PetscOptionsScalar()` for Fortran 14*7f296bb3SBarry Smith- Add `PetscAssertPointer()` as a replacement for `PetscValidPointer()`, `PetscValidCharPointer()`, `PetscValidIntPointer()`, `PetscValidInt64Pointer()`, `PetscValidCountPointer()`, `PetscValidBoolPointer()`, `PetscvalidScalarPointer()`, and `PetscValidRealPointer()` 15*7f296bb3SBarry Smith- Convert standard header-guards in PETSc header-files to `#pragma once`. Users relying on specific preprocessor definitions to determine whether particular PETSc headers (e.g. `petscdm.h` used to be guarded by `PETSCDM_H`) have been included will find that this no longer works. While header-guards are technically "public" (insofar that they appear in public header-files), their name and value are considered implementation details 16*7f296bb3SBarry Smith 17*7f296bb3SBarry Smith```{rubric} Configure/Build: 18*7f296bb3SBarry Smith``` 19*7f296bb3SBarry Smith 20*7f296bb3SBarry Smith- Add support for external-packages to prefer tarball download for regular use - as currently all packages prefer git clones. MPICH is a package using this feature. Here MPICH tarball will be downloaded for regular use. However on providing `--download-mpich-commit=main` option - configure download and builds from MPICH git repository 21*7f296bb3SBarry Smith- Add support for external package SLATE, optional dependency for STRUMPACK 22*7f296bb3SBarry Smith- Add support for external package ZFP, optional dependency for STRUMPACK 23*7f296bb3SBarry Smith- Add support for external package ButterflyPACK, optional dependency for STRUMPACK 24*7f296bb3SBarry Smith 25*7f296bb3SBarry Smith```{rubric} Sys: 26*7f296bb3SBarry Smith``` 27*7f296bb3SBarry Smith 28*7f296bb3SBarry Smith- Add `PetscDeviceContextGetStreamHandle()` to return a handle to the stream the current device context is using 29*7f296bb3SBarry Smith- Add utility functions `PetscGetCurrentCUDAStream()` and `PetscGetCurrentHIPStream()` to return the GPU stream the current device context is using 30*7f296bb3SBarry Smith- Add `PetscStrcmpAny()` to compare against multiple non-empty strings 31*7f296bb3SBarry Smith- Change arguments 4 and 5 of `PetscViewerBinaryReadAll()` and `PetscViewerBinaryWriteAll()` to `PetscInt64` 32*7f296bb3SBarry Smith- Add `PetscIsCloseAtTolScalar()` 33*7f296bb3SBarry Smith- Remove `PetscTellMyCell()` and related runtime option 34*7f296bb3SBarry Smith- Remove `PetscTextBelt()` and related runtime option 35*7f296bb3SBarry Smith- Remove deprecated `-malloc [no]` startup option 36*7f296bb3SBarry Smith- Remove deprecated `-malloc_info` startup option 37*7f296bb3SBarry Smith- Remove deprecated `-log_summary` option 38*7f296bb3SBarry Smith- Remove `PetscURLShorten()`, it has not worked since 2019 39*7f296bb3SBarry Smith- Move `PetscIntStackCreate()`, `PetscIntStackDestroy()`, `PetscIntStackPush()`, `PetscIntStackPop()`, and `PetscIntStackEmpty()` declarations to public API in `petsclog.h` 40*7f296bb3SBarry Smith- Add `-on_error_malloc_dump` option 41*7f296bb3SBarry Smith 42*7f296bb3SBarry Smith```{rubric} Event Logging: 43*7f296bb3SBarry Smith``` 44*7f296bb3SBarry Smith 45*7f296bb3SBarry Smith- Add `PetscLogState` interface for describing profiling events and stages 46*7f296bb3SBarry Smith- Add `PetscLogHandler` interface that interprets the profiling events of a `PetscLogState` 47*7f296bb3SBarry Smith- Add `PETSCLOGHANDLERDEFAULT` implementation of `PetscLogHandler` 48*7f296bb3SBarry Smith- Add `PETSCLOGHANDLERNESTED` implementation of `PetscLogHandler` 49*7f296bb3SBarry Smith- Add `PETSCLOGHANDLERTRACE` implementation of `PetscLogHandler` 50*7f296bb3SBarry Smith- Add `PetscLogHandlerCreateTrace()` 51*7f296bb3SBarry Smith- Add `PETSCLOGHANDLERMPE` implementation of `PetscLogHandler` 52*7f296bb3SBarry Smith- Add `PETSCLOGHANDLERPERFSTUBS` implementation of `PetscLogHandler` 53*7f296bb3SBarry Smith- Add `PETSCLOGHANDLERLEGACY` implementation of `PetscLogHandler` 54*7f296bb3SBarry Smith- Add `PetscLogHandlerCreateLegacy()` 55*7f296bb3SBarry Smith- Add `PetscLogPerfstubsBegin()` for log handling with PerfStubs/TAU 56*7f296bb3SBarry Smith- Add `PetscLogLegacyCallbacksBegin()` to transition old log handler callbacks to the `PetscLogHandler`-based approach 57*7f296bb3SBarry Smith- Add `PetscLogHandlerStart()` to connect a `PetscLogHandler` to PETSc's global logging events 58*7f296bb3SBarry Smith- Add `PetscLogStageGetName()` 59*7f296bb3SBarry Smith- Add `PetscLogEventGetName()` 60*7f296bb3SBarry Smith- Add `PetscLogEventsPause()` and `PetscLogEventsResume()` to isolate a logging event from unrelated in-process events 61*7f296bb3SBarry Smith- Add `PetscLogClassGetClassId()` 62*7f296bb3SBarry Smith- Add `PetscLogClassIdGetName()` 63*7f296bb3SBarry Smith- Deprecate `PetscLogClassPerfInfoClear()` , `PetscLogClassPerfLogCreate()`, and `PetscLogClassPerfLogDestroy()` 64*7f296bb3SBarry Smith- Deprecate `PetscClassPerfLogEnsureSize()`, `PetscClassRegInfoDestroy()`, `PetscClassRegLogCreate()`, `PetscClassRegLogDestroy()`, `PetscClassRegLogGetClass()`, and `PetscClassRegLogRegister()` 65*7f296bb3SBarry Smith- Deprecate `PetscEventPerfInfoClear()` and `PetscEventPerfInfoCopy()` 66*7f296bb3SBarry Smith- Deprecate `PetscEventPerfLogActivate()`, `PetscEventPerfLogActivateClass()`, `PetscEventPerfLogCreate()`, `PetscEventPerfLogDeactivate()`, `PetscEventPerfLogDeactivateClass()`, `PetscEventPerfLogDeactivatePop()`, `PetscEventPerfLogDeactivatePush()`, `PetscEventPerfLogDestroy()`, `PetscEventPerfLogEnsureSize()`, `PetscEventPerfLogGetVisible()`, and `PetscEventPerfLogSetVisible()` 67*7f296bb3SBarry Smith- Deprecate `PetscEventRegLogCreate()`, `PetscEventRegLogDestroy()`, `PetscEventRegLogGetEvent()`, and `PetscEventRegLogRegister()` 68*7f296bb3SBarry Smith- Deprecate `PetscStageLogCreate()`, `PetscStageLogDestroy()`, `PetscStageLogGetActive()`, `PetscStageLogGetClassPerfLog()`, `PetscStageLogGetClassRegLog()`, `PetscStageLogGetEventRegLog()`, `PetscStageLogGetStage()`, `PetscStageLogGetVisible()`, `PetscStageLogPop()`, `PetscStageLogPush()`, `PetscStageLogRegister()`, `PetscStageLogSetActive()`, `PetscStageLogSetVisible()`, `PetscStageLogGetCurrent()`, and `PetscStageLogGetEventPerfLog()` 69*7f296bb3SBarry Smith- Deprecate `PetscLogGetStageLog()` 70*7f296bb3SBarry Smith- Deprecate `PetscLogPushCurrentEvent_Internal()` 71*7f296bb3SBarry Smith- Deprecate `PetscLogPopCurrentEvent_Internal()` 72*7f296bb3SBarry Smith- Deprecate `PetscLogAllBegin()` 73*7f296bb3SBarry Smith- Deprecate `PetscLogSet()` 74*7f296bb3SBarry Smith- Add `PetscLogHandlerGetEventPerfInfo()` 75*7f296bb3SBarry Smith- Add `PetscLogHandlerSetLogActions()` 76*7f296bb3SBarry Smith- Add `PetscLogHandlerSetLogObjects()` 77*7f296bb3SBarry Smith- Add `PetscLogHandlerLogObjectState()` 78*7f296bb3SBarry Smith- Add `PetscLogHandlerGetNumObjects()` 79*7f296bb3SBarry Smith- Add `PetscLogHandlerEventDeactivatePush()` 80*7f296bb3SBarry Smith- Add `PetscLogHandlerEventDeactivatePop()` 81*7f296bb3SBarry Smith- Add `PetscLogHandlerEventsPause()` 82*7f296bb3SBarry Smith- Add `PetscLogHandlerEventsResume()` 83*7f296bb3SBarry Smith- Add `PetscLogHandlerDump()` 84*7f296bb3SBarry Smith- Add `PetscLogHandlerStageSetVisible()` 85*7f296bb3SBarry Smith- Add `PetscLogHandlerStageGetVisible()` 86*7f296bb3SBarry Smith- Add `PetscLogHandlerGetStagePerfInfo()` 87*7f296bb3SBarry Smith- Add `PetscLogStageGetPerfInfo()` 88*7f296bb3SBarry Smith- Add `PETSCLOGHANDLERNVTX` implementation of `PetscLogHandler` 89*7f296bb3SBarry Smith 90*7f296bb3SBarry Smith```{rubric} PetscViewer: 91*7f296bb3SBarry Smith``` 92*7f296bb3SBarry Smith 93*7f296bb3SBarry Smith- Add `PetscViewerASCIIOpenWithFileUnit()` and `PetscViewerASCIISetFileUnit()` 94*7f296bb3SBarry Smith 95*7f296bb3SBarry Smith```{rubric} PetscDraw: 96*7f296bb3SBarry Smith``` 97*7f296bb3SBarry Smith 98*7f296bb3SBarry Smith```{rubric} AO: 99*7f296bb3SBarry Smith``` 100*7f296bb3SBarry Smith 101*7f296bb3SBarry Smith```{rubric} IS: 102*7f296bb3SBarry Smith``` 103*7f296bb3SBarry Smith 104*7f296bb3SBarry Smith```{rubric} VecScatter / PetscSF: 105*7f296bb3SBarry Smith``` 106*7f296bb3SBarry Smith 107*7f296bb3SBarry Smith```{rubric} PF: 108*7f296bb3SBarry Smith``` 109*7f296bb3SBarry Smith 110*7f296bb3SBarry Smith```{rubric} Vec: 111*7f296bb3SBarry Smith``` 112*7f296bb3SBarry Smith 113*7f296bb3SBarry Smith- Add `VecErrorWeightedNorms()` to unify weighted local truncation error norms used in `TS` 114*7f296bb3SBarry Smith- Add CUDA/HIP implementations for `VecAbs()`, `VecSqrtAbs()`, `VecExp()`, `VecLog()`, `VecPointwiseMax()`, `VecPointwiseMaxAbs()`, and `VecPointwiseMin()` 115*7f296bb3SBarry Smith- Add `VecMAXPBY()` 116*7f296bb3SBarry Smith- Deprecate `VecChop()` in favor of `VecFilter()` 117*7f296bb3SBarry Smith- Add `VecCreateFromOptions()` 118*7f296bb3SBarry Smith 119*7f296bb3SBarry Smith```{rubric} PetscSection: 120*7f296bb3SBarry Smith``` 121*7f296bb3SBarry Smith 122*7f296bb3SBarry Smith- Add `PetscSectionResetClosurePermutation()` 123*7f296bb3SBarry Smith 124*7f296bb3SBarry Smith```{rubric} PetscPartitioner: 125*7f296bb3SBarry Smith``` 126*7f296bb3SBarry Smith 127*7f296bb3SBarry Smith```{rubric} Mat: 128*7f296bb3SBarry Smith``` 129*7f296bb3SBarry Smith 130*7f296bb3SBarry Smith- Add `MatCreateDenseFromVecType()` 131*7f296bb3SBarry Smith- Add support for calling `MatDuplicate()` on a matrix preallocated via `MatSetPreallocationCOO()`, and then `MatSetValuesCOO()` on the new matrix 132*7f296bb3SBarry Smith- Remove `MATSOLVERSPARSEELEMENTAL` since it is no longer functional 133*7f296bb3SBarry Smith- Add `MATSELLCUDA`. It supports fast `MatMult()`, `MatMultTranspose()`, and `MatMultAdd()` on GPUs 134*7f296bb3SBarry Smith- Add support for `MAT_FACTOR_LU` and `MAT_FACTOR_CHOLESKY` with `MATSOLVERMUMPS` for `MATNEST` 135*7f296bb3SBarry Smith- `MatGetFactor()` can now return `NULL` for some combinations of matrices and solvers types. This is to support those combinations that can only be inspected at runtime (i.e. MatNest with AIJ blocks vs MatNest with SHELL blocks) 136*7f296bb3SBarry Smith- Remove `MatSetValuesDevice()`, `MatCUSPARSEGetDeviceMatWrite()`, `MatKokkosGetDeviceMatWrite` 137*7f296bb3SBarry Smith- Add `MatDenseCUDASetPreallocation()` and `MatDenseHIPSetPreallocation()` 138*7f296bb3SBarry Smith- Add support for KOKKOS in `MATH2OPUS` 139*7f296bb3SBarry Smith- Add `-pc_precision single` option for use with `MATSOLVERSUPERLU_DIST` 140*7f296bb3SBarry Smith- Add `MATDIAGONAL` which can be created with `MatCreateDiagonal()` 141*7f296bb3SBarry Smith- Add `MatDiagonalGetDiagonal()`, `MatDiagonalRestoreDiagonal()`, `MatDiagonalGetInverseDiagonal()`, and `MatDiagonalRestoreInverseDiagonal()` 142*7f296bb3SBarry Smith- Add support for `MatLoad()` and `MatView()` to load and store `MATMPIAIJ` matrices that have more than `PETSC_INT_MAX` nonzeros, so long as each rank has fewer than `PETSC_INT_MAX` 143*7f296bb3SBarry Smith- Add `MatLRCSetMats()` and register creation routine for `MatLRC` 144*7f296bb3SBarry Smith- Add CUDA/HIP implementation for `MatGetDiagonal()` 145*7f296bb3SBarry Smith- Add a Boolean parameter to `MatEliminateZeros()` to force the removal of zero diagonal coefficients 146*7f296bb3SBarry Smith- Expose `MatComputeVariableBlockEnvelope()` in public headers 147*7f296bb3SBarry Smith- Add `MatEliminateZeros()` implementations for `MatBAIJ` and `MatSBAIJ` 148*7f296bb3SBarry Smith- Deprecate `MatChop()` in favor of `MatFilter()`, with two additional Boolean parameters to compress the underlying storage and keep or discard near-zero diagonal coefficients 149*7f296bb3SBarry Smith- Add `MatCreateFromOptions()` 150*7f296bb3SBarry Smith- Add `MatSTRUMPACKGetReordering()`, `MatSTRUMPACKSetGeometricNxyz()`, `MatSTRUMPACKSetGeometricComponents()`, `MatSTRUMPACKSetGeometricWidth()`, `MatSTRUMPACKGetColPerm()`, `MatSTRUMPACKSetGPU()`, `MatSTRUMPACKGetGPU()`, `MatSTRUMPACKSetCompression()`, `MatSTRUMPACKGetCompression()`, `MatSTRUMPACKSetCompRelTol()`, `MatSTRUMPACKGetCompRelTol()`, `MatSTRUMPACKSetCompAbsTol()`, `MatSTRUMPACKGetCompAbsTol()`, `MatSTRUMPACKSetCompMinSepSize()`, `MatSTRUMPACKGetCompMinSepSize()`, `MatSTRUMPACKSetCompLeafSize()`, `MatSTRUMPACKGetCompLeafSize()`, `MatSTRUMPACKSetCompLossyPrecision()`, `MatSTRUMPACKGetCompLossyPrecision()`, `MatSTRUMPACKSetCompButterflyLevels()`, `MatSTRUMPACKGetCompButterflyLevels()` 151*7f296bb3SBarry Smith- Add `MAT_STRUMPACK_GEOMETRIC`, `MAT_STRUMPACK_AMD`, `MAT_STRUMPACK_MMD`, `MAT_STRUMPACK_AND`, `MAT_STRUMPACK_MLF`, `MAT_STRUMPACK_SPECTRAL` to `MatSTRUMPACKReordering` 152*7f296bb3SBarry Smith- Add `MatSTRUMPACKCompressionType` 153*7f296bb3SBarry Smith- Remove `MatSTRUMPACKSetHSSLeafSize()`, `MatSTRUMPACKSetHSSMaxRank()`, `MatSTRUMPACKSetHSSMinSize()`, `MatSTRUMPACKSetHSSMinSepSize()`, `MatSTRUMPACKSetHSSAbsTol()`, `MatSTRUMPACKSetHSSRelCompTol()`, `MatSTRUMPACKSetHSSRelTol()` 154*7f296bb3SBarry Smith 155*7f296bb3SBarry Smith```{rubric} MatCoarsen: 156*7f296bb3SBarry Smith``` 157*7f296bb3SBarry Smith 158*7f296bb3SBarry Smith```{rubric} PC: 159*7f296bb3SBarry Smith``` 160*7f296bb3SBarry Smith 161*7f296bb3SBarry Smith- Add `PCMatGetApplyOperation()` and `PCMatSetApplyOperation()` 162*7f296bb3SBarry Smith- Add `PCReduceFailedReason()` 163*7f296bb3SBarry Smith- Add `PCSetKSPNestLevel()` and `PCSetKSPNestLevel()` 164*7f296bb3SBarry Smith- Refactor `PCMPI` to be a private system used automatically when `-mpi_linear_solver_server` is used. The `KSP` and `PC` objects that solve the system now inherit any prefix provided 165*7f296bb3SBarry Smith initially with `KSPSetPrefix()` and do not require the previously required `mpi_` prefix 166*7f296bb3SBarry Smith- Add option `-fieldsplit_1_pc_hpddm_schur_precondition` to use `PCHPDDM` on the Schur complements from `PCFIELDSPLIT` 167*7f296bb3SBarry Smith- Add `PCGAMGSetAggressiveSquareGraph()` to use square graph method for aggressive coarsening that was the previous default coarsening approach before release 3.19 168*7f296bb3SBarry Smith- Add `PCGAMGSetAggressiveMISk()` to set the number of levels (k) of aggressive MIS-k coarsening (2 is very common) 169*7f296bb3SBarry Smith- Add `PCGAMGSetMinDegreeOrderingMISk()` to use a minimum degree ordering for the (greedy) MIS-k algorithm 170*7f296bb3SBarry Smith- Change `PCGAMGSetUseParallelCoarseGridSolve()` to `PCGAMGSetParallelCoarseGridSolve()` 171*7f296bb3SBarry Smith- Add `PCGAMGSetRecomputeEstEig()` to set flag to have Chebyshev recompute its eigen estimates (default set to true) 172*7f296bb3SBarry Smith 173*7f296bb3SBarry Smith```{rubric} KSP: 174*7f296bb3SBarry Smith``` 175*7f296bb3SBarry Smith 176*7f296bb3SBarry Smith- Add `KSPSetMinimumIterations()` and `KSPGetMinimumIterations()` 177*7f296bb3SBarry Smith- Add `KSPSetNestLevel()` and `KSPGetNestLevel()` 178*7f296bb3SBarry Smith- Support `KSPSetInitialGuessNonzero()` with `KSPPREONLY` and `PCDISTRIBUTE` when it is called on both the outer and inner `KSP` 179*7f296bb3SBarry Smith 180*7f296bb3SBarry Smith```{rubric} SNES: 181*7f296bb3SBarry Smith``` 182*7f296bb3SBarry Smith 183*7f296bb3SBarry Smith- Add a convenient, developer-level `SNESConverged()` function that runs the convergence test and updates the internal converged reason 184*7f296bb3SBarry Smith- Swap the order of monitor and convergence test. Now monitors are always called after a convergence test 185*7f296bb3SBarry Smith- Deprecate option `-snes_ms_norms` in favor of `-snes_norm_schedule always` 186*7f296bb3SBarry Smith 187*7f296bb3SBarry Smith```{rubric} SNESLineSearch: 188*7f296bb3SBarry Smith``` 189*7f296bb3SBarry Smith 190*7f296bb3SBarry Smith```{rubric} TS: 191*7f296bb3SBarry Smith``` 192*7f296bb3SBarry Smith 193*7f296bb3SBarry Smith- Remove `TSErrorWeightedNormInfinity()`, `TSErrorWeightedNorm2()`, `TSErrorWeightedENormInfinity()`, `TSErrorWeightedENorm2()` since the same functionality can be obtained with `VecErrorWeightedNorms()` 194*7f296bb3SBarry Smith- Add support for time-dependent solvers with varying solution size using `TSSetResize()` 195*7f296bb3SBarry Smith- Add support for Diagonally Implicit Runge-Kutta methods with the new `TSDIRK` type 196*7f296bb3SBarry Smith 197*7f296bb3SBarry Smith```{rubric} TAO: 198*7f296bb3SBarry Smith``` 199*7f296bb3SBarry Smith 200*7f296bb3SBarry Smith- Add `TaoADMMGetRegularizerCoefficient()` 201*7f296bb3SBarry Smith- Add `TAOBNCG`, `TaoBNCGGetType()` and `TaoBNCGSetType()` 202*7f296bb3SBarry Smith 203*7f296bb3SBarry Smith```{rubric} DM/DA: 204*7f296bb3SBarry Smith``` 205*7f296bb3SBarry Smith 206*7f296bb3SBarry Smith- Add support for `DMDAGetElements()` for Fortran 207*7f296bb3SBarry Smith- Add support for clearing named vectors with `DMClearNamedGlobalVectors()` and `DMClearNamedLocalVectors()` 208*7f296bb3SBarry Smith- Add `DMPrintCellIndices()` for debugging 209*7f296bb3SBarry Smith- Add `DMUseTensorOrder()` 210*7f296bb3SBarry Smith- Add `DMCeedCreate()`, `DMCeedComputeGeometry()`, and `DMCeedDestroy()` 211*7f296bb3SBarry Smith 212*7f296bb3SBarry Smith```{rubric} DMSwarm: 213*7f296bb3SBarry Smith``` 214*7f296bb3SBarry Smith 215*7f296bb3SBarry Smith- Add scatter mode to `DMSwarmProjectFields()` and no longer create vectors 216*7f296bb3SBarry Smith- Promote `DMSwarmDataFieldGetEntries()`, `DMSwarmDataFieldRestoreEntries()`, `DMSwarmDataBucketGetDMSwarmDataFieldByName()`, `DMSwarmDataBucketGetDMSwarmDataFieldIdByName()`, and `DMSwarmDataBucketQueryDMSwarmDataFieldByName()` to public interface 217*7f296bb3SBarry Smith 218*7f296bb3SBarry Smith```{rubric} DMPlex: 219*7f296bb3SBarry Smith``` 220*7f296bb3SBarry Smith 221*7f296bb3SBarry Smith- Add `DMPlexTransformExtrudeGetPeriodic()` and `DMPlexTransformExtrudeSetPeriodic()` 222*7f296bb3SBarry Smith- Replace `DMPlexGetGhostCellStratum()` with `DMPlexGetCellTypeStratum()` 223*7f296bb3SBarry Smith- Add `DMPlexSetUseMatClosurePermutation()` and `DMPlexGetUseMatClosurePermutation()` 224*7f296bb3SBarry Smith- Add `DMPlexGetUseCeed()`, `DMPlexSetUseCeed()`, and `DMPlexSNESComputeResidualCEED()` 225*7f296bb3SBarry Smith- Add `DMPlexSNESComputeResidualDS()` 226*7f296bb3SBarry Smith 227*7f296bb3SBarry Smith```{rubric} FE/FV: 228*7f296bb3SBarry Smith``` 229*7f296bb3SBarry Smith 230*7f296bb3SBarry Smith- Add `PLEXFE_QFUNCTION` macro to create CEED QFunctions from Plex pointwise functions 231*7f296bb3SBarry Smith 232*7f296bb3SBarry Smith```{rubric} DMNetwork: 233*7f296bb3SBarry Smith``` 234*7f296bb3SBarry Smith 235*7f296bb3SBarry Smith- Add `DMNetworkViewSetShowRanks()`, `DMNetworkViewSetViewRanks()`, `DMNetworkViewSetShowGlobal()`, `DMNetworkViewSetShowVertices()`, `DMNetworkViewSetShowNumbering()` 236*7f296bb3SBarry Smith- Add `-dmnetwork_view_all_ranks` `-dmnetwork_view_rank_range` `-dmnetwork_view_no_vertices` `-dmnetwork_view_no_numbering` for viewing DMNetworks with the Matplotlib viewer 237*7f296bb3SBarry Smith- Add `-dmnetwork_view_zoomin_vertices` `-dmnetwork_view_zoomin_vertices_padding` for viewing DMNetworks with the Matplotlib viewer 238*7f296bb3SBarry Smith 239*7f296bb3SBarry Smith```{rubric} DMStag: 240*7f296bb3SBarry Smith``` 241*7f296bb3SBarry Smith 242*7f296bb3SBarry Smith```{rubric} DT: 243*7f296bb3SBarry Smith``` 244*7f296bb3SBarry Smith 245*7f296bb3SBarry Smith- Add `PETSCFEVECTOR` for making a finite element that is a vector of copies of another finite element 246*7f296bb3SBarry Smith- Add `PetscFECreateVector()` 247*7f296bb3SBarry Smith- Add `PETSCDUALSPACESUM` for a finite element dual basis that is the sum of other dual bases 248*7f296bb3SBarry Smith- Add `PetscDualSpaceCreateSum()` 249*7f296bb3SBarry Smith- Add `PetscDualSpaceSumSetNumSubspaces()` 250*7f296bb3SBarry Smith- Add `PetscDualSpaceSumGetNumSubspaces()` 251*7f296bb3SBarry Smith- Add `PetscDualSpaceSumSetSubspace()` 252*7f296bb3SBarry Smith- Add `PetscDualSpaceSumGetSubspace()` 253*7f296bb3SBarry Smith- Add `PetscDualSpaceSumSetConcatenate()` 254*7f296bb3SBarry Smith- Add `PetscDualSpaceSumGetConcatenate()` 255*7f296bb3SBarry Smith- Add `PetscDualSpaceSumSetInterleave()` 256*7f296bb3SBarry Smith- Add `PetscDualSpaceSumGetInterleave()` 257*7f296bb3SBarry Smith- Add `PetscSpaceSumSetInterleave()` 258*7f296bb3SBarry Smith- Add `PetscSpaceSumGetInterleave()` 259*7f296bb3SBarry Smith- Add `PetscDualSpaceGetInteriorSection()` 260*7f296bb3SBarry Smith 261*7f296bb3SBarry Smith```{rubric} Fortran: 262*7f296bb3SBarry Smith``` 263*7f296bb3SBarry Smith 264*7f296bb3SBarry Smith- Add `PetscCheck()` and `PetscCheckA()` for Fortran 265*7f296bb3SBarry Smith- Change `PETSC_HAVE_FORTRAN` to `PETSC_USE_FORTRAN_BINDINGS` to indicate if PETSc is built with Fortran bindings 266