Changes: 3.1#
General:
- PetscOptionsHasName() and PetscOptionsName() now return PETSC_TRUE if the options are set to any value, include false or 0. You may need to change some of your PetscOptionsXXName() to PetscOptionsXXTruth() 
- Added configure option –with-single-library that causes all PETSc code to be compiled into the single library libpetsc.XXX 
- PetscMap changed to PetscLayout and PetscMapInitialize() changed to PetscLayoutCreate() and it now allocates the space of the object. 
- In makefiles include ${PETSC_DIR}/conf/base is replaced with two lines include ${PETSC_DIR}/conf/variables and include ${PETSC_DIR}/conf/rules 
- BlockSolve95 interface is removed 
- petsc.h and petscdef.h are replaced with petscsys.h and petscsysdef.h; while petsc.h now includes ALL PETSc include files. 
- win32fe [used for MS/Intel compiler builds on windows] now defaults to ‘noautodetect’ mode. However the previous behavior can be restored by using the option ‘–autodetect’. For eg: ‘–withcc=win32fe cl –autodetect’. This works primarily with old VC6/VC7/Intel8 etc compilers anyway. 
Logging:
- PetscLogFlops(int) ->PetscLogFlops(PetscLogDouble). [check fortran usage] 
config/configure.py:
- All ./configure options that state known values, so that ./configure doesn’t try to test for them. Often used with the –with-batch option now begin with –known- 
IS:
Vec:
VecScatter:
Mat:
- MatGetSubMatrix: - Now takes a parallel IS for the columns, the csize argument has been dropped. The local part of this IS corresponds to the local columns of the new submatrix. 
 
- MatGetSubMatrixRaw - Removed, use MatGetSubMatrix 
 
- Changed name of option MAT_KEEP_ZEROED_ROWS to MAT_KEEP_NONZERO_PATTERN to more clearly indicate what it does. 
- Added MAT_SHARE_NONZERO_PATTERN as option for MatDuplicate() this allows several matrices to share the same data structures for the nonzeros and thus save memory. 
- The function provided to MatNullSpaceSetFunction() now takes a MatNullSpace() as the first argument. Added Fortran interface for this function as well. 
- Removed MatPBRelax() merged its functionality into MatRelax() 
- Changed MatRelax() to MatSOR() to match MatSORType() and PCSOR 
- Removed requirement that rows be sorted in MatCreateMPIAIJWithArrays() and MatMPIAIJSetPreallocationCSR(). 
- Changed MATOP_DIAGONAL_SHIFT to MATOP_DIAGONAL_SET to match function name MatDiagonalSet(). 
- MATMPIROWBS i.e BlockSolve95 interface is now removed. 
PC:
- PCShell All user-provided functions now have PC as first argument instead of the application context. Users should obtain the context with PCShellGetContext, similar to MatShell. 
- Removed -pc_asm_in_place and PCASMSetUseInPlace() since the option made no sense 
- PCApplyRichardson() has an additional argument indicating if the initial guess being passed in is nonzero. SOR will save some work if it is zero. 
- MatSetBlockSize() is no longer an error for BAIJ matrices, but the argument must be the same as when the matrix was preallocated. 
- PCFactorSetPivoting() renamed to PCFactorSetColumnPivot() 
- Replaced PCFactorSetShiftNonzero(), PCFactorSetShiftPd() and PCFactorSetShiftInBlocks() with PCFactorSetShiftType() and PCFactorSetShiftAmount(). Replaced -pc_factor_shift_nonzero, -pc_factor_shift_positive_definite and -pc_factor_shift_in_blocks with -pc_factor_shift_type <shifttype> and -pc_factor_shift_amount <shiftamount>. 
- Added PCREDISTRIBUTE for load balancing and removal of Dirichlet degrees of freedom. 
KSP:
- Added KSPCGUseSingleReduction() -ksp_cg_single_reduction; recommended for use with many processors when VecDot() starts to take a large amount of time, Requires 2 extra work vectors. 
- Added KSPGCR (Generalized Conjugate Residuals), a flexible method (like FGMRES) providing inexpensive residuals. 
SNES:
TS:
- Rename TS_EULER, TS_BEULER, etc like TSEULER for consistency with other packages. 
- Add Theta and General Linear time integrators (TSTHETA, TSGL). These can be used for solving differential algebraic equations (DAE) using the new TSSetIFunction() and TSSetIJacobian(). 
- Add TSSSP which implements optimal strong stability preserving time integrators of order 2, 3, and 4 using a low-storage explicit Runge-Kutta scheme. 
- Change TSSetPreStep() and TSSetPostStep() to run before and after each step instead of before and after each solve. 
DA:
- DAGetColoring() now takes a MatType as an additional argument, should be MATAIJ or MATBAIJ 
- Added DARefineHierarchy(), DMMG now always uses DMRefineHierarchy to generate refined grids. Added options -da_refine_hierarchy_[xyz] to allow semi-coarsening at some levels of the hierarchy. 
- DASetCoordinates() now references the vector, so the user should release their reference by calling VecDestroy(). 
DMMG:
PetscViewer:
SYS:
- PetscSleep(), PetscDrawGetPause(), and PetscDrawSetPause() now take PetscReal instead of int. Also, -draw_pause takes a real value. 
- PetscRandomGetValueImaginary() is removed. To get a complex number with only a random imaginary part first call PetscRandomSetInterval() with the same low and high real part. Similarly one can obtain a complex number with only a random real part by setting the low and high imaginary part to be the same. 
AO:
Sieve:
Fortran:
- Removed the old compiler dependent implementation of f90 interface sources in favor of the new compiler independent implementation. Consequently the configure option –with-f90-interface is removed. And the f90 interface is automatically built - if an f90 compiler is detected. [this is the default behavior before this change as well] 
- use petsc and use petscdef are now use petscsys and use petscsysdef 
ExternalPackages:
- Added MATORDERING_AMD for Tim Davis’ Approximate Minimum Degree package.