%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Interface to the \trilinos{} \tpetra stack}\label{sec:tpetra}
-\dealii{}'s parallel linear algebra facilities are largely built on
+\dealii{}'s parallel linear algebra facilities (apart from matrix-free capabilities) are largely built on
wrappers around functionality provided by the \petsc{} and \trilinos{} libraries.
-As a software project, \trilinos{} is designed as a stack of semi-independent
-packages building upon each other and working together.
-As a foundation, \teuchos{} offers a set of basic tools,
-including parameter handling through XML files or command line interfaces
-and the reference counted pointer \texttt{RCP} which predates
-the smart pointer types introduced in \texttt{C++11}.
-The second layer in the stack is a package providing distributed linear algebra
-classes for vectors and (sparse) matrices based on the \petra{}
-object model. The third layer is a set of interconnected packages
-providing preconditioners, various types of solvers
-as well as more advanced techniques like automatic differentiation,
-time integration and discretization.
-
-Historically, \trilinos{} has implemented \petra{} objects -- such as
-parallel vector, sparsity pattern, and sparse matrix classes -- in its
+
+Historically, \trilinos{} has implemented distributed linear algebra
+-classes for vectors and (sparse) matrices in its
\epetra{} package that uses \MPI{} as its only source of
parallelism. The \dealii{} interfaces to \trilinos{} have therefore traditionally all
been built using \epetra{}.
sub-packages replacing existing \trilinos sub-packages (for example,
Ifpack2 instead of Ifpack).
-In the current release, we have put substantial work into this switch.
-
-\todo[inline]{Sebastian \& Jan Philipp: Please complete}
-
-
+In the current release, we have put substantial work into this switch. The following omits the \texttt{LinearAlgebra} prefix for readability.
\begin{itemize}
- \item Short overview capabilities of \epetra (MPI parallel, fixed types) [Thiele]
- \item Short overview capabilities of \tpetra (MPI+X via Kokkos, auto diff types, Templated petra) [Thiele]
- \todo[inline]{Keep discussion of the two items above as short as
- you can -- we're describing the changes in deal.II, not some
- other package. Perhaps roll what you want to say into the
- paragraphs above?}
- \item Current state of the interface (Tpetra based linear algebra, direct solver from Amesos2, preconditioners from Ifpack2) [Thiele \& Kinnewig]
- \item User relevant changes from \epetra: incompatibilities, removed
- options, changes in the constructor. [Thiele \& Kinnewig]
- \todo[inline]{These last two items are the important ones.}
+ \item The \texttt{TpetraWrappers::Vector} class has been overhauled to also allow specifying
+ a memory space, and the \texttt{TpetraWrappers::BlockVector} class has been added.
+ \item \texttt{TpetraWrappers::SparseMatrix} and \texttt{TpetraWrappers::SparsityPattern} has been implemented mirroring
+ the functionality of the \texttt{TrilinosWrappers::SparseMatrix} \\ and \texttt{TrilinosWrappers::SparsityPattern} classes.
+ \item Various \texttt{TpetraWrappers::Precondition*} have been added largely
+ mirroring the exising preconditioners in the \texttt{LinearAlgbera::TrilinosWrappers} namespace.
+ \item \texttt{TpetraWrappers::SolverDirect} and \texttt{TpetraWrappers::SolverDirectKLU2}
+ have been implemented as direct solvers.
\end{itemize}
+Most of the interfaces are usable at this point even if some functionality existing in the \texttt{TrilinosWrappers} classes
+is still missing, most noticably a wrapper for an algebraic-multigrid preconditioner.
+
+All the \texttt{TpetraWrappers} classes take \texttt{Number} and \texttt{MemorySpace} template arguments
+allowing to control the underlying number type and the memory space used for storing the data. Note that the memory space type
+also determines whether \tpetra{} takes advantage of GPUs if \texttt{Kokkos} has been configure with a GPU backend.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{More support for advanced programming idioms}\label{sec:tools}