void MatrixZero::Vp_StMtV( VectorMutable* y, value_type alpha, BLAS_Cpp::Transp trans_rhs1 , const SpVectorSlice& x, value_type b) const { assert_initialized(); Vt_S(y,b); }
void MatrixZero::Vp_StMtV( VectorMutable* y, value_type a, BLAS_Cpp::Transp M_trans_in , const Vector& x, value_type b ) const { assert_initialized(); Vt_S(y,b); }
void MatrixZero::Vp_StPtMtV( VectorMutable* y, value_type alpha , const GenPermMatrixSlice& P_rhs1, BLAS_Cpp::Transp P_rhs1_trans , BLAS_Cpp::Transp M_rhs2_trans , const SpVectorSlice& x, value_type b) const { assert_initialized(); Vt_S(y,b); }
void MatrixSymIdent::Vp_StMtV( VectorMutable* y, value_type a, BLAS_Cpp::Transp M_trans ,const Vector& x, value_type b ) const { AbstractLinAlgPack::Vp_MtV_assert_compatibility( y, *this, BLAS_Cpp::no_trans, x ); Vt_S(y,b); Vp_StV(y,a*scale_,x); }
void MatrixSymDiagStd::Vp_StMtV( VectorMutable* v_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1 , const Vector& v_rhs2, value_type beta) const { // ToDo: Validate input! if(beta == 0.0) *v_lhs = 0.0; else if(beta != 1.0) Vt_S( v_lhs, beta ); ele_wise_prod( alpha, v_rhs2, *diag_, v_lhs ); }
bool MatrixSymDiagStd::syrk( BLAS_Cpp::Transp A_trans ,value_type a ,value_type b ,MatrixSymOp *B ) const { MatrixSymDiagStd *B_sd = dynamic_cast<MatrixSymDiagStd*>(B); if(!B_sd) return false; VectorMutable &B_diag = B_sd->diag(); const Vector &A_diag = this->diag(); // B = b*B + a*A*A Vt_S( &B_diag, b ); ele_wise_prod( 1.0, A_diag, A_diag, &B_diag ); // B.diag(i) += a * (A.diag)(i) * (A.diag)(i) return true; }