xref: /petsc/include/petscblaslapack.h (revision f7d3a2fdeced42086d8cd21cf836f109b7a89c13)
1*f7d3a2fdSBarry Smith /* $Id: petscblaslapack.h,v 1.47 2001/08/07 03:05:29 balay Exp bsmith $ */
2a1e12872SBarry Smith /*
3c0581c19SLois Curfman McInnes    This file provides some name space protection from LAPACK and BLAS and
4c0581c19SLois Curfman McInnes allows the appropriate single or double precision version to be used.
5c0581c19SLois Curfman McInnes This file also deals with different Fortran 77 naming conventions on machines.
65392566eSBarry Smith 
7217f3c9bSSatish Balay    Another problem is character strings are represented differently on
85392566eSBarry Smith on some machines in C and Fortran 77. This problem comes up on the
9633a50d3SSatish Balay Cray T3D/T3E.
105392566eSBarry Smith 
11a1e12872SBarry Smith */
12c3e41550SBarry Smith #if !defined(_BLASLAPACK_H)
13c3e41550SBarry Smith #define _BLASLAPACK_H
14a1e12872SBarry Smith 
1519b02663SBarry Smith #include "petsc.h"
16a1e12872SBarry Smith 
17bb638ab5SSatish Balay 
188e0e00b1SSatish Balay #if defined(PETSC_BLASLAPACK_MKL64_ONLY)
198e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
208e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GEEV
218e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRF
228e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRF
238e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GETRS
248e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_POTRS
25e7906763SSatish Balay #elif defined(PETSC_BLASLAPACK_MKL_ONLY)
26bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
27bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GEEV
28ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_CRAY_ONLY)
29bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
30ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_ESSL_ONLY)
31ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GESVD
32ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRF
33ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRS
34ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRF
35ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRS
36bb638ab5SSatish Balay #endif
37bb638ab5SSatish Balay 
388f4c8dbaSBarry Smith /*
39633a50d3SSatish Balay    This include file on the Cray T3D/T3E defines the interface between
40217f3c9bSSatish Balay   Fortran and C representations of character strings.
418f4c8dbaSBarry Smith */
42f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
4393c39befSBarry Smith #include <fortran.h>
445392566eSBarry Smith #endif
455392566eSBarry Smith 
46aa482453SBarry Smith #if !defined(PETSC_USE_COMPLEX)
474eeb42bcSBarry Smith 
484eeb42bcSBarry Smith /*
494eeb42bcSBarry Smith     These are real case with no character string arguments
504eeb42bcSBarry Smith */
518f4c8dbaSBarry Smith 
52f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE)
538f4c8dbaSBarry Smith /*
548f4c8dbaSBarry Smith    For these machines we must call the single precision Fortran version
558f4c8dbaSBarry Smith */
568f4c8dbaSBarry Smith #define DGEQRF   SGEQRF
578f4c8dbaSBarry Smith #define DGETRF   SGETRF
588f4c8dbaSBarry Smith #define DDOT     SDOT
598f4c8dbaSBarry Smith #define DNRM2    SNRM2
608f4c8dbaSBarry Smith #define DSCAL    SSCAL
618f4c8dbaSBarry Smith #define DCOPY    SCOPY
628f4c8dbaSBarry Smith #define DSWAP    SSWAP
638f4c8dbaSBarry Smith #define DAXPY    SAXPY
648f4c8dbaSBarry Smith #define DASUM    SASUM
658f4c8dbaSBarry Smith #define DSORMQR  SORMQR
668f4c8dbaSBarry Smith #define DTRTRS   STRTRS
678f4c8dbaSBarry Smith #define DPOTRF   SPOTRF
688f4c8dbaSBarry Smith #define DPOTRS   SPOTRS
698f4c8dbaSBarry Smith #define DGEMV    SGEMV
708f4c8dbaSBarry Smith #define DGETRS   SGETRS
718f4c8dbaSBarry Smith #define DGETRS   SGETRS
728f4c8dbaSBarry Smith #define DGEMM    SGEMM
738f4c8dbaSBarry Smith #define DGESVD   SGESVD
74d4fbbf0eSBarry Smith #define DGEEV    SGEEV
758f4c8dbaSBarry Smith #define DTRMV    STRMV
768f4c8dbaSBarry Smith #define DTRSL    STRSL
778f4c8dbaSBarry Smith #endif
788f4c8dbaSBarry Smith 
79ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
80c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf_
815392566eSBarry Smith #define LAgetrf_ dgetrf_
82c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2_
83a1e12872SBarry Smith #define BLdot_   ddot_
84a1e12872SBarry Smith #define BLnrm2_  dnrm2_
85a1e12872SBarry Smith #define BLscal_  dscal_
86a1e12872SBarry Smith #define BLcopy_  dcopy_
87a1e12872SBarry Smith #define BLswap_  dswap_
88a1e12872SBarry Smith #define BLaxpy_  daxpy_
89a1e12872SBarry Smith #define BLasum_  dasum_
90aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
9125fce39dSBarry Smith #define LAgeqrf_ DGEQRF
9225fce39dSBarry Smith #define LAgetrf_ DGETRF
9325fce39dSBarry Smith #define LAgetf2_ DGETF2
9425fce39dSBarry Smith #define BLdot_   DDOT
9525fce39dSBarry Smith #define BLnrm2_  DNRM2
9625fce39dSBarry Smith #define BLscal_  DSCAL
9725fce39dSBarry Smith #define BLcopy_  DCOPY
9825fce39dSBarry Smith #define BLswap_  DSWAP
9925fce39dSBarry Smith #define BLaxpy_  DAXPY
10025fce39dSBarry Smith #define BLasum_  DASUM
10125fce39dSBarry Smith #else
10225fce39dSBarry Smith #define LAgeqrf_ dgeqrf
10325fce39dSBarry Smith #define LAgetrf_ dgetrf
10425fce39dSBarry Smith #define LAgetf2_ dgetf2
10525fce39dSBarry Smith #define BLdot_   ddot
10625fce39dSBarry Smith #define BLnrm2_  dnrm2
10725fce39dSBarry Smith #define BLscal_  dscal
10825fce39dSBarry Smith #define BLcopy_  dcopy
10925fce39dSBarry Smith #define BLswap_  dswap
11025fce39dSBarry Smith #define BLaxpy_  daxpy
11125fce39dSBarry Smith #define BLasum_  dasum
112a1e12872SBarry Smith #endif
113a1e12872SBarry Smith 
1144eeb42bcSBarry Smith /*
1154eeb42bcSBarry Smith    Real with character string arguments.
1164eeb42bcSBarry Smith */
117f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
1188f4c8dbaSBarry Smith /*
1198f4c8dbaSBarry Smith    Note that this assumes that machines which use cptofcd() use
120aa482453SBarry Smith   the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E.
1218f4c8dbaSBarry Smith */
122*f7d3a2fdSBarry Smith #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))
123*f7d3a2fdSBarry Smith #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))
1248f4c8dbaSBarry Smith #define LApotrf_(a,b,c,d,e) DPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
125*f7d3a2fdSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
126*f7d3a2fdSBarry Smith #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))
127*f7d3a2fdSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
128*f7d3a2fdSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
129*f7d3a2fdSBarry Smith #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))
130*f7d3a2fdSBarry Smith #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))
131*f7d3a2fdSBarry Smith #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))
1328f4c8dbaSBarry Smith #define LAtrmv_  DTRMV
1338f4c8dbaSBarry Smith #define LAtrsl_  DTRSL
134633a50d3SSatish Balay #define LAgetrf_ DGETRF
135ae7cfcebSSatish Balay #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
13625fce39dSBarry Smith #define LAormqr_ dormqr_
13725fce39dSBarry Smith #define LAtrtrs_ dtrtrs_
13825fce39dSBarry Smith #define LApotrf_ dpotrf_
13925fce39dSBarry Smith #define LApotrs_ dpotrs_
14025fce39dSBarry Smith #define LAgemv_  dgemv_
14125fce39dSBarry Smith #define LAgetrs_ dgetrs_
14225fce39dSBarry Smith #define LAtrmv_  dtrmv_
14325fce39dSBarry Smith #define LAtrsl_  dtrsl_
14425fce39dSBarry Smith #define BLgemm_  dgemm_
14525fce39dSBarry Smith #define LAgesvd_ dgesvd_
14625fce39dSBarry Smith #define LAgeev_  dgeev_
147aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
148c0534c1cSBarry Smith #define LAormqr_ DORMQR
149c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS
150a1e12872SBarry Smith #define LApotrf_ DPOTRF
151a1e12872SBarry Smith #define LApotrs_ DPOTRS
152a1e12872SBarry Smith #define LAgemv_  DGEMV
153a1e12872SBarry Smith #define LAgetrs_ DGETRS
154a1e12872SBarry Smith #define LAtrmv_  DTRMV
155a1e12872SBarry Smith #define LAtrsl_  DTRSL
156af6b99e9SBarry Smith #define LAgesvd_ DGESVD
157d4fbbf0eSBarry Smith #define LAgeev_  DGEEV
1584eeb42bcSBarry Smith #define BLgemm_  DGEMM
15925fce39dSBarry Smith #else
160c0534c1cSBarry Smith #define LAormqr_ dormqr
161c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs
162a1e12872SBarry Smith #define LApotrf_ dpotrf
163a1e12872SBarry Smith #define LApotrs_ dpotrs
164a1e12872SBarry Smith #define LAgemv_  dgemv
165a1e12872SBarry Smith #define LAgetrs_ dgetrs
166a1e12872SBarry Smith #define LAtrmv_  dtrmv
167a1e12872SBarry Smith #define LAtrsl_  dtrsl
1684eeb42bcSBarry Smith #define BLgemm_  dgemm
169af6b99e9SBarry Smith #define LAgesvd_ dgesvd
170d4fbbf0eSBarry Smith #define LAgeev_  dgeev
171a1e12872SBarry Smith #endif
172a1e12872SBarry Smith 
173a1e12872SBarry Smith #else
1744eeb42bcSBarry Smith /*
1754eeb42bcSBarry Smith    Complex with no character string arguments
1764eeb42bcSBarry Smith */
177f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE)
1788f4c8dbaSBarry Smith #define ZGEQRF  CGEQRF
1798f4c8dbaSBarry Smith #define ZDOTC   CDOTC
1808f4c8dbaSBarry Smith #define DZNRM2  SCNRM2
1818f4c8dbaSBarry Smith #define ZSCAL   CSCAL
1828f4c8dbaSBarry Smith #define ZCOPY   CCOPY
1838f4c8dbaSBarry Smith #define ZSWAP   CSWAP
1848f4c8dbaSBarry Smith #define ZAXPY   CAXPY
1858f4c8dbaSBarry Smith #define DZASUM  SCASUM
1868f4c8dbaSBarry Smith #define ZGETRF  CGETRF
1878f4c8dbaSBarry Smith #define ZTRTRS  CTRTRS
1888f4c8dbaSBarry Smith #define ZPOTRF  CPOTRF
1898f4c8dbaSBarry Smith #define ZPOTRS  CPOTRS
1908f4c8dbaSBarry Smith #define ZGEMV   CGEMV
1918f4c8dbaSBarry Smith #define ZGETRS  CGETRS
1928f4c8dbaSBarry Smith #define ZGEMM   SGEMM
1938f4c8dbaSBarry Smith #define ZTRMV   CTRMV
194160814fdSSatish Balay #define ZTRSL   CTRSL
195633a50d3SSatish Balay #define ZGEEV   CGEEV
1968f4c8dbaSBarry Smith #endif
1978f4c8dbaSBarry Smith 
198ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
199c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_
2005392566eSBarry Smith #define LAgetrf_ zgetrf_
20108d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_
202a1e12872SBarry Smith #define BLdot_   zdotc_
203a1e12872SBarry Smith #define BLnrm2_  dznrm2_
204a1e12872SBarry Smith #define BLscal_  zscal_
205a1e12872SBarry Smith #define BLcopy_  zcopy_
206a1e12872SBarry Smith #define BLswap_  zswap_
207a1e12872SBarry Smith #define BLaxpy_  zaxpy_
208a1e12872SBarry Smith #define BLasum_  dzasum_
209aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
21025fce39dSBarry Smith #define LAgeqrf_ ZGEQRF
21125fce39dSBarry Smith #define BLdot_   ZDOTC
21225fce39dSBarry Smith #define BLnrm2_  DZNRM2
21325fce39dSBarry Smith #define BLscal_  ZSCAL
21425fce39dSBarry Smith #define BLcopy_  ZCOPY
21525fce39dSBarry Smith #define BLswap_  ZSWAP
21625fce39dSBarry Smith #define BLaxpy_  ZAXPY
21725fce39dSBarry Smith #define BLasum_  DZASUM
21825fce39dSBarry Smith #define LAgetrf_ ZGETRF
21925fce39dSBarry Smith #else
22025fce39dSBarry Smith #define LAgeqrf_ zgeqrf
22125fce39dSBarry Smith #define LAgetrf_ zgetrf
22225fce39dSBarry Smith #define LAgetf2_ zgetf2
22325fce39dSBarry Smith #define BLdot_   zdotc
22425fce39dSBarry Smith #define BLnrm2_  dznrm2
22525fce39dSBarry Smith #define BLscal_  zscal
22625fce39dSBarry Smith #define BLcopy_  zcopy
22725fce39dSBarry Smith #define BLswap_  zswap
22825fce39dSBarry Smith #define BLaxpy_  zaxpy
22925fce39dSBarry Smith #define BLasum_  dzasum
230a1e12872SBarry Smith #endif
231a1e12872SBarry Smith 
232f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
233*f7d3a2fdSBarry Smith #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))
2348f4c8dbaSBarry Smith #define LApotrf_(a,b,c,d,e)       ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
235*f7d3a2fdSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h) ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
236*f7d3a2fdSBarry Smith #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))
237*f7d3a2fdSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i) ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
238*f7d3a2fdSBarry Smith #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))
239*f7d3a2fdSBarry Smith #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))
240*f7d3a2fdSBarry Smith #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))
2418f4c8dbaSBarry Smith #define LAtrmv_  ZTRMV
2428f4c8dbaSBarry Smith #define LAtrsl_  ZTRSL
243ae7cfcebSSatish Balay #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
24425fce39dSBarry Smith #define LAtrtrs_ ztrtrs_
24525fce39dSBarry Smith #define LApotrf_ zpotrf_
24625fce39dSBarry Smith #define LApotrs_ zpotrs_
24725fce39dSBarry Smith #define LAgemv_  zgemv_
24825fce39dSBarry Smith #define LAgetrs_ zgetrs_
24925fce39dSBarry Smith #define LAtrmv_  ztrmv_
25025fce39dSBarry Smith #define LAtrsl_  ztrsl_
25125fce39dSBarry Smith #define BLgemm_  zgemm_
25225fce39dSBarry Smith #define LAgesvd_ zgesvd_
25325fce39dSBarry Smith #define LAgeev_  zgeev_
254aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
255c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS
256a1e12872SBarry Smith #define LApotrf_ ZPOTRF
257a1e12872SBarry Smith #define LApotrs_ ZPOTRS
258a1e12872SBarry Smith #define LAgemv_  ZGEMV
259a1e12872SBarry Smith #define LAgetrf_ ZGETRF
26008d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2
261a1e12872SBarry Smith #define LAgetrs_ ZGETRS
262a1e12872SBarry Smith #define LAtrmv_  ZTRMV
263a1e12872SBarry Smith #define LAtrsl_  ZTRSL
2645a778de9SBarry Smith #define BLgemm_  ZGEMM
265d4fbbf0eSBarry Smith #define LAgesvd_ ZGESVD
266d4fbbf0eSBarry Smith #define LAgeev_  ZGEEV
26725fce39dSBarry Smith #else
268c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
269a1e12872SBarry Smith #define LApotrf_ zpotrf
270a1e12872SBarry Smith #define LApotrs_ zpotrs
271a1e12872SBarry Smith #define LAgemv_  zgemv
272a1e12872SBarry Smith #define LAgetrs_ zgetrs
273a1e12872SBarry Smith #define LAtrmv_  ztrmv
274a1e12872SBarry Smith #define LAtrsl_  ztrsl
2755a778de9SBarry Smith #define BLgemm_  zgemm
276d4fbbf0eSBarry Smith #define LAgesvd_ zgesvd
277d4fbbf0eSBarry Smith #define LAgeev_  zgeev
278a1e12872SBarry Smith #endif
279a1e12872SBarry Smith 
280a1e12872SBarry Smith #endif
281a1e12872SBarry Smith 
282fb2e594dSBarry Smith EXTERN_C_BEGIN
283a1e12872SBarry Smith 
2848f4c8dbaSBarry Smith /*
2858f4c8dbaSBarry Smith    BLdot cannot be used with COMPLEX because it cannot
2868f4c8dbaSBarry Smith    handle returing a double complex to C++.
287126c565eSBarry Smith */
28887828ca2SBarry Smith EXTERN double BLdot_(int*,PetscScalar*,int*,PetscScalar*,int*);
289*f7d3a2fdSBarry Smith EXTERN double BLnrm2_(int*,PetscScalar*,int*);
290*f7d3a2fdSBarry Smith EXTERN double BLasum_(int*,PetscScalar*,int*);
29187828ca2SBarry Smith EXTERN void   BLscal_(int*,PetscScalar*,PetscScalar*,int*);
29287828ca2SBarry Smith EXTERN void   BLcopy_(int*,PetscScalar*,int*,PetscScalar*,int*);
29387828ca2SBarry Smith EXTERN void   BLswap_(int*,PetscScalar*,int*,PetscScalar*,int*);
29487828ca2SBarry Smith EXTERN void   BLaxpy_(int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*);
29587828ca2SBarry Smith EXTERN void   LAgetrf_(int*,int*,PetscScalar*,int*,int*,int*);
29687828ca2SBarry Smith EXTERN void   LAgetf2_(int*,int*,PetscScalar*,int*,int*,int*);
29787828ca2SBarry Smith EXTERN void   LAgeqrf_(int*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,int*);
2985392566eSBarry Smith 
299f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
300112a2221SBarry Smith 
301aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX)
30287828ca2SBarry Smith EXTERN void   ZPOTRF(_fcd,int*,PetscScalar*,int*,int*);
303*f7d3a2fdSBarry Smith EXTERN void   ZGEMV(_fcd,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*);
30487828ca2SBarry Smith EXTERN void   ZPOTRS(_fcd,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
30587828ca2SBarry Smith EXTERN void   ZGETRS(_fcd,int*,int*,PetscScalar*,int*,int*,PetscScalar*,int*,int*);
306*f7d3a2fdSBarry Smith EXTERN void   ZGEMM(_fcd,_fcd,int*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*);
307*f7d3a2fdSBarry Smith EXTERN void   ZGESVD(_fcd,_fcd,int *,int*,PetscScalar *,int*,double*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,double*,int*);
308*f7d3a2fdSBarry Smith EXTERN void   ZGEEV(_fcd,_fcd,int *,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,double*,int*);
3095392566eSBarry Smith #else
31087828ca2SBarry Smith EXTERN void   DPOTRF(_fcd,int*,PetscScalar*,int*,int*);
311*f7d3a2fdSBarry Smith EXTERN void   DGEMV(_fcd,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*);
31287828ca2SBarry Smith EXTERN void   DPOTRS(_fcd,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
31387828ca2SBarry Smith EXTERN void   DGETRS(_fcd,int*,int*,PetscScalar*,int*,int*,PetscScalar*,int*,int*);
314*f7d3a2fdSBarry Smith EXTERN void   DGEMM(_fcd,_fcd,int*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*);
315*f7d3a2fdSBarry Smith EXTERN void   DGESVD(_fcd,_fcd,int *,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
316*f7d3a2fdSBarry Smith EXTERN void   DGEEV(_fcd,_fcd,int *,PetscScalar *,int*,PetscScalar*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
317112a2221SBarry Smith #endif
318112a2221SBarry Smith 
319112a2221SBarry Smith #else
320*f7d3a2fdSBarry Smith EXTERN void   LAormqr_(char*,char*,int*,int*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,int*);
321*f7d3a2fdSBarry Smith EXTERN void   LAtrtrs_(char*,char*,char*,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
32287828ca2SBarry Smith EXTERN void   LApotrf_(char*,int*,PetscScalar*,int*,int*);
323*f7d3a2fdSBarry Smith EXTERN void   LAgemv_(char*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*);
32487828ca2SBarry Smith EXTERN void   LApotrs_(char*,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
32587828ca2SBarry Smith EXTERN void   LAgetrs_(char*,int*,int*,PetscScalar*,int*,int*,PetscScalar*,int*,int*);
326*f7d3a2fdSBarry Smith EXTERN void   BLgemm_(char *,char*,int*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*);
327e38aa075SLois Curfman McInnes 
328e38aa075SLois Curfman McInnes /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */
329aa482453SBarry Smith #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX)
33087828ca2SBarry Smith EXTERN void   LAgeev_(int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,int*,int*,double*,int*);
331*f7d3a2fdSBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,double*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,double*,int*);
332aa482453SBarry Smith #elif defined(PETSC_HAVE_ESSL)
33387828ca2SBarry Smith EXTERN void   LAgeev_(int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,int*,int*,double*,int*);
334*f7d3a2fdSBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,double*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
335aa482453SBarry Smith #elif !defined(PETSC_USE_COMPLEX)
336*f7d3a2fdSBarry Smith EXTERN void   LAgeev_(char *,char *,int *,PetscScalar *,int*,double*,double*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
337*f7d3a2fdSBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,double*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
338d4fbbf0eSBarry Smith #else
339*f7d3a2fdSBarry Smith EXTERN void   LAgeev_(char *,char *,int *,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,double*,int*);
340*f7d3a2fdSBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,double*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,double*,int*);
341d4fbbf0eSBarry Smith #endif
3425392566eSBarry Smith #endif
343a1e12872SBarry Smith 
344fb2e594dSBarry Smith EXTERN_C_END
345a1e12872SBarry Smith 
346a1e12872SBarry Smith #endif
3475a778de9SBarry Smith 
348