In order for abstract numerical algorithms (ANAs) developed with Thyra or accessed using Thyra to be useful, concrete implementations of the Thyra operator/vector fundamental interfaces must be provided. However, because of a number of convenient C++ subclasses described here, a developer of such implementation subclasses does not really need to understand much at all about the philosophy or details behind the fundamental Thyra interfaces in order to provide implementations for the most common use cases. More...
|Miscellaneous Support Code for Developing Thyra Operator/Vector Subclass Implementations|
This is some basic C++ code to support the development of Thyra subclass implementations.
|Basic Support Subclasses Abstracting Application-Specific Scalar Products|
The 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.
|Thyra Operator/Vector Subclasses for SPMD Distributed-Memory Platforms|
The package Thyra includes subclasses for common serial and SPMD vector spaces, vectors, and multi-vectors which are described here.
In order for abstract numerical algorithms (ANAs) developed with Thyra or accessed using Thyra to be useful, concrete implementations of the Thyra operator/vector fundamental interfaces must be provided. However, because of a number of convenient C++ subclasses described here, a developer of such implementation subclasses does not really need to understand much at all about the philosophy or details behind the fundamental Thyra interfaces in order to provide implementations for the most common use cases.
One of the main motivations behind the design of the Thyra operator/vector fundamental 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 Thyra operator/vector fundamental 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::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::MultiVectorBase subclasses and instead should only need to develop concrete
Thyra::LinearOpBase subclass(es) by deriving from
Thyra::SpmdLinearOpBase for serial and SPMD platforms. As described below, general yet efficient implementations of concrete
Thyra::MultiVectorBase subclasses for serial and 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.
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.
Support subclasses for specific types of computing platforms
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 Thyra operator/vector fundamental 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 and 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 SPMD subclasses for vector spaces, vectors, and multi-vectors as well as a support class for creating concrete SPMD linear operator implementations. All of these classes are based on a small abstract communication layer
Teuchos::Comm and is independent of MPI or any other concrete interprocess communication protocol.