# Changes: 3.7

```{rubric} General:
```

- -log_summary is deprecated, you should use -log_view

- PetscViewerSetFormat() is deprecated, you should use
  PetscViewerPushFormat() followed after the viewing with
  PetscViewerPopFormat()

- PetscMemoryShowUsage() and -memory_info changed to
  PetscMemoryView() and -memory_view

- PetscOptionsSetValue() may now be called BEFORE PetscInitialize()
  and any options set then will be used in the initialization
  process. These options are overwritten by command line options.

- The following routines now take an optional *PetscOptions* object
  as the first argument, use NULL to get the previous behavior.

  ```
  PetscOptionsHasName(PetscOptions,const char[],const char[],PetscBool *);
  PetscOptionsGetInt(PetscOptions,const char[],const char [],PetscInt *,PetscBool *);
  PetscOptionsGetBool(PetscOptions,const char[],const char [],PetscBool  *,PetscBool *);
  PetscOptionsGetReal(PetscOptions,const char[],const char[],PetscReal *,PetscBool *);
  PetscOptionsGetScalar(PetscOptions,const char[],const char[],PetscScalar *,PetscBool *);
  PetscOptionsGetIntArray(PetscOptions,const char[],const char[],PetscInt[],PetscInt *,PetscBool *);
  PetscOptionsGetRealArray(PetscOptions,const char[],const char[],PetscReal[],PetscInt *,PetscBool *);
  PetscOptionsGetScalarArray(PetscOptions,const char[],const char[],PetscScalar[],PetscInt *,PetscBool *);
  PetscOptionsGetBoolArray(PetscOptions,const char[],const char[],PetscBool [],PetscInt *,PetscBool *);
  PetscOptionsGetString(PetscOptions,const char[],const char[],char[],size_t,PetscBool *);
  PetscOptionsGetStringArray(PetscOptions,const char[],const char[],char*[],PetscInt*,PetscBool *);
  PetscOptionsGetEList(PetscOptions,const char[],const char[],const char*const*,PetscInt,PetscInt*,PetscBool *);
  PetscOptionsGetEnum(PetscOptions,const char[],const char[],const char*const*,PetscEnum*,PetscBool *);
  PetscOptionsGetEnumArray(PetscOptions,const char[],const char[],const char*const*,PetscEnum*,PetscInt *,PetscBool *);
  PetscOptionsSetAlias(PetscOptions,const char[],const char[]);
  PetscOptionsSetValue(PetscOptions,const char[],const char[]);
  PetscOptionsClearValue(PetscOptions,const char[]);
  PetscOptionsAllUsed(PetscOptions,PetscInt*);
  PetscOptionsUsed(PetscOptions,const char *,PetscBool*);
  PetscOptionsView(PetscOptions,PetscViewer);
  PetscOptionsInsert(PetscOptions,int*,char ***,const char[]);
  PetscOptionsInsertFile(MPI_Comm,PetscOptions,const char[],PetscBool );
  PetscOptionsInsertString(PetscOptions,const char[]);
  PetscOptionsPrefixPush(PetscOptions,const char[]);
  PetscOptionsReject(PetscOptions,const char[],const char[]);
  PetscOptionsGetAll(PetscOptions,char*[]);
  ```

- PetscLogBegin() is now PetscLogDefaultBegin().

```{rubric} Configure/Build:
```

- Added --download-packages-dir=directory to support easy use of
  --download-xxx behind firewalls
- --download-package for externalpackage with a gitrepo will never
  be stale. Each time configure is invoked - it will do a 'git
  fetch' and 'git checkout commit-id'. And if the commit-id changes
  from the previous build - the package will be rebuilt. To prevent
  this sync [and use previous snapshot] - one can use
  --download-package-commit=HEAD
- Added --with-libpng/--with-giflib/--with-libjpeg and corresponding
  --download versions to support PNG/GIF/JPEG image generation
- Removed support for AfterImage in favor of libpng/GIFLIB/libjpeg

```{rubric} IS:
```

```{rubric} PetscDraw:
```

- Added option -draw_cmap to use a named colormap (e.g., hue
  (default), jet, coolwarm, parula, viridis) in the drawing of
  contour plots.
- Support for saving images and movies was improved. Support for
  generating binary PPM images is built-in, but the format is
  uncompressed and images are large (640x480 pixels ~ 900 KiB).
  PETSc can optionally generate PNG/GIF/JPEG images using the
  libpng/GIFLIB/libjpeg packages (configure
  --with-package/--download-package). These libraries are popular,
  well maintained, and available through most packages managers
  (dnf/yum, apt, brew). For most users, PNG images should be enough.
- Added routine PetscDrawSave(), users should explicitly call it to
  save images after configuring with PetscDrawSetSave().
- The PetscDrawSynchronizedXXX() routines were removed, the
  corresponding PetscDrawXXX() are now collective.

```{rubric} PF:
```

```{rubric} Vec:
```

- For complex numbers VecNorm(v,NORM_1,) will return the traditional
  1 norm of the 2 norm of the complex numbers; that is the 1 norm of
  the absolute values of the complex entries. Previously it returned
  the 1 norm of the 1 norm of the complex entries (what is returned
  by the BLAS routine asum()). Both are valid norms but most people
  expect the former.

```{rubric} VecScatter:
```

```{rubric} PetscSection:
```

```{rubric} Mat:
```

```{rubric} PC:
```

- If the DM has a CreateRestriction() function the PCMG
  automatically uses that to create the restriction operator instead
  of defaulting to using the transpose of the interpolation
- Added -pc_hypre_boomeramg_nodal_coarsen - where n is from 1 to 6
  (see HYPRE_BOOMERAMGSetNodal())
- Added -pc_hypre_boomeramg_vec_interp_variant where v is from 1 to
  4 (see HYPRE_BoomerAMGSetInterpVecVariant())
- see PCHYPRE to allow taking advantage of MatSetNearNullSpace() for
  hypre BoomerAMG
- Added PCTelescope which supports running solvers on
  sub-communicators. This PC allows re-partitioning of coarse levels
  solves within PCMG when using Galerkin coarse level operators.

```{rubric} KSP:
```

- KSPSetMonitor(KSPMonitorXXX, calls now require passing a viewer as
  the final argument, you can no longer pass a NULL)
- -ksp_monitor_solution now takes arguments of the form
  \[viewertype\[:filename[:formatoption]\]\] allowing viewing the
  solution in many ways. To get back the previous behavior use
  -ksp_monitor_solution draw
- A Flexible Conjugate Gradient (FCG) implementation has been added
  as KSPFCG.
- New implementations for pipelined, flexible Krylov methods have
  been added as KSPPIPEFGMRES, KSPPIPEFCG, and KSPPIPEGCR.

```{rubric} SNES:
```

- SNESSetMonitor(SNESMonitorXXX, calls now require passing a viewer
  as the final argument, you can no longer pass a NULL)
- -snes_monitor_solution/residual/solution_update now takes
  arguments of the form \[viewertype\[:filename[:formatoption]\]\]
  allowing viewing the solution in many ways. To get back the
  previous behavior use -ksp_monitor_solution draw

```{rubric} SNESLineSearch:
```

- -snes_linesearch_monitor now takes an optional [:filename]
  argument, changed SNESLineSearchSet/GetMonitor to
  SNESLineSearchSet/GetDefaultMonitor
- Added SNESLineSearchMonitorSet()
- Partial support for -snes_linesearch_monitor_solution_update

```{rubric} TS:
```

- You must call TSSetExactFinalTime() or use the option
  -ts_exact_final_time before calling TSSolve()
- TSSetMonitor(TSMonitorXXX, calls now require passing a viewer as
  the final argument, you can no longer pass a NULL)
- -ts_monitor_solution now takes arguments of the form
  \[viewertype\[:filename[:formatoption]\]\] allowing viewing the
  solution in many ways. To get back the previous behavior use
  -ksp_monitor_solution draw
- -ts_monitor_binary_solution filename should now be written as
  -ts_monitor_solution binary:filename
- Renamed TSSetEventMonitor() to TSSetEventHandler(). Updated many
  TS implementations to support event detection.
- Updated TSTHETA, TSBEULER, and TSCN to support time adaptivity by
  estimating the local truncation error with a BDF-2 formula.
- Updated TSALPHA implementation. Removed TSAlphaSetAdapt() and
  TSAlphaAdaptDefault(), use TSAlphaUseAdapt() instead.
- Added TSBDF, an implementation of backward difference formulas
  using constant order (1 to 6) and supporting time adaptivity.
- Implemented new interface for second-order systems to avoid using
  a first-order system formulation. Added TSALPHA2 implementation
  (generalized-alpha, Chung & Hubert 1993) featuring user-controlled
  damping of high-frequency modes and time adaptivity through a
  BDF-2 formula.

```{rubric} DM/DA:
```

- Added DMShellSetCreateRestriction
- Added the generic option prefix interfaces: DMGetOptionsPrefix(),
  DMAppendOptionsPrefix()
- DMLabel labels are now available to all DM objects, not just
  DMPlex object
- DMClone() now handles copying the coordinates, so that
  DMCopyCoordinates() is no longer necessary

```{rubric} DMPlex:
```

```{rubric} PetscViewer:
```

- Replaced PetscViewerASCIISynchronizedAllow() with
  PetscViewerASCIIPushSynchronized()
  PetscViewerASCIIPopSynchronized()

```{rubric} SYS:
```

```{rubric} Tao:
```

- Removed convergence tolerances -tao_fatol and tao_frtol also
  remove these two parameters from TAOSetTolerance() and
  TaoGetTolerance()

```{rubric} AO:
```

```{rubric} Sieve:
```

```{rubric} Fortran:
```
