template<class Matrix, class Vector>
class sofa::component::linearsolver::direct::BTDLinearSolver< Matrix, Vector >
Linear system solver using Thomas Algorithm for Block Tridiagonal matrices
References: Conte, S.D., and deBoor, C. (1972). Elementary Numerical Analysis. McGraw-Hill, New York http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm http://www.cfd-online.com/Wiki/Tridiagonal_matrix_algorithm_-_TDMA_(Thomas_algorithm) http://www4.ncsu.edu/eos/users/w/white/www/white/ma580/chap2.5.PDF 
|  | 
|  | SOFA_CLASS (SOFA_TEMPLATE2(BTDLinearSolver, Matrix, Vector), SOFA_TEMPLATE2(sofa::component::linearsolver::MatrixLinearSolver, Matrix, Vector)) | 
|  | 
| void | my_identity (SubMatrix &Id, const Index size_id) | 
|  | 
| void | invert (SubMatrix &Inv, const BlocType &m) | 
|  | 
| void | invert (Matrix &M) override | 
|  | 
| void | computeMinvBlock (Index i, Index j) | 
|  | 
| double | getMinvElement (Index i, Index j) | 
|  | 
| void | solve (Matrix &, Vector &x, Vector &b) override | 
|  | Solve Mx=b.  More... 
 | 
|  | 
| bool | addJMInvJt (linearalgebra::BaseMatrix *result, linearalgebra::BaseMatrix *J, SReal fact) override | 
|  | 
| void | init_partial_solve () override | 
|  | Init the partial solve.  More... 
 | 
|  | 
| void | partial_solve (ListIndex &Iout, ListIndex &Iin, bool NewIn) override | 
|  | *Matrix& M, Vector& result, Vector& rh, */  More... 
 | 
|  | 
| void | init_partial_inverse (const Index &nb, const Index &bsize) | 
|  | 
| template<class RMatrix , class JMatrix > | 
| bool | addJMInvJt (RMatrix &result, JMatrix &J, double fact) | 
|  | 
| void | parse (sofa::core::objectmodel::BaseObjectDescription *arg) override | 
|  | 
| void | resetSystem () | 
|  | 
| void | resizeSystem (Size n) | 
|  | 
| void | setSystemMBKMatrix (const core::MechanicalParams *mparams) | 
|  | 
| void | rebuildSystem (SReal, SReal) | 
|  | 
| void | setSystemLHVector (core::MultiVecDerivId v) | 
|  | 
| void | applySystemSolution () | 
|  | 
| void | applyConstraintForce (const sofa::core::ConstraintParams *, sofa::core::MultiVecDerivId, const linearalgebra::BaseVector *) | 
|  | 
| void | computeResidual (const core::ExecParams *, linearalgebra::BaseVector *) | 
|  | 
| GraphScatteredVector * | createPersistentVector () | 
|  | 
| linearalgebra::BaseMatrix * | getSystemBaseMatrix () | 
|  | 
| linearalgebra::BaseVector * | getSystemRHBaseVector () | 
|  | 
| linearalgebra::BaseVector * | getSystemLHBaseVector () | 
|  | 
| void | checkLinearSystem () | 
|  | 
| bool | addJMInvJtLocal (GraphScatteredMatrix *M, MatrixLinearSolver< GraphScatteredMatrix, GraphScatteredVector, NoThreadManager >::ResMatrixType *result, const MatrixLinearSolver< GraphScatteredMatrix, GraphScatteredVector, NoThreadManager >::JMatrixType *J, const SReal fact) | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API void | resetSystem () | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API void | resizeSystem (Size) | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API void | setSystemMBKMatrix (const core::MechanicalParams *mparams) | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API void | rebuildSystem (SReal massFactor, SReal forceFactor) | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API void | setSystemLHVector (core::MultiVecDerivId v) | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API void | applySystemSolution () | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API GraphScatteredVector * | createPersistentVector () | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API linearalgebra::BaseMatrix * | getSystemBaseMatrix () | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API linearalgebra::BaseVector * | getSystemRHBaseVector () | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API linearalgebra::BaseVector * | getSystemLHBaseVector () | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API void | applyConstraintForce (const sofa::core::ConstraintParams *, sofa::core::MultiVecDerivId, const linearalgebra::BaseVector *) | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API void | computeResidual (const core::ExecParams *params, linearalgebra::BaseVector *f) | 
|  | 
| SOFA_COMPONENT_LINEARSOLVER_ITERATIVE_API void | checkLinearSystem () | 
|  | 
template<class Matrix , class Vector > 
      
 
Factorize M 
[ A0 C0 0  0  ]         [ a0 0  0  0  ] [ I  l0 0  0  ]
 M = [ B1 A1 C1 0 ] = L U = [ B1 a1 0 0 ] [ 0 I l1 0 ] [ 0 B2 A2 C2 ] [ 0 B2 a2 0 ] [ 0 0 I l2 ] [ 0 0 B3 A3 ] [ 0 0 B3 a3 ] [ 0 0 0 I ] [ a0 a0l0 0 0 ] M = [ B1 B1l0+a1 a1l1 0 ] [ 0 B2 B2l1+a2 a2l2 ] [ 0 0 B3 B3l2+a3 ] L X = [ a0X0 B1X0+a1X1 B2X1+a2X2 B3X2+a3X3 ] [ inva0 0 0 0 ] Linv = [ -inva1B1inva0 inva1 0 0 ] [ inva2B2inva1B1inva0 -inva2B2inva1 inva2 0 ] [ -inva3B3inva2B2inva1B1inva0 inva3B3inva2B2inva1 -inva3B3inva2 inva3 ] U X = [ X0+l0X1 X1+l1X2 X2+l2X3 X3 ] Uinv = [ I -l0 l0l1 -l0l1l2 ] [ 0 I -l1 l1l2 ] [ 0 0 I -l2 ] [ 0 0 0 I ] 
        [ (I+l0(I+l1(I+l2inva3B3)inva2B2)inva1B1)inva0 -l0(I+l1(I+l2inva3B3)inva2B2)inva1 l0l1(inva2+l2inva3B3inva2) -l0l1l2inva3 ]
 Minv = Uinv Linv = [ -((I+l1(I+l2inva3B3)inva2B2)inva1B1)inva0 (I+l1(I+l2inva3B3)inva2B2)inva1 -l1(inva2+l2inva3B3inva2) l1l2inva3 ] [ (((I+l2inva3B3)inva2B2)inva1B1)inva0 -((I+l2inva3B3)inva2B2)inva1 inva2+l2inva3B3inva2 -l2inva3 ] [ -inva3B3inva2B2inva1B1inva0 inva3B3inva2B2inva1 -inva3B3inva2 inva3 ]
[ inva0-l0(Minv10) (-l0)(Minv11) (-l0)(Minv12) (-l0)(Minv13) ] Minv = Uinv Linv = [ (Minv11)(-B1inva0) inva1-l1(Minv21) (-l1)(Minv22) (-l1)(Minv23) ] [ (Minv21)(-B1inva0) (Minv22)(-B2inva1) inva2-l2(Minv32) (-l2)(Minv33) ] [ (Minv31)(-B1inva0) (Minv32)(-B2inva1) (Minv33)(-B3inva2) inva3 ]
if M is symmetric (Ai = Ait and Bi+1 = C1t) : li = invai*Ci = (invai)t*(Bi+1)t = (B(i+1)invai)t 
               [ inva0-l0(Minv11)(-l0t)     Minv10t          Minv20t      Minv30t ]
 Minv = Uinv Linv = [ (Minv11)(-l0t) inva1-l1(Minv22)(-l1t) Minv21t Minv31t ] [ (Minv21)(-l0t) (Minv22)(-l1t) inva2-l2(Minv33)(-l2t) Minv32t ] [ (Minv31)(-l0t) (Minv32)(-l1t) (Minv33)(-l2t) inva3 ]