Actual source code: petscblaslapack.h
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.
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.
11: */
12: #if !defined(_BLASLAPACK_H)
13: #define _BLASLAPACK_H
14: #include petsc.h
15: PETSC_EXTERN_CXX_BEGIN
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
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
45: #if !defined(PETSC_USE_COMPLEX)
47: /*
48: These are real case with no character string arguments
49: */
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
78: #if defined(PETSC_USE_SINGLE)
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
115: #else
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
152: #endif
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
176: #elif defined(PETSC_USE_SINGLE)
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
216: #else /* PETSC_USE_SINGLE */
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
256: #endif /* PETSC_USES_CPTOFCD */
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
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
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
365: #endif
367: EXTERN_C_BEGIN
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*);
384: #if defined(PETSC_USES_CPTOFCD)
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
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*);
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
433: EXTERN_C_END
434: PETSC_EXTERN_CXX_END
435: #endif