Provided by: librheolef-dev_6.5-1build1_amd64 bug

NAME

       solver_abtb -- direct or iterative solver iterface 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.   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).

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_type& opt = solver_option_type());
         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_type& opt = solver_option_type());

       // accessors:

         void solve (const vec<T,M>& f, const vec<T,M>& g, vec<T,M>& u, vec<T,M>& p) const;

       protected:
       // internal
         void init();
       // data:
         mutable solver_option_type _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)