# Extended Thyra Operator/Vector Interfaces for Abstract Numerical Algorithms

## Introduction

This doxygen collection documents a set of interfaces that are derived from or extend the Fundamental Thyra ANA Operator/Vector Interfaces in simple ways, but yet are used to define interoperability between objects in many contexts.

## Software

• Interfaces to product vector spaces, vectors and multi-vectors

• `Thyra::ProductVectorSpaceBase` defines an interface for a composite product vector space composed from one or more constituent `Thyra::VectorSpaceBase` objects.
• `Thyra::ProductVectorBase` defines an interface for a composite product vector composed from one or more constituent `Thyra::VectorBase` objects.
• `Thyra::ProductMultiVectorBase` defines an interface for a composite product multi-vector composed from one or more constituent `Thyra::MultiVectorBase` objects.

• Composite and other linear operator base classes: Note that below, the term "implicit" denotes the fact that the operators are not actually formed. For example, the sum of the implicitly added linear operators is never calculated, but the action of these operators on a vector is computed correctly as the sum of the action of each individual operator on that vector.

• `Thyra::ScaledAdjointLinearOpBase` is the base class for all decorator subclasses that implicitly scale and/or transpose a `Thyra::LinearOpBase` object.
• `Thyra::ZeroLinearOpBase` defines the interface for a zero linear operator.
• `Thyra::IdentityLinearOpBase` defines the interface for an identity linear operator .
• `Thyra::AddedLinearOpBase` defines the interface for implicitly added linear operators.
• `Thyra::MultipliedLinearOpBase` defines the interface for implicitly added linear operators.
• `Thyra::DiagonalLinearOpBase` defines the interface for a basic diagonal linear operator.
• `Thyra::BlockedLinearOpBase` is a base class for a logically blocked `LinearOpBase`.
• `Thyra::PhysicallyBlockedLinearOpBase` is a base class for a physically blocked `LinearOpBase` object where the blocks can be set externally.

• MPI-Specific ANA-based interfaces

Note: These interfaces are not strictly related to ANAs and therefore may not be appropriate to be placed in this collection. However, they are derived for the ANA interfaces and therefore, very weakly, belong in this collection of code.

• `Thyra::MPIVectorSpaceBase` defines an interface for getting information about the partitioning of elements to processors in an SPMD program.

• Miscellaneous

• `Thyra::MultiVectorFileIOBase` is an interface for strategy objects that can read and write (multi)vectors to and from files in a very abstract way.
• `Thyra::MultiVectorRandomizerBase` is an interface for strategy objects that can produce random vectors and multi-vectors.
• `Teuchos::PolynomialTraits` is a concrete traits class that is used in the `Thyra::ModelEvaluator` interface.