xref: /petsc/doc/changes/317.md (revision b11d9968bc79904c690b122f9399be46447eb113)
1*7f296bb3SBarry Smith# Changes: 3.17
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% * Use full function names, for ease of searching and so that man pages links are generated
9*7f296bb3SBarry Smith
10*7f296bb3SBarry Smith```{rubric} General:
11*7f296bb3SBarry Smith```
12*7f296bb3SBarry Smith
13*7f296bb3SBarry Smith- PETSc now requires a C99 compliant C compiler in all cases. Previously C99 was only required when building PETSc, but this now extends to public interfaces and header-files
14*7f296bb3SBarry Smith- PETSc now requires a C++11 compliant C++ compiler. Note this requirement is only enforced if C++ is used; it is acceptable to have a compiler that does not support C++11 if you only ever build C source
15*7f296bb3SBarry Smith- PETSc now requires at least Microsoft Visual Studio 2015 when using the Microsoft Visual C/C++ Compiler
16*7f296bb3SBarry Smith- Change `MPIU_Allreduce()` to always returns a PETSc error code that should be checked with `CHKERRQ(ierr)` or `PetscCall()`
17*7f296bb3SBarry Smith
18*7f296bb3SBarry Smith```{rubric} Configure/Build:
19*7f296bb3SBarry Smith```
20*7f296bb3SBarry Smith
21*7f296bb3SBarry Smith- Change minimum value of `--with-cxx-dialect` argument from "03" to "11"
22*7f296bb3SBarry Smith- C++ dialect will now also be inferred from compiler flags, although users will be warned that they should let PETSc auto-detect the flag when setting the dialect this way
23*7f296bb3SBarry Smith- Change C++ dialect flag option to be consistent with compiler flags; `--with-cxx-dialect=gnu++14` means you want `-std=gnu++14`, no more, no less
24*7f296bb3SBarry Smith- Fix for requesting no C++ dialect flag via `--with-cxx-dialect=0`. Previously `configure` would bail out immediately without running the tests and therefore wouldn't set any of the capability defines. `configure` now runs all tests, just doesn't add the flag in the end
25*7f296bb3SBarry Smith- Fix a number of corner-cases when handling C++ dialect detection
26*7f296bb3SBarry Smith- Remove deprecated `PETSC_VERSION_PATCH` so as to not have confusion with patch releases where the subminor version changes
27*7f296bb3SBarry Smith- Change `PETSC_HAVE_MKL` to `PETSC_HAVE_MKL_LIBS`
28*7f296bb3SBarry Smith- Add `PETSC_HAVE_MKL_INCLUDES`
29*7f296bb3SBarry Smith- Enable HYPRE GPU for 64bit indices build (using HYPRE's mixed-int configuration)
30*7f296bb3SBarry Smith- Reuse PETSc-installed hwloc when installing Open MPI
31*7f296bb3SBarry Smith
32*7f296bb3SBarry Smith```{rubric} Sys:
33*7f296bb3SBarry Smith```
34*7f296bb3SBarry Smith
35*7f296bb3SBarry Smith- Add `MPI_Comm_get_name()` and `MPI_Comm_set_name()` to MPIUNI
36*7f296bb3SBarry Smith- Remove `petsccublas.h` and `petschipblas.h`
37*7f296bb3SBarry Smith- Remove `-petsc_use_default_null_stream` and `-[cuda|hip]_synchronize` options
38*7f296bb3SBarry Smith- Remove `PetscCUDASynchronize` and `PetscHIPSynchronize`. Their operation is now managed by `PetscDeviceContext` via its `PetscStreamType` attribute
39*7f296bb3SBarry Smith- Remove `PetscCUDAInitialize()`, `PetscCUDAInitializeCheck()`, `PetscHIPInitialize()`, and `PetscHIPInitializeCheck()`. Their function is now handled by `PetscDeviceInitialize()` and `PetscDeviceInitialized()`
40*7f296bb3SBarry Smith- Remove `PetscCUBLASInitializeHandle()`, `PetscCUSOLVERDnInitializeHandle()`, `PetscHIPBLASInitializeHandle()`, and `PetscHIPSOLVERInitializeHandle()`. Their function is now handled implicitly by `PetscDeviceContext`
41*7f296bb3SBarry Smith- Remove `petsc_gputimer_begin` and `petsc_gputimer_begin`
42*7f296bb3SBarry Smith- Add `-device_enable`, `-device_select` and `-device_view` startup-options to control coarse-grained device initialization strategy
43*7f296bb3SBarry Smith- Replace `-[cuda|hip]_device` with split options `-device_enable_[cuda|hip]` and `-device_select_[cuda|hip]` to enable fine-grained control of device selection and initialization strategy
44*7f296bb3SBarry Smith- Replace `-[cuda|hip]_view` with `-device_view_[cuda|hip]`
45*7f296bb3SBarry Smith- Add `PetscDeviceInitType` to enumerate PETSc device initialization strategies
46*7f296bb3SBarry Smith- Add `PetscDeviceInitialize()` to eagerly initialize a `PetscDeviceType`, and `PetscDeviceInitialized()` to query the corresponding initialization state
47*7f296bb3SBarry Smith- Change `PetscDeviceCreate()` to also accept a `PetscInt devid`, to create a `PetscDevice` for a specific device
48*7f296bb3SBarry Smith- Add `PetscDeviceView()`
49*7f296bb3SBarry Smith- Move `PetscInt64_FMT` and `MPIU_INT64` definitions to `petscsystypes.h`
50*7f296bb3SBarry Smith- Add `PetscBLASInt_FMT`, `PETSC_MPI_COMM_FMT`, and `PETSC_MPI_WIN_FMT` format specifiers
51*7f296bb3SBarry Smith- Add `petscmacros.h` header to house common PETSc preprocessor macros
52*7f296bb3SBarry Smith- Add `PetscUnreachable()` to indicate unreachable code section to compiler
53*7f296bb3SBarry Smith- Add `PetscHasAttribute()` macro to query for existence of an `__attribute__` specifier
54*7f296bb3SBarry Smith- Add `PetscCommGetComm()` and `PetscCommRestoreComm()` to allow reuse of MPI communicator with external packages, as some MPI implementations have broken `MPI_Comm_free()`
55*7f296bb3SBarry Smith- Add `PetscExpand()`, `PetscConcat()`, `PetscCompl()`, and `PetscExpandToNothing()`
56*7f296bb3SBarry Smith- Add `PETSC_CONSTEXPR_14`, `PETSC_NULLPTR`, and `PETSC_NODISCARD`
57*7f296bb3SBarry Smith- Add `PetscSizeT` as a language-agnostic equivalent of `size_t` from `<stddef.h>`
58*7f296bb3SBarry Smith- Add `PetscCount` as a signed datatype for counts, equivalent to `ptrdiff_t` from `<stddef.h>`.
59*7f296bb3SBarry Smith- Add `PetscCountCast`, `PetscSortIntWithCountArray()`, and `PetscSortIntWithIntCountArrayPair()`
60*7f296bb3SBarry Smith- Deprecate `SETERRQ1()` - `SETERRQ9()` in favor of `SETERRQ()` which is now variadic
61*7f296bb3SBarry Smith- Deprecate `PetscInfo1()` - `PetscInfo9()` in favor of `PetscInfo()` which is now variadic
62*7f296bb3SBarry Smith- Deprecate `PETSC_INLINE`, `inline` is a standard keyword since C99 and C++11
63*7f296bb3SBarry Smith- Deprecate `PETSC_STATIC_INLINE`, as both `static` and `inline` are standard keywords since C99 and C++11
64*7f296bb3SBarry Smith- Remove `PETSC_C_RESTRICT`, `restrict` is a standard keyword since C99
65*7f296bb3SBarry Smith- Change `SETERRMPI()` to be variadic
66*7f296bb3SBarry Smith- Change `SETERRABORT()` to be variadic
67*7f296bb3SBarry Smith- Add `PetscCheck()` and `PetscAssert()` for checking a boolean condition is true. The former is always enabled, while the latter is enabled only in debug builds.
68*7f296bb3SBarry Smith- `PetscDevice` initialization for CUDA and HIP will now respect `CUDA_VISIBILE_DEVICES` and `HIP_VISIBLE_DEVICES` environment variables respectively
69*7f296bb3SBarry Smith- Add `PETSC_ATTRIBUTE_COLD` to inform compilers that a function is unlikely to be called
70*7f296bb3SBarry Smith- Add `PetscCall()`, `PetscCallVoid()`, `PetscCallMPI()`, `PetscCallAbort()`, `PetscCallContinue()`, `PetscCallThrow()`, and `PetscCallCXX()`. These supersede `CHKERRQ()`, `CHKERRV()`, `CHKERRMPI()`, `CHKERRABORT()`, `CHKERRCONTINUE()`, `CHKERRXX()`, and `CHKERRCXX()` respectively
71*7f296bb3SBarry Smith- Add `PetscCallCUDA()`, `PetscCallCUBLAS()`, `PetscCallCUSPARSE()`, `PetscCallCUSOLVER()`, `PetscCallCUFFT()`, and `PetscCallCURAND()`. These supersede `CHKERRCUDA()`, `CHKERRCUBLAS()`, `CHKERRCUSPARSE()`, `CHKERRCUSOLVER()`, `CHKERRCUFFT()`, and `CHKERRCURAND()` respectively
72*7f296bb3SBarry Smith- Add `PetscCallHIP()`, `PetscCallHIPBLAS()`, and `PetscCallHIPSOLVER()`. These supersede `CHKERRHIP()`, `CHKERRHIPBLAS()`, and `CHKERRHIPSOLVER()` respectively
73*7f296bb3SBarry Smith- Add `PetscCallCEED()` which supersedes `CHKERRQ_CEED()`
74*7f296bb3SBarry Smith- Soft-deprecate `CHKERR` variants listed above in C/C++ sources. New code should prefer the `PetscCall` variants though no compiler diagnostics will be emitted if the old versions are used. One may use `${PETSC_DIR}/share/petsc/chkerrconvert.py` to perform the conversions automatically, though users should note that this script is considered "beta" software. It was used to facilitate the `CHKERR` changes during development and is being exposed to users in order to smooth the transition -- while every reasonable effort was made to ensure correctness, we provide no guarantee of it.
75*7f296bb3SBarry Smith
76*7f296bb3SBarry Smith```{rubric} PetscViewer:
77*7f296bb3SBarry Smith```
78*7f296bb3SBarry Smith
79*7f296bb3SBarry Smith- Add `PetscViewerHDF5SetDefaultTimestepping()` and `PetscViewerHDF5SetDefaultTimestepping()` to deal with HDF5 files missing the timestepping attribute
80*7f296bb3SBarry Smith
81*7f296bb3SBarry Smith```{rubric} PetscDraw:
82*7f296bb3SBarry Smith```
83*7f296bb3SBarry Smith
84*7f296bb3SBarry Smith- Add `PetscDrawSPAddPointColorized()` to change scatter point color based on third input value
85*7f296bb3SBarry Smith
86*7f296bb3SBarry Smith```{rubric} AO:
87*7f296bb3SBarry Smith```
88*7f296bb3SBarry Smith
89*7f296bb3SBarry Smith```{rubric} IS:
90*7f296bb3SBarry Smith```
91*7f296bb3SBarry Smith
92*7f296bb3SBarry Smith- `ISLocalToGlobalMappingCreateSF()`: allow passing `start = PETSC_DECIDE`
93*7f296bb3SBarry Smith- Add `ISGeneralSetIndicesFromMask()`
94*7f296bb3SBarry Smith- Add `ISSetLayout()`
95*7f296bb3SBarry Smith- Add `PetscSectionSymDistribute()`
96*7f296bb3SBarry Smith- Add `ISLocalToGlobalMappingGetType()`
97*7f296bb3SBarry Smith
98*7f296bb3SBarry Smith```{rubric} VecScatter / PetscSF:
99*7f296bb3SBarry Smith```
100*7f296bb3SBarry Smith
101*7f296bb3SBarry Smith- Add MPI-4.0 large count support. With an MPI-4.0 compliant MPI implementation and 64-bit indices, one can now pass over 2 billion elements in a single message in either VecScatter or PetscSF
102*7f296bb3SBarry Smith- Add `PetscSFFetchAndOpWithMemTypeBegin()`, which is similar to `PetscSFFetchAndOpBegin()`, but with explicit memory types
103*7f296bb3SBarry Smith- Change `PetscSFSetGraph()` and `PetscSFSetGraphLayout()` to sort leaves, remove `const` from `ilocal` and `iremote` arguments
104*7f296bb3SBarry Smith- Add `PetscSFConcatenate()`
105*7f296bb3SBarry Smith
106*7f296bb3SBarry Smith```{rubric} PF:
107*7f296bb3SBarry Smith```
108*7f296bb3SBarry Smith
109*7f296bb3SBarry Smith```{rubric} Vec:
110*7f296bb3SBarry Smith```
111*7f296bb3SBarry Smith
112*7f296bb3SBarry Smith- Change `VecTaggerComputeBoxes()` and `VecTaggerComputeIS()` to return a boolean whose value is true if the list was created
113*7f296bb3SBarry Smith- Add `-vec_bind_below` option for specifying size threshold below which GPU is not used for `Vec` operations
114*7f296bb3SBarry Smith- Add `VecSetBindingPropagates()`
115*7f296bb3SBarry Smith- Add `VecGetBindingPropagates()`
116*7f296bb3SBarry Smith- For CUDA and ViennaCL and HIP GPU vectors, `VecCreate()` no longer allocates the array on CPU eagerly, it is only allocated if it is needed
117*7f296bb3SBarry Smith- `VecGetArrayAndMemType()` and `VecGetArrayReadAndMemType()` now always return a device pointer (copying the data to the device if needed) for the standard CUDA, HIP, and CUDA/HIP Kokkos vectors. Previously, they did so only when the device had the latest data
118*7f296bb3SBarry Smith- Add `VecGetArrayWriteAndMemType()` and `VecRestoreArrayWriteAndMemType()`, which are similar to the `VecGetArrayReadAndMemType()` family, but only write to the vector on device
119*7f296bb3SBarry Smith
120*7f296bb3SBarry Smith```{rubric} PetscPartitioner:
121*7f296bb3SBarry Smith```
122*7f296bb3SBarry Smith
123*7f296bb3SBarry Smith```{rubric} Mat:
124*7f296bb3SBarry Smith```
125*7f296bb3SBarry Smith
126*7f296bb3SBarry Smith- Add `-mat_bind_below` option for specifying size threshold below which GPU is not used for `Mat` operations
127*7f296bb3SBarry Smith- Add `MatSetBindingPropagates()`
128*7f296bb3SBarry Smith- Add `MatGetBindingPropagates()`
129*7f296bb3SBarry Smith- Add `MatSeqAIJGetArrayWrite()` and `MatSeqAIJRestoreArrayWrite()` to get write-access to the value array of `MatSeqAIJ` on CPU
130*7f296bb3SBarry Smith- Add `MatCUSPARSESetUseCPUSolve()` Use CPU solve with cuSparse for LU factorization that are on the CPU.
131*7f296bb3SBarry Smith- Change `MatCreateIS()` behavior when NULL is passed for the mappings. Now a NULL map implies matching local and global spaces
132*7f296bb3SBarry Smith- Add support of `MatSetValuesCOO()` and `MatSetPreallocationCOO()` for matrix type AIJKOKKOS. Additionally, for AIJKOKKOS, they support negative indices and remote entries
133*7f296bb3SBarry Smith- Add `MatMultHermitianTransposeEqual()` and `MatMultHermitianTransposeAddEqual()`
134*7f296bb3SBarry Smith- Add `MatSetPreallocationCOOLocal()` to set preallocation for matrices using a coordinate format of the entries with local indices
135*7f296bb3SBarry Smith- Change `MatStructures` enumeration to avoid spaces and match capitalization of other enumerations
136*7f296bb3SBarry Smith- Change size argument of `MatSetPreallocationCOO()` to `PetscCount`
137*7f296bb3SBarry Smith- Add `MATORDERINGMETISND` use METIS for nested dissection ordering of `MatSeqAIJ`, with options `nseps`, `niter`, `ufactor` and `pfactor` under the common prefix `-mat_ordering_metisnd_`
138*7f296bb3SBarry Smith- Change options `-matproduct_<product_type>_via` to `-mat_product_algorithm`
139*7f296bb3SBarry Smith- Add `-mat_superlu_dist_3d` and `-mat_superlu_dist_d <n>` to support using SuperLU_DIST's version 7.2 3d decomposition algorithms
140*7f296bb3SBarry Smith- `MATIS` now supports negative and repeated indices in the local-to-global map and the COO assembly routines. This allows for better integration with libceed
141*7f296bb3SBarry Smith- Add `MatISGetLocalToGlobalMapping()` to retrieve the logical map for assembled subdomain problem
142*7f296bb3SBarry Smith
143*7f296bb3SBarry Smith```{rubric} PC:
144*7f296bb3SBarry Smith```
145*7f296bb3SBarry Smith
146*7f296bb3SBarry Smith- Add MG option `-pc_mg_galerkin_mat_product_algorithm [cusparse|hypre]` and `PCMGGalerkinSetMatProductAlgorithm()` to use cuSparse or hypre's SpGEMM for Galerkin products in hypre
147*7f296bb3SBarry Smith- Add PC type `PCBJKOKKOS` a new, experimental batch Kokkos solver `-pc_type bjkokkos -pc_bjkokkos_ksp_type [tfqmr|bicg] -pc_bjkokkos_pc_type jacobi -ksp_type preonly`
148*7f296bb3SBarry Smith- Add -pc_svd_monitor ::all option to print all the singular values instead of a maximum of ten
149*7f296bb3SBarry Smith
150*7f296bb3SBarry Smith```{rubric} PCMG:
151*7f296bb3SBarry Smith```
152*7f296bb3SBarry Smith
153*7f296bb3SBarry Smith- Add `PCMGGetGridComplexity()` to get operator and grid complexity of MG hierarchy
154*7f296bb3SBarry Smith- Change `PCGAMG` default to use `PCJACOBI` smoothing instead of `PCSOR`. This also allows the default configuration to use GPUs effectively, and to deliver equivalent convergence. For the old default, use `-mg_levels_pc_type sor`.
155*7f296bb3SBarry Smith- Change `PCGAMG` eigenvalue estimation to use `KSPCG` when `MAT_SPD` has been set (see `MatSetOption()`) and `KSPCR` when `MAT_SYMMETRIC` or `MAT_HERMITIAN` has been set. These are usually somewhat more accurate and reliable than the previous default of `KSPGMRES`, and in tune with `KSPCHEBYSHEV`. Note that Chebyshev will generally not be a suitable smoother for indefinite matrices.
156*7f296bb3SBarry Smith- Change `PCGAMG` to use `PCGAMGSetUseSAEstEig()` by default when the smoother uses Jacobi preconditioning.
157*7f296bb3SBarry Smith
158*7f296bb3SBarry Smith```{rubric} KSP:
159*7f296bb3SBarry Smith```
160*7f296bb3SBarry Smith
161*7f296bb3SBarry Smith- Outer most `KSPSolve()` will error if `KSP_DIVERGED_ITS` and `KSPSetErrorIfNotConverged()` is used
162*7f296bb3SBarry Smith- Add `KSPQMRCGS` to support qmrcgstab with right preconditioning
163*7f296bb3SBarry Smith- Add `KSPGuessSetTolerance()`
164*7f296bb3SBarry Smith- Add a new model option to `KSPGuessFischerSetModel()`
165*7f296bb3SBarry Smith
166*7f296bb3SBarry Smith```{rubric} SNES:
167*7f296bb3SBarry Smith```
168*7f296bb3SBarry Smith
169*7f296bb3SBarry Smith- Add `SNESNewtonTRDCGetRhoFlag()`, `SNESNewtonTRDCSetPreCheck()`, `SNESNewtonTRDCGetPreCheck()`, `SNESNewtonTRDCSetPostCheck()`, `SNESNewtonTRDCGetPostCheck()`
170*7f296bb3SBarry Smith
171*7f296bb3SBarry Smith```{rubric} SNESLineSearch:
172*7f296bb3SBarry Smith```
173*7f296bb3SBarry Smith
174*7f296bb3SBarry Smith```{rubric} TS:
175*7f296bb3SBarry Smith```
176*7f296bb3SBarry Smith
177*7f296bb3SBarry Smith- Add `TSSundialsSetUseDense()` and options database option `-ts_sundials_use_dense` to use a dense linear solver (serial only) within CVODE, instead of the default iterative solve
178*7f296bb3SBarry Smith- Change timestepper type `TSDISCGRAD` to include additional conservation terms based on formulation from [Gonzalez 1996] for Hamiltonian systems:
179*7f296bb3SBarry Smith  \- Add `TSDiscGradIsGonzalez()` to check flag for whether to use additional conservative terms in discrete gradient formulation
180*7f296bb3SBarry Smith  \- Add `TSDiscGradUseGonzalez()` to set discrete gradient formulation with or without additional conservative terms. Without flag, the discrete gradients timestepper is just backwards euler
181*7f296bb3SBarry Smith- Add `TSRemoveTrajectory` to destroy and remove the internal TSTrajectory object from TS
182*7f296bb3SBarry Smith- Change `TSMonitorSPSwarmSolution()` to have correct axes labels and bounds
183*7f296bb3SBarry Smith
184*7f296bb3SBarry Smith```{rubric} Tao:
185*7f296bb3SBarry Smith```
186*7f296bb3SBarry Smith
187*7f296bb3SBarry Smith- Add `TaoGetGradient()`, `TaoGetObjectiveAndGradient()` and `TaoGetHessian()`
188*7f296bb3SBarry Smith- Deprecate `TaoSetInitialVector()` in favor of `TaoSetSolution()`
189*7f296bb3SBarry Smith- Deprecate `TaoGetSolutionVector()` in favor of `TaoGetSolution()`
190*7f296bb3SBarry Smith- Deprecate `TaoGetGradientVector()` in favor of `TaoGetGradient()`
191*7f296bb3SBarry Smith- Deprecate `TaoSetObjectiveRoutine()` in favor of `TaoSetObjective()`
192*7f296bb3SBarry Smith- Deprecate `TaoSetGradientRoutine()` in favor of `TaoSetGradient()`
193*7f296bb3SBarry Smith- Deprecate `TaoSetObjectiveAndGradientRoutine()` in favor of `TaoSetObjectiveAndGradient()`
194*7f296bb3SBarry Smith- Deprecate `TaoSetHessianRoutine()` in favor of `TaoSetHessian()`
195*7f296bb3SBarry Smith- Change `TaoGetObjective()`. Use `TaoGetSolutionStatus(tao,NULL,&fct,NULL,NULL,NULL,NULL)` instead
196*7f296bb3SBarry Smith
197*7f296bb3SBarry Smith```{rubric} DM/DA:
198*7f296bb3SBarry Smith```
199*7f296bb3SBarry Smith
200*7f296bb3SBarry Smith- Add `DMLabelGetNonEmptyStratumValuesIS()`, similar to `DMLabelGetValueIS()` but counts only nonempty strata
201*7f296bb3SBarry Smith- Add `DMLabelCompare()` for `DMLabel` comparison
202*7f296bb3SBarry Smith- Add `DMCompareLabels()` comparing `DMLabel`s of two `DM`s
203*7f296bb3SBarry Smith- `DMCopyLabels()` now takes DMCopyLabelsMode argument determining duplicity handling
204*7f296bb3SBarry Smith- Add `-dm_bind_below` option for specifying size threshold below which GPU is not used for `Vec` and `Mat` objects associated with a DM
205*7f296bb3SBarry Smith- Add `DMCreateMassMatrixLumped()` to support explicit timestepping, also add `DMTSCreateRHSMassMatrix()`, `DMTSCreateRHSMassMatrixLumped()`, and `DMTSDestroyRHSMassMatrix()`
206*7f296bb3SBarry Smith- Promote `DMGetFirstLabelEntry()` to public API and rename
207*7f296bb3SBarry Smith- Add bias vector argument to `DMGetDefaultConstraints()` and `DMSetDefaultConstraints()`. Passing `bias=NULL` recovers prior behavior.
208*7f296bb3SBarry Smith- Change `DMGetAuxiliaryVec()`, `DMSetAuxiliaryVec()`, and `DMGetAuxiliaryLabels()` to take an equation part number
209*7f296bb3SBarry Smith
210*7f296bb3SBarry Smith```{rubric} DMSwarm:
211*7f296bb3SBarry Smith```
212*7f296bb3SBarry Smith
213*7f296bb3SBarry Smith- Add `DMSwarmGetNumSpecies()` and `DMSwarmSetNumSpecies()` to support PIC
214*7f296bb3SBarry Smith- Add `DMSwarmComputeLocalSize()`, `DMSwarmComputeLocalSizeFromOptions()`, `DMSwarmInitializeCoordinates()`, `DMSwarmInitializeVelocities()`, `DMSwarmInitializeVelocitiesFromOptions()` to assist initialization of PIC methods
215*7f296bb3SBarry Smith
216*7f296bb3SBarry Smith```{rubric} DMPlex:
217*7f296bb3SBarry Smith```
218*7f296bb3SBarry Smith
219*7f296bb3SBarry Smith- Add `DMExtrude()` which now the default extrusion
220*7f296bb3SBarry Smith- Change `DMPlexExtrude()` to use DMPlexTransform underneath
221*7f296bb3SBarry Smith- Add `DMPlexTransformExtrudeSetNormalFunction()` to allow computed normals
222*7f296bb3SBarry Smith- Add `DMGetNaturalSF()` and `DMSetNaturalSF()`
223*7f296bb3SBarry Smith- Change `-dm_plex_csr_via_mat` to `-dm_plex_csr_alg` which takes a DMPlexCSRAlgorithm name
224*7f296bb3SBarry Smith- Add public API for metric-based mesh adaptation:
225*7f296bb3SBarry Smith  : - Move `DMPlexMetricCtx` from public to private and give it to `DMPlex`
226*7f296bb3SBarry Smith    - Add `DMPlexMetricSetFromOptions()` to assign values to `DMPlexMetricCtx`
227*7f296bb3SBarry Smith    - Add `DMPlexMetricSetIsotropic()` for declaring whether a metric is isotropic
228*7f296bb3SBarry Smith    - Add `DMPlexMetricIsIsotropic()` for determining whether a metric is isotropic
229*7f296bb3SBarry Smith    - Add `DMPlexMetricSetUniform()` for declaring whether a metric is uniform
230*7f296bb3SBarry Smith    - Add `DMPlexMetricIsUniform()` for determining whether a metric is uniform
231*7f296bb3SBarry Smith    - Add `DMPlexMetricSetRestrictAnisotropyFirst()` for declaring whether anisotropy should be restricted before normalization
232*7f296bb3SBarry Smith    - Add `DMPlexMetricRestrictAnisotropyFirst()` for determining whether anisotropy should be restricted before normalization
233*7f296bb3SBarry Smith    - Add `DMPlexMetricSetMinimumMagnitude()` for specifying the minimum tolerated metric magnitude
234*7f296bb3SBarry Smith    - Add `DMPlexMetricGetMinimumMagnitude()` for retrieving the minimum tolerated metric magnitude
235*7f296bb3SBarry Smith    - Add `DMPlexMetricSetMaximumMagnitude()` for specifying the maximum tolerated metric magnitude
236*7f296bb3SBarry Smith    - Add `DMPlexMetricGetMaximumMagnitude()` for retrieving the maximum tolerated metric magnitude
237*7f296bb3SBarry Smith    - Add `DMPlexMetricSetMaximumAnisotropy()` for specifying the maximum tolerated metric anisostropy
238*7f296bb3SBarry Smith    - Add `DMPlexMetricGetMaximumAnisotropy()` for retrieving the maximum tolerated metric anisotropy
239*7f296bb3SBarry Smith    - Add `DMPlexMetricSetTargetComplexity()` for specifying the target metric complexity
240*7f296bb3SBarry Smith    - Add `DMPlexMetricGetTargetComplexity()` for retrieving the target metric complexity
241*7f296bb3SBarry Smith    - Add `DMPlexMetricSetNormalizationOrder()` for specifying the order of L-p normalization
242*7f296bb3SBarry Smith    - Add `DMPlexMetricGetNormalizationOrder()` for retrieving the order of L-p normalization
243*7f296bb3SBarry Smith    - Change `DMPlexMetricCtx` so that it is only instantiated when one of the above routines are called
244*7f296bb3SBarry Smith    - Change `DMPlexMetricEnforceSPD()` to have more arguments:
245*7f296bb3SBarry Smith      : - control whether anisotropy is restricted
246*7f296bb3SBarry Smith        - output the modified metric, rather than modifying the input
247*7f296bb3SBarry Smith        - output the determinant
248*7f296bb3SBarry Smith    - Change `DMPlexMetricNormalize()` to have another argument, for controlling whether anisotropy is restricted
249*7f296bb3SBarry Smith- Change `DMAdaptor` so that its `-adaptor_refinement_h_min/h_max/a_max/p` command line arguments become `-dm_plex_metric_h_min/h_max/a_max/p`
250*7f296bb3SBarry Smith- Add 2D and 3D mesh adaptation interface to Mmg and 3D mesh adaptation interface to ParMmg. Mmg/ParMmg specific changes:
251*7f296bb3SBarry Smith  : - Change `DMPlexBuildFromCellListParallel()` to have another argument, for the connectivity
252*7f296bb3SBarry Smith    - Change `DMPlexCreateFromCellListParallelPetsc()` to have another argument, for the connectivity
253*7f296bb3SBarry Smith    - Add `DMPlexMetricSetVerbosity()` for setting the verbosity of the metric-based mesh adaptation package
254*7f296bb3SBarry Smith    - Add `DMPlexMetricGetVerbosity()` for getting the verbosity of the metric-based mesh adaptation package
255*7f296bb3SBarry Smith    - Add `DMPlexMetricSetNoInsertion()` to turn off node insertion and deletion for (Par)Mmg
256*7f296bb3SBarry Smith    - Add `DMPlexMetricNoInsertion()` to determine whether node insertion and deletion are turned off for (Par)Mmg
257*7f296bb3SBarry Smith    - Add `DMPlexMetricSetNoSwapping()` to turn off facet swapping for (Par)Mmg
258*7f296bb3SBarry Smith    - Add `DMPlexMetricNoSwapping()` to determine whether facet swapping is turned off for (Par)Mmg
259*7f296bb3SBarry Smith    - Add `DMPlexMetricSetNoMovement()` to turn off node movement for (Par)Mmg
260*7f296bb3SBarry Smith    - Add `DMPlexMetricNoMovement()` to determine whether node movement is turned off for (Par)Mmg
261*7f296bb3SBarry Smith    - Add `DMPlexMetricSetNoSurf()` to turn off surface modification for (Par)Mmg
262*7f296bb3SBarry Smith    - Add `DMPlexMetricNoSurf()` to determine whether surface modification is turned off for (Par)Mmg
263*7f296bb3SBarry Smith    - Add `DMPlexMetricSetGradationFactor()` to set the metric gradation factor
264*7f296bb3SBarry Smith    - Add `DMPlexMetricGetGradationFactor()` to get the metric gradation factor
265*7f296bb3SBarry Smith    - Add `DMPlexMetricSetHausdorffNumber()` to set the metric Hausdorff number
266*7f296bb3SBarry Smith    - Add `DMPlexMetricGetHausdorffNumber()` to get the metric Hausdorff number
267*7f296bb3SBarry Smith    - Add `DMPlexMetricSetNumIterations()` to set the number of ParMmg adaptation iterations
268*7f296bb3SBarry Smith    - Add `DMPlexMetricGetNumIterations()` to get the number of ParMmg adaptation iterations
269*7f296bb3SBarry Smith- Change `DMPlexCoordinatesLoad()` to take a `PetscSF` as argument
270*7f296bb3SBarry Smith- Change `DMPlexLabelsLoad()` to take the `PetscSF` argument and load in parallel
271*7f296bb3SBarry Smith- Change `DMPlexCreateFromFile()` to take the mesh name as argument
272*7f296bb3SBarry Smith- Change `DMAdaptMetric` so that it takes an additional argument for cell tags
273*7f296bb3SBarry Smith- Change `DMTransformAdaptLabel` so that it takes an additional argument for cell tags
274*7f296bb3SBarry Smith- Change `DMGenerateRegister` so that it registers routines that take an additional argument for cell tags
275*7f296bb3SBarry Smith- Change `DMPlexFindVertices()` to take `Vec` and `IS` arguments instead of arrays
276*7f296bb3SBarry Smith- Add `DMPlexTSComputeRHSFunctionFEM()` to support explicit timestepping
277*7f296bb3SBarry Smith- Newly created `DMPlex` will be distributed by default; this previously required `-dm_distribute` or explicit calls to `DMPlexDistribute()`
278*7f296bb3SBarry Smith- Add `DMPlexDistributeGetDefault()` and `DMPlexDistributeSetDefault()` to determine and set the default for `DMPlex` distribution
279*7f296bb3SBarry Smith- Add meshing of the Schwarz-P and Gyroid triply periodic minimal surface (see `DMPlexCreateTPSMesh()`). These meshes can be automatically generated using `-dm_plex_shape schwarz_p` or `-dm_plex_shape gyroid`, with optional levels of refinement and extrusion to 3D solids with prescribed thickness.
280*7f296bb3SBarry Smith- Add `DMCreateFEDefault()` as a convenience method for creating the right element on a mesh
281*7f296bb3SBarry Smith- Add `DMPlexCreateReferenceCell()`
282*7f296bb3SBarry Smith- Remove deprecated `DMPlexCreateFromCellList()` and `DMPlexCreateFromCellListParallel()`
283*7f296bb3SBarry Smith- Add `DMSetMatrixPreallocateSkip()` to save initialization time when `MatSetPreallocationCOO()` will be used.
284*7f296bb3SBarry Smith- Improve loading performance related to coordinate projection in common cases.
285*7f296bb3SBarry Smith- Add `DMPlexGetOrdering1D()` for 1D Plex problems
286*7f296bb3SBarry Smith- Add `DMPlexComputeClementInterpolant()` averaging operator
287*7f296bb3SBarry Smith
288*7f296bb3SBarry Smith```{rubric} DMPlexLandau:
289*7f296bb3SBarry Smith```
290*7f296bb3SBarry Smith
291*7f296bb3SBarry Smith- Add `DMPlexLandauCreateVelocitySpace()` Create DMComposite of DMPlex for Landau collision operator
292*7f296bb3SBarry Smith- Add `DMPlexLandauDestroyVelocitySpace()` Destroy DMComposite of DMPlex for Landau collision operator
293*7f296bb3SBarry Smith- Add `DMPlexLandauIFunction()` Landau collision operator
294*7f296bb3SBarry Smith- Add `DMPlexLandauIJacobian()` Landau collision operator
295*7f296bb3SBarry Smith
296*7f296bb3SBarry Smith```{rubric} FE/FV:
297*7f296bb3SBarry Smith```
298*7f296bb3SBarry Smith
299*7f296bb3SBarry Smith- Deprecate `PetscSpacePolynomialGetSymmetric()` and `PetscSpacePolynomialSetSymmetric()`: symmetric polynomials were never supported and support is no longer planned
300*7f296bb3SBarry Smith- Remove `PetscSpacePolynomialType` enum and associated array of strings `PetscSpacePolynomialTypes`: other polynomial spaces are now handled by other implementations of `PetscSpace`
301*7f296bb3SBarry Smith- Add `PETSCSPACEPTRIMMED` that implements trimmed polynomial spaces (also known as the spaces in Nedelec face / edge elements of the first kind)
302*7f296bb3SBarry Smith- Replace `PetscDSGet/SetHybrid()` with `PetscDSGet/SetCohesive()`
303*7f296bb3SBarry Smith- Add `PetscDSIsCohesive()`, `PetscDSGetNumCohesive()`, and `PetscDSGetFieldOffsetCohesive()`
304*7f296bb3SBarry Smith- Add argument to `PetscFEIntegrateHybridJacobian()` to indicate the face for the integration
305*7f296bb3SBarry Smith- Add `PetscFECreateByCell()` and `PetscFECreateLagrangeByCell()` to create FE spaces on specific cell types
306*7f296bb3SBarry Smith- Replace `PetscDualSpaceCreateReferenceCell()` with `DMPlexCreateReferenceCell()`
307*7f296bb3SBarry Smith- Add `PetscDualSpaceEqual()` and `PetscQuadratureEqual()`
308*7f296bb3SBarry Smith
309*7f296bb3SBarry Smith```{rubric} DMNetwork:
310*7f296bb3SBarry Smith```
311*7f296bb3SBarry Smith
312*7f296bb3SBarry Smith- `DMNetworkAddComponent()` now requires a valid component key for each call
313*7f296bb3SBarry Smith- Add `DMNetworkSharedVertexGetInfo()`
314*7f296bb3SBarry Smith
315*7f296bb3SBarry Smith```{rubric} DMStag:
316*7f296bb3SBarry Smith```
317*7f296bb3SBarry Smith
318*7f296bb3SBarry Smith```{rubric} DT:
319*7f296bb3SBarry Smith```
320*7f296bb3SBarry Smith
321*7f296bb3SBarry Smith- Add `PetscDTPTrimmedEvalJet()` to evaluate a stable basis for trimmed polynomials, and `PetscDTPTrimmedSize()` for the size of that space
322*7f296bb3SBarry Smith- Add `PetscDSGetRHSResidual()` and `PetscDSSetRHSResidual()` to support explicit timestepping
323*7f296bb3SBarry Smith- Add `PetscDTTensorQuadratureCreate()` to combine different quadratures, such as on a prism
324*7f296bb3SBarry Smith- Add `PetscProbComputeKSStatistic()` to apply the Kolmogorov-Smirnov test
325*7f296bb3SBarry Smith- Add probability distributions `PetscPDFMaxwellBoltzmann1D()`, `PetscCDFMaxwellBoltzmann1D()`, `PetscPDFMaxwellBoltzmann2D()`, `PetscCDFMaxwellBoltzmann2D()`, `PetscPDFMaxwellBoltzmann3D()`, `PetscCDFMaxwellBoltzmann3D()`, `PetscPDFGaussian1D()`, `PetscCDFGaussian1D()`, `PetscPDFSampleGaussian1D()`, `PetscPDFGaussian2D()`, `PetscPDFSampleGaussian2D()`, `PetscPDFConstant1D()`, `PetscCDFConstant1D()`
326*7f296bb3SBarry Smith
327*7f296bb3SBarry Smith```{rubric} Fortran:
328*7f296bb3SBarry Smith```
329*7f296bb3SBarry Smith
330*7f296bb3SBarry Smith```{rubric} Logging:
331*7f296bb3SBarry Smith```
332*7f296bb3SBarry Smith
333*7f296bb3SBarry Smith- Add `PetscLogIsActive()` to determine if logging is in progress or not
334