Unified memory management for CPUs and GPUs

All data structures in TNL contains information about its allocation (on CPU or GPU). It is represented by a C++ template parameter and so correctness of all memory accesses are checked already at compile time. TNL also comes with extended smart pointers which makes allocation of objects on GPU significantly simpler.

Efficient data structures

In TNL, you can find set of data structures which are designed to be efficient for algorithms running on both CPUs and GPUs. Such data structures include arrays, dense matrices, sparse matrices (diagonal, tridiagonal, multidiagonal, CSR, Ellpack, Sliced Ellpack) but also orthogonal numerical grids together with conforming unstructured numerical meshes.

With TNL, you can store the numerical meshes on GPU, which makes assembly of linear systems on GPU much more efficient. TNL offers unified, matrix format independent, interface for this purpose.

Numerical solvers

TNL offers iterative solvers for linear systems including stationary solvers (Jacobi, SOR - CPU only currently), Krylov subspace methods (CG, BiCGStab,GMRES, CWYGMRES, TFQMR) together with few preconditioners (Jacobi, ILU0 - CPU only,  ILUT - CPU only).

For solution of ODEs, there is first order Euler and fourth order adaptive Runge-Kutta-Merson solver.

PDE framework

TNL provides a framework for rapid development of PDE solvers. It is based on an architecture similar to client-server which we call problem-solver. On one hand there is PDE problem to be solved represented by a templated C++ class. It is written by the user and it describes mainly organisation of the degrees of freedom and numerical scheme.  In a lot of cases, it is independent on the hardware architecture. On the other hand, there is a solver part implemented in TNL which manages numerical meshes, all necessary solvers (for linear systems or ODE systems) and hardware beneath.

Distibuted computing

Support of MPI is currently rather experimental.

Tools

TNL involves set of supporting tools. They are simple command-line  application for the computation preprocessing or postprocessing including tools for conversion of (medical) images to TNL data structures, exporter of TNL data to VTK of gnuplot and tools for convergence study.