Modules | |
| group | Miscellaneous Support Code for Developing Thyra Operator/Vector Subclass Implementations |
| This is some basic C++ code to support the development of Thyra subclass implementations. | |
| group | Basic Support Subclasses Abstracting Application-Specific Scalar Products |
| The Foundational Thyra Operator/Vector Interfaces define an interface for providing ANAs with the functionality they need concerning application-specific scalar products without concern for how such scalar products are implemented or how such scalar products relate to the implementation of vectors, multi-vectors or linear operators. While this is most straightforward for clients of these interfaces, it is not the most convenient for subclass implementation developers. The first level of basic subclasses for supporting the development of concrete Thyra operator/vector implementations involves separating out the definition of the scalar product from the basic vector and multi-vector data structures and the factory methods for creating them. The base subclasses for supporting application-defined scalar products are shown in the UML class diagram below. | |
| group | Thyra Operator/Vector Subclasses for Serial Shared-Memory Platforms |
| The package Thyra includes subclasses for common serial shared-memory vector spaces, vectors and multi-vectors which are described here. | |
| group | Thyra Operator/Vector Subclasses for MPI-based SPMD Distributed-Memory Platforms |
| The package Thyra includes subclasses for common MPI-based SPMD vector spaces, vectors, and multi-vectors which are described here. | |
Classes | |
| class | Thyra::MultiVectorDefaultBase< Scalar > |
Node subclass that uses a default MultiVectorBase implementation to provide default implementations for as many other functions in MultiVectorBase interface the as is reasonable. More... | |
| class | Thyra::VectorDefaultBase< Scalar > |
Convenient node subclass for concrete VectorBase subclasses that relies on a default MultiVectorBase implementation. More... | |
| class | Thyra::VectorSpaceDefaultBase< Scalar > |
Node VectorSpaceBase subclass that provides default implementations for many functions using a default multi-vectors implementation. More... | |
One of the main motivations behind the design of the Foundational Thyra Operator/Vector Interfaces is the uniform support for many different computing environments such as serial shared-memory (i.e. SMP) and a variety of distributed-memory models (e.g. SPMD (single program, multiple data), client-server, master-slave and client-server/master-slave). While this is the case, the overwhelming majority of concrete implementations of these types will be in more typical SMP serial shared-memory or SPMD distributed-memory environments. Because of this, the Trilinos package Thyra contains a set of base subclasses that makes the development of concrete vector space, vector, multi-vector and linear operator subclasses as easy as possible. However, the Foundational Thyra Operator/Vector Interfaces allow for almost limitless possibilities with respect to the types of implementations so it is not reasonable to provide pre-packaged support for all of the possibilities.
Heads Up! In case you think you will have to develop your own concrete Thyra::VectorSpaceBase, Thyra::VectorBase or Thyra::MultiVectorBase subclasses in addition to whatever Thyra::LinearOpBase subclasses that you need for you application, you are probably wrong! You most likely will not need to create any concrete Thyra::VectorSpaceBase, Thyra::VectorBase or Thyra::MultiVectorBase subclasses and instead should only need to develop concrete Thyra::LinearOpBase subclass(es) by deriving from Thyra::SerialLinearOpBase for serial platforms or Thyra::MPILinearOpBase for MPI SPMD platforms. As described below, general yet efficient implementations of concrete Thyra::VectorSpaceBase, Thyra::VectorBase and Thyra::MultiVectorBase subclasses for serial and MPI SPMD platforms are already available.
Next, we provide a description of the various types of support code for creating concrete implementations as well as concrete implementations that are available. Just browse the categories that you are interested in.
The following subclasses directly derive from Foundational Thyra Operator/Vector Interfaces and provide general default implementations for as many virtual functions as reasonable:
Thyra::VectorSpaceDefaultBase should be a direct or indirect base class of almost every Thyra::VectorSpaceBase subclass. This node subclass provides the default implementation Thyra::VectorSpaceDefaultBase::createMembers() using Thyra::MultiVectorCols. Therefore, a subclass need only provide a VectorBase implementation and override Thyra::VectorSpaceBase::createMember() and related functions.
Thyra::MultiVectorDefaultBase should be a direct or indirect base class of almost every Thyra::MultiVectorBase subclass. This node subclass provides a default of every inherited virtual function from the base class Thyra::MultiVectorBase in terms of just Thyra::MultiVectorBase::col(). While many of these default function implementations are highly non-optimal, the none the less allow for rapid prototyping of new Thyra::MultiVectorBase subclasses.
Thyra::VectorDefaultBase should be a direct or indirect base class of almost every Thyra::VectorBase subclass. This node subclass provides full general and efficient implementations of all of the inherited virtual functions from the base class Thyra::MultiVectorBase.
Click here if you want to know about high-level support subclasses for separating out the definition of the scalar product from the data structures and factory methods for specific computing platforms. All of the concrete Thyra implementation subclasses outlined below derive from and use these base interfaces. However, knowing the details of these base interfaces is not critical for developing concrete implementations in most situations unless application-defined scalar products are needed. The Euclidean scalar product is used automatically by default and if that is all you need then you can ignore these base classes.
Below we outline support code contained in the Thyra package for different categories of computing platforms.
Note! Before attempting to create your own concrete subclasses of the Foundational Thyra Operator/Vector Interfaces please browse the links below so that you know what support is already available. In many cases, most of the concrete implementation software that you need for Thyra is already provided.
Click here if you want to know about support for developing Thyra subclass implementations for serial shared-memory platforms. Since these are the most commonly used computing platforms by applied mathematicians and academic researchers, these subclasses should be the most commonly used by this group. Note that the above link also describes very general and efficient concrete serial subclasses for vector spaces, vectors and multi-vectors as well as a support class for creating concrete linear operator implementations.
Click here if you want to know about support for developing Thyra subclass implementations for SPMD distributed-memory platforms. These platforms are most commonly used in large-scale scientific computing. Note that the above link also describes very general and efficient concrete MPI SPMD subclasses for vector spaces, vectors, and multi-vectors as well as a support class for creating concrete SPMD linear operator implementations.
1.3.9.1