---
name: "petsc4py"
section: "3"
platform: "linux"
package: "python-petsc4py-doc"
version: "3.22.4-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/petsc4py/3"
---

# petsc4py(3)

PETSc for Python

## NAME

petsc4py - PETSc for Python

- **Author**

  Lisandro Dalcin

- **Contact**

  *dalcinl@gmail.com*

- **Web Site**

  *https://gitlab.com/petsc/petsc*

- **Date**

  Mar 12, 2025

### Abstract

This document describes *petsc4py*, a *Python* wrapper to the *PETSc* libraries.

*PETSc* (the Portable, Extensible Toolkit for Scientific Computation) is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations. It employs the *MPI* standard for all message-passing communication.

This package provides an important subset of PETSc functionalities and uses *NumPy* to efficiently manage input and output of array data.

A *good friend* of petsc4py is:

- •

  *mpi4py*: Python bindings for *MPI*, the *Message Passing Interface*.

Other projects depend on petsc4py:

- •

  *slepc4py*: Python bindings for *SLEPc*, the *Scalable Library for Eigenvalue Problem Computations*.

## PETSC OVERVIEW

*PETSc* is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations. It employs the *MPI* standard for all message-passing communication.

PETSc is intended for use in large-scale application projects *\[petsc-efficient\]*, and several ongoing computational science projects are built around the PETSc libraries. With strict attention to component interoperability, PETSc facilitates the integration of independently developed application modules, which often most naturally employ different coding styles and data structures.

PETSc is easy to use for beginners *\[petsc-user-ref\]*. Moreover, its careful design allows advanced users to have detailed control over the solution process. PETSc includes an expanding suite of parallel linear and nonlinear equation solvers that are easily used in application codes written in C, C++, and Fortran. PETSc provides many of the mechanisms needed within parallel application codes, such as simple parallel matrix and vector assembly routines that allow the overlap of communication and computation.

- \[petsc-user-ref\]

  S. Balay, S. Abhyankar, M. Adams, S. Benson, J. Brown, P. Brune, K. Buschelman, E. Constantinescu, L. Dalcin, A. Dener, V. Eijkhout, J. Faibussowitsch, W. Gropp, V. Hapla, T. Isaac, P. Jolivet, D. Karpeyev, D. Kaushik, M. Knepley, F. Kong, S. Kruger, D. May, L. Curfman McInnes, R. Mills, L. Mitchell, T. Munson, J. Roman, K. Rupp, P. Sanan, J Sarich, B. Smith, H. Suh, S. Zampini, H. Zhang, and H. Zhang, J. Zhang, *PETSc/TAO Users Manual*, ANL-21/39 - Revision 3.22, 2024. *http://dx.doi.org/10.2172/2205494*, *https://petsc.org/release/docs/manual/manual.pdf*

- \[petsc-efficient\]

  Satish Balay, Victor Eijkhout, William D. Gropp, Lois Curfman McInnes and Barry F. Smith. Efficient Management of Parallelism in Object Oriented Numerical Software Libraries. Modern Software Tools in Scientific Computing. E. Arge, A. M. Bruaset and H. P. Langtangen, editors. 163--202. Birkhauser Press. 1997.

### Components

PETSc is designed with an object-oriented style. Almost all user-visible types are abstract interfaces with implementations that may be chosen at runtime. Those objects are managed through handles to opaque data structures which are created, accessed and destroyed by calling appropriate library routines.

PETSc consists of a variety of components. Each component manipulates a particular family of objects and the operations one would like to perform on these objects. These components provide the functionality required for many parallel solutions of PDEs.

- **Vec**

  Provides the vector operations required for setting up and solving large-scale linear and nonlinear problems. Includes easy-to-use parallel scatter and gather operations, as well as special-purpose code for handling ghost points for regular data structures.

- **Mat**

  A large suite of data structures and code for the manipulation of parallel sparse matrices. Includes several different parallel matrix data structures, each appropriate for a different class of problems.

- **PC**

  A collection of sequential and parallel preconditioners, including (sequential) ILU(k), LU, and (both sequential and parallel) block Jacobi, overlapping additive Schwarz methods.

- **KSP**

  Parallel implementations of many popular Krylov subspace iterative methods, including GMRES, CG, CGS, Bi-CG-Stab, two variants of TFQMR, CR, and LSQR. All are coded so that they are immediately usable with any preconditioners and any matrix data structures, including matrix-free methods.

- **SNES**

  Data-structure-neutral implementations of Newton-like methods for nonlinear systems. Includes both line search and trust region techniques with a single interface. Employs by default the above data structures and linear solvers. Users can set custom monitoring routines, convergence criteria, etc.

- **TS**

  Code for the time evolution of solutions of PDEs. In addition, provides pseudo-transient continuation techniques for computing steady-state solutions.

## INSTALLATION

### Install from PyPI using pip

You can use **pip** to install *petsc4py* and its dependencies (*mpi4py* is optional but highly recommended):

```
$ python -m pip install mpi4py petsc petsc4py
```

### Install from the PETSc source tree

First *build PETSc*. Next **cd** to the top of the PETSc source tree and set the *PETSC\_DIR* and *PETSC\_ARCH* environment variables. Run:

```
$ python -m pip install src/binding/petsc4py
```

The installation of *petsc4py* supports multiple *PETSC\_ARCH* in the form of colon separated list:

```
$ PETSC_ARCH='arch-0:...:arch-N' python -m pip install src/binding/petsc4py
```

If you are cross-compiling, and the *numpy* module cannot be loaded on your build host, then before invoking **pip**, set the **NUMPY\_INCLUDE** environment variable to the path that would be returned by **import numpy; numpy.get\_include()**:

```
$ export NUMPY_INCLUDE=/usr/lib/pythonX/site-packages/numpy/core/include
```

### Running the testing suite

When installing from source, the petsc4py complete testsuite can be run as:

```
$ cd src/binding/petsc4py
$ python test/runtests.py
```

or via the makefile rule **test**:

```
$ make test -C src/binding/petsc4py
```

Specific tests can be run using the command-line option **-k**, e.g.:

```
$ python test/runtests.py -k test_optdb
```

to run all the tests provided in **tests/test\_optdb.py**.

For other command-line options, run:

```
$ python test/runtests.py --help
```

If not otherwise specified, all tests will be run in sequential mode. To run all the tests with the same number of MPI processes, for example **4**, run:

```
$ mpiexec -n 4 python test/runtests.py
```

or:

```
$ make test-4 -C src/binding/petsc4py
```

### Building the documentation

Install the documentation dependencies:

```
$ python -m pip install -r ${PETSC_DIR/doc/requirements.txt
```

Then:

```
$ cd src/binding/petsc4py/docs/source
$ make html
```

The resulting HTML files will be in **\_build/html**.

**NOTE:**

Building the documentation requires Python 3.11 or later.

## CONTRIBUTING

Contributions from the user community are welcome. See the *PETSc developers* documentation for general information on contributions.

New contributions to petsc4py **must** adhere with the coding standards. We use *cython-lint* for Cython and *ruff* for Python source codes. These can be installed using:

```
$ python -m pip install -r src/binding/petsc4py/conf/requirements-lint.txt
```

If you are contributing Cython code, you can check compliance with:

```
$ make cython-lint -C src/binding/petsc4py
```

For Python code, run:

```
$ make ruff-lint -C src/binding/petsc4py
```

Python code can be auto-formatted using:

```
$ make ruff-lint RUFF_OPTS='format' -C src/binding/petsc4py
```

New contributions to petsc4py must be tested. Tests are located in the **src/binding/petsc4py/test** folder. To add a new test, either add a new **test\_xxx.py** or modify a pre-existing file according to the *unittest* specifications.

If you add a new **test\_xxx.py**, you can run the tests using:

```
$ cd src/binding/petsc4py
$ python test/runtests.py -k test_xxx
```

If instead you are modifying an existing **test\_xxx.py**, you can test your additions by using the fully qualified name of the Python class or method you are modifying, e.g.:

```
$ python test/runtests.py -k test_xxx.class_name.method_name
```

All new code must include documentation in accordance with the *documentation* *standard*. To check for compliance, run:

```
$ make html SPHINXOPTS='-W' -C src/binding/petsc4py/docs/source
```

**WARNING:**

The docstrings must not cause Sphinx warnings.

## CITATIONS

If PETSc for Python has been significant to a project that leads to an academic publication, please acknowledge that fact by citing the project.

- •

  L. Dalcin, P. Kler, R. Paz, and A. Cosimo, *Parallel Distributed Computing using Python*, Advances in Water Resources, 34(9):1124-1139, 2011. *https://doi.org/10.1016/j.advwatres.2011.04.013*

- •

  S. Balay, S. Abhyankar, M. Adams, S. Benson, J. Brown, P. Brune, K. Buschelman, E. Constantinescu, L. Dalcin, A. Dener, V. Eijkhout, J. Faibussowitsch, W. Gropp, V. Hapla, T. Isaac, P. Jolivet, D. Karpeyev, D. Kaushik, M. Knepley, F. Kong, S. Kruger, D. May, L. Curfman McInnes, R. Mills, L. Mitchell, T. Munson, J. Roman, K. Rupp, P. Sanan, J Sarich, B. Smith, H. Suh, S. Zampini, H. Zhang, and H. Zhang, J. Zhang, *PETSc/TAO Users Manual*, ANL-21/39 - Revision 3.22, 2024. *https://doi.org/10.2172/2205494*, *https://petsc.org/release/docs/manual/manual.pdf*

## REFERENCE

| | |
| --- | --- |
| *petsc4py* | The PETSc for Python package. |
| *petsc4py.typing* | Typing support. |
| *petsc4py.PETSc* | Portable, Extensible Toolkit for Scientific Computation. |

### petsc4py

The PETSc for Python package.

This package is an interface to PETSc libraries.

*PETSc* (the Portable, Extensible Toolkit for Scientific Computation) is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations. It employs the *MPI* standard for all message-passing communications.

Functions

| | |
| --- | --- |
| *get\_config*() | Return a dictionary with information about PETSc. |
| *get\_include*() | Return the directory in the package that contains header files. |
| *init*(\[args, arch, comm\]) | Initialize PETSc. |

### petsc4py.get\_config

- **petsc4py.get\_config()**

  Return a dictionary with information about PETSc.

  - **Return type**

    *dict*\[*str*, *str*\]

### petsc4py.get\_include

- **petsc4py.get\_include()**

  Return the directory in the package that contains header files.

  Extension modules that need to compile against petsc4py should use this function to locate the appropriate include directory.

  Example

  Using Python distutils or NumPy distutils:

  ```
  import petsc4py
  Extension('extension_name', ...
            include_dirs=[..., petsc4py.get_include()])
  ```

  - **Return type**

    *str*

### petsc4py.init

- **petsc4py.init(args=None, arch=None, comm=None)**

  Initialize PETSc.

  - **Parameters**

    - •

      **args** (*str \| list\[str\] \| None*) -- Command-line arguments, usually the *sys.argv* list

    - •

      **arch** (*str \| None*) -- Specific configuration to use

    - •

      **comm** (*Intracomm \| None*) -- MPI commmunicator

  - **Return type**

    *None*

  Notes

  This function should be called only once, typically at the very beginning of the bootstrap script of an application.

### petsc4py.typing

Typing support.

Attributes

| | |
| --- | --- |
| *Scalar* | Scalar type. |
| *ArrayBool* | Array of *bool*. |
| *ArrayInt* | Array of *int*. |
| *ArrayReal* | Array of *float*. |
| *ArrayComplex* | Array of *complex*. |
| *ArrayScalar* | Array of *Scalar* numbers. |
| *DimsSpec* | Dimensions specification. |
| *AccessModeSpec* | Access mode specification. |
| *InsertModeSpec* | Insertion mode specification. |
| *ScatterModeSpec* | Scatter mode specification. |
| *LayoutSizeSpec* | *int* or 2-*tuple* of *int* describing the layout sizes. |
| *NormTypeSpec* | Norm type specification. |
| *PetscOptionsHandlerFunction* | Callback for processing extra options. |
| *MatAssemblySpec* | Matrix assembly specification. |
| *MatSizeSpec* | *int* or (nested) *tuple* of *int* describing the matrix sizes. |
| *MatBlockSizeSpec* | The row and column block sizes. |
| *CSRIndicesSpec* | CSR indices format specification. |
| *CSRSpec* | CSR format specification. |
| *NNZSpec* | Nonzero pattern specification. |
| *MatNullFunction* | *PETSc.NullSpace* callback. |
| *DMCoarsenHookFunction* | *PETSc.DM* coarsening hook callback. |
| *DMRestrictHookFunction* | *PETSc.DM* restriction hook callback. |
| *KSPRHSFunction* | *PETSc.KSP* right-hand side function callback. |
| *KSPOperatorsFunction* | *PETSc.KSP* operators function callback. |
| *KSPConvergenceTestFunction* | *PETSc.KSP* convergence test callback. |
| *KSPMonitorFunction* | *PETSc.KSP* monitor callback. |
| *KSPPreSolveFunction* | *PETSc.KSP* pre solve callback. |
| *KSPPostSolveFunction* | *PETSc.KSP* post solve callback. |
| *SNESMonitorFunction* | *SNES* monitor callback. |
| *SNESObjFunction* | *SNES* objective function callback. |
| *SNESFunction* | *SNES* residual function callback. |
| *SNESJacobianFunction* | *SNES* Jacobian callback. |
| *SNESGuessFunction* | *SNES* initial guess callback. |
| *SNESUpdateFunction* | *SNES* step update callback. |
| *SNESLSPreFunction* | *SNES* linesearch pre-check update callback. |
| *SNESNGSFunction* | *SNES* nonlinear Gauss-Seidel callback. |
| *SNESConvergedFunction* | *SNES* convergence test callback. |
| *TSRHSFunction* | *TS* right-hand side function callback. |
| *TSRHSJacobian* | *TS* right-hand side Jacobian callback. |
| *TSRHSJacobianP* | *TS* right-hand side parameter Jacobian callback. |
| *TSIFunction* | *TS* implicit function callback. |
| *TSIJacobian* | *TS* implicit Jacobian callback. |
| *TSIJacobianP* | *TS* implicit parameter Jacobian callback. |
| *TSI2Function* | *TS* implicit 2nd order function callback. |
| *TSI2Jacobian* | *TS* implicit 2nd order Jacobian callback. |
| *TSI2JacobianP* | *TS* implicit 2nd order parameter Jacobian callback. |
| *TSMonitorFunction* | *TS* monitor callback. |
| *TSPreStepFunction* | *TS* pre-step callback. |
| *TSPostStepFunction* | *TS* post-step callback. |
| *TSIndicatorFunction* | *TS* event indicator callback. |
| *TSPostEventFunction* | *TS* post-event callback. |
| *TAOObjectiveFunction* | *TAO* objective function callback. |
| *TAOGradientFunction* | *TAO* objective gradient callback. |
| *TAOObjectiveGradientFunction* | *TAO* objective function and gradient callback. |
| *TAOHessianFunction* | *TAO* objective Hessian callback. |
| *TAOUpdateFunction* | *TAO* update callback. |
| *TAOMonitorFunction* | *TAO* monitor callback. |
| *TAOConvergedFunction* | *TAO* convergence test callback. |
| *TAOJacobianFunction* | *TAO* Jacobian callback. |
| *TAOResidualFunction* | *TAO* residual callback. |
| *TAOJacobianResidualFunction* | *TAO* Jacobian residual callback. |
| *TAOVariableBoundsFunction* | *TAO* variable bounds callback. |
| *TAOConstraintsFunction* | *TAO* constraints callback. |
| *TAOLSObjectiveFunction* | *TAOLineSearch* objective function callback. |
| *TAOLSGradientFunction* | *TAOLineSearch* objective gradient callback. |
| *TAOLSObjectiveGradientFunction* | *TAOLineSearch* objective function and gradient callback. |

### petsc4py.typing.Scalar

- **petsc4py.typing.Scalar = float \| complex**

  Scalar type.

  Scalars can be either *float* or *complex* (but not both) depending on how PETSc was configured (**./configure --with-scalar-type=real\|complex**).

### petsc4py.typing.ArrayBool

- **petsc4py.typing.ArrayBool**

  Array of *bool*.

  alias of *ndarray*\[*tuple*\[*int*, ...\], *dtype*\[*bool*\]\]

### petsc4py.typing.ArrayInt

- **petsc4py.typing.ArrayInt**

  Array of *int*.

  alias of *ndarray*\[*tuple*\[*int*, ...\], *dtype*\[*int*\]\]

### petsc4py.typing.ArrayReal

- **petsc4py.typing.ArrayReal**

  Array of *float*.

  alias of *ndarray*\[*tuple*\[*int*, ...\], *dtype*\[*float*\]\]

### petsc4py.typing.ArrayComplex

- **petsc4py.typing.ArrayComplex**

  Array of *complex*.

  alias of *ndarray*\[*tuple*\[*int*, ...\], *dtype*\[*complex*\]\]

### petsc4py.typing.ArrayScalar

- **petsc4py.typing.ArrayScalar**

  Array of *Scalar* numbers.

  alias of *ndarray*\[*tuple*\[*int*, ...\], *dtype*\[*float* \| *complex*\]\]

### petsc4py.typing.DimsSpec

- **petsc4py.typing.DimsSpec**

  Dimensions specification.

  N-tuples indicates N-dimensional grid sizes.

  alias of *tuple*\[*int*, ...\]

### petsc4py.typing.AccessModeSpec

- **petsc4py.typing.AccessModeSpec**

  Access mode specification.

  - **Possible values are:**

    - •

      **'rw'** Read-Write mode.

    - •

      **'r'** Read-only mode.

    - •

      **'w'** Write-only mode.

    - •

      *None* as **'rw'**.

  alias of *Literal*\['rw', 'r', 'w'\] \| *None*

### petsc4py.typing.InsertModeSpec

- **petsc4py.typing.InsertModeSpec = petsc4py.PETSc.InsertMode \| bool \| None**

  Insertion mode specification.

  - **Possible values are:**

    - •

      *InsertMode.ADD\_VALUES* Add new value to existing one.

    - •

      *InsertMode.INSERT\_VALUES* Replace existing entry with new value.

    - •

      *None* as *InsertMode.INSERT\_VALUES*.

    - •

      *False* as *InsertMode.INSERT\_VALUES*.

    - •

      *True* as *InsertMode.ADD\_VALUES*.

  **SEE ALSO:**

  *InsertMode*

### petsc4py.typing.ScatterModeSpec

- **petsc4py.typing.ScatterModeSpec = petsc4py.PETSc.ScatterMode \| bool \| str \| None**

  Scatter mode specification.

  - **Possible values are:**

    - •

      *ScatterMode.FORWARD* Forward mode.

    - •

      *ScatterMode.REVERSE* Reverse mode.

    - •

      *None* as *ScatterMode.FORWARD*.

    - •

      *False* as *ScatterMode.FORWARD*.

    - •

      *True* as *ScatterMode.REVERSE*.

    - •

      **'forward'** as *ScatterMode.FORWARD*.

    - •

      **'reverse'** as *ScatterMode.REVERSE*.

  **SEE ALSO:**

  *ScatterMode*

### petsc4py.typing.LayoutSizeSpec

- **petsc4py.typing.LayoutSizeSpec = int \| tuple\[int, int\]**

  *int* or 2-*tuple* of *int* describing the layout sizes.

  A single *int* indicates global size. A *tuple* of *int* indicates **(local\_size, global\_size)**.

  **SEE ALSO:**

  *Sys.splitOwnership*

### petsc4py.typing.NormTypeSpec

- **petsc4py.typing.NormTypeSpec = petsc4py.PETSc.NormType \| None**

  Norm type specification.

  Possible values include:

  - •

    *NormType.NORM\_1* The 1-norm: Σₙ abs(xₙ) for vectors, maxₙ (Σᵢ abs(xₙᵢ)) for matrices.

  - •

    *NormType.NORM\_2* The 2-norm: √(Σₙ xₙ²) for vectors, largest singular values for matrices.

  - •

    *NormType.NORM\_INFINITY* The ∞-norm: maxₙ abs(xₙ) for vectors, maxᵢ (Σₙ abs(xₙᵢ)) for matrices.

  - •

    *NormType.NORM\_FROBENIUS* The Frobenius norm: same as 2-norm for vectors, √(Σₙᵢ xₙᵢ²) for matrices.

  - •

    *NormType.NORM\_1\_AND\_2* Compute both *NormType.NORM\_1* and *NormType.NORM\_2*.

  - •

    *None* as *NormType.NORM\_2* for vectors, *NormType.NORM\_FROBENIUS* for matrices.

  **SEE ALSO:**

  *PETSc.NormType*, *NormType*

### petsc4py.typing.PetscOptionsHandlerFunction

- **petsc4py.typing.PetscOptionsHandlerFunction**

  Callback for processing extra options.

  alias of *Callable*\[\[*Object*\], *None*\]

### petsc4py.typing.MatAssemblySpec

- **petsc4py.typing.MatAssemblySpec = petsc4py.PETSc.Mat.AssemblyType \| bool \| None**

  Matrix assembly specification.

  - **Possible values are:**

    - •

      *Mat.AssemblyType.FINAL*

    - •

      *Mat.AssemblyType.FLUSH*

    - •

      *None* as *Mat.AssemblyType.FINAL*

    - •

      *False* as *Mat.AssemblyType.FINAL*

    - •

      *True* as *Mat.AssemblyType.FLUSH*

  **SEE ALSO:**

  *MatAssemblyType*

### petsc4py.typing.MatSizeSpec

- **petsc4py.typing.MatSizeSpec = int \| tuple\[int, int\] \| tuple\[tuple\[int, int\], tuple\[int, int\]\]**

  *int* or (nested) *tuple* of *int* describing the matrix sizes.

  If *int* then rows = columns. A single *tuple* of *int* indicates **(rows, columns)**. A nested *tuple* of *int* indicates **((local\_rows, rows), (local\_columns, columns))**.

  **SEE ALSO:**

  *Sys.splitOwnership*

### petsc4py.typing.MatBlockSizeSpec

- **petsc4py.typing.MatBlockSizeSpec = int \| tuple\[int, int\]**

  The row and column block sizes.

  If a single *int* is provided then rows and columns share the same block size.

### petsc4py.typing.CSRIndicesSpec

- **petsc4py.typing.CSRIndicesSpec**

  CSR indices format specification.

  A 2-tuple carrying the **(row\_start, col\_indices)** information.

  alias of *tuple*\[*Sequence*\[*int*\], *Sequence*\[*int*\]\]

### petsc4py.typing.CSRSpec

- **petsc4py.typing.CSRSpec**

  CSR format specification.

  A 3-tuple carrying the **(row\_start, col\_indices, values)** information.

  alias of *tuple*\[*Sequence*\[*int*\], *Sequence*\[*int*\], *Sequence*\[*float* \| *complex*\]\]

### petsc4py.typing.NNZSpec

- **petsc4py.typing.NNZSpec**

  Nonzero pattern specification.

  A single *int* corresponds to fixed number of non-zeros per row. A *Sequence* of *int* indicates different non-zeros per row. If a 2-*tuple* is used, the elements of the tuple corresponds to the on-process and off-process parts of the matrix.

  **SEE ALSO:**

  *MatSeqAIJSetPreallocation*, *MatMPIAIJSetPreallocation*

  alias of *int* \| *Sequence*\[*int*\] \| *tuple*\[*Sequence*\[*int*\], *Sequence*\[*int*\]\]

### petsc4py.typing.MatNullFunction

- **petsc4py.typing.MatNullFunction**

  *PETSc.NullSpace* callback.

  alias of *Callable*\[\[*NullSpace*, *Vec*\], *None*\]

### petsc4py.typing.DMCoarsenHookFunction

- **petsc4py.typing.DMCoarsenHookFunction**

  *PETSc.DM* coarsening hook callback.

  alias of *Callable*\[\[*DM*, *DM*\], *None*\]

### petsc4py.typing.DMRestrictHookFunction

- **petsc4py.typing.DMRestrictHookFunction**

  *PETSc.DM* restriction hook callback.

  alias of *Callable*\[\[*DM*, *Mat*, *Vec*, *Mat*, *DM*\], *None*\]

### petsc4py.typing.KSPRHSFunction

- **petsc4py.typing.KSPRHSFunction**

  *PETSc.KSP* right-hand side function callback.

  alias of *Callable*\[\[*KSP*, *Vec*\], *None*\]

### petsc4py.typing.KSPOperatorsFunction

- **petsc4py.typing.KSPOperatorsFunction**

  *PETSc.KSP* operators function callback.

  alias of *Callable*\[\[*KSP*, *Mat*, *Mat*\], *None*\]

### petsc4py.typing.KSPConvergenceTestFunction

- **petsc4py.typing.KSPConvergenceTestFunction**

  *PETSc.KSP* convergence test callback.

  alias of *Callable*\[\[*KSP*, *int*, *float*\], *ConvergedReason*\]

### petsc4py.typing.KSPMonitorFunction

- **petsc4py.typing.KSPMonitorFunction**

  *PETSc.KSP* monitor callback.

  alias of *Callable*\[\[*KSP*, *int*, *float*\], *None*\]

### petsc4py.typing.KSPPreSolveFunction

- **petsc4py.typing.KSPPreSolveFunction**

  *PETSc.KSP* pre solve callback.

  alias of *Callable*\[\[*KSP*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.KSPPostSolveFunction

- **petsc4py.typing.KSPPostSolveFunction**

  *PETSc.KSP* post solve callback.

  alias of *Callable*\[\[*KSP*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.SNESMonitorFunction

- **petsc4py.typing.SNESMonitorFunction**

  *SNES* monitor callback.

  alias of *Callable*\[\[*SNES*, *int*, *float*\], *None*\]

### petsc4py.typing.SNESObjFunction

- **petsc4py.typing.SNESObjFunction**

  *SNES* objective function callback.

  alias of *Callable*\[\[*SNES*, *Vec*\], *None*\]

### petsc4py.typing.SNESFunction

- **petsc4py.typing.SNESFunction**

  *SNES* residual function callback.

  alias of *Callable*\[\[*SNES*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.SNESJacobianFunction

- **petsc4py.typing.SNESJacobianFunction**

  *SNES* Jacobian callback.

  alias of *Callable*\[\[*SNES*, *Vec*, *Mat*, *Mat*\], *None*\]

### petsc4py.typing.SNESGuessFunction

- **petsc4py.typing.SNESGuessFunction**

  *SNES* initial guess callback.

  alias of *Callable*\[\[*SNES*, *Vec*\], *None*\]

### petsc4py.typing.SNESUpdateFunction

- **petsc4py.typing.SNESUpdateFunction**

  *SNES* step update callback.

  alias of *Callable*\[\[*SNES*, *int*\], *None*\]

### petsc4py.typing.SNESLSPreFunction

- **petsc4py.typing.SNESLSPreFunction**

  *SNES* linesearch pre-check update callback.

  alias of *Callable*\[\[*Vec*, *Vec*\], *None*\]

### petsc4py.typing.SNESNGSFunction

- **petsc4py.typing.SNESNGSFunction**

  *SNES* nonlinear Gauss-Seidel callback.

  alias of *Callable*\[\[*SNES*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.SNESConvergedFunction

- **petsc4py.typing.SNESConvergedFunction**

  *SNES* convergence test callback.

  alias of *Callable*\[\[*SNES*, *int*, *tuple*\[*float*, *float*, *float*\]\], *ConvergedReason*\]

### petsc4py.typing.TSRHSFunction

- **petsc4py.typing.TSRHSFunction**

  *TS* right-hand side function callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.TSRHSJacobian

- **petsc4py.typing.TSRHSJacobian**

  *TS* right-hand side Jacobian callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *Mat*, *Mat*\], *None*\]

### petsc4py.typing.TSRHSJacobianP

- **petsc4py.typing.TSRHSJacobianP**

  *TS* right-hand side parameter Jacobian callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *Mat*\], *None*\]

### petsc4py.typing.TSIFunction

- **petsc4py.typing.TSIFunction**

  *TS* implicit function callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.TSIJacobian

- **petsc4py.typing.TSIJacobian**

  *TS* implicit Jacobian callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *Vec*, *float*, *Mat*, *Mat*\], *None*\]

### petsc4py.typing.TSIJacobianP

- **petsc4py.typing.TSIJacobianP**

  *TS* implicit parameter Jacobian callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *Vec*, *float*, *Mat*\], *None*\]

### petsc4py.typing.TSI2Function

- **petsc4py.typing.TSI2Function**

  *TS* implicit 2nd order function callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *Vec*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.TSI2Jacobian

- **petsc4py.typing.TSI2Jacobian**

  *TS* implicit 2nd order Jacobian callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *Vec*, *Vec*, *float*, *float*, *Mat*, *Mat*\], *None*\]

### petsc4py.typing.TSI2JacobianP

- **petsc4py.typing.TSI2JacobianP**

  *TS* implicit 2nd order parameter Jacobian callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *Vec*, *Vec*, *float*, *float*, *Mat*\], *None*\]

### petsc4py.typing.TSMonitorFunction

- **petsc4py.typing.TSMonitorFunction**

  *TS* monitor callback.

  alias of *Callable*\[\[*TS*, *int*, *float*, *Vec*\], *None*\]

### petsc4py.typing.TSPreStepFunction

- **petsc4py.typing.TSPreStepFunction**

  *TS* pre-step callback.

  alias of *Callable*\[\[*TS*\], *None*\]

### petsc4py.typing.TSPostStepFunction

- **petsc4py.typing.TSPostStepFunction**

  *TS* post-step callback.

  alias of *Callable*\[\[*TS*\], *None*\]

### petsc4py.typing.TSIndicatorFunction

- **petsc4py.typing.TSIndicatorFunction**

  *TS* event indicator callback.

  alias of *Callable*\[\[*TS*, *float*, *Vec*, *ndarray*\[*tuple*\[*int*, ...\], *dtype*\[*float*\]\]\], *None*\]

### petsc4py.typing.TSPostEventFunction

- **petsc4py.typing.TSPostEventFunction**

  *TS* post-event callback.

  alias of *Callable*\[\[*TS*, *ndarray*\[*tuple*\[*int*, ...\], *dtype*\[*int*\]\], *float*, *Vec*, *bool*\], *None*\]

### petsc4py.typing.TAOObjectiveFunction

- **petsc4py.typing.TAOObjectiveFunction**

  *TAO* objective function callback.

  alias of *Callable*\[\[*TAO*, *Vec*\], *float*\]

### petsc4py.typing.TAOGradientFunction

- **petsc4py.typing.TAOGradientFunction**

  *TAO* objective gradient callback.

  alias of *Callable*\[\[*TAO*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.TAOObjectiveGradientFunction

- **petsc4py.typing.TAOObjectiveGradientFunction**

  *TAO* objective function and gradient callback.

  alias of *Callable*\[\[*TAO*, *Vec*, *Vec*\], *float*\]

### petsc4py.typing.TAOHessianFunction

- **petsc4py.typing.TAOHessianFunction**

  *TAO* objective Hessian callback.

  alias of *Callable*\[\[*TAO*, *Vec*, *Mat*, *Mat*\], *None*\]

### petsc4py.typing.TAOUpdateFunction

- **petsc4py.typing.TAOUpdateFunction**

  *TAO* update callback.

  alias of *Callable*\[\[*TAO*, *int*\], *None*\]

### petsc4py.typing.TAOMonitorFunction

- **petsc4py.typing.TAOMonitorFunction**

  *TAO* monitor callback.

  alias of *Callable*\[\[*TAO*\], *None*\]

### petsc4py.typing.TAOConvergedFunction

- **petsc4py.typing.TAOConvergedFunction**

  *TAO* convergence test callback.

  alias of *Callable*\[\[*TAO*\], *None*\]

### petsc4py.typing.TAOJacobianFunction

- **petsc4py.typing.TAOJacobianFunction**

  *TAO* Jacobian callback.

  alias of *Callable*\[\[*TAO*, *Vec*, *Mat*, *Mat*\], *None*\]

### petsc4py.typing.TAOResidualFunction

- **petsc4py.typing.TAOResidualFunction**

  *TAO* residual callback.

  alias of *Callable*\[\[*TAO*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.TAOJacobianResidualFunction

- **petsc4py.typing.TAOJacobianResidualFunction**

  *TAO* Jacobian residual callback.

  alias of *Callable*\[\[*TAO*, *Vec*, *Mat*, *Mat*\], *None*\]

### petsc4py.typing.TAOVariableBoundsFunction

- **petsc4py.typing.TAOVariableBoundsFunction**

  *TAO* variable bounds callback.

  alias of *Callable*\[\[*TAO*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.TAOConstraintsFunction

- **petsc4py.typing.TAOConstraintsFunction**

  *TAO* constraints callback.

  alias of *Callable*\[\[*TAO*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.TAOLSObjectiveFunction

- **petsc4py.typing.TAOLSObjectiveFunction**

  *TAOLineSearch* objective function callback.

  alias of *Callable*\[\[*TAOLineSearch*, *Vec*\], *float*\]

### petsc4py.typing.TAOLSGradientFunction

- **petsc4py.typing.TAOLSGradientFunction**

  *TAOLineSearch* objective gradient callback.

  alias of *Callable*\[\[*TAOLineSearch*, *Vec*, *Vec*\], *None*\]

### petsc4py.typing.TAOLSObjectiveGradientFunction

- **petsc4py.typing.TAOLSObjectiveGradientFunction**

  *TAOLineSearch* objective function and gradient callback.

  alias of *Callable*\[\[*TAOLineSearch*, *Vec*, *Vec*\], *float*\]

### petsc4py.PETSc

Portable, Extensible Toolkit for Scientific Computation.

Basic constants:

- ***DECIDE***

  Use a default value for an *int* or *float* parameter.

- ***DEFAULT***

  Use a default value chosen by PETSc.

- ***DETERMINE***

  Compute a default value for an *int* or *float* parameter. For tolerances this uses the default value from when the object's type was set.

- ***CURRENT***

  Do not change the current value that is set.

- ***UNLIMITED***

  For a parameter that is a bound, such as the maximum number of iterations, do not bound the value.

More constants:

- ***INFINITY***

  Very large real value.

- ***NINFINITY***

  Very large negative real value.

- ***PINFINITY***

  Very large positive real value, same as *INFINITY*.

Classes

| | |
| --- | --- |
| *AO* | Application ordering object. |
| *Comm* | Communicator object. |
| *DM* | An object describing a computational grid or mesh. |
| *DMComposite* | A DM object that is used to manage data for a collection of DMs. |
| *DMDA* | A DM object that is used to manage data for a structured grid. |
| *DMInterpolation* | Interpolation on a mesh. |
| *DMLabel* | An object representing a subset of mesh entities from a *DM*. |
| *DMPlex* | Encapsulate an unstructured mesh. |
| *DMPlexTransform* | Mesh transformations. |
| *DMPlexTransformType* | Transformation types. |
| *DMShell* | A shell DM object, used to manage user-defined problem data. |
| *DMStag* | A DM object representing a "staggered grid" or a structured cell complex. |
| *DMSwarm* | A *DM* object used to represent arrays of data (fields) of arbitrary type. |
| *DS* | Discrete System object. |
| *Device* | The device object. |
| *DeviceContext* | DeviceContext object. |
| *DualSpace* | Dual space to a linear space. |
| *FE* | A PETSc object that manages a finite element space. |
| *IS* | A collection of indices. |
| *InsertMode* | Insertion mode. |
| *KSP* | Abstract PETSc object that manages all Krylov methods. |
| *LGMap* | Mapping from a local to a global ordering. |
| *Log* | Logging support. |
| *LogClass* | Logging support. |
| *LogEvent* | Logging support. |
| *LogStage* | Logging support for different stages. |
| *Mat* | Matrix object. |
| *MatPartitioning* | Object for managing the partitioning of a matrix or graph. |
| *NormType* | Norm type. |
| *NullSpace* | Nullspace object. |
| *Object* | Base class wrapping a PETSc object. |
| *Options* | The options database object. |
| *PC* | Preconditioners. |
| *Partitioner* | A graph partitioner. |
| *Quad* | Quadrature rule for integration. |
| *Random* | The random number generator object. |
| *SF* | Star Forest object for communication. |
| *SNES* | Nonlinear equations solver. |
| *Scatter* | Scatter object. |
| *ScatterMode* | Scatter mode. |
| *Section* | Mapping from integers in a range to unstructured set of integers. |
| *Space* | Function space object. |
| *Sys* | System utilities. |
| *TAO* | Optimization solver. |
| *TAOLineSearch* | TAO Line Search. |
| *TS* | ODE integrator. |
| *Vec* | A vector object. |
| *Viewer* | Viewer object. |
| *ViewerHDF5* | Viewer object for HDF5 file formats. |

### petsc4py.PETSc.AO

- **class petsc4py.PETSc.AO**

  Bases: *Object*

  Application ordering object.

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The application ordering types. |

### petsc4py.PETSc.AO.Type

- **class petsc4py.PETSc.AO.Type**

  Bases: *object*

  The application ordering types.

  Attributes Summary

  | | |
  | --- | --- |
  | *ADVANCED* | Object **ADVANCED** of type *str* |
  | *BASIC* | Object **BASIC** of type *str* |
  | *MAPPING* | Object **MAPPING** of type *str* |
  | *MEMORYSCALABLE* | Object **MEMORYSCALABLE** of type *str* |

  Attributes Documentation

  - **ADVANCED: *str* = ADVANCED**

    Object **ADVANCED** of type *str*

  - **BASIC: *str* = BASIC**

    Object **BASIC** of type *str*

  - **MAPPING: *str* = MAPPING**

    Object **MAPPING** of type *str*

  - **MEMORYSCALABLE: *str* = MEMORYSCALABLE**

    Object **MEMORYSCALABLE** of type *str*

Methods Summary

| | |
| --- | --- |
| *app2petsc*(indices) | Map an application-defined ordering to the PETSc ordering. |
| *createBasic*(app\[, petsc, comm\]) | Return a basic application ordering using two orderings. |
| *createMapping*(app\[, petsc, comm\]) | Return an application mapping using two orderings. |
| *createMemoryScalable*(app\[, petsc, comm\]) | Return a memory scalable application ordering using two orderings. |
| *destroy*() | Destroy the application ordering. |
| *getType*() | Return the application ordering type. |
| *petsc2app*(indices) | Map a PETSc ordering to the application-defined ordering. |
| *view*(\[viewer\]) | Display the application ordering. |

Methods Documentation

- **app2petsc(indices)**

  Map an application-defined ordering to the PETSc ordering.

  Collective.

  Any integers in **indices** that are negative are left unchanged. This allows one to convert, for example, neighbor lists that use negative entries to indicate nonexistent neighbors due to boundary conditions, etc.

  Integers that are out of range are mapped to -1.

  If **IS** is used, it cannot be of type stride or block.

  - **Parameters**

    **indices** (*Sequence\[int\] \| IS*) -- The indices; to be replaced with their mapped values.

  - **Return type**

    *Sequence*\[*int*\] \| *IS*

  **SEE ALSO:**

  *petsc2app*, *AOApplicationToPetscIS*, *AOApplicationToPetsc*

  *Source code at petsc4py/PETSc/AO.pyx:214*

- **createBasic(app, petsc=None, comm=None)**

  Return a basic application ordering using two orderings.

  Collective.

  The arrays/indices **app** and **petsc** must contain all the integers **0** to **len(app)-1** with no duplicates; that is there cannot be any "holes" in the indices. Use **createMapping** if you wish to have "holes" in the indices.

  - **Parameters**

    - •

      **app** (*Sequence\[int\] \| IS*) -- The application ordering.

    - •

      **petsc** (*Sequence\[int\] \| IS \| None*) -- Another ordering (may be *None* to indicate the natural ordering, that is 0, 1, 2, 3, ...).

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *createMemoryScalable*, *createMapping*, *AOCreateBasicIS*, *AOCreateBasic*

  *Source code at petsc4py/PETSc/AO.pyx:53*

- **createMapping(app, petsc=None, comm=None)**

  Return an application mapping using two orderings.

  Collective.

  The arrays **app** and **petsc** need NOT contain all the integers **0** to **len(app)-1**, that is there CAN be "holes" in the indices. Use **createBasic** if they do not have holes for better performance.

  - **Parameters**

    - •

      **app** (*Sequence\[int\] \| IS*) -- The application ordering.

    - •

      **petsc** (*Sequence\[int\] \| IS \| None*) -- Another ordering. May be *None* to indicate the identity ordering.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *createBasic*, *AOCreateMappingIS*, *AOCreateMapping*

  *Source code at petsc4py/PETSc/AO.pyx:154*

- **createMemoryScalable(app, petsc=None, comm=None)**

  Return a memory scalable application ordering using two orderings.

  Collective.

  The arrays/indices **app** and **petsc** must contain all the integers **0** to **len(app)-1** with no duplicates; that is there cannot be any "holes" in the indices. Use **createMapping** if you wish to have "holes" in the indices.

  Comparing with **createBasic**, this routine trades memory with message communication.

  - **Parameters**

    - •

      **app** (*Sequence\[int\] \| IS*) -- The application ordering.

    - •

      **petsc** (*Sequence\[int\] \| IS \| None*) -- Another ordering (may be *None* to indicate the natural ordering, that is 0, 1, 2, 3, ...).

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *createBasic*, *createMapping*, *AOCreateMemoryScalableIS*, *AOCreateMemoryScalable*

  *Source code at petsc4py/PETSc/AO.pyx:102*

- **destroy()**

  Destroy the application ordering.

  Collective.

  **SEE ALSO:**

  *AODestroy*

  *Source code at petsc4py/PETSc/AO.pyx:40*

  - **Return type**

    *Self*

- **getType()**

  Return the application ordering type.

  Not collective.

  **SEE ALSO:**

  *AOGetType*

  *Source code at petsc4py/PETSc/AO.pyx:200*

  - **Return type**

    *str*

- **petsc2app(indices)**

  Map a PETSc ordering to the application-defined ordering.

  Collective.

  Any integers in **indices** that are negative are left unchanged. This allows one to convert, for example, neighbor lists that use negative entries to indicate nonexistent neighbors due to boundary conditions, etc.

  Integers that are out of range are mapped to -1.

  If **IS** is used, it cannot be of type stride or block.

  - **Parameters**

    **indices** (*Sequence\[int\] \| IS*) -- The indices; to be replaced with their mapped values.

  - **Return type**

    *Sequence*\[*int*\] \| *IS*

  **SEE ALSO:**

  *app2petsc*, *AOPetscToApplicationIS*, *AOPetscToApplication*

  *Source code at petsc4py/PETSc/AO.pyx:248*

- **view(viewer=None)**

  Display the application ordering.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* to display the ordering.

  - **Return type**

    *None*

  **SEE ALSO:**

  *AOView*

  *Source code at petsc4py/PETSc/AO.pyx:21*

### petsc4py.PETSc.Comm

- **class petsc4py.PETSc.Comm**

  Bases: *object*

  Communicator object.

  Predefined instances:

  - ***COMM\_NULL***

    The *null* (or invalid) communicator.

  - ***COMM\_SELF***

    The *self* communicator.

  - ***COMM\_WORLD***

    The *world* communicator.

  **SEE ALSO:**

  *Sys.setDefaultComm*, *Sys.getDefaultComm*

  Methods Summary

  | | |
  | --- | --- |
  | *barrier*() | Barrier synchronization. |
  | *destroy*() | Destroy the communicator. |
  | *duplicate*() | Duplicate the communicator. |
  | *getRank*() | Return the rank of the calling processes in the communicator. |
  | *getSize*() | Return the number of processes in the communicator. |
  | *tompi4py*() | Convert communicator to *mpi4py*. |

  Attributes Summary

  | | |
  | --- | --- |
  | *fortran* | Fortran handle. |
  | *rank* | Communicator rank. |
  | *size* | Communicator size. |

  Methods Documentation

  - **barrier()**

    Barrier synchronization.

    Collective.

    *Source code at petsc4py/PETSc/Comm.pyx:123*

    - **Return type**

      *None*

  - **destroy()**

    Destroy the communicator.

    Collective.

    **SEE ALSO:**

    *PetscCommDestroy*

    *Source code at petsc4py/PETSc/Comm.pyx:61*

    - **Return type**

      *None*

  - **duplicate()**

    Duplicate the communicator.

    Collective.

    **SEE ALSO:**

    *PetscCommDuplicate*

    *Source code at petsc4py/PETSc/Comm.pyx:79*

    - **Return type**

      *Self*

  - **getRank()**

    Return the rank of the calling processes in the communicator.

    Not collective.

    *Source code at petsc4py/PETSc/Comm.pyx:111*

    - **Return type**

      *int*

  - **getSize()**

    Return the number of processes in the communicator.

    Not collective.

    *Source code at petsc4py/PETSc/Comm.pyx:99*

    - **Return type**

      *int*

  - **tompi4py()**

    Convert communicator to *mpi4py*.

    Not collective.

    **SEE ALSO:**

    *mpi4py.MPI.Comm*, *mpi4py.MPI.Intracomm*

    *Source code at petsc4py/PETSc/Comm.pyx:155*

    - **Return type**

      *Intracomm*

  Attributes Documentation

  - **fortran**

    Fortran handle.

    *Source code at petsc4py/PETSc/Comm.pyx:147*

  - **rank**

    Communicator rank.

    *Source code at petsc4py/PETSc/Comm.pyx:140*

  - **size**

    Communicator size.

    *Source code at petsc4py/PETSc/Comm.pyx:135*

### petsc4py.PETSc.DM

- **class petsc4py.PETSc.DM**

  Bases: *Object*

  An object describing a computational grid or mesh.

  Enumerations

  | | |
  | --- | --- |
  | *BoundaryType* | *DM* Boundary types. |
  | *PolytopeType* | The *DM* cell types. |
  | *ReorderDefaultFlag* | The *DM* reordering default flags. |
  | *Type* | *DM* types. |

### petsc4py.PETSc.DM.BoundaryType

- **class petsc4py.PETSc.DM.BoundaryType**

  Bases: *object*

  *DM* Boundary types.

  Attributes Summary

  | | |
  | --- | --- |
  | *GHOSTED* | Constant **GHOSTED** of type *int* |
  | *MIRROR* | Constant **MIRROR** of type *int* |
  | *NONE* | Constant **NONE** of type *int* |
  | *PERIODIC* | Constant **PERIODIC** of type *int* |
  | *TWIST* | Constant **TWIST** of type *int* |

  Attributes Documentation

  - **GHOSTED: *int* = GHOSTED**

    Constant **GHOSTED** of type *int*

  - **MIRROR: *int* = MIRROR**

    Constant **MIRROR** of type *int*

  - **NONE: *int* = NONE**

    Constant **NONE** of type *int*

  - **PERIODIC: *int* = PERIODIC**

    Constant **PERIODIC** of type *int*

  - **TWIST: *int* = TWIST**

    Constant **TWIST** of type *int*

### petsc4py.PETSc.DM.PolytopeType

- **class petsc4py.PETSc.DM.PolytopeType**

  Bases: *object*

  The *DM* cell types.

  Attributes Summary

  | | |
  | --- | --- |
  | *FV\_GHOST* | Constant **FV\_GHOST** of type *int* |
  | *HEXAHEDRON* | Constant **HEXAHEDRON** of type *int* |
  | *INTERIOR\_GHOST* | Constant **INTERIOR\_GHOST** of type *int* |
  | *POINT* | Constant **POINT** of type *int* |
  | *POINT\_PRISM\_TENSOR* | Constant **POINT\_PRISM\_TENSOR** of type *int* |
  | *PYRAMID* | Constant **PYRAMID** of type *int* |
  | *QUADRILATERAL* | Constant **QUADRILATERAL** of type *int* |
  | *QUAD\_PRISM\_TENSOR* | Constant **QUAD\_PRISM\_TENSOR** of type *int* |
  | *SEGMENT* | Constant **SEGMENT** of type *int* |
  | *SEG\_PRISM\_TENSOR* | Constant **SEG\_PRISM\_TENSOR** of type *int* |
  | *TETRAHEDRON* | Constant **TETRAHEDRON** of type *int* |
  | *TRIANGLE* | Constant **TRIANGLE** of type *int* |
  | *TRI\_PRISM* | Constant **TRI\_PRISM** of type *int* |
  | *TRI\_PRISM\_TENSOR* | Constant **TRI\_PRISM\_TENSOR** of type *int* |
  | *UNKNOWN* | Constant **UNKNOWN** of type *int* |
  | *UNKNOWN\_CELL* | Constant **UNKNOWN\_CELL** of type *int* |
  | *UNKNOWN\_FACE* | Constant **UNKNOWN\_FACE** of type *int* |

  Attributes Documentation

  - **FV\_GHOST: *int* = FV\_GHOST**

    Constant **FV\_GHOST** of type *int*

  - **HEXAHEDRON: *int* = HEXAHEDRON**

    Constant **HEXAHEDRON** of type *int*

  - **INTERIOR\_GHOST: *int* = INTERIOR\_GHOST**

    Constant **INTERIOR\_GHOST** of type *int*

  - **POINT: *int* = POINT**

    Constant **POINT** of type *int*

  - **POINT\_PRISM\_TENSOR: *int* = POINT\_PRISM\_TENSOR**

    Constant **POINT\_PRISM\_TENSOR** of type *int*

  - **PYRAMID: *int* = PYRAMID**

    Constant **PYRAMID** of type *int*

  - **QUADRILATERAL: *int* = QUADRILATERAL**

    Constant **QUADRILATERAL** of type *int*

  - **QUAD\_PRISM\_TENSOR: *int* = QUAD\_PRISM\_TENSOR**

    Constant **QUAD\_PRISM\_TENSOR** of type *int*

  - **SEGMENT: *int* = SEGMENT**

    Constant **SEGMENT** of type *int*

  - **SEG\_PRISM\_TENSOR: *int* = SEG\_PRISM\_TENSOR**

    Constant **SEG\_PRISM\_TENSOR** of type *int*

  - **TETRAHEDRON: *int* = TETRAHEDRON**

    Constant **TETRAHEDRON** of type *int*

  - **TRIANGLE: *int* = TRIANGLE**

    Constant **TRIANGLE** of type *int*

  - **TRI\_PRISM: *int* = TRI\_PRISM**

    Constant **TRI\_PRISM** of type *int*

  - **TRI\_PRISM\_TENSOR: *int* = TRI\_PRISM\_TENSOR**

    Constant **TRI\_PRISM\_TENSOR** of type *int*

  - **UNKNOWN: *int* = UNKNOWN**

    Constant **UNKNOWN** of type *int*

  - **UNKNOWN\_CELL: *int* = UNKNOWN\_CELL**

    Constant **UNKNOWN\_CELL** of type *int*

  - **UNKNOWN\_FACE: *int* = UNKNOWN\_FACE**

    Constant **UNKNOWN\_FACE** of type *int*

### petsc4py.PETSc.DM.ReorderDefaultFlag

- **class petsc4py.PETSc.DM.ReorderDefaultFlag**

  Bases: *object*

  The *DM* reordering default flags.

  Attributes Summary

  | | |
  | --- | --- |
  | *FALSE* | Constant **FALSE** of type *int* |
  | *NOTSET* | Constant **NOTSET** of type *int* |
  | *TRUE* | Constant **TRUE** of type *int* |

  Attributes Documentation

  - **FALSE: *int* = FALSE**

    Constant **FALSE** of type *int*

  - **NOTSET: *int* = NOTSET**

    Constant **NOTSET** of type *int*

  - **TRUE: *int* = TRUE**

    Constant **TRUE** of type *int*

### petsc4py.PETSc.DM.Type

- **class petsc4py.PETSc.DM.Type**

  Bases: *object*

  *DM* types.

  Attributes Summary

  | | |
  | --- | --- |
  | *COMPOSITE* | Object **COMPOSITE** of type *str* |
  | *DA* | Object **DA** of type *str* |
  | *FOREST* | Object **FOREST** of type *str* |
  | *MOAB* | Object **MOAB** of type *str* |
  | *NETWORK* | Object **NETWORK** of type *str* |
  | *P4EST* | Object **P4EST** of type *str* |
  | *P8EST* | Object **P8EST** of type *str* |
  | *PATCH* | Object **PATCH** of type *str* |
  | *PLEX* | Object **PLEX** of type *str* |
  | *PRODUCT* | Object **PRODUCT** of type *str* |
  | *REDUNDANT* | Object **REDUNDANT** of type *str* |
  | *SHELL* | Object **SHELL** of type *str* |
  | *SLICED* | Object **SLICED** of type *str* |
  | *STAG* | Object **STAG** of type *str* |
  | *SWARM* | Object **SWARM** of type *str* |

  Attributes Documentation

  - **COMPOSITE: *str* = COMPOSITE**

    Object **COMPOSITE** of type *str*

  - **DA: *str* = DA**

    Object **DA** of type *str*

  - **FOREST: *str* = FOREST**

    Object **FOREST** of type *str*

  - **MOAB: *str* = MOAB**

    Object **MOAB** of type *str*

  - **NETWORK: *str* = NETWORK**

    Object **NETWORK** of type *str*

  - **P4EST: *str* = P4EST**

    Object **P4EST** of type *str*

  - **P8EST: *str* = P8EST**

    Object **P8EST** of type *str*

  - **PATCH: *str* = PATCH**

    Object **PATCH** of type *str*

  - **PLEX: *str* = PLEX**

    Object **PLEX** of type *str*

  - **PRODUCT: *str* = PRODUCT**

    Object **PRODUCT** of type *str*

  - **REDUNDANT: *str* = REDUNDANT**

    Object **REDUNDANT** of type *str*

  - **SHELL: *str* = SHELL**

    Object **SHELL** of type *str*

  - **SLICED: *str* = SLICED**

    Object **SLICED** of type *str*

  - **STAG: *str* = STAG**

    Object **STAG** of type *str*

  - **SWARM: *str* = SWARM**

    Object **SWARM** of type *str*

Methods Summary

| | |
| --- | --- |
| *adaptLabel*(label) | Adapt a *DM* based on a *DMLabel*. |
| *adaptMetric*(metric\[, bdLabel, rgLabel\]) | Return a mesh adapted to the specified metric field. |
| *addCoarsenHook*(coarsenhook, restricthook\[, ...\]) | Add a callback to be executed when restricting to a coarser grid. |
| *addField*(field\[, label\]) | Add a field to a *DM* object. |
| *appendOptionsPrefix*(prefix) | Append to the prefix used for searching for options in the database. |
| *clearDS*() | Remove all discrete systems from the *DM*. |
| *clearFields*() | Remove all fields from the *DM*. |
| *clearLabelStratum*(name, value) | Remove all points from a stratum. |
| *clearLabelValue*(name, point, value) | Remove a point from a *DMLabel* with given value. |
| *clone*() | Return the cloned *DM* . |
| *coarsen*(\[comm\]) | Return a coarsened *DM* object. |
| *coarsenHierarchy*(nlevels) | Coarsen this *DM* and return the coarsened *DM* hierarchy. |
| *convert*(dm\_type) | Return a *DM* converted to another *DM*. |
| *copyDS*(dm\[, minDegree, maxDegree\]) | Copy the discrete systems for this *DM* into another *DM*. |
| *copyDisc*(dm) | Copy fields and discrete systems of a *DM* into another *DM*. |
| *copyFields*(dm\[, minDegree, maxDegree\]) | Copy the discretizations of this *DM* into another *DM*. |
| *create*(\[comm\]) | Return an empty *DM*. |
| *createDS*() | Create discrete systems. |
| *createFieldDecomposition*() | Return a list of *IS* objects. |
| *createGlobalVec*() | Return a global vector. |
| *createInjection*(dm) | Return the injection matrix into a finer *DM*. |
| *createInterpolation*(dm) | Return the interpolation matrix to a finer *DM*. |
| *createLabel*(name) | Create a label of the given name if it does not already exist. |
| *createLocalVec*() | Return a local vector. |
| *createMassMatrix*(dmf) | Return the mass matrix between this *DM* and the given *DM*. |
| *createMat*() | Return an empty matrix. |
| *createRestriction*(dm) | Return the restriction matrix between this *DM* and the given *DM*. |
| *createSectionSF*(localsec, globalsec) | Create the *SF* encoding the parallel DOF overlap for the *DM*. |
| *createSubDM*(fields) | Return *IS* and *DM* encapsulating a subproblem. |
| *destroy*() | Destroy the object. |
| *getAppCtx*() | Return the application context. |
| *getAuxiliaryVec*(\[label, value, part\]) | Return an auxiliary vector for region. |
| *getBasicAdjacency*() | Return the flags for determining variable influence. |
| *getBlockSize*() | Return the inherent block size associated with a *DM*. |
| *getBoundingBox*() | Return the dimension of embedding space for coordinates values. |
| *getCellCoordinateDM*() | Return the cell coordinate *DM*. |
| *getCellCoordinateSection*() | Return the cell coordinate layout over the *DM*. |
| *getCellCoordinates*() | Return a global vector with the cellwise coordinates. |
| *getCellCoordinatesLocal*() | Return a local vector with the cellwise coordinates. |
| *getCoarseDM*() | Return the coarse *DM*. |
| *getCoarsenLevel*() | Return the number of coarsenings. |
| *getCoordinateDM*() | Return the coordinate *DM*. |
| *getCoordinateDim*() | Return the dimension of embedding space for coordinates values. |
| *getCoordinateSection*() | Return coordinate values layout over the mesh. |
| *getCoordinates*() | Return a global vector with the coordinates associated. |
| *getCoordinatesLocal*() | Return a local vector with the coordinates associated. |
| *getCoordinatesLocalized*() | Check if the coordinates have been localized for cells. |
| *getDS*() | Return default *DS*. |
| *getDimension*() | Return the topological dimension of the *DM*. |
| *getField*(index) | Return the discretization object for a given *DM* field. |
| *getFieldAdjacency*(field) | Return the flags for determining variable influence. |
| *getGlobalSection*() | Return the *Section* encoding the global data layout for the *DM*. |
| *getGlobalVec*(\[name\]) | Return a global vector. |
| *getLGMap*() | Return local mapping to global mapping. |
| *getLabel*(name) | Return the label of a given name. |
| *getLabelIdIS*(name) | Return an *IS* of all values that the *DMLabel* takes. |
| *getLabelName*(index) | Return the name of nth label. |
| *getLabelOutput*(name) | Return the output flag for a given label. |
| *getLabelSize*(name) | Return the number of values that the *DMLabel* takes. |
| *getLabelValue*(name, point) | Return the value in *DMLabel* for the given point. |
| *getLocalBoundingBox*() | Return the bounding box for the piece of the *DM*. |
| *getLocalSection*() | Return the *Section* encoding the local data layout for the *DM*. |
| *getLocalVec*(\[name\]) | Return a local vector. |
| *getNumFields*() | Return the number of fields in the *DM*. |
| *getNumLabels*() | Return the number of labels defined by on the *DM*. |
| *getOptionsPrefix*() | Return the prefix used for searching for options in the database. |
| *getPointSF*() | Return the *SF* encoding the parallel DOF overlap for the *DM*. |
| *getRefineLevel*() | Return the refinement level. |
| *getSectionSF*() | Return the *Section* encoding the parallel DOF overlap. |
| *getStratumIS*(name, value) | Return the points in a label stratum. |
| *getStratumSize*(name, value) | Return the number of points in a label stratum. |
| *getType*() | Return the *DM* type name. |
| *globalToLocal*(vg, vl\[, addv\]) | Update local vectors from global vector. |
| *hasLabel*(name) | Determine whether the *DM* has a label. |
| *load*(viewer) | Return a *DM* stored in binary. |
| *localToGlobal*(vl, vg\[, addv\]) | Update global vectors from local vector. |
| *localToLocal*(vl, vlg\[, addv\]) | Map the values from a local vector to another local vector. |
| *localizeCoordinates*() | Create local coordinates for cells having periodic faces. |
| *refine*(\[comm\]) | Return a refined *DM* object. |
| *refineHierarchy*(nlevels) | Refine this *DM* and return the refined *DM* hierarchy. |
| *removeLabel*(name) | Remove and destroy the label by name. |
| *restoreGlobalVec*(vg\[, name\]) | Restore a global vector obtained with *getGlobalVec*. |
| *restoreLocalVec*(vl\[, name\]) | Restore a local vector obtained with *getLocalVec*. |
| *setAppCtx*(appctx) | Set the application context. |
| *setAuxiliaryVec*(aux, label\[, value, part\]) | Set an auxiliary vector for a specific region. |
| *setBasicAdjacency*(useCone, useClosure) | Set the flags for determining variable influence. |
| *setCellCoordinateDM*(dm) | Set the cell coordinate *DM*. |
| *setCellCoordinateSection*(dim, sec) | Set the cell coordinate layout over the *DM*. |
| *setCellCoordinates*(c) | Set a global vector with the cellwise coordinates. |
| *setCellCoordinatesLocal*(c) | Set a local vector with the cellwise coordinates. |
| *setCoarseDM*(dm) | Set the coarse *DM*. |
| *setCoordinateDim*(dim) | Set the dimension of embedding space for coordinates values. |
| *setCoordinateDisc*(disc, project) | Project coordinates to a different space. |
| *setCoordinates*(c) | Set a global vector that holds the coordinates. |
| *setCoordinatesLocal*(c) | Set a local vector with the ghost point holding the coordinates. |
| *setDimension*(dim) | Set the topological dimension of the *DM*. |
| *setField*(index, field\[, label\]) | Set the discretization object for a given *DM* field. |
| *setFieldAdjacency*(field, useCone, useClosure) | Set the flags for determining variable influence. |
| *setFromOptions*() | Configure the object from the options database. |
| *setGlobalSection*(sec) | Set the *Section* encoding the global data layout for the *DM*. |
| *setKSPComputeOperators*(operators\[, args, kargs\]) | Matrix associated with the linear system. |
| *setLabelOutput*(name, output) | Set if a given label should be saved to a view. |
| *setLabelValue*(name, point, value) | Set a point to a *DMLabel* with a given value. |
| *setLocalSection*(sec) | Set the *Section* encoding the local data layout for the *DM*. |
| *setMatType*(mat\_type) | Set matrix type to be used by *DM.createMat*. |
| *setNumFields*(numFields) | Set the number of fields in the *DM*. |
| *setOptionsPrefix*(prefix) | Set the prefix used for searching for options in the database. |
| *setPointSF*(sf) | Set the *SF* encoding the parallel DOF overlap for the *DM*. |
| *setRefineLevel*(level) | Set the number of refinements. |
| *setSNESFunction*(function\[, args, kargs\]) | Set *SNES* residual evaluation function. |
| *setSNESJacobian*(jacobian\[, args, kargs\]) | Set the *SNES* Jacobian evaluation function. |
| *setSectionSF*(sf) | Set the *Section* encoding the parallel DOF overlap for the *DM*. |
| *setType*(dm\_type) | Build a *DM*. |
| *setUp*() | Return the data structure. |
| *setVecType*(vec\_type) | Set the type of vector. |
| *view*(\[viewer\]) | View the *DM*. |

Attributes Summary

| | |
| --- | --- |
| *appctx* | Application context. |
| *ds* | Discrete space. |

Methods Documentation

- **adaptLabel(label)**

  Adapt a *DM* based on a *DMLabel*.

  Collective.

  - **Parameters**

    **label** (*str*) -- The name of the *DMLabel*.

  - **Return type**

    *DM*

  **SEE ALSO:**

  *DMAdaptLabel*

  *Source code at petsc4py/PETSc/DM.pyx:1645*

- **adaptMetric(metric, bdLabel=None, rgLabel=None)**

  Return a mesh adapted to the specified metric field.

  Collective.

  - **Parameters**

    - •

      **metric** (*Vec*) -- The metric to which the mesh is adapted, defined vertex-wise.

    - •

      **bdLabel** (*str \| None*) -- Label for boundary tags.

    - •

      **rgLabel** (*str \| None*) -- Label for cell tag.

  - **Return type**

    *DM*

  **SEE ALSO:**

  *DMAdaptMetric*

  *Source code at petsc4py/PETSc/DM.pyx:1668*

- **addCoarsenHook(coarsenhook, restricthook, args=None, kargs=None)**

  Add a callback to be executed when restricting to a coarser grid.

  Logically collective.

  - **Parameters**

    - •

      **coarsenhook** (*DMCoarsenHookFunction*) -- The coarsen hook function.

    - •

      **restricthook** (*DMRestrictHookFunction*) -- The restrict hook function.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the hooks.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the hooks.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMCoarsenHookAdd*

  *Source code at petsc4py/PETSc/DM.pyx:2333*

- **addField(field, label=None)**

  Add a field to a *DM* object.

  Logically collective.

  - **Parameters**

    - •

      **field** (*Object*) -- The discretization object.

    - •

      **label** (*str \| None*) -- The name of the label indicating the support of the field, or *None* for the entire mesh.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMAddField*

  *Source code at petsc4py/PETSc/DM.pyx:611*

- **appendOptionsPrefix(prefix)**

  Append to the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *DMAppendOptionsPrefix*

  *Source code at petsc4py/PETSc/DM.pyx:298*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **clearDS()**

  Remove all discrete systems from the *DM*.

  Logically collective.

  **SEE ALSO:**

  *DMClearDS*

  *Source code at petsc4py/PETSc/DM.pyx:691*

  - **Return type**

    *None*

- **clearFields()**

  Remove all fields from the *DM*.

  Logically collective.

  **SEE ALSO:**

  *DMClearFields*

  *Source code at petsc4py/PETSc/DM.pyx:634*

  - **Return type**

    *None*

- **clearLabelStratum(name, value)**

  Remove all points from a stratum.

  Not collective.

  - **Parameters**

    - •

      **name** (*str*) -- The label name.

    - •

      **value** (*int*) -- The stratum value.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMClearLabelStratum*

  *Source code at petsc4py/PETSc/DM.pyx:2124*

- **clearLabelValue(name, point, value)**

  Remove a point from a *DMLabel* with given value.

  Not collective.

  - **Parameters**

    - •

      **name** (*str*) -- The label name.

    - •

      **point** (*int*) -- The mesh point.

    - •

      **value** (*int*) -- The label value for the point.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMClearLabelValue*

  *Source code at petsc4py/PETSc/DM.pyx:2010*

- **clone()**

  Return the cloned *DM* .

  Collective.

  **SEE ALSO:**

  *DMClone*

  *Source code at petsc4py/PETSc/DM.pyx:155*

  - **Return type**

    *DM*

- **coarsen(comm=None)**

  Return a coarsened *DM* object.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *DM*

  **SEE ALSO:**

  *DMCoarsen*

  *Source code at petsc4py/PETSc/DM.pyx:1519*

- **coarsenHierarchy(nlevels)**

  Coarsen this *DM* and return the coarsened *DM* hierarchy.

  Collective.

  - **Parameters**

    **nlevels** (*int*) -- The number of levels of coarsening.

  - **Return type**

    *list*

  **SEE ALSO:**

  *DMCoarsenHierarchy*

  *Source code at petsc4py/PETSc/DM.pyx:1570*

- **convert(dm\_type)**

  Return a *DM* converted to another *DM*.

  Collective.

  - **Parameters**

    **dm\_type** (*Type \| str*) -- The new *DM.Type*, use **“same”** for the same type.

  - **Return type**

    *DM*

  **SEE ALSO:**

  *DM.Type*, *DMConvert*

  *Source code at petsc4py/PETSc/DM.pyx:1472*

- **copyDS(dm, minDegree=None, maxDegree=None)**

  Copy the discrete systems for this *DM* into another *DM*.

  Collective.

  - **Parameters**

    - •

      **dm** (*DM*) -- The *DM* that the discrete fields are copied into.

    - •

      **minDegree** -- The minimum polynommial degree for the discretization, or *None* for no limit

    - •

      **maxDegree** -- The maximum polynommial degree for the discretization, or *None* for no limit

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMCopyDS*

  *Source code at petsc4py/PETSc/DM.pyx:718*

- **copyDisc(dm)**

  Copy fields and discrete systems of a *DM* into another *DM*.

  Collective.

  - **Parameters**

    **dm** (*DM*) -- The *DM* that the fields and discrete systems are copied into.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMCopyDisc*

  *Source code at petsc4py/PETSc/DM.pyx:751*

- **copyFields(dm, minDegree=None, maxDegree=None)**

  Copy the discretizations of this *DM* into another *DM*.

  Collective.

  - **Parameters**

    - •

      **dm** (*DM*) -- The *DM* that the fields are copied into.

    - •

      **minDegree** -- The minimum polynommial degree for the discretization, or *None* for no limit

    - •

      **maxDegree** -- The maximum polynommial degree for the discretization, or *None* for no limit

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMCopyFields*

  *Source code at petsc4py/PETSc/DM.pyx:646*

- **create(comm=None)**

  Return an empty *DM*.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *DMCreate*

  *Source code at petsc4py/PETSc/DM.pyx:134*

- **createDS()**

  Create discrete systems.

  Collective.

  **SEE ALSO:**

  *DMCreateDS*

  *Source code at petsc4py/PETSc/DM.pyx:679*

  - **Return type**

    *None*

- **createFieldDecomposition()**

  Return a list of *IS* objects.

  Not collective.

  Notes

  The user is responsible for freeing all requested arrays.

  **SEE ALSO:**

  *DMCreateFieldDecomposition*

  *Source code at petsc4py/PETSc/DM.pyx:2222*

  - **Return type**

    *tuple*\[*list*, *list*, *list*\]

- **createGlobalVec()**

  Return a global vector.

  Collective.

  **SEE ALSO:**

  *DMCreateGlobalVector*

  *Source code at petsc4py/PETSc/DM.pyx:798*

  - **Return type**

    *Vec*

- **createInjection(dm)**

  Return the injection matrix into a finer *DM*.

  Collective.

  - **Parameters**

    **dm** (*DM*) -- The second, finer *DM* object.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *DMCreateInjection*

  *Source code at petsc4py/PETSc/DM.pyx:1434*

- **createInterpolation(dm)**

  Return the interpolation matrix to a finer *DM*.

  Collective.

  - **Parameters**

    **dm** (*DM*) -- The second, finer *DM*.

  - **Return type**

    *tuple*\[*Mat*, *Vec*\]

  **SEE ALSO:**

  *DMCreateInterpolation*

  *Source code at petsc4py/PETSc/DM.pyx:1413*

- **createLabel(name)**

  Create a label of the given name if it does not already exist.

  Not collective.

  - **Parameters**

    **name** (*str*) -- The label name.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMCreateLabel*

  *Source code at petsc4py/PETSc/DM.pyx:1922*

- **createLocalVec()**

  Return a local vector.

  Not collective.

  **SEE ALSO:**

  *DMCreateLocalVector*

  *Source code at petsc4py/PETSc/DM.pyx:812*

  - **Return type**

    *Vec*

- **createMassMatrix(dmf)**

  Return the mass matrix between this *DM* and the given *DM*.

  Collective.

  - **Parameters**

    **dmf** (*DM*) -- The second *DM*.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *DMCreateMassMatrix*

  *Source code at petsc4py/PETSc/DM.pyx:1394*

- **createMat()**

  Return an empty matrix.

  Collective.

  **SEE ALSO:**

  *DMCreateMatrix*

  *Source code at petsc4py/PETSc/DM.pyx:1380*

  - **Return type**

    *Mat*

- **createRestriction(dm)**

  Return the restriction matrix between this *DM* and the given *DM*.

  Collective.

  - **Parameters**

    **dm** (*DM*) -- The second, finer *DM* object.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *DMCreateRestriction*

  *Source code at petsc4py/PETSc/DM.pyx:1453*

- **createSectionSF(localsec, globalsec)**

  Create the *SF* encoding the parallel DOF overlap for the *DM*.

  Collective.

  - **Parameters**

    - •

      **localsec** (*Section*) -- Describe the local data layout.

    - •

      **globalsec** (*Section*) -- Describe the global data layout.

  - **Return type**

    *None*

  Notes

  Encoding based on the *Section* describing the data layout.

  **SEE ALSO:**

  *DM.getSectionSF*, *DMCreateSectionSF*

  *Source code at petsc4py/PETSc/DM.pyx:1786*

- **createSubDM(fields)**

  Return *IS* and *DM* encapsulating a subproblem.

  Not collective.

  - **Returns**

    - •

      **iset** (*IS*) -- The global indices for all the degrees of freedom.

    - •

      **subdm** (*DM*) -- The *DM* for the subproblem.

  - **Parameters**

    **fields** (*Sequence\[int\]*)

  - **Return type**

    *tuple*\[*IS*, *DM*\]

  **SEE ALSO:**

  *DMCreateSubDM*

  *Source code at petsc4py/PETSc/DM.pyx:446*

- **destroy()**

  Destroy the object.

  Collective.

  **SEE ALSO:**

  *DMDestroy*

  *Source code at petsc4py/PETSc/DM.pyx:121*

  - **Return type**

    *Self*

- **getAppCtx()**

  Return the application context.

  *Source code at petsc4py/PETSc/DM.pyx:343*

  - **Return type**

    *Any*

- **getAuxiliaryVec(label=None, value=0, part=0)**

  Return an auxiliary vector for region.

  Not collective.

  - **Parameters**

    - •

      **label** (*str \| None*) -- The name of the *DMLabel*.

    - •

      **value** (*int \| None*) -- Indicate the region.

    - •

      **part** (*int \| None*) -- The equation part, or 0 is unused.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *DM.getLabel*, *DMGetAuxiliaryVec*

  *Source code at petsc4py/PETSc/DM.pyx:503*

- **getBasicAdjacency()**

  Return the flags for determining variable influence.

  Not collective.

  - **Returns**

    - •

      **useCone** (*bool*) -- Whether adjacency uses cone information.

    - •

      **useClosure** (*bool*) -- Whether adjacency is computed using full closure information.

  - **Return type**

    *tuple*\[*bool*, *bool*\]

  **SEE ALSO:**

  *DMGetBasicAdjacency*

  *Source code at petsc4py/PETSc/DM.pyx:370*

- **getBlockSize()**

  Return the inherent block size associated with a *DM*.

  Not collective.

  **SEE ALSO:**

  *DMGetBlockSize*

  *Source code at petsc4py/PETSc/DM.pyx:770*

  - **Return type**

    *int*

- **getBoundingBox()**

  Return the dimension of embedding space for coordinates values.

  Not collective.

  **SEE ALSO:**

  *DMGetBoundingBox*

  *Source code at petsc4py/PETSc/DM.pyx:1306*

  - **Return type**

    *tuple*\[*tuple*\[*float*, *float*\], ...\]

- **getCellCoordinateDM()**

  Return the cell coordinate *DM*.

  Collective.

  **SEE ALSO:**

  *DMGetCellCoordinateDM*

  *Source code at petsc4py/PETSc/DM.pyx:1159*

  - **Return type**

    *DM*

- **getCellCoordinateSection()**

  Return the cell coordinate layout over the *DM*.

  Collective.

  **SEE ALSO:**

  *DMGetCellCoordinateSection*

  *Source code at petsc4py/PETSc/DM.pyx:1194*

  - **Return type**

    *Section*

- **getCellCoordinates()**

  Return a global vector with the cellwise coordinates.

  Collective.

  **SEE ALSO:**

  *DMGetCellCoordinates*

  *Source code at petsc4py/PETSc/DM.pyx:1226*

  - **Return type**

    *Vec*

- **getCellCoordinatesLocal()**

  Return a local vector with the cellwise coordinates.

  Collective.

  **SEE ALSO:**

  *DMGetCellCoordinatesLocal*

  *Source code at petsc4py/PETSc/DM.pyx:1258*

  - **Return type**

    *Vec*

- **getCoarseDM()**

  Return the coarse *DM*.

  Collective.

  **SEE ALSO:**

  *DMGetCoarseDM*

  *Source code at petsc4py/PETSc/DM.pyx:1020*

  - **Return type**

    *DM*

- **getCoarsenLevel()**

  Return the number of coarsenings.

  Not collective.

  **SEE ALSO:**

  *DMGetCoarsenLevel*

  *Source code at petsc4py/PETSc/DM.pyx:1629*

  - **Return type**

    *int*

- **getCoordinateDM()**

  Return the coordinate *DM*.

  Collective.

  **SEE ALSO:**

  *DMGetCoordinateDM*

  *Source code at petsc4py/PETSc/DM.pyx:1048*

  - **Return type**

    *DM*

- **getCoordinateDim()**

  Return the dimension of embedding space for coordinates values.

  Not collective.

  **SEE ALSO:**

  *DMGetCoordinateDim*

  *Source code at petsc4py/PETSc/DM.pyx:238*

  - **Return type**

    *int*

- **getCoordinateSection()**

  Return coordinate values layout over the mesh.

  Collective.

  **SEE ALSO:**

  *DMGetCoordinateSection*

  *Source code at petsc4py/PETSc/DM.pyx:1063*

  - **Return type**

    *Section*

- **getCoordinates()**

  Return a global vector with the coordinates associated.

  Collective.

  **SEE ALSO:**

  *DMGetCoordinates*

  *Source code at petsc4py/PETSc/DM.pyx:1095*

  - **Return type**

    *Vec*

- **getCoordinatesLocal()**

  Return a local vector with the coordinates associated.

  Collective the first time it is called.

  **SEE ALSO:**

  *DMGetCoordinatesLocal*

  *Source code at petsc4py/PETSc/DM.pyx:1127*

  - **Return type**

    *Vec*

- **getCoordinatesLocalized()**

  Check if the coordinates have been localized for cells.

  Not collective.

  **SEE ALSO:**

  *DMGetCoordinatesLocalized*

  *Source code at petsc4py/PETSc/DM.pyx:1292*

  - **Return type**

    *bool*

- **getDS()**

  Return default *DS*.

  Not collective.

  **SEE ALSO:**

  *DMGetDS*

  *Source code at petsc4py/PETSc/DM.pyx:703*

  - **Return type**

    *DS*

- **getDimension()**

  Return the topological dimension of the *DM*.

  Not collective.

  **SEE ALSO:**

  *DMGetDimension*

  *Source code at petsc4py/PETSc/DM.pyx:206*

  - **Return type**

    *int*

- **getField(index)**

  Return the discretization object for a given *DM* field.

  Not collective.

  - **Parameters**

    **index** (*int*) -- The field number.

  - **Return type**

    *tuple*\[*Object*, *None*\]

  **SEE ALSO:**

  *DMGetField*

  *Source code at petsc4py/PETSc/DM.pyx:586*

- **getFieldAdjacency(field)**

  Return the flags for determining variable influence.

  Not collective.

  - **Parameters**

    **field** (*int*) -- The field number.

  - **Returns**

    - •

      **useCone** (*bool*) -- Whether adjacency uses cone information.

    - •

      **useClosure** (*bool*) -- Whether adjacency is computed using full closure information.

  - **Return type**

    *tuple*\[*bool*, *bool*\]

  **SEE ALSO:**

  *DMGetAdjacency*

  *Source code at petsc4py/PETSc/DM.pyx:416*

- **getGlobalSection()**

  Return the *Section* encoding the global data layout for the *DM*.

  Collective the first time it is called.

  **SEE ALSO:**

  *DMGetGlobalSection*

  *Source code at petsc4py/PETSc/DM.pyx:1762*

  - **Return type**

    *Section*

- **getGlobalVec(name=None)**

  Return a global vector.

  Collective.

  - **Parameters**

    **name** (*str \| None*) -- The optional name to retrieve a persistent vector.

  - **Return type**

    *Vec*

  Notes

  When done with the vector, it must be restored using *restoreGlobalVec*.

  **SEE ALSO:**

  *restoreGlobalVec*, *DMGetGlobalVector*, *DMGetNamedGlobalVector*

  *Source code at petsc4py/PETSc/DM.pyx:826*

- **getLGMap()**

  Return local mapping to global mapping.

  Collective.

  **SEE ALSO:**

  *DMGetLocalToGlobalMapping*

  *Source code at petsc4py/PETSc/DM.pyx:1003*

  - **Return type**

    *LGMap*

- **getLabel(name)**

  Return the label of a given name.

  Not collective.

  **SEE ALSO:**

  *DMGetLabel*

  *Source code at petsc4py/PETSc/DM.pyx:1704*

  - **Parameters**

    **name** (*str*)

  - **Return type**

    *DMLabel*

- **getLabelIdIS(name)**

  Return an *IS* of all values that the *DMLabel* takes.

  Not collective.

  - **Parameters**

    **name** (*str*) -- The label name.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *DMLabelGetValueIS*, *DMGetLabelIdIS*

  *Source code at petsc4py/PETSc/DM.pyx:2055*

- **getLabelName(index)**

  Return the name of nth label.

  Not collective.

  - **Parameters**

    **index** (*int*) -- The label number.

  - **Return type**

    *str*

  **SEE ALSO:**

  *DMGetLabelName*

  *Source code at petsc4py/PETSc/DM.pyx:1881*

- **getLabelOutput(name)**

  Return the output flag for a given label.

  Not collective.

  - **Parameters**

    **name** (*str*) -- The label name.

  - **Return type**

    *bool*

  **SEE ALSO:**

  *DMGetLabelOutput*

  *Source code at petsc4py/PETSc/DM.pyx:2168*

- **getLabelSize(name)**

  Return the number of values that the *DMLabel* takes.

  Not collective.

  - **Parameters**

    **name** (*str*) -- The label name.

  - **Return type**

    *int*

  **SEE ALSO:**

  *DMLabelGetNumValues*, *DMGetLabelSize*

  *Source code at petsc4py/PETSc/DM.pyx:2034*

- **getLabelValue(name, point)**

  Return the value in *DMLabel* for the given point.

  Not collective.

  - **Parameters**

    - •

      **name** (*str*) -- The label name.

    - •

      **point** (*int*) -- The mesh point

  - **Return type**

    *int*

  **SEE ALSO:**

  *DMGetLabelValue*

  *Source code at petsc4py/PETSc/DM.pyx:1963*

- **getLocalBoundingBox()**

  Return the bounding box for the piece of the *DM*.

  Not collective.

  **SEE ALSO:**

  *DMGetLocalBoundingBox*

  *Source code at petsc4py/PETSc/DM.pyx:1323*

  - **Return type**

    *tuple*\[*tuple*\[*float*, *float*\], ...\]

- **getLocalSection()**

  Return the *Section* encoding the local data layout for the *DM*.

  Not collective.

  **SEE ALSO:**

  *DMGetGlobalSection*

  *Source code at petsc4py/PETSc/DM.pyx:1735*

  - **Return type**

    *Section*

- **getLocalVec(name=None)**

  Return a local vector.

  Not collective.

  - **Parameters**

    **name** (*str \| None*) -- The optional name to retrieve a persistent vector.

  - **Return type**

    *Vec*

  Notes

  When done with the vector, it must be restored using *restoreLocalVec*.

  **SEE ALSO:**

  *restoreLocalVec*, *DMGetLocalVector*, *DMGetNamedLocalVector*

  *Source code at petsc4py/PETSc/DM.pyx:880*

- **getNumFields()**

  Return the number of fields in the *DM*.

  Not collective.

  **SEE ALSO:**

  *DMGetNumFields*

  *Source code at petsc4py/PETSc/DM.pyx:546*

  - **Return type**

    *int*

- **getNumLabels()**

  Return the number of labels defined by on the *DM*.

  Not collective.

  **SEE ALSO:**

  *DMGetNumLabels*

  *Source code at petsc4py/PETSc/DM.pyx:1867*

  - **Return type**

    *int*

- **getOptionsPrefix()**

  Return the prefix used for searching for options in the database.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *DMGetOptionsPrefix*

  *Source code at petsc4py/PETSc/DM.pyx:284*

  - **Return type**

    *str*

- **getPointSF()**

  Return the *SF* encoding the parallel DOF overlap for the *DM*.

  Not collective.

  **SEE ALSO:**

  *DMGetPointSF*

  *Source code at petsc4py/PETSc/DM.pyx:1840*

  - **Return type**

    *SF*

- **getRefineLevel()**

  Return the refinement level.

  Not collective.

  **SEE ALSO:**

  *DMGetRefineLevel*

  *Source code at petsc4py/PETSc/DM.pyx:1597*

  - **Return type**

    *int*

- **getSectionSF()**

  Return the *Section* encoding the parallel DOF overlap.

  Collective the first time it is called.

  **SEE ALSO:**

  *DMGetSectionSF*

  *Source code at petsc4py/PETSc/DM.pyx:1809*

  - **Return type**

    *SF*

- **getStratumIS(name, value)**

  Return the points in a label stratum.

  Not collective.

  - **Parameters**

    - •

      **name** (*str*) -- The label name.

    - •

      **value** (*int*) -- The stratum value.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *DMGetStratumIS*

  *Source code at petsc4py/PETSc/DM.pyx:2100*

- **getStratumSize(name, value)**

  Return the number of points in a label stratum.

  Not collective.

  - **Parameters**

    - •

      **name** (*str*) -- The label name.

    - •

      **value** (*int*) -- The stratum value.

  - **Return type**

    *int*

  **SEE ALSO:**

  *DMGetStratumSize*

  *Source code at petsc4py/PETSc/DM.pyx:2076*

- **getType()**

  Return the *DM* type name.

  Not collective.

  **SEE ALSO:**

  *DMGetType*

  *Source code at petsc4py/PETSc/DM.pyx:192*

  - **Return type**

    *str*

- **globalToLocal(vg, vl, addv=None)**

  Update local vectors from global vector.

  Neighborwise collective.

  - **Parameters**

    - •

      **vg** (*Vec*) -- The global vector.

    - •

      **vl** (*Vec*) -- The local vector.

    - •

      **addv** (*InsertModeSpec \| None*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMGlobalToLocalBegin*, *DMGlobalToLocalEnd*

  *Source code at petsc4py/PETSc/DM.pyx:934*

- **hasLabel(name)**

  Determine whether the *DM* has a label.

  Not collective.

  - **Parameters**

    **name** (*str*) -- The label name.

  - **Return type**

    *bool*

  **SEE ALSO:**

  *DMHasLabel*

  *Source code at petsc4py/PETSc/DM.pyx:1901*

- **load(viewer)**

  Return a *DM* stored in binary.

  Collective.

  - **Parameters**

    **viewer** (*Viewer*) -- Viewer used to store the *DM*, like *Viewer.Type.BINARY* or *Viewer.Type.HDF5*.

  - **Return type**

    *Self*

  Notes

  When using *Viewer.Type.HDF5* format, one can save multiple *DMPlex* meshes in a single HDF5 files. This in turn requires one to name the *DMPlex* object with *Object.setName* before saving it with *DM.view* and before loading it with *DM.load* for identification of the mesh object.

  **SEE ALSO:**

  *DM.view*, *DM.load*, *Object.setName*, *DMLoad*

  *Source code at petsc4py/PETSc/DM.pyx:95*

- **localToGlobal(vl, vg, addv=None)**

  Update global vectors from local vector.

  Neighborwise collective.

  - **Parameters**

    - •

      **vl** (*Vec*) -- The local vector.

    - •

      **vg** (*Vec*) -- The global vector.

    - •

      **addv** (*InsertModeSpec \| None*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMLocalToGlobalBegin*, *DMLocalToGlobalEnd*

  *Source code at petsc4py/PETSc/DM.pyx:957*

- **localToLocal(vl, vlg, addv=None)**

  Map the values from a local vector to another local vector.

  Neighborwise collective.

  - **Parameters**

    - •

      **vl** (*Vec*) -- The local vector.

    - •

      **vlg** (*Vec*) -- The global vector.

    - •

      **addv** (*InsertModeSpec \| None*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMLocalToLocalBegin*, *DMLocalToLocalEnd*

  *Source code at petsc4py/PETSc/DM.pyx:980*

- **localizeCoordinates()**

  Create local coordinates for cells having periodic faces.

  Collective.

  Notes

  Used if the mesh is periodic.

  **SEE ALSO:**

  *DMLocalizeCoordinates*

  *Source code at petsc4py/PETSc/DM.pyx:1340*

  - **Return type**

    *None*

- **refine(comm=None)**

  Return a refined *DM* object.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *DM*

  **SEE ALSO:**

  *DMRefine*

  *Source code at petsc4py/PETSc/DM.pyx:1495*

- **refineHierarchy(nlevels)**

  Refine this *DM* and return the refined *DM* hierarchy.

  Collective.

  - **Parameters**

    **nlevels** (*int*) -- The number of levels of refinement.

  - **Return type**

    *list*

  **SEE ALSO:**

  *DMRefineHierarchy*

  *Source code at petsc4py/PETSc/DM.pyx:1543*

- **removeLabel(name)**

  Remove and destroy the label by name.

  Not collective.

  - **Parameters**

    **name** (*str*) -- The label name.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMRemoveLabel*

  *Source code at petsc4py/PETSc/DM.pyx:1941*

- **restoreGlobalVec(vg, name=None)**

  Restore a global vector obtained with *getGlobalVec*.

  Logically collective.

  - **Parameters**

    - •

      **vg** (*Vec*) -- The global vector.

    - •

      **name** (*str \| None*) -- The name used to retrieve the persistent vector, if any.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getGlobalVec*, *DMRestoreGlobalVector*, *DMRestoreNamedGlobalVector*

  *Source code at petsc4py/PETSc/DM.pyx:855*

- **restoreLocalVec(vl, name=None)**

  Restore a local vector obtained with *getLocalVec*.

  Not collective.

  - **Parameters**

    - •

      **vl** (*Vec*) -- The local vector.

    - •

      **name** (*str \| None*) -- The name used to retrieve the persistent vector, if any.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getLocalVec*, *DMRestoreLocalVector*, *DMRestoreNamedLocalVector*

  *Source code at petsc4py/PETSc/DM.pyx:909*

- **setAppCtx(appctx)**

  Set the application context.

  *Source code at petsc4py/PETSc/DM.pyx:339*

  - **Parameters**

    **appctx** (*Any*)

  - **Return type**

    *None*

- **setAuxiliaryVec(aux, label, value=0, part=0)**

  Set an auxiliary vector for a specific region.

  Not collective.

  - **Parameters**

    - •

      **aux** (*Vec*) -- The auxiliary vector.

    - •

      **label** (*DMLabel \| None*) -- The name of the *DMLabel*.

    - •

      **value** -- Indicate the region.

    - •

      **part** -- The equation part, or 0 is unused.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMGetLabel*, *DMSetAuxiliaryVec*

  *Source code at petsc4py/PETSc/DM.pyx:473*

- **setBasicAdjacency(useCone, useClosure)**

  Set the flags for determining variable influence.

  Not collective.

  - **Parameters**

    - •

      **useCone** (*bool*) -- Whether adjacency uses cone information.

    - •

      **useClosure** (*bool*) -- Whether adjacency is computed using full closure information.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetBasicAdjacency*

  *Source code at petsc4py/PETSc/DM.pyx:349*

- **setCellCoordinateDM(dm)**

  Set the cell coordinate *DM*.

  Collective.

  - **Parameters**

    **dm** (*DM*) -- The cell coordinate *DM*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetCellCoordinateDM*

  *Source code at petsc4py/PETSc/DM.pyx:1142*

- **setCellCoordinateSection(dim, sec)**

  Set the cell coordinate layout over the *DM*.

  Collective.

  - **Parameters**

    - •

      **dim** (*int*) -- The embedding dimension, or *DETERMINE*.

    - •

      **sec** (*Section*) -- The cell coordinate *Section*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetCellCoordinateSection*

  *Source code at petsc4py/PETSc/DM.pyx:1174*

- **setCellCoordinates(c)**

  Set a global vector with the cellwise coordinates.

  Collective.

  - **Parameters**

    **c** (*Vec*) -- The global cell coordinate vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetCellCoordinates*

  *Source code at petsc4py/PETSc/DM.pyx:1209*

- **setCellCoordinatesLocal(c)**

  Set a local vector with the cellwise coordinates.

  Not collective.

  - **Parameters**

    **c** (*Vec*) -- The local cell coordinate vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetCellCoordinatesLocal*

  *Source code at petsc4py/PETSc/DM.pyx:1241*

- **setCoarseDM(dm)**

  Set the coarse *DM*.

  Collective.

  **SEE ALSO:**

  *DMSetCoarseDM*

  *Source code at petsc4py/PETSc/DM.pyx:1035*

  - **Parameters**

    **dm** (*DM*)

  - **Return type**

    *None*

- **setCoordinateDim(dim)**

  Set the dimension of embedding space for coordinates values.

  Not collective.

  - **Parameters**

    **dim** (*int*) -- The embedding dimension.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetCoordinateDim*

  *Source code at petsc4py/PETSc/DM.pyx:252*

- **setCoordinateDisc(disc, project)**

  Project coordinates to a different space.

  Collective.

  - **Parameters**

    - •

      **disc** (*FE*) -- The new coordinates discretization.

    - •

      **project** (*bool*)

  - **Return type**

    *Self*

  **SEE ALSO:**

  *DMSetCoordinateDisc*

  *Source code at petsc4py/PETSc/DM.pyx:1273*

- **setCoordinates(c)**

  Set a global vector that holds the coordinates.

  Collective.

  - **Parameters**

    **c** (*Vec*) -- Coordinate Vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetCoordinates*

  *Source code at petsc4py/PETSc/DM.pyx:1078*

- **setCoordinatesLocal(c)**

  Set a local vector with the ghost point holding the coordinates.

  Not collective.

  - **Parameters**

    **c** (*Vec*) -- Coordinate Vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetCoordinatesLocal*

  *Source code at petsc4py/PETSc/DM.pyx:1110*

- **setDimension(dim)**

  Set the topological dimension of the *DM*.

  Collective.

  - **Parameters**

    **dim** (*int*) -- Topological dimension.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetDimension*

  *Source code at petsc4py/PETSc/DM.pyx:220*

- **setField(index, field, label=None)**

  Set the discretization object for a given *DM* field.

  Logically collective.

  - **Parameters**

    - •

      **index** (*int*) -- The field number.

    - •

      **field** (*Object*) -- The discretization object.

    - •

      **label** (*str \| None*) -- The name of the label indicating the support of the field, or *None* for the entire mesh.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetField*

  *Source code at petsc4py/PETSc/DM.pyx:560*

- **setFieldAdjacency(field, useCone, useClosure)**

  Set the flags for determining variable influence.

  Not collective.

  - **Parameters**

    - •

      **field** (*int*) -- The field number.

    - •

      **useCone** (*bool*) -- Whether adjacency uses cone information.

    - •

      **useClosure** (*bool*) -- Whether adjacency is computed using full closure information.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetAdjacency*

  *Source code at petsc4py/PETSc/DM.pyx:392*

- **setFromOptions()**

  Configure the object from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *DMSetFromOptions*

  *Source code at petsc4py/PETSc/DM.pyx:312*

  - **Return type**

    *None*

- **setGlobalSection(sec)**

  Set the *Section* encoding the global data layout for the *DM*.

  Collective.

  **SEE ALSO:**

  *DMSetGlobalSection*

  *Source code at petsc4py/PETSc/DM.pyx:1750*

  - **Parameters**

    **sec** (*Section*)

  - **Return type**

    *None*

- **setKSPComputeOperators(operators, args=None, kargs=None)**

  Matrix associated with the linear system.

  Collective.

  - **Parameters**

    - •

      **operator** -- Callback function to compute the operators.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMKSPSetComputeOperators*

  *Source code at petsc4py/PETSc/DM.pyx:2194*

- **setLabelOutput(name, output)**

  Set if a given label should be saved to a view.

  Not collective.

  - **Parameters**

    - •

      **name** (*str*) -- The label name.

    - •

      **output** (*bool*) -- If *True*, the label is saved to the viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetLabelOutput*

  *Source code at petsc4py/PETSc/DM.pyx:2146*

- **setLabelValue(name, point, value)**

  Set a point to a *DMLabel* with a given value.

  Not collective.

  - **Parameters**

    - •

      **name** (*str*) -- The label name.

    - •

      **point** (*int*) -- The mesh point.

    - •

      **value** (*int*) -- The label value for the point.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetLabelValue*

  *Source code at petsc4py/PETSc/DM.pyx:1986*

- **setLocalSection(sec)**

  Set the *Section* encoding the local data layout for the *DM*.

  Collective.

  **SEE ALSO:**

  *DMSetLocalSection*

  *Source code at petsc4py/PETSc/DM.pyx:1723*

  - **Parameters**

    **sec** (*Section*)

  - **Return type**

    *None*

- **setMatType(mat\_type)**

  Set matrix type to be used by *DM.createMat*.

  Logically collective.

  - **Parameters**

    **mat\_type** (*Type \| str*) -- The matrix type.

  - **Return type**

    *None*

  Notes

  The option **-dm\_mat\_type** is used to set the matrix type.

  **SEE ALSO:**

  *Working with PETSc options*, *DMSetMatType*

  *Source code at petsc4py/PETSc/DM.pyx:1357*

- **setNumFields(numFields)**

  Set the number of fields in the *DM*.

  Logically collective.

  **SEE ALSO:**

  *DMSetNumFields*

  *Source code at petsc4py/PETSc/DM.pyx:533*

  - **Parameters**

    **numFields** (*int*)

  - **Return type**

    *None*

- **setOptionsPrefix(prefix)**

  Set the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *getOptionsPrefix*, *DMSetOptionsPrefix*

  *Source code at petsc4py/PETSc/DM.pyx:270*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **setPointSF(sf)**

  Set the *SF* encoding the parallel DOF overlap for the *DM*.

  Logically collective.

  **SEE ALSO:**

  *DMSetPointSF*

  *Source code at petsc4py/PETSc/DM.pyx:1855*

  - **Parameters**

    **sf** (*SF*)

  - **Return type**

    *None*

- **setRefineLevel(level)**

  Set the number of refinements.

  Not collective.

  - **Parameters**

    - •

      **nlevels** -- The number of refinement.

    - •

      **level** (*int*)

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSetRefineLevel*

  *Source code at petsc4py/PETSc/DM.pyx:1611*

- **setSNESFunction(function, args=None, kargs=None)**

  Set *SNES* residual evaluation function.

  Not collective.

  - **Parameters**

    - •

      **function** (*SNESFunction*) -- The callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *SNES.setFunction*, *DMSNESSetFunction*

  *Source code at petsc4py/PETSc/DM.pyx:2270*

- **setSNESJacobian(jacobian, args=None, kargs=None)**

  Set the *SNES* Jacobian evaluation function.

  Not collective.

  - **Parameters**

    - •

      **jacobian** (*SNESJacobianFunction*) -- The Jacobian callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *SNES.setJacobian*, *DMSNESSetJacobian*

  *Source code at petsc4py/PETSc/DM.pyx:2302*

- **setSectionSF(sf)**

  Set the *Section* encoding the parallel DOF overlap for the *DM*.

  Logically collective.

  **SEE ALSO:**

  *DMSetSectionSF*

  *Source code at petsc4py/PETSc/DM.pyx:1824*

  - **Parameters**

    **sf** (*SF*)

  - **Return type**

    *None*

- **setType(dm\_type)**

  Build a *DM*.

  Collective.

  - **Parameters**

    **dm\_type** (*Type \| str*) -- The type of *DM*.

  - **Return type**

    *None*

  Notes

  *DM* types are available in *DM.Type* class.

  **SEE ALSO:**

  *DM.Type*, *DMSetType*

  *Source code at petsc4py/PETSc/DM.pyx:169*

- **setUp()**

  Return the data structure.

  Collective.

  **SEE ALSO:**

  *DMSetUp*

  *Source code at petsc4py/PETSc/DM.pyx:324*

  - **Return type**

    *Self*

- **setVecType(vec\_type)**

  Set the type of vector.

  Logically collective.

  **SEE ALSO:**

  *Vec.Type*, *DMSetVecType*

  *Source code at petsc4py/PETSc/DM.pyx:784*

  - **Parameters**

    **vec\_type** (*Type \| str*)

  - **Return type**

    *None*

- **view(viewer=None)**

  View the *DM*.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- The DM viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMView*

  *Source code at petsc4py/PETSc/DM.pyx:76*

Attributes Documentation

- **appctx**

  Application context.

  *Source code at petsc4py/PETSc/DM.pyx:2386*

- **ds**

  Discrete space.

  *Source code at petsc4py/PETSc/DM.pyx:2396*

### petsc4py.PETSc.DMComposite

- **class petsc4py.PETSc.DMComposite**

  Bases: *DM*

  A DM object that is used to manage data for a collection of DMs.

  Methods Summary

  | | |
  | --- | --- |
  | *addDM*(dm, \*args) | Add a DM vector to the composite. |
  | *create*(\[comm\]) | Create a composite object. |
  | *gather*(gvec, imode, lvecs) | Gather split local vectors into a coupled global vector. |
  | *getAccess*(gvec\[, locs\]) | Get access to the individual vectors from the global vector. |
  | *getEntries*() | Return sub-DMs contained in the composite. |
  | *getGlobalISs*() | Return the index sets for each composed object in the composite. |
  | *getLGMaps*() | Return a local-to-global mapping for each DM in the composite. |
  | *getLocalISs*() | Return index sets for each component of a composite local vector. |
  | *getNumber*() | Get number of sub-DMs contained in the composite. |
  | *scatter*(gvec, lvecs) | Scatter coupled global vector into split local vectors. |

  Methods Documentation

  - **addDM(dm, \*args)**

    Add a DM vector to the composite.

    Collective.

    - **Parameters**

      - •

        **dm** (*DM*) -- The DM object.

      - •

        **\*args** (*DM*) -- Additional DM objects.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMCompositeAddDM*

    *Source code at petsc4py/PETSc/DMComposite.pyx:28*

  - **create(comm=None)**

    Create a composite object.

    Collective.

    - **Parameters**

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DMCompositeCreate*

    *Source code at petsc4py/PETSc/DMComposite.pyx:6*

  - **gather(gvec, imode, lvecs)**

    Gather split local vectors into a coupled global vector.

    Collective.

    - **Parameters**

      - •

        **gvec** (*Vec*) -- The global vector.

      - •

        **imode** (*InsertModeSpec*) -- The insertion mode.

      - •

        **lvecs** (*Sequence\[Vec\]*) -- The individual sequential vectors.

    - **Return type**

      *None*

    **SEE ALSO:**

    *scatter*, *DMCompositeGatherArray*

    *Source code at petsc4py/PETSc/DMComposite.pyx:115*

  - **getAccess(gvec, locs=None)**

    Get access to the individual vectors from the global vector.

    Not collective.

    Use via *The with statement* context manager (PEP 343).

    - **Parameters**

      - •

        **gvec** (*Vec*) -- The global vector.

      - •

        **locs** (*Sequence\[int\] \| None*) -- Indices of vectors wanted, or *None* to get all vectors.

    - **Return type**

      *Any*

    *Source code at petsc4py/PETSc/DMComposite.pyx:219*

  - **getEntries()**

    Return sub-DMs contained in the composite.

    Not collective.

    **SEE ALSO:**

    *DMCompositeGetEntriesArray*

    *Source code at petsc4py/PETSc/DMComposite.pyx:66*

    - **Return type**

      *list*\[*DM*\]

  - **getGlobalISs()**

    Return the index sets for each composed object in the composite.

    Collective.

    These could be used to extract a subset of vector entries for a "multi-physics" preconditioner.

    Use *getLocalISs* for index sets in the packed local numbering, and *getLGMaps* for to map local sub-DM (including ghost) indices to packed global indices.

    **SEE ALSO:**

    *DMCompositeGetGlobalISs*

    *Source code at petsc4py/PETSc/DMComposite.pyx:143*

    - **Return type**

      *list*\[*IS*\]

  - **getLGMaps()**

    Return a local-to-global mapping for each DM in the composite.

    Collective.

    Note that this includes all the ghost points that individual ghosted DMDA may have.

    **SEE ALSO:**

    *DMCompositeGetISLocalToGlobalMappings*

    *Source code at petsc4py/PETSc/DMComposite.pyx:196*

    - **Return type**

      *list*\[*LGMap*\]

  - **getLocalISs()**

    Return index sets for each component of a composite local vector.

    Not collective.

    To get the composite global indices at all local points (including ghosts), use *getLGMaps*.

    To get index sets for pieces of the composite global vector, use *getGlobalISs*.

    **SEE ALSO:**

    *DMCompositeGetLocalISs*

    *Source code at petsc4py/PETSc/DMComposite.pyx:170*

    - **Return type**

      *list*\[*IS*\]

  - **getNumber()**

    Get number of sub-DMs contained in the composite.

    Not collective.

    **SEE ALSO:**

    *DMCompositeGetNumberDM*

    *Source code at petsc4py/PETSc/DMComposite.pyx:51*

    - **Return type**

      *int*

  - **scatter(gvec, lvecs)**

    Scatter coupled global vector into split local vectors.

    Collective.

    - **Parameters**

      - •

        **gvec** (*Vec*) -- The global vector.

      - •

        **lvecs** (*Sequence\[Vec\]*) -- Array of local vectors.

    - **Return type**

      *None*

    **SEE ALSO:**

    *gather*, *DMCompositeScatterArray*

    *Source code at petsc4py/PETSc/DMComposite.pyx:90*

### petsc4py.PETSc.DMDA

- **class petsc4py.PETSc.DMDA**

  Bases: *DM*

  A DM object that is used to manage data for a structured grid.

  Enumerations

  | | |
  | --- | --- |
  | *ElementType* | Element types. |
  | *InterpolationType* | Interpolation types. |
  | *StencilType* | Stencil types. |

### petsc4py.PETSc.DMDA.ElementType

- **class petsc4py.PETSc.DMDA.ElementType**

  Bases: *object*

  Element types.

  Attributes Summary

  | | |
  | --- | --- |
  | *P1* | Constant **P1** of type *int* |
  | *Q1* | Constant **Q1** of type *int* |

  Attributes Documentation

  - **P1: *int* = P1**

    Constant **P1** of type *int*

  - **Q1: *int* = Q1**

    Constant **Q1** of type *int*

### petsc4py.PETSc.DMDA.InterpolationType

- **class petsc4py.PETSc.DMDA.InterpolationType**

  Bases: *object*

  Interpolation types.

  Attributes Summary

  | | |
  | --- | --- |
  | *Q0* | Constant **Q0** of type *int* |
  | *Q1* | Constant **Q1** of type *int* |

  Attributes Documentation

  - **Q0: *int* = Q0**

    Constant **Q0** of type *int*

  - **Q1: *int* = Q1**

    Constant **Q1** of type *int*

### petsc4py.PETSc.DMDA.StencilType

- **class petsc4py.PETSc.DMDA.StencilType**

  Bases: *object*

  Stencil types.

  Attributes Summary

  | | |
  | --- | --- |
  | *BOX* | Constant **BOX** of type *int* |
  | *STAR* | Constant **STAR** of type *int* |

  Attributes Documentation

  - **BOX: *int* = BOX**

    Constant **BOX** of type *int*

  - **STAR: *int* = STAR**

    Constant **STAR** of type *int*

Methods Summary

| | |
| --- | --- |
| *create*(\[dim, dof, sizes, proc\_sizes, ...\]) | Create a **DMDA** object. |
| *createNaturalVec*() | Create a vector that will hold values in the natural numbering. |
| *duplicate*(\[dof, boundary\_type, ...\]) | Duplicate a DMDA. |
| *getAO*() | Return the application ordering context for a distributed array. |
| *getBoundaryType*() | Return the type of ghost nodes at boundary in each dimension. |
| *getCoordinateName*(index) | Return the name of a coordinate dimension. |
| *getCorners*() | Return the lower left corner and the sizes of the owned local region. |
| *getDim*() | Return the topological dimension. |
| *getDof*() | Return the number of degrees of freedom per node. |
| *getElementType*() | Return the element type to be returned by *getElements*. |
| *getElements*(\[elem\_type\]) | Return an array containing the indices of all the local elements. |
| *getFieldName*(field) | Return the name of an individual field component. |
| *getGhostCorners*() | Return the lower left corner and the size of the ghosted local region. |
| *getGhostRanges*() | Return the ranges of the local region in each dimension, including ghost nodes. |
| *getInterpolationType*() | Return the type of interpolation. |
| *getOwnershipRanges*() | Return the ranges of indices in each dimension owned by each process. |
| *getProcSizes*() | Return the number of processes in each dimension. |
| *getRanges*() | Return the ranges of the owned local region in each dimension. |
| *getRefinementFactor*() | Return the ratios that the DMDA grid is refined in each dimension. |
| *getScatter*() | Return the global-to-local, and local-to-local scatter contexts. |
| *getSizes*() | Return the number of grid points in each dimension. |
| *getStencil*() | Return the stencil type and width. |
| *getStencilType*() | Return the stencil type. |
| *getStencilWidth*() | Return the stencil width. |
| *getVecArray*(vec\[, readonly\]) | Get access to the vector as laid out on a N-d grid. |
| *globalToNatural*(vg, vn\[, addv\]) | Map values to the "natural" grid ordering. |
| *naturalToGlobal*(vn, vg\[, addv\]) | Map values the to grid ordering. |
| *setBoundaryType*(boundary\_type) | Set the type of ghost nodes on domain boundaries. |
| *setCoordinateName*(index, name) | Set the name of the coordinate dimension. |
| *setDim*(dim) | Set the topological dimension. |
| *setDof*(dof) | Set the number of degrees of freedom per vertex. |
| *setElementType*(elem\_type) | Set the element type to be returned by *getElements*. |
| *setFieldName*(field, name) | Set the name of individual field components. |
| *setInterpolationType*(interp\_type) | Set the type of interpolation. |
| *setProcSizes*(proc\_sizes) | Set the number of processes in each dimension. |
| *setRefinementFactor*(\[refine\_x, refine\_y, ...\]) | Set the ratios for the DMDA grid refinement. |
| *setSizes*(sizes) | Set the number of grid points in each dimension. |
| *setStencil*(stencil\_type, stencil\_width) | Set the stencil type and width. |
| *setStencilType*(stencil\_type) | Set the stencil type. |
| *setStencilWidth*(stencil\_width) | Set the stencil width. |
| *setUniformCoordinates*(\[xmin, xmax, ymin, ...\]) | Set the DMDA coordinates to be a uniform grid. |

Attributes Summary

| | |
| --- | --- |
| *boundary\_type* | Boundary types in each dimension. |
| *corners* | The lower left corner and size of local region in each dimension. |
| *dim* | The grid dimension. |
| *dof* | The number of DOFs associated with each stratum of the grid. |
| *ghost\_corners* | The lower left corner and size of local region in each dimension. |
| *ghost\_ranges* | Ranges of local region, including ghost nodes. |
| *proc\_sizes* | The number of processes in each dimension in the global decomposition. |
| *ranges* | Ranges of the local region in each dimension. |
| *sizes* | The global dimension. |
| *stencil* | Stencil type and width. |
| *stencil\_type* | Stencil type. |
| *stencil\_width* | Elementwise stencil width. |

Methods Documentation

- **create(dim=None, dof=None, sizes=None, proc\_sizes=None, boundary\_type=None, stencil\_type=None, stencil\_width=None, setup=True, ownership\_ranges=None, comm=None)**

  Create a **DMDA** object.

  Collective.

  This routine performs the following steps of the C API: - **petsc.DMDACreate** - **petsc.DMSetDimension** - **petsc.DMDASetDof** - **petsc.DMDASetSizes** - **petsc.DMDASetNumProcs** - **petsc.DMDASetOwnershipRanges** - **petsc.DMDASetBoundaryType** - **petsc.DMDASetStencilType** - **petsc.DMDASetStencilWidth** - **petsc.DMSetUp** (optionally)

  - **Parameters**

    - •

      **dim** (*int \| None*) -- The number of dimensions.

    - •

      **dof** (*int \| None*) -- The number of degrees of freedom.

    - •

      **sizes** (*DimsSpec \| None*) -- The number of elements in each dimension.

    - •

      **proc\_sizes** (*DimsSpec \| None*) -- The number of processes in x, y, z dimensions.

    - •

      **boundary\_type** (*tuple\[DM.BoundaryType \| int \| str \| bool, ...\] \| None*) -- The boundary types.

    - •

      **stencil\_type** (*StencilType \| None*) -- The ghost/halo stencil type.

    - •

      **stencil\_width** (*int \| None*) -- The width of the ghost/halo region.

    - •

      **setup** (*bool*) -- Whether to call the setup routine after creating the object.

    - •

      **ownership\_ranges** (*tuple\[Sequence\[int\], ...\] \| None*) -- Local x, y, z element counts, of length equal to **proc\_sizes**, summing to **sizes**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *DMDACreate*, *DMSetDimension*, *DMDASetDof*, *DMDASetSizes*, *DMDASetNumProcs*, *DMDASetOwnershipRanges*, *DMDASetBoundaryType*, *DMDASetStencilType*, *DMDASetStencilWidth*, *DMSetUp*

  *Source code at petsc4py/PETSc/DMDA.pyx:32*

- **createNaturalVec()**

  Create a vector that will hold values in the natural numbering.

  Collective.

  The number of local entries in the vector on each process is the same as in a vector created with *DM.createGlobalVec*.

  **SEE ALSO:**

  *DMDACreateNaturalVector*

  *Source code at petsc4py/PETSc/DMDA.pyx:832*

  - **Return type**

    *Vec*

- **duplicate(dof=None, boundary\_type=None, stencil\_type=None, stencil\_width=None)**

  Duplicate a DMDA.

  Collective.

  This routine retrieves the information from the DMDA and recreates it. Parameters **dof**, **boundary\_type**, **stencil\_type**, **stencil\_width** will be overwritten, if provided.

  - **Parameters**

    - •

      **dof** (*int \| None*) -- The number of degrees of freedom.

    - •

      **boundary\_type** (*tuple\[DM.BoundaryType \| int \| str \| bool, ...\] \| None*) -- Boundary types.

    - •

      **stencil\_type** (*StencilType \| None*) -- The ghost/halo stencil type.

    - •

      **stencil\_width** (*int \| None*) -- The width of the ghost/halo region.

  - **Return type**

    *DMDA*

  **SEE ALSO:**

  *create*, *DMDAGetInfo*, *DMSetUp*

  *Source code at petsc4py/PETSc/DMDA.pyx:148*

- **getAO()**

  Return the application ordering context for a distributed array.

  Collective.

  The returned *AO* maps to the natural grid ordering that would be used for the *DMDA* if only 1 processor were employed (ordering most rapidly in the x-dimension, then y, then z). Multiple degrees of freedom are numbered for each node (rather than 1 component for the whole grid, then the next component, etc.).

  **SEE ALSO:**

  *DMDAGetAO*

  *Source code at petsc4py/PETSc/DMDA.pyx:909*

  - **Return type**

    *AO*

- **getBoundaryType()**

  Return the type of ghost nodes at boundary in each dimension.

  Not collective.

  **SEE ALSO:**

  *setBoundaryType*

  *Source code at petsc4py/PETSc/DMDA.pyx:407*

  - **Return type**

    *tuple*\[*BoundaryType*, ...\]

- **getCoordinateName(index)**

  Return the name of a coordinate dimension.

  Not collective.

  - **Parameters**

    **index** (*int*) -- The coordinate number for the DMDA (**0**, **1**, ..., **dim-1**).

  - **Return type**

    *str*

  **SEE ALSO:**

  *setCoordinateName*, *DMDAGetCoordinateName*

  *Source code at petsc4py/PETSc/DMDA.pyx:810*

- **getCorners()**

  Return the lower left corner and the sizes of the owned local region.

  Not collective.

  Returns the global (x,y,z) indices of the lower left corner (first tuple) and size of the local region (second tuple).

  Excluding ghost points.

  The corner information is independent of the number of degrees of freedom per node. Thus the returned values can be thought of as coordinates on a logical grid, where each grid point has (potentially) several degrees of freedom.

  **SEE ALSO:**

  *getRanges*, *getGhostRanges*, *getOwnershipRanges*, *getGhostCorners*, *DMDAGetCorners*

  *Source code at petsc4py/PETSc/DMDA.pyx:622*

  - **Return type**

    *tuple*\[*tuple*\[*int*, ...\], *tuple*\[*int*, ...\]\]

- **getDim()**

  Return the topological dimension.

  Not collective.

  **SEE ALSO:**

  *setDim*, *DMGetDimension*

  *Source code at petsc4py/PETSc/DMDA.pyx:234*

  - **Return type**

    *int*

- **getDof()**

  Return the number of degrees of freedom per node.

  Not collective.

  **SEE ALSO:**

  *setDof*, *DMDAGetInfo*

  *Source code at petsc4py/PETSc/DMDA.pyx:264*

  - **Return type**

    *int*

- **getElementType()**

  Return the element type to be returned by *getElements*.

  Not collective.

  **SEE ALSO:**

  *setElementType*, *DMDAGetElementType*

  *Source code at petsc4py/PETSc/DMDA.pyx:1050*

  - **Return type**

    *ElementType*

- **getElements(elem\_type=None)**

  Return an array containing the indices of all the local elements.

  Not collective.

  The elements are in local coordinates.

  Each process uniquely owns a subset of the elements. That is, no element is owned by two or more processes.

  - **Parameters**

    **elem\_type** (*ElementType \| None*) -- The element type.

  - **Return type**

    *ArrayInt*

  **SEE ALSO:**

  *DMDAGetElements*

  *Source code at petsc4py/PETSc/DMDA.pyx:1064*

- **getFieldName(field)**

  Return the name of an individual field component.

  Not collective.

  - **Parameters**

    **field** (*int*) -- The field number for the DMDA (**0**, **1**, ..., **dof-1**), where **dof** indicates the number of degrees of freedom per node within the *DMDA*.

  - **Return type**

    *str*

  **SEE ALSO:**

  *setFieldName*, *DMDAGetFieldName*

  *Source code at petsc4py/PETSc/DMDA.pyx:699*

- **getGhostCorners()**

  Return the lower left corner and the size of the ghosted local region.

  Not collective.

  Returns the global (x,y,z) indices of the lower left corner (first tuple) and size of the local region (second tuple).

  **SEE ALSO:**

  *getRanges*, *getGhostRanges*, *getOwnershipRanges*, *getCorners*, *DMDAGetGhostCorners*

  *Source code at petsc4py/PETSc/DMDA.pyx:651*

  - **Return type**

    *tuple*\[*tuple*\[*int*, ...\], *tuple*\[*int*, ...\]\]

- **getGhostRanges()**

  Return the ranges of the local region in each dimension, including ghost nodes.

  Not collective.

  **SEE ALSO:**

  *getRanges*, *getOwnershipRanges*, *getCorners*, *getGhostCorners*, *DMDAGetGhostCorners*

  *Source code at petsc4py/PETSc/DMDA.pyx:577*

  - **Return type**

    *tuple*\[*tuple*\[*int*, *int*\], ...\]

- **getInterpolationType()**

  Return the type of interpolation.

  Not collective.

  **SEE ALSO:**

  *setInterpolationType*, *DMDAGetInterpolationType*

  *Source code at petsc4py/PETSc/DMDA.pyx:1020*

  - **Return type**

    *InterpolationType*

- **getOwnershipRanges()**

  Return the ranges of indices in each dimension owned by each process.

  Not collective.

  These numbers are not multiplied by the number of DOFs per node.

  **SEE ALSO:**

  *getRanges*, *getGhostRanges*, *getCorners*, *getGhostCorners*, *DMDAGetOwnershipRanges*

  *Source code at petsc4py/PETSc/DMDA.pyx:597*

  - **Return type**

    *tuple*\[*ArrayInt*, ...\]

- **getProcSizes()**

  Return the number of processes in each dimension.

  Not collective.

  **SEE ALSO:**

  *setProcSizes*, *DMDAGetInfo*

  *Source code at petsc4py/PETSc/DMDA.pyx:361*

  - **Return type**

    *tuple*\[*int*, ...\]

- **getRanges()**

  Return the ranges of the owned local region in each dimension.

  Not collective.

  Excluding ghost nodes.

  **SEE ALSO:**

  *getGhostRanges*, *getOwnershipRanges*, *getCorners*, *getGhostCorners*, *DMDAGetCorners*

  *Source code at petsc4py/PETSc/DMDA.pyx:555*

  - **Return type**

    *tuple*\[*tuple*\[*int*, *int*\], ...\]

- **getRefinementFactor()**

  Return the ratios that the DMDA grid is refined in each dimension.

  Not collective.

  **SEE ALSO:**

  *setRefinementFactor*, *DMDAGetRefinementFactor*

  *Source code at petsc4py/PETSc/DMDA.pyx:981*

  - **Return type**

    *tuple*\[*int*, ...\]

- **getScatter()**

  Return the global-to-local, and local-to-local scatter contexts.

  Collective.

  **SEE ALSO:**

  *DMDAGetScatter*

  *Source code at petsc4py/PETSc/DMDA.pyx:930*

  - **Return type**

    *tuple*\[*Scatter*, *Scatter*\]

- **getSizes()**

  Return the number of grid points in each dimension.

  Not collective.

  **SEE ALSO:**

  *setSizes*, *DMDAGetInfo*

  *Source code at petsc4py/PETSc/DMDA.pyx:311*

  - **Return type**

    *tuple*\[*int*, ...\]

- **getStencil()**

  Return the stencil type and width.

  Not collective.

  **SEE ALSO:**

  *getStencilType*, *getStencilWidth*

  *Source code at petsc4py/PETSc/DMDA.pyx:532*

  - **Return type**

    *tuple*\[*StencilType*, *int*\]

- **getStencilType()**

  Return the stencil type.

  Not collective.

  **SEE ALSO:**

  *setStencilType*, *DMDAGetInfo*

  *Source code at petsc4py/PETSc/DMDA.pyx:448*

  - **Return type**

    *StencilType*

- **getStencilWidth()**

  Return the stencil width.

  Not collective.

  **SEE ALSO:**

  *setStencilWidth*

  *Source code at petsc4py/PETSc/DMDA.pyx:486*

  - **Return type**

    *int*

- **getVecArray(vec, readonly=False)**

  Get access to the vector as laid out on a N-d grid.

  Logically collective.

  - **Parameters**

    - •

      **vec** (*Vec*) -- The vector to which access is being requested.

    - •

      **readonly** (*bool*) -- Request read-only access.

  - **Return type**

    *Any*

  **SEE ALSO:**

  *Vec.getArray*, *DMDAVecGetArray*, *DMDAVecGetArrayDOF*

  *Source code at petsc4py/PETSc/DMDA.pyx:723*

- **globalToNatural(vg, vn, addv=None)**

  Map values to the "natural" grid ordering.

  Neighborwise collective.

  You must call *createNaturalVec* before using this routine.

  - **Parameters**

    - •

      **vg** (*Vec*) -- The global vector in a grid ordering.

    - •

      **vn** (*Vec*) -- The global vector in a "natural" ordering.

    - •

      **addv** (*InsertMode \| None*) -- The insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *naturalToGlobal*, *DMDAGlobalToNaturalBegin*, *DMDAGlobalToNaturalEnd*

  *Source code at petsc4py/PETSc/DMDA.pyx:849*

- **naturalToGlobal(vn, vg, addv=None)**

  Map values the to grid ordering.

  Neighborwise collective.

  - **Parameters**

    - •

      **vn** (*Vec*) -- The global vector in a natural ordering.

    - •

      **vg** (*Vec*) -- the global vector in a grid ordering.

    - •

      **addv** (*InsertMode \| None*) -- The insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *globalToNatural*, *DMDANaturalToGlobalBegin*, *DMDANaturalToGlobalEnd*

  *Source code at petsc4py/PETSc/DMDA.pyx:879*

- **setBoundaryType(boundary\_type)**

  Set the type of ghost nodes on domain boundaries.

  Not collective.

  - **Parameters**

    **boundary\_type** (*tuple\[BoundaryType \| int \| str \| bool, ...\]*) -- The boundary type in (x), (x, y), or (x, y, z) dimensions.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getBoundaryType*, *DMDASetBoundaryType*

  *Source code at petsc4py/PETSc/DMDA.pyx:384*

- **setCoordinateName(index, name)**

  Set the name of the coordinate dimension.

  Logically collective.

  - **Parameters**

    - •

      **index** (*int*) -- The coordinate number for the DMDA (**0**, **1**, ..., **dim-1**).

    - •

      **name** (*str*) -- The name of the coordinate.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getCoordinateName*, *DMDASetCoordinateName*

  *Source code at petsc4py/PETSc/DMDA.pyx:788*

- **setDim(dim)**

  Set the topological dimension.

  Collective.

  - **Parameters**

    **dim** (*int*) -- Topological dimension.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getDim*, *DMSetDimension*

  *Source code at petsc4py/PETSc/DMDA.pyx:217*

- **setDof(dof)**

  Set the number of degrees of freedom per vertex.

  Not collective.

  - **Parameters**

    **dof** (*int*) -- The number of degrees of freedom.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getDof*, *DMDASetDof*

  *Source code at petsc4py/PETSc/DMDA.pyx:246*

- **setElementType(elem\_type)**

  Set the element type to be returned by *getElements*.

  Not collective.

  **SEE ALSO:**

  *getElementType*, *DMDASetElementType*

  *Source code at petsc4py/PETSc/DMDA.pyx:1036*

  - **Parameters**

    **elem\_type** (*ElementType \| str*)

  - **Return type**

    *None*

- **setFieldName(field, name)**

  Set the name of individual field components.

  Logically collective.

  - **Parameters**

    - •

      **field** (*int*) -- The field number for the DMDA (**0**, **1**, ..., **dof-1**), where **dof** indicates the number of degrees of freedom per node within the *DMDA*.

    - •

      **name** (*str*) -- The name of the field (component).

  - **Return type**

    *None*

  **SEE ALSO:**

  *getFieldName*, *DMDASetFieldName*

  *Source code at petsc4py/PETSc/DMDA.pyx:675*

- **setInterpolationType(interp\_type)**

  Set the type of interpolation.

  Logically collective.

  You should call this on the coarser of the two DMDAs you pass to *DM.createInterpolation*.

  - **Parameters**

    **interp\_type** (*InterpolationType*) -- The interpolation type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getInterpolationType*, *DMDASetInterpolationType*

  *Source code at petsc4py/PETSc/DMDA.pyx:999*

- **setProcSizes(proc\_sizes)**

  Set the number of processes in each dimension.

  Logically collective.

  - **Parameters**

    **proc\_sizes** (*DimsSpec*) -- The number of processes in (x,), (x, y), or (x, y, z) dimensions.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getProcSizes*, *DMDASetNumProcs*

  *Source code at petsc4py/PETSc/DMDA.pyx:334*

- **setRefinementFactor(refine\_x=2, refine\_y=2, refine\_z=2)**

  Set the ratios for the DMDA grid refinement.

  Logically collective.

  - **Parameters**

    - •

      **refine\_x** (*int*) -- Ratio of fine grid to coarse in x dimension.

    - •

      **refine\_y** (*int*) -- Ratio of fine grid to coarse in y dimension.

    - •

      **refine\_z** (*int*) -- Ratio of fine grid to coarse in z dimension.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getRefinementFactor*, *DMDASetRefinementFactor*

  *Source code at petsc4py/PETSc/DMDA.pyx:949*

- **setSizes(sizes)**

  Set the number of grid points in each dimension.

  Logically collective.

  - **Parameters**

    **sizes** (*DimsSpec*) -- The global (x,), (x, y), or (x, y, z) size.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getSizes*, *DMDASetSizes*

  *Source code at petsc4py/PETSc/DMDA.pyx:284*

- **setStencil(stencil\_type, stencil\_width)**

  Set the stencil type and width.

  Not collective.

  - **Parameters**

    - •

      **stencil\_type** (*StencilType*) -- The stencil type.

    - •

      **stencil\_width** (*int*) -- The stencil width.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setStencilWidth*, *setStencilType*, *DMDASetStencilType*, *DMDASetStencilWidth*

  *Source code at petsc4py/PETSc/DMDA.pyx:506*

- **setStencilType(stencil\_type)**

  Set the stencil type.

  Logically collective.

  - **Parameters**

    - •

      **stype** -- The stencil type.

    - •

      **stencil\_type** (*StencilType*)

  - **Return type**

    *None*

  **SEE ALSO:**

  *getStencilType*, *setStencil*, *DMDASetStencilType*

  *Source code at petsc4py/PETSc/DMDA.pyx:430*

- **setStencilWidth(stencil\_width)**

  Set the stencil width.

  Logically collective.

  - **Parameters**

    **stencil\_width** (*int*) -- The stencil width.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getStencilWidth*, *setStencil*, *DMDASetStencilWidth*

  *Source code at petsc4py/PETSc/DMDA.pyx:468*

- **setUniformCoordinates(xmin=0, xmax=1, ymin=0, ymax=1, zmin=0, zmax=1)**

  Set the DMDA coordinates to be a uniform grid.

  Collective.

  - **Parameters**

    - •

      **xmin** (*float*) -- The minimum in the **x** dimension.

    - •

      **xmax** (*float*) -- The maximum in the **x** dimension.

    - •

      **ymin** (*float*) -- The minimum in the **y** dimension (value ignored for 1 dimensional problems).

    - •

      **ymax** (*float*) -- The maximum in the **y** dimension (value ignored for 1 dimensional problems).

    - •

      **zmin** (*float*) -- The minimum in the **z** dimension (value ignored for 1 or 2 dimensional problems).

    - •

      **zmax** (*float*) -- The maximum in the **z** dimension (value ignored for 1 or 2 dimensional problems).

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMDASetUniformCoordinates*

  *Source code at petsc4py/PETSc/DMDA.pyx:744*

Attributes Documentation

- **boundary\_type**

  Boundary types in each dimension.

  *Source code at petsc4py/PETSc/DMDA.pyx:1123*

- **corners**

  The lower left corner and size of local region in each dimension.

  *Source code at petsc4py/PETSc/DMDA.pyx:1153*

- **dim**

  The grid dimension.

  *Source code at petsc4py/PETSc/DMDA.pyx:1103*

- **dof**

  The number of DOFs associated with each stratum of the grid.

  *Source code at petsc4py/PETSc/DMDA.pyx:1108*

- **ghost\_corners**

  The lower left corner and size of local region in each dimension.

  *Source code at petsc4py/PETSc/DMDA.pyx:1158*

- **ghost\_ranges**

  Ranges of local region, including ghost nodes.

  *Source code at petsc4py/PETSc/DMDA.pyx:1148*

- **proc\_sizes**

  The number of processes in each dimension in the global decomposition.

  *Source code at petsc4py/PETSc/DMDA.pyx:1118*

- **ranges**

  Ranges of the local region in each dimension.

  *Source code at petsc4py/PETSc/DMDA.pyx:1143*

- **sizes**

  The global dimension.

  *Source code at petsc4py/PETSc/DMDA.pyx:1113*

- **stencil**

  Stencil type and width.

  *Source code at petsc4py/PETSc/DMDA.pyx:1128*

- **stencil\_type**

  Stencil type.

  *Source code at petsc4py/PETSc/DMDA.pyx:1133*

- **stencil\_width**

  Elementwise stencil width.

  *Source code at petsc4py/PETSc/DMDA.pyx:1138*

### petsc4py.PETSc.DMInterpolation

- **class petsc4py.PETSc.DMInterpolation**

  Bases: *object*

  Interpolation on a mesh.

  Methods Summary

  | | |
  | --- | --- |
  | *create*(\[comm\]) | Create a *DMInterpolation* context. |
  | *destroy*() | Destroy the *DMInterpolation* context. |
  | *evaluate*(dm, x\[, v\]) | Calculate interpolated field values at the interpolation points. |
  | *getCoordinates*() | Return the coordinates of each interpolation point. |
  | *getDim*() | Return the spatial dimension of the interpolation context. |
  | *getDof*() | Return the number of fields interpolated at a point. |
  | *getVector*() | Return a *Vec* which can hold all the interpolated field values. |
  | *restoreVector*(vec) | Restore a Vec which can hold all the interpolated field values. |
  | *setDim*(dim) | Set the spatial dimension for the interpolation context. |
  | *setDof*(dof) | Set the number of fields interpolated at a point. |
  | *setUp*(dm\[, redundantPoints, ignoreOutsideDomain\]) | Compute spatial indices for point location during interpolation. |

  Methods Documentation

  - **create(comm=None)**

    Create a *DMInterpolation* context.

    Collective.

    - **Parameters**

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *COMM\_SELF*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *destroy*, *DMInterpolationCreate*

    *Source code at petsc4py/PETSc/DMUtils.pyx:13*

  - **destroy()**

    Destroy the *DMInterpolation* context.

    Collective.

    **SEE ALSO:**

    *create*, *DMInterpolationDestroy*

    *Source code at petsc4py/PETSc/DMUtils.pyx:35*

    - **Return type**

      *Self*

  - **evaluate(dm, x, v=None)**

    Calculate interpolated field values at the interpolation points.

    Collective.

    - **Parameters**

      - •

        **dm** (*DM*) -- The *DM*.

      - •

        **x** (*Vec*) -- The local vector containing the field to be interpolated.

      - •

        **v** (*Vec \| None*) -- A vector capable of holding the interpolated field values.

    - **Return type**

      *Vec*

    **SEE ALSO:**

    *DMInterpolationEvaluate*

    *Source code at petsc4py/PETSc/DMUtils.pyx:48*

  - **getCoordinates()**

    Return the coordinates of each interpolation point.

    Collective.

    The local vector entries correspond to interpolation points lying on this process, according to the associated DM.

    **SEE ALSO:**

    *DMInterpolationGetCoordinates*

    *Source code at petsc4py/PETSc/DMUtils.pyx:74*

    - **Return type**

      *Vec*

  - **getDim()**

    Return the spatial dimension of the interpolation context.

    Not collective.

    **SEE ALSO:**

    *setDim*, *DMInterpolationGetDim*

    *Source code at petsc4py/PETSc/DMUtils.pyx:92*

    - **Return type**

      *int*

  - **getDof()**

    Return the number of fields interpolated at a point.

    Not collective.

    **SEE ALSO:**

    *setDof*, *DMInterpolationGetDof*

    *Source code at petsc4py/PETSc/DMUtils.pyx:106*

    - **Return type**

      *int*

  - **getVector()**

    Return a *Vec* which can hold all the interpolated field values.

    Collective.

    This vector should be returned using *restoreVector*.

    **SEE ALSO:**

    *restoreVector*, *DMInterpolationGetVector*

    *Source code at petsc4py/PETSc/DMUtils.pyx:185*

    - **Return type**

      *Vec*

  - **restoreVector(vec)**

    Restore a Vec which can hold all the interpolated field values.

    Collective.

    - **Parameters**

      **vec** (*Vec*) -- A vector capable of holding the interpolated field values.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getVector*, *DMInterpolationRestoreVector*

    *Source code at petsc4py/PETSc/DMUtils.pyx:201*

  - **setDim(dim)**

    Set the spatial dimension for the interpolation context.

    Not collective.

    - **Parameters**

      **dim** (*int*) -- The spatial dimension.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getDim*, *DMInterpolationSetDim*

    *Source code at petsc4py/PETSc/DMUtils.pyx:120*

  - **setDof(dof)**

    Set the number of fields interpolated at a point.

    Not collective.

    - **Parameters**

      **dof** (*int*) -- The number of fields.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getDof*, *DMInterpolationSetDof*

    *Source code at petsc4py/PETSc/DMUtils.pyx:138*

  - **setUp(dm, redundantPoints=False, ignoreOutsideDomain=False)**

    Compute spatial indices for point location during interpolation.

    Collective.

    - **Parameters**

      - •

        **dm** (*DM*) -- The DM for the function space used for interpolation.

      - •

        **redundantPoints** (*bool*) -- If *True*, all processes are passing in the same array of points. Otherwise, points need to be communicated among processes.

      - •

        **ignoreOutsideDomain** (*bool*) -- Ignore points outside of the domain if *True*; otherwise, return an error.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMInterpolationSetUp*

    *Source code at petsc4py/PETSc/DMUtils.pyx:156*

### petsc4py.PETSc.DMLabel

- **class petsc4py.PETSc.DMLabel**

  Bases: *Object*

  An object representing a subset of mesh entities from a *DM*.

  Methods Summary

  | | |
  | --- | --- |
  | *addStrata*(strata) | Add new stratum values in a *DMLabel*. |
  | *addStrataIS*(iset) | Add new stratum values in a *DMLabel*. |
  | *addStratum*(value) | Add a new stratum value in a *DMLabel*. |
  | *clearStratum*(stratum) | Remove a stratum. |
  | *clearValue*(point, value) | Clear the value a label assigns to a point. |
  | *computeIndex*() | Create an index structure for membership determination. |
  | *convertToSection*() | Return a *Section* and *IS* that encode the label. |
  | *create*(name\[, comm\]) | Create a *DMLabel* object, which is a multimap. |
  | *createIndex*(pStart, pEnd) | Create an index structure for membership determination. |
  | *destroy*() | Destroy the label. |
  | *destroyIndex*() | Destroy the index structure. |
  | *distribute*(sf) | Create a new label pushed forward over the *SF*. |
  | *duplicate*() | Duplicate the *DMLabel*. |
  | *filter*(start, end) | Remove all points outside of \[start, end). |
  | *gather*(sf) | Gather all label values from leaves into roots. |
  | *getBounds*() | Return the smallest and largest point in the label. |
  | *getDefaultValue*() | Return the default value returned by *getValue*. |
  | *getNonEmptyStratumValuesIS*() | Return an *IS* of all values that the *DMLabel* takes. |
  | *getNumValues*() | Return the number of values that the *DMLabel* takes. |
  | *getStratumIS*(stratum) | Return an *IS* with the stratum points. |
  | *getStratumSize*(stratum) | Return the size of a stratum. |
  | *getValue*(point) | Return the value a label assigns to a point. |
  | *getValueIS*() | Return an *IS* of all values that the *DMLabel* takes. |
  | *hasPoint*(point) | Determine whether the label contains a point. |
  | *hasStratum*(value) | Determine whether points exist with the given value. |
  | *hasValue*(value) | Determine whether a label assigns the value to any point. |
  | *insertIS*(iset, value) | Set all points in the *IS* to a value. |
  | *permute*(permutation) | Create a new label with permuted points. |
  | *reset*() | Destroy internal data structures in the *DMLabel*. |
  | *setDefaultValue*(value) | Set the default value returned by *getValue*. |
  | *setStratumIS*(stratum, iset) | Set the stratum points using an *IS*. |
  | *setValue*(point, value) | Set the value a label assigns to a point. |
  | *stratumHasPoint*(value, point) | Return whether the stratum contains a point. |
  | *view*(\[viewer\]) | View the label. |

  Methods Documentation

  - **addStrata(strata)**

    Add new stratum values in a *DMLabel*.

    Not collective.

    - **Parameters**

      **strata** (*Sequence\[int\]*) -- The stratum values.

    - **Return type**

      *None*

    **SEE ALSO:**

    *addStrataIS*, *addStratum*, *DMLabelAddStrata*

    *Source code at petsc4py/PETSc/DMLabel.pyx:238*

  - **addStrataIS(iset)**

    Add new stratum values in a *DMLabel*.

    Not collective.

    - **Parameters**

      **iset** (*IS*) -- Index set with stratum values.

    - **Return type**

      *None*

    **SEE ALSO:**

    *addStrata*, *addStratum*, *DMLabelAddStrataIS*

    *Source code at petsc4py/PETSc/DMLabel.pyx:258*

  - **addStratum(value)**

    Add a new stratum value in a *DMLabel*.

    Not collective.

    - **Parameters**

      **value** (*int*) -- The stratum value.

    - **Return type**

      *None*

    **SEE ALSO:**

    *addStrata*, *addStrataIS*, *DMLabelAddStratum*

    *Source code at petsc4py/PETSc/DMLabel.pyx:220*

  - **clearStratum(stratum)**

    Remove a stratum.

    Not collective.

    - **Parameters**

      **stratum** (*int*) -- The stratum value.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMLabelClearStratum*

    *Source code at petsc4py/PETSc/DMLabel.pyx:406*

  - **clearValue(point, value)**

    Clear the value a label assigns to a point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **value** (*int*) -- The point value.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMLabelClearValue*

    *Source code at petsc4py/PETSc/DMLabel.pyx:199*

  - **computeIndex()**

    Create an index structure for membership determination.

    Not collective.

    Automatically determines the bounds.

    **SEE ALSO:**

    *DMLabelComputeIndex*

    *Source code at petsc4py/PETSc/DMLabel.pyx:424*

    - **Return type**

      *None*

  - **convertToSection()**

    Return a *Section* and *IS* that encode the label.

    Not collective.

    **SEE ALSO:**

    *DMLabelConvertToSection*

    *Source code at petsc4py/PETSc/DMLabel.pyx:607*

    - **Return type**

      *tuple*\[*Section*, *IS*\]

  - **create(name, comm=None)**

    Create a *DMLabel* object, which is a multimap.

    Collective.

    - **Parameters**

      - •

        **name** (*str*) -- The label name.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *COMM\_SELF*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DMLabelCreate*

    *Source code at petsc4py/PETSc/DMLabel.pyx:40*

  - **createIndex(pStart, pEnd)**

    Create an index structure for membership determination.

    Not collective.

    - **Parameters**

      - •

        **pStart** (*int*) -- The smallest point.

      - •

        **pEnd** (*int*) -- The largest point + 1.

    - **Return type**

      *None*

    **SEE ALSO:**

    *destroyIndex*, *DMLabelCreateIndex*

    *Source code at petsc4py/PETSc/DMLabel.pyx:438*

  - **destroy()**

    Destroy the label.

    Collective.

    **SEE ALSO:**

    *DMLabelDestroy*

    *Source code at petsc4py/PETSc/DMLabel.pyx:8*

    - **Return type**

      *Self*

  - **destroyIndex()**

    Destroy the index structure.

    Not collective.

    **SEE ALSO:**

    *createIndex*, *DMLabelDestroyIndex*

    *Source code at petsc4py/PETSc/DMLabel.pyx:458*

    - **Return type**

      *None*

  - **distribute(sf)**

    Create a new label pushed forward over the *SF*.

    Collective.

    - **Parameters**

      **sf** (*SF*) -- The map from old to new distribution.

    - **Return type**

      *DMLabel*

    **SEE ALSO:**

    *gather*, *DMLabelDistribute*

    *Source code at petsc4py/PETSc/DMLabel.pyx:567*

  - **duplicate()**

    Duplicate the *DMLabel*.

    Collective.

    **SEE ALSO:**

    *DMLabelDuplicate*

    *Source code at petsc4py/PETSc/DMLabel.pyx:65*

    - **Return type**

      *DMLabel*

  - **filter(start, end)**

    Remove all points outside of \[start, end).

    Not collective.

    - **Parameters**

      - •

        **start** (*int*) -- The first point kept.

      - •

        **end** (*int*) -- One more than the last point kept.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMLabelFilter*

    *Source code at petsc4py/PETSc/DMLabel.pyx:528*

  - **gather(sf)**

    Gather all label values from leaves into roots.

    Collective.

    This is the inverse operation to *distribute*.

    - **Parameters**

      **sf** (*SF*) -- The *SF* communication map.

    - **Return type**

      *DMLabel*

    **SEE ALSO:**

    *distribute*, *DMLabelGather*

    *Source code at petsc4py/PETSc/DMLabel.pyx:586*

  - **getBounds()**

    Return the smallest and largest point in the label.

    Not collective.

    The returned values are the smallest point and the largest point + 1.

    **SEE ALSO:**

    *DMLabelGetBounds*

    *Source code at petsc4py/PETSc/DMLabel.pyx:512*

    - **Return type**

      *tuple*\[*int*, *int*\]

  - **getDefaultValue()**

    Return the default value returned by *getValue*.

    Not collective.

    The default value is returned if a point has not been explicitly given a value. When a label is created, it is initialized to **-1**.

    **SEE ALSO:**

    *setDefaultValue*, *DMLabelGetDefaultValue*

    *Source code at petsc4py/PETSc/DMLabel.pyx:161*

    - **Return type**

      *int*

  - **getNonEmptyStratumValuesIS()**

    Return an *IS* of all values that the *DMLabel* takes.

    Not collective.

    **SEE ALSO:**

    *DMLabelGetNonEmptyStratumValuesIS*

    *Source code at petsc4py/PETSc/DMLabel.pyx:622*

    - **Return type**

      *IS*

  - **getNumValues()**

    Return the number of values that the *DMLabel* takes.

    Not collective.

    **SEE ALSO:**

    *DMLabelGetNumValues*

    *Source code at petsc4py/PETSc/DMLabel.pyx:275*

    - **Return type**

      *int*

  - **getStratumIS(stratum)**

    Return an *IS* with the stratum points.

    Not collective.

    - **Parameters**

      **stratum** (*int*) -- The stratum value.

    - **Return type**

      *IS*

    **SEE ALSO:**

    *setStratumIS*, *DMLabelGetStratumIS*

    *Source code at petsc4py/PETSc/DMLabel.pyx:366*

  - **getStratumSize(stratum)**

    Return the size of a stratum.

    Not collective.

    - **Parameters**

      **stratum** (*int*) -- The stratum value.

    - **Return type**

      *int*

    **SEE ALSO:**

    *DMLabelGetStratumSize*

    *Source code at petsc4py/PETSc/DMLabel.pyx:346*

  - **getValue(point)**

    Return the value a label assigns to a point.

    Not collective.

    If no value was assigned, a default value will be returned The default value, initially **-1**, can be changed with *setDefaultValue*.

    - **Parameters**

      **point** (*int*) -- The point.

    - **Return type**

      *int*

    **SEE ALSO:**

    *setValue*, *setDefaultValue*, *DMLabelGetValue*

    *Source code at petsc4py/PETSc/DMLabel.pyx:137*

  - **getValueIS()**

    Return an *IS* of all values that the *DMLabel* takes.

    Not collective.

    **SEE ALSO:**

    *DMLabelGetValueIS*

    *Source code at petsc4py/PETSc/DMLabel.pyx:289*

    - **Return type**

      *IS*

  - **hasPoint(point)**

    Determine whether the label contains a point.

    Not collective.

    The user must call *createIndex* before this function.

    - **Parameters**

      **point** (*int*) -- The point.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *hasValue*, *DMLabelHasPoint*

    *Source code at petsc4py/PETSc/DMLabel.pyx:490*

  - **hasStratum(value)**

    Determine whether points exist with the given value.

    Not collective.

    - **Parameters**

      **value** (*int*) -- The stratum value.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *DMLabelHasStratum*

    *Source code at petsc4py/PETSc/DMLabel.pyx:326*

  - **hasValue(value)**

    Determine whether a label assigns the value to any point.

    Not collective.

    - **Parameters**

      **value** (*int*) -- The value.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *hasPoint*, *DMLabelHasValue*

    *Source code at petsc4py/PETSc/DMLabel.pyx:470*

  - **insertIS(iset, value)**

    Set all points in the *IS* to a value.

    Not collective.

    - **Parameters**

      - •

        **iset** (*IS*) -- The point IS.

      - •

        **value** (*int*) -- The point value.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DMLabelInsertIS*

    *Source code at petsc4py/PETSc/DMLabel.pyx:91*

  - **permute(permutation)**

    Create a new label with permuted points.

    Not collective.

    - **Parameters**

      **permutation** (*IS*) -- The point permutation.

    - **Return type**

      *DMLabel*

    **SEE ALSO:**

    *DMLabelPermute*

    *Source code at petsc4py/PETSc/DMLabel.pyx:548*

  - **reset()**

    Destroy internal data structures in the *DMLabel*.

    Not collective.

    **SEE ALSO:**

    *DMLabelReset*

    *Source code at petsc4py/PETSc/DMLabel.pyx:79*

    - **Return type**

      *None*

  - **setDefaultValue(value)**

    Set the default value returned by *getValue*.

    Not collective.

    The value is used if a point has not been explicitly given a value. When a label is created, the default value is initialized to **-1**.

    - **Parameters**

      **value** (*int*) -- The default value.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getDefaultValue*, *DMLabelSetDefaultValue*

    *Source code at petsc4py/PETSc/DMLabel.pyx:178*

  - **setStratumIS(stratum, iset)**

    Set the stratum points using an *IS*.

    Not collective.

    - **Parameters**

      - •

        **stratum** (*int*) -- The stratum value.

      - •

        **iset** (*IS*) -- The stratum points.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getStratumIS*, *DMLabelSetStratumIS*

    *Source code at petsc4py/PETSc/DMLabel.pyx:386*

  - **setValue(point, value)**

    Set the value a label assigns to a point.

    Not collective.

    If the value is the same as the label's default value (which is initially **-1**, and can be changed with *setDefaultValue*), this function will do nothing.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **value** (*int*) -- The point value.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getValue*, *setDefaultValue*, *DMLabelSetValue*

    *Source code at petsc4py/PETSc/DMLabel.pyx:112*

  - **stratumHasPoint(value, point)**

    Return whether the stratum contains a point.

    Not collective.

    - **Parameters**

      - •

        **value** (*int*) -- The stratum value.

      - •

        **point** (*int*) -- The point.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *DMLabelStratumHasPoint*

    *Source code at petsc4py/PETSc/DMLabel.pyx:303*

  - **view(viewer=None)**

    View the label.

    Collective.

    - **Parameters**

      **viewer** (*Viewer \| None*) -- A *Viewer* to display the graph.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMLabelView*

    *Source code at petsc4py/PETSc/DMLabel.pyx:21*

### petsc4py.PETSc.DMPlex

- **class petsc4py.PETSc.DMPlex**

  Bases: *DM*

  Encapsulate an unstructured mesh.

  DMPlex encapsulates both topology and geometry. It is capable of parallel refinement and coarsening (using Pragmatic or ParMmg) and parallel redistribution for load balancing.

  Methods Summary

  | | |
  | --- | --- |
  | *computeCellGeometryFVM*(cell) | Compute the volume for a given cell. |
  | *computeGradientClementInterpolant*(locX, locC) | Return the L2 projection of the cellwise gradient of a function onto P1. |
  | *constructGhostCells*(\[labelName\]) | Construct ghost cells which connect to every boundary face. |
  | *coordinatesLoad*(viewer, sfxc) | Load coordinates into this *DMPlex* object. |
  | *coordinatesView*(viewer) | Save *DMPlex* coordinates into a file. |
  | *create*(\[comm\]) | Create a *DMPlex* object, which encapsulates an unstructured mesh. |
  | *createBoxMesh*(faces\[, lower, upper, ...\]) | Create a mesh on the tensor product of intervals. |
  | *createBoxSurfaceMesh*(faces\[, lower, upper, ...\]) | Create a mesh on the surface of a box mesh using tensor cells. |
  | *createCGNS*(cgid\[, interpolate, comm\]) | Create a *DMPlex* mesh from a CGNS file. |
  | *createCGNSFromFile*(filename\[, interpolate, comm\]) | "Create a *DMPlex* mesh from a CGNS file. |
  | *createClosureIndex*(sec) | Calculate an index for **sec** for the closure operation. |
  | *createCoarsePointIS*() | Create an *IS* covering the coarse *DMPlex* chart with the fine points as data. |
  | *createCohesiveSubmesh*(hasLagrange, value) | Extract the hypersurface defined by one face of the cohesive cells. |
  | *createExodus*(exoid\[, interpolate, comm\]) | Create a *DMPlex* mesh from an ExodusII file ID. |
  | *createExodusFromFile*(filename\[, ...\]) | Create a *DMPlex* mesh from an ExodusII file. |
  | *createFromCellList*(dim, cells, coords\[, ...\]) | Create a *DMPlex* from a list of vertices for each cell on process 0. |
  | *createFromFile*(filename\[, plexname, ...\]) | Create *DMPlex* from a file. |
  | *createGmsh*(viewer\[, interpolate, comm\]) | Create a *DMPlex* mesh from a Gmsh file viewer. |
  | *createPointNumbering*() | Create a global numbering for all points. |
  | *createSection*(numComp, numDof\[, bcField, ...\]) | Create a *Section* based upon the DOF layout specification provided. |
  | *distribute*(\[overlap\]) | Distribute the mesh and any associated sections. |
  | *distributeField*(sf, sec, vec\[, newsec, newvec\]) | Distribute field data with a with a given *SF*. |
  | *distributeGetDefault*() | Return a flag indicating whether the *DM* should be distributed by default. |
  | *distributeOverlap*(\[overlap\]) | Add partition overlap to a distributed non-overlapping *DMPlex*. |
  | *distributeSetDefault*(flag) | Set flag indicating whether the *DMPlex* should be distributed by default. |
  | *distributionGetName*() | Retrieve the name of the specific parallel distribution. |
  | *distributionSetName*(name) | Set the name of the specific parallel distribution. |
  | *generate*(boundary\[, name, interpolate\]) | Generate a mesh. |
  | *getAdjacency*(p) | Return all points adjacent to the given point. |
  | *getAdjacencyUseAnchors*() | Query whether adjacency in the mesh uses the point-to-point constraints. |
  | *getCellNumbering*() | Return a global cell numbering for all cells on this process. |
  | *getCellType*(p) | Return the polytope type of a given cell. |
  | *getCellTypeLabel*() | Return the *DMLabel* recording the polytope type of each cell. |
  | *getChart*() | Return the interval for all mesh points \[**pStart**, **pEnd**). |
  | *getCone*(p) | Return the points on the in-edges for this point in the DAG. |
  | *getConeOrientation*(p) | Return the orientations on the in-edges for this point in the DAG. |
  | *getConeSize*(p) | Return the number of in-edges for this point in the DAG. |
  | *getDepth*() | Return the depth of the DAG representing this mesh. |
  | *getDepthStratum*(svalue) | Return the bounds \[**start**, **end**) for all points at a certain depth. |
  | *getFullJoin*(points) | Return an array for the join of the set of points. |
  | *getHeightStratum*(svalue) | Return the bounds \[**start**, **end**) for all points at a certain height. |
  | *getJoin*(points) | Return an array for the join of the set of points. |
  | *getMaxSizes*() | Return the maximum number of in-edges and out-edges of the DAG. |
  | *getMeet*(points) | Return an array for the meet of the set of points. |
  | *getMinRadius*() | Return the minimum distance from any cell centroid to a face. |
  | *getOrdering*(otype) | Calculate a reordering of the mesh. |
  | *getPartitioner*() | Return the mesh partitioner. |
  | *getPointDepth*(point) | Return the *depth* of a given point. |
  | *getPointGlobal*(point) | Return location of point data in global *Vec*. |
  | *getPointGlobalField*(point, field) | Return location of point field data in global *Vec*. |
  | *getPointHeight*(point) | Return the *height* of a given point. |
  | *getPointLocal*(point) | Return location of point data in local *Vec*. |
  | *getPointLocalField*(point, field) | Return location of point field data in local *Vec*. |
  | *getRefinementLimit*() | Retrieve the maximum cell volume for refinement. |
  | *getRefinementUniform*() | Retrieve the flag for uniform refinement. |
  | *getSubpointIS*() | Return an *IS* covering the entire subdm chart. |
  | *getSubpointMap*() | Return a *DMLabel* with point dimension as values. |
  | *getSupport*(p) | Return the points on the out-edges for this point in the DAG. |
  | *getSupportSize*(p) | Return the number of out-edges for this point in the DAG. |
  | *getTransitiveClosure*(p\[, useCone\]) | Return the points and orientations on the transitive closure of this point. |
  | *getVecClosure*(sec, vec, point) | Return an array of the values on the closure of a point. |
  | *getVertexNumbering*() | Return a global vertex numbering for all vertices on this process. |
  | *globalVectorLoad*(viewer, sectiondm, sf, vec) | Load on-disk vector data into a global vector. |
  | *globalVectorView*(viewer, sectiondm, vec) | Save a global vector. |
  | *insertCone*(p, conePos, conePoint) | DMPlexInsertCone - Insert a point into the in-edges for the point p in the DAG. |
  | *insertConeOrientation*(p, conePos, ...) | Insert a point orientation for the in-edge for the point p in the DAG. |
  | *interpolate*() | Convert to a mesh with all intermediate faces, edges, etc. |
  | *isDistributed*() | Return the flag indicating if the mesh is distributed. |
  | *isSimplex*() | Return the flag indicating if the first cell is a simplex. |
  | *labelCohesiveComplete*(label, bdlabel, ...) | Add all other mesh pieces to complete the surface. |
  | *labelComplete*(label) | Add the transitive closure to the surface. |
  | *labelsLoad*(viewer, sfxc) | Load labels into this *DMPlex* object. |
  | *labelsView*(viewer) | Save *DMPlex* labels into a file. |
  | *localVectorLoad*(viewer, sectiondm, sf, vec) | Load on-disk vector data into a local vector. |
  | *localVectorView*(viewer, sectiondm, vec) | Save a local vector. |
  | *markBoundaryFaces*(label\[, value\]) | Mark all faces on the boundary. |
  | *metricAverage2*(metric1, metric2, metricAvg) | Compute and return the unweighted average of two metrics. |
  | *metricAverage3*(metric1, metric2, metric3, ...) | Compute and return the unweighted average of three metrics. |
  | *metricCreate*(\[field\]) | Create a Riemannian metric field. |
  | *metricCreateIsotropic*(indicator\[, field\]) | Construct an isotropic metric from an error indicator. |
  | *metricCreateUniform*(alpha\[, field\]) | Construct a uniform isotropic metric. |
  | *metricDeterminantCreate*(\[field\]) | Create the determinant field for a Riemannian metric. |
  | *metricEnforceSPD*(metric, ometric, determinant) | Enforce symmetric positive-definiteness of a metric. |
  | *metricGetGradationFactor*() | Return the metric gradation factor. |
  | *metricGetHausdorffNumber*() | Return the metric Hausdorff number. |
  | *metricGetMaximumAnisotropy*() | Return the maximum tolerated metric anisotropy. |
  | *metricGetMaximumMagnitude*() | Return the maximum tolerated metric magnitude. |
  | *metricGetMinimumMagnitude*() | Return the minimum tolerated metric magnitude. |
  | *metricGetNormalizationOrder*() | Return the order p for L-p normalization. |
  | *metricGetNumIterations*() | Return the number of parallel adaptation iterations. |
  | *metricGetTargetComplexity*() | Return the target metric complexity. |
  | *metricGetVerbosity*() | Return the verbosity of the mesh adaptation package. |
  | *metricIntersection2*(metric1, metric2, metricInt) | Compute and return the intersection of two metrics. |
  | *metricIntersection3*(metric1, metric2, ...) | Compute the intersection of three metrics. |
  | *metricIsIsotropic*() | Return the flag indicating whether the metric is isotropic or not. |
  | *metricIsUniform*() | Return the flag indicating whether the metric is uniform or not. |
  | *metricNoInsertion*() | Return the flag indicating whether node insertion and deletion are turned off. |
  | *metricNoMovement*() | Return the flag indicating whether node movement is turned off. |
  | *metricNoSurf*() | Return the flag indicating whether surface modification is turned off. |
  | *metricNoSwapping*() | Return the flag indicating whether facet swapping is turned off. |
  | *metricNormalize*(metric, ometric, determinant) | Apply L-p normalization to a metric. |
  | *metricRestrictAnisotropyFirst*() | Return **true** if anisotropy is restricted before normalization. |
  | *metricSetFromOptions*() | Configure the object from the options database. |
  | *metricSetGradationFactor*(beta) | Set the metric gradation factor. |
  | *metricSetHausdorffNumber*(hausd) | Set the metric Hausdorff number. |
  | *metricSetIsotropic*(isotropic) | Record whether the metric is isotropic or not. |
  | *metricSetMaximumAnisotropy*(a\_max) | Set the maximum tolerated metric anisotropy. |
  | *metricSetMaximumMagnitude*(h\_max) | Set the maximum tolerated metric magnitude. |
  | *metricSetMinimumMagnitude*(h\_min) | Set the minimum tolerated metric magnitude. |
  | *metricSetNoInsertion*(noInsert) | Set the flag indicating whether node insertion should be turned off. |
  | *metricSetNoMovement*(noMove) | Set the flag indicating whether node movement should be turned off. |
  | *metricSetNoSurf*(noSurf) | Set the flag indicating whether surface modification should be turned off. |
  | *metricSetNoSwapping*(noSwap) | Set the flag indicating whether facet swapping should be turned off. |
  | *metricSetNormalizationOrder*(p) | Set the order p for L-p normalization. |
  | *metricSetNumIterations*(numIter) | Set the number of parallel adaptation iterations. |
  | *metricSetRestrictAnisotropyFirst*(...) | Record whether anisotropy is be restricted before normalization or after. |
  | *metricSetTargetComplexity*(targetComplexity) | Set the target metric complexity. |
  | *metricSetUniform*(uniform) | Record whether the metric is uniform or not. |
  | *metricSetVerbosity*(verbosity) | Set the verbosity of the mesh adaptation package. |
  | *orient*() | Give a consistent orientation to the input mesh. |
  | *permute*(perm) | Reorder the mesh according to the input permutation. |
  | *rebalanceSharedPoints*(\[entityDepth, ...\]) | Redistribute shared points in order to achieve better balancing. |
  | *reorderGetDefault*() | Return flag indicating whether the *DMPlex* should be reordered by default. |
  | *reorderSetDefault*(flag) | Set flag indicating whether the DM should be reordered by default. |
  | *sectionLoad*(viewer, sectiondm, sfxc) | Load section into a *DM*. |
  | *sectionView*(viewer, sectiondm) | Save a section associated with a *DMPlex*. |
  | *setAdjacencyUseAnchors*(\[useAnchors\]) | Define adjacency in the mesh using the point-to-point constraints. |
  | *setCellType*(p, ctype) | Set the polytope type of a given cell. |
  | *setChart*(pStart, pEnd) | Set the interval for all mesh points \[**pStart**, **pEnd**). |
  | *setCone*(p, cone\[, orientation\]) | Set the points on the in-edges for this point in the DAG. |
  | *setConeOrientation*(p, orientation) | Set the orientations on the in-edges for this point in the DAG. |
  | *setConeSize*(p, size) | Set the number of in-edges for this point in the DAG. |
  | *setMatClosure*(sec, gsec, mat, point, values) | Set an array of the values on the closure of **point**. |
  | *setPartitioner*(part) | Set the mesh partitioner. |
  | *setRefinementLimit*(refinementLimit) | Set the maximum cell volume for refinement. |
  | *setRefinementUniform*(\[refinementUniform\]) | Set the flag for uniform refinement. |
  | *setSupport*(p, supp) | Set the points on the out-edges for this point in the DAG. |
  | *setSupportSize*(p, size) | Set the number of out-edges for this point in the DAG. |
  | *setTetGenOptions*(opts) | Set the options used for the Tetgen mesh generator. |
  | *setTriangleOptions*(opts) | Set the options used for the Triangle mesh generator. |
  | *setVecClosure*(sec, vec, point, values\[, addv\]) | Set an array of the values on the closure of **point**. |
  | *stratify*() | Calculate the strata of DAG. |
  | *symmetrize*() | Create support (out-edge) information from cone (in-edge) information. |
  | *topologyLoad*(viewer) | Load a topology into this *DMPlex* object. |
  | *topologyView*(viewer) | Save a *DMPlex* topology into a file. |
  | *uninterpolate*() | Convert to a mesh with only cells and vertices. |
  | *vecGetClosure*(sec, vec, p) | Return an array of values on the closure of **p**. |

  Methods Documentation

  - **computeCellGeometryFVM(cell)**

    Compute the volume for a given cell.

    Not collective.

    - **Parameters**

      **cell** (*int*) -- The cell.

    - **Returns**

      - •

        **volume** (*float*) -- The cell volume.

      - •

        **centroid** (*ArrayReal*) -- The cell centroid.

      - •

        **normal** (*ArrayReal*) -- The cell normal, if appropriate.

    - **Return type**

      *tuple*\[*float*, *ArrayReal*, *ArrayReal*\]

    **SEE ALSO:**

    *DMPlex*, *DM.getCoordinateSection*, *DM.getCoordinates*, *DMPlexComputeCellGeometryFVM*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2217*

  - **computeGradientClementInterpolant(locX, locC)**

    Return the L2 projection of the cellwise gradient of a function onto P1.

    Collective.

    - **Parameters**

      - •

        **locX** (*Vec*) -- The coefficient vector of the function.

      - •

        **locC** (*Vec*) -- The output *Vec* which holds the Clement interpolant of the gradient.

    - **Return type**

      *Vec*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlexComputeGradientClementInterpolant*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3151*

  - **constructGhostCells(labelName=None)**

    Construct ghost cells which connect to every boundary face.

    Collective.

    - **Parameters**

      **labelName** (*str \| None*) -- The name of the label specifying the boundary faces. Defaults to **"Face Sets"**.

    - **Returns**

      **numGhostCells** -- The number of ghost cells added to the *DMPlex*.

    - **Return type**

      *int*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.create*, *DMPlexConstructGhostCells*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2249*

  - **coordinatesLoad(viewer, sfxc)**

    Load coordinates into this *DMPlex* object.

    Collective.

    - **Parameters**

      - •

        **viewer** (*Viewer*) -- The *Viewer* for the saved coordinates.

      - •

        **sfxc** (*SF*) -- The *SF* returned by *topologyLoad*.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.load*, *DMPlex.topologyLoad*, *DMPlex.labelsLoad*, *DM.view*, *SF*, *Viewer*, *DMPlexCoordinatesLoad*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3324*

  - **coordinatesView(viewer)**

    Save *DMPlex* coordinates into a file.

    Collective.

    - **Parameters**

      **viewer** (*Viewer*) -- The *Viewer* for saving.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.view*, *DMPlex.topologyView*, *DMPlex.labelsView*, *DMPlex.coordinatesLoad*, *Viewer*, *DMPlexCoordinatesView*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3191*

  - **create(comm=None)**

    Create a *DMPlex* object, which encapsulates an unstructured mesh.

    Collective.

    - **Parameters**

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.create*, *DM.setType*, *DMPlexCreate*

    *Source code at petsc4py/PETSc/DMPlex.pyx:14*

  - **createBoxMesh(faces, lower=(0, 0, 0), upper=(1, 1, 1), simplex=True, periodic=False, interpolate=True, localizationHeight=0, sparseLocalize=True, comm=None)**

    Create a mesh on the tensor product of intervals.

    Collective.

    - **Parameters**

      - •

        **faces** (*Sequence\[int\]*) -- Number of faces per dimension, or *None* for the default.

      - •

        **lower** (*Sequence\[float\] \| None*) -- The lower left corner.

      - •

        **upper** (*Sequence\[float\] \| None*) -- The upper right corner.

      - •

        **simplex** (*bool \| None*) -- *True* for simplices, *False* for tensor cells.

      - •

        **periodic** (*Sequence \| str \| int \| bool \| None*) -- The boundary type for the X, Y, Z direction, or *None* for *DM.BoundaryType.NONE*.

      - •

        **interpolate** (*bool \| None*) -- Flag to create intermediate mesh entities (edges, faces).

      - •

        **localizationHeight** (*int \| None*) -- Flag to localize edges and faces in addition to cells; only significant for periodic meshes.

      - •

        **sparseLocalize** (*bool \| None*) -- Flag to localize coordinates only for cells near the periodic boundary; only significant for periodic meshes.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.setFromOptions*, *DMPlex.createFromFile*, *DM.setType*, *DM.create*, *DMPlexCreateBoxMesh*

    *Source code at petsc4py/PETSc/DMPlex.pyx:90*

  - **createBoxSurfaceMesh(faces, lower=(0, 0, 0), upper=(1, 1, 1), interpolate=True, comm=None)**

    Create a mesh on the surface of a box mesh using tensor cells.

    Collective.

    - **Parameters**

      - •

        **faces** (*Sequence\[int\]*) -- Number of faces per dimension, or *None* for the default.

      - •

        **lower** (*Sequence\[float\] \| None*) -- The lower left corner.

      - •

        **upper** (*Sequence\[float\] \| None*) -- The upper right corner.

      - •

        **interpolate** (*bool \| None*) -- Flag to create intermediate mesh pieces (edges, faces).

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.setFromOptions*, *DMPlex.createBoxMesh*, *DMPlex.createFromFile*, *DM.setType*, *DM.create*, *DMPlexCreateBoxSurfaceMesh*

    *Source code at petsc4py/PETSc/DMPlex.pyx:149*

  - **createCGNS(cgid, interpolate=True, comm=None)**

    Create a *DMPlex* mesh from a CGNS file.

    Collective.

    - **Parameters**

      - •

        **cgid** (*int*) -- The CG id associated with a file and obtained using cg\_open.

      - •

        **interpolate** (*bool \| None*) -- Create faces and edges in the mesh.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.createCGNSFromFile*, *DMPlex.createExodus*, *DMPlexCreateCGNS*

    *Source code at petsc4py/PETSc/DMPlex.pyx:226*

  - **createCGNSFromFile(filename, interpolate=True, comm=None)**

    "Create a *DMPlex* mesh from a CGNS file.

    Collective.

    - **Parameters**

      - •

        **filename** (*str*) -- The name of the CGNS file.

      - •

        **interpolate** (*bool \| None*) -- Create faces and edges in the mesh.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.createCGNS*, *DMPlex.createExodus*, *DMPlexCreateCGNS*

    *Source code at petsc4py/PETSc/DMPlex.pyx:254*

  - **createClosureIndex(sec)**

    Calculate an index for **sec** for the closure operation.

    Not collective.

    - **Parameters**

      **sec** (*Section*) -- The *Section* describing the layout in the local vector, or *None* to use the default section.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *Section*, *DMPlex.vecGetClosure*, *DMPlexCreateClosureIndex*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2031*

  - **createCoarsePointIS()**

    Create an *IS* covering the coarse *DMPlex* chart with the fine points as data.

    Collective.

    - **Returns**

      **fpointIS** -- The *IS* of all the fine points which exist in the original coarse mesh.

    - **Return type**

      *IS*

    **SEE ALSO:**

    *DM*, *DMPlex*, *IS*, *DM.refine*, *DMPlex.setRefinementUniform*, *DMPlexCreateCoarsePointIS*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1817*

  - **createCohesiveSubmesh(hasLagrange, value)**

    Extract the hypersurface defined by one face of the cohesive cells.

    Collective.

    - **Parameters**

      - •

        **hasLagrange** (*bool*) -- Flag indicating whether the mesh has Lagrange dofs in the cohesive cells.

      - •

        **value** (*int*) -- A label value.

    - **Return type**

      *DMPlex*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlexCreateCohesiveSubmesh*

    *Source code at petsc4py/PETSc/DMPlex.pyx:377*

  - **createExodus(exoid, interpolate=True, comm=None)**

    Create a *DMPlex* mesh from an ExodusII file ID.

    Collective.

    - **Parameters**

      - •

        **exoid** (*int*) -- The ExodusII id associated with a file obtained using **ex\_open**.

      - •

        **interpolate** (*bool \| None*) -- Create faces and edges in the mesh,

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.create*, *DMPlexCreateExodus*

    *Source code at petsc4py/PETSc/DMPlex.pyx:312*

  - **createExodusFromFile(filename, interpolate=True, comm=None)**

    Create a *DMPlex* mesh from an ExodusII file.

    Collective.

    - **Parameters**

      - •

        **filename** (*str*) -- The name of the ExodusII file.

      - •

        **interpolate** (*bool \| None*) -- Create faces and edges in the mesh.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.create*, *DMPlex.createExodus*, *DMPlexCreateExodusFromFile*

    *Source code at petsc4py/PETSc/DMPlex.pyx:283*

  - **createFromCellList(dim, cells, coords, interpolate=True, comm=None)**

    Create a *DMPlex* from a list of vertices for each cell on process 0.

    Collective.

    - **Parameters**

      - •

        **dim** (*int*) -- The topological dimension of the mesh.

      - •

        **cells** (*Sequence\[int\]*) -- An array of number of cells times number of vertices on each cell.

      - •

        **coords** (*Sequence\[float\]*) -- An array of number of vertices times spatial dimension for coordinates.

      - •

        **interpolate** (*bool \| None*) -- Flag to interpolate the mesh.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.interpolate*, *DMPlexCreateFromCellListPetsc*

    *Source code at petsc4py/PETSc/DMPlex.pyx:35*

  - **createFromFile(filename, plexname='unnamed', interpolate=True, comm=None)**

    Create *DMPlex* from a file.

    Collective.

    - **Parameters**

      - •

        **filename** (*str*) -- A file name.

      - •

        **plexname** (*str \| None*) -- The name of the resulting *DMPlex*, also used for intra-datafile lookup by some formats.

      - •

        **interpolate** (*bool \| None*) -- Flag to create intermediate mesh pieces (edges, faces).

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.createFromCellList*, *DMPlex.create*, *Object.setName*, *DM.view*, *DM.load*, *Working with PETSc options*, *DMPlexCreateFromFile*

    *Source code at petsc4py/PETSc/DMPlex.pyx:192*

  - **createGmsh(viewer, interpolate=True, comm=None)**

    Create a *DMPlex* mesh from a Gmsh file viewer.

    Collective.

    - **Parameters**

      - •

        **viewer** (*Viewer*) -- The *Viewer* associated with a Gmsh file.

      - •

        **interpolate** (*bool \| None*) -- Create faces and edges in the mesh.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    Notes

    **-dm\_plex\_gmsh\_hybrid** forces triangular prisms to use tensor order.

    **-dm\_plex\_gmsh\_periodic** allows for reading Gmsh periodic section.

    **-dm\_plex\_gmsh\_highorder** allows for generating high-order coordinates.

    **-dm\_plex\_gmsh\_project** projects high-order coordinates to a different space, use the prefix **-dm\_plex\_gmsh\_project\_** to define the space.

    **-dm\_plex\_gmsh\_use\_regions** generates labels with region names.

    **-dm\_plex\_gmsh\_mark\_vertices** adds vertices to generated labels.

    **-dm\_plex\_gmsh\_multiple\_tags** allows multiple tags for default labels.

    **-dm\_plex\_gmsh\_spacedim \<d\>** embedding space dimension.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.create*, *Working with PETSc options*, *DMPlexCreateGmsh*

    *Source code at petsc4py/PETSc/DMPlex.pyx:339*

  - **createPointNumbering()**

    Create a global numbering for all points.

    Collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getCellNumbering*, *DMPlexCreatePointNumbering*

    *Source code at petsc4py/PETSc/DMPlex.pyx:915*

    - **Return type**

      *IS*

  - **createSection(numComp, numDof, bcField=None, bcComps=None, bcPoints=None, perm=None)**

    Create a *Section* based upon the DOF layout specification provided.

    Not collective.

    - **Parameters**

      - •

        **numComp** (*Sequence\[int\]*) -- An array of size **numFields** holding the number of components per field.

      - •

        **numDof** (*Sequence\[int\]*) -- An array of size **numFields\*(dim+1)** holding the number of DOFs per field on a mesh piece of dimension **dim**.

      - •

        **bcField** (*Sequence\[int\] \| None*) -- An array of size **numBC** giving the field number for each boundary condition, where **numBC** is the number of boundary conditions.

      - •

        **bcComps** (*Sequence\[IS\] \| None*) -- An array of size **numBC** giving an *IS* holding the field components to which each boundary condition applies.

      - •

        **bcPoints** (*Sequence\[IS\] \| None*) -- An array of size **numBC** giving an *IS* holding the *DMPlex* points to which each boundary condition applies.

      - •

        **perm** (*IS \| None*) -- Permutation of the chart.

    - **Return type**

      *Section*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *Section.create*, *Section.setPermutation*, *DMPlexCreateSection*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1837*

  - **distribute(overlap=0)**

    Distribute the mesh and any associated sections.

    Collective.

    - **Parameters**

      **overlap** (*int \| None*) -- The overlap of partitions.

    - **Returns**

      **sf** -- The *SF* used for point distribution, or *None* if not distributed.

    - **Return type**

      *SF* or *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlexDistribute*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1561*

  - **distributeField(sf, sec, vec, newsec=None, newvec=None)**

    Distribute field data with a with a given *SF*.

    Collective.

    - **Parameters**

      - •

        **sf** (*SF*) -- The *SF* describing the communication pattern.

      - •

        **sec** (*Section*) -- The *Section* for existing data layout.

      - •

        **vec** (*Vec*) -- The existing data in a local vector.

      - •

        **newsec** (*Section \| None*) -- The *SF* describing the new data layout.

      - •

        **newvec** (*Vec \| None*) -- The new data in a local vector.

    - **Returns**

      - •

        **newSection** (*Section*) -- The *SF* describing the new data layout.

      - •

        **newVec** (*Vec*) -- The new data in a local vector.

    - **Return type**

      *tuple*\[*Section*, *Vec*\]

    **SEE ALSO:**

    *DMPlex*, *DMPlex.distribute*, *DMPlexDistributeField*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1758*

  - **distributeGetDefault()**

    Return a flag indicating whether the *DM* should be distributed by default.

    Not collective.

    - **Returns**

      **dist** -- Flag indicating whether the *DMPlex* should be distributed by default.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.distributeSetDefault*, *DMPlex.distribute*, *DMPlexDistributeGetDefault*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1647*

  - **distributeOverlap(overlap=0)**

    Add partition overlap to a distributed non-overlapping *DMPlex*.

    Collective.

    - **Parameters**

      **overlap** (*int \| None*) -- The overlap of partitions (the same on all ranks).

    - **Returns**

      **sf** -- The *SF* used for point distribution.

    - **Return type**

      *SF*

    **SEE ALSO:**

    *DM*, *DMPlex*, *SF*, *DMPlex.create*, *DMPlex.distribute*, *DMPlexDistributeOverlap*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1589*

  - **distributeSetDefault(flag)**

    Set flag indicating whether the *DMPlex* should be distributed by default.

    Logically collective.

    - **Parameters**

      **flag** (*bool*) -- Flag indicating whether the *DMPlex* should be distributed by default.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex*, *DMPlex.distributeGetDefault*, *DMPlex.distribute*, *DMPlexDistributeSetDefault*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1667*

  - **distributionGetName()**

    Retrieve the name of the specific parallel distribution.

    Not collective.

    - **Returns**

      **name** -- The name of the specific parallel distribution.

    - **Return type**

      *str*

    **SEE ALSO:**

    *DMPlex*, *DMPlex.distributionSetName*, *DMPlex.topologyView*, *DMPlex.topologyLoad*, *DMPlexDistributionGetName*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1708*

  - **distributionSetName(name)**

    Set the name of the specific parallel distribution.

    Logically collective.

    - **Parameters**

      **name** (*str*) -- The name of the specific parallel distribution.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex*, *DMPlex.distributionGetName*, *DMPlex.topologyView*, *DMPlex.topologyLoad*, *DMPlexDistributionSetName*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1687*

  - **generate(boundary, name=None, interpolate=True)**

    Generate a mesh.

    Not collective.

    - **Parameters**

      - •

        **boundary** (*DMPlex*) -- The *DMPlex* boundary object.

      - •

        **name** (*str \| None*) -- The mesh generation package name.

      - •

        **interpolate** (*bool \| None*) -- Flag to create intermediate mesh elements.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DM.refine*, *Working with PETSc options*, *DMPlexGenerate*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1284*

  - **getAdjacency(p)**

    Return all points adjacent to the given point.

    Not collective.

    - **Parameters**

      **p** (*int*) -- The point.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *DMPlex*, *DMPlex.distribute*, *DMPlexGetAdjacency*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1467*

  - **getAdjacencyUseAnchors()**

    Query whether adjacency in the mesh uses the point-to-point constraints.

    Not collective.

    **SEE ALSO:**

    *DMPlex*, *DMPlex.getAdjacency*, *DMPlex.distribute*, *DMPlexGetAdjacencyUseAnchors*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1452*

    - **Return type**

      *bool*

  - **getCellNumbering()**

    Return a global cell numbering for all cells on this process.

    Collective the first time it is called.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getVertexNumbering*, *DMPlexGetCellNumbering*

    *Source code at petsc4py/PETSc/DMPlex.pyx:885*

    - **Return type**

      *IS*

  - **getCellType(p)**

    Return the polytope type of a given cell.

    Not collective.

    - **Parameters**

      **p** (*int*) -- The cell.

    - **Return type**

      *PolytopeType*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.PolytopeType*, *DMPlex.getCellTypeLabel*, *DMPlex.getDepth*, *DMPlexGetCellType*

    *Source code at petsc4py/PETSc/DMPlex.pyx:685*

  - **getCellTypeLabel()**

    Return the *DMLabel* recording the polytope type of each cell.

    Not collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getCellType*, *DM.createLabel*, *DMPlexGetCellTypeLabel*

    *Source code at petsc4py/PETSc/DMPlex.pyx:706*

    - **Return type**

      *DMLabel*

  - **getChart()**

    Return the interval for all mesh points \[**pStart**, **pEnd**).

    Not collective.

    - **Returns**

      - •

        **pStart** (*int*) -- The first mesh point.

      - •

        **pEnd** (*int*) -- The upper bound for mesh points.

    - **Return type**

      *tuple*\[*int*, *int*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.setChart*, *DMPlexGetChart*

    *Source code at petsc4py/PETSc/DMPlex.pyx:400*

  - **getCone(p)**

    Return the points on the in-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getConeSize*, *DMPlex.setCone*, *DMPlex.setChart*, *DMPlexGetCone*

    *Source code at petsc4py/PETSc/DMPlex.pyx:491*

  - **getConeOrientation(p)**

    Return the orientations on the in-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.getCone*, *DMPlex.setCone*, *DMPlex.setChart*, *DMPlexGetConeOrientation*

    *Source code at petsc4py/PETSc/DMPlex.pyx:606*

  - **getConeSize(p)**

    Return the number of in-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

    - **Return type**

      *int*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.setConeSize*, *DMPlex.setChart*, *DMPlexGetConeSize*

    *Source code at petsc4py/PETSc/DMPlex.pyx:442*

  - **getDepth()**

    Return the depth of the DAG representing this mesh.

    Not collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getDepthStratum*, *DMPlex.symmetrize*, *DMPlexGetDepth*

    *Source code at petsc4py/PETSc/DMPlex.pyx:929*

    - **Return type**

      *int*

  - **getDepthStratum(svalue)**

    Return the bounds \[**start**, **end**) for all points at a certain depth.

    Not collective.

    - **Parameters**

      **svalue** (*int*) -- The requested depth.

    - **Returns**

      - •

        **pStart** (*int*) -- The first stratum point.

      - •

        **pEnd** (*int*) -- The upper bound for stratum points.

    - **Return type**

      *tuple*\[*int*, *int*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getHeightStratum*, *DMPlex.getDepth*, *DMPlex.symmetrize*, *DMPlex.interpolate*, *DMPlexGetDepthStratum*

    *Source code at petsc4py/PETSc/DMPlex.pyx:944*

  - **getFullJoin(points)**

    Return an array for the join of the set of points.

    Not collective.

    - **Parameters**

      **points** (*Sequence\[int\]*) -- The input points.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getJoin*, *DMPlex.getMeet*, *DMPlexGetFullJoin*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1092*

  - **getHeightStratum(svalue)**

    Return the bounds \[**start**, **end**) for all points at a certain height.

    Not collective.

    - **Parameters**

      **svalue** (*int*) -- The requested height.

    - **Returns**

      - •

        **pStart** (*int*) -- The first stratum point.

      - •

        **pEnd** (*int*) -- The upper bound for stratum points.

    - **Return type**

      *tuple*\[*int*, *int*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getDepthStratum*, *DMPlex.getDepth*, *DMPlexGetHeightStratum*

    *Source code at petsc4py/PETSc/DMPlex.pyx:971*

  - **getJoin(points)**

    Return an array for the join of the set of points.

    Not collective.

    - **Parameters**

      **points** (*Sequence\[int\]*) -- The input points.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getMeet*, *DMPlexGetJoin*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1066*

  - **getMaxSizes()**

    Return the maximum number of in-edges and out-edges of the DAG.

    Not collective.

    - **Returns**

      - •

        **maxConeSize** (*int*) -- The maximum number of in-edges.

      - •

        **maxSupportSize** (*int*) -- The maximum number of out-edges.

    - **Return type**

      *tuple*\[*int*, *int*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.setConeSize*, *DMPlex.setChart*, *DMPlexGetMaxSizes*

    *Source code at petsc4py/PETSc/DMPlex.pyx:826*

  - **getMeet(points)**

    Return an array for the meet of the set of points.

    Not collective.

    - **Parameters**

      **points** (*Sequence\[int\]*) -- The input points.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getJoin*, *DMPlexGetMeet*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1040*

  - **getMinRadius()**

    Return the minimum distance from any cell centroid to a face.

    Not collective.

    **SEE ALSO:**

    *DMPlex*, *DM.getCoordinates*, *DMPlexGetMinRadius*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1803*

    - **Return type**

      *float*

  - **getOrdering(otype)**

    Calculate a reordering of the mesh.

    Collective.

    - **Parameters**

      **otype** (*OrderingType*) -- Type of reordering, see *Mat.OrderingType*.

    - **Returns**

      **perm** -- The point permutation.

    - **Return type**

      *IS*

    **SEE ALSO:**

    *DMPlex*, *DMPlex.permute*, *Mat.OrderingType*, *Mat.getOrdering*, *DMPlexGetOrdering*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2130*

  - **getPartitioner()**

    Return the mesh partitioner.

    Not collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *Partitioner*, *Section*, *DMPlex.distribute*, *DMPlex.setPartitioner*, *Partitioner.create*, *PetscPartitionerDMPlexPartition*, *DMPlexGetPartitioner*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1510*

    - **Return type**

      *Partitioner*

  - **getPointDepth(point)**

    Return the *depth* of a given point.

    Not collective.

    - **Parameters**

      **point** (*int*) -- The point.

    - **Return type**

      *int*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getDepthStratum*, *DMPlex.getDepth*, *DMPlexGetPointDepth*

    *Source code at petsc4py/PETSc/DMPlex.pyx:998*

  - **getPointGlobal(point)**

    Return location of point data in global *Vec*.

    Not collective.

    - **Parameters**

      **point** (*int*) -- The topological point.

    - **Returns**

      - •

        **start** (*int*) -- Start of point data; returns **-(globalStart+1)** if point is not owned.

      - •

        **end** (*int*) -- End of point data; returns **-(globalEnd+1)** if point is not owned.

    - **Return type**

      *tuple*\[*int*, *int*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getPointGlobalField*, *Section.getOffset*, *Section.getDof*, *DMPlex.getPointLocal*, *DMPlexGetPointGlobal*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1972*

  - **getPointGlobalField(point, field)**

    Return location of point field data in global *Vec*.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The topological point.

      - •

        **field** (*int*) -- The field number.

    - **Returns**

      - •

        **start** (*int*) -- Start of point data; returns **-(globalStart+1)** if point is not owned.

      - •

        **end** (*int*) -- End of point data; returns **-(globalEnd+1)** if point is not owned.

    - **Return type**

      *tuple*\[*int*, *int*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getPointGlobal*, *Section.getOffset*, *Section.getDof*, *DMPlex.getPointLocal*, *DMPlexGetPointGlobalField*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2000*

  - **getPointHeight(point)**

    Return the *height* of a given point.

    Not collective.

    - **Parameters**

      **point** (*int*) -- The point.

    - **Return type**

      *int*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getHeightStratum*, *DMPlexGetPointHeight*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1019*

  - **getPointLocal(point)**

    Return location of point data in local *Vec*.

    Not collective.

    - **Parameters**

      **point** (*int*) -- The topological point.

    - **Returns**

      - •

        **start** (*int*) -- Start of point data.

      - •

        **end** (*int*) -- End of point data.

    - **Return type**

      *tuple*\[*int*, *int*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getPointLocalField*, *Section.getOffset*, *Section.getDof*, *DMPlexGetPointLocal*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1913*

  - **getPointLocalField(point, field)**

    Return location of point field data in local *Vec*.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The topological point.

      - •

        **field** (*int*) -- The field number.

    - **Returns**

      - •

        **start** (*int*) -- Start of point data.

      - •

        **end** (*int*) -- End of point data.

    - **Return type**

      *tuple*\[*int*, *int*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getPointLocal*, *Section.getOffset*, *DMPlexGetPointLocalField*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1941*

  - **getRefinementLimit()**

    Retrieve the maximum cell volume for refinement.

    Not collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.refine*, *DMPlex.setRefinementLimit*, *DMPlex.getRefinementUniform*, *DMPlex.setRefinementUniform*, *DMPlexGetRefinementLimit*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2114*

    - **Return type**

      *float*

  - **getRefinementUniform()**

    Retrieve the flag for uniform refinement.

    Not collective.

    - **Returns**

      **refinementUniform** -- The flag for uniform refinement.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.refine*, *DMPlex.setRefinementUniform*, *DMPlex.getRefinementLimit*, *DMPlex.setRefinementLimit*, *DMPlexGetRefinementUniform*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2073*

  - **getSubpointIS()**

    Return an *IS* covering the entire subdm chart.

    Not collective.

    - **Returns**

      **iset** -- The *IS* containing subdm's parent's points.

    - **Return type**

      *IS*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlexGetSubpointIS*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2278*

  - **getSubpointMap()**

    Return a *DMLabel* with point dimension as values.

    Not collective.

    - **Returns**

      **label** -- The *DMLabel* whose values are subdm's point dimensions.

    - **Return type**

      *DMLabel*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlexGetSubpointMap*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2298*

  - **getSupport(p)**

    Return the points on the out-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getSupportSize*, *DMPlex.setSupport*, *DMPlex.getCone*, *DMPlex.setChart*, *DMPlexGetSupport*

    *Source code at petsc4py/PETSc/DMPlex.pyx:771*

  - **getSupportSize(p)**

    Return the number of out-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

    - **Return type**

      *int*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.setConeSize*, *DMPlex.setChart*, *DMPlex.getConeSize*, *DMPlexGetSupportSize*

    *Source code at petsc4py/PETSc/DMPlex.pyx:722*

  - **getTransitiveClosure(p, useCone=True)**

    Return the points and orientations on the transitive closure of this point.

    Not collective.

    - **Parameters**

      - •

        **p** (*int*) -- The mesh point.

      - •

        **useCone** (*bool \| None*) -- *True* for the closure, otherwise return the star.

    - **Returns**

      - •

        **points** (*ArrayInt*) -- The points.

      - •

        **orientations** (*ArrayInt*) -- The orientations.

    - **Return type**

      *tuple*\[*ArrayInt*, *ArrayInt*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.setCone*, *DMPlex.setChart*, *DMPlex.getCone*, *DMPlexGetTransitiveClosure*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1118*

  - **getVecClosure(sec, vec, point)**

    Return an array of the values on the closure of a point.

    Not collective.

    - **Parameters**

      - •

        **sec** (*Section*) -- The *Section* describing the layout in **vec** or *None* to use the default section.

      - •

        **vec** (*Vec*) -- The local vector.

      - •

        **point** (*int*) -- The point in the *DMPlex*.

    - **Return type**

      *ArrayScalar*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlexVecRestoreClosure*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1185*

  - **getVertexNumbering()**

    Return a global vertex numbering for all vertices on this process.

    Collective the first time it is called.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getCellNumbering*, *DMPlexGetVertexNumbering*

    *Source code at petsc4py/PETSc/DMPlex.pyx:900*

    - **Return type**

      *IS*

  - **globalVectorLoad(viewer, sectiondm, sf, vec)**

    Load on-disk vector data into a global vector.

    Collective.

    - **Parameters**

      - •

        **viewer** (*Viewer*) -- The *Viewer* that represents the on-disk vector data.

      - •

        **sectiondm** (*DM*) -- The *DM* that contains the global section on which vec is defined.

      - •

        **sf** (*SF*) -- The *SF* that migrates the on-disk vector data into vec.

      - •

        **vec** (*Vec*) -- The global vector to set values of.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.topologyLoad*, *DMPlex.sectionLoad*, *DMPlex.localVectorLoad*, *DMPlex.globalVectorView*, *DMPlex.localVectorView*, *SF*, *Viewer*, *DMPlexGlobalVectorLoad*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3401*

  - **globalVectorView(viewer, sectiondm, vec)**

    Save a global vector.

    Collective.

    - **Parameters**

      - •

        **viewer** (*Viewer*) -- The *Viewer* to save data with.

      - •

        **sectiondm** (*DM*) -- The *DM* containing the global section on which **vec** is defined; may be the same as this *DMPlex* object.

      - •

        **vec** (*Vec*) -- The global vector to be saved.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.topologyView*, *DMPlex.sectionView*, *DMPlex.localVectorView*, *DMPlex.globalVectorLoad*, *DMPlex.localVectorLoad*, *DMPlexGlobalVectorView*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3248*

  - **insertCone(p, conePos, conePoint)**

    DMPlexInsertCone - Insert a point into the in-edges for the point p in the DAG.

    Not collective.

    - **Parameters**

      - •

        **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

      - •

        **conePos** (*int*) -- The local index in the cone where the point should be put.

      - •

        **conePoint** (*int*) -- The mesh point to insert.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.getCone*, *DMPlex.setChart*, *DMPlex.setConeSize*, *DM.setUp*, *DMPlexInsertCone*

    *Source code at petsc4py/PETSc/DMPlex.pyx:556*

  - **insertConeOrientation(p, conePos, coneOrientation)**

    Insert a point orientation for the in-edge for the point p in the DAG.

    Not collective.

    - **Parameters**

      - •

        **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*

      - •

        **conePos** (*int*) -- The local index in the cone where the point should be put.

      - •

        **coneOrientation** (*int*) -- The point orientation to insert.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.getCone*, *DMPlex.setChart*, *DMPlex.setConeSize*, *DM.setUp*, *DMPlexInsertConeOrientation*

    *Source code at petsc4py/PETSc/DMPlex.pyx:581*

  - **interpolate()**

    Convert to a mesh with all intermediate faces, edges, etc.

    Collective.

    **SEE ALSO:**

    *DMPlex*, *DMPlex.uninterpolate*, *DMPlex.createFromCellList*, *DMPlexInterpolate*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1728*

    - **Return type**

      *None*

  - **isDistributed()**

    Return the flag indicating if the mesh is distributed.

    Collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.distribute*, *DMPlexIsDistributed*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1618*

    - **Return type**

      *bool*

  - **isSimplex()**

    Return the flag indicating if the first cell is a simplex.

    Not collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getCellType*, *DMPlex.getHeightStratum*, *DMPlexIsSimplex*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1632*

    - **Return type**

      *bool*

  - **labelCohesiveComplete(label, bdlabel, bdvalue, flip, split, subdm)**

    Add all other mesh pieces to complete the surface.

    Not collective.

    - **Parameters**

      - •

        **label** (*DMLabel*) -- A *DMLabel* marking the surface.

      - •

        **bdlabel** (*DMLabel*) -- A *DMLabel* marking the vertices on the boundary which will not be duplicated.

      - •

        **bdvalue** (*int*) -- Value of *DMLabel* marking the vertices on the boundary.

      - •

        **flip** (*bool*) -- Flag to flip the submesh normal and replace points on the other side.

      - •

        **split** (*bool*) -- Flag to split faces incident on the surface boundary, rather than clamping those faces to the boundary

      - •

        **subdm** (*DMPlex*) -- The *DMPlex* associated with the label.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.labelComplete*, *DMPlexLabelCohesiveComplete*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1396*

  - **labelComplete(label)**

    Add the transitive closure to the surface.

    Not collective.

    - **Parameters**

      **label** (*DMLabel*) -- A *DMLabel* marking the surface points.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.labelCohesiveComplete*, *DMPlexLabelComplete*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1379*

  - **labelsLoad(viewer, sfxc)**

    Load labels into this *DMPlex* object.

    Collective.

    - **Parameters**

      - •

        **viewer** (*Viewer*) -- The *Viewer* for the saved labels.

      - •

        **sfxc** (*SF*) -- The *SF* returned by *topologyLoad*.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.load*, *DMPlex.topologyLoad*, *DMPlex.coordinatesLoad*, *DM.view*, *SF*, *Viewer*, *DMPlexLabelsLoad*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3344*

  - **labelsView(viewer)**

    Save *DMPlex* labels into a file.

    Collective.

    - **Parameters**

      **viewer** (*Viewer*) -- The *Viewer* for saving.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.view*, *DMPlex.topologyView*, *DMPlex.coordinatesView*, *DMPlex.labelsLoad*, *Viewer*, *DMPlexLabelsView*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3209*

  - **localVectorLoad(viewer, sectiondm, sf, vec)**

    Load on-disk vector data into a local vector.

    Collective.

    - **Parameters**

      - •

        **viewer** (*Viewer*) -- The *Viewer* that represents the on-disk vector data.

      - •

        **sectiondm** (*DM*) -- The *DM* that contains the local section on which vec is defined.

      - •

        **sf** (*SF*) -- The *SF* that migrates the on-disk vector data into vec.

      - •

        **vec** (*Vec*) -- The local vector to set values of.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.topologyLoad*, *DMPlex.sectionLoad*, *DMPlex.globalVectorLoad*, *DMPlex.globalVectorView*, *DMPlex.localVectorView*, *SF*, *Viewer*, *DMPlexLocalVectorLoad*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3426*

  - **localVectorView(viewer, sectiondm, vec)**

    Save a local vector.

    Collective.

    - **Parameters**

      - •

        **viewer** (*Viewer*) -- The *Viewer* to save data with.

      - •

        **sectiondm** (*DM*) -- The *DM* that contains the local section on which **vec** is defined; may be the same as this *DMPlex* object.

      - •

        **vec** (*Vec*) -- The local vector to be saved.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.topologyView*, *DMPlex.sectionView*, *DMPlex.globalVectorView*, *DMPlex.globalVectorLoad*, *DMPlex.localVectorLoad*, *DMPlexLocalVectorView*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3272*

  - **markBoundaryFaces(label, value=None)**

    Mark all faces on the boundary.

    Not collective.

    - **Parameters**

      - •

        **value** (*int \| None*) -- The marker value, or *DETERMINE* or *None* to use some value in the closure (or 1 if none are found).

      - •

        **label** (*str*)

    - **Return type**

      *DMLabel*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMLabel.create*, *DM.createLabel*, *DMPlexMarkBoundaryFaces*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1352*

  - **metricAverage2(metric1, metric2, metricAvg)**

    Compute and return the unweighted average of two metrics.

    Collective.

    - **Parameters**

      - •

        **metric1** (*Vec*) -- The first metric to be averaged.

      - •

        **metric2** (*Vec*) -- The second metric to be averaged.

      - •

        **metricAvg** (*Vec*) -- The output averaged metric.

    - **Return type**

      *Vec*

    **SEE ALSO:**

    *DMPlex.metricAverage3*, *DMPlexMetricAverage2*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3059*

  - **metricAverage3(metric1, metric2, metric3, metricAvg)**

    Compute and return the unweighted average of three metrics.

    Collective.

    - **Parameters**

      - •

        **metric1** (*Vec*) -- The first metric to be averaged.

      - •

        **metric2** (*Vec*) -- The second metric to be averaged.

      - •

        **metric3** (*Vec*) -- The third metric to be averaged.

      - •

        **metricAvg** (*Vec*) -- The output averaged metric.

    - **Return type**

      *Vec*

    **SEE ALSO:**

    *DMPlex.metricAverage2*, *DMPlexMetricAverage3*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3081*

  - **metricCreate(field=0)**

    Create a Riemannian metric field.

    Collective.

    - **Parameters**

      **field** (*int \| None*) -- The field number to use.

    - **Return type**

      *Vec*

    **SEE ALSO:**

    *DMPlex.metricCreateUniform*, *DMPlex.metricCreateIsotropic*, *Working with PETSc options*, *DMPlexMetricCreate*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2890*

  - **metricCreateIsotropic(indicator, field=0)**

    Construct an isotropic metric from an error indicator.

    Collective.

    - **Parameters**

      - •

        **indicator** (*Vec*) -- The error indicator.

      - •

        **field** (*int \| None*) -- The field number to use.

    - **Return type**

      *Vec*

    **SEE ALSO:**

    *DMPlex.metricCreate*, *DMPlex.metricCreateUniform*, *DMPlexMetricCreateIsotropic*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2935*

  - **metricCreateUniform(alpha, field=0)**

    Construct a uniform isotropic metric.

    Collective.

    - **Parameters**

      - •

        **alpha** (*float*) -- Scaling parameter for the diagonal.

      - •

        **field** (*int \| None*) -- The field number to use.

    - **Return type**

      *Vec*

    **SEE ALSO:**

    *DMPlex.metricCreate*, *DMPlex.metricCreateIsotropic*, *DMPlexMetricCreateUniform*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2911*

  - **metricDeterminantCreate(field=0)**

    Create the determinant field for a Riemannian metric.

    Collective.

    - **Parameters**

      **field** (*int \| None*) -- The field number to use.

    - **Returns**

      - •

        **determinant** (*Vec*) -- The determinant field.

      - •

        **dmDet** (*DM*) -- The corresponding DM

    - **Return type**

      *tuple*\[*Vec*, *DM*\]

    **SEE ALSO:**

    *DMPlex.metricCreateUniform*, *DMPlex.metricCreateIsotropic*, *DMPlex.metricCreate*, *DMPlexMetricDeterminantCreate*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2958*

  - **metricEnforceSPD(metric, ometric, determinant, restrictSizes=False, restrictAnisotropy=False)**

    Enforce symmetric positive-definiteness of a metric.

    Collective.

    - **Parameters**

      - •

        **metric** (*Vec*) -- The metric.

      - •

        **ometric** (*Vec*) -- The output metric.

      - •

        **determinant** (*Vec*) -- The output determinant.

      - •

        **restrictSizes** (*bool \| None*) -- Flag indicating whether maximum/minimum magnitudes should be enforced.

      - •

        **restrictAnisotropy** (*bool \| None*) -- Flag indicating whether maximum anisotropy should be enforced.

    - **Returns**

      - •

        **ometric** (*Vec*) -- The output metric.

      - •

        **determinant** (*Vec*) -- The output determinant.

    - **Return type**

      *tuple*\[*Vec*, *Vec*\]

    **SEE ALSO:**

    *DMPlex.metricNormalize*, *DMPlex.metricIntersection2*, *DMPlex.metricIntersection3*, *Working with PETSc options*, *DMPlexMetricEnforceSPD*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2987*

  - **metricGetGradationFactor()**

    Return the metric gradation factor.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetGradationFactor*, *DMPlex.metricGetHausdorffNumber*, *DMPlexMetricGetGradationFactor*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2841*

    - **Return type**

      *float*

  - **metricGetHausdorffNumber()**

    Return the metric Hausdorff number.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricGetGradationFactor*, *DMPlex.metricSetHausdorffNumber*, *DMPlexMetricGetHausdorffNumber*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2875*

    - **Return type**

      *float*

  - **metricGetMaximumAnisotropy()**

    Return the maximum tolerated metric anisotropy.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetMaximumAnisotropy*, *DMPlex.metricGetMaximumMagnitude*, *DMPlexMetricGetMaximumAnisotropy*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2739*

    - **Return type**

      *float*

  - **metricGetMaximumMagnitude()**

    Return the maximum tolerated metric magnitude.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetMaximumMagnitude*, *DMPlex.metricGetMinimumMagnitude*, *DMPlexMetricGetMaximumMagnitude*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2705*

    - **Return type**

      *float*

  - **metricGetMinimumMagnitude()**

    Return the minimum tolerated metric magnitude.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetMinimumMagnitude*, *DMPlex.metricGetMaximumMagnitude*, *DMPlexMetricGetMinimumMagnitude*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2671*

    - **Return type**

      *float*

  - **metricGetNormalizationOrder()**

    Return the order p for L-p normalization.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetNormalizationOrder*, *DMPlex.metricGetTargetComplexity*, *DMPlexMetricGetNormalizationOrder*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2807*

    - **Return type**

      *float*

  - **metricGetNumIterations()**

    Return the number of parallel adaptation iterations.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetNumIterations*, *DMPlex.metricGetVerbosity*, *DMPlexMetricGetNumIterations*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2637*

    - **Return type**

      *int*

  - **metricGetTargetComplexity()**

    Return the target metric complexity.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetTargetComplexity*, *DMPlex.metricGetNormalizationOrder*, *DMPlexMetricGetTargetComplexity*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2773*

    - **Return type**

      *float*

  - **metricGetVerbosity()**

    Return the verbosity of the mesh adaptation package.

    Not collective.

    - **Returns**

      **verbosity** -- The verbosity, where -1 is silent and 10 is maximum.

    - **Return type**

      *int*

    **SEE ALSO:**

    *DMPlex.metricSetVerbosity*, *DMPlex.metricGetNumIterations*, *DMPlexMetricGetVerbosity*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2598*

  - **metricIntersection2(metric1, metric2, metricInt)**

    Compute and return the intersection of two metrics.

    Collective.

    - **Parameters**

      - •

        **metric1** (*Vec*) -- The first metric to be intersected.

      - •

        **metric2** (*Vec*) -- The second metric to be intersected.

      - •

        **metricInt** (*Vec*) -- The output intersected metric.

    - **Return type**

      *Vec*

    **SEE ALSO:**

    *DMPlex.metricIntersection3*, *DMPlexMetricIntersection2*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3105*

  - **metricIntersection3(metric1, metric2, metric3, metricInt)**

    Compute the intersection of three metrics.

    Collective.

    - **Parameters**

      - •

        **metric1** (*Vec*) -- The first metric to be intersected.

      - •

        **metric2** (*Vec*) -- The second metric to be intersected.

      - •

        **metric3** (*Vec*) -- The third metric to be intersected.

      - •

        **metricInt** (*Vec*) -- The output intersected metric.

    - **Return type**

      *Vec*

    **SEE ALSO:**

    *DMPlex.metricIntersection2*, *DMPlexMetricIntersection3*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3127*

  - **metricIsIsotropic()**

    Return the flag indicating whether the metric is isotropic or not.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetIsotropic*, *DMPlex.metricIsUniform*, *DMPlex.metricRestrictAnisotropyFirst*, *DMPlexMetricIsIsotropic*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2386*

    - **Return type**

      *bool*

  - **metricIsUniform()**

    Return the flag indicating whether the metric is uniform or not.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetUniform*, *DMPlex.metricRestrictAnisotropyFirst*, *DMPlexMetricIsUniform*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2352*

    - **Return type**

      *bool*

  - **metricNoInsertion()**

    Return the flag indicating whether node insertion and deletion are turned off.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetNoInsertion*, *DMPlex.metricNoSwapping*, *DMPlex.metricNoMovement*, *DMPlex.metricNoSurf*, *DMPlexMetricNoInsertion*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2455*

    - **Return type**

      *bool*

  - **metricNoMovement()**

    Return the flag indicating whether node movement is turned off.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetNoMovement*, *DMPlex.metricNoInsertion*, *DMPlex.metricNoSwapping*, *DMPlex.metricNoSurf*, *DMPlexMetricNoMovement*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2527*

    - **Return type**

      *bool*

  - **metricNoSurf()**

    Return the flag indicating whether surface modification is turned off.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetNoSurf*, *DMPlex.metricNoMovement*, *DMPlex.metricNoInsertion*, *DMPlex.metricNoSwapping*, *DMPlexMetricNoSurf*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2563*

    - **Return type**

      *bool*

  - **metricNoSwapping()**

    Return the flag indicating whether facet swapping is turned off.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricSetNoSwapping*, *DMPlex.metricNoInsertion*, *DMPlex.metricNoMovement*, *DMPlex.metricNoSurf*, *DMPlexMetricNoSwapping*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2491*

    - **Return type**

      *bool*

  - **metricNormalize(metric, ometric, determinant, restrictSizes=True, restrictAnisotropy=True)**

    Apply L-p normalization to a metric.

    Collective.

    - **Parameters**

      - •

        **metric** (*Vec*) -- The metric.

      - •

        **ometric** (*Vec*) -- The output metric.

      - •

        **determinant** (*Vec*) -- The output determinant.

      - •

        **restrictSizes** (*bool \| None*) -- Flag indicating whether maximum/minimum magnitudes should be enforced.

      - •

        **restrictAnisotropy** (*bool \| None*) -- Flag indicating whether maximum anisotropy should be enforced.

    - **Returns**

      - •

        **ometric** (*Vec*) -- The output normalized metric.

      - •

        **determinant** (*Vec*) -- The output determinant.

    - **Return type**

      *tuple*\[*Vec*, *Vec*\]

    **SEE ALSO:**

    *DMPlex.metricEnforceSPD*, *DMPlex.metricIntersection2*, *DMPlex.metricIntersection3*, *Working with PETSc options*, *DMPlexMetricNormalize*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3023*

  - **metricRestrictAnisotropyFirst()**

    Return **true** if anisotropy is restricted before normalization.

    Not collective.

    **SEE ALSO:**

    *DMPlex.metricIsIsotropic*, *DMPlex.metricSetRestrictAnisotropyFirst*, *DMPlexMetricRestrictAnisotropyFirst*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2420*

    - **Return type**

      *bool*

  - **metricSetFromOptions()**

    Configure the object from the options database.

    Collective.

    **SEE ALSO:**

    *Working with PETSc options*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2320*

    - **Return type**

      *None*

  - **metricSetGradationFactor(beta)**

    Set the metric gradation factor.

    Logically collective.

    - **Parameters**

      **beta** (*float*) -- The metric gradation factor.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricGetGradationFactor*, *DMPlex.metricSetHausdorffNumber*, *DMPlexMetricSetGradationFactor*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2822*

  - **metricSetHausdorffNumber(hausd)**

    Set the metric Hausdorff number.

    Logically collective.

    - **Parameters**

      **hausd** (*float*) -- The metric Hausdorff number.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricSetGradationFactor*, *DMPlex.metricGetHausdorffNumber*, *DMPlexMetricSetHausdorffNumber*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2856*

  - **metricSetIsotropic(isotropic)**

    Record whether the metric is isotropic or not.

    Logically collective.

    - **Parameters**

      **isotropic** (*bool*) -- Flag indicating whether the metric is isotropic or not.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricIsIsotropic*, *DMPlex.metricSetUniform*, *DMPlex.metricSetRestrictAnisotropyFirst*, *DMPlexMetricSetIsotropic*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2367*

  - **metricSetMaximumAnisotropy(a\_max)**

    Set the maximum tolerated metric anisotropy.

    Logically collective.

    - **Parameters**

      **a\_max** (*float*) -- The maximum tolerated metric anisotropy.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricGetMaximumAnisotropy*, *DMPlex.metricSetMaximumMagnitude*, *DMPlexMetricSetMaximumAnisotropy*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2720*

  - **metricSetMaximumMagnitude(h\_max)**

    Set the maximum tolerated metric magnitude.

    Logically collective.

    - **Parameters**

      **h\_max** (*float*) -- The maximum tolerated metric magnitude.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricGetMaximumMagnitude*, *DMPlex.metricSetMinimumMagnitude*, *DMPlexMetricSetMaximumMagnitude*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2686*

  - **metricSetMinimumMagnitude(h\_min)**

    Set the minimum tolerated metric magnitude.

    Logically collective.

    - **Parameters**

      **h\_min** (*float*) -- The minimum tolerated metric magnitude.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricGetMinimumMagnitude*, *DMPlex.metricSetMaximumMagnitude*, *DMPlexMetricSetMinimumMagnitude*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2652*

  - **metricSetNoInsertion(noInsert)**

    Set the flag indicating whether node insertion should be turned off.

    Logically collective.

    - **Parameters**

      **noInsert** (*bool*) -- Flag indicating whether node insertion and deletion should be turned off.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricNoInsertion*, *DMPlex.metricSetNoSwapping*, *DMPlex.metricSetNoMovement*, *DMPlex.metricSetNoSurf*, *DMPlexMetricSetNoInsertion*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2435*

  - **metricSetNoMovement(noMove)**

    Set the flag indicating whether node movement should be turned off.

    Logically collective.

    - **Parameters**

      **noMove** (*bool*) -- Flag indicating whether node movement should be turned off.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricNoMovement*, *DMPlex.metricSetNoInsertion*, *DMPlex.metricSetNoSwapping*, *DMPlex.metricSetNoSurf*, *DMPlexMetricSetNoMovement*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2507*

  - **metricSetNoSurf(noSurf)**

    Set the flag indicating whether surface modification should be turned off.

    Logically collective.

    - **Parameters**

      **noSurf** (*bool*) -- Flag indicating whether surface modification should be turned off.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricNoSurf*, *DMPlex.metricSetNoMovement*, *DMPlex.metricSetNoInsertion*, *DMPlex.metricSetNoSwapping*, *DMPlexMetricSetNoSurf*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2543*

  - **metricSetNoSwapping(noSwap)**

    Set the flag indicating whether facet swapping should be turned off.

    Logically collective.

    - **Parameters**

      **noSwap** (*bool*) -- Flag indicating whether facet swapping should be turned off.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricNoSwapping*, *DMPlex.metricSetNoInsertion*, *DMPlex.metricSetNoMovement*, *DMPlex.metricSetNoSurf*, *DMPlexMetricSetNoSwapping*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2471*

  - **metricSetNormalizationOrder(p)**

    Set the order p for L-p normalization.

    Logically collective.

    - **Parameters**

      **p** (*float*) -- The normalization order.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricGetNormalizationOrder*, *DMPlex.metricSetTargetComplexity*, *DMPlexMetricSetNormalizationOrder*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2788*

  - **metricSetNumIterations(numIter)**

    Set the number of parallel adaptation iterations.

    Logically collective.

    - **Parameters**

      **numIter** (*int*) -- The number of parallel adaptation iterations.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricSetVerbosity*, *DMPlex.metricGetNumIterations*, *DMPlexMetricSetNumIterations*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2618*

  - **metricSetRestrictAnisotropyFirst(restrictAnisotropyFirst)**

    Record whether anisotropy is be restricted before normalization or after.

    Logically collective.

    - **Parameters**

      **restrictAnisotropyFirst** (*bool*) -- Flag indicating if anisotropy is restricted before normalization or after.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricSetIsotropic*, *DMPlex.metricRestrictAnisotropyFirst*, *DMPlexMetricSetRestrictAnisotropyFirst*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2401*

  - **metricSetTargetComplexity(targetComplexity)**

    Set the target metric complexity.

    Logically collective.

    - **Parameters**

      **targetComplexity** (*float*) -- The target metric complexity.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricGetTargetComplexity*, *DMPlex.metricSetNormalizationOrder*, *DMPlexMetricSetTargetComplexity*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2754*

  - **metricSetUniform(uniform)**

    Record whether the metric is uniform or not.

    Logically collective.

    - **Parameters**

      **uniform** (*bool*) -- Flag indicating whether the metric is uniform or not.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricIsUniform*, *DMPlex.metricSetIsotropic*, *DMPlex.metricSetRestrictAnisotropyFirst*, *DMPlexMetricSetUniform*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2333*

  - **metricSetVerbosity(verbosity)**

    Set the verbosity of the mesh adaptation package.

    Logically collective.

    - **Parameters**

      **verbosity** (*int*) -- The verbosity, where -1 is silent and 10 is maximum.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.metricGetVerbosity*, *DMPlex.metricSetNumIterations*, *DMPlexMetricSetVerbosity*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2579*

  - **orient()**

    Give a consistent orientation to the input mesh.

    Collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.create*, *DMPlexOrient*

    *Source code at petsc4py/PETSc/DMPlex.pyx:873*

    - **Return type**

      *None*

  - **permute(perm)**

    Reorder the mesh according to the input permutation.

    Collective.

    - **Parameters**

      **perm** (*IS*) -- The point permutation, **perm\[old point number\] = new point number**.

    - **Returns**

      **pdm** -- The permuted *DMPlex*.

    - **Return type**

      *DMPlex*

    **SEE ALSO:**

    *DMPlex*, *Mat.permute*, *DMPlexPermute*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2158*

  - **rebalanceSharedPoints(entityDepth=0, useInitialGuess=True, parallel=True)**

    Redistribute shared points in order to achieve better balancing.

    Collective.

    - **Parameters**

      - •

        **entityDepth** (*int \| None*) -- Depth of the entity to balance (e.g., 0 -\> balance vertices).

      - •

        **useInitialGuess** (*bool \| None*) -- Whether to use the current distribution as initial guess.

      - •

        **parallel** (*bool \| None*) -- Whether to use ParMETIS and do the partition in parallel or gather the graph onto a single process.

    - **Returns**

      **success** -- Whether the graph partitioning was successful or not. Unsuccessful simply means no change to the partitioning.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.distribute*, *Working with PETSc options*, *DMPlexRebalanceSharedPoints*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1527*

  - **reorderGetDefault()**

    Return flag indicating whether the *DMPlex* should be reordered by default.

    Not collective.

    **SEE ALSO:**

    *None*, *DMPlexReorderGetDefault*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2182*

    - **Return type**

      *ReorderDefaultFlag*

  - **reorderSetDefault(flag)**

    Set flag indicating whether the DM should be reordered by default.

    Logically collective.

    - **Parameters**

      - •

        **reorder** -- Flag for reordering.

      - •

        **flag** (*ReorderDefaultFlag*)

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex.reorderGetDefault*, *DMPlexReorderSetDefault*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2196*

  - **sectionLoad(viewer, sectiondm, sfxc)**

    Load section into a *DM*.

    Collective.

    - **Parameters**

      - •

        **viewer** (*Viewer*) -- The *Viewer* that represents the on-disk section (**sectionA**).

      - •

        **sectiondm** (*DM*) -- The *DM* into which the on-disk section (**sectionA**) is migrated.

      - •

        **sfxc** (*SF*) -- The *SF* returned by *topologyLoad*.

    - **Returns**

      - •

        **gsf** (*SF*) -- The *SF* that migrates any on-disk *Vec* data associated with **sectionA** into a global *Vec* associated with the **sectiondm**'s global section (*None* if not needed).

      - •

        **lsf** (*SF*) -- The *SF* that migrates any on-disk *Vec* data associated with **sectionA** into a local *Vec* associated with the **sectiondm**'s local section (*None* if not needed).

    - **Return type**

      *tuple*\[*SF*, *SF*\]

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.load*, *DMPlex.topologyLoad*, *DMPlex.coordinatesLoad*, *DMPlex.labelsLoad*, *DMPlex.globalVectorLoad*, *DMPlex.localVectorLoad*, *DMPlex.sectionView*, *SF*, *Viewer*, *DMPlexSectionLoad*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3364*

  - **sectionView(viewer, sectiondm)**

    Save a section associated with a *DMPlex*.

    Collective.

    - **Parameters**

      - •

        **viewer** (*Viewer*) -- The *Viewer* for saving.

      - •

        **sectiondm** (*DM*) -- The *DM* that contains the section to be saved.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.view*, *DMPlex.topologyView*, *DMPlex.coordinatesView*, *DMPlex.labelsView*, *DMPlex.globalVectorView*, *DMPlex.localVectorView*, *DMPlex.sectionLoad*, *Viewer*, *DMPlexSectionView*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3227*

  - **setAdjacencyUseAnchors(useAnchors=True)**

    Define adjacency in the mesh using the point-to-point constraints.

    Logically collective.

    - **Parameters**

      **useAnchors** (*bool*) -- Flag to use the constraints. If *True*, then constrained points are omitted from *DMPlex.getAdjacency*, and their anchor points appear in their place.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMPlex*, *DMPlex.getAdjacency*, *DMPlex.distribute*, *DMPlexSetAdjacencyUseAnchors*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1431*

  - **setCellType(p, ctype)**

    Set the polytope type of a given cell.

    Not collective.

    - **Parameters**

      - •

        **p** (*int*) -- The cell.

      - •

        **ctype** (*PolytopeType*) -- The polytope type of the cell.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.getCellTypeLabel*, *DMPlex.getDepth*, *DM.createLabel*, *DMPlexSetCellType*

    *Source code at petsc4py/PETSc/DMPlex.pyx:663*

  - **setChart(pStart, pEnd)**

    Set the interval for all mesh points \[**pStart**, **pEnd**).

    Not collective.

    - **Parameters**

      - •

        **pStart** (*int*) -- The first mesh point.

      - •

        **pEnd** (*int*) -- The upper bound for mesh points.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.getChart*, *DMPlexSetChart*

    *Source code at petsc4py/PETSc/DMPlex.pyx:421*

  - **setCone(p, cone, orientation=None)**

    Set the points on the in-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      - •

        **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

      - •

        **cone** (*Sequence\[int\]*) -- An array of points which are on the in-edges for point **p**.

      - •

        **orientation** (*Sequence\[int\] \| None*) -- An array of orientations, defaults to *None*.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.getCone*, *DMPlex.setChart*, *DMPlex.setConeSize*, *DM.setUp*, *DMPlex.setSupport*, *DMPlex.setSupportSize*, *DMPlexSetCone*

    *Source code at petsc4py/PETSc/DMPlex.pyx:517*

  - **setConeOrientation(p, orientation)**

    Set the orientations on the in-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      - •

        **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

      - •

        **orientation** (*Sequence\[int\]*) -- An array of orientations.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.getConeOrientation*, *DMPlex.setCone*, *DMPlex.setChart*, *DMPlex.setConeSize*, *DM.setUp*, *DMPlexSetConeOrientation*

    *Source code at petsc4py/PETSc/DMPlex.pyx:632*

  - **setConeSize(p, size)**

    Set the number of in-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      - •

        **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

      - •

        **size** (*int*) -- The cone size for point **p**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.getConeSize*, *DMPlex.setChart*, *DMPlexSetConeSize*

    *Source code at petsc4py/PETSc/DMPlex.pyx:466*

  - **setMatClosure(sec, gsec, mat, point, values, addv=None)**

    Set an array of the values on the closure of **point**.

    Not collective.

    - **Parameters**

      - •

        **sec** (*Section*) -- The section describing the layout in **mat**, or *None* to use the default section.

      - •

        **gsec** (*Section*) -- The section describing the layout in **mat**, or *None* to use the default global section.

      - •

        **mat** (*Mat*) -- The matrix.

      - •

        **point** (*int*) -- The point in the *DMPlex*.

      - •

        **values** (*Sequence\[Scalar\]*) -- The array of values.

      - •

        **mode** -- The insertion mode.

      - •

        **addv** (*InsertModeSpec \| None*)

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlexMatSetClosure*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1247*

  - **setPartitioner(part)**

    Set the mesh partitioner.

    Logically collective.

    - **Parameters**

      **part** (*Partitioner*) -- The partitioner.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *Partitioner*, *DMPlex.distribute*, *DMPlex.getPartitioner*, *Partitioner.create*, *DMPlexSetPartitioner*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1492*

  - **setRefinementLimit(refinementLimit)**

    Set the maximum cell volume for refinement.

    Logically collective.

    - **Parameters**

      **refinementLimit** (*float*) -- The maximum cell volume in the refined mesh.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.refine*, *DMPlex.getRefinementLimit*, *DMPlex.getRefinementUniform*, *DMPlex.setRefinementUniform*, *DMPlexSetRefinementLimit*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2094*

  - **setRefinementUniform(refinementUniform=True)**

    Set the flag for uniform refinement.

    Logically collective.

    - **Parameters**

      **refinementUniform** (*bool \| None*) -- The flag for uniform refinement.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.refine*, *DMPlex.getRefinementUniform*, *DMPlex.getRefinementLimit*, *DMPlex.setRefinementLimit*, *DMPlexSetRefinementUniform*

    *Source code at petsc4py/PETSc/DMPlex.pyx:2053*

  - **setSupport(p, supp)**

    Set the points on the out-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      - •

        **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

      - •

        **supp** (*Sequence\[int\]*) -- An array of points which are on the out-edges for point **p**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.setCone*, *DMPlex.setConeSize*, *DMPlex.create*, *DMPlex.getSupport*, *DMPlex.setChart*, *DMPlex.setSupportSize*, *DM.setUp*, *DMPlexSetSupport*

    *Source code at petsc4py/PETSc/DMPlex.pyx:797*

  - **setSupportSize(p, size)**

    Set the number of out-edges for this point in the DAG.

    Not collective.

    - **Parameters**

      - •

        **p** (*int*) -- The point, which must lie in the chart set with *DMPlex.setChart*.

      - •

        **size** (*int*) -- The support size for point **p**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.getSupportSize*, *DMPlex.setChart*, *DMPlexSetSupportSize*

    *Source code at petsc4py/PETSc/DMPlex.pyx:746*

  - **setTetGenOptions(opts)**

    Set the options used for the Tetgen mesh generator.

    Not collective.

    - **Parameters**

      **opts** (*str*) -- The command line options.

    - **Return type**

      *None*

    **SEE ALSO:**

    *Working with PETSc options*, *DM*, *DMPlex*, *DMPlex.setTriangleOptions*, *DMPlex.generate*, *DMPlexTetgenSetOptions*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1332*

  - **setTriangleOptions(opts)**

    Set the options used for the Triangle mesh generator.

    Not collective.

    - **Parameters**

      **opts** (*str*) -- The command line options.

    - **Return type**

      *None*

    **SEE ALSO:**

    *Working with PETSc options*, *DM*, *DMPlex*, *DMPlex.setTetGenOptions*, *DMPlex.generate*, *DMPlexTriangleSetOptions*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1312*

  - **setVecClosure(sec, vec, point, values, addv=None)**

    Set an array of the values on the closure of **point**.

    Not collective.

    - **Parameters**

      - •

        **sec** (*Section*) -- The section describing the layout in **vec**, or *None* to use the default section.

      - •

        **vec** (*Vec*) -- The local vector.

      - •

        **point** (*int*) -- The point in the *DMPlex*.

      - •

        **values** (*Sequence\[Scalar\]*) -- The array of values.

      - •

        **mode** -- The insertion mode.

      - •

        **addv** (*InsertModeSpec \| None*)

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlexVecSetClosure*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1215*

  - **stratify()**

    Calculate the strata of DAG.

    Collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.symmetrize*, *DMPlexStratify*

    *Source code at petsc4py/PETSc/DMPlex.pyx:861*

    - **Return type**

      *None*

  - **symmetrize()**

    Create support (out-edge) information from cone (in-edge) information.

    Not collective.

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlex.create*, *DMPlex.setChart*, *DMPlex.setConeSize*, *DMPlex.setCone*, *DMPlexSymmetrize*

    *Source code at petsc4py/PETSc/DMPlex.pyx:848*

    - **Return type**

      *None*

  - **topologyLoad(viewer)**

    Load a topology into this *DMPlex* object.

    Collective.

    - **Parameters**

      **viewer** (*Viewer*) -- The *Viewer* for the saved topology

    - **Returns**

      **sfxc** -- The *SF* that pushes points in **\[0, N)** to the associated points in the loaded *DMPlex*, where **N** is the global number of points.

    - **Return type**

      *SF*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.load*, *DMPlex.coordinatesLoad*, *DMPlex.labelsLoad*, *DM.view*, *SF*, *Viewer*, *DMPlexTopologyLoad*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3298*

  - **topologyView(viewer)**

    Save a *DMPlex* topology into a file.

    Collective.

    - **Parameters**

      **viewer** (*Viewer*) -- The *Viewer* for saving.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DM.view*, *DMPlex.coordinatesView*, *DMPlex.labelsView*, *DMPlex.topologyLoad*, *Viewer*, *DMPlexTopologyView*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3173*

  - **uninterpolate()**

    Convert to a mesh with only cells and vertices.

    Collective.

    **SEE ALSO:**

    *DMPlex*, *DMPlex.interpolate*, *DMPlex.createFromCellList*, *DMPlexUninterpolate*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1743*

    - **Return type**

      *None*

  - **vecGetClosure(sec, vec, p)**

    Return an array of values on the closure of **p**.

    Not collective.

    - **Parameters**

      - •

        **sec** (*Section*) -- The section describing the layout in **vec**.

      - •

        **vec** (*Vec*) -- The local vector.

      - •

        **p** (*int*) -- The point in the *DMPlex*.

    - **Return type**

      *ArrayScalar*

    **SEE ALSO:**

    *DM*, *DMPlex*, *DMPlexVecRestoreClosure*

    *Source code at petsc4py/PETSc/DMPlex.pyx:1157*

### petsc4py.PETSc.DMPlexTransform

- **class petsc4py.PETSc.DMPlexTransform**

  Bases: *Object*

  Mesh transformations.

  Methods Summary

  | | |
  | --- | --- |
  | *apply*(dm) | Apply a mesh transformation. |
  | *create*(\[comm\]) | Create a mesh transformation. |
  | *destroy*() | Destroy a mesh transformation. |
  | *getType*() | Return the transformation type name. |
  | *setDM*(dm) | Set the *DM* for the transformation. |
  | *setFromOptions*() | Configure the transformation from the options database. |
  | *setType*(tr\_type) | Set the transformation type. |
  | *setUp*() | Setup a mesh transformation. |
  | *view*(\[viewer\]) | View the mesh transformation. |

  Methods Documentation

  - **apply(dm)**

    Apply a mesh transformation.

    Collective.

    *Source code at petsc4py/PETSc/DMPlex.pyx:3475*

    - **Parameters**

      **dm** (*DM*)

    - **Return type**

      *DM*

  - **create(comm=None)**

    Create a mesh transformation.

    Collective.

    **SEE ALSO:**

    *DMPlexTransformCreate*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3486*

    - **Parameters**

      **comm** (*Comm \| None*)

    - **Return type**

      *Self*

  - **destroy()**

    Destroy a mesh transformation.

    Collective.

    **SEE ALSO:**

    *DMPlexTransformDestroy*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3503*

    - **Return type**

      *Self*

  - **getType()**

    Return the transformation type name.

    Not collective.

    **SEE ALSO:**

    *DMPlexTransformGetType*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3516*

    - **Return type**

      *str*

  - **setDM(dm)**

    Set the *DM* for the transformation.

    Logically collective.

    *Source code at petsc4py/PETSc/DMPlex.pyx:3554*

    - **Parameters**

      **dm** (*DM*)

    - **Return type**

      *None*

  - **setFromOptions()**

    Configure the transformation from the options database.

    Collective.

    **SEE ALSO:**

    *Working with PETSc options*, *DMPlexTransformSetFromOptions*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3563*

    - **Return type**

      *None*

  - **setType(tr\_type)**

    Set the transformation type.

    Collective.

    **SEE ALSO:**

    *DMPlexTransformSetType*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3540*

    - **Parameters**

      **tr\_type** (*DMPlexTransformType \| str*)

    - **Return type**

      *None*

  - **setUp()**

    Setup a mesh transformation.

    Collective.

    *Source code at petsc4py/PETSc/DMPlex.pyx:3530*

    - **Return type**

      *Self*

  - **view(viewer=None)**

    View the mesh transformation.

    Collective.

    - **Parameters**

      **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

    - **Return type**

      *None*

    **SEE ALSO:**

    *Viewer*, *DMPlexTransformView*

    *Source code at petsc4py/PETSc/DMPlex.pyx:3575*

### petsc4py.PETSc.DMPlexTransformType

- **class petsc4py.PETSc.DMPlexTransformType**

  Bases: *object*

  Transformation types.

  Attributes Summary

  | | |
  | --- | --- |
  | *EXTRUDE* | Object **EXTRUDE** of type *str* |
  | *REFINE1D* | Object **REFINE1D** of type *str* |
  | *REFINEALFELD* | Object **REFINEALFELD** of type *str* |
  | *REFINEBOUNDARYLAYER* | Object **REFINEBOUNDARYLAYER** of type *str* |
  | *REFINEPOWELLSABIN* | Object **REFINEPOWELLSABIN** of type *str* |
  | *REFINEREGULAR* | Object **REFINEREGULAR** of type *str* |
  | *REFINESBR* | Object **REFINESBR** of type *str* |
  | *REFINETOBOX* | Object **REFINETOBOX** of type *str* |
  | *REFINETOSIMPLEX* | Object **REFINETOSIMPLEX** of type *str* |
  | *TRANSFORMFILTER* | Object **TRANSFORMFILTER** of type *str* |

  Attributes Documentation

  - **EXTRUDE: *str* = EXTRUDE**

    Object **EXTRUDE** of type *str*

  - **REFINE1D: *str* = REFINE1D**

    Object **REFINE1D** of type *str*

  - **REFINEALFELD: *str* = REFINEALFELD**

    Object **REFINEALFELD** of type *str*

  - **REFINEBOUNDARYLAYER: *str* = REFINEBOUNDARYLAYER**

    Object **REFINEBOUNDARYLAYER** of type *str*

  - **REFINEPOWELLSABIN: *str* = REFINEPOWELLSABIN**

    Object **REFINEPOWELLSABIN** of type *str*

  - **REFINEREGULAR: *str* = REFINEREGULAR**

    Object **REFINEREGULAR** of type *str*

  - **REFINESBR: *str* = REFINESBR**

    Object **REFINESBR** of type *str*

  - **REFINETOBOX: *str* = REFINETOBOX**

    Object **REFINETOBOX** of type *str*

  - **REFINETOSIMPLEX: *str* = REFINETOSIMPLEX**

    Object **REFINETOSIMPLEX** of type *str*

  - **TRANSFORMFILTER: *str* = TRANSFORMFILTER**

    Object **TRANSFORMFILTER** of type *str*

### petsc4py.PETSc.DMShell

- **class petsc4py.PETSc.DMShell**

  Bases: *DM*

  A shell DM object, used to manage user-defined problem data.

  Methods Summary

  | | |
  | --- | --- |
  | *create*(\[comm\]) | Creates a shell DM object. |
  | *setCoarsen*(coarsen\[, args, kargs\]) | Set the routine used to coarsen the *DMShell*. |
  | *setCreateDomainDecomposition*(decomp\[, args, ...\]) | Set the routine used to create a domain decomposition. |
  | *setCreateDomainDecompositionScatters*(scatter) | Set the routine used to create the scatter contexts for domain decomposition. |
  | *setCreateFieldDecomposition*(decomp\[, args, ...\]) | Set the routine used to create a field decomposition. |
  | *setCreateGlobalVector*(create\_gvec\[, args, kargs\]) | Set the routine to create a global vector. |
  | *setCreateInjection*(create\_injection\[, args, ...\]) | Set the routine used to create the injection operator. |
  | *setCreateInterpolation*(create\_interpolation) | Set the routine used to create the interpolation operator. |
  | *setCreateLocalVector*(create\_lvec\[, args, kargs\]) | Set the routine to create a local vector. |
  | *setCreateMatrix*(create\_matrix\[, args, kargs\]) | Set the routine to create a matrix. |
  | *setCreateRestriction*(create\_restriction\[, ...\]) | Set the routine used to create the restriction operator. |
  | *setCreateSubDM*(create\_subdm\[, args, kargs\]) | Set the routine used to create a sub DM from the *DMShell*. |
  | *setGlobalToLocal*(begin, end\[, begin\_args, ...\]) | Set the routines used to perform a global to local scatter. |
  | *setGlobalToLocalVecScatter*(gtol) | Set a *Scatter* context for global to local communication. |
  | *setGlobalVector*(gv) | Set a template global vector. |
  | *setLocalToGlobal*(begin, end\[, begin\_args, ...\]) | Set the routines used to perform a local to global scatter. |
  | *setLocalToGlobalVecScatter*(ltog) | Set a *Scatter* context for local to global communication. |
  | *setLocalToLocal*(begin, end\[, begin\_args, ...\]) | Set the routines used to perform a local to local scatter. |
  | *setLocalToLocalVecScatter*(ltol) | Set a **Scatter** context for local to local communication. |
  | *setLocalVector*(lv) | Set a template local vector. |
  | *setMatrix*(mat) | Set a template matrix. |
  | *setRefine*(refine\[, args, kargs\]) | Set the routine used to refine the *DMShell*. |

  Methods Documentation

  - **create(comm=None)**

    Creates a shell DM object.

    Collective.

    - **Parameters**

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *DMShellCreate*

    *Source code at petsc4py/PETSc/DMShell.pyx:4*

  - **setCoarsen(coarsen, args=None, kargs=None)**

    Set the routine used to coarsen the *DMShell*.

    Logically collective.

    - **Parameters**

      - •

        **coarsen** (*Callable\[\[DM, Comm\], DM\] \| None*) -- The routine which coarsens the DM.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **coarsen**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **coarsen**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setRefine*, *DMShellSetCoarsen*

    *Source code at petsc4py/PETSc/DMShell.pyx:368*

  - **setCreateDomainDecomposition(decomp, args=None, kargs=None)**

    Set the routine used to create a domain decomposition.

    Logically collective.

    - **Parameters**

      - •

        **decomp** (*Callable\[\[DM\], tuple\[list\[str\] \| None, list\[IS\] \| None, list\[IS\] \| None, list\[DM\] \| None\]\] \| None*) -- The routine to create the decomposition.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **decomp**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **decomp**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetCreateDomainDecomposition*

    *Source code at petsc4py/PETSc/DMShell.pyx:560*

  - **setCreateDomainDecompositionScatters(scatter, args=None, kargs=None)**

    Set the routine used to create the scatter contexts for domain decomposition.

    Logically collective.

    - **Parameters**

      - •

        **scatter** (*Callable\[\[DM, list\[DM\]\], tuple\[list\[Scatter\], list\[Scatter\], list\[Scatter\]\]\] \| None*) -- The routine to create the scatters.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **scatter**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **scatter**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetCreateDomainDecompositionScatters*

    *Source code at petsc4py/PETSc/DMShell.pyx:592*

  - **setCreateFieldDecomposition(decomp, args=None, kargs=None)**

    Set the routine used to create a field decomposition.

    Logically collective.

    - **Parameters**

      - •

        **decomp** (*Callable\[\[DM\], tuple\[list\[str\] \| None, list\[IS\] \| None, list\[DM\] \| None\]\] \| None*) -- The routine to create the decomposition.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **decomp**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **decomp**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetCreateFieldDecomposition*

    *Source code at petsc4py/PETSc/DMShell.pyx:528*

  - **setCreateGlobalVector(create\_gvec, args=None, kargs=None)**

    Set the routine to create a global vector.

    Logically collective.

    - **Parameters**

      - •

        **create\_gvec** (*Callable\[\[DM\], Vec\] \| None*) -- The creation routine.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **create\_gvec**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **create\_gvec**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setCreateLocalVector*, *DMShellSetCreateGlobalVector*

    *Source code at petsc4py/PETSc/DMShell.pyx:76*

  - **setCreateInjection(create\_injection, args=None, kargs=None)**

    Set the routine used to create the injection operator.

    Logically collective.

    - **Parameters**

      - •

        **create\_injection** (*Callable\[\[DM, DM\], Mat\] \| None*) -- The routine to create the injection.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **create\_injection**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **create\_injection**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetCreateInjection*

    *Source code at petsc4py/PETSc/DMShell.pyx:464*

  - **setCreateInterpolation(create\_interpolation, args=None, kargs=None)**

    Set the routine used to create the interpolation operator.

    Logically collective.

    - **Parameters**

      - •

        **create\_interpolation** (*Callable\[\[DM, DM\], tuple\[Mat, Vec\]\] \| None*) -- The routine to create the interpolation.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **create\_interpolation**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **create\_interpolation**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetCreateInterpolation*

    *Source code at petsc4py/PETSc/DMShell.pyx:432*

  - **setCreateLocalVector(create\_lvec, args=None, kargs=None)**

    Set the routine to create a local vector.

    Logically collective.

    - **Parameters**

      - •

        **create\_lvec** (*Callable\[\[DM\], Vec\] \| None*) -- The creation routine.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **create\_lvec**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **create\_lvec**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setCreateGlobalVector*, *DMShellSetCreateLocalVector*

    *Source code at petsc4py/PETSc/DMShell.pyx:108*

  - **setCreateMatrix(create\_matrix, args=None, kargs=None)**

    Set the routine to create a matrix.

    Logically collective.

    - **Parameters**

      - •

        **create\_matrix** (*Callable\[\[DM\], Mat\] \| None*) -- The function to create a matrix.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **create\_matrix**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **create\_matrix**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetCreateMatrix*

    *Source code at petsc4py/PETSc/DMShell.pyx:336*

  - **setCreateRestriction(create\_restriction, args=None, kargs=None)**

    Set the routine used to create the restriction operator.

    Logically collective.

    - **Parameters**

      - •

        **create\_restriction** (*Callable\[\[DM, DM\], Mat\] \| None*) -- The routine to create the restriction

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **create\_restriction**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **create\_restriction**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetCreateRestriction*

    *Source code at petsc4py/PETSc/DMShell.pyx:496*

  - **setCreateSubDM(create\_subdm, args=None, kargs=None)**

    Set the routine used to create a sub DM from the *DMShell*.

    Logically collective.

    - **Parameters**

      - •

        **subdm** -- The routine to create the decomposition.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **subdm**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **subdm**.

      - •

        **create\_subdm** (*Callable\[\[DM, Sequence\[int\]\], tuple\[IS, DM\]\] \| None*)

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetCreateSubDM*

    *Source code at petsc4py/PETSc/DMShell.pyx:624*

  - **setGlobalToLocal(begin, end, begin\_args=None, begin\_kargs=None, end\_args=None, end\_kargs=None)**

    Set the routines used to perform a global to local scatter.

    Logically collective.

    - **Parameters**

      - •

        **dm** -- The *DMShell*.

      - •

        **begin** (*Callable\[\[DM, Vec, InsertMode, Vec\], None\] \| None*) -- The routine which begins the global to local scatter.

      - •

        **end** (*Callable\[\[DM, Vec, InsertMode, Vec\], None\] \| None*) -- The routine which ends the global to local scatter.

      - •

        **begin\_args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **begin**.

      - •

        **begin\_kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **begin**.

      - •

        **end\_args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **end**.

      - •

        **end\_kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **end**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetGlobalToLocal*

    *Source code at petsc4py/PETSc/DMShell.pyx:140*

  - **setGlobalToLocalVecScatter(gtol)**

    Set a *Scatter* context for global to local communication.

    Logically collective.

    - **Parameters**

      **gtol** (*Scatter*) -- The global to local *Scatter* context.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetGlobalToLocalVecScatter*

    *Source code at petsc4py/PETSc/DMShell.pyx:189*

  - **setGlobalVector(gv)**

    Set a template global vector.

    Logically collective.

    - **Parameters**

      **gv** (*Vec*) -- Template vector.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setLocalVector*, *DMShellSetGlobalVector*

    *Source code at petsc4py/PETSc/DMShell.pyx:42*

  - **setLocalToGlobal(begin, end, begin\_args=None, begin\_kargs=None, end\_args=None, end\_kargs=None)**

    Set the routines used to perform a local to global scatter.

    Logically collective.

    - **Parameters**

      - •

        **begin** (*Callable\[\[DM, Vec, InsertMode, Vec\], None\] \| None*) -- The routine which begins the local to global scatter.

      - •

        **end** (*Callable\[\[DM, Vec, InsertMode, Vec\], None\] \| None*) -- The routine which ends the local to global scatter.

      - •

        **begin\_args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **begin**.

      - •

        **begin\_kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **begin**.

      - •

        **end\_args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **end**.

      - •

        **end\_kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **end**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetLocalToGlobal*

    *Source code at petsc4py/PETSc/DMShell.pyx:206*

  - **setLocalToGlobalVecScatter(ltog)**

    Set a *Scatter* context for local to global communication.

    Logically collective.

    - **Parameters**

      **ltog** (*Scatter*) -- The local to global *Scatter* context.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetLocalToGlobalVecScatter*

    *Source code at petsc4py/PETSc/DMShell.pyx:253*

  - **setLocalToLocal(begin, end, begin\_args=None, begin\_kargs=None, end\_args=None, end\_kargs=None)**

    Set the routines used to perform a local to local scatter.

    Logically collective.

    - **Parameters**

      - •

        **begin** (*Callable\[\[DM, Vec, InsertMode, Vec\], None\] \| None*) -- The routine which begins the local to local scatter.

      - •

        **end** (*Callable\[\[DM, Vec, InsertMode, Vec\], None\] \| None*) -- The routine which ends the local to local scatter.

      - •

        **begin\_args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **begin**.

      - •

        **begin\_kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **begin**.

      - •

        **end\_args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **end**.

      - •

        **end\_kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **end**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetLocalToLocal*

    *Source code at petsc4py/PETSc/DMShell.pyx:270*

  - **setLocalToLocalVecScatter(ltol)**

    Set a **Scatter** context for local to local communication.

    Logically collective.

    - **Parameters**

      **ltol** (*Scatter*) -- The local to local **Scatter** context.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetLocalToLocalVecScatter*

    *Source code at petsc4py/PETSc/DMShell.pyx:319*

  - **setLocalVector(lv)**

    Set a template local vector.

    Logically collective.

    - **Parameters**

      **lv** (*Vec*) -- Template vector.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setGlobalVector*, *DMShellSetLocalVector*

    *Source code at petsc4py/PETSc/DMShell.pyx:59*

  - **setMatrix(mat)**

    Set a template matrix.

    Collective.

    - **Parameters**

      **mat** (*Mat*) -- The template matrix.

    - **Return type**

      *None*

    **SEE ALSO:**

    *DMShellSetMatrix*

    *Source code at petsc4py/PETSc/DMShell.pyx:25*

  - **setRefine(refine, args=None, kargs=None)**

    Set the routine used to refine the *DMShell*.

    Logically collective.

    - **Parameters**

      - •

        **refine** (*Callable\[\[DM, Comm\], DM\] \| None*) -- The routine which refines the DM.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **refine**.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **refine**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setCoarsen*, *DMShellSetRefine*

    *Source code at petsc4py/PETSc/DMShell.pyx:400*

### petsc4py.PETSc.DMStag

- **class petsc4py.PETSc.DMStag**

  Bases: *DM*

  A DM object representing a "staggered grid" or a structured cell complex.

  Enumerations

  | | |
  | --- | --- |
  | *StencilLocation* | Stencil location types. |
  | *StencilType* | Stencil types. |

### petsc4py.PETSc.DMStag.StencilLocation

- **class petsc4py.PETSc.DMStag.StencilLocation**

  Bases: *object*

  Stencil location types.

  Attributes Summary

  | | |
  | --- | --- |
  | *BACK* | Constant **BACK** of type *int* |
  | *BACK\_DOWN* | Constant **BACK\_DOWN** of type *int* |
  | *BACK\_DOWN\_LEFT* | Constant **BACK\_DOWN\_LEFT** of type *int* |
  | *BACK\_DOWN\_RIGHT* | Constant **BACK\_DOWN\_RIGHT** of type *int* |
  | *BACK\_LEFT* | Constant **BACK\_LEFT** of type *int* |
  | *BACK\_RIGHT* | Constant **BACK\_RIGHT** of type *int* |
  | *BACK\_UP* | Constant **BACK\_UP** of type *int* |
  | *BACK\_UP\_LEFT* | Constant **BACK\_UP\_LEFT** of type *int* |
  | *BACK\_UP\_RIGHT* | Constant **BACK\_UP\_RIGHT** of type *int* |
  | *DOWN* | Constant **DOWN** of type *int* |
  | *DOWN\_LEFT* | Constant **DOWN\_LEFT** of type *int* |
  | *DOWN\_RIGHT* | Constant **DOWN\_RIGHT** of type *int* |
  | *ELEMENT* | Constant **ELEMENT** of type *int* |
  | *FRONT* | Constant **FRONT** of type *int* |
  | *FRONT\_DOWN* | Constant **FRONT\_DOWN** of type *int* |
  | *FRONT\_DOWN\_LEFT* | Constant **FRONT\_DOWN\_LEFT** of type *int* |
  | *FRONT\_DOWN\_RIGHT* | Constant **FRONT\_DOWN\_RIGHT** of type *int* |
  | *FRONT\_LEFT* | Constant **FRONT\_LEFT** of type *int* |
  | *FRONT\_RIGHT* | Constant **FRONT\_RIGHT** of type *int* |
  | *FRONT\_UP* | Constant **FRONT\_UP** of type *int* |
  | *FRONT\_UP\_LEFT* | Constant **FRONT\_UP\_LEFT** of type *int* |
  | *FRONT\_UP\_RIGHT* | Constant **FRONT\_UP\_RIGHT** of type *int* |
  | *LEFT* | Constant **LEFT** of type *int* |
  | *NULLLOC* | Constant **NULLLOC** of type *int* |
  | *RIGHT* | Constant **RIGHT** of type *int* |
  | *UP* | Constant **UP** of type *int* |
  | *UP\_LEFT* | Constant **UP\_LEFT** of type *int* |
  | *UP\_RIGHT* | Constant **UP\_RIGHT** of type *int* |

  Attributes Documentation

  - **BACK: *int* = BACK**

    Constant **BACK** of type *int*

  - **BACK\_DOWN: *int* = BACK\_DOWN**

    Constant **BACK\_DOWN** of type *int*

  - **BACK\_DOWN\_LEFT: *int* = BACK\_DOWN\_LEFT**

    Constant **BACK\_DOWN\_LEFT** of type *int*

  - **BACK\_DOWN\_RIGHT: *int* = BACK\_DOWN\_RIGHT**

    Constant **BACK\_DOWN\_RIGHT** of type *int*

  - **BACK\_LEFT: *int* = BACK\_LEFT**

    Constant **BACK\_LEFT** of type *int*

  - **BACK\_RIGHT: *int* = BACK\_RIGHT**

    Constant **BACK\_RIGHT** of type *int*

  - **BACK\_UP: *int* = BACK\_UP**

    Constant **BACK\_UP** of type *int*

  - **BACK\_UP\_LEFT: *int* = BACK\_UP\_LEFT**

    Constant **BACK\_UP\_LEFT** of type *int*

  - **BACK\_UP\_RIGHT: *int* = BACK\_UP\_RIGHT**

    Constant **BACK\_UP\_RIGHT** of type *int*

  - **DOWN: *int* = DOWN**

    Constant **DOWN** of type *int*

  - **DOWN\_LEFT: *int* = DOWN\_LEFT**

    Constant **DOWN\_LEFT** of type *int*

  - **DOWN\_RIGHT: *int* = DOWN\_RIGHT**

    Constant **DOWN\_RIGHT** of type *int*

  - **ELEMENT: *int* = ELEMENT**

    Constant **ELEMENT** of type *int*

  - **FRONT: *int* = FRONT**

    Constant **FRONT** of type *int*

  - **FRONT\_DOWN: *int* = FRONT\_DOWN**

    Constant **FRONT\_DOWN** of type *int*

  - **FRONT\_DOWN\_LEFT: *int* = FRONT\_DOWN\_LEFT**

    Constant **FRONT\_DOWN\_LEFT** of type *int*

  - **FRONT\_DOWN\_RIGHT: *int* = FRONT\_DOWN\_RIGHT**

    Constant **FRONT\_DOWN\_RIGHT** of type *int*

  - **FRONT\_LEFT: *int* = FRONT\_LEFT**

    Constant **FRONT\_LEFT** of type *int*

  - **FRONT\_RIGHT: *int* = FRONT\_RIGHT**

    Constant **FRONT\_RIGHT** of type *int*

  - **FRONT\_UP: *int* = FRONT\_UP**

    Constant **FRONT\_UP** of type *int*

  - **FRONT\_UP\_LEFT: *int* = FRONT\_UP\_LEFT**

    Constant **FRONT\_UP\_LEFT** of type *int*

  - **FRONT\_UP\_RIGHT: *int* = FRONT\_UP\_RIGHT**

    Constant **FRONT\_UP\_RIGHT** of type *int*

  - **LEFT: *int* = LEFT**

    Constant **LEFT** of type *int*

  - **NULLLOC: *int* = NULLLOC**

    Constant **NULLLOC** of type *int*

  - **RIGHT: *int* = RIGHT**

    Constant **RIGHT** of type *int*

  - **UP: *int* = UP**

    Constant **UP** of type *int*

  - **UP\_LEFT: *int* = UP\_LEFT**

    Constant **UP\_LEFT** of type *int*

  - **UP\_RIGHT: *int* = UP\_RIGHT**

    Constant **UP\_RIGHT** of type *int*

### petsc4py.PETSc.DMStag.StencilType

- **class petsc4py.PETSc.DMStag.StencilType**

  Bases: *object*

  Stencil types.

  Attributes Summary

  | | |
  | --- | --- |
  | *BOX* | Constant **BOX** of type *int* |
  | *NONE* | Constant **NONE** of type *int* |
  | *STAR* | Constant **STAR** of type *int* |

  Attributes Documentation

  - **BOX: *int* = BOX**

    Constant **BOX** of type *int*

  - **NONE: *int* = NONE**

    Constant **NONE** of type *int*

  - **STAR: *int* = STAR**

    Constant **STAR** of type *int*

Methods Summary

| | |
| --- | --- |
| *VecSplitToDMDA*(vec, loc, c) | Return **DMDA**, **Vec** from a subgrid of a **DMStag**, its **Vec**. |
| *create*(dim\[, dofs, sizes, boundary\_types, ...\]) | Create a DMDA object. |
| *createCompatibleDMStag*(dofs) | Create a compatible **DMStag** with different DOFs/stratum. |
| *get1dCoordinatecArrays*() | Not implemented. |
| *getBoundaryTypes*() | Return boundary types in each dimension. |
| *getCorners*() | Return starting element index, width and number of partial elements. |
| *getDim*() | Return the number of dimensions. |
| *getDof*() | Get number of DOFs associated with each stratum of the grid. |
| *getEntriesPerElement*() | Return the number of entries per element in the local representation. |
| *getGhostCorners*() | Return starting element index and width of local region. |
| *getGlobalSizes*() | Return global element counts in each dimension. |
| *getIsFirstRank*() | Return whether this process is first in each dimension in the process grid. |
| *getIsLastRank*() | Return whether this process is last in each dimension in the process grid. |
| *getLocalSizes*() | Return local elementwise sizes in each dimension. |
| *getLocationDof*(loc) | Return number of DOFs associated with a given point on the grid. |
| *getLocationSlot*(loc, c) | Return index to use in accessing raw local arrays. |
| *getOwnershipRanges*() | Return elements per process in each dimension. |
| *getProcSizes*() | Return number of processes in each dimension. |
| *getProductCoordinateLocationSlot*(loc) | Return slot for use with local product coordinate arrays. |
| *getStencilType*() | Return elementwise ghost/halo stencil type. |
| *getStencilWidth*() | Return elementwise stencil width. |
| *getVecArray*(vec) | Not implemented. |
| *migrateVec*(vec, dmTo, vecTo) | Transfer a vector between two **DMStag** objects. |
| *setBoundaryTypes*(boundary\_types) | Set the boundary types. |
| *setCoordinateDMType*(dmtype) | Set the type to store coordinates. |
| *setDof*(dofs) | Set DOFs/stratum. |
| *setGlobalSizes*(sizes) | Set global element counts in each dimension. |
| *setOwnershipRanges*(ranges) | Set elements per process in each dimension. |
| *setProcSizes*(sizes) | Set the number of processes in each dimension in the global process grid. |
| *setStencilType*(stenciltype) | Set elementwise ghost/halo stencil type. |
| *setStencilWidth*(swidth) | Set elementwise stencil width. |
| *setUniformCoordinates*(\[xmin, xmax, ymin, ...\]) | Set the coordinates to be a uniform grid.. |
| *setUniformCoordinatesExplicit*(\[xmin, xmax, ...\]) | Set coordinates to be a uniform grid, storing all values. |
| *setUniformCoordinatesProduct*(\[xmin, xmax, ...\]) | Create uniform coordinates, as a product of 1D arrays. |

Attributes Summary

| | |
| --- | --- |
| *boundary\_types* | Boundary types in each dimension. |
| *corners* | The lower left corner and size of local region in each dimension. |
| *dim* | The dimension. |
| *dofs* | The number of DOFs associated with each stratum of the grid. |
| *entries\_per\_element* | The number of entries per element in the local representation. |
| *ghost\_corners* | The lower left corner and size of local region in each dimension. |
| *global\_sizes* | Global element counts in each dimension. |
| *local\_sizes* | Local elementwise sizes in each dimension. |
| *proc\_sizes* | The number of processes in each dimension in the global decomposition. |
| *stencil\_type* | Stencil type. |
| *stencil\_width* | Elementwise stencil width. |

Methods Documentation

- **VecSplitToDMDA(vec, loc, c)**

  Return **DMDA**, **Vec** from a subgrid of a **DMStag**, its **Vec**.

  Collective.

  If a **c** value of **-k** is provided, the first **k** DOFs for that position are extracted, padding with zero values if needed. If a non-negative value is provided, a single DOF is extracted.

  - **Parameters**

    - •

      **vec** (*Vec*) -- The **Vec** object.

    - •

      **loc** (*StencilLocation*) -- Which subgrid to extract.

    - •

      **c** (*int*) -- Which component to extract.

  - **Return type**

    *tuple*\[*DMDA*, *Vec*\]

  **SEE ALSO:**

  *DMStagVecSplitToDMDA*

  *Source code at petsc4py/PETSc/DMStag.pyx:790*

- **create(dim, dofs=None, sizes=None, boundary\_types=None, stencil\_type=None, stencil\_width=None, proc\_sizes=None, ownership\_ranges=None, comm=None, setUp=False)**

  Create a DMDA object.

  Collective.

  Creates an object to manage data living on the elements and vertices / the elements, faces, and vertices / the elements, faces, edges, and vertices of a parallelized regular 1D / 2D / 3D grid.

  - **Parameters**

    - •

      **dim** (*int*) -- The number of dimensions.

    - •

      **dofs** (*tuple\[int, ...\] \| None*) -- The number of degrees of freedom per vertex, element (1D); vertex, face, element (2D); or vertex, edge, face, element (3D).

    - •

      **sizes** (*tuple\[int, ...\] \| None*) -- The number of elements in each dimension.

    - •

      **boundary\_types** (*tuple\[DM.BoundaryType \| int \| str \| bool, ...\] \| None*) -- The boundary types.

    - •

      **stencil\_type** (*StencilType \| None*) -- The ghost/halo stencil type.

    - •

      **stencil\_width** (*int \| None*) -- The width of the ghost/halo region.

    - •

      **proc\_sizes** (*tuple\[int, ...\] \| None*) -- The number of processes in x, y, z dimensions.

    - •

      **ownership\_ranges** (*tuple\[Sequence\[int\], ...\] \| None*) -- Local x, y, z element counts, of length equal to **proc\_sizes**, summing to **sizes**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - •

      **setUp** (*bool \| None*) -- Whether to call the setup routine after creating the object.

  - **Return type**

    Self

  **SEE ALSO:**

  *DMStagCreate1d*, *DMStagCreate2d*, *DMStagCreate3d*, *DMSetUp*

  *Source code at petsc4py/PETSc/DMStag.pyx:50*

- **createCompatibleDMStag(dofs)**

  Create a compatible **DMStag** with different DOFs/stratum.

  Collective.

  - **Parameters**

    **dofs** (*tuple\[int, ...\]*) -- The number of DOFs on the strata in the new *DMStag*.

  - **Return type**

    *DM*

  **SEE ALSO:**

  *DMStagCreateCompatibleDMStag*

  *Source code at petsc4py/PETSc/DMStag.pyx:766*

- **get1dCoordinatecArrays()**

  Not implemented.

  *Source code at petsc4py/PETSc/DMStag.pyx:832*

  - **Return type**

    *None*

- **getBoundaryTypes()**

  Return boundary types in each dimension.

  Not collective.

  **SEE ALSO:**

  *setBoundaryTypes*, *DMStagGetBoundaryTypes*

  *Source code at petsc4py/PETSc/DMStag.pyx:478*

  - **Return type**

    *tuple*\[*str*, ...\]

- **getCorners()**

  Return starting element index, width and number of partial elements.

  Not collective.

  The returned value is calculated excluding ghost points.

  The number of extra partial elements is either **1** or **0**. The value is **1** on right, top, and front non-periodic domain ("physical") boundaries, in the x, y, and z dimensions respectively, and otherwise **0**.

  **SEE ALSO:**

  *getGhostCorners*, *DMStagGetCorners*, *DMGetDimension*

  *Source code at petsc4py/PETSc/DMStag.pyx:363*

  - **Return type**

    *tuple*\[*tuple*\[*int*, ...\], *tuple*\[*int*, ...\], *tuple*\[*int*, ...\]\]

- **getDim()**

  Return the number of dimensions.

  Not collective.

  *Source code at petsc4py/PETSc/DMStag.pyx:310*

  - **Return type**

    *int*

- **getDof()**

  Get number of DOFs associated with each stratum of the grid.

  Not collective.

  **SEE ALSO:**

  *DMStagGetDOF*

  *Source code at petsc4py/PETSc/DMStag.pyx:348*

  - **Return type**

    *tuple*\[*int*, ...\]

- **getEntriesPerElement()**

  Return the number of entries per element in the local representation.

  Not collective.

  This is the natural block size for most local operations.

  **SEE ALSO:**

  *DMStagGetEntriesPerElement*

  *Source code at petsc4py/PETSc/DMStag.pyx:318*

  - **Return type**

    *int*

- **getGhostCorners()**

  Return starting element index and width of local region.

  Not collective.

  **SEE ALSO:**

  *getCorners*, *DMStagGetGhostCorners*

  *Source code at petsc4py/PETSc/DMStag.pyx:385*

  - **Return type**

    *tuple*\[*tuple*\[*int*, ...\], *tuple*\[*int*, ...\]\]

- **getGlobalSizes()**

  Return global element counts in each dimension.

  Not collective.

  **SEE ALSO:**

  *getLocalSizes*, *DMStagGetGlobalSizes*

  *Source code at petsc4py/PETSc/DMStag.pyx:417*

  - **Return type**

    *tuple*\[*int*, ...\]

- **getIsFirstRank()**

  Return whether this process is first in each dimension in the process grid.

  Not collective.

  **SEE ALSO:**

  *DMStagGetIsFirstRank*

  *Source code at petsc4py/PETSc/DMStag.pyx:496*

  - **Return type**

    *tuple*\[*int*, ...\]

- **getIsLastRank()**

  Return whether this process is last in each dimension in the process grid.

  Not collective.

  **SEE ALSO:**

  *DMStagGetIsLastRank*

  *Source code at petsc4py/PETSc/DMStag.pyx:512*

  - **Return type**

    *tuple*\[*int*, ...\]

- **getLocalSizes()**

  Return local elementwise sizes in each dimension.

  Not collective.

  The returned value is calculated excluding ghost points.

  **SEE ALSO:**

  *getGlobalSizes*, *DMStagGetLocalSizes*

  *Source code at petsc4py/PETSc/DMStag.pyx:400*

  - **Return type**

    *tuple*\[*int*, ...\]

- **getLocationDof(loc)**

  Return number of DOFs associated with a given point on the grid.

  Not collective.

  - **Parameters**

    **loc** (*StencilLocation*) -- The grid point.

  - **Return type**

    *int*

  **SEE ALSO:**

  *DMStagGetLocationDOF*

  *Source code at petsc4py/PETSc/DMStag.pyx:721*

- **getLocationSlot(loc, c)**

  Return index to use in accessing raw local arrays.

  Not collective.

  - **Parameters**

    - •

      **loc** (*StencilLocation*) -- Location relative to an element.

    - •

      **c** (*int*) -- Component.

  - **Return type**

    *int*

  **SEE ALSO:**

  *DMStagGetLocationSlot*

  *Source code at petsc4py/PETSc/DMStag.pyx:678*

- **getOwnershipRanges()**

  Return elements per process in each dimension.

  Not collective.

  **SEE ALSO:**

  *setOwnershipRanges*, *DMStagGetOwnershipRanges*

  *Source code at petsc4py/PETSc/DMStag.pyx:461*

  - **Return type**

    *tuple*\[*Sequence*\[*int*\], ...\]

- **getProcSizes()**

  Return number of processes in each dimension.

  Not collective.

  **SEE ALSO:**

  *DMStagGetNumRanks*

  *Source code at petsc4py/PETSc/DMStag.pyx:432*

  - **Return type**

    *tuple*\[*int*, ...\]

- **getProductCoordinateLocationSlot(loc)**

  Return slot for use with local product coordinate arrays.

  Not collective.

  - **Parameters**

    **loc** (*StencilLocation*) -- The grid location.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMStagGetProductCoordinateLocationSlot*

  *Source code at petsc4py/PETSc/DMStag.pyx:701*

- **getStencilType()**

  Return elementwise ghost/halo stencil type.

  Not collective.

  **SEE ALSO:**

  *setStencilType*, *DMStagGetStencilType*

  *Source code at petsc4py/PETSc/DMStag.pyx:447*

  - **Return type**

    *str*

- **getStencilWidth()**

  Return elementwise stencil width.

  Not collective.

  **SEE ALSO:**

  *DMStagGetStencilWidth*

  *Source code at petsc4py/PETSc/DMStag.pyx:334*

  - **Return type**

    *int*

- **getVecArray(vec)**

  Not implemented.

  *Source code at petsc4py/PETSc/DMStag.pyx:828*

  - **Parameters**

    **vec** (*Vec*)

  - **Return type**

    *None*

- **migrateVec(vec, dmTo, vecTo)**

  Transfer a vector between two **DMStag** objects.

  Collective.

  Currently only implemented to migrate global vectors to global vectors.

  - **Parameters**

    - •

      **vec** (*Vec*) -- The source vector.

    - •

      **dmTo** (*DM*) -- The compatible destination object.

    - •

      **vecTo** (*Vec*) -- The destination vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMStagMigrateVec*

  *Source code at petsc4py/PETSc/DMStag.pyx:743*

- **setBoundaryTypes(boundary\_types)**

  Set the boundary types.

  Logically collective.

  - **Parameters**

    **boundary\_types** (*tuple\[BoundaryType \| int \| str \| bool, ...\]*) -- Boundary types for one/two/three dimensions.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getBoundaryTypes*, *DMStagSetBoundaryTypes*

  *Source code at petsc4py/PETSc/DMStag.pyx:201*

- **setCoordinateDMType(dmtype)**

  Set the type to store coordinates.

  Logically collective.

  - **Parameters**

    **dmtype** (*Type*) -- The type to store coordinates.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMStagSetCoordinateDMType*

  *Source code at petsc4py/PETSc/DMStag.pyx:657*

- **setDof(dofs)**

  Set DOFs/stratum.

  Logically collective.

  - **Parameters**

    **dofs** (*tuple\[int, ...\]*) -- The number of points per 0-cell (vertex/node), 1-cell (element in 1D, edge in 2D and 3D), 2-cell (element in 2D, face in 3D), or 3-cell (element in 3D).

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMStagSetDOF*

  *Source code at petsc4py/PETSc/DMStag.pyx:224*

- **setGlobalSizes(sizes)**

  Set global element counts in each dimension.

  Logically collective.

  - **Parameters**

    **sizes** (*tuple\[int, ...\]*) -- Global elementwise size in the one/two/three dimensions.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMStagSetGlobalSizes*

  *Source code at petsc4py/PETSc/DMStag.pyx:246*

- **setOwnershipRanges(ranges)**

  Set elements per process in each dimension.

  Logically collective.

  - **Parameters**

    **ranges** (*tuple\[Sequence\[int\], ...\]*) -- Element counts for each process in one/two/three dimensions.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getOwnershipRanges*, *DMStagSetOwnershipRanges*

  *Source code at petsc4py/PETSc/DMStag.pyx:286*

- **setProcSizes(sizes)**

  Set the number of processes in each dimension in the global process grid.

  Logically collective.

  - **Parameters**

    **sizes** (*tuple\[int, ...\]*) -- Number of processes in one/two/three dimensions.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMStagSetNumRanks*

  *Source code at petsc4py/PETSc/DMStag.pyx:266*

- **setStencilType(stenciltype)**

  Set elementwise ghost/halo stencil type.

  Logically collective.

  - **Parameters**

    **stenciltype** (*StencilType \| str*) -- The elementwise ghost stencil type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getStencilType*, *DMStagSetStencilType*

  *Source code at petsc4py/PETSc/DMStag.pyx:183*

- **setStencilWidth(swidth)**

  Set elementwise stencil width.

  Logically collective.

  The width value is not used when *StencilType.NONE* is specified.

  - **Parameters**

    **swidth** (*int*) -- Stencil/halo/ghost width in elements.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMStagSetStencilWidth*

  *Source code at petsc4py/PETSc/DMStag.pyx:163*

- **setUniformCoordinates(xmin=0, xmax=1, ymin=0, ymax=1, zmin=0, zmax=1)**

  Set the coordinates to be a uniform grid..

  Collective.

  Local coordinates are populated, linearly extrapolated to ghost cells, including those outside the physical domain. This is also done in case of periodic boundaries, meaning that the same global point may have different coordinates in different local representations, which are equivalent assuming a periodicity implied by the arguments to this function, i.e., two points are equivalent if their difference is a multiple of **xmax-xmin** in the x dimension, **ymax-ymin** in the y dimension, and **zmax-zmin** in the z dimension.

  - **Parameters**

    - •

      **xmin** (*float*) -- The minimum global coordinate value in the x dimension.

    - •

      **xmax** (*float*) -- The maximum global coordinate value in the x dimension.

    - •

      **ymin** (*float*) -- The minimum global coordinate value in the y dimension.

    - •

      **ymax** (*float*) -- The maximum global coordinate value in the y dimension.

    - •

      **zmin** (*float*) -- The minimum global coordinate value in the z dimension.

    - •

      **zmax** (*float*) -- The maximum global coordinate value in the z dimension.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setUniformCoordinatesExplicit*, *setUniformCoordinatesProduct*, *DMStagSetUniformCoordinates*

  *Source code at petsc4py/PETSc/DMStag.pyx:610*

- **setUniformCoordinatesExplicit(xmin=0, xmax=1, ymin=0, ymax=1, zmin=0, zmax=1)**

  Set coordinates to be a uniform grid, storing all values.

  Collective.

  - **Parameters**

    - •

      **xmin** (*float*) -- The minimum global coordinate value in the x dimension.

    - •

      **xmax** (*float*) -- The maximum global coordinate value in the x dimension.

    - •

      **ymin** (*float*) -- The minimum global coordinate value in the y dimension.

    - •

      **ymax** (*float*) -- The maximum global coordinate value in the y dimension.

    - •

      **zmin** (*float*) -- The minimum global coordinate value in the z dimension.

    - •

      **zmax** (*float*) -- The maximum global coordinate value in the z dimension.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setUniformCoordinatesProduct*, *setUniformCoordinates*, *DMStagSetUniformCoordinatesExplicit*

  *Source code at petsc4py/PETSc/DMStag.pyx:530*

- **setUniformCoordinatesProduct(xmin=0, xmax=1, ymin=0, ymax=1, zmin=0, zmax=1)**

  Create uniform coordinates, as a product of 1D arrays.

  Collective.

  The per-dimension 1-dimensional *DMStag* objects that comprise the product always have active 0-cells (vertices, element boundaries) and 1-cells (element centers).

  - **Parameters**

    - •

      **xmin** (*float*) -- The minimum global coordinate value in the x dimension.

    - •

      **xmax** (*float*) -- The maximum global coordinate value in the x dimension.

    - •

      **ymin** (*float*) -- The minimum global coordinate value in the y dimension.

    - •

      **ymax** (*float*) -- The maximum global coordinate value in the y dimension.

    - •

      **zmin** (*float*) -- The minimum global coordinate value in the z dimension.

    - •

      **zmax** (*float*) -- The maximum global coordinate value in the z dimension.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setUniformCoordinatesExplicit*, *setUniformCoordinates*, *DMStagSetUniformCoordinatesProduct*

  *Source code at petsc4py/PETSc/DMStag.pyx:568*

Attributes Documentation

- **boundary\_types**

  Boundary types in each dimension.

  *Source code at petsc4py/PETSc/DMStag.pyx:866*

- **corners**

  The lower left corner and size of local region in each dimension.

  *Source code at petsc4py/PETSc/DMStag.pyx:881*

- **dim**

  The dimension.

  *Source code at petsc4py/PETSc/DMStag.pyx:836*

- **dofs**

  The number of DOFs associated with each stratum of the grid.

  *Source code at petsc4py/PETSc/DMStag.pyx:841*

- **entries\_per\_element**

  The number of entries per element in the local representation.

  *Source code at petsc4py/PETSc/DMStag.pyx:846*

- **ghost\_corners**

  The lower left corner and size of local region in each dimension.

  *Source code at petsc4py/PETSc/DMStag.pyx:886*

- **global\_sizes**

  Global element counts in each dimension.

  *Source code at petsc4py/PETSc/DMStag.pyx:851*

- **local\_sizes**

  Local elementwise sizes in each dimension.

  *Source code at petsc4py/PETSc/DMStag.pyx:856*

- **proc\_sizes**

  The number of processes in each dimension in the global decomposition.

  *Source code at petsc4py/PETSc/DMStag.pyx:861*

- **stencil\_type**

  Stencil type.

  *Source code at petsc4py/PETSc/DMStag.pyx:871*

- **stencil\_width**

  Elementwise stencil width.

  *Source code at petsc4py/PETSc/DMStag.pyx:876*

### petsc4py.PETSc.DMSwarm

- **class petsc4py.PETSc.DMSwarm**

  Bases: *DM*

  A *DM* object used to represent arrays of data (fields) of arbitrary type.

  Enumerations

  | | |
  | --- | --- |
  | *CollectType* | Swarm collection types. |
  | *MigrateType* | Swarm migration types. |
  | *PICLayoutType* | Swarm PIC layout types. |
  | *Type* | Swarm types. |

### petsc4py.PETSc.DMSwarm.CollectType

- **class petsc4py.PETSc.DMSwarm.CollectType**

  Bases: *object*

  Swarm collection types.

  Attributes Summary

  | | |
  | --- | --- |
  | *COLLECT\_BASIC* | Constant **COLLECT\_BASIC** of type *int* |
  | *COLLECT\_DMDABOUNDINGBOX* | Constant **COLLECT\_DMDABOUNDINGBOX** of type *int* |
  | *COLLECT\_GENERAL* | Constant **COLLECT\_GENERAL** of type *int* |
  | *COLLECT\_USER* | Constant **COLLECT\_USER** of type *int* |

  Attributes Documentation

  - **COLLECT\_BASIC: *int* = COLLECT\_BASIC**

    Constant **COLLECT\_BASIC** of type *int*

  - **COLLECT\_DMDABOUNDINGBOX: *int* = COLLECT\_DMDABOUNDINGBOX**

    Constant **COLLECT\_DMDABOUNDINGBOX** of type *int*

  - **COLLECT\_GENERAL: *int* = COLLECT\_GENERAL**

    Constant **COLLECT\_GENERAL** of type *int*

  - **COLLECT\_USER: *int* = COLLECT\_USER**

    Constant **COLLECT\_USER** of type *int*

### petsc4py.PETSc.DMSwarm.MigrateType

- **class petsc4py.PETSc.DMSwarm.MigrateType**

  Bases: *object*

  Swarm migration types.

  Attributes Summary

  | | |
  | --- | --- |
  | *MIGRATE\_BASIC* | Constant **MIGRATE\_BASIC** of type *int* |
  | *MIGRATE\_DMCELLEXACT* | Constant **MIGRATE\_DMCELLEXACT** of type *int* |
  | *MIGRATE\_DMCELLNSCATTER* | Constant **MIGRATE\_DMCELLNSCATTER** of type *int* |
  | *MIGRATE\_USER* | Constant **MIGRATE\_USER** of type *int* |

  Attributes Documentation

  - **MIGRATE\_BASIC: *int* = MIGRATE\_BASIC**

    Constant **MIGRATE\_BASIC** of type *int*

  - **MIGRATE\_DMCELLEXACT: *int* = MIGRATE\_DMCELLEXACT**

    Constant **MIGRATE\_DMCELLEXACT** of type *int*

  - **MIGRATE\_DMCELLNSCATTER: *int* = MIGRATE\_DMCELLNSCATTER**

    Constant **MIGRATE\_DMCELLNSCATTER** of type *int*

  - **MIGRATE\_USER: *int* = MIGRATE\_USER**

    Constant **MIGRATE\_USER** of type *int*

### petsc4py.PETSc.DMSwarm.PICLayoutType

- **class petsc4py.PETSc.DMSwarm.PICLayoutType**

  Bases: *object*

  Swarm PIC layout types.

  Attributes Summary

  | | |
  | --- | --- |
  | *LAYOUT\_GAUSS* | Constant **LAYOUT\_GAUSS** of type *int* |
  | *LAYOUT\_REGULAR* | Constant **LAYOUT\_REGULAR** of type *int* |
  | *LAYOUT\_SUBDIVISION* | Constant **LAYOUT\_SUBDIVISION** of type *int* |

  Attributes Documentation

  - **LAYOUT\_GAUSS: *int* = LAYOUT\_GAUSS**

    Constant **LAYOUT\_GAUSS** of type *int*

  - **LAYOUT\_REGULAR: *int* = LAYOUT\_REGULAR**

    Constant **LAYOUT\_REGULAR** of type *int*

  - **LAYOUT\_SUBDIVISION: *int* = LAYOUT\_SUBDIVISION**

    Constant **LAYOUT\_SUBDIVISION** of type *int*

### petsc4py.PETSc.DMSwarm.Type

- **class petsc4py.PETSc.DMSwarm.Type**

  Bases: *object*

  Swarm types.

  Attributes Summary

  | | |
  | --- | --- |
  | *BASIC* | Constant **BASIC** of type *int* |
  | *PIC* | Constant **PIC** of type *int* |

  Attributes Documentation

  - **BASIC: *int* = BASIC**

    Constant **BASIC** of type *int*

  - **PIC: *int* = PIC**

    Constant **PIC** of type *int*

Methods Summary

| | |
| --- | --- |
| *addNPoints*(npoints) | Add space for a number of new points in the *DMSwarm*. |
| *addPoint*() | Add space for one new point in the *DMSwarm*. |
| *collectViewCreate*() | Apply a collection method and gather points in neighbor ranks. |
| *collectViewDestroy*() | Reset the *DMSwarm* to the size prior to calling *collectViewCreate*. |
| *copyPoint*(pi, pj) | Copy point pi to point pj in the *DMSwarm*. |
| *create*(\[comm\]) | Create an empty DM object and set its type to *DM.Type.SWARM*. |
| *createGlobalVectorFromField*(fieldname) | Create a global *Vec* object associated with a given field. |
| *createLocalVectorFromField*(fieldname) | Create a local *Vec* object associated with a given field. |
| *destroyGlobalVectorFromField*(fieldname) | Destroy the global *Vec* object associated with a given field. |
| *destroyLocalVectorFromField*(fieldname) | Destroy the local *Vec* object associated with a given field. |
| *finalizeFieldRegister*() | Finalize the registration of fields to a *DMSwarm*. |
| *getCellDM*() | Return *DM* cell attached to *DMSwarm*. |
| *getField*(fieldname) | Return arrays storing all entries associated with a field. |
| *getLocalSize*() | Return the local length of fields registered. |
| *getSize*() | Return the total length of fields registered. |
| *initializeFieldRegister*() | Initiate the registration of fields to a *DMSwarm*. |
| *insertPointUsingCellDM*(layoutType, fill\_param) | Insert point coordinates within each cell. |
| *migrate*(\[remove\_sent\_points\]) | Relocate points defined in the *DMSwarm* to other MPI ranks. |
| *projectFields*(dm, fieldnames, vecs\[, mode\]) | Project a set of *DMSwarm* fields onto the cell *DM*. |
| *registerField*(fieldname, blocksize\[, dtype\]) | Register a field to a *DMSwarm* with a native PETSc data type. |
| *removePoint*() | Remove the last point from the *DMSwarm*. |
| *removePointAtIndex*(index) | Remove a specific point from the *DMSwarm*. |
| *restoreField*(fieldname) | Restore accesses associated with a registered field. |
| *setCellDM*(dm) | Attach a *DM* to a *DMSwarm*. |
| *setLocalSizes*(nlocal, buffer) | Set the length of all registered fields on the *DMSwarm*. |
| *setPointCoordinates*(coordinates\[, ...\]) | Set point coordinates in a *DMSwarm* from a user-defined list. |
| *setPointCoordinatesCellwise*(coordinates) | Insert point coordinates within each cell. |
| *setPointsUniformCoordinates*(min, max, npoints) | Set point coordinates in a *DMSwarm* on a regular (ijk) grid. |
| *setType*(dmswarm\_type) | Set particular flavor of *DMSwarm*. |
| *sortGetAccess*() | Setup up a *DMSwarm* point sort context. |
| *sortGetIsValid*() | Return whether the sort context is up-to-date. |
| *sortGetNumberOfPointsPerCell*(e) | Return the number of points in a cell. |
| *sortGetPointsPerCell*(e) | Create an array of point indices for all points in a cell. |
| *sortGetSizes*() | Return the sizes associated with a *DMSwarm* point sorting context. |
| *sortRestoreAccess*() | Invalidate the *DMSwarm* point sorting context. |
| *vectorDefineField*(fieldname) | Set the field from which to define a *Vec* object. |
| *viewFieldsXDMF*(filename, fieldnames) | Write a selection of *DMSwarm* fields to an XDMF3 file. |
| *viewXDMF*(filename) | Write this *DMSwarm* fields to an XDMF3 file. |

Methods Documentation

- **addNPoints(npoints)**

  Add space for a number of new points in the *DMSwarm*.

  Not collective.

  - **Parameters**

    **npoints** (*int*) -- The number of new points to add.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmAddNPoints*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:329*

- **addPoint()**

  Add space for one new point in the *DMSwarm*.

  Not collective.

  **SEE ALSO:**

  *DMSwarmAddPoint*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:317*

  - **Return type**

    *None*

- **collectViewCreate()**

  Apply a collection method and gather points in neighbor ranks.

  Collective.

  **SEE ALSO:**

  *collectViewDestroy*, *DMSwarmCollectViewCreate*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:445*

  - **Return type**

    *None*

- **collectViewDestroy()**

  Reset the *DMSwarm* to the size prior to calling *collectViewCreate*.

  Collective.

  **SEE ALSO:**

  *collectViewCreate*, *DMSwarmCollectViewDestroy*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:457*

  - **Return type**

    *None*

- **copyPoint(pi, pj)**

  Copy point pi to point pj in the *DMSwarm*.

  Not collective.

  - **Parameters**

    - •

      **pi** (*int*) -- The index of the point to copy (source).

    - •

      **pj** (*int*) -- The point index where the copy should be located (destination).

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmCopyPoint*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:377*

- **create(comm=None)**

  Create an empty DM object and set its type to *DM.Type.SWARM*.

  Collective.

  DMs are the abstract objects in PETSc that mediate between meshes and discretizations and the algebraic solvers, time integrators, and optimization algorithms.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *DMCreate*, *DMSetType*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:39*

- **createGlobalVectorFromField(fieldname)**

  Create a global *Vec* object associated with a given field.

  Collective.

  The vector must be returned to the *DMSwarm* using a matching call to *destroyGlobalVectorFromField*.

  - **Parameters**

    **fieldname** (*str*) -- The textual name given to a registered field.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *destroyGlobalVectorFromField*, *DMSwarmCreateGlobalVectorFromField*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:65*

- **createLocalVectorFromField(fieldname)**

  Create a local *Vec* object associated with a given field.

  Collective.

  The vector must be returned to the *DMSwarm* using a matching call to *destroyLocalVectorFromField*.

  - **Parameters**

    **fieldname** (*str*) -- The textual name given to a registered field.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *destroyLocalVectorFromField*, *DMSwarmCreateLocalVectorFromField*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:109*

- **destroyGlobalVectorFromField(fieldname)**

  Destroy the global *Vec* object associated with a given field.

  Collective.

  - **Parameters**

    **fieldname** (*str*) -- The textual name given to a registered field.

  - **Return type**

    *None*

  **SEE ALSO:**

  *createGlobalVectorFromField*, *DMSwarmDestroyGlobalVectorFromField*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:89*

- **destroyLocalVectorFromField(fieldname)**

  Destroy the local *Vec* object associated with a given field.

  Collective.

  - **Parameters**

    **fieldname** (*str*) -- The textual name given to a registered field.

  - **Return type**

    *None*

  **SEE ALSO:**

  *createLocalVectorFromField*, *DMSwarmDestroyLocalVectorFromField*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:133*

- **finalizeFieldRegister()**

  Finalize the registration of fields to a *DMSwarm*.

  Collective.

  **SEE ALSO:**

  *initializeFieldRegister*, *DMSwarmFinalizeFieldRegister*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:167*

  - **Return type**

    *None*

- **getCellDM()**

  Return *DM* cell attached to *DMSwarm*.

  Collective.

  **SEE ALSO:**

  *setCellDM*, *DMSwarmGetCellDM*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:486*

  - **Return type**

    *DM*

- **getField(fieldname)**

  Return arrays storing all entries associated with a field.

  Not collective.

  The returned array contains underlying values of the field.

  The array must be returned to the *DMSwarm* using a matching call to *restoreField*.

  - **Parameters**

    **fieldname** (*str*) -- The textual name to identify this field.

  - **Returns**

    The type of the entries in the array will match the type of the field.

  - **Return type**

    *numpy.ndarray*

  **SEE ALSO:**

  *restoreField*, *DMSwarmGetField*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:231*

- **getLocalSize()**

  Return the local length of fields registered.

  Not collective.

  **SEE ALSO:**

  *DMSwarmGetLocalSize*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:398*

  - **Return type**

    *int*

- **getSize()**

  Return the total length of fields registered.

  Collective.

  **SEE ALSO:**

  *DMSwarmGetSize*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:412*

  - **Return type**

    *int*

- **initializeFieldRegister()**

  Initiate the registration of fields to a *DMSwarm*.

  Collective.

  After all fields have been registered, you must call *finalizeFieldRegister*.

  **SEE ALSO:**

  *finalizeFieldRegister*, *DMSwarmInitializeFieldRegister*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:153*

  - **Return type**

    *None*

- **insertPointUsingCellDM(layoutType, fill\_param)**

  Insert point coordinates within each cell.

  Not collective.

  - **Parameters**

    - •

      **layout\_type** -- Method used to fill each cell with the cell DM.

    - •

      **fill\_param** (*int*) -- Parameter controlling how many points per cell are added (the meaning of this parameter is dependent on the layout type).

    - •

      **layoutType** (*PICLayoutType*)

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmInsertPointsUsingCellDM*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:601*

- **migrate(remove\_sent\_points=False)**

  Relocate points defined in the *DMSwarm* to other MPI ranks.

  Collective.

  - **Parameters**

    **remove\_sent\_points** (*bool*) -- Flag indicating if sent points should be removed from the current MPI rank.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmMigrate*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:426*

- **projectFields(dm, fieldnames, vecs, mode=None)**

  Project a set of *DMSwarm* fields onto the cell *DM*.

  Collective.

  - **Parameters**

    - •

      **dm** (*DM*) -- The continuum *DM*.

    - •

      **fieldnames** (*Sequence\[str\]*) -- The textual names of the swarm fields to project.

    - •

      **vecs** (*Sequence\[Vec\]*)

    - •

      **mode** (*ScatterModeSpec*)

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmProjectFields*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:810*

- **registerField(fieldname, blocksize, dtype=ScalarType)**

  Register a field to a *DMSwarm* with a native PETSc data type.

  Collective.

  - **Parameters**

    - •

      **fieldname** (*str*) -- The textual name to identify this field.

    - •

      **blocksize** (*int*) -- The number of each data type.

    - •

      **dtype** (*dtype*) -- A valid PETSc data type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmRegisterPetscDatatypeField*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:201*

- **removePoint()**

  Remove the last point from the *DMSwarm*.

  Not collective.

  **SEE ALSO:**

  *DMSwarmRemovePoint*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:347*

  - **Return type**

    *None*

- **removePointAtIndex(index)**

  Remove a specific point from the *DMSwarm*.

  Not collective.

  - **Parameters**

    **index** (*int*) -- Index of point to remove

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmRemovePointAtIndex*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:359*

- **restoreField(fieldname)**

  Restore accesses associated with a registered field.

  Not collective.

  - **Parameters**

    **fieldname** (*str*) -- The textual name to identify this field.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getField*, *DMSwarmRestoreField*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:274*

- **setCellDM(dm)**

  Attach a *DM* to a *DMSwarm*.

  Collective.

  - **Parameters**

    **dm** (*DM*) -- The *DM* to attach to the *DMSwarm*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getCellDM*, *DMSwarmSetCellDM*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:469*

- **setLocalSizes(nlocal, buffer)**

  Set the length of all registered fields on the *DMSwarm*.

  Not collective.

  - **Parameters**

    - •

      **nlocal** (*int*) -- The length of each registered field.

    - •

      **buffer** (*int*) -- The length of the buffer used for efficient dynamic resizing.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *DMSwarmSetLocalSizes*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:179*

- **setPointCoordinates(coordinates, redundant=False, mode=None)**

  Set point coordinates in a *DMSwarm* from a user-defined list.

  Collective.

  - **Parameters**

    - •

      **coordinates** (*Sequence\[float\]*) -- The coordinate values.

    - •

      **redundant** (*bool*) -- If set to *True*, it is assumed that coordinates are only valid on rank 0 and should be broadcast to other ranks.

    - •

      **mode** (*InsertMode \| None*) -- Indicates whether to append points to the swarm (*InsertMode.ADD*), or override existing points (*InsertMode.INSERT*).

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmSetPointCoordinates*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:565*

- **setPointCoordinatesCellwise(coordinates)**

  Insert point coordinates within each cell.

  Not collective.

  Point coordinates are defined over the reference cell.

  - **Parameters**

    **coordinates** (*Sequence\[float\]*) -- The coordinates (defined in the local coordinate system for each cell) to insert.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmSetPointCoordinatesCellwise*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:623*

- **setPointsUniformCoordinates(min, max, npoints, mode=None)**

  Set point coordinates in a *DMSwarm* on a regular (ijk) grid.

  Collective.

  - **Parameters**

    - •

      **min** (*Sequence\[float\]*) -- Minimum coordinate values in the x, y, z directions (array of length **dim**).

    - •

      **max** (*Sequence\[float\]*) -- Maximum coordinate values in the x, y, z directions (array of length **dim**).

    - •

      **npoints** (*Sequence\[int\]*) -- Number of points in each spatial direction (array of length **dim**).

    - •

      **mode** (*InsertMode \| None*) -- Indicates whether to append points to the swarm (*InsertMode.ADD*), or override existing points (*InsertMode.INSERT*).

  - **Return type**

    *Self*

  **SEE ALSO:**

  *DMSwarmSetPointsUniformCoordinates*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:521*

- **setType(dmswarm\_type)**

  Set particular flavor of *DMSwarm*.

  Collective.

  - **Parameters**

    **dmswarm\_type** (*Type \| str*) -- The *DMSwarm* type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmSetType*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:503*

- **sortGetAccess()**

  Setup up a *DMSwarm* point sort context.

  Not collective.

  The point sort context is used for efficient traversal of points within a cell.

  You must call *sortRestoreAccess* when you no longer need access to the sort context.

  **SEE ALSO:**

  *sortRestoreAccess*, *DMSwarmSortGetAccess*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:698*

  - **Return type**

    *None*

- **sortGetIsValid()**

  Return whether the sort context is up-to-date.

  Not collective.

  Returns the flag associated with a *DMSwarm* point sorting context.

  **SEE ALSO:**

  *DMSwarmSortGetIsValid*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:772*

  - **Return type**

    *bool*

- **sortGetNumberOfPointsPerCell(e)**

  Return the number of points in a cell.

  Not collective.

  - **Parameters**

    **e** (*int*) -- The index of the cell.

  - **Return type**

    *int*

  **SEE ALSO:**

  *DMSwarmSortGetNumberOfPointsPerCell*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:752*

- **sortGetPointsPerCell(e)**

  Create an array of point indices for all points in a cell.

  Not collective.

  - **Parameters**

    **e** (*int*) -- The index of the cell.

  - **Return type**

    *list*\[*int*\]

  **SEE ALSO:**

  *DMSwarmSortGetPointsPerCell*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:728*

- **sortGetSizes()**

  Return the sizes associated with a *DMSwarm* point sorting context.

  Not collective.

  - **Returns**

    - •

      **ncells** (*int*) -- Number of cells within the sort context.

    - •

      **npoints** (*int*) -- Number of points used to create the sort context.

  - **Return type**

    *tuple*\[*int*, *int*\]

  **SEE ALSO:**

  *DMSwarmSortGetSizes*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:788*

- **sortRestoreAccess()**

  Invalidate the *DMSwarm* point sorting context.

  Not collective.

  **SEE ALSO:**

  *sortGetAccess*, *DMSwarmSortRestoreAccess*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:716*

  - **Return type**

    *None*

- **vectorDefineField(fieldname)**

  Set the field from which to define a *Vec* object.

  Collective.

  The field will be used when *DM.createLocalVec*, or *DM.createGlobalVec* is called.

  - **Parameters**

    **fieldname** (*str*) -- The textual name given to a registered field.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmVectorDefineField*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:295*

- **viewFieldsXDMF(filename, fieldnames)**

  Write a selection of *DMSwarm* fields to an XDMF3 file.

  Collective.

  - **Parameters**

    - •

      **filename** (*str*) -- The file name of the XDMF file (must have the extension .xmf).

    - •

      **fieldnames** (*Sequence\[str\]*) -- Array containing the textual names of fields to write.

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmViewFieldsXDMF*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:650*

- **viewXDMF(filename)**

  Write this *DMSwarm* fields to an XDMF3 file.

  Collective.

  - **Parameters**

    **filename** (*str*) -- The file name of the XDMF file (must have the extension .xmf).

  - **Return type**

    *None*

  **SEE ALSO:**

  *DMSwarmViewXDMF*

  *Source code at petsc4py/PETSc/DMSwarm.pyx:679*

### petsc4py.PETSc.DS

- **class petsc4py.PETSc.DS**

  Bases: *Object*

  Discrete System object.

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The Discrete System types. |

### petsc4py.PETSc.DS.Type

- **class petsc4py.PETSc.DS.Type**

  Bases: *object*

  The Discrete System types.

  Attributes Summary

  | | |
  | --- | --- |
  | *BASIC* | Object **BASIC** of type *str* |

  Attributes Documentation

  - **BASIC: *str* = BASIC**

    Object **BASIC** of type *str*

Methods Summary

| | |
| --- | --- |
| *create*(\[comm\]) | Create an empty DS. |
| *destroy*() | Destroy the discrete system. |
| *getComponents*() | Return the number of components for each field on an evaluation point. |
| *getCoordinateDimension*() | Return the coordinate dimension of the DS. |
| *getDimensions*() | Return the size of the space for each field on an evaluation point. |
| *getFieldIndex*(disc) | Return the index of the given field. |
| *getNumFields*() | Return the number of fields in the DS. |
| *getSpatialDimension*() | Return the spatial dimension of the DS. |
| *getTotalComponents*() | Return the total number of components in this system. |
| *getTotalDimensions*() | Return the total size of the approximation space for this system. |
| *getType*() | Return the type of the discrete system. |
| *setDiscretisation*(f, disc) | Set the discretization object for the given field. |
| *setFromOptions*() | Set parameters in a *DS* from the options database. |
| *setType*(ds\_type) | Build a particular type of a discrete system. |
| *setUp*() | Construct data structures for the discrete system. |
| *view*(\[viewer\]) | View a discrete system. |

Methods Documentation

- **create(comm=None)**

  Create an empty DS.

  Collective.

  The type can then be set with *setType*.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *setType*, *destroy*, *PetscDSCreate*

  *Source code at petsc4py/PETSc/DS.pyx:53*

- **destroy()**

  Destroy the discrete system.

  Collective.

  **SEE ALSO:**

  *create*, *PetscDSDestroy*

  *Source code at petsc4py/PETSc/DS.pyx:40*

  - **Return type**

    *Self*

- **getComponents()**

  Return the number of components for each field on an evaluation point.

  Not collective.

  **SEE ALSO:**

  *PetscDSGetComponents*

  *Source code at petsc4py/PETSc/DS.pyx:246*

  - **Return type**

    *ArrayInt*

- **getCoordinateDimension()**

  Return the coordinate dimension of the DS.

  Not collective.

  The coordinate dimension of the *DS* is the dimension of the space into which the discretiaztions are embedded.

  **SEE ALSO:**

  *PetscDSGetCoordinateDimension*

  *Source code at petsc4py/PETSc/DS.pyx:153*

  - **Return type**

    *int*

- **getDimensions()**

  Return the size of the space for each field on an evaluation point.

  Not collective.

  **SEE ALSO:**

  *PetscDSGetDimensions*

  *Source code at petsc4py/PETSc/DS.pyx:231*

  - **Return type**

    *ArrayInt*

- **getFieldIndex(disc)**

  Return the index of the given field.

  Not collective.

  - **Parameters**

    **disc** (*Object*) -- The discretization object.

  - **Return type**

    *int*

  **SEE ALSO:**

  *PetscDSGetFieldIndex*

  *Source code at petsc4py/PETSc/DS.pyx:184*

- **getNumFields()**

  Return the number of fields in the DS.

  Not collective.

  **SEE ALSO:**

  *PetscDSGetNumFields*

  *Source code at petsc4py/PETSc/DS.pyx:170*

  - **Return type**

    *int*

- **getSpatialDimension()**

  Return the spatial dimension of the DS.

  Not collective.

  The spatial dimension of the *DS* is the topological dimension of the discretizations.

  **SEE ALSO:**

  *PetscDSGetSpatialDimension*

  *Source code at petsc4py/PETSc/DS.pyx:136*

  - **Return type**

    *int*

- **getTotalComponents()**

  Return the total number of components in this system.

  Not collective.

  **SEE ALSO:**

  *PetscDSGetTotalComponents*

  *Source code at petsc4py/PETSc/DS.pyx:217*

  - **Return type**

    *int*

- **getTotalDimensions()**

  Return the total size of the approximation space for this system.

  Not collective.

  **SEE ALSO:**

  *PetscDSGetTotalDimension*

  *Source code at petsc4py/PETSc/DS.pyx:203*

  - **Return type**

    *int*

- **getType()**

  Return the type of the discrete system.

  Not collective.

  **SEE ALSO:**

  *setType*, *PetscDSGetType*

  *Source code at petsc4py/PETSc/DS.pyx:95*

  - **Return type**

    *str*

- **setDiscretisation(f, disc)**

  Set the discretization object for the given field.

  Not collective.

  - **Parameters**

    - •

      **f** (*int*) -- The field number.

    - •

      **disc** (*Object*) -- The discretization object.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscDSSetDiscretization*

  *Source code at petsc4py/PETSc/DS.pyx:261*

- **setFromOptions()**

  Set parameters in a *DS* from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *PetscDSSetFromOptions*

  *Source code at petsc4py/PETSc/DS.pyx:109*

  - **Return type**

    *None*

- **setType(ds\_type)**

  Build a particular type of a discrete system.

  Collective.

  - **Parameters**

    **ds\_type** (*Type \| str*) -- The type of the discrete system.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getType*, *PetscDSSetType*

  *Source code at petsc4py/PETSc/DS.pyx:76*

- **setUp()**

  Construct data structures for the discrete system.

  Collective.

  **SEE ALSO:**

  *PetscDSSetUp*

  *Source code at petsc4py/PETSc/DS.pyx:121*

  - **Return type**

    *Self*

- **view(viewer=None)**

  View a discrete system.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* to display the system.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscDSView*

  *Source code at petsc4py/PETSc/DS.pyx:21*

### petsc4py.PETSc.Device

- **class petsc4py.PETSc.Device**

  Bases: *object*

  The device object.

  Represents a handle to an accelerator (which may be the host).

  **SEE ALSO:**

  *DeviceContext*, *PetscDevice*

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The type of device. |

### petsc4py.PETSc.Device.Type

- **class petsc4py.PETSc.Device.Type**

  Bases: *object*

  The type of device.

  **SEE ALSO:**

  *Device*, *Device.create*, *Device.getDeviceType*, *Device.type*, *PetscDeviceType*

  Attributes Summary

  | | |
  | --- | --- |
  | *CUDA* | Constant **CUDA** of type *int* |
  | *DEFAULT* | Constant **DEFAULT** of type *int* |
  | *HIP* | Constant **HIP** of type *int* |
  | *HOST* | Constant **HOST** of type *int* |
  | *SYCL* | Constant **SYCL** of type *int* |

  Attributes Documentation

  - **CUDA: *int* = CUDA**

    Constant **CUDA** of type *int*

  - **DEFAULT: *int* = DEFAULT**

    Constant **DEFAULT** of type *int*

  - **HIP: *int* = HIP**

    Constant **HIP** of type *int*

  - **HOST: *int* = HOST**

    Constant **HOST** of type *int*

  - **SYCL: *int* = SYCL**

    Constant **SYCL** of type *int*

Methods Summary

| | |
| --- | --- |
| *configure*() | Configure and setup a device object. |
| *create*(\[dtype, device\_id\]) | Create a device object. |
| *destroy*() | Destroy a device object. |
| *getDeviceId*() | Return the device id. |
| *getDeviceType*() | Return the type of the device. |
| *setDefaultType*(device\_type) | Set the device type to be used as the default in subsequent calls to *create*. |
| *view*(\[viewer\]) | View a device object. |

Attributes Summary

| | |
| --- | --- |
| *device\_id* | The device id. |
| *type* | The device type. |

Methods Documentation

- **configure()**

  Configure and setup a device object.

  Not collective.

  **SEE ALSO:**

  *create*, *PetscDeviceConfigure*

  *Source code at petsc4py/PETSc/Device.pyx:132*

  - **Return type**

    *None*

- **classmethod create(dtype=None, device\_id=DECIDE)**

  Create a device object.

  Not collective.

  - **Parameters**

    - •

      **dtype** (*Type \| None*) -- The type of device to create (or *None* for the default).

    - •

      **device\_id** (*int*) -- The numeric id of the device to create.

  - **Return type**

    *Device*

  **SEE ALSO:**

  *destroy*, *PetscDeviceCreate*

  *Source code at petsc4py/PETSc/Device.pyx:94*

- **destroy()**

  Destroy a device object.

  Not collective.

  **SEE ALSO:**

  *create*, *PetscDeviceDestroy*

  *Source code at petsc4py/PETSc/Device.pyx:120*

  - **Return type**

    *None*

- **getDeviceId()**

  Return the device id.

  Not collective.

  **SEE ALSO:**

  *create*, *PetscDeviceGetDeviceId*

  *Source code at petsc4py/PETSc/Device.pyx:180*

  - **Return type**

    *int*

- **getDeviceType()**

  Return the type of the device.

  Not collective.

  **SEE ALSO:**

  *type*, *PetscDeviceGetType*

  *Source code at petsc4py/PETSc/Device.pyx:165*

  - **Return type**

    *str*

- **static setDefaultType(device\_type)**

  Set the device type to be used as the default in subsequent calls to *create*.

  Not collective.

  **SEE ALSO:**

  *create*, *PetscDeviceSetDefaultDeviceType*

  *Source code at petsc4py/PETSc/Device.pyx:195*

  - **Parameters**

    **device\_type** (*Type \| str*)

  - **Return type**

    *None*

- **view(viewer=None)**

  View a device object.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscDeviceView*

  *Source code at petsc4py/PETSc/Device.pyx:144*

Attributes Documentation

- **device\_id**

  The device id.

  *Source code at petsc4py/PETSc/Device.pyx:215*

- **type**

  The device type.

  *Source code at petsc4py/PETSc/Device.pyx:210*

### petsc4py.PETSc.DeviceContext

- **class petsc4py.PETSc.DeviceContext**

  Bases: *Object*

  DeviceContext object.

  Represents an abstract handle to a device context.

  **SEE ALSO:**

  *Device*, *PetscDeviceContext*

  Enumerations

  | | |
  | --- | --- |
  | *DeviceJoinMode* | The type of join to perform. |
  | *StreamType* | The type of stream. |

### petsc4py.PETSc.DeviceContext.DeviceJoinMode

- **class petsc4py.PETSc.DeviceContext.DeviceJoinMode**

  Bases: *object*

  The type of join to perform.

  **SEE ALSO:**

  *DeviceContext*, *DeviceContext.join*, *DeviceContext.fork*, *PetscDeviceContextJoinMode*

  Attributes Summary

  | | |
  | --- | --- |
  | *DESTROY* | Constant **DESTROY** of type *int* |
  | *NO\_SYNC* | Constant **NO\_SYNC** of type *int* |
  | *SYNC* | Constant **SYNC** of type *int* |

  Attributes Documentation

  - **DESTROY: *int* = DESTROY**

    Constant **DESTROY** of type *int*

  - **NO\_SYNC: *int* = NO\_SYNC**

    Constant **NO\_SYNC** of type *int*

  - **SYNC: *int* = SYNC**

    Constant **SYNC** of type *int*

### petsc4py.PETSc.DeviceContext.StreamType

- **class petsc4py.PETSc.DeviceContext.StreamType**

  Bases: *object*

  The type of stream.

  **SEE ALSO:**

  *DeviceContext*, *DeviceContext.getStreamType*, *DeviceContext.setStreamType*, *PetscStreamType*

  Attributes Summary

  | | |
  | --- | --- |
  | *DEFAULT* | Constant **DEFAULT** of type *int* |
  | *DEFAULT\_WITH\_BARRIER* | Constant **DEFAULT\_WITH\_BARRIER** of type *int* |
  | *NONBLOCKING* | Constant **NONBLOCKING** of type *int* |
  | *NONBLOCKING\_WITH\_BARRIER* | Constant **NONBLOCKING\_WITH\_BARRIER** of type *int* |

  Attributes Documentation

  - **DEFAULT: *int* = DEFAULT**

    Constant **DEFAULT** of type *int*

  - **DEFAULT\_WITH\_BARRIER: *int* = DEFAULT\_WITH\_BARRIER**

    Constant **DEFAULT\_WITH\_BARRIER** of type *int*

  - **NONBLOCKING: *int* = NONBLOCKING**

    Constant **NONBLOCKING** of type *int*

  - **NONBLOCKING\_WITH\_BARRIER: *int* = NONBLOCKING\_WITH\_BARRIER**

    Constant **NONBLOCKING\_WITH\_BARRIER** of type *int*

Methods Summary

| | |
| --- | --- |
| *create*() | Create an empty DeviceContext. |
| *destroy*() | Destroy a device context. |
| *duplicate*() | Duplicate a the device context. |
| *fork*(n\[, stream\_type\]) | Create multiple device contexts which are all logically dependent on this one. |
| *getCurrent*() | Return the current device context. |
| *getDevice*() | Get the *Device* which this instance is attached to. |
| *getStreamType*() | Return the *StreamType*. |
| *idle*() | Return whether the underlying stream for the device context is idle. |
| *join*(join\_mode, py\_sub\_ctxs) | Join a set of device contexts on this one. |
| *setCurrent*(dctx) | Set the current device context. |
| *setDevice*(device) | Set the *Device* which this *DeviceContext* is attached to. |
| *setFromOptions*(\[comm\]) | Configure the *DeviceContext* from the options database. |
| *setStreamType*(stream\_type) | Set the *StreamType*. |
| *setUp*() | Set up the internal data structures for using the device context. |
| *synchronize*() | Synchronize a device context. |
| *waitFor*(other) | Make this instance wait for **other**. |

Attributes Summary

| | |
| --- | --- |
| *current* | The current global device context. |
| *device* | The device associated to the device context. |
| *stream\_type* | The stream type. |

Methods Documentation

- **create()**

  Create an empty DeviceContext.

  Not collective.

  **SEE ALSO:**

  *destroy*, *Device*, *PetscDeviceContextCreate*

  *Source code at petsc4py/PETSc/Device.pyx:240*

  - **Return type**

    *Self*

- **destroy()**

  Destroy a device context.

  Not collective.

  **SEE ALSO:**

  *create*, *PetscDeviceContextDestroy*

  *Source code at petsc4py/PETSc/Device.pyx:255*

  - **Return type**

    *Self*

- **duplicate()**

  Duplicate a the device context.

  Not collective.

  **SEE ALSO:**

  *create*, *PetscDeviceContextDuplicate*

  *Source code at petsc4py/PETSc/Device.pyx:348*

  - **Return type**

    *DeviceContext*

- **fork(n, stream\_type=None)**

  Create multiple device contexts which are all logically dependent on this one.

  Not collective.

  - **Parameters**

    - •

      **n** (*int*) -- The number of device contexts to create.

    - •

      **stream\_type** (*StreamType \| str \| None*) -- The type of stream of the forked device context.

  - **Return type**

    *list*\[*DeviceContext*\]

  Examples

  The device contexts created must be destroyed using *join*.

  ```
  >>> dctx = PETSc.DeviceContext().getCurrent()
  >>> dctxs = dctx.fork(4)
  >>> ... # perform computations
  >>> # we can mix various join modes
  >>> dctx.join(PETSc.DeviceContext.JoinMode.SYNC, dctxs[0:2])
  >>> dctx.join(PETSc.DeviceContext.JoinMode.SYNC, dctxs[2:])
  >>> ... # some more computations and joins
  >>> # dctxs must be all destroyed with joinMode.DESTROY
  >>> dctx.join(PETSc.DeviceContext.JoinMode.DESTROY, dctxs)
  ```

  **SEE ALSO:**

  *join*, *waitFor*, *PetscDeviceContextFork*

  *Source code at petsc4py/PETSc/Device.pyx:399*

- **static getCurrent()**

  Return the current device context.

  Not collective.

  **SEE ALSO:**

  *current*, *setCurrent*, *PetscDeviceContextGetCurrentContext*

  *Source code at petsc4py/PETSc/Device.pyx:519*

  - **Return type**

    *DeviceContext*

- **getDevice()**

  Get the *Device* which this instance is attached to.

  Not collective.

  **SEE ALSO:**

  *setDevice*, *device*, *Device*, *PetscDeviceContextGetDevice*

  *Source code at petsc4py/PETSc/Device.pyx:302*

  - **Return type**

    *Device*

- **getStreamType()**

  Return the *StreamType*.

  Not collective.

  **SEE ALSO:**

  *stream\_type*, *setStreamType*, *PetscDeviceContextGetStreamType*

  *Source code at petsc4py/PETSc/Device.pyx:268*

  - **Return type**

    *str*

- **idle()**

  Return whether the underlying stream for the device context is idle.

  Not collective.

  **SEE ALSO:**

  *synchronize*, *PetscDeviceContextQueryIdle*

  *Source code at petsc4py/PETSc/Device.pyx:363*

  - **Return type**

    *bool*

- **join(join\_mode, py\_sub\_ctxs)**

  Join a set of device contexts on this one.

  Not collective.

  - **Parameters**

    - •

      **join\_mode** (*DeviceJoinMode \| str*) -- The type of join to perform.

    - •

      **py\_sub\_ctxs** (*list\[DeviceContext\]*) -- The list of device contexts to join.

  - **Return type**

    *None*

  **SEE ALSO:**

  *fork*, *waitFor*, *PetscDeviceContextJoin*

  *Source code at petsc4py/PETSc/Device.pyx:448*

- **static setCurrent(dctx)**

  Set the current device context.

  Not collective.

  - **Parameters**

    **dctx** (*DeviceContext \| None*) -- The *DeviceContext* to set as current (or *None* to use the default context).

  - **Return type**

    *None*

  **SEE ALSO:**

  *current*, *getCurrent*, *PetscDeviceContextSetCurrentContext*

  *Source code at petsc4py/PETSc/Device.pyx:535*

- **setDevice(device)**

  Set the *Device* which this *DeviceContext* is attached to.

  Collective.

  - **Parameters**

    **device** (*Device*) -- The *Device* to which this instance is attached to.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getDevice*, *device*, *Device*, *PetscDeviceContextSetDevice*

  *Source code at petsc4py/PETSc/Device.pyx:317*

- **setFromOptions(comm=None)**

  Configure the *DeviceContext* from the options database.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *Sys.getDefaultComm*, *PetscDeviceContextSetFromOptions*

  *Source code at petsc4py/PETSc/Device.pyx:500*

- **setStreamType(stream\_type)**

  Set the *StreamType*.

  Not collective.

  - **Parameters**

    **stream\_type** (*StreamType \| str*) -- The type of stream to set

  - **Return type**

    *None*

  **SEE ALSO:**

  *stream\_type*, *getStreamType*, *PetscDeviceContextSetStreamType*

  *Source code at petsc4py/PETSc/Device.pyx:283*

- **setUp()**

  Set up the internal data structures for using the device context.

  Not collective.

  **SEE ALSO:**

  *create*, *PetscDeviceContextSetUp*

  *Source code at petsc4py/PETSc/Device.pyx:336*

  - **Return type**

    *None*

- **synchronize()**

  Synchronize a device context.

  Not collective.

  Notes

  The underlying stream is considered idle after this routine returns, i.e. *idle* will return **True**.

  **SEE ALSO:**

  *idle*, *PetscDeviceContextSynchronize*

  *Source code at petsc4py/PETSc/Device.pyx:483*

  - **Return type**

    *None*

- **waitFor(other)**

  Make this instance wait for **other**.

  Not collective.

  - **Parameters**

    **other** (*DeviceContext \| None*) -- The other *DeviceContext* to wait for

  - **Return type**

    *None*

  **SEE ALSO:**

  *fork*, *join*, *PetscDeviceContextWaitForContext*

  *Source code at petsc4py/PETSc/Device.pyx:378*

Attributes Documentation

- **current**

  The current global device context.

  *Source code at petsc4py/PETSc/Device.pyx:574*

- **device**

  The device associated to the device context.

  *Source code at petsc4py/PETSc/Device.pyx:566*

- **stream\_type**

  The stream type.

  *Source code at petsc4py/PETSc/Device.pyx:558*

### petsc4py.PETSc.DualSpace

- **class petsc4py.PETSc.DualSpace**

  Bases: *Object*

  Dual space to a linear space.

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The dual space types. |

### petsc4py.PETSc.DualSpace.Type

- **class petsc4py.PETSc.DualSpace.Type**

  Bases: *object*

  The dual space types.

  Attributes Summary

  | | |
  | --- | --- |
  | *BDM* | Object **BDM** of type *str* |
  | *LAGRANGE* | Object **LAGRANGE** of type *str* |
  | *REFINED* | Object **REFINED** of type *str* |
  | *SIMPLE* | Object **SIMPLE** of type *str* |

  Attributes Documentation

  - **BDM: *str* = BDM**

    Object **BDM** of type *str*

  - **LAGRANGE: *str* = LAGRANGE**

    Object **LAGRANGE** of type *str*

  - **REFINED: *str* = REFINED**

    Object **REFINED** of type *str*

  - **SIMPLE: *str* = SIMPLE**

    Object **SIMPLE** of type *str*

Methods Summary

| | |
| --- | --- |
| *create*(\[comm\]) | Create an empty *DualSpace* object. |
| *destroy*() | Destroy the *DualSpace* object. |
| *duplicate*() | Create a duplicate *DualSpace* object that is not set up. |
| *getDM*() | Return the *DM* representing the reference cell of a *DualSpace*. |
| *getDimension*() | Return the dimension of the dual space. |
| *getFunctional*(i) | Return the i-th basis functional in the dual space. |
| *getInteriorDimension*() | Return the interior dimension of the dual space. |
| *getLagrangeContinuity*() | Return whether the element is continuous. |
| *getLagrangeTensor*() | Return the tensor nature of the dual space. |
| *getLagrangeTrimmed*() | Return the trimmed nature of the dual space. |
| *getNumComponents*() | Return the number of components for this space. |
| *getNumDof*() | Return the number of degrees of freedom for each spatial dimension. |
| *getOrder*() | Return the order of the dual space. |
| *getType*() | Return the type of the dual space object. |
| *setDM*(dm) | Set the *DM* representing the reference cell. |
| *setLagrangeContinuity*(continuous) | Indicate whether the element is continuous. |
| *setLagrangeTensor*(tensor) | Set the tensor nature of the dual space. |
| *setLagrangeTrimmed*(trimmed) | Set the trimmed nature of the dual space. |
| *setNumComponents*(nc) | Set the number of components for this space. |
| *setOrder*(order) | Set the order of the dual space. |
| *setSimpleDimension*(dim) | Set the number of functionals in the dual space basis. |
| *setSimpleFunctional*(func, functional) | Set the given basis element for this dual space. |
| *setType*(dualspace\_type) | Build a particular type of dual space. |
| *setUp*() | Construct a basis for a *DualSpace*. |
| *view*(\[viewer\]) | View a *DualSpace*. |

Methods Documentation

- **create(comm=None)**

  Create an empty *DualSpace* object.

  Collective.

  The type can then be set with *setType*.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PetscDualSpaceCreate*

  *Source code at petsc4py/PETSc/Space.pyx:594*

- **destroy()**

  Destroy the *DualSpace* object.

  Collective.

  **SEE ALSO:**

  *PetscDualSpaceDestroy*

  *Source code at petsc4py/PETSc/Space.pyx:636*

  - **Return type**

    *Self*

- **duplicate()**

  Create a duplicate *DualSpace* object that is not set up.

  Collective.

  **SEE ALSO:**

  *PetscDualSpaceDuplicate*

  *Source code at petsc4py/PETSc/Space.pyx:649*

  - **Return type**

    *DualSpace*

- **getDM()**

  Return the *DM* representing the reference cell of a *DualSpace*.

  Not collective.

  **SEE ALSO:**

  *setDM*, *PetscDualSpaceGetDM*

  *Source code at petsc4py/PETSc/Space.pyx:662*

  - **Return type**

    *DM*

- **getDimension()**

  Return the dimension of the dual space.

  Not collective.

  The dimension of the dual space, i.e. the number of basis functionals.

  **SEE ALSO:**

  *PetscDualSpaceGetDimension*

  *Source code at petsc4py/PETSc/Space.pyx:696*

  - **Return type**

    *int*

- **getFunctional(i)**

  Return the i-th basis functional in the dual space.

  Not collective.

  - **Parameters**

    **i** (*int*) -- The basis number.

  - **Return type**

    *Quad*

  **SEE ALSO:**

  *PetscDualSpaceGetFunctional*

  *Source code at petsc4py/PETSc/Space.pyx:826*

- **getInteriorDimension()**

  Return the interior dimension of the dual space.

  Not collective.

  The interior dimension of the dual space, i.e. the number of basis functionals assigned to the interior of the reference domain.

  **SEE ALSO:**

  *PetscDualSpaceGetInteriorDimension*

  *Source code at petsc4py/PETSc/Space.pyx:847*

  - **Return type**

    *int*

- **getLagrangeContinuity()**

  Return whether the element is continuous.

  Not collective.

  **SEE ALSO:**

  *setLagrangeContinuity*, *PetscDualSpaceLagrangeGetContinuity*

  *Source code at petsc4py/PETSc/Space.pyx:864*

  - **Return type**

    *bool*

- **getLagrangeTensor()**

  Return the tensor nature of the dual space.

  Not collective.

  **SEE ALSO:**

  *setLagrangeTensor*, *PetscDualSpaceLagrangeGetTensor*

  *Source code at petsc4py/PETSc/Space.pyx:896*

  - **Return type**

    *bool*

- **getLagrangeTrimmed()**

  Return the trimmed nature of the dual space.

  Not collective.

  **SEE ALSO:**

  *setLagrangeTrimmed*, *PetscDualSpaceLagrangeGetTrimmed*

  *Source code at petsc4py/PETSc/Space.pyx:928*

  - **Return type**

    *bool*

- **getNumComponents()**

  Return the number of components for this space.

  Not collective.

  **SEE ALSO:**

  *setNumComponents*, *PetscDualSpaceGetNumComponents*

  *Source code at petsc4py/PETSc/Space.pyx:712*

  - **Return type**

    *int*

- **getNumDof()**

  Return the number of degrees of freedom for each spatial dimension.

  Not collective.

  **SEE ALSO:**

  *PetscDualSpaceGetNumDof*

  *Source code at petsc4py/PETSc/Space.pyx:810*

  - **Return type**

    *ArrayInt*

- **getOrder()**

  Return the order of the dual space.

  Not collective.

  **SEE ALSO:**

  *setOrder*, *PetscDualSpaceGetOrder*

  *Source code at petsc4py/PETSc/Space.pyx:778*

  - **Return type**

    *int*

- **getType()**

  Return the type of the dual space object.

  Not collective.

  **SEE ALSO:**

  *setType*, *PetscDualSpaceGetType*

  *Source code at petsc4py/PETSc/Space.pyx:744*

  - **Return type**

    *str*

- **setDM(dm)**

  Set the *DM* representing the reference cell.

  Not collective.

  - **Parameters**

    **dm** (*DM*) -- The reference cell.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getDM*, *PetscDualSpaceSetDM*

  *Source code at petsc4py/PETSc/Space.pyx:679*

- **setLagrangeContinuity(continuous)**

  Indicate whether the element is continuous.

  Not collective.

  - **Parameters**

    **continuous** (*bool*) -- The flag for element continuity.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getLagrangeContinuity*, *PetscDualSpaceLagrangeSetContinuity*

  *Source code at petsc4py/PETSc/Space.pyx:878*

- **setLagrangeTensor(tensor)**

  Set the tensor nature of the dual space.

  Not collective.

  - **Parameters**

    **tensor** (*bool*) -- Whether the dual space has tensor layout (vs. simplicial).

  - **Return type**

    *None*

  **SEE ALSO:**

  *getLagrangeTensor*, *PetscDualSpaceLagrangeSetTensor*

  *Source code at petsc4py/PETSc/Space.pyx:910*

- **setLagrangeTrimmed(trimmed)**

  Set the trimmed nature of the dual space.

  Not collective.

  - **Parameters**

    **trimmed** (*bool*) -- Whether the dual space represents to dual basis of a trimmed polynomial space (e.g. Raviart-Thomas and higher order / other form degree variants).

  - **Return type**

    *None*

  **SEE ALSO:**

  *getLagrangeTrimmed*, *PetscDualSpaceLagrangeSetTrimmed*

  *Source code at petsc4py/PETSc/Space.pyx:942*

- **setNumComponents(nc)**

  Set the number of components for this space.

  Logically collective.

  - **Parameters**

    **nc** (*int*) -- The number of components

  - **Return type**

    *None*

  **SEE ALSO:**

  *getNumComponents*, *PetscDualSpaceSetNumComponents*

  *Source code at petsc4py/PETSc/Space.pyx:726*

- **setOrder(order)**

  Set the order of the dual space.

  Not collective.

  - **Parameters**

    **order** (*int*) -- The order.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getOrder*, *PetscDualSpaceSetOrder*

  *Source code at petsc4py/PETSc/Space.pyx:792*

- **setSimpleDimension(dim)**

  Set the number of functionals in the dual space basis.

  Logically collective.

  - **Parameters**

    **dim** (*int*) -- The basis dimension.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscDualSpaceSimpleSetDimension*

  *Source code at petsc4py/PETSc/Space.pyx:962*

- **setSimpleFunctional(func, functional)**

  Set the given basis element for this dual space.

  Not collective.

  - **Parameters**

    - •

      **func** (*int*) -- The basis index.

    - •

      **functional** (*Quad*) -- The basis functional.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscDualSpaceSimpleSetFunctional*

  *Source code at petsc4py/PETSc/Space.pyx:980*

- **setType(dualspace\_type)**

  Build a particular type of dual space.

  Collective.

  - **Parameters**

    **dualspace\_type** (*Type \| str*) -- The kind of space.

  - **Return type**

    Self

  **SEE ALSO:**

  *getType*, *PetscDualSpaceSetType*

  *Source code at petsc4py/PETSc/Space.pyx:758*

- **setUp()**

  Construct a basis for a *DualSpace*.

  Collective.

  **SEE ALSO:**

  *PetscDualSpaceSetUp*

  *Source code at petsc4py/PETSc/Space.pyx:582*

  - **Return type**

    *None*

- **view(viewer=None)**

  View a *DualSpace*.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* to display the *DualSpace*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscDualSpaceView*

  *Source code at petsc4py/PETSc/Space.pyx:617*

### petsc4py.PETSc.FE

- **class petsc4py.PETSc.FE**

  Bases: *Object*

  A PETSc object that manages a finite element space.

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The finite element types. |

### petsc4py.PETSc.FE.Type

- **class petsc4py.PETSc.FE.Type**

  Bases: *object*

  The finite element types.

  Attributes Summary

  | | |
  | --- | --- |
  | *BASIC* | Object **BASIC** of type *str* |
  | *COMPOSITE* | Object **COMPOSITE** of type *str* |
  | *OPENCL* | Object **OPENCL** of type *str* |

  Attributes Documentation

  - **BASIC: *str* = BASIC**

    Object **BASIC** of type *str*

  - **COMPOSITE: *str* = COMPOSITE**

    Object **COMPOSITE** of type *str*

  - **OPENCL: *str* = OPENCL**

    Object **OPENCL** of type *str*

Methods Summary

| | |
| --- | --- |
| *create*(\[comm\]) | Create an empty *FE* object. |
| *createDefault*(dim, nc, isSimplex\[, qorder, ...\]) | Create a *FE* for basic FEM computation. |
| *createLagrange*(dim, nc, isSimplex, k\[, ...\]) | Create a *FE* for the basic Lagrange space of degree k. |
| *destroy*() | Destroy the *FE* object. |
| *getBasisSpace*() | Return the *Space* used for the approximation of the *FE* solution. |
| *getDimension*() | Return the dimension of the finite element space on a cell. |
| *getDualSpace*() | Return the *DualSpace* used to define the inner product for the *FE*. |
| *getFaceQuadrature*() | Return the *Quad* used to calculate inner products on faces. |
| *getNumComponents*() | Return the number of components in the element. |
| *getNumDof*() | Return the number of DOFs. |
| *getQuadrature*() | Return the *Quad* used to calculate inner products. |
| *getSpatialDimension*() | Return the spatial dimension of the element. |
| *getTileSizes*() | Return the tile sizes for evaluation. |
| *setBasisSpace*(sp) | Set the *Space* used for the approximation of the solution. |
| *setDualSpace*(dspace) | Set the *DualSpace* used to define the inner product. |
| *setFaceQuadrature*(quad) | Set the *Quad* used to calculate inner products on faces. |
| *setFromOptions*() | Set parameters in a *FE* from the options database. |
| *setNumComponents*(comp) | Set the number of field components in the element. |
| *setQuadrature*(quad) | Set the *Quad* used to calculate inner products. |
| *setTileSizes*(blockSize, numBlocks, ...) | Set the tile sizes for evaluation. |
| *setType*(fe\_type) | Build a particular *FE*. |
| *setUp*() | Construct data structures for the *FE* after the *Type* has been set. |
| *view*(\[viewer\]) | View a *FE* object. |

Methods Documentation

- **create(comm=None)**

  Create an empty *FE* object.

  Collective.

  The type can then be set with *setType*.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *setType*, *PetscFECreate*

  *Source code at petsc4py/PETSc/FE.pyx:53*

- **createDefault(dim, nc, isSimplex, qorder=DETERMINE, prefix=None, comm=None)**

  Create a *FE* for basic FEM computation.

  Collective.

  - **Parameters**

    - •

      **dim** (*int*) -- The spatial dimension.

    - •

      **nc** (*int*) -- The number of components.

    - •

      **isSimplex** (*bool*) -- Flag for simplex reference cell, otherwise it's a tensor product.

    - •

      **qorder** (*int*) -- The quadrature order or *DETERMINE* to use *Space* polynomial degree.

    - •

      **prefix** (*str*) -- The options prefix, or *None*.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PetscFECreateDefault*

  *Source code at petsc4py/PETSc/FE.pyx:76*

- **createLagrange(dim, nc, isSimplex, k, qorder=DETERMINE, comm=None)**

  Create a *FE* for the basic Lagrange space of degree k.

  Collective.

  - **Parameters**

    - •

      **dim** (*int*) -- The spatial dimension.

    - •

      **nc** (*int*) -- The number of components.

    - •

      **isSimplex** (*bool*) -- Flag for simplex reference cell, otherwise it's a tensor product.

    - •

      **k** (*int*) -- The degree of the space.

    - •

      **qorder** (*int*) -- The quadrature order or *DETERMINE* to use *Space* polynomial degree.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PetscFECreateLagrange*

  *Source code at petsc4py/PETSc/FE.pyx:122*

- **destroy()**

  Destroy the *FE* object.

  Collective.

  **SEE ALSO:**

  *PetscFEDestroy*

  *Source code at petsc4py/PETSc/FE.pyx:40*

  - **Return type**

    *Self*

- **getBasisSpace()**

  Return the *Space* used for the approximation of the *FE* solution.

  Not collective.

  **SEE ALSO:**

  *setBasisSpace*, *PetscFEGetBasisSpace*

  *Source code at petsc4py/PETSc/FE.pyx:387*

  - **Return type**

    *Space*

- **getDimension()**

  Return the dimension of the finite element space on a cell.

  Not collective.

  **SEE ALSO:**

  *PetscFEGetDimension*

  *Source code at petsc4py/PETSc/FE.pyx:181*

  - **Return type**

    *int*

- **getDualSpace()**

  Return the *DualSpace* used to define the inner product for the *FE*.

  Not collective.

  **SEE ALSO:**

  *setDualSpace*, *DualSpace*, *PetscFEGetDualSpace*

  *Source code at petsc4py/PETSc/FE.pyx:443*

  - **Return type**

    *DualSpace*

- **getFaceQuadrature()**

  Return the *Quad* used to calculate inner products on faces.

  Not collective.

  **SEE ALSO:**

  *setFaceQuadrature*, *PetscFEGetFaceQuadrature*

  *Source code at petsc4py/PETSc/FE.pyx:316*

  - **Return type**

    *Quad*

- **getNumComponents()**

  Return the number of components in the element.

  Not collective.

  **SEE ALSO:**

  *setNumComponents*, *PetscFEGetNumComponents*

  *Source code at petsc4py/PETSc/FE.pyx:209*

  - **Return type**

    *int*

- **getNumDof()**

  Return the number of DOFs.

  Not collective.

  Return the number of DOFs (dual basis vectors) associated with mesh points on the reference cell of a given dimension.

  **SEE ALSO:**

  *PetscFEGetNumDof*

  *Source code at petsc4py/PETSc/FE.pyx:241*

  - **Return type**

    *ndarray*

- **getQuadrature()**

  Return the *Quad* used to calculate inner products.

  Not collective.

  **SEE ALSO:**

  *setQuadrature*, *PetscFEGetQuadrature*

  *Source code at petsc4py/PETSc/FE.pyx:166*

  - **Return type**

    *Quad*

- **getSpatialDimension()**

  Return the spatial dimension of the element.

  Not collective.

  **SEE ALSO:**

  *PetscFEGetSpatialDimension*

  *Source code at petsc4py/PETSc/FE.pyx:195*

  - **Return type**

    *int*

- **getTileSizes()**

  Return the tile sizes for evaluation.

  Not collective.

  - **Returns**

    - •

      **blockSize** (*int*) -- The number of elements in a block.

    - •

      **numBlocks** (*int*) -- The number of blocks in a batch.

    - •

      **batchSize** (*int*) -- The number of elements in a batch.

    - •

      **numBatches** (*int*) -- The number of batches in a chunk.

  - **Return type**

    *tuple*(*int*, *int*, *int*, *int*)

  **SEE ALSO:**

  *setTileSizes*, *PetscFEGetTileSizes*

  *Source code at petsc4py/PETSc/FE.pyx:260*

- **setBasisSpace(sp)**

  Set the *Space* used for the approximation of the solution.

  Not collective.

  - **Parameters**

    **sp** (*Space*) -- The *Space* object.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getBasisSpace*, *PetscFESetBasisSpace*

  *Source code at petsc4py/PETSc/FE.pyx:402*

- **setDualSpace(dspace)**

  Set the *DualSpace* used to define the inner product.

  Not collective.

  - **Parameters**

    **dspace** (*DualSpace*) -- The *DualSpace* object.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getDualSpace*, *DualSpace*, *PetscFESetDualSpace*

  *Source code at petsc4py/PETSc/FE.pyx:458*

- **setFaceQuadrature(quad)**

  Set the *Quad* used to calculate inner products on faces.

  Not collective.

  - **Parameters**

    **quad** (*Quad*) -- The *Quad* object.

  - **Return type**

    *Quad*

  **SEE ALSO:**

  *getFaceQuadrature*, *PetscFESetFaceQuadrature*

  *Source code at petsc4py/PETSc/FE.pyx:349*

- **setFromOptions()**

  Set parameters in a *FE* from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *PetscFESetFromOptions*

  *Source code at petsc4py/PETSc/FE.pyx:419*

  - **Return type**

    *None*

- **setNumComponents(comp)**

  Set the number of field components in the element.

  Not collective.

  - **Parameters**

    **comp** (*int*) -- The number of field components.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getNumComponents*, *PetscFESetNumComponents*

  *Source code at petsc4py/PETSc/FE.pyx:223*

- **setQuadrature(quad)**

  Set the *Quad* used to calculate inner products.

  Not collective.

  - **Parameters**

    **quad** (*Quad*) -- The *Quad* object.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *getQuadrature*, *PetscFESetQuadrature*

  *Source code at petsc4py/PETSc/FE.pyx:331*

- **setTileSizes(blockSize, numBlocks, batchSize, numBatches)**

  Set the tile sizes for evaluation.

  Not collective.

  - **Parameters**

    - •

      **blockSize** (*int*) -- The number of elements in a block.

    - •

      **numBlocks** (*int*) -- The number of blocks in a batch.

    - •

      **batchSize** (*int*) -- The number of elements in a batch.

    - •

      **numBatches** (*int*) -- The number of batches in a chunk.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getTileSizes*, *PetscFESetTileSizes*

  *Source code at petsc4py/PETSc/FE.pyx:286*

- **setType(fe\_type)**

  Build a particular *FE*.

  Collective.

  - **Parameters**

    **fe\_type** (*Type \| str*) -- The kind of FEM space.

  - **Return type**

    Self

  **SEE ALSO:**

  *PetscFESetType*

  *Source code at petsc4py/PETSc/FE.pyx:367*

- **setUp()**

  Construct data structures for the *FE* after the *Type* has been set.

  Collective.

  **SEE ALSO:**

  *PetscFESetUp*

  *Source code at petsc4py/PETSc/FE.pyx:431*

  - **Return type**

    *None*

- **view(viewer=None)**

  View a *FE* object.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* to display the graph.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscFEView*

  *Source code at petsc4py/PETSc/FE.pyx:21*

### petsc4py.PETSc.IS

- **class petsc4py.PETSc.IS**

  Bases: *Object*

  A collection of indices.

  IS objects are used to index into vectors and matrices and to set up vector scatters.

  **SEE ALSO:**

  *IS*

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The index set types. |

### petsc4py.PETSc.IS.Type

- **class petsc4py.PETSc.IS.Type**

  Bases: *object*

  The index set types.

  Attributes Summary

  | | |
  | --- | --- |
  | *BLOCK* | Object **BLOCK** of type *str* |
  | *GENERAL* | Object **GENERAL** of type *str* |
  | *STRIDE* | Object **STRIDE** of type *str* |

  Attributes Documentation

  - **BLOCK: *str* = BLOCK**

    Object **BLOCK** of type *str*

  - **GENERAL: *str* = GENERAL**

    Object **GENERAL** of type *str*

  - **STRIDE: *str* = STRIDE**

    Object **STRIDE** of type *str*

Methods Summary

| | |
| --- | --- |
| *allGather*() | Concatenate index sets stored across processors. |
| *buildTwoSided*(\[toindx\]) | Create an index set describing a global mapping. |
| *complement*(nmin, nmax) | Create a complement index set. |
| *copy*(\[result\]) | Copy the contents of the index set into another. |
| *create*(\[comm\]) | Create an IS. |
| *createBlock*(bsize, indices\[, comm\]) | Create a blocked index set. |
| *createGeneral*(indices\[, comm\]) | Create an IS with indices. |
| *createStride*(size\[, first, step, comm\]) | Create an index set consisting of evenly spaced values. |
| *destroy*() | Destroy the index set. |
| *difference*(iset) | Return the difference between two index sets. |
| *duplicate*() | Create a copy of the index set. |
| *embed*(iset, drop) | Embed **self** into **iset**. |
| *equal*(iset) | Return whether the index sets have the same set of indices or not. |
| *expand*(iset) | Return the union of two (possibly unsorted) index sets. |
| *getBlockIndices*() | Return the indices of an index set with type *IS.Type.BLOCK*. |
| *getBlockSize*() | Return the number of elements in a block. |
| *getIndices*() | Return the indices of the index set. |
| *getInfo*() | Return stride information for an index set with type *IS.Type.STRIDE*. |
| *getLocalSize*() | Return the process-local length of the index set. |
| *getSize*() | Return the global length of an index set. |
| *getSizes*() | Return the local and global sizes of the index set. |
| *getStride*() | Return size and stride information. |
| *getType*() | Return the index set type associated with the IS. |
| *invertPermutation*(\[nlocal\]) | Invert the index set. |
| *isIdentity*() | Return whether the index set has been declared as an identity. |
| *isPermutation*() | Return whether an index set has been declared to be a permutation. |
| *isSorted*() | Return whether the indices have been sorted. |
| *load*(viewer) | Load a stored index set. |
| *renumber*(\[mult\]) | Renumber the non-negative entries of an index set, starting from 0. |
| *setBlockIndices*(bsize, indices) | Set the indices for an index set with type *IS.Type.BLOCK*. |
| *setBlockSize*(bs) | Set the block size of the index set. |
| *setIdentity*() | Mark the index set as being an identity. |
| *setIndices*(indices) | Set the indices of an index set. |
| *setPermutation*() | Mark the index set as being a permutation. |
| *setStride*(size\[, first, step\]) | Set the stride information for an index set with type *IS.Type.STRIDE*. |
| *setType*(is\_type) | Set the type of the index set. |
| *sort*() | Sort the indices of an index set. |
| *sum*(iset) | Return the union of two (sorted) index sets. |
| *toGeneral*() | Convert the index set type to *IS.Type.GENERAL*. |
| *union*(iset) | Return the union of two (possibly unsorted) index sets. |
| *view*(\[viewer\]) | Display the index set. |

Attributes Summary

| | |
| --- | --- |
| *array* | View of the index set as an array of integers. |
| *block\_size* | The number of elements in a block. |
| *identity* | *True* if index set is an identity, *False* otherwise. |
| *indices* | The indices of the index set. |
| *local\_size* | The local size of the index set. |
| *permutation* | *True* if index set is a permutation, *False* otherwise. |
| *size* | The global size of the index set. |
| *sizes* | The local and global sizes of the index set. |
| *sorted* | *True* if index set is sorted, *False* otherwise. |

Methods Documentation

- **allGather()**

  Concatenate index sets stored across processors.

  Collective.

  The returned index set will be the same on every processor.

  **SEE ALSO:**

  *ISAllGather*

  *Source code at petsc4py/PETSc/IS.pyx:304*

  - **Return type**

    *IS*

- **buildTwoSided(toindx=None)**

  Create an index set describing a global mapping.

  Collective.

  This function generates an index set that contains new numbers from remote or local on the index set.

  - **Parameters**

    **toindx** (*IS \| None*) -- Index set describing which indices to send, default is to send natural numbering.

  - **Returns**

    New index set containing the new numbers from remote or local.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *ISBuildTwoSided*

  *Source code at petsc4py/PETSc/IS.pyx:333*

- **complement(nmin, nmax)**

  Create a complement index set.

  Collective.

  The complement set of indices is all indices that are not in the provided set (and within the provided bounds).

  - **Parameters**

    - •

      **nmin** (*int*) -- Minimum index that can be found in the local part of the complement index set.

    - •

      **nmax** (*int*) -- One greater than the maximum index that can be found in the local part of the complement index set.

  - **Return type**

    *IS*

  Notes

  For a parallel index set, this will generate the local part of the complement on each process.

  To generate the entire complement (on each process) of a parallel index set, first call *IS.allGather* and then call this method.

  **SEE ALSO:**

  *IS.allGather*, *ISComplement*

  *Source code at petsc4py/PETSc/IS.pyx:674*

- **copy(result=None)**

  Copy the contents of the index set into another.

  Collective.

  - **Parameters**

    **result** (*IS \| None*) -- The target index set. If *None* then *IS.duplicate* is called first.

  - **Returns**

    The copied index set. If **result** is not *None* then this is returned here.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *IS.duplicate*, *ISCopy*

  *Source code at petsc4py/PETSc/IS.pyx:253*

- **create(comm=None)**

  Create an IS.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *ISCreate*

  *Source code at petsc4py/PETSc/IS.pyx:88*

- **createBlock(bsize, indices, comm=None)**

  Create a blocked index set.

  Collective.

  - **Parameters**

    - •

      **bsize** (*int*) -- Block size.

    - •

      **indices** (*Sequence\[int\]*) -- Integer array of indices.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *ISCreateBlock*

  *Source code at petsc4py/PETSc/IS.pyx:171*

- **createGeneral(indices, comm=None)**

  Create an IS with indices.

  Collective.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Integer array.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *ISCreateGeneral*

  *Source code at petsc4py/PETSc/IS.pyx:142*

- **createStride(size, first=0, step=0, comm=None)**

  Create an index set consisting of evenly spaced values.

  Collective.

  - **Parameters**

    - •

      **size** (*int*) -- The length of the locally owned portion of the index set.

    - •

      **first** (*int*) -- The first element of the index set.

    - •

      **step** (*int*) -- The difference between adjacent indices.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *ISCreateStride*

  *Source code at petsc4py/PETSc/IS.pyx:204*

- **destroy()**

  Destroy the index set.

  Collective.

  **SEE ALSO:**

  *ISDestroy*

  *Source code at petsc4py/PETSc/IS.pyx:75*

  - **Return type**

    *Self*

- **difference(iset)**

  Return the difference between two index sets.

  Collective.

  - **Parameters**

    **iset** (*IS*) -- Index set to compute the difference with.

  - **Returns**

    Index set representing the difference between **self** and **iset**.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *ISDifference*

  *Source code at petsc4py/PETSc/IS.pyx:650*

- **duplicate()**

  Create a copy of the index set.

  Collective.

  **SEE ALSO:**

  *IS.copy*, *ISDuplicate*

  *Source code at petsc4py/PETSc/IS.pyx:239*

  - **Return type**

    *IS*

- **embed(iset, drop)**

  Embed **self** into **iset**.

  Not collective.

  The embedding is performed by finding the locations in **iset** that have the same indices as **self**.

  - **Parameters**

    - •

      **iset** (*IS*) -- The index set to embed into.

    - •

      **drop** (*bool*) -- Flag indicating whether to drop indices from **self** that are not in **iset**.

  - **Returns**

    The embedded index set.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *ISEmbed*

  *Source code at petsc4py/PETSc/IS.pyx:710*

- **equal(iset)**

  Return whether the index sets have the same set of indices or not.

  Collective.

  - **Parameters**

    **iset** (*IS*) -- The index set to compare indices with.

  - **Return type**

    *bool*

  **SEE ALSO:**

  *ISEqual*

  *Source code at petsc4py/PETSc/IS.pyx:550*

- **expand(iset)**

  Return the union of two (possibly unsorted) index sets.

  Collective.

  To compute the union, *expand* concatenates the two index sets and removes any duplicates.

  - **Parameters**

    **iset** (*IS*) -- Index set to compute the union with.

  - **Returns**

    The new, combined, index set.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *ISExpand*

  *Source code at petsc4py/PETSc/IS.pyx:588*

- **getBlockIndices()**

  Return the indices of an index set with type *IS.Type.BLOCK*.

  Not collective.

  **SEE ALSO:**

  *ISBlockGetIndices*

  *Source code at petsc4py/PETSc/IS.pyx:833*

  - **Return type**

    *ArrayInt*

- **getBlockSize()**

  Return the number of elements in a block.

  Not collective.

  **SEE ALSO:**

  *ISGetBlockSize*

  *Source code at petsc4py/PETSc/IS.pyx:437*

  - **Return type**

    *int*

- **getIndices()**

  Return the indices of the index set.

  Not collective.

  **SEE ALSO:**

  *ISGetIndices*

  *Source code at petsc4py/PETSc/IS.pyx:789*

  - **Return type**

    *ArrayInt*

- **getInfo()**

  Return stride information for an index set with type *IS.Type.STRIDE*.

  Not collective.

  - **Returns**

    - •

      **first** (*int*) -- First element of the index set.

    - •

      **step** (*int*) -- Difference between adjacent indices.

  - **Return type**

    *tuple*\[*int*, *int*\]

  **SEE ALSO:**

  *IS.getStride*, *ISStrideGetInfo*

  *Source code at petsc4py/PETSc/IS.pyx:903*

- **getLocalSize()**

  Return the process-local length of the index set.

  Not collective.

  **SEE ALSO:**

  *ISGetLocalSize*

  *Source code at petsc4py/PETSc/IS.pyx:401*

  - **Return type**

    *int*

- **getSize()**

  Return the global length of an index set.

  Not collective.

  **SEE ALSO:**

  *ISGetSize*

  *Source code at petsc4py/PETSc/IS.pyx:387*

  - **Return type**

    *int*

- **getSizes()**

  Return the local and global sizes of the index set.

  Not collective.

  - **Returns**

    - •

      **local\_size** (*int*) -- The local size.

    - •

      **global\_size** (*int*) -- The global size.

  - **Return type**

    *tuple*\[*int*, *int*\]

  **SEE ALSO:**

  *IS.getLocalSize*, *IS.getSize*

  *Source code at petsc4py/PETSc/IS.pyx:415*

- **getStride()**

  Return size and stride information.

  Not collective.

  - **Returns**

    - •

      **size** (*int*) -- Length of the locally owned portion of the index set.

    - •

      **first** (*int*) -- First element of the index set.

    - •

      **step** (*int*) -- Difference between adjacent indices.

  - **Return type**

    *tuple*\[*int*, *int*, *int*\]

  **SEE ALSO:**

  *ISGetLocalSize*, *ISStrideGetInfo*

  *Source code at petsc4py/PETSc/IS.pyx:879*

- **getType()**

  Return the index set type associated with the IS.

  Not collective.

  **SEE ALSO:**

  *ISGetType*

  *Source code at petsc4py/PETSc/IS.pyx:128*

  - **Return type**

    *str*

- **invertPermutation(nlocal=None)**

  Invert the index set.

  Collective.

  For this to be correct the index set must be a permutation.

  - **Parameters**

    **nlocal** (*int \| None*) -- The number of indices on this processor in the resulting index set, defaults to **PETSC\_DECIDE**.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *ISInvertPermutation*

  *Source code at petsc4py/PETSc/IS.pyx:363*

- **isIdentity()**

  Return whether the index set has been declared as an identity.

  Collective.

  **SEE ALSO:**

  *ISIdentity*

  *Source code at petsc4py/PETSc/IS.pyx:536*

  - **Return type**

    *bool*

- **isPermutation()**

  Return whether an index set has been declared to be a permutation.

  Logically collective.

  **SEE ALSO:**

  *ISPermutation*

  *Source code at petsc4py/PETSc/IS.pyx:509*

  - **Return type**

    *bool*

- **isSorted()**

  Return whether the indices have been sorted.

  Collective.

  **SEE ALSO:**

  *ISSorted*

  *Source code at petsc4py/PETSc/IS.pyx:482*

  - **Return type**

    *bool*

- **load(viewer)**

  Load a stored index set.

  Collective.

  - **Parameters**

    **viewer** (*Viewer*) -- Binary file viewer, either *Viewer.Type.BINARY* or *Viewer.Type.HDF5*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *ISLoad*

  *Source code at petsc4py/PETSc/IS.pyx:281*

- **renumber(mult=None)**

  Renumber the non-negative entries of an index set, starting from 0.

  Collective.

  - **Parameters**

    **mult** (*IS \| None*) -- The multiplicity of each entry in **self**, default implies a multiplicity of 1.

  - **Returns**

    - •

      *int* -- One past the largest entry of the new index set.

    - •

      *IS* -- The renumbered index set.

  - **Return type**

    *tuple*\[*int*, *IS*\]

  **SEE ALSO:**

  *ISRenumber*

  *Source code at petsc4py/PETSc/IS.pyx:741*

- **setBlockIndices(bsize, indices)**

  Set the indices for an index set with type *IS.Type.BLOCK*.

  Collective.

  - **Parameters**

    - •

      **bsize** (*int*) -- Number of elements in each block.

    - •

      **indices** (*Sequence\[int\]*) -- List of integers.

  - **Return type**

    *None*

  **SEE ALSO:**

  *ISBlockSetIndices*

  *Source code at petsc4py/PETSc/IS.pyx:810*

- **setBlockSize(bs)**

  Set the block size of the index set.

  Logically collective.

  - **Parameters**

    **bs** (*int*) -- Block size.

  - **Return type**

    *None*

  **SEE ALSO:**

  *ISSetBlockSize*

  *Source code at petsc4py/PETSc/IS.pyx:451*

- **setIdentity()**

  Mark the index set as being an identity.

  Logically collective.

  **SEE ALSO:**

  *ISSetIdentity*

  *Source code at petsc4py/PETSc/IS.pyx:523*

  - **Return type**

    *Self*

- **setIndices(indices)**

  Set the indices of an index set.

  Logically collective.

  The index set is assumed to be of type *IS.Type.GENERAL*.

  **SEE ALSO:**

  *ISGeneralSetIndices*

  *Source code at petsc4py/PETSc/IS.pyx:772*

  - **Parameters**

    **indices** (*Sequence\[int\]*)

  - **Return type**

    *None*

- **setPermutation()**

  Mark the index set as being a permutation.

  Logically collective.

  **SEE ALSO:**

  *ISSetPermutation*

  *Source code at petsc4py/PETSc/IS.pyx:496*

  - **Return type**

    *Self*

- **setStride(size, first=0, step=1)**

  Set the stride information for an index set with type *IS.Type.STRIDE*.

  Logically collective.

  - **Parameters**

    - •

      **size** (*int*) -- Length of the locally owned portion of the index set.

    - •

      **first** (*int*) -- First element of the index set.

    - •

      **step** (*int*) -- Difference between adjacent indices.

  - **Return type**

    *None*

  **SEE ALSO:**

  *ISStrideSetStride*

  *Source code at petsc4py/PETSc/IS.pyx:855*

- **setType(is\_type)**

  Set the type of the index set.

  Collective.

  - **Parameters**

    **is\_type** (*Type \| str*) -- The index set type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *ISSetType*

  *Source code at petsc4py/PETSc/IS.pyx:109*

- **sort()**

  Sort the indices of an index set.

  Collective.

  **SEE ALSO:**

  *ISSort*

  *Source code at petsc4py/PETSc/IS.pyx:469*

  - **Return type**

    *Self*

- **sum(iset)**

  Return the union of two (sorted) index sets.

  Collective.

  - **Parameters**

    **iset** (*IS*) -- The index set to compute the union with.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *ISSum*

  *Source code at petsc4py/PETSc/IS.pyx:569*

- **toGeneral()**

  Convert the index set type to *IS.Type.GENERAL*.

  Collective.

  **SEE ALSO:**

  *ISToGeneral*, *ISType*

  *Source code at petsc4py/PETSc/IS.pyx:320*

  - **Return type**

    *Self*

- **union(iset)**

  Return the union of two (possibly unsorted) index sets.

  Collective.

  This function will call either *ISSum* or *ISExpand* depending on whether or not the input sets are already sorted.

  Sequential only (as *ISSum* is sequential only).

  - **Parameters**

    **iset** (*IS*) -- Index set to compute the union with.

  - **Returns**

    The new, combined, index set.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *IS.expand*, *IS.sum*

  *Source code at petsc4py/PETSc/IS.pyx:615*

- **view(viewer=None)**

  Display the index set.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- Viewer used to display the IS.

  - **Return type**

    *None*

  **SEE ALSO:**

  *ISView*

  *Source code at petsc4py/PETSc/IS.pyx:56*

Attributes Documentation

- **array**

  View of the index set as an array of integers.

  Not collective.

  *Source code at petsc4py/PETSc/IS.pyx:1032*

- **block\_size**

  The number of elements in a block.

  Not collective.

  **SEE ALSO:**

  *IS.getBlockSize*

  *Source code at petsc4py/PETSc/IS.pyx:1006*

- **identity**

  *True* if index set is an identity, *False* otherwise.

  Collective.

  **SEE ALSO:**

  *IS.isIdentity*

  *Source code at petsc4py/PETSc/IS.pyx:939*

- **indices**

  The indices of the index set.

  Not collective.

  **SEE ALSO:**

  *IS.getIndices*

  *Source code at petsc4py/PETSc/IS.pyx:1019*

- **local\_size**

  The local size of the index set.

  Not collective.

  **SEE ALSO:**

  *IS.getLocalSize*

  *Source code at petsc4py/PETSc/IS.pyx:993*

- **permutation**

  *True* if index set is a permutation, *False* otherwise.

  Logically collective.

  **SEE ALSO:**

  *IS.isPermutation*

  *Source code at petsc4py/PETSc/IS.pyx:926*

- **size**

  The global size of the index set.

  Not collective.

  **SEE ALSO:**

  *IS.getSize*

  *Source code at petsc4py/PETSc/IS.pyx:980*

- **sizes**

  The local and global sizes of the index set.

  Not collective.

  **SEE ALSO:**

  *IS.getSizes*

  *Source code at petsc4py/PETSc/IS.pyx:967*

- **sorted**

  *True* if index set is sorted, *False* otherwise.

  Collective.

  **SEE ALSO:**

  *IS.isSorted*

  *Source code at petsc4py/PETSc/IS.pyx:952*

### petsc4py.PETSc.InsertMode

- **class petsc4py.PETSc.InsertMode**

  Bases: *object*

  Insertion mode.

  Most commonly used insertion modes are:

  - ***INSERT***

    Insert provided value/s discarding previous value/s.

  - ***ADD***

    Add provided value/s to current value/s.

  - ***MAX***

    Insert the maximum of provided value/s and current value/s.

  **SEE ALSO:**

  *InsertMode*

  Attributes Summary

  | | |
  | --- | --- |
  | *ADD* | Constant **ADD** of type *int* |
  | *ADD\_ALL* | Constant **ADD\_ALL** of type *int* |
  | *ADD\_ALL\_VALUES* | Constant **ADD\_ALL\_VALUES** of type *int* |
  | *ADD\_BC* | Constant **ADD\_BC** of type *int* |
  | *ADD\_BC\_VALUES* | Constant **ADD\_BC\_VALUES** of type *int* |
  | *ADD\_VALUES* | Constant **ADD\_VALUES** of type *int* |
  | *INSERT* | Constant **INSERT** of type *int* |
  | *INSERT\_ALL* | Constant **INSERT\_ALL** of type *int* |
  | *INSERT\_ALL\_VALUES* | Constant **INSERT\_ALL\_VALUES** of type *int* |
  | *INSERT\_BC* | Constant **INSERT\_BC** of type *int* |
  | *INSERT\_BC\_VALUES* | Constant **INSERT\_BC\_VALUES** of type *int* |
  | *INSERT\_VALUES* | Constant **INSERT\_VALUES** of type *int* |
  | *MAX* | Constant **MAX** of type *int* |
  | *MAX\_VALUES* | Constant **MAX\_VALUES** of type *int* |
  | *NOT\_SET\_VALUES* | Constant **NOT\_SET\_VALUES** of type *int* |

  Attributes Documentation

  - **ADD: *int* = ADD**

    Constant **ADD** of type *int*

  - **ADD\_ALL: *int* = ADD\_ALL**

    Constant **ADD\_ALL** of type *int*

  - **ADD\_ALL\_VALUES: *int* = ADD\_ALL\_VALUES**

    Constant **ADD\_ALL\_VALUES** of type *int*

  - **ADD\_BC: *int* = ADD\_BC**

    Constant **ADD\_BC** of type *int*

  - **ADD\_BC\_VALUES: *int* = ADD\_BC\_VALUES**

    Constant **ADD\_BC\_VALUES** of type *int*

  - **ADD\_VALUES: *int* = ADD\_VALUES**

    Constant **ADD\_VALUES** of type *int*

  - **INSERT: *int* = INSERT**

    Constant **INSERT** of type *int*

  - **INSERT\_ALL: *int* = INSERT\_ALL**

    Constant **INSERT\_ALL** of type *int*

  - **INSERT\_ALL\_VALUES: *int* = INSERT\_ALL\_VALUES**

    Constant **INSERT\_ALL\_VALUES** of type *int*

  - **INSERT\_BC: *int* = INSERT\_BC**

    Constant **INSERT\_BC** of type *int*

  - **INSERT\_BC\_VALUES: *int* = INSERT\_BC\_VALUES**

    Constant **INSERT\_BC\_VALUES** of type *int*

  - **INSERT\_VALUES: *int* = INSERT\_VALUES**

    Constant **INSERT\_VALUES** of type *int*

  - **MAX: *int* = MAX**

    Constant **MAX** of type *int*

  - **MAX\_VALUES: *int* = MAX\_VALUES**

    Constant **MAX\_VALUES** of type *int*

  - **NOT\_SET\_VALUES: *int* = NOT\_SET\_VALUES**

    Constant **NOT\_SET\_VALUES** of type *int*

### petsc4py.PETSc.KSP

- **class petsc4py.PETSc.KSP**

  Bases: *Object*

  Abstract PETSc object that manages all Krylov methods.

  This is the object that manages the linear solves in PETSc (even those such as direct solvers that do no use Krylov accelerators).

  Notes

  When a direct solver is used, but no Krylov solver is used, the KSP object is still used but with a *Type.PREONLY*, meaning that only application of the preconditioner is used as the linear solver.

  **SEE ALSO:**

  *create*, *setType*, *SNES*, *TS*, *PC*, *Type.CG*, *Type.GMRES*, *KSP*

  Enumerations

  | | |
  | --- | --- |
  | *ConvergedReason* | KSP Converged Reason. |
  | *HPDDMType* | The *HPDDM* Krylov solver type. |
  | *NormType* | KSP norm type. |
  | *Type* | KSP Type. |

### petsc4py.PETSc.KSP.ConvergedReason

- **class petsc4py.PETSc.KSP.ConvergedReason**

  Bases: *object*

  KSP Converged Reason.

  - ***CONVERGED\_ITERATING***

    Still iterating

  - ***ITERATING***

    Still iterating

  - ***CONVERGED\_RTOL\_NORMAL***

    Undocumented.

  - ***CONVERGED\_ATOL\_NORMAL***

    Undocumented.

  - ***CONVERGED\_RTOL***

    ∥r∥ \<= rtolnorm(b) or rtolnorm(b - Ax₀)

  - ***CONVERGED\_ATOL***

    ∥r∥ \<= atol

  - ***CONVERGED\_ITS***

    Used by the *Type.PREONLY* solver after the single iteration of the preconditioner is applied. Also used when the *KSPConvergedSkip* convergence test routine is set in KSP.

  - ***CONVERGED\_NEG\_CURVE***

    Undocumented.

  - ***CONVERGED\_STEP\_LENGTH***

    Undocumented.

  - ***CONVERGED\_HAPPY\_BREAKDOWN***

    Undocumented.

  - ***DIVERGED\_NULL***

    Undocumented.

  - ***DIVERGED\_MAX\_IT***

    Ran out of iterations before any convergence criteria was reached.

  - ***DIVERGED\_DTOL***

    norm(r) \>= dtol\*norm(b)

  - ***DIVERGED\_BREAKDOWN***

    A breakdown in the Krylov method was detected so the method could not continue to enlarge the Krylov space. Could be due to a singular matrix or preconditioner. In KSPHPDDM, this is also returned when some search directions within a block are colinear.

  - ***DIVERGED\_BREAKDOWN\_BICG***

    A breakdown in the KSPBICG method was detected so the method could not continue to enlarge the Krylov space.

  - ***DIVERGED\_NONSYMMETRIC***

    It appears the operator or preconditioner is not symmetric and this Krylov method (*Type.CG*, *Type.MINRES*, *Type.CR*) requires symmetry.

  - ***DIVERGED\_INDEFINITE\_PC***

    It appears the preconditioner is indefinite (has both positive and negative eigenvalues) and this Krylov method (*Type.CG*) requires it to be positive definite.

  - ***DIVERGED\_NANORINF***

    Undocumented.

  - ***DIVERGED\_INDEFINITE\_MAT***

    Undocumented.

  - ***DIVERGED\_PCSETUP\_FAILED***

    It was not possible to build or use the requested preconditioner. This is usually due to a zero pivot in a factorization. It can also result from a failure in a subpreconditioner inside a nested preconditioner such as *PC.Type.FIELDSPLIT*.

  **SEE ALSO:**

  *None*

  Attributes Summary

  | | |
  | --- | --- |
  | *CONVERGED\_ATOL* | Constant **CONVERGED\_ATOL** of type *int* |
  | *CONVERGED\_ATOL\_NORMAL* | Constant **CONVERGED\_ATOL\_NORMAL** of type *int* |
  | *CONVERGED\_HAPPY\_BREAKDOWN* | Constant **CONVERGED\_HAPPY\_BREAKDOWN** of type *int* |
  | *CONVERGED\_ITERATING* | Constant **CONVERGED\_ITERATING** of type *int* |
  | *CONVERGED\_ITS* | Constant **CONVERGED\_ITS** of type *int* |
  | *CONVERGED\_NEG\_CURVE* | Constant **CONVERGED\_NEG\_CURVE** of type *int* |
  | *CONVERGED\_RTOL* | Constant **CONVERGED\_RTOL** of type *int* |
  | *CONVERGED\_RTOL\_NORMAL* | Constant **CONVERGED\_RTOL\_NORMAL** of type *int* |
  | *CONVERGED\_STEP\_LENGTH* | Constant **CONVERGED\_STEP\_LENGTH** of type *int* |
  | *DIVERGED\_BREAKDOWN* | Constant **DIVERGED\_BREAKDOWN** of type *int* |
  | *DIVERGED\_BREAKDOWN\_BICG* | Constant **DIVERGED\_BREAKDOWN\_BICG** of type *int* |
  | *DIVERGED\_DTOL* | Constant **DIVERGED\_DTOL** of type *int* |
  | *DIVERGED\_INDEFINITE\_MAT* | Constant **DIVERGED\_INDEFINITE\_MAT** of type *int* |
  | *DIVERGED\_INDEFINITE\_PC* | Constant **DIVERGED\_INDEFINITE\_PC** of type *int* |
  | *DIVERGED\_MAX\_IT* | Constant **DIVERGED\_MAX\_IT** of type *int* |
  | *DIVERGED\_NANORINF* | Constant **DIVERGED\_NANORINF** of type *int* |
  | *DIVERGED\_NONSYMMETRIC* | Constant **DIVERGED\_NONSYMMETRIC** of type *int* |
  | *DIVERGED\_NULL* | Constant **DIVERGED\_NULL** of type *int* |
  | *DIVERGED\_PCSETUP\_FAILED* | Constant **DIVERGED\_PCSETUP\_FAILED** of type *int* |
  | *ITERATING* | Constant **ITERATING** of type *int* |

  Attributes Documentation

  - **CONVERGED\_ATOL: *int* = CONVERGED\_ATOL**

    Constant **CONVERGED\_ATOL** of type *int*

  - **CONVERGED\_ATOL\_NORMAL: *int* = CONVERGED\_ATOL\_NORMAL**

    Constant **CONVERGED\_ATOL\_NORMAL** of type *int*

  - **CONVERGED\_HAPPY\_BREAKDOWN: *int* = CONVERGED\_HAPPY\_BREAKDOWN**

    Constant **CONVERGED\_HAPPY\_BREAKDOWN** of type *int*

  - **CONVERGED\_ITERATING: *int* = CONVERGED\_ITERATING**

    Constant **CONVERGED\_ITERATING** of type *int*

  - **CONVERGED\_ITS: *int* = CONVERGED\_ITS**

    Constant **CONVERGED\_ITS** of type *int*

  - **CONVERGED\_NEG\_CURVE: *int* = CONVERGED\_NEG\_CURVE**

    Constant **CONVERGED\_NEG\_CURVE** of type *int*

  - **CONVERGED\_RTOL: *int* = CONVERGED\_RTOL**

    Constant **CONVERGED\_RTOL** of type *int*

  - **CONVERGED\_RTOL\_NORMAL: *int* = CONVERGED\_RTOL\_NORMAL**

    Constant **CONVERGED\_RTOL\_NORMAL** of type *int*

  - **CONVERGED\_STEP\_LENGTH: *int* = CONVERGED\_STEP\_LENGTH**

    Constant **CONVERGED\_STEP\_LENGTH** of type *int*

  - **DIVERGED\_BREAKDOWN: *int* = DIVERGED\_BREAKDOWN**

    Constant **DIVERGED\_BREAKDOWN** of type *int*

  - **DIVERGED\_BREAKDOWN\_BICG: *int* = DIVERGED\_BREAKDOWN\_BICG**

    Constant **DIVERGED\_BREAKDOWN\_BICG** of type *int*

  - **DIVERGED\_DTOL: *int* = DIVERGED\_DTOL**

    Constant **DIVERGED\_DTOL** of type *int*

  - **DIVERGED\_INDEFINITE\_MAT: *int* = DIVERGED\_INDEFINITE\_MAT**

    Constant **DIVERGED\_INDEFINITE\_MAT** of type *int*

  - **DIVERGED\_INDEFINITE\_PC: *int* = DIVERGED\_INDEFINITE\_PC**

    Constant **DIVERGED\_INDEFINITE\_PC** of type *int*

  - **DIVERGED\_MAX\_IT: *int* = DIVERGED\_MAX\_IT**

    Constant **DIVERGED\_MAX\_IT** of type *int*

  - **DIVERGED\_NANORINF: *int* = DIVERGED\_NANORINF**

    Constant **DIVERGED\_NANORINF** of type *int*

  - **DIVERGED\_NONSYMMETRIC: *int* = DIVERGED\_NONSYMMETRIC**

    Constant **DIVERGED\_NONSYMMETRIC** of type *int*

  - **DIVERGED\_NULL: *int* = DIVERGED\_NULL**

    Constant **DIVERGED\_NULL** of type *int*

  - **DIVERGED\_PCSETUP\_FAILED: *int* = DIVERGED\_PCSETUP\_FAILED**

    Constant **DIVERGED\_PCSETUP\_FAILED** of type *int*

  - **ITERATING: *int* = ITERATING**

    Constant **ITERATING** of type *int*

### petsc4py.PETSc.KSP.HPDDMType

- **class petsc4py.PETSc.KSP.HPDDMType**

  Bases: *object*

  The *HPDDM* Krylov solver type.

  Attributes Summary

  | | |
  | --- | --- |
  | *BCG* | Constant **BCG** of type *int* |
  | *BFBCG* | Constant **BFBCG** of type *int* |
  | *BGCRODR* | Constant **BGCRODR** of type *int* |
  | *BGMRES* | Constant **BGMRES** of type *int* |
  | *CG* | Constant **CG** of type *int* |
  | *GCRODR* | Constant **GCRODR** of type *int* |
  | *GMRES* | Constant **GMRES** of type *int* |
  | *PREONLY* | Constant **PREONLY** of type *int* |

  Attributes Documentation

  - **BCG: *int* = BCG**

    Constant **BCG** of type *int*

  - **BFBCG: *int* = BFBCG**

    Constant **BFBCG** of type *int*

  - **BGCRODR: *int* = BGCRODR**

    Constant **BGCRODR** of type *int*

  - **BGMRES: *int* = BGMRES**

    Constant **BGMRES** of type *int*

  - **CG: *int* = CG**

    Constant **CG** of type *int*

  - **GCRODR: *int* = GCRODR**

    Constant **GCRODR** of type *int*

  - **GMRES: *int* = GMRES**

    Constant **GMRES** of type *int*

  - **PREONLY: *int* = PREONLY**

    Constant **PREONLY** of type *int*

### petsc4py.PETSc.KSP.NormType

- **class petsc4py.PETSc.KSP.NormType**

  Bases: *object*

  KSP norm type.

  The available norm types are:

  - ***NONE***

    Skips computing the norm, this should generally only be used if you are using the Krylov method as a smoother with a fixed small number of iterations. Implicitly sets *KSPConvergedSkip* as KSP convergence test. Note that certain algorithms such as *Type.GMRES* ALWAYS require the norm calculation, for these methods the norms are still computed, they are just not used in the convergence test.

  - ***PRECONDITIONED***

    The default for left preconditioned solves, uses the l₂ norm of the preconditioned residual P⁻¹(b - Ax).

  - ***UNPRECONDITIONED***

    Uses the l₂ norm of the true b - Ax residual.

  - ***NATURAL***

    Supported by *Type.CG*, *Type.CR*, *Type.CGNE*, *Type.CGS*.

  Attributes Summary

  | | |
  | --- | --- |
  | *DEFAULT* | Constant **DEFAULT** of type *int* |
  | *NATURAL* | Constant **NATURAL** of type *int* |
  | *NO* | Constant **NO** of type *int* |
  | *NONE* | Constant **NONE** of type *int* |
  | *NORM\_DEFAULT* | Constant **NORM\_DEFAULT** of type *int* |
  | *NORM\_NATURAL* | Constant **NORM\_NATURAL** of type *int* |
  | *NORM\_NONE* | Constant **NORM\_NONE** of type *int* |
  | *NORM\_PRECONDITIONED* | Constant **NORM\_PRECONDITIONED** of type *int* |
  | *NORM\_UNPRECONDITIONED* | Constant **NORM\_UNPRECONDITIONED** of type *int* |
  | *PRECONDITIONED* | Constant **PRECONDITIONED** of type *int* |
  | *UNPRECONDITIONED* | Constant **UNPRECONDITIONED** of type *int* |

  Attributes Documentation

  - **DEFAULT: *int* = DEFAULT**

    Constant **DEFAULT** of type *int*

  - **NATURAL: *int* = NATURAL**

    Constant **NATURAL** of type *int*

  - **NO: *int* = NO**

    Constant **NO** of type *int*

  - **NONE: *int* = NONE**

    Constant **NONE** of type *int*

  - **NORM\_DEFAULT: *int* = NORM\_DEFAULT**

    Constant **NORM\_DEFAULT** of type *int*

  - **NORM\_NATURAL: *int* = NORM\_NATURAL**

    Constant **NORM\_NATURAL** of type *int*

  - **NORM\_NONE: *int* = NORM\_NONE**

    Constant **NORM\_NONE** of type *int*

  - **NORM\_PRECONDITIONED: *int* = NORM\_PRECONDITIONED**

    Constant **NORM\_PRECONDITIONED** of type *int*

  - **NORM\_UNPRECONDITIONED: *int* = NORM\_UNPRECONDITIONED**

    Constant **NORM\_UNPRECONDITIONED** of type *int*

  - **PRECONDITIONED: *int* = PRECONDITIONED**

    Constant **PRECONDITIONED** of type *int*

  - **UNPRECONDITIONED: *int* = UNPRECONDITIONED**

    Constant **UNPRECONDITIONED** of type *int*

### petsc4py.PETSc.KSP.Type

- **class petsc4py.PETSc.KSP.Type**

  Bases: *object*

  KSP Type.

  The available types are:

  - ***RICHARDSON***

    The preconditioned Richardson iterative method *KSPRICHARDSON*.

  - ***CHEBYSHEV***

    The preconditioned Chebyshev iterative method. *KSPCHEBYSHEV*.

  - ***CG***

    The Preconditioned Conjugate Gradient (PCG) iterative method. *KSPCG*

  - ***GROPPCG***

    A pipelined conjugate gradient method (Gropp). *KSPGROPPCG*

  - ***PIPECG***

    A pipelined conjugate gradient method. *KSPPIPECG*

  - ***PIPECGRR***

    Pipelined Conjugate Gradients with Residual Replacement. *KSPPIPECGRR*

  - ***PIPELCG***

    Deep pipelined (length l) Conjugate Gradient method. *KSPPIPELCG*

  - ***PIPEPRCG***

    Pipelined predict-and-recompute conjugate gradient method. *KSPPIPEPRCG*

  - ***PIPECG2***

    Pipelined conjugate gradient method with a single non-blocking reduction per two iterations. *KSPPIPECG2*

  - ***CGNE***

    Applies the preconditioned conjugate gradient method to the normal equations without explicitly forming AᵀA. *KSPCGNE*

  - ***NASH***

    Conjugate gradient method subject to a constraint on the solution norm. *KSPNASH*

  - ***STCG***

    Conjugate gradient method subject to a constraint on the solution norm. *KSPSTCG*

  - ***GLTR***

    Conjugate gradient method subject to a constraint on the solution norm. *KSPGLTR*

  - ***FCG***

    Flexible Conjugate Gradient method (FCG). Unlike most KSP methods this allows the preconditioner to be nonlinear. *KSPFCG*

  - ***PIPEFCG***

    Pipelined, Flexible Conjugate Gradient method. *KSPPIPEFCG*

  - ***GMRES***

    Generalized Minimal Residual method with restart. *KSPGMRES*

  - ***PIPEFGMRES***

    Pipelined (1-stage) Flexible Generalized Minimal Residual method. *KSPPIPEFGMRES*

  - ***FGMRES***

    Implements the Flexible Generalized Minimal Residual method. *KSPFGMRES*

  - ***LGMRES***

    Augments the standard Generalized Minimal Residual method approximation space with approximations to the error from previous restart cycles. *KSPLGMRES*

  - ***DGMRES***

    Deflated Generalized Minimal Residual method. In this implementation, the adaptive strategy allows to switch to the deflated GMRES when the stagnation occurs. *KSPDGMRES*

  - ***PGMRES***

    Pipelined Generalized Minimal Residual method. *KSPPGMRES*

  - ***TCQMR***

    A variant of Quasi Minimal Residual (QMR). *KSPTCQMR*

  - ***BCGS***

    Stabilized version of Biconjugate Gradient (BiCGStab) method. *KSPBCGS*

  - ***IBCGS***

    Improved Stabilized version of BiConjugate Gradient (IBiCGStab) method in an alternative form to have only a single global reduction operation instead of the usual 3 (or 4). *KSPIBCGS*

  - ***QMRCGS***

    Quasi- Minimal Residual variant of the Bi-CGStab algorithm (QMRCGStab) method. *KSPQMRCGS*

  - ***FBCGS***

    Flexible Stabilized version of BiConjugate Gradient (BiCGStab) method. *KSPFBCGS*

  - ***FBCGSR***

    A mathematically equivalent variant of flexible stabilized BiConjugate Gradient (BiCGStab). *KSPFBCGSR*

  - ***BCGSL***

    Variant of the L-step stabilized BiConjugate Gradient (BiCGStab(L)) algorithm. Uses "L-step" Minimal Residual (MR) polynomials. The variation concerns cases when some parameters are negative due to round-off. *KSPBCGSL*

  - ***PIPEBCGS***

    Pipelined stabilized BiConjugate Gradient (BiCGStab) method. *KSPPIPEBCGS*

  - ***CGS***

    Conjugate Gradient Squared method. *KSPCGS*

  - ***TFQMR***

    A Transpose Tree Quasi- Minimal Residual (QMR). *KSPCR*

  - ***CR***

    (Preconditioned) Conjugate Residuals (CR) method. *KSPCR*

  - ***PIPECR***

    Pipelined Conjugate Residual (CR) method. *KSPPIPECR*

  - ***LSQR***

    Least squares solver. *KSPLSQR*

  - ***PREONLY***

    Applies ONLY the preconditioner exactly once. This may be used in inner iterations, where it is desired to allow multiple iterations as well as the "0-iteration" case. It is commonly used with the direct solver preconditioners like PCLU and PCCHOLESKY. There is an alias of KSPNONE. *KSPPREONLY*

  - ***NONE***

    No solver **KSPNONE**

  - ***QCG***

    Conjugate Gradient (CG) method subject to a constraint on the solution norm. *KSPQCG*

  - ***BICG***

    Implements the Biconjugate gradient method (BiCG). Similar to running the conjugate gradient on the normal equations. *KSPBICG*

  - ***MINRES***

    Minimum Residual (MINRES) method. *KSPMINRES*

  - ***SYMMLQ***

    Symmetric LQ method (SymmLQ). Uses LQ decomposition (lower trapezoidal). *KSPSYMMLQ*

  - ***LCD***

    Left Conjugate Direction (LCD) method. *KSPLCD*

  - ***PYTHON***

    Python shell solver. Call Python function to implement solver. **KSPPYTHON**

  - ***GCR***

    Preconditioned flexible Generalized Conjugate Residual (GCR) method. *KSPGCR*

  - ***PIPEGCR***

    Pipelined Generalized Conjugate Residual method. *KSPPIPEGCR*

  - ***TSIRM***

    Two-Stage Iteration with least-squares Residual Minimization method. *KSPTSIRM*

  - ***CGLS***

    Conjugate Gradient method for Least-Squares problems. Supports non-square (rectangular) matrices. *KSPCGLS*

  - ***FETIDP***

    Dual-Primal (DP) Finite Element Tearing and Interconnect (FETI) method. *KSPFETIDP*

  - ***HPDDM***

    Interface with the HPDDM library. This KSP may be used to further select methods that are currently not implemented natively in PETSc, e.g., GCRODR, a recycled Krylov method which is similar to KSPLGMRES. *KSPHPDDM*

  **SEE ALSO:**

  *Working with PETSc options*, *KSPType*

  Attributes Summary

  | | |
  | --- | --- |
  | *BCGS* | Object **BCGS** of type *str* |
  | *BCGSL* | Object **BCGSL** of type *str* |
  | *BICG* | Object **BICG** of type *str* |
  | *CG* | Object **CG** of type *str* |
  | *CGLS* | Object **CGLS** of type *str* |
  | *CGNE* | Object **CGNE** of type *str* |
  | *CGS* | Object **CGS** of type *str* |
  | *CHEBYSHEV* | Object **CHEBYSHEV** of type *str* |
  | *CR* | Object **CR** of type *str* |
  | *DGMRES* | Object **DGMRES** of type *str* |
  | *FBCGS* | Object **FBCGS** of type *str* |
  | *FBCGSR* | Object **FBCGSR** of type *str* |
  | *FCG* | Object **FCG** of type *str* |
  | *FETIDP* | Object **FETIDP** of type *str* |
  | *FGMRES* | Object **FGMRES** of type *str* |
  | *GCR* | Object **GCR** of type *str* |
  | *GLTR* | Object **GLTR** of type *str* |
  | *GMRES* | Object **GMRES** of type *str* |
  | *GROPPCG* | Object **GROPPCG** of type *str* |
  | *HPDDM* | Object **HPDDM** of type *str* |
  | *IBCGS* | Object **IBCGS** of type *str* |
  | *LCD* | Object **LCD** of type *str* |
  | *LGMRES* | Object **LGMRES** of type *str* |
  | *LSQR* | Object **LSQR** of type *str* |
  | *MINRES* | Object **MINRES** of type *str* |
  | *NASH* | Object **NASH** of type *str* |
  | *NONE* | Object **NONE** of type *str* |
  | *PGMRES* | Object **PGMRES** of type *str* |
  | *PIPEBCGS* | Object **PIPEBCGS** of type *str* |
  | *PIPECG* | Object **PIPECG** of type *str* |
  | *PIPECG2* | Object **PIPECG2** of type *str* |
  | *PIPECGRR* | Object **PIPECGRR** of type *str* |
  | *PIPECR* | Object **PIPECR** of type *str* |
  | *PIPEFCG* | Object **PIPEFCG** of type *str* |
  | *PIPEFGMRES* | Object **PIPEFGMRES** of type *str* |
  | *PIPEGCR* | Object **PIPEGCR** of type *str* |
  | *PIPELCG* | Object **PIPELCG** of type *str* |
  | *PIPEPRCG* | Object **PIPEPRCG** of type *str* |
  | *PREONLY* | Object **PREONLY** of type *str* |
  | *PYTHON* | Object **PYTHON** of type *str* |
  | *QCG* | Object **QCG** of type *str* |
  | *QMRCGS* | Object **QMRCGS** of type *str* |
  | *RICHARDSON* | Object **RICHARDSON** of type *str* |
  | *STCG* | Object **STCG** of type *str* |
  | *SYMMLQ* | Object **SYMMLQ** of type *str* |
  | *TCQMR* | Object **TCQMR** of type *str* |
  | *TFQMR* | Object **TFQMR** of type *str* |
  | *TSIRM* | Object **TSIRM** of type *str* |

  Attributes Documentation

  - **BCGS: *str* = BCGS**

    Object **BCGS** of type *str*

  - **BCGSL: *str* = BCGSL**

    Object **BCGSL** of type *str*

  - **BICG: *str* = BICG**

    Object **BICG** of type *str*

  - **CG: *str* = CG**

    Object **CG** of type *str*

  - **CGLS: *str* = CGLS**

    Object **CGLS** of type *str*

  - **CGNE: *str* = CGNE**

    Object **CGNE** of type *str*

  - **CGS: *str* = CGS**

    Object **CGS** of type *str*

  - **CHEBYSHEV: *str* = CHEBYSHEV**

    Object **CHEBYSHEV** of type *str*

  - **CR: *str* = CR**

    Object **CR** of type *str*

  - **DGMRES: *str* = DGMRES**

    Object **DGMRES** of type *str*

  - **FBCGS: *str* = FBCGS**

    Object **FBCGS** of type *str*

  - **FBCGSR: *str* = FBCGSR**

    Object **FBCGSR** of type *str*

  - **FCG: *str* = FCG**

    Object **FCG** of type *str*

  - **FETIDP: *str* = FETIDP**

    Object **FETIDP** of type *str*

  - **FGMRES: *str* = FGMRES**

    Object **FGMRES** of type *str*

  - **GCR: *str* = GCR**

    Object **GCR** of type *str*

  - **GLTR: *str* = GLTR**

    Object **GLTR** of type *str*

  - **GMRES: *str* = GMRES**

    Object **GMRES** of type *str*

  - **GROPPCG: *str* = GROPPCG**

    Object **GROPPCG** of type *str*

  - **HPDDM: *str* = HPDDM**

    Object **HPDDM** of type *str*

  - **IBCGS: *str* = IBCGS**

    Object **IBCGS** of type *str*

  - **LCD: *str* = LCD**

    Object **LCD** of type *str*

  - **LGMRES: *str* = LGMRES**

    Object **LGMRES** of type *str*

  - **LSQR: *str* = LSQR**

    Object **LSQR** of type *str*

  - **MINRES: *str* = MINRES**

    Object **MINRES** of type *str*

  - **NASH: *str* = NASH**

    Object **NASH** of type *str*

  - **NONE: *str* = NONE**

    Object **NONE** of type *str*

  - **PGMRES: *str* = PGMRES**

    Object **PGMRES** of type *str*

  - **PIPEBCGS: *str* = PIPEBCGS**

    Object **PIPEBCGS** of type *str*

  - **PIPECG: *str* = PIPECG**

    Object **PIPECG** of type *str*

  - **PIPECG2: *str* = PIPECG2**

    Object **PIPECG2** of type *str*

  - **PIPECGRR: *str* = PIPECGRR**

    Object **PIPECGRR** of type *str*

  - **PIPECR: *str* = PIPECR**

    Object **PIPECR** of type *str*

  - **PIPEFCG: *str* = PIPEFCG**

    Object **PIPEFCG** of type *str*

  - **PIPEFGMRES: *str* = PIPEFGMRES**

    Object **PIPEFGMRES** of type *str*

  - **PIPEGCR: *str* = PIPEGCR**

    Object **PIPEGCR** of type *str*

  - **PIPELCG: *str* = PIPELCG**

    Object **PIPELCG** of type *str*

  - **PIPEPRCG: *str* = PIPEPRCG**

    Object **PIPEPRCG** of type *str*

  - **PREONLY: *str* = PREONLY**

    Object **PREONLY** of type *str*

  - **PYTHON: *str* = PYTHON**

    Object **PYTHON** of type *str*

  - **QCG: *str* = QCG**

    Object **QCG** of type *str*

  - **QMRCGS: *str* = QMRCGS**

    Object **QMRCGS** of type *str*

  - **RICHARDSON: *str* = RICHARDSON**

    Object **RICHARDSON** of type *str*

  - **STCG: *str* = STCG**

    Object **STCG** of type *str*

  - **SYMMLQ: *str* = SYMMLQ**

    Object **SYMMLQ** of type *str*

  - **TCQMR: *str* = TCQMR**

    Object **TCQMR** of type *str*

  - **TFQMR: *str* = TFQMR**

    Object **TFQMR** of type *str*

  - **TSIRM: *str* = TSIRM**

    Object **TSIRM** of type *str*

Methods Summary

| | |
| --- | --- |
| *addConvergenceTest*(converged\[, args, kargs, ...\]) | Add the function to be used to determine convergence. |
| *appendOptionsPrefix*(prefix) | Append to prefix used for all *KSP* options in the database. |
| *buildResidual*(\[r\]) | Return the residual of the linear system. |
| *buildSolution*(\[x\]) | Return the solution vector. |
| *callConvergenceTest*(its, rnorm) | Call the convergence test callback. |
| *computeEigenvalues*() | Compute the extreme eigenvalues for the preconditioned operator. |
| *computeExtremeSingularValues*() | Compute the extreme singular values for the preconditioned operator. |
| *create*(\[comm\]) | Create the KSP context. |
| *createPython*(\[context, comm\]) | Create a linear solver of Python type. |
| *destroy*() | Destroy KSP context. |
| *getAppCtx*() | Return the user-defined context for the linear solver. |
| *getCGObjectiveValue*() | Return the CG objective function value. |
| *getComputeEigenvalues*() | Return flag indicating whether eigenvalues will be calculated. |
| *getComputeSingularValues*() | Return flag indicating whether singular values will be calculated. |
| *getConvergedReason*() | Use *reason* property. |
| *getConvergenceHistory*() | Return array containing the residual history. |
| *getConvergenceTest*() | Return the function to be used to determine convergence. |
| *getDM*() | Return the *DM* that may be used by some preconditioners. |
| *getErrorIfNotConverged*() | Return the flag indicating the solver will error if divergent. |
| *getHPDDMType*() | Return the Krylov solver type. |
| *getInitialGuessKnoll*() | Determine whether the KSP solver is using the Knoll trick. |
| *getInitialGuessNonzero*() | Determine whether the KSP solver uses a zero initial guess. |
| *getIterationNumber*() | Use *its* property. |
| *getMonitor*() | Return function used to monitor the residual. |
| *getNormType*() | Return the norm that is used for convergence testing. |
| *getOperators*() | Return the matrix associated with the linear system. |
| *getOptionsPrefix*() | Return the prefix used for all *KSP* options in the database. |
| *getPC*() | Return the preconditioner. |
| *getPCSide*() | Return the preconditioning side. |
| *getPythonContext*() | Return the instance of the class implementing Python methods. |
| *getPythonType*() | Return the fully qualified Python name of the class used by the solver. |
| *getResidualNorm*() | Use *norm* property. |
| *getRhs*() | Return the right-hand side vector for the linear system. |
| *getSolution*() | Return the solution for the linear system to be solved. |
| *getTolerances*() | Return various tolerances used by the KSP convergence tests. |
| *getType*() | Return the KSP type as a string from the *KSP* object. |
| *getWorkVecs*(\[right, left\]) | Create working vectors. |
| *logConvergenceHistory*(rnorm) | Add residual to convergence history. |
| *matSolve*(B, X) | Solve a linear system with multiple right-hand sides. |
| *matSolveTranspose*(B, X) | Solve the transpose of a linear system with multiple RHS. |
| *monitor*(its, rnorm) | Run the user provided monitor routines, if they exist. |
| *monitorCancel*() | Clear all monitors for a *KSP* object. |
| *reset*() | Resets a KSP context. |
| *setAppCtx*(appctx) | Set the optional user-defined context for the linear solver. |
| *setComputeEigenvalues*(flag) | Set a flag to compute eigenvalues. |
| *setComputeOperators*(operators\[, args, kargs\]) | Set routine to compute the linear operators. |
| *setComputeRHS*(rhs\[, args, kargs\]) | Set routine to compute the right-hand side of the linear system. |
| *setComputeSingularValues*(flag) | Set flag to calculate singular values. |
| *setConvergedReason*(reason) | Use *reason* property. |
| *setConvergenceHistory*(\[length, reset\]) | Set the array used to hold the residual history. |
| *setConvergenceTest*(converged\[, args, kargs\]) | Set the function to be used to determine convergence. |
| *setDM*(dm) | Set the *DM* that may be used by some preconditioners. |
| *setDMActive*(flag) | *DM* should be used to generate system matrix & RHS vector. |
| *setErrorIfNotConverged*(flag) | Cause *solve* to generate an error if not converged. |
| *setFromOptions*() | Set *KSP* options from the options database. |
| *setGMRESRestart*(restart) | Set number of iterations at which KSP restarts. |
| *setHPDDMType*(hpddm\_type) | Set the Krylov solver type. |
| *setInitialGuessKnoll*(flag) | Tell solver to use *PC.apply* to compute the initial guess. |
| *setInitialGuessNonzero*(flag) | Tell the iterative solver that the initial guess is nonzero. |
| *setIterationNumber*(its) | Use *its* property. |
| *setMonitor*(monitor\[, args, kargs\]) | Set additional function to monitor the residual. |
| *setNormType*(normtype) | Set the norm that is used for convergence testing. |
| *setOperators*(\[A, P\]) | Set matrix associated with the linear system. |
| *setOptionsPrefix*(prefix) | Set the prefix used for all *KSP* options in the database. |
| *setPC*(pc) | Set the preconditioner. |
| *setPCSide*(side) | Set the preconditioning side. |
| *setPostSolve*(postsolve\[, args, kargs\]) | Set the function that is called at the end of each *KSP.solve*. |
| *setPreSolve*(presolve\[, args, kargs\]) | Set the function that is called at the beginning of each *KSP.solve*. |
| *setPythonContext*(\[context\]) | Set the instance of the class implementing Python methods. |
| *setPythonType*(py\_type) | Set the fully qualified Python name of the class to be used. |
| *setResidualNorm*(rnorm) | Use *norm* property. |
| *setTolerances*(\[rtol, atol, divtol, max\_it\]) | Set various tolerances used by the KSP convergence testers. |
| *setType*(ksp\_type) | Build the *KSP* data structure for a particular *Type*. |
| *setUp*() | Set up internal data structures for an iterative solver. |
| *setUpOnBlocks*() | Set up the preconditioner for each block in a block method. |
| *setUseFischerGuess*(model, size) | Use the Paul Fischer algorithm to compute initial guesses. |
| *solve*(b, x) | Solve the linear system. |
| *solveTranspose*(b, x) | Solve the transpose of a linear system. |
| *view*(\[viewer\]) | Print the KSP data structure. |

Attributes Summary

| | |
| --- | --- |
| *appctx* | The solver application context. |
| *atol* | The absolute tolerance of the solver. |
| *divtol* | The divergence tolerance of the solver. |
| *dm* | The solver *DM*. |
| *guess\_knoll* | Whether solver uses Knoll trick. |
| *guess\_nonzero* | Whether guess is non-zero. |
| *history* | The convergence history of the solver. |
| *is\_converged* | Boolean indicating if the solver has converged. |
| *is\_diverged* | Boolean indicating if the solver has failed. |
| *is\_iterating* | Boolean indicating if the solver has not converged yet. |
| *its* | The current number of iterations the solver has taken. |
| *mat\_op* | The system matrix operator. |
| *mat\_pc* | The preconditioner operator. |
| *max\_it* | The maximum number of iteration the solver may take. |
| *norm* | The norm of the residual at the current iteration. |
| *norm\_type* | The norm used by the solver. |
| *pc* | The *PC* of the solver. |
| *pc\_side* | The side on which preconditioning is performed. |
| *reason* | The converged reason. |
| *rtol* | The relative tolerance of the solver. |
| *vec\_rhs* | The right-hand side vector. |
| *vec\_sol* | The solution vector. |

Methods Documentation

- **addConvergenceTest(converged, args=None, kargs=None, prepend=False)**

  Add the function to be used to determine convergence.

  Logically collective.

  - **Parameters**

    - •

      **converged** (*KSPConvergenceTestFunction*) -- Callback which computes the convergence.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for callback function.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for callback function.

    - •

      **prepend** (*bool*) -- Whether to prepend this call before the default convergence test or call it after.

  - **Return type**

    *None*

  Notes

  Cannot be mixed with a call to *setConvergenceTest*. It can only be called once. If called multiple times, it will generate an error.

  **SEE ALSO:**

  *setTolerances*, *getConvergenceTest*, *setConvergenceTest*, *KSPSetConvergenceTest*, *KSPConvergedDefault*

  *Source code at petsc4py/PETSc/KSP.pyx:1065*

- **appendOptionsPrefix(prefix)**

  Append to prefix used for all *KSP* options in the database.

  Logically collective.

  - **Parameters**

    **prefix** (*str \| None*) -- The options prefix to append.

  - **Return type**

    *None*

  Notes

  A hyphen (-) must NOT be given at the beginning of the prefix name. The first character of all runtime options is AUTOMATICALLY the hyphen.

  **SEE ALSO:**

  *KSPAppendOptionsPrefix*

  *Source code at petsc4py/PETSc/KSP.pyx:575*

- **buildResidual(r=None)**

  Return the residual of the linear system.

  Collective.

  - **Parameters**

    **r** (*Vec \| None*) -- Optional vector to use for the result.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *buildSolution*, *KSPBuildResidual*

  *Source code at petsc4py/PETSc/KSP.pyx:2063*

- **buildSolution(x=None)**

  Return the solution vector.

  Collective.

  - **Parameters**

    **x** (*Vec \| None*) -- Optional vector to store the solution.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *buildResidual*, *KSPBuildSolution*

  *Source code at petsc4py/PETSc/KSP.pyx:2041*

- **callConvergenceTest(its, rnorm)**

  Call the convergence test callback.

  Collective.

  - **Parameters**

    - •

      **its** (*int*) -- Number of iterations.

    - •

      **rnorm** (*float*) -- The residual norm.

  - **Return type**

    *None*

  Notes

  This functionality is implemented in petsc4py.

  *Source code at petsc4py/PETSc/KSP.pyx:1121*

- **computeEigenvalues()**

  Compute the extreme eigenvalues for the preconditioned operator.

  Not collective.

  **SEE ALSO:**

  *KSPComputeEigenvalues*

  *Source code at petsc4py/PETSc/KSP.pyx:2085*

  - **Return type**

    *ArrayComplex*

- **computeExtremeSingularValues()**

  Compute the extreme singular values for the preconditioned operator.

  Collective.

  - **Returns**

    - •

      **smax** (*float*) -- The maximum singular value.

    - •

      **smin** (*float*) -- The minimum singular value.

  - **Return type**

    *tuple*\[*float*, *float*\]

  **SEE ALSO:**

  *KSPComputeExtremeSingularValues*

  *Source code at petsc4py/PETSc/KSP.pyx:2108*

- **create(comm=None)**

  Create the KSP context.

  Collective.

  **SEE ALSO:**

  *KSPCreate*

  *Source code at petsc4py/PETSc/KSP.pyx:457*

  - **Parameters**

    **comm** (*Comm \| None*)

  - **Return type**

    *Self*

- **createPython(context=None, comm=None)**

  Create a linear solver of Python type.

  Collective.

  - **Parameters**

    - •

      **context** (*Any*) -- An instance of the Python class implementing the required methods.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PETSc Python linear solver type*, *setType*, *setPythonContext*, *Type.PYTHON*

  *Source code at petsc4py/PETSc/KSP.pyx:2154*

- **destroy()**

  Destroy KSP context.

  Collective.

  **SEE ALSO:**

  *KSPDestroy*

  *Source code at petsc4py/PETSc/KSP.pyx:444*

  - **Return type**

    *Self*

- **getAppCtx()**

  Return the user-defined context for the linear solver.

  Not collective.

  **SEE ALSO:**

  *setAppCtx*

  *Source code at petsc4py/PETSc/KSP.pyx:640*

  - **Return type**

    *Any*

- **getCGObjectiveValue()**

  Return the CG objective function value.

  Not collective.

  **SEE ALSO:**

  *KSPCGGetObjFcn*

  *Source code at petsc4py/PETSc/KSP.pyx:1882*

  - **Return type**

    *float*

- **getComputeEigenvalues()**

  Return flag indicating whether eigenvalues will be calculated.

  Not collective.

  Return the flag indicating that the extreme eigenvalues values will be calculated via a Lanczos or Arnoldi process as the linear system is solved.

  **SEE ALSO:**

  *setComputeEigenvalues*, *KSPSetComputeEigenvalues*

  *Source code at petsc4py/PETSc/KSP.pyx:1430*

  - **Return type**

    *bool*

- **getComputeSingularValues()**

  Return flag indicating whether singular values will be calculated.

  Not collective.

  Return the flag indicating whether the extreme singular values will be calculated via a Lanczos or Arnoldi process as the linear system is solved.

  **SEE ALSO:**

  *setComputeSingularValues*, *KSPGetComputeSingularValues*

  *Source code at petsc4py/PETSc/KSP.pyx:1474*

  - **Return type**

    *bool*

- **getConvergedReason()**

  Use *reason* property.

  *Source code at petsc4py/PETSc/KSP.pyx:1876*

  - **Return type**

    *ConvergedReason*

- **getConvergenceHistory()**

  Return array containing the residual history.

  Not collective.

  **SEE ALSO:**

  *setConvergenceHistory*, *KSPGetResidualHistory*

  *Source code at petsc4py/PETSc/KSP.pyx:1188*

  - **Return type**

    *ArrayReal*

- **getConvergenceTest()**

  Return the function to be used to determine convergence.

  Logically collective.

  **SEE ALSO:**

  *setTolerances*, *setConvergenceTest*, *KSPGetConvergenceTest*, *KSPConvergedDefault*

  *Source code at petsc4py/PETSc/KSP.pyx:1108*

  - **Return type**

    *KSPConvergenceTestFunction*

- **getDM()**

  Return the *DM* that may be used by some preconditioners.

  Not collective.

  **SEE ALSO:**

  *PETSc.KSP*, *DM*, *KSPGetDM*

  *Source code at petsc4py/PETSc/KSP.pyx:654*

  - **Return type**

    *DM*

- **getErrorIfNotConverged()**

  Return the flag indicating the solver will error if divergent.

  Not collective.

  **SEE ALSO:**

  *KSPGetErrorIfNotConverged*

  *Source code at petsc4py/PETSc/KSP.pyx:1946*

  - **Return type**

    *bool*

- **getHPDDMType()**

  Return the Krylov solver type.

  Not collective.

  **SEE ALSO:**

  *KSPHPDDMGetType*

  *Source code at petsc4py/PETSc/KSP.pyx:1914*

  - **Return type**

    *HPDDMType*

- **getInitialGuessKnoll()**

  Determine whether the KSP solver is using the Knoll trick.

  Not collective.

  This uses the Knoll trick; using *PC.apply* to compute the initial guess.

  **SEE ALSO:**

  *KSPGetInitialGuessKnoll*

  *Source code at petsc4py/PETSc/KSP.pyx:1550*

  - **Return type**

    *bool*

- **getInitialGuessNonzero()**

  Determine whether the KSP solver uses a zero initial guess.

  Not collective.

  **SEE ALSO:**

  *KSPGetInitialGuessNonzero*

  *Source code at petsc4py/PETSc/KSP.pyx:1516*

  - **Return type**

    *bool*

- **getIterationNumber()**

  Use *its* property.

  *Source code at petsc4py/PETSc/KSP.pyx:1854*

  - **Return type**

    *int*

- **getMonitor()**

  Return function used to monitor the residual.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setMonitor*, *monitor*, *monitorCancel*, *KSPGetMonitorContext*

  *Source code at petsc4py/PETSc/KSP.pyx:1266*

  - **Return type**

    *KSPMonitorFunction*

- **getNormType()**

  Return the norm that is used for convergence testing.

  Not collective.

  **SEE ALSO:**

  *NormType*, *setNormType*, *KSPGetNormType*, *KSPConvergedSkip*

  *Source code at petsc4py/PETSc/KSP.pyx:1390*

  - **Return type**

    *NormType*

- **getOperators()**

  Return the matrix associated with the linear system.

  Collective.

  Return the matrix associated with the linear system and a (possibly) different one used to construct the preconditioner.

  - **Returns**

    - •

      **A** (*Mat*) -- Matrix that defines the linear system.

    - •

      **P** (*Mat*) -- Matrix to be used in constructing the preconditioner, usually the same as **A**.

  - **Return type**

    *tuple*\[*Mat*, *Mat*\]

  **SEE ALSO:**

  *PETSc.KSP*, *solve*, *setOperators*, *KSPGetOperators*

  *Source code at petsc4py/PETSc/KSP.pyx:850*

- **getOptionsPrefix()**

  Return the prefix used for all *KSP* options in the database.

  Not collective.

  **SEE ALSO:**

  *KSPGetOptionsPrefix*

  *Source code at petsc4py/PETSc/KSP.pyx:561*

  - **Return type**

    *str*

- **getPC()**

  Return the preconditioner.

  Not collective.

  **SEE ALSO:**

  *PETSc.KSP*, *setPC*, *KSPGetPC*

  *Source code at petsc4py/PETSc/KSP.pyx:897*

  - **Return type**

    *PC*

- **getPCSide()**

  Return the preconditioning side.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setPCSide*, *setNormType*, *getNormType*, *KSPGetPCSide*

  *Source code at petsc4py/PETSc/KSP.pyx:1349*

  - **Return type**

    *Side*

- **getPythonContext()**

  Return the instance of the class implementing Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python linear solver type*, *setPythonContext*

  *Source code at petsc4py/PETSc/KSP.pyx:2195*

  - **Return type**

    *Any*

- **getPythonType()**

  Return the fully qualified Python name of the class used by the solver.

  Not collective.

  **SEE ALSO:**

  *PETSc Python linear solver type*, *setPythonContext*, *setPythonType*, *KSPPythonGetType*

  *Source code at petsc4py/PETSc/KSP.pyx:2225*

  - **Return type**

    *str*

- **getResidualNorm()**

  Use *norm* property.

  *Source code at petsc4py/PETSc/KSP.pyx:1865*

  - **Return type**

    *float*

- **getRhs()**

  Return the right-hand side vector for the linear system.

  Not collective.

  **SEE ALSO:**

  *KSPGetRhs*

  *Source code at petsc4py/PETSc/KSP.pyx:1960*

  - **Return type**

    *Vec*

- **getSolution()**

  Return the solution for the linear system to be solved.

  Not collective.

  Note that this may not be the solution that is stored during the iterative process.

  **SEE ALSO:**

  *KSPGetSolution*

  *Source code at petsc4py/PETSc/KSP.pyx:1975*

  - **Return type**

    *Vec*

- **getTolerances()**

  Return various tolerances used by the KSP convergence tests.

  Not collective.

  Return the relative, absolute, divergence, and maximum iteration tolerances used by the default KSP convergence tests.

  - **Returns**

    - •

      **rtol** (*float*) -- The relative convergence tolerance

    - •

      **atol** (*float*) -- The absolute convergence tolerance

    - •

      **dtol** (*float*) -- The divergence tolerance

    - •

      **maxits** (*int*) -- Maximum number of iterations

  - **Return type**

    *tuple*\[*float*, *float*, *float*, *int*\]

  **SEE ALSO:**

  *setTolerances*, *KSPGetTolerances*

  *Source code at petsc4py/PETSc/KSP.pyx:971*

- **getType()**

  Return the KSP type as a string from the *KSP* object.

  Not collective.

  **SEE ALSO:**

  *KSPGetType*

  *Source code at petsc4py/PETSc/KSP.pyx:509*

  - **Return type**

    *str*

- **getWorkVecs(right=None, left=None)**

  Create working vectors.

  Collective.

  - **Parameters**

    - •

      **right** (*int \| None*) -- Number of right hand vectors to allocate.

    - •

      **left** (*int \| None*) -- Number of left hand vectors to allocate.

  - **Returns**

    - •

      **R** (*list* of *Vec*) -- List of correctly allocated right hand vectors.

    - •

      **L** (*list* of *Vec*) -- List of correctly allocated left hand vectors.

  - **Return type**

    *tuple*\[*list*\[*Vec*\], *list*\[*Vec*\]\] \| *list*\[*Vec*\] \| *None*

  *Source code at petsc4py/PETSc/KSP.pyx:1993*

- **logConvergenceHistory(rnorm)**

  Add residual to convergence history.

  Logically collective.

  - **Parameters**

    **rnorm** (*float*) -- Residual norm to be added to convergence history.

  - **Return type**

    *None*

  *Source code at petsc4py/PETSc/KSP.pyx:1203*

- **matSolve(B, X)**

  Solve a linear system with multiple right-hand sides.

  Collective.

  These are stored as a *Mat.Type.DENSE*. Unlike *solve*, **B** and **X** must be different matrices.

  - **Parameters**

    - •

      **B** (*Mat*) -- Block of right-hand sides.

    - •

      **X** (*Mat*) -- Block of solutions.

  - **Return type**

    *None*

  **SEE ALSO:**

  *solve*, *KSPMatSolve*

  *Source code at petsc4py/PETSc/KSP.pyx:1808*

- **matSolveTranspose(B, X)**

  Solve the transpose of a linear system with multiple RHS.

  Collective.

  - **Parameters**

    - •

      **B** (*Mat*) -- Block of right-hand sides.

    - •

      **X** (*Mat*) -- Block of solutions.

  - **Return type**

    *None*

  **SEE ALSO:**

  *solveTranspose*, *KSPMatSolve*

  *Source code at petsc4py/PETSc/KSP.pyx:1830*

- **monitor(its, rnorm)**

  Run the user provided monitor routines, if they exist.

  Collective.

  Notes

  This routine is called by the *KSP* implementations. It does not typically need to be called by the user.

  **SEE ALSO:**

  *setMonitor*, *KSPMonitor*

  *Source code at petsc4py/PETSc/KSP.pyx:1294*

  - **Parameters**

    - •

      **its** (*int*)

    - •

      **rnorm** (*float*)

  - **Return type**

    *None*

- **monitorCancel()**

  Clear all monitors for a *KSP* object.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *getMonitor*, *setMonitor*, *monitor*, *KSPMonitorCancel*

  *Source code at petsc4py/PETSc/KSP.pyx:1279*

  - **Return type**

    *None*

- **reset()**

  Resets a KSP context.

  Collective.

  Resets a KSP context to the **kspsetupcalled = 0** state and removes any allocated Vecs and Mats.

  **SEE ALSO:**

  *KSPReset*

  *Source code at petsc4py/PETSc/KSP.pyx:1607*

  - **Return type**

    *None*

- **setAppCtx(appctx)**

  Set the optional user-defined context for the linear solver.

  Not collective.

  - **Parameters**

    **appctx** (*Any*) -- The user defined context

  - **Return type**

    *None*

  Notes

  The user context is a way for users to attach any information to the *KSP* that they may need later when interacting with the solver.

  **SEE ALSO:**

  *getAppCtx*

  *Source code at petsc4py/PETSc/KSP.pyx:617*

- **setComputeEigenvalues(flag)**

  Set a flag to compute eigenvalues.

  Logically collective.

  Set a flag so that the extreme eigenvalues values will be calculated via a Lanczos or Arnoldi process as the linear system is solved.

  - **Parameters**

    **flag** (*bool*) -- Boolean whether to compute eigenvalues (or not).

  - **Return type**

    *None*

  Notes

  Currently this option is not valid for all iterative methods.

  **SEE ALSO:**

  *getComputeEigenvalues*, *KSPSetComputeEigenvalues*

  *Source code at petsc4py/PETSc/KSP.pyx:1404*

- **setComputeOperators(operators, args=None, kargs=None)**

  Set routine to compute the linear operators.

  Logically collective.

  - **Parameters**

    - •

      **operators** (*KSPOperatorsFunction*) -- Function which computes the operators.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for callback function **operators**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for callback function **operators**.

  - **Return type**

    *None*

  Notes

  The user provided function *Operators* will be called automatically at the very next call to *solve*. It will NOT be called at future *solve* calls unless either *setComputeOperators* or *setOperators* is called before that *solve* is called. This allows the same system to be solved several times with different right-hand side functions, but is a confusing API since one might expect it to be called for each *solve*.

  To reuse the same preconditioner for the next *solve* and not compute a new one based on the most recently computed matrix call *KSPSetReusePreconditioner*.

  **SEE ALSO:**

  *PETSc.KSP*, *solve*, *setOperators*, *KSPSetComputeOperators*, *KSPSetReusePreconditioner*

  *Source code at petsc4py/PETSc/KSP.pyx:764*

- **setComputeRHS(rhs, args=None, kargs=None)**

  Set routine to compute the right-hand side of the linear system.

  Logically collective.

  - **Parameters**

    - •

      **rhs** (*KSPRHSFunction*) -- Function which computes the right-hand side.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for callback function **rhs**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for callback function **rhs**.

  - **Return type**

    *None*

  Notes

  The routine you provide will be called each time you call *solve* to prepare the new right-hand side for that solve.

  **SEE ALSO:**

  *PETSc.KSP*, *solve*, *KSPSetComputeRHS*

  *Source code at petsc4py/PETSc/KSP.pyx:730*

- **setComputeSingularValues(flag)**

  Set flag to calculate singular values.

  Logically collective.

  Set a flag so that the extreme singular values will be calculated via a Lanczos or Arnoldi process as the linear system is solved.

  - **Parameters**

    **flag** (*bool*) -- Boolean whether to compute singular values (or not).

  - **Return type**

    *None*

  Notes

  Currently this option is not valid for all iterative methods.

  **SEE ALSO:**

  *getComputeSingularValues*, *KSPSetComputeSingularValues*

  *Source code at petsc4py/PETSc/KSP.pyx:1448*

- **setConvergedReason(reason)**

  Use *reason* property.

  *Source code at petsc4py/PETSc/KSP.pyx:1871*

  - **Parameters**

    **reason** (*ConvergedReason*)

  - **Return type**

    *None*

- **setConvergenceHistory(length=None, reset=False)**

  Set the array used to hold the residual history.

  Not collective.

  If set, this array will contain the residual norms computed at each iteration of the solver.

  - **Parameters**

    - •

      **length** (*int \| None*) -- Length of array to store history in.

    - •

      **reset** (*bool*) -- *True* indicates the history counter is reset to zero for each new linear solve.

  - **Return type**

    *None*

  Notes

  If **length** is not provided or *None* then a default array of length 10000 is allocated.

  If the array is not long enough then once the iterations is longer than the array length *solve* stops recording the history.

  **SEE ALSO:**

  *getConvergenceHistory*, *KSPSetResidualHistory*

  *Source code at petsc4py/PETSc/KSP.pyx:1144*

- **setConvergenceTest(converged, args=None, kargs=None)**

  Set the function to be used to determine convergence.

  Logically collective.

  - **Parameters**

    - •

      **converged** (*KSPConvergenceTestFunction*) -- Callback which computes the convergence.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for callback function.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for callback function.

  - **Return type**

    *None*

  Notes

  Must be called after the KSP type has been set so put this after a call to *setType*, or *setFromOptions*.

  The default is a combination of relative and absolute tolerances. The residual value that is tested may be an approximation; routines that need exact values should compute them.

  **SEE ALSO:**

  *addConvergenceTest*, *ConvergedReason*, *setTolerances*, *getConvergenceTest*, *buildResidual*, *KSPSetConvergenceTest*, *KSPConvergedDefault*

  *Source code at petsc4py/PETSc/KSP.pyx:1000*

- **setDM(dm)**

  Set the *DM* that may be used by some preconditioners.

  Logically collective.

  - **Parameters**

    **dm** (*DM*) -- The *DM* object, cannot be *None*.

  - **Return type**

    *None*

  Notes

  If this is used then the *KSP* will attempt to use the *DM* to create the matrix and use the routine set with *DM.setKSPComputeOperators*. Use **setDMActive(False)** to instead use the matrix you have provided with *setOperators*.

  A *DM* can only be used for solving one problem at a time because information about the problem is stored on the *DM*, even when not using interfaces like *DM.setKSPComputeOperators*. Use *DM.clone* to get a distinct *DM* when solving different problems using the same function space.

  **SEE ALSO:**

  *PETSc.KSP*, *DM*, *DM.setKSPComputeOperators*, *setOperators*, *DM.clone*, *KSPSetDM*

  *Source code at petsc4py/PETSc/KSP.pyx:671*

- **setDMActive(flag)**

  *DM* should be used to generate system matrix & RHS vector.

  Logically collective.

  - **Parameters**

    **flag** (*bool*) -- Whether to use the *DM*.

  - **Return type**

    *None*

  Notes

  By default *setDM* sets the *DM* as active, call **setDMActive(False)** after **setDM(dm)** to not have the *KSP* object use the *DM* to generate the matrices.

  **SEE ALSO:**

  *PETSc.KSP*, *DM*, *setDM*, *KSPSetDMActive*

  *Source code at petsc4py/PETSc/KSP.pyx:704*

- **setErrorIfNotConverged(flag)**

  Cause *solve* to generate an error if not converged.

  Logically collective.

  - **Parameters**

    **flag** (*bool*) -- *True* enables this behavior.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSPSetErrorIfNotConverged*

  *Source code at petsc4py/PETSc/KSP.pyx:1928*

- **setFromOptions()**

  Set *KSP* options from the options database.

  Collective.

  This routine must be called before *setUp* if the user is to be allowed to set the Krylov type.

  **SEE ALSO:**

  *Working with PETSc options*, *KSPSetFromOptions*

  *Source code at petsc4py/PETSc/KSP.pyx:600*

  - **Return type**

    *None*

- **setGMRESRestart(restart)**

  Set number of iterations at which KSP restarts.

  Logically collective.

  Suitable KSPs are: KSPGMRES, KSPFGMRES and KSPLGMRES.

  - **Parameters**

    **restart** (*int*) -- Integer restart value.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSPGMRESSetRestart*

  *Source code at petsc4py/PETSc/KSP.pyx:2132*

- **setHPDDMType(hpddm\_type)**

  Set the Krylov solver type.

  Collective.

  - **Parameters**

    **hpddm\_type** (*HPDDMType*) -- The type of Krylov solver to use.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSPHPDDMSetType*

  *Source code at petsc4py/PETSc/KSP.pyx:1896*

- **setInitialGuessKnoll(flag)**

  Tell solver to use *PC.apply* to compute the initial guess.

  Logically collective.

  This is the Knoll trick.

  - **Parameters**

    **flag** (*bool*) -- *True* uses Knoll trick.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSPSetInitialGuessKnoll*

  *Source code at petsc4py/PETSc/KSP.pyx:1530*

- **setInitialGuessNonzero(flag)**

  Tell the iterative solver that the initial guess is nonzero.

  Logically collective.

  Otherwise KSP assumes the initial guess is to be zero (and thus zeros it out before solving).

  - **Parameters**

    **flag** (*bool*) -- *True* indicates the guess is non-zero, *False* indicates the guess is zero.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSPSetInitialGuessNonzero*

  *Source code at petsc4py/PETSc/KSP.pyx:1494*

- **setIterationNumber(its)**

  Use *its* property.

  *Source code at petsc4py/PETSc/KSP.pyx:1849*

  - **Parameters**

    **its** (*int*)

  - **Return type**

    *None*

- **setMonitor(monitor, args=None, kargs=None)**

  Set additional function to monitor the residual.

  Logically collective.

  Set an ADDITIONAL function to be called at every iteration to monitor the residual/error etc.

  - **Parameters**

    - •

      **monitor** (*KSPMonitorFunction*) -- Callback which monitors the convergence.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for callback function.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for callback function.

  - **Return type**

    *None*

  Notes

  The default is to do nothing. To print the residual, or preconditioned residual if **setNormType(NORM\_PRECONDITIONED)** was called, use *monitor* as the monitoring routine, with a *PETSc.Viewer.ASCII* as the context.

  Several different monitoring routines may be set by calling *setMonitor* multiple times; all will be called in the order in which they were set.

  **SEE ALSO:**

  *Working with PETSc options*, *getMonitor*, *monitor*, *monitorCancel*, *KSPMonitorSet*

  *Source code at petsc4py/PETSc/KSP.pyx:1219*

- **setNormType(normtype)**

  Set the norm that is used for convergence testing.

  Logically collective.

  - **Parameters**

    **normtype** (*NormType*) -- The norm type to use (see *NormType*).

  - **Return type**

    *None*

  Notes

  Not all combinations of preconditioner side (see *setPCSide*) and norm type are supported by all Krylov methods. If only one is set, PETSc tries to automatically change the other to find a compatible pair. If no such combination is supported, PETSc will generate an error.

  **SEE ALSO:**

  *NormType*, *Working with PETSc options*, *setUp*, *solve*, *destroy*, *setPCSide*, *getPCSide*, *NormType*, *KSPSetNormType*, *KSPConvergedSkip*, *KSPSetCheckNormIteration*

  *Source code at petsc4py/PETSc/KSP.pyx:1363*

- **setOperators(A=None, P=None)**

  Set matrix associated with the linear system.

  Collective.

  Set the matrix associated with the linear system and a (possibly) different one from which the preconditioner will be built.

  - **Parameters**

    - •

      **A** (*Mat \| None*) -- Matrix that defines the linear system.

    - •

      **P** (*Mat \| None*) -- Matrix to be used in constructing the preconditioner, usually the same as **A**.

  - **Return type**

    *None*

  Notes

  If you know the operator **A** has a null space you can use *Mat.setNullSpace* and *Mat.setTransposeNullSpace* to supply the null space to **A** and the *KSP* solvers will automatically use that null space as needed during the solution process.

  All future calls to *setOperators* must use the same size matrices!

  Passing *None* for **A** or **P** removes the matrix that is currently used.

  **SEE ALSO:**

  *PETSc.KSP*, *solve*, *setComputeOperators*, *KSPSetOperators*

  *Source code at petsc4py/PETSc/KSP.pyx:809*

- **setOptionsPrefix(prefix)**

  Set the prefix used for all *KSP* options in the database.

  Logically collective.

  - **Parameters**

    **prefix** (*str \| None*) -- The options prefix.

  - **Return type**

    *None*

  Notes

  A hyphen (-) must NOT be given at the beginning of the prefix name. The first character of all runtime options is AUTOMATICALLY the hyphen. For example, to distinguish between the runtime options for two different *KSP* contexts, one could call **\`** **KSPSetOptionsPrefix(ksp1, "sys1\_")** **KSPSetOptionsPrefix(ksp2, "sys2\_")** **\`**

  This would enable use of different options for each system, such as **\`** **-sys1\_ksp\_type gmres -sys1\_ksp\_rtol 1.e-3** **-sys2\_ksp\_type bcgs  -sys2\_ksp\_rtol 1.e-4** **\`**

  **SEE ALSO:**

  *Working with PETSc options*, *KSPSetOptionsPrefix*

  *Source code at petsc4py/PETSc/KSP.pyx:523*

- **setPC(pc)**

  Set the preconditioner.

  Collective.

  Set the preconditioner to be used to calculate the application of the preconditioner on a vector.

  - **Parameters**

    **pc** (*PC*) -- The preconditioner object

  - **Return type**

    *None*

  **SEE ALSO:**

  *PETSc.KSP*, *getPC*, *KSPSetPC*

  *Source code at petsc4py/PETSc/KSP.pyx:877*

- **setPCSide(side)**

  Set the preconditioning side.

  Logically collective.

  - **Parameters**

    **side** (*Side*) -- The preconditioning side (see *PC.Side*).

  - **Return type**

    *None*

  Notes

  Left preconditioning is used by default for most Krylov methods except *Type.FGMRES* which only supports right preconditioning.

  For methods changing the side of the preconditioner changes the norm type that is used, see *setNormType*.

  Symmetric preconditioning is currently available only for the *Type.QCG* method. Note, however, that symmetric preconditioning can be emulated by using either right or left preconditioning and a pre or post processing step.

  Setting the PC side often affects the default norm type. See *setNormType* for details.

  **SEE ALSO:**

  *PC.Side*, *Working with PETSc options*, *getPCSide*, *setNormType*, *getNormType*, *KSPSetPCSide*

  *Source code at petsc4py/PETSc/KSP.pyx:1315*

- **setPostSolve(postsolve, args=None, kargs=None)**

  Set the function that is called at the end of each *KSP.solve*.

  Logically collective.

  - **Parameters**

    - •

      **postsolve** (*KSPPostSolveFunction \| None*) -- The callback function.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback function.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback function.

  - **Return type**

    *None*

  **SEE ALSO:**

  *solve*, *KSPSetPreSolve*, *KSPSetPostSolve*

  *Source code at petsc4py/PETSc/KSP.pyx:1670*

- **setPreSolve(presolve, args=None, kargs=None)**

  Set the function that is called at the beginning of each *KSP.solve*.

  Logically collective.

  - **Parameters**

    - •

      **presolve** (*KSPPreSolveFunction \| None*) -- The callback function.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback function.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback function.

  - **Return type**

    *None*

  **SEE ALSO:**

  *solve*, *KSPSetPreSolve*, *KSPSetPostSolve*

  *Source code at petsc4py/PETSc/KSP.pyx:1637*

- **setPythonContext(context=None)**

  Set the instance of the class implementing Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python linear solver type*, *getPythonContext*

  *Source code at petsc4py/PETSc/KSP.pyx:2183*

  - **Parameters**

    **context** (*Any \| None*)

  - **Return type**

    *None*

- **setPythonType(py\_type)**

  Set the fully qualified Python name of the class to be used.

  Collective.

  **SEE ALSO:**

  *PETSc Python linear solver type*, *setPythonContext*, *getPythonType*, *KSPPythonSetType*

  *Source code at petsc4py/PETSc/KSP.pyx:2210*

  - **Parameters**

    **py\_type** (*str*)

  - **Return type**

    *None*

- **setResidualNorm(rnorm)**

  Use *norm* property.

  *Source code at petsc4py/PETSc/KSP.pyx:1860*

  - **Parameters**

    **rnorm** (*float*)

  - **Return type**

    *None*

- **setTolerances(rtol=None, atol=None, divtol=None, max\_it=None)**

  Set various tolerances used by the KSP convergence testers.

  Logically collective.

  Set the relative, absolute, divergence, and maximum iteration tolerances used by the default KSP convergence testers.

  - **Parameters**

    - •

      **rtol** (*float \| None*) -- The relative convergence tolerance, relative decrease in the (possibly preconditioned) residual norm. Or *DETERMINE* to use the value when the object's type was set.

    - •

      **atol** (*float \| None*) -- The absolute convergence tolerance absolute size of the (possibly preconditioned) residual norm. Or *DETERMINE* to use the value when the object's type was set.

    - •

      **dtol** -- The divergence tolerance, amount (possibly preconditioned) residual norm can increase before *KSPConvergedDefault* concludes that the method is diverging. Or *DETERMINE* to use the value when the object's type was set.

    - •

      **max\_it** (*int \| None*) -- Maximum number of iterations to use. Or *DETERMINE* to use the value when the object's type was set.

    - •

      **divtol** (*float \| None*)

  - **Return type**

    *None*

  Notes

  Use *None* to retain the default value of any of the tolerances.

  **SEE ALSO:**

  *Working with PETSc options*, *getTolerances*, *setConvergenceTest*, *KSPSetTolerances*, *KSPConvergedDefault*

  *Source code at petsc4py/PETSc/KSP.pyx:914*

- **setType(ksp\_type)**

  Build the *KSP* data structure for a particular *Type*.

  Logically collective.

  - **Parameters**

    **ksp\_type** (*Type \| str*) -- KSP Type object

  - **Return type**

    *None*

  Notes

  See *Type* for available methods (for instance, *Type.CG* or *Type.GMRES*).

  Normally, it is best to use the *setFromOptions* command and then set the KSP type from the options database rather than by using this routine. Using the options database provides the user with maximum flexibility in evaluating the many different Krylov methods. This method is provided for those situations where it is necessary to set the iterative solver independently of the command line or options database. This might be the case, for example, when the choice of iterative solver changes during the execution of the program, and the user's application is taking responsibility for choosing the appropriate method. In other words, this routine is not for beginners.

  **SEE ALSO:**

  *KSPSetType*

  *Source code at petsc4py/PETSc/KSP.pyx:473*

- **setUp()**

  Set up internal data structures for an iterative solver.

  Collective.

  **SEE ALSO:**

  *KSPSetUp*

  *Source code at petsc4py/PETSc/KSP.pyx:1595*

  - **Return type**

    *None*

- **setUpOnBlocks()**

  Set up the preconditioner for each block in a block method.

  Collective.

  Methods include: block Jacobi, block Gauss-Seidel, and overlapping Schwarz methods.

  **SEE ALSO:**

  *KSPSetUpOnBlocks*

  *Source code at petsc4py/PETSc/KSP.pyx:1622*

  - **Return type**

    *None*

- **setUseFischerGuess(model, size)**

  Use the Paul Fischer algorithm to compute initial guesses.

  Logically collective.

  Use the Paul Fischer algorithm or its variants to compute initial guesses for a set of solves with related right hand sides.

  - **Parameters**

    - •

      **model** (*int*) -- Use model **1**, model **2**, model **3**, any other number to turn it off.

    - •

      **size** (*int*) -- Size of subspace used to generate initial guess.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSPSetUseFischerGuess*

  *Source code at petsc4py/PETSc/KSP.pyx:1567*

- **solve(b, x)**

  Solve the linear system.

  Collective.

  - **Parameters**

    - •

      **b** (*Vec*) -- Right hand side vector.

    - •

      **x** (*Vec*) -- Solution vector.

  - **Return type**

    *None*

  Notes

  If one uses *setDM* then **x** or **b** need not be passed. Use *getSolution* to access the solution in this case.

  The operator is specified with *setOperators*.

  *solve* will normally return without generating an error regardless of whether the linear system was solved or if constructing the preconditioner failed. Call *getConvergedReason* to determine if the solver converged or failed and why. The option **-ksp\_error\_if\_not\_converged** or function *setErrorIfNotConverged* will cause *solve* to error as soon as an error occurs in the linear solver. In inner solves, **DIVERGED\_MAX\_IT** is not treated as an error because when using nested solvers it may be fine that inner solvers in the preconditioner do not converge during the solution process.

  The number of iterations can be obtained from *its*.

  If you provide a matrix that has a *Mat.setNullSpace* and *Mat.setTransposeNullSpace* this will use that information to solve singular systems in the least squares sense with a norm minimizing solution.

  Ax = b where b = bₚ + bₜ where bₜ is not in the range of A (and hence by the fundamental theorem of linear algebra is in the nullspace(Aᵀ), see *Mat.setNullSpace*.

  KSP first removes bₜ producing the linear system Ax = bₚ (which has multiple solutions) and solves this to find the ∥x∥ minimizing solution (and hence it finds the solution x orthogonal to the nullspace(A). The algorithm is simply in each iteration of the Krylov method we remove the nullspace(A) from the search direction thus the solution which is a linear combination of the search directions has no component in the nullspace(A).

  We recommend always using *Type.GMRES* for such singular systems. If nullspace(A) = nullspace(Aᵀ) (note symmetric matrices always satisfy this property) then both left and right preconditioning will work If nullspace(A) != nullspace(Aᵀ) then left preconditioning will work but right preconditioning may not work (or it may).

  If using a direct method (e.g., via the KSP solver *Type.PREONLY* and a preconditioner such as *PC.Type.LU* or *PC.Type.ILU*, then its=1. See *setTolerances* for more details.

  **Understanding Convergence**

  The routines *setMonitor* and *computeEigenvalues* provide information on additional options to monitor convergence and print eigenvalue information.

  **SEE ALSO:**

  *create*, *setUp*, *destroy*, *setTolerances*, *is\_converged*, *solveTranspose*, *its*, *Mat.setNullSpace*, *Mat.setTransposeNullSpace*, *Type*, *setErrorIfNotConverged*, *KSPSolve*

  *Source code at petsc4py/PETSc/KSP.pyx:1703*

- **solveTranspose(b, x)**

  Solve the transpose of a linear system.

  Collective.

  - **Parameters**

    - •

      **b** (*Vec*) -- Right hand side vector.

    - •

      **x** (*Vec*) -- Solution vector.

  - **Return type**

    *None*

  Notes

  For complex numbers this solve the non-Hermitian transpose system.

  **SEE ALSO:**

  *solve*, *KSPSolveTranspose*

  *Source code at petsc4py/PETSc/KSP.pyx:1784*

- **view(viewer=None)**

  Print the KSP data structure.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- Viewer used to display the KSP.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSPView*

  *Source code at petsc4py/PETSc/KSP.pyx:425*

Attributes Documentation

- **appctx**

  The solver application context.

  *Source code at petsc4py/PETSc/KSP.pyx:2242*

- **atol**

  The absolute tolerance of the solver.

  *Source code at petsc4py/PETSc/KSP.pyx:2335*

- **divtol**

  The divergence tolerance of the solver.

  *Source code at petsc4py/PETSc/KSP.pyx:2343*

- **dm**

  The solver *DM*.

  *Source code at petsc4py/PETSc/KSP.pyx:2252*

- **guess\_knoll**

  Whether solver uses Knoll trick.

  *Source code at petsc4py/PETSc/KSP.pyx:2294*

- **guess\_nonzero**

  Whether guess is non-zero.

  *Source code at petsc4py/PETSc/KSP.pyx:2286*

- **history**

  The convergence history of the solver.

  *Source code at petsc4py/PETSc/KSP.pyx:2377*

- **is\_converged**

  Boolean indicating if the solver has converged.

  *Source code at petsc4py/PETSc/KSP.pyx:2397*

- **is\_diverged**

  Boolean indicating if the solver has failed.

  *Source code at petsc4py/PETSc/KSP.pyx:2402*

- **is\_iterating**

  Boolean indicating if the solver has not converged yet.

  *Source code at petsc4py/PETSc/KSP.pyx:2392*

- **its**

  The current number of iterations the solver has taken.

  *Source code at petsc4py/PETSc/KSP.pyx:2361*

- **mat\_op**

  The system matrix operator.

  *Source code at petsc4py/PETSc/KSP.pyx:2274*

- **mat\_pc**

  The preconditioner operator.

  *Source code at petsc4py/PETSc/KSP.pyx:2279*

- **max\_it**

  The maximum number of iteration the solver may take.

  *Source code at petsc4py/PETSc/KSP.pyx:2351*

- **norm**

  The norm of the residual at the current iteration.

  *Source code at petsc4py/PETSc/KSP.pyx:2369*

- **norm\_type**

  The norm used by the solver.

  *Source code at petsc4py/PETSc/KSP.pyx:2317*

- **pc**

  The *PC* of the solver.

  *Source code at petsc4py/PETSc/KSP.pyx:2304*

- **pc\_side**

  The side on which preconditioning is performed.

  *Source code at petsc4py/PETSc/KSP.pyx:2309*

- **reason**

  The converged reason.

  *Source code at petsc4py/PETSc/KSP.pyx:2384*

- **rtol**

  The relative tolerance of the solver.

  *Source code at petsc4py/PETSc/KSP.pyx:2327*

- **vec\_rhs**

  The right-hand side vector.

  *Source code at petsc4py/PETSc/KSP.pyx:2267*

- **vec\_sol**

  The solution vector.

  *Source code at petsc4py/PETSc/KSP.pyx:2262*

### petsc4py.PETSc.LGMap

- **class petsc4py.PETSc.LGMap**

  Bases: *Object*

  Mapping from a local to a global ordering.

  **SEE ALSO:**

  *ISLocalToGlobalMapping*

  Enumerations

  | | |
  | --- | --- |
  | *GLMapMode* | Enum describing mapping behavior when global indices are missing. |
  | *Type* | Local to global map types. |

### petsc4py.PETSc.LGMap.GLMapMode

- **class petsc4py.PETSc.LGMap.GLMapMode**

  Bases: *object*

  Enum describing mapping behavior when global indices are missing.

  - **MASK**

    Give missing global indices a local index of -1.

  - **DROP**

    Drop missing global indices.

  **SEE ALSO:**

  *ISGlobalToLocalMappingMode*

  Attributes Summary

  | | |
  | --- | --- |
  | *DROP* | Constant **DROP** of type *int* |
  | *MASK* | Constant **MASK** of type *int* |

  Attributes Documentation

  - **DROP: *int* = DROP**

    Constant **DROP** of type *int*

  - **MASK: *int* = MASK**

    Constant **MASK** of type *int*

### petsc4py.PETSc.LGMap.Type

- **class petsc4py.PETSc.LGMap.Type**

  Bases: *object*

  Local to global map types.

  Attributes Summary

  | | |
  | --- | --- |
  | *BASIC* | Object **BASIC** of type *str* |
  | *HASH* | Object **HASH** of type *str* |

  Attributes Documentation

  - **BASIC: *str* = BASIC**

    Object **BASIC** of type *str*

  - **HASH: *str* = HASH**

    Object **HASH** of type *str*

Methods Summary

| | |
| --- | --- |
| *apply*(indices\[, result\]) | Convert a locally numbered list of integers to a global numbering. |
| *applyBlock*(indices\[, result\]) | Convert a local block numbering to a global block numbering. |
| *applyBlockInverse*(indices\[, mode\]) | Compute blocked local numbering from blocked global numbering. |
| *applyIS*(iset) | Create an index set with global numbering from a local numbering. |
| *applyInverse*(indices\[, mode\]) | Compute local numbering from global numbering. |
| *create*(indices\[, bsize, comm\]) | Create a local-to-global mapping. |
| *createIS*(iset) | Create a local-to-global mapping from an index set. |
| *createSF*(sf, start) | Create a local-to-global mapping from a star forest. |
| *destroy*() | Destroy the local-to-global mapping. |
| *getBlockIndices*() | Return the global indices for each local block. |
| *getBlockInfo*() | Determine the block indices shared with neighboring processes. |
| *getBlockSize*() | Return the block size of the local-to-global mapping. |
| *getIndices*() | Return the global indices for each local point in the mapping. |
| *getInfo*() | Determine the indices shared with neighboring processes. |
| *getSize*() | Return the local size of the local-to-global mapping. |
| *setFromOptions*() | Set mapping options from the options database. |
| *setType*(lgmap\_type) | Set the type of the local-to-global map. |
| *view*(\[viewer\]) | View the local-to-global mapping. |

Attributes Summary

| | |
| --- | --- |
| *block\_indices* | The global indices for each local block in the mapping. |
| *block\_info* | Mapping describing block indices shared with neighboring processes. |
| *block\_size* | The block size. |
| *indices* | The global indices for each local point in the mapping. |
| *info* | Mapping describing indices shared with neighboring processes. |
| *size* | The local size. |

Methods Documentation

- **apply(indices, result=None)**

  Convert a locally numbered list of integers to a global numbering.

  Not collective.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Input indices in local numbering.

    - •

      **result** (*ArrayInt \| None*) -- Array to write the global numbering to. If *None* then a new array will be allocated.

  - **Returns**

    Indices in global numbering. If **result** is not *None* then this is returned here.

  - **Return type**

    *ArrayInt*

  **SEE ALSO:**

  *LGMap.applyBlock*, *ISLocalToGlobalMappingApply*

  *Source code at petsc4py/PETSc/IS.pyx:1404*

- **applyBlock(indices, result=None)**

  Convert a local block numbering to a global block numbering.

  Not collective.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Input block indices in local numbering.

    - •

      **result** (*ArrayInt \| None*) -- Array to write the global numbering to. If *None* then a new array will be allocated.

  - **Returns**

    Block indices in global numbering. If **result** is not *None* then this is returned here.

  - **Return type**

    *ArrayInt*

  **SEE ALSO:**

  *LGMap.apply*, *ISLocalToGlobalMappingApplyBlock*

  *Source code at petsc4py/PETSc/IS.pyx:1441*

- **applyBlockInverse(indices, mode=None)**

  Compute blocked local numbering from blocked global numbering.

  Not collective.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Indices with a global block numbering.

    - •

      **mode** (*GLMapMode \| str \| None*) -- Flag indicating what to do with indices that have no local value, defaults to **"mask"**.

  - **Returns**

    Indices with a local block numbering.

  - **Return type**

    *ArrayInt*

  **SEE ALSO:**

  *ISGlobalToLocalMappingApplyBlock*

  *Source code at petsc4py/PETSc/IS.pyx:1542*

- **applyIS(iset)**

  Create an index set with global numbering from a local numbering.

  Collective.

  - **Parameters**

    **iset** (*IS*) -- Index set with local numbering.

  - **Returns**

    Index set with global numbering.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *ISLocalToGlobalMappingApplyIS*

  *Source code at petsc4py/PETSc/IS.pyx:1478*

- **applyInverse(indices, mode=None)**

  Compute local numbering from global numbering.

  Not collective.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Indices with a global numbering.

    - •

      **mode** (*GLMapMode \| str \| None*) -- Flag indicating what to do with indices that have no local value, defaults to **"mask"**.

  - **Returns**

    Indices with a local numbering.

  - **Return type**

    *ArrayInt*

  **SEE ALSO:**

  *ISGlobalToLocalMappingApply*

  *Source code at petsc4py/PETSc/IS.pyx:1503*

- **create(indices, bsize=None, comm=None)**

  Create a local-to-global mapping.

  Not collective.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Global index for each local element.

    - •

      **bsize** (*int \| None*) -- Block size, defaults to 1.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *ISLocalToGlobalMappingCreate*

  *Source code at petsc4py/PETSc/IS.pyx:1187*

- **createIS(iset)**

  Create a local-to-global mapping from an index set.

  Not collective.

  - **Parameters**

    **iset** (*IS*) -- Index set containing the global numbers for each local number.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *ISLocalToGlobalMappingCreateIS*

  *Source code at petsc4py/PETSc/IS.pyx:1222*

- **createSF(sf, start)**

  Create a local-to-global mapping from a star forest.

  Collective.

  - **Parameters**

    - •

      **sf** (*SF*) -- Star forest mapping contiguous local indices to (rank, offset).

    - •

      **start** (*int*) -- First global index on this process.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *ISLocalToGlobalMappingCreateSF*

  *Source code at petsc4py/PETSc/IS.pyx:1243*

- **destroy()**

  Destroy the local-to-global mapping.

  Not collective.

  **SEE ALSO:**

  *ISLocalToGlobalMappingDestroy*

  *Source code at petsc4py/PETSc/IS.pyx:1174*

  - **Return type**

    *Self*

- **getBlockIndices()**

  Return the global indices for each local block.

  Not collective.

  **SEE ALSO:**

  *ISLocalToGlobalMappingGetBlockIndices*

  *Source code at petsc4py/PETSc/IS.pyx:1318*

  - **Return type**

    *ArrayInt*

- **getBlockInfo()**

  Determine the block indices shared with neighboring processes.

  Collective.

  - **Returns**

    Mapping from neighboring processor number to an array of shared block indices (in local numbering).

  - **Return type**

    *dict*

  **SEE ALSO:**

  *ISLocalToGlobalMappingGetBlockInfo*

  *Source code at petsc4py/PETSc/IS.pyx:1373*

- **getBlockSize()**

  Return the block size of the local-to-global mapping.

  Not collective.

  **SEE ALSO:**

  *ISLocalToGlobalMappingGetBlockSize*

  *Source code at petsc4py/PETSc/IS.pyx:1280*

  - **Return type**

    *int*

- **getIndices()**

  Return the global indices for each local point in the mapping.

  Not collective.

  **SEE ALSO:**

  *ISLocalToGlobalMappingGetIndices*

  *Source code at petsc4py/PETSc/IS.pyx:1294*

  - **Return type**

    *ArrayInt*

- **getInfo()**

  Determine the indices shared with neighboring processes.

  Collective.

  - **Returns**

    Mapping from neighboring processor number to an array of shared indices (in local numbering).

  - **Return type**

    *dict*

  **SEE ALSO:**

  *ISLocalToGlobalMappingGetInfo*

  *Source code at petsc4py/PETSc/IS.pyx:1344*

- **getSize()**

  Return the local size of the local-to-global mapping.

  Not collective.

  **SEE ALSO:**

  *ISLocalToGlobalMappingGetSize*

  *Source code at petsc4py/PETSc/IS.pyx:1266*

  - **Return type**

    *int*

- **setFromOptions()**

  Set mapping options from the options database.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *ISLocalToGlobalMappingSetFromOptions*

  *Source code at petsc4py/PETSc/IS.pyx:1143*

  - **Return type**

    *None*

- **setType(lgmap\_type)**

  Set the type of the local-to-global map.

  Logically collective.

  - **Parameters**

    **lgmap\_type** (*Type \| str*) -- The type of the local-to-global mapping.

  - **Return type**

    *None*

  Notes

  Use **-islocaltoglobalmapping\_type** to set the type in the options database.

  **SEE ALSO:**

  *Working with PETSc options*, *ISLocalToGlobalMappingSetType*

  *Source code at petsc4py/PETSc/IS.pyx:1119*

- **view(viewer=None)**

  View the local-to-global mapping.

  Not collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- Viewer instance, defaults to an instance of *Viewer.Type.ASCII*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *ISLocalToGlobalMappingView*

  *Source code at petsc4py/PETSc/IS.pyx:1155*

Attributes Documentation

- **block\_indices**

  The global indices for each local block in the mapping.

  Not collective.

  **SEE ALSO:**

  *LGMap.getBlockIndices*, *ISLocalToGlobalMappingGetBlockIndices*

  *Source code at petsc4py/PETSc/IS.pyx:1621*

- **block\_info**

  Mapping describing block indices shared with neighboring processes.

  Collective.

  **SEE ALSO:**

  *LGMap.getBlockInfo*, *ISLocalToGlobalMappingGetBlockInfo*

  *Source code at petsc4py/PETSc/IS.pyx:1647*

- **block\_size**

  The block size.

  Not collective.

  **SEE ALSO:**

  *LGMap.getBlockSize*

  *Source code at petsc4py/PETSc/IS.pyx:1595*

- **indices**

  The global indices for each local point in the mapping.

  Not collective.

  **SEE ALSO:**

  *LGMap.getIndices*, *ISLocalToGlobalMappingGetIndices*

  *Source code at petsc4py/PETSc/IS.pyx:1608*

- **info**

  Mapping describing indices shared with neighboring processes.

  Collective.

  **SEE ALSO:**

  *LGMap.getInfo*, *ISLocalToGlobalMappingGetInfo*

  *Source code at petsc4py/PETSc/IS.pyx:1634*

- **size**

  The local size.

  Not collective.

  **SEE ALSO:**

  *LGMap.getSize*

  *Source code at petsc4py/PETSc/IS.pyx:1582*

### petsc4py.PETSc.Log

- **class petsc4py.PETSc.Log**

  Bases: *object*

  Logging support.

  Methods Summary

  | | |
  | --- | --- |
  | *Class*(name) | *Source code at petsc4py/PETSc/Log.pyx:25* |
  | *Event*(name\[, klass\]) | *Source code at petsc4py/PETSc/Log.pyx:39* |
  | *EventDecorator*(\[name, klass\]) | Decorate a function with a *PETSc* event. |
  | *Stage*(name) | *Source code at petsc4py/PETSc/Log.pyx:11* |
  | *addFlops*(flops) | Add floating point operations to the current event. |
  | *begin*() | Turn on logging of objects and events. |
  | *getCPUTime*() | Return the CPU time. |
  | *getFlops*() | Return the number of flops used on this processor since the program began. |
  | *getTime*() | Return the current time of day in seconds. |
  | *isActive*() | Return whether logging is currently in progress. |
  | *logFlops*(flops) | Add floating point operations to the current event. |
  | *view*(\[viewer\]) | Print the log. |

  Methods Documentation

  - **classmethod Class(name)**

    *Source code at petsc4py/PETSc/Log.pyx:25*

    - **Return type**

      *LogClass*

  - **classmethod Event(name, klass=None)**

    *Source code at petsc4py/PETSc/Log.pyx:39*

    - **Return type**

      *LogEvent*

  - **classmethod EventDecorator(name=None, klass=None)**

    Decorate a function with a *PETSc* event.

    *Source code at petsc4py/PETSc/Log.pyx:178*

    - **Return type**

      *Any*

  - **classmethod Stage(name)**

    *Source code at petsc4py/PETSc/Log.pyx:11*

    - **Return type**

      *LogStage*

  - **classmethod addFlops(flops)**

    Add floating point operations to the current event.

    Not collective.

    - **Parameters**

      **flops** (*float*) -- The number of flops to log.

    - **Return type**

      *None*

    Notes

    This method exists for backward compatibility.

    **SEE ALSO:**

    *logFlops*, *PetscLogFlops*

    *Source code at petsc4py/PETSc/Log.pyx:108*

  - **classmethod begin()**

    Turn on logging of objects and events.

    Collective.

    **SEE ALSO:**

    *PetscLogDefaultBegin*

    *Source code at petsc4py/PETSc/Log.pyx:55*

    - **Return type**

      *None*

  - **classmethod getCPUTime()**

    Return the CPU time.

    *Source code at petsc4py/PETSc/Log.pyx:171*

    - **Return type**

      *float*

  - **classmethod getFlops()**

    Return the number of flops used on this processor since the program began.

    Not collective.

    - **Returns**

      Number of floating point operations.

    - **Return type**

      *float*

    **SEE ALSO:**

    *PetscGetFlops*

    *Source code at petsc4py/PETSc/Log.pyx:131*

  - **classmethod getTime()**

    Return the current time of day in seconds.

    Collective.

    - **Returns**

      **wctime** -- Current time.

    - **Return type**

      *float*

    **SEE ALSO:**

    *PetscTime*

    *Source code at petsc4py/PETSc/Log.pyx:151*

  - **classmethod isActive()**

    Return whether logging is currently in progress.

    Not collective.

    **SEE ALSO:**

    *PetscLogIsActive*

    *Source code at petsc4py/PETSc/Log.pyx:193*

    - **Return type**

      *bool*

  - **classmethod logFlops(flops)**

    Add floating point operations to the current event.

    Not collective.

    - **Parameters**

      **flops** (*float*) -- The number of flops to log.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscLogFlops*

    *Source code at petsc4py/PETSc/Log.pyx:89*

  - **classmethod view(viewer=None)**

    Print the log.

    Collective.

    - **Parameters**

      **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

    - **Return type**

      *None*

    **SEE ALSO:**

    *Working with PETSc options*, *PetscLogView*

    *Source code at petsc4py/PETSc/Log.pyx:68*

### petsc4py.PETSc.LogClass

- **class petsc4py.PETSc.LogClass**

  Bases: *object*

  Logging support.

  Methods Summary

  | | |
  | --- | --- |
  | *activate*() | Activate the log class. |
  | *deactivate*() | Deactivate the log class. |
  | *getActive*() | Not implemented. |
  | *getName*() | Return the log class name. |
  | *setActive*(flag) | Activate or deactivate the log class. |

  Attributes Summary

  | | |
  | --- | --- |
  | *active* | Log class activation. |
  | *id* | The log class identifier. |
  | *name* | The log class name. |

  Methods Documentation

  - **activate()**

    Activate the log class.

    *Source code at petsc4py/PETSc/Log.pyx:431*

    - **Return type**

      *None*

  - **deactivate()**

    Deactivate the log class.

    *Source code at petsc4py/PETSc/Log.pyx:435*

    - **Return type**

      *None*

  - **getActive()**

    Not implemented.

    *Source code at petsc4py/PETSc/Log.pyx:439*

    - **Return type**

      *bool*

  - **getName()**

    Return the log class name.

    *Source code at petsc4py/PETSc/Log.pyx:414*

    - **Return type**

      *str*

  - **setActive(flag)**

    Activate or deactivate the log class.

    *Source code at petsc4py/PETSc/Log.pyx:444*

    - **Parameters**

      **flag** (*bool*)

    - **Return type**

      *None*

  Attributes Documentation

  - **active**

    Log class activation.

    *Source code at petsc4py/PETSc/Log.pyx:451*

  - **id**

    The log class identifier.

    *Source code at petsc4py/PETSc/Log.pyx:401*

  - **name**

    The log class name.

    *Source code at petsc4py/PETSc/Log.pyx:420*

### petsc4py.PETSc.LogEvent

- **class petsc4py.PETSc.LogEvent**

  Bases: *object*

  Logging support.

  Methods Summary

  | | |
  | --- | --- |
  | *activate*() | Indicate that the event should be logged. |
  | *begin*(\*objs) | Log the beginning of a user event. |
  | *deactivate*() | Indicate that the event should not be logged. |
  | *end*(\*objs) | Log the end of a user event. |
  | *getActive*() | Not implemented. |
  | *getActiveAll*() | Not implemented. |
  | *getName*() | The current event name. |
  | *getPerfInfo*(\[stage\]) | Get the performance information about the given event in the given event. |
  | *setActive*(flag) | Indicate whether or not the event should be logged. |
  | *setActiveAll*(flag) | Turn on logging of all events. |

  Attributes Summary

  | | |
  | --- | --- |
  | *active* | Event activation. |
  | *active\_all* | All events activation. |
  | *id* | The log event identifier. |
  | *name* | The current event name. |

  Methods Documentation

  - **activate()**

    Indicate that the event should be logged.

    Logically collective.

    **SEE ALSO:**

    *PetscLogEventActivate*

    *Source code at petsc4py/PETSc/Log.pyx:552*

    - **Return type**

      *None*

  - **begin(\*objs)**

    Log the beginning of a user event.

    Collective.

    - **Parameters**

      **\*objs** -- objects associated with the event

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscLogEventBegin*

    *Source code at petsc4py/PETSc/Log.pyx:496*

  - **deactivate()**

    Indicate that the event should not be logged.

    Logically collective.

    **SEE ALSO:**

    *PetscLogEventDeactivate*

    *Source code at petsc4py/PETSc/Log.pyx:564*

    - **Return type**

      *None*

  - **end(\*objs)**

    Log the end of a user event.

    Collective.

    - **Parameters**

      **\*objs** -- Objects associated with the event.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscLogEventEnd*

    *Source code at petsc4py/PETSc/Log.pyx:515*

  - **getActive()**

    Not implemented.

    *Source code at petsc4py/PETSc/Log.pyx:576*

    - **Return type**

      *bool*

  - **getActiveAll()**

    Not implemented.

    *Source code at petsc4py/PETSc/Log.pyx:609*

    - **Return type**

      *bool*

  - **getName()**

    The current event name.

    *Source code at petsc4py/PETSc/Log.pyx:535*

    - **Return type**

      *str*

  - **getPerfInfo(stage=None)**

    Get the performance information about the given event in the given event.

    Not collective.

    - **Parameters**

      **stage** (*int \| None*) -- The stage number.

    - **Returns**

      **info** -- This structure is filled with the performance information.

    - **Return type**

      *dict*

    **SEE ALSO:**

    *PetscLogEventGetPerfInfo*

    *Source code at petsc4py/PETSc/Log.pyx:643*

  - **setActive(flag)**

    Indicate whether or not the event should be logged.

    Logically collective.

    - **Parameters**

      **flag** (*bool*) -- Activate or deactivate the event.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscLogEventDeactivate*, *PetscLogEventActivate*

    *Source code at petsc4py/PETSc/Log.pyx:581*

  - **setActiveAll(flag)**

    Turn on logging of all events.

    Logically collective.

    - **Parameters**

      **flag** (*bool*) -- Activate (if *True*) or deactivate (if *False*) the logging of all events.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscLogEventSetActiveAll*

    *Source code at petsc4py/PETSc/Log.pyx:614*

  Attributes Documentation

  - **active**

    Event activation.

    *Source code at petsc4py/PETSc/Log.pyx:601*

  - **active\_all**

    All events activation.

    *Source code at petsc4py/PETSc/Log.pyx:633*

  - **id**

    The log event identifier.

    *Source code at petsc4py/PETSc/Log.pyx:478*

  - **name**

    The current event name.

    *Source code at petsc4py/PETSc/Log.pyx:541*

### petsc4py.PETSc.LogStage

- **class petsc4py.PETSc.LogStage**

  Bases: *object*

  Logging support for different stages.

  Methods Summary

  | | |
  | --- | --- |
  | *activate*() | Activate the stage. |
  | *deactivate*() | Deactivate the stage. |
  | *getActive*() | Check if the stage is activated. |
  | *getName*() | Return the current stage name. |
  | *getVisible*() | Return whether the stage is visible. |
  | *pop*() | Pop a stage from the logging stack. |
  | *push*() | Push a stage on the logging stack. |
  | *setActive*(flag) | Activate or deactivate the current stage. |
  | *setVisible*(flag) | Set the visibility of the stage. |

  Attributes Summary

  | | |
  | --- | --- |
  | *active* | Whether the stage is activate. |
  | *id* | The log stage identifier. |
  | *name* | The current stage name. |
  | *visible* | Whether the stage is visible. |

  Methods Documentation

  - **activate()**

    Activate the stage.

    Logically collective.

    **SEE ALSO:**

    *PetscLogStageSetActive*

    *Source code at petsc4py/PETSc/Log.pyx:279*

    - **Return type**

      *None*

  - **deactivate()**

    Deactivate the stage.

    Logically collective.

    **SEE ALSO:**

    *PetscLogStageSetActive*

    *Source code at petsc4py/PETSc/Log.pyx:291*

    - **Return type**

      *None*

  - **getActive()**

    Check if the stage is activated.

    Not collective.

    **SEE ALSO:**

    *PetscLogStageGetActive*

    *Source code at petsc4py/PETSc/Log.pyx:303*

    - **Return type**

      *bool*

  - **getName()**

    Return the current stage name.

    *Source code at petsc4py/PETSc/Log.pyx:262*

    - **Return type**

      *str*

  - **getVisible()**

    Return whether the stage is visible.

    Not collective.

    **SEE ALSO:**

    *LogStage.setVisible*, *PetscLogStageSetVisible*

    *Source code at petsc4py/PETSc/Log.pyx:341*

    - **Return type**

      *bool*

  - **pop()**

    Pop a stage from the logging stack.

    Logically collective.

    **SEE ALSO:**

    *LogStage.push*, *PetscLogStagePop*

    *Source code at petsc4py/PETSc/Log.pyx:247*

    - **Return type**

      *None*

  - **push()**

    Push a stage on the logging stack.

    Logically collective.

    **SEE ALSO:**

    *LogStage.pop*, *PetscLogStagePush*

    *Source code at petsc4py/PETSc/Log.pyx:235*

    - **Return type**

      *None*

  - **setActive(flag)**

    Activate or deactivate the current stage.

    Logically collective.

    **SEE ALSO:**

    *PetscLogStageSetActive*

    *Source code at petsc4py/PETSc/Log.pyx:317*

    - **Parameters**

      **flag** (*bool*)

    - **Return type**

      *None*

  - **setVisible(flag)**

    Set the visibility of the stage.

    Logically collective.

    - **Parameters**

      **flag** (*bool*) -- *True* to make the stage visible, *False* otherwise.

    - **Return type**

      *None*

    **SEE ALSO:**

    *LogStage.getVisible*, *PetscLogStageSetVisible*

    *Source code at petsc4py/PETSc/Log.pyx:355*

  Attributes Documentation

  - **active**

    Whether the stage is activate.

    *Source code at petsc4py/PETSc/Log.pyx:331*

  - **id**

    The log stage identifier.

    *Source code at petsc4py/PETSc/Log.pyx:215*

  - **name**

    The current stage name.

    *Source code at petsc4py/PETSc/Log.pyx:268*

  - **visible**

    Whether the stage is visible.

    *Source code at petsc4py/PETSc/Log.pyx:374*

### petsc4py.PETSc.Mat

- **class petsc4py.PETSc.Mat**

  Bases: *Object*

  Matrix object.

  Mat is described in the *PETSc manual*.

  **SEE ALSO:**

  *Mat*

  Enumerations

  | | |
  | --- | --- |
  | *AssemblyType* | Matrix assembly type. |
  | *DuplicateOption* | Matrix duplicate option. |
  | *FactorShiftType* | Factored matrix shift type. |
  | *InfoType* | Matrix info type. |
  | *Option* | Matrix option. |
  | *OrderingType* | Factored matrix ordering type. |
  | *SORType* | Matrix SOR type. |
  | *SolverType* | Factored matrix solver type. |
  | *Stencil* | Associate structured grid coordinates with matrix indices. |
  | *Structure* | Matrix modification structure. |
  | *Type* | Matrix type. |

### petsc4py.PETSc.Mat.AssemblyType

- **class petsc4py.PETSc.Mat.AssemblyType**

  Bases: *object*

  Matrix assembly type.

  **SEE ALSO:**

  *MatAssemblyType*

  Attributes Summary

  | | |
  | --- | --- |
  | *FINAL* | Constant **FINAL** of type *int* |
  | *FINAL\_ASSEMBLY* | Constant **FINAL\_ASSEMBLY** of type *int* |
  | *FLUSH* | Constant **FLUSH** of type *int* |
  | *FLUSH\_ASSEMBLY* | Constant **FLUSH\_ASSEMBLY** of type *int* |

  Attributes Documentation

  - **FINAL: *int* = FINAL**

    Constant **FINAL** of type *int*

  - **FINAL\_ASSEMBLY: *int* = FINAL\_ASSEMBLY**

    Constant **FINAL\_ASSEMBLY** of type *int*

  - **FLUSH: *int* = FLUSH**

    Constant **FLUSH** of type *int*

  - **FLUSH\_ASSEMBLY: *int* = FLUSH\_ASSEMBLY**

    Constant **FLUSH\_ASSEMBLY** of type *int*

### petsc4py.PETSc.Mat.DuplicateOption

- **class petsc4py.PETSc.Mat.DuplicateOption**

  Bases: *object*

  Matrix duplicate option.

  **SEE ALSO:**

  *MatDuplicateOption*

  Attributes Summary

  | | |
  | --- | --- |
  | *COPY\_VALUES* | Constant **COPY\_VALUES** of type *int* |
  | *DO\_NOT\_COPY\_VALUES* | Constant **DO\_NOT\_COPY\_VALUES** of type *int* |
  | *SHARE\_NONZERO\_PATTERN* | Constant **SHARE\_NONZERO\_PATTERN** of type *int* |

  Attributes Documentation

  - **COPY\_VALUES: *int* = COPY\_VALUES**

    Constant **COPY\_VALUES** of type *int*

  - **DO\_NOT\_COPY\_VALUES: *int* = DO\_NOT\_COPY\_VALUES**

    Constant **DO\_NOT\_COPY\_VALUES** of type *int*

  - **SHARE\_NONZERO\_PATTERN: *int* = SHARE\_NONZERO\_PATTERN**

    Constant **SHARE\_NONZERO\_PATTERN** of type *int*

### petsc4py.PETSc.Mat.FactorShiftType

- **class petsc4py.PETSc.Mat.FactorShiftType**

  Bases: *object*

  Factored matrix shift type.

  **SEE ALSO:**

  *MatFactorShiftType*

  Attributes Summary

  | | |
  | --- | --- |
  | *INBLOCKS* | Constant **INBLOCKS** of type *int* |
  | *NONE* | Constant **NONE** of type *int* |
  | *NONZERO* | Constant **NONZERO** of type *int* |
  | *NZ* | Constant **NZ** of type *int* |
  | *PD* | Constant **PD** of type *int* |
  | *POSITIVE\_DEFINITE* | Constant **POSITIVE\_DEFINITE** of type *int* |

  Attributes Documentation

  - **INBLOCKS: *int* = INBLOCKS**

    Constant **INBLOCKS** of type *int*

  - **NONE: *int* = NONE**

    Constant **NONE** of type *int*

  - **NONZERO: *int* = NONZERO**

    Constant **NONZERO** of type *int*

  - **NZ: *int* = NZ**

    Constant **NZ** of type *int*

  - **PD: *int* = PD**

    Constant **PD** of type *int*

  - **POSITIVE\_DEFINITE: *int* = POSITIVE\_DEFINITE**

    Constant **POSITIVE\_DEFINITE** of type *int*

### petsc4py.PETSc.Mat.InfoType

- **class petsc4py.PETSc.Mat.InfoType**

  Bases: *object*

  Matrix info type.

  Attributes Summary

  | | |
  | --- | --- |
  | *GLOBAL\_MAX* | Constant **GLOBAL\_MAX** of type *int* |
  | *GLOBAL\_SUM* | Constant **GLOBAL\_SUM** of type *int* |
  | *LOCAL* | Constant **LOCAL** of type *int* |

  Attributes Documentation

  - **GLOBAL\_MAX: *int* = GLOBAL\_MAX**

    Constant **GLOBAL\_MAX** of type *int*

  - **GLOBAL\_SUM: *int* = GLOBAL\_SUM**

    Constant **GLOBAL\_SUM** of type *int*

  - **LOCAL: *int* = LOCAL**

    Constant **LOCAL** of type *int*

### petsc4py.PETSc.Mat.Option

- **class petsc4py.PETSc.Mat.Option**

  Bases: *object*

  Matrix option.

  **SEE ALSO:**

  *MatOption*

  Attributes Summary

  | | |
  | --- | --- |
  | *ERROR\_LOWER\_TRIANGULAR* | Constant **ERROR\_LOWER\_TRIANGULAR** of type *int* |
  | *FORCE\_DIAGONAL\_ENTRIES* | Constant **FORCE\_DIAGONAL\_ENTRIES** of type *int* |
  | *GETROW\_UPPERTRIANGULAR* | Constant **GETROW\_UPPERTRIANGULAR** of type *int* |
  | *HERMITIAN* | Constant **HERMITIAN** of type *int* |
  | *IGNORE\_LOWER\_TRIANGULAR* | Constant **IGNORE\_LOWER\_TRIANGULAR** of type *int* |
  | *IGNORE\_OFF\_PROC\_ENTRIES* | Constant **IGNORE\_OFF\_PROC\_ENTRIES** of type *int* |
  | *IGNORE\_ZERO\_ENTRIES* | Constant **IGNORE\_ZERO\_ENTRIES** of type *int* |
  | *KEEP\_NONZERO\_PATTERN* | Constant **KEEP\_NONZERO\_PATTERN** of type *int* |
  | *NEW\_NONZERO\_ALLOCATION\_ERR* | Constant **NEW\_NONZERO\_ALLOCATION\_ERR** of type *int* |
  | *NEW\_NONZERO\_LOCATIONS* | Constant **NEW\_NONZERO\_LOCATIONS** of type *int* |
  | *NEW\_NONZERO\_LOCATION\_ERR* | Constant **NEW\_NONZERO\_LOCATION\_ERR** of type *int* |
  | *NO\_OFF\_PROC\_ENTRIES* | Constant **NO\_OFF\_PROC\_ENTRIES** of type *int* |
  | *NO\_OFF\_PROC\_ZERO\_ROWS* | Constant **NO\_OFF\_PROC\_ZERO\_ROWS** of type *int* |
  | *OPTION\_MAX* | Constant **OPTION\_MAX** of type *int* |
  | *OPTION\_MIN* | Constant **OPTION\_MIN** of type *int* |
  | *ROW\_ORIENTED* | Constant **ROW\_ORIENTED** of type *int* |
  | *SORTED\_FULL* | Constant **SORTED\_FULL** of type *int* |
  | *SPD* | Constant **SPD** of type *int* |
  | *STRUCTURALLY\_SYMMETRIC* | Constant **STRUCTURALLY\_SYMMETRIC** of type *int* |
  | *STRUCTURE\_ONLY* | Constant **STRUCTURE\_ONLY** of type *int* |
  | *SUBMAT\_SINGLEIS* | Constant **SUBMAT\_SINGLEIS** of type *int* |
  | *SUBSET\_OFF\_PROC\_ENTRIES* | Constant **SUBSET\_OFF\_PROC\_ENTRIES** of type *int* |
  | *SYMMETRIC* | Constant **SYMMETRIC** of type *int* |
  | *SYMMETRY\_ETERNAL* | Constant **SYMMETRY\_ETERNAL** of type *int* |
  | *UNUSED\_NONZERO\_LOCATION\_ERR* | Constant **UNUSED\_NONZERO\_LOCATION\_ERR** of type *int* |
  | *USE\_HASH\_TABLE* | Constant **USE\_HASH\_TABLE** of type *int* |
  | *USE\_INODES* | Constant **USE\_INODES** of type *int* |

  Attributes Documentation

  - **ERROR\_LOWER\_TRIANGULAR: *int* = ERROR\_LOWER\_TRIANGULAR**

    Constant **ERROR\_LOWER\_TRIANGULAR** of type *int*

  - **FORCE\_DIAGONAL\_ENTRIES: *int* = FORCE\_DIAGONAL\_ENTRIES**

    Constant **FORCE\_DIAGONAL\_ENTRIES** of type *int*

  - **GETROW\_UPPERTRIANGULAR: *int* = GETROW\_UPPERTRIANGULAR**

    Constant **GETROW\_UPPERTRIANGULAR** of type *int*

  - **HERMITIAN: *int* = HERMITIAN**

    Constant **HERMITIAN** of type *int*

  - **IGNORE\_LOWER\_TRIANGULAR: *int* = IGNORE\_LOWER\_TRIANGULAR**

    Constant **IGNORE\_LOWER\_TRIANGULAR** of type *int*

  - **IGNORE\_OFF\_PROC\_ENTRIES: *int* = IGNORE\_OFF\_PROC\_ENTRIES**

    Constant **IGNORE\_OFF\_PROC\_ENTRIES** of type *int*

  - **IGNORE\_ZERO\_ENTRIES: *int* = IGNORE\_ZERO\_ENTRIES**

    Constant **IGNORE\_ZERO\_ENTRIES** of type *int*

  - **KEEP\_NONZERO\_PATTERN: *int* = KEEP\_NONZERO\_PATTERN**

    Constant **KEEP\_NONZERO\_PATTERN** of type *int*

  - **NEW\_NONZERO\_ALLOCATION\_ERR: *int* = NEW\_NONZERO\_ALLOCATION\_ERR**

    Constant **NEW\_NONZERO\_ALLOCATION\_ERR** of type *int*

  - **NEW\_NONZERO\_LOCATIONS: *int* = NEW\_NONZERO\_LOCATIONS**

    Constant **NEW\_NONZERO\_LOCATIONS** of type *int*

  - **NEW\_NONZERO\_LOCATION\_ERR: *int* = NEW\_NONZERO\_LOCATION\_ERR**

    Constant **NEW\_NONZERO\_LOCATION\_ERR** of type *int*

  - **NO\_OFF\_PROC\_ENTRIES: *int* = NO\_OFF\_PROC\_ENTRIES**

    Constant **NO\_OFF\_PROC\_ENTRIES** of type *int*

  - **NO\_OFF\_PROC\_ZERO\_ROWS: *int* = NO\_OFF\_PROC\_ZERO\_ROWS**

    Constant **NO\_OFF\_PROC\_ZERO\_ROWS** of type *int*

  - **OPTION\_MAX: *int* = OPTION\_MAX**

    Constant **OPTION\_MAX** of type *int*

  - **OPTION\_MIN: *int* = OPTION\_MIN**

    Constant **OPTION\_MIN** of type *int*

  - **ROW\_ORIENTED: *int* = ROW\_ORIENTED**

    Constant **ROW\_ORIENTED** of type *int*

  - **SORTED\_FULL: *int* = SORTED\_FULL**

    Constant **SORTED\_FULL** of type *int*

  - **SPD: *int* = SPD**

    Constant **SPD** of type *int*

  - **STRUCTURALLY\_SYMMETRIC: *int* = STRUCTURALLY\_SYMMETRIC**

    Constant **STRUCTURALLY\_SYMMETRIC** of type *int*

  - **STRUCTURE\_ONLY: *int* = STRUCTURE\_ONLY**

    Constant **STRUCTURE\_ONLY** of type *int*

  - **SUBMAT\_SINGLEIS: *int* = SUBMAT\_SINGLEIS**

    Constant **SUBMAT\_SINGLEIS** of type *int*

  - **SUBSET\_OFF\_PROC\_ENTRIES: *int* = SUBSET\_OFF\_PROC\_ENTRIES**

    Constant **SUBSET\_OFF\_PROC\_ENTRIES** of type *int*

  - **SYMMETRIC: *int* = SYMMETRIC**

    Constant **SYMMETRIC** of type *int*

  - **SYMMETRY\_ETERNAL: *int* = SYMMETRY\_ETERNAL**

    Constant **SYMMETRY\_ETERNAL** of type *int*

  - **UNUSED\_NONZERO\_LOCATION\_ERR: *int* = UNUSED\_NONZERO\_LOCATION\_ERR**

    Constant **UNUSED\_NONZERO\_LOCATION\_ERR** of type *int*

  - **USE\_HASH\_TABLE: *int* = USE\_HASH\_TABLE**

    Constant **USE\_HASH\_TABLE** of type *int*

  - **USE\_INODES: *int* = USE\_INODES**

    Constant **USE\_INODES** of type *int*

### petsc4py.PETSc.Mat.OrderingType

- **class petsc4py.PETSc.Mat.OrderingType**

  Bases: *object*

  Factored matrix ordering type.

  **SEE ALSO:**

  *MatOrderingType*

  Attributes Summary

  | | |
  | --- | --- |
  | *AMD* | Object **AMD** of type *str* |
  | *METISND* | Object **METISND** of type *str* |
  | *NATURAL* | Object **NATURAL** of type *str* |
  | *ND* | Object **ND** of type *str* |
  | *OWD* | Object **OWD** of type *str* |
  | *QMD* | Object **QMD** of type *str* |
  | *RCM* | Object **RCM** of type *str* |
  | *ROWLENGTH* | Object **ROWLENGTH** of type *str* |
  | *SPECTRAL* | Object **SPECTRAL** of type *str* |
  | *WBM* | Object **WBM** of type *str* |

  Attributes Documentation

  - **AMD: *str* = AMD**

    Object **AMD** of type *str*

  - **METISND: *str* = METISND**

    Object **METISND** of type *str*

  - **NATURAL: *str* = NATURAL**

    Object **NATURAL** of type *str*

  - **ND: *str* = ND**

    Object **ND** of type *str*

  - **OWD: *str* = OWD**

    Object **OWD** of type *str*

  - **QMD: *str* = QMD**

    Object **QMD** of type *str*

  - **RCM: *str* = RCM**

    Object **RCM** of type *str*

  - **ROWLENGTH: *str* = ROWLENGTH**

    Object **ROWLENGTH** of type *str*

  - **SPECTRAL: *str* = SPECTRAL**

    Object **SPECTRAL** of type *str*

  - **WBM: *str* = WBM**

    Object **WBM** of type *str*

### petsc4py.PETSc.Mat.SORType

- **class petsc4py.PETSc.Mat.SORType**

  Bases: *object*

  Matrix SOR type.

  **SEE ALSO:**

  *MatSORType*

  Attributes Summary

  | | |
  | --- | --- |
  | *APPLY\_LOWER* | Constant **APPLY\_LOWER** of type *int* |
  | *APPLY\_UPPER* | Constant **APPLY\_UPPER** of type *int* |
  | *BACKWARD\_SWEEP* | Constant **BACKWARD\_SWEEP** of type *int* |
  | *EISENSTAT* | Constant **EISENSTAT** of type *int* |
  | *FORWARD\_SWEEP* | Constant **FORWARD\_SWEEP** of type *int* |
  | *LOCAL\_BACKWARD\_SWEEP* | Constant **LOCAL\_BACKWARD\_SWEEP** of type *int* |
  | *LOCAL\_FORWARD\_SWEEP* | Constant **LOCAL\_FORWARD\_SWEEP** of type *int* |
  | *LOCAL\_SYMMETRIC\_SWEEP* | Constant **LOCAL\_SYMMETRIC\_SWEEP** of type *int* |
  | *SYMMETRY\_SWEEP* | Constant **SYMMETRY\_SWEEP** of type *int* |
  | *ZERO\_INITIAL\_GUESS* | Constant **ZERO\_INITIAL\_GUESS** of type *int* |

  Attributes Documentation

  - **APPLY\_LOWER: *int* = APPLY\_LOWER**

    Constant **APPLY\_LOWER** of type *int*

  - **APPLY\_UPPER: *int* = APPLY\_UPPER**

    Constant **APPLY\_UPPER** of type *int*

  - **BACKWARD\_SWEEP: *int* = BACKWARD\_SWEEP**

    Constant **BACKWARD\_SWEEP** of type *int*

  - **EISENSTAT: *int* = EISENSTAT**

    Constant **EISENSTAT** of type *int*

  - **FORWARD\_SWEEP: *int* = FORWARD\_SWEEP**

    Constant **FORWARD\_SWEEP** of type *int*

  - **LOCAL\_BACKWARD\_SWEEP: *int* = LOCAL\_BACKWARD\_SWEEP**

    Constant **LOCAL\_BACKWARD\_SWEEP** of type *int*

  - **LOCAL\_FORWARD\_SWEEP: *int* = LOCAL\_FORWARD\_SWEEP**

    Constant **LOCAL\_FORWARD\_SWEEP** of type *int*

  - **LOCAL\_SYMMETRIC\_SWEEP: *int* = LOCAL\_SYMMETRIC\_SWEEP**

    Constant **LOCAL\_SYMMETRIC\_SWEEP** of type *int*

  - **SYMMETRY\_SWEEP: *int* = SYMMETRY\_SWEEP**

    Constant **SYMMETRY\_SWEEP** of type *int*

  - **ZERO\_INITIAL\_GUESS: *int* = ZERO\_INITIAL\_GUESS**

    Constant **ZERO\_INITIAL\_GUESS** of type *int*

### petsc4py.PETSc.Mat.SolverType

- **class petsc4py.PETSc.Mat.SolverType**

  Bases: *object*

  Factored matrix solver type.

  **SEE ALSO:**

  *MatSolverType*

  Attributes Summary

  | | |
  | --- | --- |
  | *BAS* | Object **BAS** of type *str* |
  | *CHOLMOD* | Object **CHOLMOD** of type *str* |
  | *CUDA* | Object **CUDA** of type *str* |
  | *CUSPARSE* | Object **CUSPARSE** of type *str* |
  | *ELEMENTAL* | Object **ELEMENTAL** of type *str* |
  | *ESSL* | Object **ESSL** of type *str* |
  | *KLU* | Object **KLU** of type *str* |
  | *LUSOL* | Object **LUSOL** of type *str* |
  | *MATLAB* | Object **MATLAB** of type *str* |
  | *MKL\_CPARDISO* | Object **MKL\_CPARDISO** of type *str* |
  | *MKL\_PARDISO* | Object **MKL\_PARDISO** of type *str* |
  | *MUMPS* | Object **MUMPS** of type *str* |
  | *PASTIX* | Object **PASTIX** of type *str* |
  | *PETSC* | Object **PETSC** of type *str* |
  | *SCALAPACK* | Object **SCALAPACK** of type *str* |
  | *SPQR* | Object **SPQR** of type *str* |
  | *STRUMPACK* | Object **STRUMPACK** of type *str* |
  | *SUPERLU* | Object **SUPERLU** of type *str* |
  | *SUPERLU\_DIST* | Object **SUPERLU\_DIST** of type *str* |
  | *UMFPACK* | Object **UMFPACK** of type *str* |

  Attributes Documentation

  - **BAS: *str* = BAS**

    Object **BAS** of type *str*

  - **CHOLMOD: *str* = CHOLMOD**

    Object **CHOLMOD** of type *str*

  - **CUDA: *str* = CUDA**

    Object **CUDA** of type *str*

  - **CUSPARSE: *str* = CUSPARSE**

    Object **CUSPARSE** of type *str*

  - **ELEMENTAL: *str* = ELEMENTAL**

    Object **ELEMENTAL** of type *str*

  - **ESSL: *str* = ESSL**

    Object **ESSL** of type *str*

  - **KLU: *str* = KLU**

    Object **KLU** of type *str*

  - **LUSOL: *str* = LUSOL**

    Object **LUSOL** of type *str*

  - **MATLAB: *str* = MATLAB**

    Object **MATLAB** of type *str*

  - **MKL\_CPARDISO: *str* = MKL\_CPARDISO**

    Object **MKL\_CPARDISO** of type *str*

  - **MKL\_PARDISO: *str* = MKL\_PARDISO**

    Object **MKL\_PARDISO** of type *str*

  - **MUMPS: *str* = MUMPS**

    Object **MUMPS** of type *str*

  - **PASTIX: *str* = PASTIX**

    Object **PASTIX** of type *str*

  - **PETSC: *str* = PETSC**

    Object **PETSC** of type *str*

  - **SCALAPACK: *str* = SCALAPACK**

    Object **SCALAPACK** of type *str*

  - **SPQR: *str* = SPQR**

    Object **SPQR** of type *str*

  - **STRUMPACK: *str* = STRUMPACK**

    Object **STRUMPACK** of type *str*

  - **SUPERLU: *str* = SUPERLU**

    Object **SUPERLU** of type *str*

  - **SUPERLU\_DIST: *str* = SUPERLU\_DIST**

    Object **SUPERLU\_DIST** of type *str*

  - **UMFPACK: *str* = UMFPACK**

    Object **UMFPACK** of type *str*

### petsc4py.PETSc.Mat.Stencil

- **class petsc4py.PETSc.Mat.Stencil**

  Bases: *object*

  Associate structured grid coordinates with matrix indices.

  **SEE ALSO:**

  *MatStencil*

  Attributes Summary

  | | |
  | --- | --- |
  | *c* | Field component. |
  | *field* | Field component. |
  | *i* | First logical grid coordinate. |
  | *index* | Logical grid coordinates **(i, j, k)**. |
  | *j* | Second logical grid coordinate. |
  | *k* | Third logical grid coordinate. |

  Attributes Documentation

  - **c**

    Field component.

    *Source code at petsc4py/PETSc/Mat.pyx:317*

  - **field**

    Field component.

    *Source code at petsc4py/PETSc/Mat.pyx:336*

  - **i**

    First logical grid coordinate.

    *Source code at petsc4py/PETSc/Mat.pyx:293*

  - **index**

    Logical grid coordinates **(i, j, k)**.

    *Source code at petsc4py/PETSc/Mat.pyx:325*

  - **j**

    Second logical grid coordinate.

    *Source code at petsc4py/PETSc/Mat.pyx:301*

  - **k**

    Third logical grid coordinate.

    *Source code at petsc4py/PETSc/Mat.pyx:309*

### petsc4py.PETSc.Mat.Structure

- **class petsc4py.PETSc.Mat.Structure**

  Bases: *object*

  Matrix modification structure.

  **SEE ALSO:**

  *MatStructure*

  Attributes Summary

  | | |
  | --- | --- |
  | *DIFFERENT* | Constant **DIFFERENT** of type *int* |
  | *DIFFERENT\_NONZERO\_PATTERN* | Constant **DIFFERENT\_NONZERO\_PATTERN** of type *int* |
  | *DIFFERENT\_NZ* | Constant **DIFFERENT\_NZ** of type *int* |
  | *SAME* | Constant **SAME** of type *int* |
  | *SAME\_NONZERO\_PATTERN* | Constant **SAME\_NONZERO\_PATTERN** of type *int* |
  | *SAME\_NZ* | Constant **SAME\_NZ** of type *int* |
  | *SUBSET* | Constant **SUBSET** of type *int* |
  | *SUBSET\_NONZERO\_PATTERN* | Constant **SUBSET\_NONZERO\_PATTERN** of type *int* |
  | *SUBSET\_NZ* | Constant **SUBSET\_NZ** of type *int* |
  | *UNKNOWN* | Constant **UNKNOWN** of type *int* |
  | *UNKNOWN\_NONZERO\_PATTERN* | Constant **UNKNOWN\_NONZERO\_PATTERN** of type *int* |
  | *UNKNOWN\_NZ* | Constant **UNKNOWN\_NZ** of type *int* |

  Attributes Documentation

  - **DIFFERENT: *int* = DIFFERENT**

    Constant **DIFFERENT** of type *int*

  - **DIFFERENT\_NONZERO\_PATTERN: *int* = DIFFERENT\_NONZERO\_PATTERN**

    Constant **DIFFERENT\_NONZERO\_PATTERN** of type *int*

  - **DIFFERENT\_NZ: *int* = DIFFERENT\_NZ**

    Constant **DIFFERENT\_NZ** of type *int*

  - **SAME: *int* = SAME**

    Constant **SAME** of type *int*

  - **SAME\_NONZERO\_PATTERN: *int* = SAME\_NONZERO\_PATTERN**

    Constant **SAME\_NONZERO\_PATTERN** of type *int*

  - **SAME\_NZ: *int* = SAME\_NZ**

    Constant **SAME\_NZ** of type *int*

  - **SUBSET: *int* = SUBSET**

    Constant **SUBSET** of type *int*

  - **SUBSET\_NONZERO\_PATTERN: *int* = SUBSET\_NONZERO\_PATTERN**

    Constant **SUBSET\_NONZERO\_PATTERN** of type *int*

  - **SUBSET\_NZ: *int* = SUBSET\_NZ**

    Constant **SUBSET\_NZ** of type *int*

  - **UNKNOWN: *int* = UNKNOWN**

    Constant **UNKNOWN** of type *int*

  - **UNKNOWN\_NONZERO\_PATTERN: *int* = UNKNOWN\_NONZERO\_PATTERN**

    Constant **UNKNOWN\_NONZERO\_PATTERN** of type *int*

  - **UNKNOWN\_NZ: *int* = UNKNOWN\_NZ**

    Constant **UNKNOWN\_NZ** of type *int*

### petsc4py.PETSc.Mat.Type

- **class petsc4py.PETSc.Mat.Type**

  Bases: *object*

  Matrix type.

  **SEE ALSO:**

  *MatType*

  Attributes Summary

  | | |
  | --- | --- |
  | *AIJ* | Object **AIJ** of type *str* |
  | *AIJCRL* | Object **AIJCRL** of type *str* |
  | *AIJCUSPARSE* | Object **AIJCUSPARSE** of type *str* |
  | *AIJMKL* | Object **AIJMKL** of type *str* |
  | *AIJPERM* | Object **AIJPERM** of type *str* |
  | *AIJSELL* | Object **AIJSELL** of type *str* |
  | *AIJVIENNACL* | Object **AIJVIENNACL** of type *str* |
  | *BAIJ* | Object **BAIJ** of type *str* |
  | *BAIJMKL* | Object **BAIJMKL** of type *str* |
  | *BLOCKMAT* | Object **BLOCKMAT** of type *str* |
  | *COMPOSITE* | Object **COMPOSITE** of type *str* |
  | *CONSTANTDIAGONAL* | Object **CONSTANTDIAGONAL** of type *str* |
  | *DENSE* | Object **DENSE** of type *str* |
  | *DENSECUDA* | Object **DENSECUDA** of type *str* |
  | *DIAGONAL* | Object **DIAGONAL** of type *str* |
  | *DUMMY* | Object **DUMMY** of type *str* |
  | *ELEMENTAL* | Object **ELEMENTAL** of type *str* |
  | *FFT* | Object **FFT** of type *str* |
  | *FFTW* | Object **FFTW** of type *str* |
  | *H2OPUS* | Object **H2OPUS** of type *str* |
  | *HERMITIANTRANSPOSE* | Object **HERMITIANTRANSPOSE** of type *str* |
  | *HYPRE* | Object **HYPRE** of type *str* |
  | *HYPRESSTRUCT* | Object **HYPRESSTRUCT** of type *str* |
  | *HYPRESTRUCT* | Object **HYPRESTRUCT** of type *str* |
  | *IS* | Object **IS** of type *str* |
  | *KAIJ* | Object **KAIJ** of type *str* |
  | *LMVM* | Object **LMVM** of type *str* |
  | *LMVMBADBROYDEN* | Object **LMVMBADBROYDEN** of type *str* |
  | *LMVMBFGS* | Object **LMVMBFGS** of type *str* |
  | *LMVMBROYDEN* | Object **LMVMBROYDEN** of type *str* |
  | *LMVMDBFGS* | Object **LMVMDBFGS** of type *str* |
  | *LMVMDDFP* | Object **LMVMDDFP** of type *str* |
  | *LMVMDFP* | Object **LMVMDFP** of type *str* |
  | *LMVMDIAGBBROYDEN* | Object **LMVMDIAGBBROYDEN** of type *str* |
  | *LMVMDQN* | Object **LMVMDQN** of type *str* |
  | *LMVMSR1* | Object **LMVMSR1** of type *str* |
  | *LMVMSYMBADBROYDEN* | Object **LMVMSYMBADBROYDEN** of type *str* |
  | *LMVMSYMBROYDEN* | Object **LMVMSYMBROYDEN** of type *str* |
  | *LOCALREF* | Object **LOCALREF** of type *str* |
  | *LRC* | Object **LRC** of type *str* |
  | *MAIJ* | Object **MAIJ** of type *str* |
  | *MFFD* | Object **MFFD** of type *str* |
  | *MPIADJ* | Object **MPIADJ** of type *str* |
  | *MPIAIJ* | Object **MPIAIJ** of type *str* |
  | *MPIAIJCRL* | Object **MPIAIJCRL** of type *str* |
  | *MPIAIJCUSPARSE* | Object **MPIAIJCUSPARSE** of type *str* |
  | *MPIAIJMKL* | Object **MPIAIJMKL** of type *str* |
  | *MPIAIJPERM* | Object **MPIAIJPERM** of type *str* |
  | *MPIAIJSELL* | Object **MPIAIJSELL** of type *str* |
  | *MPIAIJVIENNACL* | Object **MPIAIJVIENNACL** of type *str* |
  | *MPIBAIJ* | Object **MPIBAIJ** of type *str* |
  | *MPIBAIJMKL* | Object **MPIBAIJMKL** of type *str* |
  | *MPIDENSE* | Object **MPIDENSE** of type *str* |
  | *MPIDENSECUDA* | Object **MPIDENSECUDA** of type *str* |
  | *MPIKAIJ* | Object **MPIKAIJ** of type *str* |
  | *MPIMAIJ* | Object **MPIMAIJ** of type *str* |
  | *MPISBAIJ* | Object **MPISBAIJ** of type *str* |
  | *MPISELL* | Object **MPISELL** of type *str* |
  | *NEST* | Object **NEST** of type *str* |
  | *NORMAL* | Object **NORMAL** of type *str* |
  | *NORMALHERMITIAN* | Object **NORMALHERMITIAN** of type *str* |
  | *PREALLOCATOR* | Object **PREALLOCATOR** of type *str* |
  | *PYTHON* | Object **PYTHON** of type *str* |
  | *SAME* | Object **SAME** of type *str* |
  | *SBAIJ* | Object **SBAIJ** of type *str* |
  | *SCATTER* | Object **SCATTER** of type *str* |
  | *SCHURCOMPLEMENT* | Object **SCHURCOMPLEMENT** of type *str* |
  | *SELL* | Object **SELL** of type *str* |
  | *SEQAIJ* | Object **SEQAIJ** of type *str* |
  | *SEQAIJCRL* | Object **SEQAIJCRL** of type *str* |
  | *SEQAIJCUSPARSE* | Object **SEQAIJCUSPARSE** of type *str* |
  | *SEQAIJMKL* | Object **SEQAIJMKL** of type *str* |
  | *SEQAIJPERM* | Object **SEQAIJPERM** of type *str* |
  | *SEQAIJSELL* | Object **SEQAIJSELL** of type *str* |
  | *SEQAIJVIENNACL* | Object **SEQAIJVIENNACL** of type *str* |
  | *SEQBAIJ* | Object **SEQBAIJ** of type *str* |
  | *SEQBAIJMKL* | Object **SEQBAIJMKL** of type *str* |
  | *SEQCUFFT* | Object **SEQCUFFT** of type *str* |
  | *SEQDENSE* | Object **SEQDENSE** of type *str* |
  | *SEQDENSECUDA* | Object **SEQDENSECUDA** of type *str* |
  | *SEQKAIJ* | Object **SEQKAIJ** of type *str* |
  | *SEQMAIJ* | Object **SEQMAIJ** of type *str* |
  | *SEQSBAIJ* | Object **SEQSBAIJ** of type *str* |
  | *SEQSELL* | Object **SEQSELL** of type *str* |
  | *SHELL* | Object **SHELL** of type *str* |
  | *SUBMATRIX* | Object **SUBMATRIX** of type *str* |
  | *TRANSPOSE* | Object **TRANSPOSE** of type *str* |

  Attributes Documentation

  - **AIJ: *str* = AIJ**

    Object **AIJ** of type *str*

  - **AIJCRL: *str* = AIJCRL**

    Object **AIJCRL** of type *str*

  - **AIJCUSPARSE: *str* = AIJCUSPARSE**

    Object **AIJCUSPARSE** of type *str*

  - **AIJMKL: *str* = AIJMKL**

    Object **AIJMKL** of type *str*

  - **AIJPERM: *str* = AIJPERM**

    Object **AIJPERM** of type *str*

  - **AIJSELL: *str* = AIJSELL**

    Object **AIJSELL** of type *str*

  - **AIJVIENNACL: *str* = AIJVIENNACL**

    Object **AIJVIENNACL** of type *str*

  - **BAIJ: *str* = BAIJ**

    Object **BAIJ** of type *str*

  - **BAIJMKL: *str* = BAIJMKL**

    Object **BAIJMKL** of type *str*

  - **BLOCKMAT: *str* = BLOCKMAT**

    Object **BLOCKMAT** of type *str*

  - **COMPOSITE: *str* = COMPOSITE**

    Object **COMPOSITE** of type *str*

  - **CONSTANTDIAGONAL: *str* = CONSTANTDIAGONAL**

    Object **CONSTANTDIAGONAL** of type *str*

  - **DENSE: *str* = DENSE**

    Object **DENSE** of type *str*

  - **DENSECUDA: *str* = DENSECUDA**

    Object **DENSECUDA** of type *str*

  - **DIAGONAL: *str* = DIAGONAL**

    Object **DIAGONAL** of type *str*

  - **DUMMY: *str* = DUMMY**

    Object **DUMMY** of type *str*

  - **ELEMENTAL: *str* = ELEMENTAL**

    Object **ELEMENTAL** of type *str*

  - **FFT: *str* = FFT**

    Object **FFT** of type *str*

  - **FFTW: *str* = FFTW**

    Object **FFTW** of type *str*

  - **H2OPUS: *str* = H2OPUS**

    Object **H2OPUS** of type *str*

  - **HERMITIANTRANSPOSE: *str* = HERMITIANTRANSPOSE**

    Object **HERMITIANTRANSPOSE** of type *str*

  - **HYPRE: *str* = HYPRE**

    Object **HYPRE** of type *str*

  - **HYPRESSTRUCT: *str* = HYPRESSTRUCT**

    Object **HYPRESSTRUCT** of type *str*

  - **HYPRESTRUCT: *str* = HYPRESTRUCT**

    Object **HYPRESTRUCT** of type *str*

  - **IS: *str* = IS**

    Object **IS** of type *str*

  - **KAIJ: *str* = KAIJ**

    Object **KAIJ** of type *str*

  - **LMVM: *str* = LMVM**

    Object **LMVM** of type *str*

  - **LMVMBADBROYDEN: *str* = LMVMBADBROYDEN**

    Object **LMVMBADBROYDEN** of type *str*

  - **LMVMBFGS: *str* = LMVMBFGS**

    Object **LMVMBFGS** of type *str*

  - **LMVMBROYDEN: *str* = LMVMBROYDEN**

    Object **LMVMBROYDEN** of type *str*

  - **LMVMDBFGS: *str* = LMVMDBFGS**

    Object **LMVMDBFGS** of type *str*

  - **LMVMDDFP: *str* = LMVMDDFP**

    Object **LMVMDDFP** of type *str*

  - **LMVMDFP: *str* = LMVMDFP**

    Object **LMVMDFP** of type *str*

  - **LMVMDIAGBBROYDEN: *str* = LMVMDIAGBBROYDEN**

    Object **LMVMDIAGBBROYDEN** of type *str*

  - **LMVMDQN: *str* = LMVMDQN**

    Object **LMVMDQN** of type *str*

  - **LMVMSR1: *str* = LMVMSR1**

    Object **LMVMSR1** of type *str*

  - **LMVMSYMBADBROYDEN: *str* = LMVMSYMBADBROYDEN**

    Object **LMVMSYMBADBROYDEN** of type *str*

  - **LMVMSYMBROYDEN: *str* = LMVMSYMBROYDEN**

    Object **LMVMSYMBROYDEN** of type *str*

  - **LOCALREF: *str* = LOCALREF**

    Object **LOCALREF** of type *str*

  - **LRC: *str* = LRC**

    Object **LRC** of type *str*

  - **MAIJ: *str* = MAIJ**

    Object **MAIJ** of type *str*

  - **MFFD: *str* = MFFD**

    Object **MFFD** of type *str*

  - **MPIADJ: *str* = MPIADJ**

    Object **MPIADJ** of type *str*

  - **MPIAIJ: *str* = MPIAIJ**

    Object **MPIAIJ** of type *str*

  - **MPIAIJCRL: *str* = MPIAIJCRL**

    Object **MPIAIJCRL** of type *str*

  - **MPIAIJCUSPARSE: *str* = MPIAIJCUSPARSE**

    Object **MPIAIJCUSPARSE** of type *str*

  - **MPIAIJMKL: *str* = MPIAIJMKL**

    Object **MPIAIJMKL** of type *str*

  - **MPIAIJPERM: *str* = MPIAIJPERM**

    Object **MPIAIJPERM** of type *str*

  - **MPIAIJSELL: *str* = MPIAIJSELL**

    Object **MPIAIJSELL** of type *str*

  - **MPIAIJVIENNACL: *str* = MPIAIJVIENNACL**

    Object **MPIAIJVIENNACL** of type *str*

  - **MPIBAIJ: *str* = MPIBAIJ**

    Object **MPIBAIJ** of type *str*

  - **MPIBAIJMKL: *str* = MPIBAIJMKL**

    Object **MPIBAIJMKL** of type *str*

  - **MPIDENSE: *str* = MPIDENSE**

    Object **MPIDENSE** of type *str*

  - **MPIDENSECUDA: *str* = MPIDENSECUDA**

    Object **MPIDENSECUDA** of type *str*

  - **MPIKAIJ: *str* = MPIKAIJ**

    Object **MPIKAIJ** of type *str*

  - **MPIMAIJ: *str* = MPIMAIJ**

    Object **MPIMAIJ** of type *str*

  - **MPISBAIJ: *str* = MPISBAIJ**

    Object **MPISBAIJ** of type *str*

  - **MPISELL: *str* = MPISELL**

    Object **MPISELL** of type *str*

  - **NEST: *str* = NEST**

    Object **NEST** of type *str*

  - **NORMAL: *str* = NORMAL**

    Object **NORMAL** of type *str*

  - **NORMALHERMITIAN: *str* = NORMALHERMITIAN**

    Object **NORMALHERMITIAN** of type *str*

  - **PREALLOCATOR: *str* = PREALLOCATOR**

    Object **PREALLOCATOR** of type *str*

  - **PYTHON: *str* = PYTHON**

    Object **PYTHON** of type *str*

  - **SAME: *str* = SAME**

    Object **SAME** of type *str*

  - **SBAIJ: *str* = SBAIJ**

    Object **SBAIJ** of type *str*

  - **SCATTER: *str* = SCATTER**

    Object **SCATTER** of type *str*

  - **SCHURCOMPLEMENT: *str* = SCHURCOMPLEMENT**

    Object **SCHURCOMPLEMENT** of type *str*

  - **SELL: *str* = SELL**

    Object **SELL** of type *str*

  - **SEQAIJ: *str* = SEQAIJ**

    Object **SEQAIJ** of type *str*

  - **SEQAIJCRL: *str* = SEQAIJCRL**

    Object **SEQAIJCRL** of type *str*

  - **SEQAIJCUSPARSE: *str* = SEQAIJCUSPARSE**

    Object **SEQAIJCUSPARSE** of type *str*

  - **SEQAIJMKL: *str* = SEQAIJMKL**

    Object **SEQAIJMKL** of type *str*

  - **SEQAIJPERM: *str* = SEQAIJPERM**

    Object **SEQAIJPERM** of type *str*

  - **SEQAIJSELL: *str* = SEQAIJSELL**

    Object **SEQAIJSELL** of type *str*

  - **SEQAIJVIENNACL: *str* = SEQAIJVIENNACL**

    Object **SEQAIJVIENNACL** of type *str*

  - **SEQBAIJ: *str* = SEQBAIJ**

    Object **SEQBAIJ** of type *str*

  - **SEQBAIJMKL: *str* = SEQBAIJMKL**

    Object **SEQBAIJMKL** of type *str*

  - **SEQCUFFT: *str* = SEQCUFFT**

    Object **SEQCUFFT** of type *str*

  - **SEQDENSE: *str* = SEQDENSE**

    Object **SEQDENSE** of type *str*

  - **SEQDENSECUDA: *str* = SEQDENSECUDA**

    Object **SEQDENSECUDA** of type *str*

  - **SEQKAIJ: *str* = SEQKAIJ**

    Object **SEQKAIJ** of type *str*

  - **SEQMAIJ: *str* = SEQMAIJ**

    Object **SEQMAIJ** of type *str*

  - **SEQSBAIJ: *str* = SEQSBAIJ**

    Object **SEQSBAIJ** of type *str*

  - **SEQSELL: *str* = SEQSELL**

    Object **SEQSELL** of type *str*

  - **SHELL: *str* = SHELL**

    Object **SHELL** of type *str*

  - **SUBMATRIX: *str* = SUBMATRIX**

    Object **SUBMATRIX** of type *str*

  - **TRANSPOSE: *str* = TRANSPOSE**

    Object **TRANSPOSE** of type *str*

Methods Summary

| | |
| --- | --- |
| *H2OpusCompress*(tol) | Compress a hierarchical matrix. |
| *H2OpusLowRankUpdate*(U\[, V, s\]) | Perform a low-rank update of the form **self** += sUVᵀ. |
| *H2OpusOrthogonalize*() | Orthogonalize the basis tree of a hierarchical matrix. |
| *SOR*(b, x\[, omega, sortype, shift, its, lits\]) | Compute relaxation (SOR, Gauss-Seidel) sweeps. |
| *appendOptionsPrefix*(\[prefix\]) | Append to the prefix used for searching for options in the database. |
| *assemble*(\[assembly\]) | Assemble the matrix. |
| *assemblyBegin*(\[assembly\]) | Begin an assembling stage of the matrix. |
| *assemblyEnd*(\[assembly\]) | Complete an assembling stage of the matrix initiated with *assemblyBegin*. |
| *axpy*(alpha, X\[, structure\]) | Perform the matrix summation **self** + = ɑ·X. |
| *aypx*(alpha, X\[, structure\]) | Perform the matrix summation **self** = ɑ·**self** + X. |
| *bindToCPU*(flg) | Mark a matrix to temporarily stay on the CPU. |
| *boundToCPU*() | Query if a matrix is bound to the CPU. |
| *chop*(tol) | Set entries smallest of tol (in absolute values) to zero. |
| *conjugate*(\[out\]) | Return the conjugate matrix. |
| *convert*(\[mat\_type, out\]) | Convert the matrix type. |
| *copy*(\[result, structure\]) | Return a copy of the matrix. |
| *create*(\[comm\]) | Create the matrix. |
| *createAIJ*(size\[, bsize, nnz, csr, comm\]) | Create a sparse *Type.AIJ* matrix, optionally preallocating. |
| *createAIJCRL*(size\[, bsize, nnz, csr, comm\]) | Create a sparse *Type.AIJCRL* matrix. |
| *createAIJWithArrays*(size, csr\[, bsize, comm\]) | Create a sparse *Type.AIJ* matrix with data in CSR format. |
| *createBAIJ*(size, bsize\[, nnz, csr, comm\]) | Create a sparse blocked *Type.BAIJ* matrix, optionally preallocating. |
| *createConstantDiagonal*(size, diag\[, comm\]) | Create a diagonal matrix of type *Type.CONSTANTDIAGONAL*. |
| *createDense*(size\[, bsize, array, comm\]) | Create a *Type.DENSE* matrix. |
| *createDenseCUDA*(size\[, bsize, array, ...\]) | Create a *Type.DENSECUDA* matrix with optional host and device data. |
| *createDiagonal*(diag) | Create a diagonal matrix of type *Type.DIAGONAL*. |
| *createH2OpusFromMat*(A\[, coordinates, dist, ...\]) | Create a hierarchical *Type.H2OPUS* matrix sampling from a provided operator. |
| *createHermitianTranspose*(mat) | Create a *Type.HERMITIANTRANSPOSE* matrix that behaves like (A\*)ᵀ. |
| *createIS*(size\[, bsize, lgmapr, lgmapc, comm\]) | Create a *Type.IS* matrix representing globally unassembled operators. |
| *createLRC*(A, U, c, V) | Create a low-rank correction *Type.LRC* matrix representing A + UCVᵀ. |
| *createNest*(mats\[, isrows, iscols, comm\]) | Create a *Type.NEST* matrix containing multiple submatrices. |
| *createNormal*(mat) | Create a *Type.NORMAL* matrix representing AᵀA. |
| *createNormalHermitian*(mat) | Create a *Type.NORMALHERMITIAN* matrix representing (A\*)ᵀA. |
| *createPython*(size\[, context, comm\]) | Create a *Type.PYTHON* matrix. |
| *createSBAIJ*(size, bsize\[, nnz, csr, comm\]) | Create a sparse *Type.SBAIJ* matrix in symmetric block format. |
| *createScatter*(scatter\[, comm\]) | Create a *Type.SCATTER* matrix from a vector scatter. |
| *createSchurComplement*(A00, Ap00, A01, A10\[, A11\]) | Create a *Type.SCHURCOMPLEMENT* matrix. |
| *createSubMatrices*(isrows\[, iscols, submats\]) | Return several sequential submatrices. |
| *createSubMatrix*(isrow\[, iscol, submat\]) | Return a submatrix. |
| *createSubMatrixVirtual*(A, isrow\[, iscol\]) | Create a *Type.SUBMATRIX* matrix that acts as a submatrix. |
| *createTranspose*(mat) | Create a *Type.TRANSPOSE* matrix that behaves like Aᵀ. |
| *createVecLeft*() | Return a left vector, a vector that the matrix vector product can be stored in. |
| *createVecRight*() | Return a right vector, a vector that the matrix can be multiplied against. |
| *createVecs*(\[side\]) | Return vectors that can be used in matrix vector products. |
| *destroy*() | Destroy the matrix. |
| *diagonalScale*(\[L, R\]) | Perform left and/or right diagonal scaling of the matrix. |
| *duplicate*(\[copy\]) | Return a clone of the matrix. |
| *equal*(mat) | Return the result of matrix comparison. |
| *factorCholesky*(isperm\[, options\]) | Perform an in-place Cholesky factorization. |
| *factorICC*(isperm\[, options\]) | Perform an in-place an incomplete Cholesky factorization. |
| *factorILU*(isrow, iscol\[, options\]) | Perform an in-place ILU factorization. |
| *factorLU*(isrow, iscol\[, options\]) | Perform an in-place LU factorization. |
| *factorNumericCholesky*(mat\[, options\]) | Not implemented. |
| *factorNumericLU*(mat\[, options\]) | Not implemented. |
| *factorSymbolicCholesky*(isperm\[, options\]) | Not implemented. |
| *factorSymbolicICC*(isperm\[, options\]) | Not implemented. |
| *factorSymbolicILU*(isrow, iscol\[, options\]) | Not implemented. |
| *factorSymbolicLU*(mat, isrow, iscol\[, options\]) | Not implemented. |
| *findZeroRows*() | Return the index set of empty rows. |
| *fixISLocalEmpty*(\[fix\]) | Compress out zero local rows from the local matrices. |
| *getBlockSize*() | Return the matrix block size. |
| *getBlockSizes*() | Return the row and column block sizes. |
| *getColumnIJ*(\[symmetric, compressed\]) | Return the CSC representation of the local sparsity pattern. |
| *getColumnVector*(column\[, result\]) | Return the columnᵗʰ column vector of the matrix. |
| *getDM*() | Return the DM defining the data layout of the matrix. |
| *getDenseArray*(\[readonly\]) | Return the array where the data is stored. |
| *getDenseColumnVec*(i\[, mode\]) | Return the iᵗʰ column vector of the dense matrix. |
| *getDenseLDA*() | Return the leading dimension of the array used by the dense matrix. |
| *getDenseLocalMatrix*() | Return the local part of the dense matrix. |
| *getDiagonal*(\[result\]) | Return the diagonal of the matrix. |
| *getDiagonalBlock*() | Return the part of the matrix associated with the on-process coupling. |
| *getISAllowRepeated*() | Get the flag for repeated entries in the local to global map. |
| *getISLocalMat*() | Return the local matrix stored inside a *Type.IS* matrix. |
| *getInertia*() | Return the inertia from a factored matrix. |
| *getInfo*(\[info\]) | Return summary information. |
| *getLGMap*() | Return the local-to-global mappings. |
| *getLRCMats*() | Return the constituents of a *Type.LRC* matrix. |
| *getLocalSize*() | Return the local number of rows and columns. |
| *getLocalSubMatrix*(isrow, iscol\[, submat\]) | Return a reference to a submatrix specified in local numbering. |
| *getMumpsCntl*(icntl) | Return the MUMPS parameter, **CNTL\[icntl\]**. |
| *getMumpsIcntl*(icntl) | Return the MUMPS parameter, **ICNTL\[icntl\]**. |
| *getMumpsInfo*(icntl) | Return the MUMPS parameter, **INFO\[icntl\]**. |
| *getMumpsInfog*(icntl) | Return the MUMPS parameter, **INFOG\[icntl\]**. |
| *getMumpsRinfo*(icntl) | Return the MUMPS parameter, **RINFO\[icntl\]**. |
| *getMumpsRinfog*(icntl) | Return the MUMPS parameter, **RINFOG\[icntl\]**. |
| *getNearNullSpace*() | Return the near-nullspace. |
| *getNestISs*() | Return the index sets representing the row and column spaces. |
| *getNestLocalISs*() | Return the local index sets representing the row and column spaces. |
| *getNestSize*() | Return the number of rows and columns of the matrix. |
| *getNestSubMatrix*(i, j) | Return a single submatrix. |
| *getNullSpace*() | Return the nullspace. |
| *getOption*(option) | Return the option value. |
| *getOptionsPrefix*() | Return the prefix used for searching for options in the database. |
| *getOrdering*(ord\_type) | Return a reordering for a matrix to improve a LU factorization. |
| *getOwnershipIS*() | Return the ranges of rows and columns owned by each process as index sets. |
| *getOwnershipRange*() | Return the locally owned range of rows. |
| *getOwnershipRangeColumn*() | Return the locally owned range of columns. |
| *getOwnershipRanges*() | Return the range of rows owned by each process. |
| *getOwnershipRangesColumn*() | Return the range of columns owned by each process. |
| *getPythonContext*() | Return the instance of the class implementing the required Python methods. |
| *getPythonType*() | Return the fully qualified Python name of the class used by the matrix. |
| *getRedundantMatrix*(nsubcomm\[, subcomm, out\]) | Return redundant matrices on subcommunicators. |
| *getRow*(row) | Return the column indices and values for the requested row. |
| *getRowIJ*(\[symmetric, compressed\]) | Return the CSR representation of the local sparsity pattern. |
| *getRowSum*(\[result\]) | Return the row-sum vector. |
| *getSchurComplementSubMatrices*() | Return Schur complement sub-matrices. |
| *getSize*() | Return the global number of rows and columns. |
| *getSizes*() | Return the tuple of matrix layouts. |
| *getTransposeNullSpace*() | Return the transpose nullspace. |
| *getType*() | Return the type of the matrix. |
| *getValue*(row, col) | Return the value in the (row, col) position. |
| *getValues*(rows, cols\[, values\]) | Return the values in the **zip(rows, cols)** positions. |
| *getValuesCSR*() | Return the CSR representation of the local part of the matrix. |
| *getVecType*() | Return the vector type used by the matrix. |
| *hermitianTranspose*(\[out\]) | Return the transposed Hermitian matrix. |
| *imagPart*(\[out\]) | Return the imaginary part of the matrix. |
| *increaseOverlap*(iset\[, overlap\]) | Increase the overlap of a index set. |
| *invertBlockDiagonal*() | Return the inverse of the block-diagonal entries. |
| *isAssembled*() | The boolean flag indicating if the matrix is assembled. |
| *isHermitian*(\[tol\]) | Return the boolean indicating if the matrix is Hermitian. |
| *isHermitianKnown*() | Return the 2-tuple indicating if the matrix is known to be Hermitian. |
| *isStructurallySymmetric*() | Return the boolean indicating if the matrix is structurally symmetric. |
| *isSymmetric*(\[tol\]) | Return the boolean indicating if the matrix is symmetric. |
| *isSymmetricKnown*() | Return the 2-tuple indicating if the matrix is known to be symmetric. |
| *isTranspose*(\[mat, tol\]) | Return the result of matrix comparison with transposition. |
| *kron*(mat\[, result\]) | Compute C, the Kronecker product of A and B. |
| *load*(viewer) | Load a matrix. |
| *matMatMult*(B, C\[, result, fill\]) | Perform matrix-matrix-matrix multiplication D=ABC. |
| *matMult*(mat\[, result, fill\]) | Perform matrix-matrix multiplication C=AB. |
| *matSolve*(B, X) | Solve AX=B, given a factored matrix A. |
| *matTransposeMult*(mat\[, result, fill\]) | Perform matrix-matrix multiplication C=ABᵀ. |
| *mult*(x, y) | Perform the matrix vector product y = A @ x. |
| *multAdd*(x, v, y) | Perform the matrix vector product with addition y = A @ x + v. |
| *multHermitian*(x, y) | Perform the Hermitian matrix vector product y = A^H @ x. |
| *multHermitianAdd*(x, v, y) | Perform the Hermitian matrix vector product with addition y = A^H @ x + v. |
| *multTranspose*(x, y) | Perform the transposed matrix vector product y = A^T @ x. |
| *multTransposeAdd*(x, v, y) | Perform the transposed matrix vector product with addition y = A^T @ x + v. |
| *norm*(\[norm\_type\]) | Compute the requested matrix norm. |
| *permute*(row, col) | Return the permuted matrix. |
| *preallocatorPreallocate*(A\[, fill\]) | Preallocate memory for a matrix using a preallocator matrix. |
| *ptap*(P\[, result, fill\]) | Creates the matrix product C = PᵀAP. |
| *rart*(R\[, result, fill\]) | Create the matrix product C = RARᵀ. |
| *realPart*(\[out\]) | Return the real part of the matrix. |
| *reorderForNonzeroDiagonal*(isrow, iscol\[, atol\]) | Change a matrix ordering to remove zeros from the diagonal. |
| *restoreDenseColumnVec*(i\[, mode\]) | Restore the iᵗʰ column vector of the dense matrix. |
| *restoreISLocalMat*(local) | Restore the local matrix obtained with *getISLocalMat*. |
| *restoreLocalSubMatrix*(isrow, iscol, submat) | Restore a reference to a submatrix obtained with *getLocalSubMatrix*. |
| *retrieveValues*() | Retrieve a copy of the matrix values previously stored with *storeValues*. |
| *scale*(alpha) | Scale the matrix. |
| *setBlockSize*(bsize) | Set the matrix block size (same for rows and columns). |
| *setBlockSizes*(row\_bsize, col\_bsize) | Set the row and column block sizes. |
| *setDM*(dm) | Set the DM defining the data layout of the matrix. |
| *setDenseLDA*(lda) | Set the leading dimension of the array used by the dense matrix. |
| *setDiagonal*(diag\[, addv\]) | Set the diagonal values of the matrix. |
| *setFromOptions*() | Configure the matrix from the options database. |
| *setISAllowRepeated*(\[allow\]) | Allow repeated entries in the local to global map. |
| *setISLocalMat*(local) | Set the local matrix stored inside a *Type.IS*. |
| *setISPreallocation*(nnz, onnz) | Preallocate memory for a *Type.IS* parallel matrix. |
| *setLGMap*(rmap\[, cmap\]) | Set the local-to-global mappings. |
| *setLRCMats*(A, U\[, c, V\]) | Set the constituents of a *Type.LRC* matrix. |
| *setMumpsCntl*(icntl, val) | Set a MUMPS parameter, **CNTL\[icntl\] = val**. |
| *setMumpsIcntl*(icntl, ival) | Set a MUMPS parameter, **ICNTL\[icntl\] = ival**. |
| *setNearNullSpace*(nsp) | Set the near-nullspace. |
| *setNestVecType*(vec\_type) | Set the vector type for a *Type.NEST* matrix. |
| *setNullSpace*(nsp) | Set the nullspace. |
| *setOption*(option, flag) | Set option. |
| *setOptionsPrefix*(\[prefix\]) | Set the prefix used for searching for options in the database. |
| *setPreallocationCSR*(csr) | Preallocate memory for the matrix with a CSR layout. |
| *setPreallocationDense*(array) | Set the array used for storing matrix elements for a dense matrix. |
| *setPreallocationNNZ*(nnz) | Preallocate memory for the matrix with a non-zero pattern. |
| *setPythonContext*(context) | Set the instance of the class implementing the required Python methods. |
| *setPythonType*(py\_type) | Set the fully qualified Python name of the class to be used. |
| *setRandom*(\[random\]) | Set random values in the matrix. |
| *setSizes*(size\[, bsize\]) | Set the local, global and block sizes. |
| *setStencil*(dims\[, starts, dof\]) | Set matrix stencil. |
| *setTransposeNullSpace*(nsp) | Set the transpose nullspace. |
| *setTransposePrecursor*(out) | Set transpose precursor. |
| *setType*(mat\_type) | Set the matrix type. |
| *setUnfactored*() | Set a factored matrix to be treated as unfactored. |
| *setUp*() | Set up the internal data structures for using the matrix. |
| *setValue*(row, col, value\[, addv\]) | Set a value to the **(row, col)** entry of the matrix. |
| *setValueBlockedStagStencil*(row, col, value) | Not implemented. |
| *setValueBlockedStencil*(row, col, value\[, addv\]) | Set a block of values to row and col stencil. |
| *setValueLocal*(row, col, value\[, addv\]) | Set a value to the **(row, col)** entry of the matrix in local ordering. |
| *setValueStagStencil*(row, col, value\[, addv\]) | Not implemented. |
| *setValueStencil*(row, col, value\[, addv\]) | Set a value to row and col stencil. |
| *setValues*(rows, cols, values\[, addv\]) | Set values to the rows ⊗ cols entries of the matrix. |
| *setValuesBlocked*(rows, cols, values\[, addv\]) | Set values to the rows ⊗ col block entries of the matrix. |
| *setValuesBlockedCSR*(I, J, V\[, addv\]) | Set values stored in block CSR format. |
| *setValuesBlockedIJV*(I, J, V\[, addv, rowmap\]) | Set a subset of values stored in block CSR format. |
| *setValuesBlockedLocal*(rows, cols, values\[, addv\]) | Set values to the rows ⊗ col block entries of the matrix in local ordering. |
| *setValuesBlockedLocalCSR*(I, J, V\[, addv\]) | Set values stored in block CSR format. |
| *setValuesBlockedLocalIJV*(I, J, V\[, addv, rowmap\]) | Set a subset of values stored in block CSR format. |
| *setValuesBlockedLocalRCV*(R, C, V\[, addv\]) | Undocumented. |
| *setValuesBlockedRCV*(R, C, V\[, addv\]) | Undocumented. |
| *setValuesCSR*(I, J, V\[, addv\]) | Set values stored in CSR format. |
| *setValuesIJV*(I, J, V\[, addv, rowmap\]) | Set a subset of values stored in CSR format. |
| *setValuesLocal*(rows, cols, values\[, addv\]) | Set values to the rows ⊗ col entries of the matrix in local ordering. |
| *setValuesLocalCSR*(I, J, V\[, addv\]) | Set values stored in CSR format. |
| *setValuesLocalIJV*(I, J, V\[, addv, rowmap\]) | Set a subset of values stored in CSR format. |
| *setValuesLocalRCV*(R, C, V\[, addv\]) | Undocumented. |
| *setValuesRCV*(R, C, V\[, addv\]) | Undocumented. |
| *setVariableBlockSizes*(blocks) | Set diagonal point-blocks of the matrix. |
| *setVecType*(vec\_type) | Set the vector type. |
| *shift*(alpha) | Shift the matrix. |
| *solve*(b, x) | Solve Ax=b, given a factored matrix. |
| *solveAdd*(b, y, x) | Solve x=y+A⁻¹b, given a factored matrix. |
| *solveBackward*(b, x) | Solve Ux=b, given a factored matrix A=LU. |
| *solveForward*(b, x) | Solve Lx = b, given a factored matrix A = LU. |
| *solveTranspose*(b, x) | Solve Aᵀx=b, given a factored matrix. |
| *solveTransposeAdd*(b, y, x) | Solve x=y+A⁻ᵀb, given a factored matrix. |
| *storeValues*() | Stash a copy of the matrix values. |
| *toDLPack*(\[mode\]) | Return a DLPack *PyCapsule* wrapping the vector data. |
| *transpose*(\[out\]) | Return the transposed matrix. |
| *transposeMatMult*(mat\[, result, fill\]) | Perform matrix-matrix multiplication C=AᵀB. |
| *view*(\[viewer\]) | View the matrix. |
| *zeroEntries*() | Zero the entries of the matrix. |
| *zeroRows*(rows\[, diag, x, b\]) | Zero selected rows of the matrix. |
| *zeroRowsColumns*(rows\[, diag, x, b\]) | Zero selected rows and columns of the matrix. |
| *zeroRowsColumnsLocal*(rows\[, diag, x, b\]) | Zero selected rows and columns of the matrix in local ordering. |
| *zeroRowsColumnsStencil*(rows\[, diag, x, b\]) | Zero selected rows and columns of the matrix. |
| *zeroRowsLocal*(rows\[, diag, x, b\]) | Zero selected rows of the matrix in local ordering. |

Attributes Summary

| | |
| --- | --- |
| *assembled* | The boolean flag indicating if the matrix is assembled. |
| *block\_size* | Matrix block size. |
| *block\_sizes* | Matrix row and column block sizes. |
| *hermitian* | The boolean flag indicating if the matrix is Hermitian. |
| *local\_size* | Matrix local size. |
| *owner\_range* | Matrix local row range. |
| *owner\_ranges* | Matrix row ranges. |
| *size* | Matrix global size. |
| *sizes* | Matrix local and global sizes. |
| *structsymm* | The boolean flag indicating if the matrix is structurally symmetric. |
| *symmetric* | The boolean flag indicating if the matrix is symmetric. |

Methods Documentation

- **H2OpusCompress(tol)**

  Compress a hierarchical matrix.

  Collective.

  - **Parameters**

    **tol** (*float*) -- The absolute truncation threshold.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *MatH2OpusCompress*

  *Source code at petsc4py/PETSc/Mat.pyx:4992*

- **H2OpusLowRankUpdate(U, V=None, s=1.0)**

  Perform a low-rank update of the form **self** += sUVᵀ.

  Collective.

  - **Parameters**

    - •

      **U** (*Mat*) -- The dense low-rank update matrix.

    - •

      **V** (*Mat \| None*) -- The dense low-rank update matrix. If *None*, **V = U**.

    - •

      **s** (*float*) -- The scaling factor.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *MatH2OpusLowRankUpdate*

  *Source code at petsc4py/PETSc/Mat.pyx:5011*

- **H2OpusOrthogonalize()**

  Orthogonalize the basis tree of a hierarchical matrix.

  Collective.

  **SEE ALSO:**

  *MatH2OpusOrthogonalize*

  *Source code at petsc4py/PETSc/Mat.pyx:4979*

  - **Return type**

    *Self*

- **SOR(b, x, omega=1.0, sortype=None, shift=0.0, its=1, lits=1)**

  Compute relaxation (SOR, Gauss-Seidel) sweeps.

  Neighborwise collective.

  **SEE ALSO:**

  *MatSOR*

  *Source code at petsc4py/PETSc/Mat.pyx:3825*

  - **Parameters**

    - •

      **b** (*Vec*)

    - •

      **x** (*Vec*)

    - •

      **omega** (*float*)

    - •

      **sortype** (*SORType \| None*)

    - •

      **shift** (*float*)

    - •

      **its** (*int*)

    - •

      **lits** (*int*)

  - **Return type**

    *None*

- **appendOptionsPrefix(prefix=None)**

  Append to the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *MatAppendOptionsPrefix*

  *Source code at petsc4py/PETSc/Mat.pyx:1751*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **assemble(assembly=None)**

  Assemble the matrix.

  Collective.

  - **Parameters**

    **assembly** (*MatAssemblySpec*) -- The assembly type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *assemblyBegin*, *assemblyEnd*

  *Source code at petsc4py/PETSc/Mat.pyx:3338*

- **assemblyBegin(assembly=None)**

  Begin an assembling stage of the matrix.

  Collective.

  - **Parameters**

    **assembly** (*MatAssemblySpec*) -- The assembly type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *assemblyEnd*, *assemble*, *MatAssemblyBegin*

  *Source code at petsc4py/PETSc/Mat.pyx:3302*

- **assemblyEnd(assembly=None)**

  Complete an assembling stage of the matrix initiated with *assemblyBegin*.

  Collective.

  - **Parameters**

    **assembly** (*MatAssemblySpec*) -- The assembly type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *assemblyBegin*, *assemble*, *MatAssemblyEnd*

  *Source code at petsc4py/PETSc/Mat.pyx:3320*

- **axpy(alpha, X, structure=None)**

  Perform the matrix summation **self** + = ɑ·X.

  Collective.

  - **Parameters**

    - •

      **alpha** (*Scalar*) -- The scalar.

    - •

      **X** (*Mat*) -- The matrix to be added.

    - •

      **structure** (*Structure*) -- The structure of the operation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatAXPY*

  *Source code at petsc4py/PETSc/Mat.pyx:4153*

- **aypx(alpha, X, structure=None)**

  Perform the matrix summation **self** = ɑ·**self** + X.

  Collective.

  - **Parameters**

    - •

      **alpha** (*Scalar*) -- The scalar.

    - •

      **X** (*Mat*) -- The matrix to be added.

    - •

      **structure** (*Structure*) -- The structure of the operation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatAYPX*

  *Source code at petsc4py/PETSc/Mat.pyx:4176*

- **bindToCPU(flg)**

  Mark a matrix to temporarily stay on the CPU.

  Collective.

  Once marked, perform computations on the CPU.

  - **Parameters**

    **flg** (*bool*) -- Bind to the CPU if *True*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatBindToCPU*

  *Source code at petsc4py/PETSc/Mat.pyx:4520*

- **boundToCPU()**

  Query if a matrix is bound to the CPU.

  Not collective.

  **SEE ALSO:**

  *MatBoundToCPU*

  *Source code at petsc4py/PETSc/Mat.pyx:4540*

  - **Return type**

    *bool*

- **chop(tol)**

  Set entries smallest of tol (in absolute values) to zero.

  Collective.

  **SEE ALSO:**

  *MatFilter*

  *Source code at petsc4py/PETSc/Mat.pyx:4121*

  - **Parameters**

    **tol** (*float*)

  - **Return type**

    *None*

- **conjugate(out=None)**

  Return the conjugate matrix.

  Collective.

  - **Parameters**

    **out** (*Mat \| None*) -- Optional return matrix. If *None*, the operation is performed in-place. Otherwise, the operation is performed on **out**.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *realPart*, *imagPart*, *MatConjugate*

  *Source code at petsc4py/PETSc/Mat.pyx:2215*

- **convert(mat\_type=None, out=None)**

  Convert the matrix type.

  Collective.

  - **Parameters**

    - •

      **mat\_type** (*Type \| str*) -- The type of the new matrix. If *None* uses *Type.SAME*.

    - •

      **out** (*Mat \| None*) -- Optional return matrix. If *None*, inplace conversion is performed. Otherwise, the matrix is reused.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatConvert*

  *Source code at petsc4py/PETSc/Mat.pyx:2071*

- **copy(result=None, structure=None)**

  Return a copy of the matrix.

  Collective.

  - **Parameters**

    - •

      **result** (*Mat \| None*) -- Optional return matrix. If *None*, it is internally created.

    - •

      **structure** (*Structure \| None*) -- The copy structure. Only relevant if **result** is not *None*.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatCopy*, *MatDuplicate*

  *Source code at petsc4py/PETSc/Mat.pyx:2026*

- **create(comm=None)**

  Create the matrix.

  Collective.

  Once created, the user should call *setType* or *setFromOptions* before using the matrix. Alternatively, specific creation routines such as *createAIJ* or *createBAIJ* can be used.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *destroy*, *MatCreate*

  *Source code at petsc4py/PETSc/Mat.pyx:488*

- **createAIJ(size, bsize=None, nnz=None, csr=None, comm=None)**

  Create a sparse *Type.AIJ* matrix, optionally preallocating.

  Collective.

  To preallocate the matrix the user can either pass **nnz** or **csr** describing the sparsity. If neither is set then preallocation will not occur. Consult the *PETSc manual* for more information.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **bsize** (*MatBlockSizeSpec \| None*) -- Matrix block size. If *None*, a block size of **1** is set.

    - •

      **nnz** (*NNZSpec \| None*) -- Optional non-zeros preallocation pattern.

    - •

      **csr** (*CSRIndicesSpec \| None*) -- Optional compressed sparse row layout information. If provided, it takes precedence on **nnz**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *setSizes*, *createBAIJ*, *MATAIJ*, *MATSEQAIJ*, *MATMPIAIJ*, *MatCreateAIJ*, *MatSeqAIJSetPreallocation*, *MatSeqAIJSetPreallocationCSR*

  *Source code at petsc4py/PETSc/Mat.pyx:693*

- **createAIJCRL(size, bsize=None, nnz=None, csr=None, comm=None)**

  Create a sparse *Type.AIJCRL* matrix.

  Collective.

  This is similar to *Type.AIJ* matrices but stores some additional information that improves vectorization for the matrix-vector product.

  To preallocate the matrix the user can either pass **nnz** or **csr** describing the sparsity. If neither is set then preallocation will not occur. Consult the *PETSc manual* for more information.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **bsize** (*MatBlockSizeSpec \| None*) -- Matrix block size. If *None*, a block size of **1** is set.

    - •

      **nnz** (*NNZSpec \| None*) -- Optional non-zeros preallocation pattern.

    - •

      **csr** (*CSRIndicesSpec \| None*) -- Optional compressed sparse row layout information. If provided, it takes precedence on **nnz**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *createAIJ*, *createBAIJ*, *MatCreateSeqAIJCRL*, *MatCreateMPIAIJCRL*

  *Source code at petsc4py/PETSc/Mat.pyx:826*

- **createAIJWithArrays(size, csr, bsize=None, comm=None)**

  Create a sparse *Type.AIJ* matrix with data in CSR format.

  Collective.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **csr** (*CSRSpec \| tuple\[CSRSpec, CSRSpec\]*) -- Local matrix data in compressed sparse row format.

    - •

      **bsize** (*MatBlockSizeSpec \| None*) -- Matrix block size. If *None*, a block size of **1** is set.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  Notes

  For *Type.SEQAIJ* matrices, the **csr** data is not copied. For *Type.MPIAIJ* matrices, the **csr** data is not copied only in the case it represents on-process and off-process information.

  **SEE ALSO:**

  *createAIJ*, *MatCreateSeqAIJWithArrays*, *MatCreateMPIAIJWithArrays*, *MatCreateMPIAIJWithSplitArrays*

  *Source code at petsc4py/PETSc/Mat.pyx:956*

- **createBAIJ(size, bsize, nnz=None, csr=None, comm=None)**

  Create a sparse blocked *Type.BAIJ* matrix, optionally preallocating.

  Collective.

  To preallocate the matrix the user can either pass **nnz** or **csr** describing the sparsity. If neither is set then preallocation will not occur. Consult the *PETSc manual* for more information.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **bsize** (*MatBlockSizeSpec*) -- Matrix block size.

    - •

      **nnz** (*NNZSpec \| None*) -- Optional non-zeros preallocation pattern for block rows.

    - •

      **csr** (*CSRIndicesSpec \| None*) -- Optional block-compressed sparse row layout information. If provided, it takes precedence on **nnz**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *setSizes*, *createAIJ*, *MATBAIJ*, *MATSEQBAIJ*, *MATMPIBAIJ*, *MatCreateBAIJ*

  *Source code at petsc4py/PETSc/Mat.pyx:738*

- **createConstantDiagonal(size, diag, comm=None)**

  Create a diagonal matrix of type *Type.CONSTANTDIAGONAL*.

  Collective.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **diag** (*float*) -- The diagonal value.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *createDiagonal*

  *Source code at petsc4py/PETSc/Mat.pyx:1561*

- **createDense(size, bsize=None, array=None, comm=None)**

  Create a *Type.DENSE* matrix.

  Collective.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **bsize** (*MatBlockSizeSpec \| None*) -- Matrix block size. If *None*, a block size of **1** is set.

    - •

      **array** (*Sequence\[Scalar\] \| None*) -- Optional matrix data. If *None*, memory is internally allocated.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *createDenseCUDA*, *MATDENSE*, *MatCreateDense*

  *Source code at petsc4py/PETSc/Mat.pyx:1047*

- **createDenseCUDA(size, bsize=None, array=None, cudahandle=None, comm=None)**

  Create a *Type.DENSECUDA* matrix with optional host and device data.

  Collective.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **bsize** (*MatBlockSizeSpec \| None*) -- Matrix block size. If *None*, a block size of **1** is set.

    - •

      **array** (*Sequence\[Scalar\] \| None*) -- Host data. Will be lazily allocated if *None*.

    - •

      **cudahandle** (*int \| None*) -- Address of the array on the GPU. Will be lazily allocated if *None*. If **cudahandle** is provided, **array** will be ignored.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *createDense*, *MatCreateDenseCUDA*

  *Source code at petsc4py/PETSc/Mat.pyx:1083*

- **createDiagonal(diag)**

  Create a diagonal matrix of type *Type.DIAGONAL*.

  Collective.

  - **Parameters**

    **diag** (*Vec*) -- The vector holding diagonal values.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *createConstantDiagonal*

  *Source code at petsc4py/PETSc/Mat.pyx:1594*

- **createH2OpusFromMat(A, coordinates=None, dist=None, eta=None, leafsize=None, maxrank=None, bs=None, rtol=None)**

  Create a hierarchical *Type.H2OPUS* matrix sampling from a provided operator.

  Collective.

  - **Parameters**

    - •

      **A** (*Mat*) -- Matrix to be sampled.

    - •

      **coordinates** (*Sequence\[Scalar\] \| None*) -- Coordinates of the points.

    - •

      **dist** (*bool \| None*) -- Whether or not coordinates are distributed, defaults to *False*.

    - •

      **eta** (*float \| None*) -- Admissibility condition tolerance, defaults to *DECIDE*.

    - •

      **leafsize** (*int \| None*) -- Leaf size in cluster tree, defaults to *DECIDE*.

    - •

      **maxrank** (*int \| None*) -- Maximum rank permitted, defaults to *DECIDE*.

    - •

      **bs** (*int \| None*) -- Maximum number of samples to take concurrently, defaults to *DECIDE*.

    - •

      **rtol** (*float \| None*) -- Relative tolerance for construction, defaults to *DECIDE*.

  - **Return type**

    *Self*

  Notes

  See *MatCreateH2OpusFromMat* for the appropriate database options.

  **SEE ALSO:**

  *Working with PETSc options*, *MatCreateH2OpusFromMat*

  *Source code at petsc4py/PETSc/Mat.pyx:1427*

- **createHermitianTranspose(mat)**

  Create a *Type.HERMITIANTRANSPOSE* matrix that behaves like (A\*)ᵀ.

  Collective.

  - **Parameters**

    **mat** (*Mat*) -- Matrix A to represent the hermitian transpose of.

  - **Return type**

    *Self*

  Notes

  The Hermitian transpose is never actually formed.

  **SEE ALSO:**

  *createNormal*, *createNormalHermitian*, *MATHERMITIANTRANSPOSEVIRTUAL*, *MatCreateHermitianTranspose*

  *Source code at petsc4py/PETSc/Mat.pyx:1263*

- **createIS(size, bsize=None, lgmapr=None, lgmapc=None, comm=None)**

  Create a *Type.IS* matrix representing globally unassembled operators.

  Collective.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **bsize** (*MatBlockSizeSpec \| None*) -- Matrix block size. If *None*, a block size of **1** is set.

    - •

      **lgmapr** (*LGMap \| None*) -- Optional local-to-global mapping for the rows. If *None*, the local row space matches the global row space.

    - •

      **lgmapc** (*LGMap \| None*) -- Optional local-to-global mapping for the columns. If *None*, the local column space matches the global column space.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *MATIS*

  *Source code at petsc4py/PETSc/Mat.pyx:1508*

- **createLRC(A, U, c, V)**

  Create a low-rank correction *Type.LRC* matrix representing A + UCVᵀ.

  Collective.

  - **Parameters**

    - •

      **A** (*Mat*) -- Sparse matrix, can be *None*.

    - •

      **U** (*Mat*) -- Dense rectangular matrices.

    - •

      **V** (*Mat*) -- Dense rectangular matrices.

    - •

      **c** (*Vec*) -- Vector containing the diagonal of C, can be *None*.

  - **Return type**

    *Self*

  Notes

  The matrix A + UCVᵀ is never actually formed.

  C is a diagonal matrix (represented as a vector) of order k, where k is the number of columns of both U and V.

  If A is *None* then the new object behaves like a low-rank matrix UCVᵀ.

  Use the same matrix for **V** and **U** (or **V=None**) for a symmetric low-rank correction, A + UCUᵀ.

  If **c** is *None* then the low-rank correction is just U\*Vᵀ. If a sequential **c** vector is used for a parallel matrix, PETSc assumes that the values of the vector are consistently set across processors.

  **SEE ALSO:**

  *MATLRC*, *MatCreateLRC*

  *Source code at petsc4py/PETSc/Mat.pyx:1288*

- **createNest(mats, isrows=None, iscols=None, comm=None)**

  Create a *Type.NEST* matrix containing multiple submatrices.

  Collective.

  - **Parameters**

    - •

      **mats** (*Sequence\[Sequence\[Mat\]\]*) -- Iterable of matrix block rows with size **len(isrows)**. Each matrix block row must be of size **len(iscols)**. Empty submatrices can be set with *None*.

    - •

      **isrows** (*Sequence\[IS\] \| None*) -- Index set for each nested row block, defaults to contiguous ordering.

    - •

      **iscols** (*Sequence\[IS\] \| None*) -- Index set for each nested column block, defaults to contiguous ordering.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *MatCreateNest*, *MATNEST*

  *Source code at petsc4py/PETSc/Mat.pyx:1360*

- **createNormal(mat)**

  Create a *Type.NORMAL* matrix representing AᵀA.

  Collective.

  - **Parameters**

    **mat** (*Mat*) -- The (possibly rectangular) matrix A.

  - **Return type**

    *Self*

  Notes

  The product AᵀA is never actually formed. Instead A and Aᵀ are used during *mult* and various other matrix operations.

  **SEE ALSO:**

  *MATNORMAL*, *MatCreateNormal*

  *Source code at petsc4py/PETSc/Mat.pyx:1188*

- **createNormalHermitian(mat)**

  Create a *Type.NORMALHERMITIAN* matrix representing (A\*)ᵀA.

  Collective.

  - **Parameters**

    **mat** (*Mat*) -- The (possibly rectangular) matrix A.

  - **Return type**

    *Self*

  Notes

  The product (A\*)ᵀA is never actually formed.

  **SEE ALSO:**

  *createHermitianTranspose*, *MATNORMAL*, *MATNORMALHERMITIAN*, *MatCreateNormalHermitian*

  *Source code at petsc4py/PETSc/Mat.pyx:1238*

- **createPython(size, context=None, comm=None)**

  Create a *Type.PYTHON* matrix.

  Collective.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **context** (*Any*) -- An instance of the Python class implementing the required methods.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PETSc Python matrix type*, *setType*, *setPythonContext*, *Type.PYTHON*

  *Source code at petsc4py/PETSc/Mat.pyx:1617*

- **createSBAIJ(size, bsize, nnz=None, csr=None, comm=None)**

  Create a sparse *Type.SBAIJ* matrix in symmetric block format.

  Collective.

  To preallocate the matrix the user can either pass **nnz** or **csr** describing the sparsity. If neither is set then preallocation will not occur. Consult the *PETSc manual* for more information.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **bsize** (*MatBlockSizeSpec*) -- Matrix block size.

    - •

      **nnz** (*NNZSpec \| None*) -- Optional upper-triangular (including diagonal) non-zeros preallocation pattern for block rows.

    - •

      **csr** (*CSRIndicesSpec \| None*) -- Optional block-compressed sparse row layout information. If provided, it takes precedence on **nnz**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *createAIJ*, *createBAIJ*, *MatCreateSBAIJ*

  *Source code at petsc4py/PETSc/Mat.pyx:782*

- **createScatter(scatter, comm=None)**

  Create a *Type.SCATTER* matrix from a vector scatter.

  Collective.

  - **Parameters**

    - •

      **scatter** (*Scatter*) -- Vector scatter.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *MATSCATTER*, *MatCreateScatter*

  *Source code at petsc4py/PETSc/Mat.pyx:1164*

- **createSchurComplement(A00, Ap00, A01, A10, A11=None)**

  Create a *Type.SCHURCOMPLEMENT* matrix.

  Collective.

  - **Parameters**

    - •

      **A00** (*Mat*) -- the upper-left block of the original matrix A = \[A00 A01; A10 A11\].

    - •

      **Ap00** (*Mat*) -- preconditioning matrix for use in ksp(A00,Ap00) to approximate the action of A00^{-1}.

    - •

      **A01** (*Mat*) -- the upper-right block of the original matrix A = \[A00 A01; A10 A11\].

    - •

      **A10** (*Mat*) -- the lower-left block of the original matrix A = \[A00 A01; A10 A11\].

    - •

      **A11** (*Mat \| None*) -- Optional lower-right block of the original matrix A = \[A00 A01; A10 A11\].

  - **Return type**

    *Self*

  **SEE ALSO:**

  *MatCreateSchurComplement*

  *Source code at petsc4py/PETSc/Mat.pyx:3969*

- **createSubMatrices(isrows, iscols=None, submats=None)**

  Return several sequential submatrices.

  Collective.

  - **Parameters**

    - •

      **isrows** (*IS \| Sequence\[IS\]*) -- Row index sets.

    - •

      **iscols** (*IS \| Sequence\[IS\]*) -- Column index sets. If *None*, **iscols = isrows**.

    - •

      **submats** (*Mat \| Sequence\[Mat\]*) -- Optional resultant matrices. When *None*, new matrices are created, and **MAT\_INITIAL\_MATRIX** is used. When not *None*, the matrices are reused with **MAT\_REUSE\_MATRIX**.

  - **Return type**

    *Sequence*\[*Mat*\]

  **SEE ALSO:**

  *MatCreateSubMatrices*

  *Source code at petsc4py/PETSc/Mat.pyx:3912*

- **createSubMatrix(isrow, iscol=None, submat=None)**

  Return a submatrix.

  Collective.

  - **Parameters**

    - •

      **isrow** (*IS*) -- Row index set.

    - •

      **iscol** (*IS \| None*) -- Column index set. If *None*, **iscol = isrow**.

    - •

      **submat** (*Mat \| None*) -- Optional resultant matrix. When *None*, a new matrix is created, and **MAT\_INITIAL\_MATRIX** is used. When not *None*, the matrix is reused with **MAT\_REUSE\_MATRIX**.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatCreateSubMatrix*

  *Source code at petsc4py/PETSc/Mat.pyx:3882*

- **createSubMatrixVirtual(A, isrow, iscol=None)**

  Create a *Type.SUBMATRIX* matrix that acts as a submatrix.

  Collective.

  - **Parameters**

    - •

      **A** (*Mat*) -- Matrix to extract submatrix from.

    - •

      **isrow** (*IS*) -- Rows present in the submatrix.

    - •

      **iscol** (*IS \| None*) -- Columns present in the submatrix, defaults to **isrow**.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *MatCreateSubMatrixVirtual*

  *Source code at petsc4py/PETSc/Mat.pyx:1335*

- **createTranspose(mat)**

  Create a *Type.TRANSPOSE* matrix that behaves like Aᵀ.

  Collective.

  - **Parameters**

    **mat** (*Mat*) -- Matrix A to represent the transpose of.

  - **Return type**

    *Self*

  Notes

  The transpose is never actually formed. Instead *multTranspose* is called whenever the matrix-vector product is computed.

  **SEE ALSO:**

  *createNormal*, *MatCreateTranspose*

  *Source code at petsc4py/PETSc/Mat.pyx:1213*

- **createVecLeft()**

  Return a left vector, a vector that the matrix vector product can be stored in.

  Collective.

  **SEE ALSO:**

  *createVecs*, *createVecRight*, *MatCreateVecs*

  *Source code at petsc4py/PETSc/Mat.pyx:3438*

  - **Return type**

    *Vec*

- **createVecRight()**

  Return a right vector, a vector that the matrix can be multiplied against.

  Collective.

  **SEE ALSO:**

  *createVecs*, *createVecLeft*, *MatCreateVecs*

  *Source code at petsc4py/PETSc/Mat.pyx:3424*

  - **Return type**

    *Vec*

- **createVecs(side=None)**

  Return vectors that can be used in matrix vector products.

  Collective.

  - **Parameters**

    **side** (*Literal\['r', 'R', 'right', 'Right', 'RIGHT', 'l', 'L', 'left', 'Left', 'LEFT'\] \| None*) -- If *None* returns a 2-tuple of vectors **(right, left)**. Otherwise it just return a left or right vector.

  - **Return type**

    *Vec* \| *tuple*\[*Vec*, *Vec*\]

  Notes

  **right** vectors are vectors in the column space of the matrix. **left** vectors are vectors in the row space of the matrix.

  **SEE ALSO:**

  *createVecLeft*, *createVecRight*, *MatCreateVecs*

  *Source code at petsc4py/PETSc/Mat.pyx:3385*

- **destroy()**

  Destroy the matrix.

  Collective.

  **SEE ALSO:**

  *create*, *MatDestroy*

  *Source code at petsc4py/PETSc/Mat.pyx:475*

  - **Return type**

    *Self*

- **diagonalScale(L=None, R=None)**

  Perform left and/or right diagonal scaling of the matrix.

  Collective.

  - **Parameters**

    - •

      **L** (*Vec \| None*) -- Optional left scaling vector.

    - •

      **R** (*Vec \| None*) -- Optional right scaling vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatDiagonalScale*

  *Source code at petsc4py/PETSc/Mat.pyx:3577*

- **duplicate(copy=False)**

  Return a clone of the matrix.

  Collective.

  - **Parameters**

    **copy** (*bool*) -- If *True*, it also copies the values.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatDuplicate*

  *Source code at petsc4py/PETSc/Mat.pyx:2004*

- **equal(mat)**

  Return the result of matrix comparison.

  Collective.

  **SEE ALSO:**

  *MatEqual*

  *Source code at petsc4py/PETSc/Mat.pyx:2259*

  - **Parameters**

    **mat** (*Mat*)

  - **Return type**

    *bool*

- **factorCholesky(isperm, options=None)**

  Perform an in-place Cholesky factorization.

  Collective.

  - **Parameters**

    - •

      **isperm** (*IS*) -- The row and column permutations.

    - •

      **options** (*dict\[str, Any\] \| None*) -- An optional dictionary of options for the factorization. These include **fill**, the expected fill as a ratio of the original fill.

  - **Return type**

    *None*

  **SEE ALSO:**

  *factorLU*, *MatCholeskyFactor*

  *Source code at petsc4py/PETSc/Mat.pyx:4684*

- **factorICC(isperm, options=None)**

  Perform an in-place an incomplete Cholesky factorization.

  Collective.

  - **Parameters**

    - •

      **isperm** (*IS*) -- The row and column permutations

    - •

      **options** (*dict\[str, Any\] \| None*) -- An optional dictionary of options for the factorization. These include **fill**, the expected fill as a ratio of the original fill.

  - **Return type**

    *None*

  **SEE ALSO:**

  *factorILU*, *MatICCFactor*

  *Source code at petsc4py/PETSc/Mat.pyx:4717*

- **factorILU(isrow, iscol, options=None)**

  Perform an in-place ILU factorization.

  Collective.

  - **Parameters**

    - •

      **isrow** (*IS*) -- The row permutation.

    - •

      **iscol** (*IS*) -- The column permutation.

    - •

      **options** (*dict\[str, Any\] \| None*) -- An optional dictionary of options for the factorization. These include **levels**, the number of levels of fill, **fill**, the expected fill as a ratio of the original fill, and **dtcol**, the pivot tolerance where **0** indicates no pivot and **1** indicates full column pivoting.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatILUFactor*

  *Source code at petsc4py/PETSc/Mat.pyx:4650*

- **factorLU(isrow, iscol, options=None)**

  Perform an in-place LU factorization.

  Collective.

  - **Parameters**

    - •

      **isrow** (*IS*) -- The row permutation.

    - •

      **iscol** (*IS*) -- The column permutation.

    - •

      **options** (*dict\[str, Any\] \| None*) -- An optional dictionary of options for the factorization. These include **fill**, the expected fill as a ratio of the original fill and **dtcol**, the pivot tolerance where **0** indicates no pivot and **1** indicates full column pivoting.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatLUFactor*

  *Source code at petsc4py/PETSc/Mat.pyx:4612*

- **factorNumericCholesky(mat, options=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Mat.pyx:4713*

  - **Parameters**

    **mat** (*Mat*)

  - **Return type**

    *None*

- **factorNumericLU(mat, options=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Mat.pyx:4646*

  - **Parameters**

    **mat** (*Mat*)

  - **Return type**

    *None*

- **factorSymbolicCholesky(isperm, options=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Mat.pyx:4709*

  - **Parameters**

    **isperm** (*IS*)

  - **Return type**

    *None*

- **factorSymbolicICC(isperm, options=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Mat.pyx:4742*

  - **Parameters**

    **isperm** (*IS*)

  - **Return type**

    *None*

- **factorSymbolicILU(isrow, iscol, options=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Mat.pyx:4680*

  - **Parameters**

    - •

      **isrow** (*IS*)

    - •

      **iscol** (*IS*)

  - **Return type**

    *None*

- **factorSymbolicLU(mat, isrow, iscol, options=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Mat.pyx:4642*

  - **Parameters**

    - •

      **mat** (*Mat*)

    - •

      **isrow** (*IS*)

    - •

      **iscol** (*IS*)

  - **Return type**

    *None*

- **findZeroRows()**

  Return the index set of empty rows.

  Collective.

  **SEE ALSO:**

  *MatFindZeroRows*

  *Source code at petsc4py/PETSc/Mat.pyx:3371*

  - **Return type**

    *IS*

- **fixISLocalEmpty(fix=True)**

  Compress out zero local rows from the local matrices.

  Collective.

  - **Parameters**

    **fix** (*bool*) -- When *True*, new local matrices and local to global maps are generated during the final assembly process.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatISFixLocalEmpty*

  *Source code at petsc4py/PETSc/Mat.pyx:4817*

- **getBlockSize()**

  Return the matrix block size.

  Not collective.

  **SEE ALSO:**

  *getBlockSize*, *MatGetBlockSize*

  *Source code at petsc4py/PETSc/Mat.pyx:1874*

  - **Return type**

    *int*

- **getBlockSizes()**

  Return the row and column block sizes.

  Not collective.

  **SEE ALSO:**

  *getBlockSize*, *MatGetBlockSizes*

  *Source code at petsc4py/PETSc/Mat.pyx:1888*

  - **Return type**

    *tuple*\[*int*, *int*\]

- **getColumnIJ(symmetric=False, compressed=False)**

  Return the CSC representation of the local sparsity pattern.

  Collective.

  - **Parameters**

    - •

      **symmetric** (*bool*) -- If *True*, return the symmetrized graph.

    - •

      **compressed** (*bool*) -- If *True*, return the compressed graph.

  - **Return type**

    *tuple*\[*ArrayInt*, *ArrayInt*\]

  **SEE ALSO:**

  *MatGetRowIJ*

  *Source code at petsc4py/PETSc/Mat.pyx:2518*

- **getColumnVector(column, result=None)**

  Return the columnᵗʰ column vector of the matrix.

  Collective.

  - **Parameters**

    - •

      **column** (*int*) -- Column index.

    - •

      **result** (*Vec \| None*) -- Optional vector to store the result.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *MatGetColumnVector*

  *Source code at petsc4py/PETSc/Mat.pyx:3458*

- **getDM()**

  Return the DM defining the data layout of the matrix.

  Not collective.

  **SEE ALSO:**

  *MatGetDM*

  *Source code at petsc4py/PETSc/Mat.pyx:5570*

  - **Return type**

    *DM*

- **getDenseArray(readonly=False)**

  Return the array where the data is stored.

  Not collective.

  - **Parameters**

    **readonly** (*bool*) -- Enable to obtain a read only array.

  - **Return type**

    *ArrayScalar*

  **SEE ALSO:**

  *MatDenseGetArrayRead*, *MatDenseGetArray*

  *Source code at petsc4py/PETSc/Mat.pyx:5375*

- **getDenseColumnVec(i, mode='rw')**

  Return the iᵗʰ column vector of the dense matrix.

  Collective.

  - **Parameters**

    - •

      **i** (*int*) -- The column index to access.

    - •

      **mode** (*AccessModeSpec*) -- The access type of the returned array

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *restoreDenseColumnVec*, *MatDenseGetColumnVec*, *MatDenseGetColumnVecRead*, *MatDenseGetColumnVecWrite*

  *Source code at petsc4py/PETSc/Mat.pyx:5428*

- **getDenseLDA()**

  Return the leading dimension of the array used by the dense matrix.

  Not collective.

  **SEE ALSO:**

  *MatDenseGetLDA*

  *Source code at petsc4py/PETSc/Mat.pyx:5361*

  - **Return type**

    *int*

- **getDenseLocalMatrix()**

  Return the local part of the dense matrix.

  Not collective.

  **SEE ALSO:**

  *MatDenseGetLocalMatrix*

  *Source code at petsc4py/PETSc/Mat.pyx:5413*

  - **Return type**

    *Mat*

- **getDiagonal(result=None)**

  Return the diagonal of the matrix.

  Collective.

  - **Parameters**

    **result** (*Vec \| None*) -- Optional vector to store the result.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *setDiagonal*, *MatGetDiagonal*

  *Source code at petsc4py/PETSc/Mat.pyx:3513*

- **getDiagonalBlock()**

  Return the part of the matrix associated with the on-process coupling.

  Not collective.

  **SEE ALSO:**

  *MatGetDiagonalBlock*

  *Source code at petsc4py/PETSc/Mat.pyx:3854*

  - **Return type**

    *Mat*

- **getISAllowRepeated()**

  Get the flag for repeated entries in the local to global map.

  Not collective.

  **SEE ALSO:**

  *setISAllowRepeated*, *MatISGetAllowRepeated*

  *Source code at petsc4py/PETSc/Mat.pyx:4803*

  - **Return type**

    *bool*

- **getISLocalMat()**

  Return the local matrix stored inside a *Type.IS* matrix.

  Not collective.

  **SEE ALSO:**

  *MatISGetLocalMat*

  *Source code at petsc4py/PETSc/Mat.pyx:4836*

  - **Return type**

    *Mat*

- **getInertia()**

  Return the inertia from a factored matrix.

  Collective.

  The matrix must have been factored by calling *factorCholesky*.

  - **Returns**

    - •

      **n** (*int*) -- The number of negative eigenvalues.

    - •

      **z** (*int*) -- The number of zero eigenvalues.

    - •

      **p** (*int*) -- The number of positive eigenvalues.

  - **Return type**

    *tuple*\[*int*, *int*, *int*\]

  **SEE ALSO:**

  *MatGetInertia*

  *Source code at petsc4py/PETSc/Mat.pyx:4746*

- **getInfo(info=None)**

  Return summary information.

  Collective.

  - **Parameters**

    **info** (*InfoType*) -- If *None*, it uses *InfoType.GLOBAL\_SUM*.

  - **Return type**

    *dict*\[*str*, *float*\]

  **SEE ALSO:**

  *MatInfo*, *MatGetInfo*

  *Source code at petsc4py/PETSc/Mat.pyx:1984*

- **getLGMap()**

  Return the local-to-global mappings.

  Not collective.

  **SEE ALSO:**

  *setLGMap*, *MatGetLocalToGlobalMapping*

  *Source code at petsc4py/PETSc/Mat.pyx:2784*

  - **Return type**

    *tuple*\[*LGMap*, *LGMap*\]

- **getLRCMats()**

  Return the constituents of a *Type.LRC* matrix.

  Not collective.

  - **Returns**

    - •

      **A** (*Mat*) -- The **A** matrix.

    - •

      **U** (*Mat*) -- The first dense rectangular matrix.

    - •

      **c** (*Vec*) -- The sequential vector containing the diagonal of **C**.

    - •

      **V** (*Mat*) -- The second dense rectangular matrix.

  - **Return type**

    *tuple*\[*Mat*, *Mat*, *Vec*, *Mat*\]

  **SEE ALSO:**

  *MatLRCGetMats*

  *Source code at petsc4py/PETSc/Mat.pyx:4918*

- **getLocalSize()**

  Return the local number of rows and columns.

  Not collective.

  **SEE ALSO:**

  *getSize*, *MatGetLocalSize*

  *Source code at petsc4py/PETSc/Mat.pyx:1844*

  - **Return type**

    *tuple*\[*int*, *int*\]

- **getLocalSubMatrix(isrow, iscol, submat=None)**

  Return a reference to a submatrix specified in local numbering.

  Collective.

  - **Parameters**

    - •

      **isrow** (*IS*) -- Row index set.

    - •

      **iscol** (*IS*) -- Column index set.

    - •

      **submat** (*Mat \| None*) -- Optional resultant matrix. When *None*, a new matrix is created. When not *None*, the matrix is first destroyed and then recreated.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *restoreLocalSubMatrix*, *MatGetLocalSubMatrix*

  *Source code at petsc4py/PETSc/Mat.pyx:4024*

- **getMumpsCntl(icntl)**

  Return the MUMPS parameter, **CNTL\[icntl\]**.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *MatMumpsGetCntl*

  *Source code at petsc4py/PETSc/Mat.pyx:5096*

  - **Parameters**

    **icntl** (*int*)

  - **Return type**

    *float*

- **getMumpsIcntl(icntl)**

  Return the MUMPS parameter, **ICNTL\[icntl\]**.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *MatMumpsGetIcntl*

  *Source code at petsc4py/PETSc/Mat.pyx:5060*

  - **Parameters**

    **icntl** (*int*)

  - **Return type**

    *int*

- **getMumpsInfo(icntl)**

  Return the MUMPS parameter, **INFO\[icntl\]**.

  Logically collective.

  - **Parameters**

    **icntl** (*int*) -- The index of the MUMPS INFO array.

  - **Return type**

    *int*

  **SEE ALSO:**

  *MatMumpsGetInfo*

  *Source code at petsc4py/PETSc/Mat.pyx:5111*

- **getMumpsInfog(icntl)**

  Return the MUMPS parameter, **INFOG\[icntl\]**.

  Logically collective.

  - **Parameters**

    **icntl** (*int*) -- The index of the MUMPS INFOG array.

  - **Return type**

    *int*

  **SEE ALSO:**

  *MatMumpsGetInfog*

  *Source code at petsc4py/PETSc/Mat.pyx:5131*

- **getMumpsRinfo(icntl)**

  Return the MUMPS parameter, **RINFO\[icntl\]**.

  Logically collective.

  - **Parameters**

    **icntl** (*int*) -- The index of the MUMPS RINFO array.

  - **Return type**

    *float*

  **SEE ALSO:**

  *MatMumpsGetRinfo*

  *Source code at petsc4py/PETSc/Mat.pyx:5151*

- **getMumpsRinfog(icntl)**

  Return the MUMPS parameter, **RINFOG\[icntl\]**.

  Logically collective.

  - **Parameters**

    **icntl** (*int*) -- The index of the MUMPS RINFOG array.

  - **Return type**

    *float*

  **SEE ALSO:**

  *MatMumpsGetRinfog*

  *Source code at petsc4py/PETSc/Mat.pyx:5171*

- **getNearNullSpace()**

  Return the near-nullspace.

  Not collective.

  **SEE ALSO:**

  *getNullSpace*, *setNearNullSpace*, *MatSetNearNullSpace*

  *Source code at petsc4py/PETSc/Mat.pyx:3686*

  - **Return type**

    *NullSpace*

- **getNestISs()**

  Return the index sets representing the row and column spaces.

  Not collective.

  **SEE ALSO:**

  *MatNestGetISs*

  *Source code at petsc4py/PETSc/Mat.pyx:5502*

  - **Return type**

    *tuple*\[*list*\[*IS*\], *list*\[*IS*\]\]

- **getNestLocalISs()**

  Return the local index sets representing the row and column spaces.

  Not collective.

  **SEE ALSO:**

  *MatNestGetLocalISs*

  *Source code at petsc4py/PETSc/Mat.pyx:5523*

  - **Return type**

    *tuple*\[*list*\[*IS*\], *list*\[*IS*\]\]

- **getNestSize()**

  Return the number of rows and columns of the matrix.

  Not collective.

  **SEE ALSO:**

  *MatNestGetSize*

  *Source code at petsc4py/PETSc/Mat.pyx:5488*

  - **Return type**

    *tuple*\[*int*, *int*\]

- **getNestSubMatrix(i, j)**

  Return a single submatrix.

  Not collective.

  - **Parameters**

    - •

      **i** (*int*) -- The first index of the matrix within the nesting.

    - •

      **j** (*int*) -- The second index of the matrix within the nesting.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatNestGetSubMat*

  *Source code at petsc4py/PETSc/Mat.pyx:5544*

- **getNullSpace()**

  Return the nullspace.

  Not collective.

  **SEE ALSO:**

  *setNullSpace*, *MatGetNullSpace*

  *Source code at petsc4py/PETSc/Mat.pyx:3632*

  - **Return type**

    *NullSpace*

- **getOption(option)**

  Return the option value.

  Not collective.

  **SEE ALSO:**

  *setOption*, *MatGetOption*

  *Source code at petsc4py/PETSc/Mat.pyx:1802*

  - **Parameters**

    **option** (*Option*)

  - **Return type**

    *bool*

- **getOptionsPrefix()**

  Return the prefix used for searching for options in the database.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *MatGetOptionsPrefix*

  *Source code at petsc4py/PETSc/Mat.pyx:1737*

  - **Return type**

    *str*

- **getOrdering(ord\_type)**

  Return a reordering for a matrix to improve a LU factorization.

  Collective.

  - **Parameters**

    **ord\_type** (*OrderingType*) -- The type of reordering.

  - **Returns**

    - •

      **rp** (*IS*) -- The row permutation indices.

    - •

      **cp** (*IS*) -- The column permutation indices.

  - **Return type**

    *tuple*\[*IS*, *IS*\]

  **SEE ALSO:**

  *MatGetOrdering*

  *Source code at petsc4py/PETSc/Mat.pyx:4556*

- **getOwnershipIS()**

  Return the ranges of rows and columns owned by each process as index sets.

  Not collective.

  **SEE ALSO:**

  *getOwnershipRanges*, *getOwnershipRangesColumn*, *MatGetOwnershipIS*

  *Source code at petsc4py/PETSc/Mat.pyx:1969*

  - **Return type**

    *tuple*\[*IS*, *IS*\]

- **getOwnershipRange()**

  Return the locally owned range of rows.

  Not collective.

  **SEE ALSO:**

  *getOwnershipRanges*, *getOwnershipRangeColumn*, *MatGetOwnershipRange*

  *Source code at petsc4py/PETSc/Mat.pyx:1902*

  - **Return type**

    *tuple*\[*int*, *int*\]

- **getOwnershipRangeColumn()**

  Return the locally owned range of columns.

  Not collective.

  **SEE ALSO:**

  *getOwnershipRangesColumn*, *getOwnershipRange*, *MatGetOwnershipRangeColumn*

  *Source code at petsc4py/PETSc/Mat.pyx:1936*

  - **Return type**

    *tuple*\[*int*, *int*\]

- **getOwnershipRanges()**

  Return the range of rows owned by each process.

  Not collective.

  The returned array is the result of exclusive scan of the local sizes.

  **SEE ALSO:**

  *getOwnershipRange*, *MatGetOwnershipRanges*

  *Source code at petsc4py/PETSc/Mat.pyx:1916*

  - **Return type**

    *ArrayInt*

- **getOwnershipRangesColumn()**

  Return the range of columns owned by each process.

  Not collective.

  **SEE ALSO:**

  *getOwnershipRangeColumn*, *MatGetOwnershipRangesColumn*

  *Source code at petsc4py/PETSc/Mat.pyx:1951*

  - **Return type**

    *ArrayInt*

- **getPythonContext()**

  Return the instance of the class implementing the required Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python matrix type*, *setPythonContext*

  *Source code at petsc4py/PETSc/Mat.pyx:1671*

  - **Return type**

    *Any*

- **getPythonType()**

  Return the fully qualified Python name of the class used by the matrix.

  Not collective.

  **SEE ALSO:**

  *PETSc Python matrix type*, *setPythonContext*, *setPythonType*, *MatPythonGetType*

  *Source code at petsc4py/PETSc/Mat.pyx:1706*

  - **Return type**

    *str*

- **getRedundantMatrix(nsubcomm, subcomm=None, out=None)**

  Return redundant matrices on subcommunicators.

  Collective.

  - **Parameters**

    - •

      **nsubcomm** (*int*) -- The number of subcommunicators.

    - •

      **subcomm** (*Comm \| None*) -- Communicator split or *None* for the null communicator.

    - •

      **out** (*Mat \| None*) -- Optional resultant matrix. When *None*, a new matrix is created, and **MAT\_INITIAL\_MATRIX** is used. When not *None*, the matrix is reused with **MAT\_REUSE\_MATRIX**.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatCreateRedundantMatrix*

  *Source code at petsc4py/PETSc/Mat.pyx:3483*

- **getRow(row)**

  Return the column indices and values for the requested row.

  Not collective.

  **SEE ALSO:**

  *MatGetRow*

  *Source code at petsc4py/PETSc/Mat.pyx:2467*

  - **Parameters**

    **row** (*int*)

  - **Return type**

    *tuple*\[*ArrayInt*, *ArrayScalar*\]

- **getRowIJ(symmetric=False, compressed=False)**

  Return the CSR representation of the local sparsity pattern.

  Collective.

  - **Parameters**

    - •

      **symmetric** (*bool*) -- If *True*, return the symmetrized graph.

    - •

      **compressed** (*bool*) -- If *True*, return the compressed graph.

  - **Return type**

    *tuple*\[*ArrayInt*, *ArrayInt*\]

  **SEE ALSO:**

  *MatGetRowIJ*

  *Source code at petsc4py/PETSc/Mat.pyx:2487*

- **getRowSum(result=None)**

  Return the row-sum vector.

  Collective.

  - **Parameters**

    **result** (*Vec \| None*) -- Optional vector to store the result.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *MatGetRowSum*

  *Source code at petsc4py/PETSc/Mat.pyx:3535*

- **getSchurComplementSubMatrices()**

  Return Schur complement sub-matrices.

  Collective.

  **SEE ALSO:**

  *MatSchurComplementGetSubMatrices*

  *Source code at petsc4py/PETSc/Mat.pyx:4003*

  - **Return type**

    *tuple*\[*Mat*, *Mat*, *Mat*, *Mat*, *Mat*\]

- **getSize()**

  Return the global number of rows and columns.

  Not collective.

  **SEE ALSO:**

  *getLocalSize*, *getSizes*, *MatGetSize*

  *Source code at petsc4py/PETSc/Mat.pyx:1830*

  - **Return type**

    *tuple*\[*int*, *int*\]

- **getSizes()**

  Return the tuple of matrix layouts.

  Not collective.

  **SEE ALSO:**

  *getLocalSize*, *getSize*

  *Source code at petsc4py/PETSc/Mat.pyx:1858*

  - **Return type**

    *tuple*\[*LayoutSizeSpec*, *LayoutSizeSpec*\]

- **getTransposeNullSpace()**

  Return the transpose nullspace.

  Not collective.

  **SEE ALSO:**

  *getNullSpace*, *setTransposeNullSpace*, *MatGetTransposeNullSpace*

  *Source code at petsc4py/PETSc/Mat.pyx:3659*

  - **Return type**

    *NullSpace*

- **getType()**

  Return the type of the matrix.

  Not collective.

  **SEE ALSO:**

  *setType*, *Type*, *MatGetType*

  *Source code at petsc4py/PETSc/Mat.pyx:1816*

  - **Return type**

    *str*

- **getValue(row, col)**

  Return the value in the (row, col) position.

  Not collective.

  **SEE ALSO:**

  *MatGetValues*

  *Source code at petsc4py/PETSc/Mat.pyx:2392*

  - **Return type**

    *Scalar*

- **getValues(rows, cols, values=None)**

  Return the values in the **zip(rows, cols)** positions.

  Not collective.

  - **Parameters**

    - •

      **rows** (*Sequence\[int\]*) -- Row indices.

    - •

      **cols** (*Sequence\[int\]*) -- Column indices.

    - •

      **values** (*ArrayScalar*) -- Optional array where to store the values.

  - **Return type**

    *ArrayScalar*

  **SEE ALSO:**

  *MatGetValues*

  *Source code at petsc4py/PETSc/Mat.pyx:2408*

- **getValuesCSR()**

  Return the CSR representation of the local part of the matrix.

  Not collective.

  **SEE ALSO:**

  *MatGetRow*

  *Source code at petsc4py/PETSc/Mat.pyx:2429*

  - **Return type**

    *tuple*\[*ArrayInt*, *ArrayInt*, *ArrayScalar*\]

- **getVecType()**

  Return the vector type used by the matrix.

  Not collective.

  **SEE ALSO:**

  *setVecType*, *MatGetVecType*

  *Source code at petsc4py/PETSc/Mat.pyx:658*

  - **Return type**

    *str*

- **hermitianTranspose(out=None)**

  Return the transposed Hermitian matrix.

  Collective.

  - **Parameters**

    **out** (*Mat \| None*) -- Optional return matrix. If *None*, inplace transposition is performed. Otherwise, the matrix is reused.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatHermitianTranspose*

  *Source code at petsc4py/PETSc/Mat.pyx:2142*

- **imagPart(out=None)**

  Return the imaginary part of the matrix.

  Collective.

  - **Parameters**

    **out** (*Mat \| None*) -- Optional return matrix. If *None*, the operation is performed in-place. Otherwise, the operation is performed on **out**.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *realPart*, *conjugate*, *MatImaginaryPart*

  *Source code at petsc4py/PETSc/Mat.pyx:2192*

- **increaseOverlap(iset, overlap=1)**

  Increase the overlap of a index set.

  Collective.

  **SEE ALSO:**

  *MatIncreaseOverlap*

  *Source code at petsc4py/PETSc/Mat.pyx:3869*

  - **Parameters**

    - •

      **iset** (*IS*)

    - •

      **overlap** (*int*)

  - **Return type**

    *None*

- **invertBlockDiagonal()**

  Return the inverse of the block-diagonal entries.

  Collective.

  **SEE ALSO:**

  *MatInvertBlockDiagonal*

  *Source code at petsc4py/PETSc/Mat.pyx:3599*

  - **Return type**

    *ArrayScalar*

- **isAssembled()**

  The boolean flag indicating if the matrix is assembled.

  Not collective.

  **SEE ALSO:**

  *assemble*, *MatAssembled*

  *Source code at petsc4py/PETSc/Mat.pyx:3357*

  - **Return type**

    *bool*

- **isHermitian(tol=0)**

  Return the boolean indicating if the matrix is Hermitian.

  Collective.

  - **Parameters**

    **tol** (*float*) -- Tolerance for comparison.

  - **Return type**

    *bool*

  **SEE ALSO:**

  *MatIsHermitian*

  *Source code at petsc4py/PETSc/Mat.pyx:2331*

- **isHermitianKnown()**

  Return the 2-tuple indicating if the matrix is known to be Hermitian.

  Not collective.

  **SEE ALSO:**

  *MatIsHermitianKnown*

  *Source code at petsc4py/PETSc/Mat.pyx:2351*

  - **Return type**

    *tuple*\[*bool*, *bool*\]

- **isStructurallySymmetric()**

  Return the boolean indicating if the matrix is structurally symmetric.

  Not collective.

  **SEE ALSO:**

  *MatIsStructurallySymmetric*

  *Source code at petsc4py/PETSc/Mat.pyx:2366*

  - **Return type**

    *bool*

- **isSymmetric(tol=0)**

  Return the boolean indicating if the matrix is symmetric.

  Collective.

  - **Parameters**

    **tol** (*float*) -- Tolerance for comparison.

  - **Return type**

    *bool*

  **SEE ALSO:**

  *MatIsSymmetric*

  *Source code at petsc4py/PETSc/Mat.pyx:2296*

- **isSymmetricKnown()**

  Return the 2-tuple indicating if the matrix is known to be symmetric.

  Not collective.

  **SEE ALSO:**

  *MatIsSymmetricKnown*

  *Source code at petsc4py/PETSc/Mat.pyx:2316*

  - **Return type**

    *tuple*\[*bool*, *bool*\]

- **isTranspose(mat=None, tol=0)**

  Return the result of matrix comparison with transposition.

  Collective.

  - **Parameters**

    - •

      **mat** (*Mat \| None*) -- Matrix to compare against. Uses **self** if *None*.

    - •

      **tol** (*float*) -- Tolerance for comparison.

  - **Return type**

    *bool*

  **SEE ALSO:**

  *MatIsTranspose*

  *Source code at petsc4py/PETSc/Mat.pyx:2273*

- **kron(mat, result=None)**

  Compute C, the Kronecker product of A and B.

  Collective.

  - **Parameters**

    - •

      **mat** (*Mat*) -- The right hand matrix B.

    - •

      **result** (*Mat \| None*) -- The optional resultant matrix. When *None*, a new matrix is created, and **MAT\_INITIAL\_MATRIX** is used. When it is not *None*, the matrix is reused with **MAT\_REUSE\_MATRIX**.

  - **Returns**

    **result** -- The resultant matrix C, the Kronecker product of A and B.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatSeqAIJKron*, *MatReuse*

  *Source code at petsc4py/PETSc/Mat.pyx:4485*

- **load(viewer)**

  Load a matrix.

  Collective.

  **SEE ALSO:**

  *MatLoad*

  *Source code at petsc4py/PETSc/Mat.pyx:2053*

  - **Parameters**

    **viewer** (*Viewer*)

  - **Return type**

    *Self*

- **matMatMult(B, C, result=None, fill=None)**

  Perform matrix-matrix-matrix multiplication D=ABC.

  Neighborwise collective.

  - **Parameters**

    - •

      **B** (*Mat*) -- The middle matrix B.

    - •

      **C** (*Mat*) -- The right hand matrix C.

    - •

      **result** (*Mat \| None*) -- The optional resultant matrix D. When *None*, a new matrix is created, and **MAT\_INITIAL\_MATRIX** is used. When D is not *None*, the matrix is reused with **MAT\_REUSE\_MATRIX**.

    - •

      **fill** (*float \| None*) -- Expected fill as ratio of nnz(C)/nnz(A), use *None* if you do not have a good estimate. If the result is a dense matrix this is irrelevant.

  - **Returns**

    **result** -- The resultant product matrix D.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatMatMatMult*, *MatReuse*

  *Source code at petsc4py/PETSc/Mat.pyx:4440*

- **matMult(mat, result=None, fill=None)**

  Perform matrix-matrix multiplication C=AB.

  Neighborwise collective.

  - **Parameters**

    - •

      **mat** (*Mat*) -- The right hand matrix B.

    - •

      **result** (*Mat \| None*) -- The optional resultant matrix C. When *None*, a new matrix is created, and **MAT\_INITIAL\_MATRIX** is used. When C is not *None*, the matrix is reused with **MAT\_REUSE\_MATRIX**.

    - •

      **fill** (*float \| None*) -- Expected fill as ratio of nnz(C)/(nnz(A) + nnz(B)), use *None* if you do not have a good estimate. If the result is a dense matrix this is irrelevant.

  - **Returns**

    **result** -- The resultant product matrix C.

  - **Return type**

    *Mat*

  Notes

  To determine the correct fill value, run with -info and search for the string "Fill ratio" to see the value actually needed.

  **SEE ALSO:**

  *MatMatMult*, *MatReuse*

  *Source code at petsc4py/PETSc/Mat.pyx:4201*

- **matSolve(B, X)**

  Solve AX=B, given a factored matrix A.

  Neighborwise collective.

  - **Parameters**

    - •

      **B** (*Mat*) -- The right-hand side matrix of type *Type.DENSE*. Can be of type *Type.AIJ* if using MUMPS.

    - •

      **X** (*Mat*) -- The output solution matrix, must be different than **B**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSP.create*, *MatMatSolve*

  *Source code at petsc4py/PETSc/Mat.pyx:5321*

- **matTransposeMult(mat, result=None, fill=None)**

  Perform matrix-matrix multiplication C=ABᵀ.

  Neighborwise collective.

  - **Parameters**

    - •

      **mat** (*Mat*) -- The right hand matrix B.

    - •

      **result** (*Mat \| None*) -- The optional resultant matrix C. When *None*, a new matrix is created, and **MAT\_INITIAL\_MATRIX** is used. When C is not *None*, the matrix is reused with **MAT\_REUSE\_MATRIX**.

    - •

      **fill** (*float \| None*) -- Expected fill as ratio of nnz(C)/(nnz(A) + nnz(B)), use *None* if you do not have a good estimate. If the result is a dense matrix this is irrelevant.

  - **Returns**

    **result** -- The resultant product matrix C.

  - **Return type**

    *Mat*

  Notes

  To determine the correct fill value, run with -info and search for the string "Fill ratio" to see the value actually needed.

  **SEE ALSO:**

  *MatMatTransposeMult*, *MatReuse*

  *Source code at petsc4py/PETSc/Mat.pyx:4248*

- **mult(x, y)**

  Perform the matrix vector product y = A @ x.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector.

    - •

      **y** (*Vec*) -- The output vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatMult*

  *Source code at petsc4py/PETSc/Mat.pyx:3703*

- **multAdd(x, v, y)**

  Perform the matrix vector product with addition y = A @ x + v.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector for the matrix-vector product.

    - •

      **v** (*Vec*) -- The input vector to be added to.

    - •

      **y** (*Vec*) -- The output vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatMultAdd*

  *Source code at petsc4py/PETSc/Mat.pyx:3722*

- **multHermitian(x, y)**

  Perform the Hermitian matrix vector product y = A^H @ x.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector for the Hermitian matrix-vector product.

    - •

      **y** (*Vec*) -- The output vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatMultHermitianTranspose*

  *Source code at petsc4py/PETSc/Mat.pyx:3783*

- **multHermitianAdd(x, v, y)**

  Perform the Hermitian matrix vector product with addition y = A^H @ x + v.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector for the Hermitian matrix-vector product.

    - •

      **v** (*Vec*) -- The input vector to be added to.

    - •

      **y** (*Vec*) -- The output vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatMultHermitianTransposeAdd*

  *Source code at petsc4py/PETSc/Mat.pyx:3802*

- **multTranspose(x, y)**

  Perform the transposed matrix vector product y = A^T @ x.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector.

    - •

      **y** (*Vec*) -- The output vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatMultTranspose*

  *Source code at petsc4py/PETSc/Mat.pyx:3743*

- **multTransposeAdd(x, v, y)**

  Perform the transposed matrix vector product with addition y = A^T @ x + v.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector for the transposed matrix-vector product.

    - •

      **v** (*Vec*) -- The input vector to be added to.

    - •

      **y** (*Vec*) -- The output vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatMultTransposeAdd*

  *Source code at petsc4py/PETSc/Mat.pyx:3762*

- **norm(norm\_type=None)**

  Compute the requested matrix norm.

  Collective.

  A 2-tuple is returned if *NormType.NORM\_1\_AND\_2* is specified.

  **SEE ALSO:**

  *MatNorm*, *NormType*

  *Source code at petsc4py/PETSc/Mat.pyx:4073*

  - **Parameters**

    **norm\_type** (*NormTypeSpec*)

  - **Return type**

    *float* \| *tuple*\[*float*, *float*\]

- **permute(row, col)**

  Return the permuted matrix.

  Collective.

  - **Parameters**

    - •

      **row** (*IS*) -- Row permutation.

    - •

      **col** (*IS*) -- Column permutation.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatPermute*

  *Source code at petsc4py/PETSc/Mat.pyx:2238*

- **preallocatorPreallocate(A, fill=True)**

  Preallocate memory for a matrix using a preallocator matrix.

  Collective.

  The current matrix (**self**) must be of type *Type.PREALLOCATOR*.

  - **Parameters**

    - •

      **A** (*Mat*) -- The matrix to be preallocated.

    - •

      **fill** (*bool*) -- Flag indicating whether or not to insert zeros into the newly allocated matrix, defaults to *True*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatPreallocatorPreallocate*

  *Source code at petsc4py/PETSc/Mat.pyx:933*

- **ptap(P, result=None, fill=None)**

  Creates the matrix product C = PᵀAP.

  Neighborwise collective.

  - **Parameters**

    - •

      **P** (*Mat*) -- The matrix P.

    - •

      **result** (*Mat \| None*) -- The optional resultant matrix C. When *None*, a new matrix is created, and **MAT\_INITIAL\_MATRIX** is used. When C is not *None*, the matrix is reused with **MAT\_REUSE\_MATRIX**.

    - •

      **fill** (*float \| None*) -- Expected fill as ratio of nnz(C)/(nnz(A) + nnz(P)), use *None* if you do not have a good estimate. If the result is a dense matrix this is irrelevant.

  - **Returns**

    **result** -- The resultant product matrix C.

  - **Return type**

    *Mat*

  Notes

  To determine the correct fill value, run with -info and search for the string "Fill ratio" to see the value actually needed.

  An alternative approach to this function is to use *MatProductCreate* and set the desired options before the computation is done.

  **SEE ALSO:**

  *MatPtAP*, *MatReuse*

  *Source code at petsc4py/PETSc/Mat.pyx:4342*

- **rart(R, result=None, fill=None)**

  Create the matrix product C = RARᵀ.

  Neighborwise collective.

  - **Parameters**

    - •

      **R** (*Mat*) -- The projection matrix.

    - •

      **result** (*Mat \| None*) -- The optional resultant matrix C. When *None*, a new matrix is created, and **MAT\_INITIAL\_MATRIX** is used. When C is not *None*, the matrix is reused with **MAT\_REUSE\_MATRIX**.

    - •

      **fill** (*float \| None*) -- Expected fill as ratio of nnz(C)/nnz(A), use *None* if you do not have a good estimate. If the result is a dense matrix this is irrelevant.

  - **Returns**

    **result** -- The resultant product matrix C.

  - **Return type**

    *Mat*

  Notes

  To determine the correct fill value, run with -info and search for the string "Fill ratio" to see the value actually needed.

  **SEE ALSO:**

  *MatRARt*, *MatReuse*

  *Source code at petsc4py/PETSc/Mat.pyx:4393*

- **realPart(out=None)**

  Return the real part of the matrix.

  Collective.

  - **Parameters**

    **out** (*Mat \| None*) -- Optional return matrix. If *None*, the operation is performed in-place. Otherwise, the operation is performed on **out**.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *imagPart*, *conjugate*, *MatRealPart*

  *Source code at petsc4py/PETSc/Mat.pyx:2169*

- **reorderForNonzeroDiagonal(isrow, iscol, atol=0)**

  Change a matrix ordering to remove zeros from the diagonal.

  Collective.

  - **Parameters**

    - •

      **isrow** (*IS*) -- The row reordering.

    - •

      **iscol** (*IS*) -- The column reordering.

    - •

      **atol** (*float*) -- The absolute tolerance. Values along the diagonal whose absolute value are smaller than this tolerance are moved off the diagonal.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getOrdering*, *MatReorderForNonzeroDiagonal*

  *Source code at petsc4py/PETSc/Mat.pyx:4584*

- **restoreDenseColumnVec(i, mode='rw')**

  Restore the iᵗʰ column vector of the dense matrix.

  Collective.

  - **Parameters**

    - •

      **i** (*int*) -- The column index to be restored.

    - •

      **mode** (*AccessModeSpec*) -- The access type of the restored array

  - **Return type**

    *None*

  **SEE ALSO:**

  *getDenseColumnVec*, *MatDenseRestoreColumnVec*, *MatDenseRestoreColumnVecRead*, *MatDenseRestoreColumnVecWrite*

  *Source code at petsc4py/PETSc/Mat.pyx:5460*

- **restoreISLocalMat(local)**

  Restore the local matrix obtained with *getISLocalMat*.

  Not collective.

  - **Parameters**

    **local** (*Mat*) -- The local matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatISRestoreLocalMat*

  *Source code at petsc4py/PETSc/Mat.pyx:4851*

- **restoreLocalSubMatrix(isrow, iscol, submat)**

  Restore a reference to a submatrix obtained with *getLocalSubMatrix*.

  Collective.

  - **Parameters**

    - •

      **isrow** (*IS*) -- Row index set.

    - •

      **iscol** (*IS*) -- Column index set.

    - •

      **submat** (*Mat*) -- The submatrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getLocalSubMatrix*, *MatRestoreLocalSubMatrix*

  *Source code at petsc4py/PETSc/Mat.pyx:4050*

- **retrieveValues()**

  Retrieve a copy of the matrix values previously stored with *storeValues*.

  Collective.

  **SEE ALSO:**

  *storeValues*, *MatRetrieveValues*

  *Source code at petsc4py/PETSc/Mat.pyx:3290*

  - **Return type**

    *None*

- **scale(alpha)**

  Scale the matrix.

  Collective.

  **SEE ALSO:**

  *MatScale*

  *Source code at petsc4py/PETSc/Mat.pyx:4095*

  - **Parameters**

    **alpha** (*Scalar*)

  - **Return type**

    *None*

- **setBlockSize(bsize)**

  Set the matrix block size (same for rows and columns).

  Logically collective.

  - **Parameters**

    **bsize** (*int*) -- Block size.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setBlockSizes*, *setSizes*, *MatSetBlockSize*

  *Source code at petsc4py/PETSc/Mat.pyx:586*

- **setBlockSizes(row\_bsize, col\_bsize)**

  Set the row and column block sizes.

  Logically collective.

  - **Parameters**

    - •

      **row\_bsize** (*int*) -- Row block size.

    - •

      **col\_bsize** (*int*) -- Column block size.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setBlockSize*, *setSizes*, *MatSetBlockSizes*

  *Source code at petsc4py/PETSc/Mat.pyx:604*

- **setDM(dm)**

  Set the DM defining the data layout of the matrix.

  Not collective.

  - **Parameters**

    **dm** (*DM*) -- The *DM*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetDM*

  *Source code at petsc4py/PETSc/Mat.pyx:5587*

- **setDenseLDA(lda)**

  Set the leading dimension of the array used by the dense matrix.

  Not collective.

  - **Parameters**

    **lda** (*int*) -- The leading dimension.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatDenseSetLDA*

  *Source code at petsc4py/PETSc/Mat.pyx:5343*

- **setDiagonal(diag, addv=None)**

  Set the diagonal values of the matrix.

  Collective.

  - **Parameters**

    - •

      **diag** (*Vec*) -- Vector storing diagonal values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getDiagonal*, *MatDiagonalSet*

  *Source code at petsc4py/PETSc/Mat.pyx:3557*

- **setFromOptions()**

  Configure the matrix from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *MatSetFromOptions*

  *Source code at petsc4py/PETSc/Mat.pyx:1765*

  - **Return type**

    *None*

- **setISAllowRepeated(allow=True)**

  Allow repeated entries in the local to global map.

  Logically collective.

  - **Parameters**

    **allow** (*bool*) -- When *True*, local dofs are allowed to map to the same global dof.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getISAllowRepeated*, *MatISSetAllowRepeated*

  *Source code at petsc4py/PETSc/Mat.pyx:4785*

- **setISLocalMat(local)**

  Set the local matrix stored inside a *Type.IS*.

  Not collective.

  - **Parameters**

    **local** (*Mat*) -- The local matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatISSetLocalMat*

  *Source code at petsc4py/PETSc/Mat.pyx:4868*

- **setISPreallocation(nnz, onnz)**

  Preallocate memory for a *Type.IS* parallel matrix.

  Collective.

  - **Parameters**

    - •

      **nnz** (*Sequence\[int\]*) -- The sequence whose length corresponds to the number of local rows and values which represent the number of nonzeros in the various rows of the *diagonal* of the local submatrix.

    - •

      **onnz** (*Sequence\[int\]*) -- The sequence whose length corresponds to the number of local rows and values which represent the number of nonzeros in the various rows of the *off-diagonal* of the local submatrix.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *MatISSetPreallocation*

  *Source code at petsc4py/PETSc/Mat.pyx:4885*

- **setLGMap(rmap, cmap=None)**

  Set the local-to-global mappings.

  Collective.

  - **Parameters**

    - •

      **rmap** (*LGMap*) -- Row mapping.

    - •

      **cmap** (*LGMap \| None*) -- Column mapping. If *None*, **cmap = rmap**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getLGMap*, *MatSetLocalToGlobalMapping*

  *Source code at petsc4py/PETSc/Mat.pyx:2764*

- **setLRCMats(A, U, c=None, V=None)**

  Set the constituents of a *Type.LRC* matrix.

  Logically collective.

  - **Parameters**

    - •

      **A** (*Mat*) -- The **A** matrix, or *None* to omit **A**.

    - •

      **U** (*Mat*) -- The first dense rectangular matrix.

    - •

      **c** (*Vec*) -- The sequential vector containing the diagonal of **C**, or *None* for all ones.

    - •

      **V** (*Mat*) -- The second dense rectangular matrix, or *None* for a copy of **U**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatLRCSetMats*

  *Source code at petsc4py/PETSc/Mat.pyx:4950*

- **setMumpsCntl(icntl, val)**

  Set a MUMPS parameter, **CNTL\[icntl\] = val**.

  Logically collective.

  - **Parameters**

    - •

      **icntl** (*int*) -- The index of the MUMPS parameter array.

    - •

      **val** (*float*) -- The value to set.

  - **Return type**

    *None*

  **SEE ALSO:**

  *Working with PETSc options*, *MatMumpsSetCntl*

  *Source code at petsc4py/PETSc/Mat.pyx:5075*

- **setMumpsIcntl(icntl, ival)**

  Set a MUMPS parameter, **ICNTL\[icntl\] = ival**.

  Logically collective.

  - **Parameters**

    - •

      **icntl** (*int*) -- The index of the MUMPS parameter array.

    - •

      **ival** (*int*) -- The value to set.

  - **Return type**

    *None*

  **SEE ALSO:**

  *Working with PETSc options*, *MatMumpsSetIcntl*

  *Source code at petsc4py/PETSc/Mat.pyx:5039*

- **setNearNullSpace(nsp)**

  Set the near-nullspace.

  Collective.

  **SEE ALSO:**

  *setNullSpace*, *getNearNullSpace*, *MatSetNearNullSpace*

  *Source code at petsc4py/PETSc/Mat.pyx:3674*

  - **Parameters**

    **nsp** (*NullSpace*)

  - **Return type**

    *None*

- **setNestVecType(vec\_type)**

  Set the vector type for a *Type.NEST* matrix.

  Collective.

  - **Parameters**

    **vec\_type** (*Type \| str*) -- Vector type used when creating vectors with *createVecs*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getVecType*, *MatNestSetVecType*

  *Source code at petsc4py/PETSc/Mat.pyx:672*

- **setNullSpace(nsp)**

  Set the nullspace.

  Collective.

  **SEE ALSO:**

  *getNullSpace*, *MatSetNullSpace*

  *Source code at petsc4py/PETSc/Mat.pyx:3620*

  - **Parameters**

    **nsp** (*NullSpace*)

  - **Return type**

    *None*

- **setOption(option, flag)**

  Set option.

  Collective.

  **SEE ALSO:**

  *getOption*, *MatSetOption*

  *Source code at petsc4py/PETSc/Mat.pyx:1790*

  - **Parameters**

    - •

      **option** (*Option*)

    - •

      **flag** (*bool*)

  - **Return type**

    *None*

- **setOptionsPrefix(prefix=None)**

  Set the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *getOptionsPrefix*, *MatSetOptionsPrefix*

  *Source code at petsc4py/PETSc/Mat.pyx:1723*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **setPreallocationCSR(csr)**

  Preallocate memory for the matrix with a CSR layout.

  Collective.

  Correct preallocation can result in a dramatic reduction in matrix assembly time.

  - **Parameters**

    **csr** (*CSRIndicesSpec*) -- Local matrix data in compressed sparse row layout format.

  - **Return type**

    *Self*

  Notes

  Must use the block-compressed form with *Type.BAIJ* and *Type.SBAIJ*.

  **SEE ALSO:**

  *setPreallocationNNZ*, *createAIJ*, *createBAIJ*, *createSBAIJ*, *MatSeqAIJSetPreallocationCSR*, *MatMPIAIJSetPreallocationCSR*, *MatSeqBAIJSetPreallocationCSR*, *MatMPIBAIJSetPreallocationCSR*, *MatSeqSBAIJSetPreallocationCSR*, *MatMPISBAIJSetPreallocationCSR*

  *Source code at petsc4py/PETSc/Mat.pyx:899*

- **setPreallocationDense(array)**

  Set the array used for storing matrix elements for a dense matrix.

  Collective.

  - **Parameters**

    **array** (*Sequence\[Scalar\]*) -- Array that will be used to store matrix data.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *MatSeqDenseSetPreallocation*, *MatMPIDenseSetPreallocation*

  *Source code at petsc4py/PETSc/Mat.pyx:1140*

- **setPreallocationNNZ(nnz)**

  Preallocate memory for the matrix with a non-zero pattern.

  Collective.

  Correct preallocation can result in a dramatic reduction in matrix assembly time.

  - **Parameters**

    **nnz** (*NNZSpec*) -- The number of non-zeros per row for the local portion of the matrix, or a 2-tuple for the on-process and off-process part of the matrix.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *setPreallocationCSR*, *createAIJ*, *MatSeqAIJSetPreallocation*, *MatMPIAIJSetPreallocation*

  *Source code at petsc4py/PETSc/Mat.pyx:873*

- **setPythonContext(context)**

  Set the instance of the class implementing the required Python methods.

  Logically collective.

  Notes

  In order to use the matrix, *Mat.setUp* must be called after having set the context. Pass *None* to reset the matrix to its initial state.

  **SEE ALSO:**

  *PETSc Python matrix type*, *getPythonContext*, *setPythonType*

  *Source code at petsc4py/PETSc/Mat.pyx:1654*

  - **Parameters**

    **context** (*Any*)

  - **Return type**

    *None*

- **setPythonType(py\_type)**

  Set the fully qualified Python name of the class to be used.

  Collective.

  Notes

  In order to use the matrix, *Mat.setUp* must be called after having set the type.

  **SEE ALSO:**

  *PETSc Python matrix type*, *setPythonContext*, *getPythonType*, *MatPythonSetType*

  *Source code at petsc4py/PETSc/Mat.pyx:1686*

  - **Parameters**

    **py\_type** (*str*)

  - **Return type**

    *None*

- **setRandom(random=None)**

  Set random values in the matrix.

  Collective.

  - **Parameters**

    **random** (*Random \| None*) -- The random number generator object or *None* for the default.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetRandom*

  *Source code at petsc4py/PETSc/Mat.pyx:4134*

- **setSizes(size, bsize=None)**

  Set the local, global and block sizes.

  Collective.

  - **Parameters**

    - •

      **size** (*MatSizeSpec*) -- Matrix size.

    - •

      **bsize** (*MatBlockSizeSpec \| None*) -- Matrix block size. If *None*, a block size of **1** is set.

  - **Return type**

    *None*

  Examples

  Create a *Mat* with **n** rows and columns and the same local and global sizes.

  ```
  >>> mat = PETSc.Mat().create()
  >>> mat.setFromOptions()
  >>> mat.setSizes(n)
  ```

  Create a *Mat* with **nr** rows, **nc** columns and the same local and global sizes.

  ```
  >>> mat = PETSc.Mat().create()
  >>> mat.setFromOptions()
  >>> mat.setSizes([nr, nc])
  ```

  Create a *Mat* with **nrl** local rows, **nrg** global rows, **ncl** local columns and **ncg** global columns.

  ```
  >>> mat = PETSc.Mat().create()
  >>> mat.setFromOptions()
  >>> mat.setSizes([[nrl, nrg], [ncl, ncg]])
  ```

  **SEE ALSO:**

  *setBlockSize*, *setBlockSizes*, *MatSetSizes*, *MatSetBlockSize*, *MatSetBlockSizes*

  *Source code at petsc4py/PETSc/Mat.pyx:533*

- **setStencil(dims, starts=None, dof=1)**

  Set matrix stencil.

  Not collective.

  **SEE ALSO:**

  *MatSetStencil*

  *Source code at petsc4py/PETSc/Mat.pyx:3022*

  - **Parameters**

    - •

      **dims** (*DimsSpec*)

    - •

      **starts** (*DimsSpec \| None*)

    - •

      **dof** (*int*)

  - **Return type**

    *None*

- **setTransposeNullSpace(nsp)**

  Set the transpose nullspace.

  Collective.

  **SEE ALSO:**

  *setNullSpace*, *getTransposeNullSpace*, *MatSetTransposeNullSpace*

  *Source code at petsc4py/PETSc/Mat.pyx:3647*

  - **Parameters**

    **nsp** (*NullSpace*)

  - **Return type**

    *None*

- **setTransposePrecursor(out)**

  Set transpose precursor.

  Logically collective.

  **SEE ALSO:**

  *MatTransposeSetPrecursor*

  *Source code at petsc4py/PETSc/Mat.pyx:2130*

  - **Parameters**

    **out** (*Mat*)

  - **Return type**

    *None*

- **setType(mat\_type)**

  Set the matrix type.

  Collective.

  - **Parameters**

    **mat\_type** (*Type \| str*) -- The matrix type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *create*, *getType*, *MatSetType*

  *Source code at petsc4py/PETSc/Mat.pyx:514*

- **setUnfactored()**

  Set a factored matrix to be treated as unfactored.

  Logically collective.

  **SEE ALSO:**

  *MatSetUnfactored*

  *Source code at petsc4py/PETSc/Mat.pyx:4771*

  - **Return type**

    *None*

- **setUp()**

  Set up the internal data structures for using the matrix.

  Collective.

  **SEE ALSO:**

  *MatSetUp*

  *Source code at petsc4py/PETSc/Mat.pyx:1777*

  - **Return type**

    *Self*

- **setValue(row, col, value, addv=None)**

  Set a value to the **(row, col)** entry of the matrix.

  Not collective.

  - **Parameters**

    - •

      **row** (*int*) -- Row index.

    - •

      **col** (*int*) -- Column index.

    - •

      **value** (*Scalar*) -- The scalar value.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValues*

  *Source code at petsc4py/PETSc/Mat.pyx:2548*

- **setValueBlockedStagStencil(row, col, value, addv=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Mat.pyx:3106*

  - **Return type**

    *None*

- **setValueBlockedStencil(row, col, value, addv=None)**

  Set a block of values to row and col stencil.

  Not collective.

  - **Parameters**

    - •

      **row** (*Stencil*) -- Row stencil.

    - •

      **col** (*Stencil*) -- Column stencil.

    - •

      **value** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesBlockedStencil*

  *Source code at petsc4py/PETSc/Mat.pyx:3076*

- **setValueLocal(row, col, value, addv=None)**

  Set a value to the **(row, col)** entry of the matrix in local ordering.

  Not collective.

  - **Parameters**

    - •

      **row** (*int*) -- Local row index.

    - •

      **col** (*int*) -- Local column index.

    - •

      **value** (*Scalar*) -- The scalar value.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesLocal*

  *Source code at petsc4py/PETSc/Mat.pyx:2801*

- **setValueStagStencil(row, col, value, addv=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Mat.pyx:3072*

  - **Return type**

    *None*

- **setValueStencil(row, col, value, addv=None)**

  Set a value to row and col stencil.

  Not collective.

  - **Parameters**

    - •

      **row** (*Stencil*) -- Row stencil.

    - •

      **col** (*Stencil*) -- Column stencil.

    - •

      **value** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesStencil*

  *Source code at petsc4py/PETSc/Mat.pyx:3042*

- **setValues(rows, cols, values, addv=None)**

  Set values to the rows ⊗ cols entries of the matrix.

  Not collective.

  - **Parameters**

    - •

      **rows** (*Sequence\[int\]*) -- Row indices.

    - •

      **cols** (*Sequence\[int\]*) -- Column indices.

    - •

      **values** (*Sequence\[Scalar\]*) -- The scalar values. A sequence of length at least **len(rows) \* len(cols)**.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValues*

  *Source code at petsc4py/PETSc/Mat.pyx:2580*

- **setValuesBlocked(rows, cols, values, addv=None)**

  Set values to the rows ⊗ col block entries of the matrix.

  Not collective.

  - **Parameters**

    - •

      **rows** (*Sequence\[int\]*) -- Block row indices.

    - •

      **cols** (*Sequence\[int\]*) -- Block column indices.

    - •

      **values** (*Sequence\[Scalar\]*) -- The scalar values. A sequence of length at least **len(rows) \* len(cols) \* bs \* bs**, where **bs** is the block size of the matrix.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesBlocked*

  *Source code at petsc4py/PETSc/Mat.pyx:2671*

- **setValuesBlockedCSR(I, J, V, addv=None)**

  Set values stored in block CSR format.

  Not collective.

  - **Parameters**

    - •

      **I** (*Sequence\[int\]*) -- Block row pointers.

    - •

      **J** (*Sequence\[int\]*) -- Block column indices.

    - •

      **V** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesBlocked*

  *Source code at petsc4py/PETSc/Mat.pyx:2736*

- **setValuesBlockedIJV(I, J, V, addv=None, rowmap=None)**

  Set a subset of values stored in block CSR format.

  Not collective.

  - **Parameters**

    - •

      **I** (*Sequence\[int\]*) -- Block row pointers.

    - •

      **J** (*Sequence\[int\]*) -- Block column indices.

    - •

      **V** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

    - •

      **rowmap** (*Sequence\[int\]*) -- Optional iterable indicating which block row to insert.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesBlocked*

  *Source code at petsc4py/PETSc/Mat.pyx:2705*

- **setValuesBlockedLocal(rows, cols, values, addv=None)**

  Set values to the rows ⊗ col block entries of the matrix in local ordering.

  Not collective.

  - **Parameters**

    - •

      **rows** (*Sequence\[int\]*) -- Local block row indices.

    - •

      **cols** (*Sequence\[int\]*) -- Local block column indices.

    - •

      **values** (*Sequence\[Scalar\]*) -- The scalar values. A sequence of length at least **len(rows) \* len(cols) \* bs \* bs**, where **bs** is the block size of the matrix.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesBlockedLocal*

  *Source code at petsc4py/PETSc/Mat.pyx:2925*

- **setValuesBlockedLocalCSR(I, J, V, addv=None)**

  Set values stored in block CSR format.

  Not collective.

  - **Parameters**

    - •

      **I** (*Sequence\[int\]*) -- Block row pointers.

    - •

      **J** (*Sequence\[int\]*) -- Local block column indices.

    - •

      **V** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesBlockedLocal*

  *Source code at petsc4py/PETSc/Mat.pyx:2990*

- **setValuesBlockedLocalIJV(I, J, V, addv=None, rowmap=None)**

  Set a subset of values stored in block CSR format.

  Not collective.

  - **Parameters**

    - •

      **I** (*Sequence\[int\]*) -- Block row pointers.

    - •

      **J** (*Sequence\[int\]*) -- Local block column indices.

    - •

      **V** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

    - •

      **rowmap** (*Sequence\[int\]*) -- Optional iterable indicating which block row to insert.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesBlockedLocal*

  *Source code at petsc4py/PETSc/Mat.pyx:2959*

- **setValuesBlockedLocalRCV(R, C, V, addv=None)**

  Undocumented.

  *Source code at petsc4py/PETSc/Mat.pyx:2955*

  - **Return type**

    *None*

- **setValuesBlockedRCV(R, C, V, addv=None)**

  Undocumented.

  *Source code at petsc4py/PETSc/Mat.pyx:2701*

  - **Return type**

    *None*

- **setValuesCSR(I, J, V, addv=None)**

  Set values stored in CSR format.

  Not collective.

  - **Parameters**

    - •

      **I** (*Sequence\[int\]*) -- Row pointers.

    - •

      **J** (*Sequence\[int\]*) -- Column indices.

    - •

      **V** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValues*

  *Source code at petsc4py/PETSc/Mat.pyx:2643*

- **setValuesIJV(I, J, V, addv=None, rowmap=None)**

  Set a subset of values stored in CSR format.

  Not collective.

  - **Parameters**

    - •

      **I** (*Sequence\[int\]*) -- Row pointers.

    - •

      **J** (*Sequence\[int\]*) -- Column indices.

    - •

      **V** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

    - •

      **rowmap** (*Sequence\[int\]*) -- Optional iterable indicating which row to insert.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValues*

  *Source code at petsc4py/PETSc/Mat.pyx:2612*

- **setValuesLocal(rows, cols, values, addv=None)**

  Set values to the rows ⊗ col entries of the matrix in local ordering.

  Not collective.

  - **Parameters**

    - •

      **rows** (*Sequence\[int\]*) -- Local row indices.

    - •

      **cols** (*Sequence\[int\]*) -- Local column indices.

    - •

      **values** (*Sequence\[Scalar\]*) -- The scalar values. A sequence of length at least **len(rows) \* len(cols)**.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesLocal*

  *Source code at petsc4py/PETSc/Mat.pyx:2834*

- **setValuesLocalCSR(I, J, V, addv=None)**

  Set values stored in CSR format.

  Not collective.

  - **Parameters**

    - •

      **I** (*Sequence\[int\]*) -- Row pointers.

    - •

      **J** (*Sequence\[int\]*) -- Local column indices.

    - •

      **V** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesLocal*

  *Source code at petsc4py/PETSc/Mat.pyx:2897*

- **setValuesLocalIJV(I, J, V, addv=None, rowmap=None)**

  Set a subset of values stored in CSR format.

  Not collective.

  - **Parameters**

    - •

      **I** (*Sequence\[int\]*) -- Row pointers.

    - •

      **J** (*Sequence\[int\]*) -- Local column indices.

    - •

      **V** (*Sequence\[Scalar\]*) -- The scalar values.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

    - •

      **rowmap** (*Sequence\[int\]*) -- Optional iterable indicating which row to insert.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatSetValuesLocal*

  *Source code at petsc4py/PETSc/Mat.pyx:2866*

- **setValuesLocalRCV(R, C, V, addv=None)**

  Undocumented.

  *Source code at petsc4py/PETSc/Mat.pyx:2862*

  - **Return type**

    *None*

- **setValuesRCV(R, C, V, addv=None)**

  Undocumented.

  *Source code at petsc4py/PETSc/Mat.pyx:2608*

  - **Return type**

    *None*

- **setVariableBlockSizes(blocks)**

  Set diagonal point-blocks of the matrix.

  Not collective.

  **SEE ALSO:**

  *setBlockSize*, *MatSetVariableBlockSizes*

  *Source code at petsc4py/PETSc/Mat.pyx:625*

  - **Parameters**

    **blocks** (*Sequence\[int\]*)

  - **Return type**

    *None*

- **setVecType(vec\_type)**

  Set the vector type.

  Collective.

  - **Parameters**

    **vec\_type** (*Type \| str*) -- Vector type used when creating vectors with *createVecs*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getVecType*, *MatSetVecType*

  *Source code at petsc4py/PETSc/Mat.pyx:639*

- **shift(alpha)**

  Shift the matrix.

  Collective.

  **SEE ALSO:**

  *MatShift*

  *Source code at petsc4py/PETSc/Mat.pyx:4108*

  - **Parameters**

    **alpha** (*Scalar*)

  - **Return type**

    *None*

- **solve(b, x)**

  Solve Ax=b, given a factored matrix.

  Neighborwise collective.

  The vectors **b** and **x** cannot be the same. Most users should employ the *KSP* interface for linear solvers instead of working directly with matrix algebra routines.

  - **Parameters**

    - •

      **b** (*Vec*) -- The right-hand side vector.

    - •

      **x** (*Vec*) -- The output solution vector, must be different than **b**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSP.create*, *solveTranspose*, *MatSolve*

  *Source code at petsc4py/PETSc/Mat.pyx:5231*

- **solveAdd(b, y, x)**

  Solve x=y+A⁻¹b, given a factored matrix.

  Neighborwise collective.

  The vectors **b** and **x** cannot be the same.

  - **Parameters**

    - •

      **b** (*Vec*) -- The right-hand side vector.

    - •

      **y** (*Vec*) -- The vector to be added

    - •

      **x** (*Vec*) -- The output solution vector, must be different than **b**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSP.create*, *MatSolve*, *MatSolveAdd*

  *Source code at petsc4py/PETSc/Mat.pyx:5275*

- **solveBackward(b, x)**

  Solve Ux=b, given a factored matrix A=LU.

  Neighborwise collective.

  - **Parameters**

    - •

      **b** (*Vec*) -- The right-hand side vector.

    - •

      **x** (*Vec*) -- The output solution vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatBackwardSolve*

  *Source code at petsc4py/PETSc/Mat.pyx:5212*

- **solveForward(b, x)**

  Solve Lx = b, given a factored matrix A = LU.

  Neighborwise collective.

  - **Parameters**

    - •

      **b** (*Vec*) -- The right-hand side vector.

    - •

      **x** (*Vec*) -- The output solution vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatForwardSolve*

  *Source code at petsc4py/PETSc/Mat.pyx:5193*

- **solveTranspose(b, x)**

  Solve Aᵀx=b, given a factored matrix.

  Neighborwise collective.

  The vectors **b** and **x** cannot be the same.

  - **Parameters**

    - •

      **b** (*Vec*) -- The right-hand side vector.

    - •

      **x** (*Vec*) -- The output solution vector, must be different than **b**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSP.create*, *MatSolve*, *MatSolveTranspose*

  *Source code at petsc4py/PETSc/Mat.pyx:5254*

- **solveTransposeAdd(b, y, x)**

  Solve x=y+A⁻ᵀb, given a factored matrix.

  Neighborwise collective.

  The vectors **b** and **x** cannot be the same.

  - **Parameters**

    - •

      **b** (*Vec*) -- The right-hand side vector.

    - •

      **y** (*Vec*) -- The vector to be added

    - •

      **x** (*Vec*) -- The output solution vector, must be different than **b**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *KSP.create*, *MatSolve*, *MatSolveTransposeAdd*

  *Source code at petsc4py/PETSc/Mat.pyx:5298*

- **storeValues()**

  Stash a copy of the matrix values.

  Collective.

  **SEE ALSO:**

  *retrieveValues*, *MatStoreValues*

  *Source code at petsc4py/PETSc/Mat.pyx:3278*

  - **Return type**

    *None*

- **toDLPack(mode='rw')**

  Return a DLPack *PyCapsule* wrapping the vector data.

  *Source code at petsc4py/PETSc/Mat.pyx:5675*

  - **Parameters**

    **mode** (*AccessModeSpec*)

  - **Return type**

    *Any*

- **transpose(out=None)**

  Return the transposed matrix.

  Collective.

  - **Parameters**

    **out** (*Mat \| None*) -- Optional return matrix. If *None*, inplace transposition is performed. Otherwise, the matrix is reused.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *MatTranspose*

  *Source code at petsc4py/PETSc/Mat.pyx:2103*

- **transposeMatMult(mat, result=None, fill=None)**

  Perform matrix-matrix multiplication C=AᵀB.

  Neighborwise collective.

  - **Parameters**

    - •

      **mat** (*Mat*) -- The right hand matrix B.

    - •

      **result** (*Mat \| None*) -- The optional resultant matrix C. When *None*, a new matrix is created, and **MAT\_INITIAL\_MATRIX** is used. When C is not *None*, the matrix is reused with **MAT\_REUSE\_MATRIX**.

    - •

      **fill** (*float \| None*) -- Expected fill as ratio of nnz(C)/(nnz(A) + nnz(B)), use *None* if you do not have a good estimate. If the result is a dense matrix this is irrelevant.

  - **Returns**

    **result** -- The resultant product matrix C.

  - **Return type**

    *Mat*

  Notes

  To determine the correct fill value, run with -info and search for the string "Fill ratio" to see the value actually needed.

  **SEE ALSO:**

  *MatTransposeMatMult*, *MatReuse*

  *Source code at petsc4py/PETSc/Mat.pyx:4295*

- **view(viewer=None)**

  View the matrix.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

  - **Return type**

    *None*

  Notes

  Viewers with type *Viewer.Type.ASCII* are only recommended for small matrices on small numbers of processes. Larger matrices should use a binary format like *Viewer.Type.BINARY*.

  **SEE ALSO:**

  *load*, *Viewer*, *MatView*

  *Source code at petsc4py/PETSc/Mat.pyx:450*

- **zeroEntries()**

  Zero the entries of the matrix.

  Collective.

  **SEE ALSO:**

  *MatZeroEntries*

  *Source code at petsc4py/PETSc/Mat.pyx:2380*

  - **Return type**

    *None*

- **zeroRows(rows, diag=1, x=None, b=None)**

  Zero selected rows of the matrix.

  Collective.

  - **Parameters**

    - •

      **rows** (*IS \| Sequence\[int\]*) -- Row indices to be zeroed.

    - •

      **diag** (*Scalar*) -- Scalar value to be inserted into the diagonal.

    - •

      **x** (*Vec \| None*) -- Optional solution vector to be modified for zeroed rows.

    - •

      **b** (*Vec \| None*) -- Optional right-hand side vector to be modified. It will be adjusted with provided solution entries.

  - **Return type**

    *None*

  **SEE ALSO:**

  *zeroRowsLocal*, *MatZeroRows*, *MatZeroRowsIS*

  *Source code at petsc4py/PETSc/Mat.pyx:3110*

- **zeroRowsColumns(rows, diag=1, x=None, b=None)**

  Zero selected rows and columns of the matrix.

  Collective.

  - **Parameters**

    - •

      **rows** (*IS \| Sequence\[int\]*) -- Row/column indices to be zeroed.

    - •

      **diag** (*Scalar*) -- Scalar value to be inserted into the diagonal.

    - •

      **x** (*Vec \| None*) -- Optional solution vector to be modified for zeroed rows.

    - •

      **b** (*Vec \| None*) -- Optional right-hand side vector to be modified. It will be adjusted with provided solution entries.

  - **Return type**

    *None*

  **SEE ALSO:**

  *zeroRowsColumnsLocal*, *zeroRows*, *MatZeroRowsColumns*, *MatZeroRowsColumnsIS*

  *Source code at petsc4py/PETSc/Mat.pyx:3176*

- **zeroRowsColumnsLocal(rows, diag=1, x=None, b=None)**

  Zero selected rows and columns of the matrix in local ordering.

  Collective.

  - **Parameters**

    - •

      **rows** (*IS \| Sequence\[int\]*) -- Local row/column indices to be zeroed.

    - •

      **diag** (*Scalar*) -- Scalar value to be inserted into the diagonal.

    - •

      **x** (*Vec \| None*) -- Optional solution vector to be modified for zeroed rows.

    - •

      **b** (*Vec \| None*) -- Optional right-hand side vector to be modified. It will be adjusted with provided solution entries.

  - **Return type**

    *None*

  **SEE ALSO:**

  *zeroRowsLocal*, *zeroRowsColumns*, *MatZeroRowsColumnsLocal*, *MatZeroRowsColumnsLocalIS*

  *Source code at petsc4py/PETSc/Mat.pyx:3210*

- **zeroRowsColumnsStencil(rows, diag=1, x=None, b=None)**

  Zero selected rows and columns of the matrix.

  Collective.

  - **Parameters**

    - •

      **rows** (*Sequence\[Stencil\]*) -- Iterable of stencil rows and columns.

    - •

      **diag** (*Scalar*) -- Scalar value to be inserted into the diagonal.

    - •

      **x** (*Vec \| None*) -- Optional solution vector to be modified for zeroed rows.

    - •

      **b** (*Vec \| None*) -- Optional right-hand side vector to be modified. It will be adjusted with provided solution entries.

  - **Return type**

    *None*

  **SEE ALSO:**

  *zeroRowsLocal*, *zeroRowsColumns*, *MatZeroRowsColumnsStencil*

  *Source code at petsc4py/PETSc/Mat.pyx:3244*

- **zeroRowsLocal(rows, diag=1, x=None, b=None)**

  Zero selected rows of the matrix in local ordering.

  Collective.

  - **Parameters**

    - •

      **rows** (*IS \| Sequence\[int\]*) -- Local row indices to be zeroed.

    - •

      **diag** (*Scalar*) -- Scalar value to be inserted into the diagonal.

    - •

      **x** (*Vec \| None*) -- Optional solution vector to be modified for zeroed rows.

    - •

      **b** (*Vec \| None*) -- Optional right-hand side vector to be modified. It will be adjusted with provided solution entries.

  - **Return type**

    *None*

  **SEE ALSO:**

  *zeroRows*, *MatZeroRowsLocal*, *MatZeroRowsLocalIS*

  *Source code at petsc4py/PETSc/Mat.pyx:3143*

Attributes Documentation

- **assembled**

  The boolean flag indicating if the matrix is assembled.

  *Source code at petsc4py/PETSc/Mat.pyx:5650*

- **block\_size**

  Matrix block size.

  *Source code at petsc4py/PETSc/Mat.pyx:5628*

- **block\_sizes**

  Matrix row and column block sizes.

  *Source code at petsc4py/PETSc/Mat.pyx:5633*

- **hermitian**

  The boolean flag indicating if the matrix is Hermitian.

  *Source code at petsc4py/PETSc/Mat.pyx:5658*

- **local\_size**

  Matrix local size.

  *Source code at petsc4py/PETSc/Mat.pyx:5623*

- **owner\_range**

  Matrix local row range.

  *Source code at petsc4py/PETSc/Mat.pyx:5638*

- **owner\_ranges**

  Matrix row ranges.

  *Source code at petsc4py/PETSc/Mat.pyx:5643*

- **size**

  Matrix global size.

  *Source code at petsc4py/PETSc/Mat.pyx:5618*

- **sizes**

  Matrix local and global sizes.

  *Source code at petsc4py/PETSc/Mat.pyx:5610*

- **structsymm**

  The boolean flag indicating if the matrix is structurally symmetric.

  *Source code at petsc4py/PETSc/Mat.pyx:5662*

- **symmetric**

  The boolean flag indicating if the matrix is symmetric.

  *Source code at petsc4py/PETSc/Mat.pyx:5654*

### petsc4py.PETSc.MatPartitioning

- **class petsc4py.PETSc.MatPartitioning**

  Bases: *Object*

  Object for managing the partitioning of a matrix or graph.

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The partitioning types. |

### petsc4py.PETSc.MatPartitioning.Type

- **class petsc4py.PETSc.MatPartitioning.Type**

  Bases: *object*

  The partitioning types.

  Attributes Summary

  | | |
  | --- | --- |
  | *PARTITIONINGAVERAGE* | Object **PARTITIONINGAVERAGE** of type *str* |
  | *PARTITIONINGCHACO* | Object **PARTITIONINGCHACO** of type *str* |
  | *PARTITIONINGCURRENT* | Object **PARTITIONINGCURRENT** of type *str* |
  | *PARTITIONINGHIERARCH* | Object **PARTITIONINGHIERARCH** of type *str* |
  | *PARTITIONINGPARMETIS* | Object **PARTITIONINGPARMETIS** of type *str* |
  | *PARTITIONINGPARTY* | Object **PARTITIONINGPARTY** of type *str* |
  | *PARTITIONINGPTSCOTCH* | Object **PARTITIONINGPTSCOTCH** of type *str* |
  | *PARTITIONINGSQUARE* | Object **PARTITIONINGSQUARE** of type *str* |

  Attributes Documentation

  - **PARTITIONINGAVERAGE: *str* = PARTITIONINGAVERAGE**

    Object **PARTITIONINGAVERAGE** of type *str*

  - **PARTITIONINGCHACO: *str* = PARTITIONINGCHACO**

    Object **PARTITIONINGCHACO** of type *str*

  - **PARTITIONINGCURRENT: *str* = PARTITIONINGCURRENT**

    Object **PARTITIONINGCURRENT** of type *str*

  - **PARTITIONINGHIERARCH: *str* = PARTITIONINGHIERARCH**

    Object **PARTITIONINGHIERARCH** of type *str*

  - **PARTITIONINGPARMETIS: *str* = PARTITIONINGPARMETIS**

    Object **PARTITIONINGPARMETIS** of type *str*

  - **PARTITIONINGPARTY: *str* = PARTITIONINGPARTY**

    Object **PARTITIONINGPARTY** of type *str*

  - **PARTITIONINGPTSCOTCH: *str* = PARTITIONINGPTSCOTCH**

    Object **PARTITIONINGPTSCOTCH** of type *str*

  - **PARTITIONINGSQUARE: *str* = PARTITIONINGSQUARE**

    Object **PARTITIONINGSQUARE** of type *str*

Methods Summary

| | |
| --- | --- |
| *apply*(partitioning) | Return a partitioning for the graph represented by a sparse matrix. |
| *create*(\[comm\]) | Create a partitioning context. |
| *destroy*() | Destroy the partitioning context. |
| *getType*() | Return the partitioning method. |
| *setAdjacency*(adj) | Set the adjacency graph (matrix) of the thing to be partitioned. |
| *setFromOptions*() | Set parameters in the partitioner from the options database. |
| *setType*(matpartitioning\_type) | Set the type of the partitioner to use. |
| *view*(\[viewer\]) | View the partitioning data structure. |

Methods Documentation

- **apply(partitioning)**

  Return a partitioning for the graph represented by a sparse matrix.

  Collective.

  For each local node this tells the processor number that that node is assigned to.

  **SEE ALSO:**

  *MatPartitioningApply*

  *Source code at petsc4py/PETSc/MatPartitioning.pyx:144*

  - **Parameters**

    **partitioning** (*IS*)

  - **Return type**

    *None*

- **create(comm=None)**

  Create a partitioning context.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *destroy*, *MatPartitioningCreate*

  *Source code at petsc4py/PETSc/MatPartitioning.pyx:62*

- **destroy()**

  Destroy the partitioning context.

  Collective.

  **SEE ALSO:**

  *create*, *MatPartitioningDestroy*

  *Source code at petsc4py/PETSc/MatPartitioning.pyx:49*

  - **Return type**

    *Self*

- **getType()**

  Return the partitioning method.

  Not collective.

  **SEE ALSO:**

  *setType*, *MatPartitioningGetType*

  *Source code at petsc4py/PETSc/MatPartitioning.pyx:100*

  - **Return type**

    *str*

- **setAdjacency(adj)**

  Set the adjacency graph (matrix) of the thing to be partitioned.

  Collective.

  - **Parameters**

    **adj** (*Mat*) -- The adjacency matrix, this can be any *Mat.Type* but the natural representation is *Mat.Type.MPIADJ*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatPartitioningSetAdjacency*

  *Source code at petsc4py/PETSc/MatPartitioning.pyx:126*

- **setFromOptions()**

  Set parameters in the partitioner from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *MatPartitioningSetFromOptions*

  *Source code at petsc4py/PETSc/MatPartitioning.pyx:114*

  - **Return type**

    *None*

- **setType(matpartitioning\_type)**

  Set the type of the partitioner to use.

  Collective.

  - **Parameters**

    **matpartitioning\_type** (*Type \| str*) -- The partitioner type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getType*, *MatPartitioningSetType*

  *Source code at petsc4py/PETSc/MatPartitioning.pyx:81*

- **view(viewer=None)**

  View the partitioning data structure.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* to display the graph.

  - **Return type**

    *None*

  **SEE ALSO:**

  *MatPartitioningView*

  *Source code at petsc4py/PETSc/MatPartitioning.pyx:29*

### petsc4py.PETSc.NormType

- **class petsc4py.PETSc.NormType**

  Bases: *object*

  Norm type.

  Commonly used norm types:

  - ***N1***

    The one norm.

  - ***N2***

    The two norm.

  - ***FROBENIUS***

    The Frobenius norm.

  - ***INFINITY***

    The infinity norm.

  **SEE ALSO:**

  *NormType*

  Attributes Summary

  | | |
  | --- | --- |
  | *FRB* | Constant **FRB** of type *int* |
  | *FROBENIUS* | Constant **FROBENIUS** of type *int* |
  | *INF* | Constant **INF** of type *int* |
  | *INFINITY* | Constant **INFINITY** of type *int* |
  | *MAX* | Constant **MAX** of type *int* |
  | *N1* | Constant **N1** of type *int* |
  | *N12* | Constant **N12** of type *int* |
  | *N2* | Constant **N2** of type *int* |
  | *NORM\_1* | Constant **NORM\_1** of type *int* |
  | *NORM\_1\_AND\_2* | Constant **NORM\_1\_AND\_2** of type *int* |
  | *NORM\_2* | Constant **NORM\_2** of type *int* |
  | *NORM\_FROBENIUS* | Constant **NORM\_FROBENIUS** of type *int* |
  | *NORM\_INFINITY* | Constant **NORM\_INFINITY** of type *int* |
  | *NORM\_MAX* | Constant **NORM\_MAX** of type *int* |

  Attributes Documentation

  - **FRB: *int* = FRB**

    Constant **FRB** of type *int*

  - **FROBENIUS: *int* = FROBENIUS**

    Constant **FROBENIUS** of type *int*

  - **INF: *int* = INF**

    Constant **INF** of type *int*

  - **INFINITY: *int* = INFINITY**

    Constant **INFINITY** of type *int*

  - **MAX: *int* = MAX**

    Constant **MAX** of type *int*

  - **N1: *int* = N1**

    Constant **N1** of type *int*

  - **N12: *int* = N12**

    Constant **N12** of type *int*

  - **N2: *int* = N2**

    Constant **N2** of type *int*

  - **NORM\_1: *int* = NORM\_1**

    Constant **NORM\_1** of type *int*

  - **NORM\_1\_AND\_2: *int* = NORM\_1\_AND\_2**

    Constant **NORM\_1\_AND\_2** of type *int*

  - **NORM\_2: *int* = NORM\_2**

    Constant **NORM\_2** of type *int*

  - **NORM\_FROBENIUS: *int* = NORM\_FROBENIUS**

    Constant **NORM\_FROBENIUS** of type *int*

  - **NORM\_INFINITY: *int* = NORM\_INFINITY**

    Constant **NORM\_INFINITY** of type *int*

  - **NORM\_MAX: *int* = NORM\_MAX**

    Constant **NORM\_MAX** of type *int*

### petsc4py.PETSc.NullSpace

- **class petsc4py.PETSc.NullSpace**

  Bases: *Object*

  Nullspace object.

  **SEE ALSO:**

  *MatNullSpace*

  Methods Summary

  | | |
  | --- | --- |
  | *create*(\[constant, vectors, comm\]) | Create the null space. |
  | *createRigidBody*(coords) | Create rigid body modes from coordinates. |
  | *destroy*() | Destroy the null space. |
  | *getFunction*() | Return the callback to remove the nullspace. |
  | *getVecs*() | Return the vectors defining the null space. |
  | *hasConstant*() | Return whether the null space contains the constant. |
  | *remove*(vec) | Remove all components of a null space from a vector. |
  | *setFunction*(function\[, args, kargs\]) | Set the callback to remove the nullspace. |
  | *test*(mat) | Return if the claimed null space is valid for a matrix. |
  | *view*(\[viewer\]) | View the null space. |

  Methods Documentation

  - **create(constant=False, vectors=(), comm=None)**

    Create the null space.

    Collective.

    - **Parameters**

      - •

        **constant** (*bool*) -- A flag to indicate the null space contains the constant vector.

      - •

        **vectors** (*Sequence\[Vec\]*) -- The sequence of vectors that span the null space.

      - •

        **comm** -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *destroy*, *MatNullSpaceCreate*

    *Source code at petsc4py/PETSc/Mat.pyx:5799*

  - **createRigidBody(coords)**

    Create rigid body modes from coordinates.

    Collective.

    - **Parameters**

      **coords** (*Vec*) -- The block coordinates of each node. Requires the block size to have been set.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *MatNullSpaceCreateRigidBody*

    *Source code at petsc4py/PETSc/Mat.pyx:5835*

  - **destroy()**

    Destroy the null space.

    Collective.

    **SEE ALSO:**

    *create*, *MatNullSpaceDestroy*

    *Source code at petsc4py/PETSc/Mat.pyx:5786*

    - **Return type**

      *Self*

  - **getFunction()**

    Return the callback to remove the nullspace.

    Not collective.

    **SEE ALSO:**

    *setFunction*

    *Source code at petsc4py/PETSc/Mat.pyx:5926*

    - **Return type**

      *MatNullFunction*

  - **getVecs()**

    Return the vectors defining the null space.

    Not collective.

    **SEE ALSO:**

    *MatNullSpaceGetVecs*

    *Source code at petsc4py/PETSc/Mat.pyx:5904*

    - **Return type**

      *list*\[*Vec*\]

  - **hasConstant()**

    Return whether the null space contains the constant.

    Not collective.

    **SEE ALSO:**

    *MatNullSpaceGetVecs*

    *Source code at petsc4py/PETSc/Mat.pyx:5890*

    - **Return type**

      *bool*

  - **remove(vec)**

    Remove all components of a null space from a vector.

    Collective.

    - **Parameters**

      **vec** (*Vec*) -- The vector from which the null space is removed.

    - **Return type**

      *None*

    **SEE ALSO:**

    *MatNullSpaceRemove*

    *Source code at petsc4py/PETSc/Mat.pyx:5940*

  - **setFunction(function, args=None, kargs=None)**

    Set the callback to remove the nullspace.

    Logically collective.

    - **Parameters**

      - •

        **function** (*MatNullFunction*) -- The callback.

      - •

        **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

      - •

        **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getFunction*, *MatNullSpaceSetFunction*

    *Source code at petsc4py/PETSc/Mat.pyx:5856*

  - **test(mat)**

    Return if the claimed null space is valid for a matrix.

    Collective.

    - **Parameters**

      **mat** (*Mat*) -- The matrix to check.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *MatNullSpaceTest*

    *Source code at petsc4py/PETSc/Mat.pyx:5957*

  - **view(viewer=None)**

    View the null space.

    Collective.

    - **Parameters**

      **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

    - **Return type**

      *None*

    **SEE ALSO:**

    *Viewer*, *MatNullSpaceView*

    *Source code at petsc4py/PETSc/Mat.pyx:5767*

### petsc4py.PETSc.Object

- **class petsc4py.PETSc.Object**

  Bases: *object*

  Base class wrapping a PETSc object.

  **SEE ALSO:**

  *PetscObject*

  Methods Summary

  | | |
  | --- | --- |
  | *appendOptionsPrefix*(prefix) | Append to the prefix used for searching for options in the database. |
  | *compose*(name, obj) | Associate a PETSc object using a key string. |
  | *decRef*() | Decrement the object reference count. |
  | *destroy*() | Destroy the object. |
  | *destroyOptionsHandlers*() | Clear all the option handlers. |
  | *getAttr*(name) | Return the attribute associated with a given name. |
  | *getClassId*() | Return the class identifier of the object. |
  | *getClassName*() | Return the class name of the object. |
  | *getComm*() | Return the communicator of the object. |
  | *getDict*() | Return the dictionary of attributes. |
  | *getId*() | Return the unique identifier of the object. |
  | *getName*() | Return the name of the object. |
  | *getOptionsPrefix*() | Return the prefix used for searching for options in the database. |
  | *getRefCount*() | Return the reference count of the object. |
  | *getTabLevel*() | Return the PETSc object tab level. |
  | *getType*() | Return the object type name. |
  | *incRef*() | Increment the object reference count. |
  | *incrementTabLevel*(tab\[, parent\]) | Increment the PETSc object tab level. |
  | *query*(name) | Query for the PETSc object associated with a key string. |
  | *setAttr*(name, attr) | Set an the attribute associated with a given name. |
  | *setFromOptions*() | Configure the object from the options database. |
  | *setName*(name) | Associate a name to the object. |
  | *setOptionsHandler*(handler) | Set the callback for processing extra options. |
  | *setOptionsPrefix*(prefix) | Set the prefix used for searching for options in the database. |
  | *setTabLevel*(level) | Set the PETSc object tab level. |
  | *stateGet*() | Return the PETSc object state. |
  | *stateIncrease*() | Increment the PETSc object state. |
  | *stateSet*(state) | Set the PETSc object state. |
  | *view*(\[viewer\]) | Display the object. |
  | *viewFromOptions*(name\[, objpre\]) | View the object via command line options. |

  Attributes Summary

  | | |
  | --- | --- |
  | *classid* | The class identifier. |
  | *comm* | The object communicator. |
  | *fortran* | Fortran handle. |
  | *handle* | Handle for ctypes support. |
  | *id* | The object identifier. |
  | *klass* | The class name. |
  | *name* | The object name. |
  | *prefix* | Options prefix. |
  | *refcount* | Reference count. |
  | *type* | Object type. |

  Methods Documentation

  - **appendOptionsPrefix(prefix)**

    Append to the prefix used for searching for options in the database.

    Logically collective.

    **SEE ALSO:**

    *Working with PETSc options*, *setOptionsPrefix*, *PetscObjectAppendOptionsPrefix*

    *Source code at petsc4py/PETSc/Object.pyx:138*

    - **Parameters**

      **prefix** (*str \| None*)

    - **Return type**

      *None*

  - **compose(name, obj)**

    Associate a PETSc object using a key string.

    Logically collective.

    - **Parameters**

      - •

        **name** (*str \| None*) -- The string identifying the object to be composed.

      - •

        **obj** (*Object*) -- The object to be composed.

    - **Return type**

      *None*

    **SEE ALSO:**

    *query*, *PetscObjectCompose*

    *Source code at petsc4py/PETSc/Object.pyx:329*

  - **decRef()**

    Decrement the object reference count.

    Logically collective.

    **SEE ALSO:**

    *getRefCount*, *PetscObjectDereference*

    *Source code at petsc4py/PETSc/Object.pyx:389*

    - **Return type**

      *int*

  - **destroy()**

    Destroy the object.

    Collective.

    **SEE ALSO:**

    *PetscObjectDestroy*

    *Source code at petsc4py/PETSc/Object.pyx:81*

    - **Return type**

      *Self*

  - **destroyOptionsHandlers()**

    Clear all the option handlers.

    Collective.

    **SEE ALSO:**

    *Working with PETSc options*, *setOptionsHandler*, *PetscObjectDestroyOptionsHandlers*

    *Source code at petsc4py/PETSc/Object.pyx:213*

    - **Return type**

      *None*

  - **getAttr(name)**

    Return the attribute associated with a given name.

    Not collective.

    **SEE ALSO:**

    *setAttr*, *getDict*

    *Source code at petsc4py/PETSc/Object.pyx:408*

    - **Parameters**

      **name** (*str*)

    - **Return type**

      *object*

  - **getClassId()**

    Return the class identifier of the object.

    Not collective.

    **SEE ALSO:**

    *PetscObjectGetClassId*

    *Source code at petsc4py/PETSc/Object.pyx:270*

    - **Return type**

      *int*

  - **getClassName()**

    Return the class name of the object.

    Not collective.

    **SEE ALSO:**

    *PetscObjectGetClassName*

    *Source code at petsc4py/PETSc/Object.pyx:284*

    - **Return type**

      *str*

  - **getComm()**

    Return the communicator of the object.

    Not collective.

    **SEE ALSO:**

    *PetscObjectGetComm*

    *Source code at petsc4py/PETSc/Object.pyx:228*

    - **Return type**

      *Comm*

  - **getDict()**

    Return the dictionary of attributes.

    Not collective.

    **SEE ALSO:**

    *setAttr*, *getAttr*

    *Source code at petsc4py/PETSc/Object.pyx:436*

    - **Return type**

      *dict*

  - **getId()**

    Return the unique identifier of the object.

    Not collective.

    **SEE ALSO:**

    *PetscObjectGetId*

    *Source code at petsc4py/PETSc/Object.pyx:313*

    - **Return type**

      *int*

  - **getName()**

    Return the name of the object.

    Not collective.

    **SEE ALSO:**

    *PetscObjectGetName*

    *Source code at petsc4py/PETSc/Object.pyx:242*

    - **Return type**

      *str*

  - **getOptionsPrefix()**

    Return the prefix used for searching for options in the database.

    Not collective.

    **SEE ALSO:**

    *Working with PETSc options*, *setOptionsPrefix*, *PetscObjectGetOptionsPrefix*

    *Source code at petsc4py/PETSc/Object.pyx:124*

    - **Return type**

      *str*

  - **getRefCount()**

    Return the reference count of the object.

    Not collective.

    **SEE ALSO:**

    *PetscObjectGetReference*

    *Source code at petsc4py/PETSc/Object.pyx:298*

    - **Return type**

      *int*

  - **getTabLevel()**

    Return the PETSc object tab level.

    Not collective.

    **SEE ALSO:**

    *setTabLevel*, *incrementTabLevel*, *PetscObjectGetTabLevel*

    *Source code at petsc4py/PETSc/Object.pyx:518*

    - **Return type**

      *None*

  - **getType()**

    Return the object type name.

    Not collective.

    **SEE ALSO:**

    *PetscObjectGetType*

    *Source code at petsc4py/PETSc/Object.pyx:94*

    - **Return type**

      *str*

  - **incRef()**

    Increment the object reference count.

    Logically collective.

    **SEE ALSO:**

    *getRefCount*, *PetscObjectReference*

    *Source code at petsc4py/PETSc/Object.pyx:372*

    - **Return type**

      *int*

  - **incrementTabLevel(tab, parent=None)**

    Increment the PETSc object tab level.

    Logically collective.

    **SEE ALSO:**

    *setTabLevel*, *getTabLevel*, *PetscObjectIncrementTabLevel*

    *Source code at petsc4py/PETSc/Object.pyx:491*

    - **Parameters**

      - •

        **tab** (*int*)

      - •

        **parent** (*Object \| None*)

    - **Return type**

      *None*

  - **query(name)**

    Query for the PETSc object associated with a key string.

    Not collective.

    **SEE ALSO:**

    *compose*, *PetscObjectQuery*

    *Source code at petsc4py/PETSc/Object.pyx:352*

    - **Parameters**

      **name** (*str*)

    - **Return type**

      *Object*

  - **setAttr(name, attr)**

    Set an the attribute associated with a given name.

    Not collective.

    **SEE ALSO:**

    *getAttr*, *getDict*

    *Source code at petsc4py/PETSc/Object.pyx:422*

    - **Parameters**

      - •

        **name** (*str*)

      - •

        **attr** (*object*)

    - **Return type**

      *None*

  - **setFromOptions()**

    Configure the object from the options database.

    Collective.

    Classes that do not implement **setFromOptions** use this method that, in turn, calls *PetscObjectSetFromOptions*.

    **SEE ALSO:**

    *Working with PETSc options*, *PetscObjectSetFromOptions*

    *Source code at petsc4py/PETSc/Object.pyx:152*

    - **Return type**

      *None*

  - **setName(name)**

    Associate a name to the object.

    Not collective.

    **SEE ALSO:**

    *PetscObjectSetName*

    *Source code at petsc4py/PETSc/Object.pyx:256*

    - **Parameters**

      **name** (*str \| None*)

    - **Return type**

      *None*

  - **setOptionsHandler(handler)**

    Set the callback for processing extra options.

    Logically collective.

    - **Parameters**

      **handler** (*PetscOptionsHandlerFunction \| None*) -- The callback function, called at the end of a **setFromOptions** invocation for the given class.

    - **Return type**

      *None*

    **SEE ALSO:**

    *Working with PETSc options*, *Mat.setFromOptions*, *KSP.setFromOptions*, *PetscObjectAddOptionsHandler*

    *Source code at petsc4py/PETSc/Object.pyx:190*

  - **setOptionsPrefix(prefix)**

    Set the prefix used for searching for options in the database.

    Logically collective.

    **SEE ALSO:**

    *Working with PETSc options*, *getOptionsPrefix*, *PetscObjectSetOptionsPrefix*

    *Source code at petsc4py/PETSc/Object.pyx:110*

    - **Parameters**

      **prefix** (*str \| None*)

    - **Return type**

      *None*

  - **setTabLevel(level)**

    Set the PETSc object tab level.

    Logically collective.

    **SEE ALSO:**

    *incrementTabLevel*, *getTabLevel*, *PetscObjectSetTabLevel*

    *Source code at petsc4py/PETSc/Object.pyx:505*

    - **Parameters**

      **level** (*int*)

    - **Return type**

      *None*

  - **stateGet()**

    Return the PETSc object state.

    Not collective.

    **SEE ALSO:**

    *stateSet*, *stateIncrease*, *PetscObjectStateGet*

    *Source code at petsc4py/PETSc/Object.pyx:462*

    - **Return type**

      *int*

  - **stateIncrease()**

    Increment the PETSc object state.

    Logically collective.

    **SEE ALSO:**

    *stateGet*, *stateSet*, *PetscObjectStateIncrease*

    *Source code at petsc4py/PETSc/Object.pyx:450*

    - **Return type**

      *None*

  - **stateSet(state)**

    Set the PETSc object state.

    Logically collective.

    **SEE ALSO:**

    *stateIncrease*, *stateGet*, *PetscObjectStateSet*

    *Source code at petsc4py/PETSc/Object.pyx:476*

    - **Parameters**

      **state** (*int*)

    - **Return type**

      *None*

  - **view(viewer=None)**

    Display the object.

    Collective.

    - **Parameters**

      **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscObjectView*

    *Source code at petsc4py/PETSc/Object.pyx:62*

  - **viewFromOptions(name, objpre=None)**

    View the object via command line options.

    Collective.

    - **Parameters**

      - •

        **name** (*str*) -- The command line option.

      - •

        **objpre** (*Object \| None*) -- Optional object that provides prefix.

    - **Return type**

      *None*

    **SEE ALSO:**

    *Working with PETSc options*, *PetscObjectViewFromOptions*

    *Source code at petsc4py/PETSc/Object.pyx:167*

  Attributes Documentation

  - **classid**

    The class identifier.

    *Source code at petsc4py/PETSc/Object.pyx:563*

  - **comm**

    The object communicator.

    *Source code at petsc4py/PETSc/Object.pyx:550*

  - **fortran**

    Fortran handle.

    *Source code at petsc4py/PETSc/Object.pyx:593*

  - **handle**

    Handle for ctypes support.

    *Source code at petsc4py/PETSc/Object.pyx:585*

  - **id**

    The object identifier.

    *Source code at petsc4py/PETSc/Object.pyx:568*

  - **klass**

    The class name.

    *Source code at petsc4py/PETSc/Object.pyx:573*

  - **name**

    The object name.

    *Source code at petsc4py/PETSc/Object.pyx:555*

  - **prefix**

    Options prefix.

    *Source code at petsc4py/PETSc/Object.pyx:542*

  - **refcount**

    Reference count.

    *Source code at petsc4py/PETSc/Object.pyx:578*

  - **type**

    Object type.

    *Source code at petsc4py/PETSc/Object.pyx:534*

### petsc4py.PETSc.Options

- **class petsc4py.PETSc.Options**

  Bases: *object*

  The options database object.

  A dictionary-like object to store and operate with command line options.

  - **Parameters**

    **prefix** (*str*, *optional*) -- Optional string to prepend to all the options.

  Examples

  Create an option database and operate with it.

  ```
  >>> from petsc4py import PETSc
  >>> opts = PETSc.Options()
  >>> opts['a'] = 1 # insert the command-line option '-a 1'
  >>> if 'a' in opts: # if the option is present
  >>>     val = opts['a'] # return the option value as 'str'
  >>> a_int = opts.getInt('a') # return the option value as 'int'
  >>> a_bool = opts.getBool('a') # return the option value as 'bool'
  ```

  Read command line and use default values.

  ```
  >>> from petsc4py import PETSc
  >>> opts = PETSc.Options()
  >>> b_float = opts.getReal('b', 1) # return the value or 1.0 if not present
  ```

  Read command line options prepended with a prefix.

  ```
  >>> from petsc4py import PETSc
  >>> opts = PETSc.Options('prefix_')
  >>> opts.getString('b', 'some_default_string') # read -prefix_b xxx
  ```

  **SEE ALSO:**

  *Working with PETSc options*

  Methods Summary

  | | |
  | --- | --- |
  | *clear*() | Clear an options database. |
  | *create*() | Create an options database. |
  | *delValue*(name) | Delete an option from the database. |
  | *destroy*() | Destroy an options database. |
  | *getAll*() | Return all the options and their values. |
  | *getBool*(name\[, default\]) | Return the boolean value associated with the option. |
  | *getBoolArray*(name\[, default\]) | Return the boolean values associated with the option. |
  | *getInt*(name\[, default\]) | Return the integer value associated with the option. |
  | *getIntArray*(name\[, default\]) | Return the integer array associated with the option. |
  | *getReal*(name\[, default\]) | Return the real value associated with the option. |
  | *getRealArray*(name\[, default\]) | Return the real array associated with the option. |
  | *getScalar*(name\[, default\]) | Return the scalar value associated with the option. |
  | *getScalarArray*(name\[, default\]) | Return the scalar array associated with the option. |
  | *getString*(name\[, default\]) | Return the string associated with the option. |
  | *hasName*(name) | Return the boolean indicating if the option is in the database. |
  | *insertString*(string) | Insert a string in the options database. |
  | *prefixPop*() | Pop a prefix for the options database. |
  | *prefixPush*(prefix) | Push a prefix for the options database. |
  | *setValue*(name, value) | Set a value for an option. |
  | *view*(\[viewer\]) | View the options database. |

  Attributes Summary

  | | |
  | --- | --- |
  | *prefix* | Prefix for options. |

  Methods Documentation

  - **clear()**

    Clear an options database.

    *Source code at petsc4py/PETSc/Options.pyx:91*

    - **Return type**

      *Self*

  - **create()**

    Create an options database.

    *Source code at petsc4py/PETSc/Options.pyx:79*

    - **Return type**

      *Self*

  - **delValue(name)**

    Delete an option from the database.

    Logically collective.

    **SEE ALSO:**

    *setValue*, *PetscOptionsClearValue*

    *Source code at petsc4py/PETSc/Options.pyx:195*

    - **Parameters**

      **name** (*str*)

    - **Return type**

      *None*

  - **destroy()**

    Destroy an options database.

    *Source code at petsc4py/PETSc/Options.pyx:85*

    - **Return type**

      *Self*

  - **getAll()**

    Return all the options and their values.

    Not collective.

    **SEE ALSO:**

    *PetscOptionsGetAll*

    *Source code at petsc4py/PETSc/Options.pyx:414*

    - **Return type**

      *dict*\[*str*, *str*\]

  - **getBool(name, default=None)**

    Return the boolean value associated with the option.

    Not collective.

    - **Parameters**

      - •

        **name** (*str*) -- The option name.

      - •

        **default** -- The default value. If *None*, it raises a *KeyError* if the option is not found.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *getBoolArray*, *PetscOptionsGetBool*

    *Source code at petsc4py/PETSc/Options.pyx:218*

  - **getBoolArray(name, default=None)**

    Return the boolean values associated with the option.

    Not collective.

    - **Parameters**

      - •

        **name** (*str*) -- The option name.

      - •

        **default** -- The default value. If *None*, it raises a *KeyError* if the option is not found.

    - **Return type**

      *ArrayBool*

    **SEE ALSO:**

    *getBool*, *PetscOptionsGetBoolArray*

    *Source code at petsc4py/PETSc/Options.pyx:238*

  - **getInt(name, default=None)**

    Return the integer value associated with the option.

    Not collective.

    - **Parameters**

      - •

        **name** (*str*) -- The option name.

      - •

        **default** -- The default value. If *None*, it raises a *KeyError* if the option is not found.

    - **Return type**

      *int*

    **SEE ALSO:**

    *getIntArray*, *PetscOptionsGetInt*

    *Source code at petsc4py/PETSc/Options.pyx:258*

  - **getIntArray(name, default=None)**

    Return the integer array associated with the option.

    Not collective.

    - **Parameters**

      - •

        **name** (*str*) -- The option name.

      - •

        **default** -- The default value. If *None*, it raises a *KeyError* if the option is not found.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *getInt*, *PetscOptionsGetIntArray*

    *Source code at petsc4py/PETSc/Options.pyx:278*

  - **getReal(name, default=None)**

    Return the real value associated with the option.

    Not collective.

    - **Parameters**

      - •

        **name** (*str*) -- The option name.

      - •

        **default** -- The default value. If *None*, it raises a *KeyError* if the option is not found.

    - **Return type**

      *float*

    **SEE ALSO:**

    *getRealArray*, *PetscOptionsGetReal*

    *Source code at petsc4py/PETSc/Options.pyx:298*

  - **getRealArray(name, default=None)**

    Return the real array associated with the option.

    Not collective.

    - **Parameters**

      - •

        **name** (*str*) -- The option name.

      - •

        **default** -- The default value. If *None*, it raises a *KeyError* if the option is not found.

    - **Return type**

      *ArrayReal*

    **SEE ALSO:**

    *getReal*, *PetscOptionsGetRealArray*

    *Source code at petsc4py/PETSc/Options.pyx:318*

  - **getScalar(name, default=None)**

    Return the scalar value associated with the option.

    Not collective.

    - **Parameters**

      - •

        **name** (*str*) -- The option name.

      - •

        **default** -- The default value. If *None*, it raises a *KeyError* if the option is not found.

    - **Return type**

      *Scalar*

    **SEE ALSO:**

    *getScalarArray*, *PetscOptionsGetScalar*

    *Source code at petsc4py/PETSc/Options.pyx:338*

  - **getScalarArray(name, default=None)**

    Return the scalar array associated with the option.

    Not collective.

    - **Parameters**

      - •

        **name** (*str*) -- The option name.

      - •

        **default** -- The default value. If *None*, it raises a *KeyError* if the option is not found.

    - **Return type**

      *ArrayScalar*

    **SEE ALSO:**

    *getScalar*, *PetscOptionsGetScalarArray*

    *Source code at petsc4py/PETSc/Options.pyx:358*

  - **getString(name, default=None)**

    Return the string associated with the option.

    Not collective.

    - **Parameters**

      - •

        **name** (*str*) -- The option name.

      - •

        **default** -- The default value. If *None*, it raises a *KeyError* if the option is not found.

    - **Return type**

      *str*

    **SEE ALSO:**

    *PetscOptionsGetString*

    *Source code at petsc4py/PETSc/Options.pyx:378*

  - **hasName(name)**

    Return the boolean indicating if the option is in the database.

    *Source code at petsc4py/PETSc/Options.pyx:144*

    - **Parameters**

      **name** (*str*)

    - **Return type**

      *bool*

  - **insertString(string)**

    Insert a string in the options database.

    Logically collective.

    **SEE ALSO:**

    *PetscOptionsInsertString*

    *Source code at petsc4py/PETSc/Options.pyx:400*

    - **Parameters**

      **string** (*str*)

    - **Return type**

      *None*

  - **prefixPop()**

    Pop a prefix for the options database.

    Logically collective.

    **SEE ALSO:**

    *prefixPush*, *PetscOptionsPrefixPop*

    *Source code at petsc4py/PETSc/Options.pyx:131*

    - **Return type**

      *None*

  - **prefixPush(prefix)**

    Push a prefix for the options database.

    Logically collective.

    **SEE ALSO:**

    *prefixPop*, *PetscOptionsPrefixPush*

    *Source code at petsc4py/PETSc/Options.pyx:116*

    - **Parameters**

      **prefix** (*str \| Options \| Object \| None*)

    - **Return type**

      *None*

  - **setValue(name, value)**

    Set a value for an option.

    Logically collective.

    - **Parameters**

      - •

        **name** (*str*) -- The string identifying the option.

      - •

        **value** (*bool \| int \| float \| Scalar \| Sequence\[bool\] \| Sequence\[int\] \| Sequence\[float\] \| Sequence\[Scalar\] \| str*) -- The option value.

    - **Return type**

      *None*

    **SEE ALSO:**

    *delValue*, *PetscOptionsSetValue*

    *Source code at petsc4py/PETSc/Options.pyx:153*

  - **view(viewer=None)**

    View the options database.

    Collective.

    - **Parameters**

      **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

    - **Return type**

      *None*

    **SEE ALSO:**

    *Viewer*, *PetscOptionsView*

    *Source code at petsc4py/PETSc/Options.pyx:97*

  Attributes Documentation

  - **prefix**

    Prefix for options.

    *Source code at petsc4py/PETSc/Options.pyx:67*

### petsc4py.PETSc.PC

- **class petsc4py.PETSc.PC**

  Bases: *Object*

  Preconditioners.

  *PC* is described in the *PETSc manual*. Calling the *PC* with a vector as an argument will *apply* the preconditioner as shown in the example below.

  Examples

  ```
  >>> from petsc4py import PETSc
  >>> v = PETSc.Vec().createWithArray([1, 2])
  >>> m = PETSc.Mat().createDense(2, array=[[1, 0], [0, 1]])
  >>> pc = PETSc.PC().create()
  >>> pc.setOperators(m)
  >>> u = pc(v) # u is created internally
  >>> pc.apply(v, u) # u can also be passed as second argument
  ```

  **SEE ALSO:**

  *PC*

  Enumerations

  | | |
  | --- | --- |
  | *ASMType* | The *ASM* subtype. |
  | *CompositeType* | The composite type. |
  | *DeflationSpaceType* | The deflation space subtype. |
  | *FailedReason* | The reason the preconditioner has failed. |
  | *FieldSplitSchurFactType* | The field split Schur factorization type. |
  | *FieldSplitSchurPreType* | The field split Schur subtype. |
  | *GAMGType* | The *GAMG* subtype. |
  | *GASMType* | The *GASM* subtype. |
  | *HPDDMCoarseCorrectionType* | The *HPDDM* coarse correction type. |
  | *MGCycleType* | The *MG* cycle type. |
  | *MGType* | The *MG* subtype. |
  | *PatchConstructType* | The patch construction type. |
  | *Side* | The manner in which the preconditioner is applied. |
  | *Type* | The preconditioner method. |

### petsc4py.PETSc.PC.ASMType

- **class petsc4py.PETSc.PC.ASMType**

  Bases: *object*

  The *ASM* subtype.

  Attributes Summary

  | | |
  | --- | --- |
  | *BASIC* | Constant **BASIC** of type *int* |
  | *INTERPOLATE* | Constant **INTERPOLATE** of type *int* |
  | *NONE* | Constant **NONE** of type *int* |
  | *RESTRICT* | Constant **RESTRICT** of type *int* |

  Attributes Documentation

  - **BASIC: *int* = BASIC**

    Constant **BASIC** of type *int*

  - **INTERPOLATE: *int* = INTERPOLATE**

    Constant **INTERPOLATE** of type *int*

  - **NONE: *int* = NONE**

    Constant **NONE** of type *int*

  - **RESTRICT: *int* = RESTRICT**

    Constant **RESTRICT** of type *int*

### petsc4py.PETSc.PC.CompositeType

- **class petsc4py.PETSc.PC.CompositeType**

  Bases: *object*

  The composite type.

  Attributes Summary

  | | |
  | --- | --- |
  | *ADDITIVE* | Constant **ADDITIVE** of type *int* |
  | *MULTIPLICATIVE* | Constant **MULTIPLICATIVE** of type *int* |
  | *SCHUR* | Constant **SCHUR** of type *int* |
  | *SPECIAL* | Constant **SPECIAL** of type *int* |
  | *SYMMETRIC\_MULTIPLICATIVE* | Constant **SYMMETRIC\_MULTIPLICATIVE** of type *int* |

  Attributes Documentation

  - **ADDITIVE: *int* = ADDITIVE**

    Constant **ADDITIVE** of type *int*

  - **MULTIPLICATIVE: *int* = MULTIPLICATIVE**

    Constant **MULTIPLICATIVE** of type *int*

  - **SCHUR: *int* = SCHUR**

    Constant **SCHUR** of type *int*

  - **SPECIAL: *int* = SPECIAL**

    Constant **SPECIAL** of type *int*

  - **SYMMETRIC\_MULTIPLICATIVE: *int* = SYMMETRIC\_MULTIPLICATIVE**

    Constant **SYMMETRIC\_MULTIPLICATIVE** of type *int*

### petsc4py.PETSc.PC.DeflationSpaceType

- **class petsc4py.PETSc.PC.DeflationSpaceType**

  Bases: *object*

  The deflation space subtype.

  Attributes Summary

  | | |
  | --- | --- |
  | *AGGREGATION* | Constant **AGGREGATION** of type *int* |
  | *BIORTH22* | Constant **BIORTH22** of type *int* |
  | *DB16* | Constant **DB16** of type *int* |
  | *DB2* | Constant **DB2** of type *int* |
  | *DB4* | Constant **DB4** of type *int* |
  | *DB8* | Constant **DB8** of type *int* |
  | *HAAR* | Constant **HAAR** of type *int* |
  | *MEYER* | Constant **MEYER** of type *int* |
  | *USER* | Constant **USER** of type *int* |

  Attributes Documentation

  - **AGGREGATION: *int* = AGGREGATION**

    Constant **AGGREGATION** of type *int*

  - **BIORTH22: *int* = BIORTH22**

    Constant **BIORTH22** of type *int*

  - **DB16: *int* = DB16**

    Constant **DB16** of type *int*

  - **DB2: *int* = DB2**

    Constant **DB2** of type *int*

  - **DB4: *int* = DB4**

    Constant **DB4** of type *int*

  - **DB8: *int* = DB8**

    Constant **DB8** of type *int*

  - **HAAR: *int* = HAAR**

    Constant **HAAR** of type *int*

  - **MEYER: *int* = MEYER**

    Constant **MEYER** of type *int*

  - **USER: *int* = USER**

    Constant **USER** of type *int*

### petsc4py.PETSc.PC.FailedReason

- **class petsc4py.PETSc.PC.FailedReason**

  Bases: *object*

  The reason the preconditioner has failed.

  Attributes Summary

  | | |
  | --- | --- |
  | *FACTOR\_NUMERIC\_ZEROPIVOT* | Constant **FACTOR\_NUMERIC\_ZEROPIVOT** of type *int* |
  | *FACTOR\_OTHER* | Constant **FACTOR\_OTHER** of type *int* |
  | *FACTOR\_OUTMEMORY* | Constant **FACTOR\_OUTMEMORY** of type *int* |
  | *FACTOR\_STRUCT\_ZEROPIVOT* | Constant **FACTOR\_STRUCT\_ZEROPIVOT** of type *int* |
  | *NOERROR* | Constant **NOERROR** of type *int* |
  | *SETUP\_ERROR* | Constant **SETUP\_ERROR** of type *int* |
  | *SUBPC\_ERROR* | Constant **SUBPC\_ERROR** of type *int* |

  Attributes Documentation

  - **FACTOR\_NUMERIC\_ZEROPIVOT: *int* = FACTOR\_NUMERIC\_ZEROPIVOT**

    Constant **FACTOR\_NUMERIC\_ZEROPIVOT** of type *int*

  - **FACTOR\_OTHER: *int* = FACTOR\_OTHER**

    Constant **FACTOR\_OTHER** of type *int*

  - **FACTOR\_OUTMEMORY: *int* = FACTOR\_OUTMEMORY**

    Constant **FACTOR\_OUTMEMORY** of type *int*

  - **FACTOR\_STRUCT\_ZEROPIVOT: *int* = FACTOR\_STRUCT\_ZEROPIVOT**

    Constant **FACTOR\_STRUCT\_ZEROPIVOT** of type *int*

  - **NOERROR: *int* = NOERROR**

    Constant **NOERROR** of type *int*

  - **SETUP\_ERROR: *int* = SETUP\_ERROR**

    Constant **SETUP\_ERROR** of type *int*

  - **SUBPC\_ERROR: *int* = SUBPC\_ERROR**

    Constant **SUBPC\_ERROR** of type *int*

### petsc4py.PETSc.PC.FieldSplitSchurFactType

- **class petsc4py.PETSc.PC.FieldSplitSchurFactType**

  Bases: *object*

  The field split Schur factorization type.

  Attributes Summary

  | | |
  | --- | --- |
  | *DIAG* | Constant **DIAG** of type *int* |
  | *FULL* | Constant **FULL** of type *int* |
  | *LOWER* | Constant **LOWER** of type *int* |
  | *UPPER* | Constant **UPPER** of type *int* |

  Attributes Documentation

  - **DIAG: *int* = DIAG**

    Constant **DIAG** of type *int*

  - **FULL: *int* = FULL**

    Constant **FULL** of type *int*

  - **LOWER: *int* = LOWER**

    Constant **LOWER** of type *int*

  - **UPPER: *int* = UPPER**

    Constant **UPPER** of type *int*

### petsc4py.PETSc.PC.FieldSplitSchurPreType

- **class petsc4py.PETSc.PC.FieldSplitSchurPreType**

  Bases: *object*

  The field split Schur subtype.

  Attributes Summary

  | | |
  | --- | --- |
  | *A11* | Constant **A11** of type *int* |
  | *FULL* | Constant **FULL** of type *int* |
  | *SELF* | Constant **SELF** of type *int* |
  | *SELFP* | Constant **SELFP** of type *int* |
  | *USER* | Constant **USER** of type *int* |

  Attributes Documentation

  - **A11: *int* = A11**

    Constant **A11** of type *int*

  - **FULL: *int* = FULL**

    Constant **FULL** of type *int*

  - **SELF: *int* = SELF**

    Constant **SELF** of type *int*

  - **SELFP: *int* = SELFP**

    Constant **SELFP** of type *int*

  - **USER: *int* = USER**

    Constant **USER** of type *int*

### petsc4py.PETSc.PC.GAMGType

- **class petsc4py.PETSc.PC.GAMGType**

  Bases: *object*

  The *GAMG* subtype.

  Attributes Summary

  | | |
  | --- | --- |
  | *AGG* | Object **AGG** of type *str* |
  | *CLASSICAL* | Object **CLASSICAL** of type *str* |
  | *GEO* | Object **GEO** of type *str* |

  Attributes Documentation

  - **AGG: *str* = AGG**

    Object **AGG** of type *str*

  - **CLASSICAL: *str* = CLASSICAL**

    Object **CLASSICAL** of type *str*

  - **GEO: *str* = GEO**

    Object **GEO** of type *str*

### petsc4py.PETSc.PC.GASMType

- **class petsc4py.PETSc.PC.GASMType**

  Bases: *object*

  The *GASM* subtype.

  Attributes Summary

  | | |
  | --- | --- |
  | *BASIC* | Constant **BASIC** of type *int* |
  | *INTERPOLATE* | Constant **INTERPOLATE** of type *int* |
  | *NONE* | Constant **NONE** of type *int* |
  | *RESTRICT* | Constant **RESTRICT** of type *int* |

  Attributes Documentation

  - **BASIC: *int* = BASIC**

    Constant **BASIC** of type *int*

  - **INTERPOLATE: *int* = INTERPOLATE**

    Constant **INTERPOLATE** of type *int*

  - **NONE: *int* = NONE**

    Constant **NONE** of type *int*

  - **RESTRICT: *int* = RESTRICT**

    Constant **RESTRICT** of type *int*

### petsc4py.PETSc.PC.HPDDMCoarseCorrectionType

- **class petsc4py.PETSc.PC.HPDDMCoarseCorrectionType**

  Bases: *object*

  The *HPDDM* coarse correction type.

  Attributes Summary

  | | |
  | --- | --- |
  | *ADDITIVE* | Constant **ADDITIVE** of type *int* |
  | *BALANCED* | Constant **BALANCED** of type *int* |
  | *DEFLATED* | Constant **DEFLATED** of type *int* |
  | *NONE* | Constant **NONE** of type *int* |

  Attributes Documentation

  - **ADDITIVE: *int* = ADDITIVE**

    Constant **ADDITIVE** of type *int*

  - **BALANCED: *int* = BALANCED**

    Constant **BALANCED** of type *int*

  - **DEFLATED: *int* = DEFLATED**

    Constant **DEFLATED** of type *int*

  - **NONE: *int* = NONE**

    Constant **NONE** of type *int*

### petsc4py.PETSc.PC.MGCycleType

- **class petsc4py.PETSc.PC.MGCycleType**

  Bases: *object*

  The *MG* cycle type.

  Attributes Summary

  | | |
  | --- | --- |
  | *V* | Constant **V** of type *int* |
  | *W* | Constant **W** of type *int* |

  Attributes Documentation

  - **V: *int* = V**

    Constant **V** of type *int*

  - **W: *int* = W**

    Constant **W** of type *int*

### petsc4py.PETSc.PC.MGType

- **class petsc4py.PETSc.PC.MGType**

  Bases: *object*

  The *MG* subtype.

  Attributes Summary

  | | |
  | --- | --- |
  | *ADDITIVE* | Constant **ADDITIVE** of type *int* |
  | *FULL* | Constant **FULL** of type *int* |
  | *KASKADE* | Constant **KASKADE** of type *int* |
  | *MULTIPLICATIVE* | Constant **MULTIPLICATIVE** of type *int* |

  Attributes Documentation

  - **ADDITIVE: *int* = ADDITIVE**

    Constant **ADDITIVE** of type *int*

  - **FULL: *int* = FULL**

    Constant **FULL** of type *int*

  - **KASKADE: *int* = KASKADE**

    Constant **KASKADE** of type *int*

  - **MULTIPLICATIVE: *int* = MULTIPLICATIVE**

    Constant **MULTIPLICATIVE** of type *int*

### petsc4py.PETSc.PC.PatchConstructType

- **class petsc4py.PETSc.PC.PatchConstructType**

  Bases: *object*

  The patch construction type.

  Attributes Summary

  | | |
  | --- | --- |
  | *PARDECOMP* | Constant **PARDECOMP** of type *int* |
  | *PYTHON* | Constant **PYTHON** of type *int* |
  | *STAR* | Constant **STAR** of type *int* |
  | *USER* | Constant **USER** of type *int* |
  | *VANKA* | Constant **VANKA** of type *int* |

  Attributes Documentation

  - **PARDECOMP: *int* = PARDECOMP**

    Constant **PARDECOMP** of type *int*

  - **PYTHON: *int* = PYTHON**

    Constant **PYTHON** of type *int*

  - **STAR: *int* = STAR**

    Constant **STAR** of type *int*

  - **USER: *int* = USER**

    Constant **USER** of type *int*

  - **VANKA: *int* = VANKA**

    Constant **VANKA** of type *int*

### petsc4py.PETSc.PC.Side

- **class petsc4py.PETSc.PC.Side**

  Bases: *object*

  The manner in which the preconditioner is applied.

  Attributes Summary

  | | |
  | --- | --- |
  | *L* | Constant **L** of type *int* |
  | *LEFT* | Constant **LEFT** of type *int* |
  | *R* | Constant **R** of type *int* |
  | *RIGHT* | Constant **RIGHT** of type *int* |
  | *S* | Constant **S** of type *int* |
  | *SYMMETRIC* | Constant **SYMMETRIC** of type *int* |

  Attributes Documentation

  - **L: *int* = L**

    Constant **L** of type *int*

  - **LEFT: *int* = LEFT**

    Constant **LEFT** of type *int*

  - **R: *int* = R**

    Constant **R** of type *int*

  - **RIGHT: *int* = RIGHT**

    Constant **RIGHT** of type *int*

  - **S: *int* = S**

    Constant **S** of type *int*

  - **SYMMETRIC: *int* = SYMMETRIC**

    Constant **SYMMETRIC** of type *int*

### petsc4py.PETSc.PC.Type

- **class petsc4py.PETSc.PC.Type**

  Bases: *object*

  The preconditioner method.

  Attributes Summary

  | | |
  | --- | --- |
  | *ASM* | Object **ASM** of type *str* |
  | *BDDC* | Object **BDDC** of type *str* |
  | *BFBT* | Object **BFBT** of type *str* |
  | *BJACOBI* | Object **BJACOBI** of type *str* |
  | *CHOLESKY* | Object **CHOLESKY** of type *str* |
  | *CHOWILUVIENNACL* | Object **CHOWILUVIENNACL** of type *str* |
  | *COMPOSITE* | Object **COMPOSITE** of type *str* |
  | *CP* | Object **CP** of type *str* |
  | *DEFLATION* | Object **DEFLATION** of type *str* |
  | *EISENSTAT* | Object **EISENSTAT** of type *str* |
  | *EXOTIC* | Object **EXOTIC** of type *str* |
  | *FIELDSPLIT* | Object **FIELDSPLIT** of type *str* |
  | *GALERKIN* | Object **GALERKIN** of type *str* |
  | *GAMG* | Object **GAMG** of type *str* |
  | *GASM* | Object **GASM** of type *str* |
  | *H2OPUS* | Object **H2OPUS** of type *str* |
  | *HMG* | Object **HMG** of type *str* |
  | *HPDDM* | Object **HPDDM** of type *str* |
  | *HYPRE* | Object **HYPRE** of type *str* |
  | *ICC* | Object **ICC** of type *str* |
  | *ILU* | Object **ILU** of type *str* |
  | *JACOBI* | Object **JACOBI** of type *str* |
  | *KACZMARZ* | Object **KACZMARZ** of type *str* |
  | *KSP* | Object **KSP** of type *str* |
  | *LMVM* | Object **LMVM** of type *str* |
  | *LSC* | Object **LSC** of type *str* |
  | *LU* | Object **LU** of type *str* |
  | *MAT* | Object **MAT** of type *str* |
  | *MG* | Object **MG** of type *str* |
  | *ML* | Object **ML** of type *str* |
  | *NN* | Object **NN** of type *str* |
  | *NONE* | Object **NONE** of type *str* |
  | *PARMS* | Object **PARMS** of type *str* |
  | *PATCH* | Object **PATCH** of type *str* |
  | *PBJACOBI* | Object **PBJACOBI** of type *str* |
  | *PFMG* | Object **PFMG** of type *str* |
  | *PYTHON* | Object **PYTHON** of type *str* |
  | *QR* | Object **QR** of type *str* |
  | *REDISTRIBUTE* | Object **REDISTRIBUTE** of type *str* |
  | *REDUNDANT* | Object **REDUNDANT** of type *str* |
  | *ROWSCALINGVIENNACL* | Object **ROWSCALINGVIENNACL** of type *str* |
  | *SAVIENNACL* | Object **SAVIENNACL** of type *str* |
  | *SHELL* | Object **SHELL** of type *str* |
  | *SOR* | Object **SOR** of type *str* |
  | *SPAI* | Object **SPAI** of type *str* |
  | *SVD* | Object **SVD** of type *str* |
  | *SYSPFMG* | Object **SYSPFMG** of type *str* |
  | *TELESCOPE* | Object **TELESCOPE** of type *str* |
  | *TFS* | Object **TFS** of type *str* |
  | *VPBJACOBI* | Object **VPBJACOBI** of type *str* |

  Attributes Documentation

  - **ASM: *str* = ASM**

    Object **ASM** of type *str*

  - **BDDC: *str* = BDDC**

    Object **BDDC** of type *str*

  - **BFBT: *str* = BFBT**

    Object **BFBT** of type *str*

  - **BJACOBI: *str* = BJACOBI**

    Object **BJACOBI** of type *str*

  - **CHOLESKY: *str* = CHOLESKY**

    Object **CHOLESKY** of type *str*

  - **CHOWILUVIENNACL: *str* = CHOWILUVIENNACL**

    Object **CHOWILUVIENNACL** of type *str*

  - **COMPOSITE: *str* = COMPOSITE**

    Object **COMPOSITE** of type *str*

  - **CP: *str* = CP**

    Object **CP** of type *str*

  - **DEFLATION: *str* = DEFLATION**

    Object **DEFLATION** of type *str*

  - **EISENSTAT: *str* = EISENSTAT**

    Object **EISENSTAT** of type *str*

  - **EXOTIC: *str* = EXOTIC**

    Object **EXOTIC** of type *str*

  - **FIELDSPLIT: *str* = FIELDSPLIT**

    Object **FIELDSPLIT** of type *str*

  - **GALERKIN: *str* = GALERKIN**

    Object **GALERKIN** of type *str*

  - **GAMG: *str* = GAMG**

    Object **GAMG** of type *str*

  - **GASM: *str* = GASM**

    Object **GASM** of type *str*

  - **H2OPUS: *str* = H2OPUS**

    Object **H2OPUS** of type *str*

  - **HMG: *str* = HMG**

    Object **HMG** of type *str*

  - **HPDDM: *str* = HPDDM**

    Object **HPDDM** of type *str*

  - **HYPRE: *str* = HYPRE**

    Object **HYPRE** of type *str*

  - **ICC: *str* = ICC**

    Object **ICC** of type *str*

  - **ILU: *str* = ILU**

    Object **ILU** of type *str*

  - **JACOBI: *str* = JACOBI**

    Object **JACOBI** of type *str*

  - **KACZMARZ: *str* = KACZMARZ**

    Object **KACZMARZ** of type *str*

  - **KSP: *str* = KSP**

    Object **KSP** of type *str*

  - **LMVM: *str* = LMVM**

    Object **LMVM** of type *str*

  - **LSC: *str* = LSC**

    Object **LSC** of type *str*

  - **LU: *str* = LU**

    Object **LU** of type *str*

  - **MAT: *str* = MAT**

    Object **MAT** of type *str*

  - **MG: *str* = MG**

    Object **MG** of type *str*

  - **ML: *str* = ML**

    Object **ML** of type *str*

  - **NN: *str* = NN**

    Object **NN** of type *str*

  - **NONE: *str* = NONE**

    Object **NONE** of type *str*

  - **PARMS: *str* = PARMS**

    Object **PARMS** of type *str*

  - **PATCH: *str* = PATCH**

    Object **PATCH** of type *str*

  - **PBJACOBI: *str* = PBJACOBI**

    Object **PBJACOBI** of type *str*

  - **PFMG: *str* = PFMG**

    Object **PFMG** of type *str*

  - **PYTHON: *str* = PYTHON**

    Object **PYTHON** of type *str*

  - **QR: *str* = QR**

    Object **QR** of type *str*

  - **REDISTRIBUTE: *str* = REDISTRIBUTE**

    Object **REDISTRIBUTE** of type *str*

  - **REDUNDANT: *str* = REDUNDANT**

    Object **REDUNDANT** of type *str*

  - **ROWSCALINGVIENNACL: *str* = ROWSCALINGVIENNACL**

    Object **ROWSCALINGVIENNACL** of type *str*

  - **SAVIENNACL: *str* = SAVIENNACL**

    Object **SAVIENNACL** of type *str*

  - **SHELL: *str* = SHELL**

    Object **SHELL** of type *str*

  - **SOR: *str* = SOR**

    Object **SOR** of type *str*

  - **SPAI: *str* = SPAI**

    Object **SPAI** of type *str*

  - **SVD: *str* = SVD**

    Object **SVD** of type *str*

  - **SYSPFMG: *str* = SYSPFMG**

    Object **SYSPFMG** of type *str*

  - **TELESCOPE: *str* = TELESCOPE**

    Object **TELESCOPE** of type *str*

  - **TFS: *str* = TFS**

    Object **TFS** of type *str*

  - **VPBJACOBI: *str* = VPBJACOBI**

    Object **VPBJACOBI** of type *str*

Methods Summary

| | |
| --- | --- |
| *addCompositePCType*(pc\_type) | Add a *PC* of the given type to the composite *PC*. |
| *appendOptionsPrefix*(prefix) | Append to the prefix used for all the *PC* options. |
| *apply*(x, y) | Apply the *PC* to a vector. |
| *applySymmetricLeft*(x, y) | Apply the left part of a symmetric *PC* to a vector. |
| *applySymmetricRight*(x, y) | Apply the right part of a symmetric *PC* to a vector. |
| *applyTranspose*(x, y) | Apply the transpose of the *PC* to a vector. |
| *create*(\[comm\]) | Create an empty *PC*. |
| *createPython*(\[context, comm\]) | Create a preconditioner of Python type. |
| *destroy*() | Destroy the *PC* that was created with *create*. |
| *getASMSubKSP*() | Return the local *KSP* object for all blocks on this process. |
| *getCompositePC*(n) | Return a component of the composite *PC*. |
| *getDM*() | Return the *DM* associated with the *PC*. |
| *getDeflationCoarseKSP*() | Return the coarse problem *KSP*. |
| *getDeflationPC*() | Return the additional preconditioner. |
| *getFactorMatrix*() | Return the factored matrix. |
| *getFactorSolverType*() | Return the solver package used to perform the factorization. |
| *getFailedReason*() | Return the reason the *PC* terminated. |
| *getFieldSplitSchurGetSubKSP*() | Return the *KSP* for the Schur complement based splits. |
| *getFieldSplitSubIS*(splitname) | Return the *IS* associated with a given name. |
| *getFieldSplitSubKSP*() | Return the *KSP* for all splits. |
| *getHPDDMCoarseCorrectionType*() | Return the coarse correction type. |
| *getHPDDMComplexities*() | Compute the grid and operator complexities. |
| *getHPDDMSTShareSubKSP*() | Return true if the *KSP* in SLEPc **ST** and the subdomain solver is shared. |
| *getHYPREType*() | Return the *Type.HYPRE* type. |
| *getKSP*() | Return the *KSP* if the *PC* is *Type.KSP*. |
| *getMGCoarseSolve*() | Return the *KSP* used on the coarse grid. |
| *getMGInterpolation*(level) | Return the interpolation operator for the given level. |
| *getMGLevels*() | Return the number of *MG* levels. |
| *getMGRScale*(level) | Return the pointwise scaling for the restriction operator on the given level. |
| *getMGRestriction*(level) | Return the restriction operator for the given level. |
| *getMGSmoother*(level) | Return the *KSP* to be used as a smoother. |
| *getMGSmootherDown*(level) | Return the *KSP* to be used as a smoother before coarse grid correction. |
| *getMGSmootherUp*(level) | Return the *KSP* to be used as a smoother after coarse grid correction. |
| *getMGType*() | Return the form of multigrid. |
| *getOperators*() | Return the matrices associated with a linear system. |
| *getOptionsPrefix*() | Return the prefix used for all the *PC* options. |
| *getPatchSubKSP*() | Return the local *KSP* object for all blocks on this process. |
| *getPythonContext*() | Return the instance of the class implementing the required Python methods. |
| *getPythonType*() | Return the fully qualified Python name of the class used by the preconditioner. |
| *getType*() | Return the preconditioner type. |
| *getUseAmat*() | Return the flag to indicate if *PC* is applied to **A** or **P**. |
| *matApply*(x, y) | Apply the *PC* to many vectors stored as *Mat.Type.DENSE*. |
| *reset*() | Reset the *PC*, removing any allocated vectors and matrices. |
| *setASMLocalSubdomains*(nsd\[, is\_sub, is\_local\]) | Set the local subdomains. |
| *setASMOverlap*(overlap) | Set the overlap between a pair of subdomains. |
| *setASMSortIndices*(dosort) | Set to sort subdomain indices. |
| *setASMTotalSubdomains*(nsd\[, is\_sub, is\_local\]) | Set the subdomains for all processes. |
| *setASMType*(asmtype) | Set the type of restriction and interpolation. |
| *setBDDCChangeOfBasisMat*(T\[, interior\]) | Set a user defined change of basis for degrees of freedom. |
| *setBDDCCoarseningRatio*(cratio) | Set the coarsening ratio used in the multilevel version. |
| *setBDDCDirichletBoundaries*(bndr) | Set the *IS* defining Dirichlet boundaries for the global problem. |
| *setBDDCDirichletBoundariesLocal*(bndr) | Set the *IS* defining Dirichlet boundaries in local ordering. |
| *setBDDCDiscreteGradient*(G\[, order, field, ...\]) | Set the discrete gradient. |
| *setBDDCDivergenceMat*(div\[, trans, l2l\]) | Set the linear operator representing ∫ div(u)•p dx. |
| *setBDDCDofsSplitting*(isfields) | Set the index set(s) defining fields of the global matrix. |
| *setBDDCDofsSplittingLocal*(isfields) | Set the index set(s) defining fields of the local subdomain matrix. |
| *setBDDCLevels*(levels) | Set the maximum number of additional levels allowed. |
| *setBDDCLocalAdjacency*(csr) | Provide a custom connectivity graph for local dofs. |
| *setBDDCNeumannBoundaries*(bndr) | Set the *IS* defining Neumann boundaries for the global problem. |
| *setBDDCNeumannBoundariesLocal*(bndr) | Set the *IS* defining Neumann boundaries in local ordering. |
| *setBDDCPrimalVerticesIS*(primv) | Set additional user defined primal vertices. |
| *setBDDCPrimalVerticesLocalIS*(primv) | Set additional user defined primal vertices. |
| *setCompositeType*(ctype) | Set the type of composite preconditioner. |
| *setCoordinates*(coordinates) | Set the coordinates for the nodes on the local process. |
| *setDM*(dm) | Set the *DM* that may be used by some preconditioners. |
| *setDeflationCoarseMat*(mat) | Set the coarse problem matrix. |
| *setDeflationCorrectionFactor*(fact) | Set the coarse problem correction factor. |
| *setDeflationInitOnly*(flg) | Set to only perform the initialization. |
| *setDeflationLevels*(levels) | Set the maximum level of deflation nesting. |
| *setDeflationProjectionNullSpaceMat*(mat) | Set the projection null space matrix. |
| *setDeflationReductionFactor*(red) | Set the reduction factor for the preconditioner. |
| *setDeflationSpace*(W, transpose) | Set the deflation space matrix or its (Hermitian) transpose. |
| *setDeflationSpaceToCompute*(space\_type, size) | Set the deflation space type. |
| *setFactorLevels*(levels) | Set the number of levels of fill. |
| *setFactorOrdering*(\[ord\_type, nzdiag, reuse\]) | Set options for the matrix factorization reordering. |
| *setFactorPivot*(\[zeropivot, inblocks\]) | Set options for matrix factorization pivoting. |
| *setFactorSetUpSolverType*() | Set up the factorization solver. |
| *setFactorShift*(\[shift\_type, amount\]) | Set options for shifting diagonal entries of a matrix. |
| *setFactorSolverType*(solver) | Set the solver package used to perform the factorization. |
| *setFailedReason*(reason) | Set the reason the *PC* terminated. |
| *setFieldSplitFields*(bsize, \*fields) | Sets the elements for the field split. |
| *setFieldSplitIS*(\*fields) | Set the elements for the field split by *IS*. |
| *setFieldSplitSchurFactType*(ctype) | Set the type of approximate block factorization. |
| *setFieldSplitSchurPreType*(ptype\[, pre\]) | Set from what operator the *PC* is constructed. |
| *setFieldSplitType*(ctype) | Set the type of composition of a field split preconditioner. |
| *setFromOptions*() | Set various *PC* parameters from user options. |
| *setGAMGLevels*(levels) | Set the maximum number of levels. |
| *setGAMGSmooths*(smooths) | Set the number of smoothing steps used on all levels. |
| *setGAMGType*(gamgtype) | Set the type of algorithm. |
| *setGASMOverlap*(overlap) | Set the overlap between a pair of subdomains. |
| *setGASMType*(gasmtype) | Set the type of restriction and interpolation. |
| *setHPDDMAuxiliaryMat*(uis, uaux) | Set the auxiliary matrix used by the preconditioner. |
| *setHPDDMCoarseCorrectionType*(correction\_type) | Set the coarse correction type. |
| *setHPDDMDeflationMat*(uis, U) | Set the deflation space used to assemble a coarse operator. |
| *setHPDDMHasNeumannMat*(has) | Set to indicate that the *Mat* passed to the *PC* is the local Neumann matrix. |
| *setHPDDMRHSMat*(B) | Set the right-hand side matrix of the preconditioner. |
| *setHYPREAMSSetInteriorNodes*(interior) | Set the list of interior nodes to a zero conductivity region. |
| *setHYPREDiscreteCurl*(mat) | Set the discrete curl matrix. |
| *setHYPREDiscreteGradient*(mat) | Set the discrete gradient matrix. |
| *setHYPRESetAlphaPoissonMatrix*(mat) | Set the vector Poisson matrix. |
| *setHYPRESetBetaPoissonMatrix*(\[mat\]) | Set the Posson matrix. |
| *setHYPRESetEdgeConstantVectors*(ozz, zoz\[, zzo\]) | Set the representation of the constant vector fields in the edge element basis. |
| *setHYPRESetInterpolations*(dim\[, RT\_Pi\_Full, ...\]) | Set the interpolation matrices. |
| *setHYPREType*(hypretype) | Set the *Type.HYPRE* type. |
| *setMGCycleType*(cycle\_type) | Set the type of cycles. |
| *setMGCycleTypeOnLevel*(level, cycle\_type) | Set the type of cycle on the given level. |
| *setMGInterpolation*(level, mat) | Set the interpolation operator for the given level. |
| *setMGLevels*(levels) | Set the number of *MG* levels. |
| *setMGR*(level, r) | Set the vector where the residual is stored. |
| *setMGRScale*(level, rscale) | Set the pointwise scaling for the restriction operator on the given level. |
| *setMGRestriction*(level, mat) | Set the restriction operator for the given level. |
| *setMGRhs*(level, rhs) | Set the vector where the right-hand side is stored. |
| *setMGType*(mgtype) | Set the form of multigrid. |
| *setMGX*(level, x) | Set the vector where the solution is stored. |
| *setOperators*(\[A, P\]) | Set the matrices associated with the linear system. |
| *setOptionsPrefix*(prefix) | Set the prefix used for all the *PC* options. |
| *setPatchCellNumbering*(sec) | Set the cell numbering. |
| *setPatchComputeFunction*(function\[, args, kargs\]) | Set compute operator callbacks. |
| *setPatchComputeFunctionInteriorFacets*(function) | Set compute operator callbacks. |
| *setPatchComputeOperator*(operator\[, args, kargs\]) | Set compute operator callbacks. |
| *setPatchComputeOperatorInteriorFacets*(operator) | Set compute operator callbacks. |
| *setPatchConstructType*(typ\[, operator, args, ...\]) | Set compute operator callbacks. |
| *setPatchDiscretisationInfo*(dms, bs, ...) | Set discretisation info. |
| *setPythonContext*(context) | Set the instance of the class implementing the required Python methods. |
| *setPythonType*(py\_type) | Set the fully qualified Python name of the class to be used. |
| *setReusePreconditioner*(flag) | Set to indicate the preconditioner is to be reused. |
| *setSPAIBlockSize*(n) | Set the block size of the preconditioner. |
| *setSPAICacheSize*(size) | Set the cache size. |
| *setSPAIEpsilon*(val) | Set the tolerance for the preconditioner. |
| *setSPAIMax*(maxval) | Set the size of working buffers in the preconditioner. |
| *setSPAIMaxNew*(maxval) | Set the maximum number of new non-zero candidates per step. |
| *setSPAINBSteps*(nbsteps) | Set the maximum number of improvement steps per row. |
| *setSPAISp*(sym) | Set to specify a symmetric sparsity pattern. |
| *setSPAIVerbose*(level) | Set the verbosity level. |
| *setType*(pc\_type) | Set the preconditioner type. |
| *setUp*() | Set up the internal data structures for the *PC*. |
| *setUpOnBlocks*() | Set up the *PC* for each block. |
| *setUseAmat*(flag) | Set to indicate to apply *PC* to **A** and not **P**. |
| *view*(\[viewer\]) | View the *PC* object. |

Methods Documentation

- **addCompositePCType(pc\_type)**

  Add a *PC* of the given type to the composite *PC*.

  Collective.

  - **Parameters**

    **pc\_type** (*Type \| str*) -- The type of the preconditioner to add.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCCompositeAddPCType*

  *Source code at petsc4py/PETSc/PC.pyx:1665*

- **appendOptionsPrefix(prefix)**

  Append to the prefix used for all the *PC* options.

  Logically collective.

  - **Parameters**

    **prefix** (*str \| None*) -- The prefix to append to the current prefix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *Working with PETSc options*, *PCAppendOptionsPrefix*

  *Source code at petsc4py/PETSc/PC.pyx:355*

- **apply(x, y)**

  Apply the *PC* to a vector.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector.

    - •

      **y** (*Vec*) -- The output vector, cannot be the same as **x**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCApply*

  *Source code at petsc4py/PETSc/PC.pyx:581*

- **applySymmetricLeft(x, y)**

  Apply the left part of a symmetric *PC* to a vector.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector.

    - •

      **y** (*Vec*) -- The output vector, cannot be the same as **x**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCApplySymmetricLeft*

  *Source code at petsc4py/PETSc/PC.pyx:641*

- **applySymmetricRight(x, y)**

  Apply the right part of a symmetric *PC* to a vector.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector.

    - •

      **y** (*Vec*) -- The output vector, cannot be the same as **x**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCApplySymmetricRight*

  *Source code at petsc4py/PETSc/PC.pyx:660*

- **applyTranspose(x, y)**

  Apply the transpose of the *PC* to a vector.

  Collective.

  For complex numbers this applies the non-Hermitian transpose.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input vector.

    - •

      **y** (*Vec*) -- The output vector, cannot be the same as **x**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCApply*

  *Source code at petsc4py/PETSc/PC.pyx:619*

- **create(comm=None)**

  Create an empty *PC*.

  Collective.

  The default preconditioner for sparse matrices is *ILU* or *ICC* with 0 fill on one process and block Jacobi (*BJACOBI*) with *ILU* or *ICC* in parallel. For dense matrices it is always *None*.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *destroy*, *PCCreate*

  *Source code at petsc4py/PETSc/PC.pyx:264*

- **createPython(context=None, comm=None)**

  Create a preconditioner of Python type.

  Collective.

  - **Parameters**

    - •

      **context** (*Any*) -- An instance of the Python class implementing the required methods.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PETSc Python preconditioner type*, *setType*, *setPythonContext*, *PC.Type.PYTHON*

  *Source code at petsc4py/PETSc/PC.pyx:742*

- **destroy()**

  Destroy the *PC* that was created with *create*.

  Collective.

  **SEE ALSO:**

  *PCDestroy*

  *Source code at petsc4py/PETSc/PC.pyx:250*

  - **Return type**

    *Self*

- **getASMSubKSP()**

  Return the local *KSP* object for all blocks on this process.

  Not collective.

  **SEE ALSO:**

  *PCASMGetSubKSP*

  *Source code at petsc4py/PETSc/PC.pyx:946*

  - **Return type**

    *list*\[*KSP*\]

- **getCompositePC(n)**

  Return a component of the composite *PC*.

  Not collective.

  - **Parameters**

    **n** (*int*) -- The index of the *PC* in the composition.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCCompositeGetPC*

  *Source code at petsc4py/PETSc/PC.pyx:1644*

- **getDM()**

  Return the *DM* associated with the *PC*.

  Not collective.

  **SEE ALSO:**

  *PCGetDM*

  *Source code at petsc4py/PETSc/PC.pyx:681*

  - **Return type**

    *DM*

- **getDeflationCoarseKSP()**

  Return the coarse problem *KSP*.

  Not collective.

  **SEE ALSO:**

  *PCDeflationGetCoarseKSP*

  *Source code at petsc4py/PETSc/PC.pyx:2910*

  - **Return type**

    *KSP*

- **getDeflationPC()**

  Return the additional preconditioner.

  Not collective.

  **SEE ALSO:**

  *PCDeflationGetPC*

  *Source code at petsc4py/PETSc/PC.pyx:2925*

  - **Return type**

    *PC*

- **getFactorMatrix()**

  Return the factored matrix.

  Not collective.

  **SEE ALSO:**

  *PCFactorGetMatrix*

  *Source code at petsc4py/PETSc/PC.pyx:1434*

  - **Return type**

    *Mat*

- **getFactorSolverType()**

  Return the solver package used to perform the factorization.

  Not collective.

  **SEE ALSO:**

  *PCFactorGetMatSolverType*

  *Source code at petsc4py/PETSc/PC.pyx:1290*

  - **Return type**

    *str*

- **getFailedReason()**

  Return the reason the *PC* terminated.

  Not collective.

  After a call to KSPCheckDot() or KSPCheckNorm() inside a KSPSolve(), or after a call to PCReduceFailedReason() this is the maximum reason over all ranks in the PC communicator and hence logically collective. Otherwise it is the local value.

  **SEE ALSO:**

  *PCGetFailedReason*

  *Source code at petsc4py/PETSc/PC.pyx:520*

  - **Return type**

    *FailedReason*

- **getFieldSplitSchurGetSubKSP()**

  Return the *KSP* for the Schur complement based splits.

  Not collective.

  **SEE ALSO:**

  *PCFieldSplitSchurGetSubKSP*, *PCFieldSplitGetSubKSP*

  *Source code at petsc4py/PETSc/PC.pyx:1545*

  - **Return type**

    *list*\[*KSP*\]

- **getFieldSplitSubIS(splitname)**

  Return the *IS* associated with a given name.

  Not collective.

  **SEE ALSO:**

  *PCFieldSplitGetIS*

  *Source code at petsc4py/PETSc/PC.pyx:1565*

  - **Parameters**

    **splitname** (*str*)

  - **Return type**

    *IS*

- **getFieldSplitSubKSP()**

  Return the *KSP* for all splits.

  Not collective.

  **SEE ALSO:**

  *PCFieldSplitGetSubKSP*

  *Source code at petsc4py/PETSc/PC.pyx:1525*

  - **Return type**

    *list*\[*KSP*\]

- **getHPDDMCoarseCorrectionType()**

  Return the coarse correction type.

  Not collective.

  **SEE ALSO:**

  *PCHPDDMGetCoarseCorrectionType*

  *Source code at petsc4py/PETSc/PC.pyx:2562*

  - **Return type**

    *HPDDMCoarseCorrectionType*

- **getHPDDMComplexities()**

  Compute the grid and operator complexities.

  Collective.

  **SEE ALSO:**

  *PCHPDDMGetComplexities*

  *Source code at petsc4py/PETSc/PC.pyx:2512*

  - **Return type**

    *tuple*\[*float*, *float*\]

- **getHPDDMSTShareSubKSP()**

  Return true if the *KSP* in SLEPc **ST** and the subdomain solver is shared.

  Not collective.

  **SEE ALSO:**

  *PCHPDDMGetSTShareSubKSP*

  *Source code at petsc4py/PETSc/PC.pyx:2576*

  - **Return type**

    *bool*

- **getHYPREType()**

  Return the *Type.HYPRE* type.

  Not collective.

  **SEE ALSO:**

  *PCHYPREGetType*

  *Source code at petsc4py/PETSc/PC.pyx:1076*

  - **Return type**

    *str*

- **getKSP()**

  Return the *KSP* if the *PC* is *Type.KSP*.

  Not collective.

  **SEE ALSO:**

  *PCKSPGetKSP*

  *Source code at petsc4py/PETSc/PC.pyx:1686*

  - **Return type**

    *KSP*

- **getMGCoarseSolve()**

  Return the *KSP* used on the coarse grid.

  Not collective.

  **SEE ALSO:**

  *PCMGGetCoarseSolve*

  *Source code at petsc4py/PETSc/PC.pyx:1762*

  - **Return type**

    *KSP*

- **getMGInterpolation(level)**

  Return the interpolation operator for the given level.

  Logically collective.

  - **Parameters**

    **level** (*int*) -- The level where interpolation is defined from **level-1** to **level**.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *PCMGGetInterpolation*

  *Source code at petsc4py/PETSc/PC.pyx:1797*

- **getMGLevels()**

  Return the number of *MG* levels.

  Not collective.

  **SEE ALSO:**

  *PCMGGetLevels*

  *Source code at petsc4py/PETSc/PC.pyx:1730*

  - **Return type**

    *int*

- **getMGRScale(level)**

  Return the pointwise scaling for the restriction operator on the given level.

  Logically collective.

  - **Parameters**

    **level** (*int*) -- The level where restriction is defined from **level** to **level-1**.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *PCMGGetRScale*

  *Source code at petsc4py/PETSc/PC.pyx:1879*

- **getMGRestriction(level)**

  Return the restriction operator for the given level.

  Logically collective.

  - **Parameters**

    **level** (*int*) -- The level where restriction is defined from **level** to **level-1**.

  - **Return type**

    *Mat*

  **SEE ALSO:**

  *PCMGGetRestriction*

  *Source code at petsc4py/PETSc/PC.pyx:1838*

- **getMGSmoother(level)**

  Return the *KSP* to be used as a smoother.

  Not collective.

  - **Parameters**

    **level** (*int*) -- The level of the smoother.

  - **Return type**

    *KSP*

  **SEE ALSO:**

  *getMGSmootherDown*, *getMGSmootherUp*, *PCMGGetSmoother*

  *Source code at petsc4py/PETSc/PC.pyx:1900*

- **getMGSmootherDown(level)**

  Return the *KSP* to be used as a smoother before coarse grid correction.

  Not collective.

  - **Parameters**

    **level** (*int*) -- The level of the smoother.

  - **Return type**

    *KSP*

  **SEE ALSO:**

  *getMGSmoother*, *getMGSmootherUp*, *PCMGGetSmootherDown*

  *Source code at petsc4py/PETSc/PC.pyx:1921*

- **getMGSmootherUp(level)**

  Return the *KSP* to be used as a smoother after coarse grid correction.

  Not collective.

  - **Parameters**

    **level** (*int*) -- The level of the smoother.

  - **Return type**

    *KSP*

  **SEE ALSO:**

  *getMGSmootherDown*, *getMGSmoother*, *PCMGGetSmootherUp*

  *Source code at petsc4py/PETSc/PC.pyx:1942*

- **getMGType()**

  Return the form of multigrid.

  Logically collective.

  **SEE ALSO:**

  *PCMGGetType*

  *Source code at petsc4py/PETSc/PC.pyx:1703*

  - **Return type**

    *MGType*

- **getOperators()**

  Return the matrices associated with a linear system.

  Not collective.

  **SEE ALSO:**

  *setOperators*, *PCGetOperators*

  *Source code at petsc4py/PETSc/PC.pyx:416*

  - **Return type**

    *tuple*\[*Mat*, *Mat*\]

- **getOptionsPrefix()**

  Return the prefix used for all the *PC* options.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *PCGetOptionsPrefix*

  *Source code at petsc4py/PETSc/PC.pyx:341*

  - **Return type**

    *str*

- **getPatchSubKSP()**

  Return the local *KSP* object for all blocks on this process.

  Not collective.

  *Source code at petsc4py/PETSc/PC.pyx:2372*

  - **Return type**

    *list*\[*KSP*\]

- **getPythonContext()**

  Return the instance of the class implementing the required Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python preconditioner type*, *setPythonContext*

  *Source code at petsc4py/PETSc/PC.pyx:779*

  - **Return type**

    *Any*

- **getPythonType()**

  Return the fully qualified Python name of the class used by the preconditioner.

  Not collective.

  **SEE ALSO:**

  *PETSc Python preconditioner type*, *setPythonContext*, *setPythonType*, *PCPythonGetType*

  *Source code at petsc4py/PETSc/PC.pyx:808*

  - **Return type**

    *str*

- **getType()**

  Return the preconditioner type.

  Not collective.

  **SEE ALSO:**

  *setType*, *PCGetType*

  *Source code at petsc4py/PETSc/PC.pyx:308*

  - **Return type**

    *str*

- **getUseAmat()**

  Return the flag to indicate if *PC* is applied to **A** or **P**.

  Logically collective.

  - **Returns**

    **flag** -- True if **A** is used and False if **P**.

  - **Return type**

    *bool*

  **SEE ALSO:**

  *setUseAmat*, *PCGetUseAmat*

  *Source code at petsc4py/PETSc/PC.pyx:458*

- **matApply(x, y)**

  Apply the *PC* to many vectors stored as *Mat.Type.DENSE*.

  Collective.

  - **Parameters**

    - •

      **x** (*Mat*) -- The input matrix.

    - •

      **y** (*Mat*) -- The output matrix, cannot be the same as **x**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCMatApply*, *PCApply*

  *Source code at petsc4py/PETSc/PC.pyx:600*

- **reset()**

  Reset the *PC*, removing any allocated vectors and matrices.

  Collective.

  **SEE ALSO:**

  *PCReset*

  *Source code at petsc4py/PETSc/PC.pyx:553*

  - **Return type**

    *None*

- **setASMLocalSubdomains(nsd, is\_sub=None, is\_local=None)**

  Set the local subdomains.

  Collective.

  - **Parameters**

    - •

      **nsd** (*int*) -- The number of subdomains for this process.

    - •

      **is\_sub** (*Sequence\[IS\] \| None*) -- Defines the subdomains for this process or *None* to determine internally.

    - •

      **is\_local** (*Sequence\[IS\] \| None*) -- Defines the local part of the subdomains for this process, only used for *PC.ASMType.RESTRICT*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setASMTotalSubdomains*, *PCASMSetLocalSubdomains*

  *Source code at petsc4py/PETSc/PC.pyx:860*

- **setASMOverlap(overlap)**

  Set the overlap between a pair of subdomains.

  Logically collective.

  - **Parameters**

    **overlap** (*int*) -- The amount of overlap between subdomains.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCASMSetOverlap*

  *Source code at petsc4py/PETSc/PC.pyx:842*

- **setASMSortIndices(dosort)**

  Set to sort subdomain indices.

  Logically collective.

  - **Parameters**

    **dosort** (*bool*) -- Set to *True* to sort indices

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCASMSetSortIndices*

  *Source code at petsc4py/PETSc/PC.pyx:961*

- **setASMTotalSubdomains(nsd, is\_sub=None, is\_local=None)**

  Set the subdomains for all processes.

  Collective.

  - **Parameters**

    - •

      **nsd** (*int*) -- The number of subdomains for all processes.

    - •

      **is\_sub** (*Sequence\[IS\] \| None*) -- Defines the subdomains for all processes or *None* to determine internally.

    - •

      **is\_local** (*Sequence\[IS\] \| None*) -- Defines the local part of the subdomains for this process, only used for *PC.ASMType.RESTRICT*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setASMLocalSubdomains*, *PCASMSetTotalSubdomains*

  *Source code at petsc4py/PETSc/PC.pyx:903*

- **setASMType(asmtype)**

  Set the type of restriction and interpolation.

  Logically collective.

  - **Parameters**

    **asmtype** (*ASMType*) -- The type of ASM you wish to use.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCASMSetType*

  *Source code at petsc4py/PETSc/PC.pyx:824*

- **setBDDCChangeOfBasisMat(T, interior=False)**

  Set a user defined change of basis for degrees of freedom.

  Collective.

  - **Parameters**

    - •

      **T** (*Mat*) -- The matrix representing the change of basis.

    - •

      **interior** (*bool*) -- Enable to indicate the change of basis affects interior degrees of freedom.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetChangeOfBasisMat*

  *Source code at petsc4py/PETSc/PC.pyx:2165*

- **setBDDCCoarseningRatio(cratio)**

  Set the coarsening ratio used in the multilevel version.

  Logically collective.

  - **Parameters**

    **cratio** (*int*) -- The coarsening ratio at the coarse level

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetCoarseningRatio*

  *Source code at petsc4py/PETSc/PC.pyx:2220*

- **setBDDCDirichletBoundaries(bndr)**

  Set the *IS* defining Dirichlet boundaries for the global problem.

  Collective.

  - **Parameters**

    **bndr** (*IS*) -- The parallel *IS* defining Dirichlet boundaries.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetDirichletBoundaries*

  *Source code at petsc4py/PETSc/PC.pyx:2256*

- **setBDDCDirichletBoundariesLocal(bndr)**

  Set the *IS* defining Dirichlet boundaries in local ordering.

  Collective.

  - **Parameters**

    **bndr** (*IS*) -- The parallel *IS* defining Dirichlet boundaries in local ordering.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setBDDCDirichletBoundaries*, *PCBDDCSetDirichletBoundariesLocal*

  *Source code at petsc4py/PETSc/PC.pyx:2273*

- **setBDDCDiscreteGradient(G, order=1, field=1, gord=True, conforming=True)**

  Set the discrete gradient.

  Collective.

  - **Parameters**

    - •

      **G** (*Mat*) -- The discrete gradient matrix in *Mat.Type.AIJ* format.

    - •

      **order** (*int*) -- The order of the Nedelec space.

    - •

      **field** (*int*) -- The field number of the Nedelec degrees of freedom. This is not used if no fields have been specified.

    - •

      **gord** (*bool*) -- Enable to use global ordering in the rows of **G**.

    - •

      **conforming** (*bool*) -- Enable if the mesh is conforming.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetDiscreteGradient*

  *Source code at petsc4py/PETSc/PC.pyx:2129*

- **setBDDCDivergenceMat(div, trans=False, l2l=None)**

  Set the linear operator representing ∫ div(u)•p dx.

  Collective.

  - **Parameters**

    - •

      **div** (*Mat*) -- The matrix in *Mat.Type.IS* format.

    - •

      **trans** (*bool*) -- If *True*, the pressure/velocity is in the trial/test space respectively. If *False* the pressure/velocity is in the test/trial space.

    - •

      **l2l** (*IS \| None*) -- Optional *IS* describing the local to local map for velocities.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetDivergenceMat*

  *Source code at petsc4py/PETSc/PC.pyx:2103*

- **setBDDCDofsSplitting(isfields)**

  Set the index set(s) defining fields of the global matrix.

  Collective.

  - **Parameters**

    **isfields** (*IS \| Sequence\[IS\]*) -- The sequence of *IS* describing the fields in global ordering.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetDofsSplitting*

  *Source code at petsc4py/PETSc/PC.pyx:2324*

- **setBDDCDofsSplittingLocal(isfields)**

  Set the index set(s) defining fields of the local subdomain matrix.

  Collective.

  Not all nodes need to be listed. Unlisted nodes will belong to the complement field.

  - **Parameters**

    **isfields** (*IS \| Sequence\[IS\]*) -- The sequence of *IS* describing the fields in local ordering.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetDofsSplittingLocal*

  *Source code at petsc4py/PETSc/PC.pyx:2346*

- **setBDDCLevels(levels)**

  Set the maximum number of additional levels allowed.

  Logically collective.

  - **Parameters**

    **levels** (*int*) -- The maximum number of levels.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetLevels*

  *Source code at petsc4py/PETSc/PC.pyx:2238*

- **setBDDCLocalAdjacency(csr)**

  Provide a custom connectivity graph for local dofs.

  Not collective.

  - **Parameters**

    **csr** (*CSRIndicesSpec*) -- Compressed sparse row layout information.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetLocalAdjacencyGraph*

  *Source code at petsc4py/PETSc/PC.pyx:2073*

- **setBDDCNeumannBoundaries(bndr)**

  Set the *IS* defining Neumann boundaries for the global problem.

  Collective.

  - **Parameters**

    **bndr** (*IS*) -- The parallel *IS* defining Neumann boundaries.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetNeumannBoundaries*

  *Source code at petsc4py/PETSc/PC.pyx:2290*

- **setBDDCNeumannBoundariesLocal(bndr)**

  Set the *IS* defining Neumann boundaries in local ordering.

  Collective.

  - **Parameters**

    **bndr** (*IS*) -- The parallel *IS* defining Neumann boundaries in local ordering.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setBDDCNeumannBoundaries*, *PCBDDCSetNeumannBoundariesLocal*

  *Source code at petsc4py/PETSc/PC.pyx:2307*

- **setBDDCPrimalVerticesIS(primv)**

  Set additional user defined primal vertices.

  Collective.

  - **Parameters**

    **primv** (*IS*) -- The *IS* of primal vertices in global numbering.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetPrimalVerticesIS*

  *Source code at petsc4py/PETSc/PC.pyx:2186*

- **setBDDCPrimalVerticesLocalIS(primv)**

  Set additional user defined primal vertices.

  Collective.

  - **Parameters**

    **primv** (*IS*) -- The *IS* of primal vertices in local numbering.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCBDDCSetPrimalVerticesLocalIS*

  *Source code at petsc4py/PETSc/PC.pyx:2203*

- **setCompositeType(ctype)**

  Set the type of composite preconditioner.

  Logically collective.

  - **Parameters**

    **ctype** (*CompositeType*) -- The type of composition.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCCompositeSetType*

  *Source code at petsc4py/PETSc/PC.pyx:1626*

- **setCoordinates(coordinates)**

  Set the coordinates for the nodes on the local process.

  Collective.

  - **Parameters**

    **coordinates** (*Sequence\[Sequence\[float\]\]*) -- The two dimensional coordinate array.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSetCoordinates*

  *Source code at petsc4py/PETSc/PC.pyx:715*

- **setDM(dm)**

  Set the *DM* that may be used by some preconditioners.

  Logically collective.

  - **Parameters**

    **dm** (*DM*) -- The *DM* object.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSetDM*

  *Source code at petsc4py/PETSc/PC.pyx:698*

- **setDeflationCoarseMat(mat)**

  Set the coarse problem matrix.

  Collective.

  - **Parameters**

    **mat** (*Mat*) -- The coarse problem matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCDeflationSetCoarseMat*

  *Source code at petsc4py/PETSc/PC.pyx:2893*

- **setDeflationCorrectionFactor(fact)**

  Set the coarse problem correction factor.

  Logically collective.

  - **Parameters**

    **fact** (*float*) -- The correction factor.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCDeflationSetCorrectionFactor*

  *Source code at petsc4py/PETSc/PC.pyx:2816*

- **setDeflationInitOnly(flg)**

  Set to only perform the initialization.

  Logically collective.

  Sets initial guess to the solution on the deflation space but does not apply the deflation preconditioner. The additional preconditioner is still applied.

  - **Parameters**

    **flg** (*bool*) -- Enable to only initialize the preconditioner.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCDeflationSetInitOnly*

  *Source code at petsc4py/PETSc/PC.pyx:2758*

- **setDeflationLevels(levels)**

  Set the maximum level of deflation nesting.

  Logically collective.

  - **Parameters**

    **levels** (*int*) -- The maximum deflation level.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCDeflationSetLevels*

  *Source code at petsc4py/PETSc/PC.pyx:2780*

- **setDeflationProjectionNullSpaceMat(mat)**

  Set the projection null space matrix.

  Collective.

  - **Parameters**

    **mat** (*Mat*) -- The projection null space matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCDeflationSetProjectionNullSpaceMat*

  *Source code at petsc4py/PETSc/PC.pyx:2876*

- **setDeflationReductionFactor(red)**

  Set the reduction factor for the preconditioner.

  Logically collective.

  - **Parameters**

    **red** (*int*) -- The reduction factor or **DEFAULT**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCDeflationSetReductionFactor*

  *Source code at petsc4py/PETSc/PC.pyx:2798*

- **setDeflationSpace(W, transpose)**

  Set the deflation space matrix or its (Hermitian) transpose.

  Logically collective.

  - **Parameters**

    - •

      **W** (*Mat*) -- The deflation matrix.

    - •

      **transpose** (*bool*) -- Enable to indicate that **W** is an explicit transpose of the deflation matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCDeflationSetSpace*

  *Source code at petsc4py/PETSc/PC.pyx:2855*

- **setDeflationSpaceToCompute(space\_type, size)**

  Set the deflation space type.

  Logically collective.

  - **Parameters**

    - •

      **space\_type** (*DeflationSpaceType*) -- The deflation space type.

    - •

      **size** (*int*) -- The size of the space to compute

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCDeflationSetSpaceToCompute*

  *Source code at petsc4py/PETSc/PC.pyx:2834*

- **setFactorLevels(levels)**

  Set the number of levels of fill.

  Logically collective.

  - **Parameters**

    **levels** (*int*) -- The number of levels to fill.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCFactorSetLevels*

  *Source code at petsc4py/PETSc/PC.pyx:1416*

- **setFactorOrdering(ord\_type=None, nzdiag=None, reuse=None)**

  Set options for the matrix factorization reordering.

  Logically collective.

  - **Parameters**

    - •

      **ord\_type** (*str \| None*) -- The name of the matrix ordering or *None* to leave unchanged.

    - •

      **nzdiag** (*float \| None*) -- Threshold to consider diagonal entries in the matrix as zero.

    - •

      **reuse** (*bool \| None*) -- Enable to reuse the ordering of a factored matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCFactorSetMatOrderingType*, *PCFactorReorderForNonzeroDiagonal*, *PCFactorSetReuseOrdering*

  *Source code at petsc4py/PETSc/PC.pyx:1320*

- **setFactorPivot(zeropivot=None, inblocks=None)**

  Set options for matrix factorization pivoting.

  Logically collective.

  - **Parameters**

    - •

      **zeropivot** (*float \| None*) -- The size at which smaller pivots are treated as zero.

    - •

      **inblocks** (*bool \| None*) -- Enable to allow pivoting while factoring in blocks.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCFactorSetZeroPivot*, *PCFactorSetPivotInBlocks*

  *Source code at petsc4py/PETSc/PC.pyx:1357*

- **setFactorSetUpSolverType()**

  Set up the factorization solver.

  Collective.

  This can be called after *KSP.setOperators* or *PC.setOperators*, causes *MatGetFactor* to be called so then one may set the options for that particular factorization object.

  **SEE ALSO:**

  *Working with PETSc options*, *PCFactorSetUpMatSolverType*

  *Source code at petsc4py/PETSc/PC.pyx:1304*

  - **Return type**

    *None*

- **setFactorShift(shift\_type=None, amount=None)**

  Set options for shifting diagonal entries of a matrix.

  Logically collective.

  - **Parameters**

    - •

      **shift\_type** (*FactorShiftType \| None*) -- The type of shift, or *None* to leave unchanged.

    - •

      **amount** (*float \| None*) -- The amount of shift. Specify *DEFAULT* to determine internally or *None* to leave unchanged.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCFactorSetShiftType*, *PCFactorSetShiftAmount*

  *Source code at petsc4py/PETSc/PC.pyx:1386*

- **setFactorSolverType(solver)**

  Set the solver package used to perform the factorization.

  Logically collective.

  - **Parameters**

    **solver** (*SolverType \| str*) -- The solver package used to factorize.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCFactorSetMatSolverType*

  *Source code at petsc4py/PETSc/PC.pyx:1271*

- **setFailedReason(reason)**

  Set the reason the *PC* terminated.

  Logically collective.

  - **Parameters**

    **reason** (*FailedReason \| str*) -- the reason the *PC* terminated

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSetFailedReason*

  *Source code at petsc4py/PETSc/PC.pyx:502*

- **setFieldSplitFields(bsize, \*fields)**

  Sets the elements for the field split.

  Collective.

  - **Parameters**

    - •

      **bsize** (*int*) -- The block size

    - •

      **fields** (*Tuple\[str, Sequence\[int\]\]*) -- A sequence of tuples containing the split name and a sequence of integers that define the elements in the split.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCFieldSplitSetBlockSize*, *PCFieldSplitSetFields*

  *Source code at petsc4py/PETSc/PC.pyx:1495*

- **setFieldSplitIS(\*fields)**

  Set the elements for the field split by *IS*.

  Logically collective.

  Solve options for this split will be available under the prefix **-fieldsplit\_SPLITNAME\_\***.

  - **Parameters**

    **fields** (*Tuple\[str, IS\]*) -- A sequence of tuples containing the split name and the *IS* that defines the elements in the split.

  - **Return type**

    *None*

  **SEE ALSO:**

  *Working with PETSc options*, *PCFieldSplitSetIS*

  *Source code at petsc4py/PETSc/PC.pyx:1469*

- **setFieldSplitSchurFactType(ctype)**

  Set the type of approximate block factorization.

  Collective.

  - **Parameters**

    **ctype** (*FieldSplitSchurFactType*) -- The type indicating which blocks to retain.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCFieldSplitSetSchurFactType*

  *Source code at petsc4py/PETSc/PC.pyx:1581*

- **setFieldSplitSchurPreType(ptype, pre=None)**

  Set from what operator the *PC* is constructed.

  Collective.

  - **Parameters**

    - •

      **ptype** (*FieldSplitSchurPreType*) -- The type of matrix to use for preconditioning the Schur complement.

    - •

      **pre** (*Mat \| None*) -- The optional matrix to use for preconditioning.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCFieldSplitSetSchurPre*

  *Source code at petsc4py/PETSc/PC.pyx:1599*

- **setFieldSplitType(ctype)**

  Set the type of composition of a field split preconditioner.

  Collective.

  - **Parameters**

    **ctype** (*CompositeType*) -- The type of composition.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCFieldSplitSetType*

  *Source code at petsc4py/PETSc/PC.pyx:1451*

- **setFromOptions()**

  Set various *PC* parameters from user options.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *PCSetFromOptions*

  *Source code at petsc4py/PETSc/PC.pyx:374*

  - **Return type**

    *None*

- **setGAMGLevels(levels)**

  Set the maximum number of levels.

  Not collective.

  - **Parameters**

    **levels** (*int*) -- The maximum number of levels to use.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCGAMGSetNlevels*

  *Source code at petsc4py/PETSc/PC.pyx:1038*

- **setGAMGSmooths(smooths)**

  Set the number of smoothing steps used on all levels.

  Logically collective.

  - **Parameters**

    **smooths** (*int*) -- The maximum number of smooths.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCGAMGSetNSmooths*

  *Source code at petsc4py/PETSc/PC.pyx:1056*

- **setGAMGType(gamgtype)**

  Set the type of algorithm.

  Collective.

  - **Parameters**

    **gamgtype** (*GAMGType \| str*) -- The type of *GAMG*

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCGAMGSetType*

  *Source code at petsc4py/PETSc/PC.pyx:1019*

- **setGASMOverlap(overlap)**

  Set the overlap between a pair of subdomains.

  Logically collective.

  - **Parameters**

    **overlap** (*int*) -- The amount of overlap between subdomains.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCGASMSetOverlap*

  *Source code at petsc4py/PETSc/PC.pyx:999*

- **setGASMType(gasmtype)**

  Set the type of restriction and interpolation.

  Logically collective.

  - **Parameters**

    **gasmtype** (*GASMType*) -- The type of *GASM*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCGASMSetType*

  *Source code at petsc4py/PETSc/PC.pyx:981*

- **setHPDDMAuxiliaryMat(uis, uaux)**

  Set the auxiliary matrix used by the preconditioner.

  Logically collective.

  - **Parameters**

    - •

      **uis** (*IS*) -- The *IS* of the local auxiliary matrix

    - •

      **uaux** (*Mat*) -- The auxiliary sequential matrix

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHPDDMSetAuxiliaryMat*

  *Source code at petsc4py/PETSc/PC.pyx:2476*

- **setHPDDMCoarseCorrectionType(correction\_type)**

  Set the coarse correction type.

  Collective.

  - **Parameters**

    **correction\_type** (*HPDDMCoarseCorrectionType*) -- The type of coarse correction to apply.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHPDDMSetCoarseCorrectionType*

  *Source code at petsc4py/PETSc/PC.pyx:2544*

- **setHPDDMDeflationMat(uis, U)**

  Set the deflation space used to assemble a coarse operator.

  Logically collective.

  - **Parameters**

    - •

      **uis** (*IS*) -- The *IS* of the local deflation matrix.

    - •

      **U** (*Mat*) -- The deflation sequential matrix of type *Mat.Type.DENSE*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHPDDMSetDeflationMat*

  *Source code at petsc4py/PETSc/PC.pyx:2590*

- **setHPDDMHasNeumannMat(has)**

  Set to indicate that the *Mat* passed to the *PC* is the local Neumann matrix.

  Logically collective.

  - **Parameters**

    **has** (*bool*) -- Enable to indicate the matrix is the local Neumann matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHPDDMHasNeumannMat*

  *Source code at petsc4py/PETSc/PC.pyx:2526*

- **setHPDDMRHSMat(B)**

  Set the right-hand side matrix of the preconditioner.

  Logically collective.

  - **Parameters**

    **B** (*Mat*) -- The right-hand side sequential matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHPDDMSetRHSMat*

  *Source code at petsc4py/PETSc/PC.pyx:2495*

- **setHYPREAMSSetInteriorNodes(interior)**

  Set the list of interior nodes to a zero conductivity region.

  Collective.

  - **Parameters**

    **interior** (*Vec*) -- A vector where a value of 1.0 indicates an interior node.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHYPREAMSSetInteriorNodes*

  *Source code at petsc4py/PETSc/PC.pyx:1252*

- **setHYPREDiscreteCurl(mat)**

  Set the discrete curl matrix.

  Collective.

  - **Parameters**

    **mat** (*Mat*) -- The discrete curl.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHYPRESetDiscreteCurl*

  *Source code at petsc4py/PETSc/PC.pyx:1110*

- **setHYPREDiscreteGradient(mat)**

  Set the discrete gradient matrix.

  Collective.

  - **Parameters**

    **mat** (*Mat*) -- The discrete gradient.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHYPRESetDiscreteGradient*

  *Source code at petsc4py/PETSc/PC.pyx:1127*

- **setHYPRESetAlphaPoissonMatrix(mat)**

  Set the vector Poisson matrix.

  Collective.

  - **Parameters**

    **mat** (*Mat*) -- The vector Poisson matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHYPRESetAlphaPoissonMatrix*

  *Source code at petsc4py/PETSc/PC.pyx:1144*

- **setHYPRESetBetaPoissonMatrix(mat=None)**

  Set the Posson matrix.

  Collective.

  - **Parameters**

    **mat** (*Mat \| None*) -- The Poisson matrix or *None* to turn off.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHYPRESetBetaPoissonMatrix*

  *Source code at petsc4py/PETSc/PC.pyx:1161*

- **setHYPRESetEdgeConstantVectors(ozz, zoz, zzo=None)**

  Set the representation of the constant vector fields in the edge element basis.

  Collective.

  - **Parameters**

    - •

      **ozz** (*Vec*) -- A vector representing **\[1, 0, 0\]** or **\[1, 0\]** in 2D.

    - •

      **zoz** (*Vec*) -- A vector representing **\[0, 1, 0\]** or **\[0, 1\]** in 2D.

    - •

      **zzo** (*Vec \| None*) -- A vector representing **\[0, 0, 1\]** or *None* in 2D.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHYPRESetEdgeConstantVectors*

  *Source code at petsc4py/PETSc/PC.pyx:1228*

- **setHYPRESetInterpolations(dim, RT\_Pi\_Full=None, RT\_Pi=None, ND\_Pi\_Full=None, ND\_Pi=None)**

  Set the interpolation matrices.

  Collective.

  - **Parameters**

    - •

      **dim** (*int*) -- The dimension of the problem.

    - •

      **RT\_Pi\_Full** (*Mat \| None*) -- The Raviart-Thomas interpolation matrix or *None* to omit.

    - •

      **RT\_Pi** -- The xyz components of the Raviart-Thomas interpolation matrix, or *None* to omit.

    - •

      **ND\_Pi\_Full** (*Mat \| None*) -- The Nedelec interpolation matrix or *None* to omit.

    - •

      **ND\_Pi** -- The xyz components of the Nedelec interpolation matrix, or *None* to omit.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHYPRESetInterpolations*

  *Source code at petsc4py/PETSc/PC.pyx:1180*

- **setHYPREType(hypretype)**

  Set the *Type.HYPRE* type.

  Collective.

  - **Parameters**

    **hypretype** (*str*) -- The name of the type, one of **"euclid"**, **"pilut"**, **"parasails"**, **"boomeramg"**, **"ams"**, **"ads"**

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCHYPRESetType*

  *Source code at petsc4py/PETSc/PC.pyx:1090*

- **setMGCycleType(cycle\_type)**

  Set the type of cycles.

  Logically collective.

  - **Parameters**

    **cycle\_type** (*MGCycleType*) -- The type of multigrid cycles to use.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setMGCycleTypeOnLevel*, *PCMGSetCycleType*

  *Source code at petsc4py/PETSc/PC.pyx:1963*

- **setMGCycleTypeOnLevel(level, cycle\_type)**

  Set the type of cycle on the given level.

  Logically collective.

  - **Parameters**

    - •

      **level** (*int*) -- The level on which to set the cycle type.

    - •

      **cycle\_type** (*MGCycleType*) -- The type of multigrid cycles to use.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setMGCycleType*, *PCMGSetCycleTypeOnLevel*

  *Source code at petsc4py/PETSc/PC.pyx:1981*

- **setMGInterpolation(level, mat)**

  Set the interpolation operator for the given level.

  Logically collective.

  - **Parameters**

    - •

      **level** -- The level where interpolation is defined from **level-1** to **level**.

    - •

      **mat** (*Mat*) -- The interpolation operator

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCMGSetInterpolation*

  *Source code at petsc4py/PETSc/PC.pyx:1777*

- **setMGLevels(levels)**

  Set the number of *MG* levels.

  Logically collective.

  - **Parameters**

    **levels** (*int*) -- The number of levels

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCMGSetLevels*

  *Source code at petsc4py/PETSc/PC.pyx:1744*

- **setMGR(level, r)**

  Set the vector where the residual is stored.

  Logically collective.

  If not provided, one will be set internally. Will be cleaned up in *destroy*.

  - **Parameters**

    - •

      **level** (*int*) -- The level on which to set the residual.

    - •

      **r** (*Vec*) -- The vector where the residual is stored.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCMGSetR*

  *Source code at petsc4py/PETSc/PC.pyx:2048*

- **setMGRScale(level, rscale)**

  Set the pointwise scaling for the restriction operator on the given level.

  Logically collective.

  - **Parameters**

    - •

      **level** (*int*) -- The level where restriction is defined from **level** to **level-1**.

    - •

      **rscale** (*Vec*) -- The scaling vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCMGSetRScale*

  *Source code at petsc4py/PETSc/PC.pyx:1859*

- **setMGRestriction(level, mat)**

  Set the restriction operator for the given level.

  Logically collective.

  - **Parameters**

    - •

      **level** (*int*) -- The level where restriction is defined from **level** to **level-1**.

    - •

      **mat** (*Mat*) -- The restriction operator

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCMGSetRestriction*

  *Source code at petsc4py/PETSc/PC.pyx:1818*

- **setMGRhs(level, rhs)**

  Set the vector where the right-hand side is stored.

  Logically collective.

  If not provided, one will be set internally. Will be cleaned up in *destroy*.

  - **Parameters**

    - •

      **level** (*int*) -- The level on which to set the right-hand side.

    - •

      **rhs** (*Vec*) -- The vector where the right-hand side is stored.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCMGSetRhs*

  *Source code at petsc4py/PETSc/PC.pyx:2002*

- **setMGType(mgtype)**

  Set the form of multigrid.

  Logically collective.

  **SEE ALSO:**

  *PCMGSetType*

  *Source code at petsc4py/PETSc/PC.pyx:1717*

  - **Parameters**

    **mgtype** (*MGType*)

  - **Return type**

    *None*

- **setMGX(level, x)**

  Set the vector where the solution is stored.

  Logically collective.

  If not provided, one will be set internally. Will be cleaned up in *destroy*.

  - **Parameters**

    - •

      **level** (*int*) -- The level on which to set the solution.

    - •

      **x** (*Vec*) -- The vector where the solution is stored.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCMGSetX*

  *Source code at petsc4py/PETSc/PC.pyx:2025*

- **setOperators(A=None, P=None)**

  Set the matrices associated with the linear system.

  Logically collective.

  Passing *None* for **A** or **P** removes the matrix that is currently used. PETSc does not reset the matrix entries of either **A** or **P** to zero after a linear solve; the user is completely responsible for matrix assembly. See *Mat.zeroEntries* to zero all elements of a matrix.

  - **Parameters**

    - •

      **A** (*Mat \| None*) -- the matrix which defines the linear system

    - •

      **P** (*Mat \| None*) -- the matrix to be used in constructing the preconditioner, usually the same as **A**

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSetOperators*

  *Source code at petsc4py/PETSc/PC.pyx:386*

- **setOptionsPrefix(prefix)**

  Set the prefix used for all the *PC* options.

  Logically collective.

  - **Parameters**

    **prefix** (*str \| None*) -- The prefix to prepend to all option names.

  - **Return type**

    *None*

  **SEE ALSO:**

  *Working with PETSc options*, *PCSetOptionsPrefix*

  *Source code at petsc4py/PETSc/PC.pyx:322*

- **setPatchCellNumbering(sec)**

  Set the cell numbering.

  *Source code at petsc4py/PETSc/PC.pyx:2383*

  - **Parameters**

    **sec** (*Section*)

  - **Return type**

    *None*

- **setPatchComputeFunction(function, args=None, kargs=None)**

  Set compute operator callbacks.

  *Source code at petsc4py/PETSc/PC.pyx:2444*

  - **Return type**

    *None*

- **setPatchComputeFunctionInteriorFacets(function, args=None, kargs=None)**

  Set compute operator callbacks.

  *Source code at petsc4py/PETSc/PC.pyx:2452*

  - **Return type**

    *None*

- **setPatchComputeOperator(operator, args=None, kargs=None)**

  Set compute operator callbacks.

  *Source code at petsc4py/PETSc/PC.pyx:2428*

  - **Return type**

    *None*

- **setPatchComputeOperatorInteriorFacets(operator, args=None, kargs=None)**

  Set compute operator callbacks.

  *Source code at petsc4py/PETSc/PC.pyx:2436*

  - **Return type**

    *None*

- **setPatchConstructType(typ, operator=None, args=None, kargs=None)**

  Set compute operator callbacks.

  *Source code at petsc4py/PETSc/PC.pyx:2460*

  - **Return type**

    *None*

- **setPatchDiscretisationInfo(dms, bs, cellNodeMaps, subspaceOffsets, ghostBcNodes, globalBcNodes)**

  Set discretisation info.

  *Source code at petsc4py/PETSc/PC.pyx:2387*

  - **Return type**

    *None*

- **setPythonContext(context)**

  Set the instance of the class implementing the required Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python preconditioner type*, *getPythonContext*

  *Source code at petsc4py/PETSc/PC.pyx:767*

  - **Parameters**

    **context** (*Any*)

  - **Return type**

    *None*

- **setPythonType(py\_type)**

  Set the fully qualified Python name of the class to be used.

  Collective.

  **SEE ALSO:**

  *PETSc Python preconditioner type*, *setPythonContext*, *getPythonType*, *PCPythonSetType*

  *Source code at petsc4py/PETSc/PC.pyx:794*

  - **Parameters**

    **py\_type** (*str*)

  - **Return type**

    *None*

- **setReusePreconditioner(flag)**

  Set to indicate the preconditioner is to be reused.

  Logically collective.

  Normally if the **A** matrix inside a *PC* changes, the *PC* automatically updates itself using information from the changed matrix. Enable this option prevents this.

  - **Parameters**

    **flag** (*bool*) -- Set to *True* to use the reuse the current preconditioner and *False* to recompute on changes to the matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setOperators*, *PCSetReusePreconditioner*

  *Source code at petsc4py/PETSc/PC.pyx:477*

- **setSPAIBlockSize(n)**

  Set the block size of the preconditioner.

  Logically collective.

  - **Parameters**

    **n** (*int*) -- The block size, defaults to **1**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSPAISetBlockSize*

  *Source code at petsc4py/PETSc/PC.pyx:2684*

- **setSPAICacheSize(size)**

  Set the cache size.

  Logically collective.

  - **Parameters**

    **size** (*int*) -- The size of the cache, defaults to **5**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSPAISetCacheSize*

  *Source code at petsc4py/PETSc/PC.pyx:2702*

- **setSPAIEpsilon(val)**

  Set the tolerance for the preconditioner.

  Logically collective.

  - **Parameters**

    **val** (*float*) -- The tolerance, defaults to **0.4**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSPAISetEpsilon*

  *Source code at petsc4py/PETSc/PC.pyx:2611*

- **setSPAIMax(maxval)**

  Set the size of working buffers in the preconditioner.

  Logically collective.

  - **Parameters**

    **maxval** (*int*) -- Number of entries in the work arrays to be allocated, defaults to **5000**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSPAISetMax*

  *Source code at petsc4py/PETSc/PC.pyx:2647*

- **setSPAIMaxNew(maxval)**

  Set the maximum number of new non-zero candidates per step.

  Logically collective.

  - **Parameters**

    **maxval** (*int*) -- Number of entries allowed, defaults to **5**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSPAISetMaxNew*

  *Source code at petsc4py/PETSc/PC.pyx:2666*

- **setSPAINBSteps(nbsteps)**

  Set the maximum number of improvement steps per row.

  Logically collective.

  - **Parameters**

    **nbsteps** (*int*) -- The number of steps, defaults to **5**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSPAISetNBSteps*

  *Source code at petsc4py/PETSc/PC.pyx:2629*

- **setSPAISp(sym)**

  Set to specify a symmetric sparsity pattern.

  Logically collective.

  - **Parameters**

    **sym** (*int*) -- Enable to indicate the matrix is symmetric.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSPAISetSp*

  *Source code at petsc4py/PETSc/PC.pyx:2738*

- **setSPAIVerbose(level)**

  Set the verbosity level.

  Logically collective.

  - **Parameters**

    **level** (*int*) -- The level of verbosity, defaults to **1**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCSPAISetVerbose*

  *Source code at petsc4py/PETSc/PC.pyx:2720*

- **setType(pc\_type)**

  Set the preconditioner type.

  Collective.

  - **Parameters**

    **pc\_type** (*Type \| str*) -- The preconditioner type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *Working with PETSc options*, *getType*, *TSSetType*

  *Source code at petsc4py/PETSc/PC.pyx:289*

- **setUp()**

  Set up the internal data structures for the *PC*.

  Collective.

  **SEE ALSO:**

  *PCSetUp*

  *Source code at petsc4py/PETSc/PC.pyx:541*

  - **Return type**

    *None*

- **setUpOnBlocks()**

  Set up the *PC* for each block.

  Collective.

  For nested preconditioners such as *BJACOBI*, *setUp* is not called on each sub-*KSP* when *setUp* is called on the outer *PC*. This routine ensures it is called.

  **SEE ALSO:**

  *setUp*, *PCSetUpOnBlocks*

  *Source code at petsc4py/PETSc/PC.pyx:565*

  - **Return type**

    *None*

- **setUseAmat(flag)**

  Set to indicate to apply *PC* to **A** and not **P**.

  Logically collective.

  Sets a flag to indicate that when the preconditioner needs to apply (part of) the operator during the preconditioning process, it applies to **A** provided to *TS.setRHSJacobian*, *TS.setIJacobian*, *SNES.setJacobian*, *KSP.setOperators* or *PC.setOperators* not the **P**.

  - **Parameters**

    **flag** (*bool*) -- Set True to use **A** and False to use **P**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setOperators*, *PCSetUseAmat*

  *Source code at petsc4py/PETSc/PC.pyx:432*

- **view(viewer=None)**

  View the *PC* object.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- The visualization context.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PCView*

  *Source code at petsc4py/PETSc/PC.pyx:231*

### petsc4py.PETSc.Partitioner

- **class petsc4py.PETSc.Partitioner**

  Bases: *Object*

  A graph partitioner.

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The partitioner types. |

### petsc4py.PETSc.Partitioner.Type

- **class petsc4py.PETSc.Partitioner.Type**

  Bases: *object*

  The partitioner types.

  Attributes Summary

  | | |
  | --- | --- |
  | *CHACO* | Object **CHACO** of type *str* |
  | *GATHER* | Object **GATHER** of type *str* |
  | *MATPARTITIONING* | Object **MATPARTITIONING** of type *str* |
  | *PARMETIS* | Object **PARMETIS** of type *str* |
  | *PTSCOTCH* | Object **PTSCOTCH** of type *str* |
  | *SHELL* | Object **SHELL** of type *str* |
  | *SIMPLE* | Object **SIMPLE** of type *str* |

  Attributes Documentation

  - **CHACO: *str* = CHACO**

    Object **CHACO** of type *str*

  - **GATHER: *str* = GATHER**

    Object **GATHER** of type *str*

  - **MATPARTITIONING: *str* = MATPARTITIONING**

    Object **MATPARTITIONING** of type *str*

  - **PARMETIS: *str* = PARMETIS**

    Object **PARMETIS** of type *str*

  - **PTSCOTCH: *str* = PTSCOTCH**

    Object **PTSCOTCH** of type *str*

  - **SHELL: *str* = SHELL**

    Object **SHELL** of type *str*

  - **SIMPLE: *str* = SIMPLE**

    Object **SIMPLE** of type *str*

Methods Summary

| | |
| --- | --- |
| *create*(\[comm\]) | Create an empty partitioner object. |
| *destroy*() | Destroy the partitioner object. |
| *getType*() | Return the partitioner type. |
| *reset*() | Reset data structures of the partitioner. |
| *setFromOptions*() | Set parameters in the partitioner from the options database. |
| *setShellPartition*(numProcs\[, sizes, points\]) | Set a custom partition for a mesh. |
| *setType*(part\_type) | Build a particular type of the partitioner. |
| *setUp*() | Construct data structures for the partitioner. |
| *view*(\[viewer\]) | View the partitioner. |

Methods Documentation

- **create(comm=None)**

  Create an empty partitioner object.

  Collective.

  The type can be set with *setType*.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *setType*, *PetscPartitionerCreate*

  *Source code at petsc4py/PETSc/Partitioner.pyx:57*

- **destroy()**

  Destroy the partitioner object.

  Collective.

  **SEE ALSO:**

  *PetscPartitionerDestroy*

  *Source code at petsc4py/PETSc/Partitioner.pyx:44*

  - **Return type**

    *Self*

- **getType()**

  Return the partitioner type.

  Not collective.

  **SEE ALSO:**

  *setType*, *PetscPartitionerGetType*

  *Source code at petsc4py/PETSc/Partitioner.pyx:99*

  - **Return type**

    *Type*

- **reset()**

  Reset data structures of the partitioner.

  Collective.

  **SEE ALSO:**

  *PetscPartitionerReset*

  *Source code at petsc4py/PETSc/Partitioner.pyx:137*

  - **Return type**

    *None*

- **setFromOptions()**

  Set parameters in the partitioner from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *PetscPartitionerSetFromOptions*

  *Source code at petsc4py/PETSc/Partitioner.pyx:113*

  - **Return type**

    *None*

- **setShellPartition(numProcs, sizes=None, points=None)**

  Set a custom partition for a mesh.

  Collective.

  - **Parameters**

    - •

      **sizes** (*Sequence\[int\] \| None*) -- The number of points in each partition.

    - •

      **points** (*Sequence\[int\] \| None*) -- A permutation of the points that groups those assigned to each partition in order (i.e., partition 0 first, partition 1 next, etc.).

    - •

      **numProcs** (*int*)

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscPartitionerShellSetPartition*

  *Source code at petsc4py/PETSc/Partitioner.pyx:149*

- **setType(part\_type)**

  Build a particular type of the partitioner.

  Collective.

  - **Parameters**

    **part\_type** (*Type \| str*) -- The kind of partitioner.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getType*, *PetscPartitionerSetType*

  *Source code at petsc4py/PETSc/Partitioner.pyx:80*

- **setUp()**

  Construct data structures for the partitioner.

  Collective.

  **SEE ALSO:**

  *PetscPartitionerSetUp*

  *Source code at petsc4py/PETSc/Partitioner.pyx:125*

  - **Return type**

    *None*

- **view(viewer=None)**

  View the partitioner.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* to display the graph.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscPartitionerView*

  *Source code at petsc4py/PETSc/Partitioner.pyx:25*

### petsc4py.PETSc.Quad

- **class petsc4py.PETSc.Quad**

  Bases: *Object*

  Quadrature rule for integration.

  Methods Summary

  | | |
  | --- | --- |
  | *create*(\[comm\]) | Create a *Quad* object. |
  | *destroy*() | Destroy the *Quad* object. |
  | *duplicate*() | Create a deep copy of the *Quad* object. |
  | *getData*() | Return the data defining the *Quad*. |
  | *getNumComponents*() | Return the number of components for functions to be integrated. |
  | *getOrder*() | Return the order of the method in the *Quad*. |
  | *setNumComponents*(nc) | Return the number of components for functions to be integrated. |
  | *setOrder*(order) | Set the order of the method in the *Quad*. |
  | *view*(\[viewer\]) | View a *Quad* object. |

  Methods Documentation

  - **create(comm=None)**

    Create a *Quad* object.

    Collective.

    - **Parameters**

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *PetscQuadratureCreate*

    *Source code at petsc4py/PETSc/DT.pyx:28*

  - **destroy()**

    Destroy the *Quad* object.

    Collective.

    **SEE ALSO:**

    *PetscQuadratureDestroy*

    *Source code at petsc4py/PETSc/DT.pyx:63*

    - **Return type**

      *Self*

  - **duplicate()**

    Create a deep copy of the *Quad* object.

    Collective.

    **SEE ALSO:**

    *PetscQuadratureDuplicate*

    *Source code at petsc4py/PETSc/DT.pyx:49*

    - **Return type**

      *Quad*

  - **getData()**

    Return the data defining the *Quad*.

    Not collective.

    - **Returns**

      - •

        **points** (*ArrayReal*) -- The coordinates of the quadrature points.

      - •

        **weights** (*ArrayReal*) -- The quadrature weights.

    - **Return type**

      *tuple*(*ArrayReal*, *ArrayReal*)

    **SEE ALSO:**

    *PetscQuadratureGetData*

    *Source code at petsc4py/PETSc/DT.pyx:76*

  - **getNumComponents()**

    Return the number of components for functions to be integrated.

    Not collective.

    **SEE ALSO:**

    *setNumComponents*, *PetscQuadratureGetNumComponents*

    *Source code at petsc4py/PETSc/DT.pyx:104*

    - **Return type**

      *int*

  - **getOrder()**

    Return the order of the method in the *Quad*.

    Not collective.

    **SEE ALSO:**

    *setOrder*, *PetscQuadratureGetOrder*

    *Source code at petsc4py/PETSc/DT.pyx:136*

    - **Return type**

      *int*

  - **setNumComponents(nc)**

    Return the number of components for functions to be integrated.

    Not collective.

    - **Parameters**

      **nc** (*int*) -- The number of components.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getNumComponents*, *PetscQuadratureSetNumComponents*

    *Source code at petsc4py/PETSc/DT.pyx:118*

  - **setOrder(order)**

    Set the order of the method in the *Quad*.

    Not collective.

    - **Parameters**

      **order** (*int*) -- The order of the quadrature, i.e. the highest degree polynomial that is exactly integrated.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getOrder*, *PetscQuadratureSetOrder*

    *Source code at petsc4py/PETSc/DT.pyx:150*

  - **view(viewer=None)**

    View a *Quad* object.

    Collective.

    - **Parameters**

      **viewer** (*Viewer \| None*) -- A *Viewer* to display the graph.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscQuadratureView*

    *Source code at petsc4py/PETSc/DT.pyx:9*

### petsc4py.PETSc.Random

- **class petsc4py.PETSc.Random**

  Bases: *Object*

  The random number generator object.

  **SEE ALSO:**

  *PetscRandom*

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The random number generator type. |

### petsc4py.PETSc.Random.Type

- **class petsc4py.PETSc.Random.Type**

  Bases: *object*

  The random number generator type.

  Attributes Summary

  | | |
  | --- | --- |
  | *RAND* | Object **RAND** of type *str* |
  | *RAND48* | Object **RAND48** of type *str* |
  | *RANDER48* | Object **RANDER48** of type *str* |
  | *RANDOM123* | Object **RANDOM123** of type *str* |
  | *SPRNG* | Object **SPRNG** of type *str* |

  Attributes Documentation

  - **RAND: *str* = RAND**

    Object **RAND** of type *str*

  - **RAND48: *str* = RAND48**

    Object **RAND48** of type *str*

  - **RANDER48: *str* = RANDER48**

    Object **RANDER48** of type *str*

  - **RANDOM123: *str* = RANDOM123**

    Object **RANDOM123** of type *str*

  - **SPRNG: *str* = SPRNG**

    Object **SPRNG** of type *str*

Methods Summary

| | |
| --- | --- |
| *create*(\[comm\]) | Create a random number generator object. |
| *destroy*() | Destroy the random number generator object. |
| *getInterval*() | Return the interval containing the random numbers generated. |
| *getSeed*() | Return the random number generator seed. |
| *getType*() | Return the type of the random number generator object. |
| *getValue*() | Generate a scalar random number. |
| *getValueReal*() | Generate a real random number. |
| *setFromOptions*() | Configure the random number generator from the options database. |
| *setInterval*(interval) | Set the interval of the random number generator. |
| *setSeed*(\[seed\]) | Set the seed of random number generator. |
| *setType*(rnd\_type) | Set the type of the random number generator object. |
| *view*(\[viewer\]) | View a random number generator object. |

Attributes Summary

| | |
| --- | --- |
| *interval* | The interval of the generated random numbers. |
| *seed* | The seed of the random number generator. |

Methods Documentation

- **create(comm=None)**

  Create a random number generator object.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *Sys.getDefaultComm*, *PetscRandomCreate*

  *Source code at petsc4py/PETSc/Random.pyx:74*

- **destroy()**

  Destroy the random number generator object.

  Collective.

  **SEE ALSO:**

  *PetscRandomDestroy*

  *Source code at petsc4py/PETSc/Random.pyx:61*

  - **Return type**

    *Self*

- **getInterval()**

  Return the interval containing the random numbers generated.

  Not collective.

  **SEE ALSO:**

  *setInterval*, *PetscRandomGetInterval*

  *Source code at petsc4py/PETSc/Random.pyx:199*

  - **Return type**

    *tuple*\[*Scalar*, *Scalar*\]

- **getSeed()**

  Return the random number generator seed.

  Not collective.

  **SEE ALSO:**

  *setSeed*, *PetscRandomGetSeed*

  *Source code at petsc4py/PETSc/Random.pyx:166*

  - **Return type**

    *int*

- **getType()**

  Return the type of the random number generator object.

  Not collective.

  **SEE ALSO:**

  *setType*, *PetscRandomGetType*

  *Source code at petsc4py/PETSc/Random.pyx:112*

  - **Return type**

    *str*

- **getValue()**

  Generate a scalar random number.

  Not collective.

  **SEE ALSO:**

  *PetscRandomGetValue*

  *Source code at petsc4py/PETSc/Random.pyx:138*

  - **Return type**

    *Scalar*

- **getValueReal()**

  Generate a real random number.

  Not collective.

  **SEE ALSO:**

  *PetscRandomGetValueReal*

  *Source code at petsc4py/PETSc/Random.pyx:152*

  - **Return type**

    *float*

- **setFromOptions()**

  Configure the random number generator from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *PetscRandomSetFromOptions*

  *Source code at petsc4py/PETSc/Random.pyx:126*

  - **Return type**

    *None*

- **setInterval(interval)**

  Set the interval of the random number generator.

  Not collective.

  **SEE ALSO:**

  *getInterval*, *PetscRandomSetInterval*

  *Source code at petsc4py/PETSc/Random.pyx:214*

  - **Parameters**

    **interval** (*tuple\[Scalar, Scalar\]*)

  - **Return type**

    *None*

- **setSeed(seed=None)**

  Set the seed of random number generator.

  Not collective.

  - **Parameters**

    **seed** (*int \| None*) -- The value for the seed. If *None*, it only seeds the generator.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getSeed*, *PetscRandomSetSeed*, *PetscRandomSeed*

  *Source code at petsc4py/PETSc/Random.pyx:180*

- **setType(rnd\_type)**

  Set the type of the random number generator object.

  Collective.

  - **Parameters**

    **rnd\_type** (*Type \| str*) -- The type of the generator.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getType*, *PetscRandomSetType*

  *Source code at petsc4py/PETSc/Random.pyx:93*

- **view(viewer=None)**

  View a random number generator object.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscRandomView*

  *Source code at petsc4py/PETSc/Random.pyx:41*

Attributes Documentation

- **interval**

  The interval of the generated random numbers.

  *Source code at petsc4py/PETSc/Random.pyx:241*

- **seed**

  The seed of the random number generator.

  *Source code at petsc4py/PETSc/Random.pyx:233*

### petsc4py.PETSc.SF

- **class petsc4py.PETSc.SF**

  Bases: *Object*

  Star Forest object for communication.

  SF is used for setting up and managing the communication of certain entries of arrays and *Vec* between MPI processes.

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The star forest types. |

### petsc4py.PETSc.SF.Type

- **class petsc4py.PETSc.SF.Type**

  Bases: *object*

  The star forest types.

  Attributes Summary

  | | |
  | --- | --- |
  | *ALLGATHER* | Object **ALLGATHER** of type *str* |
  | *ALLGATHERV* | Object **ALLGATHERV** of type *str* |
  | *ALLTOALL* | Object **ALLTOALL** of type *str* |
  | *BASIC* | Object **BASIC** of type *str* |
  | *GATHER* | Object **GATHER** of type *str* |
  | *GATHERV* | Object **GATHERV** of type *str* |
  | *NEIGHBOR* | Object **NEIGHBOR** of type *str* |
  | *WINDOW* | Object **WINDOW** of type *str* |

  Attributes Documentation

  - **ALLGATHER: *str* = ALLGATHER**

    Object **ALLGATHER** of type *str*

  - **ALLGATHERV: *str* = ALLGATHERV**

    Object **ALLGATHERV** of type *str*

  - **ALLTOALL: *str* = ALLTOALL**

    Object **ALLTOALL** of type *str*

  - **BASIC: *str* = BASIC**

    Object **BASIC** of type *str*

  - **GATHER: *str* = GATHER**

    Object **GATHER** of type *str*

  - **GATHERV: *str* = GATHERV**

    Object **GATHERV** of type *str*

  - **NEIGHBOR: *str* = NEIGHBOR**

    Object **NEIGHBOR** of type *str*

  - **WINDOW: *str* = WINDOW**

    Object **WINDOW** of type *str*

Methods Summary

| | |
| --- | --- |
| *bcastBegin*(unit, rootdata, leafdata, op) | Begin pointwise broadcast. |
| *bcastEnd*(unit, rootdata, leafdata, op) | End a broadcast & reduce operation started with *bcastBegin*. |
| *compose*(sf) | Compose a new *SF*. |
| *computeDegree*() | Compute and return the degree of each root vertex. |
| *create*(\[comm\]) | Create a star forest communication context. |
| *createEmbeddedLeafSF*(selected) | Remove edges from all but the selected leaves. |
| *createEmbeddedRootSF*(selected) | Remove edges from all but the selected roots. |
| *createInverse*() | Create the inverse map. |
| *createSectionSF*(rootSection, remoteOffsets, ...) | Create an expanded *SF* of DOFs. |
| *destroy*() | Destroy the star forest. |
| *distributeSection*(rootSection\[, leafSection\]) | Create a new, reorganized *Section*. |
| *fetchAndOpBegin*(unit, rootdata, leafdata, ...) | Begin fetch and update operation. |
| *fetchAndOpEnd*(unit, rootdata, leafdata, ...) | End operation started in a matching call to *fetchAndOpBegin*. |
| *gatherBegin*(unit, leafdata, multirootdata) | Begin pointwise gather of all leaves into multi-roots. |
| *gatherEnd*(unit, leafdata, multirootdata) | End gather operation that was started with *gatherBegin*. |
| *getGraph*() | Return star forest graph. |
| *getMulti*() | Return the inner SF implementing gathers and scatters. |
| *getType*() | Return the type name of the star forest. |
| *reduceBegin*(unit, leafdata, rootdata, op) | Begin reduction of leafdata into rootdata. |
| *reduceEnd*(unit, leafdata, rootdata, op) | End a reduction operation started with *reduceBegin*. |
| *reset*() | Reset a star forest so that different sizes or neighbors can be used. |
| *scatterBegin*(unit, multirootdata, leafdata) | Begin pointwise scatter operation. |
| *scatterEnd*(unit, multirootdata, leafdata) | End scatter operation that was started with *scatterBegin*. |
| *setFromOptions*() | Set options using the options database. |
| *setGraph*(nroots, local, remote) | Set star forest graph. |
| *setRankOrder*(flag) | Sort multi-points for gathers and scatters by rank order. |
| *setType*(sf\_type) | Set the type of the star forest. |
| *setUp*() | Set up communication structures. |
| *view*(\[viewer\]) | View a star forest. |

Methods Documentation

- **bcastBegin(unit, rootdata, leafdata, op)**

  Begin pointwise broadcast.

  Collective.

  Root values are reduced to leaf values. This call has to be concluded with a call to *bcastEnd*.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **rootdata** (*ndarray*) -- Buffer to broadcast.

    - •

      **leafdata** (*ndarray*) -- Buffer to be reduced with values from each leaf's respective root.

    - •

      **op** (*Op*) -- MPI reduction operation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *bcastEnd*, *PetscSFBcastBegin*

  *Source code at petsc4py/PETSc/SF.pyx:434*

- **bcastEnd(unit, rootdata, leafdata, op)**

  End a broadcast & reduce operation started with *bcastBegin*.

  Collective.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **rootdata** (*ndarray*) -- Buffer to broadcast.

    - •

      **leafdata** (*ndarray*) -- Buffer to be reduced with values from each leaf's respective root.

    - •

      **op** (*Op*) -- MPI reduction operation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *bcastBegin*, *PetscSFBcastEnd*

  *Source code at petsc4py/PETSc/SF.pyx:463*

- **compose(sf)**

  Compose a new *SF*.

  Collective.

  Puts the **sf** under this object in a top (roots) down (leaves) view.

  - **Parameters**

    **sf** (*SF*) -- *SF* to put under this object.

  - **Return type**

    *SF*

  **SEE ALSO:**

  *PetscSFCompose*

  *Source code at petsc4py/PETSc/SF.pyx:413*

- **computeDegree()**

  Compute and return the degree of each root vertex.

  Collective.

  **SEE ALSO:**

  *PetscSFComputeDegreeBegin*, *PetscSFComputeDegreeEnd*

  *Source code at petsc4py/PETSc/SF.pyx:279*

  - **Return type**

    *ArrayInt*

- **create(comm=None)**

  Create a star forest communication context.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PetscSFCreate*

  *Source code at petsc4py/PETSc/SF.pyx:63*

- **createEmbeddedLeafSF(selected)**

  Remove edges from all but the selected leaves.

  Collective.

  Does not remap indices.

  - **Parameters**

    **selected** (*Sequence\[int\]*) -- Indices of the selected roots on this process.

  - **Return type**

    *SF*

  **SEE ALSO:**

  *PetscSFCreateEmbeddedLeafSF*

  *Source code at petsc4py/PETSc/SF.pyx:321*

- **createEmbeddedRootSF(selected)**

  Remove edges from all but the selected roots.

  Collective.

  Does not remap indices.

  - **Parameters**

    **selected** (*Sequence\[int\]*) -- Indices of the selected roots on this process.

  - **Return type**

    *SF*

  **SEE ALSO:**

  *PetscSFCreateEmbeddedRootSF*

  *Source code at petsc4py/PETSc/SF.pyx:297*

- **createInverse()**

  Create the inverse map.

  Collective.

  Create the inverse map given a PetscSF in which all vertices have degree 1.

  **SEE ALSO:**

  *PetscSFCreateInverseSF*

  *Source code at petsc4py/PETSc/SF.pyx:262*

  - **Return type**

    *SF*

- **createSectionSF(rootSection, remoteOffsets, leafSection)**

  Create an expanded *SF* of DOFs.

  Collective.

  Assumes the input *SF* relates points.

  - **Parameters**

    - •

      **rootSection** (*Section*) -- Data layout of remote points for outgoing data (this is usually the serial section).

    - •

      **remoteOffsets** (*Sequence\[int\] \| None*) -- Offsets for point data on remote processes (these are offsets from the root section), or *None*.

    - •

      **leafSection** (*Section*) -- Data layout of local points for incoming data (this is the distributed section).

  - **Return type**

    *SF*

  **SEE ALSO:**

  *PetscSFCreateSectionSF*

  *Source code at petsc4py/PETSc/SF.pyx:345*

- **destroy()**

  Destroy the star forest.

  Collective.

  **SEE ALSO:**

  *PetscSFDestroy*

  *Source code at petsc4py/PETSc/SF.pyx:50*

  - **Return type**

    *Self*

- **distributeSection(rootSection, leafSection=None)**

  Create a new, reorganized *Section*.

  Collective.

  Moves from the root to the leaves of the *SF*.

  - **Parameters**

    - •

      **rootSection** (*Section*) -- Section defined on root space.

    - •

      **leafSection** (*Section \| None*) -- Section defined on the leaf space.

  - **Return type**

    *tuple*\[*ArrayInt*, *Section*\]

  **SEE ALSO:**

  *PetscSFDistributeSection*

  *Source code at petsc4py/PETSc/SF.pyx:378*

- **fetchAndOpBegin(unit, rootdata, leafdata, leafupdate, op)**

  Begin fetch and update operation.

  Collective.

  This operation fetches values from root and updates atomically by applying an operation using the leaf value.

  This call has to be completed with *fetchAndOpEnd*.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **rootdata** (*ndarray*) -- Root values to be updated, input state is seen by first process to perform an update.

    - •

      **leafdata** (*ndarray*) -- Leaf values to use in reduction.

    - •

      **leafupdate** (*ndarray*) -- State at each leaf's respective root immediately prior to my atomic update.

    - •

      **op** (*Op*) -- MPI reduction operation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *fetchAndOpEnd*, *PetscSFFetchAndOpBegin*

  *Source code at petsc4py/PETSc/SF.pyx:642*

- **fetchAndOpEnd(unit, rootdata, leafdata, leafupdate, op)**

  End operation started in a matching call to *fetchAndOpBegin*.

  Collective.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **rootdata** (*ndarray*) -- Root values to be updated, input state is seen by first process to perform an update.

    - •

      **leafdata** (*ndarray*) -- Leaf values to use in reduction.

    - •

      **leafupdate** (*ndarray*) -- State at each leaf's respective root immediately prior to my atomic update.

    - •

      **op** (*Op*) -- MPI reduction operation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *fetchAndOpBegin*, *PetscSFFetchAndOpEnd*

  *Source code at petsc4py/PETSc/SF.pyx:678*

- **gatherBegin(unit, leafdata, multirootdata)**

  Begin pointwise gather of all leaves into multi-roots.

  Collective.

  This call has to be completed with *gatherEnd*.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **leafdata** (*ndarray*) -- Leaf data to gather to roots.

    - •

      **multirootdata** (*ndarray*) -- Root buffer to gather into, amount of space per root is equal to its degree.

  - **Return type**

    *None*

  **SEE ALSO:**

  *gatherEnd*, *PetscSFGatherBegin*

  *Source code at petsc4py/PETSc/SF.pyx:592*

- **gatherEnd(unit, leafdata, multirootdata)**

  End gather operation that was started with *gatherBegin*.

  Collective.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **leafdata** (*ndarray*) -- Leaf data to gather to roots.

    - •

      **multirootdata** (*ndarray*) -- Root buffer to gather into, amount of space per root is equal to its degree.

  - **Return type**

    *None*

  **SEE ALSO:**

  *gatherBegin*, *PetscSFGatherEnd*

  *Source code at petsc4py/PETSc/SF.pyx:618*

- **getGraph()**

  Return star forest graph.

  Not collective.

  The number of leaves can be determined from the size of **ilocal**.

  - **Returns**

    - •

      **nroots** (*int*) -- Number of root vertices on the current process (these are possible targets for other process to attach leaves).

    - •

      **ilocal** (*ArrayInt*) -- Locations of leaves in leafdata buffers.

    - •

      **iremote** (*ArrayInt*) -- Remote locations of root vertices for each leaf on the current process.

  - **Return type**

    *tuple*\[*int*, *ArrayInt*, *ArrayInt*\]

  **SEE ALSO:**

  *PetscSFGetGraph*

  *Source code at petsc4py/PETSc/SF.pyx:155*

- **getMulti()**

  Return the inner SF implementing gathers and scatters.

  Collective.

  **SEE ALSO:**

  *PetscSFGetMultiSF*

  *Source code at petsc4py/PETSc/SF.pyx:247*

  - **Return type**

    *SF*

- **getType()**

  Return the type name of the star forest.

  Collective.

  **SEE ALSO:**

  *PetscSFGetType*

  *Source code at petsc4py/PETSc/SF.pyx:103*

  - **Return type**

    *str*

- **reduceBegin(unit, leafdata, rootdata, op)**

  Begin reduction of leafdata into rootdata.

  Collective.

  This call has to be completed with call to *reduceEnd*.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **leafdata** (*ndarray*) -- Values to reduce.

    - •

      **rootdata** (*ndarray*) -- Result of reduction of values from all leaves of each root.

    - •

      **op** (*Op*) -- MPI reduction operation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *reduceEnd*, *PetscSFReduceBegin*

  *Source code at petsc4py/PETSc/SF.pyx:489*

- **reduceEnd(unit, leafdata, rootdata, op)**

  End a reduction operation started with *reduceBegin*.

  Collective.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **leafdata** (*ndarray*) -- Values to reduce.

    - •

      **rootdata** (*ndarray*) -- Result of reduction of values from all leaves of each root.

    - •

      **op** (*Op*) -- MPI reduction operation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *reduceBegin*, *PetscSFReduceEnd*

  *Source code at petsc4py/PETSc/SF.pyx:517*

- **reset()**

  Reset a star forest so that different sizes or neighbors can be used.

  Collective.

  **SEE ALSO:**

  *PetscSFReset*

  *Source code at petsc4py/PETSc/SF.pyx:141*

  - **Return type**

    *None*

- **scatterBegin(unit, multirootdata, leafdata)**

  Begin pointwise scatter operation.

  Collective.

  Operation is from multi-roots to leaves. This call has to be completed with *scatterEnd*.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **multirootdata** (*ndarray*) -- Root buffer to send to each leaf, one unit of data per leaf.

    - •

      **leafdata** (*ndarray*) -- Leaf data to be updated with personal data from each respective root.

  - **Return type**

    *None*

  **SEE ALSO:**

  *scatterEnd*, *PetscSFScatterBegin*

  *Source code at petsc4py/PETSc/SF.pyx:543*

- **scatterEnd(unit, multirootdata, leafdata)**

  End scatter operation that was started with *scatterBegin*.

  Collective.

  - **Parameters**

    - •

      **unit** (*Datatype*) -- MPI datatype.

    - •

      **multirootdata** (*ndarray*) -- Root buffer to send to each leaf, one unit of data per leaf.

    - •

      **leafdata** (*ndarray*) -- Leaf data to be updated with personal data from each respective root.

  - **Return type**

    *None*

  **SEE ALSO:**

  *scatterBegin*, *PetscSFScatterEnd*

  *Source code at petsc4py/PETSc/SF.pyx:569*

- **setFromOptions()**

  Set options using the options database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *PetscSFSetFromOptions*

  *Source code at petsc4py/PETSc/SF.pyx:117*

  - **Return type**

    *None*

- **setGraph(nroots, local, remote)**

  Set star forest graph.

  Collective.

  The number of leaves argument can be determined from the size of **local** and/or **remote**.

  - **Parameters**

    - •

      **nroots** (*int*) -- Number of root vertices on the current process (these are possible targets for other process to attach leaves).

    - •

      **local** (*Sequence\[int\]*) -- Locations of leaves in leafdata buffers, pass *None* for contiguous storage.

    - •

      **remote** (*Sequence\[int\]*) -- Remote locations of root vertices for each leaf on the current process. Should be **2\*nleaves** long as (rank, index) pairs.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscSFSetGraph*

  *Source code at petsc4py/PETSc/SF.pyx:190*

- **setRankOrder(flag)**

  Sort multi-points for gathers and scatters by rank order.

  Logically collective.

  - **Parameters**

    **flag** (*bool*) -- *True* to sort, *False* to skip sorting.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscSFSetRankOrder*

  *Source code at petsc4py/PETSc/SF.pyx:229*

- **setType(sf\_type)**

  Set the type of the star forest.

  Collective.

  - **Parameters**

    **sf\_type** (*Type \| str*) -- The star forest type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscSFSetType*

  *Source code at petsc4py/PETSc/SF.pyx:84*

- **setUp()**

  Set up communication structures.

  Collective.

  **SEE ALSO:**

  *PetscSFSetUp*

  *Source code at petsc4py/PETSc/SF.pyx:129*

  - **Return type**

    *None*

- **view(viewer=None)**

  View a star forest.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* to display the graph.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscSFView*

  *Source code at petsc4py/PETSc/SF.pyx:31*

### petsc4py.PETSc.SNES

- **class petsc4py.PETSc.SNES**

  Bases: *Object*

  Nonlinear equations solver.

  SNES is described in the *PETSc manual*.

  **SEE ALSO:**

  *SNES*

  Enumerations

  | | |
  | --- | --- |
  | *ConvergedReason* | SNES solver termination reason. |
  | *NormSchedule* | SNES norm schedule. |
  | *Type* | SNES solver type. |

### petsc4py.PETSc.SNES.ConvergedReason

- **class petsc4py.PETSc.SNES.ConvergedReason**

  Bases: *object*

  SNES solver termination reason.

  **SEE ALSO:**

  *SNESGetConvergedReason*

  Attributes Summary

  | | |
  | --- | --- |
  | *CONVERGED\_FNORM\_ABS* | Constant **CONVERGED\_FNORM\_ABS** of type *int* |
  | *CONVERGED\_FNORM\_RELATIVE* | Constant **CONVERGED\_FNORM\_RELATIVE** of type *int* |
  | *CONVERGED\_ITERATING* | Constant **CONVERGED\_ITERATING** of type *int* |
  | *CONVERGED\_ITS* | Constant **CONVERGED\_ITS** of type *int* |
  | *CONVERGED\_SNORM\_RELATIVE* | Constant **CONVERGED\_SNORM\_RELATIVE** of type *int* |
  | *DIVERGED\_DTOL* | Constant **DIVERGED\_DTOL** of type *int* |
  | *DIVERGED\_FNORM\_NAN* | Constant **DIVERGED\_FNORM\_NAN** of type *int* |
  | *DIVERGED\_FUNCTION\_COUNT* | Constant **DIVERGED\_FUNCTION\_COUNT** of type *int* |
  | *DIVERGED\_FUNCTION\_DOMAIN* | Constant **DIVERGED\_FUNCTION\_DOMAIN** of type *int* |
  | *DIVERGED\_INNER* | Constant **DIVERGED\_INNER** of type *int* |
  | *DIVERGED\_JACOBIAN\_DOMAIN* | Constant **DIVERGED\_JACOBIAN\_DOMAIN** of type *int* |
  | *DIVERGED\_LINEAR\_SOLVE* | Constant **DIVERGED\_LINEAR\_SOLVE** of type *int* |
  | *DIVERGED\_LINE\_SEARCH* | Constant **DIVERGED\_LINE\_SEARCH** of type *int* |
  | *DIVERGED\_LOCAL\_MIN* | Constant **DIVERGED\_LOCAL\_MIN** of type *int* |
  | *DIVERGED\_MAX\_IT* | Constant **DIVERGED\_MAX\_IT** of type *int* |
  | *DIVERGED\_TR\_DELTA* | Constant **DIVERGED\_TR\_DELTA** of type *int* |
  | *ITERATING* | Constant **ITERATING** of type *int* |

  Attributes Documentation

  - **CONVERGED\_FNORM\_ABS: *int* = CONVERGED\_FNORM\_ABS**

    Constant **CONVERGED\_FNORM\_ABS** of type *int*

  - **CONVERGED\_FNORM\_RELATIVE: *int* = CONVERGED\_FNORM\_RELATIVE**

    Constant **CONVERGED\_FNORM\_RELATIVE** of type *int*

  - **CONVERGED\_ITERATING: *int* = CONVERGED\_ITERATING**

    Constant **CONVERGED\_ITERATING** of type *int*

  - **CONVERGED\_ITS: *int* = CONVERGED\_ITS**

    Constant **CONVERGED\_ITS** of type *int*

  - **CONVERGED\_SNORM\_RELATIVE: *int* = CONVERGED\_SNORM\_RELATIVE**

    Constant **CONVERGED\_SNORM\_RELATIVE** of type *int*

  - **DIVERGED\_DTOL: *int* = DIVERGED\_DTOL**

    Constant **DIVERGED\_DTOL** of type *int*

  - **DIVERGED\_FNORM\_NAN: *int* = DIVERGED\_FNORM\_NAN**

    Constant **DIVERGED\_FNORM\_NAN** of type *int*

  - **DIVERGED\_FUNCTION\_COUNT: *int* = DIVERGED\_FUNCTION\_COUNT**

    Constant **DIVERGED\_FUNCTION\_COUNT** of type *int*

  - **DIVERGED\_FUNCTION\_DOMAIN: *int* = DIVERGED\_FUNCTION\_DOMAIN**

    Constant **DIVERGED\_FUNCTION\_DOMAIN** of type *int*

  - **DIVERGED\_INNER: *int* = DIVERGED\_INNER**

    Constant **DIVERGED\_INNER** of type *int*

  - **DIVERGED\_JACOBIAN\_DOMAIN: *int* = DIVERGED\_JACOBIAN\_DOMAIN**

    Constant **DIVERGED\_JACOBIAN\_DOMAIN** of type *int*

  - **DIVERGED\_LINEAR\_SOLVE: *int* = DIVERGED\_LINEAR\_SOLVE**

    Constant **DIVERGED\_LINEAR\_SOLVE** of type *int*

  - **DIVERGED\_LINE\_SEARCH: *int* = DIVERGED\_LINE\_SEARCH**

    Constant **DIVERGED\_LINE\_SEARCH** of type *int*

  - **DIVERGED\_LOCAL\_MIN: *int* = DIVERGED\_LOCAL\_MIN**

    Constant **DIVERGED\_LOCAL\_MIN** of type *int*

  - **DIVERGED\_MAX\_IT: *int* = DIVERGED\_MAX\_IT**

    Constant **DIVERGED\_MAX\_IT** of type *int*

  - **DIVERGED\_TR\_DELTA: *int* = DIVERGED\_TR\_DELTA**

    Constant **DIVERGED\_TR\_DELTA** of type *int*

  - **ITERATING: *int* = ITERATING**

    Constant **ITERATING** of type *int*

### petsc4py.PETSc.SNES.NormSchedule

- **class petsc4py.PETSc.SNES.NormSchedule**

  Bases: *object*

  SNES norm schedule.

  **SEE ALSO:**

  *SNESNormSchedule*

  Attributes Summary

  | | |
  | --- | --- |
  | *ALWAYS* | Constant **ALWAYS** of type *int* |
  | *DEFAULT* | Constant **DEFAULT** of type *int* |
  | *FINAL\_ONLY* | Constant **FINAL\_ONLY** of type *int* |
  | *INITIAL\_FINAL\_ONLY* | Constant **INITIAL\_FINAL\_ONLY** of type *int* |
  | *INITIAL\_ONLY* | Constant **INITIAL\_ONLY** of type *int* |
  | *NONE* | Constant **NONE** of type *int* |
  | *NORM\_ALWAYS* | Constant **NORM\_ALWAYS** of type *int* |
  | *NORM\_DEFAULT* | Constant **NORM\_DEFAULT** of type *int* |
  | *NORM\_FINAL\_ONLY* | Constant **NORM\_FINAL\_ONLY** of type *int* |
  | *NORM\_INITIAL\_FINAL\_ONLY* | Constant **NORM\_INITIAL\_FINAL\_ONLY** of type *int* |
  | *NORM\_INITIAL\_ONLY* | Constant **NORM\_INITIAL\_ONLY** of type *int* |
  | *NORM\_NONE* | Constant **NORM\_NONE** of type *int* |

  Attributes Documentation

  - **ALWAYS: *int* = ALWAYS**

    Constant **ALWAYS** of type *int*

  - **DEFAULT: *int* = DEFAULT**

    Constant **DEFAULT** of type *int*

  - **FINAL\_ONLY: *int* = FINAL\_ONLY**

    Constant **FINAL\_ONLY** of type *int*

  - **INITIAL\_FINAL\_ONLY: *int* = INITIAL\_FINAL\_ONLY**

    Constant **INITIAL\_FINAL\_ONLY** of type *int*

  - **INITIAL\_ONLY: *int* = INITIAL\_ONLY**

    Constant **INITIAL\_ONLY** of type *int*

  - **NONE: *int* = NONE**

    Constant **NONE** of type *int*

  - **NORM\_ALWAYS: *int* = NORM\_ALWAYS**

    Constant **NORM\_ALWAYS** of type *int*

  - **NORM\_DEFAULT: *int* = NORM\_DEFAULT**

    Constant **NORM\_DEFAULT** of type *int*

  - **NORM\_FINAL\_ONLY: *int* = NORM\_FINAL\_ONLY**

    Constant **NORM\_FINAL\_ONLY** of type *int*

  - **NORM\_INITIAL\_FINAL\_ONLY: *int* = NORM\_INITIAL\_FINAL\_ONLY**

    Constant **NORM\_INITIAL\_FINAL\_ONLY** of type *int*

  - **NORM\_INITIAL\_ONLY: *int* = NORM\_INITIAL\_ONLY**

    Constant **NORM\_INITIAL\_ONLY** of type *int*

  - **NORM\_NONE: *int* = NORM\_NONE**

    Constant **NORM\_NONE** of type *int*

### petsc4py.PETSc.SNES.Type

- **class petsc4py.PETSc.SNES.Type**

  Bases: *object*

  SNES solver type.

  **SEE ALSO:**

  *SNESType*

  Attributes Summary

  | | |
  | --- | --- |
  | *ANDERSON* | Object **ANDERSON** of type *str* |
  | *ASPIN* | Object **ASPIN** of type *str* |
  | *COMPOSITE* | Object **COMPOSITE** of type *str* |
  | *FAS* | Object **FAS** of type *str* |
  | *KSPONLY* | Object **KSPONLY** of type *str* |
  | *KSPTRANSPOSEONLY* | Object **KSPTRANSPOSEONLY** of type *str* |
  | *MS* | Object **MS** of type *str* |
  | *NASM* | Object **NASM** of type *str* |
  | *NCG* | Object **NCG** of type *str* |
  | *NEWTONLS* | Object **NEWTONLS** of type *str* |
  | *NEWTONTR* | Object **NEWTONTR** of type *str* |
  | *NGMRES* | Object **NGMRES** of type *str* |
  | *NGS* | Object **NGS** of type *str* |
  | *NRICHARDSON* | Object **NRICHARDSON** of type *str* |
  | *PATCH* | Object **PATCH** of type *str* |
  | *PYTHON* | Object **PYTHON** of type *str* |
  | *QN* | Object **QN** of type *str* |
  | *SHELL* | Object **SHELL** of type *str* |
  | *VINEWTONRSLS* | Object **VINEWTONRSLS** of type *str* |
  | *VINEWTONSSLS* | Object **VINEWTONSSLS** of type *str* |

  Attributes Documentation

  - **ANDERSON: *str* = ANDERSON**

    Object **ANDERSON** of type *str*

  - **ASPIN: *str* = ASPIN**

    Object **ASPIN** of type *str*

  - **COMPOSITE: *str* = COMPOSITE**

    Object **COMPOSITE** of type *str*

  - **FAS: *str* = FAS**

    Object **FAS** of type *str*

  - **KSPONLY: *str* = KSPONLY**

    Object **KSPONLY** of type *str*

  - **KSPTRANSPOSEONLY: *str* = KSPTRANSPOSEONLY**

    Object **KSPTRANSPOSEONLY** of type *str*

  - **MS: *str* = MS**

    Object **MS** of type *str*

  - **NASM: *str* = NASM**

    Object **NASM** of type *str*

  - **NCG: *str* = NCG**

    Object **NCG** of type *str*

  - **NEWTONLS: *str* = NEWTONLS**

    Object **NEWTONLS** of type *str*

  - **NEWTONTR: *str* = NEWTONTR**

    Object **NEWTONTR** of type *str*

  - **NGMRES: *str* = NGMRES**

    Object **NGMRES** of type *str*

  - **NGS: *str* = NGS**

    Object **NGS** of type *str*

  - **NRICHARDSON: *str* = NRICHARDSON**

    Object **NRICHARDSON** of type *str*

  - **PATCH: *str* = PATCH**

    Object **PATCH** of type *str*

  - **PYTHON: *str* = PYTHON**

    Object **PYTHON** of type *str*

  - **QN: *str* = QN**

    Object **QN** of type *str*

  - **SHELL: *str* = SHELL**

    Object **SHELL** of type *str*

  - **VINEWTONRSLS: *str* = VINEWTONRSLS**

    Object **VINEWTONRSLS** of type *str*

  - **VINEWTONSSLS: *str* = VINEWTONSSLS**

    Object **VINEWTONSSLS** of type *str*

Methods Summary

| | |
| --- | --- |
| *appendOptionsPrefix*(prefix) | Append to the prefix used for searching for options in the database. |
| *callConvergenceTest*(its, xnorm, ynorm, fnorm) | Compute the convergence test. |
| *computeFunction*(x, f) | Compute the function. |
| *computeJacobian*(x, J\[, P\]) | Compute the Jacobian. |
| *computeNGS*(x\[, b\]) | Compute a nonlinear Gauss-Seidel step. |
| *computeObjective*(x) | Compute the value of the objective function. |
| *converged*(its, xnorm, ynorm, fnorm) | Compute the convergence test and update the solver converged reason. |
| *create*(\[comm\]) | Create a SNES solver. |
| *createPython*(\[context, comm\]) | Create a nonlinear solver of Python type. |
| *destroy*() | Destroy the solver. |
| *getApplicationContext*() | Return the application context. |
| *getCompositeNumber*() | Return the number of solvers in the composite. |
| *getCompositeSNES*(n) | Return the n-th solver in the composite. |
| *getConvergedReason*() | Return the termination flag. |
| *getConvergenceHistory*() | Return the convergence history. |
| *getConvergenceTest*() | Return the callback to used as convergence test. |
| *getDM*() | Return the *DM* associated with the solver. |
| *getDivergenceTolerance*() | Get the divergence tolerance parameter used in the convergence tests. |
| *getErrorIfNotConverged*() | Return the flag indicating error on divergence. |
| *getFASCoarseSolve*() | Return the *SNES* used at the coarsest level of the FAS hierarchy. |
| *getFASCycleSNES*(level) | Return the *SNES* corresponding to a particular level of the FAS hierarchy. |
| *getFASInjection*(level) | Return the *Mat* used to apply the injection from level-1 to level. |
| *getFASInterpolation*(level) | Return the *Mat* used to apply the interpolation from level-1 to level. |
| *getFASLevels*() | Return the number of levels used. |
| *getFASRestriction*(level) | Return the *Mat* used to apply the restriction from level-1 to level. |
| *getFASSmoother*(level) | Return the smoother used at a given level of the FAS hierarchy. |
| *getFASSmootherDown*(level) | Return the downsmoother used at a given level of the FAS hierarchy. |
| *getFASSmootherUp*(level) | Return the upsmoother used at a given level of the FAS hierarchy. |
| *getFunction*() | Return the callback to compute the nonlinear function. |
| *getFunctionEvaluations*() | Return the current number of function evaluations. |
| *getFunctionNorm*() | Return the function norm. |
| *getInitialGuess*() | Return the callback to compute the initial guess. |
| *getIterationNumber*() | Return the current iteration number. |
| *getJacobian*() | Return the matrices used to compute the Jacobian and the callback tuple. |
| *getKSP*() | Return the linear solver used by the nonlinear solver. |
| *getKSPFailures*() | Return the current number of linear solve failures. |
| *getLinearSolveIterations*() | Return the total number of linear iterations. |
| *getMaxFunctionEvaluations*() | Return the maximum allowed number of function evaluations. |
| *getMaxKSPFailures*() | Return the maximum allowed number of linear solve failures. |
| *getMaxStepFailures*() | Return the maximum allowed number of step failures. |
| *getMonitor*() | Return the callback used to monitor solver convergence. |
| *getNASMNumber*() | Return the number of solvers in NASM. |
| *getNASMSNES*(n) | Return the n-th solver in NASM. |
| *getNGS*() | Return the nonlinear Gauss-Seidel callback tuple. |
| *getNPC*() | Return the nonlinear preconditioner associated with the solver. |
| *getNPCSide*() | Return the nonlinear preconditioning side. |
| *getNormSchedule*() | Return the norm schedule. |
| *getObjective*() | Return the objective callback tuple. |
| *getOptionsPrefix*() | Return the prefix used for searching for options in the database. |
| *getParamsEW*() | Get the parameters of the Eisenstat and Walker trick. |
| *getPythonContext*() | Return the instance of the class implementing the required Python methods. |
| *getPythonType*() | Return the fully qualified Python name of the class used by the solver. |
| *getRhs*() | Return the vector holding the right-hand side. |
| *getSolution*() | Return the vector holding the solution. |
| *getSolutionUpdate*() | Return the vector holding the solution update. |
| *getStepFailures*() | Return the current number of step failures. |
| *getTRTolerances*() | Return the tolerance parameters used for the trust region. |
| *getTRUpdateParameters*() | Return the update parameters used for the trust region. |
| *getTolerances*() | Return the tolerance parameters used in the solver convergence tests. |
| *getType*() | Return the type of the solver. |
| *getUpdate*() | Return the callback to compute the update at the beginning of each step. |
| *getUseEW*() | Return the flag indicating if the solver uses the Eisenstat-Walker trick. |
| *getUseFD*() | Return **true** if the solver uses color finite-differencing for the Jacobian. |
| *getUseKSP*() | Return the flag indicating if the solver uses a linear solver. |
| *getUseMF*() | Return the flag indicating if the solver uses matrix-free finite-differencing. |
| *getVIInactiveSet*() | Return the index set for the inactive set. |
| *hasNPC*() | Return a boolean indicating whether the solver has a nonlinear preconditioner. |
| *logConvergenceHistory*(norm\[, linear\_its\]) | Log residual norm and linear iterations. |
| *monitor*(its, rnorm) | Monitor the solver. |
| *monitorCancel*() | Cancel all the monitors of the solver. |
| *reset*() | Reset the solver. |
| *setApplicationContext*(appctx) | Set the application context. |
| *setConvergedReason*(reason) | Set the termination flag. |
| *setConvergenceHistory*(\[length, reset\]) | Set the convergence history. |
| *setConvergenceTest*(converged\[, args, kargs\]) | Set the callback to use as convergence test. |
| *setDM*(dm) | Associate a *DM* with the solver. |
| *setDivergenceTolerance*(dtol) | Set the divergence tolerance parameter used in the convergence tests. |
| *setErrorIfNotConverged*(flag) | Immediately generate an error if the solver has not converged. |
| *setFASInjection*(level, mat) | Set the *Mat* to be used to apply the injection from level-1 to level. |
| *setFASInterpolation*(level, mat) | Set the *Mat* to be used to apply the interpolation from level-1 to level. |
| *setFASLevels*(levels\[, comms\]) | Set the number of levels to use with FAS. |
| *setFASRScale*(level, vec) | Set the scaling factor of the restriction operator from level to level-1. |
| *setFASRestriction*(level, mat) | Set the *Mat* to be used to apply the restriction from level-1 to level. |
| *setForceIteration*(force) | Force solve to take at least one iteration. |
| *setFromOptions*() | Configure the solver from the options database. |
| *setFunction*(function\[, f, args, kargs\]) | Set the callback to compute the nonlinear function. |
| *setFunctionNorm*(norm) | Set the function norm value. |
| *setInitialGuess*(initialguess\[, args, kargs\]) | Set the callback to compute the initial guess. |
| *setIterationNumber*(its) | Set the current iteration number. |
| *setJacobian*(jacobian\[, J, P, args, kargs\]) | Set the callback to compute the Jacobian. |
| *setKSP*(ksp) | Set the linear solver that will be used by the nonlinear solver. |
| *setLineSearchPreCheck*(precheck\[, args, kargs\]) | Set the callback that will be called before applying the linesearch. |
| *setMaxFunctionEvaluations*(max\_funcs) | Set the maximum allowed number of function evaluations. |
| *setMaxKSPFailures*(max\_fails) | Set the maximum allowed number of linear solve failures. |
| *setMaxStepFailures*(max\_fails) | Set the maximum allowed number of step failures. |
| *setMonitor*(monitor\[, args, kargs\]) | Set the callback used to monitor solver convergence. |
| *setNGS*(ngs\[, args, kargs\]) | Set the callback to compute nonlinear Gauss-Seidel. |
| *setNPC*(snes) | Set the nonlinear preconditioner. |
| *setNPCSide*(side) | Set the nonlinear preconditioning side. |
| *setNormSchedule*(normsched) | Set the norm schedule. |
| *setObjective*(objective\[, args, kargs\]) | Set the callback to compute the objective function. |
| *setOptionsPrefix*(prefix) | Set the prefix used for searching for options in the database. |
| *setParamsEW*(\[version, rtol\_0, rtol\_max, ...\]) | Set the parameters for the Eisenstat and Walker trick. |
| *setPatchCellNumbering*(sec) | Set cell patch numbering. |
| *setPatchComputeFunction*(function\[, args, kargs\]) | Set patch compute function. |
| *setPatchComputeOperator*(operator\[, args, kargs\]) | Set patch compute operator. |
| *setPatchConstructType*(typ\[, operator, args, ...\]) | Set patch construct type. |
| *setPatchDiscretisationInfo*(dms, bs, ...) | Set patch discretisation information. |
| *setPythonContext*(context) | Set the instance of the class implementing the required Python methods. |
| *setPythonType*(py\_type) | Set the fully qualified Python name of the class to be used. |
| *setResetCounters*(\[reset\]) | Set the flag to reset the counters. |
| *setSolution*(vec) | Set the vector used to store the solution. |
| *setTRTolerances*(\[delta\_min, delta\_max, delta\_0\]) | Set the tolerance parameters used for the trust region. |
| *setTRUpdateParameters*(\[eta1, eta2, eta3, t1, t2\]) | Set the update parameters used for the trust region. |
| *setTolerances*(\[rtol, atol, stol, max\_it\]) | Set the tolerance parameters used in the solver convergence tests. |
| *setType*(snes\_type) | Set the type of the solver. |
| *setUp*() | Set up the internal data structures for using the solver. |
| *setUpMatrices*() | Ensures that matrices are available for Newton-like methods. |
| *setUpdate*(update\[, args, kargs\]) | Set the callback to compute update at the beginning of each step. |
| *setUseEW*(\[flag\]) | Tell the solver to use the Eisenstat-Walker trick. |
| *setUseFD*(\[flag\]) | Set the boolean flag to use coloring finite-differencing for Jacobian assembly. |
| *setUseKSP*(\[flag\]) | Set the boolean flag indicating to use a linear solver. |
| *setUseMF*(\[flag\]) | Set the boolean flag indicating to use matrix-free finite-differencing. |
| *setVariableBounds*(xl, xu) | Set the vector for the variable bounds. |
| *solve*(\[b, x\]) | Solve the nonlinear equations. |
| *view*(\[viewer\]) | View the solver. |

Attributes Summary

| | |
| --- | --- |
| *appctx* | Application context. |
| *atol* | Absolute residual tolerance. |
| *dm* | *DM*. |
| *history* | Convergence history. |
| *is\_converged* | Boolean indicating if the solver has converged. |
| *is\_diverged* | Boolean indicating if the solver has failed. |
| *is\_iterating* | Boolean indicating if the solver has not converged yet. |
| *its* | Number of iterations. |
| *ksp* | Linear solver. |
| *max\_funcs* | Maximum number of function evaluations. |
| *max\_it* | Maximum number of iterations. |
| *norm* | Function norm. |
| *npc* | Nonlinear preconditioner. |
| *reason* | Converged reason. |
| *rtol* | Relative residual tolerance. |
| *stol* | Solution update tolerance. |
| *use\_ew* | Use the Eisenstat-Walker trick. |
| *use\_fd* | Boolean indicating if the solver uses coloring finite-differencing. |
| *use\_ksp* | Boolean indicating if the solver uses a linear solver. |
| *use\_mf* | Boolean indicating if the solver uses matrix-free finite-differencing. |
| *vec\_rhs* | Right-hand side vector. |
| *vec\_sol* | Solution vector. |
| *vec\_upd* | Update vector. |

Methods Documentation

- **appendOptionsPrefix(prefix)**

  Append to the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *SNESAppendOptionsPrefix*

  *Source code at petsc4py/PETSc/SNES.pyx:227*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **callConvergenceTest(its, xnorm, ynorm, fnorm)**

  Compute the convergence test.

  Collective.

  - **Parameters**

    - •

      **its** (*int*) -- Iteration number.

    - •

      **xnorm** (*float*) -- Solution norm.

    - •

      **ynorm** (*float*) -- Update norm.

    - •

      **fnorm** (*float*) -- Function norm.

  - **Return type**

    *ConvergedReason*

  **SEE ALSO:**

  *setConvergenceTest*, *getConvergenceTest*

  *Source code at petsc4py/PETSc/SNES.pyx:1326*

- **computeFunction(x, f)**

  Compute the function.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input state vector.

    - •

      **f** (*Vec*) -- The output vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setFunction*, *SNESComputeFunction*

  *Source code at petsc4py/PETSc/SNES.pyx:1027*

- **computeJacobian(x, J, P=None)**

  Compute the Jacobian.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input state vector.

    - •

      **J** (*Mat*) -- The output Jacobian matrix.

    - •

      **P** (*Mat \| None*) -- The output Jacobian matrix used to construct the preconditioner.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setJacobian*, *SNESComputeJacobian*

  *Source code at petsc4py/PETSc/SNES.pyx:1046*

- **computeNGS(x, b=None)**

  Compute a nonlinear Gauss-Seidel step.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The input/output state vector.

    - •

      **b** (*Vec \| None*) -- The input right-hand side vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setNGS*, *getNGS*, *SNESComputeNGS*

  *Source code at petsc4py/PETSc/SNES.pyx:1133*

- **computeObjective(x)**

  Compute the value of the objective function.

  Collective.

  - **Parameters**

    **x** (*Vec*) -- The input state vector.

  - **Return type**

    *float*

  **SEE ALSO:**

  *setObjective*, *SNESComputeObjective*

  *Source code at petsc4py/PETSc/SNES.pyx:1069*

- **converged(its, xnorm, ynorm, fnorm)**

  Compute the convergence test and update the solver converged reason.

  Collective.

  - **Parameters**

    - •

      **its** (*int*) -- Iteration number.

    - •

      **xnorm** (*float*) -- Solution norm.

    - •

      **ynorm** (*float*) -- Update norm.

    - •

      **fnorm** (*float*) -- Function norm.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setConvergenceTest*, *getConvergenceTest*, *SNESConverged*

  *Source code at petsc4py/PETSc/SNES.pyx:1356*

- **create(comm=None)**

  Create a SNES solver.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *Sys.getDefaultComm*, *SNESCreate*

  *Source code at petsc4py/PETSc/SNES.pyx:145*

- **createPython(context=None, comm=None)**

  Create a nonlinear solver of Python type.

  Collective.

  - **Parameters**

    - •

      **context** (*Any*) -- An instance of the Python class implementing the required methods.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PETSc Python nonlinear solver type (TODO)*, *setType*, *setPythonContext*, *Type.PYTHON*

  *Source code at petsc4py/PETSc/SNES.pyx:2179*

- **destroy()**

  Destroy the solver.

  Collective.

  **SEE ALSO:**

  *SNESDestroy*

  *Source code at petsc4py/PETSc/SNES.pyx:132*

  - **Return type**

    *Self*

- **getApplicationContext()**

  Return the application context.

  *Source code at petsc4py/PETSc/SNES.pyx:264*

  - **Return type**

    *Any*

- **getCompositeNumber()**

  Return the number of solvers in the composite.

  Not collective.

  **SEE ALSO:**

  *getCompositeSNES*, *SNESCompositeGetNumber*, *SNESCOMPOSITE*

  *Source code at petsc4py/PETSc/SNES.pyx:2280*

  - **Return type**

    *int*

- **getCompositeSNES(n)**

  Return the n-th solver in the composite.

  Not collective.

  **SEE ALSO:**

  *getCompositeNumber*, *SNESCompositeGetSNES*, *SNESCOMPOSITE*

  *Source code at petsc4py/PETSc/SNES.pyx:2263*

  - **Parameters**

    **n** (*int*)

  - **Return type**

    *SNES*

- **getConvergedReason()**

  Return the termination flag.

  Not collective.

  **SEE ALSO:**

  *setConvergedReason*, *SNESGetConvergedReason*

  *Source code at petsc4py/PETSc/SNES.pyx:1739*

  - **Return type**

    *ConvergedReason*

- **getConvergenceHistory()**

  Return the convergence history.

  Not collective.

  **SEE ALSO:**

  *SNESGetConvergenceHistory*

  *Source code at petsc4py/PETSc/SNES.pyx:1407*

  - **Return type**

    *tuple*\[*ArrayReal*, *ArrayInt*\]

- **getConvergenceTest()**

  Return the callback to used as convergence test.

  Not collective.

  **SEE ALSO:**

  *setConvergenceTest*, *callConvergenceTest*

  *Source code at petsc4py/PETSc/SNES.pyx:1314*

  - **Return type**

    *SNESConvergedFunction*

- **getDM()**

  Return the *DM* associated with the solver.

  Not collective.

  **SEE ALSO:**

  *setDM*, *SNESGetDM*

  *Source code at petsc4py/PETSc/SNES.pyx:279*

  - **Return type**

    *DM*

- **getDivergenceTolerance()**

  Get the divergence tolerance parameter used in the convergence tests.

  Not collective.

  **SEE ALSO:**

  *setDivergenceTolerance*, *getTolerances*, *SNESGetDivergenceTolerance*

  *Source code at petsc4py/PETSc/SNES.pyx:1239*

  - **Return type**

    *float*

- **getErrorIfNotConverged()**

  Return the flag indicating error on divergence.

  Not collective.

  **SEE ALSO:**

  *setErrorIfNotConverged*, *SNESGetErrorIfNotConverged*

  *Source code at petsc4py/PETSc/SNES.pyx:1766*

  - **Return type**

    *bool*

- **getFASCoarseSolve()**

  Return the *SNES* used at the coarsest level of the FAS hierarchy.

  Not collective.

  **SEE ALSO:**

  *getFASSmoother*, *SNESFASGetCoarseSolve*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:594*

  - **Return type**

    *SNES*

- **getFASCycleSNES(level)**

  Return the *SNES* corresponding to a particular level of the FAS hierarchy.

  Not collective.

  **SEE ALSO:**

  *setFASLevels*, *getFASCoarseSolve*, *getFASSmoother*, *SNESFASGetCycleSNES*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:577*

  - **Parameters**

    **level** (*int*)

  - **Return type**

    *SNES*

- **getFASInjection(level)**

  Return the *Mat* used to apply the injection from level-1 to level.

  Not collective.

  **SEE ALSO:**

  *setFASInjection*, *SNESFASGetInjection*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:500*

  - **Parameters**

    **level** (*int*)

  - **Return type**

    *Mat*

- **getFASInterpolation(level)**

  Return the *Mat* used to apply the interpolation from level-1 to level.

  Not collective.

  **SEE ALSO:**

  *setFASInterpolation*, *SNESFASGetInterpolation*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:440*

  - **Parameters**

    **level** (*int*)

  - **Return type**

    *Mat*

- **getFASLevels()**

  Return the number of levels used.

  Not collective.

  **SEE ALSO:**

  *setFASLevels*, *SNESFASGetLevels*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:563*

  - **Return type**

    *int*

- **getFASRestriction(level)**

  Return the *Mat* used to apply the restriction from level-1 to level.

  Not collective.

  **SEE ALSO:**

  *setFASRestriction*, *SNESFASGetRestriction*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:470*

  - **Parameters**

    **level** (*int*)

  - **Return type**

    *Mat*

- **getFASSmoother(level)**

  Return the smoother used at a given level of the FAS hierarchy.

  Not collective.

  **SEE ALSO:**

  *setFASLevels*, *getFASCoarseSolve*, *getFASSmootherDown*, *getFASSmootherUp*, *SNESFASGetSmoother*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:609*

  - **Parameters**

    **level** (*int*)

  - **Return type**

    *SNES*

- **getFASSmootherDown(level)**

  Return the downsmoother used at a given level of the FAS hierarchy.

  Not collective.

  **SEE ALSO:**

  *setFASLevels*, *getFASCoarseSolve*, *getFASSmoother*, *getFASSmootherUp*, *SNESFASGetSmootherDown*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:626*

  - **Parameters**

    **level** (*int*)

  - **Return type**

    *SNES*

- **getFASSmootherUp(level)**

  Return the upsmoother used at a given level of the FAS hierarchy.

  Not collective.

  **SEE ALSO:**

  *setFASLevels*, *getFASCoarseSolve*, *getFASSmoother*, *getFASSmootherDown*, *SNESFASGetSmootherUp*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:643*

  - **Parameters**

    **level** (*int*)

  - **Return type**

    *SNES*

- **getFunction()**

  Return the callback to compute the nonlinear function.

  Not collective.

  **SEE ALSO:**

  *setFunction*, *SNESGetFunction*

  *Source code at petsc4py/PETSc/SNES.pyx:843*

  - **Return type**

    *SNESFunction*

- **getFunctionEvaluations()**

  Return the current number of function evaluations.

  Not collective.

  **SEE ALSO:**

  *setMaxFunctionEvaluations*, *SNESGetNumberFunctionEvals*

  *Source code at petsc4py/PETSc/SNES.pyx:1560*

  - **Return type**

    *int*

- **getFunctionNorm()**

  Return the function norm.

  Not collective.

  **SEE ALSO:**

  *setFunctionNorm*, *SNESGetFunctionNorm*

  *Source code at petsc4py/PETSc/SNES.pyx:1837*

  - **Return type**

    *float*

- **getInitialGuess()**

  Return the callback to compute the initial guess.

  Not collective.

  **SEE ALSO:**

  *setInitialGuess*

  *Source code at petsc4py/PETSc/SNES.pyx:796*

  - **Return type**

    *SNESGuessFunction*

- **getIterationNumber()**

  Return the current iteration number.

  Not collective.

  **SEE ALSO:**

  *setIterationNumber*, *SNESGetIterationNumber*

  *Source code at petsc4py/PETSc/SNES.pyx:1795*

  - **Return type**

    *int*

- **getJacobian()**

  Return the matrices used to compute the Jacobian and the callback tuple.

  Not collective.

  - **Returns**

    - •

      **J** (*Mat*) -- The matrix to store the Jacobian.

    - •

      **P** (*Mat*) -- The matrix to construct the preconditioner.

    - •

      **callback** (*SNESJacobianFunction*) -- callback, positional and keyword arguments.

  - **Return type**

    *tuple*\[*Mat*, *Mat*, *SNESJacobianFunction*\]

  **SEE ALSO:**

  *setJacobian*, *SNESGetJacobian*

  *Source code at petsc4py/PETSc/SNES.pyx:955*

- **getKSP()**

  Return the linear solver used by the nonlinear solver.

  Not collective.

  **SEE ALSO:**

  *setKSP*, *SNESGetKSP*

  *Source code at petsc4py/PETSc/SNES.pyx:1936*

  - **Return type**

    *KSP*

- **getKSPFailures()**

  Return the current number of linear solve failures.

  Not collective.

  **SEE ALSO:**

  *getMaxKSPFailures*, *SNESGetLinearSolveFailures*

  *Source code at petsc4py/PETSc/SNES.pyx:1642*

  - **Return type**

    *int*

- **getLinearSolveIterations()**

  Return the total number of linear iterations.

  Not collective.

  **SEE ALSO:**

  *SNESGetLinearSolveIterations*

  *Source code at petsc4py/PETSc/SNES.pyx:1851*

  - **Return type**

    *int*

- **getMaxFunctionEvaluations()**

  Return the maximum allowed number of function evaluations.

  Not collective.

  **SEE ALSO:**

  *setMaxFunctionEvaluations*, *SNESSetTolerances*

  *Source code at petsc4py/PETSc/SNES.pyx:1544*

  - **Return type**

    *int*

- **getMaxKSPFailures()**

  Return the maximum allowed number of linear solve failures.

  Not collective.

  **SEE ALSO:**

  *setMaxKSPFailures*, *SNESGetMaxLinearSolveFailures*

  *Source code at petsc4py/PETSc/SNES.pyx:1628*

  - **Return type**

    *int*

- **getMaxStepFailures()**

  Return the maximum allowed number of step failures.

  Not collective.

  **SEE ALSO:**

  *setMaxStepFailures*, *SNESGetMaxNonlinearStepFailures*

  *Source code at petsc4py/PETSc/SNES.pyx:1587*

  - **Return type**

    *int*

- **getMonitor()**

  Return the callback used to monitor solver convergence.

  Not collective.

  **SEE ALSO:**

  *setMonitor*

  *Source code at petsc4py/PETSc/SNES.pyx:1479*

  - **Return type**

    *list*\[*tuple*\[*SNESMonitorFunction*, *tuple*\[Any, ...\], *dict*\[*str*, Any\]\]\]

- **getNASMNumber()**

  Return the number of solvers in NASM.

  Not collective.

  **SEE ALSO:**

  *getNASMSNES*, *SNESNASMGetNumber*, *SNESNASM*

  *Source code at petsc4py/PETSc/SNES.pyx:2312*

  - **Return type**

    *int*

- **getNASMSNES(n)**

  Return the n-th solver in NASM.

  Not collective.

  **SEE ALSO:**

  *getNASMNumber*, *SNESNASMGetSNES*, *SNESNASM*

  *Source code at petsc4py/PETSc/SNES.pyx:2296*

  - **Parameters**

    **n** (*int*)

  - **Return type**

    *SNES*

- **getNGS()**

  Return the nonlinear Gauss-Seidel callback tuple.

  Not collective.

  **SEE ALSO:**

  *setNGS*, *computeNGS*

  *Source code at petsc4py/PETSc/SNES.pyx:1119*

  - **Return type**

    *SNESNGSFunction*

- **getNPC()**

  Return the nonlinear preconditioner associated with the solver.

  Not collective.

  **SEE ALSO:**

  *setNPC*, *hasNPC*, *setNPCSide*, *getNPCSide*, *SNESGetNPC*

  *Source code at petsc4py/PETSc/SNES.pyx:662*

  - **Return type**

    *SNES*

- **getNPCSide()**

  Return the nonlinear preconditioning side.

  Not collective.

  **SEE ALSO:**

  *setNPC*, *getNPC*, *hasNPC*, *setNPCSide*, *SNESGetNPCSide*

  *Source code at petsc4py/PETSc/SNES.pyx:715*

  - **Return type**

    *Side*

- **getNormSchedule()**

  Return the norm schedule.

  Not collective.

  **SEE ALSO:**

  *setNormSchedule*, *SNESGetNormSchedule*

  *Source code at petsc4py/PETSc/SNES.pyx:1265*

  - **Return type**

    *NormSchedule*

- **getObjective()**

  Return the objective callback tuple.

  Not collective.

  **SEE ALSO:**

  *setObjective*

  *Source code at petsc4py/PETSc/SNES.pyx:1013*

  - **Return type**

    *SNESObjFunction*

- **getOptionsPrefix()**

  Return the prefix used for searching for options in the database.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *SNESGetOptionsPrefix*

  *Source code at petsc4py/PETSc/SNES.pyx:213*

  - **Return type**

    *str*

- **getParamsEW()**

  Get the parameters of the Eisenstat and Walker trick.

  Not collective.

  **SEE ALSO:**

  *setUseEW*, *setParamsEW*, *SNESKSPGetParametersEW*

  *Source code at petsc4py/PETSc/SNES.pyx:2040*

  - **Return type**

    *dict*\[*str*, *int* \| *float*\]

- **getPythonContext()**

  Return the instance of the class implementing the required Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python nonlinear solver type (TODO)*, *setPythonContext*

  *Source code at petsc4py/PETSc/SNES.pyx:2216*

  - **Return type**

    *Any*

- **getPythonType()**

  Return the fully qualified Python name of the class used by the solver.

  Not collective.

  **SEE ALSO:**

  *PETSc Python nonlinear solver type (TODO)*, *setPythonContext*, *setPythonType*, *SNESPythonGetType*

  *Source code at petsc4py/PETSc/SNES.pyx:2246*

  - **Return type**

    *str*

- **getRhs()**

  Return the vector holding the right-hand side.

  Not collective.

  **SEE ALSO:**

  *SNESGetRhs*

  *Source code at petsc4py/PETSc/SNES.pyx:1865*

  - **Return type**

    *Vec*

- **getSolution()**

  Return the vector holding the solution.

  Not collective.

  **SEE ALSO:**

  *setSolution*, *SNESGetSolution*

  *Source code at petsc4py/PETSc/SNES.pyx:1880*

  - **Return type**

    *Vec*

- **getSolutionUpdate()**

  Return the vector holding the solution update.

  Not collective.

  **SEE ALSO:**

  *SNESGetSolutionUpdate*

  *Source code at petsc4py/PETSc/SNES.pyx:1907*

  - **Return type**

    *Vec*

- **getStepFailures()**

  Return the current number of step failures.

  Not collective.

  **SEE ALSO:**

  *getMaxStepFailures*, *SNESGetNonlinearStepFailures*

  *Source code at petsc4py/PETSc/SNES.pyx:1601*

  - **Return type**

    *int*

- **getTRTolerances()**

  Return the tolerance parameters used for the trust region.

  Not collective.

  - **Returns**

    - •

      **delta\_min** (*float*) -- The minimum allowed trust region size.

    - •

      **delta\_max** (*float*) -- The maximum allowed trust region size.

    - •

      **delta\_0** (*float*) -- The initial trust region size.

  - **Return type**

    *tuple*\[*float*, *float*, *float*\]

  **SEE ALSO:**

  *setTRTolerances*, *getTRUpdateParameters*, *SNESNewtonTRGetTolerances*

  *Source code at petsc4py/PETSc/SNES.pyx:337*

- **getTRUpdateParameters()**

  Return the update parameters used for the trust region.

  Not collective.

  - **Returns**

    - •

      **eta1** (*float*) -- The step acceptance tolerance.

    - •

      **eta2** (*float*) -- The shrinking tolerance.

    - •

      **eta3** (*float*) -- The enlarging tolerance.

    - •

      **t1** (*float*) -- The shrinking factor.

    - •

      **t2** (*float*) -- The enlarging factor.

  - **Return type**

    *tuple*\[*float*, *float*, *float*, *float*, *float*\]

  **SEE ALSO:**

  *setTRUpdateParameters*, *getTRTolerances*, *SNESNewtonTRGetUpdateParameters*

  *Source code at petsc4py/PETSc/SNES.pyx:396*

- **getTolerances()**

  Return the tolerance parameters used in the solver convergence tests.

  Not collective.

  - **Returns**

    - •

      **rtol** (*float*) -- The relative norm of the residual.

    - •

      **atol** (*float*) -- The absolute norm of the residual.

    - •

      **stol** (*float*) -- The absolute norm of the step.

    - •

      **max\_it** (*int*) -- The maximum allowed number of iterations.

  - **Return type**

    *tuple*\[*float*, *float*, *float*, *int*\]

  **SEE ALSO:**

  *setTolerances*, *SNESGetTolerances*

  *Source code at petsc4py/PETSc/SNES.pyx:1195*

- **getType()**

  Return the type of the solver.

  Not collective.

  **SEE ALSO:**

  *setType*, *SNESGetType*

  *Source code at petsc4py/PETSc/SNES.pyx:185*

  - **Return type**

    *str*

- **getUpdate()**

  Return the callback to compute the update at the beginning of each step.

  Not collective.

  **SEE ALSO:**

  *setUpdate*

  *Source code at petsc4py/PETSc/SNES.pyx:904*

  - **Return type**

    *SNESUpdateFunction*

- **getUseEW()**

  Return the flag indicating if the solver uses the Eisenstat-Walker trick.

  Not collective.

  **SEE ALSO:**

  *setUseEW*, *setParamsEW*, *SNESKSPGetUseEW*

  *Source code at petsc4py/PETSc/SNES.pyx:1974*

  - **Return type**

    *bool*

- **getUseFD()**

  Return **true** if the solver uses color finite-differencing for the Jacobian.

  Not collective.

  **SEE ALSO:**

  *setUseFD*

  *Source code at petsc4py/PETSc/SNES.pyx:2134*

  - **Return type**

    *False*

- **getUseKSP()**

  Return the flag indicating if the solver uses a linear solver.

  Not collective.

  **SEE ALSO:**

  *setUseKSP*

  *Source code at petsc4py/PETSc/SNES.pyx:2078*

  - **Return type**

    *bool*

- **getUseMF()**

  Return the flag indicating if the solver uses matrix-free finite-differencing.

  Not collective.

  **SEE ALSO:**

  *setUseMF*

  *Source code at petsc4py/PETSc/SNES.pyx:2107*

  - **Return type**

    *bool*

- **getVIInactiveSet()**

  Return the index set for the inactive set.

  Not collective.

  **SEE ALSO:**

  *SNESVIGetInactiveSet*

  *Source code at petsc4py/PETSc/SNES.pyx:2162*

  - **Return type**

    *IS*

- **hasNPC()**

  Return a boolean indicating whether the solver has a nonlinear preconditioner.

  Not collective.

  **SEE ALSO:**

  *setNPC*, *getNPC*, *setNPCSide*, *getNPCSide*, *SNESHasNPC*

  *Source code at petsc4py/PETSc/SNES.pyx:677*

  - **Return type**

    *bool*

- **logConvergenceHistory(norm, linear\_its=0)**

  Log residual norm and linear iterations.

  *Source code at petsc4py/PETSc/SNES.pyx:1425*

  - **Parameters**

    - •

      **norm** (*float*)

    - •

      **linear\_its** (*int*)

  - **Return type**

    *None*

- **monitor(its, rnorm)**

  Monitor the solver.

  Collective.

  - **Parameters**

    - •

      **its** -- Current number of iterations.

    - •

      **rnorm** -- Current value of the residual norm.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setMonitor*, *SNESMonitor*

  *Source code at petsc4py/PETSc/SNES.pyx:1506*

- **monitorCancel()**

  Cancel all the monitors of the solver.

  Logically collective.

  **SEE ALSO:**

  *setMonitor*, *SNESMonitorCancel*

  *Source code at petsc4py/PETSc/SNES.pyx:1491*

  - **Return type**

    *None*

- **reset()**

  Reset the solver.

  Collective.

  **SEE ALSO:**

  *SNESReset*

  *Source code at petsc4py/PETSc/SNES.pyx:1691*

  - **Return type**

    *None*

- **setApplicationContext(appctx)**

  Set the application context.

  *Source code at petsc4py/PETSc/SNES.pyx:255*

  - **Parameters**

    **appctx** (*Any*)

  - **Return type**

    *None*

- **setConvergedReason(reason)**

  Set the termination flag.

  Collective.

  **SEE ALSO:**

  *getConvergedReason*, *SNESSetConvergedReason*

  *Source code at petsc4py/PETSc/SNES.pyx:1726*

  - **Parameters**

    **reason** (*ConvergedReason*)

  - **Return type**

    *None*

- **setConvergenceHistory(length=None, reset=False)**

  Set the convergence history.

  Logically collective.

  **SEE ALSO:**

  *SNESSetConvergenceHistory*

  *Source code at petsc4py/PETSc/SNES.pyx:1383*

  - **Return type**

    *None*

- **setConvergenceTest(converged, args=None, kargs=None)**

  Set the callback to use as convergence test.

  Logically collective.

  - **Parameters**

    - •

      **converged** (*SNESConvergedFunction \| Literal\['skip', 'default'\]*) -- The convergence testing callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getConvergenceTest*, *callConvergenceTest*, *SNESSetConvergenceTest*

  *Source code at petsc4py/PETSc/SNES.pyx:1279*

- **setDM(dm)**

  Associate a *DM* with the solver.

  Not collective.

  **SEE ALSO:**

  *getDM*, *SNESSetDM*

  *Source code at petsc4py/PETSc/SNES.pyx:296*

  - **Parameters**

    **dm** (*DM*)

  - **Return type**

    *None*

- **setDivergenceTolerance(dtol)**

  Set the divergence tolerance parameter used in the convergence tests.

  Logically collective.

  - **Parameters**

    **dtol** (*float*) -- The divergence tolerance.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getDivergenceTolerance*, *setTolerances*, *SNESSetDivergenceTolerance*

  *Source code at petsc4py/PETSc/SNES.pyx:1222*

- **setErrorIfNotConverged(flag)**

  Immediately generate an error if the solver has not converged.

  Collective.

  **SEE ALSO:**

  *getErrorIfNotConverged*, *SNESSetErrorIfNotConverged*

  *Source code at petsc4py/PETSc/SNES.pyx:1753*

  - **Parameters**

    **flag** (*bool*)

  - **Return type**

    *None*

- **setFASInjection(level, mat)**

  Set the *Mat* to be used to apply the injection from level-1 to level.

  Collective.

  **SEE ALSO:**

  *getFASInjection*, *setFASInterpolation*, *setFASRestriction*, *SNESFASSetInjection*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:486*

  - **Parameters**

    - •

      **level** (*int*)

    - •

      **mat** (*Mat*)

  - **Return type**

    *None*

- **setFASInterpolation(level, mat)**

  Set the *Mat* to be used to apply the interpolation from level-1 to level.

  Collective.

  **SEE ALSO:**

  *getFASInterpolation*, *setFASRestriction*, *setFASInjection*, *SNESFASSetInterpolation*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:426*

  - **Parameters**

    - •

      **level** (*int*)

    - •

      **mat** (*Mat*)

  - **Return type**

    *None*

- **setFASLevels(levels, comms=None)**

  Set the number of levels to use with FAS.

  Collective.

  - **Parameters**

    - •

      **levels** (*int*) -- The number of levels

    - •

      **comms** (*Sequence\[Comm\]*) -- An optional sequence of communicators of length *Logging Levels*, or *None* for the default communicator *Sys.getDefaultComm*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getFASLevels*, *SNESFASSetLevels*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:529*

- **setFASRScale(level, vec)**

  Set the scaling factor of the restriction operator from level to level-1.

  Collective.

  **SEE ALSO:**

  *setFASRestriction*, *SNESFASSetRScale*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:516*

  - **Parameters**

    - •

      **level** (*int*)

    - •

      **vec** (*Vec*)

  - **Return type**

    *None*

- **setFASRestriction(level, mat)**

  Set the *Mat* to be used to apply the restriction from level-1 to level.

  Collective.

  **SEE ALSO:**

  *setFASRScale*, *getFASRestriction*, *setFASInterpolation*, *setFASInjection*, *SNESFASSetRestriction*, *SNESFAS*

  *Source code at petsc4py/PETSc/SNES.pyx:456*

  - **Parameters**

    - •

      **level** (*int*)

    - •

      **mat** (*Mat*)

  - **Return type**

    *None*

- **setForceIteration(force)**

  Force solve to take at least one iteration.

  Collective.

  **SEE ALSO:**

  *SNESSetForceIteration*

  *Source code at petsc4py/PETSc/SNES.pyx:1809*

  - **Parameters**

    **force** (*bool*)

  - **Return type**

    *None*

- **setFromOptions()**

  Configure the solver from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *SNESSetFromOptions*

  *Source code at petsc4py/PETSc/SNES.pyx:241*

  - **Return type**

    *None*

- **setFunction(function, f=None, args=None, kargs=None)**

  Set the callback to compute the nonlinear function.

  Logically collective.

  - **Parameters**

    - •

      **function** (*SNESFunction \| None*) -- The callback.

    - •

      **f** (*Vec \| None*) -- An optional vector to store the result.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getFunction*, *SNESSetFunction*

  *Source code at petsc4py/PETSc/SNES.pyx:808*

- **setFunctionNorm(norm)**

  Set the function norm value.

  Collective.

  This is only of use to implementers of custom SNES types.

  **SEE ALSO:**

  *getFunctionNorm*, *SNESSetFunctionNorm*

  *Source code at petsc4py/PETSc/SNES.pyx:1822*

  - **Parameters**

    **norm** (*float*)

  - **Return type**

    *None*

- **setInitialGuess(initialguess, args=None, kargs=None)**

  Set the callback to compute the initial guess.

  Logically collective.

  - **Parameters**

    - •

      **initialguess** (*SNESGuessFunction \| None*) -- The callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getInitialGuess*, *SNESSetComputeInitialGuess*

  *Source code at petsc4py/PETSc/SNES.pyx:765*

- **setIterationNumber(its)**

  Set the current iteration number.

  Collective.

  This is only of use to implementers of custom SNES types.

  **SEE ALSO:**

  *getIterationNumber*, *SNESSetIterationNumber*

  *Source code at petsc4py/PETSc/SNES.pyx:1780*

  - **Parameters**

    **its** (*int*)

  - **Return type**

    *None*

- **setJacobian(jacobian, J=None, P=None, args=None, kargs=None)**

  Set the callback to compute the Jacobian.

  Logically collective.

  - **Parameters**

    - •

      **jacobian** (*SNESJacobianFunction \| None*) -- The Jacobian callback.

    - •

      **J** (*Mat \| None*) -- The matrix to store the Jacobian.

    - •

      **P** (*Mat \| None*) -- The matrix to construct the preconditioner.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getJacobian*, *SNESSetJacobian*

  *Source code at petsc4py/PETSc/SNES.pyx:916*

- **setKSP(ksp)**

  Set the linear solver that will be used by the nonlinear solver.

  Logically collective.

  **SEE ALSO:**

  *getKSP*, *SNESSetKSP*

  *Source code at petsc4py/PETSc/SNES.pyx:1924*

  - **Parameters**

    **ksp** (*KSP*)

  - **Return type**

    *None*

- **setLineSearchPreCheck(precheck, args=None, kargs=None)**

  Set the callback that will be called before applying the linesearch.

  Logically collective.

  - **Parameters**

    - •

      **precheck** (*SNESLSPreFunction \| None*) -- The callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *SNESLineSearchSetPreCheck*

  *Source code at petsc4py/PETSc/SNES.pyx:731*

- **setMaxFunctionEvaluations(max\_funcs)**

  Set the maximum allowed number of function evaluations.

  Collective.

  **SEE ALSO:**

  *getMaxFunctionEvaluations*, *SNESSetTolerances*

  *Source code at petsc4py/PETSc/SNES.pyx:1529*

  - **Parameters**

    **max\_funcs** (*int*)

  - **Return type**

    *None*

- **setMaxKSPFailures(max\_fails)**

  Set the maximum allowed number of linear solve failures.

  Collective.

  **SEE ALSO:**

  *getMaxKSPFailures*, *SNESSetMaxLinearSolveFailures*

  *Source code at petsc4py/PETSc/SNES.pyx:1615*

  - **Parameters**

    **max\_fails** (*int*)

  - **Return type**

    *None*

- **setMaxStepFailures(max\_fails)**

  Set the maximum allowed number of step failures.

  Collective.

  **SEE ALSO:**

  *getMaxStepFailures*, *SNESSetMaxNonlinearStepFailures*

  *Source code at petsc4py/PETSc/SNES.pyx:1574*

  - **Parameters**

    **max\_fails** (*int*)

  - **Return type**

    *None*

- **setMonitor(monitor, args=None, kargs=None)**

  Set the callback used to monitor solver convergence.

  Logically collective.

  - **Parameters**

    - •

      **monitor** (*SNESMonitorFunction \| None*) -- The callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getMonitor*, *SNESMonitorSet*

  *Source code at petsc4py/PETSc/SNES.pyx:1446*

- **setNGS(ngs, args=None, kargs=None)**

  Set the callback to compute nonlinear Gauss-Seidel.

  Logically collective.

  - **Parameters**

    - •

      **ngs** (*SNESNGSFunction \| None*) -- The nonlinear Gauss-Seidel callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getNGS*, *computeNGS*, *SNESSetNGS*

  *Source code at petsc4py/PETSc/SNES.pyx:1088*

- **setNPC(snes)**

  Set the nonlinear preconditioner.

  Logically collective.

  **SEE ALSO:**

  *getNPC*, *hasNPC*, *setNPCSide*, *getNPCSide*, *SNESSetNPC*

  *Source code at petsc4py/PETSc/SNES.pyx:691*

  - **Parameters**

    **snes** (*SNES*)

  - **Return type**

    *None*

- **setNPCSide(side)**

  Set the nonlinear preconditioning side.

  Collective.

  **SEE ALSO:**

  *setNPC*, *getNPC*, *hasNPC*, *getNPCSide*, *SNESSetNPCSide*

  *Source code at petsc4py/PETSc/SNES.pyx:703*

  - **Parameters**

    **side** (*Side*)

  - **Return type**

    *None*

- **setNormSchedule(normsched)**

  Set the norm schedule.

  Collective.

  **SEE ALSO:**

  *getNormSchedule*, *SNESSetNormSchedule*

  *Source code at petsc4py/PETSc/SNES.pyx:1253*

  - **Parameters**

    **normsched** (*NormSchedule*)

  - **Return type**

    *None*

- **setObjective(objective, args=None, kargs=None)**

  Set the callback to compute the objective function.

  Logically collective.

  - **Parameters**

    - •

      **objective** (*SNESObjFunction \| None*) -- The Jacobian callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getObjective*, *SNESSetObjective*

  *Source code at petsc4py/PETSc/SNES.pyx:982*

- **setOptionsPrefix(prefix)**

  Set the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *SNESSetOptionsPrefix*

  *Source code at petsc4py/PETSc/SNES.pyx:199*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **setParamsEW(version=None, rtol\_0=None, rtol\_max=None, gamma=None, alpha=None, alpha2=None, threshold=None)**

  Set the parameters for the Eisenstat and Walker trick.

  Logically collective.

  - **Parameters**

    - •

      **version** (*int*) -- The version of the algorithm. Defaults to *CURRENT*.

    - •

      **rtol\_0** (*float*) -- The initial relative residual norm. Defaults to *CURRENT*.

    - •

      **rtol\_max** (*float*) -- The maximum relative residual norm. Defaults to *CURRENT*.

    - •

      **gamma** (*float*) -- Parameter. Defaults to *CURRENT*.

    - •

      **alpha** (*float*) -- Parameter. Defaults to *CURRENT*.

    - •

      **alpha2** (*float*) -- Parameter. Defaults to *CURRENT*.

    - •

      **threshold** (*float*) -- Parameter. Defaults to *CURRENT*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setUseEW*, *getParamsEW*, *SNESKSPSetParametersEW*

  *Source code at petsc4py/PETSc/SNES.pyx:1988*

- **setPatchCellNumbering(sec)**

  Set cell patch numbering.

  *Source code at petsc4py/PETSc/SNES.pyx:2328*

  - **Parameters**

    **sec** (*Section*)

  - **Return type**

    *None*

- **setPatchComputeFunction(function, args=None, kargs=None)**

  Set patch compute function.

  *Source code at petsc4py/PETSc/SNES.pyx:2381*

  - **Return type**

    *None*

- **setPatchComputeOperator(operator, args=None, kargs=None)**

  Set patch compute operator.

  *Source code at petsc4py/PETSc/SNES.pyx:2373*

  - **Return type**

    *None*

- **setPatchConstructType(typ, operator=None, args=None, kargs=None)**

  Set patch construct type.

  *Source code at petsc4py/PETSc/SNES.pyx:2389*

  - **Return type**

    *None*

- **setPatchDiscretisationInfo(dms, bs, cellNodeMaps, subspaceOffsets, ghostBcNodes, globalBcNodes)**

  Set patch discretisation information.

  *Source code at petsc4py/PETSc/SNES.pyx:2332*

  - **Return type**

    *None*

- **setPythonContext(context)**

  Set the instance of the class implementing the required Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python nonlinear solver type (TODO)*, *getPythonContext*

  *Source code at petsc4py/PETSc/SNES.pyx:2204*

  - **Parameters**

    **context** (*Any*)

  - **Return type**

    *None*

- **setPythonType(py\_type)**

  Set the fully qualified Python name of the class to be used.

  Collective.

  **SEE ALSO:**

  *PETSc Python nonlinear solver type (TODO)*, *setPythonContext*, *getPythonType*, *SNESPythonSetType*

  *Source code at petsc4py/PETSc/SNES.pyx:2231*

  - **Parameters**

    **py\_type** (*str*)

  - **Return type**

    *None*

- **setResetCounters(reset=True)**

  Set the flag to reset the counters.

  Collective.

  **SEE ALSO:**

  *SNESSetCountersReset*

  *Source code at petsc4py/PETSc/SNES.pyx:1431*

  - **Parameters**

    **reset** (*bool*)

  - **Return type**

    *None*

- **setSolution(vec)**

  Set the vector used to store the solution.

  Collective.

  **SEE ALSO:**

  *getSolution*, *SNESSetSolution*

  *Source code at petsc4py/PETSc/SNES.pyx:1895*

  - **Parameters**

    **vec** (*Vec*)

  - **Return type**

    *None*

- **setTRTolerances(delta\_min=None, delta\_max=None, delta\_0=None)**

  Set the tolerance parameters used for the trust region.

  Logically collective.

  - **Parameters**

    - •

      **delta\_min** (*float*) -- The minimum allowed trust region size. Defaults to *CURRENT*.

    - •

      **delta\_max** (*float*) -- The maximum allowed trust region size. Defaults to *CURRENT*.

    - •

      **delta\_0** (*float*) -- The initial trust region size. Defaults to *CURRENT*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getTRTolerances*, *setTRUpdateParameters*, *SNESNewtonTRSetTolerances*

  *Source code at petsc4py/PETSc/SNES.pyx:310*

- **setTRUpdateParameters(eta1=None, eta2=None, eta3=None, t1=None, t2=None)**

  Set the update parameters used for the trust region.

  Logically collective.

  - **Parameters**

    - •

      **eta1** (*float*) -- The step acceptance tolerance. Defaults to *CURRENT*.

    - •

      **eta2** (*float*) -- The shrinking tolerance. Defaults to *CURRENT*.

    - •

      **eta3** (*float*) -- The enlarging tolerance. Defaults to *CURRENT*.

    - •

      **t1** (*float*) -- The shrinking factor. Defaults to *CURRENT*.

    - •

      **t2** (*float*) -- The enlarging factor. Defaults to *CURRENT*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setTRTolerances*, *getTRUpdateParameters*, *SNESNewtonTRSetUpdateParameters*

  *Source code at petsc4py/PETSc/SNES.pyx:361*

- **setTolerances(rtol=None, atol=None, stol=None, max\_it=None)**

  Set the tolerance parameters used in the solver convergence tests.

  Logically collective.

  - **Parameters**

    - •

      **rtol** (*float*) -- The relative norm of the residual, or *DETERMINE* to use the value when the object's type was set. Defaults to *CURRENT*.

    - •

      **atol** (*float*) -- The absolute norm of the residual, or *DETERMINE* to use the value when the object's type was set. Defaults to *CURRENT*.

    - •

      **stol** (*float*) -- The absolute norm of the step, or *DETERMINE* to use the value when the object's type was set. Defaults to *CURRENT*.

    - •

      **max\_it** (*int*) -- The maximum allowed number of iterations, or *DETERMINE* to use the value when the object's type was set. Defaults to *CURRENT*. Use *UNLIMITED* to have no maximum.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getTolerances*, *SNESSetTolerances*

  *Source code at petsc4py/PETSc/SNES.pyx:1156*

- **setType(snes\_type)**

  Set the type of the solver.

  Logically collective.

  - **Parameters**

    **snes\_type** (*Type \| str*) -- The type of the solver.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getType*, *SNESSetType*

  *Source code at petsc4py/PETSc/SNES.pyx:166*

- **setUp()**

  Set up the internal data structures for using the solver.

  Collective.

  **SEE ALSO:**

  *SNESSetUp*

  *Source code at petsc4py/PETSc/SNES.pyx:1665*

  - **Return type**

    *None*

- **setUpMatrices()**

  Ensures that matrices are available for Newton-like methods.

  Collective.

  This is only of use to implementers of custom SNES types.

  **SEE ALSO:**

  *setUp*, *SNESSetUpMatrices*

  *Source code at petsc4py/PETSc/SNES.pyx:1677*

  - **Return type**

    *None*

- **setUpdate(update, args=None, kargs=None)**

  Set the callback to compute update at the beginning of each step.

  Logically collective.

  - **Parameters**

    - •

      **update** (*SNESUpdateFunction \| None*) -- The callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getUpdate*, *SNESSetUpdate*

  *Source code at petsc4py/PETSc/SNES.pyx:873*

- **setUseEW(flag=True, \*targs, \*\*kargs)**

  Tell the solver to use the Eisenstat-Walker trick.

  Logically collective.

  - **Parameters**

    - •

      **flag** (*bool*) -- Whether or not to use the Eisenstat-Walker trick.

    - •

      **\*targs** (*Any*) -- Positional arguments for *setParamsEW*.

    - •

      **\*\*kargs** (*Any*) -- Keyword arguments for *setParamsEW*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getUseEW*, *setParamsEW*, *SNESKSPSetUseEW*

  *Source code at petsc4py/PETSc/SNES.pyx:1951*

- **setUseFD(flag=True)**

  Set the boolean flag to use coloring finite-differencing for Jacobian assembly.

  Logically collective.

  **SEE ALSO:**

  *getUseFD*

  *Source code at petsc4py/PETSc/SNES.pyx:2121*

  - **Return type**

    *None*

- **setUseKSP(flag=True)**

  Set the boolean flag indicating to use a linear solver.

  Logically collective.

  **SEE ALSO:**

  *getUseKSP*

  *Source code at petsc4py/PETSc/SNES.pyx:2065*

  - **Return type**

    *None*

- **setUseMF(flag=True)**

  Set the boolean flag indicating to use matrix-free finite-differencing.

  Logically collective.

  **SEE ALSO:**

  *getUseMF*

  *Source code at petsc4py/PETSc/SNES.pyx:2094*

  - **Return type**

    *None*

- **setVariableBounds(xl, xu)**

  Set the vector for the variable bounds.

  Collective.

  **SEE ALSO:**

  *SNESVISetVariableBounds*

  *Source code at petsc4py/PETSc/SNES.pyx:2150*

  - **Parameters**

    - •

      **xl** (*Vec*)

    - •

      **xu** (*Vec*)

  - **Return type**

    *None*

- **solve(b=None, x=None)**

  Solve the nonlinear equations.

  Collective.

  - **Parameters**

    - •

      **b** (*Vec \| None*) -- The affine right-hand side or *None* to use zero.

    - •

      **x** (*Vec \| None*) -- The starting vector or *None* to use the vector stored internally.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setSolution*, *getSolution*, *SNESSolve*

  *Source code at petsc4py/PETSc/SNES.pyx:1703*

- **view(viewer=None)**

  View the solver.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *SNESView*

  *Source code at petsc4py/PETSc/SNES.pyx:113*

Attributes Documentation

- **appctx**

  Application context.

  *Source code at petsc4py/PETSc/SNES.pyx:2405*

- **atol**

  Absolute residual tolerance.

  *Source code at petsc4py/PETSc/SNES.pyx:2486*

- **dm**

  *DM*.

  *Source code at petsc4py/PETSc/SNES.pyx:2415*

- **history**

  Convergence history.

  *Source code at petsc4py/PETSc/SNES.pyx:2538*

- **is\_converged**

  Boolean indicating if the solver has converged.

  *Source code at petsc4py/PETSc/SNES.pyx:2558*

- **is\_diverged**

  Boolean indicating if the solver has failed.

  *Source code at petsc4py/PETSc/SNES.pyx:2563*

- **is\_iterating**

  Boolean indicating if the solver has not converged yet.

  *Source code at petsc4py/PETSc/SNES.pyx:2553*

- **its**

  Number of iterations.

  *Source code at petsc4py/PETSc/SNES.pyx:2522*

- **ksp**

  Linear solver.

  *Source code at petsc4py/PETSc/SNES.pyx:2452*

- **max\_funcs**

  Maximum number of function evaluations.

  *Source code at petsc4py/PETSc/SNES.pyx:2512*

- **max\_it**

  Maximum number of iterations.

  *Source code at petsc4py/PETSc/SNES.pyx:2502*

- **norm**

  Function norm.

  *Source code at petsc4py/PETSc/SNES.pyx:2530*

- **npc**

  Nonlinear preconditioner.

  *Source code at petsc4py/PETSc/SNES.pyx:2425*

- **reason**

  Converged reason.

  *Source code at petsc4py/PETSc/SNES.pyx:2545*

- **rtol**

  Relative residual tolerance.

  *Source code at petsc4py/PETSc/SNES.pyx:2478*

- **stol**

  Solution update tolerance.

  *Source code at petsc4py/PETSc/SNES.pyx:2494*

- **use\_ew**

  Use the Eisenstat-Walker trick.

  *Source code at petsc4py/PETSc/SNES.pyx:2468*

- **use\_fd**

  Boolean indicating if the solver uses coloring finite-differencing.

  *Source code at petsc4py/PETSc/SNES.pyx:2578*

- **use\_ksp**

  Boolean indicating if the solver uses a linear solver.

  *Source code at petsc4py/PETSc/SNES.pyx:2460*

- **use\_mf**

  Boolean indicating if the solver uses matrix-free finite-differencing.

  *Source code at petsc4py/PETSc/SNES.pyx:2570*

- **vec\_rhs**

  Right-hand side vector.

  *Source code at petsc4py/PETSc/SNES.pyx:2445*

- **vec\_sol**

  Solution vector.

  *Source code at petsc4py/PETSc/SNES.pyx:2435*

- **vec\_upd**

  Update vector.

  *Source code at petsc4py/PETSc/SNES.pyx:2440*

### petsc4py.PETSc.Scatter

- **class petsc4py.PETSc.Scatter**

  Bases: *Object*

  Scatter object.

  The object used to perform data movement between vectors. Scatter is described in the *PETSc manual*.

  **SEE ALSO:**

  *Vec*, *SF*, *VecScatter*

  Enumerations

  | | |
  | --- | --- |
  | *Mode* | Scatter mode. |
  | *Type* | Scatter type. |

### petsc4py.PETSc.Scatter.Mode

- **class petsc4py.PETSc.Scatter.Mode**

  Bases: *object*

  Scatter mode.

  Most commonly used scatter modes are:

  - ***FORWARD***

    Scatter values in the forward direction.

  - ***REVERSE***

    Scatter values in the reverse direction.

  **SEE ALSO:**

  *Scatter.create*, *Scatter.begin*, *Scatter.end*, *ScatterMode*

  Attributes Summary

  | | |
  | --- | --- |
  | *FORWARD* | Constant **FORWARD** of type *int* |
  | *FORWARD\_LOCAL* | Constant **FORWARD\_LOCAL** of type *int* |
  | *REVERSE* | Constant **REVERSE** of type *int* |
  | *REVERSE\_LOCAL* | Constant **REVERSE\_LOCAL** of type *int* |
  | *SCATTER\_FORWARD* | Constant **SCATTER\_FORWARD** of type *int* |
  | *SCATTER\_FORWARD\_LOCAL* | Constant **SCATTER\_FORWARD\_LOCAL** of type *int* |
  | *SCATTER\_REVERSE* | Constant **SCATTER\_REVERSE** of type *int* |
  | *SCATTER\_REVERSE\_LOCAL* | Constant **SCATTER\_REVERSE\_LOCAL** of type *int* |

  Attributes Documentation

  - **FORWARD: *int* = FORWARD**

    Constant **FORWARD** of type *int*

  - **FORWARD\_LOCAL: *int* = FORWARD\_LOCAL**

    Constant **FORWARD\_LOCAL** of type *int*

  - **REVERSE: *int* = REVERSE**

    Constant **REVERSE** of type *int*

  - **REVERSE\_LOCAL: *int* = REVERSE\_LOCAL**

    Constant **REVERSE\_LOCAL** of type *int*

  - **SCATTER\_FORWARD: *int* = SCATTER\_FORWARD**

    Constant **SCATTER\_FORWARD** of type *int*

  - **SCATTER\_FORWARD\_LOCAL: *int* = SCATTER\_FORWARD\_LOCAL**

    Constant **SCATTER\_FORWARD\_LOCAL** of type *int*

  - **SCATTER\_REVERSE: *int* = SCATTER\_REVERSE**

    Constant **SCATTER\_REVERSE** of type *int*

  - **SCATTER\_REVERSE\_LOCAL: *int* = SCATTER\_REVERSE\_LOCAL**

    Constant **SCATTER\_REVERSE\_LOCAL** of type *int*

### petsc4py.PETSc.Scatter.Type

- **class petsc4py.PETSc.Scatter.Type**

  Bases: *object*

  Scatter type.

  **SEE ALSO:**

  *VecScatterType*

  Attributes Summary

  | | |
  | --- | --- |
  | *ALLGATHER* | Object **ALLGATHER** of type *str* |
  | *ALLGATHERV* | Object **ALLGATHERV** of type *str* |
  | *ALLTOALL* | Object **ALLTOALL** of type *str* |
  | *BASIC* | Object **BASIC** of type *str* |
  | *GATHER* | Object **GATHER** of type *str* |
  | *GATHERV* | Object **GATHERV** of type *str* |
  | *NEIGHBOR* | Object **NEIGHBOR** of type *str* |
  | *WINDOW* | Object **WINDOW** of type *str* |

  Attributes Documentation

  - **ALLGATHER: *str* = ALLGATHER**

    Object **ALLGATHER** of type *str*

  - **ALLGATHERV: *str* = ALLGATHERV**

    Object **ALLGATHERV** of type *str*

  - **ALLTOALL: *str* = ALLTOALL**

    Object **ALLTOALL** of type *str*

  - **BASIC: *str* = BASIC**

    Object **BASIC** of type *str*

  - **GATHER: *str* = GATHER**

    Object **GATHER** of type *str*

  - **GATHERV: *str* = GATHERV**

    Object **GATHERV** of type *str*

  - **NEIGHBOR: *str* = NEIGHBOR**

    Object **NEIGHBOR** of type *str*

  - **WINDOW: *str* = WINDOW**

    Object **WINDOW** of type *str*

Methods Summary

| | |
| --- | --- |
| *begin*(vec\_from, vec\_to\[, addv, mode\]) | Begin a generalized scatter from one vector into another. |
| *copy*() | Return a copy of the scatter. |
| *create*(vec\_from, is\_from, vec\_to, is\_to) | Create a scatter object. |
| *destroy*() | Destroy the scatter. |
| *end*(vec\_from, vec\_to\[, addv, mode\]) | Complete a generalized scatter from one vector into another. |
| *getType*() | Return the type of the scatter. |
| *scatter*(vec\_from, vec\_to\[, addv, mode\]) | Perform a generalized scatter from one vector into another. |
| *setFromOptions*() | Configure the scatter from the options database. |
| *setType*(scatter\_type) | Set the type of the scatter. |
| *setUp*() | Set up the internal data structures for using the scatter. |
| *toAll*(vec) | Create a scatter that communicates a vector to all sharing processes. |
| *toZero*(vec) | Create a scatter that communicates a vector to rank zero. |
| *view*(\[viewer\]) | View the scatter. |

Methods Documentation

- **begin(vec\_from, vec\_to, addv=None, mode=None)**

  Begin a generalized scatter from one vector into another.

  Collective.

  This call has to be concluded with a call to *end*. For additional details on the Parameters, see *scatter*.

  **SEE ALSO:**

  *create*, *end*, *VecScatterBegin*

  *Source code at petsc4py/PETSc/Scatter.pyx:262*

  - **Parameters**

    - •

      **vec\_from** (*Vec*)

    - •

      **vec\_to** (*Vec*)

    - •

      **addv** (*InsertModeSpec*)

    - •

      **mode** (*ScatterModeSpec*)

  - **Return type**

    *None*

- **copy()**

  Return a copy of the scatter.

  *Source code at petsc4py/PETSc/Scatter.pyx:199*

  - **Return type**

    *Scatter*

- **create(vec\_from, is\_from, vec\_to, is\_to)**

  Create a scatter object.

  Collective.

  - **Parameters**

    - •

      **vec\_from** (*Vec*) -- Representative vector from which to scatter the data.

    - •

      **is\_from** (*IS*) -- Indices of **vec\_from** to scatter. If *None*, use all indices.

    - •

      **vec\_to** (*Vec*) -- Representative vector to which scatter the data.

    - •

      **is\_to** (*IS*) -- Indices of **vec\_to** where to receive. If *None*, use all indices.

  - **Return type**

    *Self*

  Examples

  The scatter object can be used to repeatedly perform data movement. It is the PETSc equivalent of NumPy-like indexing and slicing, with support for parallel communications:

  ```
  >>> revmode = PETSc.Scatter.Mode.REVERSE
  >>> v1 = PETSc.Vec().createWithArray([1, 2, 3])
  >>> v2 = PETSc.Vec().createWithArray([0, 0, 0])
  >>> sct = PETSc.Scatter().create(v1,None,v2,None)
  >>> sct.scatter(v1,v2) # v2[:] = v1[:]
  >>> sct.scatter(v2,v1,mode=revmode) # v1[:] = v2[:]
  ```

  ```
  >>> revmode = PETSc.Scatter.Mode.REVERSE
  >>> v1 = PETSc.Vec().createWithArray([1, 2, 3, 4])
  >>> v2 = PETSc.Vec().createWithArray([0, 0])
  >>> is1 = PETSc.IS().createStride(2, 3, -2)
  >>> sct = PETSc.Scatter().create(v1,is1,v2,None)
  >>> sct.scatter(v1,v2) # v2[:] = v1[3:0:-2]
  >>> sct.scatter(v2,v1,mode=revmode) # v1[3:0:-2] = v2[:]
  ```

  **SEE ALSO:**

  *IS*, *VecScatterCreate*

  *Source code at petsc4py/PETSc/Scatter.pyx:90*

- **destroy()**

  Destroy the scatter.

  Collective.

  **SEE ALSO:**

  *VecScatterDestroy*

  *Source code at petsc4py/PETSc/Scatter.pyx:77*

  - **Return type**

    *Self*

- **end(vec\_from, vec\_to, addv=None, mode=None)**

  Complete a generalized scatter from one vector into another.

  Collective.

  This call has to be preceded by a call to *begin*. For additional details on the Parameters, see *scatter*.

  **SEE ALSO:**

  *create*, *begin*, *VecScatterEnd*

  *Source code at petsc4py/PETSc/Scatter.pyx:285*

  - **Parameters**

    - •

      **vec\_from** (*Vec*)

    - •

      **vec\_to** (*Vec*)

    - •

      **addv** (*InsertModeSpec*)

    - •

      **mode** (*ScatterModeSpec*)

  - **Return type**

    *None*

- **getType()**

  Return the type of the scatter.

  Not collective.

  **SEE ALSO:**

  *setType*, *VecScatterGetType*

  *Source code at petsc4py/PETSc/Scatter.pyx:160*

  - **Return type**

    *str*

- **scatter(vec\_from, vec\_to, addv=None, mode=None)**

  Perform a generalized scatter from one vector into another.

  Collective.

  - **Parameters**

    - •

      **vec\_from** (*Vec*) -- The source vector.

    - •

      **vec\_to** (*Vec*) -- The destination vector.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

    - •

      **mode** (*ScatterModeSpec*) -- Scatter mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *create*, *begin*, *end*, *VecScatterBegin*, *VecScatterEnd*

  *Source code at petsc4py/PETSc/Scatter.pyx:308*

- **setFromOptions()**

  Configure the scatter from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *VecScatterSetFromOptions*

  *Source code at petsc4py/PETSc/Scatter.pyx:174*

  - **Return type**

    *None*

- **setType(scatter\_type)**

  Set the type of the scatter.

  Logically collective.

  **SEE ALSO:**

  *getType*, *VecScatterSetType*

  *Source code at petsc4py/PETSc/Scatter.pyx:146*

  - **Parameters**

    **scatter\_type** (*Type \| str*)

  - **Return type**

    *None*

- **setUp()**

  Set up the internal data structures for using the scatter.

  Collective.

  **SEE ALSO:**

  *VecScatterSetUp*

  *Source code at petsc4py/PETSc/Scatter.pyx:186*

  - **Return type**

    *Self*

- **classmethod toAll(vec)**

  Create a scatter that communicates a vector to all sharing processes.

  Collective.

  - **Parameters**

    **vec** (*Vec*) -- The vector to scatter from.

  - **Return type**

    *tuple*\[*Scatter*, *Vec*\]

  Notes

  The created scatter will have the same communicator of **vec**. The method also returns an output vector of appropriate size to contain the result of the operation.

  **SEE ALSO:**

  *toZero*, *VecScatterCreateToAll*

  *Source code at petsc4py/PETSc/Scatter.pyx:205*

- **classmethod toZero(vec)**

  Create a scatter that communicates a vector to rank zero.

  Collective.

  - **Parameters**

    **vec** (*Vec*) -- The vector to scatter from.

  - **Return type**

    *tuple*\[*Scatter*, *Vec*\]

  Notes

  The created scatter will have the same communicator of **vec**. The method also returns an output vector of appropriate size to contain the result of the operation.

  **SEE ALSO:**

  *toAll*, *VecScatterCreateToZero*

  *Source code at petsc4py/PETSc/Scatter.pyx:233*

- **view(viewer=None)**

  View the scatter.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *VecScatterView*

  *Source code at petsc4py/PETSc/Scatter.pyx:58*

### petsc4py.PETSc.ScatterMode

- **class petsc4py.PETSc.ScatterMode**

  Bases: *object*

  Scatter mode.

  Most commonly used scatter modes are:

  - ***FORWARD***

    Scatter values in the forward direction.

  - ***REVERSE***

    Scatter values in the reverse direction.

  **SEE ALSO:**

  *Scatter.create*, *Scatter.begin*, *Scatter.end*, *ScatterMode*

  Attributes Summary

  | | |
  | --- | --- |
  | *FORWARD* | Constant **FORWARD** of type *int* |
  | *FORWARD\_LOCAL* | Constant **FORWARD\_LOCAL** of type *int* |
  | *REVERSE* | Constant **REVERSE** of type *int* |
  | *REVERSE\_LOCAL* | Constant **REVERSE\_LOCAL** of type *int* |
  | *SCATTER\_FORWARD* | Constant **SCATTER\_FORWARD** of type *int* |
  | *SCATTER\_FORWARD\_LOCAL* | Constant **SCATTER\_FORWARD\_LOCAL** of type *int* |
  | *SCATTER\_REVERSE* | Constant **SCATTER\_REVERSE** of type *int* |
  | *SCATTER\_REVERSE\_LOCAL* | Constant **SCATTER\_REVERSE\_LOCAL** of type *int* |

  Attributes Documentation

  - **FORWARD: *int* = FORWARD**

    Constant **FORWARD** of type *int*

  - **FORWARD\_LOCAL: *int* = FORWARD\_LOCAL**

    Constant **FORWARD\_LOCAL** of type *int*

  - **REVERSE: *int* = REVERSE**

    Constant **REVERSE** of type *int*

  - **REVERSE\_LOCAL: *int* = REVERSE\_LOCAL**

    Constant **REVERSE\_LOCAL** of type *int*

  - **SCATTER\_FORWARD: *int* = SCATTER\_FORWARD**

    Constant **SCATTER\_FORWARD** of type *int*

  - **SCATTER\_FORWARD\_LOCAL: *int* = SCATTER\_FORWARD\_LOCAL**

    Constant **SCATTER\_FORWARD\_LOCAL** of type *int*

  - **SCATTER\_REVERSE: *int* = SCATTER\_REVERSE**

    Constant **SCATTER\_REVERSE** of type *int*

  - **SCATTER\_REVERSE\_LOCAL: *int* = SCATTER\_REVERSE\_LOCAL**

    Constant **SCATTER\_REVERSE\_LOCAL** of type *int*

### petsc4py.PETSc.Section

- **class petsc4py.PETSc.Section**

  Bases: *Object*

  Mapping from integers in a range to unstructured set of integers.

  Methods Summary

  | | |
  | --- | --- |
  | *addConstraintDof*(point, numDof) | Increment the number of constrained DOFs for a given point. |
  | *addDof*(point, numDof) | Add **numDof** degrees of freedom associated with a given point. |
  | *addFieldConstraintDof*(point, field, numDof) | Add **numDof** constrained DOFs for a given field on a point. |
  | *addFieldDof*(point, field, numDof) | Add **numDof** DOFs associated with a field on a given point. |
  | *clone*() | Return a copy of the section. |
  | *create*(\[comm\]) | Allocate a section and set the map contents to the default. |
  | *createGlobalSection*(sf) | Create a section describing the global field layout. |
  | *destroy*() | Destroy a section. |
  | *getChart*() | Return the range in which points (indices) lie for this section. |
  | *getConstrainedStorageSize*() | Return the size capable of holding all unconstrained DOFs in a section. |
  | *getConstraintDof*(point) | Return the number of constrained DOFs associated with a given point. |
  | *getConstraintIndices*(point) | Return the point DOFs numbers which are constrained for a given point. |
  | *getDof*(point) | Return the number of degrees of freedom for a given point. |
  | *getFieldComponents*(field) | Return the number of field components for the given field. |
  | *getFieldConstraintDof*(point, field) | Return the number of constrained DOFs for a given field on a point. |
  | *getFieldConstraintIndices*(point, field) | Return the field DOFs numbers, in \[0, DOFs), which are constrained. |
  | *getFieldDof*(point, field) | Return the number of DOFs associated with a field on a given point. |
  | *getFieldName*(field) | Return the name of a field in the section. |
  | *getFieldOffset*(point, field) | Return the offset for the field DOFs on the given point. |
  | *getMaxDof*() | Return the maximum number of DOFs for any point in the section. |
  | *getNumFields*() | Return the number of fields in a section. |
  | *getOffset*(point) | Return the offset for the DOFs associated with the given point. |
  | *getOffsetRange*() | Return the full range of offsets, \[start, end), for a section. |
  | *getPermutation*() | Return the permutation that was set with *setPermutation*. |
  | *getStorageSize*() | Return the size capable of holding all the DOFs defined in a section. |
  | *reset*() | Free all section data. |
  | *setChart*(pStart, pEnd) | Set the range in which points (indices) lie for this section. |
  | *setConstraintDof*(point, numDof) | Set the number of constrained DOFs associated with a given point. |
  | *setConstraintIndices*(point, indices) | Set the point DOFs numbers, in \[0, DOFs), which are constrained. |
  | *setDof*(point, numDof) | Set the number of degrees of freedom associated with a given point. |
  | *setFieldComponents*(field, numComp) | Set the number of field components for the given field. |
  | *setFieldConstraintDof*(point, field, numDof) | Set the number of constrained DOFs for a given field on a point. |
  | *setFieldConstraintIndices*(point, field, indices) | Set the field DOFs numbers, in \[0, DOFs), which are constrained. |
  | *setFieldDof*(point, field, numDof) | Set the number of DOFs associated with a field on a given point. |
  | *setFieldName*(field, fieldName) | Set the name of a field in the section. |
  | *setFieldOffset*(point, field, offset) | Set the offset for the DOFs on the given field at a point. |
  | *setNumFields*(numFields) | Set the number of fields in a section. |
  | *setOffset*(point, offset) | Set the offset for the DOFs associated with the given point. |
  | *setPermutation*(perm) | Set the permutation for \[0, pEnd - pStart). |
  | *setUp*() | Calculate offsets. |
  | *view*(\[viewer\]) | View the section. |

  Methods Documentation

  - **addConstraintDof(point, numDof)**

    Increment the number of constrained DOFs for a given point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **numDof** (*int*) -- The number of additional DOFs which are fixed by constraints.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setConstraintDof*, *getConstraintDof*, *PetscSectionAddConstraintDof*

    *Source code at petsc4py/PETSc/Section.pyx:485*

  - **addDof(point, numDof)**

    Add **numDof** degrees of freedom associated with a given point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **numDof** (*int*) -- The number of additional DOFs.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setDof*, *getDof*, *PetscSectionAddDof*

    *Source code at petsc4py/PETSc/Section.pyx:354*

  - **addFieldConstraintDof(point, field, numDof)**

    Add **numDof** constrained DOFs for a given field on a point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **field** (*int*) -- The field.

      - •

        **numDof** (*int*) -- The number of additional DOFs which are fixed by constraints.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setFieldConstraintDof*, *getFieldConstraintDof*, *PetscSectionAddFieldConstraintDof*

    *Source code at petsc4py/PETSc/Section.pyx:557*

  - **addFieldDof(point, field, numDof)**

    Add **numDof** DOFs associated with a field on a given point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **field** (*int*) -- The field.

      - •

        **numDof** (*int*) -- The number of additional DOFs.

    - **Return type**

      *None*

    **SEE ALSO:**

    *setFieldDof*, *getFieldDof*, *PetscSectionAddFieldDof*

    *Source code at petsc4py/PETSc/Section.pyx:421*

  - **clone()**

    Return a copy of the section.

    Collective.

    The copy is shallow, if possible.

    **SEE ALSO:**

    *PetscSectionClone*

    *Source code at petsc4py/PETSc/Section.pyx:80*

    - **Return type**

      *Section*

  - **create(comm=None)**

    Allocate a section and set the map contents to the default.

    Collective.

    Typical calling sequence: - *create* - *setNumFields* - *setChart* - *setDof* - *setUp* - *getOffset* - *destroy*

    The *Section* object and methods are intended to be used in the PETSc Vec and Mat implementations. The indices returned by the *Section* are appropriate for the kind of *Vec* it is associated with. For example, if the vector being indexed is a local vector, we call the section a local section. If the section indexes a global vector, we call it a global section. For parallel vectors, like global vectors, we use negative indices to indicate DOFs owned by other processes.

    - **Parameters**

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *PetscSectionCreate*

    *Source code at petsc4py/PETSc/Section.pyx:42*

  - **createGlobalSection(sf)**

    Create a section describing the global field layout.

    Collective.

    The section describes the global field layout using the local section and an *SF* describing the section point overlap.

    If we have a set of local sections defining the layout of a set of local vectors, and also an *SF* to determine which section points are shared and the ownership, we can calculate a global section defining the parallel data layout, and the associated global vector.

    This gives negative sizes and offsets to points not owned by this process.

    **includeConstraints** and **localOffsets** parameters of the C API are always set to *False*.

    - **Parameters**

      **sf** (*SF*) -- The *SF* describing the parallel layout of the section points (leaves are unowned local points).

    - **Return type**

      *Section*

    **SEE ALSO:**

    *PetscSectionCreateGlobalSection*

    *Source code at petsc4py/PETSc/Section.pyx:846*

  - **destroy()**

    Destroy a section.

    Not collective.

    **SEE ALSO:**

    *PetscSectionDestroy*

    *Source code at petsc4py/PETSc/Section.pyx:29*

    - **Return type**

      *Self*

  - **getChart()**

    Return the range in which points (indices) lie for this section.

    Not collective.

    The range is \[pStart, pEnd), i.e., from the first point to one past the last point.

    **SEE ALSO:**

    *PetscSectionGetChart*

    *Source code at petsc4py/PETSc/Section.pyx:238*

    - **Return type**

      *tuple*\[*int*, *int*\]

  - **getConstrainedStorageSize()**

    Return the size capable of holding all unconstrained DOFs in a section.

    Not collective.

    **SEE ALSO:**

    *getStorageSize*, *PetscSectionGetConstrainedStorageSize*

    *Source code at petsc4py/PETSc/Section.pyx:720*

    - **Return type**

      *int*

  - **getConstraintDof(point)**

    Return the number of constrained DOFs associated with a given point.

    Not collective.

    - **Parameters**

      **point** (*int*) -- The point.

    - **Return type**

      *int*

    **SEE ALSO:**

    *setConstraintDof*, *PetscSectionGetConstraintDof*

    *Source code at petsc4py/PETSc/Section.pyx:445*

  - **getConstraintIndices(point)**

    Return the point DOFs numbers which are constrained for a given point.

    Not collective.

    The range is in \[0, DOFs).

    - **Parameters**

      **point** (*int*) -- The point.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *setConstraintIndices*, *PetscSectionGetConstraintIndices*

    *Source code at petsc4py/PETSc/Section.pyx:586*

  - **getDof(point)**

    Return the number of degrees of freedom for a given point.

    Not collective.

    In a global section, this value will be negative for points not owned by this process.

    - **Parameters**

      **point** (*int*) -- The point.

    - **Return type**

      *int*

    **SEE ALSO:**

    *setDof*, *addDof*, *PetscSectionGetDof*

    *Source code at petsc4py/PETSc/Section.pyx:311*

  - **getFieldComponents(field)**

    Return the number of field components for the given field.

    Not collective.

    - **Parameters**

      **field** (*int*) -- The field number.

    - **Return type**

      *int*

    **SEE ALSO:**

    *setFieldComponents*, *PetscSectionGetFieldComponents*

    *Source code at petsc4py/PETSc/Section.pyx:198*

  - **getFieldConstraintDof(point, field)**

    Return the number of constrained DOFs for a given field on a point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **field** (*int*) -- The field.

    - **Return type**

      *int*

    **SEE ALSO:**

    *setFieldConstraintDof*, *PetscSectionGetFieldConstraintDof*

    *Source code at petsc4py/PETSc/Section.pyx:506*

  - **getFieldConstraintIndices(point, field)**

    Return the field DOFs numbers, in \[0, DOFs), which are constrained.

    Not collective.

    The constrained DOFs are sorted in ascending order.

    - **Parameters**

      - •

        **field** (*int*) -- The field number.

      - •

        **point** (*int*) -- The point.

    - **Return type**

      *ArrayInt*

    **SEE ALSO:**

    *setFieldConstraintIndices*, *PetscSectionGetFieldConstraintIndices*

    *Source code at petsc4py/PETSc/Section.pyx:634*

  - **getFieldDof(point, field)**

    Return the number of DOFs associated with a field on a given point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **field** (*int*) -- The field.

    - **Return type**

      *int*

    **SEE ALSO:**

    *setFieldDof*, *PetscSectionGetFieldDof*

    *Source code at petsc4py/PETSc/Section.pyx:375*

  - **getFieldName(field)**

    Return the name of a field in the section.

    Not collective.

    - **Parameters**

      **field** (*int*) -- The field number.

    - **Return type**

      *str*

    **SEE ALSO:**

    *setFieldName*, *PetscSectionGetFieldName*

    *Source code at petsc4py/PETSc/Section.pyx:156*

  - **getFieldOffset(point, field)**

    Return the offset for the field DOFs on the given point.

    Not collective.

    In a global section, this offset will be negative for points not owned by this process.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **field** (*int*) -- The field.

    - **Return type**

      *int*

    **SEE ALSO:**

    *setFieldOffset*, *PetscSectionGetFieldOffset*

    *Source code at petsc4py/PETSc/Section.pyx:779*

  - **getMaxDof()**

    Return the maximum number of DOFs for any point in the section.

    Not collective.

    **SEE ALSO:**

    *PetscSectionGetMaxDof*

    *Source code at petsc4py/PETSc/Section.pyx:692*

    - **Return type**

      *int*

  - **getNumFields()**

    Return the number of fields in a section.

    Not collective.

    Returns **0** if no fields were defined.

    **SEE ALSO:**

    *setNumFields*, *PetscSectionGetNumFields*

    *Source code at petsc4py/PETSc/Section.pyx:122*

    - **Return type**

      *int*

  - **getOffset(point)**

    Return the offset for the DOFs associated with the given point.

    Not collective.

    In a global section, this offset will be negative for points not owned by this process.

    - **Parameters**

      **point** (*int*) -- The point.

    - **Return type**

      *int*

    **SEE ALSO:**

    *setOffset*, *PetscSectionGetOffset*

    *Source code at petsc4py/PETSc/Section.pyx:734*

  - **getOffsetRange()**

    Return the full range of offsets, \[start, end), for a section.

    Not collective.

    **SEE ALSO:**

    *PetscSectionGetOffsetRange*

    *Source code at petsc4py/PETSc/Section.pyx:831*

    - **Return type**

      *tuple*\[*int*, *int*\]

  - **getPermutation()**

    Return the permutation that was set with *setPermutation*.

    Not collective.

    **SEE ALSO:**

    *setPermutation*, *PetscSectionGetPermutation*

    *Source code at petsc4py/PETSc/Section.pyx:279*

    - **Return type**

      *IS*

  - **getStorageSize()**

    Return the size capable of holding all the DOFs defined in a section.

    Not collective.

    **SEE ALSO:**

    *getConstrainedStorageSize*, *PetscSectionGetStorageSize*

    *Source code at petsc4py/PETSc/Section.pyx:706*

    - **Return type**

      *int*

  - **reset()**

    Free all section data.

    Not collective.

    **SEE ALSO:**

    *PetscSectionReset*

    *Source code at petsc4py/PETSc/Section.pyx:110*

    - **Return type**

      *None*

  - **setChart(pStart, pEnd)**

    Set the range in which points (indices) lie for this section.

    Not collective.

    The range is \[pStart, pEnd), i.e., from the first point to one past the last point.

    - **Parameters**

      - •

        **pStart** (*int*) -- The first point.

      - •

        **pEnd** (*int*) -- One past the last point.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscSectionSetChart*

    *Source code at petsc4py/PETSc/Section.pyx:255*

  - **setConstraintDof(point, numDof)**

    Set the number of constrained DOFs associated with a given point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **numDof** (*int*) -- The number of DOFs which are fixed by constraints.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getConstraintDof*, *addConstraintDof*, *PetscSectionSetConstraintDof*

    *Source code at petsc4py/PETSc/Section.pyx:464*

  - **setConstraintIndices(point, indices)**

    Set the point DOFs numbers, in \[0, DOFs), which are constrained.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **indices** (*Sequence\[int\]*) -- The constrained DOFs.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getConstraintIndices*, *PetscSectionSetConstraintIndices*

    *Source code at petsc4py/PETSc/Section.pyx:610*

  - **setDof(point, numDof)**

    Set the number of degrees of freedom associated with a given point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **numDof** (*int*) -- The number of DOFs.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getDof*, *addDof*, *PetscSectionSetDof*

    *Source code at petsc4py/PETSc/Section.pyx:333*

  - **setFieldComponents(field, numComp)**

    Set the number of field components for the given field.

    Not collective.

    - **Parameters**

      - •

        **field** (*int*) -- The field number.

      - •

        **numComp** (*int*) -- The number of field components.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getFieldComponents*, *PetscSectionSetFieldComponents*

    *Source code at petsc4py/PETSc/Section.pyx:217*

  - **setFieldConstraintDof(point, field, numDof)**

    Set the number of constrained DOFs for a given field on a point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **field** (*int*) -- The field.

      - •

        **numDof** (*int*) -- The number of DOFs which are fixed by constraints.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getFieldConstraintDof*, *addFieldConstraintDof*, *PetscSectionSetFieldConstraintDof*

    *Source code at petsc4py/PETSc/Section.pyx:528*

  - **setFieldConstraintIndices(point, field, indices)**

    Set the field DOFs numbers, in \[0, DOFs), which are constrained.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **field** (*int*) -- The field number.

      - •

        **indices** (*Sequence\[int\]*) -- The constrained DOFs.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getFieldConstraintIndices*, *PetscSectionSetFieldConstraintIndices*

    *Source code at petsc4py/PETSc/Section.pyx:661*

  - **setFieldDof(point, field, numDof)**

    Set the number of DOFs associated with a field on a given point.

    Not collective.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **field** (*int*) -- The field.

      - •

        **numDof** (*int*) -- The number of DOFs.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getFieldDof*, *addFieldDof*, *PetscSectionSetFieldDof*

    *Source code at petsc4py/PETSc/Section.pyx:397*

  - **setFieldName(field, fieldName)**

    Set the name of a field in the section.

    Not collective.

    - **Parameters**

      - •

        **field** (*int*) -- The field number.

      - •

        **fieldName** (*str*) -- The field name.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getFieldName*, *PetscSectionSetFieldName*

    *Source code at petsc4py/PETSc/Section.pyx:176*

  - **setFieldOffset(point, field, offset)**

    Set the offset for the DOFs on the given field at a point.

    Not collective.

    The user usually does not call this function, but uses *setUp*.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **field** (*int*) -- The field.

      - •

        **offset** (*int*) -- The offset.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getFieldOffset*, *PetscSectionSetFieldOffset*

    *Source code at petsc4py/PETSc/Section.pyx:805*

  - **setNumFields(numFields)**

    Set the number of fields in a section.

    Not collective.

    - **Parameters**

      **numFields** (*int*) -- The number of fields.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getNumFields*, *PetscSectionSetNumFields*

    *Source code at petsc4py/PETSc/Section.pyx:138*

  - **setOffset(point, offset)**

    Set the offset for the DOFs associated with the given point.

    Not collective.

    The user usually does not call this function, but uses *setUp*.

    - **Parameters**

      - •

        **point** (*int*) -- The point.

      - •

        **offset** (*int*) -- The offset.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getOffset*, *PetscSectionSetOffset*

    *Source code at petsc4py/PETSc/Section.pyx:756*

  - **setPermutation(perm)**

    Set the permutation for \[0, pEnd - pStart).

    Not collective.

    - **Parameters**

      **perm** (*IS*) -- The permutation of points.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getPermutation*, *PetscSectionSetPermutation*

    *Source code at petsc4py/PETSc/Section.pyx:294*

  - **setUp()**

    Calculate offsets.

    Not collective.

    Offsets are based on the number of degrees of freedom for each point.

    **SEE ALSO:**

    *PetscSectionSetUp*

    *Source code at petsc4py/PETSc/Section.pyx:96*

    - **Return type**

      *None*

  - **view(viewer=None)**

    View the section.

    Collective.

    - **Parameters**

      **viewer** (*Viewer \| None*) -- A *Viewer* to display the section.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscSectionView*

    *Source code at petsc4py/PETSc/Section.pyx:10*

### petsc4py.PETSc.Space

- **class petsc4py.PETSc.Space**

  Bases: *Object*

  Function space object.

  Enumerations

  | | |
  | --- | --- |
  | *Type* | The function space types. |

### petsc4py.PETSc.Space.Type

- **class petsc4py.PETSc.Space.Type**

  Bases: *object*

  The function space types.

  Attributes Summary

  | | |
  | --- | --- |
  | *POINT* | Object **POINT** of type *str* |
  | *POLYNOMIAL* | Object **POLYNOMIAL** of type *str* |
  | *PTRIMMED* | Object **PTRIMMED** of type *str* |
  | *SUBSPACE* | Object **SUBSPACE** of type *str* |
  | *SUM* | Object **SUM** of type *str* |
  | *TENSOR* | Object **TENSOR** of type *str* |
  | *WXY* | Object **WXY** of type *str* |

  Attributes Documentation

  - **POINT: *str* = POINT**

    Object **POINT** of type *str*

  - **POLYNOMIAL: *str* = POLYNOMIAL**

    Object **POLYNOMIAL** of type *str*

  - **PTRIMMED: *str* = PTRIMMED**

    Object **PTRIMMED** of type *str*

  - **SUBSPACE: *str* = SUBSPACE**

    Object **SUBSPACE** of type *str*

  - **SUM: *str* = SUM**

    Object **SUM** of type *str*

  - **TENSOR: *str* = TENSOR**

    Object **TENSOR** of type *str*

  - **WXY: *str* = WXY**

    Object **WXY** of type *str*

Methods Summary

| | |
| --- | --- |
| *create*(\[comm\]) | Create an empty *Space* object. |
| *destroy*() | Destroy the *Space* object. |
| *getDegree*() | Return the polynomial degrees that characterize this space. |
| *getDimension*() | Return the number of basis vectors. |
| *getNumComponents*() | Return the number of components for this space. |
| *getNumVariables*() | Return the number of variables for this space. |
| *getPTrimmedFormDegree*() | Return the form degree of the trimmed polynomials. |
| *getPointPoints*() | Return the evaluation points for the space as the points of a quad. |
| *getPolynomialTensor*() | Return whether a function space is a space of tensor polynomials. |
| *getSumConcatenate*() | Return the concatenate flag for this space. |
| *getSumNumSubspaces*() | Return the number of spaces in the sum. |
| *getSumSubspace*(s) | Return a space in the sum. |
| *getTensorNumSubspaces*() | Return the number of spaces in the tensor product. |
| *getTensorSubspace*(s) | Return a space in the tensor product. |
| *getType*() | Return the type of the space object. |
| *setDegree*(degree, maxDegree) | Set the degree of approximation for this space. |
| *setFromOptions*() | Set parameters in *Space* from the options database. |
| *setNumComponents*(nc) | Set the number of components for this space. |
| *setNumVariables*(n) | Set the number of variables for this space. |
| *setPTrimmedFormDegree*(formDegree) | Set the form degree of the trimmed polynomials. |
| *setPointPoints*(quad) | Set the evaluation points for the space to be based on a quad. |
| *setPolynomialTensor*(tensor) | Set whether a function space is a space of tensor polynomials. |
| *setSumConcatenate*(concatenate) | Set the concatenate flag for this space. |
| *setSumNumSubspaces*(numSumSpaces) | Set the number of spaces in the sum. |
| *setSumSubspace*(s, subsp) | Set a space in the sum. |
| *setTensorNumSubspaces*(numTensSpaces) | Set the number of spaces in the tensor product. |
| *setTensorSubspace*(s, subsp) | Set a space in the tensor product. |
| *setType*(space\_type) | Build a particular type of space. |
| *setUp*() | Construct data structures for the *Space*. |
| *view*(\[viewer\]) | View a *Space*. |

Methods Documentation

- **create(comm=None)**

  Create an empty *Space* object.

  Collective.

  The type can then be set with *setType*.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PetscSpaceCreate*

  *Source code at petsc4py/PETSc/Space.pyx:36*

- **destroy()**

  Destroy the *Space* object.

  Collective.

  **SEE ALSO:**

  *PetscSpaceDestroy*

  *Source code at petsc4py/PETSc/Space.pyx:59*

  - **Return type**

    *Self*

- **getDegree()**

  Return the polynomial degrees that characterize this space.

  Not collective.

  - **Returns**

    - •

      **minDegree** (*int*) -- The degree of the largest polynomial space contained in the space.

    - •

      **maxDegree** (*int*) -- The degree of the smallest polynomial space containing the space.

  - **Return type**

    *tuple*\[*int*, *int*\]

  **SEE ALSO:**

  *setDegree*, *PetscSpaceGetDegree*

  *Source code at petsc4py/PETSc/Space.pyx:117*

- **getDimension()**

  Return the number of basis vectors.

  Not collective.

  **SEE ALSO:**

  *PetscSpaceGetDimension*

  *Source code at petsc4py/PETSc/Space.pyx:103*

  - **Return type**

    *int*

- **getNumComponents()**

  Return the number of components for this space.

  Not collective.

  **SEE ALSO:**

  *setNumComponents*, *PetscSpaceGetNumComponents*

  *Source code at petsc4py/PETSc/Space.pyx:195*

  - **Return type**

    *int*

- **getNumVariables()**

  Return the number of variables for this space.

  Not collective.

  **SEE ALSO:**

  *setNumVariables*, *PetscSpaceGetNumVariables*

  *Source code at petsc4py/PETSc/Space.pyx:163*

  - **Return type**

    *int*

- **getPTrimmedFormDegree()**

  Return the form degree of the trimmed polynomials.

  Not collective.

  **SEE ALSO:**

  *setPTrimmedFormDegree*, *PetscSpacePTrimmedGetFormDegree*

  *Source code at petsc4py/PETSc/Space.pyx:546*

  - **Return type**

    *int*

- **getPointPoints()**

  Return the evaluation points for the space as the points of a quad.

  Logically collective.

  **SEE ALSO:**

  *setPointPoints*, *PetscSpacePointGetPoints*

  *Source code at petsc4py/PETSc/Space.pyx:513*

  - **Return type**

    *Quad*

- **getPolynomialTensor()**

  Return whether a function space is a space of tensor polynomials.

  Not collective.

  Return *True* if a function space is a space of tensor polynomials (the space is spanned by polynomials whose degree in each variable is bounded by the given order), as opposed to polynomials (the space is spanned by polynomials whose total degree—summing over all variables is bounded by the given order).

  **SEE ALSO:**

  *setPolynomialTensor*, *PetscSpacePolynomialGetTensor*

  *Source code at petsc4py/PETSc/Space.pyx:448*

  - **Return type**

    *bool*

- **getSumConcatenate()**

  Return the concatenate flag for this space.

  Not collective.

  A concatenated sum space will have the number of components equal to the sum of the number of components of all subspaces. A non-concatenated, or direct sum space will have the same number of components as its subspaces.

  **SEE ALSO:**

  *setSumConcatenate*, *PetscSpaceSumGetConcatenate*

  *Source code at petsc4py/PETSc/Space.pyx:261*

  - **Return type**

    *bool*

- **getSumNumSubspaces()**

  Return the number of spaces in the sum.

  Not collective.

  **SEE ALSO:**

  *setSumNumSubspaces*, *PetscSpaceSumGetNumSubspaces*

  *Source code at petsc4py/PETSc/Space.pyx:304*

  - **Return type**

    *int*

- **getSumSubspace(s)**

  Return a space in the sum.

  Not collective.

  - **Parameters**

    **s** (*int*) -- The space number.

  - **Return type**

    *Space*

  **SEE ALSO:**

  *setSumSubspace*, *PetscSpaceSumGetSubspace*

  *Source code at petsc4py/PETSc/Space.pyx:318*

- **getTensorNumSubspaces()**

  Return the number of spaces in the tensor product.

  Not collective.

  **SEE ALSO:**

  *setTensorNumSubspaces*, *PetscSpaceTensorGetNumSubspaces*

  *Source code at petsc4py/PETSc/Space.pyx:376*

  - **Return type**

    *int*

- **getTensorSubspace(s)**

  Return a space in the tensor product.

  Not collective.

  - **Parameters**

    **s** (*int*) -- The space number.

  - **Return type**

    *Space*

  **SEE ALSO:**

  *setTensorSubspace*, *PetscSpaceTensorGetSubspace*

  *Source code at petsc4py/PETSc/Space.pyx:410*

- **getType()**

  Return the type of the space object.

  Not collective.

  **SEE ALSO:**

  *setType*, *PetscSpaceGetType*

  *Source code at petsc4py/PETSc/Space.pyx:227*

  - **Return type**

    *str*

- **setDegree(degree, maxDegree)**

  Set the degree of approximation for this space.

  Logically collective.

  One of **degree** and **maxDegree** can be *None*.

  - **Parameters**

    - •

      **degree** (*int \| None*) -- The degree of the largest polynomial space contained in the space.

    - •

      **maxDegree** (*int \| None*) -- The degree of the largest polynomial space containing the space.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getDegree*, *PetscSpaceSetDegree*

  *Source code at petsc4py/PETSc/Space.pyx:138*

- **setFromOptions()**

  Set parameters in *Space* from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *PetscSpaceSetFromOptions*

  *Source code at petsc4py/PETSc/Space.pyx:91*

  - **Return type**

    *None*

- **setNumComponents(nc)**

  Set the number of components for this space.

  Logically collective.

  - **Parameters**

    **nc** (*int*) -- The number of components.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getNumComponents*, *PetscSpaceSetNumComponents*

  *Source code at petsc4py/PETSc/Space.pyx:209*

- **setNumVariables(n)**

  Set the number of variables for this space.

  Logically collective.

  - **Parameters**

    **n** (*int*) -- The number of variables (**x**, **y**, **z** etc.).

  - **Return type**

    *None*

  **SEE ALSO:**

  *getNumVariables*, *PetscSpaceSetNumVariables*

  *Source code at petsc4py/PETSc/Space.pyx:177*

- **setPTrimmedFormDegree(formDegree)**

  Set the form degree of the trimmed polynomials.

  Logically collective.

  - **Parameters**

    **formDegree** (*int*) -- The form degree.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getPTrimmedFormDegree*, *PetscSpacePTrimmedSetFormDegree*

  *Source code at petsc4py/PETSc/Space.pyx:528*

- **setPointPoints(quad)**

  Set the evaluation points for the space to be based on a quad.

  Logically collective.

  Sets the evaluation points for the space to coincide with the points of a quadrature rule.

  - **Parameters**

    **quad** (*Quad*) -- The *Quad* defining the points.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getPointPoints*, *PetscSpacePointSetPoints*

  *Source code at petsc4py/PETSc/Space.pyx:493*

- **setPolynomialTensor(tensor)**

  Set whether a function space is a space of tensor polynomials.

  Logically collective.

  Set to *True* for a function space which is a space of tensor polynomials (the space is spanned by polynomials whose degree in each variable is bounded by the given order), as opposed to polynomials (the space is spanned by polynomials whose total degree—summing over all variables is bounded by the given order).

  - **Parameters**

    **tensor** (*bool*) -- *True* for a tensor polynomial space, *False* for a polynomial space.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getPolynomialTensor*, *PetscSpacePolynomialSetTensor*

  *Source code at petsc4py/PETSc/Space.pyx:468*

- **setSumConcatenate(concatenate)**

  Set the concatenate flag for this space.

  Logically collective.

  A concatenated sum space will have the number of components equal to the sum of the number of components of all subspaces. A non-concatenated, or direct sum space will have the same number of components as its subspaces.

  - **Parameters**

    **concatenate** (*bool*) -- *True* if subspaces are concatenated components, *False* if direct summands.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getSumConcatenate*, *PetscSpaceSumSetConcatenate*

  *Source code at petsc4py/PETSc/Space.pyx:280*

- **setSumNumSubspaces(numSumSpaces)**

  Set the number of spaces in the sum.

  Logically collective.

  - **Parameters**

    **numSumSpaces** (*int*) -- The number of spaces.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getSumNumSubspaces*, *PetscSpaceSumSetNumSubspaces*

  *Source code at petsc4py/PETSc/Space.pyx:358*

- **setSumSubspace(s, subsp)**

  Set a space in the sum.

  Logically collective.

  - **Parameters**

    - •

      **s** (*int*) -- The space number.

    - •

      **subsp** (*Space*) -- The number of spaces.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getSumSubspace*, *PetscSpaceSumSetSubspace*

  *Source code at petsc4py/PETSc/Space.pyx:338*

- **setTensorNumSubspaces(numTensSpaces)**

  Set the number of spaces in the tensor product.

  Logically collective.

  - **Parameters**

    **numTensSpaces** (*int*) -- The number of spaces.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getTensorNumSubspaces*, *PetscSpaceTensorSetNumSubspaces*

  *Source code at petsc4py/PETSc/Space.pyx:430*

- **setTensorSubspace(s, subsp)**

  Set a space in the tensor product.

  Logically collective.

  - **Parameters**

    - •

      **s** (*int*) -- The space number.

    - •

      **subsp** (*Space*) -- The number of spaces.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getTensorSubspace*, *PetscSpaceTensorSetSubspace*

  *Source code at petsc4py/PETSc/Space.pyx:390*

- **setType(space\_type)**

  Build a particular type of space.

  Collective.

  - **Parameters**

    **space\_type** (*Type \| str*) -- The kind of space.

  - **Return type**

    Self

  **SEE ALSO:**

  *getType*, *PetscSpaceSetType*

  *Source code at petsc4py/PETSc/Space.pyx:241*

- **setUp()**

  Construct data structures for the *Space*.

  Collective.

  **SEE ALSO:**

  *PetscSpaceSetUp*

  *Source code at petsc4py/PETSc/Space.pyx:24*

  - **Return type**

    *None*

- **view(viewer=None)**

  View a *Space*.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* to display the *Space*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *PetscSpaceView*

  *Source code at petsc4py/PETSc/Space.pyx:72*

### petsc4py.PETSc.Sys

- **class petsc4py.PETSc.Sys**

  Bases: *object*

  System utilities.

  Methods Summary

  | | |
  | --- | --- |
  | *Print*(\*args\[, sep, end, comm\]) | Print output from the first processor of a communicator. |
  | *getDefaultComm*() | Get the default MPI communicator used to create PETSc objects. |
  | *getVersion*(\[devel, date, author\]) | Return PETSc version information. |
  | *getVersionInfo*() | Return PETSc version information. |
  | *hasExternalPackage*(package) | Return whether PETSc has support for external package. |
  | *infoAllow*(flag\[, filename, mode\]) | Enables or disables PETSc info messages. |
  | *isFinalized*() | Return whether PETSc has been finalized. |
  | *isInitialized*() | Return whether PETSc has been initialized. |
  | *popErrorHandler*() | Remove the current error handler. |
  | *popSignalHandler*() | Remove the current signal handler. |
  | *pushErrorHandler*(errhandler) | Set the current error handler. |
  | *registerCitation*(citation) | Register BibTeX citation. |
  | *setDefaultComm*(comm) | Set the default MPI communicator used to create PETSc objects. |
  | *sleep*(\[seconds\]) | Sleep some number of seconds. |
  | *splitOwnership*(size\[, bsize, comm\]) | Given a global (or local) size determines a local (or global) size. |
  | *syncFlush*(\[comm\]) | Flush output from previous *syncPrint* calls. |
  | *syncPrint*(\*args\[, sep, end, flush, comm\]) | Print synchronized output from several processors of a communicator. |

  Methods Documentation

  - **classmethod Print(\*args, sep=' ', end='\\n', comm=None, \*\*kwargs)**

    Print output from the first processor of a communicator.

    Collective.

    - **Parameters**

      - •

        **\*args** (*Any*) -- Positional arguments.

      - •

        **sep** (*str*) -- String inserted between values, by default a space.

      - •

        **end** (*str*) -- String appended after the last value, by default a newline.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *getDefaultComm*.

      - •

        **\*\*kwargs** (*Any*) -- Keyword arguments.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscPrintf*

    *Source code at petsc4py/PETSc/Sys.pyx:155*

  - **classmethod getDefaultComm()**

    Get the default MPI communicator used to create PETSc objects.

    Not collective.

    **SEE ALSO:**

    *setDefaultComm*

    *Source code at petsc4py/PETSc/Sys.pyx:116*

    - **Return type**

      *Comm*

  - **classmethod getVersion(devel=False, date=False, author=False)**

    Return PETSc version information.

    Not collective.

    - **Parameters**

      - •

        **devel** (*bool*) -- Additionally, return whether using an in-development version.

      - •

        **date** (*bool*) -- Additionally, return date information.

      - •

        **author** (*bool*) -- Additionally, return author information.

    - **Returns**

      - •

        **major** (*int*) -- Major version number.

      - •

        **minor** (*int*) -- Minor version number.

      - •

        **micro** (*int*) -- Micro (or patch) version number.

    - **Return type**

      *tuple*\[*int*, *int*, *int*\]

    **SEE ALSO:**

    *PetscGetVersion*, *PetscGetVersionNumber*

    *Source code at petsc4py/PETSc/Sys.pyx:7*

  - **classmethod getVersionInfo()**

    Return PETSc version information.

    Not collective.

    - **Returns**

      **info** -- Dictionary with version information.

    - **Return type**

      *dict*

    **SEE ALSO:**

    *PetscGetVersion*, *PetscGetVersionNumber*

    *Source code at petsc4py/PETSc/Sys.pyx:62*

  - **classmethod hasExternalPackage(package)**

    Return whether PETSc has support for external package.

    Not collective.

    - **Parameters**

      **package** (*str*) -- The external package name.

    - **Return type**

      *bool*

    **SEE ALSO:**

    *PetscHasExternalPackage*

    *Source code at petsc4py/PETSc/Sys.pyx:449*

  - **classmethod infoAllow(flag, filename=None, mode='w')**

    Enables or disables PETSc info messages.

    Not collective.

    - **Parameters**

      - •

        **flag** (*bool*) -- Whether to enable info messages.

      - •

        **filename** (*str \| None*) -- Name of a file where to dump output.

      - •

        **mode** (*str*) -- Write mode for file, by default **"w"**.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscInfoAllow*, *PetscInfoSetFile*

    *Source code at petsc4py/PETSc/Sys.pyx:392*

  - **classmethod isFinalized()**

    Return whether PETSc has been finalized.

    Not collective.

    **SEE ALSO:**

    *isInitialized*

    *Source code at petsc4py/PETSc/Sys.pyx:101*

    - **Return type**

      *bool*

  - **classmethod isInitialized()**

    Return whether PETSc has been initialized.

    Not collective.

    **SEE ALSO:**

    *isFinalized*

    *Source code at petsc4py/PETSc/Sys.pyx:88*

    - **Return type**

      *bool*

  - **classmethod popErrorHandler()**

    Remove the current error handler.

    Logically collective.

    **SEE ALSO:**

    *PetscPopErrorHandler*

    *Source code at petsc4py/PETSc/Sys.pyx:366*

    - **Return type**

      *None*

  - **classmethod popSignalHandler()**

    Remove the current signal handler.

    Logically collective.

    **SEE ALSO:**

    *PetscPopSignalHandler*

    *Source code at petsc4py/PETSc/Sys.pyx:379*

    - **Return type**

      *None*

  - **classmethod pushErrorHandler(errhandler)**

    Set the current error handler.

    Logically collective.

    - **Parameters**

      **errhandler** (*str*) -- The name of the error handler.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscPushErrorHandler*

    *Source code at petsc4py/PETSc/Sys.pyx:331*

  - **classmethod registerCitation(citation)**

    Register BibTeX citation.

    Not collective.

    - **Parameters**

      **citation** (*str*) -- The BibTex citation entry to register.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscCitationsRegister*

    *Source code at petsc4py/PETSc/Sys.pyx:426*

  - **classmethod setDefaultComm(comm)**

    Set the default MPI communicator used to create PETSc objects.

    Logically collective.

    - **Parameters**

      **comm** (*Comm \| None*) -- MPI communicator. If set to *None*, uses *COMM\_WORLD*.

    - **Return type**

      *None*

    **SEE ALSO:**

    *getDefaultComm*

    *Source code at petsc4py/PETSc/Sys.pyx:131*

  - **classmethod sleep(seconds=1.0)**

    Sleep some number of seconds.

    Not collective.

    - **Parameters**

      **seconds** (*float*) -- Time to sleep in seconds.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscSleep*

    *Source code at petsc4py/PETSc/Sys.pyx:310*

  - **classmethod splitOwnership(size, bsize=None, comm=None)**

    Given a global (or local) size determines a local (or global) size.

    Collective.

    - **Parameters**

      - •

        **size** (*int \| tuple\[int, int\]*) -- Global size **N** or 2-tuple **(n, N)** with local and global sizes. Either of **n** or **N** (but not both) can be *None*.

      - •

        **bsize** (*int \| None*) -- Block size, defaults to **1**.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *getDefaultComm*.

    - **Returns**

      - •

        **n** (*int*) -- The local size.

      - •

        **N** (*int*) -- The global size.

    - **Return type**

      *tuple*\[*int*, *int*\]

    Notes

    The **size** argument corresponds to the full size of the vector. That is, an array with 10 blocks and a block size of 3 will have a **size** of 30, not 10.

    **SEE ALSO:**

    *PetscSplitOwnership*

    *Source code at petsc4py/PETSc/Sys.pyx:261*

  - **classmethod syncFlush(comm=None)**

    Flush output from previous *syncPrint* calls.

    Collective.

    - **Parameters**

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *getDefaultComm*.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscSynchronizedPrintf*, *PetscSynchronizedFlush*

    *Source code at petsc4py/PETSc/Sys.pyx:240*

  - **classmethod syncPrint(\*args, sep=' ', end='\\n', flush=False, comm=None, \*\*kwargs)**

    Print synchronized output from several processors of a communicator.

    Not collective.

    - **Parameters**

      - •

        **\*args** (*Any*) -- Positional arguments.

      - •

        **sep** (*str*) -- String inserted between values, by default a space.

      - •

        **end** (*str*) -- String appended after the last value, by default a newline.

      - •

        **flush** (*bool*) -- Whether to flush output with *syncFlush*.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *getDefaultComm*.

      - •

        **\*\*kwargs** (*Any*) -- Keyword arguments.

    - **Return type**

      *None*

    **SEE ALSO:**

    *PetscSynchronizedPrintf*, *PetscSynchronizedFlush*

    *Source code at petsc4py/PETSc/Sys.pyx:197*

### petsc4py.PETSc.TAO

- **class petsc4py.PETSc.TAO**

  Bases: *Object*

  Optimization solver.

  TAO is described in the *PETSc manual*.

  **SEE ALSO:**

  *Tao*

  Enumerations

  | | |
  | --- | --- |
  | *BNCGType* | TAO Bound Constrained Conjugate Gradient (BNCG) Update Type. |
  | *ConvergedReason* | TAO solver termination reason. |
  | *Type* | TAO solver type. |

### petsc4py.PETSc.TAO.BNCGType

- **class petsc4py.PETSc.TAO.BNCGType**

  Bases: *object*

  TAO Bound Constrained Conjugate Gradient (BNCG) Update Type.

  Attributes Summary

  | | |
  | --- | --- |
  | *DK* | Constant **DK** of type *int* |
  | *DY* | Constant **DY** of type *int* |
  | *FR* | Constant **FR** of type *int* |
  | *GD* | Constant **GD** of type *int* |
  | *HS* | Constant **HS** of type *int* |
  | *HZ* | Constant **HZ** of type *int* |
  | *KD* | Constant **KD** of type *int* |
  | *PCGD* | Constant **PCGD** of type *int* |
  | *PRP* | Constant **PRP** of type *int* |
  | *PRP\_PLUS* | Constant **PRP\_PLUS** of type *int* |
  | *SSML\_BFGS* | Constant **SSML\_BFGS** of type *int* |
  | *SSML\_BRDN* | Constant **SSML\_BRDN** of type *int* |
  | *SSML\_DFP* | Constant **SSML\_DFP** of type *int* |

  Attributes Documentation

  - **DK: *int* = DK**

    Constant **DK** of type *int*

  - **DY: *int* = DY**

    Constant **DY** of type *int*

  - **FR: *int* = FR**

    Constant **FR** of type *int*

  - **GD: *int* = GD**

    Constant **GD** of type *int*

  - **HS: *int* = HS**

    Constant **HS** of type *int*

  - **HZ: *int* = HZ**

    Constant **HZ** of type *int*

  - **KD: *int* = KD**

    Constant **KD** of type *int*

  - **PCGD: *int* = PCGD**

    Constant **PCGD** of type *int*

  - **PRP: *int* = PRP**

    Constant **PRP** of type *int*

  - **PRP\_PLUS: *int* = PRP\_PLUS**

    Constant **PRP\_PLUS** of type *int*

  - **SSML\_BFGS: *int* = SSML\_BFGS**

    Constant **SSML\_BFGS** of type *int*

  - **SSML\_BRDN: *int* = SSML\_BRDN**

    Constant **SSML\_BRDN** of type *int*

  - **SSML\_DFP: *int* = SSML\_DFP**

    Constant **SSML\_DFP** of type *int*

### petsc4py.PETSc.TAO.ConvergedReason

- **class petsc4py.PETSc.TAO.ConvergedReason**

  Bases: *object*

  TAO solver termination reason.

  **SEE ALSO:**

  *TaoConvergedReason*

  Attributes Summary

  | | |
  | --- | --- |
  | *CONTINUE\_ITERATING* | Constant **CONTINUE\_ITERATING** of type *int* |
  | *CONVERGED\_GATOL* | Constant **CONVERGED\_GATOL** of type *int* |
  | *CONVERGED\_GRTOL* | Constant **CONVERGED\_GRTOL** of type *int* |
  | *CONVERGED\_GTTOL* | Constant **CONVERGED\_GTTOL** of type *int* |
  | *CONVERGED\_ITERATING* | Constant **CONVERGED\_ITERATING** of type *int* |
  | *CONVERGED\_MINF* | Constant **CONVERGED\_MINF** of type *int* |
  | *CONVERGED\_STEPTOL* | Constant **CONVERGED\_STEPTOL** of type *int* |
  | *CONVERGED\_USER* | Constant **CONVERGED\_USER** of type *int* |
  | *DIVERGED\_LS\_FAILURE* | Constant **DIVERGED\_LS\_FAILURE** of type *int* |
  | *DIVERGED\_MAXFCN* | Constant **DIVERGED\_MAXFCN** of type *int* |
  | *DIVERGED\_MAXITS* | Constant **DIVERGED\_MAXITS** of type *int* |
  | *DIVERGED\_NAN* | Constant **DIVERGED\_NAN** of type *int* |
  | *DIVERGED\_TR\_REDUCTION* | Constant **DIVERGED\_TR\_REDUCTION** of type *int* |
  | *DIVERGED\_USER* | Constant **DIVERGED\_USER** of type *int* |
  | *ITERATING* | Constant **ITERATING** of type *int* |

  Attributes Documentation

  - **CONTINUE\_ITERATING: *int* = CONTINUE\_ITERATING**

    Constant **CONTINUE\_ITERATING** of type *int*

  - **CONVERGED\_GATOL: *int* = CONVERGED\_GATOL**

    Constant **CONVERGED\_GATOL** of type *int*

  - **CONVERGED\_GRTOL: *int* = CONVERGED\_GRTOL**

    Constant **CONVERGED\_GRTOL** of type *int*

  - **CONVERGED\_GTTOL: *int* = CONVERGED\_GTTOL**

    Constant **CONVERGED\_GTTOL** of type *int*

  - **CONVERGED\_ITERATING: *int* = CONVERGED\_ITERATING**

    Constant **CONVERGED\_ITERATING** of type *int*

  - **CONVERGED\_MINF: *int* = CONVERGED\_MINF**

    Constant **CONVERGED\_MINF** of type *int*

  - **CONVERGED\_STEPTOL: *int* = CONVERGED\_STEPTOL**

    Constant **CONVERGED\_STEPTOL** of type *int*

  - **CONVERGED\_USER: *int* = CONVERGED\_USER**

    Constant **CONVERGED\_USER** of type *int*

  - **DIVERGED\_LS\_FAILURE: *int* = DIVERGED\_LS\_FAILURE**

    Constant **DIVERGED\_LS\_FAILURE** of type *int*

  - **DIVERGED\_MAXFCN: *int* = DIVERGED\_MAXFCN**

    Constant **DIVERGED\_MAXFCN** of type *int*

  - **DIVERGED\_MAXITS: *int* = DIVERGED\_MAXITS**

    Constant **DIVERGED\_MAXITS** of type *int*

  - **DIVERGED\_NAN: *int* = DIVERGED\_NAN**

    Constant **DIVERGED\_NAN** of type *int*

  - **DIVERGED\_TR\_REDUCTION: *int* = DIVERGED\_TR\_REDUCTION**

    Constant **DIVERGED\_TR\_REDUCTION** of type *int*

  - **DIVERGED\_USER: *int* = DIVERGED\_USER**

    Constant **DIVERGED\_USER** of type *int*

  - **ITERATING: *int* = ITERATING**

    Constant **ITERATING** of type *int*

### petsc4py.PETSc.TAO.Type

- **class petsc4py.PETSc.TAO.Type**

  Bases: *object*

  TAO solver type.

  **SEE ALSO:**

  *TaoType*

  Attributes Summary

  | | |
  | --- | --- |
  | *ADMM* | Object **ADMM** of type *str* |
  | *ALMM* | Object **ALMM** of type *str* |
  | *ASFLS* | Object **ASFLS** of type *str* |
  | *ASILS* | Object **ASILS** of type *str* |
  | *BLMVM* | Object **BLMVM** of type *str* |
  | *BMRM* | Object **BMRM** of type *str* |
  | *BNCG* | Object **BNCG** of type *str* |
  | *BNLS* | Object **BNLS** of type *str* |
  | *BNTL* | Object **BNTL** of type *str* |
  | *BNTR* | Object **BNTR** of type *str* |
  | *BQNKLS* | Object **BQNKLS** of type *str* |
  | *BQNKTL* | Object **BQNKTL** of type *str* |
  | *BQNKTR* | Object **BQNKTR** of type *str* |
  | *BQNLS* | Object **BQNLS** of type *str* |
  | *BQPIP* | Object **BQPIP** of type *str* |
  | *BRGN* | Object **BRGN** of type *str* |
  | *CG* | Object **CG** of type *str* |
  | *GPCG* | Object **GPCG** of type *str* |
  | *IPM* | Object **IPM** of type *str* |
  | *LCL* | Object **LCL** of type *str* |
  | *LMVM* | Object **LMVM** of type *str* |
  | *NLS* | Object **NLS** of type *str* |
  | *NM* | Object **NM** of type *str* |
  | *NTL* | Object **NTL** of type *str* |
  | *NTR* | Object **NTR** of type *str* |
  | *OWLQN* | Object **OWLQN** of type *str* |
  | *PDIPM* | Object **PDIPM** of type *str* |
  | *POUNDERS* | Object **POUNDERS** of type *str* |
  | *PYTHON* | Object **PYTHON** of type *str* |
  | *SHELL* | Object **SHELL** of type *str* |
  | *SSFLS* | Object **SSFLS** of type *str* |
  | *SSILS* | Object **SSILS** of type *str* |
  | *TRON* | Object **TRON** of type *str* |

  Attributes Documentation

  - **ADMM: *str* = ADMM**

    Object **ADMM** of type *str*

  - **ALMM: *str* = ALMM**

    Object **ALMM** of type *str*

  - **ASFLS: *str* = ASFLS**

    Object **ASFLS** of type *str*

  - **ASILS: *str* = ASILS**

    Object **ASILS** of type *str*

  - **BLMVM: *str* = BLMVM**

    Object **BLMVM** of type *str*

  - **BMRM: *str* = BMRM**

    Object **BMRM** of type *str*

  - **BNCG: *str* = BNCG**

    Object **BNCG** of type *str*

  - **BNLS: *str* = BNLS**

    Object **BNLS** of type *str*

  - **BNTL: *str* = BNTL**

    Object **BNTL** of type *str*

  - **BNTR: *str* = BNTR**

    Object **BNTR** of type *str*

  - **BQNKLS: *str* = BQNKLS**

    Object **BQNKLS** of type *str*

  - **BQNKTL: *str* = BQNKTL**

    Object **BQNKTL** of type *str*

  - **BQNKTR: *str* = BQNKTR**

    Object **BQNKTR** of type *str*

  - **BQNLS: *str* = BQNLS**

    Object **BQNLS** of type *str*

  - **BQPIP: *str* = BQPIP**

    Object **BQPIP** of type *str*

  - **BRGN: *str* = BRGN**

    Object **BRGN** of type *str*

  - **CG: *str* = CG**

    Object **CG** of type *str*

  - **GPCG: *str* = GPCG**

    Object **GPCG** of type *str*

  - **IPM: *str* = IPM**

    Object **IPM** of type *str*

  - **LCL: *str* = LCL**

    Object **LCL** of type *str*

  - **LMVM: *str* = LMVM**

    Object **LMVM** of type *str*

  - **NLS: *str* = NLS**

    Object **NLS** of type *str*

  - **NM: *str* = NM**

    Object **NM** of type *str*

  - **NTL: *str* = NTL**

    Object **NTL** of type *str*

  - **NTR: *str* = NTR**

    Object **NTR** of type *str*

  - **OWLQN: *str* = OWLQN**

    Object **OWLQN** of type *str*

  - **PDIPM: *str* = PDIPM**

    Object **PDIPM** of type *str*

  - **POUNDERS: *str* = POUNDERS**

    Object **POUNDERS** of type *str*

  - **PYTHON: *str* = PYTHON**

    Object **PYTHON** of type *str*

  - **SHELL: *str* = SHELL**

    Object **SHELL** of type *str*

  - **SSFLS: *str* = SSFLS**

    Object **SSFLS** of type *str*

  - **SSILS: *str* = SSILS**

    Object **SSILS** of type *str*

  - **TRON: *str* = TRON**

    Object **TRON** of type *str*

Methods Summary

| | |
| --- | --- |
| *appendOptionsPrefix*(prefix) | Append to the prefix used for searching for options in the database. |
| *cancelMonitor*() | Cancel all the monitors of the solver. |
| *computeConstraints*(x, c) | Compute the vector corresponding to the constraints. |
| *computeDualVariables*(xl, xu) | Compute the dual vectors corresponding to variables' bounds. |
| *computeGradient*(x, g) | Compute the gradient of the objective function. |
| *computeHessian*(x, H\[, P\]) | Compute the Hessian of the objective function. |
| *computeJacobian*(x, J\[, P\]) | Compute the Jacobian. |
| *computeObjective*(x) | Compute the value of the objective function. |
| *computeObjectiveGradient*(x, g) | Compute the gradient of the objective function and its value. |
| *computeResidual*(x, f) | Compute the residual. |
| *computeVariableBounds*(xl, xu) | Compute the vectors corresponding to variables' bounds. |
| *create*(\[comm\]) | Create a TAO solver. |
| *createPython*(\[context, comm\]) | Create an optimization solver of Python type. |
| *destroy*() | Destroy the solver. |
| *getAppCtx*() | Return the application context. |
| *getBNCGType*() | Return the type of the BNCG solver. |
| *getBRGNDampingVector*() | Return the damping vector. |
| *getBRGNSubsolver*() | Return the subsolver inside the BRGN solver. |
| *getConstraintTolerances*() | Return the constraints tolerance parameters used in the convergence tests. |
| *getConvergedReason*() | Return the termination flag. |
| *getConvergenceTest*() | Return the callback used to test for solver convergence. |
| *getGradient*() | Return the vector used to store the gradient and the evaluation callback. |
| *getGradientNorm*() | Return the matrix used to compute inner products. |
| *getHessian*() | Return the matrices used to store the Hessian and the evaluation callback. |
| *getIterationNumber*() | Return the current iteration number. |
| *getKSP*() | Return the linear solver used by the nonlinear solver. |
| *getLMVMH0*() | Return the initial Hessian for the quasi-Newton approximation. |
| *getLMVMH0KSP*() | Return the *KSP* for the inverse of the initial Hessian approximation. |
| *getLineSearch*() | Return the TAO Line Search object. |
| *getMaximumFunctionEvaluations*() | Return the maximum number of objective evaluations within the solver. |
| *getMaximumIterations*() | Return the maximum number of solver iterations. |
| *getMonitor*() | Return the callback used to monitor solver convergence. |
| *getObjectiveAndGradient*() | Return the vector used to store the gradient and the evaluation callback. |
| *getObjectiveValue*() | Return the current value of the objective function. |
| *getOptionsPrefix*() | Return the prefix used for searching for options in the database. |
| *getPythonContext*() | Return the instance of the class implementing the required Python methods. |
| *getPythonType*() | Return the fully qualified Python name of the class used by the solver. |
| *getSolution*() | Return the vector holding the solution. |
| *getSolutionNorm*() | Return the objective function value and the norms of gradient and constraints. |
| *getSolutionStatus*() | Return the solution status. |
| *getTolerances*() | Return the tolerance parameters used in the solver convergence tests. |
| *getType*() | Return the type of the solver. |
| *getUpdate*() | Return the callback to compute the update. |
| *getVariableBounds*() | Return the upper and lower bounds vectors. |
| *monitor*(\[its, f, res, cnorm, step\]) | Monitor the solver. |
| *setAppCtx*(appctx) | Set the application context. |
| *setBNCGType*(cg\_type) | Set the type of the BNCG solver. |
| *setBRGNDictionaryMatrix*(D) | Set the dictionary matrix. |
| *setBRGNRegularizerHessian*(hessian\[, H, ...\]) | Set the callback to compute the regularizer Hessian. |
| *setBRGNRegularizerObjectiveGradient*(objgrad) | Set the callback to compute the regularizer objective and gradient. |
| *setBRGNRegularizerWeight*(weight) | Set the regularizer weight. |
| *setBRGNSmoothL1Epsilon*(epsilon) | Set the smooth L1 epsilon. |
| *setConstraintTolerances*(\[catol, crtol\]) | Set the constraints tolerance parameters used in the solver convergence tests. |
| *setConstraints*(constraints\[, C, args, kargs\]) | Set the callback to compute constraints. |
| *setConvergedReason*(reason) | Set the termination flag. |
| *setConvergenceTest*(converged\[, args, kargs\]) | Set the callback used to test for solver convergence. |
| *setEqualityConstraints*(equality\_constraints, c) | Set equality constraints callback. |
| *setFromOptions*() | Configure the solver from the options database. |
| *setGradient*(gradient\[, g, args, kargs\]) | Set the gradient evaluation callback. |
| *setGradientNorm*(mat) | Set the matrix used to compute inner products. |
| *setHessian*(hessian\[, H, P, args, kargs\]) | Set the callback to compute the Hessian matrix. |
| *setInitialTrustRegionRadius*(radius) | Set the initial trust region radius. |
| *setIterationNumber*(its) | Set the current iteration number. |
| *setJacobian*(jacobian\[, J, P, args, kargs\]) | Set the callback to compute the Jacobian. |
| *setJacobianDesign*(jacobian\_design\[, J, ...\]) | Set Jacobian design callback. |
| *setJacobianEquality*(jacobian\_equality\[, J, ...\]) | Set Jacobian equality constraints callback. |
| *setJacobianResidual*(jacobian\[, J, P, args, ...\]) | Set the callback to compute the least-squares residual Jacobian. |
| *setJacobianState*(jacobian\_state\[, J, P, I, ...\]) | Set Jacobian state callback. |
| *setLMVMH0*(mat) | Set the initial Hessian for the quasi-Newton approximation. |
| *setMaximumFunctionEvaluations*(mit) | Set the maximum number of objective evaluations within the solver. |
| *setMaximumIterations*(mit) | Set the maximum number of solver iterations. |
| *setMonitor*(monitor\[, args, kargs\]) | Set the callback used to monitor solver convergence. |
| *setObjective*(objective\[, args, kargs\]) | Set the objective function evaluation callback. |
| *setObjectiveGradient*(objgrad\[, g, args, kargs\]) | Set the objective function and gradient evaluation callback. |
| *setOptionsPrefix*(prefix) | Set the prefix used for searching for options in the database. |
| *setPythonContext*(context) | Set the instance of the class implementing the required Python methods. |
| *setPythonType*(py\_type) | Set the fully qualified Python name of the class to be used. |
| *setResidual*(residual, R\[, args, kargs\]) | Set the residual evaluation callback for least-squares applications. |
| *setSolution*(x) | Set the vector used to store the solution. |
| *setStateDesignIS*(\[state, design\]) | Set the index sets indicating state and design variables. |
| *setTolerances*(\[gatol, grtol, gttol\]) | Set the tolerance parameters used in the solver convergence tests. |
| *setType*(tao\_type) | Set the type of the solver. |
| *setUp*() | Set up the internal data structures for using the solver. |
| *setUpdate*(update\[, args, kargs\]) | Set the callback to compute update at each optimization step. |
| *setVariableBounds*(varbounds\[, args, kargs\]) | Set the upper and lower bounds for the optimization problem. |
| *solve*(\[x\]) | Solve the optimization problem. |
| *view*(\[viewer\]) | View the solver. |

Attributes Summary

| | |
| --- | --- |
| *appctx* | Application context. |
| *cnorm* | Constraints norm. |
| *converged* | Boolean indicating if the solver has converged. |
| *ctol* | Broken. |
| *diverged* | Boolean indicating if the solver has failed. |
| *ftol* | Broken. |
| *function* | Objective value. |
| *gnorm* | Gradient norm. |
| *gradient* | Gradient vector. |
| *gtol* | Broken. |
| *iterating* | Boolean indicating if the solver has not converged yet. |
| *its* | Number of iterations. |
| *ksp* | Linear solver. |
| *objective* | Objective value. |
| *reason* | Converged reason. |
| *solution* | Solution vector. |

Methods Documentation

- **appendOptionsPrefix(prefix)**

  Append to the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *TaoAppendOptionsPrefix*

  *Source code at petsc4py/PETSc/TAO.pyx:213*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **cancelMonitor()**

  Cancel all the monitors of the solver.

  Logically collective.

  **SEE ALSO:**

  *setMonitor*, *TaoMonitorCancel*

  *Source code at petsc4py/PETSc/TAO.pyx:1220*

  - **Return type**

    *None*

- **computeConstraints(x, c)**

  Compute the vector corresponding to the constraints.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The parameter vector.

    - •

      **c** (*Vec*) -- The output constraints vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setVariableBounds*, *TaoComputeVariableBounds*

  *Source code at petsc4py/PETSc/TAO.pyx:887*

- **computeDualVariables(xl, xu)**

  Compute the dual vectors corresponding to variables' bounds.

  Collective.

  **SEE ALSO:**

  *TaoComputeDualVariables*

  *Source code at petsc4py/PETSc/TAO.pyx:851*

  - **Parameters**

    - •

      **xl** (*Vec*)

    - •

      **xu** (*Vec*)

  - **Return type**

    *None*

- **computeGradient(x, g)**

  Compute the gradient of the objective function.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The parameter vector.

    - •

      **g** (*Vec*) -- The output gradient vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setGradient*, *TaoComputeGradient*

  *Source code at petsc4py/PETSc/TAO.pyx:810*

- **computeHessian(x, H, P=None)**

  Compute the Hessian of the objective function.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The parameter vector.

    - •

      **H** (*Mat*) -- The output Hessian matrix.

    - •

      **P** (*Mat \| None*) -- The output Hessian matrix used to construct the preconditioner.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setHessian*, *TaoComputeHessian*

  *Source code at petsc4py/PETSc/TAO.pyx:906*

- **computeJacobian(x, J, P=None)**

  Compute the Jacobian.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The parameter vector.

    - •

      **J** (*Mat*) -- The output Jacobian matrix.

    - •

      **P** (*Mat \| None*) -- The output Jacobian matrix used to construct the preconditioner.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setJacobian*, *TaoComputeJacobian*

  *Source code at petsc4py/PETSc/TAO.pyx:929*

- **computeObjective(x)**

  Compute the value of the objective function.

  Collective.

  - **Parameters**

    **x** (*Vec*) -- The parameter vector.

  - **Return type**

    *float*

  **SEE ALSO:**

  *setObjective*, *TaoComputeObjective*

  *Source code at petsc4py/PETSc/TAO.pyx:772*

- **computeObjectiveGradient(x, g)**

  Compute the gradient of the objective function and its value.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The parameter vector.

    - •

      **g** (*Vec*) -- The output gradient vector.

  - **Return type**

    *float*

  **SEE ALSO:**

  *setObjectiveGradient*, *setGradient*, *setObjective*, *TaoComputeObjectiveAndGradient*

  *Source code at petsc4py/PETSc/TAO.pyx:829*

- **computeResidual(x, f)**

  Compute the residual.

  Collective.

  - **Parameters**

    - •

      **x** (*Vec*) -- The parameter vector.

    - •

      **f** (*Vec*) -- The output vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setResidual*, *TaoComputeResidual*

  *Source code at petsc4py/PETSc/TAO.pyx:791*

- **computeVariableBounds(xl, xu)**

  Compute the vectors corresponding to variables' bounds.

  Collective.

  **SEE ALSO:**

  *setVariableBounds*, *TaoComputeVariableBounds*

  *Source code at petsc4py/PETSc/TAO.pyx:863*

  - **Parameters**

    - •

      **xl** (*Vec*)

    - •

      **xu** (*Vec*)

  - **Return type**

    *None*

- **create(comm=None)**

  Create a TAO solver.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *Sys.getDefaultComm*, *TaoCreate*

  *Source code at petsc4py/PETSc/TAO.pyx:145*

- **createPython(context=None, comm=None)**

  Create an optimization solver of Python type.

  Collective.

  - **Parameters**

    - •

      **context** (*Any*) -- An instance of the Python class implementing the required methods.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PETSc Python optimization solver type (TODO)*, *setType*, *setPythonContext*, *Type.PYTHON*

  *Source code at petsc4py/PETSc/TAO.pyx:1662*

- **destroy()**

  Destroy the solver.

  Collective.

  **SEE ALSO:**

  *TaoDestroy*

  *Source code at petsc4py/PETSc/TAO.pyx:132*

  - **Return type**

    *Self*

- **getAppCtx()**

  Return the application context.

  *Source code at petsc4py/PETSc/TAO.pyx:286*

  - **Return type**

    *Any*

- **getBNCGType()**

  Return the type of the BNCG solver.

  Not collective.

  **SEE ALSO:**

  *setBNCGType*, *TaoBNCGGetType*

  *Source code at petsc4py/PETSc/TAO.pyx:1416*

  - **Return type**

    *BNCGType*

- **getBRGNDampingVector()**

  Return the damping vector.

  Not collective.

  *Source code at petsc4py/PETSc/TAO.pyx:1647*

  - **Return type**

    *Vec*

- **getBRGNSubsolver()**

  Return the subsolver inside the BRGN solver.

  Not collective.

  **SEE ALSO:**

  *TaoBRGNGetSubsolver*

  *Source code at petsc4py/PETSc/TAO.pyx:1564*

  - **Return type**

    *TAO*

- **getConstraintTolerances()**

  Return the constraints tolerance parameters used in the convergence tests.

  Not collective.

  - **Returns**

    - •

      **catol** (*float*) -- The absolute norm of the constraints.

    - •

      **crtol** (*float*) -- The relative norm of the constraints.

  - **Return type**

    *tuple*\[*float*, *float*\]

  **SEE ALSO:**

  *setConstraintTolerances*, *TaoGetConstraintTolerances*

  *Source code at petsc4py/PETSc/TAO.pyx:1091*

- **getConvergedReason()**

  Return the termination flag.

  Not collective.

  **SEE ALSO:**

  *setConvergedReason*, *TaoGetConvergedReason*

  *Source code at petsc4py/PETSc/TAO.pyx:1165*

  - **Return type**

    *ConvergedReason*

- **getConvergenceTest()**

  Return the callback used to test for solver convergence.

  Not collective.

  **SEE ALSO:**

  *setConvergenceTest*

  *Source code at petsc4py/PETSc/TAO.pyx:1140*

  - **Return type**

    *tuple*\[*TAOConvergedFunction*, *tuple*\[*Any*, ...\], *dict*\[*str*, *Any*\]\]

- **getGradient()**

  Return the vector used to store the gradient and the evaluation callback.

  Not collective.

  **SEE ALSO:**

  *setGradient*, *setHessian*, *TaoGetGradient*

  *Source code at petsc4py/PETSc/TAO.pyx:416*

  - **Return type**

    *tuple*\[*Vec*, *TAOGradientFunction*\]

- **getGradientNorm()**

  Return the matrix used to compute inner products.

  Not collective.

  **SEE ALSO:**

  *setGradientNorm*, *TaoGetGradientNorm*

  *Source code at petsc4py/PETSc/TAO.pyx:1331*

  - **Return type**

    *Mat*

- **getHessian()**

  Return the matrices used to store the Hessian and the evaluation callback.

  Not collective.

  **SEE ALSO:**

  *setHessian*, *TaoGetHessian*

  *Source code at petsc4py/PETSc/TAO.pyx:578*

  - **Return type**

    *tuple*\[*Mat*, *Mat*, *TAOHessianFunction*\]

- **getIterationNumber()**

  Return the current iteration number.

  Not collective.

  **SEE ALSO:**

  *setIterationNumber*, *TaoGetIterationNumber*

  *Source code at petsc4py/PETSc/TAO.pyx:1443*

  - **Return type**

    *int*

- **getKSP()**

  Return the linear solver used by the nonlinear solver.

  Not collective.

  **SEE ALSO:**

  *TaoGetKSP*

  *Source code at petsc4py/PETSc/TAO.pyx:1547*

  - **Return type**

    *KSP*

- **getLMVMH0()**

  Return the initial Hessian for the quasi-Newton approximation.

  Not collective.

  **SEE ALSO:**

  *setLMVMH0*, *TaoLMVMGetH0*

  *Source code at petsc4py/PETSc/TAO.pyx:1358*

  - **Return type**

    *Mat*

- **getLMVMH0KSP()**

  Return the *KSP* for the inverse of the initial Hessian approximation.

  Not collective.

  **SEE ALSO:**

  *setLMVMH0*, *TaoLMVMGetH0KSP*

  *Source code at petsc4py/PETSc/TAO.pyx:1373*

  - **Return type**

    *KSP*

- **getLineSearch()**

  Return the TAO Line Search object.

  Not collective.

  **SEE ALSO:**

  *TaoGetLineSearch*

  *Source code at petsc4py/PETSc/TAO.pyx:1744*

  - **Return type**

    *TAOLineSearch*

- **getMaximumFunctionEvaluations()**

  Return the maximum number of objective evaluations within the solver.

  Not collective.

  **SEE ALSO:**

  *setMaximumFunctionEvaluations*, *TaoGetMaximumFunctionEvaluations*

  *Source code at petsc4py/PETSc/TAO.pyx:1051*

  - **Return type**

    *int*

- **getMaximumIterations()**

  Return the maximum number of solver iterations.

  Not collective.

  **SEE ALSO:**

  *setMaximumIterations*, *TaoGetMaximumIterations*

  *Source code at petsc4py/PETSc/TAO.pyx:1024*

  - **Return type**

    *int*

- **getMonitor()**

  Return the callback used to monitor solver convergence.

  Not collective.

  **SEE ALSO:**

  *setMonitor*

  *Source code at petsc4py/PETSc/TAO.pyx:1208*

  - **Return type**

    *list*\[*tuple*\[*TAOMonitorFunction*, *tuple*\[*Any*, ...\], *dict*\[*str*, *Any*\]\]\]

- **getObjectiveAndGradient()**

  Return the vector used to store the gradient and the evaluation callback.

  Not collective.

  **SEE ALSO:**

  *setObjectiveGradient*, *TaoGetObjectiveAndGradient*

  *Source code at petsc4py/PETSc/TAO.pyx:462*

  - **Return type**

    *tuple*\[*Vec*, *TAOObjectiveGradientFunction*\]

- **getObjectiveValue()**

  Return the current value of the objective function.

  Not collective.

  **SEE ALSO:**

  *setObjective*, *TaoGetSolutionStatus*

  *Source code at petsc4py/PETSc/TAO.pyx:1457*

  - **Return type**

    *float*

- **getOptionsPrefix()**

  Return the prefix used for searching for options in the database.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *TaoGetOptionsPrefix*

  *Source code at petsc4py/PETSc/TAO.pyx:227*

  - **Return type**

    *str*

- **getPythonContext()**

  Return the instance of the class implementing the required Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python optimization solver type (TODO)*, *setPythonContext*

  *Source code at petsc4py/PETSc/TAO.pyx:1699*

  - **Return type**

    *Any*

- **getPythonType()**

  Return the fully qualified Python name of the class used by the solver.

  Not collective.

  **SEE ALSO:**

  *PETSc Python optimization solver type (TODO)*, *setPythonContext*, *setPythonType*, *TaoPythonGetType*

  *Source code at petsc4py/PETSc/TAO.pyx:1729*

  - **Return type**

    *str*

- **getSolution()**

  Return the vector holding the solution.

  Not collective.

  **SEE ALSO:**

  *setSolution*, *TaoGetSolution*

  *Source code at petsc4py/PETSc/TAO.pyx:1304*

  - **Return type**

    *Vec*

- **getSolutionNorm()**

  Return the objective function value and the norms of gradient and constraints.

  Not collective.

  - **Returns**

    - •

      **f** (*float*) -- Current value of the objective function.

    - •

      **res** (*float*) -- Current value of the residual norm.

    - •

      **cnorm** (*float*) -- Current value of the constrains norm.

  - **Return type**

    *tuple*\[*float*, *float*, *float*\]

  **SEE ALSO:**

  *getSolutionStatus*, *TaoGetSolutionStatus*

  *Source code at petsc4py/PETSc/TAO.pyx:1487*

- **getSolutionStatus()**

  Return the solution status.

  Not collective.

  - **Returns**

    - •

      **its** (*int*) -- Current number of iterations.

    - •

      **f** (*float*) -- Current value of the objective function.

    - •

      **res** (*float*) -- Current value of the residual norm.

    - •

      **cnorm** (*float*) -- Current value of the constrains norm.

    - •

      **step** (*float*) -- Current value of the step.

    - •

      **reason** (*ConvergedReason*) -- Current value of converged reason.

  - **Return type**

    *tuple*\[*int*, *float*, *float*, *float*, *float*, *ConvergedReason*\]

  **SEE ALSO:**

  *TaoGetSolutionStatus*

  *Source code at petsc4py/PETSc/TAO.pyx:1512*

- **getTolerances()**

  Return the tolerance parameters used in the solver convergence tests.

  Not collective.

  - **Returns**

    - •

      **gatol** (*float*) -- The absolute norm of the gradient.

    - •

      **grtol** (*float*) -- The relative norm of the gradient.

    - •

      **gttol** (*float*) -- The relative norm of the gradient with respect to the initial norm of the gradient.

  - **Return type**

    *tuple*\[*float*, *float*, *float*\]

  **SEE ALSO:**

  *setTolerances*, *TaoGetTolerances*

  *Source code at petsc4py/PETSc/TAO.pyx:987*

- **getType()**

  Return the type of the solver.

  Not collective.

  **SEE ALSO:**

  *setType*, *TaoGetType*

  *Source code at petsc4py/PETSc/TAO.pyx:185*

  - **Return type**

    *str*

- **getUpdate()**

  Return the callback to compute the update.

  Not collective.

  **SEE ALSO:**

  *setUpdate*

  *Source code at petsc4py/PETSc/TAO.pyx:758*

  - **Return type**

    *tuple*\[*TAOUpdateFunction*, *tuple*\[*Any*, ...\], *dict*\[*str*, *Any*\]\]

- **getVariableBounds()**

  Return the upper and lower bounds vectors.

  Not collective.

  **SEE ALSO:**

  *setVariableBounds*, *TaoGetVariableBounds*

  *Source code at petsc4py/PETSc/TAO.pyx:1388*

  - **Return type**

    *tuple*\[*Vec*, *Vec*\]

- **monitor(its=None, f=None, res=None, cnorm=None, step=None)**

  Monitor the solver.

  Collective.

  This function should be called without arguments, unless users want to modify the values internally stored by the solver.

  - **Parameters**

    - •

      **its** (*int*) -- Current number of iterations or *None* to use the value stored internally by the solver.

    - •

      **f** (*float*) -- Current value of the objective function or *None* to use the value stored internally by the solver.

    - •

      **res** (*float*) -- Current value of the residual norm or *None* to use the value stored internally by the solver.

    - •

      **cnorm** (*float*) -- Current value of the constrains norm or *None* to use the value stored internally by the solver.

    - •

      **step** (*float*) -- Current value of the step or *None* to use the value stored internally by the solver.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setMonitor*, *TaoMonitor*

  *Source code at petsc4py/PETSc/TAO.pyx:1234*

- **setAppCtx(appctx)**

  Set the application context.

  *Source code at petsc4py/PETSc/TAO.pyx:282*

  - **Parameters**

    **appctx** (*Any*)

  - **Return type**

    *None*

- **setBNCGType(cg\_type)**

  Set the type of the BNCG solver.

  Collective.

  **SEE ALSO:**

  *getBNCGType*, *TaoBNCGSetType*

  *Source code at petsc4py/PETSc/TAO.pyx:1403*

  - **Parameters**

    **cg\_type** (*BNCGType*)

  - **Return type**

    *None*

- **setBRGNDictionaryMatrix(D)**

  Set the dictionary matrix.

  Collective.

  **SEE ALSO:**

  *TaoBRGNSetDictionaryMatrix*

  *Source code at petsc4py/PETSc/TAO.pyx:1635*

  - **Parameters**

    **D** (*Mat*)

  - **Return type**

    *None*

- **setBRGNRegularizerHessian(hessian, H=None, args=None, kargs=None)**

  Set the callback to compute the regularizer Hessian.

  Logically collective.

  **SEE ALSO:**

  *TaoBRGNSetRegularizerHessianRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:1595*

  - **Parameters**

    - •

      **H** (*Mat \| None*)

    - •

      **args** (*tuple\[Any, ...\] \| None*)

    - •

      **kargs** (*dict\[str, Any\] \| None*)

  - **Return type**

    *None*

- **setBRGNRegularizerObjectiveGradient(objgrad, args=None, kargs=None)**

  Set the callback to compute the regularizer objective and gradient.

  Logically collective.

  **SEE ALSO:**

  *TaoBRGNSetRegularizerObjectiveAndGradientRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:1579*

  - **Parameters**

    - •

      **args** (*tuple\[Any, ...\] \| None*)

    - •

      **kargs** (*dict\[str, Any\] \| None*)

  - **Return type**

    *None*

- **setBRGNRegularizerWeight(weight)**

  Set the regularizer weight.

  Collective.

  *Source code at petsc4py/PETSc/TAO.pyx:1613*

  - **Parameters**

    **weight** (*float*)

  - **Return type**

    *None*

- **setBRGNSmoothL1Epsilon(epsilon)**

  Set the smooth L1 epsilon.

  Collective.

  **SEE ALSO:**

  *TaoBRGNSetL1SmoothEpsilon*

  *Source code at petsc4py/PETSc/TAO.pyx:1622*

  - **Parameters**

    **epsilon** (*float*)

  - **Return type**

    *None*

- **setConstraintTolerances(catol=None, crtol=None)**

  Set the constraints tolerance parameters used in the solver convergence tests.

  Collective.

  - **Parameters**

    - •

      **catol** (*float*) -- The absolute norm of the constraints, or *DETERMINE* to use the value when the object's type was set. Defaults to *CURRENT*.

    - •

      **crtol** (*float*) -- The relative norm of the constraints, or *DETERMINE* to use the value when the object's type was set. Defaults to *CURRENT*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getConstraintTolerances*, *TaoSetConstraintTolerances*

  *Source code at petsc4py/PETSc/TAO.pyx:1065*

- **setConstraints(constraints, C=None, args=None, kargs=None)**

  Set the callback to compute constraints.

  Logically collective.

  - **Parameters**

    - •

      **constraints** (*TAOConstraintsFunction*) -- The callback.

    - •

      **C** (*Vec \| None*) -- The vector to hold the constraints.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TaoSetConstraintsRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:514*

- **setConvergedReason(reason)**

  Set the termination flag.

  Collective.

  **SEE ALSO:**

  *getConvergedReason*, *TaoSetConvergedReason*

  *Source code at petsc4py/PETSc/TAO.pyx:1152*

  - **Parameters**

    **reason** (*ConvergedReason*)

  - **Return type**

    *None*

- **setConvergenceTest(converged, args=None, kargs=None)**

  Set the callback used to test for solver convergence.

  Logically collective.

  - **Parameters**

    - •

      **converged** (*TAOConvergedFunction \| None*) -- The callback. If *None*, reset to the default convergence test.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getConvergenceTest*, *TaoSetConvergenceTest*

  *Source code at petsc4py/PETSc/TAO.pyx:1112*

- **setEqualityConstraints(equality\_constraints, c, args=None, kargs=None)**

  Set equality constraints callback.

  Logically collective.

  **SEE ALSO:**

  *TaoSetEqualityConstraintsRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:689*

  - **Parameters**

    - •

      **c** (*Vec*)

    - •

      **args** (*tuple\[Any, ...\] \| None*)

    - •

      **kargs** (*dict\[str, Any\] \| None*)

  - **Return type**

    *None*

- **setFromOptions()**

  Configure the solver from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *TaoSetFromOptions*

  *Source code at petsc4py/PETSc/TAO.pyx:241*

  - **Return type**

    *None*

- **setGradient(gradient, g=None, args=None, kargs=None)**

  Set the gradient evaluation callback.

  Logically collective.

  - **Parameters**

    - •

      **gradient** (*TAOGradientFunction*) -- The gradient callback.

    - •

      **g** (*Vec \| None*) -- The vector to store the gradient.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setObjective*, *setObjectiveGradient*, *setHessian*, *TaoSetGradient*

  *Source code at petsc4py/PETSc/TAO.pyx:387*

- **setGradientNorm(mat)**

  Set the matrix used to compute inner products.

  Collective.

  **SEE ALSO:**

  *getGradientNorm*, *TaoSetGradientNorm*

  *Source code at petsc4py/PETSc/TAO.pyx:1319*

  - **Parameters**

    **mat** (*Mat*)

  - **Return type**

    *None*

- **setHessian(hessian, H=None, P=None, args=None, kargs=None)**

  Set the callback to compute the Hessian matrix.

  Logically collective.

  - **Parameters**

    - •

      **hessian** (*TAOHessianFunction*) -- The Hessian callback.

    - •

      **H** (*Mat \| None*) -- The matrix to store the Hessian.

    - •

      **P** (*Mat \| None*) -- The matrix to construct the preconditioner.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getHessian*, *setObjective*, *setObjectiveGradient*, *setGradient*, *TaoSetHessian*

  *Source code at petsc4py/PETSc/TAO.pyx:543*

- **setInitialTrustRegionRadius(radius)**

  Set the initial trust region radius.

  Collective.

  **SEE ALSO:**

  *TaoSetInitialTrustRegionRadius*

  *Source code at petsc4py/PETSc/TAO.pyx:267*

  - **Parameters**

    **radius** (*float*)

  - **Return type**

    *None*

- **setIterationNumber(its)**

  Set the current iteration number.

  Collective.

  **SEE ALSO:**

  *getIterationNumber*, *TaoSetIterationNumber*

  *Source code at petsc4py/PETSc/TAO.pyx:1430*

  - **Parameters**

    **its** (*int*)

  - **Return type**

    *None*

- **setJacobian(jacobian, J=None, P=None, args=None, kargs=None)**

  Set the callback to compute the Jacobian.

  Logically collective.

  - **Parameters**

    - •

      **jacobian** (*TAOJacobianFunction*) -- The Jacobian callback.

    - •

      **J** (*Mat \| None*) -- The matrix to store the Jacobian.

    - •

      **P** (*Mat \| None*) -- The matrix to construct the preconditioner.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TaoSetJacobianRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:596*

- **setJacobianDesign(jacobian\_design, J=None, args=None, kargs=None)**

  Set Jacobian design callback.

  Logically collective.

  **SEE ALSO:**

  *TaoSetJacobianDesignRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:669*

  - **Parameters**

    - •

      **J** (*Mat \| None*)

    - •

      **args** (*tuple\[Any, ...\] \| None*)

    - •

      **kargs** (*dict\[str, Any\] \| None*)

  - **Return type**

    *None*

- **setJacobianEquality(jacobian\_equality, J=None, P=None, args=None, kargs=None)**

  Set Jacobian equality constraints callback.

  Logically collective.

  **SEE ALSO:**

  *TaoSetJacobianEqualityRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:707*

  - **Parameters**

    - •

      **J** (*Mat \| None*)

    - •

      **P** (*Mat \| None*)

    - •

      **args** (*tuple\[Any, ...\] \| None*)

    - •

      **kargs** (*dict\[str, Any\] \| None*)

  - **Return type**

    *None*

- **setJacobianResidual(jacobian, J=None, P=None, args=None, kargs=None)**

  Set the callback to compute the least-squares residual Jacobian.

  Logically collective.

  - **Parameters**

    - •

      **jacobian** (*TAOJacobianResidualFunction*) -- The Jacobian callback.

    - •

      **J** (*Mat \| None*) -- The matrix to store the Jacobian.

    - •

      **P** (*Mat \| None*) -- The matrix to construct the preconditioner.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setResidual*, *TaoSetJacobianResidualRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:354*

- **setJacobianState(jacobian\_state, J=None, P=None, I=None, args=None, kargs=None)**

  Set Jacobian state callback.

  Logically collective.

  **SEE ALSO:**

  *TaoSetJacobianStateRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:645*

  - **Parameters**

    - •

      **J** (*Mat \| None*)

    - •

      **P** (*Mat \| None*)

    - •

      **I** (*Mat \| None*)

    - •

      **args** (*tuple\[Any, ...\] \| None*)

    - •

      **kargs** (*dict\[str, Any\] \| None*)

  - **Return type**

    *None*

- **setLMVMH0(mat)**

  Set the initial Hessian for the quasi-Newton approximation.

  Collective.

  **SEE ALSO:**

  *getLMVMH0*, *TaoLMVMSetH0*

  *Source code at petsc4py/PETSc/TAO.pyx:1346*

  - **Parameters**

    **mat** (*Mat*)

  - **Return type**

    *None*

- **setMaximumFunctionEvaluations(mit)**

  Set the maximum number of objective evaluations within the solver.

  Collective.

  **SEE ALSO:**

  *setMaximumIterations*, *TaoSetMaximumFunctionEvaluations*

  *Source code at petsc4py/PETSc/TAO.pyx:1038*

  - **Parameters**

    **mit** (*int*)

  - **Return type**

    *None*

- **setMaximumIterations(mit)**

  Set the maximum number of solver iterations.

  Collective.

  **SEE ALSO:**

  *setTolerances*, *TaoSetMaximumIterations*

  *Source code at petsc4py/PETSc/TAO.pyx:1011*

  - **Parameters**

    **mit** (*int*)

  - **Return type**

    *float*

- **setMonitor(monitor, args=None, kargs=None)**

  Set the callback used to monitor solver convergence.

  Logically collective.

  - **Parameters**

    - •

      **monitor** (*TAOMonitorFunction*) -- The callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getMonitor*, *TaoMonitorSet*

  *Source code at petsc4py/PETSc/TAO.pyx:1179*

- **setObjective(objective, args=None, kargs=None)**

  Set the objective function evaluation callback.

  Logically collective.

  - **Parameters**

    - •

      **objective** (*TAOObjectiveFunction*) -- The objective function callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setGradient*, *setObjectiveGradient*, *TaoSetObjective*

  *Source code at petsc4py/PETSc/TAO.pyx:302*

- **setObjectiveGradient(objgrad, g=None, args=None, kargs=None)**

  Set the objective function and gradient evaluation callback.

  Logically collective.

  - **Parameters**

    - •

      **objgrad** (*TAOObjectiveGradientFunction*) -- The objective function and gradient callback.

    - •

      **g** (*Vec \| None*) -- The vector to store the gradient.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setObjective*, *setGradient*, *setHessian*, *getObjectiveAndGradient*, *TaoSetObjectiveAndGradient*

  *Source code at petsc4py/PETSc/TAO.pyx:432*

- **setOptionsPrefix(prefix)**

  Set the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *TaoSetOptionsPrefix*

  *Source code at petsc4py/PETSc/TAO.pyx:199*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **setPythonContext(context)**

  Set the instance of the class implementing the required Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python optimization solver type (TODO)*, *getPythonContext*

  *Source code at petsc4py/PETSc/TAO.pyx:1687*

  - **Parameters**

    **context** (*Any*)

  - **Return type**

    *None*

- **setPythonType(py\_type)**

  Set the fully qualified Python name of the class to be used.

  Collective.

  **SEE ALSO:**

  *PETSc Python optimization solver type (TODO)*, *setPythonContext*, *getPythonType*, *TaoPythonSetType*

  *Source code at petsc4py/PETSc/TAO.pyx:1714*

  - **Parameters**

    **py\_type** (*str*)

  - **Return type**

    *None*

- **setResidual(residual, R, args=None, kargs=None)**

  Set the residual evaluation callback for least-squares applications.

  Logically collective.

  - **Parameters**

    - •

      **residual** (*TAOResidualFunction*) -- The residual callback.

    - •

      **R** (*Vec*) -- The vector to store the residual.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setJacobianResidual*, *TaoSetResidualRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:327*

- **setSolution(x)**

  Set the vector used to store the solution.

  Collective.

  **SEE ALSO:**

  *getSolution*, *TaoSetSolution*

  *Source code at petsc4py/PETSc/TAO.pyx:290*

  - **Parameters**

    **x** (*Vec*)

  - **Return type**

    *None*

- **setStateDesignIS(state=None, design=None)**

  Set the index sets indicating state and design variables.

  Collective.

  **SEE ALSO:**

  *TaoSetStateDesignIS*

  *Source code at petsc4py/PETSc/TAO.pyx:630*

  - **Parameters**

    - •

      **state** (*IS \| None*)

    - •

      **design** (*IS \| None*)

  - **Return type**

    *None*

- **setTolerances(gatol=None, grtol=None, gttol=None)**

  Set the tolerance parameters used in the solver convergence tests.

  Collective.

  - **Parameters**

    - •

      **gatol** (*float*) -- The absolute norm of the gradient, or *DETERMINE* to use the value when the object's type was set. Defaults to *CURRENT*.

    - •

      **grtol** (*float*) -- The relative norm of the gradient with respect to the initial norm of the objective, or *DETERMINE* to use the value when the object's type was set. Defaults to *CURRENT*.

    - •

      **gttol** (*float*) -- The relative norm of the gradient with respect to the initial norm of the gradient, or *DETERMINE* to use the value when the object's type was set. Defaults to *CURRENT*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getTolerances*, *TaoSetTolerances*

  *Source code at petsc4py/PETSc/TAO.pyx:954*

- **setType(tao\_type)**

  Set the type of the solver.

  Logically collective.

  - **Parameters**

    **tao\_type** (*Type \| str*) -- The type of the solver.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getType*, *TaoSetType*

  *Source code at petsc4py/PETSc/TAO.pyx:166*

- **setUp()**

  Set up the internal data structures for using the solver.

  Collective.

  **SEE ALSO:**

  *TaoSetUp*

  *Source code at petsc4py/PETSc/TAO.pyx:253*

  - **Return type**

    *None*

- **setUpdate(update, args=None, kargs=None)**

  Set the callback to compute update at each optimization step.

  Logically collective.

  - **Parameters**

    - •

      **update** (*TAOUpdateFunction*) -- The update callback or *None* to reset it.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getUpdate*, *TaoSetUpdate*

  *Source code at petsc4py/PETSc/TAO.pyx:729*

- **setVariableBounds(varbounds, args=None, kargs=None)**

  Set the upper and lower bounds for the optimization problem.

  Logically collective.

  - **Parameters**

    - •

      **varbounds** (*tuple\[Vec, Vec\] \| TAOVariableBoundsFunction*) -- Either a tuple of *Vec* or a *TAOVariableBoundsFunction* callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TaoSetVariableBounds*, *TaoSetVariableBoundsRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:478*

- **solve(x=None)**

  Solve the optimization problem.

  Collective.

  - **Parameters**

    **x** (*Vec \| None*) -- The starting vector or *None* to use the vector stored internally.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setSolution*, *getSolution*, *TaoSolve*

  *Source code at petsc4py/PETSc/TAO.pyx:1285*

- **view(viewer=None)**

  View the solver.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TaoView*

  *Source code at petsc4py/PETSc/TAO.pyx:113*

Attributes Documentation

- **appctx**

  Application context.

  *Source code at petsc4py/PETSc/TAO.pyx:1765*

- **cnorm**

  Constraints norm.

  *Source code at petsc4py/PETSc/TAO.pyx:1834*

- **converged**

  Boolean indicating if the solver has converged.

  *Source code at petsc4py/PETSc/TAO.pyx:1871*

- **ctol**

  Broken.

  *Source code at petsc4py/PETSc/TAO.pyx:1809*

- **diverged**

  Boolean indicating if the solver has failed.

  *Source code at petsc4py/PETSc/TAO.pyx:1876*

- **ftol**

  Broken.

  *Source code at petsc4py/PETSc/TAO.pyx:1783*

- **function**

  Objective value.

  *Source code at petsc4py/PETSc/TAO.pyx:1849*

- **gnorm**

  Gradient norm.

  *Source code at petsc4py/PETSc/TAO.pyx:1829*

- **gradient**

  Gradient vector.

  *Source code at petsc4py/PETSc/TAO.pyx:1854*

- **gtol**

  Broken.

  *Source code at petsc4py/PETSc/TAO.pyx:1796*

- **iterating**

  Boolean indicating if the solver has not converged yet.

  *Source code at petsc4py/PETSc/TAO.pyx:1866*

- **its**

  Number of iterations.

  *Source code at petsc4py/PETSc/TAO.pyx:1824*

- **ksp**

  Linear solver.

  *Source code at petsc4py/PETSc/TAO.pyx:1775*

- **objective**

  Objective value.

  *Source code at petsc4py/PETSc/TAO.pyx:1844*

- **reason**

  Converged reason.

  *Source code at petsc4py/PETSc/TAO.pyx:1861*

- **solution**

  Solution vector.

  *Source code at petsc4py/PETSc/TAO.pyx:1839*

### petsc4py.PETSc.TAOLineSearch

- **class petsc4py.PETSc.TAOLineSearch**

  Bases: *Object*

  TAO Line Search.

  Enumerations

  | | |
  | --- | --- |
  | *ConvergedReason* | TAO Line Search Termination Reasons. |
  | *Type* | TAO Line Search Types. |

### petsc4py.PETSc.TAOLineSearch.ConvergedReason

- **class petsc4py.PETSc.TAOLineSearch.ConvergedReason**

  Bases: *object*

  TAO Line Search Termination Reasons.

  Attributes Summary

  | | |
  | --- | --- |
  | *CONTINUE\_SEARCH* | Constant **CONTINUE\_SEARCH** of type *int* |
  | *FAILED\_ASCENT* | Constant **FAILED\_ASCENT** of type *int* |
  | *FAILED\_BADPARAMETER* | Constant **FAILED\_BADPARAMETER** of type *int* |
  | *FAILED\_INFORNAN* | Constant **FAILED\_INFORNAN** of type *int* |
  | *HALTED\_LOWERBOUND* | Constant **HALTED\_LOWERBOUND** of type *int* |
  | *HALTED\_MAXFCN* | Constant **HALTED\_MAXFCN** of type *int* |
  | *HALTED\_OTHER* | Constant **HALTED\_OTHER** of type *int* |
  | *HALTED\_RTOL* | Constant **HALTED\_RTOL** of type *int* |
  | *HALTED\_UPPERBOUND* | Constant **HALTED\_UPPERBOUND** of type *int* |
  | *HALTED\_USER* | Constant **HALTED\_USER** of type *int* |
  | *SUCCESS* | Constant **SUCCESS** of type *int* |
  | *SUCCESS\_USER* | Constant **SUCCESS\_USER** of type *int* |

  Attributes Documentation

  - **CONTINUE\_SEARCH: *int* = CONTINUE\_SEARCH**

    Constant **CONTINUE\_SEARCH** of type *int*

  - **FAILED\_ASCENT: *int* = FAILED\_ASCENT**

    Constant **FAILED\_ASCENT** of type *int*

  - **FAILED\_BADPARAMETER: *int* = FAILED\_BADPARAMETER**

    Constant **FAILED\_BADPARAMETER** of type *int*

  - **FAILED\_INFORNAN: *int* = FAILED\_INFORNAN**

    Constant **FAILED\_INFORNAN** of type *int*

  - **HALTED\_LOWERBOUND: *int* = HALTED\_LOWERBOUND**

    Constant **HALTED\_LOWERBOUND** of type *int*

  - **HALTED\_MAXFCN: *int* = HALTED\_MAXFCN**

    Constant **HALTED\_MAXFCN** of type *int*

  - **HALTED\_OTHER: *int* = HALTED\_OTHER**

    Constant **HALTED\_OTHER** of type *int*

  - **HALTED\_RTOL: *int* = HALTED\_RTOL**

    Constant **HALTED\_RTOL** of type *int*

  - **HALTED\_UPPERBOUND: *int* = HALTED\_UPPERBOUND**

    Constant **HALTED\_UPPERBOUND** of type *int*

  - **HALTED\_USER: *int* = HALTED\_USER**

    Constant **HALTED\_USER** of type *int*

  - **SUCCESS: *int* = SUCCESS**

    Constant **SUCCESS** of type *int*

  - **SUCCESS\_USER: *int* = SUCCESS\_USER**

    Constant **SUCCESS\_USER** of type *int*

### petsc4py.PETSc.TAOLineSearch.Type

- **class petsc4py.PETSc.TAOLineSearch.Type**

  Bases: *object*

  TAO Line Search Types.

  Attributes Summary

  | | |
  | --- | --- |
  | *ARMIJO* | Object **ARMIJO** of type *str* |
  | *GPCG* | Object **GPCG** of type *str* |
  | *IPM* | Object **IPM** of type *str* |
  | *MORETHUENTE* | Object **MORETHUENTE** of type *str* |
  | *OWARMIJO* | Object **OWARMIJO** of type *str* |
  | *UNIT* | Object **UNIT** of type *str* |

  Attributes Documentation

  - **ARMIJO: *str* = ARMIJO**

    Object **ARMIJO** of type *str*

  - **GPCG: *str* = GPCG**

    Object **GPCG** of type *str*

  - **IPM: *str* = IPM**

    Object **IPM** of type *str*

  - **MORETHUENTE: *str* = MORETHUENTE**

    Object **MORETHUENTE** of type *str*

  - **OWARMIJO: *str* = OWARMIJO**

    Object **OWARMIJO** of type *str*

  - **UNIT: *str* = UNIT**

    Object **UNIT** of type *str*

Methods Summary

| | |
| --- | --- |
| *apply*(x, g, s) | Performs a line-search in a given step direction. |
| *create*(\[comm\]) | Create a TAO linesearch. |
| *destroy*() | Destroy the linesearch object. |
| *getOptionsPrefix*() | Return the prefix used for searching for options in the database. |
| *getType*() | Return the type of the linesearch. |
| *setFromOptions*() | Configure the linesearch from the options database. |
| *setGradient*(gradient\[, args, kargs\]) | Set the gradient evaluation callback. |
| *setObjective*(objective\[, args, kargs\]) | Set the objective function evaluation callback. |
| *setObjectiveGradient*(objgrad\[, args, kargs\]) | Set the objective function and gradient evaluation callback. |
| *setOptionsPrefix*(\[prefix\]) | Set the prefix used for searching for options in the database. |
| *setType*(ls\_type) | Set the type of the linesearch. |
| *setUp*() | Set up the internal data structures for using the linesearch. |
| *useTAORoutine*(tao) | Use the objective and gradient evaluation routines from the given Tao object. |
| *view*(\[viewer\]) | View the linesearch object. |

Methods Documentation

- **apply(x, g, s)**

  Performs a line-search in a given step direction.

  Collective.

  **SEE ALSO:**

  *TaoLineSearchApply*

  *Source code at petsc4py/PETSc/TAO.pyx:2161*

  - **Parameters**

    - •

      **x** (*Vec*)

    - •

      **g** (*Vec*)

    - •

      **s** (*Vec*)

  - **Return type**

    *tuple*\[*float*, *float*, *str*\]

- **create(comm=None)**

  Create a TAO linesearch.

  Collective.

  - **Parameters**

    **comm** -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *Sys.getDefaultComm*, *TaoLineSearchCreate*

  *Source code at petsc4py/PETSc/TAO.pyx:1964*

- **destroy()**

  Destroy the linesearch object.

  Collective.

  **SEE ALSO:**

  *TaoLineSearchDestroy*

  *Source code at petsc4py/PETSc/TAO.pyx:1951*

  - **Return type**

    *Self*

- **getOptionsPrefix()**

  Return the prefix used for searching for options in the database.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *TaoLineSearchGetOptionsPrefix*

  *Source code at petsc4py/PETSc/TAO.pyx:2056*

  - **Return type**

    *str*

- **getType()**

  Return the type of the linesearch.

  Not collective.

  **SEE ALSO:**

  *setType*, *TaoLineSearchGetType*

  *Source code at petsc4py/PETSc/TAO.pyx:2004*

  - **Return type**

    *str*

- **setFromOptions()**

  Configure the linesearch from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *TaoLineSearchSetFromOptions*

  *Source code at petsc4py/PETSc/TAO.pyx:2018*

  - **Return type**

    *None*

- **setGradient(gradient, args=None, kargs=None)**

  Set the gradient evaluation callback.

  Logically collective.

  - **Parameters**

    - •

      **gradient** (*TAOLSGradientFunction*) -- The gradient callback.

    - •

      **g** -- The vector to store the gradient.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setObjective*, *setObjectiveGradient*, *setHessian*, *TaoLineSearchSetGradientRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:2095*

- **setObjective(objective, args=None, kargs=None)**

  Set the objective function evaluation callback.

  Logically collective.

  - **Parameters**

    - •

      **objective** (*TAOLSObjectiveFunction*) -- The objective function callback.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setGradient*, *setObjectiveGradient*, *TaoLineSearchSetObjectiveRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:2070*

- **setObjectiveGradient(objgrad, args=None, kargs=None)**

  Set the objective function and gradient evaluation callback.

  Logically collective.

  - **Parameters**

    - •

      **objgrad** (*TAOLSObjectiveGradientFunction*) -- The objective function and gradient callback.

    - •

      **g** -- The vector to store the gradient.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Positional arguments for the callback.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Keyword arguments for the callback.

  - **Return type**

    *None*

  **SEE ALSO:**

  *setObjective*, *setGradient*, *setHessian*, *getObjectiveAndGradient*, *TaoLineSearchSetObjectiveAndGradientRoutine*

  *Source code at petsc4py/PETSc/TAO.pyx:2122*

- **setOptionsPrefix(prefix=None)**

  Set the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *TaoLineSearchSetOptionsPrefix*

  *Source code at petsc4py/PETSc/TAO.pyx:2042*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **setType(ls\_type)**

  Set the type of the linesearch.

  Logically collective.

  - **Parameters**

    **ls\_type** (*Type \| str*) -- The type of the solver.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getType*, *TaoLineSearchSetType*

  *Source code at petsc4py/PETSc/TAO.pyx:1985*

- **setUp()**

  Set up the internal data structures for using the linesearch.

  Collective.

  **SEE ALSO:**

  *TaoLineSearchSetUp*

  *Source code at petsc4py/PETSc/TAO.pyx:2030*

  - **Return type**

    *None*

- **useTAORoutine(tao)**

  Use the objective and gradient evaluation routines from the given Tao object.

  Logically collective.

  **SEE ALSO:**

  *TaoLineSearchUseTaoRoutines*

  *Source code at petsc4py/PETSc/TAO.pyx:2149*

  - **Parameters**

    **tao** (*TAO*)

  - **Return type**

    *None*

- **view(viewer=None)**

  View the linesearch object.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TaoLineSearchView*

  *Source code at petsc4py/PETSc/TAO.pyx:1932*

### petsc4py.PETSc.TS

- **class petsc4py.PETSc.TS**

  Bases: *Object*

  ODE integrator.

  TS is described in the *PETSc manual*.

  **SEE ALSO:**

  *TS*

  Enumerations

  | | |
  | --- | --- |
  | *ARKIMEXType* | The *ARKIMEX* subtype. |
  | *ConvergedReason* | The reason the time step is converging. |
  | *DIRKType* | The *DIRK* subtype. |
  | *EquationType* | Distinguishes among types of explicit and implicit equations. |
  | *ExactFinalTime* | The method for ending time stepping. |
  | *ProblemType* | Distinguishes linear and nonlinear problems. |
  | *RKType* | The *RK* subtype. |
  | *Type* | The time stepping method. |

### petsc4py.PETSc.TS.ARKIMEXType

- **class petsc4py.PETSc.TS.ARKIMEXType**

  Bases: *object*

  The *ARKIMEX* subtype.

  Attributes Summary

  | | |
  | --- | --- |
  | *ARKIMEX1BEE* | Object **ARKIMEX1BEE** of type *str* |
  | *ARKIMEX2C* | Object **ARKIMEX2C** of type *str* |
  | *ARKIMEX2D* | Object **ARKIMEX2D** of type *str* |
  | *ARKIMEX2E* | Object **ARKIMEX2E** of type *str* |
  | *ARKIMEX3* | Object **ARKIMEX3** of type *str* |
  | *ARKIMEX4* | Object **ARKIMEX4** of type *str* |
  | *ARKIMEX5* | Object **ARKIMEX5** of type *str* |
  | *ARKIMEXA2* | Object **ARKIMEXA2** of type *str* |
  | *ARKIMEXARS122* | Object **ARKIMEXARS122** of type *str* |
  | *ARKIMEXARS443* | Object **ARKIMEXARS443** of type *str* |
  | *ARKIMEXBPR3* | Object **ARKIMEXBPR3** of type *str* |
  | *ARKIMEXL2* | Object **ARKIMEXL2** of type *str* |
  | *ARKIMEXPRSSP2* | Object **ARKIMEXPRSSP2** of type *str* |

  Attributes Documentation

  - **ARKIMEX1BEE: *str* = ARKIMEX1BEE**

    Object **ARKIMEX1BEE** of type *str*

  - **ARKIMEX2C: *str* = ARKIMEX2C**

    Object **ARKIMEX2C** of type *str*

  - **ARKIMEX2D: *str* = ARKIMEX2D**

    Object **ARKIMEX2D** of type *str*

  - **ARKIMEX2E: *str* = ARKIMEX2E**

    Object **ARKIMEX2E** of type *str*

  - **ARKIMEX3: *str* = ARKIMEX3**

    Object **ARKIMEX3** of type *str*

  - **ARKIMEX4: *str* = ARKIMEX4**

    Object **ARKIMEX4** of type *str*

  - **ARKIMEX5: *str* = ARKIMEX5**

    Object **ARKIMEX5** of type *str*

  - **ARKIMEXA2: *str* = ARKIMEXA2**

    Object **ARKIMEXA2** of type *str*

  - **ARKIMEXARS122: *str* = ARKIMEXARS122**

    Object **ARKIMEXARS122** of type *str*

  - **ARKIMEXARS443: *str* = ARKIMEXARS443**

    Object **ARKIMEXARS443** of type *str*

  - **ARKIMEXBPR3: *str* = ARKIMEXBPR3**

    Object **ARKIMEXBPR3** of type *str*

  - **ARKIMEXL2: *str* = ARKIMEXL2**

    Object **ARKIMEXL2** of type *str*

  - **ARKIMEXPRSSP2: *str* = ARKIMEXPRSSP2**

    Object **ARKIMEXPRSSP2** of type *str*

### petsc4py.PETSc.TS.ConvergedReason

- **class petsc4py.PETSc.TS.ConvergedReason**

  Bases: *object*

  The reason the time step is converging.

  Attributes Summary

  | | |
  | --- | --- |
  | *CONVERGED\_EVENT* | Constant **CONVERGED\_EVENT** of type *int* |
  | *CONVERGED\_ITERATING* | Constant **CONVERGED\_ITERATING** of type *int* |
  | *CONVERGED\_ITS* | Constant **CONVERGED\_ITS** of type *int* |
  | *CONVERGED\_TIME* | Constant **CONVERGED\_TIME** of type *int* |
  | *CONVERGED\_USER* | Constant **CONVERGED\_USER** of type *int* |
  | *DIVERGED\_NONLINEAR\_SOLVE* | Constant **DIVERGED\_NONLINEAR\_SOLVE** of type *int* |
  | *DIVERGED\_STEP\_REJECTED* | Constant **DIVERGED\_STEP\_REJECTED** of type *int* |
  | *ITERATING* | Constant **ITERATING** of type *int* |

  Attributes Documentation

  - **CONVERGED\_EVENT: *int* = CONVERGED\_EVENT**

    Constant **CONVERGED\_EVENT** of type *int*

  - **CONVERGED\_ITERATING: *int* = CONVERGED\_ITERATING**

    Constant **CONVERGED\_ITERATING** of type *int*

  - **CONVERGED\_ITS: *int* = CONVERGED\_ITS**

    Constant **CONVERGED\_ITS** of type *int*

  - **CONVERGED\_TIME: *int* = CONVERGED\_TIME**

    Constant **CONVERGED\_TIME** of type *int*

  - **CONVERGED\_USER: *int* = CONVERGED\_USER**

    Constant **CONVERGED\_USER** of type *int*

  - **DIVERGED\_NONLINEAR\_SOLVE: *int* = DIVERGED\_NONLINEAR\_SOLVE**

    Constant **DIVERGED\_NONLINEAR\_SOLVE** of type *int*

  - **DIVERGED\_STEP\_REJECTED: *int* = DIVERGED\_STEP\_REJECTED**

    Constant **DIVERGED\_STEP\_REJECTED** of type *int*

  - **ITERATING: *int* = ITERATING**

    Constant **ITERATING** of type *int*

### petsc4py.PETSc.TS.DIRKType

- **class petsc4py.PETSc.TS.DIRKType**

  Bases: *object*

  The *DIRK* subtype.

  Attributes Summary

  | | |
  | --- | --- |
  | *DIRK657A* | Object **DIRK657A** of type *str* |
  | *DIRK658A* | Object **DIRK658A** of type *str* |
  | *DIRK7510SAL* | Object **DIRK7510SAL** of type *str* |
  | *DIRK759A* | Object **DIRK759A** of type *str* |
  | *DIRK8614A* | Object **DIRK8614A** of type *str* |
  | *DIRK8616SAL* | Object **DIRK8616SAL** of type *str* |
  | *DIRKES122SAL* | Object **DIRKES122SAL** of type *str* |
  | *DIRKES213SAL* | Object **DIRKES213SAL** of type *str* |
  | *DIRKES324SAL* | Object **DIRKES324SAL** of type *str* |
  | *DIRKES325SAL* | Object **DIRKES325SAL** of type *str* |
  | *DIRKES648SA* | Object **DIRKES648SA** of type *str* |
  | *DIRKES7510SA* | Object **DIRKES7510SA** of type *str* |
  | *DIRKES8516SAL* | Object **DIRKES8516SAL** of type *str* |
  | *DIRKS212* | Object **DIRKS212** of type *str* |
  | *DIRKS659A* | Object **DIRKS659A** of type *str* |
  | *DIRKS7511SAL* | Object **DIRKS7511SAL** of type *str* |

  Attributes Documentation

  - **DIRK657A: *str* = DIRK657A**

    Object **DIRK657A** of type *str*

  - **DIRK658A: *str* = DIRK658A**

    Object **DIRK658A** of type *str*

  - **DIRK7510SAL: *str* = DIRK7510SAL**

    Object **DIRK7510SAL** of type *str*

  - **DIRK759A: *str* = DIRK759A**

    Object **DIRK759A** of type *str*

  - **DIRK8614A: *str* = DIRK8614A**

    Object **DIRK8614A** of type *str*

  - **DIRK8616SAL: *str* = DIRK8616SAL**

    Object **DIRK8616SAL** of type *str*

  - **DIRKES122SAL: *str* = DIRKES122SAL**

    Object **DIRKES122SAL** of type *str*

  - **DIRKES213SAL: *str* = DIRKES213SAL**

    Object **DIRKES213SAL** of type *str*

  - **DIRKES324SAL: *str* = DIRKES324SAL**

    Object **DIRKES324SAL** of type *str*

  - **DIRKES325SAL: *str* = DIRKES325SAL**

    Object **DIRKES325SAL** of type *str*

  - **DIRKES648SA: *str* = DIRKES648SA**

    Object **DIRKES648SA** of type *str*

  - **DIRKES7510SA: *str* = DIRKES7510SA**

    Object **DIRKES7510SA** of type *str*

  - **DIRKES8516SAL: *str* = DIRKES8516SAL**

    Object **DIRKES8516SAL** of type *str*

  - **DIRKS212: *str* = DIRKS212**

    Object **DIRKS212** of type *str*

  - **DIRKS659A: *str* = DIRKS659A**

    Object **DIRKS659A** of type *str*

  - **DIRKS7511SAL: *str* = DIRKS7511SAL**

    Object **DIRKS7511SAL** of type *str*

### petsc4py.PETSc.TS.EquationType

- **class petsc4py.PETSc.TS.EquationType**

  Bases: *object*

  Distinguishes among types of explicit and implicit equations.

  Attributes Summary

  | | |
  | --- | --- |
  | *DAE\_IMPLICIT\_INDEX1* | Constant **DAE\_IMPLICIT\_INDEX1** of type *int* |
  | *DAE\_IMPLICIT\_INDEX2* | Constant **DAE\_IMPLICIT\_INDEX2** of type *int* |
  | *DAE\_IMPLICIT\_INDEX3* | Constant **DAE\_IMPLICIT\_INDEX3** of type *int* |
  | *DAE\_IMPLICIT\_INDEXHI* | Constant **DAE\_IMPLICIT\_INDEXHI** of type *int* |
  | *DAE\_SEMI\_EXPLICIT\_INDEX1* | Constant **DAE\_SEMI\_EXPLICIT\_INDEX1** of type *int* |
  | *DAE\_SEMI\_EXPLICIT\_INDEX2* | Constant **DAE\_SEMI\_EXPLICIT\_INDEX2** of type *int* |
  | *DAE\_SEMI\_EXPLICIT\_INDEX3* | Constant **DAE\_SEMI\_EXPLICIT\_INDEX3** of type *int* |
  | *DAE\_SEMI\_EXPLICIT\_INDEXHI* | Constant **DAE\_SEMI\_EXPLICIT\_INDEXHI** of type *int* |
  | *EXPLICIT* | Constant **EXPLICIT** of type *int* |
  | *IMPLICIT* | Constant **IMPLICIT** of type *int* |
  | *ODE\_EXPLICIT* | Constant **ODE\_EXPLICIT** of type *int* |
  | *ODE\_IMPLICIT* | Constant **ODE\_IMPLICIT** of type *int* |
  | *UNSPECIFIED* | Constant **UNSPECIFIED** of type *int* |

  Attributes Documentation

  - **DAE\_IMPLICIT\_INDEX1: *int* = DAE\_IMPLICIT\_INDEX1**

    Constant **DAE\_IMPLICIT\_INDEX1** of type *int*

  - **DAE\_IMPLICIT\_INDEX2: *int* = DAE\_IMPLICIT\_INDEX2**

    Constant **DAE\_IMPLICIT\_INDEX2** of type *int*

  - **DAE\_IMPLICIT\_INDEX3: *int* = DAE\_IMPLICIT\_INDEX3**

    Constant **DAE\_IMPLICIT\_INDEX3** of type *int*

  - **DAE\_IMPLICIT\_INDEXHI: *int* = DAE\_IMPLICIT\_INDEXHI**

    Constant **DAE\_IMPLICIT\_INDEXHI** of type *int*

  - **DAE\_SEMI\_EXPLICIT\_INDEX1: *int* = DAE\_SEMI\_EXPLICIT\_INDEX1**

    Constant **DAE\_SEMI\_EXPLICIT\_INDEX1** of type *int*

  - **DAE\_SEMI\_EXPLICIT\_INDEX2: *int* = DAE\_SEMI\_EXPLICIT\_INDEX2**

    Constant **DAE\_SEMI\_EXPLICIT\_INDEX2** of type *int*

  - **DAE\_SEMI\_EXPLICIT\_INDEX3: *int* = DAE\_SEMI\_EXPLICIT\_INDEX3**

    Constant **DAE\_SEMI\_EXPLICIT\_INDEX3** of type *int*

  - **DAE\_SEMI\_EXPLICIT\_INDEXHI: *int* = DAE\_SEMI\_EXPLICIT\_INDEXHI**

    Constant **DAE\_SEMI\_EXPLICIT\_INDEXHI** of type *int*

  - **EXPLICIT: *int* = EXPLICIT**

    Constant **EXPLICIT** of type *int*

  - **IMPLICIT: *int* = IMPLICIT**

    Constant **IMPLICIT** of type *int*

  - **ODE\_EXPLICIT: *int* = ODE\_EXPLICIT**

    Constant **ODE\_EXPLICIT** of type *int*

  - **ODE\_IMPLICIT: *int* = ODE\_IMPLICIT**

    Constant **ODE\_IMPLICIT** of type *int*

  - **UNSPECIFIED: *int* = UNSPECIFIED**

    Constant **UNSPECIFIED** of type *int*

### petsc4py.PETSc.TS.ExactFinalTime

- **class petsc4py.PETSc.TS.ExactFinalTime**

  Bases: *object*

  The method for ending time stepping.

  Attributes Summary

  | | |
  | --- | --- |
  | *INTERPOLATE* | Constant **INTERPOLATE** of type *int* |
  | *MATCHSTEP* | Constant **MATCHSTEP** of type *int* |
  | *STEPOVER* | Constant **STEPOVER** of type *int* |
  | *UNSPECIFIED* | Constant **UNSPECIFIED** of type *int* |

  Attributes Documentation

  - **INTERPOLATE: *int* = INTERPOLATE**

    Constant **INTERPOLATE** of type *int*

  - **MATCHSTEP: *int* = MATCHSTEP**

    Constant **MATCHSTEP** of type *int*

  - **STEPOVER: *int* = STEPOVER**

    Constant **STEPOVER** of type *int*

  - **UNSPECIFIED: *int* = UNSPECIFIED**

    Constant **UNSPECIFIED** of type *int*

### petsc4py.PETSc.TS.ProblemType

- **class petsc4py.PETSc.TS.ProblemType**

  Bases: *object*

  Distinguishes linear and nonlinear problems.

  Attributes Summary

  | | |
  | --- | --- |
  | *LINEAR* | Constant **LINEAR** of type *int* |
  | *NONLINEAR* | Constant **NONLINEAR** of type *int* |

  Attributes Documentation

  - **LINEAR: *int* = LINEAR**

    Constant **LINEAR** of type *int*

  - **NONLINEAR: *int* = NONLINEAR**

    Constant **NONLINEAR** of type *int*

### petsc4py.PETSc.TS.RKType

- **class petsc4py.PETSc.TS.RKType**

  Bases: *object*

  The *RK* subtype.

  Attributes Summary

  | | |
  | --- | --- |
  | *RK1FE* | Object **RK1FE** of type *str* |
  | *RK2A* | Object **RK2A** of type *str* |
  | *RK2B* | Object **RK2B** of type *str* |
  | *RK3* | Object **RK3** of type *str* |
  | *RK3BS* | Object **RK3BS** of type *str* |
  | *RK4* | Object **RK4** of type *str* |
  | *RK5BS* | Object **RK5BS** of type *str* |
  | *RK5DP* | Object **RK5DP** of type *str* |
  | *RK5F* | Object **RK5F** of type *str* |
  | *RK6VR* | Object **RK6VR** of type *str* |
  | *RK7VR* | Object **RK7VR** of type *str* |
  | *RK8VR* | Object **RK8VR** of type *str* |

  Attributes Documentation

  - **RK1FE: *str* = RK1FE**

    Object **RK1FE** of type *str*

  - **RK2A: *str* = RK2A**

    Object **RK2A** of type *str*

  - **RK2B: *str* = RK2B**

    Object **RK2B** of type *str*

  - **RK3: *str* = RK3**

    Object **RK3** of type *str*

  - **RK3BS: *str* = RK3BS**

    Object **RK3BS** of type *str*

  - **RK4: *str* = RK4**

    Object **RK4** of type *str*

  - **RK5BS: *str* = RK5BS**

    Object **RK5BS** of type *str*

  - **RK5DP: *str* = RK5DP**

    Object **RK5DP** of type *str*

  - **RK5F: *str* = RK5F**

    Object **RK5F** of type *str*

  - **RK6VR: *str* = RK6VR**

    Object **RK6VR** of type *str*

  - **RK7VR: *str* = RK7VR**

    Object **RK7VR** of type *str*

  - **RK8VR: *str* = RK8VR**

    Object **RK8VR** of type *str*

### petsc4py.PETSc.TS.Type

- **class petsc4py.PETSc.TS.Type**

  Bases: *object*

  The time stepping method.

  Attributes Summary

  | | |
  | --- | --- |
  | *ALPHA* | Object **ALPHA** of type *str* |
  | *ALPHA2* | Object **ALPHA2** of type *str* |
  | *ARKIMEX* | Object **ARKIMEX** of type *str* |
  | *BASICSYMPLECTIC* | Object **BASICSYMPLECTIC** of type *str* |
  | *BDF* | Object **BDF** of type *str* |
  | *BE* | Object **BE** of type *str* |
  | *BEULER* | Object **BEULER** of type *str* |
  | *CN* | Object **CN** of type *str* |
  | *CRANK\_NICOLSON* | Object **CRANK\_NICOLSON** of type *str* |
  | *DIRK* | Object **DIRK** of type *str* |
  | *DISCGRAD* | Object **DISCGRAD** of type *str* |
  | *EIMEX* | Object **EIMEX** of type *str* |
  | *EULER* | Object **EULER** of type *str* |
  | *FE* | Object **FE** of type *str* |
  | *GLEE* | Object **GLEE** of type *str* |
  | *GLLE* | Object **GLLE** of type *str* |
  | *MIMEX* | Object **MIMEX** of type *str* |
  | *MPRK* | Object **MPRK** of type *str* |
  | *PSEUDO* | Object **PSEUDO** of type *str* |
  | *PYTHON* | Object **PYTHON** of type *str* |
  | *RADAU5* | Object **RADAU5** of type *str* |
  | *RK* | Object **RK** of type *str* |
  | *ROSW* | Object **ROSW** of type *str* |
  | *RUNGE\_KUTTA* | Object **RUNGE\_KUTTA** of type *str* |
  | *SSP* | Object **SSP** of type *str* |
  | *SUNDIALS* | Object **SUNDIALS** of type *str* |
  | *TH* | Object **TH** of type *str* |
  | *THETA* | Object **THETA** of type *str* |

  Attributes Documentation

  - **ALPHA: *str* = ALPHA**

    Object **ALPHA** of type *str*

  - **ALPHA2: *str* = ALPHA2**

    Object **ALPHA2** of type *str*

  - **ARKIMEX: *str* = ARKIMEX**

    Object **ARKIMEX** of type *str*

  - **BASICSYMPLECTIC: *str* = BASICSYMPLECTIC**

    Object **BASICSYMPLECTIC** of type *str*

  - **BDF: *str* = BDF**

    Object **BDF** of type *str*

  - **BE: *str* = BE**

    Object **BE** of type *str*

  - **BEULER: *str* = BEULER**

    Object **BEULER** of type *str*

  - **CN: *str* = CN**

    Object **CN** of type *str*

  - **CRANK\_NICOLSON: *str* = CRANK\_NICOLSON**

    Object **CRANK\_NICOLSON** of type *str*

  - **DIRK: *str* = DIRK**

    Object **DIRK** of type *str*

  - **DISCGRAD: *str* = DISCGRAD**

    Object **DISCGRAD** of type *str*

  - **EIMEX: *str* = EIMEX**

    Object **EIMEX** of type *str*

  - **EULER: *str* = EULER**

    Object **EULER** of type *str*

  - **FE: *str* = FE**

    Object **FE** of type *str*

  - **GLEE: *str* = GLEE**

    Object **GLEE** of type *str*

  - **GLLE: *str* = GLLE**

    Object **GLLE** of type *str*

  - **MIMEX: *str* = MIMEX**

    Object **MIMEX** of type *str*

  - **MPRK: *str* = MPRK**

    Object **MPRK** of type *str*

  - **PSEUDO: *str* = PSEUDO**

    Object **PSEUDO** of type *str*

  - **PYTHON: *str* = PYTHON**

    Object **PYTHON** of type *str*

  - **RADAU5: *str* = RADAU5**

    Object **RADAU5** of type *str*

  - **RK: *str* = RK**

    Object **RK** of type *str*

  - **ROSW: *str* = ROSW**

    Object **ROSW** of type *str*

  - **RUNGE\_KUTTA: *str* = RUNGE\_KUTTA**

    Object **RUNGE\_KUTTA** of type *str*

  - **SSP: *str* = SSP**

    Object **SSP** of type *str*

  - **SUNDIALS: *str* = SUNDIALS**

    Object **SUNDIALS** of type *str*

  - **TH: *str* = TH**

    Object **TH** of type *str*

  - **THETA: *str* = THETA**

    Object **THETA** of type *str*

Methods Summary

| | |
| --- | --- |
| *adjointReset*() | Reset a *TS*, removing any allocated vectors and matrices. |
| *adjointSetSteps*(adjoint\_steps) | Set the number of steps the adjoint solver should take backward in time. |
| *adjointSetUp*() | Set up the internal data structures for the later use of an adjoint solver. |
| *adjointSolve*() | Solve the discrete adjoint problem for an ODE/DAE. |
| *adjointStep*() | Step one time step backward in the adjoint run. |
| *appendOptionsPrefix*(prefix) | Append to the prefix used for all the *TS* options. |
| *clone*() | Return a shallow clone of the *TS* object. |
| *computeI2Function*(t, x, xdot, xdotdot, f) | Evaluate the DAE residual in implicit form. |
| *computeI2Jacobian*(t, x, xdot, xdotdot, v, a, J) | Evaluate the Jacobian of the DAE. |
| *computeIFunction*(t, x, xdot, f\[, imex\]) | Evaluate the DAE residual written in implicit form. |
| *computeIJacobian*(t, x, xdot, a, J\[, P, imex\]) | Evaluate the Jacobian of the DAE. |
| *computeIJacobianP*(t, x, xdot, a, J\[, imex\]) | Evaluate the Jacobian with respect to parameters. |
| *computeRHSFunction*(t, x, f) | Evaluate the right-hand side function. |
| *computeRHSFunctionLinear*(t, x, f) | Evaluate the right-hand side via the user-provided Jacobian. |
| *computeRHSJacobian*(t, x, J\[, P\]) | Compute the Jacobian matrix that has been set with *setRHSJacobian*. |
| *computeRHSJacobianConstant*(t, x, J\[, P\]) | Reuse a Jacobian that is time-independent. |
| *computeRHSJacobianP*(t, x, J) | Run the user-defined JacobianP function. |
| *create*(\[comm\]) | Create an empty *TS*. |
| *createPython*(\[context, comm\]) | Create an integrator of Python type. |
| *createQuadratureTS*(\[forward\]) | Create a sub *TS* that evaluates integrals over time. |
| *destroy*() | Destroy the *TS* that was created with *create*. |
| *getARKIMEXType*() | Return the *Type.ARKIMEX* scheme. |
| *getAlphaParams*() | Return the algorithmic parameters for *Type.ALPHA*. |
| *getAppCtx*() | Return the application context. |
| *getConvergedReason*() | Return the reason the *TS* step was stopped. |
| *getCostGradients*() | Return the cost gradients. |
| *getCostIntegral*() | Return a vector of values of the integral term in the cost functions. |
| *getDIRKType*() | Return the *Type.DIRK* scheme. |
| *getDM*() | Return the *DM* associated with the *TS*. |
| *getEquationType*() | Get the type of the equation that *TS* is solving. |
| *getI2Function*() | Return the vector and function which computes the residual. |
| *getI2Jacobian*() | Return the matrices and function which computes the Jacobian. |
| *getIFunction*() | Return the vector and function which computes the implicit residual. |
| *getIJacobian*() | Return the matrices and function which computes the implicit Jacobian. |
| *getKSP*() | Return the *KSP* associated with the *TS*. |
| *getKSPIterations*() | Return the total number of linear iterations used by the *TS*. |
| *getMaxSteps*() | Return the maximum number of steps to use. |
| *getMaxTime*() | Return the maximum (final) time. |
| *getMonitor*() | Return the monitor. |
| *getNumEvents*() | Return the number of events. |
| *getOptionsPrefix*() | Return the prefix used for all the *TS* options. |
| *getPostStep*() | Return the poststep function. |
| *getPreStep*() | Return the prestep function. |
| *getPrevTime*() | Return the starting time of the previously completed step. |
| *getProblemType*() | Return the type of problem to be solved. |
| *getPythonContext*() | Return the instance of the class implementing the required Python methods. |
| *getPythonType*() | Return the fully qualified Python name of the class used by the solver. |
| *getQuadratureTS*() | Return the sub *TS* that evaluates integrals over time. |
| *getRHSFunction*() | Return the vector where the rhs is stored and the function used to compute it. |
| *getRHSJacobian*() | Return the Jacobian and the function used to compute them. |
| *getRKType*() | Return the *Type.RK* scheme. |
| *getSNES*() | Return the *SNES* associated with the *TS*. |
| *getSNESFailures*() | Return the total number of failed *SNES* solves in the *TS*. |
| *getSNESIterations*() | Return the total number of nonlinear iterations used by the *TS*. |
| *getSolution*() | Return the solution at the present timestep. |
| *getSolution2*() | Return the solution and time derivative at the present timestep. |
| *getSolveTime*() | Return the time after a call to *solve*. |
| *getStepLimits*() | Return the minimum and maximum allowed time step sizes. |
| *getStepNumber*() | Return the number of time steps completed. |
| *getStepRejections*() | Return the total number of rejected steps. |
| *getTheta*() | Return the abscissa of the stage in **(0, 1\]** for *Type.THETA*. |
| *getThetaEndpoint*() | Return whether the endpoint variable of *Type.THETA* is used. |
| *getTime*() | Return the time of the most recently completed step. |
| *getTimeSpan*() | Return the time span. |
| *getTimeSpanSolutions*() | Return the solutions at the times in the time span. |
| *getTimeStep*() | Return the duration of the current timestep. |
| *getTolerances*() | Return the tolerances for local truncation error. |
| *getType*() | Return the *TS* type. |
| *interpolate*(t, u) | Interpolate the solution to a given time. |
| *load*(viewer) | Load a *TS* that has been stored in binary with *view*. |
| *monitor*(step, time\[, u\]) | Monitor the solve. |
| *monitorCancel*() | Clear all the monitors that have been set. |
| *removeTrajectory*() | Remove the internal *TS* trajectory object. |
| *reset*() | Reset the *TS*, removing any allocated vectors and matrices. |
| *restartStep*() | Flag the solver to restart the next step. |
| *rollBack*() | Roll back one time step. |
| *setARKIMEXFastSlowSplit*(flag) | Use ARKIMEX for solving a fast-slow system. |
| *setARKIMEXFullyImplicit*(flag) | Solve both parts of the equation implicitly. |
| *setARKIMEXType*(ts\_type) | Set the type of *Type.ARKIMEX* scheme. |
| *setAlphaParams*(\[alpha\_m, alpha\_f, gamma\]) | Set the algorithmic parameters for *Type.ALPHA*. |
| *setAlphaRadius*(radius) | Set the spectral radius for *Type.ALPHA*. |
| *setAppCtx*(appctx) | Set the application context. |
| *setConvergedReason*(reason) | Set the reason for handling the convergence of *solve*. |
| *setCostGradients*(vl\[, vm\]) | Set the cost gradients. |
| *setDIRKType*(ts\_type) | Set the type of *Type.DIRK* scheme. |
| *setDM*(dm) | Set the DM that may be used by some nonlinear solvers or preconditioners. |
| *setEquationType*(eqtype) | Set the type of the equation that *TS* is solving. |
| *setErrorIfStepFails*(\[flag\]) | Immediately error is no step succeeds. |
| *setEventHandler*(direction, terminate, indicator) | Set a function used for detecting events. |
| *setEventTolerances*(\[tol, vtol\]) | Set tolerances for event zero crossings when using event handler. |
| *setExactFinalTime*(option) | Set method of computing the final time step. |
| *setFromOptions*() | Set various *TS* parameters from user options. |
| *setI2Function*(function\[, f, args, kargs\]) | Set the function to compute the 2nd order DAE. |
| *setI2Jacobian*(jacobian\[, J, P, args, kargs\]) | Set the function to compute the Jacobian of the 2nd order DAE. |
| *setIFunction*(function\[, f, args, kargs\]) | Set the function representing the DAE to be solved. |
| *setIJacobian*(jacobian\[, J, P, args, kargs\]) | Set the function to compute the Jacobian. |
| *setIJacobianP*(jacobian\[, J, args, kargs\]) | Set the function that computes the Jacobian. |
| *setMaxSNESFailures*(n) | Set the maximum number of SNES solves failures allowed. |
| *setMaxStepRejections*(n) | Set the maximum number of step rejections before a time step fails. |
| *setMaxSteps*(max\_steps) | Set the maximum number of steps to use. |
| *setMaxTime*(max\_time) | Set the maximum (final) time. |
| *setMonitor*(monitor\[, args, kargs\]) | Set an additional monitor to the *TS*. |
| *setOptionsPrefix*(prefix) | Set the prefix used for all the *TS* options. |
| *setPostStep*(poststep\[, args, kargs\]) | Set a function to be called at the end of each time step. |
| *setPreStep*(prestep\[, args, kargs\]) | Set a function to be called at the beginning of each time step. |
| *setProblemType*(ptype) | Set the type of problem to be solved. |
| *setPythonContext*(context) | Set the instance of the class implementing the required Python methods. |
| *setPythonType*(py\_type) | Set the fully qualified Python name of the class to be used. |
| *setRHSFunction*(function\[, f, args, kargs\]) | Set the routine for evaluating the function **G** in **U\_t = G(t, u)**. |
| *setRHSJacobian*(jacobian\[, J, P, args, kargs\]) | Set the function to compute the Jacobian of **G** in **U\_t = G(U, t)**. |
| *setRHSJacobianP*(jacobianp\[, A, args, kargs\]) | Set the function that computes the Jacobian with respect to the parameters. |
| *setRHSSplitIFunction*(splitname, function\[, ...\]) | Set the split implicit functions. |
| *setRHSSplitIJacobian*(splitname, jacobian\[, ...\]) | Set the Jacobian for the split implicit function. |
| *setRHSSplitIS*(splitname, iss) | Set the index set for the specified split. |
| *setRHSSplitRHSFunction*(splitname, function) | Set the split right-hand-side functions. |
| *setRKType*(ts\_type) | Set the type of the *Runge-Kutta* scheme. |
| *setSaveTrajectory*() | Enable to save solutions as an internal *TS* trajectory. |
| *setSolution*(u) | Set the initial solution vector. |
| *setSolution2*(u, v) | Set the initial solution and its time derivative. |
| *setStepLimits*(hmin, hmax) | Set the minimum and maximum allowed step sizes. |
| *setStepNumber*(step\_number) | Set the number of steps completed. |
| *setTheta*(theta) | Set the abscissa of the stage in **(0, 1\]** for *Type.THETA*. |
| *setThetaEndpoint*(\[flag\]) | Set to use the endpoint variant of *Type.THETA*. |
| *setTime*(t) | Set the time. |
| *setTimeSpan*(tspan) | Set the time span. |
| *setTimeStep*(time\_step) | Set the duration of the timestep. |
| *setTolerances*(\[rtol, atol\]) | Set tolerances for local truncation error when using an adaptive controller. |
| *setType*(ts\_type) | Set the method to be used as the *TS* solver. |
| *setUp*() | Set up the internal data structures for the *TS*. |
| *solve*(\[u\]) | Step the requested number of timesteps. |
| *step*() | Take one step. |
| *view*(\[viewer\]) | Print the *TS* object. |

Attributes Summary

| | |
| --- | --- |
| *appctx* | Application context. |
| *atol* | The absolute tolerance. |
| *converged* | Indicates the *TS* has converged. |
| *diverged* | Indicates the *TS* has stopped. |
| *dm* | The *DM*. |
| *equation\_type* | The equation type. |
| *iterating* | Indicates the *TS* is still iterating. |
| *ksp* | The *KSP*. |
| *max\_steps* | The maximum number of steps. |
| *max\_time* | The maximum time. |
| *problem\_type* | The problem type. |
| *reason* | The converged reason. |
| *rtol* | The relative tolerance. |
| *snes* | The *SNES*. |
| *step\_number* | The current step number. |
| *time* | The current time. |
| *time\_step* | The current time step size. |
| *vec\_sol* | The solution vector. |

Methods Documentation

- **adjointReset()**

  Reset a *TS*, removing any allocated vectors and matrices.

  Collective.

  **SEE ALSO:**

  *TSAdjointReset*

  *Source code at petsc4py/PETSc/TS.pyx:2849*

  - **Return type**

    *None*

- **adjointSetSteps(adjoint\_steps)**

  Set the number of steps the adjoint solver should take backward in time.

  Logically collective.

  - **Parameters**

    **adjoint\_steps** (*int*) -- The number of steps to take.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSAdjointSetSteps*

  *Source code at petsc4py/PETSc/TS.pyx:2795*

- **adjointSetUp()**

  Set up the internal data structures for the later use of an adjoint solver.

  Collective.

  **SEE ALSO:**

  *TSAdjointSetUp*

  *Source code at petsc4py/PETSc/TS.pyx:2813*

  - **Return type**

    *None*

- **adjointSolve()**

  Solve the discrete adjoint problem for an ODE/DAE.

  Collective.

  **SEE ALSO:**

  *TSAdjointSolve*

  *Source code at petsc4py/PETSc/TS.pyx:2825*

  - **Return type**

    *None*

- **adjointStep()**

  Step one time step backward in the adjoint run.

  Collective.

  **SEE ALSO:**

  *TSAdjointStep*

  *Source code at petsc4py/PETSc/TS.pyx:2837*

  - **Return type**

    *None*

- **appendOptionsPrefix(prefix)**

  Append to the prefix used for all the *TS* options.

  Logically collective.

  - **Parameters**

    **prefix** (*str \| None*) -- The prefix to append to the current prefix.

  - **Return type**

    *None*

  Notes

  A hyphen must not be given at the beginning of the prefix name.

  **SEE ALSO:**

  *Working with PETSc options*, *TSAppendOptionsPrefix*

  *Source code at petsc4py/PETSc/TS.pyx:539*

- **clone()**

  Return a shallow clone of the *TS* object.

  Collective.

  **SEE ALSO:**

  *TSClone*

  *Source code at petsc4py/PETSc/TS.pyx:243*

  - **Return type**

    *TS*

- **computeI2Function(t, x, xdot, xdotdot, f)**

  Evaluate the DAE residual in implicit form.

  Collective.

  - **Parameters**

    - •

      **t** (*float*) -- The current time.

    - •

      **x** (*Vec*) -- The state vector.

    - •

      **xdot** (*Vec*) -- The time derivative of the state vector.

    - •

      **xdotdot** (*Vec*) -- The second time derivative of the state vector.

    - •

      **f** (*Vec*) -- The vector into which the residual is stored.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeI2Function*

  *Source code at petsc4py/PETSc/TS.pyx:1142*

- **computeI2Jacobian(t, x, xdot, xdotdot, v, a, J, P=None)**

  Evaluate the Jacobian of the DAE.

  Collective.

  If **F(t, U, V, A)=0** is the DAE, the required Jacobian is **dF/dU + v dF/dV + a dF/dA**.

  - **Parameters**

    - •

      **t** (*float*) -- The current time.

    - •

      **x** (*Vec*) -- The state vector.

    - •

      **xdot** (*Vec*) -- The time derivative of the state vector.

    - •

      **xdotdot** (*Vec*) -- The second time derivative of the state vector.

    - •

      **v** (*float*) -- The shift to apply to the first derivative.

    - •

      **a** (*float*) -- The shift to apply to the second derivative.

    - •

      **J** (*Mat*) -- The matrix into which the Jacobian is computed.

    - •

      **P** (*Mat \| None*) -- The optional matrix to use for building a preconditioner matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeI2Jacobian*

  *Source code at petsc4py/PETSc/TS.pyx:1169*

- **computeIFunction(t, x, xdot, f, imex=False)**

  Evaluate the DAE residual written in implicit form.

  Collective.

  - **Parameters**

    - •

      **t** (*float*) -- The current time.

    - •

      **x** (*Vec*) -- The state vector.

    - •

      **xdot** (*Vec*) -- The time derivative of the state vector.

    - •

      **f** (*Vec*) -- The vector into which the residual is stored.

    - •

      **imex** (*bool*) -- A flag which indicates if the RHS should be kept separate.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeIFunction*

  *Source code at petsc4py/PETSc/TS.pyx:927*

- **computeIJacobian(t, x, xdot, a, J, P=None, imex=False)**

  Evaluate the Jacobian of the DAE.

  Collective.

  If **F(t, U, Udot)=0** is the DAE, the required Jacobian is **dF/dU + shift\*dF/dUdot**

  - **Parameters**

    - •

      **t** (*float*) -- The current time.

    - •

      **x** (*Vec*) -- The state vector.

    - •

      **xdot** (*Vec*) -- The time derivative of the state vector.

    - •

      **a** (*float*) -- The shift to apply

    - •

      **J** (*Mat*) -- The matrix into which the Jacobian is computed.

    - •

      **P** (*Mat \| None*) -- The optional matrix to use for building a preconditioner matrix.

    - •

      **imex** (*bool*) -- A flag which indicates if the RHS should be kept separate.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeIJacobian*

  *Source code at petsc4py/PETSc/TS.pyx:957*

- **computeIJacobianP(t, x, xdot, a, J, imex=False)**

  Evaluate the Jacobian with respect to parameters.

  Collective.

  - **Parameters**

    - •

      **t** (*float*) -- The current time.

    - •

      **x** (*Vec*) -- The state vector.

    - •

      **xdot** (*Vec*) -- The time derivative of the state vector.

    - •

      **a** (*float*) -- The shift to apply

    - •

      **J** (*Mat*) -- The matrix into which the Jacobian is computed.

    - •

      **imex** (*bool*) -- A flag which indicates if the RHS should be kept separate.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeIJacobianP*

  *Source code at petsc4py/PETSc/TS.pyx:997*

- **computeRHSFunction(t, x, f)**

  Evaluate the right-hand side function.

  Collective.

  - **Parameters**

    - •

      **t** (*float*) -- The time at which to evaluate the RHS.

    - •

      **x** (*Vec*) -- The state vector.

    - •

      **f** (*Vec*) -- The Vec into which the RHS is computed.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeRHSFunction*

  *Source code at petsc4py/PETSc/TS.pyx:674*

- **computeRHSFunctionLinear(t, x, f)**

  Evaluate the right-hand side via the user-provided Jacobian.

  Collective.

  - **Parameters**

    - •

      **t** (*float*) -- The time at which to evaluate the RHS.

    - •

      **x** (*Vec*) -- The state vector.

    - •

      **f** (*Vec*) -- The Vec into which the RHS is computed.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeRHSFunctionLinear*

  *Source code at petsc4py/PETSc/TS.pyx:696*

- **computeRHSJacobian(t, x, J, P=None)**

  Compute the Jacobian matrix that has been set with *setRHSJacobian*.

  Collective.

  - **Parameters**

    - •

      **t** (*float*) -- The time at which to evaluate the Jacobian.

    - •

      **x** (*Vec*) -- The state vector.

    - •

      **J** (*Mat*) -- The matrix into which the Jacobian is computed.

    - •

      **P** (*Mat \| None*) -- The optional matrix to use for building a preconditioner matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeRHSJacobian*

  *Source code at petsc4py/PETSc/TS.pyx:718*

- **computeRHSJacobianConstant(t, x, J, P=None)**

  Reuse a Jacobian that is time-independent.

  Collective.

  - **Parameters**

    - •

      **t** (*float*) -- The time at which to evaluate the Jacobian.

    - •

      **x** (*Vec*) -- The state vector.

    - •

      **J** (*Mat*) -- A pointer to the stored Jacobian.

    - •

      **P** (*Mat \| None*) -- An optional pointer to the preconditioner matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeRHSJacobianConstant*

  *Source code at petsc4py/PETSc/TS.pyx:744*

- **computeRHSJacobianP(t, x, J)**

  Run the user-defined JacobianP function.

  Collective.

  - **Parameters**

    - •

      **t** (*float*) -- The time at which to compute the Jacobian.

    - •

      **x** (*Vec*) -- The solution at which to compute the Jacobian.

    - •

      **J** (*Mat*) -- The output Jacobian matrix.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSComputeRHSJacobianP*

  *Source code at petsc4py/PETSc/TS.pyx:2773*

- **create(comm=None)**

  Create an empty *TS*.

  Collective.

  The problem type can then be set with *setProblemType* and the type of solver can then be set with *setType*.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *TSCreate*

  *Source code at petsc4py/PETSc/TS.pyx:219*

- **createPython(context=None, comm=None)**

  Create an integrator of Python type.

  Collective.

  - **Parameters**

    - •

      **context** (*Any*) -- An instance of the Python class implementing the required methods.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *PETSc Python ode-integrator type (TODO)*, *setType*, *setPythonContext*, *Type.PYTHON*

  *Source code at petsc4py/PETSc/TS.pyx:2863*

- **createQuadratureTS(forward=True)**

  Create a sub *TS* that evaluates integrals over time.

  Collective.

  - **Parameters**

    **forward** (*bool*) -- Enable to evaluate forward in time.

  - **Return type**

    *TS*

  **SEE ALSO:**

  *TSCreateQuadratureTS*

  *Source code at petsc4py/PETSc/TS.pyx:2692*

- **destroy()**

  Destroy the *TS* that was created with *create*.

  Collective.

  **SEE ALSO:**

  *TSDestroy*

  *Source code at petsc4py/PETSc/TS.pyx:206*

  - **Return type**

    *Self*

- **getARKIMEXType()**

  Return the *Type.ARKIMEX* scheme.

  Not collective.

  **SEE ALSO:**

  *TSARKIMEXGetType*

  *Source code at petsc4py/PETSc/TS.pyx:389*

  - **Return type**

    *str*

- **getAlphaParams()**

  Return the algorithmic parameters for *Type.ALPHA*.

  Not collective.

  **SEE ALSO:**

  *TSAlphaGetParams*

  *Source code at petsc4py/PETSc/TS.pyx:3070*

  - **Return type**

    *tuple*\[*float*, *float*, *float*\]

- **getAppCtx()**

  Return the application context.

  *Source code at petsc4py/PETSc/TS.pyx:589*

  - **Return type**

    *Any*

- **getConvergedReason()**

  Return the reason the *TS* step was stopped.

  Not collective.

  Can only be called once *solve* is complete.

  **SEE ALSO:**

  *TSGetConvergedReason*

  *Source code at petsc4py/PETSc/TS.pyx:2090*

  - **Return type**

    *ConvergedReason*

- **getCostGradients()**

  Return the cost gradients.

  Not collective.

  **SEE ALSO:**

  *setCostGradients*, *TSGetCostGradients*

  *Source code at petsc4py/PETSc/TS.pyx:2634*

  - **Return type**

    *tuple*\[*list*\[*Vec*\], *list*\[*Vec*\]\]

- **getCostIntegral()**

  Return a vector of values of the integral term in the cost functions.

  Not collective.

  **SEE ALSO:**

  *TSGetCostIntegral*

  *Source code at petsc4py/PETSc/TS.pyx:2573*

  - **Return type**

    *Vec*

- **getDIRKType()**

  Return the *Type.DIRK* scheme.

  Not collective.

  **SEE ALSO:**

  *setDIRKType*, *TSDIRKGetType*

  *Source code at petsc4py/PETSc/TS.pyx:426*

  - **Return type**

    *str*

- **getDM()**

  Return the *DM* associated with the *TS*.

  Not collective.

  Only valid if nonlinear solvers or preconditioners are used which use the *DM*.

  **SEE ALSO:**

  *TSGetDM*

  *Source code at petsc4py/PETSc/TS.pyx:1589*

  - **Return type**

    *DM*

- **getEquationType()**

  Get the type of the equation that *TS* is solving.

  Not collective.

  **SEE ALSO:**

  *TSGetEquationType*

  *Source code at petsc4py/PETSc/TS.pyx:488*

  - **Return type**

    *EquationType*

- **getI2Function()**

  Return the vector and function which computes the residual.

  Not collective.

  **SEE ALSO:**

  *TSGetI2Function*

  *Source code at petsc4py/PETSc/TS.pyx:1218*

  - **Return type**

    *tuple*\[*Vec*, *TSI2Function*\]

- **getI2Jacobian()**

  Return the matrices and function which computes the Jacobian.

  Not collective.

  **SEE ALSO:**

  *TSGetI2Jacobian*

  *Source code at petsc4py/PETSc/TS.pyx:1234*

  - **Return type**

    *tuple*\[*Mat*, *Mat*, *TSI2Jacobian*\]

- **getIFunction()**

  Return the vector and function which computes the implicit residual.

  Not collective.

  **SEE ALSO:**

  *TSGetIFunction*

  *Source code at petsc4py/PETSc/TS.pyx:1031*

  - **Return type**

    *tuple*\[*Vec*, *TSIFunction*\]

- **getIJacobian()**

  Return the matrices and function which computes the implicit Jacobian.

  Not collective.

  **SEE ALSO:**

  *TSGetIJacobian*

  *Source code at petsc4py/PETSc/TS.pyx:1047*

  - **Return type**

    *tuple*\[*Mat*, *Mat*, *TSIJacobian*\]

- **getKSP()**

  Return the *KSP* associated with the *TS*.

  Not collective.

  **SEE ALSO:**

  *TSGetKSP*

  *Source code at petsc4py/PETSc/TS.pyx:1572*

  - **Return type**

    *KSP*

- **getKSPIterations()**

  Return the total number of linear iterations used by the *TS*.

  Not collective.

  This counter is reset to zero for each successive call to *solve*.

  **SEE ALSO:**

  *TSGetKSPIterations*

  *Source code at petsc4py/PETSc/TS.pyx:1857*

  - **Return type**

    *int*

- **getMaxSteps()**

  Return the maximum number of steps to use.

  Not collective.

  **SEE ALSO:**

  *TSGetMaxSteps*

  *Source code at petsc4py/PETSc/TS.pyx:1826*

  - **Return type**

    *int*

- **getMaxTime()**

  Return the maximum (final) time.

  Not collective.

  Defaults to **5**.

  **SEE ALSO:**

  *TSGetMaxTime*

  *Source code at petsc4py/PETSc/TS.pyx:1790*

  - **Return type**

    *float*

- **getMonitor()**

  Return the monitor.

  Not collective.

  **SEE ALSO:**

  *setMonitor*

  *Source code at petsc4py/PETSc/TS.pyx:2142*

  - **Return type**

    *list*\[*tuple*\[*TSMonitorFunction*, *tuple*\[*Any*, ...\], *dict*\[*str*, *Any*\]\]\]

- **getNumEvents()**

  Return the number of events.

  Logically collective.

  **SEE ALSO:**

  *TSGetNumEvents*

  *Source code at petsc4py/PETSc/TS.pyx:2289*

  - **Return type**

    *int*

- **getOptionsPrefix()**

  Return the prefix used for all the *TS* options.

  Not collective.

  **SEE ALSO:**

  *TSGetOptionsPrefix*

  *Source code at petsc4py/PETSc/TS.pyx:525*

  - **Return type**

    *str*

- **getPostStep()**

  Return the poststep function.

  *Source code at petsc4py/PETSc/TS.pyx:2382*

  - **Return type**

    *tuple*\[*TSPostStepFunction*, *tuple*\[*Any*, ...\] \| *None*, *dict*\[*str*, *Any*\] \| *None*\]

- **getPreStep()**

  Return the prestep function.

  Not collective.

  **SEE ALSO:**

  *setPreStep*

  *Source code at petsc4py/PETSc/TS.pyx:2338*

  - **Return type**

    *tuple*\[*TSPreStepFunction*, *tuple*\[*Any*, ...\] \| *None*, *dict*\[*str*, *Any*\] \| *None*\]

- **getPrevTime()**

  Return the starting time of the previously completed step.

  Not collective.

  **SEE ALSO:**

  *TSGetPrevTime*

  *Source code at petsc4py/PETSc/TS.pyx:1664*

  - **Return type**

    *float*

- **getProblemType()**

  Return the type of problem to be solved.

  Not collective.

  **SEE ALSO:**

  *TSGetProblemType*

  *Source code at petsc4py/PETSc/TS.pyx:457*

  - **Return type**

    *ProblemType*

- **getPythonContext()**

  Return the instance of the class implementing the required Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python ode-integrator type (TODO)*, *setPythonContext*

  *Source code at petsc4py/PETSc/TS.pyx:2900*

  - **Return type**

    *Any*

- **getPythonType()**

  Return the fully qualified Python name of the class used by the solver.

  Not collective.

  **SEE ALSO:**

  *PETSc Python ode-integrator type (TODO)*, *setPythonContext*, *setPythonType*, *TSPythonGetType*

  *Source code at petsc4py/PETSc/TS.pyx:2929*

  - **Return type**

    *str*

- **getQuadratureTS()**

  Return the sub *TS* that evaluates integrals over time.

  Not collective.

  - **Returns**

    - •

      **forward** (*bool*) -- True if evaluating the integral forward in time

    - •

      **qts** (*TS*) -- The sub *TS*

  - **Return type**

    *tuple*\[*bool*, *TS*\]

  **SEE ALSO:**

  *TSGetQuadratureTS*

  *Source code at petsc4py/PETSc/TS.pyx:2713*

- **getRHSFunction()**

  Return the vector where the rhs is stored and the function used to compute it.

  Not collective.

  **SEE ALSO:**

  *TSGetRHSFunction*

  *Source code at petsc4py/PETSc/TS.pyx:770*

  - **Return type**

    *tuple*\[*Vec*, *TSRHSFunction*\]

- **getRHSJacobian()**

  Return the Jacobian and the function used to compute them.

  Not collective.

  **SEE ALSO:**

  *TSGetRHSJacobian*

  *Source code at petsc4py/PETSc/TS.pyx:786*

  - **Return type**

    *tuple*\[*Mat*, *Mat*, *TSRHSJacobian*\]

- **getRKType()**

  Return the *Type.RK* scheme.

  Not collective.

  **SEE ALSO:**

  *TSRKGetType*

  *Source code at petsc4py/PETSc/TS.pyx:375*

  - **Return type**

    *str*

- **getSNES()**

  Return the *SNES* associated with the *TS*.

  Not collective.

  **SEE ALSO:**

  *TSGetSNES*

  *Source code at petsc4py/PETSc/TS.pyx:1557*

  - **Return type**

    *SNES*

- **getSNESFailures()**

  Return the total number of failed *SNES* solves in the *TS*.

  Not collective.

  This counter is reset to zero for each successive call to *solve*.

  **SEE ALSO:**

  *TSGetSNESFailures*

  *Source code at petsc4py/PETSc/TS.pyx:1931*

  - **Return type**

    *int*

- **getSNESIterations()**

  Return the total number of nonlinear iterations used by the *TS*.

  Not collective.

  This counter is reset to zero for each successive call to *solve*.

  **SEE ALSO:**

  *TSGetSNESIterations*

  *Source code at petsc4py/PETSc/TS.pyx:1840*

  - **Return type**

    *int*

- **getSolution()**

  Return the solution at the present timestep.

  Not collective.

  It is valid to call this routine inside the function that you are evaluating in order to move to the new timestep. This vector is not changed until the solution at the next timestep has been calculated.

  **SEE ALSO:**

  *TSGetSolution*

  *Source code at petsc4py/PETSc/TS.pyx:1428*

  - **Return type**

    *Vec*

- **getSolution2()**

  Return the solution and time derivative at the present timestep.

  Not collective.

  It is valid to call this routine inside the function that you are evaluating in order to move to the new timestep. These vectors are not changed until the solution at the next timestep has been calculated.

  **SEE ALSO:**

  *TS2GetSolution*

  *Source code at petsc4py/PETSc/TS.pyx:1466*

  - **Return type**

    *tuple*\[*Vec*, *Vec*\]

- **getSolveTime()**

  Return the time after a call to *solve*.

  Not collective.

  This time corresponds to the final time set with *setMaxTime*.

  **SEE ALSO:**

  *TSGetSolveTime*

  *Source code at petsc4py/PETSc/TS.pyx:1678*

  - **Return type**

    *float*

- **getStepLimits()**

  Return the minimum and maximum allowed time step sizes.

  Not collective.

  **SEE ALSO:**

  *TSAdaptGetStepLimits*

  *Source code at petsc4py/PETSc/TS.pyx:2523*

  - **Return type**

    *tuple*\[*float*, *float*\]

- **getStepNumber()**

  Return the number of time steps completed.

  Not collective.

  **SEE ALSO:**

  *TSGetStepNumber*

  *Source code at petsc4py/PETSc/TS.pyx:1754*

  - **Return type**

    *int*

- **getStepRejections()**

  Return the total number of rejected steps.

  Not collective.

  This counter is reset to zero for each successive call to *solve*.

  **SEE ALSO:**

  *TSGetStepRejections*

  *Source code at petsc4py/PETSc/TS.pyx:1896*

  - **Return type**

    *int*

- **getTheta()**

  Return the abscissa of the stage in **(0, 1\]** for *Type.THETA*.

  Not collective.

  **SEE ALSO:**

  *TSThetaGetTheta*

  *Source code at petsc4py/PETSc/TS.pyx:2967*

  - **Return type**

    *float*

- **getThetaEndpoint()**

  Return whether the endpoint variable of *Type.THETA* is used.

  Not collective.

  **SEE ALSO:**

  *TSThetaGetEndpoint*

  *Source code at petsc4py/PETSc/TS.pyx:2999*

  - **Return type**

    *bool*

- **getTime()**

  Return the time of the most recently completed step.

  Not collective.

  When called during time step evaluation (e.g. during residual evaluation or via hooks set using *setPreStep* or *setPostStep*), the time returned is at the start of the step.

  **SEE ALSO:**

  *TSGetTime*

  *Source code at petsc4py/PETSc/TS.pyx:1646*

  - **Return type**

    *float*

- **getTimeSpan()**

  Return the time span.

  Not collective.

  **SEE ALSO:**

  *TSGetTimeSpan*

  *Source code at petsc4py/PETSc/TS.pyx:1521*

  - **Return type**

    *ArrayReal*

- **getTimeSpanSolutions()**

  Return the solutions at the times in the time span.

  Not collective.

  **SEE ALSO:**

  *setTimeSpan*, *TSGetTimeSpanSolutions*

  *Source code at petsc4py/PETSc/TS.pyx:1537*

  - **Return type**

    *list*\[*Vec*\]

- **getTimeStep()**

  Return the duration of the current timestep.

  Not collective.

  **SEE ALSO:**

  *TSGetTimeStep*

  *Source code at petsc4py/PETSc/TS.pyx:1713*

  - **Return type**

    *float*

- **getTolerances()**

  Return the tolerances for local truncation error.

  Logically collective.

  - **Returns**

    - •

      **rtol** (*float*) -- the relative tolerance

    - •

      **atol** (*float*) -- the absolute tolerance

  - **Return type**

    *tuple*\[*float*, *float*\]

  **SEE ALSO:**

  *TSGetTolerances*

  *Source code at petsc4py/PETSc/TS.pyx:2013*

- **getType()**

  Return the *TS* type.

  Not collective.

  **SEE ALSO:**

  *TSGetType*

  *Source code at petsc4py/PETSc/TS.pyx:361*

  - **Return type**

    *str*

- **interpolate(t, u)**

  Interpolate the solution to a given time.

  Collective.

  - **Parameters**

    - •

      **t** (*float*) -- The time to interpolate.

    - •

      **u** (*Vec*) -- The state vector to interpolate.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSInterpolate*

  *Source code at petsc4py/PETSc/TS.pyx:2480*

- **load(viewer)**

  Load a *TS* that has been stored in binary with *view*.

  Collective.

  - **Parameters**

    **viewer** (*Viewer*) -- The visualization context.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSLoad*

  *Source code at petsc4py/PETSc/TS.pyx:189*

- **monitor(step, time, u=None)**

  Monitor the solve.

  Collective.

  - **Parameters**

    - •

      **step** (*int*) -- The step number that has just completed.

    - •

      **time** (*float*) -- The model time of the state.

    - •

      **u** (*Vec \| None*) -- The state at the current model time.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSMonitor*

  *Source code at petsc4py/PETSc/TS.pyx:2169*

- **monitorCancel()**

  Clear all the monitors that have been set.

  Logically collective.

  **SEE ALSO:**

  *TSMonitorCancel*

  *Source code at petsc4py/PETSc/TS.pyx:2154*

  - **Return type**

    *None*

- **removeTrajectory()**

  Remove the internal *TS* trajectory object.

  Collective.

  **SEE ALSO:**

  *TSRemoveTrajectory*

  *Source code at petsc4py/PETSc/TS.pyx:2561*

  - **Return type**

    *None*

- **reset()**

  Reset the *TS*, removing any allocated vectors and matrices.

  Collective.

  **SEE ALSO:**

  *TSReset*

  *Source code at petsc4py/PETSc/TS.pyx:2398*

  - **Return type**

    *None*

- **restartStep()**

  Flag the solver to restart the next step.

  Collective.

  Multistep methods like TSBDF or Runge-Kutta methods with FSAL property require restarting the solver in the event of discontinuities. These discontinuities may be introduced as a consequence of explicitly modifications to the solution vector (which PETSc attempts to detect and handle) or problem coefficients (which PETSc is not able to detect). For the sake of correctness and maximum safety, users are expected to call TSRestart() whenever they introduce discontinuities in callback routines (e.g. prestep and poststep routines, or implicit/rhs function routines with discontinuous source terms).

  **SEE ALSO:**

  *TSRestartStep*

  *Source code at petsc4py/PETSc/TS.pyx:2426*

  - **Return type**

    *None*

- **rollBack()**

  Roll back one time step.

  Collective.

  **SEE ALSO:**

  *TSRollBack*

  *Source code at petsc4py/PETSc/TS.pyx:2449*

  - **Return type**

    *None*

- **setARKIMEXFastSlowSplit(flag)**

  Use ARKIMEX for solving a fast-slow system.

  Logically collective.

  - **Parameters**

    **flag** (*bool*) -- Set to True for fast-slow partitioned systems.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSARKIMEXSetType*

  *Source code at petsc4py/PETSc/TS.pyx:344*

- **setARKIMEXFullyImplicit(flag)**

  Solve both parts of the equation implicitly.

  Logically collective.

  - **Parameters**

    **flag** (*bool*) -- Set to True for fully implicit.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSARKIMEXSetFullyImplicit*

  *Source code at petsc4py/PETSc/TS.pyx:326*

- **setARKIMEXType(ts\_type)**

  Set the type of *Type.ARKIMEX* scheme.

  Logically collective.

  - **Parameters**

    **ts\_type** (*ARKIMEXType \| str*) -- The type of *Type.ARKIMEX* scheme.

  - **Return type**

    *None*

  Notes

  **-ts\_arkimex\_type** sets scheme type from the commandline.

  **SEE ALSO:**

  *TSARKIMEXSetType*

  *Source code at petsc4py/PETSc/TS.pyx:303*

- **setAlphaParams(alpha\_m=None, alpha\_f=None, gamma=None)**

  Set the algorithmic parameters for *Type.ALPHA*.

  Logically collective.

  Users should call *setAlphaRadius*.

  - **Parameters**

    - •

      **alpha\_m** (*float \| None*) -- Parameter, leave *None*  to keep current value.

    - •

      **alpha\_f** (*float \| None*) -- Parameter, leave *None*  to keep current value.

    - •

      **gamma** (*float \| None*) -- Parameter, leave *None*  to keep current value.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSAlphaSetParams*

  *Source code at petsc4py/PETSc/TS.pyx:3037*

- **setAlphaRadius(radius)**

  Set the spectral radius for *Type.ALPHA*.

  Logically collective.

  - **Parameters**

    **radius** (*float*) -- the spectral radius

  - **Return type**

    *None*

  Notes

  **-ts\_alpha\_radius** can be used to set this from the commandline.

  **SEE ALSO:**

  *TSAlphaSetRadius*

  *Source code at petsc4py/PETSc/TS.pyx:3015*

- **setAppCtx(appctx)**

  Set the application context.

  Not collective.

  - **Parameters**

    **appctx** (*Any*) -- The application context.

  - **Return type**

    *None*

  *Source code at petsc4py/PETSc/TS.pyx:576*

- **setConvergedReason(reason)**

  Set the reason for handling the convergence of *solve*.

  Logically collective.

  Can only be called when *solve* is active and **reason** must contain common value.

  - **Parameters**

    **reason** (*ConvergedReason*) -- The reason for convergence.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetConvergedReason*

  *Source code at petsc4py/PETSc/TS.pyx:2069*

- **setCostGradients(vl, vm=None)**

  Set the cost gradients.

  Logically collective.

  - **Parameters**

    - •

      **vl** (*Vec \| Sequence\[Vec\] \| None*) -- gradients with respect to the initial condition variables, the dimension and parallel layout of these vectors is the same as the ODE solution vector

    - •

      **vm** (*Vec \| Sequence\[Vec\] \| None*) -- gradients with respect to the parameters, the number of entries in these vectors is the same as the number of parameters

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetCostGradients*

  *Source code at petsc4py/PETSc/TS.pyx:2588*

- **setDIRKType(ts\_type)**

  Set the type of *Type.DIRK* scheme.

  Logically collective.

  - **Parameters**

    **ts\_type** (*DIRKType \| str*) -- The type of *Type.DIRK* scheme.

  - **Return type**

    *None*

  Notes

  **-ts\_dirk\_type** sets scheme type from the commandline.

  **SEE ALSO:**

  *TSDIRKSetType*

  *Source code at petsc4py/PETSc/TS.pyx:403*

- **setDM(dm)**

  Set the DM that may be used by some nonlinear solvers or preconditioners.

  Logically collective.

  - **Parameters**

    **dm** (*DM*) -- The *DM* object.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetDM*

  *Source code at petsc4py/PETSc/TS.pyx:1609*

- **setEquationType(eqtype)**

  Set the type of the equation that *TS* is solving.

  Logically collective.

  - **Parameters**

    **eqtype** (*EquationType*) -- The type of equation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetEquationType*

  *Source code at petsc4py/PETSc/TS.pyx:471*

- **setErrorIfStepFails(flag=True)**

  Immediately error is no step succeeds.

  Not collective.

  - **Parameters**

    **flag** (*bool*) -- Enable to error if no step succeeds.

  - **Return type**

    *None*

  Notes

  **-ts\_error\_if\_step\_fails** to enable from the commandline.

  **SEE ALSO:**

  *TSSetErrorIfStepFails*

  *Source code at petsc4py/PETSc/TS.pyx:1948*

- **setEventHandler(direction, terminate, indicator, postevent=None, args=None, kargs=None)**

  Set a function used for detecting events.

  Logically collective.

  - **Parameters**

    - •

      **direction** (*Sequence\[int\]*) -- Direction of zero crossing to be detected {-1, 0, +1}.

    - •

      **terminate** (*Sequence\[bool\]*) -- Flags for each event to indicate stepping should be terminated.

    - •

      **indicator** (*TSIndicatorFunction \| None*) -- Function for defining the indicator-functions marking the events

    - •

      **postevent** (*TSPostEventFunction*) -- Function to execute after the event

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **indicator**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **indicator**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetEventHandler*

  *Source code at petsc4py/PETSc/TS.pyx:2198*

- **setEventTolerances(tol=None, vtol=None)**

  Set tolerances for event zero crossings when using event handler.

  Logically collective.

  **setEventHandler** must have already been called.

  - **Parameters**

    - •

      **tol** (*float*) -- The scalar tolerance or *None* to leave at the current value

    - •

      **vtol** (*Sequence\[float\]*) -- A sequence of scalar tolerance for each event. Used in preference to **tol** if present. Set to *None* to leave at the current value.

  - **Return type**

    *None*

  Notes

  **-ts\_event\_tol** can be used to set values from the commandline.

  **SEE ALSO:**

  *TSSetEventTolerances*

  *Source code at petsc4py/PETSc/TS.pyx:2253*

- **setExactFinalTime(option)**

  Set method of computing the final time step.

  Logically collective.

  - **Parameters**

    **option** (*ExactFinalTime*) -- The exact final time option

  - **Return type**

    *None*

  Notes

  **-ts\_exact\_final\_time** may be used to specify from the commandline.

  **SEE ALSO:**

  *TSSetExactFinalTime*

  *Source code at petsc4py/PETSc/TS.pyx:2047*

- **setFromOptions()**

  Set various *TS* parameters from user options.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *TSSetFromOptions*

  *Source code at petsc4py/PETSc/TS.pyx:562*

  - **Return type**

    *None*

- **setI2Function(function, f=None, args=None, kargs=None)**

  Set the function to compute the 2nd order DAE.

  Logically collective.

  - **Parameters**

    - •

      **function** (*TSI2Function \| None*) -- The right-hand side function.

    - •

      **f** (*Vec \| None*) -- The vector to store values or *None* to be created internally.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **function**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **function**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetI2Function*

  *Source code at petsc4py/PETSc/TS.pyx:1063*

- **setI2Jacobian(jacobian, J=None, P=None, args=None, kargs=None)**

  Set the function to compute the Jacobian of the 2nd order DAE.

  Logically collective.

  - **Parameters**

    - •

      **jacobian** (*TSI2Jacobian \| None*) -- The function which computes the Jacobian.

    - •

      **J** (*Mat \| None*) -- The matrix into which the Jacobian is computed.

    - •

      **P** (*Mat \| None*) -- The optional matrix to use for building a preconditioner matrix.

    - •

      **args** -- Additional positional arguments for **jacobian**.

    - •

      **kargs** -- Additional keyword arguments for **jacobian**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetI2Jacobian*

  *Source code at petsc4py/PETSc/TS.pyx:1100*

- **setIFunction(function, f=None, args=None, kargs=None)**

  Set the function representing the DAE to be solved.

  Logically collective.

  - **Parameters**

    - •

      **function** (*TSIFunction \| None*) -- The right-hand side function.

    - •

      **f** (*Vec \| None*) -- The vector to store values or *None* to be created internally.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **function**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **function**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetIFunction*

  *Source code at petsc4py/PETSc/TS.pyx:804*

- **setIJacobian(jacobian, J=None, P=None, args=None, kargs=None)**

  Set the function to compute the Jacobian.

  Logically collective.

  Set the function to compute the matrix **dF/dU + a\*dF/dU\_t** where **F(t, U, U\_t)** is the function provided with *setIFunction*.

  - **Parameters**

    - •

      **jacobian** (*TSIJacobian \| None*) -- The function which computes the Jacobian.

    - •

      **J** (*Mat \| None*) -- The matrix into which the Jacobian is computed.

    - •

      **P** (*Mat \| None*) -- The optional matrix to use for building a preconditioner matrix.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **jacobian**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **jacobian**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetIJacobian*

  *Source code at petsc4py/PETSc/TS.pyx:841*

- **setIJacobianP(jacobian, J=None, args=None, kargs=None)**

  Set the function that computes the Jacobian.

  Logically collective.

  Set the function that computes the Jacobian of **F** with respect to the parameters **P** where **F(Udot, U, t) = G(U, P, t)**, as well as the location to store the matrix.

  - **Parameters**

    - •

      **jacobian** -- The function which computes the Jacobian.

    - •

      **J** (*Mat \| None*) -- The matrix into which the Jacobian is computed.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **jacobian**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **jacobian**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetIJacobianP*

  *Source code at petsc4py/PETSc/TS.pyx:886*

- **setMaxSNESFailures(n)**

  Set the maximum number of SNES solves failures allowed.

  Not collective.

  - **Parameters**

    **n** (*int*) -- The maximum number of failed nonlinear solver, use **-1** for unlimited.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetMaxSNESFailures*

  *Source code at petsc4py/PETSc/TS.pyx:1913*

- **setMaxStepRejections(n)**

  Set the maximum number of step rejections before a time step fails.

  Not collective.

  - **Parameters**

    **n** (*int*) -- The maximum number of rejected steps, use **-1** for unlimited.

  - **Return type**

    *None*

  Notes

  **-ts\_max\_reject** can be used to set this from the commandline

  **SEE ALSO:**

  *TSSetMaxStepRejections*

  *Source code at petsc4py/PETSc/TS.pyx:1874*

- **setMaxSteps(max\_steps)**

  Set the maximum number of steps to use.

  Logically collective.

  Defaults to **5000**.

  - **Parameters**

    **max\_steps** (*int*) -- The maximum number of steps to use.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetMaxSteps*

  *Source code at petsc4py/PETSc/TS.pyx:1806*

- **setMaxTime(max\_time)**

  Set the maximum (final) time.

  Logically collective.

  - **Parameters**

    **max\_time** (*float*) -- the final time

  - **Return type**

    *None*

  Notes

  **-ts\_max\_time** sets the max time from the commandline

  **SEE ALSO:**

  *TSSetMaxTime*

  *Source code at petsc4py/PETSc/TS.pyx:1768*

- **setMonitor(monitor, args=None, kargs=None)**

  Set an additional monitor to the *TS*.

  Logically collective.

  - **Parameters**

    - •

      **monitor** (*TSMonitorFunction \| None*) -- The custom monitor function.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **monitor**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **monitor**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSMonitorSet*

  *Source code at petsc4py/PETSc/TS.pyx:2108*

- **setOptionsPrefix(prefix)**

  Set the prefix used for all the *TS* options.

  Logically collective.

  - **Parameters**

    **prefix** (*str \| None*) -- The prefix to prepend to all option names.

  - **Return type**

    *None*

  Notes

  A hyphen must not be given at the beginning of the prefix name.

  **SEE ALSO:**

  *Working with PETSc options*, *TSSetOptionsPrefix*

  *Source code at petsc4py/PETSc/TS.pyx:502*

- **setPostStep(poststep, args=None, kargs=None)**

  Set a function to be called at the end of each time step.

  Logically collective.

  - **Parameters**

    - •

      **poststep** (*TSPostStepFunction \| None*) -- The function to be called at the end of each step.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **poststep**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **poststep**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetPostStep*

  *Source code at petsc4py/PETSc/TS.pyx:2350*

- **setPreStep(prestep, args=None, kargs=None)**

  Set a function to be called at the beginning of each time step.

  Logically collective.

  - **Parameters**

    - •

      **prestep** (*TSPreStepFunction \| None*) -- The function to be called at the beginning of each step.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **prestep**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **prestep**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetPreStep*

  *Source code at petsc4py/PETSc/TS.pyx:2305*

- **setProblemType(ptype)**

  Set the type of problem to be solved.

  Logically collective.

  - **Parameters**

    **ptype** (*ProblemType*) -- The type of problem of the forms.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetProblemType*

  *Source code at petsc4py/PETSc/TS.pyx:440*

- **setPythonContext(context)**

  Set the instance of the class implementing the required Python methods.

  Not collective.

  **SEE ALSO:**

  *PETSc Python ode-integrator type (TODO)*, *getPythonContext*

  *Source code at petsc4py/PETSc/TS.pyx:2888*

  - **Parameters**

    **context** (*Any*)

  - **Return type**

    *None*

- **setPythonType(py\_type)**

  Set the fully qualified Python name of the class to be used.

  Collective.

  **SEE ALSO:**

  *PETSc Python ode-integrator type (TODO)*, *setPythonContext*, *getPythonType*, *TSPythonSetType*

  *Source code at petsc4py/PETSc/TS.pyx:2915*

  - **Parameters**

    **py\_type** (*str*)

  - **Return type**

    *None*

- **setRHSFunction(function, f=None, args=None, kargs=None)**

  Set the routine for evaluating the function **G** in **U\_t = G(t, u)**.

  Logically collective.

  - **Parameters**

    - •

      **function** (*TSRHSFunction \| None*) -- The right-hand side function.

    - •

      **f** (*Vec \| None*) -- The vector into which the right-hand side is computed.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **function**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **function**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetRHSFunction*

  *Source code at petsc4py/PETSc/TS.pyx:595*

- **setRHSJacobian(jacobian, J=None, P=None, args=None, kargs=None)**

  Set the function to compute the Jacobian of **G** in **U\_t = G(U, t)**.

  Logically collective.

  - **Parameters**

    - •

      **jacobian** (*TSRHSJacobian \| None*) -- The right-hand side function.

    - •

      **J** (*Mat \| None*) -- The matrix into which the jacobian is computed.

    - •

      **P** (*Mat \| None*) -- The matrix into which the preconditioner is computed.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **jacobian**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **jacobian**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetRHSJacobian*

  *Source code at petsc4py/PETSc/TS.pyx:632*

- **setRHSJacobianP(jacobianp, A=None, args=None, kargs=None)**

  Set the function that computes the Jacobian with respect to the parameters.

  Logically collective.

  - **Parameters**

    - •

      **jacobianp** (*TSRHSJacobianP \| None*) -- The user-defined function.

    - •

      **A** (*Mat \| None*) -- The matrix into which the Jacobian will be computed.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **jacobianp**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **jacobianp**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetRHSJacobianP*

  *Source code at petsc4py/PETSc/TS.pyx:2655*

- **setRHSSplitIFunction(splitname, function, r=None, args=None, kargs=None)**

  Set the split implicit functions.

  Logically collective.

  - **Parameters**

    - •

      **splitname** (*str*) -- Name of the split.

    - •

      **function** (*TSIFunction*) -- The implicit function evaluation routine.

    - •

      **r** (*Vec \| None*) -- Vector to hold the residual.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **function**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **function**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSRHSSplitSetIFunction*

  *Source code at petsc4py/PETSc/TS.pyx:1316*

- **setRHSSplitIJacobian(splitname, jacobian, J=None, P=None, args=None, kargs=None)**

  Set the Jacobian for the split implicit function.

  Logically collective.

  - **Parameters**

    - •

      **splitname** (*str*) -- Name of the split.

    - •

      **jacobian** (*TSRHSJacobian*) -- The Jacobian evaluation routine.

    - •

      **J** (*Mat \| None*) -- Matrix to store Jacobian entries computed by **jacobian**.

    - •

      **P** (*Mat \| None*) -- Matrix used to compute preconditioner (usually the same as **J**).

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **jacobian**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **jacobian**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSRHSSplitSetIJacobian*

  *Source code at petsc4py/PETSc/TS.pyx:1360*

- **setRHSSplitIS(splitname, iss)**

  Set the index set for the specified split.

  Logically collective.

  - **Parameters**

    - •

      **splitname** (*str*) -- Name of this split, if *None* the number of the split is used.

    - •

      **iss** (*IS*) -- The index set for part of the solution vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSRHSSplitSetIS*

  *Source code at petsc4py/PETSc/TS.pyx:1251*

- **setRHSSplitRHSFunction(splitname, function, r=None, args=None, kargs=None)**

  Set the split right-hand-side functions.

  Logically collective.

  - **Parameters**

    - •

      **splitname** (*str*) -- Name of the split.

    - •

      **function** (*TSRHSFunction*) -- The RHS function evaluation routine.

    - •

      **r** (*Vec \| None*) -- Vector to hold the residual.

    - •

      **args** (*tuple\[Any, ...\] \| None*) -- Additional positional arguments for **function**.

    - •

      **kargs** (*dict\[str, Any\] \| None*) -- Additional keyword arguments for **function**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSRHSSplitSetRHSFunction*

  *Source code at petsc4py/PETSc/TS.pyx:1272*

- **setRKType(ts\_type)**

  Set the type of the *Runge-Kutta* scheme.

  Logically collective.

  - **Parameters**

    **ts\_type** (*RKType \| str*) -- The type of scheme.

  - **Return type**

    *None*

  Notes

  **-ts\_rk\_type** sets scheme type from the commandline.

  **SEE ALSO:**

  *TSRKSetType*

  *Source code at petsc4py/PETSc/TS.pyx:280*

- **setSaveTrajectory()**

  Enable to save solutions as an internal *TS* trajectory.

  Collective.

  This routine should be called after all *TS* options have been set.

  Notes

  **-ts\_save\_trajectory** can be used to save a trajectory to a file.

  **SEE ALSO:**

  *TSSetSaveTrajectory*

  *Source code at petsc4py/PETSc/TS.pyx:2542*

  - **Return type**

    *None*

- **setSolution(u)**

  Set the initial solution vector.

  Logically collective.

  - **Parameters**

    **u** (*Vec*) -- The solution vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetSolution*

  *Source code at petsc4py/PETSc/TS.pyx:1411*

- **setSolution2(u, v)**

  Set the initial solution and its time derivative.

  Logically collective.

  - **Parameters**

    - •

      **u** (*Vec*) -- The solution vector.

    - •

      **v** (*Vec*) -- The time derivative vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TS2SetSolution*

  *Source code at petsc4py/PETSc/TS.pyx:1447*

- **setStepLimits(hmin, hmax)**

  Set the minimum and maximum allowed step sizes.

  Logically collective.

  - **Parameters**

    - •

      **hmin** (*float*) -- the minimum step size

    - •

      **hmax** (*float*) -- the maximum step size

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSAdaptSetStepLimits*

  *Source code at petsc4py/PETSc/TS.pyx:2500*

- **setStepNumber(step\_number)**

  Set the number of steps completed.

  Logically collective.

  For most uses of the *TS* solvers the user need not explicitly call *setStepNumber*, as the step counter is appropriately updated in *solve*/*step*/*rollBack*. Power users may call this routine to reinitialize timestepping by setting the step counter to zero (and time to the initial time) to solve a similar problem with different initial conditions or parameters. It may also be used to continue timestepping from a previously interrupted run in such a way that *TS* monitors will be called with a initial nonzero step counter.

  - **Parameters**

    **step\_number** (*int*) -- the number of steps completed

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetStepNumber*

  *Source code at petsc4py/PETSc/TS.pyx:1727*

- **setTheta(theta)**

  Set the abscissa of the stage in **(0, 1\]** for *Type.THETA*.

  Logically collective.

  - **Parameters**

    **theta** (*float*) -- stage abscissa

  - **Return type**

    *None*

  Notes

  **-ts\_theta\_theta** can be used to set a value from the commandline.

  **SEE ALSO:**

  *TSThetaSetTheta*

  *Source code at petsc4py/PETSc/TS.pyx:2945*

- **setThetaEndpoint(flag=True)**

  Set to use the endpoint variant of *Type.THETA*.

  Logically collective.

  - **Parameters**

    **flag** -- Enable to use the endpoint variant.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSThetaSetEndpoint*

  *Source code at petsc4py/PETSc/TS.pyx:2981*

- **setTime(t)**

  Set the time.

  Logically collective.

  - **Parameters**

    **t** (*float*) -- The time.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetTime*

  *Source code at petsc4py/PETSc/TS.pyx:1628*

- **setTimeSpan(tspan)**

  Set the time span.

  Collective.

  The solution will be computed and stored for each time requested in the span. The times must be all increasing and correspond to the intermediate points for time integration. *ExactFinalTime.MATCHSTEP* must be used to make the last time step in each sub-interval match the intermediate points specified. The intermediate solutions are saved in a vector array that can be accessed with *getTimeSpanSolutions*.

  - **Parameters**

    **tspan** (*Sequence\[float\]*) -- The sequence of time points.

  - **Return type**

    *None*

  Notes

  **-ts\_time\_span \<t0, ..., tf\>** sets the time span from the commandline

  **SEE ALSO:**

  *TSSetTimeSpan*

  *Source code at petsc4py/PETSc/TS.pyx:1489*

- **setTimeStep(time\_step)**

  Set the duration of the timestep.

  Logically collective.

  - **Parameters**

    **time\_step** (*float*) -- the duration of the timestep

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSetTimeStep*

  *Source code at petsc4py/PETSc/TS.pyx:1695*

- **setTolerances(rtol=None, atol=None)**

  Set tolerances for local truncation error when using an adaptive controller.

  Logically collective.

  - **Parameters**

    - •

      **rtol** (*float*) -- The relative tolerance, *DETERMINE* to use the value when the object's type was set, or *None* to leave the current value.

    - •

      **atol** (*float*) -- The absolute tolerance, *DETERMINE* to use the value when the object's type was set, or *None* to leave the current value.

  - **Return type**

    *None*

  Notes

  **-ts\_rtol** and **-ts\_atol** may be used to set values from the commandline.

  **SEE ALSO:**

  *TSSetTolerances*

  *Source code at petsc4py/PETSc/TS.pyx:1970*

- **setType(ts\_type)**

  Set the method to be used as the *TS* solver.

  Collective.

  - **Parameters**

    **ts\_type** (*Type \| str*) -- The solver type.

  - **Return type**

    *None*

  Notes

  **-ts\_type** sets the method from the commandline

  **SEE ALSO:**

  *TSSetType*

  *Source code at petsc4py/PETSc/TS.pyx:257*

- **setUp()**

  Set up the internal data structures for the *TS*.

  Collective.

  **SEE ALSO:**

  *TSSetUp*

  *Source code at petsc4py/PETSc/TS.pyx:2386*

  - **Return type**

    *None*

- **solve(u=None)**

  Step the requested number of timesteps.

  Collective.

  - **Parameters**

    **u** (*Vec \| None*) -- The solution vector. Can be *None*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *TSSolve*

  *Source code at petsc4py/PETSc/TS.pyx:2461*

- **step()**

  Take one step.

  Collective.

  The preferred interface for the *TS* solvers is *solve*. If you need to execute code at the beginning or ending of each step, use *setPreStep* and *setPostStep* respectively.

  **SEE ALSO:**

  *TSStep*

  *Source code at petsc4py/PETSc/TS.pyx:2410*

  - **Return type**

    *None*

- **view(viewer=None)**

  Print the *TS* object.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- The visualization context.

  - **Return type**

    *None*

  Notes

  **-ts\_view** calls TSView at the end of TSStep

  **SEE ALSO:**

  *TSView*

  *Source code at petsc4py/PETSc/TS.pyx:166*

Attributes Documentation

- **appctx**

  Application context.

  *Source code at petsc4py/PETSc/TS.pyx:3086*

- **atol**

  The absolute tolerance.

  *Source code at petsc4py/PETSc/TS.pyx:3189*

- **converged**

  Indicates the *TS* has converged.

  *Source code at petsc4py/PETSc/TS.pyx:3210*

- **diverged**

  Indicates the *TS* has stopped.

  *Source code at petsc4py/PETSc/TS.pyx:3215*

- **dm**

  The *DM*.

  *Source code at petsc4py/PETSc/TS.pyx:3096*

- **equation\_type**

  The equation type.

  *Source code at petsc4py/PETSc/TS.pyx:3114*

- **iterating**

  Indicates the *TS* is still iterating.

  *Source code at petsc4py/PETSc/TS.pyx:3205*

- **ksp**

  The *KSP*.

  *Source code at petsc4py/PETSc/TS.pyx:3127*

- **max\_steps**

  The maximum number of steps.

  *Source code at petsc4py/PETSc/TS.pyx:3171*

- **max\_time**

  The maximum time.

  *Source code at petsc4py/PETSc/TS.pyx:3163*

- **problem\_type**

  The problem type.

  *Source code at petsc4py/PETSc/TS.pyx:3106*

- **reason**

  The converged reason.

  *Source code at petsc4py/PETSc/TS.pyx:3197*

- **rtol**

  The relative tolerance.

  *Source code at petsc4py/PETSc/TS.pyx:3181*

- **snes**

  The *SNES*.

  *Source code at petsc4py/PETSc/TS.pyx:3122*

- **step\_number**

  The current step number.

  *Source code at petsc4py/PETSc/TS.pyx:3155*

- **time**

  The current time.

  *Source code at petsc4py/PETSc/TS.pyx:3139*

- **time\_step**

  The current time step size.

  *Source code at petsc4py/PETSc/TS.pyx:3147*

- **vec\_sol**

  The solution vector.

  *Source code at petsc4py/PETSc/TS.pyx:3132*

### petsc4py.PETSc.Vec

- **class petsc4py.PETSc.Vec**

  Bases: *Object*

  A vector object.

  **SEE ALSO:**

  *Vec*

  Enumerations

  | | |
  | --- | --- |
  | *Option* | Vector assembly option. |
  | *Type* | The vector type. |

### petsc4py.PETSc.Vec.Option

- **class petsc4py.PETSc.Vec.Option**

  Bases: *object*

  Vector assembly option.

  Attributes Summary

  | | |
  | --- | --- |
  | *IGNORE\_NEGATIVE\_INDICES* | Constant **IGNORE\_NEGATIVE\_INDICES** of type *int* |
  | *IGNORE\_OFF\_PROC\_ENTRIES* | Constant **IGNORE\_OFF\_PROC\_ENTRIES** of type *int* |

  Attributes Documentation

  - **IGNORE\_NEGATIVE\_INDICES: *int* = IGNORE\_NEGATIVE\_INDICES**

    Constant **IGNORE\_NEGATIVE\_INDICES** of type *int*

  - **IGNORE\_OFF\_PROC\_ENTRIES: *int* = IGNORE\_OFF\_PROC\_ENTRIES**

    Constant **IGNORE\_OFF\_PROC\_ENTRIES** of type *int*

### petsc4py.PETSc.Vec.Type

- **class petsc4py.PETSc.Vec.Type**

  Bases: *object*

  The vector type.

  Attributes Summary

  | | |
  | --- | --- |
  | *CUDA* | Object **CUDA** of type *str* |
  | *HIP* | Object **HIP** of type *str* |
  | *KOKKOS* | Object **KOKKOS** of type *str* |
  | *MPI* | Object **MPI** of type *str* |
  | *MPICUDA* | Object **MPICUDA** of type *str* |
  | *MPIHIP* | Object **MPIHIP** of type *str* |
  | *MPIKOKKOS* | Object **MPIKOKKOS** of type *str* |
  | *MPIVIENNACL* | Object **MPIVIENNACL** of type *str* |
  | *NEST* | Object **NEST** of type *str* |
  | *SEQ* | Object **SEQ** of type *str* |
  | *SEQCUDA* | Object **SEQCUDA** of type *str* |
  | *SEQHIP* | Object **SEQHIP** of type *str* |
  | *SEQKOKKOS* | Object **SEQKOKKOS** of type *str* |
  | *SEQVIENNACL* | Object **SEQVIENNACL** of type *str* |
  | *SHARED* | Object **SHARED** of type *str* |
  | *STANDARD* | Object **STANDARD** of type *str* |
  | *VIENNACL* | Object **VIENNACL** of type *str* |

  Attributes Documentation

  - **CUDA: *str* = CUDA**

    Object **CUDA** of type *str*

  - **HIP: *str* = HIP**

    Object **HIP** of type *str*

  - **KOKKOS: *str* = KOKKOS**

    Object **KOKKOS** of type *str*

  - **MPI: *str* = MPI**

    Object **MPI** of type *str*

  - **MPICUDA: *str* = MPICUDA**

    Object **MPICUDA** of type *str*

  - **MPIHIP: *str* = MPIHIP**

    Object **MPIHIP** of type *str*

  - **MPIKOKKOS: *str* = MPIKOKKOS**

    Object **MPIKOKKOS** of type *str*

  - **MPIVIENNACL: *str* = MPIVIENNACL**

    Object **MPIVIENNACL** of type *str*

  - **NEST: *str* = NEST**

    Object **NEST** of type *str*

  - **SEQ: *str* = SEQ**

    Object **SEQ** of type *str*

  - **SEQCUDA: *str* = SEQCUDA**

    Object **SEQCUDA** of type *str*

  - **SEQHIP: *str* = SEQHIP**

    Object **SEQHIP** of type *str*

  - **SEQKOKKOS: *str* = SEQKOKKOS**

    Object **SEQKOKKOS** of type *str*

  - **SEQVIENNACL: *str* = SEQVIENNACL**

    Object **SEQVIENNACL** of type *str*

  - **SHARED: *str* = SHARED**

    Object **SHARED** of type *str*

  - **STANDARD: *str* = STANDARD**

    Object **STANDARD** of type *str*

  - **VIENNACL: *str* = VIENNACL**

    Object **VIENNACL** of type *str*

Methods Summary

| | |
| --- | --- |
| *abs*() | Replace each entry (xₙ) in the vector by abs\|xₙ\|. |
| *appendOptionsPrefix*(prefix) | Append to the prefix used for searching for options in the database. |
| *assemble*() | Assemble the vector. |
| *assemblyBegin*() | Begin an assembling stage of the vector. |
| *assemblyEnd*() | Finish the assembling stage initiated with *assemblyBegin*. |
| *attachDLPackInfo*(\[vec, dltensor\]) | Attach tensor information from another vector or DLPack tensor. |
| *axpby*(alpha, beta, x) | Compute and store y = ɑ·x + β·y. |
| *axpy*(alpha, x) | Compute and store y = ɑ·x + y. |
| *aypx*(alpha, x) | Compute and store y = x + ɑ·y. |
| *bindToCPU*(flg) | Bind vector operations execution on the CPU. |
| *boundToCPU*() | Return whether the vector has been bound to the CPU. |
| *chop*(tol) | Set all vector entries less than some absolute tolerance to zero. |
| *clearDLPackInfo*() | Clear tensor information. |
| *concatenate*(vecs) | Concatenate vectors into a single vector. |
| *conjugate*() | Conjugate the vector. |
| *copy*(\[result\]) | Return a copy of the vector. |
| *create*(\[comm\]) | Create a vector object. |
| *createCUDAWithArrays*(\[cpuarray, cudahandle, ...\]) | Create a *Type.CUDA* vector with optional arrays. |
| *createGhost*(ghosts, size\[, bsize, comm\]) | Create a parallel vector with ghost padding on each processor. |
| *createGhostWithArray*(ghosts, array\[, size, ...\]) | Create a parallel vector with ghost padding and provided arrays. |
| *createHIPWithArrays*(\[cpuarray, hiphandle, ...\]) | Create a *Type.HIP* vector with optional arrays. |
| *createLocalVector*() | Create a local vector. |
| *createMPI*(size\[, bsize, comm\]) | Create a parallel *Type.MPI* vector. |
| *createNest*(vecs\[, isets, comm\]) | Create a *Type.NEST* vector containing multiple nested subvectors. |
| *createSeq*(size\[, bsize, comm\]) | Create a sequential *Type.SEQ* vector. |
| *createShared*(size\[, bsize, comm\]) | Create a *Type.SHARED* vector that uses shared memory. |
| *createViennaCLWithArrays*(\[cpuarray, ...\]) | Create a *Type.VIENNACL* vector with optional arrays. |
| *createWithArray*(array\[, size, bsize, comm\]) | Create a vector using a provided array. |
| *createWithDLPack*(dltensor\[, size, bsize, comm\]) | Create a vector wrapping a DLPack object, sharing the same memory. |
| *destroy*() | Destroy the vector. |
| *dot*(vec) | Return the dot product with **vec**. |
| *dotBegin*(vec) | Begin computing the dot product. |
| *dotEnd*(vec) | Finish computing the dot product initiated with *dotBegin*. |
| *dotNorm2*(vec) | Return the dot product with **vec** and its squared norm. |
| *duplicate*(\[array\]) | Create a new vector with the same type, optionally with data. |
| *equal*(vec) | Return whether the vector is equal to another. |
| *exp*() | Replace each entry (xₙ) in the vector by exp(xₙ). |
| *getArray*(\[readonly\]) | Return local portion of the vector as an *ndarray*. |
| *getBlockSize*() | Return the block size of the vector. |
| *getBuffer*(\[readonly\]) | Return a buffered view of the local portion of the vector. |
| *getCLContextHandle*() | Return the OpenCL context associated with the vector. |
| *getCLMemHandle*(\[mode\]) | Return the OpenCL buffer associated with the vector. |
| *getCLQueueHandle*() | Return the OpenCL command queue associated with the vector. |
| *getCUDAHandle*(\[mode\]) | Return a pointer to the device buffer. |
| *getDM*() | Return the *DM* associated to the vector. |
| *getGhostIS*() | Return ghosting indices of a ghost vector. |
| *getHIPHandle*(\[mode\]) | Return a pointer to the device buffer. |
| *getLGMap*() | Return the local-to-global mapping. |
| *getLocalSize*() | Return the local size of the vector. |
| *getLocalVector*(lvec\[, readonly\]) | Maps the local portion of the vector into a local vector. |
| *getNestSubVecs*() | Return all the vectors contained in the nested vector. |
| *getOffloadMask*() | Return the offloading status of the vector. |
| *getOptionsPrefix*() | Return the prefix used for searching for options in the database. |
| *getOwnershipRange*() | Return the locally owned range of indices **(start, end)**. |
| *getOwnershipRanges*() | Return the range of indices owned by each process. |
| *getSize*() | Return the global size of the vector. |
| *getSizes*() | Return the vector sizes. |
| *getSubVector*(iset\[, subvec\]) | Return a subvector from given indices. |
| *getType*() | Return the type of the vector. |
| *getValue*(index) | Return a single value from the vector. |
| *getValues*(indices\[, values\]) | Return values from certain locations in the vector. |
| *getValuesStagStencil*(indices\[, values\]) | Not implemented. |
| *ghostUpdate*(\[addv, mode\]) | Update ghosted vector entries. |
| *ghostUpdateBegin*(\[addv, mode\]) | Begin updating ghosted vector entries. |
| *ghostUpdateEnd*(\[addv, mode\]) | Finish updating ghosted vector entries initiated with *ghostUpdateBegin*. |
| *isaxpy*(idx, alpha, x) | Add a scaled reduced-space vector to a subset of the vector. |
| *isset*(idx, alpha) | Set specific elements of the vector to the same value. |
| *load*(viewer) | Load a vector. |
| *localForm*() | Return a context manager for viewing ghost vectors in local form. |
| *log*() | Replace each entry in the vector by its natural logarithm. |
| *mDot*(vecs\[, out\]) | Compute Xᴴ·y with X an array of vectors. |
| *mDotBegin*(vecs, out) | Starts a split phase multiple dot product computation. |
| *mDotEnd*(vecs, out) | Ends a split phase multiple dot product computation. |
| *max*() | Return the vector entry with maximum real part and its location. |
| *maxPointwiseDivide*(vec) | Return the maximum of the component-wise absolute value division. |
| *maxpy*(alphas, vecs) | Compute and store y = Σₙ(ɑₙ·Xₙ) + y with X an array of vectors. |
| *min*() | Return the vector entry with minimum real part and its location. |
| *mtDot*(vecs\[, out\]) | Compute Xᵀ·y with X an array of vectors. |
| *mtDotBegin*(vecs, out) | Starts a split phase transpose multiple dot product computation. |
| *mtDotEnd*(vecs, out) | Ends a split phase transpose multiple dot product computation. |
| *norm*(\[norm\_type\]) | Compute the vector norm. |
| *normBegin*(\[norm\_type\]) | Begin computing the vector norm. |
| *normEnd*(\[norm\_type\]) | Finish computations initiated with *normBegin*. |
| *normalize*() | Normalize the vector by its 2-norm. |
| *permute*(order\[, invert\]) | Permute the vector in-place with a provided ordering. |
| *placeArray*(array) | Set the local portion of the vector to a provided array. |
| *pointwiseDivide*(x, y) | Compute and store the component-wise division of two vectors. |
| *pointwiseMax*(x, y) | Compute and store the component-wise maximum of two vectors. |
| *pointwiseMaxAbs*(x, y) | Compute and store the component-wise maximum absolute values. |
| *pointwiseMin*(x, y) | Compute and store the component-wise minimum of two vectors. |
| *pointwiseMult*(x, y) | Compute and store the component-wise multiplication of two vectors. |
| *reciprocal*() | Replace each entry in the vector by its reciprocal. |
| *resetArray*(\[force\]) | Reset the vector to use its default array. |
| *restoreCLMemHandle*() | Restore a pointer to the OpenCL buffer obtained with *getCLMemHandle*. |
| *restoreCUDAHandle*(handle\[, mode\]) | Restore a pointer to the device buffer obtained with *getCUDAHandle*. |
| *restoreHIPHandle*(handle\[, mode\]) | Restore a pointer to the device buffer obtained with *getHIPHandle*. |
| *restoreLocalVector*(lvec\[, readonly\]) | Unmap a local access obtained with *getLocalVector*. |
| *restoreSubVector*(iset, subvec) | Restore a subvector extracted using *getSubVector*. |
| *scale*(alpha) | Scale all entries of the vector. |
| *set*(alpha) | Set all components of the vector to the same value. |
| *setArray*(array) | Set values for the local portion of the vector. |
| *setBlockSize*(bsize) | Set the block size of the vector. |
| *setDM*(dm) | Associate a *DM* to the vector. |
| *setFromOptions*() | Configure the vector from the options database. |
| *setLGMap*(lgmap) | Set the local-to-global mapping. |
| *setMPIGhost*(ghosts) | Set the ghost points for a ghosted vector. |
| *setNestSubVecs*(sx\[, idxm\]) | Set the component vectors at specified indices in the nested vector. |
| *setOption*(option, flag) | Set option. |
| *setOptionsPrefix*(prefix) | Set the prefix used for searching for options in the database. |
| *setRandom*(\[random\]) | Set all components of the vector to random numbers. |
| *setSizes*(size\[, bsize\]) | Set the local and global sizes of the vector. |
| *setType*(vec\_type) | Set the vector type. |
| *setUp*() | Set up the internal data structures for using the vector. |
| *setValue*(index, value\[, addv\]) | Insert or add a single value in the vector. |
| *setValueLocal*(index, value\[, addv\]) | Insert or add a single value in the vector using a local numbering. |
| *setValues*(indices, values\[, addv\]) | Insert or add multiple values in the vector. |
| *setValuesBlocked*(indices, values\[, addv\]) | Insert or add blocks of values in the vector. |
| *setValuesBlockedLocal*(indices, values\[, addv\]) | Insert or add blocks of values in the vector with a local numbering. |
| *setValuesLocal*(indices, values\[, addv\]) | Insert or add multiple values in the vector with a local numbering. |
| *setValuesStagStencil*(indices, values\[, addv\]) | Not implemented. |
| *shift*(alpha) | Shift all entries in the vector. |
| *sqrtabs*() | Replace each entry (xₙ) in the vector by √\|xₙ\|. |
| *strideGather*(field, vec\[, addv\]) | Insert component values into a single-component vector. |
| *strideMax*(field) | Return the maximum of entries in a subvector. |
| *strideMin*(field) | Return the minimum of entries in a subvector. |
| *strideNorm*(field\[, norm\_type\]) | Return the norm of entries in a subvector. |
| *strideScale*(field, alpha) | Scale a component of the vector. |
| *strideScatter*(field, vec\[, addv\]) | Scatter entries into a component of another vector. |
| *strideSum*(field) | Sum subvector entries. |
| *sum*() | Return the sum of all the entries of the vector. |
| *swap*(vec) | Swap the content of two vectors. |
| *tDot*(vec) | Return the indefinite dot product with **vec**. |
| *tDotBegin*(vec) | Begin computing the indefinite dot product. |
| *tDotEnd*(vec) | Finish computing the indefinite dot product initiated with *tDotBegin*. |
| *toDLPack*(\[mode\]) | Return a DLPack *PyCapsule* wrapping the vector data. |
| *view*(\[viewer\]) | Display the vector. |
| *waxpy*(alpha, x, y) | Compute and store w = ɑ·x + y. |
| *zeroEntries*() | Set all entries in the vector to zero. |

Attributes Summary

| | |
| --- | --- |
| *array* | Alias for *array\_w*. |
| *array\_r* | Read-only *ndarray* containing the local portion of the vector. |
| *array\_w* | Writeable *ndarray* containing the local portion of the vector. |
| *block\_size* | The block size. |
| *buffer* | Alias for *buffer\_w*. |
| *buffer\_r* | Read-only buffered view of the local portion of the vector. |
| *buffer\_w* | Writeable buffered view of the local portion of the vector. |
| *local\_size* | The local vector size. |
| *owner\_range* | The locally owned range of indices in the form **\[low, high)**. |
| *owner\_ranges* | The range of indices owned by each process. |
| *size* | The global vector size. |
| *sizes* | The local and global vector sizes. |

Methods Documentation

- **abs()**

  Replace each entry (xₙ) in the vector by abs\|xₙ\|.

  Logically collective.

  **SEE ALSO:**

  *VecAbs*

  *Source code at petsc4py/PETSc/Vec.pyx:2293*

  - **Return type**

    *None*

- **appendOptionsPrefix(prefix)**

  Append to the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *VecAppendOptionsPrefix*

  *Source code at petsc4py/PETSc/Vec.pyx:1028*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **assemble()**

  Assemble the vector.

  Collective.

  **SEE ALSO:**

  *assemblyBegin*, *assemblyEnd*

  *Source code at petsc4py/PETSc/Vec.pyx:3047*

  - **Return type**

    *None*

- **assemblyBegin()**

  Begin an assembling stage of the vector.

  Collective.

  **SEE ALSO:**

  *assemblyEnd*, *VecAssemblyBegin*

  *Source code at petsc4py/PETSc/Vec.pyx:3023*

  - **Return type**

    *None*

- **assemblyEnd()**

  Finish the assembling stage initiated with *assemblyBegin*.

  Collective.

  **SEE ALSO:**

  *assemblyBegin*, *VecAssemblyEnd*

  *Source code at petsc4py/PETSc/Vec.pyx:3035*

  - **Return type**

    *None*

- **attachDLPackInfo(vec=None, dltensor=None)**

  Attach tensor information from another vector or DLPack tensor.

  Logically collective.

  This tensor information is required when converting a *Vec* to a DLPack object.

  - **Parameters**

    - •

      **vec** (*Vec \| None*) -- Vector with attached tensor information. This is typically created by calling *createWithDLPack*.

    - •

      **dltensor** -- DLPack tensor. This will only be used if **vec** is *None*.

  - **Return type**

    *Self*

  Notes

  This operation does not copy any data from **vec** or **dltensor**.

  **SEE ALSO:**

  *clearDLPackInfo*, *createWithDLPack*

  *Source code at petsc4py/PETSc/Vec.pyx:643*

- **axpby(alpha, beta, x)**

  Compute and store y = ɑ·x + β·y.

  Logically collective.

  - **Parameters**

    - •

      **alpha** (*Scalar*) -- First scale factor.

    - •

      **beta** (*Scalar*) -- Second scale factor.

    - •

      **x** (*Vec*) -- Input vector, must not be the current vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *axpy*, *aypx*, *waxpy*, *VecAXPBY*

  *Source code at petsc4py/PETSc/Vec.pyx:2524*

- **axpy(alpha, x)**

  Compute and store y = ɑ·x + y.

  Logically collective.

  - **Parameters**

    - •

      **alpha** (*Scalar*) -- Scale factor.

    - •

      **x** (*Vec*) -- Input vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *isaxpy*, *VecAXPY*

  *Source code at petsc4py/PETSc/Vec.pyx:2460*

- **aypx(alpha, x)**

  Compute and store y = x + ɑ·y.

  Logically collective.

  - **Parameters**

    - •

      **alpha** (*Scalar*) -- Scale factor.

    - •

      **x** (*Vec*) -- Input vector, must not be the current vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *axpy*, *axpby*, *VecAYPX*

  *Source code at petsc4py/PETSc/Vec.pyx:2504*

- **bindToCPU(flg)**

  Bind vector operations execution on the CPU.

  Logically collective.

  **SEE ALSO:**

  *boundToCPU*, *VecBindToCPU*

  *Source code at petsc4py/PETSc/Vec.pyx:1396*

  - **Parameters**

    **flg** (*bool*)

  - **Return type**

    *None*

- **boundToCPU()**

  Return whether the vector has been bound to the CPU.

  Not collective.

  **SEE ALSO:**

  *bindToCPU*, *VecBoundToCPU*

  *Source code at petsc4py/PETSc/Vec.pyx:1409*

  - **Return type**

    *bool*

- **chop(tol)**

  Set all vector entries less than some absolute tolerance to zero.

  Collective.

  - **Parameters**

    **tol** (*float*) -- The absolute tolerance below which entries are set to zero.

  - **Return type**

    *None*

  **SEE ALSO:**

  *VecFilter*

  *Source code at petsc4py/PETSc/Vec.pyx:1732*

- **clearDLPackInfo()**

  Clear tensor information.

  Logically collective.

  **SEE ALSO:**

  *attachDLPackInfo*, *createWithDLPack*

  *Source code at petsc4py/PETSc/Vec.pyx:705*

  - **Return type**

    *Self*

- **classmethod concatenate(vecs)**

  Concatenate vectors into a single vector.

  Collective.

  - **Parameters**

    **vecs** (*Sequence\[Vec\]*) -- The vectors to be concatenated.

  - **Returns**

    - •

      **vector\_out** (*Vec*) -- The concatenated vector.

    - •

      **indices\_list** (*list* of *IS*) -- A list of index sets corresponding to the concatenated components.

  - **Return type**

    *tuple*\[*Vec*, *list*\[*IS*\]\]

  **SEE ALSO:**

  *VecConcatenate*

  *Source code at petsc4py/PETSc/Vec.pyx:3536*

- **conjugate()**

  Conjugate the vector.

  Logically collective.

  **SEE ALSO:**

  *VecConjugate*

  *Source code at petsc4py/PETSc/Vec.pyx:2305*

  - **Return type**

    *None*

- **copy(result=None)**

  Return a copy of the vector.

  Logically collective.

  This operation copies vector entries to the new vector.

  - **Parameters**

    **result** (*Vec \| None*) -- Target vector for the copy. If *None* then a new vector is created internally.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *duplicate*, *VecCopy*

  *Source code at petsc4py/PETSc/Vec.pyx:1707*

- **create(comm=None)**

  Create a vector object.

  Collective.

  After creation the vector type can then be set with *setType*.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *destroy*, *VecCreate*

  *Source code at petsc4py/PETSc/Vec.pyx:176*

- **createCUDAWithArrays(cpuarray=None, cudahandle=None, size=None, bsize=None, comm=None)**

  Create a *Type.CUDA* vector with optional arrays.

  Collective.

  - **Parameters**

    - •

      **cpuarray** (*Sequence\[Scalar\] \| None*) -- Host array. Will be lazily allocated if not provided.

    - •

      **cudahandle** (*Any \| None*) -- Address of the array on the GPU. Will be lazily allocated if not provided.

    - •

      **size** (*LayoutSizeSpec \| None*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *VecCreateSeqCUDAWithArrays*, *VecCreateMPICUDAWithArrays*

  *Source code at petsc4py/PETSc/Vec.pyx:370*

- **createGhost(ghosts, size, bsize=None, comm=None)**

  Create a parallel vector with ghost padding on each processor.

  Collective.

  - **Parameters**

    - •

      **ghosts** (*Sequence\[int\]*) -- Global indices of ghost points.

    - •

      **size** (*LayoutSizeSpec*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *createGhostWithArray*, *VecCreateGhost*, *VecCreateGhostBlock*

  *Source code at petsc4py/PETSc/Vec.pyx:819*

- **createGhostWithArray(ghosts, array, size=None, bsize=None, comm=None)**

  Create a parallel vector with ghost padding and provided arrays.

  Collective.

  - **Parameters**

    - •

      **ghosts** (*Sequence\[int\]*) -- Global indices of ghost points.

    - •

      **array** (*Sequence\[Scalar\]*) -- Array to store the vector values. Must be at least as large as the local size of the vector (including ghost points).

    - •

      **size** (*LayoutSizeSpec \| None*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *createGhost*, *VecCreateGhostWithArray*, *VecCreateGhostBlockWithArray*

  *Source code at petsc4py/PETSc/Vec.pyx:861*

- **createHIPWithArrays(cpuarray=None, hiphandle=None, size=None, bsize=None, comm=None)**

  Create a *Type.HIP* vector with optional arrays.

  Collective.

  - **Parameters**

    - •

      **cpuarray** (*Sequence\[Scalar\] \| None*) -- Host array. Will be lazily allocated if not provided.

    - •

      **hiphandle** (*Any \| None*) -- Address of the array on the GPU. Will be lazily allocated if not provided.

    - •

      **size** (*LayoutSizeSpec \| None*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *VecCreateSeqHIPWithArrays*, *VecCreateMPIHIPWithArrays*

  *Source code at petsc4py/PETSc/Vec.pyx:428*

- **createLocalVector()**

  Create a local vector.

  Not collective.

  - **Returns**

    The local vector.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *getLocalVector*, *VecCreateLocalVector*

  *Source code at petsc4py/PETSc/Vec.pyx:1204*

- **createMPI(size, bsize=None, comm=None)**

  Create a parallel *Type.MPI* vector.

  Collective.

  - **Parameters**

    - •

      **size** (*LayoutSizeSpec*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *createSeq*, *VecCreateMPI*

  *Source code at petsc4py/PETSc/Vec.pyx:283*

- **createNest(vecs, isets=None, comm=None)**

  Create a *Type.NEST* vector containing multiple nested subvectors.

  Collective.

  - **Parameters**

    - •

      **vecs** (*Sequence\[Vec\]*) -- Iterable of subvectors.

    - •

      **isets** (*Sequence\[IS\]*) -- Iterable of index sets for each nested subvector. Defaults to contiguous ordering.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *VecCreateNest*

  *Source code at petsc4py/PETSc/Vec.pyx:952*

- **createSeq(size, bsize=None, comm=None)**

  Create a sequential *Type.SEQ* vector.

  Collective.

  - **Parameters**

    - •

      **size** (*LayoutSizeSpec*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *COMM\_SELF*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *createMPI*, *VecCreateSeq*

  *Source code at petsc4py/PETSc/Vec.pyx:247*

- **createShared(size, bsize=None, comm=None)**

  Create a *Type.SHARED* vector that uses shared memory.

  Collective.

  - **Parameters**

    - •

      **size** (*LayoutSizeSpec*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *VecCreateShared*

  *Source code at petsc4py/PETSc/Vec.pyx:918*

- **createViennaCLWithArrays(cpuarray=None, viennaclvechandle=None, size=None, bsize=None, comm=None)**

  Create a *Type.VIENNACL* vector with optional arrays.

  Collective.

  - **Parameters**

    - •

      **cpuarray** (*Sequence\[Scalar\] \| None*) -- Host array. Will be lazily allocated if not provided.

    - •

      **viennaclvechandle** (*Any \| None*) -- Address of the array on the GPU. Will be lazily allocated if not provided.

    - •

      **size** (*LayoutSizeSpec \| None*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *VecCreateSeqViennaCLWithArrays*, *VecCreateMPIViennaCLWithArrays*

  *Source code at petsc4py/PETSc/Vec.pyx:486*

- **createWithArray(array, size=None, bsize=None, comm=None)**

  Create a vector using a provided array.

  Collective.

  This method will create either a *Type.SEQ* or *Type.MPI* depending on the size of the communicator.

  - **Parameters**

    - •

      **array** (*Sequence\[Scalar\]*) -- Array to store the vector values. Must be at least as large as the local size of the vector.

    - •

      **size** (*LayoutSizeSpec \| None*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *VecCreateSeqWithArray*, *VecCreateMPIWithArray*

  *Source code at petsc4py/PETSc/Vec.pyx:319*

- **createWithDLPack(dltensor, size=None, bsize=None, comm=None)**

  Create a vector wrapping a DLPack object, sharing the same memory.

  Collective.

  This operation does not modify the storage of the original tensor and should be used with contiguous tensors only. If the tensor is stored in row-major order (e.g. PyTorch tensors), the resulting vector will look like an unrolled tensor using row-major order.

  The resulting vector type will be one of *Type.SEQ*, *Type.MPI*, *Type.SEQCUDA*, *Type.MPICUDA*, *Type.SEQHIP* or *Type.MPIHIP* depending on the type of **dltensor** and the number of processes in the communicator.

  - **Parameters**

    - •

      **dltensor** -- Either an object with a **\_\_dlpack\_\_** method or a DLPack tensor object.

    - •

      **size** (*LayoutSizeSpec \| None*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  *Source code at petsc4py/PETSc/Vec.pyx:545*

- **destroy()**

  Destroy the vector.

  Collective.

  **SEE ALSO:**

  *create*, *VecDestroy*

  *Source code at petsc4py/PETSc/Vec.pyx:163*

  - **Return type**

    *Self*

- **dot(vec)**

  Return the dot product with **vec**.

  Collective.

  For complex numbers this computes yᴴ·x with **self** as x, **vec** as y and where yᴴ denotes the conjugate transpose of y.

  Use *tDot* for the indefinite form yᵀ·x where yᵀ denotes the transpose of y.

  - **Parameters**

    **vec** (*Vec*) -- Vector to compute the dot product with.

  - **Return type**

    *Scalar*

  **SEE ALSO:**

  *dotBegin*, *dotEnd*, *tDot*, *VecDot*

  *Source code at petsc4py/PETSc/Vec.pyx:1787*

- **dotBegin(vec)**

  Begin computing the dot product.

  Collective.

  This should be paired with a call to *dotEnd*.

  - **Parameters**

    **vec** (*Vec*) -- Vector to compute the dot product with.

  - **Return type**

    *None*

  **SEE ALSO:**

  *dotEnd*, *dot*, *VecDotBegin*

  *Source code at petsc4py/PETSc/Vec.pyx:1812*

- **dotEnd(vec)**

  Finish computing the dot product initiated with *dotBegin*.

  Collective.

  **SEE ALSO:**

  *dotBegin*, *dot*, *VecDotEnd*

  *Source code at petsc4py/PETSc/Vec.pyx:1832*

  - **Parameters**

    **vec** (*Vec*)

  - **Return type**

    *Scalar*

- **dotNorm2(vec)**

  Return the dot product with **vec** and its squared norm.

  Collective.

  **SEE ALSO:**

  *dot*, *norm*, *VecDotNorm2*

  *Source code at petsc4py/PETSc/Vec.pyx:2151*

  - **Parameters**

    **vec** (*Vec*)

  - **Return type**

    *tuple*\[*Scalar*, *float*\]

- **duplicate(array=None)**

  Create a new vector with the same type, optionally with data.

  Collective.

  - **Parameters**

    **array** (*Sequence\[Scalar\] \| None*) -- Optional values to store in the new vector.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *copy*, *VecDuplicate*

  *Source code at petsc4py/PETSc/Vec.pyx:1682*

- **equal(vec)**

  Return whether the vector is equal to another.

  Collective.

  - **Parameters**

    **vec** (*Vec*) -- Vector to compare with.

  - **Return type**

    *bool*

  **SEE ALSO:**

  *VecEqual*

  *Source code at petsc4py/PETSc/Vec.pyx:1768*

- **exp()**

  Replace each entry (xₙ) in the vector by exp(xₙ).

  Logically collective.

  **SEE ALSO:**

  *log*, *VecExp*

  *Source code at petsc4py/PETSc/Vec.pyx:2257*

  - **Return type**

    *None*

- **getArray(readonly=False)**

  Return local portion of the vector as an *ndarray*.

  Logically collective.

  - **Parameters**

    **readonly** (*bool*) -- Request read-only access.

  - **Return type**

    *ArrayScalar*

  **SEE ALSO:**

  *setArray*, *getBuffer*

  *Source code at petsc4py/PETSc/Vec.pyx:1313*

- **getBlockSize()**

  Return the block size of the vector.

  Not collective.

  **SEE ALSO:**

  *VecGetBlockSize*

  *Source code at petsc4py/PETSc/Vec.pyx:1149*

  - **Return type**

    *int*

- **getBuffer(readonly=False)**

  Return a buffered view of the local portion of the vector.

  Logically collective.

  - **Parameters**

    **readonly** (*bool*) -- Request read-only access.

  - **Returns**

    *Buffer object* wrapping the local portion of the vector data. This can be used either as a context manager providing access as a numpy array or can be passed to array constructors accepting buffered objects such as *numpy.asarray*.

  - **Return type**

    *typing.Any*

  Examples

  Accessing the data with a context manager:

  ```
  >>> vec = PETSc.Vec().createWithArray([1, 2, 3])
  >>> with vec.getBuffer() as arr:
  ...     arr
  array([1., 2., 3.])
  ```

  Converting the buffer to an *ndarray*:

  ```
  >>> buf = PETSc.Vec().createWithArray([1, 2, 3]).getBuffer()
  >>> np.asarray(buf)
  array([1., 2., 3.])
  ```

  **SEE ALSO:**

  *getArray*

  *Source code at petsc4py/PETSc/Vec.pyx:1270*

- **getCLContextHandle()**

  Return the OpenCL context associated with the vector.

  Not collective.

  - **Returns**

    Pointer to underlying CL context. This can be used with **pyopencl** through **pyopencl.Context.from\_int\_ptr**.

  - **Return type**

    *int*

  **SEE ALSO:**

  *getCLQueueHandle*, *VecViennaCLGetCLContext*

  *Source code at petsc4py/PETSc/Vec.pyx:1593*

- **getCLMemHandle(mode='rw')**

  Return the OpenCL buffer associated with the vector.

  Not collective.

  - **Returns**

    Pointer to the device buffer. This can be used with **pyopencl** through **pyopencl.Context.from\_int\_ptr**.

  - **Return type**

    *int*

  - **Parameters**

    **mode** (*AccessModeSpec*)

  Notes

  This method may incur a host-to-device copy if the device data is out of date and **mode** is **"r"** or **"rw"**.

  **SEE ALSO:**

  *restoreCLMemHandle*, *VecViennaCLGetCLMem*, *VecViennaCLGetCLMemRead*, *VecViennaCLGetCLMemWrite*

  *Source code at petsc4py/PETSc/Vec.pyx:1633*

- **getCLQueueHandle()**

  Return the OpenCL command queue associated with the vector.

  Not collective.

  - **Returns**

    Pointer to underlying CL command queue. This can be used with **pyopencl** through **pyopencl.Context.from\_int\_ptr**.

  - **Return type**

    *int*

  **SEE ALSO:**

  *getCLContextHandle*, *VecViennaCLGetCLQueue*

  *Source code at petsc4py/PETSc/Vec.pyx:1613*

- **getCUDAHandle(mode='rw')**

  Return a pointer to the device buffer.

  Not collective.

  The returned pointer should be released using *restoreCUDAHandle* with the same access mode.

  - **Returns**

    CUDA device pointer.

  - **Return type**

    *typing.Any*

  - **Parameters**

    **mode** (*AccessModeSpec*)

  Notes

  This method may incur a host-to-device copy if the device data is out of date and **mode** is **"r"** or **"rw"**.

  **SEE ALSO:**

  *restoreCUDAHandle*, *VecCUDAGetArray*, *VecCUDAGetArrayRead*, *VecCUDAGetArrayWrite*

  *Source code at petsc4py/PETSc/Vec.pyx:1423*

- **getDM()**

  Return the *DM* associated to the vector.

  Not collective.

  **SEE ALSO:**

  *setDM*, *VecGetDM*

  *Source code at petsc4py/PETSc/Vec.pyx:3519*

  - **Return type**

    *DM*

- **getGhostIS()**

  Return ghosting indices of a ghost vector.

  Collective.

  - **Returns**

    Indices of ghosts.

  - **Return type**

    *IS*

  **SEE ALSO:**

  *VecGhostGetGhostIS*

  *Source code at petsc4py/PETSc/Vec.pyx:3385*

- **getHIPHandle(mode='rw')**

  Return a pointer to the device buffer.

  Not collective.

  The returned pointer should be released using *restoreHIPHandle* with the same access mode.

  - **Returns**

    HIP device pointer.

  - **Return type**

    *typing.Any*

  - **Parameters**

    **mode** (*AccessModeSpec*)

  Notes

  This method may incur a host-to-device copy if the device data is out of date and **mode** is **"r"** or **"rw"**.

  **SEE ALSO:**

  *restoreHIPHandle*, *VecHIPGetArray*, *VecHIPGetArrayRead*, *VecHIPGetArrayWrite*

  *Source code at petsc4py/PETSc/Vec.pyx:1495*

- **getLGMap()**

  Return the local-to-global mapping.

  Not collective.

  **SEE ALSO:**

  *setLGMap*, *VecGetLocalToGlobalMapping*

  *Source code at petsc4py/PETSc/Vec.pyx:2899*

  - **Return type**

    *LGMap*

- **getLocalSize()**

  Return the local size of the vector.

  Not collective.

  **SEE ALSO:**

  *setSizes*, *getSize*, *VecGetLocalSize*

  *Source code at petsc4py/PETSc/Vec.pyx:1107*

  - **Return type**

    *int*

- **getLocalVector(lvec, readonly=False)**

  Maps the local portion of the vector into a local vector.

  Logically collective.

  - **Parameters**

    - •

      **lvec** (*Vec*) -- The local vector obtained from *createLocalVector*.

    - •

      **readonly** (*bool*) -- Request read-only access.

  - **Return type**

    *None*

  **SEE ALSO:**

  *createLocalVector*, *restoreLocalVector*, *VecGetLocalVectorRead*, *VecGetLocalVector*

  *Source code at petsc4py/PETSc/Vec.pyx:1223*

- **getNestSubVecs()**

  Return all the vectors contained in the nested vector.

  Not collective.

  **SEE ALSO:**

  *setNestSubVecs*, *VecNestGetSubVecs*

  *Source code at petsc4py/PETSc/Vec.pyx:3451*

  - **Return type**

    *list*\[*Vec*\]

- **getOffloadMask()**

  Return the offloading status of the vector.

  Not collective.

  Common return values include:

  - •

    1: **PETSC\_OFFLOAD\_CPU** - CPU has valid entries

  - •

    2: **PETSC\_OFFLOAD\_GPU** - GPU has valid entries

  - •

    3: **PETSC\_OFFLOAD\_BOTH** - CPU and GPU are in sync

  - **Returns**

    Enum value from *PetscOffloadMask* describing the offloading status.

  - **Return type**

    *int*

  **SEE ALSO:**

  *VecGetOffloadMask*, *PetscOffloadMask*

  *Source code at petsc4py/PETSc/Vec.pyx:1567*

- **getOptionsPrefix()**

  Return the prefix used for searching for options in the database.

  Not collective.

  **SEE ALSO:**

  *Working with PETSc options*, *setOptionsPrefix*, *VecGetOptionsPrefix*

  *Source code at petsc4py/PETSc/Vec.pyx:1014*

  - **Return type**

    *str*

- **getOwnershipRange()**

  Return the locally owned range of indices **(start, end)**.

  Not collective.

  - **Returns**

    - •

      **start** (*int*) -- The first local element.

    - •

      **end** (*int*) -- One more than the last local element.

  - **Return type**

    *tuple*\[*int*, *int*\]

  **SEE ALSO:**

  *getOwnershipRanges*, *VecGetOwnershipRange*

  *Source code at petsc4py/PETSc/Vec.pyx:1163*

- **getOwnershipRanges()**

  Return the range of indices owned by each process.

  Not collective.

  The returned array is the result of exclusive scan of the local sizes.

  **SEE ALSO:**

  *getOwnershipRange*, *VecGetOwnershipRanges*

  *Source code at petsc4py/PETSc/Vec.pyx:1184*

  - **Return type**

    *ArrayInt*

- **getSize()**

  Return the global size of the vector.

  Not collective.

  **SEE ALSO:**

  *setSizes*, *getLocalSize*, *VecGetSize*

  *Source code at petsc4py/PETSc/Vec.pyx:1093*

  - **Return type**

    *int*

- **getSizes()**

  Return the vector sizes.

  Not collective.

  **SEE ALSO:**

  *getSize*, *getLocalSize*, *VecGetLocalSize*, *VecGetSize*

  *Source code at petsc4py/PETSc/Vec.pyx:1121*

  - **Return type**

    *LayoutSizeSpec*

- **getSubVector(iset, subvec=None)**

  Return a subvector from given indices.

  Collective.

  Once finished with the subvector it should be returned with *restoreSubVector*.

  - **Parameters**

    - •

      **iset** (*IS*) -- Index set describing which indices to extract into the subvector.

    - •

      **subvec** (*Vec \| None*) -- Subvector to copy entries into. If *None* then a new *Vec* will be created.

  - **Return type**

    *Vec*

  **SEE ALSO:**

  *restoreSubVector*, *VecGetSubVector*

  *Source code at petsc4py/PETSc/Vec.pyx:3406*

- **getType()**

  Return the type of the vector.

  Not collective.

  **SEE ALSO:**

  *setType*, *VecGetType*

  *Source code at petsc4py/PETSc/Vec.pyx:1079*

  - **Return type**

    *str*

- **getValue(index)**

  Return a single value from the vector.

  Not collective.

  Only values locally stored may be accessed.

  - **Parameters**

    **index** (*int*) -- Location of the value to read.

  - **Return type**

    *Scalar*

  **SEE ALSO:**

  *getValues*, *VecGetValues*

  *Source code at petsc4py/PETSc/Vec.pyx:2720*

- **getValues(indices, values=None)**

  Return values from certain locations in the vector.

  Not collective.

  Only values locally stored may be accessed.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Locations of the values to read.

    - •

      **values** (*Sequence\[Scalar\] \| None*) -- Location to store the collected values. If not provided then a new array will be allocated.

  - **Return type**

    *ArrayScalar*

  **SEE ALSO:**

  *getValue*, *setValues*, *VecGetValues*

  *Source code at petsc4py/PETSc/Vec.pyx:2742*

- **getValuesStagStencil(indices, values=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Vec.pyx:2767*

  - **Return type**

    *None*

- **ghostUpdate(addv=None, mode=None)**

  Update ghosted vector entries.

  Neighborwise collective.

  - **Parameters**

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

    - •

      **mode** (*ScatterModeSpec*) -- Scatter mode.

  - **Return type**

    *None*

  Examples

  To accumulate ghost region values onto owning processes:

  ```
  >>> vec.ghostUpdate(InsertMode.ADD_VALUES, ScatterMode.REVERSE)
  ```

  Update ghost regions:

  ```
  >>> vec.ghostUpdate(InsertMode.INSERT_VALUES, ScatterMode.FORWARD)
  ```

  **SEE ALSO:**

  *ghostUpdateBegin*, *ghostUpdateEnd*

  *Source code at petsc4py/PETSc/Vec.pyx:3331*

- **ghostUpdateBegin(addv=None, mode=None)**

  Begin updating ghosted vector entries.

  Neighborwise collective.

  **SEE ALSO:**

  *ghostUpdateEnd*, *ghostUpdate*, *createGhost*, *VecGhostUpdateBegin*

  *Source code at petsc4py/PETSc/Vec.pyx:3297*

  - **Parameters**

    - •

      **addv** (*InsertModeSpec*)

    - •

      **mode** (*ScatterModeSpec*)

  - **Return type**

    *None*

- **ghostUpdateEnd(addv=None, mode=None)**

  Finish updating ghosted vector entries initiated with *ghostUpdateBegin*.

  Neighborwise collective.

  **SEE ALSO:**

  *ghostUpdateBegin*, *ghostUpdate*, *createGhost*, *VecGhostUpdateEnd*

  *Source code at petsc4py/PETSc/Vec.pyx:3314*

  - **Parameters**

    - •

      **addv** (*InsertModeSpec*)

    - •

      **mode** (*ScatterModeSpec*)

  - **Return type**

    *None*

- **isaxpy(idx, alpha, x)**

  Add a scaled reduced-space vector to a subset of the vector.

  Logically collective.

  This is equivalent to **y\[idx\[i\]\] += alpha\*x\[i\]**.

  - **Parameters**

    - •

      **idx** (*IS*) -- Index set for the reduced space. Negative indices are skipped.

    - •

      **alpha** (*Scalar*) -- Scale factor.

    - •

      **x** (*Vec*) -- Reduced-space vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *axpy*, *aypx*, *axpby*, *VecISAXPY*

  *Source code at petsc4py/PETSc/Vec.pyx:2480*

- **isset(idx, alpha)**

  Set specific elements of the vector to the same value.

  Not collective.

  - **Parameters**

    - •

      **idx** (*IS*) -- Index set specifying the vector entries to set.

    - •

      **alpha** (*Scalar*) -- Value to set the selected entries to.

  - **Return type**

    *None*

  **SEE ALSO:**

  *set*, *zeroEntries*, *VecISSet*

  *Source code at petsc4py/PETSc/Vec.pyx:2383*

- **load(viewer)**

  Load a vector.

  Collective.

  **SEE ALSO:**

  *view*, *VecLoad*

  *Source code at petsc4py/PETSc/Vec.pyx:1750*

  - **Parameters**

    **viewer** (*Viewer*)

  - **Return type**

    *Self*

- **localForm()**

  Return a context manager for viewing ghost vectors in local form.

  Logically collective.

  - **Returns**

    Context manager yielding the vector in local (ghosted) form.

  - **Return type**

    *typing.Any*

  Notes

  This operation does not perform a copy. To obtain up-to-date ghost values *ghostUpdateBegin* and *ghostUpdateEnd* must be called first.

  Non-ghost values can be found at **values\[0:nlocal\]** and ghost values at **values\[nlocal:nlocal+nghost\]**.

  Examples

  ```
  >>> with vec.localForm() as lf:
  ...     # compute with lf
  ```

  **SEE ALSO:**

  *createGhost*, *ghostUpdateBegin*, *ghostUpdateEnd*, *VecGhostGetLocalForm*, *VecGhostRestoreLocalForm*

  *Source code at petsc4py/PETSc/Vec.pyx:3264*

- **log()**

  Replace each entry in the vector by its natural logarithm.

  Logically collective.

  **SEE ALSO:**

  *exp*, *VecLog*

  *Source code at petsc4py/PETSc/Vec.pyx:2269*

  - **Return type**

    *None*

- **mDot(vecs, out=None)**

  Compute Xᴴ·y with X an array of vectors.

  Collective.

  - **Parameters**

    - •

      **vecs** (*Sequence\[Vec\]*) -- Array of vectors.

    - •

      **out** (*ArrayScalar \| None*) -- Optional placeholder for the result.

  - **Return type**

    *ArrayScalar*

  **SEE ALSO:**

  *dot*, *tDot*, *mDotBegin*, *mDotEnd*, *VecMDot*

  *Source code at petsc4py/PETSc/Vec.pyx:1902*

- **mDotBegin(vecs, out)**

  Starts a split phase multiple dot product computation.

  Collective.

  - **Parameters**

    - •

      **vecs** (*Sequence\[Vec\]*) -- Array of vectors.

    - •

      **out** (*ArrayScalar*) -- Placeholder for the result.

  - **Return type**

    *None*

  **SEE ALSO:**

  *mDot*, *mDotEnd*, *VecMDotBegin*

  *Source code at petsc4py/PETSc/Vec.pyx:1935*

- **mDotEnd(vecs, out)**

  Ends a split phase multiple dot product computation.

  Collective.

  - **Parameters**

    - •

      **vecs** (*Sequence\[Vec\]*) -- Array of vectors.

    - •

      **out** (*ArrayScalar*) -- Placeholder for the result.

  - **Return type**

    *ArrayScalar*

  **SEE ALSO:**

  *mDot*, *mDotBegin*, *VecMDotEnd*

  *Source code at petsc4py/PETSc/Vec.pyx:1965*

- **max()**

  Return the vector entry with maximum real part and its location.

  Collective.

  - **Returns**

    - •

      **p** (*int*) -- Location of the maximum value. If multiple entries exist with the same value then the smallest index will be returned.

    - •

      **val** (*Scalar*) -- Minimum value.

  - **Return type**

    *tuple*\[*int*, *float*\]

  **SEE ALSO:**

  *min*, *VecMax*

  *Source code at petsc4py/PETSc/Vec.pyx:2203*

- **maxPointwiseDivide(vec)**

  Return the maximum of the component-wise absolute value division.

  Logically collective.

  Equivalent to **result = max\_i abs(x\[i\] / y\[i\])**.

  - **Parameters**

    - •

      **x** -- Numerator vector.

    - •

      **y** -- Denominator vector.

    - •

      **vec** (*Vec*)

  - **Return type**

    *float*

  **SEE ALSO:**

  *pointwiseMin*, *pointwiseMax*, *pointwiseMaxAbs*, *VecMaxPointwiseDivide*

  *Source code at petsc4py/PETSc/Vec.pyx:2696*

- **maxpy(alphas, vecs)**

  Compute and store y = Σₙ(ɑₙ·Xₙ) + y with X an array of vectors.

  Logically collective.

  Equivalent to **y\[:\] = alphas\[i\]\*vecs\[i, :\] + y\[:\]**.

  - **Parameters**

    - •

      **alphas** (*Sequence\[Scalar\]*) -- Array of scale factors, one for each vector in **vecs**.

    - •

      **vecs** (*Sequence\[Vec\]*) -- Array of vectors.

  - **Return type**

    *None*

  **SEE ALSO:**

  *axpy*, *aypx*, *axpby*, *waxpy*, *VecMAXPY*

  *Source code at petsc4py/PETSc/Vec.pyx:2569*

- **min()**

  Return the vector entry with minimum real part and its location.

  Collective.

  - **Returns**

    - •

      **p** (*int*) -- Location of the minimum value. If multiple entries exist with the same value then the smallest index will be returned.

    - •

      **val** (*Scalar*) -- Minimum value.

  - **Return type**

    *tuple*\[*int*, *float*\]

  **SEE ALSO:**

  *max*, *VecMin*

  *Source code at petsc4py/PETSc/Vec.pyx:2180*

- **mtDot(vecs, out=None)**

  Compute Xᵀ·y with X an array of vectors.

  Collective.

  - **Parameters**

    - •

      **vecs** (*Sequence\[Vec\]*) -- Array of vectors.

    - •

      **out** (*ArrayScalar \| None*) -- Optional placeholder for the result.

  - **Return type**

    *ArrayScalar*

  **SEE ALSO:**

  *tDot*, *mDot*, *mtDotBegin*, *mtDotEnd*, *VecMTDot*

  *Source code at petsc4py/PETSc/Vec.pyx:1996*

- **mtDotBegin(vecs, out)**

  Starts a split phase transpose multiple dot product computation.

  Collective.

  - **Parameters**

    - •

      **vecs** (*Sequence\[Vec\]*) -- Array of vectors.

    - •

      **out** (*ArrayScalar*) -- Placeholder for the result.

  - **Return type**

    *None*

  **SEE ALSO:**

  *mtDot*, *mtDotEnd*, *VecMTDotBegin*

  *Source code at petsc4py/PETSc/Vec.pyx:2029*

- **mtDotEnd(vecs, out)**

  Ends a split phase transpose multiple dot product computation.

  Collective.

  - **Parameters**

    - •

      **vecs** (*Sequence\[Vec\]*) -- Array of vectors.

    - •

      **out** (*ArrayScalar*) -- Placeholder for the result.

  - **Return type**

    *ArrayScalar*

  **SEE ALSO:**

  *mtDot*, *mtDotBegin*, *VecMTDotEnd*

  *Source code at petsc4py/PETSc/Vec.pyx:2059*

- **norm(norm\_type=None)**

  Compute the vector norm.

  Collective.

  A 2-tuple is returned if *NormType.NORM\_1\_AND\_2* is specified.

  **SEE ALSO:**

  *VecNorm*, *NormType*

  *Source code at petsc4py/PETSc/Vec.pyx:2090*

  - **Parameters**

    **norm\_type** (*NormTypeSpec*)

  - **Return type**

    *float* \| *tuple*\[*float*, *float*\]

- **normBegin(norm\_type=None)**

  Begin computing the vector norm.

  Collective.

  This should be paired with a call to *normEnd*.

  **SEE ALSO:**

  *normEnd*, *norm*, *VecNormBegin*

  *Source code at petsc4py/PETSc/Vec.pyx:2112*

  - **Parameters**

    **norm\_type** (*NormTypeSpec*)

  - **Return type**

    *None*

- **normEnd(norm\_type=None)**

  Finish computations initiated with *normBegin*.

  Collective.

  **SEE ALSO:**

  *normBegin*, *norm*, *VecNormEnd*

  *Source code at petsc4py/PETSc/Vec.pyx:2131*

  - **Parameters**

    **norm\_type** (*NormTypeSpec*)

  - **Return type**

    *float* \| *tuple*\[*float*, *float*\]

- **normalize()**

  Normalize the vector by its 2-norm.

  Collective.

  - **Returns**

    The vector norm before normalization.

  - **Return type**

    *float*

  **SEE ALSO:**

  *norm*, *VecNormalize*

  *Source code at petsc4py/PETSc/Vec.pyx:2226*

- **permute(order, invert=False)**

  Permute the vector in-place with a provided ordering.

  Collective.

  - **Parameters**

    - •

      **order** (*IS*) -- Ordering for the permutation.

    - •

      **invert** (*bool*) -- Whether to invert the permutation.

  - **Return type**

    *None*

  **SEE ALSO:**

  *VecPermute*

  *Source code at petsc4py/PETSc/Vec.pyx:2337*

- **placeArray(array)**

  Set the local portion of the vector to a provided array.

  Not collective.

  **SEE ALSO:**

  *resetArray*, *setArray*, *VecPlaceArray*

  *Source code at petsc4py/PETSc/Vec.pyx:1345*

  - **Parameters**

    **array** (*Sequence\[Scalar\]*)

  - **Return type**

    *None*

- **pointwiseDivide(x, y)**

  Compute and store the component-wise division of two vectors.

  Logically collective.

  Equivalent to **w\[i\] = x\[i\] / y\[i\]**.

  - **Parameters**

    - •

      **x** (*Vec*) -- Numerator vector.

    - •

      **y** (*Vec*) -- Denominator vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *pointwiseMult*, *VecPointwiseDivide*

  *Source code at petsc4py/PETSc/Vec.pyx:2618*

- **pointwiseMax(x, y)**

  Compute and store the component-wise maximum of two vectors.

  Logically collective.

  Equivalent to **w\[i\] = max(x\[i\], y\[i\])**.

  - **Parameters**

    - •

      **x** (*Vec*) -- Input vectors to find the component-wise maxima.

    - •

      **y** (*Vec*) -- Input vectors to find the component-wise maxima.

  - **Return type**

    *None*

  **SEE ALSO:**

  *pointwiseMin*, *pointwiseMaxAbs*, *VecPointwiseMax*

  *Source code at petsc4py/PETSc/Vec.pyx:2658*

- **pointwiseMaxAbs(x, y)**

  Compute and store the component-wise maximum absolute values.

  Logically collective.

  Equivalent to **w\[i\] = max(abs(x\[i\]), abs(y\[i\]))**.

  - **Parameters**

    - •

      **x** (*Vec*) -- Input vectors to find the component-wise maxima.

    - •

      **y** (*Vec*) -- Input vectors to find the component-wise maxima.

  - **Return type**

    *None*

  **SEE ALSO:**

  *pointwiseMin*, *pointwiseMax*, *VecPointwiseMaxAbs*

  *Source code at petsc4py/PETSc/Vec.pyx:2677*

- **pointwiseMin(x, y)**

  Compute and store the component-wise minimum of two vectors.

  Logically collective.

  Equivalent to **w\[i\] = min(x\[i\], y\[i\])**.

  - **Parameters**

    - •

      **x** (*Vec*) -- Input vectors to find the component-wise minima.

    - •

      **y** (*Vec*) -- Input vectors to find the component-wise minima.

  - **Return type**

    *None*

  **SEE ALSO:**

  *pointwiseMax*, *pointwiseMaxAbs*, *VecPointwiseMin*

  *Source code at petsc4py/PETSc/Vec.pyx:2639*

- **pointwiseMult(x, y)**

  Compute and store the component-wise multiplication of two vectors.

  Logically collective.

  Equivalent to **w\[i\] = x\[i\] \* y\[i\]**.

  - **Parameters**

    - •

      **x** (*Vec*) -- Input vectors to multiply component-wise.

    - •

      **y** (*Vec*) -- Input vectors to multiply component-wise.

  - **Return type**

    *None*

  **SEE ALSO:**

  *pointwiseDivide*, *VecPointwiseMult*

  *Source code at petsc4py/PETSc/Vec.pyx:2599*

- **reciprocal()**

  Replace each entry in the vector by its reciprocal.

  Logically collective.

  **SEE ALSO:**

  *VecReciprocal*

  *Source code at petsc4py/PETSc/Vec.pyx:2245*

  - **Return type**

    *None*

- **resetArray(force=False)**

  Reset the vector to use its default array.

  Not collective.

  - **Parameters**

    **force** (*bool*) -- Force the calling of *VecResetArray* even if no user array has been placed with *placeArray*.

  - **Returns**

    The array previously provided by the user with *placeArray*. Can be *None* if **force** is *True* and no array was placed before.

  - **Return type**

    *ArrayScalar*

  **SEE ALSO:**

  *placeArray*, *VecResetArray*

  *Source code at petsc4py/PETSc/Vec.pyx:1366*

- **restoreCLMemHandle()**

  Restore a pointer to the OpenCL buffer obtained with *getCLMemHandle*.

  Not collective.

  **SEE ALSO:**

  *getCLMemHandle*, *VecViennaCLRestoreCLMemWrite*

  *Source code at petsc4py/PETSc/Vec.pyx:1670*

  - **Return type**

    *None*

- **restoreCUDAHandle(handle, mode='rw')**

  Restore a pointer to the device buffer obtained with *getCUDAHandle*.

  Not collective.

  - **Parameters**

    - •

      **handle** (*Any*) -- CUDA device pointer.

    - •

      **mode** (*AccessModeSpec*) -- Access mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getCUDAHandle*, *VecCUDARestoreArray*, *VecCUDARestoreArrayRead*, *VecCUDARestoreArrayWrite*

  *Source code at petsc4py/PETSc/Vec.pyx:1462*

- **restoreHIPHandle(handle, mode='rw')**

  Restore a pointer to the device buffer obtained with *getHIPHandle*.

  Not collective.

  - **Parameters**

    - •

      **handle** (*Any*) -- HIP device pointer.

    - •

      **mode** (*AccessModeSpec*) -- Access mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getHIPHandle*, *VecHIPRestoreArray*, *VecHIPRestoreArrayRead*, *VecHIPRestoreArrayWrite*

  *Source code at petsc4py/PETSc/Vec.pyx:1534*

- **restoreLocalVector(lvec, readonly=False)**

  Unmap a local access obtained with *getLocalVector*.

  Logically collective.

  - **Parameters**

    - •

      **lvec** (*Vec*) -- The local vector.

    - •

      **readonly** (*bool*) -- Request read-only access.

  - **Return type**

    *None*

  **SEE ALSO:**

  *createLocalVector*, *getLocalVector*, *VecRestoreLocalVectorRead*, *VecRestoreLocalVector*

  *Source code at petsc4py/PETSc/Vec.pyx:1246*

- **restoreSubVector(iset, subvec)**

  Restore a subvector extracted using *getSubVector*.

  Collective.

  - **Parameters**

    - •

      **iset** (*IS*) -- Index set describing the indices represented by the subvector.

    - •

      **subvec** (*Vec*) -- Subvector to be restored.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getSubVector*, *VecRestoreSubVector*

  *Source code at petsc4py/PETSc/Vec.pyx:3432*

- **scale(alpha)**

  Scale all entries of the vector.

  Collective.

  This method sets each entry (xₙ) in the vector to ɑ·xₙ.

  - **Parameters**

    **alpha** (*Scalar*) -- The scaling factor.

  - **Return type**

    *None*

  **SEE ALSO:**

  *shift*, *VecScale*

  *Source code at petsc4py/PETSc/Vec.pyx:2403*

- **set(alpha)**

  Set all components of the vector to the same value.

  Collective.

  **SEE ALSO:**

  *zeroEntries*, *isset*, *VecSet*

  *Source code at petsc4py/PETSc/Vec.pyx:2370*

  - **Parameters**

    **alpha** (*Scalar*)

  - **Return type**

    *None*

- **setArray(array)**

  Set values for the local portion of the vector.

  Logically collective.

  **SEE ALSO:**

  *placeArray*

  *Source code at petsc4py/PETSc/Vec.pyx:1333*

  - **Parameters**

    **array** (*Sequence\[Scalar\]*)

  - **Return type**

    *None*

- **setBlockSize(bsize)**

  Set the block size of the vector.

  Logically collective.

  **SEE ALSO:**

  *VecSetBlockSize*

  *Source code at petsc4py/PETSc/Vec.pyx:1136*

  - **Parameters**

    **bsize** (*int*)

  - **Return type**

    *None*

- **setDM(dm)**

  Associate a *DM* to the vector.

  Not collective.

  **SEE ALSO:**

  *getDM*, *VecSetDM*

  *Source code at petsc4py/PETSc/Vec.pyx:3507*

  - **Parameters**

    **dm** (*DM*)

  - **Return type**

    *None*

- **setFromOptions()**

  Configure the vector from the options database.

  Collective.

  **SEE ALSO:**

  *Working with PETSc options*, *VecSetFromOptions*

  *Source code at petsc4py/PETSc/Vec.pyx:1042*

  - **Return type**

    *None*

- **setLGMap(lgmap)**

  Set the local-to-global mapping.

  Logically collective.

  This allows users to insert vector entries using a local numbering with *setValuesLocal*.

  **SEE ALSO:**

  *setValues*, *setValuesLocal*, *getLGMap*, *VecSetLocalToGlobalMapping*

  *Source code at petsc4py/PETSc/Vec.pyx:2884*

  - **Parameters**

    **lgmap** (*LGMap*)

  - **Return type**

    *None*

- **setMPIGhost(ghosts)**

  Set the ghost points for a ghosted vector.

  Collective.

  - **Parameters**

    **ghosts** (*Sequence\[int\]*) -- Global indices of ghost points.

  - **Return type**

    *None*

  **SEE ALSO:**

  *createGhost*

  *Source code at petsc4py/PETSc/Vec.pyx:3366*

- **setNestSubVecs(sx, idxm=None)**

  Set the component vectors at specified indices in the nested vector.

  Not collective.

  - **Parameters**

    - •

      **sx** (*Sequence\[Vec\]*) -- Array of component vectors.

    - •

      **idxm** (*Sequence\[int\] \| None*) -- Indices of the component vectors, defaults to **range(len(sx))**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getNestSubVecs*, *VecNestSetSubVecs*

  *Source code at petsc4py/PETSc/Vec.pyx:3473*

- **setOption(option, flag)**

  Set option.

  Collective.

  **SEE ALSO:**

  *VecSetOption*

  *Source code at petsc4py/PETSc/Vec.pyx:1067*

  - **Parameters**

    - •

      **option** (*Option*)

    - •

      **flag** (*bool*)

  - **Return type**

    *None*

- **setOptionsPrefix(prefix)**

  Set the prefix used for searching for options in the database.

  Logically collective.

  **SEE ALSO:**

  *Working with PETSc options*, *getOptionsPrefix*, *VecSetOptionsPrefix*

  *Source code at petsc4py/PETSc/Vec.pyx:1000*

  - **Parameters**

    **prefix** (*str \| None*)

  - **Return type**

    *None*

- **setRandom(random=None)**

  Set all components of the vector to random numbers.

  Collective.

  - **Parameters**

    **random** (*Random \| None*) -- Random number generator. If *None* then one will be created internally.

  - **Return type**

    *None*

  **SEE ALSO:**

  *VecSetRandom*

  *Source code at petsc4py/PETSc/Vec.pyx:2317*

- **setSizes(size, bsize=None)**

  Set the local and global sizes of the vector.

  Collective.

  - **Parameters**

    - •

      **size** (*LayoutSizeSpec*) -- Vector size.

    - •

      **bsize** (*int \| None*) -- Vector block size. If *None*, **bsize = 1**.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getSizes*, *VecSetSizes*

  *Source code at petsc4py/PETSc/Vec.pyx:218*

- **setType(vec\_type)**

  Set the vector type.

  Collective.

  - **Parameters**

    **vec\_type** (*Type \| str*) -- The vector type.

  - **Return type**

    *None*

  **SEE ALSO:**

  *create*, *getType*, *VecSetType*

  *Source code at petsc4py/PETSc/Vec.pyx:199*

- **setUp()**

  Set up the internal data structures for using the vector.

  Collective.

  **SEE ALSO:**

  *create*, *destroy*, *VecSetUp*

  *Source code at petsc4py/PETSc/Vec.pyx:1054*

  - **Return type**

    *Self*

- **setValue(index, value, addv=None)**

  Insert or add a single value in the vector.

  Not collective.

  - **Parameters**

    - •

      **index** (*int*) -- Location to write to. Negative indices are ignored.

    - •

      **value** (*Scalar*) -- Value to insert at **index**.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  Notes

  The values may be cached so *assemblyBegin* and *assemblyEnd* must be called after all calls of this method are completed.

  Multiple calls to *setValue* cannot be made with different values for **addv** without intermediate calls to *assemblyBegin* and *assemblyEnd*.

  **SEE ALSO:**

  *setValues*, *VecSetValues*

  *Source code at petsc4py/PETSc/Vec.pyx:2771*

- **setValueLocal(index, value, addv=None)**

  Insert or add a single value in the vector using a local numbering.

  Not collective.

  - **Parameters**

    - •

      **index** (*int*) -- Location to write to.

    - •

      **value** (*Scalar*) -- Value to insert at **index**.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  Notes

  The values may be cached so *assemblyBegin* and *assemblyEnd* must be called after all calls of this method are completed.

  Multiple calls to *setValueLocal* cannot be made with different values for **addv** without intermediate calls to *assemblyBegin* and *assemblyEnd*.

  **SEE ALSO:**

  *setValuesLocal*, *VecSetValuesLocal*

  *Source code at petsc4py/PETSc/Vec.pyx:2914*

- **setValues(indices, values, addv=None)**

  Insert or add multiple values in the vector.

  Not collective.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Locations to write to. Negative indices are ignored.

    - •

      **values** (*Sequence\[Scalar\]*) -- Values to insert at **indices**.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  Notes

  The values may be cached so *assemblyBegin* and *assemblyEnd* must be called after all calls of this method are completed.

  Multiple calls to *setValues* cannot be made with different values for **addv** without intermediate calls to *assemblyBegin* and *assemblyEnd*.

  **SEE ALSO:**

  *setValue*, *VecSetValues*

  *Source code at petsc4py/PETSc/Vec.pyx:2808*

- **setValuesBlocked(indices, values, addv=None)**

  Insert or add blocks of values in the vector.

  Not collective.

  Equivalent to **x\[bs\*indices\[i\]+j\] = y\[bs\*i+j\]** for **0 \<= i \< len(indices)**, **0 \<= j \< bs** and **bs** *block\_size*.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Block indices to write to. Negative indices are ignored.

    - •

      **values** (*Sequence\[Scalar\]*) -- Values to insert at **indices**. Should have length **len(indices) \* vec.block\_size**.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  Notes

  The values may be cached so *assemblyBegin* and *assemblyEnd* must be called after all calls of this method are completed.

  Multiple calls to *setValuesBlocked* cannot be made with different values for **addv** without intermediate calls to *assemblyBegin* and *assemblyEnd*.

  **SEE ALSO:**

  *setValues*, *VecSetValuesBlocked*

  *Source code at petsc4py/PETSc/Vec.pyx:2842*

- **setValuesBlockedLocal(indices, values, addv=None)**

  Insert or add blocks of values in the vector with a local numbering.

  Not collective.

  Equivalent to **x\[bs\*indices\[i\]+j\] = y\[bs\*i+j\]** for **0 \<= i \< len(indices)**, **0 \<= j \< bs** and **bs** *block\_size*.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Local block indices to write to.

    - •

      **values** (*Sequence\[Scalar\]*) -- Values to insert at **indices**. Should have length **len(indices) \* vec.block\_size**.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  Notes

  The values may be cached so *assemblyBegin* and *assemblyEnd* must be called after all calls of this method are completed.

  Multiple calls to *setValuesBlockedLocal* cannot be made with different values for **addv** without intermediate calls to *assemblyBegin* and *assemblyEnd*.

  **SEE ALSO:**

  *setValuesBlocked*, *setValuesLocal*, *VecSetValuesBlockedLocal*

  *Source code at petsc4py/PETSc/Vec.pyx:2985*

- **setValuesLocal(indices, values, addv=None)**

  Insert or add multiple values in the vector with a local numbering.

  Not collective.

  - **Parameters**

    - •

      **indices** (*Sequence\[int\]*) -- Locations to write to.

    - •

      **values** (*Sequence\[Scalar\]*) -- Values to insert at **indices**.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  Notes

  The values may be cached so *assemblyBegin* and *assemblyEnd* must be called after all calls of this method are completed.

  Multiple calls to *setValuesLocal* cannot be made with different values for **addv** without intermediate calls to *assemblyBegin* and *assemblyEnd*.

  **SEE ALSO:**

  *setValues*, *VecSetValuesLocal*

  *Source code at petsc4py/PETSc/Vec.pyx:2951*

- **setValuesStagStencil(indices, values, addv=None)**

  Not implemented.

  *Source code at petsc4py/PETSc/Vec.pyx:2880*

  - **Return type**

    *None*

- **shift(alpha)**

  Shift all entries in the vector.

  Collective.

  This method sets each entry (xₙ) in the vector to xₙ + ɑ.

  - **Parameters**

    **alpha** (*Scalar*) -- The shift to apply to the vector values.

  - **Return type**

    *None*

  **SEE ALSO:**

  *scale*, *VecShift*

  *Source code at petsc4py/PETSc/Vec.pyx:2423*

- **sqrtabs()**

  Replace each entry (xₙ) in the vector by √\|xₙ\|.

  Logically collective.

  **SEE ALSO:**

  *VecSqrtAbs*

  *Source code at petsc4py/PETSc/Vec.pyx:2281*

  - **Return type**

    *None*

- **strideGather(field, vec, addv=None)**

  Insert component values into a single-component vector.

  Collective.

  The current vector is expected to be multi-component (*block\_size* greater than **1**) and the target vector is expected to be single-component.

  - **Parameters**

    - •

      **field** (*int*) -- Component index. Must be between **0** and **vec.block\_size**.

    - •

      **vec** (*Vec*) -- Single-component vector to be inserted into.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *strideScatter*, *VecStrideScatter*

  *Source code at petsc4py/PETSc/Vec.pyx:3231*

- **strideMax(field)**

  Return the maximum of entries in a subvector.

  Collective.

  Equivalent to **max(x\[field\], x\[field+bs\], x\[field+2\*bs\], ...)** where **bs** is *block\_size*.

  - **Parameters**

    **field** (*int*) -- Component index. Must be between **0** and **vec.block\_size**.

  - **Returns**

    - •

      *int* -- Location of maximum.

    - •

      *float* -- Maximum value.

  - **Return type**

    *tuple*\[*int*, *float*\]

  **SEE ALSO:**

  *strideScale*, *strideSum*, *strideMin*, *VecStrideMax*

  *Source code at petsc4py/PETSc/Vec.pyx:3137*

- **strideMin(field)**

  Return the minimum of entries in a subvector.

  Collective.

  Equivalent to **min(x\[field\], x\[field+bs\], x\[field+2\*bs\], ...)** where **bs** is *block\_size*.

  - **Parameters**

    **field** (*int*) -- Component index. Must be between **0** and **vec.block\_size**.

  - **Returns**

    - •

      *int* -- Location of minimum.

    - •

      *float* -- Minimum value.

  - **Return type**

    *tuple*\[*int*, *float*\]

  **SEE ALSO:**

  *strideScale*, *strideSum*, *strideMax*, *VecStrideMin*

  *Source code at petsc4py/PETSc/Vec.pyx:3106*

- **strideNorm(field, norm\_type=None)**

  Return the norm of entries in a subvector.

  Collective.

  Equivalent to **norm(x\[field\], x\[field+bs\], x\[field+2\*bs\], ...)** where **bs** is *block\_size*.

  - **Parameters**

    - •

      **field** (*int*) -- Component index. Must be between **0** and **vec.block\_size**.

    - •

      **norm\_type** (*NormTypeSpec*) -- The norm type.

  - **Return type**

    *float* \| *tuple*\[*float*, *float*\]

  **SEE ALSO:**

  *norm*, *strideScale*, *strideSum*, *VecStrideNorm*

  *Source code at petsc4py/PETSc/Vec.pyx:3168*

- **strideScale(field, alpha)**

  Scale a component of the vector.

  Logically collective.

  - **Parameters**

    - •

      **field** (*int*) -- Component index. Must be between **0** and **vec.block\_size**.

    - •

      **alpha** (*Scalar*) -- Factor to multiple the component entries by.

  - **Return type**

    *None*

  **SEE ALSO:**

  *strideSum*, *strideMin*, *strideMax*, *VecStrideScale*

  *Source code at petsc4py/PETSc/Vec.pyx:3062*

- **strideScatter(field, vec, addv=None)**

  Scatter entries into a component of another vector.

  Collective.

  The current vector is expected to be single-component (*block\_size* of **1**) and the target vector is expected to be multi-component.

  - **Parameters**

    - •

      **field** (*int*) -- Component index. Must be between **0** and **vec.block\_size**.

    - •

      **vec** (*Vec*) -- Multi-component vector to be scattered into.

    - •

      **addv** (*InsertModeSpec*) -- Insertion mode.

  - **Return type**

    *None*

  **SEE ALSO:**

  *strideGather*, *VecStrideScatter*

  *Source code at petsc4py/PETSc/Vec.pyx:3200*

- **strideSum(field)**

  Sum subvector entries.

  Collective.

  Equivalent to **sum(x\[field\], x\[field+bs\], x\[field+2\*bs\], ...)** where **bs** is *block\_size*.

  - **Parameters**

    **field** (*int*) -- Component index. Must be between **0** and **vec.block\_size**.

  - **Return type**

    *Scalar*

  **SEE ALSO:**

  *strideScale*, *strideMin*, *strideMax*, *VecStrideSum*

  *Source code at petsc4py/PETSc/Vec.pyx:3083*

- **sum()**

  Return the sum of all the entries of the vector.

  Collective.

  **SEE ALSO:**

  *VecSum*

  *Source code at petsc4py/PETSc/Vec.pyx:2166*

  - **Return type**

    *Scalar*

- **swap(vec)**

  Swap the content of two vectors.

  Logically collective.

  - **Parameters**

    **vec** (*Vec*) -- The vector to swap data with.

  - **Return type**

    *None*

  **SEE ALSO:**

  *VecSwap*

  *Source code at petsc4py/PETSc/Vec.pyx:2443*

- **tDot(vec)**

  Return the indefinite dot product with **vec**.

  Collective.

  This computes yᵀ·x with **self** as x, **vec** as y and where yᵀ denotes the transpose of y.

  - **Parameters**

    **vec** (*Vec*) -- Vector to compute the indefinite dot product with.

  - **Return type**

    *Scalar*

  **SEE ALSO:**

  *tDotBegin*, *tDotEnd*, *dot*, *VecTDot*

  *Source code at petsc4py/PETSc/Vec.pyx:1846*

- **tDotBegin(vec)**

  Begin computing the indefinite dot product.

  Collective.

  This should be paired with a call to *tDotEnd*.

  - **Parameters**

    **vec** (*Vec*) -- Vector to compute the indefinite dot product with.

  - **Return type**

    *None*

  **SEE ALSO:**

  *tDotEnd*, *tDot*, *VecTDotBegin*

  *Source code at petsc4py/PETSc/Vec.pyx:1868*

- **tDotEnd(vec)**

  Finish computing the indefinite dot product initiated with *tDotBegin*.

  Collective.

  **SEE ALSO:**

  *tDotBegin*, *tDot*, *VecTDotEnd*

  *Source code at petsc4py/PETSc/Vec.pyx:1888*

  - **Parameters**

    **vec** (*Vec*)

  - **Return type**

    *Scalar*

- **toDLPack(mode='rw')**

  Return a DLPack *PyCapsule* wrapping the vector data.

  Collective.

  - **Parameters**

    **mode** (*AccessModeSpec*) -- Access mode for the vector.

  - **Returns**

    Capsule of a DLPack tensor wrapping a *Vec*.

  - **Return type**

    *PyCapsule*

  Notes

  It is important that the access mode is respected by the consumer as this is not enforced internally.

  **SEE ALSO:**

  *createWithDLPack*

  *Source code at petsc4py/PETSc/Vec.pyx:726*

- **view(viewer=None)**

  Display the vector.

  Collective.

  - **Parameters**

    **viewer** (*Viewer \| None*) -- A *Viewer* instance or *None* for the default viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *load*, *VecView*

  *Source code at petsc4py/PETSc/Vec.pyx:144*

- **waxpy(alpha, x, y)**

  Compute and store w = ɑ·x + y.

  Logically collective.

  - **Parameters**

    - •

      **alpha** (*Scalar*) -- Scale factor.

    - •

      **x** (*Vec*) -- First input vector.

    - •

      **y** (*Vec*) -- Second input vector.

  - **Return type**

    *None*

  **SEE ALSO:**

  *axpy*, *aypx*, *axpby*, *maxpy*, *VecWAXPY*

  *Source code at petsc4py/PETSc/Vec.pyx:2547*

- **zeroEntries()**

  Set all entries in the vector to zero.

  Logically collective.

  **SEE ALSO:**

  *set*, *VecZeroEntries*

  *Source code at petsc4py/PETSc/Vec.pyx:2358*

  - **Return type**

    *None*

Attributes Documentation

- **array**

  Alias for *array\_w*.

  *Source code at petsc4py/PETSc/Vec.pyx:3642*

- **array\_r**

  Read-only *ndarray* containing the local portion of the vector.

  *Source code at petsc4py/PETSc/Vec.pyx:3632*

- **array\_w**

  Writeable *ndarray* containing the local portion of the vector.

  *Source code at petsc4py/PETSc/Vec.pyx:3623*

- **block\_size**

  The block size.

  *Source code at petsc4py/PETSc/Vec.pyx:3598*

- **buffer**

  Alias for *buffer\_w*.

  *Source code at petsc4py/PETSc/Vec.pyx:3637*

- **buffer\_r**

  Read-only buffered view of the local portion of the vector.

  *Source code at petsc4py/PETSc/Vec.pyx:3618*

- **buffer\_w**

  Writeable buffered view of the local portion of the vector.

  *Source code at petsc4py/PETSc/Vec.pyx:3613*

- **local\_size**

  The local vector size.

  *Source code at petsc4py/PETSc/Vec.pyx:3593*

- **owner\_range**

  The locally owned range of indices in the form **\[low, high)**.

  *Source code at petsc4py/PETSc/Vec.pyx:3603*

- **owner\_ranges**

  The range of indices owned by each process.

  *Source code at petsc4py/PETSc/Vec.pyx:3608*

- **size**

  The global vector size.

  *Source code at petsc4py/PETSc/Vec.pyx:3588*

- **sizes**

  The local and global vector sizes.

  *Source code at petsc4py/PETSc/Vec.pyx:3580*

### petsc4py.PETSc.Viewer

- **class petsc4py.PETSc.Viewer**

  Bases: *Object*

  Viewer object.

  Viewer is described in the *PETSc manual*.

  Viewers can be called as functions where the argument specified is the PETSc object to be viewed. See the example below.

  Examples

  ```
  >>> from petsc4py import PETSc
  >>> u = PETSc.Vec().createWithArray([1,2])
  >>> v = PETSc.Viewer()
  >>> v(u)
  Vec Object: 1 MPI process
    type: seq
  1.
  2.
  ```

  **SEE ALSO:**

  *PetscViewer*

  Enumerations

  | | |
  | --- | --- |
  | *DrawSize* | Window size. |
  | *FileMode* | Viewer file mode. |
  | *Format* | Viewer format. |
  | *Type* | Viewer type. |

### petsc4py.PETSc.Viewer.DrawSize

- **class petsc4py.PETSc.Viewer.DrawSize**

  Bases: *object*

  Window size.

  Attributes Summary

  | | |
  | --- | --- |
  | *FULL* | Constant **FULL** of type *int* |
  | *FULL\_SIZE* | Constant **FULL\_SIZE** of type *int* |
  | *HALF* | Constant **HALF** of type *int* |
  | *HALF\_SIZE* | Constant **HALF\_SIZE** of type *int* |
  | *QUARTER* | Constant **QUARTER** of type *int* |
  | *QUARTER\_SIZE* | Constant **QUARTER\_SIZE** of type *int* |
  | *THIRD* | Constant **THIRD** of type *int* |
  | *THIRD\_SIZE* | Constant **THIRD\_SIZE** of type *int* |

  Attributes Documentation

  - **FULL: *int* = FULL**

    Constant **FULL** of type *int*

  - **FULL\_SIZE: *int* = FULL\_SIZE**

    Constant **FULL\_SIZE** of type *int*

  - **HALF: *int* = HALF**

    Constant **HALF** of type *int*

  - **HALF\_SIZE: *int* = HALF\_SIZE**

    Constant **HALF\_SIZE** of type *int*

  - **QUARTER: *int* = QUARTER**

    Constant **QUARTER** of type *int*

  - **QUARTER\_SIZE: *int* = QUARTER\_SIZE**

    Constant **QUARTER\_SIZE** of type *int*

  - **THIRD: *int* = THIRD**

    Constant **THIRD** of type *int*

  - **THIRD\_SIZE: *int* = THIRD\_SIZE**

    Constant **THIRD\_SIZE** of type *int*

### petsc4py.PETSc.Viewer.FileMode

- **class petsc4py.PETSc.Viewer.FileMode**

  Bases: *object*

  Viewer file mode.

  Attributes Summary

  | | |
  | --- | --- |
  | *A* | Constant **A** of type *int* |
  | *APPEND* | Constant **APPEND** of type *int* |
  | *APPEND\_UPDATE* | Constant **APPEND\_UPDATE** of type *int* |
  | *AU* | Constant **AU** of type *int* |
  | *R* | Constant **R** of type *int* |
  | *READ* | Constant **READ** of type *int* |
  | *U* | Constant **U** of type *int* |
  | *UA* | Constant **UA** of type *int* |
  | *UPDATE* | Constant **UPDATE** of type *int* |
  | *W* | Constant **W** of type *int* |
  | *WRITE* | Constant **WRITE** of type *int* |

  Attributes Documentation

  - **A: *int* = A**

    Constant **A** of type *int*

  - **APPEND: *int* = APPEND**

    Constant **APPEND** of type *int*

  - **APPEND\_UPDATE: *int* = APPEND\_UPDATE**

    Constant **APPEND\_UPDATE** of type *int*

  - **AU: *int* = AU**

    Constant **AU** of type *int*

  - **R: *int* = R**

    Constant **R** of type *int*

  - **READ: *int* = READ**

    Constant **READ** of type *int*

  - **U: *int* = U**

    Constant **U** of type *int*

  - **UA: *int* = UA**

    Constant **UA** of type *int*

  - **UPDATE: *int* = UPDATE**

    Constant **UPDATE** of type *int*

  - **W: *int* = W**

    Constant **W** of type *int*

  - **WRITE: *int* = WRITE**

    Constant **WRITE** of type *int*

### petsc4py.PETSc.Viewer.Format

- **class petsc4py.PETSc.Viewer.Format**

  Bases: *object*

  Viewer format.

  Attributes Summary

  | | |
  | --- | --- |
  | *ASCII\_COMMON* | Constant **ASCII\_COMMON** of type *int* |
  | *ASCII\_CSV* | Constant **ASCII\_CSV** of type *int* |
  | *ASCII\_DENSE* | Constant **ASCII\_DENSE** of type *int* |
  | *ASCII\_FACTOR\_INFO* | Constant **ASCII\_FACTOR\_INFO** of type *int* |
  | *ASCII\_GLVIS* | Constant **ASCII\_GLVIS** of type *int* |
  | *ASCII\_IMPL* | Constant **ASCII\_IMPL** of type *int* |
  | *ASCII\_INDEX* | Constant **ASCII\_INDEX** of type *int* |
  | *ASCII\_INFO* | Constant **ASCII\_INFO** of type *int* |
  | *ASCII\_INFO\_DETAIL* | Constant **ASCII\_INFO\_DETAIL** of type *int* |
  | *ASCII\_LATEX* | Constant **ASCII\_LATEX** of type *int* |
  | *ASCII\_MATHEMATICA* | Constant **ASCII\_MATHEMATICA** of type *int* |
  | *ASCII\_MATLAB* | Constant **ASCII\_MATLAB** of type *int* |
  | *ASCII\_MATRIXMARKET* | Constant **ASCII\_MATRIXMARKET** of type *int* |
  | *ASCII\_PCICE* | Constant **ASCII\_PCICE** of type *int* |
  | *ASCII\_PYTHON* | Constant **ASCII\_PYTHON** of type *int* |
  | *ASCII\_SYMMODU* | Constant **ASCII\_SYMMODU** of type *int* |
  | *ASCII\_VTK* | Constant **ASCII\_VTK** of type *int* |
  | *ASCII\_VTK\_CELL* | Constant **ASCII\_VTK\_CELL** of type *int* |
  | *ASCII\_VTK\_COORDS* | Constant **ASCII\_VTK\_COORDS** of type *int* |
  | *ASCII\_XML* | Constant **ASCII\_XML** of type *int* |
  | *BINARY\_MATLAB* | Constant **BINARY\_MATLAB** of type *int* |
  | *DEFAULT* | Constant **DEFAULT** of type *int* |
  | *DRAW\_BASIC* | Constant **DRAW\_BASIC** of type *int* |
  | *DRAW\_CONTOUR* | Constant **DRAW\_CONTOUR** of type *int* |
  | *DRAW\_LG* | Constant **DRAW\_LG** of type *int* |
  | *DRAW\_LG\_XRANGE* | Constant **DRAW\_LG\_XRANGE** of type *int* |
  | *DRAW\_PORTS* | Constant **DRAW\_PORTS** of type *int* |
  | *FAILED* | Constant **FAILED** of type *int* |
  | *HDF5\_MAT* | Constant **HDF5\_MAT** of type *int* |
  | *HDF5\_PETSC* | Constant **HDF5\_PETSC** of type *int* |
  | *HDF5\_VIZ* | Constant **HDF5\_VIZ** of type *int* |
  | *HDF5\_XDMF* | Constant **HDF5\_XDMF** of type *int* |
  | *LOAD\_BALANCE* | Constant **LOAD\_BALANCE** of type *int* |
  | *NATIVE* | Constant **NATIVE** of type *int* |
  | *NOFORMAT* | Constant **NOFORMAT** of type *int* |
  | *VTK\_VTR* | Constant **VTK\_VTR** of type *int* |
  | *VTK\_VTS* | Constant **VTK\_VTS** of type *int* |
  | *VTK\_VTU* | Constant **VTK\_VTU** of type *int* |

  Attributes Documentation

  - **ASCII\_COMMON: *int* = ASCII\_COMMON**

    Constant **ASCII\_COMMON** of type *int*

  - **ASCII\_CSV: *int* = ASCII\_CSV**

    Constant **ASCII\_CSV** of type *int*

  - **ASCII\_DENSE: *int* = ASCII\_DENSE**

    Constant **ASCII\_DENSE** of type *int*

  - **ASCII\_FACTOR\_INFO: *int* = ASCII\_FACTOR\_INFO**

    Constant **ASCII\_FACTOR\_INFO** of type *int*

  - **ASCII\_GLVIS: *int* = ASCII\_GLVIS**

    Constant **ASCII\_GLVIS** of type *int*

  - **ASCII\_IMPL: *int* = ASCII\_IMPL**

    Constant **ASCII\_IMPL** of type *int*

  - **ASCII\_INDEX: *int* = ASCII\_INDEX**

    Constant **ASCII\_INDEX** of type *int*

  - **ASCII\_INFO: *int* = ASCII\_INFO**

    Constant **ASCII\_INFO** of type *int*

  - **ASCII\_INFO\_DETAIL: *int* = ASCII\_INFO\_DETAIL**

    Constant **ASCII\_INFO\_DETAIL** of type *int*

  - **ASCII\_LATEX: *int* = ASCII\_LATEX**

    Constant **ASCII\_LATEX** of type *int*

  - **ASCII\_MATHEMATICA: *int* = ASCII\_MATHEMATICA**

    Constant **ASCII\_MATHEMATICA** of type *int*

  - **ASCII\_MATLAB: *int* = ASCII\_MATLAB**

    Constant **ASCII\_MATLAB** of type *int*

  - **ASCII\_MATRIXMARKET: *int* = ASCII\_MATRIXMARKET**

    Constant **ASCII\_MATRIXMARKET** of type *int*

  - **ASCII\_PCICE: *int* = ASCII\_PCICE**

    Constant **ASCII\_PCICE** of type *int*

  - **ASCII\_PYTHON: *int* = ASCII\_PYTHON**

    Constant **ASCII\_PYTHON** of type *int*

  - **ASCII\_SYMMODU: *int* = ASCII\_SYMMODU**

    Constant **ASCII\_SYMMODU** of type *int*

  - **ASCII\_VTK: *int* = ASCII\_VTK**

    Constant **ASCII\_VTK** of type *int*

  - **ASCII\_VTK\_CELL: *int* = ASCII\_VTK\_CELL**

    Constant **ASCII\_VTK\_CELL** of type *int*

  - **ASCII\_VTK\_COORDS: *int* = ASCII\_VTK\_COORDS**

    Constant **ASCII\_VTK\_COORDS** of type *int*

  - **ASCII\_XML: *int* = ASCII\_XML**

    Constant **ASCII\_XML** of type *int*

  - **BINARY\_MATLAB: *int* = BINARY\_MATLAB**

    Constant **BINARY\_MATLAB** of type *int*

  - **DEFAULT: *int* = DEFAULT**

    Constant **DEFAULT** of type *int*

  - **DRAW\_BASIC: *int* = DRAW\_BASIC**

    Constant **DRAW\_BASIC** of type *int*

  - **DRAW\_CONTOUR: *int* = DRAW\_CONTOUR**

    Constant **DRAW\_CONTOUR** of type *int*

  - **DRAW\_LG: *int* = DRAW\_LG**

    Constant **DRAW\_LG** of type *int*

  - **DRAW\_LG\_XRANGE: *int* = DRAW\_LG\_XRANGE**

    Constant **DRAW\_LG\_XRANGE** of type *int*

  - **DRAW\_PORTS: *int* = DRAW\_PORTS**

    Constant **DRAW\_PORTS** of type *int*

  - **FAILED: *int* = FAILED**

    Constant **FAILED** of type *int*

  - **HDF5\_MAT: *int* = HDF5\_MAT**

    Constant **HDF5\_MAT** of type *int*

  - **HDF5\_PETSC: *int* = HDF5\_PETSC**

    Constant **HDF5\_PETSC** of type *int*

  - **HDF5\_VIZ: *int* = HDF5\_VIZ**

    Constant **HDF5\_VIZ** of type *int*

  - **HDF5\_XDMF: *int* = HDF5\_XDMF**

    Constant **HDF5\_XDMF** of type *int*

  - **LOAD\_BALANCE: *int* = LOAD\_BALANCE**

    Constant **LOAD\_BALANCE** of type *int*

  - **NATIVE: *int* = NATIVE**

    Constant **NATIVE** of type *int*

  - **NOFORMAT: *int* = NOFORMAT**

    Constant **NOFORMAT** of type *int*

  - **VTK\_VTR: *int* = VTK\_VTR**

    Constant **VTK\_VTR** of type *int*

  - **VTK\_VTS: *int* = VTK\_VTS**

    Constant **VTK\_VTS** of type *int*

  - **VTK\_VTU: *int* = VTK\_VTU**

    Constant **VTK\_VTU** of type *int*

### petsc4py.PETSc.Viewer.Type

- **class petsc4py.PETSc.Viewer.Type**

  Bases: *object*

  Viewer type.

  Attributes Summary

  | | |
  | --- | --- |
  | *ADIOS* | Object **ADIOS** of type *str* |
  | *ASCII* | Object **ASCII** of type *str* |
  | *BINARY* | Object **BINARY** of type *str* |
  | *DRAW* | Object **DRAW** of type *str* |
  | *EXODUSII* | Object **EXODUSII** of type *str* |
  | *GLVIS* | Object **GLVIS** of type *str* |
  | *HDF5* | Object **HDF5** of type *str* |
  | *MATHEMATICA* | Object **MATHEMATICA** of type *str* |
  | *MATLAB* | Object **MATLAB** of type *str* |
  | *SAWS* | Object **SAWS** of type *str* |
  | *SOCKET* | Object **SOCKET** of type *str* |
  | *STRING* | Object **STRING** of type *str* |
  | *VTK* | Object **VTK** of type *str* |
  | *VU* | Object **VU** of type *str* |

  Attributes Documentation

  - **ADIOS: *str* = ADIOS**

    Object **ADIOS** of type *str*

  - **ASCII: *str* = ASCII**

    Object **ASCII** of type *str*

  - **BINARY: *str* = BINARY**

    Object **BINARY** of type *str*

  - **DRAW: *str* = DRAW**

    Object **DRAW** of type *str*

  - **EXODUSII: *str* = EXODUSII**

    Object **EXODUSII** of type *str*

  - **GLVIS: *str* = GLVIS**

    Object **GLVIS** of type *str*

  - **HDF5: *str* = HDF5**

    Object **HDF5** of type *str*

  - **MATHEMATICA: *str* = MATHEMATICA**

    Object **MATHEMATICA** of type *str*

  - **MATLAB: *str* = MATLAB**

    Object **MATLAB** of type *str*

  - **SAWS: *str* = SAWS**

    Object **SAWS** of type *str*

  - **SOCKET: *str* = SOCKET**

    Object **SOCKET** of type *str*

  - **STRING: *str* = STRING**

    Object **STRING** of type *str*

  - **VTK: *str* = VTK**

    Object **VTK** of type *str*

  - **VU: *str* = VU**

    Object **VU** of type *str*

Methods Summary

| | |
| --- | --- |
| *ASCII*(name\[, comm\]) | Return an ASCII viewer associated with the communicator. |
| *BINARY*(\[comm\]) | Return the default *Type.BINARY* viewer associated with the communicator. |
| *DRAW*(\[comm\]) | Return the default *Type.DRAW* viewer associated with the communicator. |
| *STDERR*(\[comm\]) | Return the standard error viewer associated with the communicator. |
| *STDOUT*(\[comm\]) | Return the standard output viewer associated with the communicator. |
| *addASCIITab*(tabs) | Increment the ASCII tab level. |
| *clearDraw*() | Reset graphics. |
| *create*(\[comm\]) | Create a viewer. |
| *createASCII*(name\[, mode, comm\]) | Create a viewer of type *Type.ASCII*. |
| *createBinary*(name\[, mode, comm\]) | Create a viewer of type *Type.BINARY*. |
| *createDraw*(\[display, title, position, size, ...\]) | Create a *Type.DRAW* viewer. |
| *createHDF5*(name\[, mode, comm\]) | Create a viewer of type *Type.HDF5*. |
| *createMPIIO*(name\[, mode, comm\]) | Create a viewer of type *Type.BINARY* supporting MPI-IO. |
| *createVTK*(name\[, mode, comm\]) | Create a viewer of type *Type.VTK*. |
| *destroy*() | Destroy the viewer. |
| *flush*() | Flush the viewer. |
| *getASCIITab*() | Return the ASCII tab level. |
| *getFileMode*() | Return the file mode. |
| *getFileName*() | Return file name. |
| *getFormat*() | Return the format of the viewer. |
| *getSubViewer*(\[comm\]) | Return a viewer defined on a subcommunicator. |
| *getType*() | Return the type of the viewer. |
| *popASCIISynchronized*() | Disallow ASCII synchronized calls. |
| *popASCIITab*() | Pop an additional tab level pushed via *pushASCIITab*. |
| *popFormat*() | Pop format from the viewer. |
| *printfASCII*(msg) | Print a message. |
| *printfASCIISynchronized*(msg) | Print a synchronized message. |
| *pushASCIISynchronized*() | Allow ASCII synchronized calls. |
| *pushASCIITab*() | Push an additional tab level. |
| *pushFormat*(format) | Push format to the viewer. |
| *restoreSubViewer*(sub) | Restore a viewer defined on a subcommunicator. |
| *setASCIITab*(tabs) | Set ASCII tab level. |
| *setDrawInfo*(\[display, title, position, size\]) | Set window information for a *Type.DRAW* viewer. |
| *setFileMode*(mode) | Set file mode. |
| *setFileName*(name) | Set file name. |
| *setType*(vwr\_type) | Set the type of the viewer. |
| *subtractASCIITab*(tabs) | Decrement the ASCII tab level. |
| *useASCIITabs*(flag) | Enable/disable the use of ASCII tabs. |
| *view*(\[obj\]) | View the viewer. |

Methods Documentation

- **classmethod ASCII(name, comm=None)**

  Return an ASCII viewer associated with the communicator.

  Collective.

  - **Parameters**

    - •

      **name** (*str*) -- The filename.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Viewer*

  *Source code at petsc4py/PETSc/Viewer.pyx:580*

- **classmethod BINARY(comm=None)**

  Return the default *Type.BINARY* viewer associated with the communicator.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Viewer*

  *Source code at petsc4py/PETSc/Viewer.pyx:601*

- **classmethod DRAW(comm=None)**

  Return the default *Type.DRAW* viewer associated with the communicator.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Viewer*

  *Source code at petsc4py/PETSc/Viewer.pyx:619*

- **classmethod STDERR(comm=None)**

  Return the standard error viewer associated with the communicator.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Viewer*

  *Source code at petsc4py/PETSc/Viewer.pyx:562*

- **classmethod STDOUT(comm=None)**

  Return the standard output viewer associated with the communicator.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Viewer*

  *Source code at petsc4py/PETSc/Viewer.pyx:544*

- **addASCIITab(tabs)**

  Increment the ASCII tab level.

  Collective.

  **SEE ALSO:**

  *PetscViewerASCIIAddTab*

  *Source code at petsc4py/PETSc/Viewer.pyx:666*

  - **Parameters**

    **tabs** (*int*)

  - **Return type**

    *None*

- **clearDraw()**

  Reset graphics.

  Not collective.

  **SEE ALSO:**

  *PetscViewerDrawClear*

  *Source code at petsc4py/PETSc/Viewer.pyx:897*

  - **Return type**

    *None*

- **create(comm=None)**

  Create a viewer.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *Sys.getDefaultComm*, *PetscViewerCreate*

  *Source code at petsc4py/PETSc/Viewer.pyx:180*

- **createASCII(name, mode=None, comm=None)**

  Create a viewer of type *Type.ASCII*.

  Collective.

  - **Parameters**

    - •

      **name** (*str*) -- The filename associated with the viewer.

    - •

      **mode** (*FileMode \| str \| None*) -- The mode type.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *create*, *setType*, *setFileMode*, *setFileName*, *Sys.getDefaultComm*, *setASCIITab*, *addASCIITab*, *subtractASCIITab*, *getASCIITab*

  *Source code at petsc4py/PETSc/Viewer.pyx:201*

- **createBinary(name, mode=None, comm=None)**

  Create a viewer of type *Type.BINARY*.

  Collective.

  - **Parameters**

    - •

      **name** (*str*) -- The filename associated with the viewer.

    - •

      **mode** (*FileMode \| str \| None*) -- The mode type.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *create*, *setType*, *setFileMode*, *setFileName*, *Sys.getDefaultComm*

  *Source code at petsc4py/PETSc/Viewer.pyx:239*

- **createDraw(display=None, title=None, position=None, size=None, comm=None)**

  Create a *Type.DRAW* viewer.

  Collective.

  - **Parameters**

    - •

      **display** (*str \| None*) -- The X display to use or *None* for the local machine.

    - •

      **title** (*str \| None*) -- The window title or *None* for no title.

    - •

      **position** (*tuple\[int, int\] \| None*) -- Screen coordinates of the upper left corner, or *None* for default.

    - •

      **size** (*tuple\[int, int\] \| int \| None*) -- Window size or *None* for default.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    *Self*

  **SEE ALSO:**

  *Sys.getDefaultComm*, *PetscViewerDrawOpen*

  *Source code at petsc4py/PETSc/Viewer.pyx:381*

- **createHDF5(name, mode=None, comm=None)**

  Create a viewer of type *Type.HDF5*.

  Collective.

  - **Parameters**

    - •

      **name** (*str*) -- The filename associated with the viewer.

    - •

      **mode** (*FileMode \| str \| None*) -- The mode type.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *create*, *setType*, *setFileMode*, *setFileName*, *Sys.getDefaultComm*

  *Source code at petsc4py/PETSc/Viewer.pyx:345*

- **createMPIIO(name, mode=None, comm=None)**

  Create a viewer of type *Type.BINARY* supporting MPI-IO.

  Collective.

  - **Parameters**

    - •

      **name** (*str*) -- The filename associated with the viewer.

    - •

      **mode** (*FileMode \| str \| None*) -- The mode type.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *create*, *setType*, *setFileMode*, *setFileName*, *Sys.getDefaultComm*

  *Source code at petsc4py/PETSc/Viewer.pyx:272*

- **createVTK(name, mode=None, comm=None)**

  Create a viewer of type *Type.VTK*.

  Collective.

  - **Parameters**

    - •

      **name** (*str*) -- The filename associated with the viewer.

    - •

      **mode** (*FileMode \| str \| None*) -- The mode type.

    - •

      **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

  - **Return type**

    Self

  **SEE ALSO:**

  *create*, *setType*, *setFileMode*, *setFileName*, *Sys.getDefaultComm*

  *Source code at petsc4py/PETSc/Viewer.pyx:309*

- **destroy()**

  Destroy the viewer.

  Collective.

  **SEE ALSO:**

  *PetscViewerDestroy*

  *Source code at petsc4py/PETSc/Viewer.pyx:167*

  - **Return type**

    *Self*

- **flush()**

  Flush the viewer.

  Collective.

  **SEE ALSO:**

  *PetscViewerFlush*

  *Source code at petsc4py/PETSc/Viewer.pyx:785*

  - **Return type**

    *None*

- **getASCIITab()**

  Return the ASCII tab level.

  Not collective.

  **SEE ALSO:**

  *setASCIITab*, *PetscViewerASCIIGetTab*

  *Source code at petsc4py/PETSc/Viewer.pyx:652*

  - **Return type**

    *int*

- **getFileMode()**

  Return the file mode.

  Not collective.

  **SEE ALSO:**

  *setFileMode*, *PetscViewerFileGetMode*

  *Source code at petsc4py/PETSc/Viewer.pyx:809*

  - **Return type**

    *FileMode*

- **getFileName()**

  Return file name.

  Not collective.

  **SEE ALSO:**

  *setFileName*, *PetscViewerFileGetName*

  *Source code at petsc4py/PETSc/Viewer.pyx:837*

  - **Return type**

    *str*

- **getFormat()**

  Return the format of the viewer.

  Not collective.

  **SEE ALSO:**

  *pushFormat*, *popFormat*, *PetscViewerGetFormat*

  *Source code at petsc4py/PETSc/Viewer.pyx:464*

  - **Return type**

    *Format*

- **getSubViewer(comm=None)**

  Return a viewer defined on a subcommunicator.

  Collective.

  - **Parameters**

    **comm** (*Comm \| None*) -- The subcommunicator. If *None*, uses *COMM\_SELF*.

  - **Return type**

    *Viewer*

  Notes

  Users must call *restoreSubViewer* when done.

  **SEE ALSO:**

  *restoreSubViewer*, *PetscViewerGetSubViewer*

  *Source code at petsc4py/PETSc/Viewer.pyx:502*

- **getType()**

  Return the type of the viewer.

  Not collective.

  **SEE ALSO:**

  *setType*, *PetscViewerGetType*

  *Source code at petsc4py/PETSc/Viewer.pyx:450*

  - **Return type**

    *str*

- **popASCIISynchronized()**

  Disallow ASCII synchronized calls.

  Collective.

  **SEE ALSO:**

  *printfASCIISynchronized*, *pushASCIISynchronized*, *PetscViewerASCIIPopSynchronized*

  *Source code at petsc4py/PETSc/Viewer.pyx:705*

  - **Return type**

    *None*

- **popASCIITab()**

  Pop an additional tab level pushed via *pushASCIITab*.

  Collective.

  **SEE ALSO:**

  *pushASCIITab*, *PetscViewerASCIIPopTab*

  *Source code at petsc4py/PETSc/Viewer.pyx:730*

  - **Return type**

    *None*

- **popFormat()**

  Pop format from the viewer.

  Collective.

  **SEE ALSO:**

  *pushFormat*, *PetscViewerPopFormat*

  *Source code at petsc4py/PETSc/Viewer.pyx:490*

  - **Return type**

    *None*

- **printfASCII(msg)**

  Print a message.

  Collective.

  **SEE ALSO:**

  *PetscViewerASCIIPrintf*

  *Source code at petsc4py/PETSc/Viewer.pyx:755*

  - **Parameters**

    **msg** (*str*)

  - **Return type**

    *None*

- **printfASCIISynchronized(msg)**

  Print a synchronized message.

  Collective.

  **SEE ALSO:**

  *pushASCIISynchronized*, *PetscViewerASCIISynchronizedPrintf*

  *Source code at petsc4py/PETSc/Viewer.pyx:769*

  - **Parameters**

    **msg** (*str*)

  - **Return type**

    *None*

- **pushASCIISynchronized()**

  Allow ASCII synchronized calls.

  Collective.

  **SEE ALSO:**

  *printfASCIISynchronized*, *popASCIISynchronized*, *PetscViewerASCIIPushSynchronized*

  *Source code at petsc4py/PETSc/Viewer.pyx:692*

  - **Return type**

    *None*

- **pushASCIITab()**

  Push an additional tab level.

  Collective.

  **SEE ALSO:**

  *popASCIITab*, *PetscViewerASCIIPushTab*

  *Source code at petsc4py/PETSc/Viewer.pyx:718*

  - **Return type**

    *None*

- **pushFormat(format)**

  Push format to the viewer.

  Collective.

  **SEE ALSO:**

  *popFormat*, *PetscViewerPushFormat*

  *Source code at petsc4py/PETSc/Viewer.pyx:478*

  - **Parameters**

    **format** (*Format*)

  - **Return type**

    *None*

- **restoreSubViewer(sub)**

  Restore a viewer defined on a subcommunicator.

  Collective.

  - **Parameters**

    **sub** (*Viewer*) -- The subviewer obtained from *getSubViewer*.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getSubViewer*, *PetscViewerRestoreSubViewer*

  *Source code at petsc4py/PETSc/Viewer.pyx:526*

- **setASCIITab(tabs)**

  Set ASCII tab level.

  Collective.

  **SEE ALSO:**

  *getASCIITab*, *PetscViewerASCIISetTab*

  *Source code at petsc4py/PETSc/Viewer.pyx:639*

  - **Parameters**

    **tabs** (*int*)

  - **Return type**

    *None*

- **setDrawInfo(display=None, title=None, position=None, size=None)**

  Set window information for a *Type.DRAW* viewer.

  Collective.

  - **Parameters**

    - •

      **display** (*str \| None*) -- The X display to use or *None* for the local machine.

    - •

      **title** (*str \| None*) -- The window title or *None* for no title.

    - •

      **position** (*tuple\[int, int\] \| None*) -- Screen coordinates of the upper left corner, or *None* for default.

    - •

      **size** (*tuple\[int, int\] \| int \| None*) -- Window size or *None* for default.

  - **Return type**

    *None*

  *Source code at petsc4py/PETSc/Viewer.pyx:853*

- **setFileMode(mode)**

  Set file mode.

  Collective.

  **SEE ALSO:**

  *getFileMode*, *PetscViewerFileSetMode*

  *Source code at petsc4py/PETSc/Viewer.pyx:797*

  - **Parameters**

    **mode** (*FileMode \| str*)

  - **Return type**

    *None*

- **setFileName(name)**

  Set file name.

  Collective.

  **SEE ALSO:**

  *getFileName*, *PetscViewerFileSetName*

  *Source code at petsc4py/PETSc/Viewer.pyx:823*

  - **Parameters**

    **name** (*str*)

  - **Return type**

    *None*

- **setType(vwr\_type)**

  Set the type of the viewer.

  Logically collective.

  - **Parameters**

    **vwr\_type** (*Type \| str*) -- The type of the viewer.

  - **Return type**

    *None*

  **SEE ALSO:**

  *getType*, *PetscViewerSetType*

  *Source code at petsc4py/PETSc/Viewer.pyx:431*

- **subtractASCIITab(tabs)**

  Decrement the ASCII tab level.

  Collective.

  **SEE ALSO:**

  *PetscViewerASCIISubtractTab*

  *Source code at petsc4py/PETSc/Viewer.pyx:679*

  - **Parameters**

    **tabs** (*int*)

  - **Return type**

    *None*

- **useASCIITabs(flag)**

  Enable/disable the use of ASCII tabs.

  Collective.

  **SEE ALSO:**

  *PetscViewerASCIIUseTabs*

  *Source code at petsc4py/PETSc/Viewer.pyx:742*

  - **Parameters**

    **flag** (*bool*)

  - **Return type**

    *None*

- **view(obj=None)**

  View the viewer.

  Collective.

  - **Parameters**

    **obj** (*Viewer \| Object \| None*) -- A *Viewer* instance or *None* for the default viewer. If none of the above applies, it assumes **obj** is an instance of *Object* and it calls the generic view for **obj**.

  - **Return type**

    *None*

  Notes

  **SEE ALSO:**

  *PetscViewerView*

  *Source code at petsc4py/PETSc/Viewer.pyx:139*

### petsc4py.PETSc.ViewerHDF5

- **class petsc4py.PETSc.ViewerHDF5**

  Bases: *Viewer*

  Viewer object for HDF5 file formats.

  Viewer is described in the *PETSc manual*.

  **SEE ALSO:**

  *Viewer*

  Methods Summary

  | | |
  | --- | --- |
  | *create*(name\[, mode, comm\]) | Create a viewer of type *Type.HDF5*. |
  | *getGroup*() | Return the current group. |
  | *getTimestep*() | Return the current time step. |
  | *incrementTimestep*() | Increment the time step. |
  | *popGroup*() | Pop the current group from the stack. |
  | *popTimestepping*() | Deactivate the timestepping mode. |
  | *pushGroup*(group) | Set the current group. |
  | *pushTimestepping*() | Activate the timestepping mode. |
  | *setTimestep*(timestep) | Set the current time step. |

  Methods Documentation

  - **create(name, mode=None, comm=None)**

    Create a viewer of type *Type.HDF5*.

    Collective.

    - **Parameters**

      - •

        **name** (*str*) -- The filename associated with the viewer.

      - •

        **mode** (*FileMode \| str \| None*) -- The mode type.

      - •

        **comm** (*Comm \| None*) -- MPI communicator, defaults to *Sys.getDefaultComm*.

    - **Return type**

      *Self*

    **SEE ALSO:**

    *Viewer.createHDF5*

    *Source code at petsc4py/PETSc/Viewer.pyx:922*

  - **getGroup()**

    Return the current group.

    Not collective.

    **SEE ALSO:**

    *pushGroup*, *popGroup*, *PetscViewerHDF5GetGroup*

    *Source code at petsc4py/PETSc/Viewer.pyx:1049*

    - **Return type**

      *str*

  - **getTimestep()**

    Return the current time step.

    Not collective.

    **SEE ALSO:**

    *pushTimestepping*, *setTimestep*, *incrementTimestep*, *PetscViewerHDF5GetTimestep*

    *Source code at petsc4py/PETSc/Viewer.pyx:982*

    - **Return type**

      *int*

  - **incrementTimestep()**

    Increment the time step.

    Logically collective.

    **SEE ALSO:**

    *pushTimestepping*, *setTimestep*, *getTimestep*, *PetscViewerHDF5IncrementTimestep*

    *Source code at petsc4py/PETSc/Viewer.pyx:1010*

    - **Return type**

      *None*

  - **popGroup()**

    Pop the current group from the stack.

    Logically collective.

    **SEE ALSO:**

    *pushGroup*, *getGroup*, *PetscViewerHDF5PopGroup*

    *Source code at petsc4py/PETSc/Viewer.pyx:1037*

    - **Return type**

      *None*

  - **popTimestepping()**

    Deactivate the timestepping mode.

    Logically collective.

    **SEE ALSO:**

    *pushTimestepping*, *PetscViewerHDF5PopTimestepping*

    *Source code at petsc4py/PETSc/Viewer.pyx:970*

    - **Return type**

      *None*

  - **pushGroup(group)**

    Set the current group.

    Logically collective.

    **SEE ALSO:**

    *popGroup*, *getGroup*, *PetscViewerHDF5PushGroup*

    *Source code at petsc4py/PETSc/Viewer.pyx:1023*

    - **Parameters**

      **group** (*str*)

    - **Return type**

      *None*

  - **pushTimestepping()**

    Activate the timestepping mode.

    Logically collective.

    **SEE ALSO:**

    *popTimestepping*, *PetscViewerHDF5PushTimestepping*

    *Source code at petsc4py/PETSc/Viewer.pyx:958*

    - **Return type**

      *None*

  - **setTimestep(timestep)**

    Set the current time step.

    Logically collective.

    **SEE ALSO:**

    *pushTimestepping*, *getTimestep*, *incrementTimestep*, *PetscViewerHDF5SetTimestep*

    *Source code at petsc4py/PETSc/Viewer.pyx:997*

    - **Parameters**

      **timestep** (*int*)

    - **Return type**

      *None*

Exceptions

| | |
| --- | --- |
| *Error* | PETSc Error. |

### petsc4py.PETSc.Error

- **exception petsc4py.PETSc.Error**

  PETSc Error.

  - **ierr**

    PETSc error code.

    - **Type**

      *int*

Functions

| | |
| --- | --- |
| *garbage\_cleanup*(\[comm\]) | Clean up unused PETSc objects. |
| *garbage\_view*(\[comm\]) | Print summary of the garbage PETSc objects. |

### petsc4py.PETSc.garbage\_cleanup

- **petsc4py.PETSc.garbage\_cleanup(comm=None)**

  Clean up unused PETSc objects.

  Collective.

  Notes

  If the communicator **comm** if not provided or it is *None*, then *COMM\_WORLD* is used.

  *Source code at petsc4py/PETSc/cyclicgc.pxi:39*

  - **Parameters**

    **comm** (*Comm \| None*)

  - **Return type**

    *None*

### petsc4py.PETSc.garbage\_view

- **petsc4py.PETSc.garbage\_view(comm=None)**

  Print summary of the garbage PETSc objects.

  Collective.

  Notes

  Print out garbage summary on each rank of the communicator **comm**. If no communicator is provided then *COMM\_WORLD* is used.

  *Source code at petsc4py/PETSc/cyclicgc.pxi:63*

  - **Parameters**

    **comm** (*Comm \| None*)

  - **Return type**

    *None*

Attributes

| | |
| --- | --- |
| *DECIDE* | Constant **DECIDE** of type *int* |
| *DEFAULT* | Constant **DEFAULT** of type *int* |
| *DETERMINE* | Constant **DETERMINE** of type *int* |
| *CURRENT* | Constant **CURRENT** of type *int* |
| *UNLIMITED* | Constant **UNLIMITED** of type *int* |
| *INFINITY* | Object **INFINITY** of type *float* |
| *NINFINITY* | Object **NINFINITY** of type *float* |
| *PINFINITY* | Object **PINFINITY** of type *float* |
| *COMM\_NULL* | Object **COMM\_NULL** of type *Comm* |
| *COMM\_SELF* | Object **COMM\_SELF** of type *Comm* |
| *COMM\_WORLD* | Object **COMM\_WORLD** of type *Comm* |

### petsc4py.PETSc.DECIDE

- **petsc4py.PETSc.DECIDE: *int* = DECIDE**

  Constant **DECIDE** of type *int*

### petsc4py.PETSc.DEFAULT

- **petsc4py.PETSc.DEFAULT: *int* = DEFAULT**

  Constant **DEFAULT** of type *int*

### petsc4py.PETSc.DETERMINE

- **petsc4py.PETSc.DETERMINE: *int* = DETERMINE**

  Constant **DETERMINE** of type *int*

### petsc4py.PETSc.CURRENT

- **petsc4py.PETSc.CURRENT: *int* = CURRENT**

  Constant **CURRENT** of type *int*

### petsc4py.PETSc.UNLIMITED

- **petsc4py.PETSc.UNLIMITED: *int* = UNLIMITED**

  Constant **UNLIMITED** of type *int*

### petsc4py.PETSc.INFINITY

- **petsc4py.PETSc.INFINITY: *float* = INFINITY**

  Object **INFINITY** of type *float*

### petsc4py.PETSc.NINFINITY

- **petsc4py.PETSc.NINFINITY: *float* = NINFINITY**

  Object **NINFINITY** of type *float*

### petsc4py.PETSc.PINFINITY

- **petsc4py.PETSc.PINFINITY: *float* = PINFINITY**

  Object **PINFINITY** of type *float*

### petsc4py.PETSc.COMM\_NULL

- **petsc4py.PETSc.COMM\_NULL: *Comm* = COMM\_NULL**

  Object **COMM\_NULL** of type *Comm*

### petsc4py.PETSc.COMM\_SELF

- **petsc4py.PETSc.COMM\_SELF: *Comm* = COMM\_SELF**

  Object **COMM\_SELF** of type *Comm*

### petsc4py.PETSc.COMM\_WORLD

- **petsc4py.PETSc.COMM\_WORLD: *Comm* = COMM\_WORLD**

  Object **COMM\_WORLD** of type *Comm*

## PETSC PYTHON TYPES

Here we discuss details about Python-aware PETSc types that can be used within the library.

In particular, we discuss matrices, preconditioners, Krylov solvers, nonlinear solvers and ODE integrators.

The low-level, Cython implementation exposing the Python methods is in *src/petsc4py/PETSc/libpetsc4py.pyx*.

The scripts used here can be found at *demo/python\_types*.

### PETSc Python matrix type

PETSc provides a convenient way to compute the action of linear operators coded in Python through the *petsc4py.PETSc.Mat.Type.PYTHON* type.

In addition to the matrix action, the implementation can expose additional methods for use within the library. A template class for the supported methods is given below.

```
from petsc4py.typing import Scalar
from petsc4py.PETSc import Mat
from petsc4py.PETSc import Vec
from petsc4py.PETSc import IS
from petsc4py.PETSc import InsertMode
from petsc4py.PETSc import NormType
from petsc4py.PETSc import Viewer
# A template class with the Python methods supported by MATPYTHON
class MatPythonProtocol:
    def mult(self, A: Mat, x: Vec, y: Vec) -> None:
        """Matrix vector multiplication: y = A @ x."""
        ...
    def multAdd(self, A: Mat, x: Vec, y: Vec, z: Vec) -> None:
        """Matrix vector multiplication: z = A @ x + y."""
        ...
    def multTranspose(self, A: Mat, x: Vec, y: Vec) -> None:
        """Transposed matrix vector multiplication: y = A^T @ x."""
        ...
    def multTransposeAdd(self, A: Mat, x: Vec, y: Vec, z: Vec) -> None:
        """Transposed matrix vector multiplication: z = A^T @ x + y."""
        ...
    def multHermitian(self, A: Mat, x: Vec, y: Vec) -> None:
        """Hermitian matrix vector multiplication: y = A^H @ x."""
        ...
    def multHermitianAdd(self, A: Mat, x: Vec, y: Vec, z: Vec) -> None:
        """Hermitian matrix vector multiplication: z = A^H @ x + y."""
        ...
    def view(self, A: Mat, viewer: Viewer) -> None:
        """View the matrix."""
        ...
    def setFromOptions(self, A: Mat) -> None:
        """Process command line for customization."""
        ...
    def multDiagonalBlock(self, A: Mat, x: Vec, y: Vec) -> None:
        """Perform the on-process matrix vector multiplication."""
        ...
    def createVecs(self, A: Mat) -> tuple[Vec, Vec]:
        """Return tuple of vectors (x,y) suitable for A @ x = y."""
        ...
    def scale(self, A: Mat, s: Scalar) -> None:
        """Scale the matrix by a scalar."""
        ...
    def shift(self, A: Mat, s: Scalar) -> None:
        """Shift the matrix by a scalar."""
        ...
    def createSubMatrix(self, A: Mat, r: IS, c: IS, out: Mat) -> Mat:
        """Return the submatrix corresponding to r rows and c columns.
        Matrix out must be reused if not None.
        """
        ...
    def zeroRowsColumns(self, A: Mat, r: IS, diag: Scalar, x: Vec, b: Vec) -> None:
        """Zero rows and columns of the matrix corresponding to the index set r.
        Insert diag on the diagonal and modify vectors x and b accordingly if not None.
        """
        ...
    def getDiagonal(self, A: Mat, d: Vec) -> None:
        """Compute the diagonal of the matrix: d = diag(A)."""
        ...
    def setDiagonal(self, A: Mat, d: Vec, im: InsertMode) -> None:
        """Set the diagonal of the matrix."""
        ...
    def missingDiagonal(self, A: Mat, d: Vec, im: InsertMode) -> tuple[bool, int]:
        """Return a flag indicating if the matrix is missing a diagonal entry and the location."""
        ...
    def diagonalScale(self, A: Mat, L: Vec, R: Vec) -> None:
        """Perform left and right diagonal scaling if vectors are not None.
        A = diag(L)@A@diag(R).
        """
        ...
    def getDiagonalBlock(self, A: Mat) -> Mat:
        """Return the on-process matrix."""
        ...
    def setUp(self, A: Mat) -> None:
        """Perform the required setup."""
        ...
    def duplicate(self, A: Mat, op: Mat.DuplicateOption) -> Mat:
        """Duplicate the matrix."""
        ...
    def copy(self, A: Mat, B: Mat, op: Mat.Structure) -> None:
        """Copy the matrix: B = A."""
        ...
    def productSetFromOptions(
        self, A: Mat, prodtype: str, X: Mat, Y: Mat, Z: Mat
    ) -> bool:
        """The boolean flag indicating if the matrix supports prodtype."""
        ...
    def productSymbolic(
        self, A: Mat, product: Mat, producttype: str, X: Mat, Y: Mat, Z: Mat
    ) -> None:
        """Perform the symbolic stage of the requested matrix product."""
        ...
    def productNumeric(
        self, A: Mat, product: Mat, producttype: str, X: Mat, Y: Mat, Z: Mat
    ) -> None:
        """Perform the numeric stage of the requested matrix product."""
        ...
    def zeroEntries(self, A: Mat) -> None:
        """Set the matrix to zero."""
        ...
    def norm(self, A: Mat, normtype: NormType) -> float:
        """Compute the norm of the matrix."""
        ...
    def solve(self, A: Mat, y: Vec, x: Vec) -> None:
        """Solve the equation: x = inv(A) y."""
        ...
    def solveAdd(self, A: Mat, y: Vec, z: Vec, x: Vec) -> None:
        """Solve the equation: x = inv(A) y + z."""
        ...
    def solveTranspose(self, A: Mat, y: Vec, x: Vec) -> None:
        """Solve the equation: x = inv(A)^T y."""
        ...
    def solveTransposeAdd(self, A: Mat, y: Vec, z: Vec, x: Vec) -> None:
        """Solve the equation: x = inv(A)^T y + z."""
        ...
    def SOR(
        self,
        A: Mat,
        b: Vec,
        omega: float,
        sortype: Mat.SORType,
        shift: float,
        its: int,
        lits: int,
        x: Vec,
    ) -> None:
        """Perform SOR iterations."""
        ...
    def conjugate(self, A: Mat) -> None:
        """Perform the conjugation of the matrix: A = conj(A)."""
        ...
    def imagPart(self, A: Mat) -> None:
        """Set real part to zero. A = imag(A)."""
        ...
    def realPart(self, A: Mat) -> None:
        """Set imaginary part to zero. A = real(A)."""
        ...
```

In the example below, we create an operator that applies the Laplacian operator on a two-dimensional grid, and use it to solve the associated linear system. The default preconditioner in the script is *petsc4py.PETSc.PC.Type.JACOBI* which needs to access the diagonal of the matrix.

```
# ------------------------------------------------------------------------
#
#  Poisson problem. This problem is modeled by the partial
#  differential equation
#
#          -Laplacian(u) = 1,  0 < x,y < 1,
#
#  with boundary conditions
#
#           u = 0  for  x = 0, x = 1, y = 0, y = 1
#
#  A finite difference approximation with the usual 5-point stencil
#  is used to discretize the boundary value problem to obtain a
#  nonlinear system of equations. The problem is solved in a 2D
#  rectangular domain, using distributed arrays (DAs) to partition
#  the parallel grid.
#
# ------------------------------------------------------------------------
# We first import petsc4py and sys to initialize PETSc
import sys
import petsc4py
petsc4py.init(sys.argv)
# Import the PETSc module
from petsc4py import PETSc
# Here we define a class representing the discretized operator
# This allows us to apply the operator "matrix-free"
class Poisson2D:
    def __init__(self, da):
        self.da = da
        self.localX = da.createLocalVec()
    # This is the method that PETSc will look for when applying
    # the operator. `X` is the PETSc input vector, `Y` the output vector,
    # while `mat` is the PETSc matrix holding the PETSc datastructures.
    def mult(self, mat, X, Y):
        # Grid sizes
        mx, my = self.da.getSizes()
        hx, hy = (1.0 / m for m in [mx, my])
        # Bounds for the local part of the grid this process owns
        (xs, xe), (ys, ye) = self.da.getRanges()
        # Map global vector to local vectors
        self.da.globalToLocal(X, self.localX)
        # We can access the vector data as NumPy arrays
        x = self.da.getVecArray(self.localX)
        y = self.da.getVecArray(Y)
        # Loop on the local grid and compute the local action of the operator
        for j in range(ys, ye):
            for i in range(xs, xe):
                u = x[i, j]  # center
                u_e = u_w = u_n = u_s = 0
                if i > 0:
                    u_w = x[i - 1, j]  # west
                if i < mx - 1:
                    u_e = x[i + 1, j]  # east
                if j > 0:
                    u_s = x[i, j - 1]  # south
                if j < ny - 1:
                    u_n = x[i, j + 1]  # north
                u_xx = (-u_e + 2 * u - u_w) * hy / hx
                u_yy = (-u_n + 2 * u - u_s) * hx / hy
                y[i, j] = u_xx + u_yy
    # This is the method that PETSc will look for when the diagonal of the matrix is needed.
    def getDiagonal(self, mat, D):
        mx, my = self.da.getSizes()
        hx, hy = (1.0 / m for m in [mx, my])
        (xs, xe), (ys, ye) = self.da.getRanges()
        d = self.da.getVecArray(D)
        # Loop on the local grid and compute the diagonal
        for j in range(ys, ye):
            for i in range(xs, xe):
                d[i, j] = 2 * hy / hx + 2 * hx / hy
    # The class can contain other methods that PETSc won't use
    def formRHS(self, B):
        b = self.da.getVecArray(B)
        mx, my = self.da.getSizes()
        hx, hy = (1.0 / m for m in [mx, my])
        (xs, xe), (ys, ye) = self.da.getRanges()
        for j in range(ys, ye):
            for i in range(xs, xe):
                b[i, j] = 1 * hx * hy
# Access the option database and read options from the command line
OptDB = PETSc.Options()
nx, ny = OptDB.getIntArray(
    'grid', (16, 16)
)  # Read `-grid <int,int>`, defaults to 16,16
# Create the distributed memory implementation for structured grid
da = PETSc.DMDA().create([nx, ny], stencil_width=1)
# Create vectors to hold the solution and the right-hand side
x = da.createGlobalVec()
b = da.createGlobalVec()
# Instantiate an object of our Poisson2D class
pde = Poisson2D(da)
# Create a PETSc matrix of type Python using `pde` as context
A = PETSc.Mat().create(comm=da.comm)
A.setSizes([x.getSizes(), b.getSizes()])
A.setType(PETSc.Mat.Type.PYTHON)
A.setPythonContext(pde)
A.setUp()
# Create a Conjugate Gradient Krylov solver
ksp = PETSc.KSP().create()
ksp.setType(PETSc.KSP.Type.CG)
# Use diagonal preconditioning
ksp.getPC().setType(PETSc.PC.Type.JACOBI)
# Allow command-line customization
ksp.setFromOptions()
# Assemble right-hand side and solve the linear system
pde.formRHS(b)
ksp.setOperators(A)
ksp.solve(b, x)
# Here we programmatically visualize the solution
if OptDB.getBool('plot', True):
    # Modify the option database: keep the X window open for 1 second
    OptDB['draw_pause'] = 1
    # Obtain a viewer of type DRAW
    draw = PETSc.Viewer.DRAW(x.comm)
    # View the vector in the X window
    draw(x)
# We can also visualize the solution by command line options
# For example, we can dump a VTK file with:
#
#     $ python poisson2d.py -plot 0 -view_solution vtk:sol.vts:
#
# or obtain the same visualization as programmatically done above as:
#
#     $ python poisson2d.py -plot 0 -view_solution draw -draw_pause 1
#
x.viewFromOptions('-view_solution')
```

### PETSc Python preconditioner type

The protocol for the *petsc4py.PETSc.PC.Type.PYTHON* preconditioner is:

```
from petsc4py.PETSc import KSP
from petsc4py.PETSc import PC
from petsc4py.PETSc import Mat
from petsc4py.PETSc import Vec
from petsc4py.PETSc import Viewer
# A template class with the Python methods supported by PCPYTHON
class PCPythonProtocol:
    def apply(self, pc: PC, b: Vec, x: Vec) -> None:
        """Apply the preconditioner on vector b, return in x."""
        ...
    def applySymmetricLeft(self, pc: PC, b: Vec, x: Vec) -> None:
        """Apply the symmetric left part of the preconditioner on vector b, return in x."""
        ...
    def applySymmetricRight(self, pc: PC, b: Vec, x: Vec) -> None:
        """Apply the symmetric right part of the preconditioner on vector b, return in x."""
        ...
    def applyTranspose(self, pc: PC, b: Vec, x: Vec) -> None:
        """Apply the transposed preconditioner on vector b, return in x."""
        ...
    def applyMat(self, pc: PC, B: Mat, X: Mat) -> None:
        """Apply the preconditioner on a block of right-hand sides B, return in X."""
        ...
    def preSolve(self, pc: PC, ksp: KSP, b: Vec, x: Vec) -> None:
        """Callback called at the beginning of a Krylov method.
        This method is allowed to modify the right-hand side b and the initial guess x.
        """
        ...
    def postSolve(self, pc: PC, ksp: KSP, b: Vec, x: Vec) -> None:
        """Callback called at the end of a Krylov method.
        This method is allowed to modify the right-hand side b and the solution x.
        """
    def view(self, pc: PC, viewer: Viewer) -> None:
        """View the preconditioner."""
        ...
    def setFromOptions(self, pc: PC) -> None:
        """Process command line for customization."""
        ...
    def setUp(self, pc: PC) -> None:
        """Perform the required setup."""
        ...
    def reset(self, pc: PC) -> None:
        """Reset the preconditioner."""
        ...
```

In the example below, we create a Jacobi preconditioner, which needs to access the diagonal of the matrix. The action of the preconditioner consists of the pointwise multiplication of the inverse diagonal with the input vector.

```
# The user-defined Python class implementing the Jacobi method.
class myJacobi:
    # Setup the internal data. In this case, we access the matrix diagonal.
    def setUp(self, pc):
        _, P = pc.getOperators()
        self.D = P.getDiagonal()
    # Apply the preconditioner
    def apply(self, pc, x, y):
        y.pointwiseDivide(x, self.D)
```

We can run the script used to test our matrix class and use command line arguments to specify that our preconditioner should be used:

```
$ python mat.py -pc_type python -pc_python_type pc.myJacobi -ksp_view
KSP Object: 1 MPI process
  type: cg
  maximum iterations=10000, initial guess is zero
  tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
  left preconditioning
  using PRECONDITIONED norm type for convergence test
PC Object: 1 MPI process
  type: python
    Python: pc.myJacobi
  linear system matrix = precond matrix:
  Mat Object: 1 MPI process
    type: python
    rows=256, cols=256
        Python: __main__.Poisson2D
```

### PETSc Python linear solver type

The protocol for the *petsc4py.PETSc.KSP.Type.PYTHON* Krylov solver is:

```
from petsc4py.PETSc import KSP
from petsc4py.PETSc import Vec
from petsc4py.PETSc import Viewer
# A template class with the Python methods supported by KSPPYTHON
class KSPPythonProtocol:
    def solve(self, ksp: KSP, b: Vec, x: Vec) -> None:
        """Solve the linear system with right-hand side b. Return solution in x."""
        ...
    def solveTranspose(self, ksp: KSP, b: Vec, x: Vec) -> None:
        """Solve the transposed linear system with right-hand side b. Return solution in x."""
        ...
    def view(self, ksp: KSP, viewer: Viewer) -> None:
        """View the Krylov solver."""
        ...
    def setFromOptions(self, ksp: KSP) -> None:
        """Process command line for customization."""
        ...
    def setUp(self, ksp: KSP) -> None:
        """Perform the required setup."""
        ...
    def buildSolution(self, ksp: KSP, x: Vec) -> None:
        """Compute the solution vector."""
        ...
    def buildResidual(self, ksp: KSP, t: Vec, r: Vec) -> None:
        """Compute the residual vector, return it in r. t is a scratch working vector."""
        ...
    def reset(self, ksp: KSP) -> None:
        """Reset the Krylov solver."""
        ...
```

### PETSc Python nonlinear solver type (TODO)

### PETSc Python ode-integrator type (TODO)

### PETSc Python optimization solver type (TODO)

## WORKING WITH PETSC OPTIONS

A very powerful feature of PETSc is that objects can be configured via command-line options. In this way, one can choose the method to be used or set different parameters without changing the source code. See the PETSc *manual* for additional information.

In order to use command-line options in a petsc4py program, it is important to initialize the module as follows:

```
# We first import petsc4py and sys to initialize PETSc
import sys, petsc4py
petsc4py.init(sys.argv)
# Import the PETSc module
from petsc4py import PETSc
```

Then one can provide command-line options when running a script:

```
$ python foo.py -ksp_type gmres -ksp_gmres_restart 100 -ksp_view
```

When the above initialization method is not possible, PETSc options can be also specified via environment variables or configuration files, e.g.:

```
$ PETSC_OPTIONS='-ksp_type gmres -ksp_gmres_restart 100 -ksp_view' python foo.py
```

Command-line options can be read via an instance of the **Options** class. For instance:

```
OptDB = PETSc.Options()
n     = OptDB.getInt('n', 16)
eta   = OptDB.getReal('eta', 0.014)
alpha = OptDB.getScalar('alpha', -12.3)
```

In this way, if the script is run with

```
$ python foo.py -n 50 -alpha 8.8
```

the options, **n** and **alpha** will get the values **50** and **8.8**, respectively, while **eta** will be assigned the value specified as default, **0.014**.

The options database is accessible also as a Python dictionary, so that one can for instance override, insert or delete an option:

```
OptDB['draw_pause'] = 1
del OptDB['draw_pause']
```

## PETSC4PY DEMOS

## DOCUMENTATION STANDARDS FOR PETSC4PY

Subject to exceptions given below, new contributions to petsc4py **must** include *type annotations* for function parameters and results, and docstrings on every class, function and method.

The documentation should be consistent with the corresponding C API documentation, including copying text where this is appropriate. More in-depth documentation from the C API (such as extended discussions of algorithmic or performance factors) should not be copied.

### Docstring standards

Docstrings are to be written in **numpydoc:format** format.

The first line of a class, function or method docstring must be a short description of the method in imperative mood ("Return the norm of the matrix.") "Return" is to be preferred over "Get" in this sentence. A blank line must follow this description. Use one-liner descriptions for properties.

If the corresponding C API documentation of a method lists a function as being collective, then this information must be repeated on the next line of the docstring. Valid strings are: "Not collective.", "Logically collective.", "Collective.", "Neighborwise collective.", or "Collective the first time it is called".

The initial description section can contain more information if this is useful. In particular, if there is a PETSc manual chapter about a class, then this should be referred to from here.

Use double backticks around literals (like strings and numbers), e.g., \`\`2\`\`, \`\`"foo"\`\`.

Reference PETSc functions simply using backticks, e.g., *KSP* refers to the PETSc C documentation for KSP. Do **not** use URLs in docstrings. Always use Intersphinx references.

The following sections describe the use of numpydoc sections. Other sections allowed by numpydoc may be included if they are useful.

### Parameters

This is required for methods unless there are no parameters, or it will be completely obvious to even a novice user what the parameters do.

If a class has a non-trivial constructor, the arguments of the constructor and their types must be explicitly documented within this section.

For methods, types should only be specified in this section if for some reason the types provided by typing prove to be inadequate. If no type is being specified, do not include a colon (**:**) to the right of the parameter name.

Use *Sys.getDefaultComm* when specifying the default communicator.

### Returns

This should only be specified if the return value is not obvious from the initial description and typing.

If a "Returns" section is required, the type of the returned items *must* be specified, even if this duplicates typing information.

### See Also

If any of the following apply, then this section is required. The order of entries is as follows. Other links are permitted in this section if they add information useful to users.

Every **setFromOptions** must include the link \`petsc\_options\`.

Any closely related part of the petsc4py API not already linked in the docstring should appear (e.g. setters and getters should cross-refer).

If there is a corresponding C API documentation page, this must be linked from the "See also" section, e.g. \`petsc.MatSetValues\`.

End docstring with an empty line - "closing three quotation marks must be on a line by itself, preferably preceded by a blank line"

### Type hint standards

If returning **self**, use **-\> Self** in function signature.

Type hints are not required when the static type signature includes a PETSc type (e.g. **Vec x**). These will be automatically generated. This will also work for **= None**. When using type hints, use spacing around the equals in any **= None**.

Communicators in type signatures must use Python typing instead of c-typing (i.e. **comm: Comm** not **Comm comm**). This is because communicators can come from **mpi4py** and not just the **petsc4py.PETSc.Comm** class.

For petsc4py native types that are strings, the type is **argument:** **KSP.Type \| str** (not e.g.: **KSPType argument**). If the type is strictly an enum the **\| str** can be omitted. Full signature example:

```
def setType(self, ksp_type: KSP.Type | str) -> None:
```

If a NumPy array is returned, use **ArrayBool**/**ArrayInt**/**ArrayReal**/**ArrayScalar** as the return type.

## AUTHOR

Lisandro Dalcin
