MatrixOp non-member functions that call virtual functions.


Level-1 BLAS

void AbstractLinAlgPack::Mt_S (MatrixOp *m_lhs, value_type alpha)
void AbstractLinAlgPack::Mp_StM (MatrixOp *mwo_lhs, value_type alpha, const MatrixOp &M_rhs, BLAS_Cpp::Transp trans_rhs)
void AbstractLinAlgPack::Mp_StMtP (MatrixOp *mwo_lhs, value_type alpha,const MatrixOp &M_rhs, BLAS_Cpp::Transp M_trans,const GenPermMatrixSlice &P_rhs, BLAS_Cpp::Transp P_rhs_trans)
 mwo_lhs += alpha * op(M_rhs) * op(P_rhs).
void AbstractLinAlgPack::Mp_StPtM (MatrixOp *mwo_lhs, value_type alpha,const GenPermMatrixSlice &P_rhs, BLAS_Cpp::Transp P_rhs_trans,const MatrixOp &M_rhs, BLAS_Cpp::Transp M_trans)
 mwo_lhs += alpha * op(P) * op(M_rhs).
void AbstractLinAlgPack::Mp_StPtMtP (MatrixOp *mwo_lhs, value_type alpha,const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans,const MatrixOp &M_rhs, BLAS_Cpp::Transp trans_rhs,const GenPermMatrixSlice &P_rhs2, BLAS_Cpp::Transp P_rhs2_trans)
 mwo_lhs += alpha * op(P_rhs1) * op(M_rhs) * op(P_rhs2).

Level-2 BLAS

void AbstractLinAlgPack::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)
 
void AbstractLinAlgPack::Vp_StMtV (VectorMutable *v_lhs, value_type alpha, const MatrixOp &M_rhs1, BLAS_Cpp::Transp trans_rhs1, const SpVectorSlice &sv_rhs2, value_type beta=1.0)
 
void AbstractLinAlgPack::Vp_StPtMtV (VectorMutable *v_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, const MatrixOp &M_rhs2, BLAS_Cpp::Transp M_rhs2_trans, const Vector &v_rhs3, value_type beta=1.0)
 
void AbstractLinAlgPack::Vp_StPtMtV (VectorMutable *v_lhs, value_type alpha, const GenPermMatrixSlice &P_rhs1, BLAS_Cpp::Transp P_rhs1_trans, const MatrixOp &M_rhs2, BLAS_Cpp::Transp M_rhs2_trans, const SpVectorSlice &sv_rhs3, value_type beta=1.0)
 
value_type AbstractLinAlgPack::transVtMtV (const Vector &v_rhs1, const MatrixOp &M_rhs2, BLAS_Cpp::Transp trans_rhs2, const Vector &v_rhs3)
 
value_type AbstractLinAlgPack::transVtMtV (const SpVectorSlice &sv_rhs1, const MatrixOp &M_rhs2, BLAS_Cpp::Transp trans_rhs2, const SpVectorSlice &sv_rhs3)
 
void AbstractLinAlgPack::syr2k (const MatrixOp &M, BLAS_Cpp::Transp M_trans, value_type alpha, const GenPermMatrixSlice &P1, BLAS_Cpp::Transp P1_trans, const GenPermMatrixSlice &P2, BLAS_Cpp::Transp P2_trans, value_type beta, MatrixSymOp *symwo_lhs)
 

Level-3 BLAS

void AbstractLinAlgPack::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 AbstractLinAlgPack::syrk (const MatrixOp &mwo_rhs,BLAS_Cpp::Transp M_trans,value_type alpha,value_type beta,MatrixSymOp *sym_lhs)
 Perform a rank-k update of a symmetric matrix of the form:.

Detailed Description

These allow nonmember functions to act like virtual functions. If any of these methods on the subclasses are not implemented for a particular set of matrix arguments, then the exception AbstractLinAlgPack::MatrixOp::MethodNotImplemented is thrown. This will not happen as long as a compatible (vector spaces are compatible) lhs matrix argument is passed in and dynamic_cast<MultiVectorMatrix*>(lhs) != NULL.

Function Documentation

void AbstractLinAlgPack::Mt_S ( MatrixOp *  mwo_lhs,
value_type  alpha 
)

mwo_lhs *= alpha.

If alpha == 0.0 then mwo_lhs->zero_out() will be called, otherwise mwo_lhs->Mt_S(alpha) will be called. If alpha == 1.0 then nothing is done.

Definition at line 425 of file AbstractLinAlgPack_MatrixOp.cpp.

void AbstractLinAlgPack::Mp_StM ( MatrixOp *  mwo_lhs,
value_type  alpha,
const MatrixOp &  M_rhs,
BLAS_Cpp::Transp  trans_rhs 
)

mwo_lhs += alpha * op(M_rhs) (BLAS xAXPY).

Entry point for (poor man's) multiple dispatch.

This method first calls M_rhs->Mp_StM(mwo_lhs,alpha,trans_rhs) to give the rhs argument a chance to implement the operation. If M_rhs->Mp_StM(...) returns false, then mwo_lhs->Mp_StM(alpha,*this,trans_rhs) is called to give the lhs matrix argument a chance to implement the method. If mwo_lhs->Mp_StM(...) returns false, then an attempt to perform a dynamic cast the lhs matrix argument to MultiVectorMutable is attempted. If this cast failes, then an exception is thrown.

Definition at line 433 of file AbstractLinAlgPack_MatrixOp.cpp.

void AbstractLinAlgPack::Mp_StMtP ( MatrixOp *  mwo_lhs,
value_type  alpha,
const MatrixOp &  M_rhs,
BLAS_Cpp::Transp  M_trans,
const GenPermMatrixSlice &  P_rhs,
BLAS_Cpp::Transp  P_rhs_trans 
)

mwo_lhs += alpha * op(M_rhs) * op(P_rhs).

Entry point for (poor man's) multiple dispatch.

ToDo: Finish documentation!

Definition at line 480 of file AbstractLinAlgPack_MatrixOp.cpp.

void AbstractLinAlgPack::Mp_StPtM ( MatrixOp *  mwo_lhs,
value_type  alpha,
const GenPermMatrixSlice &  P_rhs,
BLAS_Cpp::Transp  P_rhs_trans,
const MatrixOp &  M_rhs,
BLAS_Cpp::Transp  M_trans 
)

mwo_lhs += alpha * op(P) * op(M_rhs).

Entry point for (poor man's) multiple dispatch.

ToDo: Finish documentation!

Definition at line 507 of file AbstractLinAlgPack_MatrixOp.cpp.

void AbstractLinAlgPack::Mp_StPtMtP ( MatrixOp *  mwo_lhs,
value_type  alpha,
const GenPermMatrixSlice &  P_rhs1,
BLAS_Cpp::Transp  P_rhs1_trans,
const MatrixOp &  M_rhs,
BLAS_Cpp::Transp  trans_rhs,
const GenPermMatrixSlice &  P_rhs2,
BLAS_Cpp::Transp  P_rhs2_trans 
)

mwo_lhs += alpha * op(P_rhs1) * op(M_rhs) * op(P_rhs2).

Entry point for (poor man's) multiple dispatch.

ToDo: Finish documentation!

Definition at line 535 of file AbstractLinAlgPack_MatrixOp.cpp.

void AbstractLinAlgPack::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 
) [inline]

Definition at line 844 of file AbstractLinAlgPack_MatrixOp.hpp.

void AbstractLinAlgPack::Vp_StMtV ( VectorMutable *  v_lhs,
value_type  alpha,
const MatrixOp &  M_rhs1,
BLAS_Cpp::Transp  trans_rhs1,
const SpVectorSlice &  sv_rhs2,
value_type  beta = 1.0 
) [inline]

Definition at line 853 of file AbstractLinAlgPack_MatrixOp.hpp.

void AbstractLinAlgPack::Vp_StPtMtV ( VectorMutable *  v_lhs,
value_type  alpha,
const GenPermMatrixSlice &  P_rhs1,
BLAS_Cpp::Transp  P_rhs1_trans,
const MatrixOp &  M_rhs2,
BLAS_Cpp::Transp  M_rhs2_trans,
const Vector &  v_rhs3,
value_type  beta = 1.0 
) [inline]

Definition at line 862 of file AbstractLinAlgPack_MatrixOp.hpp.

void AbstractLinAlgPack::Vp_StPtMtV ( VectorMutable *  v_lhs,
value_type  alpha,
const GenPermMatrixSlice &  P_rhs1,
BLAS_Cpp::Transp  P_rhs1_trans,
const MatrixOp &  M_rhs2,
BLAS_Cpp::Transp  M_rhs2_trans,
const SpVectorSlice &  sv_rhs3,
value_type  beta = 1.0 
) [inline]

Definition at line 873 of file AbstractLinAlgPack_MatrixOp.hpp.

value_type AbstractLinAlgPack::transVtMtV ( const Vector &  v_rhs1,
const MatrixOp &  M_rhs2,
BLAS_Cpp::Transp  trans_rhs2,
const Vector &  v_rhs3 
) [inline]

Definition at line 884 of file AbstractLinAlgPack_MatrixOp.hpp.

value_type AbstractLinAlgPack::transVtMtV ( const SpVectorSlice &  sv_rhs1,
const MatrixOp &  M_rhs2,
BLAS_Cpp::Transp  trans_rhs2,
const SpVectorSlice &  sv_rhs3 
) [inline]

Definition at line 893 of file AbstractLinAlgPack_MatrixOp.hpp.

void AbstractLinAlgPack::syr2k ( const MatrixOp &  M,
BLAS_Cpp::Transp  M_trans,
value_type  alpha,
const GenPermMatrixSlice &  P1,
BLAS_Cpp::Transp  P1_trans,
const GenPermMatrixSlice &  P2,
BLAS_Cpp::Transp  P2_trans,
value_type  beta,
MatrixSymOp *  symwo_lhs 
) [inline]

Definition at line 902 of file AbstractLinAlgPack_MatrixOp.hpp.

void AbstractLinAlgPack::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).

This method first calls mwo_rhs1.Mp_StMtM(...) to perform the opeation. If mwo_rhs1.Mp_StMtM(...) returns false, then mwo_rhs2.Mp_StMtM(...) is called. If mwo_rhs2.Mp_StMtM(...) returns false, then mwo_lhs.Mp_StMtM(...) is called.

As a last resort, the function attempts to cast dynamic_cast<MultiVectorMutable*>(mwo_lhs). If this dynamic cast fails, the this function throws an exception. Otherwise, the operation is implemented in terms of Vp_StMtV().

Definition at line 566 of file AbstractLinAlgPack_MatrixOp.cpp.

void AbstractLinAlgPack::syrk ( const MatrixOp &  mwo_rhs,
BLAS_Cpp::Transp  M_trans,
value_type  alpha,
value_type  beta,
MatrixSymOp *  sym_lhs 
)

Perform a rank-k update of a symmetric matrix of the form:.

symwo_lhs += alpha*op(mwo_rhs)*op(mwo_rhs') + beta*symwo_lhs

The default implementation returns false and does nothing.

Definition at line 618 of file AbstractLinAlgPack_MatrixOp.cpp.


Generated on Wed May 12 21:50:44 2010 for AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects by  doxygen 1.4.7