# Changes: 2.3.0

```{rubric} General:
```

- The equivalent of building BOPT=g, BOPT=O versions for
  PETSC_ARCH=linux-gnu is now: config/configure.py [options]
  -PETSC_ARCH=linux-gnu config/configure.py [options]
  --with-debugging=0 -PETSC_ARCH=linux-gnu-opt
- Python bindings added to PETSc. To use, configure with:
  --with-python=1 ---with-shared=1 To build, use: 'make python'
  after building PETSc libraries. Example in
  src/snes/examples/tutorials/ex1.py
- Options database keys -trmalloc[\_xxx] are changed to -malloc[\_xxx]
- -get_resident_set_size and -trinfo are changed to -memory_info
- PetscTrValid() -> PetscMallocValidate(), PetscTrDebug() ->
  PetscMallocDebug()
- -trdebug -> -malloc_debug
- PetscGetResidentSetSize() -> PetscMemoryGetCurrentUsage(), added
  PetscMemoryGetMaximumUsage() and PetscMemorySetGetMaximumUsage()
- PetscTrSpace() -> PetscMallocGetCurrentUsage() and
  PetscMallocGetMaximumUsage()
- added PetscOptionsEnum() and PetscOptionsGetEnum()
- added PetscBag object for managing user created structs including
  initializing them and serializing them.
- removed PetscSetCommWorld(). Now you can directly assign to
  PETSC_COMM_WORLD before PetscInitialize().

```{rubric} Vec:
```

- Faster generation of VecScatter for many processes when indices
  are mostly sorted

- Changed BLAS-type interfaces to PETSc-style:

  - VecShift
  - VecScale
  - VecSet
  - VecSetRandom
  - VecAXPY
  - VecAXPBY
  - VecAYPX
  - VecMAXPY
  - VecWAXPY

- Changed order of arguments in pointwise routines:

  - VecPointwiseMult
  - VecPointwiseMax
  - VecPointwiseMin
  - VecPointwiseMaxAbs
  - VecPointwiseDivide

```{rubric} Mat:
```

- Changed MatConvert to require a reuse parameter to denote inplace
  conversion

- Added Cholesky and ICC support to SeqBAIJ

- Added the argument MatFactorInfo to MatLUFactorNumeric() and
  MatCholeskyFactorNumeric()

- Faster MatSetValues()

- Faster parallel-matrix vector products

- Changed MatCreate() to take only a communicator

- Added MatSetSize() to specify matrix sizes

- Changed BLAS-type interfaces to PETSc-style:

  - MatAXPY
  - MatAYPX
  - MatScale
  - MatShift

- Change MatZeroRows() and MatZeroRowsLocal() to use arrays, and
  added IS versions

```{rubric} PC:
```

- Added PCILUReorderForNonzeroDiagonal() and
  PCLUReorderForNonzeroDiagonal()
- Replace PCLUSetDamping(), PCILUSetDamping(),
  PCCholeskySetDamping() and PCICCSetDamping() by
  PCFactorSetShiftNonzero(). Change the option database keys
  -pc_lu_damping, -pc_ilu_damping, -pc_cholesky_damping and
  -pc_icc_damping to -pc_factor_shift_nonzero
- Replace PCLUSetShift(), PCILUSetShift(), PCCholeskySetShift() and
  PCICCSetShift() by PCFactorSetShiftPd(). Change the option
  database keys -pc_lu_shift, -pc_ilu_shift, -pc_cholesky_shift and
  -pc_icc_shift to -pc_factor_shfit_positive_definite
- PCMG: will automatically using the outer pmat operator to define
  the finest level operator if not user supplied
- PCMG: added MGUseGalerkin(), -pc_mg_galerkin option to have
  coarser grid matrices computed from the finest grid matrix
- PCMG: now does referencing counting on set vectors and
  restriction/interpolation matrices so user need not keep reference
  to free later
- PCMG: if user does not provide restriction the interpolation is
  used and vis versa
- PCMG: if user does not provide Vecs for each level, will
  automatically provide them
- All routines that began with MG now begin with PCMG
- Added PCShellSet/GetContext() and removed the context passed into
  PCSetApply() and PCSetApplyRichardson()

```{rubric} KSP:
```

- -ksp_cg_Hermitian and -ksp_cg_symmetric have been changed to
  -ksp_cg_type Hermitian or symmetric
- Changed options for -ksp_gmres_cgs_refinement_type from never or
  ifneeded or always to REFINE_NEVER or REFINE_IFNEEDED or
  REFINE_ALWAYS

```{rubric} config/configure.py:
```

```{rubric} SNES:
```

- Changed the name and calling sequence for SNESSetLineSearchCheck()
  to SNESLineSearchSetPostCheck() and added a
  SNESLineSearchSetPreCheck()

- Changed the names of all SNESxxxxLineSearchyyyy() to
  SNESLineSearchxxxxyyyy() per PETSc naming standard.

- Now allow a constant vector to be specified in SNESSolve()

- Removed the Vec argument from SNESSetUp()

- Corrected the order of function and context arguments in:

  - SNESGetFunction()
  - SNESGetJacobian()

```{rubric} TS:
```

```{rubric} DA:
```

- Added DAVecGet/RestoreArrayDOF() allowing indexing in the
  dimension of degrees of freedom at each point on the lattice.
- Faster DAGlobalToLocal() etc for dof > 1.

```{rubric} DMMG:
```

- Consolidated DMMG functionality into the new header file
  "petscdmmg.h".

```{rubric} SYS:
```

- PetscSetCommWorld() removed. [one can directly do PETSC_COMM_WORLD
  = comm - before PetscInitialize()]

```{rubric} Fortran:
```

```{rubric} ExternalPackages:
```

- ML support added.
