# 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