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