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
15: #include petsc.h
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
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
46: #if !defined(PETSC_USE_COMPLEX)
48: /*
49: These are real case with no character string arguments
50: */
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
79: #if defined(PETSC_USE_SINGLE)
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
116: #else
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
153: #endif
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
177: #elif defined(PETSC_USE_SINGLE)
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
217: #else /* PETSC_USE_SINGLE */
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
257: #endif /* PETSC_USES_CPTOFCD */
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
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
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
366: #endif
368: EXTERN_C_BEGIN
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*);
385: #if defined(PETSC_USES_CPTOFCD)
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
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*);
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
434: EXTERN_C_END
436: #endif