# Changes: 2.1.1

## Changes

(See [Features] below)

```{rubric} General:
```

- Scalar -> PetscScalar (and added PetscReal)

- The make files are reorganized. bmake/\$\{PETSC_ARCH}/base_variables
  -> variables, and base.site -> packages. base ->rules.

- If using makefiles from earlier version of PETSc, change

  - `include ${PETSC_DIR}/bmake/${PETSC_ARCH}/base`

  to

  - `include ${PETSC_DIR}/conf/base`

- The Microsoft Windows build of PETSc with win32_gnu, win32_intel and
  win32_mpich now default to using MPICH-1.2.3The complex version of
  the PETSc libraries can only be installed with C++ compilers that
  provide the std::complex implementation.

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

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

```{rubric} DMMG
```

- Default Krylov method on outer linear solver is now FGMRES instead
  of GMRES. Also default multigrid type is now full instead of
  multiplicative

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

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

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

- All KSP methods with left preconditioning use the preconditioned
  residual by default (before CG, CR used the unpreconditioned
  residual). Use -ksp_norm_type
  \<none,preconditioned,unpreconditioned,natural> to change it, see
  next bullet.
- `KSPSetInitialGuessNonzero(), KSPSetComputeSingularValues(), KSPSetComputeEigenvalues(),`
  all now take a PetscTruth as the second argument allowing them to
  each be toggled on or off
- `KSPSetAvoidNorms(), KSPSetUseUnpreconditionedResidual(),             KSPSetComputeResidual()`
  have all been merged into `KSPSetNormType()`

```{rubric} PC (Preconditioners):
```

```{rubric} MAT (Matrices):
```

- Added additional local relaxation argument to `MatRelax()`

- Added additional argument to `MatAXPY()`

  - MatSNESMFFormJacobian() has been renamed to
    MatSNESMFComputeJacobian()
  - added another field to MatLUInfo and MatILUInfo
  - MatCreate() now requires a call to MatSetType() or
    MatSetFromOptions()
  - The MatType is assigned in either of these calls.

```{rubric} DA (Distributed Arrays):
```

In order to set the grid sizes with -da_grid_x, -da_grid_y,
-da_grid_z one must pass in negative values for the M, N, and P
arguments in the call to DACreateXX(). If values are not set from the
options database then the absolute value of the M,N,P is used as the
default.

- Changed DAGetColoring() to two routines, DAGetColoring() and
  DAGetMatrix()

```{rubric} VEC (Vectors):
```

- Changed VecCreate() to no longer take in size arguments. Use
  VecCreate() & VecSetSizes()

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

- Changed IS_COLORING_LOCAL to IS_COLORING_GHOSTED and
  IS_COLORING_GLOBAL to IS_COLORING_LOCAL

```{rubric} General:
```

`PetscOptionsGetDouble()` is now `PetscOptionsGetReal()`
.. rubric:: Draw (Graphics):

```{rubric} Viewers:
```

```{rubric} System:
```

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

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

Logging functionality is completely reworked. Now one can register
new stages, classes and events. Every event is associated with a
class. So, users would have to create a class for all userevents.

- `PetscLogStageRegister()` now takes an int * as the first
  argument
- `PetscLogEventRegister()` takes an int as the third argument,
  not a char \*

```{rubric} Fortran Interface:
```

## Features

(See [Changes] above)

```{rubric} General:
```

- configure can now be used to build PETSc on some architectures.
  Currently tested on Linux, IRIX, Solaris machines.We'd like your
  feedback on this feature; please send `configure_petsc.log` and
  `config.log`when reporting problems with configure.
- Added support for ESI vectors and matrices. Use BOPT=g_c++ or
  O_c++Better
- support for automatic differentiation with ADIC

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

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

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

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

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

```{rubric} PC (Preconditioners):
```

- added -pc_lu_zeropivot and -pc_ilu_zeropivot (still need function
  interfaces)

```{rubric} MAT (Matrices):
```

```{rubric} DA (Distributed Arrays):
```

Added DAGetArray() and DARestoreArray() that give workspace
appropriate for a local function. These may be used in routines that
diverentiated with ADIC:-)
.. rubric:: VEC (Vectors):

- Added the utility routines which do special cases of vecscatters
  VecConvertMPIToSeqAll(),VecConvertMPIToMPIZero()

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

```{rubric} PF:
```

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

- added DrawEllipse()

```{rubric} Viewers:
```

- added PetscViewerASCIISetMode()

```{rubric} System:
```

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

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

```{rubric} Fortran Interface:
```
