==============
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.
