Function returning shared pointer with linear solver given by its name in a form of a string. 
    1#include <iostream>
    2#include <memory>
    3#include <TNL/Matrices/SparseMatrix.h>
    4#include <TNL/Devices/Host.h>
    5#include <TNL/Devices/Cuda.h>
    6#include <TNL/Solvers/LinearSolverTypeResolver.h>
    7 
    8template< typename Device >
    9void
   10iterativeLinearSolverExample()
   11{
   12
   13
   14
   15
   16
   17
   18
   19
   20
   23   const int size( 5 );
   25   matrix_ptr->setDimensions( size, size );
   26   matrix_ptr->setRowCapacities( Vector( { 2, 3, 3, 3, 2 } ) );
   27 
   29   {
   30      const int rowIdx = row.getRowIndex();
   31      if( rowIdx == 0 ) {
   32         row.setElement( 0, rowIdx, 2.5 );     
   33         row.setElement( 1, rowIdx + 1, -1 );  
   34      }
   35      else if( rowIdx == size - 1 ) {
   36         row.setElement( 0, rowIdx - 1, -1.0 );  
   37         row.setElement( 1, rowIdx, 2.5 );       
   38      }
   39      else {
   40         row.setElement( 0, rowIdx - 1, -1.0 );  
   41         row.setElement( 1, rowIdx, 2.5 );       
   42         row.setElement( 2, rowIdx + 1, -1.0 );  
   43      }
   44   };
   45 
   46
   47
   48
   49   matrix_ptr->forAllRows( f );
   51 
   52
   53
   54
   55   Vector x( size, 1.0 );
   56   Vector b( size );
   57   matrix_ptr->vectorProduct( x, b );
   58   x = 0.0;
   60 
   61
   62
   63
   66   preconditioner_ptr->update( matrix_ptr );
   67   solver_ptr->setMatrix( matrix_ptr );
   68   solver_ptr->setPreconditioner( preconditioner_ptr );
   69   solver_ptr->setConvergenceResidue( 1.0e-6 );
   70   solver_ptr->solve( b, x );
   72}
   73 
   74int
   75main( int argc, char* argv[] )
   76{
   78   iterativeLinearSolverExample< TNL::Devices::Sequential >();
   79 
   80#ifdef __CUDACC__
   82   iterativeLinearSolverExample< TNL::Devices::Cuda >();
   83#endif
   84}
#define __cuda_callable__
Definition Macros.h:49
 
Vector extends Array with algebraic operations.
Definition Vector.h:36
 
Implementation of sparse matrix, i.e. matrix storing only non-zero elements.
Definition SparseMatrix.h:55
 
std::shared_ptr< Linear::Preconditioners::Preconditioner< MatrixType > > getPreconditioner(const std::string &name)
Function returning shared pointer with linear preconditioner given by its name in a form of a string.
Definition LinearSolverTypeResolver.h:144
 
std::shared_ptr< Linear::LinearSolver< MatrixType > > getLinearSolver(const std::string &name)
Function returning shared pointer with linear solver given by its name in a form of a string.
Definition LinearSolverTypeResolver.h:87
 
Solving linear system on host: 
Row: 0 ->     0:2.5     1:-1  
Row: 1 ->     0:-1      1:2.5     2:-1  
Row: 2 ->     1:-1      2:2.5     3:-1  
Row: 3 ->     2:-1      3:2.5     4:-1  
Row: 4 ->     3:-1      4:2.5 
 
Vector b = [ 1.5, 0.5, 0.5, 0.5, 1.5 ]
Vector x = [ 1, 1, 1, 1, 1 ]
Solving linear system on CUDA device: 
Row: 0 ->     0:2.5     1:-1  
Row: 1 ->     0:-1      1:2.5     2:-1  
Row: 2 ->     1:-1      2:2.5     3:-1  
Row: 3 ->     2:-1      3:2.5     4:-1  
Row: 4 ->     3:-1      4:2.5 
 
Vector b = [ 1.5, 0.5, 0.5, 0.5, 1.5 ]
Vector x = [ 1, 1, 1, 1, 1 ]