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