| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 
 | # 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
 |