============= Changes: 3.17 ============= .. STYLE GUIDELINES: * Capitalize sentences * Use imperative, e.g., Add, Improve, Change, etc. * Don't use a period (.) at the end of entries * If multiple sentences are needed, use a period or semicolon to divide sentences, but not at the end of the final sentence * Use full function names, for ease of searching and so that man pages links are generated .. rubric:: General: - 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 - 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 - PETSc now requires at least Microsoft Visual Studio 2015 when using the Microsoft Visual C/C++ Compiler - Change ``MPIU_Allreduce()`` to always returns a PETSc error code that should be checked with ``CHKERRQ(ierr)`` or ``PetscCall()`` .. rubric:: Configure/Build: - Change minimum value of ``--with-cxx-dialect`` argument from "03" to "11" - 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 - 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 - 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 - Fix a number of corner-cases when handling C++ dialect detection - Remove deprecated ``PETSC_VERSION_PATCH`` so as to not have confusion with patch releases where the subminor version changes - Change ``PETSC_HAVE_MKL`` to ``PETSC_HAVE_MKL_LIBS`` - Add ``PETSC_HAVE_MKL_INCLUDES`` - Enable HYPRE GPU for 64bit indices build (using HYPRE's mixed-int configuration) - Reuse PETSc-installed hwloc when installing Open MPI .. rubric:: Sys: - Add ``MPI_Comm_get_name()`` and ``MPI_Comm_set_name()`` to MPIUNI - Remove ``petsccublas.h`` and ``petschipblas.h`` - Remove ``-petsc_use_default_null_stream`` and ``-[cuda|hip]_synchronize`` options - Remove ``PetscCUDASynchronize`` and ``PetscHIPSynchronize``. Their operation is now managed by ``PetscDeviceContext`` via its ``PetscStreamType`` attribute - Remove ``PetscCUDAInitialize()``, ``PetscCUDAInitializeCheck()``, ``PetscHIPInitialize()``, and ``PetscHIPInitializeCheck()``. Their function is now handled by ``PetscDeviceInitialize()`` and ``PetscDeviceInitialized()`` - Remove ``PetscCUBLASInitializeHandle()``, ``PetscCUSOLVERDnInitializeHandle()``, ``PetscHIPBLASInitializeHandle()``, and ``PetscHIPSOLVERInitializeHandle()``. Their function is now handled implicitly by ``PetscDeviceContext`` - Remove ``petsc_gputimer_begin`` and ``petsc_gputimer_begin`` - Add ``-device_enable``, ``-device_select`` and ``-device_view`` startup-options to control coarse-grained device initialization strategy - 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 - Replace ``-[cuda|hip]_view`` with ``-device_view_[cuda|hip]`` - Add ``PetscDeviceInitType`` to enumerate PETSc device initialization strategies - Add ``PetscDeviceInitialize()`` to eagerly initialize a ``PetscDeviceType``, and ``PetscDeviceInitialized()`` to query the corresponding initialization state - Change ``PetscDeviceCreate()`` to also accept a ``PetscInt devid``, to create a ``PetscDevice`` for a specific device - Add ``PetscDeviceView()`` - Move ``PetscInt64_FMT`` and ``MPIU_INT64`` definitions to ``petscsystypes.h`` - Add ``PetscBLASInt_FMT``, ``PETSC_MPI_COMM_FMT``, and ``PETSC_MPI_WIN_FMT`` format specifiers - Add ``petscmacros.h`` header to house common PETSc preprocessor macros - Add ``PetscUnreachable()`` to indicate unreachable code section to compiler - Add ``PetscHasAttribute()`` macro to query for existence of an ``__attribute__`` specifier - Add ``PetscCommGetComm()`` and ``PetscCommRestoreComm()`` to allow reuse of MPI communicator with external packages, as some MPI implementations have broken ``MPI_Comm_free()`` - Add ``PetscExpand()``, ``PetscConcat()``, ``PetscCompl()``, and ``PetscExpandToNothing()`` - Add ``PETSC_CONSTEXPR_14``, ``PETSC_NULLPTR``, and ``PETSC_NODISCARD`` - Add ``PetscSizeT`` as a language-agnostic equivalent of ``size_t`` from ```` - Add ``PetscCount`` as a signed datatype for counts, equivalent to ``ptrdiff_t`` from ````. - Add ``PetscCountCast``, ``PetscSortIntWithCountArray()``, and ``PetscSortIntWithIntCountArrayPair()`` - Deprecate ``SETERRQ1()`` - ``SETERRQ9()`` in favor of ``SETERRQ()`` which is now variadic - Deprecate ``PetscInfo1()`` - ``PetscInfo9()`` in favor of ``PetscInfo()`` which is now variadic - Deprecate ``PETSC_INLINE``, ``inline`` is a standard keyword since C99 and C++11 - Deprecate ``PETSC_STATIC_INLINE``, as both ``static`` and ``inline`` are standard keywords since C99 and C++11 - Remove ``PETSC_C_RESTRICT``, ``restrict`` is a standard keyword since C99 - Change ``SETERRMPI()`` to be variadic - Change ``SETERRABORT()`` to be variadic - 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. - ``PetscDevice`` initialization for CUDA and HIP will now respect ``CUDA_VISIBILE_DEVICES`` and ``HIP_VISIBLE_DEVICES`` environment variables respectively - Add ``PETSC_ATTRIBUTE_COLD`` to inform compilers that a function is unlikely to be called - Add ``PetscCall()``, ``PetscCallVoid()``, ``PetscCallMPI()``, ``PetscCallAbort()``, ``PetscCallContinue()``, ``PetscCallThrow()``, and ``PetscCallCXX()``. These supersede ``CHKERRQ()``, ``CHKERRV()``, ``CHKERRMPI()``, ``CHKERRABORT()``, ``CHKERRCONTINUE()``, ``CHKERRXX()``, and ``CHKERRCXX()`` respectively - Add ``PetscCallCUDA()``, ``PetscCallCUBLAS()``, ``PetscCallCUSPARSE()``, ``PetscCallCUSOLVER()``, ``PetscCallCUFFT()``, and ``PetscCallCURAND()``. These supersede ``CHKERRCUDA()``, ``CHKERRCUBLAS()``, ``CHKERRCUSPARSE()``, ``CHKERRCUSOLVER()``, ``CHKERRCUFFT()``, and ``CHKERRCURAND()`` respectively - Add ``PetscCallHIP()``, ``PetscCallHIPBLAS()``, and ``PetscCallHIPSOLVER()``. These supersede ``CHKERRHIP()``, ``CHKERRHIPBLAS()``, and ``CHKERRHIPSOLVER()`` respectively - Add ``PetscCallCEED()`` which supersedes ``CHKERRQ_CEED()`` - 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. .. rubric:: PetscViewer: - Add ``PetscViewerHDF5SetDefaultTimestepping()`` and ``PetscViewerHDF5SetDefaultTimestepping()`` to deal with HDF5 files missing the timestepping attribute .. rubric:: PetscDraw: - Add ``PetscDrawSPAddPointColorized()`` to change scatter point color based on third input value .. rubric:: AO: .. rubric:: IS: - ``ISLocalToGlobalMappingCreateSF()``: allow passing ``start = PETSC_DECIDE`` - Add ``ISGeneralSetIndicesFromMask()`` - Add ``ISSetLayout()`` - Add ``PetscSectionSymDistribute()`` - Add ``ISLocalToGlobalMappingGetType()`` .. rubric:: VecScatter / PetscSF: - 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 - Add ``PetscSFFetchAndOpWithMemTypeBegin()``, which is similar to ``PetscSFFetchAndOpBegin()``, but with explicit memory types - Change ``PetscSFSetGraph()`` and ``PetscSFSetGraphLayout()`` to sort leaves, remove ``const`` from ``ilocal`` and ``iremote`` arguments - Add ``PetscSFConcatenate()`` .. rubric:: PF: .. rubric:: Vec: - Change ``VecTaggerComputeBoxes()`` and ``VecTaggerComputeIS()`` to return a boolean whose value is true if the list was created - Add ``-vec_bind_below`` option for specifying size threshold below which GPU is not used for ``Vec`` operations - Add ``VecSetBindingPropagates()`` - Add ``VecGetBindingPropagates()`` - 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 - ``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 - Add ``VecGetArrayWriteAndMemType()`` and ``VecRestoreArrayWriteAndMemType()``, which are similar to the ``VecGetArrayReadAndMemType()`` family, but only write to the vector on device .. rubric:: PetscPartitioner: .. rubric:: Mat: - Add ``-mat_bind_below`` option for specifying size threshold below which GPU is not used for ``Mat`` operations - Add ``MatSetBindingPropagates()`` - Add ``MatGetBindingPropagates()`` - Add ``MatSeqAIJGetArrayWrite()`` and ``MatSeqAIJRestoreArrayWrite()`` to get write-access to the value array of ``MatSeqAIJ`` on CPU - Add ``MatCUSPARSESetUseCPUSolve()`` Use CPU solve with cuSparse for LU factorization that are on the CPU. - Change ``MatCreateIS()`` behavior when NULL is passed for the mappings. Now a NULL map implies matching local and global spaces - Add support of ``MatSetValuesCOO()`` and ``MatSetPreallocationCOO()`` for matrix type AIJKOKKOS. Additionally, for AIJKOKKOS, they support negative indices and remote entries - Add ``MatMultHermitianTransposeEqual()`` and ``MatMultHermitianTransposeAddEqual()`` - Add ``MatSetPreallocationCOOLocal()`` to set preallocation for matrices using a coordinate format of the entries with local indices - Change ``MatStructures`` enumeration to avoid spaces and match capitalization of other enumerations - Change size argument of ``MatSetPreallocationCOO()`` to ``PetscCount`` - Add ``MATORDERINGMETISND`` use METIS for nested dissection ordering of ``MatSeqAIJ``, with options ``nseps``, ``niter``, ``ufactor`` and ``pfactor`` under the common prefix ``-mat_ordering_metisnd_`` - Change options ``-matproduct__via`` to ``-mat_product_algorithm`` - Add ``-mat_superlu_dist_3d`` and ``-mat_superlu_dist_d `` to support using SuperLU_DIST's version 7.2 3d decomposition algorithms - ``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 - Add ``MatISGetLocalToGlobalMapping()`` to retrieve the logical map for assembled subdomain problem .. rubric:: PC: - 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 - 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`` - Add -pc_svd_monitor ::all option to print all the singular values instead of a maximum of ten .. rubric:: PCMG: - Add ``PCMGGetGridComplexity()`` to get operator and grid complexity of MG hierarchy - 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``. - 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. - Change ``PCGAMG`` to use ``PCGAMGSetUseSAEstEig()`` by default when the smoother uses Jacobi preconditioning. .. rubric:: KSP: - Outer most ``KSPSolve()`` will error if ``KSP_DIVERGED_ITS`` and ``KSPSetErrorIfNotConverged()`` is used - Add ``KSPQMRCGS`` to support qmrcgstab with right preconditioning - Add ``KSPGuessSetTolerance()`` - Add a new model option to ``KSPGuessFischerSetModel()`` .. rubric:: SNES: - Add ``SNESNewtonTRDCGetRhoFlag()``, ``SNESNewtonTRDCSetPreCheck()``, ``SNESNewtonTRDCGetPreCheck()``, ``SNESNewtonTRDCSetPostCheck()``, ``SNESNewtonTRDCGetPostCheck()`` .. rubric:: SNESLineSearch: .. rubric:: TS: - 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 - Change timestepper type ``TSDISCGRAD`` to include additional conservation terms based on formulation from [Gonzalez 1996] for Hamiltonian systems: - Add ``TSDiscGradIsGonzalez()`` to check flag for whether to use additional conservative terms in discrete gradient formulation - Add ``TSDiscGradUseGonzalez()`` to set discrete gradient formulation with or without additional conservative terms. Without flag, the discrete gradients timestepper is just backwards euler - Add ``TSRemoveTrajectory`` to destroy and remove the internal TSTrajectory object from TS - Change ``TSMonitorSPSwarmSolution()`` to have correct axes labels and bounds .. rubric:: Tao: - Add ``TaoGetGradient()``, ``TaoGetObjectiveAndGradient()`` and ``TaoGetHessian()`` - Deprecate ``TaoSetInitialVector()`` in favor of ``TaoSetSolution()`` - Deprecate ``TaoGetSolutionVector()`` in favor of ``TaoGetSolution()`` - Deprecate ``TaoGetGradientVector()`` in favor of ``TaoGetGradient()`` - Deprecate ``TaoSetObjectiveRoutine()`` in favor of ``TaoSetObjective()`` - Deprecate ``TaoSetGradientRoutine()`` in favor of ``TaoSetGradient()`` - Deprecate ``TaoSetObjectiveAndGradientRoutine()`` in favor of ``TaoSetObjectiveAndGradient()`` - Deprecate ``TaoSetHessianRoutine()`` in favor of ``TaoSetHessian()`` - Change ``TaoGetObjective()``. Use ``TaoGetSolutionStatus(tao,NULL,&fct,NULL,NULL,NULL,NULL)`` instead .. rubric:: DM/DA: - Add ``DMLabelGetNonEmptyStratumValuesIS()``, similar to ``DMLabelGetValueIS()`` but counts only nonempty strata - Add ``DMLabelCompare()`` for ``DMLabel`` comparison - Add ``DMCompareLabels()`` comparing ``DMLabel``\s of two ``DM``\s - ``DMCopyLabels()`` now takes DMCopyLabelsMode argument determining duplicity handling - Add ``-dm_bind_below`` option for specifying size threshold below which GPU is not used for ``Vec`` and ``Mat`` objects associated with a DM - Add ``DMCreateMassMatrixLumped()`` to support explicit timestepping, also add ``DMTSCreateRHSMassMatrix()``, ``DMTSCreateRHSMassMatrixLumped()``, and ``DMTSDestroyRHSMassMatrix()`` - Promote ``DMGetFirstLabelEntry()`` to public API and rename - Add bias vector argument to ``DMGetDefaultConstraints()`` and ``DMSetDefaultConstraints()``. Passing ``bias=NULL`` recovers prior behavior. - Change ``DMGetAuxiliaryVec()``, ``DMSetAuxiliaryVec()``, and ``DMGetAuxiliaryLabels()`` to take an equation part number .. rubric:: DMSwarm: - Add ``DMSwarmGetNumSpecies()`` and ``DMSwarmSetNumSpecies()`` to support PIC - Add ``DMSwarmComputeLocalSize()``, ``DMSwarmComputeLocalSizeFromOptions()``, ``DMSwarmInitializeCoordinates()``, ``DMSwarmInitializeVelocities()``, ``DMSwarmInitializeVelocitiesFromOptions()`` to assist initialization of PIC methods .. rubric:: DMPlex: - Add ``DMExtrude()`` which now the default extrusion - Change ``DMPlexExtrude()`` to use DMPlexTransform underneath - Add ``DMPlexTransformExtrudeSetNormalFunction()`` to allow computed normals - Add ``DMGetNaturalSF()`` and ``DMSetNaturalSF()`` - Change ``-dm_plex_csr_via_mat`` to ``-dm_plex_csr_alg`` which takes a DMPlexCSRAlgorithm name - Add public API for metric-based mesh adaptation: - Move ``DMPlexMetricCtx`` from public to private and give it to ``DMPlex`` - Add ``DMPlexMetricSetFromOptions()`` to assign values to ``DMPlexMetricCtx`` - Add ``DMPlexMetricSetIsotropic()`` for declaring whether a metric is isotropic - Add ``DMPlexMetricIsIsotropic()`` for determining whether a metric is isotropic - Add ``DMPlexMetricSetUniform()`` for declaring whether a metric is uniform - Add ``DMPlexMetricIsUniform()`` for determining whether a metric is uniform - Add ``DMPlexMetricSetRestrictAnisotropyFirst()`` for declaring whether anisotropy should be restricted before normalization - Add ``DMPlexMetricRestrictAnisotropyFirst()`` for determining whether anisotropy should be restricted before normalization - Add ``DMPlexMetricSetMinimumMagnitude()`` for specifying the minimum tolerated metric magnitude - Add ``DMPlexMetricGetMinimumMagnitude()`` for retrieving the minimum tolerated metric magnitude - Add ``DMPlexMetricSetMaximumMagnitude()`` for specifying the maximum tolerated metric magnitude - Add ``DMPlexMetricGetMaximumMagnitude()`` for retrieving the maximum tolerated metric magnitude - Add ``DMPlexMetricSetMaximumAnisotropy()`` for specifying the maximum tolerated metric anisostropy - Add ``DMPlexMetricGetMaximumAnisotropy()`` for retrieving the maximum tolerated metric anisotropy - Add ``DMPlexMetricSetTargetComplexity()`` for specifying the target metric complexity - Add ``DMPlexMetricGetTargetComplexity()`` for retrieving the target metric complexity - Add ``DMPlexMetricSetNormalizationOrder()`` for specifying the order of L-p normalization - Add ``DMPlexMetricGetNormalizationOrder()`` for retrieving the order of L-p normalization - Change ``DMPlexMetricCtx`` so that it is only instantiated when one of the above routines are called - Change ``DMPlexMetricEnforceSPD()`` to have more arguments: - control whether anisotropy is restricted - output the modified metric, rather than modifying the input - output the determinant - Change ``DMPlexMetricNormalize()`` to have another argument, for controlling whether anisotropy is restricted - 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`` - Add 2D and 3D mesh adaptation interface to Mmg and 3D mesh adaptation interface to ParMmg. Mmg/ParMmg specific changes: - Change ``DMPlexBuildFromCellListParallel()`` to have another argument, for the connectivity - Change ``DMPlexCreateFromCellListParallelPetsc()`` to have another argument, for the connectivity - Add ``DMPlexMetricSetVerbosity()`` for setting the verbosity of the metric-based mesh adaptation package - Add ``DMPlexMetricGetVerbosity()`` for getting the verbosity of the metric-based mesh adaptation package - Add ``DMPlexMetricSetNoInsertion()`` to turn off node insertion and deletion for (Par)Mmg - Add ``DMPlexMetricNoInsertion()`` to determine whether node insertion and deletion are turned off for (Par)Mmg - Add ``DMPlexMetricSetNoSwapping()`` to turn off facet swapping for (Par)Mmg - Add ``DMPlexMetricNoSwapping()`` to determine whether facet swapping is turned off for (Par)Mmg - Add ``DMPlexMetricSetNoMovement()`` to turn off node movement for (Par)Mmg - Add ``DMPlexMetricNoMovement()`` to determine whether node movement is turned off for (Par)Mmg - Add ``DMPlexMetricSetNoSurf()`` to turn off surface modification for (Par)Mmg - Add ``DMPlexMetricNoSurf()`` to determine whether surface modification is turned off for (Par)Mmg - Add ``DMPlexMetricSetGradationFactor()`` to set the metric gradation factor - Add ``DMPlexMetricGetGradationFactor()`` to get the metric gradation factor - Add ``DMPlexMetricSetHausdorffNumber()`` to set the metric Hausdorff number - Add ``DMPlexMetricGetHausdorffNumber()`` to get the metric Hausdorff number - Add ``DMPlexMetricSetNumIterations()`` to set the number of ParMmg adaptation iterations - Add ``DMPlexMetricGetNumIterations()`` to get the number of ParMmg adaptation iterations - Change ``DMPlexCoordinatesLoad()`` to take a ``PetscSF`` as argument - Change ``DMPlexLabelsLoad()`` to take the ``PetscSF`` argument and load in parallel - Change ``DMPlexCreateFromFile()`` to take the mesh name as argument - Change ``DMAdaptMetric`` so that it takes an additional argument for cell tags - Change ``DMTransformAdaptLabel`` so that it takes an additional argument for cell tags - Change ``DMGenerateRegister`` so that it registers routines that take an additional argument for cell tags - Change ``DMPlexFindVertices()`` to take ``Vec`` and ``IS`` arguments instead of arrays - Add ``DMPlexTSComputeRHSFunctionFEM()`` to support explicit timestepping - Newly created ``DMPlex`` will be distributed by default; this previously required ``-dm_distribute`` or explicit calls to ``DMPlexDistribute()`` - Add ``DMPlexDistributeGetDefault()`` and ``DMPlexDistributeSetDefault()`` to determine and set the default for ``DMPlex`` distribution - 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. - Add ``DMCreateFEDefault()`` as a convenience method for creating the right element on a mesh - Add ``DMPlexCreateReferenceCell()`` - Remove deprecated ``DMPlexCreateFromCellList()`` and ``DMPlexCreateFromCellListParallel()`` - Add ``DMSetMatrixPreallocateSkip()`` to save initialization time when ``MatSetPreallocationCOO()`` will be used. - Improve loading performance related to coordinate projection in common cases. - Add ``DMPlexGetOrdering1D()`` for 1D Plex problems - Add ``DMPlexComputeClementInterpolant()`` averaging operator .. rubric:: DMPlexLandau: - Add ``DMPlexLandauCreateVelocitySpace()`` Create DMComposite of DMPlex for Landau collision operator - Add ``DMPlexLandauDestroyVelocitySpace()`` Destroy DMComposite of DMPlex for Landau collision operator - Add ``DMPlexLandauIFunction()`` Landau collision operator - Add ``DMPlexLandauIJacobian()`` Landau collision operator .. rubric:: FE/FV: - Deprecate ``PetscSpacePolynomialGetSymmetric()`` and ``PetscSpacePolynomialSetSymmetric()``: symmetric polynomials were never supported and support is no longer planned - Remove ``PetscSpacePolynomialType`` enum and associated array of strings ``PetscSpacePolynomialTypes``: other polynomial spaces are now handled by other implementations of ``PetscSpace`` - Add ``PETSCSPACEPTRIMMED`` that implements trimmed polynomial spaces (also known as the spaces in Nedelec face / edge elements of the first kind) - Replace ``PetscDSGet/SetHybrid()`` with ``PetscDSGet/SetCohesive()`` - Add ``PetscDSIsCohesive()``, ``PetscDSGetNumCohesive()``, and ``PetscDSGetFieldOffsetCohesive()`` - Add argument to ``PetscFEIntegrateHybridJacobian()`` to indicate the face for the integration - Add ``PetscFECreateByCell()`` and ``PetscFECreateLagrangeByCell()`` to create FE spaces on specific cell types - Replace ``PetscDualSpaceCreateReferenceCell()`` with ``DMPlexCreateReferenceCell()`` - Add ``PetscDualSpaceEqual()`` and ``PetscQuadratureEqual()`` .. rubric:: DMNetwork: - ``DMNetworkAddComponent()`` now requires a valid component key for each call - Add ``DMNetworkSharedVertexGetInfo()`` .. rubric:: DMStag: .. rubric:: DT: - Add ``PetscDTPTrimmedEvalJet()`` to evaluate a stable basis for trimmed polynomials, and ``PetscDTPTrimmedSize()`` for the size of that space - Add ``PetscDSGetRHSResidual()`` and ``PetscDSSetRHSResidual()`` to support explicit timestepping - Add ``PetscDTTensorQuadratureCreate()`` to combine different quadratures, such as on a prism - Add ``PetscProbComputeKSStatistic()`` to apply the Kolmogorov-Smirnov test - Add probability distributions ``PetscPDFMaxwellBoltzmann1D()``, ``PetscCDFMaxwellBoltzmann1D()``, ``PetscPDFMaxwellBoltzmann2D()``, ``PetscCDFMaxwellBoltzmann2D()``, ``PetscPDFMaxwellBoltzmann3D()``, ``PetscCDFMaxwellBoltzmann3D()``, ``PetscPDFGaussian1D()``, ``PetscCDFGaussian1D()``, ``PetscPDFSampleGaussian1D()``, ``PetscPDFGaussian2D()``, ``PetscPDFSampleGaussian2D()``, ``PetscPDFConstant1D()``, ``PetscCDFConstant1D()`` .. rubric:: Fortran: .. rubric:: Logging: - Add ``PetscLogIsActive()`` to determine if logging is in progress or not