forked from searhein/trilinos-paper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
introduction.tex
27 lines (15 loc) · 6.13 KB
/
introduction.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
%\todo{Add introduction here. Add a subsection on Trilinos organization as a set of five products.}
Trilinos is a community-developed, open source software framework that facilitates building large-scale, complex, multiscale, multiphysics engineering and scientific problems. While Trilinos can run on small workstations to large supercomputers, the typical use of Trilinos is on the leadership class systems with new or emerging hardware architectures.
% History
Trilinos was originally conceived as framework of three packages for distributed memory systems. The original Trilinos publication~\cite{Heroux2005a} describes the motivation and the philosophy behind Trilinos and the capabilities that existed in Trilinos at that time. The second Trilinos overview publication~\cite{Heroux2012} introduced the expanded set of capabilities then included in Trilinos as well as the Trilinos strategic goals. Trilinos today is similar to the Trilinos that was envisioned two decades ago in some aspects. However, Trilinos today is also very different in several other aspects. These changes were necessitated by the changes in programming models, application needs, hardware architectures, and algorithms. Trilinos has grown from a library of three packages to a library with more than fifty packages with functionality and features supporting a wide range of applications.
% Purpose
This article is an attempt to capture a snapshot of where Trilinos is today as opposed to eighteen and eleven years ago when the original Trilinos articles were written. We will focus on the major developments within Trilinos in the last decade, new features and functionality that has been added to enable scientific and engineering applications. This article will be an overview of the features and we refer to the extensive reference list for the details of these features. We are also cognizant of the fact that as a software that is actively developed this article could become outdated even before its publication. Hence, we will focus on the high level features and project that we expect to remain stable for several years.
%Product and package structure
The functionalities in Trilinos are organized in two levels. The first one is \textit{package}. A package in Trilinos has a well-defined set of unique capabilities that is important for a scientific or an engineering application. Packages also have a set of expectations such as having a responsible point of contact or a package lead, software engineering expectations such as documentation, continuous integration testing, clearly defined dependencies, using the Trilinos infrastructure for building and installation etc. Recently, we have aggregated the fifty or more packages into five \textit{product areas} for organizational ease. The five product areas are data services, discretizations, linear solvers, embedded nonlinear analysis and tools, and framework. These product areas are collection of packages that share a common objective (e.g., solving a linear system), a sub-community within Trilinos, and in some cases common interfaces. We briefly describe these areas here.
\paragraph{Data Services} The data services product area covers all aspects of creating, distributing or mapping data to processing elements (cores, threads, nodes), load balancing, and redistributing data. Data services also includes Trilinos abstractions for data such as the Petra object model, and its concrete implementation called Tpetra. On a modern accelerator-based compute node the abstractions provided by the Kokkos library becomes critical for Tpetra. Section \ref{sec:data_services} describes these features in detail.
\paragraph{Discretization} The objective of the Discretizations product is to provide modular, interoperable and extensible tools for the discretization of differential equations. Adopting state-of-the-art numerics and HPC programming models, the discretization tools target both research and production applications. The Discretizations product includes tools for mesh-based discretizations such as finite element analysis as well as meshless discretization such as generalized moving least squares. Section \ref{sec:discretization} describes these features in detail.
\paragraph{Linear Solvers} The wide variety of applications that use Trilinos need a diverse set of linear solvers. Trilinos has support for both iterative and direct linear solvers. There are a number of preconditioner options from multithreaded or performance portable node-level preconditioners to scalable multilevel domain decomposition or multigrid preconditioners. The preconditioners and solvers use the data abstractions from the data services product area. Section \ref{sec:lin_solve} describes these features in detail.
\paragraph{Nonlinear Analysis} The nonlinear analysis product area provides high level algorithms for computational simulation and design. Capabilities include solvers for nonlinear equations, time integration, parameter continuation, bifurcation tracking, optimization and uncertainty quantification. This capability area also provides lower level utility packages to evaluate quantities of interest required by the analysis algorithms. Capabilities include automatic differentiation technology to evaluate derivatives and embedded ensemble propagation for uncertainty quantification. Section \ref{sec:nonlin_solve} describes these features in detail.
\paragraph{Framework} The Framework Product is different than the other Trilinos Products in that most of the resources and services are not associated with Trilinos packages. The Framework Product rather is focused primarily on activites such as developing and maintaining infrastructure for automated testing and documentation, as well as associated workflows. A small number of infrastructure and cross-cutting packages are also associated with the Framework, including Teuchos and PyTrilinos. Section \ref{sec:framework} describes these features in detail.
%Article organization
This article describes Trilinos' product areas and their packages with a focus towards providing an overview of recent developments. We also briefly touch upon the Trilinos community (Section \ref{sec:community}) and software engineering issues with respect to Trilinos.