============
Changes: 3.6
============


.. rubric:: General:

-  User makefiles must be updated. You must change the lines

   -  include ${PETSC_DIR}/conf/variables and
   -  include ${PETSC_DIR}/conf/rules

   to

   -  include ${PETSC_DIR}/lib/petsc/conf/variables and
   -  include ${PETSC_DIR}/lib/petsc/conf/rules

-  PetscOptionsBool() no longer sets the value of the boolean based
   on the value passed in
-  Script for running MPIUni jobs is now bin/petsc-mpiexec.uni
-  Removed all threadcomm support including --with-pthreadclasses and
   --with-openmpclasses configure arguments
-  Updated MUMPS version to 5.0.0 - and updated metis to 5.1.0,
   parmetis to 4.0.3-p1 - in sync with MUMPS.
-  Updated to hypre-2.10.0b, scotch_6.0.3, Elemental-0.85

.. rubric:: Configure/Build:

-  Add toplevel makefile targets *clean* and *distclean*. Target
   *clean* deletes petsc libraries built by makefile target *all*.
   Target *distclean* deletes all build files created by *configure*
   and [*make all*]. Target *clean* in example directories continues
   to work as before [deletes object files and executables]

.. rubric:: IS:

.. rubric:: PetscDraw:

-  PetscDrawBoxedString() changed to PetscDrawStringBoxed() added
   PetscDrawBar object for drawing bar graphs added
   PetscDrawStringCentered()

.. rubric:: PF:

.. rubric:: Vec:

.. rubric:: VecScatter:

.. rubric:: PetscSection:

.. rubric:: Mat:

-  MatGetVecs() replaced with MatCreateVecs() because it actually
   does create the Vecs that need to be destroyed
-  MatCreateMPIAIJConcatenateSeqAIJ and
   MatCreateMPIBAIJConcatenateSeqBAIJ replaced with
   MatCreateMPIMatConcatenateSeqMat
-  MatGetRedundantMatrix() replaced with MatCreateRedundantMatrix()
-  Added support for MUMPS sequential solver in Schur complement mode
-  MatGetSubMatricesMPI() will extract parallel submatrices on
   subcommunicators of the supplied IS objects. Unsorted, but not
   repeated indices are okay.
-  Removed MatMFFDAddNullSpace() just use MatSetNullSpace()

.. rubric:: PC:

-  Removed -pc_hypre_type euclid due to bit-rot
-  Upgraded to SuiteSparse 4.4.1; Cholmod supports using GPUs
   (developer repository only feature) --with-cuda
   --download-suitesparse-gpu --with-64-bit-indices;
   -mat_cholmod_useGPU 1 or 0; 1 by default when configured for it
-  Upgraded to Superlu_DIST 4.0; Superlu_DIST supports using GPUs
   (developer repository only feature) --with-cuda --with-openmp
   --download-superlu_dist-gpu (developer repository only feature)
   --with-64-bit-indices -mat_cholmod_useGPU 1 or 0; 1 by default
   when configured for it
-  Added PCBDDCSetChangeOfBasisMat for user defined change of basis
-  PCBDDC: added adaptive selection of constraints: it is available
   by command line options
-  PCJacobiSetUseAbs() now takes a PetscBool argument allowing
   toggling the option
-  PCJacobiSetUseRowMax() and PCJacobiSetUseRowSum() have been merged
   into PCJacobiSetType()
-  PCFactorSetUseInplace() now takes a PetscBool argument. Added
   PCFactorGetUseInplace()
-  PCFactorSetAllowDiagonalFill() now takes a PetscBool argument.
   Added PCFactorGetAllowDiagonalFill()
-  PCEisenstatNoDiagonalScaling() changed to
   PCEisenstatSetNoDiagonalScaling() and takes a boolean
-  Added Interface to AMS solver from HYPRE for Nedelec
   discretizations (-pc_hypre_type ams)
-  Added Interface to ADS solver from HYPRE for Raviart-Thomas
   discretizations (-pc_hypre_type ads)
-  Contributed MKL PARDISO interface providing PCCholesky support.
   Useable with: -pc_type cholesky -mat_type sbaij
   -pc_factor_mat_solver_package mkl_pardiso
-  PCGASMSetTotalSubdomains() can now create multirank subdomains if
   their number is less than comm size.
-  PCGAMGSetReuseProl() is changed to PCGAMGSetReuseInterpolation()

.. rubric:: KSP:

-  Removed KSPSetNullSpace() always use MatSetNullSpace() provided to
   the FIRST matrix argument to KSPSetOperators(), or
   SNESSetJacobian(), or TSSetIJacobian()
-  Added MatSetTransposeNullSpace() to indicate the null space of the
   transpose operator
-  Removed KSPSPECEST since its functionality is replaced by the
   esteig functionality within KSPChebyshev
-  Unified KSPChebyshev routines that work with estimating
   eigenvalues with the prefix name KSPChebyshevEstEig... For example
   KSPChebyshevSetEstimateEigenvalues() is now
   KSPChebyshevEstEigSet() and
   KSPChebyshevSetEstimateEigenvaluesRandom() is now
   KSPChebyshevEstEigSetRandom() similarly
   -ksp_chebyshev_estimate_eigenvalues_random is
   -ksp_chebyshev_esteig_random. The previous for the (GMRES) KSP
   used to estimate the eigenvalues is now esteig\_ not est\_
-  KSPGetVecs() replaced with KSPCreateVecs() because it actually
   does create the Vecs that need to be destroyed

.. rubric:: SNES:

-  Added KSPMonitorSNES() with command line option -ksp_monitor_snes
   and -ksp_monitor_snes_lg to monitor SNES residual norm at each
   linear iteration SNESMonitorVI() becomes SNESVIMonitor()
-  Added SNESVIMonitorResidual() and -snes_vi_monitor_residual

.. rubric:: SNESLineSearch:

.. rubric:: TS:

-  The postevent routine set with TSSetEventMonitor() now takes an
   additional PetscBool argument 'forwardsolve'. The forwardsolve
   flag is used to distinguish between a TS forward solve
   (forwardsolve = 1) and adjoint solve (forwardsolve = 0).
-  Added TSAdjointSolve() for adjoint sensitivity analysis
-  EquationType is introduced to distinguish between ODEs and DAEs.
   It needs to be set accordingly before solving the problem through
   TSSetEquationType(). It currently only affects arkimex methods.

.. rubric:: DM/DA:

-  DMCreateInjection() now returns a Mat, rather than a VecScatter
-  The MatType argument is removed from DMCreateMatrix(), you can use
   DMSetMatType() to indicate the type you want used with a DM,
   defaults to MATAIJ
-  You can now use DMDASetAOType() to indicate the type of AO you
   want used with a DMDA (defaults to AOBASIC)

.. rubric:: DMPlex:

-  Can now redistribute parallel meshes
-  Can now increase the overlap of parallel meshes
-  Added new mesh formats, Fluent CAS and Gmsh

.. rubric:: PetscViewer:

-  HDF5 viewer will save Vecs and DMDA Vecs with a dimension of 1 if
   the bs/dof of the vector is 1. To always include this dimension as
   a specific dimension in the HDF5 file even if it is of size 1
   use PetscViewerHDF5SetBaseDimension2() or
   -viewer_hdf5_base_dimension2 true

.. rubric:: SYS:

-  PetscOptionsHead() now takes a PetscOptions argument.
-  PetscObjectAddOptionsHandler() now takes an event handler that
   includes a PetscOptions argument.
   PetscObjectProcessOptionsHandlers() requires this as input.

.. rubric:: AO:

.. rubric:: Fortran:

-  Fortran include files are now in include/petsc/finclude instead of
   include/finclude. Thus replace uses of #include "finclude/xxx.h"
   with #include "petsc/finclude/xxx.h". Reason for change: to
   namespace the finclude directory with PETSc for --prefix installs
   of PETSc and for packaging systems
