# Changes: 2.0.22

```{rubric} 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.

```{rubric} AO (Application Orderings):
```

```{rubric} TS (Timestepping Solvers):
```

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

```{rubric} SNES (Nonlinear Solvers):
```

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

```{rubric} SLES (Linear Solvers):
```

- See PC and KSP

```{rubric} KSP (Krylov Subspace Methods):
```

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

```{rubric} 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.

```{rubric} 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`.

```{rubric} 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`.

```{rubric} 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.

```{rubric} IS (Index Sets):
```

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

```{rubric} Draw (Graphics):
```

```{rubric} Viewers:
```

```{rubric} System:
```

```{rubric} Error Handling:
```

```{rubric} Event Logging:
```

```{rubric} 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.
