xref: /petsc/include/petscblaslapack.h (revision 516d1546314df30606f63bb2b355587cdc58f501)
1*516d1546SSatish Balay /* $Id: petscblaslapack.h,v 1.50 2001/08/10 01:50:08 balay Exp balay $ */
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 
7901ad1a64SSatish Balay #if defined(PETSC_USE_SINGLE)
8001ad1a64SSatish Balay 
8101ad1a64SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
8201ad1a64SSatish Balay #define LAgeqrf_ sgeqrf_
8301ad1a64SSatish Balay #define LAgetrf_ sgetrf_
8401ad1a64SSatish Balay #define LAgetf2_ sgetf2_
8501ad1a64SSatish Balay #define BLdot_   sdot_
8601ad1a64SSatish Balay #define BLnrm2_  snrm2_
8701ad1a64SSatish Balay #define BLscal_  sscal_
8801ad1a64SSatish Balay #define BLcopy_  scopy_
8901ad1a64SSatish Balay #define BLswap_  sswap_
9001ad1a64SSatish Balay #define BLaxpy_  saxpy_
9101ad1a64SSatish Balay #define BLasum_  sasum_
9201ad1a64SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS)
9301ad1a64SSatish Balay #define LAgeqrf_ SGEQRF
9401ad1a64SSatish Balay #define LAgetrf_ SGETRF
9501ad1a64SSatish Balay #define LAgetf2_ SGETF2
9601ad1a64SSatish Balay #define BLdot_   SDOT
9701ad1a64SSatish Balay #define BLnrm2_  SNRM2
9801ad1a64SSatish Balay #define BLscal_  SSCAL
9901ad1a64SSatish Balay #define BLcopy_  SCOPY
10001ad1a64SSatish Balay #define BLswap_  SSWAP
10101ad1a64SSatish Balay #define BLaxpy_  SAXPY
10201ad1a64SSatish Balay #define BLasum_  SASUM
10301ad1a64SSatish Balay #else
10401ad1a64SSatish Balay #define LAgeqrf_ sgeqrf
10501ad1a64SSatish Balay #define LAgetrf_ sgetrf
10601ad1a64SSatish Balay #define LAgetf2_ sgetf2
10701ad1a64SSatish Balay #define BLdot_   sdot
10801ad1a64SSatish Balay #define BLnrm2_  snrm2
10901ad1a64SSatish Balay #define BLscal_  sscal
11001ad1a64SSatish Balay #define BLcopy_  scopy
11101ad1a64SSatish Balay #define BLswap_  sswap
11201ad1a64SSatish Balay #define BLaxpy_  saxpy
11301ad1a64SSatish Balay #define BLasum_  sasum
11401ad1a64SSatish Balay #endif
11501ad1a64SSatish Balay 
11601ad1a64SSatish Balay #else
11701ad1a64SSatish Balay 
118ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
119c0534c1cSBarry Smith #define LAgeqrf_ dgeqrf_
1205392566eSBarry Smith #define LAgetrf_ dgetrf_
121c0581c19SLois Curfman McInnes #define LAgetf2_ dgetf2_
122a1e12872SBarry Smith #define BLdot_   ddot_
123a1e12872SBarry Smith #define BLnrm2_  dnrm2_
124a1e12872SBarry Smith #define BLscal_  dscal_
125a1e12872SBarry Smith #define BLcopy_  dcopy_
126a1e12872SBarry Smith #define BLswap_  dswap_
127a1e12872SBarry Smith #define BLaxpy_  daxpy_
128a1e12872SBarry Smith #define BLasum_  dasum_
129aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
13025fce39dSBarry Smith #define LAgeqrf_ DGEQRF
13125fce39dSBarry Smith #define LAgetrf_ DGETRF
13225fce39dSBarry Smith #define LAgetf2_ DGETF2
13325fce39dSBarry Smith #define BLdot_   DDOT
13425fce39dSBarry Smith #define BLnrm2_  DNRM2
13525fce39dSBarry Smith #define BLscal_  DSCAL
13625fce39dSBarry Smith #define BLcopy_  DCOPY
13725fce39dSBarry Smith #define BLswap_  DSWAP
13825fce39dSBarry Smith #define BLaxpy_  DAXPY
13925fce39dSBarry Smith #define BLasum_  DASUM
14025fce39dSBarry Smith #else
14125fce39dSBarry Smith #define LAgeqrf_ dgeqrf
14225fce39dSBarry Smith #define LAgetrf_ dgetrf
14325fce39dSBarry Smith #define LAgetf2_ dgetf2
14425fce39dSBarry Smith #define BLdot_   ddot
14525fce39dSBarry Smith #define BLnrm2_  dnrm2
14625fce39dSBarry Smith #define BLscal_  dscal
14725fce39dSBarry Smith #define BLcopy_  dcopy
14825fce39dSBarry Smith #define BLswap_  dswap
14925fce39dSBarry Smith #define BLaxpy_  daxpy
15025fce39dSBarry Smith #define BLasum_  dasum
151a1e12872SBarry Smith #endif
152a1e12872SBarry Smith 
15301ad1a64SSatish Balay #endif
15401ad1a64SSatish Balay 
1554eeb42bcSBarry Smith /*
1564eeb42bcSBarry Smith    Real with character string arguments.
1574eeb42bcSBarry Smith */
158f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
1598f4c8dbaSBarry Smith /*
1608f4c8dbaSBarry Smith    Note that this assumes that machines which use cptofcd() use
161aa482453SBarry Smith   the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E.
1628f4c8dbaSBarry Smith */
163f7d3a2fdSBarry 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))
164f7d3a2fdSBarry 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))
1658f4c8dbaSBarry Smith #define LApotrf_(a,b,c,d,e)                   DPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
166f7d3a2fdSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h)             DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
167f7d3a2fdSBarry 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))
168f7d3a2fdSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
169f7d3a2fdSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
170f7d3a2fdSBarry 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))
171f7d3a2fdSBarry 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))
172f7d3a2fdSBarry 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))
1738f4c8dbaSBarry Smith #define LAtrmv_  DTRMV
1748f4c8dbaSBarry Smith #define LAtrsl_  DTRSL
175633a50d3SSatish Balay #define LAgetrf_ DGETRF
176*516d1546SSatish Balay 
177*516d1546SSatish Balay #elif defined(PETSC_USE_SINGLE)
178*516d1546SSatish Balay 
179*516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
180*516d1546SSatish Balay #define LAormqr_ sormqr_
181*516d1546SSatish Balay #define LAtrtrs_ strtrs_
182*516d1546SSatish Balay #define LApotrf_ spotrf_
183*516d1546SSatish Balay #define LApotrs_ spotrs_
184*516d1546SSatish Balay #define LAgemv_  sgemv_
185*516d1546SSatish Balay #define LAgetrs_ sgetrs_
186*516d1546SSatish Balay #define LAtrmv_  strmv_
187*516d1546SSatish Balay #define LAtrsl_  strsl_
188*516d1546SSatish Balay #define BLgemm_  sgemm_
189*516d1546SSatish Balay #define LAgesvd_ sgesvd_
190*516d1546SSatish Balay #define LAgeev_  sgeev_
191*516d1546SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS)
192*516d1546SSatish Balay #define LAormqr_ SORMQR
193*516d1546SSatish Balay #define LAtrtrs_ STRTRS
194*516d1546SSatish Balay #define LApotrf_ SPOTRF
195*516d1546SSatish Balay #define LApotrs_ SPOTRS
196*516d1546SSatish Balay #define LAgemv_  SGEMV
197*516d1546SSatish Balay #define LAgetrs_ SGETRS
198*516d1546SSatish Balay #define LAtrmv_  STRMV
199*516d1546SSatish Balay #define LAtrsl_  STRSL
200*516d1546SSatish Balay #define LAgesvd_ SGESVD
201*516d1546SSatish Balay #define LAgeev_  SGEEV
202*516d1546SSatish Balay #define BLgemm_  SGEMM
203*516d1546SSatish Balay #else
204*516d1546SSatish Balay #define LAormqr_ sormqr
205*516d1546SSatish Balay #define LAtrtrs_ strtrs
206*516d1546SSatish Balay #define LApotrf_ spotrf
207*516d1546SSatish Balay #define LApotrs_ spotrs
208*516d1546SSatish Balay #define LAgemv_  sgemv
209*516d1546SSatish Balay #define LAgetrs_ sgetrs
210*516d1546SSatish Balay #define LAtrmv_  strmv
211*516d1546SSatish Balay #define LAtrsl_  strsl
212*516d1546SSatish Balay #define BLgemm_  sgemm
213*516d1546SSatish Balay #define LAgesvd_ sgesvd
214*516d1546SSatish Balay #define LAgeev_  sgeev
215*516d1546SSatish Balay #endif
216*516d1546SSatish Balay 
217*516d1546SSatish Balay #else /* PETSC_USE_SINGLE */
218*516d1546SSatish Balay 
219*516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
22025fce39dSBarry Smith #define LAormqr_ dormqr_
22125fce39dSBarry Smith #define LAtrtrs_ dtrtrs_
22225fce39dSBarry Smith #define LApotrf_ dpotrf_
22325fce39dSBarry Smith #define LApotrs_ dpotrs_
22425fce39dSBarry Smith #define LAgemv_  dgemv_
22525fce39dSBarry Smith #define LAgetrs_ dgetrs_
22625fce39dSBarry Smith #define LAtrmv_  dtrmv_
22725fce39dSBarry Smith #define LAtrsl_  dtrsl_
22825fce39dSBarry Smith #define BLgemm_  dgemm_
22925fce39dSBarry Smith #define LAgesvd_ dgesvd_
23025fce39dSBarry Smith #define LAgeev_  dgeev_
231aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
232c0534c1cSBarry Smith #define LAormqr_ DORMQR
233c0534c1cSBarry Smith #define LAtrtrs_ DTRTRS
234a1e12872SBarry Smith #define LApotrf_ DPOTRF
235a1e12872SBarry Smith #define LApotrs_ DPOTRS
236a1e12872SBarry Smith #define LAgemv_  DGEMV
237a1e12872SBarry Smith #define LAgetrs_ DGETRS
238a1e12872SBarry Smith #define LAtrmv_  DTRMV
239a1e12872SBarry Smith #define LAtrsl_  DTRSL
240af6b99e9SBarry Smith #define LAgesvd_ DGESVD
241d4fbbf0eSBarry Smith #define LAgeev_  DGEEV
2424eeb42bcSBarry Smith #define BLgemm_  DGEMM
24325fce39dSBarry Smith #else
244c0534c1cSBarry Smith #define LAormqr_ dormqr
245c0534c1cSBarry Smith #define LAtrtrs_ dtrtrs
246a1e12872SBarry Smith #define LApotrf_ dpotrf
247a1e12872SBarry Smith #define LApotrs_ dpotrs
248a1e12872SBarry Smith #define LAgemv_  dgemv
249a1e12872SBarry Smith #define LAgetrs_ dgetrs
250a1e12872SBarry Smith #define LAtrmv_  dtrmv
251a1e12872SBarry Smith #define LAtrsl_  dtrsl
2524eeb42bcSBarry Smith #define BLgemm_  dgemm
253af6b99e9SBarry Smith #define LAgesvd_ dgesvd
254d4fbbf0eSBarry Smith #define LAgeev_  dgeev
255a1e12872SBarry Smith #endif
256a1e12872SBarry Smith 
257*516d1546SSatish Balay #endif /* PETSC_USES_CPTOFCD */
258*516d1546SSatish Balay 
259a1e12872SBarry Smith #else
2604eeb42bcSBarry Smith /*
2614eeb42bcSBarry Smith    Complex with no character string arguments
2624eeb42bcSBarry Smith */
263f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE)
2648f4c8dbaSBarry Smith #define ZGEQRF  CGEQRF
2658f4c8dbaSBarry Smith #define ZDOTC   CDOTC
2668f4c8dbaSBarry Smith #define DZNRM2  SCNRM2
2678f4c8dbaSBarry Smith #define ZSCAL   CSCAL
2688f4c8dbaSBarry Smith #define ZCOPY   CCOPY
2698f4c8dbaSBarry Smith #define ZSWAP   CSWAP
2708f4c8dbaSBarry Smith #define ZAXPY   CAXPY
2718f4c8dbaSBarry Smith #define DZASUM  SCASUM
2728f4c8dbaSBarry Smith #define ZGETRF  CGETRF
2738f4c8dbaSBarry Smith #define ZTRTRS  CTRTRS
2748f4c8dbaSBarry Smith #define ZPOTRF  CPOTRF
2758f4c8dbaSBarry Smith #define ZPOTRS  CPOTRS
2768f4c8dbaSBarry Smith #define ZGEMV   CGEMV
2778f4c8dbaSBarry Smith #define ZGETRS  CGETRS
2788f4c8dbaSBarry Smith #define ZGEMM   SGEMM
2798f4c8dbaSBarry Smith #define ZTRMV   CTRMV
280160814fdSSatish Balay #define ZTRSL   CTRSL
281633a50d3SSatish Balay #define ZGEEV   CGEEV
2828f4c8dbaSBarry Smith #endif
2838f4c8dbaSBarry Smith 
284ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
285c0534c1cSBarry Smith #define LAgeqrf_ zgeqrf_
2865392566eSBarry Smith #define LAgetrf_ zgetrf_
28708d0dac7SLois Curfman McInnes #define LAgetf2_ zgetf2_
288a1e12872SBarry Smith #define BLdot_   zdotc_
289a1e12872SBarry Smith #define BLnrm2_  dznrm2_
290a1e12872SBarry Smith #define BLscal_  zscal_
291a1e12872SBarry Smith #define BLcopy_  zcopy_
292a1e12872SBarry Smith #define BLswap_  zswap_
293a1e12872SBarry Smith #define BLaxpy_  zaxpy_
294a1e12872SBarry Smith #define BLasum_  dzasum_
295aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
29625fce39dSBarry Smith #define LAgeqrf_ ZGEQRF
29725fce39dSBarry Smith #define BLdot_   ZDOTC
29825fce39dSBarry Smith #define BLnrm2_  DZNRM2
29925fce39dSBarry Smith #define BLscal_  ZSCAL
30025fce39dSBarry Smith #define BLcopy_  ZCOPY
30125fce39dSBarry Smith #define BLswap_  ZSWAP
30225fce39dSBarry Smith #define BLaxpy_  ZAXPY
30325fce39dSBarry Smith #define BLasum_  DZASUM
30425fce39dSBarry Smith #define LAgetrf_ ZGETRF
30525fce39dSBarry Smith #else
30625fce39dSBarry Smith #define LAgeqrf_ zgeqrf
30725fce39dSBarry Smith #define LAgetrf_ zgetrf
30825fce39dSBarry Smith #define LAgetf2_ zgetf2
30925fce39dSBarry Smith #define BLdot_   zdotc
31025fce39dSBarry Smith #define BLnrm2_  dznrm2
31125fce39dSBarry Smith #define BLscal_  zscal
31225fce39dSBarry Smith #define BLcopy_  zcopy
31325fce39dSBarry Smith #define BLswap_  zswap
31425fce39dSBarry Smith #define BLaxpy_  zaxpy
31525fce39dSBarry Smith #define BLasum_  dzasum
316a1e12872SBarry Smith #endif
317a1e12872SBarry Smith 
318f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
319f7d3a2fdSBarry 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))
3208f4c8dbaSBarry Smith #define LApotrf_(a,b,c,d,e)                     ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
321f7d3a2fdSBarry Smith #define LApotrs_(a,b,c,d,e,f,g,h)               ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
322f7d3a2fdSBarry 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))
323f7d3a2fdSBarry Smith #define LAgetrs_(a,b,c,d,e,f,g,h,i)             ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
324f7d3a2fdSBarry 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))
325f7d3a2fdSBarry 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))
326f7d3a2fdSBarry 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))
3278f4c8dbaSBarry Smith #define LAtrmv_  ZTRMV
3288f4c8dbaSBarry Smith #define LAtrsl_  ZTRSL
329ae7cfcebSSatish Balay #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
33025fce39dSBarry Smith #define LAtrtrs_ ztrtrs_
33125fce39dSBarry Smith #define LApotrf_ zpotrf_
33225fce39dSBarry Smith #define LApotrs_ zpotrs_
33325fce39dSBarry Smith #define LAgemv_  zgemv_
33425fce39dSBarry Smith #define LAgetrs_ zgetrs_
33525fce39dSBarry Smith #define LAtrmv_  ztrmv_
33625fce39dSBarry Smith #define LAtrsl_  ztrsl_
33725fce39dSBarry Smith #define BLgemm_  zgemm_
33825fce39dSBarry Smith #define LAgesvd_ zgesvd_
33925fce39dSBarry Smith #define LAgeev_  zgeev_
340aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
341c0534c1cSBarry Smith #define LAtrtrs_ ZTRTRS
342a1e12872SBarry Smith #define LApotrf_ ZPOTRF
343a1e12872SBarry Smith #define LApotrs_ ZPOTRS
344a1e12872SBarry Smith #define LAgemv_  ZGEMV
345a1e12872SBarry Smith #define LAgetrf_ ZGETRF
34608d0dac7SLois Curfman McInnes #define LAgetf2_ ZGETF2
347a1e12872SBarry Smith #define LAgetrs_ ZGETRS
348a1e12872SBarry Smith #define LAtrmv_  ZTRMV
349a1e12872SBarry Smith #define LAtrsl_  ZTRSL
3505a778de9SBarry Smith #define BLgemm_  ZGEMM
351d4fbbf0eSBarry Smith #define LAgesvd_ ZGESVD
352d4fbbf0eSBarry Smith #define LAgeev_  ZGEEV
35325fce39dSBarry Smith #else
354c0534c1cSBarry Smith #define LAtrtrs_ ztrtrs
355a1e12872SBarry Smith #define LApotrf_ zpotrf
356a1e12872SBarry Smith #define LApotrs_ zpotrs
357a1e12872SBarry Smith #define LAgemv_  zgemv
358a1e12872SBarry Smith #define LAgetrs_ zgetrs
359a1e12872SBarry Smith #define LAtrmv_  ztrmv
360a1e12872SBarry Smith #define LAtrsl_  ztrsl
3615a778de9SBarry Smith #define BLgemm_  zgemm
362d4fbbf0eSBarry Smith #define LAgesvd_ zgesvd
363d4fbbf0eSBarry Smith #define LAgeev_  zgeev
364a1e12872SBarry Smith #endif
365a1e12872SBarry Smith 
366a1e12872SBarry Smith #endif
367a1e12872SBarry Smith 
368fb2e594dSBarry Smith EXTERN_C_BEGIN
369a1e12872SBarry Smith 
3708f4c8dbaSBarry Smith /*
3718f4c8dbaSBarry Smith    BLdot cannot be used with COMPLEX because it cannot
3728f4c8dbaSBarry Smith    handle returing a double complex to C++.
373126c565eSBarry Smith */
37413f16e43SBarry Smith EXTERN PetscReal BLdot_(int*,PetscScalar*,int*,PetscScalar*,int*);
37513f16e43SBarry Smith EXTERN PetscReal BLnrm2_(int*,PetscScalar*,int*);
37613f16e43SBarry Smith EXTERN PetscReal BLasum_(int*,PetscScalar*,int*);
37787828ca2SBarry Smith EXTERN void      BLscal_(int*,PetscScalar*,PetscScalar*,int*);
37887828ca2SBarry Smith EXTERN void      BLcopy_(int*,PetscScalar*,int*,PetscScalar*,int*);
37987828ca2SBarry Smith EXTERN void      BLswap_(int*,PetscScalar*,int*,PetscScalar*,int*);
38087828ca2SBarry Smith EXTERN void      BLaxpy_(int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*);
38187828ca2SBarry Smith EXTERN void      LAgetrf_(int*,int*,PetscScalar*,int*,int*,int*);
38287828ca2SBarry Smith EXTERN void      LAgetf2_(int*,int*,PetscScalar*,int*,int*,int*);
38387828ca2SBarry Smith EXTERN void      LAgeqrf_(int*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,int*);
3845392566eSBarry Smith 
385f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
386112a2221SBarry Smith 
387aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX)
38887828ca2SBarry Smith EXTERN void   ZPOTRF(_fcd,int*,PetscScalar*,int*,int*);
389f7d3a2fdSBarry Smith EXTERN void   ZGEMV(_fcd,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*);
39087828ca2SBarry Smith EXTERN void   ZPOTRS(_fcd,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
39187828ca2SBarry Smith EXTERN void   ZGETRS(_fcd,int*,int*,PetscScalar*,int*,int*,PetscScalar*,int*,int*);
392f7d3a2fdSBarry Smith EXTERN void   ZGEMM(_fcd,_fcd,int*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*);
39313f16e43SBarry Smith EXTERN void   ZGESVD(_fcd,_fcd,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
39413f16e43SBarry Smith EXTERN void   ZGEEV(_fcd,_fcd,int *,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
3955392566eSBarry Smith #else
39687828ca2SBarry Smith EXTERN void   DPOTRF(_fcd,int*,PetscScalar*,int*,int*);
397f7d3a2fdSBarry Smith EXTERN void   DGEMV(_fcd,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*);
39887828ca2SBarry Smith EXTERN void   DPOTRS(_fcd,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
39987828ca2SBarry Smith EXTERN void   DGETRS(_fcd,int*,int*,PetscScalar*,int*,int*,PetscScalar*,int*,int*);
400f7d3a2fdSBarry Smith EXTERN void   DGEMM(_fcd,_fcd,int*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*);
401f7d3a2fdSBarry Smith EXTERN void   DGESVD(_fcd,_fcd,int *,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
402f7d3a2fdSBarry Smith EXTERN void   DGEEV(_fcd,_fcd,int *,PetscScalar *,int*,PetscScalar*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
403112a2221SBarry Smith #endif
404112a2221SBarry Smith 
405112a2221SBarry Smith #else
406f7d3a2fdSBarry Smith EXTERN void   LAormqr_(char*,char*,int*,int*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,int*);
407f7d3a2fdSBarry Smith EXTERN void   LAtrtrs_(char*,char*,char*,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
40887828ca2SBarry Smith EXTERN void   LApotrf_(char*,int*,PetscScalar*,int*,int*);
409f7d3a2fdSBarry Smith EXTERN void   LAgemv_(char*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*);
41087828ca2SBarry Smith EXTERN void   LApotrs_(char*,int*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
41187828ca2SBarry Smith EXTERN void   LAgetrs_(char*,int*,int*,PetscScalar*,int*,int*,PetscScalar*,int*,int*);
412f7d3a2fdSBarry Smith EXTERN void   BLgemm_(char *,char*,int*,int*,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*);
413e38aa075SLois Curfman McInnes 
414e38aa075SLois Curfman McInnes /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */
415aa482453SBarry Smith #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX)
41613f16e43SBarry Smith EXTERN void   LAgeev_(int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,int*,int*,PetscReal*,int*);
41713f16e43SBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
418aa482453SBarry Smith #elif defined(PETSC_HAVE_ESSL)
41913f16e43SBarry Smith EXTERN void   LAgeev_(int*,PetscScalar*,int*,PetscScalar*,PetscScalar*,int*,int*,int*,PetscReal*,int*);
42013f16e43SBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
421aa482453SBarry Smith #elif !defined(PETSC_USE_COMPLEX)
42213f16e43SBarry Smith EXTERN void   LAgeev_(char *,char *,int *,PetscScalar *,int*,PetscReal*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
42313f16e43SBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,int*);
424d4fbbf0eSBarry Smith #else
42513f16e43SBarry Smith EXTERN void   LAgeev_(char *,char *,int *,PetscScalar *,int*,PetscScalar*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
42613f16e43SBarry Smith EXTERN void   LAgesvd_(char *,char *,int *,int*,PetscScalar *,int*,PetscReal*,PetscScalar*,int*,PetscScalar*,int*,PetscScalar*,int*,PetscReal*,int*);
427d4fbbf0eSBarry Smith #endif
4285392566eSBarry Smith #endif
429a1e12872SBarry Smith 
430fb2e594dSBarry Smith EXTERN_C_END
431a1e12872SBarry Smith 
432a1e12872SBarry Smith #endif
4335a778de9SBarry Smith 
434