xref: /petsc/doc/changes/320.md (revision b11d9968bc79904c690b122f9399be46447eb113)
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