void LinAlgOpPack::Vp_StPtMtV( DVectorSlice* y, value_type a ,const GenPermMatrixSlice& P, BLAS_Cpp::Transp P_trans ,const MatrixOp& M, BLAS_Cpp::Transp M_trans ,const DVectorSlice& x, value_type b ) { namespace mmp = MemMngPack; using BLAS_Cpp::no_trans; using AbstractLinAlgPack::VectorMutableDense; using AbstractLinAlgPack::VectorDenseMutableEncap; using AbstractLinAlgPack::Vp_StPtMtV; VectorSpace::space_ptr_t ay_space = ( M_trans == no_trans ? M.space_cols() : M.space_rows() ).space(P,P_trans); VectorSpace::vec_mut_ptr_t ay = ( ay_space.get() ? ay_space->create_member() : Teuchos::rcp_implicit_cast<VectorMutable>( Teuchos::rcp(new VectorMutableDense(BLAS_Cpp::rows(P.rows(),P.cols(),P_trans))) ) ), ax = ( M_trans == no_trans ? M.space_rows() : M.space_cols() ).create_member(); (VectorDenseMutableEncap(*ay))() = *y; (VectorDenseMutableEncap(*ax))() = x; Vp_StPtMtV( ay.get(), a, P, P_trans, M, M_trans, *ax, b ); *y = VectorDenseMutableEncap(*ay)(); }
void LinAlgOpPack::Vp_StPtMtV( DVectorSlice* y, value_type a ,const GenPermMatrixSlice& P, BLAS_Cpp::Transp P_trans ,const MatrixOp& M, BLAS_Cpp::Transp M_trans ,const SpVectorSlice& x, value_type b ) { using BLAS_Cpp::no_trans; using AbstractLinAlgPack::VectorMutableDense; using AbstractLinAlgPack::VectorDenseMutableEncap; using AbstractLinAlgPack::Vp_StPtMtV; VectorSpace::vec_mut_ptr_t ay = ( M_trans == no_trans ? M.space_cols() : M.space_rows() ).space(P,P_trans)->create_member(); (VectorDenseMutableEncap(*ay))() = *y; Vp_StPtMtV( ay.get(), a, P, P_trans, M, M_trans, x, b ); *y = VectorDenseMutableEncap(*ay)(); }