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