void DefaultZeroLinearOp<Scalar>::applyImpl( const EOpTransp M_trans, const MultiVectorBase<Scalar> &X, const Ptr<MultiVectorBase<Scalar> > &Y, const Scalar alpha, const Scalar beta ) const { #ifdef TEUCHOS_DEBUG THYRA_ASSERT_LINEAR_OP_MULTIVEC_APPLY_SPACES( "DefaultZeroLinearOp<Scalar>::apply(...)", *this, M_trans, X, &*Y ); #endif // TEUCHOS_DEBUG scale(beta, Y); }
void DefaultDiagonalLinearOp<Scalar>::applyImpl( const EOpTransp M_trans, const MultiVectorBase<Scalar> &X, const Ptr<MultiVectorBase<Scalar> > &Y, const Scalar alpha, const Scalar beta ) const { typedef Teuchos::ScalarTraits<Scalar> ST; #ifdef TEUCHOS_DEBUG THYRA_ASSERT_LINEAR_OP_MULTIVEC_APPLY_SPACES( "DefaultDiagonalLinearOp<Scalar>::apply(...)",*this, M_trans, X, &*Y ); #endif // TEUCHOS_DEBUG // Y = beta * Y if( beta != ST::one() ) scale<Scalar>(beta, Y); // Y += alpha *op(M) * X const Ordinal m = X.domain()->dim(); for (Ordinal col_j = 0; col_j < m; ++col_j) { const RCP<const VectorBase<Scalar> > x = X.col(col_j); const RCP<VectorBase<Scalar> > y = Y->col(col_j); if (ST::isComplex) { if ( M_trans==NOTRANS || M_trans==TRANS ) { ele_wise_prod( alpha, *diag_.getConstObj(), *x, y.ptr() ); } else { ele_wise_conj_prod( alpha, *diag_.getConstObj(), *x, y.ptr() ); } } else { ele_wise_prod( alpha, *diag_.getConstObj(), *x, y.ptr() ); } } }