10#ifndef THYRA_EXAMPLE_TRIDIAG_SERIAL_LINEAR_OP_HPP 
   11#define THYRA_EXAMPLE_TRIDIAG_SERIAL_LINEAR_OP_HPP 
   13#include "Thyra_LinearOpDefaultBase.hpp" 
   14#include "Thyra_DefaultSpmdVectorSpace.hpp" 
   15#include "Thyra_DetachedVectorView.hpp" 
   16#include "Teuchos_Assert.hpp" 
   91      space_ = Thyra::defaultSpmdVectorSpace<Scalar>(dim);
 
 
 
  132template<
class Scalar>
 
  145  const Ordinal dim = space_->dim();
 
  149  const Ordinal m = X_in.
domain()->dim();
 
  151  for (Ordinal col_j = 0; col_j < m; ++col_j) {
 
  161    if( beta == ST::zero() ) {
 
  162      for( Ordinal k = 0; k < dim; ++k ) y[k] = ST::zero();
 
  164    else if( beta != ST::one() ) {
 
  165      for( Ordinal k = 0; k < dim; ++k ) y[k] *= beta;
 
  171      y[k] += alpha * ( diag_[k]*x[k] + upper_[k]*x[k+1] );  
 
  172      for( k = 1; k < dim - 1; ++k )   
 
  173        y[k] += alpha * ( lower_[k-1]*x[k-1] + diag_[k]*x[k] + upper_[k]*x[k+1] );
 
  174      y[k] += alpha * ( lower_[k-1]*x[k-1] + diag_[k]*x[k] ); 
 
  177      y[k] += alpha * ( ST::conjugate(diag_[k])*x[k] + ST::conjugate(upper_[k])*x[k+1] );
 
  178      for( k = 1; k < dim - 1; ++k )
 
  179        y[k] += alpha * ( ST::conjugate(lower_[k-1])*x[k-1]
 
  180          + ST::conjugate(diag_[k])*x[k] + ST::conjugate(upper_[k])*x[k+1] );
 
  181      y[k] += alpha * ( ST::conjugate(lower_[k-1])*x[k-1] + ST::conjugate(diag_[k])*x[k] );
 
  184      y[k] += alpha * ( diag_[k]*x[k] + lower_[k]*x[k+1] );
 
  185      for( k = 1; k < dim - 1; ++k )
 
  186        y[k] += alpha * ( upper_[k-1]*x[k-1] + diag_[k]*x[k] + lower_[k]*x[k+1] );
 
  187      y[k] += alpha * ( upper_[k-1]*x[k-1] + diag_[k]*x[k] );
 
  190      y[k] += alpha * ( ST::conjugate(diag_[k])*x[k] + ST::conjugate(lower_[k])*x[k+1] );
 
  191      for( k = 1; k < dim - 1; ++k )
 
  192        y[k] += alpha * ( ST::conjugate(upper_[k-1])*x[k-1]
 
  193          + ST::conjugate(diag_[k])*x[k] + ST::conjugate(lower_[k])*x[k+1] );
 
  194      y[k] += alpha * ( ST::conjugate(upper_[k-1])*x[k-1] + ST::conjugate(diag_[k])*x[k] );
 
 
Simple example subclass for serial tridiagonal matrices.
 
ExampleTridiagSerialLinearOp()
Construct to uninitialized.
 
bool opSupportedImpl(Thyra::EOpTransp M_trans) const
 
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > domain() const
 
void initialize(const Thyra::Ordinal dim, const Teuchos::ArrayView< const Scalar > &lower, const Teuchos::ArrayView< const Scalar > &diag, const Teuchos::ArrayView< const Scalar > &upper)
 
Teuchos::RCP< const Thyra::VectorSpaceBase< Scalar > > range() const
 
ExampleTridiagSerialLinearOp(const Thyra::Ordinal dim, const Teuchos::ArrayView< const Scalar > &lower, const Teuchos::ArrayView< const Scalar > &diag, const Teuchos::ArrayView< const Scalar > &upper)
initialize().
 
void applyImpl(const Thyra::EOpTransp M_trans, const Thyra::MultiVectorBase< Scalar > &X_in, const Teuchos::Ptr< Thyra::MultiVectorBase< Scalar > > &Y_inout, const Scalar alpha, const Scalar beta) const
 
const ArrayRCP< const Scalar > values() const
 
const ArrayRCP< Scalar > values() const
 
Create an explicit non-mutable (const) view of a VectorBase object.
 
const RTOpPack::ConstSubVectorView< Scalar > & sv() const
Returns the explicit view as an RTOpPack::ConstSubVectorView<Scalar> object.
 
Create an explicit mutable (non-const) view of a VectorBase object.
 
const RTOpPack::SubVectorView< Scalar > & sv() const
Returns the explicit view as an RTOpPack::ConstSubVectorView<Scalar> object.
 
virtual RCP< const VectorSpaceBase< Scalar > > domain() const =0
Return a smart pointer for the domain space for this operator.
 
Node subclass that provides a good default implementation for the describe() function.
 
Interface for a collection of column vectors called a multi-vector.
 
RCP< const VectorBase< Scalar > > col(Ordinal j) const
Calls colImpl().
 
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
 
EOpTransp
Enumeration for determining how a linear operator is applied. `*.
 
Teuchos::Ordinal Ordinal
Type for the dimension of a vector space. `*.
 
@ TRANS
Use the transposed operator.
 
@ NOTRANS
Use the non-transposed operator.
 
@ CONJTRANS
Use the transposed operator with complex-conjugate clements (same as TRANS for real scalar types).
 
@ CONJ
Use the non-transposed operator with complex-conjugate elements (same as NOTRANS for real scalar type...