44 #include "AbstractLinAlgPack_LinAlgOpPackHack.hpp"
45 #include "AbstractLinAlgPack_COOMatrixPartitionViewSubclass.hpp"
46 #include "AbstractLinAlgPack_SparseVectorSliceOp.hpp"
47 #include "AbstractLinAlgPack_SparseElement.hpp"
48 #include "AbstractLinAlgPack_COOMPartitionOp.hpp"
49 #include "DenseLinAlgPack_DMatrixOp.hpp"
51 namespace LinAlgOpPack {
60 namespace AbstractLinAlgPack {
71 if(&m ==
this)
return *
this;
74 throw std::invalid_argument(
"COOMatrixPartitionViewSubclass::operator=(const MatrixOp& m)"
75 " : There is not an assignment operator defined for COOMatrixWithPartitionedView::partition_type"
76 ". Only assignment to self can be handeled" );
79 throw std::invalid_argument(
"COOMatrixPartitionViewSubclass::operator=(const MatrixOp& m)"
80 " : The concrete type of m is not a subclass of COOMatrixPartitionViewSubclass as expected" );
96 ,
BLAS_Cpp::Transp trans_rhs1,
const DVectorSlice& vs_rhs2, value_type beta)
const
102 ,
BLAS_Cpp::Transp trans_rhs1,
const SpVectorSlice& sv_rhs2, value_type beta)
const
113 LinAlgOpPack::V_MtV(&tmp,
m(),op(trans_rhs2),vs_rhs3);
123 LinAlgOpPack::V_MtV(&tmp,
m(),op(trans_rhs2),v_rhs3());
124 return dot(sv_rhs1,tmp());
value_type transVtMtV(const DVectorSlice &vs_rhs1, BLAS_Cpp::Transp trans_rhs2, const DVectorSlice &vs_rhs3) const
(4) result = vs_rhs1' * op(M_rhs2) * vs_rhs3
void Mp_StMtM(MatrixOp *mwo_lhs, value_type alpha, const MatrixOp &mwo_rhs1, BLAS_Cpp::Transp trans_rhs1, const MatrixOp &mwo_rhs2, BLAS_Cpp::Transp trans_rhs2, value_type beta=1.0)
mwo_lhs = alpha * op(mwo_rhs1) * op(mwo_rhs2) + beta * mwo_lhs (right) (xGEMM).
void Vp_StMtV(DVectorSlice *vs_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const DVectorSlice &vs_rhs2, value_type beta) const
(2) vs_lhs = alpha * op(M_rhs1) * vs_rhs2 + beta * vs_lhs (BLAS xGEMV)
void Vp_StV(VectorMutable *v_lhs, const value_type &alpha, const Vector &v_rhs)
v_lhs = alpha * v_rhs + v_lhs
void assign(VectorMutable *v_lhs, const V &V_rhs)
v_lhs = V_rhs.
M & m()
Get the underlying M object.
MatrixOp & operator=(const MatrixOp &m)
void Mp_StM(MatrixOp *mwo_lhs, value_type alpha, const MatrixOp &M_rhs, BLAS_Cpp::Transp trans_rhs)
void Vp_StMtV(VectorMutable *v_lhs, value_type alpha, const MatrixOp &M_rhs1, BLAS_Cpp::Transp trans_rhs1, const Vector &v_rhs2, value_type beta=1.0)
v_lhs = alpha * op(M_rhs1) * v_rhs2 + beta * v_lhs (BLAS xGEMV)
COOMatrixPartitionViewSubclass()
void Mp_StM(DMatrixSlice *gms_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs) const
(1) gms_lhs += alpha * op(M_rhs) (BLAS xAXPY)
value_type dot(const Vector &v_rhs1, const Vector &v_rhs2)
result = v_rhs1' * v_rhs2
void Mp_StMtM(DMatrixSlice *gms_lhs, value_type alpha, BLAS_Cpp::Transp trans_rhs1, const DMatrixSlice &gms_rhs2, BLAS_Cpp::Transp trans_rhs2, value_type beta) const
(6) gms_lhs = alpha * op(M_rhs1) * op(gms_rhs2) + beta * gms_lhs (right) (xGEMM)