Teuchos - Trilinos Tools Package  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Teuchos_BLAS_wrappers.hpp
Go to the documentation of this file.
1 /*
2 // @HEADER
3 // ***********************************************************************
4 //
5 // Teuchos: Common Tools Package
6 // Copyright (2004) Sandia Corporation
7 //
8 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9 // license for use of this work by or on behalf of the U.S. Government.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
39 //
40 // ***********************************************************************
41 // @HEADER
42 */
43 
44 #ifndef _TEUCHOS_BLAS_WRAPPERS_HPP_
45 #define _TEUCHOS_BLAS_WRAPPERS_HPP_
46 
47 #include "Teuchos_ConfigDefs.hpp"
48 #ifdef _MSC_VER
49 /* disable warning for C-linkage returning complex class */
50 #pragma warning ( disable : 4190 )
51 #endif
52 
58 /* A) Define PREFIX and Teuchos_fcd based on platform. */
59 
60 #if defined(INTEL_CXML)
61 # define PREFIX __stdcall
62 # define Teuchos_fcd const char *, unsigned int
63 #elif defined(INTEL_MKL)
64 # define PREFIX
65 # define Teuchos_fcd const char *
66 #else /* Not CRAY_T3X or INTEL_CXML or INTEL_MKL */
67 # define PREFIX
68 # define Teuchos_fcd const char *
69 #endif
70 
71 
72 /* B) Take care of of the link name case */
73 
74 
75 #define DROTG_F77 F77_BLAS_MANGLE(drotg,DROTG)
76 #define DROT_F77 F77_BLAS_MANGLE(drot,DROT)
77 #define DASUM_F77 F77_BLAS_MANGLE(dasum,DASUM)
78 #define DAXPY_F77 F77_BLAS_MANGLE(daxpy,DAXPY)
79 #define DCOPY_F77 F77_BLAS_MANGLE(dcopy,DCOPY)
80 #define DDOT_F77 F77_BLAS_MANGLE(ddot,DDOT)
81 #define DNRM2_F77 F77_BLAS_MANGLE(dnrm2,DNRM2)
82 #define DSCAL_F77 F77_BLAS_MANGLE(dscal,DSCAL)
83 #define IDAMAX_F77 F77_BLAS_MANGLE(idamax,IDAMAX)
84 #define DGEMV_F77 F77_BLAS_MANGLE(dgemv,DGEMV)
85 #define DGER_F77 F77_BLAS_MANGLE(dger,DGER)
86 #define DTRMV_F77 F77_BLAS_MANGLE(dtrmv,DTRMV)
87 #define DGEMM_F77 F77_BLAS_MANGLE(dgemm,DGEMM)
88 #define DSWAP_F77 F77_BLAS_MANGLE(dswap,DSWAP)
89 #define DSYMM_F77 F77_BLAS_MANGLE(dsymm,DSYMM)
90 #define DSYRK_F77 F77_BLAS_MANGLE(dsyrk,DSYRK)
91 #define DTRMM_F77 F77_BLAS_MANGLE(dtrmm,DTRMM)
92 #define DTRSM_F77 F77_BLAS_MANGLE(dtrsm,DTRSM)
93 
94 #ifdef HAVE_TEUCHOS_COMPLEX
95 
96 #define ZROTG_F77 F77_BLAS_MANGLE(zrotg,ZROTG)
97 #define ZROT_F77 F77_BLAS_MANGLE(zrot,ZROT)
98 #define ZASUM_F77 F77_BLAS_MANGLE(dzasum,DZASUM)
99 #define ZAXPY_F77 F77_BLAS_MANGLE(zaxpy,ZAXPY)
100 #define ZCOPY_F77 F77_BLAS_MANGLE(zcopy,ZCOPY)
101 #define ZDOT_F77 F77_BLAS_MANGLE(zdotc,ZDOTC)
102 #define ZNRM2_F77 F77_BLAS_MANGLE(dznrm2,DZNRM2)
103 #define ZSCAL_F77 F77_BLAS_MANGLE(zscal,ZSCAL)
104 #define IZAMAX_F77 F77_BLAS_MANGLE(izamax,IZAMAX)
105 #define ZGEMV_F77 F77_BLAS_MANGLE(zgemv,ZGEMV)
106 #define ZGER_F77 F77_BLAS_MANGLE(zgeru,ZGERU)
107 #define ZTRMV_F77 F77_BLAS_MANGLE(ztrmv,ZTRMV)
108 #define ZGEMM_F77 F77_BLAS_MANGLE(zgemm,ZGEMM)
109 #define ZSWAP_F77 F77_BLAS_MANGLE(zswap,ZSWAP)
110 #define ZSYMM_F77 F77_BLAS_MANGLE(zsymm,ZSYMM)
111 #define ZSYRK_F77 F77_BLAS_MANGLE(zsyrk,ZSYRK)
112 #define ZHERK_F77 F77_BLAS_MANGLE(zherk,ZHERK)
113 #define ZTRMM_F77 F77_BLAS_MANGLE(ztrmm,ZTRMM)
114 #define ZTRSM_F77 F77_BLAS_MANGLE(ztrsm,ZTRSM)
115 
116 #endif /* HAVE_TEUCHOS_COMPLEX */
117 
118 #define SROTG_F77 F77_BLAS_MANGLE(srotg,SROTG)
119 #define SROT_F77 F77_BLAS_MANGLE(srot,SROT)
120 #define SSCAL_F77 F77_BLAS_MANGLE(sscal,SSCAL)
121 #define SCOPY_F77 F77_BLAS_MANGLE(scopy,SCOPY)
122 #define SAXPY_F77 F77_BLAS_MANGLE(saxpy,SAXPY)
123 #define SDOT_F77 F77_BLAS_MANGLE(sdot,SDOT)
124 #define SNRM2_F77 F77_BLAS_MANGLE(snrm2,SNRM2)
125 #define SASUM_F77 F77_BLAS_MANGLE(sasum,SASUM)
126 #define ISAMAX_F77 F77_BLAS_MANGLE(isamax,ISAMAX)
127 #define SGEMV_F77 F77_BLAS_MANGLE(sgemv,SGEMV)
128 #define SGER_F77 F77_BLAS_MANGLE(sger,SGER)
129 #define STRMV_F77 F77_BLAS_MANGLE(strmv,STRMV)
130 #define SGEMM_F77 F77_BLAS_MANGLE(sgemm,SGEMM)
131 #define SSWAP_F77 F77_BLAS_MANGLE(sswap,SSWAP)
132 #define SSYMM_F77 F77_BLAS_MANGLE(ssymm,SSYMM)
133 #define SSYRK_F77 F77_BLAS_MANGLE(ssyrk,SSYRK)
134 #define STRMM_F77 F77_BLAS_MANGLE(strmm,STRMM)
135 #define STRSM_F77 F77_BLAS_MANGLE(strsm,STRSM)
136 
137 #ifdef HAVE_TEUCHOS_COMPLEX
138 
139 #define CROTG_F77 F77_BLAS_MANGLE(crotg,CROTG)
140 #define CROT_F77 F77_BLAS_MANGLE(crot,CROT)
141 #define SCASUM_F77 F77_BLAS_MANGLE(scasum,SCASUM)
142 #define CAXPY_F77 F77_BLAS_MANGLE(caxpy,CAXPY)
143 #define CCOPY_F77 F77_BLAS_MANGLE(ccopy,CCOPY)
144 #define CDOT_F77 F77_BLAS_MANGLE(cdotc,CDOTC)
145 #define SCNRM2_F77 F77_BLAS_MANGLE(scnrm2,SCNRM2)
146 #define CSCAL_F77 F77_BLAS_MANGLE(cscal,CSCAL)
147 #define ICAMAX_F77 F77_BLAS_MANGLE(icamax,ICAMAX)
148 #define CGEMV_F77 F77_BLAS_MANGLE(cgemv,CGEMV)
149 #define CGER_F77 F77_BLAS_MANGLE(cgeru,CGERU)
150 #define CTRMV_F77 F77_BLAS_MANGLE(ctrmv,CTRMV)
151 #define CGEMM_F77 F77_BLAS_MANGLE(cgemm,CGEMM)
152 #define CSWAP_F77 F77_BLAS_MANGLE(cswap,CSWAP)
153 #define CSYMM_F77 F77_BLAS_MANGLE(csymm,CSYMM)
154 #define CSYRK_F77 F77_BLAS_MANGLE(csyrk,CSYRK)
155 #define CHERK_F77 F77_BLAS_MANGLE(cherk,CHERK)
156 #define CTRMM_F77 F77_BLAS_MANGLE(ctrmm,CTRMM)
157 #define CTRSM_F77 F77_BLAS_MANGLE(ctrsm,CTRSM)
158 
159 #endif /* HAVE_TEUCHOS_COMPLEX */
160 
161 
162 /* C) Define the function prototypes for all platforms! */
163 
164 #ifdef __cplusplus
165 extern "C" {
166 #endif
167 
168 
169 /* Double precision BLAS 1 */
170 void PREFIX DROTG_F77(double* da, double* db, double* c, double* s);
171 void PREFIX DROT_F77(const int* n, double* dx, const int* incx, double* dy, const int* incy, double* c, double* s);
172 double PREFIX DASUM_F77(const int* n, const double x[], const int* incx);
173 void PREFIX DAXPY_F77(const int* n, const double* alpha, const double x[], const int* incx, double y[], const int* incy);
174 void PREFIX DCOPY_F77(const int* n, const double *x, const int* incx, double *y, const int* incy);
175 double PREFIX DDOT_F77(const int* n, const double x[], const int* incx, const double y[], const int* incy);
176 double PREFIX DNRM2_F77(const int* n, const double x[], const int* incx);
177 void PREFIX DSCAL_F77(const int* n, const double* alpha, double *x, const int* incx);
178 void PREFIX DSWAP_F77(const int* const n, double* const x, const int* const incx,
179  double* const y, const int* const incy);
180 int PREFIX IDAMAX_F77(const int* n, const double *x, const int* incx);
181 
182 /* Double std::complex precision BLAS 1 */
183 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
184 
185 # if defined(HAVE_COMPLEX_BLAS_PROBLEM)
186 # if defined(HAVE_FIXABLE_COMPLEX_BLAS_PROBLEM)
187 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);
188 # elif defined(HAVE_VECLIB_COMPLEX_BLAS)
189 // no declarations; they're in cblas.h
190 # include <vecLib/cblas.h>
191 # else
192  // mfh 01 Feb 2013: If the code reaches this point, it means that
193  // some complex BLAS routines are broken, but there is no easy
194  // workaround. We deal with this in Teuchos_BLAS.cpp by
195  // reimplementing the offending routines.
196 # endif // HAVE_COMPLEX_BLAS_PROBLEM
197 # else // no problem
198 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);
199 # endif // defined(HAVE_COMPLEX_BLAS_PROBLEM)
200 
201 double PREFIX ZNRM2_F77(const int* n, const std::complex<double> x[], const int* incx);
202 double PREFIX ZASUM_F77(const int* n, const std::complex<double> x[], const int* incx);
203 void PREFIX ZROTG_F77(std::complex<double>* da, std::complex<double>* db, double* c, std::complex<double>* s);
204 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);
205 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);
206 void PREFIX ZCOPY_F77(const int* n, const std::complex<double> *x, const int* incx, std::complex<double> *y, const int* incy);
207 void PREFIX ZSCAL_F77(const int* n, const std::complex<double>* alpha, std::complex<double> *x, const int* incx);
208 void PREFIX ZSWAP_F77(const int* const n, std::complex<double>* const x, const int* const incx,
209  std::complex<double>* const y, const int* const incy);
210 int PREFIX IZAMAX_F77(const int* n, const std::complex<double> *x, const int* incx);
211 
212 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
213 
214 /* Single precision BLAS 1 */
215 #ifdef HAVE_TEUCHOS_BLASFLOAT
216 # ifdef HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX
217 # include <vecLib/cblas.h>
218 # elif defined(HAVE_TEUCHOS_BLASFLOAT_DOUBLE_RETURN)
219 double PREFIX SASUM_F77(const int* n, const float x[], const int* incx);
220 double PREFIX SDOT_F77(const int* n, const float x[], const int* incx, const float y[], const int* incy);
221 double PREFIX SNRM2_F77(const int* n, const float x[], const int* incx);
222 # else
223 float PREFIX SASUM_F77(const int* n, const float x[], const int* incx);
224 float PREFIX SDOT_F77(const int* n, const float x[], const int* incx, const float y[], const int* incy);
225 float PREFIX SNRM2_F77(const int* n, const float x[], const int* incx);
226 # endif // which blasfloat
227 #endif // ifdef blasfloat
228 void PREFIX SROTG_F77(float* da, float* db, float* c, float* s);
229 void PREFIX SROT_F77(const int* n, float* dx, const int* incx, float* dy, const int* incy, float* c, float* s);
230 void PREFIX SAXPY_F77(const int* n, const float* alpha, const float x[], const int* incx, float y[], const int* incy);
231 void PREFIX SCOPY_F77(const int* n, const float *x, const int* incx, float *y, const int* incy);
232 void PREFIX SSCAL_F77(const int* n, const float* alpha, float *x, const int* incx);
233 void PREFIX SSWAP_F77(const int* const n, float* const x, const int* const incx,
234  float* const y, const int* const incy);
235 int PREFIX ISAMAX_F77(const int* n, const float *x, const int* incx);
236 
237 /* Single std::complex precision BLAS 1 */
238 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
239 # if defined(HAVE_TEUCHOS_BLASFLOAT)
240 # if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX)
241 // no declarations; they're in cblas.h
242 # include <vecLib/cblas.h>
243 # elif defined(HAVE_TEUCHOS_BLASFLOAT_DOUBLE_RETURN)
244 double PREFIX SCASUM_F77(const int* n, const std::complex<float> x[], const int* incx);
245 double PREFIX SCNRM2_F77(const int* n, const std::complex<float> x[], const int* incx);
246 # else
247 float PREFIX SCASUM_F77(const int* n, const std::complex<float> x[], const int* incx);
248 float PREFIX SCNRM2_F77(const int* n, const std::complex<float> x[], const int* incx);
249 # endif // Whether or not we have the veclib bugfix
250 #endif // defined(HAVE_TEUCHOS_BLASFLOAT)
251 
252 #if defined(HAVE_TEUCHOS_BLASFLOAT_APPLE_VECLIB_BUGFIX)
253 // no declarations; they're in cblas.h
254 #include <vecLib/cblas.h>
255 #elif defined(HAVE_COMPLEX_BLAS_PROBLEM) && defined(HAVE_FIXABLE_COMPLEX_BLAS_PROBLEM)
256 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);
257 #elif defined(HAVE_TEUCHOS_BLASFLOAT)
258 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);
259 #else
260 // the code is literally in Teuchos_BLAS.cpp
261 #endif
262 
263 void PREFIX CROTG_F77(std::complex<float>* da, std::complex<float>* db, float* c, std::complex<float>* s);
264 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);
265 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);
266 void PREFIX CCOPY_F77(const int* n, const std::complex<float> *x, const int* incx, std::complex<float> *y, const int* incy);
267 void PREFIX CSCAL_F77(const int* n, const std::complex<float>* alpha, std::complex<float> *x, const int* incx);
268 void PREFIX CSWAP_F77(const int* const n, std::complex<float>* const x, const int* const incx,
269  std::complex<float>* const y, const int* const incy);
270 int PREFIX ICAMAX_F77(const int* n, const std::complex<float> *x, const int* incx);
271 
272 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
273 
274 /* Double precision BLAS 2 */
275 void PREFIX DGEMV_F77(Teuchos_fcd, const int* m, const int* n, const double* alpha, const double A[], const int* lda,
276  const double x[], const int* incx, const double* beta, double y[], const int* incy);
277 void PREFIX DTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n,
278  const double *a, const int *lda, double *x, const int *incx);
279 void PREFIX DGER_F77(const int *m, const int *n, const double *alpha, const double *x, const int *incx, const double *y,
280  const int *incy, double *a, const int *lda);
281 
282 /* Double precision BLAS 2 */
283 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
284 
285 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,
286  const std::complex<double> x[], const int* incx, const std::complex<double>* beta, std::complex<double> y[], const int* incy);
287 void PREFIX ZTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n,
288  const std::complex<double> *a, const int *lda, std::complex<double> *x, const int *incx);
289 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,
290  const int *incy, std::complex<double> *a, const int *lda);
291 
292 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
293 
294 /* Single precision BLAS 2 */
295 void PREFIX SGEMV_F77(Teuchos_fcd, const int* m, const int* n, const float* alpha, const float A[], const int* lda,
296  const float x[], const int* incx, const float* beta, float y[], const int* incy);
297 void PREFIX STRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n,
298  const float *a, const int *lda, float *x, const int *incx);
299 void PREFIX SGER_F77(const int *m, const int *n, const float *alpha, const float *x, const int *incx, const float *y,
300  const int *incy, float *a, const int *lda);
301 
302 /* Single std::complex precision BLAS 2 */
303 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
304 
305 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,
306  const std::complex<float> x[], const int* incx, const std::complex<float>* beta, std::complex<float> y[], const int* incy);
307 void PREFIX CTRMV_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, const int *n,
308  const std::complex<float> *a, const int *lda, std::complex<float> *x, const int *incx);
309 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,
310  const int *incy, std::complex<float> *a, const int *lda);
311 
312 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
313 
314 /* Double precision BLAS 3 */
315 void PREFIX DGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *
316  n, const int *k, const double *alpha, const double *a, const int *lda,
317  const double *b, const int *ldb, const double *beta, double *c, const int *ldc);
318 void PREFIX DSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n,
319  const double *alpha, const double *a, const int *lda,
320  const double *b, const int *ldb, const double *beta, double *c, const int *ldc);
321 void PREFIX DSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
322  const double *alpha, const double *a, const int *lda,
323  const double *beta, double *c, const int *ldc);
324 void PREFIX DTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
325  const int *m, const int *n, const double *alpha, const double *a, const int * lda, double *b, const int *ldb);
326 void PREFIX DTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
327  const int *m, const int *n, const double *alpha, const double *a, const int *
328  lda, double *b, const int *ldb);
329 
330 /* Double std::complex precision BLAS 3 */
331 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
332 
333 void PREFIX ZGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *
334  n, const int *k, const std::complex<double> *alpha, const std::complex<double> *a, const int *lda,
335  const std::complex<double> *b, const int *ldb, const std::complex<double> *beta, std::complex<double> *c, const int *ldc);
336 void PREFIX ZSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n,
337  const std::complex<double> *alpha, const std::complex<double> *a, const int *lda,
338  const std::complex<double> *b, const int *ldb, const std::complex<double> *beta, std::complex<double> *c, const int *ldc);
339 void PREFIX ZSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
340  const std::complex<double> *alpha, const std::complex<double> *a, const int *lda,
341  const std::complex<double> *beta, std::complex<double> *c, const int *ldc);
342 void PREFIX ZHERK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
343  const std::complex<double> *alpha, const std::complex<double> *a, const int *lda,
344  const std::complex<double> *beta, std::complex<double> *c, const int *ldc);
345 void PREFIX ZTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
346  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);
347 void PREFIX ZTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
348  const int *m, const int *n, const std::complex<double> *alpha, const std::complex<double> *a, const int *
349  lda, std::complex<double> *b, const int *ldb);
350 
351 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
352 
353 /* Single precision BLAS 3 */
354 void PREFIX SGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *
355  n, const int *k, const float *alpha, const float *a, const int *lda,
356  const float *b, const int *ldb, const float *beta, float *c, const int *ldc);
357 void PREFIX SSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n,
358  const float *alpha, const float *a, const int *lda,
359  const float *b, const int *ldb, const float *beta, float *c, const int *ldc);
360 void PREFIX SSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
361  const float *alpha, const float *a, const int *lda,
362  const float *beta, float *c, const int *ldc);
363 void PREFIX STRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
364  const int *m, const int *n, const float *alpha, const float *a, const int * lda, float *b, const int *ldb);
365 void PREFIX STRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
366  const int *m, const int *n, const float *alpha, const float *a, const int *
367  lda, float *b, const int *ldb);
368 
369 /* Single std::complex precision BLAS 3 */
370 
371 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus)
372 
373 void PREFIX CGEMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int *
374  n, const int *k, const std::complex<float> *alpha, const std::complex<float> *a, const int *lda,
375  const std::complex<float> *b, const int *ldb, const std::complex<float> *beta, std::complex<float> *c, const int *ldc);
376 void PREFIX CSYMM_F77(Teuchos_fcd, Teuchos_fcd, const int *m, const int * n,
377  const std::complex<float> *alpha, const std::complex<float> *a, const int *lda,
378  const std::complex<float> *b, const int *ldb, const std::complex<float> *beta, std::complex<float> *c, const int *ldc);
379 void PREFIX CTRMM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
380  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);
381 void PREFIX CSYRK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
382  const std::complex<float> *alpha, const std::complex<float> *a, const int *lda,
383  const std::complex<float> *beta, std::complex<float> *c, const int *ldc);
384 void PREFIX CHERK_F77(Teuchos_fcd, Teuchos_fcd, const int *n, const int * k,
385  const std::complex<float> *alpha, const std::complex<float> *a, const int *lda,
386  const std::complex<float> *beta, std::complex<float> *c, const int *ldc);
387 void PREFIX CTRSM_F77(Teuchos_fcd, Teuchos_fcd, Teuchos_fcd, Teuchos_fcd,
388  const int *m, const int *n, const std::complex<float> *alpha, const std::complex<float> *a, const int *
389  lda, std::complex<float> *b, const int *ldb);
390 
391 #endif /* defined(HAVE_TEUCHOS_COMPLEX) && defined(__cplusplus) */
392 
393 #ifdef __cplusplus
394 }
395 #endif
396 
397 /* Don't leave a global macros called PREFIX or Teuchos_fcd laying around */
398 
399 #ifdef PREFIX
400 #undef PREFIX
401 #endif
402 
403 #ifdef Teuchos_fcd
404 #undef Teuchos_fcd
405 #endif
406 
407 #endif /* end of TEUCHOS_BLAS_WRAPPERS_HPP_ */
Teuchos header file which uses auto-configuration information to include necessary C++ headers...