xref: /petsc/include/petscblaslapack.h (revision 52e6d16ba989af9362d0fcebb12e73dd7c9666ed)
1 /*
2    This file provides some name space protection from LAPACK and BLAS and
3 allows the appropriate single or double precision version to be used.
4 This file also deals with different Fortran 77 naming conventions on machines.
5 
6    Another problem is character strings are represented differently on
7 on some machines in C and Fortran 77. This problem comes up on the
8 Cray T3D/T3E.
9 
10 */
11 #if !defined(_BLASLAPACK_H)
12 #define _BLASLAPACK_H
13 #include "petsc.h"
14 PETSC_EXTERN_CXX_BEGIN
15 
16 #if defined(PETSC_BLASLAPACK_MKL64_ONLY)
17 #define PETSC_MISSING_LAPACK_GESVD
18 #define PETSC_MISSING_LAPACK_GEEV
19 #define PETSC_MISSING_LAPACK_SYGV
20 #define PETSC_MISSING_LAPACK_SYGVX
21 #define PETSC_MISSING_LAPACK_GETRF
22 #define PETSC_MISSING_LAPACK_POTRF
23 #define PETSC_MISSING_LAPACK_GETRS
24 #define PETSC_MISSING_LAPACK_POTRS
25 #elif defined(PETSC_BLASLAPACK_MKL_ONLY)
26 #define PETSC_MISSING_LAPACK_GESVD
27 #define PETSC_MISSING_LAPACK_GEEV
28 #define PETSC_MISSING_LAPACK_SYGV
29 #define PETSC_MISSING_LAPACK_SYGVX
30 #elif defined(PETSC_BLASLAPACK_CRAY_ONLY)
31 #define PETSC_MISSING_LAPACK_GESVD
32 #elif defined(PETSC_BLASLAPACK_ESSL_ONLY)
33 #define PETSC_MISSING_LAPACK_GESVD
34 #define PETSC_MISSING_LAPACK_GETRF
35 #define PETSC_MISSING_LAPACK_GETRS
36 #define PETSC_MISSING_LAPACK_POTRF
37 #define PETSC_MISSING_LAPACK_POTRS
38 #endif
39 
40 /*
41    This include file on the Cray T3D/T3E defines the interface between
42   Fortran and C representations of character strings.
43 */
44 #if defined(PETSC_USES_CPTOFCD)
45 #include <fortran.h>
46 #endif
47 
48 #if !defined(PETSC_USE_COMPLEX)
49 
50 /*
51     These are real case with no character string arguments
52 */
53 
54 #if defined(PETSC_USES_FORTRAN_SINGLE)
55 /*
56    For these machines we must call the single precision Fortran version
57 */
58 #define DGEQRF   SGEQRF
59 #define DGETRF   SGETRF
60 #define DDOT     SDOT
61 #define DNRM2    SNRM2
62 #define DSCAL    SSCAL
63 #define DCOPY    SCOPY
64 #define DSWAP    SSWAP
65 #define DAXPY    SAXPY
66 #define DASUM    SASUM
67 #define DSORMQR  SORMQR
68 #define DTRTRS   STRTRS
69 #define DPOTRF   SPOTRF
70 #define DPOTRS   SPOTRS
71 #define DGEMV    SGEMV
72 #define DGETRS   SGETRS
73 #define DGETRS   SGETRS
74 #define DGEMM    SGEMM
75 #define DGESVD   SGESVD
76 #define DGEEV    SGEEV
77 #define DSYGV    SSYGV
78 #define DSYGVX   SSYGVX
79 #define DTRMV    STRMV
80 #define DTRSL    STRSL
81 #endif
82 
83 #if defined(PETSC_USE_SINGLE)
84 
85 #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
86 #define LAPACKgeqrf_ sgeqrf_
87 #define LAPACKgetrf_ sgetrf_
88 #define LAPACKgetf2_ sgetf2_
89 #define BLASdot_     sdot_
90 #define BLASnrm2_    snrm2_
91 #define BLASscal_    sscal_
92 #define BLAScopy_    scopy_
93 #define BLASswap_    sswap_
94 #define BLASaxpy_    saxpy_
95 #define BLASasum_    sasum_
96 #elif defined(PETSC_HAVE_FORTRAN_CAPS)
97 #define LAPACKgeqrf_ SGEQRF
98 #define LAPACKgetrf_ SGETRF
99 #define LAPACKgetf2_ SGETF2
100 #define BLASdot_     SDOT
101 #define BLASnrm2_    SNRM2
102 #define BLASscal_    SSCAL
103 #define BLAScopy_    SCOPY
104 #define BLASswap_    SSWAP
105 #define BLASaxpy_    SAXPY
106 #define BLASasum_    SASUM
107 #else
108 #define LAPACKgeqrf_ sgeqrf
109 #define LAPACKgetrf_ sgetrf
110 #define LAPACKgetf2_ sgetf2
111 #define BLASdot_     sdot
112 #define BLASnrm2_    snrm2
113 #define BLASscal_    sscal
114 #define BLAScopy_    scopy
115 #define BLASswap_    sswap
116 #define BLASaxpy_    saxpy
117 #define BLASasum_    sasum
118 #endif
119 
120 #else
121 
122 #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
123 #define LAPACKgeqrf_ dgeqrf_
124 #define LAPACKgetrf_ dgetrf_
125 #define LAPACKgetf2_ dgetf2_
126 #define BLASdot_     ddot_
127 #define BLASnrm2_    dnrm2_
128 #define BLASscal_    dscal_
129 #define BLAScopy_    dcopy_
130 #define BLASswap_    dswap_
131 #define BLASaxpy_    daxpy_
132 #define BLASasum_    dasum_
133 #elif defined(PETSC_HAVE_FORTRAN_CAPS)
134 #define LAPACKgeqrf_ DGEQRF
135 #define LAPACKgetrf_ DGETRF
136 #define LAPACKgetf2_ DGETF2
137 #define BLASdot_     DDOT
138 #define BLASnrm2_    DNRM2
139 #define BLASscal_    DSCAL
140 #define BLAScopy_    DCOPY
141 #define BLASswap_    DSWAP
142 #define BLASaxpy_    DAXPY
143 #define BLASasum_    DASUM
144 #else
145 #define LAPACKgeqrf_ dgeqrf
146 #define LAPACKgetrf_ dgetrf
147 #define LAPACKgetf2_ dgetf2
148 #define BLASdot_     ddot
149 #define BLASnrm2_    dnrm2
150 #define BLASscal_    dscal
151 #define BLAScopy_    dcopy
152 #define BLASswap_    dswap
153 #define BLASaxpy_    daxpy
154 #define BLASasum_    dasum
155 #endif
156 
157 #endif
158 
159 /*
160    Real with character string arguments.
161 */
162 #if defined(PETSC_USES_CPTOFCD)
163 /*
164    Note that this assumes that machines which use cptofcd() use
165   the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E.
166 */
167 #define LAPACKormqr_(a,b,c,d,e,f,g,h,i,j,k,l,m)   DORMQR(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m))
168 #define LAPACKtrtrs_(a,b,c,d,e,f,g,h,i,j)         DTRTRS(_cptofcd((a),1),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
169 #define LAPACKpotrf_(a,b,c,d,e)                   DPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
170 #define LAPACKpotrs_(a,b,c,d,e,f,g,h)             DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
171 #define BLASgemv_(a,b,c,d,e,f,g,h,i,j,k)          DGEMV(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i),(j),(k))
172 #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
173 #define BLASgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m)      DGEMM(_cptofcd((a),1), _cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m))
174 #define LAPACKgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m,n) DGESVD(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n))
175 #define LAPACKgeev_(a,b,c,d,e,f,g,h,i,j,k,l,m,n)  DGEEV(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n))
176 #define LAPACKsygv_(a,b,c,d,e,f,g,h,i,j,k,l)      DSYGV((a),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j),(k),(l))
177 #define LAPACKsygvx_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) DSYGVX((a),_cptofcd((b),1),_cptofcd((c),1),_cptofcd((d),1),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(o),(p),(q),(r),(s),(t),(u),(v),(w))
178 #define BLAStrmv_  DTRMV
179 #define LAPACKtrsl_  DTRSL
180 #define LAPACKgetrf_ DGETRF
181 
182 #elif defined(PETSC_USE_SINGLE)
183 
184 #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
185 #define LAPACKormqr_ sormqr_
186 #define LAPACKtrtrs_ strtrs_
187 #define LAPACKpotrf_ spotrf_
188 #define LAPACKpotrs_ spotrs_
189 #define BLASgemv_  sgemv_
190 #define LAPACKgetrs_ sgetrs_
191 #define BLAStrmv_  strmv_
192 #define LAPACKtrsl_  strsl_
193 #define BLASgemm_  sgemm_
194 #define LAPACKgesvd_ sgesvd_
195 #define LAPACKgeev_  sgeev_
196 #define LAPACKsygv_  ssygv_
197 #define LAPACKsygvx_  ssygvx_
198 
199 #elif defined(PETSC_HAVE_FORTRAN_CAPS)
200 #define LAPACKormqr_ SORMQR
201 #define LAPACKtrtrs_ STRTRS
202 #define LAPACKpotrf_ SPOTRF
203 #define LAPACKpotrs_ SPOTRS
204 #define BLASgemv_  SGEMV
205 #define LAPACKgetrs_ SGETRS
206 #define BLAStrmv_  STRMV
207 #define LAPACKtrsl_  STRSL
208 #define LAPACKgesvd_ SGESVD
209 #define LAPACKgeev_  SGEEV
210 #define LAPACKsygv_  SSYGV
211 #define LAPACKsygvx_ SSYGVX
212 #define BLASgemm_  SGEMM
213 #else
214 #define LAPACKormqr_ sormqr
215 #define LAPACKtrtrs_ strtrs
216 #define LAPACKpotrf_ spotrf
217 #define LAPACKpotrs_ spotrs
218 #define BLASgemv_  sgemv
219 #define LAPACKgetrs_ sgetrs
220 #define BLAStrmv_  strmv
221 #define LAPACKtrsl_  strsl
222 #define BLASgemm_  sgemm
223 #define LAPACKgesvd_ sgesvd
224 #define LAPACKgeev_  sgeev
225 #define LAPACKsygv_  ssygv_
226 #define LAPACKsygvx_  ssygvx_
227 #endif
228 
229 #else /* PETSC_USE_SINGLE */
230 
231 #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
232 #define LAPACKormqr_ dormqr_
233 #define LAPACKtrtrs_ dtrtrs_
234 #define LAPACKpotrf_ dpotrf_
235 #define LAPACKpotrs_ dpotrs_
236 #define BLASgemv_  dgemv_
237 #define LAPACKgetrs_ dgetrs_
238 #define BLAStrmv_  dtrmv_
239 #define LAPACKtrsl_  dtrsl_
240 #define BLASgemm_  dgemm_
241 #define LAPACKgesvd_ dgesvd_
242 #define LAPACKgeev_  dgeev_
243 #define LAPACKsygv_  dsygv_
244 #define LAPACKsygvx_  dsygvx_
245 
246 #elif defined(PETSC_HAVE_FORTRAN_CAPS)
247 #define LAPACKormqr_ DORMQR
248 #define LAPACKtrtrs_ DTRTRS
249 #define LAPACKpotrf_ DPOTRF
250 #define LAPACKpotrs_ DPOTRS
251 #define BLASgemv_  DGEMV
252 #define LAPACKgetrs_ DGETRS
253 #define BLAStrmv_  DTRMV
254 #define LAPACKtrsl_  DTRSL
255 #define LAPACKgesvd_ DGESVD
256 #define LAPACKgeev_  DGEEV
257 #define LAPACKsygv_  DSYGV
258 #define LAPACKsygvx_  DSYGVX
259 #define BLASgemm_  DGEMM
260 #else
261 #define LAPACKormqr_ dormqr
262 #define LAPACKtrtrs_ dtrtrs
263 #define LAPACKpotrf_ dpotrf
264 #define LAPACKpotrs_ dpotrs
265 #define BLASgemv_  dgemv
266 #define LAPACKgetrs_ dgetrs
267 #define BLAStrmv_  dtrmv
268 #define LAPACKtrsl_  dtrsl
269 #define BLASgemm_  dgemm
270 #define LAPACKgesvd_ dgesvd
271 #define LAPACKgeev_  dgeev
272 #define LAPACKsygv_  dsygv
273 #define LAPACKsygvx_  dsygvx
274 #endif
275 
276 #endif /* PETSC_USES_CPTOFCD */
277 
278 #else
279 /*
280    Complex with no character string arguments
281 */
282 #if defined(PETSC_USES_FORTRAN_SINGLE)
283 #define ZGEQRF  CGEQRF
284 #define ZDOTC   CDOTC
285 #define DZNRM2  SCNRM2
286 #define ZSCAL   CSCAL
287 #define ZCOPY   CCOPY
288 #define ZSWAP   CSWAP
289 #define ZAXPY   CAXPY
290 #define DZASUM  SCASUM
291 #define ZGETRF  CGETRF
292 #define ZTRTRS  CTRTRS
293 #define ZPOTRF  CPOTRF
294 #define ZPOTRS  CPOTRS
295 #define ZGEMV   CGEMV
296 #define ZGETRS  CGETRS
297 #define ZGEMM   SGEMM
298 #define ZTRMV   CTRMV
299 #define ZTRSL   CTRSL
300 #define ZGEEV   CGEEV
301 #define ZSYGV   CSYGV
302 #define ZSYGVX  CSYGVX
303 #endif
304 
305 #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
306 #define LAPACKgeqrf_ zgeqrf_
307 #define LAPACKgetrf_ zgetrf_
308 #define LAPACKgetf2_ zgetf2_
309 #define BLASdot_     zdotc_
310 #define BLASnrm2_    dznrm2_
311 #define BLASscal_    zscal_
312 #define BLAScopy_    zcopy_
313 #define BLASswap_    zswap_
314 #define BLASaxpy_    zaxpy_
315 #define BLASasum_    dzasum_
316 #elif defined(PETSC_HAVE_FORTRAN_CAPS)
317 #define LAPACKgeqrf_ ZGEQRF
318 #define LAPACKgetrf_ ZGETRF
319 #define BLASdot_     ZDOTC
320 #define BLASnrm2_    DZNRM2
321 #define BLASscal_    ZSCAL
322 #define BLAScopy_    ZCOPY
323 #define BLASswap_    ZSWAP
324 #define BLASaxpy_    ZAXPY
325 #define BLASasum_    DZASUM
326 #else
327 #define LAPACKgeqrf_ zgeqrf
328 #define LAPACKgetrf_ zgetrf
329 #define LAPACKgetf2_ zgetf2
330 #define BLASdot_     zdotc
331 #define BLASnrm2_    dznrm2
332 #define BLASscal_    zscal
333 #define BLAScopy_    zcopy
334 #define BLASswap_    zswap
335 #define BLASaxpy_    zaxpy
336 #define BLASasum_    dzasum
337 #endif
338 
339 #if defined(PETSC_USES_CPTOFCD)
340 #define LAPACKtrtrs_(a,b,c,d,e,f,g,h,i,j)           ZTRTRS(_cptofcd((a),1),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j))
341 #define LAPACKpotrf_(a,b,c,d,e)                     ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
342 #define LAPACKpotrs_(a,b,c,d,e,f,g,h)               ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
343 #define BLASgemv_(a,b,c,d,e,f,g,h,i,j,k)            ZGEMV(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i),(j),(k))
344 #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i)             ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
345 #define BLASgemm_(a,b,c,d,e,f,g,h,i,j,k,l,m)        ZGEMM(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m))
346 #define LAPACKgesvd_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,p) ZGESVD(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(p))
347 #define LAPACKgeev_(a,b,c,d,e,f,g,h,i,j,k,l,m,n)    ZGEEV(_cptofcd((a),1),_cptofcd((b),1),(c),(d),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n))
348 #define LAPACKsygv_(a,b,c,d,e,f,g,h,i,j,k,l)        ZSYGV((a),_cptofcd((b),1),_cptofcd((c),1),(d),(e),(f),(g),(h),(i),(j),(k),(l))
349 #define LAPACKsygvx_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w)    ZSYGVX((a),_cptofcd((b),1),_cptofcd((c),1),_cptofcd((d),1),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(o),(p),(q),(r),(s),(t),(u),(v),(w))
350 
351 #define BLAStrmv_    ZTRMV
352 #define LAPACKtrsl_  ZTRSL
353 #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
354 #define LAPACKtrtrs_ ztrtrs_
355 #define LAPACKpotrf_ zpotrf_
356 #define LAPACKpotrs_ zpotrs_
357 #define BLASgemv_    zgemv_
358 #define LAPACKgetrs_ zgetrs_
359 #define BLAStrmv_    ztrmv_
360 #define LAPACKtrsl_  ztrsl_
361 #define BLASgemm_    zgemm_
362 #define LAPACKgesvd_ zgesvd_
363 #define LAPACKgeev_  zgeev_
364 #define LAPACKsygv_  zsygv_
365 #define LAPACKsygvx_  zsygvx_
366 
367 #elif defined(PETSC_HAVE_FORTRAN_CAPS)
368 #define LAPACKtrtrs_ ZTRTRS
369 #define LAPACKpotrf_ ZPOTRF
370 #define LAPACKpotrs_ ZPOTRS
371 #define BLASgemv_    ZGEMV
372 #define LAPACKgetrf_ ZGETRF
373 #define LAPACKgetf2_ ZGETF2
374 #define LAPACKgetrs_ ZGETRS
375 #define BLAStrmv_    ZTRMV
376 #define LAPACKtrsl_  ZTRSL
377 #define BLASgemm_    ZGEMM
378 #define LAPACKgesvd_ ZGESVD
379 #define LAPACKgeev_  ZGEEV
380 #define LAPACKsygv_  ZSYGV
381 #define LAPACKsygvx_  ZSYGVX
382 
383 #else
384 #define LAPACKtrtrs_ ztrtrs
385 #define LAPACKpotrf_ zpotrf
386 #define LAPACKpotrs_ zpotrs
387 #define BLASgemv_    zgemv
388 #define LAPACKgetrs_ zgetrs
389 #define BLAStrmv_    ztrmv
390 #define LAPACKtrsl_  ztrsl
391 #define BLASgemm_    zgemm
392 #define LAPACKgesvd_ zgesvd
393 #define LAPACKgeev_  zgeev
394 #define LAPACKsygv_  zsygv
395 #define LAPACKsygvx_  zsygvx
396 #endif
397 
398 #endif
399 
400 EXTERN_C_BEGIN
401 
402 /*
403    BLASdot cannot be used with COMPLEX because it cannot
404    handle returing a double complex to C++.
405 */
406 EXTERN PetscReal BLASdot_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
407 EXTERN PetscReal BLASnrm2_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
408 EXTERN PetscReal BLASasum_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
409 EXTERN void      BLASscal_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
410 EXTERN void      BLAScopy_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
411 EXTERN void      BLASswap_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
412 EXTERN void      BLASaxpy_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
413 EXTERN void      LAPACKgetrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
414 EXTERN void      LAPACKgetf2_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
415 EXTERN void      LAPACKgeqrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
416 
417 #if defined(PETSC_USES_CPTOFCD)
418 
419 #if defined(PETSC_USE_COMPLEX)
420 EXTERN void   ZORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
421 EXTERN void   ZTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
422 EXTERN void   ZPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
423 EXTERN void   ZGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
424 EXTERN void   ZPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
425 EXTERN void   ZGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
426 EXTERN void   ZGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
427 EXTERN void   ZGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
428 EXTERN void   ZGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
429 EXTERN void   ZSYGV(PetscBLASInt*,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
430 EXTERN void   ZSYGVX(PetscBLASInt*,_fcd,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
431 
432 #else
433 EXTERN void   DORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
434 EXTERN void   DTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
435 EXTERN void   DPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
436 EXTERN void   DGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
437 EXTERN void   DPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
438 EXTERN void   DGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
439 EXTERN void   DGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
440 EXTERN void   DGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
441 EXTERN void   DGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
442 EXTERN void   DSYGV(PetscBLASInt*,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
443 EXTERN void   DSYGVX(PetscBLASInt*,_fcd,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
444 #endif
445 
446 #else
447 EXTERN void   LAPACKormqr_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
448 EXTERN void   LAPACKtrtrs_(const char*,const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
449 EXTERN void   LAPACKpotrf_(const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
450 EXTERN void   BLASgemv_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
451 EXTERN void   LAPACKpotrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
452 EXTERN void   LAPACKgetrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
453 EXTERN void   BLASgemm_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
454 
455 /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */
456 #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX)
457 EXTERN void   LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
458 EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
459 #elif defined(PETSC_HAVE_ESSL)
460 EXTERN void   LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
461 EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
462 #elif !defined(PETSC_USE_COMPLEX)
463 EXTERN void   LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscReal*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
464 EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
465 EXTERN void   LAPACKsygv_(PetscBLASInt*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
466 EXTERN void   LAPACKsygvx_(PetscBLASInt*,const char*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
467 #else
468 EXTERN void   LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
469 EXTERN void   LAPACKsygv_(PetscBLASInt*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
470 EXTERN void   LAPACKsygvx_(PetscBLASInt*,const char*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
471 EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
472 #endif
473 #endif
474 
475 EXTERN_C_END
476 PETSC_EXTERN_CXX_END
477 #endif
478