Scroll to navigation

solver_abtb(2rheolef) rheolef-7.0 solver_abtb(2rheolef)

NAME

solver_abtb -- direct or iterative solver interface for mixed linear systems

SYNOPSIS


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

DESCRIPTION

The solver_abtb class provides direct or iterative algorithms for some 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. An optional argument can change this behavior. Such mixed linear problems appears for instance with the discretization of Stokes 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.

DIRECT ALGORITHM

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. In the case of iterative methods, this is not a problem. But when using direct method, the system is then completed to impose a constraint on the pressure term and the whole matrix is factored one time for all.

ITERATIVE ALGORITHM

The preconditionned conjugate gradient algorithm is used, where the mp matrix is used as preconditionner. See see mixed_solver(4). The linear sub-systems related to the A matrix are also solved by an iterative algorithm. Use a second optional argument to change this default behavior: a factorization and a direct solver can be considered for these sub-systems.

EXAMPLES

See the user's manual for practical examples for the nearly incompressible elasticity, the Stokes and the Navier-Stokes problems.

IMPLEMENTATION

template <class T, class M = rheo_default_memory_model>
class solver_abtb_basic {
public:
// typedefs:

typedef typename csr<T,M>::size_type size_type; // allocators:
solver_abtb_basic ();
solver_abtb_basic (const csr<T,M>& a, const csr<T,M>& b, const csr<T,M>& mp,
const solver_option& opt = solver_option(),
const solver_option& sub_opt = solver_option());
solver_abtb_basic (const csr<T,M>& a, const csr<T,M>& b, const csr<T,M>& c, const csr<T,M>& mp,
const solver_option& opt = solver_option(),
const solver_option& sub_opt = solver_option()); // accessors:
void solve (const vec<T,M>& f, const vec<T,M>& g, vec<T,M>& u, vec<T,M>& p) const;
const solver_option& option() const { return _opt; } protected: // internal
void init(); // data:
mutable solver_option _opt;
mutable solver_option _sub_opt;
csr<T,M> _a;
csr<T,M> _b;
csr<T,M> _c;
csr<T,M> _mp;
solver_basic<T,M> _sA;
solver_basic<T,M> _sa;
solver_basic<T,M> _smp;
bool _need_constraint; }; typedef solver_abtb_basic<Float,rheo_default_memory_model> solver_abtb;

SEE ALSO

mixed_solver(4)

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.

rheolef-7.0 rheolef-7.0