# Core Features and Functionality

PETSc is a general parallel linear and non-linear solver framework, which provides these general classes of functionality:

Table Of Contents

- Supported Systems

- General Features

- Solver Features

- Accelerator/GPU Features

- Support Features

## Supported Systems

- HPC

- Linux

- MacOS

- Windows

## General Features

- Parallel vectors

- Vector code for communicating ghost points

- Parallel matrices

- Several sparse and dense matrix storage formats (see `MatType`):

  - AIJ/CSR (Yale sparse matrix format)

  - LMVM (Limited Memory Variable Metric)

  - Block

  - Nested

  - Dense

- Easy, efficient matrix assembly and interface

- Parallel unstructured mesh support

- Powerful object introspection tools

- Support for a variety of IO options (see `PetscViewerType`)

- Comprehensive performance testing

## Solver Features

- Parallel Krylov subspace methods

- Parallel nonlinear solvers

- Scalable parallel linear and nonlinear preconditioners

- Parallel timestepping (ODE) solvers

- Local and global error estimators

- Forward and adjoint sensitivity capabilities

- Robust optimization through `Tao`

See also

For full feature list and prerequisites see:

- Linear solver table

- Nonlinear solver table

- Tao solver table

## Accelerator/GPU Features

- Matrix/Vector CUDA support

- Kokkos support

- Matrix/Vector OpenCL/ViennaCL support

- Matrix/Vector HIP support

Note

PETSc GPU support is under heavy development! See GPU support roadmap for more information on current support.

## Support Features

- Complete documentation

- Comprehensive profiling of floating point and memory usage

- Consistent user interface

- Intensive error checking

- Over one thousand examples

- PETSc is supported and will be actively enhanced for many years

PETSc in a nutshell GPU Support Roadmap