|
Teuchos - Trilinos Tools Package
Version of the Day
|
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_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX) 00241 // no declarations; they're in cblas.h 00242 #include <vecLib/cblas.h> 00243 #elif defined(HAVE_COMPLEX_BLAS_PROBLEM) && defined(HAVE_FIXABLE_COMPLEX_BLAS_PROBLEM) 00244 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); 00245 #elif defined(HAVE_TEUCHOS_BLASFLOAT) 00246 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); 00247 #else 00248 // the code is literally in Teuchos_BLAS.cpp 00249 #endif 00250 00251 void PREFIX CROTG_F77(std::complex<float>* da, std::complex<float>* db, float* c, std::complex<float>* s); 00252 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); 00253 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); 00254 void PREFIX CCOPY_F77(const int* n, const std::complex<float> *x, const int* incx, std::complex<float> *y, const int* incy); 00255 void PREFIX CSCAL_F77(const int* n, const std::complex<float>* alpha, std::complex<float> *x, const int* incx); 00256 int PREFIX ICAMAX_F77(const int* n, const std::complex<float> *x, const int* incx); 00257 00258 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */ 00259 00260 /* Double precision BLAS 2 */ 00261 void PREFIX DGEMV_F77(Teuchos_fcd, const int* m, const int* n, const double* alpha, const double A[], const int* lda, 00262 const double x[], const int* incx, const double* beta, double y[], const int* incy); 00263 void PREFIX DTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n, 00264 const double *a, const int *lda, double *x, const int *incx); 00265 void PREFIX DGER_F77(const int *m, const int *n, const double *alpha, const double *x, const int *incx, const double *y, 00266 const int *incy, double *a, const int *lda); 00267 00268 /* Double precision BLAS 2 */ 00269 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) 00270 00271 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, 00272 const std::complex<double> x[], const int* incx, const std::complex<double>* beta, std::complex<double> y[], const int* incy); 00273 void PREFIX ZTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n, 00274 const std::complex<double> *a, const int *lda, std::complex<double> *x, const int *incx); 00275 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, 00276 const int *incy, std::complex<double> *a, const int *lda); 00277 00278 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */ 00279 00280 /* Single precision BLAS 2 */ 00281 void PREFIX SGEMV_F77(Teuchos_fcd, const int* m, const int* n, const float* alpha, const float A[], const int* lda, 00282 const float x[], const int* incx, const float* beta, float y[], const int* incy); 00283 void PREFIX STRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n, 00284 const float *a, const int *lda, float *x, const int *incx); 00285 void PREFIX SGER_F77(const int *m, const int *n, const float *alpha, const float *x, const int *incx, const float *y, 00286 const int *incy, float *a, const int *lda); 00287 00288 /* Single std::complex precision BLAS 2 */ 00289 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) 00290 00291 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, 00292 const std::complex<float> x[], const int* incx, const std::complex<float>* beta, std::complex<float> y[], const int* incy); 00293 void PREFIX CTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n, 00294 const std::complex<float> *a, const int *lda, std::complex<float> *x, const int *incx); 00295 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, 00296 const int *incy, std::complex<float> *a, const int *lda); 00297 00298 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */ 00299 00300 /* Double precision BLAS 3 */ 00301 void PREFIX DGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * 00302 n, const int *k, const double *alpha, const double *a, const int *lda, 00303 const double *b, const int *ldb, const double *beta, double *c, const int *ldc); 00304 void PREFIX DSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n, 00305 const double *alpha, const double *a, const int *lda, 00306 const double *b, const int *ldb, const double *beta, double *c, const int *ldc); 00307 void PREFIX DSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k, 00308 const double *alpha, const double *a, const int *lda, 00309 const double *beta, double *c, const int *ldc); 00310 void PREFIX DTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, 00311 const int *m, const int *n, const double *alpha, const double *a, const int * lda, double *b, const int *ldb); 00312 void PREFIX DTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, 00313 const int *m, const int *n, const double *alpha, const double *a, const int * 00314 lda, double *b, const int *ldb); 00315 00316 /* Double std::complex precision BLAS 3 */ 00317 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) 00318 00319 void PREFIX ZGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * 00320 n, const int *k, const std::complex<double> *alpha, const std::complex<double> *a, const int *lda, 00321 const std::complex<double> *b, const int *ldb, const std::complex<double> *beta, std::complex<double> *c, const int *ldc); 00322 void PREFIX ZSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n, 00323 const std::complex<double> *alpha, const std::complex<double> *a, const int *lda, 00324 const std::complex<double> *b, const int *ldb, const std::complex<double> *beta, std::complex<double> *c, const int *ldc); 00325 void PREFIX ZSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k, 00326 const std::complex<double> *alpha, const std::complex<double> *a, const int *lda, 00327 const std::complex<double> *beta, std::complex<double> *c, const int *ldc); 00328 void PREFIX ZTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, 00329 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); 00330 void PREFIX ZTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, 00331 const int *m, const int *n, const std::complex<double> *alpha, const std::complex<double> *a, const int * 00332 lda, std::complex<double> *b, const int *ldb); 00333 00334 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */ 00335 00336 /* Single precision BLAS 3 */ 00337 void PREFIX SGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * 00338 n, const int *k, const float *alpha, const float *a, const int *lda, 00339 const float *b, const int *ldb, const float *beta, float *c, const int *ldc); 00340 void PREFIX SSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n, 00341 const float *alpha, const float *a, const int *lda, 00342 const float *b, const int *ldb, const float *beta, float *c, const int *ldc); 00343 void PREFIX SSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k, 00344 const float *alpha, const float *a, const int *lda, 00345 const float *beta, float *c, const int *ldc); 00346 void PREFIX STRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, 00347 const int *m, const int *n, const float *alpha, const float *a, const int * lda, float *b, const int *ldb); 00348 void PREFIX STRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, 00349 const int *m, const int *n, const float *alpha, const float *a, const int * 00350 lda, float *b, const int *ldb); 00351 00352 /* Single std::complex precision BLAS 3 */ 00353 00354 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) 00355 00356 void PREFIX CGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * 00357 n, const int *k, const std::complex<float> *alpha, const std::complex<float> *a, const int *lda, 00358 const std::complex<float> *b, const int *ldb, const std::complex<float> *beta, std::complex<float> *c, const int *ldc); 00359 void PREFIX CSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n, 00360 const std::complex<float> *alpha, const std::complex<float> *a, const int *lda, 00361 const std::complex<float> *b, const int *ldb, const std::complex<float> *beta, std::complex<float> *c, const int *ldc); 00362 void PREFIX CTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, 00363 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); 00364 void PREFIX CSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k, 00365 const std::complex<float> *alpha, const std::complex<float> *a, const int *lda, 00366 const std::complex<float> *beta, std::complex<float> *c, const int *ldc); 00367 void PREFIX CTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, 00368 const int *m, const int *n, const std::complex<float> *alpha, const std::complex<float> *a, const int * 00369 lda, std::complex<float> *b, const int *ldb); 00370 00371 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */ 00372 00373 #ifdef __cplusplus 00374 } 00375 #endif 00376 00377 /* Don't leave a global macros called PREFIX or Teuchos_fcd laying around */ 00378 00379 #ifdef PREFIX 00380 #undef PREFIX 00381 #endif 00382 00383 #ifdef Teuchos_fcd 00384 #undef Teuchos_fcd 00385 #endif 00386 00387 #endif /* end of TEUCHOS_BLAS_WRAPPERS_HPP_ */
1.7.6.1