Teuchos - Trilinos Tools Package Version of the Day
Teuchos_BLAS_wrappers.hpp
Go to the documentation of this file.
00001 /*
00002 // @HEADER
00003 // ***********************************************************************
00004 //
00005 //                    Teuchos: Common Tools Package
00006 //                 Copyright (2004) Sandia Corporation
00007 //
00008 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00009 // license for use of this work by or on behalf of the U.S. Government.
00010 //
00011 // Redistribution and use in source and binary forms, with or without
00012 // modification, are permitted provided that the following conditions are
00013 // met:
00014 //
00015 // 1. Redistributions of source code must retain the above copyright
00016 // notice, this list of conditions and the following disclaimer.
00017 //
00018 // 2. Redistributions in binary form must reproduce the above copyright
00019 // notice, this list of conditions and the following disclaimer in the
00020 // documentation and/or other materials provided with the distribution.
00021 //
00022 // 3. Neither the name of the Corporation nor the names of the
00023 // contributors may be used to endorse or promote products derived from
00024 // this software without specific prior written permission.
00025 //
00026 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00027 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00028 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00029 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00030 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00031 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00032 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00033 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00034 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00035 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00036 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00037 //
00038 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
00039 //
00040 // ***********************************************************************
00041 // @HEADER
00042 */
00043 
00044 #ifndef _TEUCHOS_BLAS_WRAPPERS_HPP_
00045 #define _TEUCHOS_BLAS_WRAPPERS_HPP_
00046 
00047 #include "Teuchos_ConfigDefs.hpp"
00048 #ifdef _MSC_VER
00049 /* disable warning for C-linkage returning complex class */
00050 #pragma warning ( disable : 4190 )
00051 #endif
00052 
00058 /* A) Define PREFIX and Teuchos_fcd based on platform. */
00059 
00060 #if defined(INTEL_CXML)
00061 #  define PREFIX __stdcall
00062 #  define Teuchos_fcd const char *, unsigned int
00063 #elif defined(INTEL_MKL)
00064 #  define PREFIX
00065 #  define Teuchos_fcd const char *
00066 #else /* Not CRAY_T3X or INTEL_CXML or INTEL_MKL */
00067 #  define PREFIX
00068 #  define Teuchos_fcd const char *
00069 #endif
00070 
00071 
00072 /* B) Take care of of the link name case */
00073 
00074 
00075 #define DROTG_F77   F77_BLAS_MANGLE(drotg,DROTG)
00076 #define DROT_F77    F77_BLAS_MANGLE(drot,DROT)
00077 #define DASUM_F77   F77_BLAS_MANGLE(dasum,DASUM)
00078 #define DAXPY_F77   F77_BLAS_MANGLE(daxpy,DAXPY)
00079 #define DCOPY_F77   F77_BLAS_MANGLE(dcopy,DCOPY)
00080 #define DDOT_F77    F77_BLAS_MANGLE(ddot,DDOT)
00081 #define DNRM2_F77   F77_BLAS_MANGLE(dnrm2,DNRM2)
00082 #define DSCAL_F77   F77_BLAS_MANGLE(dscal,DSCAL)
00083 #define IDAMAX_F77  F77_BLAS_MANGLE(idamax,IDAMAX)
00084 #define DGEMV_F77   F77_BLAS_MANGLE(dgemv,DGEMV)
00085 #define DGER_F77    F77_BLAS_MANGLE(dger,DGER)
00086 #define DTRMV_F77   F77_BLAS_MANGLE(dtrmv,DTRMV)
00087 #define DGEMM_F77   F77_BLAS_MANGLE(dgemm,DGEMM)
00088 #define DSYMM_F77   F77_BLAS_MANGLE(dsymm,DSYMM)
00089 #define DSYRK_F77   F77_BLAS_MANGLE(dsyrk,DSYRK)
00090 #define DTRMM_F77   F77_BLAS_MANGLE(dtrmm,DTRMM)
00091 #define DTRSM_F77   F77_BLAS_MANGLE(dtrsm,DTRSM)
00092 
00093 #ifdef HAVE_TEUCHOS_COMPLEX
00094 
00095 #define ZROTG_F77   F77_BLAS_MANGLE(zrotg,ZROTG)
00096 #define ZROT_F77    F77_BLAS_MANGLE(zrot,ZROT)
00097 #define ZASUM_F77   F77_BLAS_MANGLE(dzasum,DZASUM)
00098 #define ZAXPY_F77   F77_BLAS_MANGLE(zaxpy,ZAXPY)
00099 #define ZCOPY_F77   F77_BLAS_MANGLE(zcopy,ZCOPY)
00100 #define ZDOT_F77    F77_BLAS_MANGLE(zdotc,ZDOTC)
00101 #define ZNRM2_F77   F77_BLAS_MANGLE(dznrm2,DZNRM2)
00102 #define ZSCAL_F77   F77_BLAS_MANGLE(zscal,ZSCAL)
00103 #define IZAMAX_F77  F77_BLAS_MANGLE(izamax,IZAMAX)
00104 #define ZGEMV_F77   F77_BLAS_MANGLE(zgemv,ZGEMV)
00105 #define ZGER_F77    F77_BLAS_MANGLE(zgeru,ZGERU)
00106 #define ZTRMV_F77   F77_BLAS_MANGLE(ztrmv,ZTRMV)
00107 #define ZGEMM_F77   F77_BLAS_MANGLE(zgemm,ZGEMM)
00108 #define ZSYMM_F77   F77_BLAS_MANGLE(zsymm,ZSYMM)
00109 #define ZSYRK_F77   F77_BLAS_MANGLE(zsyrk,ZSYRK)
00110 #define ZTRMM_F77   F77_BLAS_MANGLE(ztrmm,ZTRMM)
00111 #define ZTRSM_F77   F77_BLAS_MANGLE(ztrsm,ZTRSM)
00112 
00113 #endif /* HAVE_TEUCHOS_COMPLEX */
00114 
00115 #define SROTG_F77   F77_BLAS_MANGLE(srotg,SROTG)
00116 #define SROT_F77    F77_BLAS_MANGLE(srot,SROT)
00117 #define SSCAL_F77   F77_BLAS_MANGLE(sscal,SSCAL)
00118 #define SCOPY_F77   F77_BLAS_MANGLE(scopy,SCOPY)
00119 #define SAXPY_F77   F77_BLAS_MANGLE(saxpy,SAXPY)
00120 #define SDOT_F77    F77_BLAS_MANGLE(sdot,SDOT)
00121 #define SNRM2_F77   F77_BLAS_MANGLE(snrm2,SNRM2)
00122 #define SASUM_F77   F77_BLAS_MANGLE(sasum,SASUM)
00123 #define ISAMAX_F77  F77_BLAS_MANGLE(isamax,ISAMAX)
00124 #define SGEMV_F77   F77_BLAS_MANGLE(sgemv,SGEMV)
00125 #define SGER_F77    F77_BLAS_MANGLE(sger,SGER)
00126 #define STRMV_F77   F77_BLAS_MANGLE(strmv,STRMV)
00127 #define SGEMM_F77   F77_BLAS_MANGLE(sgemm,SGEMM)
00128 #define SSYMM_F77   F77_BLAS_MANGLE(ssymm,SSYMM)
00129 #define SSYRK_F77   F77_BLAS_MANGLE(ssyrk,SSYRK)
00130 #define STRMM_F77   F77_BLAS_MANGLE(strmm,STRMM)
00131 #define STRSM_F77   F77_BLAS_MANGLE(strsm,STRSM)
00132 
00133 #ifdef HAVE_TEUCHOS_COMPLEX
00134 
00135 #define CROTG_F77   F77_BLAS_MANGLE(crotg,CROTG)
00136 #define CROT_F77    F77_BLAS_MANGLE(crot,CROT)
00137 #define SCASUM_F77  F77_BLAS_MANGLE(scasum,SCASUM)
00138 #define CAXPY_F77   F77_BLAS_MANGLE(caxpy,CAXPY)
00139 #define CCOPY_F77   F77_BLAS_MANGLE(ccopy,CCOPY)
00140 #define CDOT_F77    F77_BLAS_MANGLE(cdotc,CDOTC)
00141 #define SCNRM2_F77   F77_BLAS_MANGLE(scnrm2,SCNRM2)
00142 #define CSCAL_F77   F77_BLAS_MANGLE(cscal,CSCAL)
00143 #define ICAMAX_F77  F77_BLAS_MANGLE(icamax,ICAMAX)
00144 #define CGEMV_F77   F77_BLAS_MANGLE(cgemv,CGEMV)
00145 #define CGER_F77    F77_BLAS_MANGLE(cgeru,CGERU)
00146 #define CTRMV_F77   F77_BLAS_MANGLE(ctrmv,CTRMV)
00147 #define CGEMM_F77   F77_BLAS_MANGLE(cgemm,CGEMM)
00148 #define CSYMM_F77   F77_BLAS_MANGLE(csymm,CSYMM)
00149 #define CSYRK_F77   F77_BLAS_MANGLE(csyrk,CSYRK)
00150 #define CTRMM_F77   F77_BLAS_MANGLE(ctrmm,CTRMM)
00151 #define CTRSM_F77   F77_BLAS_MANGLE(ctrsm,CTRSM)
00152 
00153 #endif /* HAVE_TEUCHOS_COMPLEX */
00154 
00155 
00156 /* C) Define the function prototypes for all platforms! */
00157 
00158 #ifdef __cplusplus
00159 extern "C" {
00160 #endif
00161 
00162 
00163 /* Double precision BLAS 1 */
00164 void PREFIX DROTG_F77(double* da, double* db, double* c, double* s);
00165 void PREFIX DROT_F77(const int* n, double* dx, const int* incx, double* dy, const int* incy, double* c, double* s);
00166 double PREFIX DASUM_F77(const int* n, const double x[], const int* incx);
00167 void PREFIX DAXPY_F77(const int* n, const double* alpha, const double x[], const int* incx, double y[], const int* incy);
00168 void PREFIX DCOPY_F77(const int* n, const double *x, const int* incx, double *y, const int* incy);
00169 double PREFIX DDOT_F77(const int* n, const double x[], const int* incx, const double y[], const int* incy);
00170 double PREFIX DNRM2_F77(const int* n, const double x[], const int* incx);
00171 void PREFIX DSCAL_F77(const int* n, const double* alpha, double *x, const int* incx);
00172 int PREFIX IDAMAX_F77(const int* n, const double *x, const int* incx);
00173 
00174 /* Double std::complex precision BLAS 1 */
00175 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
00176 
00177 #  if defined(HAVE_COMPLEX_BLAS_PROBLEM)
00178 #    if defined(HAVE_FIXABLE_COMPLEX_BLAS_PROBLEM)
00179 void PREFIX ZDOT_F77(std::complex<double> *ret, const int* n, const std::complex<double> x[], const int* incx, const std::complex<double> y[], const int* incy);
00180 #    elif defined(HAVE_VECLIB_COMPLEX_BLAS)
00181 // no declarations; they're in cblas.h
00182 #      include <vecLib/cblas.h>
00183 #    else
00184   // mfh 01 Feb 2013: If the code reaches this point, it means that
00185   // some complex BLAS routines are broken, but there is no easy
00186   // workaround.  We deal with this in Teuchos_BLAS.cpp by
00187   // reimplementing the offending routines.
00188 #    endif // HAVE_COMPLEX_BLAS_PROBLEM
00189 #  else // no problem
00190 std::complex<double> PREFIX ZDOT_F77(const int* n, const std::complex<double> x[], const int* incx, const std::complex<double> y[], const int* incy);
00191 #  endif // defined(HAVE_COMPLEX_BLAS_PROBLEM)
00192 
00193 double PREFIX ZNRM2_F77(const int* n, const std::complex<double> x[], const int* incx);
00194 double PREFIX ZASUM_F77(const int* n, const std::complex<double> x[], const int* incx);
00195 void PREFIX ZROTG_F77(std::complex<double>* da, std::complex<double>* db, double* c, std::complex<double>* s);
00196 void PREFIX ZROT_F77(const int* n, std::complex<double>* dx, const int* incx, std::complex<double>* dy, const int* incy, double* c, std::complex<double>* s);
00197 void PREFIX ZAXPY_F77(const int* n, const std::complex<double>* alpha, const std::complex<double> x[], const int* incx, std::complex<double> y[], const int* incy);
00198 void PREFIX ZCOPY_F77(const int* n, const std::complex<double> *x, const int* incx, std::complex<double> *y, const int* incy);
00199 void PREFIX ZSCAL_F77(const int* n, const std::complex<double>* alpha, std::complex<double> *x, const int* incx);
00200 int PREFIX IZAMAX_F77(const int* n, const std::complex<double> *x, const int* incx);
00201 
00202 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
00203 
00204 /* Single precision BLAS 1 */
00205 #ifdef HAVE_TEUCHOS_BLASFLOAT
00206 #  ifdef HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX
00207 #    include <vecLib/cblas.h>
00208 #  elif defined(HAVE_TEUCHOS_BLASFLOAT_DOUBLE_RETURN)
00209 double PREFIX SASUM_F77(const int* n, const float x[], const int* incx);
00210 double PREFIX SDOT_F77(const int* n, const float x[], const int* incx, const float y[], const int* incy);
00211 double PREFIX SNRM2_F77(const int* n, const float x[], const int* incx);
00212 #  else
00213 float PREFIX SASUM_F77(const int* n, const float x[], const int* incx);
00214 float PREFIX SDOT_F77(const int* n, const float x[], const int* incx, const float y[], const int* incy);
00215 float PREFIX SNRM2_F77(const int* n, const float x[], const int* incx);
00216 #  endif // which blasfloat
00217 #endif // ifdef blasfloat
00218 void PREFIX SROTG_F77(float* da, float* db, float* c, float* s);
00219 void PREFIX SROT_F77(const int* n, float* dx, const int* incx, float* dy, const int* incy, float* c, float* s);
00220 void PREFIX SAXPY_F77(const int* n, const float* alpha, const float x[], const int* incx, float y[], const int* incy);
00221 void PREFIX SCOPY_F77(const int* n, const float *x, const int* incx, float *y, const int* incy);
00222 void PREFIX SSCAL_F77(const int* n, const float* alpha, float *x, const int* incx);
00223 int PREFIX ISAMAX_F77(const int* n, const float *x, const int* incx);
00224 
00225 /* Single std::complex precision BLAS 1 */
00226 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
00227 #  if defined(HAVE_TEUCHOS_BLASFLOAT)
00228 #    if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX)
00229 // no declarations; they're in cblas.h
00230 #      include <vecLib/cblas.h>
00231 #    elif defined(HAVE_TEUCHOS_BLASFLOAT_DOUBLE_RETURN)
00232 double PREFIX SCASUM_F77(const int* n, const std::complex<float> x[], const int* incx);
00233 double PREFIX SCNRM2_F77(const int* n, const std::complex<float> x[], const int* incx);
00234 #    else
00235 float PREFIX SCASUM_F77(const int* n, const std::complex<float> x[], const int* incx);
00236 float PREFIX SCNRM2_F77(const int* n, const std::complex<float> x[], const int* incx);
00237 #  endif // Whether or not we have the veclib bugfix
00238 #endif // defined(HAVE_TEUCHOS_BLASFLOAT)
00239 
00240 #if defined(HAVE_COMPLEX_BLAS_PROBLEM)
00241 #if defined(HAVE_FIXABLE_COMPLEX_BLAS_PROBLEM)
00242 void PREFIX CDOT_F77(std::complex<float> *ret, const int* n, const std::complex<float> x[], const int* incx, const std::complex<float> y[], const int* incy);
00243 #elif defined(HAVE_VECLIB_COMPLEX_BLAS)
00244 // no declarations; they're in cblas.h
00245 #include <vecLib/cblas.h>
00246 #endif // HAVE_COMPLEX_BLAS_PROBLEM
00247 #else // no problem
00248 std::complex<float> PREFIX CDOT_F77(const int* n, const std::complex<float> x[], const int* incx, const std::complex<float> y[], const int* incy);
00249 #endif
00250 void PREFIX CROTG_F77(std::complex<float>* da, std::complex<float>* db, float* c, std::complex<float>* s);
00251 void PREFIX CROT_F77(const int* n, std::complex<float>* dx, const int* incx, std::complex<float>* dy, const int* incy, float* c, std::complex<float>* s);
00252 void PREFIX CAXPY_F77(const int* n, const std::complex<float>* alpha, const std::complex<float> x[], const int* incx, std::complex<float> y[], const int* incy);
00253 void PREFIX CCOPY_F77(const int* n, const std::complex<float> *x, const int* incx, std::complex<float> *y, const int* incy);
00254 void PREFIX CSCAL_F77(const int* n, const std::complex<float>* alpha, std::complex<float> *x, const int* incx);
00255 int PREFIX ICAMAX_F77(const int* n, const std::complex<float> *x, const int* incx);
00256 
00257 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
00258 
00259 /* Double precision BLAS 2 */
00260 void PREFIX DGEMV_F77(Teuchos_fcd, const int* m, const int* n, const double* alpha, const double A[], const int* lda,
00261                  const double x[], const int* incx, const double* beta, double y[], const int* incy);
00262 void PREFIX DTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n,
00263                 const double *a, const int *lda, double *x, const int *incx);
00264 void PREFIX DGER_F77(const int *m, const int *n, const double *alpha, const double *x, const int *incx, const double *y,
00265                const int *incy, double *a, const int *lda);
00266 
00267 /* Double precision BLAS 2 */
00268 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
00269 
00270 void PREFIX ZGEMV_F77(Teuchos_fcd, const int* m, const int* n, const std::complex<double>* alpha, const std::complex<double> A[], const int* lda,
00271                  const std::complex<double> x[], const int* incx, const std::complex<double>* beta, std::complex<double> y[], const int* incy);
00272 void PREFIX ZTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n,
00273                 const std::complex<double> *a, const int *lda, std::complex<double> *x, const int *incx);
00274 void PREFIX ZGER_F77(const int *m, const int *n, const std::complex<double> *alpha, const std::complex<double> *x, const int *incx, const std::complex<double> *y,
00275                const int *incy, std::complex<double> *a, const int *lda);
00276 
00277 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
00278 
00279 /* Single precision BLAS 2 */
00280 void PREFIX SGEMV_F77(Teuchos_fcd, const int* m, const int* n, const float* alpha, const float A[], const int* lda,
00281                  const float x[], const int* incx, const float* beta, float y[], const int* incy);
00282 void PREFIX STRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n,
00283                 const float *a, const int *lda, float *x, const int *incx);
00284 void PREFIX SGER_F77(const int *m, const int *n, const float *alpha, const float *x, const int *incx, const float *y,
00285                const int *incy, float *a, const int *lda);
00286 
00287 /* Single std::complex precision BLAS 2 */
00288 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
00289 
00290 void PREFIX CGEMV_F77(Teuchos_fcd, const int* m, const int* n, const std::complex<float>* alpha, const std::complex<float> A[], const int* lda,
00291                  const std::complex<float> x[], const int* incx, const std::complex<float>* beta, std::complex<float> y[], const int* incy);
00292 void PREFIX CTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n,
00293                 const std::complex<float> *a, const int *lda, std::complex<float> *x, const int *incx);
00294 void PREFIX CGER_F77(const int *m, const int *n, const std::complex<float> *alpha, const std::complex<float> *x, const int *incx, const std::complex<float> *y,
00295                const int *incy, std::complex<float> *a, const int *lda);
00296 
00297 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
00298 
00299 /* Double precision BLAS 3 */
00300 void PREFIX DGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *
00301                 n, const int *k, const double *alpha, const double *a, const int *lda,
00302                 const double *b, const int *ldb, const double *beta, double *c, const int *ldc);
00303 void PREFIX DSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n,
00304                 const double *alpha, const double *a, const int *lda,
00305                 const double *b, const int *ldb, const double *beta, double *c, const int *ldc);
00306 void PREFIX DSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
00307                 const double *alpha, const double *a, const int *lda,
00308                 const double *beta, double *c, const int *ldc);
00309 void PREFIX DTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
00310                 const int *m, const int *n, const double *alpha, const double *a, const int * lda, double *b, const int *ldb);
00311 void PREFIX DTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
00312                 const int *m, const int *n, const double *alpha, const double *a, const int *
00313                 lda, double *b, const int *ldb);
00314 
00315 /* Double std::complex precision BLAS 3 */
00316 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
00317 
00318 void PREFIX ZGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *
00319                 n, const int *k, const std::complex<double> *alpha, const std::complex<double> *a, const int *lda,
00320                 const std::complex<double> *b, const int *ldb, const std::complex<double> *beta, std::complex<double> *c, const int *ldc);
00321 void PREFIX ZSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n,
00322                 const std::complex<double> *alpha, const std::complex<double> *a, const int *lda,
00323                 const std::complex<double> *b, const int *ldb, const std::complex<double> *beta, std::complex<double> *c, const int *ldc);
00324 void PREFIX ZSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
00325                 const std::complex<double> *alpha, const std::complex<double> *a, const int *lda,
00326                 const std::complex<double> *beta, std::complex<double> *c, const int *ldc);
00327 void PREFIX ZTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
00328                 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);
00329 void PREFIX ZTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
00330                 const int *m, const int *n, const std::complex<double> *alpha, const std::complex<double> *a, const int *
00331                 lda, std::complex<double> *b, const int *ldb);
00332 
00333 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
00334 
00335 /* Single precision BLAS 3 */
00336 void PREFIX SGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *
00337                 n, const int *k, const float *alpha, const float *a, const int *lda,
00338                 const float *b, const int *ldb, const float *beta, float *c, const int *ldc);
00339 void PREFIX SSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n,
00340                 const float *alpha, const float *a, const int *lda,
00341                 const float *b, const int *ldb, const float *beta, float *c, const int *ldc);
00342 void PREFIX SSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
00343                 const float *alpha, const float *a, const int *lda,
00344                 const float *beta, float *c, const int *ldc);
00345 void PREFIX STRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
00346                 const int *m, const int *n, const float *alpha, const float *a, const int * lda, float *b, const int *ldb);
00347 void PREFIX STRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
00348                 const int *m, const int *n, const float *alpha, const float *a, const int *
00349                 lda, float *b, const int *ldb);
00350 
00351 /* Single std::complex precision BLAS 3 */
00352 
00353 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
00354 
00355 void PREFIX CGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *
00356                 n, const int *k, const std::complex<float> *alpha, const std::complex<float> *a, const int *lda,
00357                 const std::complex<float> *b, const int *ldb, const std::complex<float> *beta, std::complex<float> *c, const int *ldc);
00358 void PREFIX CSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n,
00359                 const std::complex<float> *alpha, const std::complex<float> *a, const int *lda,
00360                 const std::complex<float> *b, const int *ldb, const std::complex<float> *beta, std::complex<float> *c, const int *ldc);
00361 void PREFIX CTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
00362                 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);
00363 void PREFIX CSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
00364                 const std::complex<float> *alpha, const std::complex<float> *a, const int *lda,
00365                 const std::complex<float> *beta, std::complex<float> *c, const int *ldc);
00366 void PREFIX CTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
00367                 const int *m, const int *n, const std::complex<float> *alpha, const std::complex<float> *a, const int *
00368                 lda, std::complex<float> *b, const int *ldb);
00369 
00370 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
00371 
00372 #ifdef __cplusplus
00373 }
00374 #endif
00375 
00376 /* Don't leave a global macros called PREFIX or Teuchos_fcd laying around */
00377 
00378 #ifdef PREFIX
00379 #undef PREFIX
00380 #endif
00381 
00382 #ifdef Teuchos_fcd
00383 #undef Teuchos_fcd
00384 #endif
00385 
00386 #endif /* end of TEUCHOS_BLAS_WRAPPERS_HPP_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines