petsc-3.10.5 2019-03-28
Report Typos and Errors

# Documentation: Changes: 2.0.22

## NEW FEATURES and CHANGES in PETSc 2.0.22

#### General:

- The Fortran90-specific routines such as `VecGetArrayF90()` now work with the IBM Fortran compiler, the SGI Fortran 90 compiler, and the Cray T3E Fortran compiler.
- The third argument for the Fortran versions of the routines `VecGetArray()/VecRestoreArray(),` `ISGetIndices()/ISRestoreIndices(), MatGetArray()/MatRestoreArray()` and `DAGetGlobalIndices()` has been changed from `integer` to `PetscOffset`. See src/snes/examples/tutorials/ex5f.F for example usage.
- Changed the location of the manual pages from docs/www/www.html and docs/www to `docs/manualpages/manualpages.html` and `docs/manualpages`.
- The location of the mpiuni include files (used in the base.site file when not compiling with an MPI) has moved from `src/mpiuni` to `src/sys/src/mpiuni`
- Added the option `-log_summary_exclude <vec,mat,sles,snes>` to limit the information printed in the summary table
- Added the option `-log_info_exclude <vec,mat,sles,snes>`
- Changed the calling sequences of `PetscGetTime(), PetscGetCPUTime(), PetscGetFlops()` to return error codes like all other PETSc functions.
- Changed the internal structure of the PETSc objects. This will not effect most users but makes PETSc more extensible for the future.
- Removed the PETSc object child support and replaced it with
  - `PetscObjectCompose(PetscObject,char *name,PetscObject);`
  - `PetscObjectQuery(PetscObject,char *name,PetscObject *);`
  - `PetscObjectComposeFunction(PetscObject,char *name, void *);`
  - `PetscObjectQueryFunction(PetscObject,char *name,void **);`
  These allow the user to attach objects and functions to any PETSc object.
- Added a feeble example that demonstrates how to manage partitioning a grid in parallel in `src/mat/examples/tutorials/ex2.c`
- The build command 'make all' in ${PETSC_DIR} will build the PETSc libraries, including the fortran interface.

#### AO (Application Orderings):

#### TS (Timestepping Solvers):

- The calling sequence of `TSSetType()` has changed; see the manual page.
- `TSType` is now a string, rather than enum type

#### SNES (Nonlinear Solvers):

- The calling sequence of `SNESSetType()` has changed; see the manual page.
- `SNESType` is now a string, rather than enum type

#### SLES (Linear Solvers):

- See PC and KSP

#### KSP (Krylov Subspace Methods):

- The calling sequence of `KSPSetType()` has changed; see the manual page.
- `KSPType` is now a string, rather than enum type.

#### PC (Preconditioners):

- Added two new PC classes, `PCSLES` and `PCCOMPOSITE` that allow use of any `SLES` object as a preconditioner and enable combining several preconditioners.
- The calling sequence of `PCSetType()` has changed; see the manual page.
- `PCType` is now a string, rather than enum type.

#### MAT (Matrices):

- Added support for partitioning using the ParMETIS parallel partitioning package, see the manual page for `PartitioningCreate()`
- Added `MatGetColumnVector()`
- Added argument column size to `MatGetSubMatrix()`
- Changed the memory allocation algorithm in `MatLUFactorSymbolic()` and `MatILUFactorSymbolic()` based on a suggestion by David Hysom of ODU.
- The third argument for the Fortran version of the routines `MatGetArray()/MatRestoreArray()` has been changed from `integer` to `PetscOffset`.

#### DA (Distributed Arrays):

- Changed `DAGetDistributedVector()` and `DAGetLocalVector()` to `DACreateGlobalVector()` and `DACreateLocalVector()`. You should destroy these vectors with a usual call to `VecDestroy()`.
- The third argument for the Fortran version of the routine `DAGetGlobalIndices()` has been changed from `integer` to `PetscOffset`.

#### VEC (Vectors):

- Added `VecSetBlockSize(), VecSetValuesBlocked(), VecSetValuesBlockedLocal(), VecSetLocalToGlobalMappingBlocked()`
- Added`VecCreatedShared(),` which creates a parallel vector in shared memory on the SGI machines
- Changed `VEC_IGNORE_OFF_PROCESSOR_ENTRIES` to `VEC_IGNORE_OFF_PROC_ENTRIES`
- The third argument for the Fortran versions of the routines `VecGetArray()/VecRestoreArray(),` has been changed from `integer` to `PetscOffset`. See src/snes/examples/tutorials/ex5f.F for example usage.
- `VecGetArray(), VecRestoreArray()` now work from Fortran on all machines, finally after 3 long years!
- Changed the calling sequence of `VecCreate()`, now takes both local and global size, see the manual page.

#### IS (Index Sets):

- The third argument for the Fortran versions of the routines `ISGetIndices()/ISRestoreIndices()` has been changed from `integer` to `PetscOffset`.

#### Draw (Graphics):

#### Viewers:

#### System:

#### Error Handling:

#### Event Logging:

#### Fortran Interface:

- `PETSC_NULL` has been replaced with `PETSC_NULL_INTEGER`, `PETSC_NULL_SCALAR`, `PETSC_NULL_DOUBLE` or `PETSC_NULL_CHARACTER` depending on the context for usage. If the function expects an integer, a scalar (double or complex depending if you compile with BOPT=*_complex), a double precision array, or a string.
- The Fortran include files are now located in the directory "include/finclude/*.", rather than "include/FINCLUDE/*.h". The include files that used to be in "include/finclude/*.h" (not recommended) are now in "include/foldinclude/*.h"
- If you have stored PETSc objects in Fortran integer arrays, such as `user(3) = vec` you have to declare those arrays to be of type `PetscFortranAddr` instead of as integer. Note that `PetscFortranAddr` is simply integer on 32 bit machines and integer*8 on 64 bit machines.
- The Fortran90-specific routines such as `VecGetArrayF90()` now work with the IBM Fortran compiler, the SGI Fortran 90 compiler, and the Cray T3E Fortran compiler.
- PETSc objects can now be passed between C and Fortran directly. You do not have to use the commands `PetscCObjectToFortranObject()` and `PetscFortranObjectToCObject()` to translate the objects between languages.
- Changed Fortran object argument from type int to type PetscFortranAddr in the routines `PetscCObjectToFortranObject()` and `PetscFortranObjectToCObject().`
- Added the routine `PetscInitializeFortran()` to assist in mixed-language use of PETSc. See the manual page for details.