ExampleTridiagSpmdLinearOp< Scalar > Class Template Reference
[Templated SPMD Implementation of the CG Method]

Simple example subclass for Spmd tridiagonal matrices. More...

#include <ExampleTridiagSpmdLinearOp.hpp>

Inheritance diagram for ExampleTridiagSpmdLinearOp< Scalar >:

[legend]
List of all members.

Public Member Functions

 ExampleTridiagSpmdLinearOp ()
 Construct to uninitialized.
 ExampleTridiagSpmdLinearOp (const Teuchos::RCP< const Teuchos::Comm< Thyra::Index > > &comm, const Thyra::Index localDim, const Scalar lower[], const Scalar diag[], const Scalar upper[])
 Calls initialize().
void initialize (const Teuchos::RCP< const Teuchos::Comm< Thyra::Index > > &comm, const Thyra::Index localDim, const Scalar lower[], const Scalar diag[], const Scalar upper[])
std::string description () const
 Default description that gives the label, type, and dimenstion .

Protected Member Functions

bool opSupported (Thyra::ETransp M_trans) const
 Return if the M_trans operation of apply() is supported or not.
void euclideanApply (const Thyra::ETransp M_trans, const RTOpPack::ConstSubVectorView< Scalar > &local_x_in, const RTOpPack::SubVectorView< Scalar > *local_y_out, const Scalar alpha, const Scalar beta) const
 Apply the operator to explicit vector data.

Detailed Description

template<class Scalar>
class ExampleTridiagSpmdLinearOp< Scalar >

Simple example subclass for Spmd tridiagonal matrices.

This subclass represents a linear operator for tridiagonal matrices of the global form:

\[ M= \left[\begin{array}{ccccc} d_{(1)} & u_{(1)} \\ l_{(1)} & d_{(2)} & u_{(2)} \\ & \ddots & \ddots & \ddots \\ & & l_{(n-2)} & d_{(n-1)} & u_{(n-1)} \\ & & & l_{(n-1)} & d_{(n)} \end{array}\right]. \]

If there is only $N = 1$ processes then the arrays lower[], diag[], and upper[] of dimension localDim-1, localDim and localDim-1 respectively are stored (see initialize()).

If there $N > 1$ processes then locally this class stores slightly different arrays of data depending on which process this is and process-to-process communication is required.

Note, this is just an example class and for the sake of simplified presentation the private members are listed first and in-class declarations are used which are not a good idea in production code. However, in this case, they make the example code easier to read and maintaining encapsulation and a well defined interface are unnecessary here.

See the source code for this simple example by clicking on the link to the definition below.

Examples:

ExampleTridiagSpmdLinearOp.hpp, and sillyCgSolve_mpi.cpp.

Definition at line 133 of file ExampleTridiagSpmdLinearOp.hpp.


Constructor & Destructor Documentation

template<class Scalar>
ExampleTridiagSpmdLinearOp< Scalar >::ExampleTridiagSpmdLinearOp (  )  [inline]

Construct to uninitialized.

Definition at line 152 of file ExampleTridiagSpmdLinearOp.hpp.

template<class Scalar>
ExampleTridiagSpmdLinearOp< Scalar >::ExampleTridiagSpmdLinearOp ( const Teuchos::RCP< const Teuchos::Comm< Thyra::Index > > &  comm,
const Thyra::Index  localDim,
const Scalar  lower[],
const Scalar  diag[],
const Scalar  upper[] 
) [inline]

Calls initialize().

Definition at line 155 of file ExampleTridiagSpmdLinearOp.hpp.


Member Function Documentation

template<class Scalar>
void ExampleTridiagSpmdLinearOp< Scalar >::initialize ( const Teuchos::RCP< const Teuchos::Comm< Thyra::Index > > &  comm,
const Thyra::Index  localDim,
const Scalar  lower[],
const Scalar  diag[],
const Scalar  upper[] 
) [inline]

Initialize given lower, diagonal and upper arrays of data.

Parameters:
comm [in] Communicator (allowed to be Teuchos::null)
localDim [in] Dimension of this matrix (must be >= 2).
lower [in] Array (length ( procRank == 0 ? localDim - 1 : localDim )) of the lower diagonal elements
diag [in] Array (length localDim) of the central diagonal elements
upper [in] Array (length ( procRank == numProc-1 ? localDim - 1 : localDim )) of the upper diagonal elements
Preconditions:

Postconditions:

Definition at line 179 of file ExampleTridiagSpmdLinearOp.hpp.

template<class Scalar>
std::string ExampleTridiagSpmdLinearOp< Scalar >::description (  )  const [inline, virtual]

Default description that gives the label, type, and dimenstion .

Reimplemented from Thyra::LinearOpDefaultBase< RangeScalar, DomainScalar >.

Definition at line 203 of file ExampleTridiagSpmdLinearOp.hpp.

template<class Scalar>
bool ExampleTridiagSpmdLinearOp< Scalar >::opSupported ( Thyra::ETransp  M_trans  )  const [inline, protected, virtual]

Return if the M_trans operation of apply() is supported or not.

Preconditions:

Note that an operator must support at least one of the values of ETrans (i.e. the transposed or the non-transposed operations must be supported, both can not be unsupported)

Implements Thyra::SingleScalarEuclideanLinearOpBase< Scalar >.

Definition at line 213 of file ExampleTridiagSpmdLinearOp.hpp.

template<class Scalar>
void ExampleTridiagSpmdLinearOp< Scalar >::euclideanApply ( const Thyra::ETransp  M_trans,
const RTOpPack::ConstSubVectorView< Scalar > &  local_x_in,
const RTOpPack::SubVectorView< Scalar > *  local_y_out,
const Scalar  alpha,
const Scalar  beta 
) const [inline, protected, virtual]

Apply the operator to explicit vector data.

See LinearOpBase::euclideanApply() for a discussion of the arguments to this function. What differentiates this function is that local_x and local_y are passed as objects with explicit pointers to local vector data.

Since this function is protected and does not get directly called by a client. Instead, this function is called by the vector version of euclideanApply().

Implements Thyra::SpmdLinearOpBase< Scalar >.

Definition at line 221 of file ExampleTridiagSpmdLinearOp.hpp.


The documentation for this class was generated from the following file:
Generated on Tue Oct 20 12:47:00 2009 for Thyra Operator/Vector Support by doxygen 1.4.7