BELFEM 0.9.0
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
fn_gemm.hpp File Reference

Matrix-matrix product C := alpha*op(A)*op(B) + beta*C (BLAS ?gemm). More...

#include "assert.hpp"
#include "lapacktools.hpp"
Include dependency graph for fn_gemm.hpp:

Go to the source code of this file.

Namespaces

namespace  belfem
 USER GUIDES:
namespace  belfem::lapack

Functions

void belfem::lapack::sgemm_ (char *transa, char *transb, int_t *m, int_t *n, int_t *k, float *alpha, float *a, int_t *lda, float *b, int_t *ldb, float *beta, float *c, int_t *ldc, fortran_charlen_t lta, fortran_charlen_t ltb)
void belfem::lapack::dgemm_ (char *transa, char *transb, int_t *m, int_t *n, int_t *k, double *alpha, double *a, int_t *lda, double *b, int_t *ldb, double *beta, double *c, int_t *ldc, fortran_charlen_t lta, fortran_charlen_t ltb)
void belfem::lapack::cgemm_ (char *transa, char *transb, int_t *m, int_t *n, int_t *k, cplx_float_t *alpha, cplx_float_t *a, int_t *lda, cplx_float_t *b, int_t *ldb, cplx_float_t *beta, cplx_float_t *c, int_t *ldc, fortran_charlen_t lta, fortran_charlen_t ltb)
void belfem::lapack::zgemm_ (char *transa, char *transb, int_t *m, int_t *n, int_t *k, cplx_double_t *alpha, cplx_double_t *a, int_t *lda, cplx_double_t *b, int_t *ldb, cplx_double_t *beta, cplx_double_t *c, int_t *ldc, fortran_charlen_t lta, fortran_charlen_t ltb)
template<typename T>
void belfem::lapack::gemm (const char *transa, const char *transb, const int_t *m, const int_t *n, const int_t *k, const T *alpha, const T *a, const int_t *lda, const T *b, const int_t *ldb, const T *beta, T *c, const int_t *ldc)
template<>
void belfem::lapack::gemm (const char *transa, const char *transb, const int_t *m, const int_t *n, const int_t *k, const float *alpha, const float *a, const int_t *lda, const float *b, const int_t *ldb, const float *beta, float *c, const int_t *ldc)
template<>
void belfem::lapack::gemm (const char *transa, const char *transb, const int_t *m, const int_t *n, const int_t *k, const double *alpha, const double *a, const int_t *lda, const double *b, const int_t *ldb, const double *beta, double *c, const int_t *ldc)
template<>
void belfem::lapack::gemm (const char *transa, const char *transb, const int_t *m, const int_t *n, const int_t *k, const std::complex< float > *alpha, const std::complex< float > *a, const int_t *lda, const std::complex< float > *b, const int_t *ldb, const std::complex< float > *beta, std::complex< float > *c, const int_t *ldc)
template<>
void belfem::lapack::gemm (const char *transa, const char *transb, const int_t *m, const int_t *n, const int_t *k, const std::complex< double > *alpha, const std::complex< double > *a, const int_t *lda, const std::complex< double > *b, const int_t *ldb, const std::complex< double > *beta, std::complex< double > *c, const int_t *ldc)
template<typename T>
void belfem::gemm (const Matrix< T > &A, const Matrix< T > &B, Matrix< T > &C, const T alpha=1.0, const T beta=0.0, const char transa='N', const char transb='N')
 matrix-matrix product C := alpha * op(A) * op(B) + beta * C via BLAS ?gemm, where op is the identity ( trans = 'N' ) or the ( conjugate ) transpose ( 'T' / 'C' )

Detailed Description

Matrix-matrix product C := alpha*op(A)*op(B) + beta*C (BLAS ?gemm).

Thin wrapper over the Fortran routine: BELFEM containers are passed straight through after their leading dimensions are worked out. Arguments are not copied – see each parameter for what is overwritten in place.