33#ifndef MADNESS_LINALG_CBLAS_H__INCLUDED 
   34#define MADNESS_LINALG_CBLAS_H__INCLUDED 
   50#if defined(FORTRAN_LINKAGE_LC) || (defined(HAVE_INTEL_MKL) && defined(MKL_DIRECT_CALL)) 
   52#   define F77_SGEMM sgemm 
   53#   define F77_DGEMM dgemm 
   54#   define F77_CGEMM cgemm 
   55#   define F77_ZGEMM zgemm 
   57#   define F77_SCGEMM scgemm 
   58#   define F77_DZGEMM dzgemm 
   60#   define F77_SGEMV sgemv 
   61#   define F77_DGEMV dgemv 
   62#   define F77_CGEMV cgemv 
   63#   define F77_ZGEMV zgemv 
   64#   define F77_SSCAL sscal 
   65#   define F77_DSCAL dscal 
   66#   define F77_CSCAL cscal 
   67#   define F77_ZSCAL zscal 
   68#   define F77_CSSCAL csscal 
   69#   define F77_ZDSCAL zdscal 
   72#   define F77_CDOTU cdotu 
   73#   define F77_ZDOTU zdotu 
   74#   define F77_SAXPY saxpy 
   75#   define F77_DAXPY daxpy 
   76#   define F77_CAXPY caxpy 
   77#   define F77_ZAXPY zaxpy 
   79#elif defined(FORTRAN_LINKAGE_LCU) 
   81#   define F77_SGEMM sgemm_ 
   82#   define F77_DGEMM dgemm_ 
   83#   define F77_CGEMM cgemm_ 
   84#   define F77_ZGEMM zgemm_ 
   86#  define F77_SCGEMM scgemm_ 
   87#  define F77_DZGEMM dzgemm_ 
   89#   define F77_SGEMV sgemv_ 
   90#   define F77_DGEMV dgemv_ 
   91#   define F77_CGEMV cgemv_ 
   92#   define F77_ZGEMV zgemv_ 
   93#   define F77_SSCAL sscal_ 
   94#   define F77_DSCAL dscal_ 
   95#   define F77_CSCAL cscal_ 
   96#   define F77_ZSCAL zscal_ 
   97#   define F77_CSSCAL csscal_ 
   98#   define F77_ZDSCAL zdscal_ 
   99#   define F77_SDOT sdot_ 
  100#   define F77_DDOT ddot_ 
  101#   define F77_CDOTU cdotu_ 
  102#   define F77_ZDOTU zdotu_ 
  103#   define F77_SAXPY saxpy_ 
  104#   define F77_DAXPY daxpy_ 
  105#   define F77_CAXPY caxpy_ 
  106#   define F77_ZAXPY zaxpy_ 
  108#elif defined(FORTRAN_LINKAGE_LCUU) 
  110#   define F77_SGEMM  sgemm__ 
  111#   define F77_DGEMM  dgemm__ 
  112#   define F77_CGEMM  cgemm__ 
  113#   define F77_ZGEMM  zgemm__ 
  115#   define F77_SCGEMM scgemm__ 
  116#   define F77_DZGEMM dzgemm__ 
  118#   define F77_SGEMV  sgemv__ 
  119#   define F77_DGEMV  dgemv__ 
  120#   define F77_CGEMV  cgemv__ 
  121#   define F77_ZGEMV  zgemv__ 
  122#   define F77_SSCAL  sscal__ 
  123#   define F77_DSCAL  dscal__ 
  124#   define F77_CSCAL  cscal__ 
  125#   define F77_ZSCAL  zscal__ 
  126#   define F77_CSSCAL csscal__ 
  127#   define F77_ZDSCAL zdscal__ 
  128#   define F77_SDOT   sdot__ 
  129#   define F77_DDOT   ddot__ 
  130#   define F77_CDOTU  cdotu__ 
  131#   define F77_ZDOTU  zdotu__ 
  132#   define F77_SAXPY  saxpy__ 
  133#   define F77_DAXPY  daxpy__ 
  134#   define F77_CAXPY  caxpy__ 
  135#   define F77_ZAXPY  zaxpy__ 
  137#elif defined(FORTRAN_LINKAGE_UC) 
  139#   define F77_SGEMM  SGEMM 
  140#   define F77_DGEMM  DGEMM 
  141#   define F77_CGEMM  CGEMM 
  142#   define F77_ZGEMM  ZGEMM 
  144#   define F77_SCGEMM SCGEMM 
  145#   define F77_DZGEMM DZGEMM 
  147#   define F77_SGEMV  SGEMV 
  148#   define F77_DGEMV  DGEMV 
  149#   define F77_CGEMV  CGEMV 
  150#   define F77_ZGEMV  ZGEMV 
  151#   define F77_SSCAL  SSCAL 
  152#   define F77_DSCAL  DSCAL 
  153#   define F77_CSCAL  CSCAL 
  154#   define F77_ZSCAL  ZSCAL 
  155#   define F77_CSSCAL CSSCAL 
  156#   define F77_ZDSCAL ZDSCAL 
  157#   define F77_SDOT   SDOTU 
  158#   define F77_DDOT   DDOTU 
  159#   define F77_CDOTU  CDOTU 
  160#   define F77_ZDOTU  ZDOTU 
  161#   define F77_SAXPY  SAXPY 
  162#   define F77_DAXPY  DAXPY 
  163#   define F77_CAXPY  CAXPY 
  164#   define F77_ZAXPY  ZAXPY 
  166#elif defined(FORTRAN_LINKAGE_UCU) 
  168#   define F77_SGEMM  SGEMM_ 
  169#   define F77_DGEMM  DGEMM_ 
  170#   define F77_CGEMM  CGEMM_ 
  171#   define F77_ZGEMM  ZGEMM_ 
  173#   define F77_SCGEMM SCGEMM_ 
  174#   define F77_DZGEMM DZGEMM_ 
  176#   define F77_SGEMV  SGEMV_ 
  177#   define F77_DGEMV  DGEMV_ 
  178#   define F77_CGEMV  CGEMV_ 
  179#   define F77_ZGEMV  ZGEMV_ 
  180#   define F77_SSCAL  SSCAL_ 
  181#   define F77_DSCAL  DSCAL_ 
  182#   define F77_CSCAL  CSCAL_ 
  183#   define F77_ZSCAL  ZSCAL_ 
  184#   define F77_CSSCAL CSSCAL_ 
  185#   define F77_ZDSCAL ZDSCAL_ 
  186#   define F77_SDOT   SDOT_ 
  187#   define F77_DDOT   DDOTSUB_ 
  188#   define F77_CDOTU  CDOTU_ 
  189#   define F77_ZDOTU  ZDOTU_ 
  190#   define F77_SAXPY  SAXPY_ 
  191#   define F77_DAXPY  DAXPY_ 
  192#   define F77_CAXPY  CAXPY_ 
  193#   define F77_ZAXPY  ZAXPY_ 
  197#   error "cblas.h does not support the current Fortran symbol convention -- please, edit and check in the changes." 
  201#if defined(FORTRAN_LINKAGE_LC) 
  202#   define F77_SGER sger 
  203#   define F77_DGER dger 
  204#   define F77_CGER cger 
  205#   define F77_ZGER zger 
  206#elif defined(FORTRAN_LINKAGE_LCU) 
  207#   define F77_SGER sger_ 
  208#   define F77_DGER dger_ 
  209#   define F77_CGER cger_ 
  210#   define F77_ZGER zger_ 
  211#elif defined(FORTRAN_LINKAGE_LCUU) 
  212#   define F77_SGER   sger__ 
  213#   define F77_DGER   dger__ 
  214#   define F77_CGER   cger__ 
  215#   define F77_ZGER   zger__ 
  216#elif defined(FORTRAN_LINKAGE_UC) 
  217#   define F77_SGER   SGER 
  218#   define F77_DGER   DGER 
  219#   define F77_CGER   CGER 
  220#   define F77_ZGER   ZGER 
  221#elif defined(FORTRAN_LINKAGE_UCU) 
  222#   define F77_SGER   SGER_ 
  223#   define F77_DGER   DGER_ 
  224#   define F77_CGER   CGER_ 
  225#   define F77_ZGER   ZGER_ 
  228#   error "cblas.h does not support the current Fortran symbol convention -- please, edit and check in the changes." 
  248#ifndef MKL_DIRECT_CALL 
  255            const float*, 
const integer*, 
const float*, 
float*, 
const integer*);
 
  258            const double*, 
const integer*, 
const double*, 
double*, 
const integer*);
 
  269    void F77_SCGEMM(
const char*, 
const char*, 
const integer*, 
const integer*,
 
  273    void F77_DZGEMM(
const char*, 
const char*, 
const integer*, 
const integer*,
 
  282            const float*, 
float*, 
const integer*);
 
  285            const double*, 
double*, 
const integer*);
 
  305            const double *, 
const integer*);
 
  359        static const char *
op[] = { 
"n",
"t" };
 
  360        F77_SGEMM(
op[OpA], 
op[OpB], &
m, &n, &
k, &
alpha, 
a, &lda, 
b, &ldb, &
beta, 
c, &ldc);
 
 
  369        static const char *
op[] = { 
"n",
"t" };
 
  370        F77_DGEMM(
op[OpA], 
op[OpB], &
m, &n, &
k, &
alpha, 
a, &lda, 
b, &ldb, &
beta, 
c, &ldc);
 
 
  378      static const char *
op[] = {
"n", 
"t", 
"c"};
 
 
  389      static const char *
op[] = {
"n", 
"t", 
"c"};
 
 
  409        static const char *opT[] = { 
"t",
"n",
"c" }; 
 
  421                    c[i*ldc+j] = ctrans[j*n+i];
 
  428                    c[i*ldc+j] = 
beta*
c[i*ldc+j] + ctrans[j*n+i];
 
  439      static const char *
op[] = {
"n", 
"t", 
"c"};
 
  458        static const char *opT[] = { 
"t",
"n",
"c" }; 
 
  470                    c[i*ldc+j] = ctrans[j*n+i];
 
  477                    c[i*ldc+j] = 
beta*
c[i*ldc+j] + ctrans[j*n+i];
 
  488      static const char *
op[] = {
"n", 
"t", 
"c"};
 
  517       const float alpha, 
const float *
A, 
const integer lda, 
const float *x,
 
  521        static const char *
op[] = { 
"n",
"t" };
 
  522        F77_SGEMV(
op[OpA], &
m, &n, &
alpha, 
A, &lda, x, &incx, &
beta, y, &incy);
 
 
  526       const double alpha, 
const double *
A, 
const integer lda, 
const double *x,
 
  530        static const char *
op[] = { 
"n",
"t" };
 
  531        F77_DGEMV(
op[OpA], &
m, &n, &
alpha, 
A, &lda, x, &incx, &
beta, y, &incy);
 
 
  538      static const char *
op[] = {
"n", 
"t", 
"c"};
 
 
  548      static const char *
op[] = {
"n", 
"t", 
"c"};
 
 
  571        const float *x, 
const integer incx, 
const float *y, 
const integer incy,
 
 
  578        const double *x, 
const integer incx, 
const double *y, 
const integer incy,
 
 
  612        const float* y, 
const integer incy)
 
  614        return F77_SDOT(&n, x, &incx, y, &incy);
 
 
  618        const double* y, 
const integer incy)
 
  620        return F77_DDOT(&n, x, &incx, y, &incy);
 
 
  688                     float* y, 
const integer incy) {
 
 
  693                     double* y, 
const integer incy) {
 
 
void F77_SGEMV(const char *, const integer *, const integer *, const float *, const float *, const integer *, const float *, const integer *, const float *, float *, const integer *)
float F77_SDOT(const integer *, const float *, const integer *, const float *, const integer *)
void F77_CAXPY(const integer *, const complex_real4 *, const complex_real4 *, const integer *, complex_real4 *, const integer *)
void F77_DGEMV(const char *, const integer *, const integer *, const double *, const double *, const integer *, const double *, const integer *, const double *, double *, const integer *)
void F77_SSCAL(const integer *, const float *, float *, const integer *)
void F77_SGEMM(const char *, const char *, const integer *, const integer *, const integer *, const float *, const float *, const integer *, const float *, const integer *, const float *, float *, const integer *)
void F77_ZGEMM(const char *, const char *, const integer *, const integer *, const integer *, const complex_real8 *, const complex_real8 *, const integer *, const complex_real8 *, const integer *, const complex_real8 *, complex_real8 *, const integer *)
void F77_ZGER(const integer *, const integer *, const complex_real8 *, const complex_real8 *, const integer *, const complex_real8 *, const integer *, complex_real8 *, const integer *)
void F77_DGEMM(const char *, const char *, const integer *, const integer *, const integer *, const double *, const double *, const integer *, const double *, const integer *, const double *, double *, const integer *)
void F77_ZDOTU(complex_real8 *, const integer *, const complex_real8 *, const integer *, const complex_real8 *, const integer *)
void F77_CDOTU(complex_real4 *, const integer *, const complex_real4 *, const integer *, const complex_real4 *, const integer *)
void F77_SGER(const integer *, const integer *, const float *, const float *, const integer *, const float *, const integer *, float *, const integer *)
void F77_ZSCAL(const integer *, const complex_real8 *, complex_real8 *, const integer *)
void F77_CSSCAL(const integer *, const float *, complex_real4 *, const integer *)
void F77_SAXPY(const integer *, const float *, const float *, const integer *, float *, const integer *)
void F77_DGER(const integer *, const integer *, const double *, const double *, const integer *, const double *, const integer *, double *, const integer *)
double F77_DDOT(const integer *, const double *, const integer *, const double *, const integer *)
void F77_ZDSCAL(const integer *, const double *, complex_real8 *, const integer *)
void F77_CGEMV(const char *, const integer *, const integer *, const complex_real4 *, const complex_real4 *, const integer *, const complex_real4 *, const integer *, const complex_real4 *, complex_real4 *, const integer *)
void F77_DAXPY(const integer *, const double *, const double *, const integer *, double *, const integer *)
void F77_ZAXPY(const integer *, const complex_real8 *, const complex_real8 *, const integer *, complex_real8 *, const integer *)
void F77_DSCAL(const integer *, const double *, double *, const integer *)
void F77_CSCAL(const integer *, const complex_real4 *, complex_real4 *, const integer *)
void F77_CGEMM(const char *, const char *, const integer *, const integer *, const integer *, const complex_real4 *, const complex_real4 *, const integer *, const complex_real4 *, const integer *, const complex_real4 *, complex_real4 *, const integer *)
void F77_CGER(const integer *, const integer *, const complex_real4 *, const complex_real4 *, const integer *, const complex_real4 *, const integer *, complex_real4 *, const integer *)
void F77_ZGEMV(const char *, const integer *, const integer *, const complex_real8 *, const complex_real8 *, const integer *, const complex_real8 *, const integer *, const complex_real8 *, complex_real8 *, const integer *)
Define types used by CBLAS API.
Definition test_ar.cc:118
int integer
Definition crayio.c:25
Correspondence between C++ and Fortran types.
std::complex< double > complex_real8
Fortran double complex.
Definition fortran_ctypes.h:83
std::complex< float > complex_real4
Fortran single complex.
Definition fortran_ctypes.h:88
double real8
Fortran double precision.
Definition fortran_ctypes.h:73
float real4
Fortran single precision.
Definition fortran_ctypes.h:78
const double beta
Definition gygi_soltion.cc:62
Tensor< double > op(const Tensor< double > &x)
Definition kain.cc:508
Macros and tools pertaining to the configuration of MADNESS.
#define MADNESS_PRAGMA_CLANG(x)
Definition madness_config.h:200
#define MADNESS_PRAGMA_GCC(x)
Definition madness_config.h:205
Defines madness::MadnessException for exception handling.
#define MADNESS_ASSERT(condition)
Assert a condition that should be free of side-effects since in release builds this might be a no-op.
Definition madness_exception.h:134
void gemv(const CBLAS_TRANSPOSE OpA, const integer m, const integer n, const float alpha, const float *A, const integer lda, const float *x, const integer incx, const float beta, float *y, const integer incy)
Multiplies a matrix by a vector.
Definition cblas.h:516
const blas_complex_double * to_zptr(const T *ptr)
Definition cblas_types.h:99
void ger(const integer m, const integer n, const float alpha, const float *x, const integer incx, const float *y, const integer incy, float *A, const integer lda)
Multiplies vector  by the transform of vector .
Definition cblas.h:570
const blas_complex_float * to_cptr(const T *ptr)
Definition cblas_types.h:86
void scal(const integer n, const float alpha, float *x, const integer incx)
Scale a vector.
Definition cblas.h:650
float dot(const integer n, const float *x, const integer incx, const float *y, const integer incy)
Compute the dot product of vectors  and .
Definition cblas.h:611
void axpy(const integer n, const float alpha, float *x, const integer incx, float *y, const integer incy)
Scale and add a vector to another.
Definition cblas.h:687
void gemm(const CBLAS_TRANSPOSE OpA, const CBLAS_TRANSPOSE OpB, const integer m, const integer n, const integer k, const float alpha, const float *a, const integer lda, const float *b, const integer ldb, const float beta, float *c, const integer ldc)
Multiplies a matrix by a vector.
Definition cblas.h:352
CBLAS_TRANSPOSE
Matrix operations for BLAS function calls.
Definition cblas_types.h:77
@ ConjTrans
Definition cblas_types.h:80
Namespace for all elements and tools of MADNESS.
Definition DFParameters.h:10
static const double b
Definition nonlinschro.cc:119
static const double a
Definition nonlinschro.cc:118
static const double c
Definition relops.cc:10
static const double m
Definition relops.cc:9
static const long k
Definition rk.cc:44
static const double alpha
Definition testcosine.cc:10