# Changes: 3.6

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

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]

IS:

PetscDraw:

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

PF:

Vec:

VecScatter:

PetscSection:

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()

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()

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

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

SNESLineSearch:

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.

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)

DMPlex:

- Can now redistribute parallel meshes

- Can now increase the overlap of parallel meshes

- Added new mesh formats, Fluent CAS and Gmsh

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 if it is of size 1 use PetscViewerHDF5SetBaseDimension2() or -viewer_hdf5_base_dimension2 true

SYS:

- PetscOptionsHead() now takes a PetscOptions argument.

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

AO:

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