============= Changes: 3.22 ============= .. 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 .. rubric:: General: - Add ``-mpiuni-allow-multiprocess-launch`` to allow mpiexec to launch multiple indendent MPI-Uni jobs. Previously a sanity check error message was always produced .. rubric:: Configure/Build: - Add ``--with-openmp-kernels`` - Update to work with python-3.13 - Change ``MPIU_Allreduce()`` to always returns an MPI error code that should be checked with ``PetscCallMPI()`` - Add ``PetscCallReturnMPI()``, ``PetscCallMPIReturnMPI()``, and ``PetscCheckReturnMPI()`` to check for in PETSc provided MPI callbacks .. rubric:: Sys: - Add ``PetscPragmaUseOMPKernels`` - Deprecate ``PetscOptionsRestoreViewer()`` in favor of ``PetscViewerDestroy()`` - Deprecate ``PetscOptionsGetViewer()`` and ``PetscOptionsGetViewers()`` in favor of ``PetscOptionsCreateViewer()`` and ``PetscOptionsCreateViewers()`` - Deprecate ``PetscOptionsPushGetViewerOff()``, ``PetscOptionsPopGetViewerOff()``, and ``PetscOptionsGetViewerOff()`` in favor of ``PetscOptionsPushCreateViewerOff()``, ``PetscOptionsPopCreateViewerOff()``, and ``PetscOptionsGetCreateViewerOff()`` - Add ``PetscObjectContainerCompose()`` and ``PetscObjectContainerQuery()`` - Add ``size_t`` argument to ``PetscMPIErrorString()`` - Add ``PetscCallExternalAbort()`` for calling external library functions from functions not returning ``PetscErrorCode`` - Add ``PetscRandomSetOptionsPrefix()`` - Add ``PetscOptionsGetBool3()`` to get a ternary logical value from a command line option .. rubric:: Event Logging: .. rubric:: PetscViewer: - Add ``PetscViewerASCIIStdoutSetFileUnit()`` - Add ``PetscShmgetAllocateArrayScalar()``, ``PetscShmgetDeallocateArrayScalar()``, ``PetscShmgetAllocateArrayInt()``, and ``PetscShmgetDeallocateArrayInt()`` for Fortran .. rubric:: PetscDraw: .. rubric:: AO: .. rubric:: IS: .. rubric:: VecScatter / PetscSF: - Add ``PetscSFRegisterPersistent()`` and ``PetscSFDeregisterPersistent()`` for safe optimization of persistent communication .. rubric:: PF: .. rubric:: Vec: - The ``IS`` passed to ``VecISAXPY()`` and ``VecISCopy()``. ``VecISSet()`` and ``VecISShift()`` must have the same communicator of the vectors used - Make ``VecLock`` API active in optimized mode - ``VecNestSetSubVec()`` and ``VecNestSetSubVecs()`` now take references to input vectors rather than creating duplicates - Deprecate ``VecSetInf()`` with ``VecFlag()`` .. rubric:: PetscSection: .. rubric:: PetscPartitioner: .. rubric:: Mat: - Change ``MatProductSetFill()`` to support ``PETSC_DETERMINE`` and ``PETSC_CURRENT``. ``MatMatMult()`` and its friends and relations now accept ``PETSC_DETERMINE`` and ``PETSC_CURRENT`` in the ``fill`` argument. ``PETSC_DEFAULT`` is deprecated for those functions - Change the default ``MatType`` of the output ``Mat`` of ``MatSchurComplementComputeExplicitOperator()`` to be ``MATDENSE``. It may be changed from the command line, e.g., ``-fieldsplit_1_explicit_operator_mat_type aij`` - Add ``MATOP_GET_BLOCK_DIAGONAL`` and ``MATOP_GET_VBLOCK_DIAGONAL`` to set methods returning the diagonal point blocks of a matrix .. rubric:: MatCoarsen: .. rubric:: PC: - Add support in ``PCFieldSplitSetFields()`` including with ``-pc_fieldsplit_%d_fields fields`` for ``MATNEST``, making it possible to utilize multiple levels of ``PCFIELDSPLIT`` with ``MATNEST`` from the command line - Add ``PCCompositeSpecialSetAlphaMat()`` API to use a matrix other than the identity in preconditioners based on an alternating direction iteration, e.g., setting :math:`M` for :math:`P = (A + alpha M) M^{-1} (alpha M + B)` - Reuse the result of :math:`T = A_{00}^-1 A_{01}` in ``PCApply_FieldSplit_Schur`` with ``-pc_fieldsplit_schur_fact_type full`` - Change the option database keys for coarsening for ``PCGAMG`` to use the prefix ``-pc_gamg_``, for example ``-pc_gamg_mat_coarsen_type`` - Add ``PCGAMGSetGraphSymmetrize()`` and ``-pc_gamg_graph_symmetrize`` to control symmetrization when coarsening the graph - Add ``-pc_hypre_type ilu`` with ``-pc_hypre_ilu_type``, ``-pc_hypre_ilu_iterative_setup_type``, ``-pc_hypre_ilu_iterative_setup_maxiter``, ``-pc_hypre_ilu_iterative_setup_tolerance``, ``-pc_hypre_ilu_print_level``, ``-pc_hypre_ilu_logging``, ``-pc_hypre_ilu_level``, ``-pc_hypre_ilu_max_nnz_per_row``, ``-pc_hypre_ilu_tol``, ``-pc_hypre_ilu_maxiter``, ``-pc_hypre_ilu_drop_threshold``, ``-pc_hypre_ilu_tri_solve``, ``-pc_hypre_ilu_lower_jacobi_iters``, ``-pc_hypre_ilu_upper_jacobi_iters``, and ``-pc_hypre_ilu_local_reordering`` - Improve ``-pc_type boomeramg`` with ``-pc_hypre_boomeramg_smooth_num_sweeps``, ``-pc_hypre_boomeramg_ilu_type``, ``-pc_hypre_boomeramg_ilu_iterative_setup_type``, ``-pc_hypre_boomeramg_ilu_iterative_setup_option``, ``-pc_hypre_boomeramg_ilu_iterative_setup_maxiter``, ``-pc_hypre_boomeramg_ilu_iterative_setup_tolerance``, ``-pc_hypre_boomeramg_ilu_print_level``, ``-pc_hypre_boomeramg_ilu_logging``, ``-pc_hypre_boomeramg_ilu_level``, ``-pc_hypre_boomeramg_ilu_max_nnz_per_row``, ``-pc_hypre_boomeramg_ilu_maxiter``, ``-pc_hypre_boomeramg_ilu_drop_tol``, ``-pc_hypre_boomeramg_ilu_tri_solve``, ``-pc_hypre_boomeramg_ilu_lower_jacobi_iters``, ``-pc_hypre_boomeramg_ilu_upper_jacobi_iters``, and ``-pc_hypre_boomeramg_ilu_local_reordering`` .. rubric:: KSP: - Add support for ``PETSC_DETERMINE`` as an argument to ``KSPSetTolerances()`` to set the parameter back to its initial value when the object's type was set - Deprecate ``PETSC_DEFAULT`` in favor of ``PETSC_CURRENT`` for ``KSPSetTolerances()`` .. rubric:: SNES: - Add support for ``PETSC_DETERMINE`` as an argument to ``SNESSetTolerances()`` to set the parameter back to its initial value when the object's type was set - Deprecate ``PETSC_DEFAULT`` in favor of ``PETSC_CURRENT`` for ``SNESSetTolerances()`` - Add ``DMAdaptorMonitor()``, ``DMAdaptorMonitorSet()``, ``DMAdaptorMonitorCancel()``, and ``DMAdaptorMonitorSetFromOptions()`` - Add ``DMAdaptorMonitorSize()``, ``DMAdaptorMonitorError()``, ``DMAdaptorMonitorErrorDraw()``, ``DMAdaptorMonitorErrorDrawLGCreate()``, and ``DMAdaptorMonitorErrorDrawLG()`` - Add ``DMAdaptorMonitorRegister()``, ``DMAdaptorMonitorRegisterAll()``, and ``DMAdaptorMonitorRegisterDestroy()`` - Add ``DMAdaptorGetCriterion()`` and ``DMAdaptorSetCriterion()`` - Add ``DMAdaptorSetOptionsPrefix()`` - Add Newton's method with arc length continuation: ``SNESNEWTONAL`` with ``SNESNewtonALSetFunction()``, ``SNESNewtonALGetFunction()``, ``SNESNewtonALComputeFunction()``, ``SNESNewtonALGetLoadParameter()``, and ``SNESNewtonALSetCorrectionType()`` - Add ``SNESNewtonTRSetTolerances()`` and ``SNESNewtonTRSetUpdateParameters()`` to programmatically set trust region parameters - Deprecate ``SNESSetTrustRegionTolerance()`` in favor of ``SNESNewtonTRSetTolerances()`` - Add ``SNESResetCounters()`` to reset counters for linear iterations and function evaluations .. rubric:: SNESLineSearch: .. rubric:: TS: - Add Rosenbrock-W methods from :cite:`rang2015improved` with :math:`B_{PR}` stability: ``TSROSWR34PRW``, ``TSROSWR3PRL2``, ``TSROSWRODASPR``, and ``TSROSWRODASPR2`` - Add support for ``PETSC_DETERMINE`` as an argument to ``TSSetTolerances()`` to set the parameter back to its initial value when the object's type was set - Deprecate ``PETSC_DEFAULT`` in favor of ``PETSC_CURRENT`` for ``TSSetTolerances()`` - Add support for ``PETSC_DETERMINE`` as an argument to ``TSSetMaxSteps()`` and ``TSSetMaxTime()`` - Deprecate ``PETSC_DEFAULT`` in favor of ``PETSC_CURRENT`` for ``TSAdaptSetSafety()`` - Deprecate ``PETSC_DEFAULT`` in favor of ``PETSC_CURRENT`` for ``TSAdaptSetClip()`` - Deprecate ``PETSC_DEFAULT`` in favor of ``PETSC_CURRENT`` for ``TSAdaptSetStepLimits()`` - Add ``TSGetStepResize()`` - Add ``-ts_monitor_solution_vtk_interval`` to control the interval for dumping files - Add a new ARKIMEX solver for fast-slow systems that are partitioned component-wise and additively at the same time - Add ``TSRHSSplitSetIFunction()``, ``TSRHSSplitSetIJacobian()``, ``TSRHSSplitSetSNES()``, ``TSRHSSplitGetSNES()``, ``TSARKIMEXSetFastSlowSplit()``, and ``TSARKIMEXGetFastSlowSplit()`` to support the new solver .. rubric:: TAO: - Add support for ``PETSC_DETERMINE`` as an argument to ``TaoSetTolerances()`` and ``TaoSetConstraintTolerances()`` to set the parameter back to its initial value when the object's type was set - Deprecate ``PETSC_DEFAULT`` in favor of ``PETSC_CURRENT`` for ``TaoSetTolerances()`` and ``TaoSetConstraintTolerances()`` .. rubric:: DM/DA: - Add ``DMGetSparseLocalize()`` and ``DMSetSparseLocalize()`` - Add ``DMGeomModelRegister()``, ``DMGeomModelRegisterAll()``, ``DMGeomModelRegisterDestroy()``, ``DMSnapToGeomModel()``, and ``DMSetSnapToGeomModel()`` to support registering geometric models - Add ``DMGetOutputSequenceLength()`` - Add an additional return vector to ``DMCreateMassMatrixLumped()`` to retrieve the local mass lumping - Add ``DMPlexMigrateGlobalToNaturalSF()`` modifies the NaturalSF to map from the SF's old global section to the new global section .. rubric:: DMSwarm: .. rubric:: DMPlex: - Add ``DMLabelGetValueBounds()`` - Add ``DMPlexOrientLabel()`` - Add an argument to ``DMPlexLabelCohesiveComplete()`` in order to change behavior at surface boundary - Remove ``DMPlexSnapToGeomModel()`` - Add refinement argument to ``DMPlexCreateHexCylinderMesh()`` - Now ``DMPlexComputeBdIntegral()`` takes one function per field - Add ``DMPlexCreateEdgeNumbering()`` - Add ``DMPlexComputeL2FluxDiffVec()`` and ``DMPlexComputeL2FluxDiffVecLocal()`` - Add ``DMAdaptorSetType()``, ``DMAdaptorGetType()``, ``DMAdaptorRegister()``, ``DMAdaptorRegisterAll()``, and ``DMAdaptorRegisterDestroy()`` - Add ``DMAdaptorGetMixedSetupFunction()`` and ``DMAdaptorSetMixedSetupFunction()`` - Add ``DMPlexCreateCellNumbering()`` - Add ``DMPlexBuildFromCellSectionParallel()`` and ``DMPlexCreateFromCellSectionParallel()`` - Add ``-dm_plex_box_label`` to add "Face Sets" label with current "box" conventions - Add "Face Sets" label to simplex meshes using current "box" conventions - Update ``PetscViewerExodusII`` object to cache variable names for faster and more robust look-ups - Add ``PetscViewerExodusIISetNodalVariable()``, ``PetscViewerExodusIISetZonalVariable()``, ``PetscViewerExodusIIGetNodalVariable()``, and ``PetscViewerExodusIIGetZonalVariable()`` to set or get the number of variables in a file - Add ``PetscViewerExodusIISetNodalVariableName()``, ``PetscViewerExodusIISetZonalVariableName()``, ``PetscViewerExodusIIGetNodalVariableName()``, and ``PetscViewerExodusIIGetZonalVariableName()`` to set or get a single variable name - Add ``PetscViewerExodusIISetNodalVariablesNames()``, ``PetscViewerExodusIISetZonalVariablesNames()``, ``PetscViewerExodusIIGetNodalVariablesNames()``, and ``PetscViewerExodusIIGetZonalVariablesNames()`` to set or get all variable names at the same time (not available in Fortran) - Add degree bounds to ``DMCopyFields()``, ``DMCopyDS()``, ``PetscDSCopy()``, and ``PetscDSSelectDiscretizations()`` - Add ``PetscFELimitDegree()`` - Add localizationHeight and sparseLocalize arguments to ``DMPlexCreateBoxMesh()`` for coordinate localization on periodic meshes - Add parallel CGNS reader, enabled by ``-dm_plex_cgns_parallel`` - Add CGNS function for ``VecLoad()`` of solutions in parallel (must be run with ``-dm_plex_cgns_parallel``) - Add ``PetscViewerCGNSOpen()`` convenience function - Add ``PetscViewerCGNSGetSolutionTime()``, ``PetscViewerCGNSGetSolutionName()``, ``PetscViewerCGNSSetSolutionIndex()``, and ``PetscViewerCGNSGetSolutionIndex()`` - Add ``DMPlexGetDepthStratumGlobalSize()`` .. rubric:: FE/FV: .. rubric:: DMNetwork: .. rubric:: DMStag: .. rubric:: DT: - Add ``PetscDSSetIntegrationParameters()`` and ``PetscDSSetCellParameters()`` .. rubric:: Fortran: - Add ``PETSC_NULL_ENUM`` to be used instead of ``PETSC_NULL_INTEGER`` when a pointer to an ``enum`` is expected in a PETSc function call - Add ``PETSC_NULL_INTEGER_ARRAY``, ``PETSC_NULL_SCALAR_ARRAY``, and ``PETSC_NULL_REAL_ARRAY`` for use instead of ``PETSC_NULL_INTEGER``, ``PETSC_NULL_SCALAR``, and ``PETSC_NULL_REAL`` when an array is expected in a PETSc function call - Add automatically generated interface definitions for most PETSc functions to detect illegal usage at compile time - Add ``PetscObjectIsNull()`` for users to check if a PETSc object is ``NULL`` - Change the PETSc Fortran API so that non-array values, ``v``, passed to PETSc routines expecting arrays must be cast with ``[v]`` in the calling sequence