VectorSpaceBaseclass for all SPMD-based vector spaces. More...
Inheritance diagram for Thyra::SpmdVectorSpaceBase< Scalar >:
Pure virtual methods to be overridden by subclasses
|virtual Teuchos::RCP< const |
Teuchos::Comm< Ordinal > >
|getComm () const =0|
|Returns the SPMD communicator. |
|virtual Ordinal||localSubDim () const =0|
|Returns the number of local elements stored on this process. |
|virtual Ordinal||localOffset () const =0|
|Returns the offset for the local sub-vector stored on this process. |
|virtual Ordinal||mapCode () const =0|
|Returns the code for the mapping of elements to processes. |
VectorSpaceBaseclass for all SPMD-based vector spaces.
This interface defines a basic mechanism for the interoperability of SPMD
MultiVectorBase objects. See the base classes
SpmdMultiVectorBase to demonstrate how this interface is used to achieve universal interoperability of vector and multi-vector objects.
Specifically, these classes are designed to handle three different use case:
localSubDim()==dim(). In this case, the
localSubDim() < dim(). This implementation assumes that all of the elements are stored contiguously in each process and that there are no ghost elements as described below.
localSubDim()==dim()even if there is more than one process. This case is checked for so that the reduction operations are performed correctly.
This interface provides all the information necessary to implement the
SpmdMultiVectorBase::applyOp() functions in all of the above described use cases. This interface returns an SPMD communicator (of which all compatible vector spaces must have the same communicator obviously) through the method
VectorBase data layout:
For the case of a distributed parallel vector, this interface base class assumes that vector data is partitioned to processes in contiguous chunks of dense subvectors. To spell this out, let
v be the local vector that is sorted on this process and let
g be the global vector. Then these two vectors are related (using zero-based indexing) as:
v(k) == g(this->localOffset() + k), for k = 0...this->localSubDim()-1
Any type of mapping of vector data to processes that can not be interpreted in this way can not rely on this base class for interoperability. Note that as long as the elements in a process are partitioned to unique processes and no ghost elements are present, the actual indexes used by the application with these vectors is immaterial. The indexes associated with this set of interfaces, however, are only meaningful to abstract numerical algorithms and provide an arbitrary label for certain types of coordinate-dependent operations (like required in an active-set method for optimization). Therefore, as long as the underlying vector represents a unique partitioning of elements, these classes can be used. There is a default implementation of
localOffset() that automatically assumes this contiguous mapping of elements to processes and in general this should not be changed.
Notes to subclass developers:
The pure virtual methods
localSubDim() declared in this interface along with the pure virtual methods
createMember() are the only methods that must be overridden.
this this is in an uninitialized state then
localSubDim() should return
If optimized implementations of multi-vectors can be supported, then the
createMembers() method should also be overridden.
Definition at line 119 of file Thyra_SpmdVectorSpaceBase_decl.hpp.
|virtual Teuchos::RCP<const Teuchos::Comm<Ordinal> > Thyra::SpmdVectorSpaceBase< Scalar >::getComm||(||)|| const
Returns the SPMD communicator.
Implemented in Thyra::DefaultSpmdVectorSpace< Scalar >.
|virtual Ordinal Thyra::SpmdVectorSpaceBase< Scalar >::localSubDim||(||)|| const
|virtual Ordinal Thyra::SpmdVectorSpaceBase< Scalar >::localOffset||(||)|| const
Returns the offset for the local sub-vector stored on this process.
Implemented in Thyra::SpmdVectorSpaceDefaultBase< Scalar >.
|virtual Ordinal Thyra::SpmdVectorSpaceBase< Scalar >::mapCode||(||)|| const