=============
Changes: 3.13
=============


.. rubric:: General:

-  Update ``make test`` to run the full test suite. Use
   ``make check`` to run the short test
-  Remove last PetscBool argument from PetscBinaryWrite() and
   PetscBinarySynchronizedWrite()
-  Change PetscLayoutFindOwner() and PetscLayoutFindOwnerIndex() to
   return a PetscMPIInt instead of a PetscInt
-  Support for Compaq F90 is removed along with supporting flags
   PETSC_HAVE_FORTRAN_STDCALL, PETSC_BLASLAPACK_STDCALL,
   HAVE_FORTRAN_MIXED_STR_ARG
-  Promote all example directories ``examples/tutorials/`` and
   ``examples/tests/`` to ``tutorials/`` and ``tests/`` respectively
-  Make title argument of PetscOptionsBegin() obligatory

.. rubric:: Configure/Build:

.. rubric:: IS:

-  Add ISSetInfo(): set local and global properties of an IS (whether
   the IS is sorted, unique, a permutation, an interval, or identity)
-  Add ISGetInfo(): query local and global properties of an IS

.. rubric:: PetscDraw:

.. rubric:: PetscSF:

-  Fix few bugs in PETSCSFWINDOW when using PETSCSF_WINDOW_SYNC_LOCK
   or PETSCSF_WINDOW_SYNC_ACTIVE synchronization types
-  Add window reusage for PETSCSFWINDOW and support for different
   creation flavor types. See PetscSFWindowFlavorType man page for
   details
-  Set default of -use_gpu_aware_mpi from false to true

.. rubric:: PF:

.. rubric:: Vec:

-  VecPinToCPU() is deprecated in favor of VecBindToCPU()
-  Add Vec{Set|Get}PinnedMemoryMin() and -vec_pinned_memory_min
   option. Note that VECCUDA now defaults to using pinned memory for
   host allocations

.. rubric:: VecScatter:

.. rubric:: PetscSection:

.. rubric:: PetscPartitioner:

-  PetscPartitionerPartition() does not longer gets a DM as input.
   Vertex weights can be specified through PetscSection
-  Add support for target partition weights for
   PETSCPARTITIONERSIMPLE, PETSCPARTITIONERPARMETIS and
   PETSCPARTITIONERPTSCOTCH

.. rubric:: Mat:

-  Improve the performance of MatConvert_AIJ_BAIJ by preallocating
   the Mat before dispatching to MatConvert_Basic
-  Change the behavior of MatConvert_AIJ_SBAIJ for block size greater
   than one, the block structure is now preserved (even for the
   diagonal entries)
-  Fix various bugs related with matrix conversions from Hermitian
   SBAIJ matrices with complex numbers
-  Add MatPropagateSymmetryOptions to propagate symmetry information
   from one matrix to another
-  Fix a bug in MATSUPERLU_DIST interface when MATMPIAIJ with
   commsize 1 is used
-  Add MATCHOLMOD support for block solves
-  --download-suitesparse now uses the official SuiteSparse
   repository
-  MatPinToCPU() is deprecated in favor of MatBindToCPU()
-  Fix MatAXPY for MATSHELL
-  MatAXPY(Y,0.0,X,DIFFERENT_NONZERO_PATTERN) no longer modifies the
   nonzero pattern of Y to include that of X
-  Add support of selective 64-bit MUMPS, i.e., the regular/default
   build of MUMPS. One should still build PETSc --with-64-bit-indices
   to handle matrices with >2G nonzeros
-  Add MatProductCreate(), MatProductCreateWithMat(),
   MatProductSetType(), MatProductSetAlgorithm(),
   MatProductSetFill(), MatProductSetFromOptions(),
   MatProductSymbolic(), MatProductNumeric(),
   MatProductReplaceMats(), MatProductClear()
-  Deprecate MatMatMultSymbolic(), MatMatMultNumeric()
-  Deprecate MatMatTransposeMultSymbolic(),
   MatMatTransposeMultNumeric()
-  Deprecate MatPtAPSymbolic(), MatPtAPNumeric()
-  Deprecate MatRARtSymbolic(), MatRARtNumeric()
-  Fix a deadlock with MATELEMENTAL; if one configures PETSc with
   Elemental *and* has PETSC_COMM_WORLD != MPI_COMM_WORLD, it is now
   one's responsability to explicitly call
   PetscElementalInitializePackage()/PetscElementalFinalizePackage()
   outside of PetscInitialize()/PetscFinalize().
   PetscElementalInitializePackage()/PetscElementalFinalizePackage()
   are collective on MPI_COMM_WORLD.

.. rubric:: PC:

-  Change the default behavior of PCASM and PCGASM to not
   automatically switch to PCASMType BASIC if the matrices are
   symmetric
-  Change the default behavior of PCCHOLESKY to use nested dissection
   ordering for AIJ matrix

.. rubric:: KSP:

-  Add KSPHPDDMGetDeflationSpace and KSPHPDDMSetDeflationSpace for
   recycling Krylov methods in KSPHPDDM

.. rubric:: SNES:

-  Deprecate ``-snes_test_jacobian_display`` and
   ``-snes_test_jacobian_display_threshold``. ``-snes_test_jacobian``
   accepts an optional threshold parameter (since v3.10) and
   ``-snes_test_jacobian_view`` should be used in favor of
   ``-snes_test_jacobian_display``

.. rubric:: SNESLineSearch:

-  Add SNESLineSearchGetType() in v3.13.1.

.. rubric:: TS:

.. rubric:: TAO:

-  TAOPDIPM: A new solver in TAO for general NLP problems

.. rubric:: DM/DA:

-  DMCopyLabels(): add two additional input flags
-  DMPlexDistribute(): fix a bug associated with vertex partition
   weights and overlapped meshes
-  DMPlexDistribute(): vertex partition weights are now computed by
   summing all the local section dofs in the transitive closure of
   each cell
-  Add PetscTabulation to hold function tabulation data
-  Add DMEnclosureType to describe relations between meshes
-  Add DMGetEnclosureRelation() and DMGetEnclosurePoint() to discover
   relations between meshes
-  Add DMPolytopeType to describe different cell constructions

.. rubric:: DMPlex:

-  DMPlexInterpolate() now works correctly for distributed DMPlex
-  The idea of hybrid and ghost cells has been removed from Plex in
   favor of cell type
-  Plex can now classify points by cell type, stored in a DMLabel.
   This is useful for operations that require more than topological
   data, such as mesh interpolation, geometric calculations, and is
   also used an index to avoid repeated topological queries
-  Add DMPlexSetCellType() and DMPlexCreateReferenceCellByType()
-  Distribution sorts strata by cell type.
-  Plex can now allow any number of cell types in a single mesh.
   Interpolation, refinement, and extraction of submeshes mixed
   meshes work smoothly. Both oriented and tensor-product prisms can
   be used in the same mesh
-  Cell refiners have been abstracted. Currently there are two
   (regular refinement, and conversion to hexes). The plan is to add
   more, such as local extrusion and conversion to simplices
-  Remove SimplexToTensor in favor of DM_REFINER_TO_BOX
-  DMForest now responds to DMPlexGetOverlap() and propagates its
   overlap to the underlying Plex
-  Add DMPlexGetSimplexOrBoxCells() to replace
   DMPlexGetInteriorCellStratum()
-  Add DMPolytopTypeGetDim(), DMPolyTopeTypeGetConeSize(),
   DMPolytopeTypeGetNumVertices()
-  Add DMLabelSetStratumBounds()
-  Add DMPlexOrientCell() which orients a single cell
-  Add DMPlexCompareOrientations() which compares the cone point
   order of a single cell with the given reference cone
-  Add DMPlexIsInterpolated() which finds out whether the plex is
   interpolated
-  Add DMPlexIsInterpolatedCollective() which finds out whether the
   plex is interpolated on all ranks
-  Add DMPlexIsDistributed() which finds out whether the plex is
   distributed

.. rubric:: DMNetwork:

-  Add DMNetworkSetComponentNumVariables(),
   DMNetworkGetComponentVariableOffset(), and
   DMNetworkGetComponentVariableGlobalOffset() to set number of
   variables for a component, and retrieve its local/global offsets.

.. rubric:: DT:

-  All tabulated data is now stored in PetscTabulation structures.
   This changes interfaces in PetscDS, PetscFE, and PetscFV
-  Rename DefaultTabulation to CellTabulation everywhere
-  PetscDTGaussJacobiQuadrature() is now truly Gauss-Jacobi
   quadrature. The quadrature for the simplex (without weight
   function) is now called PetscDTStroudConicalQuadrature()
-  Add PetscDTJacobiEval(), PetscDTGaussLobattoJacobiQuadrature()
-  Add PetscDTIndexToBary() and PetscDTBaryToIndex() for barycentric
   lattice calculations
-  Add PetscDTNodeType to enumerate methods of defining interpolation
   nodes
-  PetscDualSpace now has PetscDualSpaceSetFormDegree() and
   PetscDualSpaceGetFormDegree() for governing functional
   pushforward/pullback behavior
-  PETSCDUALSPACELAGRANGE now has PetscDualSpaceGetTrimmed() and
   PetscDualSpaceSetTrimmed() for creating degrees of freedom for
   trimmed polynomial spaces
-  PETSCDUALSPACELAGRANGE now has PetscDualSpaceGetNodeType() and
   PetscDualSpaceSetNodType() for controlling the placement of
   interpolation nodes
-  PETSCDUALSPACEBDM is no longer a standalone type of
   PetscDualSpace: it is now a constructor alias for
   PETSCDUALSPACELAGRANGE

.. rubric:: PetscViewer:

-  Remove last PetscBool argument from PetscViewerBinaryWrite()
-  Add "fieldnum" argument to PetscViewerVTKAddField() to indicate
   only one field of the vector should be viewed

.. rubric:: SYS:

-  Rename PetscSignalSegvCheckPointer() to
   PetscSignalSegvCheckPointerOrMpi()
-  Extend -info option controlling PetscInfo(). It now takes takes
   optional arguments
   ``-info [filename][:[~]list,of,classnames[:[~]self]]``. See
   PetscInfo() manpage
-  Add new API to control PetscInfo() programatically:

   -  Add PetscInfoEnabled() - Indicate whether a given PETSc class
      is allowed in PetscInfo()
   -  Add PetscInfoSetFile() - Set output destination of PetscInfo()
   -  Add PetscInfoGetFile() - Get output destination of PetscInfo()
   -  Add PetscInfoSetClasses() - Sets the classes which PetscInfo()
      is filtered for/against
   -  Add PetscInfoGetClass() - Indicates whether the provided
      classname is marked as a filter in PetscInfo() as set by
      PetscInfoSetClasses()
   -  Add PetscInfoProcessClass() - Activates or deactivates a class
      based on the filtering status of PetscInfo()
   -  Add PetscInfoGetInfo() - Returns the current state of several
      indicator flags for PetscInfo()
   -  Add PetscInfoSetFilterCommSelf() - Sets PetscInfoCommFlag enum
      to control communicator size filtering for PetscInfo()
   -  Add PetscInfoDestroy() - Destroys and resets internal
      PetscInfo() filter options
   -  Change PetscInfoAllow() to only activate/deactivate
      PetscInfo(), file setting is now handled separately by
      PetscInfoSetFile()

-  Add PetscSubcommGetParent() - Gets the communicator that was used
   to create the PetscSubcomm
-  Add PetscSubcommGetContiguousParent() - Gets a communicator that
   that is a duplicate of the parent but has the ranks reordered by
   the order they are in the children
-  Add PetscSubcommGetChild() - Gets the communicator created by the
   PetscSubcomm
-  Change the default option of -build_twosided from ibarrier to
   allreduce for communicators with no more than 1024 ranks

.. rubric:: AO:

.. rubric:: Sieve:

.. rubric:: Fortran:
