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