---
name: "solver_abtb"
section: "4rheolef"
platform: "linux"
package: "librheolef-dev"
version: "7.2-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/solver_abtb/4rheolef"
---

# solver\_abtb(4rheolef)

mixed systems solver (rheolef-7.2)

## NAME

solver\_abtb - mixed systems solver (rheolef-7.2)

## SYNOPSIS

```
    solver_abtb stokes     (a,b,mp);
    solver_abtb elasticity (a,b,c,mp);
```

## DESCRIPTION

This class provides both direct and iterative algorithms for solving mixed problem:

```
   [ A  B^T ] [ u ]    [ Mf ]
   [        ] [   ]  = [    ]
   [ B  -C  ] [ p ]    [ Mg ]
```

 where A is symmetric positive definite and C is symmetric positive. By default, iterative algorithms are considered for tridimensional problems and direct methods otherwise. A **solver\_option(4)** argument can change this default behavior. Mixed linear problems appears for instance with the discretization of Stokes and elasticity problems. The C matrix can be zero and then the corresponding argument can be omitted when invoking the constructor. Non-zero C matrix appears for of Stokes problems with stabilized P1-P1 element, or for nearly incompressible elasticity problems.

Recall that, for 1D and 2D problems, the direct method is default, since it is more efficient: see e.g. **usersguide**. The **solver\_option(4)** allows one to change this default behavior.

## DIRECT ALGORITHM

When the kernel of `B^T` is reduced to zero, the global system is non-singular and the **solver(4)** method could be applied. Otherwise, when the kernel of `B^T` is not reduced to zero, then the pressure p is defined up to a constant and the system is singular. This is a major difficulty for any direct method. Thus, the system is first completed by the imposition of an additional constraint on the pressure term: it should have a zero average value. By this way, the system becomes non-singular and the **solver(4)** method could be applied.

## ITERATIVE ALGORITHM

The **cg(5)** preconditionned conjugate gradient algorithm or the **gmres(5)** one is used, depending on the symmetry of the matrix. The `mp` matrix is used as preconditionner: it can be customized by the `set_preconditionner` member function. The linear sub-systems related to the `A` matrix are also solved by an inner solver. This inner solver is automatically defined by default: it can be customized by the `set_inner_solver` member function and e.g. uses it own inner iterative algorithm and preconditionner.

## EXAMPLE

See the **usersguide** for practical examples for the nearly incompressible elasticity, the Stokes and the Navier-Stokes problems.

## IMPLEMENTATION

This documentation has been generated from file linalg/lib/solver\_abtb.h

## AUTHOR

Pierre  Saramito  \<Pierre.Saramito@imag.fr\>

## COPYRIGHT

Copyright   (C)  2000-2018  Pierre  Saramito  \<Pierre.Saramito@imag.fr\> GPLv3+: GNU GPL version 3 or later  \<http://gnu.org/licenses/gpl.html\>. This  is  free  software:  you  are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
