19 #if defined (INTEL_CXML) 
   27 #if defined (INTEL_CXML) 
   28 #define CHAR_MACRO(char_var) &char_var, one 
   30 #define CHAR_MACRO(char_var) &char_var 
   53 template<
typename Scalar>
 
   54 Scalar generic_dot(
const int& 
n, 
const Scalar* x, 
const int& incx,
 
   55   const Scalar* y, 
const int& incy)
 
   59   if (incx==1 && incy==1) {
 
   60     for (
int i = 0; i < 
n; ++i)
 
   61       dot += (*x++)*ST::conjugate(*y++);
 
   68     for (
int i = 0; i < 
n; ++i, x+=incx, y+=incy)
 
   69       dot += (*x)*ST::conjugate(*y);
 
   83 #  ifdef HAVE_TEUCHOS_COMPLEX 
   84      template class BLAS<long int, std::complex<float> >;
 
   85      template class BLAS<long int, std::complex<double> >;
 
   87      template class BLAS<long int, float>;
 
   88      template class BLAS<long int, double>;
 
   96   void BLAS<int, float>::ROT(
const int& n, 
float* dx, 
const int& incx, 
float* dy, 
const int& incy, 
float* c, 
float* s)
 const 
   97   { 
SROT_F77(&n, dx, &incx, dy, &incy, c, s); }
 
  102 #if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX) 
  103     return cblas_sasum(n, x, incx);
 
  104 #elif defined(HAVE_TEUCHOS_BLASFLOAT) 
  111       for (
int i = 0; i < 
n; ++i)
 
  112         sum += ST::magnitude(*x++);
 
  115       for (
int i = 0; i < 
n; ++i, x+=incx)
 
  116         sum += ST::magnitude(*x);
 
  122   void BLAS<int, float>::AXPY(
const int& n, 
const float& alpha, 
const float* x, 
const int& incx, 
float* y, 
const int& incy)
 const 
  123   { 
SAXPY_F77(&n, &alpha, x, &incx, y, &incy); }
 
  130 #if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX) 
  131     return cblas_sdot(n, x, incx, y, incy);
 
  132 #elif defined(HAVE_TEUCHOS_BLASFLOAT) 
  133     return SDOT_F77(&n, x, &incx, y, &incy);
 
  135     return generic_dot(n, x, incx, y, incy);
 
  144 #if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX) 
  145     return cblas_snrm2(n, x, incx);
 
  146 #elif defined(HAVE_TEUCHOS_BLASFLOAT) 
  156   void BLAS<int, float>::GEMV(
ETransp trans, 
const int& m, 
const int& n, 
const float& alpha, 
const float* 
A, 
const int& lda, 
const float* x, 
const int& incx, 
const float& beta, 
float* y, 
const int& incy)
 const 
  157   { 
SGEMV_F77(
CHAR_MACRO(
ETranspChar[trans]), &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy); }
 
  159   void BLAS<int, float>::GER(
const int& m, 
const int& n, 
const float& alpha, 
const float* x, 
const int& incx, 
const float* y, 
const int& incy, 
float* 
A, 
const int& lda)
 const 
  160   { 
SGER_F77(&m, &n, &alpha, x, &incx, y, &incy, A, &lda); }
 
  165   void BLAS<int, float>::GEMM(
ETransp transa, 
ETransp transb, 
const int& m, 
const int& n, 
const int& k, 
const float& alpha, 
const float* 
A, 
const int& lda, 
const float* 
B, 
const int& ldb, 
const float& beta, 
float* 
C, 
const int& ldc)
 const 
  166   { 
SGEMM_F77(
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
ETranspChar[transb]), &m, &n, &k, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); }
 
  173   void BLAS<int, float>::SYMM(
ESide side, 
EUplo uplo, 
const int& m, 
const int& n, 
const float& alpha, 
const float* 
A, 
const int& lda, 
const float* 
B, 
const int& ldb, 
const float& beta, 
float* 
C, 
const int& ldc)
 const 
  174   { 
SSYMM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), &m, &n, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); }
 
  176   void BLAS<int, float>::SYRK(
EUplo uplo, 
ETransp trans, 
const int& n, 
const int& k, 
const float& alpha, 
const float* 
A, 
const int& lda, 
const float& beta, 
float* 
C, 
const int& ldc)
 const 
  179   void BLAS<int, float>::HERK(
EUplo uplo, 
ETransp trans, 
const int& n, 
const int& k, 
const float& alpha, 
const float* 
A, 
const int& lda, 
const float& beta, 
float* 
C, 
const int& ldc)
 const 
  182   void BLAS<int, float>::TRMM(
ESide side, 
EUplo uplo, 
ETransp transa, 
EDiag diag, 
const int& m, 
const int& n, 
const float& alpha, 
const float* 
A, 
const int& lda, 
float* 
B, 
const int& ldb)
 const 
  183   { 
STRMM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), 
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
EDiagChar[diag]), &m, &n, &alpha, A, &lda, B, &ldb); }
 
  185   void BLAS<int, float>::TRSM(
ESide side, 
EUplo uplo, 
ETransp transa, 
EDiag diag, 
const int& m, 
const int& n, 
const float& alpha, 
const float* 
A, 
const int& lda, 
float* 
B, 
const int& ldb)
 const 
  186   { 
STRSM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), 
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
EDiagChar[diag]), &m, &n, &alpha, A, &lda, B, &ldb); }
 
  193   void BLAS<int, double>::ROT(
const int& n, 
double* dx, 
const int& incx, 
double* dy, 
const int& incy, 
double* c, 
double* s)
 const 
  194   { 
DROT_F77(&n, dx, &incx, dy, &incy, c, s); }
 
  199   void BLAS<int, double>::AXPY(
const int& n, 
const double& alpha, 
const double* x, 
const int& incx, 
double* y, 
const int& incy)
 const 
  200   { 
DAXPY_F77(&n, &alpha, x, &incx, y, &incy); }
 
  207     return DDOT_F77(&n, x, &incx, y, &incy);
 
  219   void BLAS<int, double>::GEMV(
ETransp trans, 
const int& m, 
const int& n, 
const double& alpha, 
const double* 
A, 
const int& lda, 
const double* x, 
const int& incx, 
const double& beta, 
double* y, 
const int& incy)
 const 
  220   { 
DGEMV_F77(
CHAR_MACRO(
ETranspChar[trans]), &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy); }
 
  222   void BLAS<int, double>::GER(
const int& m, 
const int& n, 
const double& alpha, 
const double* x, 
const int& incx, 
const double* y, 
const int& incy, 
double* 
A, 
const int& lda)
 const 
  223   { 
DGER_F77(&m, &n, &alpha, x, &incx, y, &incy, A, &lda); }
 
  228   void BLAS<int, double>::GEMM(
ETransp transa, 
ETransp transb, 
const int& m, 
const int& n, 
const int& k, 
const double& alpha, 
const double* 
A, 
const int& lda, 
const double* 
B, 
const int& ldb, 
const double& beta, 
double* 
C, 
const int& ldc)
 const 
  229   { 
DGEMM_F77(
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
ETranspChar[transb]), &m, &n, &k, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); }
 
  236   void BLAS<int, double>::SYMM(
ESide side, 
EUplo uplo, 
const int& m, 
const int& n, 
const double& alpha, 
const double* 
A, 
const int& lda, 
const double* 
B, 
const int& ldb, 
const double& beta, 
double* 
C, 
const int& ldc)
 const 
  237   { 
DSYMM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), &m, &n, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); }
 
  239   void BLAS<int, double>::SYRK(
EUplo uplo, 
ETransp trans, 
const int& n, 
const int& k, 
const double& alpha, 
const double* 
A, 
const int& lda, 
const double& beta, 
double* 
C, 
const int& ldc)
 const 
  242   void BLAS<int, double>::HERK(
EUplo uplo, 
ETransp trans, 
const int& n, 
const int& k, 
const double& alpha, 
const double* 
A, 
const int& lda, 
const double& beta, 
double* 
C, 
const int& ldc)
 const 
  245   void BLAS<int, double>::TRMM(
ESide side, 
EUplo uplo, 
ETransp transa, 
EDiag diag, 
const int& m, 
const int& n, 
const double& alpha, 
const double* 
A, 
const int& lda, 
double* 
B, 
const int& ldb)
 const 
  246   { 
DTRMM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), 
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
EDiagChar[diag]), &m, &n, &alpha, A, &lda, B, &ldb); }
 
  248   void BLAS<int, double>::TRSM(
ESide side, 
EUplo uplo, 
ETransp transa, 
EDiag diag, 
const int& m, 
const int& n, 
const double& alpha, 
const double* 
A, 
const int& lda, 
double* 
B, 
const int& ldb)
 const 
  249   { 
DTRSM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), 
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
EDiagChar[diag]), &m, &n, &alpha, A, &lda, B, &ldb); }
 
  251 #ifdef HAVE_TEUCHOS_COMPLEX 
  256   { CROTG_F77(da, db, c, s ); }
 
  258   void BLAS<int, std::complex<float> >::ROT(
const int& n, std::complex<float>* dx, 
const int& incx, std::complex<float>* dy, 
const int& incy, 
float* c, std::complex<float>* s)
 const 
  259   { CROT_F77(&n, dx, &incx, dy, &incy, c, s); }
 
  261   float BLAS<int, std::complex<float> >::ASUM(
const int& n, 
const std::complex<float>* x, 
const int& incx)
 const 
  263 #if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX) 
  264     return cblas_scasum(n, x, incx);
 
  265 #elif defined(HAVE_TEUCHOS_BLASFLOAT_DOUBLE_RETURN) 
  266     return (
float) SCASUM_F77(&n, x, &incx);
 
  267 #elif defined(HAVE_TEUCHOS_BLASFLOAT) 
  268     return SCASUM_F77(&n, x, &incx);
 
  269 #else // Wow, you just plain don't have this routine. 
  274       for (
int i = 0; i < 
n; ++i) {
 
  275         result += std::abs (std::real (x[i])) + std::abs (std::imag (x[i]));
 
  278       const int nincx = n * incx;
 
  279       for (
int i = 0; i < nincx; i += incx) {
 
  280         result += std::abs (std::real (x[i])) + std::abs (std::imag (x[i]));
 
  283     return static_cast<float> (result);
 
  287   void BLAS<int, std::complex<float> >::AXPY(
const int& n, 
const std::complex<float> alpha, 
const std::complex<float>* x, 
const int& incx, std::complex<float>* y, 
const int& incy)
 const 
  288   { CAXPY_F77(&n, &alpha, x, &incx, y, &incy); }
 
  290   void BLAS<int, std::complex<float> >::COPY(
const int& n, 
const std::complex<float>* x, 
const int& incx, std::complex<float>* y, 
const int& incy)
 const 
  291   { CCOPY_F77(&n, x, &incx, y, &incy); }
 
  293   std::complex<float> BLAS<int, std::complex<float> >::DOT(
const int& n, 
const std::complex<float>* x, 
const int& incx, 
const std::complex<float>* y, 
const int& incy)
 const 
  295 #if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX) 
  296     std::complex<float> z;
 
  297     cblas_cdotc_sub(n,x,incx,y,incy,&z);
 
  299 #elif defined(HAVE_COMPLEX_BLAS_PROBLEM) && defined(HAVE_FIXABLE_COMPLEX_BLAS_PROBLEM) 
  300     std::complex<float> z;
 
  301     CDOT_F77(&z, &n, x, &incx, y, &incy);
 
  303 #elif defined(HAVE_TEUCHOS_BLASFLOAT) 
  305     return TEUCHOS_BLAS_CONVERT_COMPLEX_FORTRAN_TO_CXX(
float, z);
 
  306 #else // Wow, you just plain don't have this routine. 
  309     std::complex<double> result (0, 0);
 
  311       if (incx == 1 && incy == 1) {
 
  312         for (
int i = 0; i < 
n; ++i) {
 
  313           result += std::conj (x[i]) * y[i];
 
  324         for (
int i = 0; i < 
n; ++i) {
 
  325           result += std::conj (x[ix]) * y[iy];
 
  331     return static_cast<std::complex<float> 
> (result);
 
  335   int BLAS<int, std::complex<float> >::IAMAX(
const int& n, 
const std::complex<float>* x, 
const int& incx)
 const 
  336   { 
return ICAMAX_F77(&n, x, &incx); }
 
  338   float BLAS<int, std::complex<float> >::NRM2(
const int& n, 
const std::complex<float>* x, 
const int& incx)
 const 
  340 #if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX) 
  341     return cblas_scnrm2(n, x, incx);
 
  342 #elif defined(HAVE_TEUCHOS_BLASFLOAT_DOUBLE_RETURN) 
  343     return (
float) SCNRM2_F77(&n, x, &incx);
 
  344 #elif defined(HAVE_TEUCHOS_BLASFLOAT) 
  345     return SCNRM2_F77(&n, x, &incx);
 
  346 #else // Wow, you just plain don't have this routine. 
  349     if (n < 1 || incx < 1) {
 
  355       const int upper = 1 + (n-1)*incx;
 
  356       for (
int ix = 0; ix < upper; ix += incx) {
 
  361         if (std::real (x[ix]) != 0) {
 
  362           const double temp = std::abs (std::real (x[ix]));
 
  364             const double scale_over_temp = scale / temp;
 
  365             ssq = 1 + ssq * scale_over_temp*scale_over_temp;
 
  369             const double temp_over_scale = temp / scale;
 
  370             ssq = ssq + temp_over_scale*temp_over_scale;
 
  373         if (std::imag (x[ix]) != 0) {
 
  374           const double temp = std::abs (std::imag (x[ix]));
 
  376             const double scale_over_temp = scale / temp;
 
  377             ssq = 1 + ssq * scale_over_temp*scale_over_temp;
 
  381             const double temp_over_scale = temp / scale;
 
  382             ssq = ssq + temp_over_scale*temp_over_scale;
 
  386       return static_cast<float> (scale * std::sqrt (ssq));
 
  391   void BLAS<int, std::complex<float> >::SCAL(
const int& n, 
const std::complex<float> alpha, std::complex<float>* x, 
const int& incx)
 const 
  392   { CSCAL_F77(&n, &alpha, x, &incx); }
 
  394   void BLAS<int, std::complex<float> >::GEMV(
ETransp trans, 
const int& m, 
const int& n, 
const std::complex<float> alpha, 
const std::complex<float>* 
A, 
const int& lda, 
const std::complex<float>* x, 
const int& incx, 
const std::complex<float> beta, std::complex<float>* y, 
const int& incy)
 const 
  395   { CGEMV_F77(
CHAR_MACRO(
ETranspChar[trans]), &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy); }
 
  397   void BLAS<int, std::complex<float> >::GER(
const int& m, 
const int& n, 
const std::complex<float> alpha, 
const std::complex<float>* x, 
const int& incx, 
const std::complex<float>* y, 
const int& incy, std::complex<float>* A, 
const int& lda)
 const 
  398   { CGER_F77(&m, &n, &alpha, x, &incx, y, &incy, A, &lda); }
 
  400   void BLAS<int, std::complex<float> >::TRMV(
EUplo uplo, 
ETransp trans, 
EDiag diag, 
const int& n, 
const std::complex<float>* A, 
const int& lda, std::complex<float>* x, 
const int& incx)
 const 
  403   void BLAS<int, std::complex<float> >::GEMM(
ETransp transa, 
ETransp transb, 
const int& m, 
const int& n, 
const int& k, 
const std::complex<float> alpha, 
const std::complex<float>* A, 
const int& lda, 
const std::complex<float>* 
B, 
const int& ldb, 
const std::complex<float> beta, std::complex<float>* 
C, 
const int& ldc)
 const 
  404   { CGEMM_F77(
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
ETranspChar[transb]), &m, &n, &k, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); }
 
  406   void BLAS<int, std::complex<float> >::SWAP(
const int& n, std::complex<float>* 
const x, 
const int& incx, std::complex<float>* 
const y, 
const int& incy)
 const 
  408     CSWAP_F77 (&n, x, &incx, y, &incy);
 
  411   void BLAS<int, std::complex<float> >::SYMM(
ESide side, 
EUplo uplo, 
const int& m, 
const int& n, 
const std::complex<float> alpha, 
const std::complex<float>* A, 
const int& lda, 
const std::complex<float>* B, 
const int& ldb, 
const std::complex<float> beta, std::complex<float>* C, 
const int& ldc)
 const 
  412   { CSYMM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), &m, &n, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); }
 
  414   void BLAS<int, std::complex<float> >::SYRK(
EUplo uplo, 
ETransp trans, 
const int& n, 
const int& k, 
const std::complex<float> alpha, 
const std::complex<float>* A, 
const int& lda, 
const std::complex<float> beta, std::complex<float>* C, 
const int& ldc)
 const 
  417   void BLAS<int, std::complex<float> >::HERK(
EUplo uplo, 
ETransp trans, 
const int& n, 
const int& k, 
const std::complex<float> alpha, 
const std::complex<float>* A, 
const int& lda, 
const std::complex<float> beta, std::complex<float>* C, 
const int& ldc)
 const 
  420   void BLAS<int, std::complex<float> >::TRMM(
ESide side, 
EUplo uplo, 
ETransp transa, 
EDiag diag, 
const int& m, 
const int& n, 
const std::complex<float> alpha, 
const std::complex<float>* A, 
const int& lda, std::complex<float>* B, 
const int& ldb)
 const 
  421   { CTRMM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), 
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
EDiagChar[diag]), &m, &n, &alpha, A, &lda, B, &ldb); }
 
  423   void BLAS<int, std::complex<float> >::TRSM(
ESide side, 
EUplo uplo, 
ETransp transa, 
EDiag diag, 
const int& m, 
const int& n, 
const std::complex<float> alpha, 
const std::complex<float>* A, 
const int& lda, std::complex<float>* B, 
const int& ldb)
 const 
  424   { CTRSM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), 
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
EDiagChar[diag]), &m, &n, &alpha, A, &lda, B, &ldb); }
 
  428   void BLAS<int, std::complex<double> >::ROTG(std::complex<double>* da, std::complex<double>* db, 
double* c, std::complex<double>* s)
 const 
  429   { ZROTG_F77(da, db, c, s); }
 
  431   void BLAS<int, std::complex<double> >::ROT(
const int& n, std::complex<double>* dx, 
const int& incx, std::complex<double>* dy, 
const int& incy, 
double* c, std::complex<double>* s)
 const 
  432   { ZROT_F77(&n, dx, &incx, dy, &incy, c, s); }
 
  434   double BLAS<int, std::complex<double> >::ASUM(
const int& n, 
const std::complex<double>* x, 
const int& incx)
 const 
  435   { 
return ZASUM_F77(&n, x, &incx); }
 
  437   void BLAS<int, std::complex<double> >::AXPY(
const int& n, 
const std::complex<double> alpha, 
const std::complex<double>* x, 
const int& incx, std::complex<double>* y, 
const int& incy)
 const 
  438   { ZAXPY_F77(&n, &alpha, x, &incx, y, &incy); }
 
  440   void BLAS<int, std::complex<double> >::COPY(
const int& n, 
const std::complex<double>* x, 
const int& incx, std::complex<double>* y, 
const int& incy)
 const 
  441   { ZCOPY_F77(&n, x, &incx, y, &incy); }
 
  443   std::complex<double> BLAS<int, std::complex<double> >::DOT(
const int& n, 
const std::complex<double>* x, 
const int& incx, 
const std::complex<double>* y, 
const int& incy)
 const 
  445 #if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX) 
  446     std::complex<double> z;
 
  447     cblas_zdotc_sub(n,x,incx,y,incy,&z);
 
  449 #elif defined(HAVE_COMPLEX_BLAS_PROBLEM) 
  450 #  if defined(HAVE_FIXABLE_COMPLEX_BLAS_PROBLEM) 
  451     std::complex<double> z;
 
  452     ZDOT_F77(&z, &n, x, &incx, y, &incy);
 
  458     std::complex<double> ztemp (0, 0);
 
  460       if (incx == 1 && incy == 1) {
 
  461         for (
int i = 0; i < 
n; ++i) {
 
  462           ztemp += std::conj (x[i]) * y[i];
 
  473         for (
int i = 0; i < 
n; ++i) {
 
  474           ztemp += std::conj (x[ix]) * y[iy];
 
  482 #  endif // defined(HAVE_FIXABLE_COMPLEX_BLAS_PROBLEM) 
  485     return TEUCHOS_BLAS_CONVERT_COMPLEX_FORTRAN_TO_CXX(
double, z);
 
  489   int BLAS<int, std::complex<double> >::IAMAX(
const int& n, 
const std::complex<double>* x, 
const int& incx)
 const 
  490   { 
return IZAMAX_F77(&n, x, &incx); }
 
  492   double BLAS<int, std::complex<double> >::NRM2(
const int& n, 
const std::complex<double>* x, 
const int& incx)
 const 
  493   { 
return ZNRM2_F77(&n, x, &incx); }
 
  495   void BLAS<int, std::complex<double> >::SCAL(
const int& n, 
const std::complex<double> alpha, std::complex<double>* x, 
const int& incx)
 const 
  496   { ZSCAL_F77(&n, &alpha, x, &incx); }
 
  498   void BLAS<int, std::complex<double> >::GEMV(
ETransp trans, 
const int& m, 
const int& n, 
const std::complex<double> alpha, 
const std::complex<double>* A, 
const int& lda, 
const std::complex<double>* x, 
const int& incx, 
const std::complex<double> beta, std::complex<double>* y, 
const int& incy)
 const 
  499   { ZGEMV_F77(
CHAR_MACRO(
ETranspChar[trans]), &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy); }
 
  501   void BLAS<int, std::complex<double> >::GER(
const int& m, 
const int& n, 
const std::complex<double> alpha, 
const std::complex<double>* x, 
const int& incx, 
const std::complex<double>* y, 
const int& incy, std::complex<double>* A, 
const int& lda)
 const 
  502   { ZGER_F77(&m, &n, &alpha, x, &incx, y, &incy, A, &lda); }
 
  504   void BLAS<int, std::complex<double> >::TRMV(
EUplo uplo, 
ETransp trans, 
EDiag diag, 
const int& n, 
const std::complex<double>* A, 
const int& lda, std::complex<double>* x, 
const int& incx)
 const 
  507   void BLAS<int, std::complex<double> >::GEMM(
ETransp transa, 
ETransp transb, 
const int& m, 
const int& n, 
const int& k, 
const std::complex<double> alpha, 
const std::complex<double>* A, 
const int& lda, 
const std::complex<double>* B, 
const int& ldb, 
const std::complex<double> beta, std::complex<double>* C, 
const int& ldc)
 const 
  508   { ZGEMM_F77(
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
ETranspChar[transb]), &m, &n, &k, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); }
 
  510   void BLAS<int, std::complex<double> >::SWAP(
const int& n, std::complex<double>* 
const x, 
const int& incx, std::complex<double>* 
const y, 
const int& incy)
 const 
  512     ZSWAP_F77 (&n, x, &incx, y, &incy);
 
  515   void BLAS<int, std::complex<double> >::SYMM(
ESide side, 
EUplo uplo, 
const int& m, 
const int& n, 
const std::complex<double> alpha, 
const std::complex<double>* A, 
const int& lda, 
const std::complex<double> *B, 
const int& ldb, 
const std::complex<double> beta, std::complex<double> *C, 
const int& ldc)
 const 
  516   { ZSYMM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), &m, &n, &alpha, A, &lda, B, &ldb, &beta, C, &ldc); }
 
  518   void BLAS<int, std::complex<double> >::SYRK(
EUplo uplo, 
ETransp trans, 
const int& n, 
const int& k, 
const std::complex<double> alpha, 
const std::complex<double>* A, 
const int& lda, 
const std::complex<double> beta, std::complex<double>* C, 
const int& ldc)
 const 
  521   void BLAS<int, std::complex<double> >::HERK(
EUplo uplo, 
ETransp trans, 
const int& n, 
const int& k, 
const std::complex<double> alpha, 
const std::complex<double>* A, 
const int& lda, 
const std::complex<double> beta, std::complex<double>* C, 
const int& ldc)
 const 
  524   void BLAS<int, std::complex<double> >::TRMM(
ESide side, 
EUplo uplo, 
ETransp transa, 
EDiag diag, 
const int& m, 
const int& n, 
const std::complex<double> alpha, 
const std::complex<double>* A, 
const int& lda, std::complex<double>* B, 
const int& ldb)
 const 
  525   { ZTRMM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), 
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
EDiagChar[diag]), &m, &n, &alpha, A, &lda, B, &ldb); }
 
  527   void BLAS<int, std::complex<double> >::TRSM(
ESide side, 
EUplo uplo, 
ETransp transa, 
EDiag diag, 
const int& m, 
const int& n, 
const std::complex<double> alpha, 
const std::complex<double>* A, 
const int& lda, std::complex<double>* B, 
const int& ldb)
 const 
  528   { ZTRSM_F77(
CHAR_MACRO(
ESideChar[side]), 
CHAR_MACRO(
EUploChar[uplo]), 
CHAR_MACRO(
ETranspChar[transa]), 
CHAR_MACRO(
EDiagChar[diag]), &m, &n, &alpha, A, &lda, B, &ldb); }
 
  530 #endif // HAVE_TEUCHOS_COMPLEX 
void TRSM(ESide side, EUplo uplo, ETransp transa, EDiag diag, const OrdinalType &m, const OrdinalType &n, const alpha_type alpha, const A_type *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb) const 
Solves the matrix equations: op(A)*X=alpha*B or X*op(A)=alpha*B where X and B are m by n matrices...
void GER(const OrdinalType &m, const OrdinalType &n, const alpha_type alpha, const x_type *x, const OrdinalType &incx, const y_type *y, const OrdinalType &incy, ScalarType *A, const OrdinalType &lda) const 
Performs the rank 1 operation: A <- alpha*x*y'+A. 
#define Teuchos_Complex_double_type_name
void AXPY(const OrdinalType &n, const alpha_type alpha, const x_type *x, const OrdinalType &incx, ScalarType *y, const OrdinalType &incy) const 
Perform the operation: y <- y+alpha*x. 
void PREFIX DTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n, const double *a, const int *lda, double *x, const int *incx)
void PREFIX DROTG_F77(double *da, double *db, double *c, double *s)
void TRMV(EUplo uplo, ETransp trans, EDiag diag, const OrdinalType &n, const A_type *A, const OrdinalType &lda, ScalarType *x, const OrdinalType &incx) const 
Performs the matrix-vector operation: x <- A*x or x <- A'*x where A is a unit/non-unit n by n upper/low...
void PREFIX DGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *n, const int *k, const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, const double *beta, double *c, const int *ldc)
void PREFIX DGEMV_F77(Teuchos_fcd, const int *m, const int *n, const double *alpha, const double A[], const int *lda, const double x[], const int *incx, const double *beta, double y[], const int *incy)
int PREFIX ISAMAX_F77(const int *n, const float *x, const int *incx)
Templated interface class to BLAS routines. 
void GEMV(ETransp trans, const OrdinalType &m, const OrdinalType &n, const alpha_type alpha, const A_type *A, const OrdinalType &lda, const x_type *x, const OrdinalType &incx, const beta_type beta, ScalarType *y, const OrdinalType &incy) const 
Performs the matrix-vector operation: y <- alpha*A*x+beta*y or y <- alpha*A'*x+beta*y where A is a gene...
void ROT(const OrdinalType &n, ScalarType *dx, const OrdinalType &incx, ScalarType *dy, const OrdinalType &incy, MagnitudeType *c, ScalarType *s) const 
Applies a Givens plane rotation. 
void PREFIX DROT_F77(const int *n, double *dx, const int *incx, double *dy, const int *incy, double *c, double *s)
void PREFIX SGEMV_F77(Teuchos_fcd, const int *m, const int *n, const float *alpha, const float A[], const int *lda, const float x[], const int *incx, const float *beta, float y[], const int *incy)
void PREFIX SCOPY_F77(const int *n, const float *x, const int *incx, float *y, const int *incy)
static T squareroot(T x)
Returns a number of magnitudeType that is the square root of this scalar type x. 
void PREFIX SROTG_F77(float *da, float *db, float *c, float *s)
#define Teuchos_Complex_float_type_name
void PREFIX DSCAL_F77(const int *n, const double *alpha, double *x, const int *incx)
void PREFIX DSWAP_F77(const int *const n, double *const x, const int *const incx, double *const y, const int *const incy)
void PREFIX DSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int *k, const double *alpha, const double *a, const int *lda, const double *beta, double *c, const int *ldc)
void PREFIX SSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *n, const float *alpha, const float *a, const int *lda, const float *b, const int *ldb, const float *beta, float *c, const int *ldc)
ScalarTraits< ScalarType >::magnitudeType NRM2(const OrdinalType &n, const ScalarType *x, const OrdinalType &incx) const 
Compute the 2-norm of the vector x. 
OrdinalType IAMAX(const OrdinalType &n, const ScalarType *x, const OrdinalType &incx) const 
Return the index of the element of x with the maximum magnitude. 
void GEMM(ETransp transa, ETransp transb, const OrdinalType &m, const OrdinalType &n, const OrdinalType &k, const alpha_type alpha, const A_type *A, const OrdinalType &lda, const B_type *B, const OrdinalType &ldb, const beta_type beta, ScalarType *C, const OrdinalType &ldc) const 
General matrix-matrix multiply. 
double PREFIX DNRM2_F77(const int *n, const double x[], const int *incx)
The Templated BLAS wrappers. 
TEUCHOSNUMERICS_LIB_DLL_EXPORT const char EDiagChar[]
void PREFIX DAXPY_F77(const int *n, const double *alpha, const double x[], const int *incx, double y[], const int *incy)
This structure defines some basic traits for a scalar field type. 
ScalarTraits< ScalarType >::magnitudeType ASUM(const OrdinalType &n, const ScalarType *x, const OrdinalType &incx) const 
Sum the absolute values of the entries of x. 
void PREFIX SSWAP_F77(const int *const n, float *const x, const int *const incx, float *const y, const int *const incy)
void COPY(const OrdinalType &n, const ScalarType *x, const OrdinalType &incx, ScalarType *y, const OrdinalType &incy) const 
Copy the vector x to the vector y. 
void PREFIX SGER_F77(const int *m, const int *n, const float *alpha, const float *x, const int *incx, const float *y, const int *incy, float *a, const int *lda)
TEUCHOSNUMERICS_LIB_DLL_EXPORT const char EUploChar[]
void PREFIX DTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *m, const int *n, const double *alpha, const double *a, const int *lda, double *b, const int *ldb)
double PREFIX DASUM_F77(const int *n, const double x[], const int *incx)
void PREFIX SSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int *k, const float *alpha, const float *a, const int *lda, const float *beta, float *c, const int *ldc)
TEUCHOSNUMERICS_LIB_DLL_EXPORT const char ETypeChar[]
ScalarType DOT(const OrdinalType &n, const x_type *x, const OrdinalType &incx, const y_type *y, const OrdinalType &incy) const 
Form the dot product of the vectors x and y. 
void PREFIX STRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n, const float *a, const int *lda, float *x, const int *incx)
void PREFIX SSCAL_F77(const int *n, const float *alpha, float *x, const int *incx)
TEUCHOSNUMERICS_LIB_DLL_EXPORT const char ESideChar[]
int PREFIX IDAMAX_F77(const int *n, const double *x, const int *incx)
void PREFIX SGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *n, const int *k, const float *alpha, const float *a, const int *lda, const float *b, const int *ldb, const float *beta, float *c, const int *ldc)
#define CHAR_MACRO(char_var)
void SYMM(ESide side, EUplo uplo, const OrdinalType &m, const OrdinalType &n, const alpha_type alpha, const A_type *A, const OrdinalType &lda, const B_type *B, const OrdinalType &ldb, const beta_type beta, ScalarType *C, const OrdinalType &ldc) const 
Performs the matrix-matrix operation: C <- alpha*A*B+beta*C or C <- alpha*B*A+beta*C where A is an m ...
void TRMM(ESide side, EUplo uplo, ETransp transa, EDiag diag, const OrdinalType &m, const OrdinalType &n, const alpha_type alpha, const A_type *A, const OrdinalType &lda, ScalarType *B, const OrdinalType &ldb) const 
Performs the matrix-matrix operation: B <- alpha*op(A)*B or B <- alpha*B*op(A) where op(A) is an unit...
void SCAL(const OrdinalType &n, const ScalarType &alpha, ScalarType *x, const OrdinalType &incx) const 
Scale the vector x by the constant alpha. 
void ROTG(ScalarType *da, ScalarType *db, rotg_c_type *c, ScalarType *s) const 
Computes a Givens plane rotation. 
void PREFIX SAXPY_F77(const int *n, const float *alpha, const float x[], const int *incx, float y[], const int *incy)
TEUCHOSNUMERICS_LIB_DLL_EXPORT const char ETranspChar[]
void SYRK(EUplo uplo, ETransp trans, const OrdinalType &n, const OrdinalType &k, const alpha_type alpha, const A_type *A, const OrdinalType &lda, const beta_type beta, ScalarType *C, const OrdinalType &ldc) const 
Performs the symmetric rank k operation: C <- alpha*A*A'+beta*C or C <- alpha*A'*A+beta*C, where alpha and beta are scalars, C is an n by n symmetric matrix and A is an n by k matrix in the first case or k by n matrix in the second case. 
void PREFIX STRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *m, const int *n, const float *alpha, const float *a, const int *lda, float *b, const int *ldb)
void PREFIX DTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *m, const int *n, const double *alpha, const double *a, const int *lda, double *b, const int *ldb)
void PREFIX SROT_F77(const int *n, float *dx, const int *incx, float *dy, const int *incy, float *c, float *s)
void PREFIX STRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *m, const int *n, const float *alpha, const float *a, const int *lda, float *b, const int *ldb)
void PREFIX DGER_F77(const int *m, const int *n, const double *alpha, const double *x, const int *incx, const double *y, const int *incy, double *a, const int *lda)
void PREFIX DCOPY_F77(const int *n, const double *x, const int *incx, double *y, const int *incy)
double PREFIX DDOT_F77(const int *n, const double x[], const int *incx, const double y[], const int *incy)
void SWAP(const OrdinalType &n, ScalarType *const x, const OrdinalType &incx, ScalarType *const y, const OrdinalType &incy) const 
Swap the entries of x and y. 
void PREFIX DSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *n, const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, const double *beta, double *c, const int *ldc)