Belos  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Belos: An Iterative Linear Solvers Package

Belos is an extensible and interoperable C++ framework for the numerical solution of large-scale linear systems of equations. It provides a collection of iterative linear solver algorithms, which work for any combination of matrix, preconditioner, and vector types which make sense together.

Belos is interoperable because it accesses matrices, preconditioners, and vectors as opaque objects with simple interfaces. These interfaces do not depend on the internal representation of these objects. Belos' solvers only use matrices and preconditioners as black-box "operators" that take one or more vectors as input, and return the same number of vectors as output. They only access vectors via a simple interface for adding vectors together or computing their inner products or norms.

Implementations of operator and vector interfaces for Epetra, Tpetra, and Thyra objects are provided. As a result, any existing code employing Epetra, Tpetra, or Thyra operators and vectors (such as other packages in Trilinos) may also be used in conjunction with Belos. Belos is extensible because users may define this interface for their own operators and vectors. This allows them to use any Belos solver with their objects without changing a line of Belos code. Defining this interface requires only a modest effort, and Belos provides plenty of examples. For more details, please refer to the Belos Operator/Vectorabstract interface".

The Belos linear solver framework describes solver managers that provide efficient, convenient, and powerful computational methods for solving large-scale linear systems of equations. Belos' power is a result of the distribution of functionality across different computational entities in the framework, including orthogonalization, iterations, stopping criteria, and restarting methodologies. Belos' extensibility comes via the abstract interfaces describing these entities. Belos currently provides a robust set of options, and users are able to expand this set to suit specific research and/or application needs. The ability to interact directly with these objects provides great flexibility in computation, while the existence of solver managers allow convenient programming for standard use cases.

Current Linear Solvers

Belos provides a framework capable of solving a wide variety of linear systems of equations. Belos can currently solve real-valued (often complex-valued), Hermitian and non-Hermitian, linear problems, via the following included solvers:

Belos Contributors

The following people have contributed to the development of Belos:

Where to start

A good place for new users to start is with Belos::SolverFactory. This factory class lets the user ask for the Belos solver they want by its string name. For example, you can ask for "GMRES" or "CG" by name and the SolverFactory will create that solver, without you needing to know the name of the corresponding class in Belos. You may also pass parameters (via Teuchos::ParameterList) to the solver at this time. All solvers that SolverFactory creates implement the Belos::SolverManager interface.

Browse all of Belos as a single doxygen collection

You can browse all of Belos as a single doxygen collection. Warning, this is not the recommended way to learn about Belos software. However, this is a good way to browse the directory structure of belos, to locate files, etc.

Thyra support

The Belos to Thyra Linear Solver Adapters take Thyra::LinearOpBase objects and turn them into Thyra::LinearOpWithSolveBase objects which can then be used to solve linear systems using Belos linear solvers implementations.

Frequently Asked Questions

If you are an AztecOO user and would like to have similar style output in Belos, here is an example of how to do it.

typedef PseudoBlockGmresSolMgr<scalar_type, MV, OP> solver_type;
int frequency=10;
params->set("Output Frequency",frequency);
params->set("Output Style",Belos::Brief);
solver_type solver (problem, params);