xref: /petsc/include/petscblaslapack.h (revision 041ef51dca2090f69babae8abdd9010b50b78edd)
1a1e12872SBarry Smith /*
2c0581c19SLois Curfman McInnes    This file provides some name space protection from LAPACK and BLAS and
3c0581c19SLois Curfman McInnes allows the appropriate single or double precision version to be used.
4c0581c19SLois Curfman McInnes This file also deals with different Fortran 77 naming conventions on machines.
55392566eSBarry Smith 
6217f3c9bSSatish Balay    Another problem is character strings are represented differently on
75392566eSBarry Smith on some machines in C and Fortran 77. This problem comes up on the
8633a50d3SSatish Balay Cray T3D/T3E.
95392566eSBarry Smith 
10a1e12872SBarry Smith */
11c3e41550SBarry Smith #if !defined(_BLASLAPACK_H)
12c3e41550SBarry Smith #define _BLASLAPACK_H
1319b02663SBarry Smith #include "petsc.h"
14e9fa29b7SSatish Balay PETSC_EXTERN_CXX_BEGIN
15bb638ab5SSatish Balay 
168e0e00b1SSatish Balay #if defined(PETSC_BLASLAPACK_MKL64_ONLY)
178e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
188e0e00b1SSatish Balay #define PETSC_MISSING_LAPACK_GEEV
19*041ef51dSHong Zhang #define PETSC_MISSING_LAPACK_SYGV
20*041ef51dSHong Zhang #define PETSC_MISSING_LAPACK_SYGVX
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
28*041ef51dSHong Zhang #define PETSC_MISSING_LAPACK_SYGV
29*041ef51dSHong Zhang #define PETSC_MISSING_LAPACK_SYGVX
30ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_CRAY_ONLY)
31bb638ab5SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
32ae7cfcebSSatish Balay #elif defined(PETSC_BLASLAPACK_ESSL_ONLY)
33e3353558SSatish Balay #define PETSC_MISSING_LAPACK_GESVD
34ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRF
35ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_GETRS
36ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRF
37ae7cfcebSSatish Balay #define PETSC_MISSING_LAPACK_POTRS
38bb638ab5SSatish Balay #endif
39bb638ab5SSatish Balay 
408f4c8dbaSBarry Smith /*
41633a50d3SSatish Balay    This include file on the Cray T3D/T3E defines the interface between
42217f3c9bSSatish Balay   Fortran and C representations of character strings.
438f4c8dbaSBarry Smith */
44f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
4593c39befSBarry Smith #include <fortran.h>
465392566eSBarry Smith #endif
475392566eSBarry Smith 
48aa482453SBarry Smith #if !defined(PETSC_USE_COMPLEX)
494eeb42bcSBarry Smith 
504eeb42bcSBarry Smith /*
514eeb42bcSBarry Smith     These are real case with no character string arguments
524eeb42bcSBarry Smith */
538f4c8dbaSBarry Smith 
54f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE)
558f4c8dbaSBarry Smith /*
568f4c8dbaSBarry Smith    For these machines we must call the single precision Fortran version
578f4c8dbaSBarry Smith */
588f4c8dbaSBarry Smith #define DGEQRF   SGEQRF
598f4c8dbaSBarry Smith #define DGETRF   SGETRF
608f4c8dbaSBarry Smith #define DDOT     SDOT
618f4c8dbaSBarry Smith #define DNRM2    SNRM2
628f4c8dbaSBarry Smith #define DSCAL    SSCAL
638f4c8dbaSBarry Smith #define DCOPY    SCOPY
648f4c8dbaSBarry Smith #define DSWAP    SSWAP
658f4c8dbaSBarry Smith #define DAXPY    SAXPY
668f4c8dbaSBarry Smith #define DASUM    SASUM
678f4c8dbaSBarry Smith #define DSORMQR  SORMQR
688f4c8dbaSBarry Smith #define DTRTRS   STRTRS
698f4c8dbaSBarry Smith #define DPOTRF   SPOTRF
708f4c8dbaSBarry Smith #define DPOTRS   SPOTRS
718f4c8dbaSBarry Smith #define DGEMV    SGEMV
728f4c8dbaSBarry Smith #define DGETRS   SGETRS
738f4c8dbaSBarry Smith #define DGETRS   SGETRS
748f4c8dbaSBarry Smith #define DGEMM    SGEMM
758f4c8dbaSBarry Smith #define DGESVD   SGESVD
76d4fbbf0eSBarry Smith #define DGEEV    SGEEV
77*041ef51dSHong Zhang #define DSYGV    SSYGV
78*041ef51dSHong Zhang #define DSYGVX   SSYGVX
798f4c8dbaSBarry Smith #define DTRMV    STRMV
808f4c8dbaSBarry Smith #define DTRSL    STRSL
818f4c8dbaSBarry Smith #endif
828f4c8dbaSBarry Smith 
8301ad1a64SSatish Balay #if defined(PETSC_USE_SINGLE)
8401ad1a64SSatish Balay 
8501ad1a64SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
8671044d3cSBarry Smith #define LAPACKgeqrf_ sgeqrf_
8771044d3cSBarry Smith #define LAPACKgetrf_ sgetrf_
8871044d3cSBarry Smith #define LAPACKgetf2_ sgetf2_
8971044d3cSBarry Smith #define BLASdot_     sdot_
9071044d3cSBarry Smith #define BLASnrm2_    snrm2_
9171044d3cSBarry Smith #define BLASscal_    sscal_
9271044d3cSBarry Smith #define BLAScopy_    scopy_
9371044d3cSBarry Smith #define BLASswap_    sswap_
9471044d3cSBarry Smith #define BLASaxpy_    saxpy_
9571044d3cSBarry Smith #define BLASasum_    sasum_
9601ad1a64SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS)
9771044d3cSBarry Smith #define LAPACKgeqrf_ SGEQRF
9871044d3cSBarry Smith #define LAPACKgetrf_ SGETRF
9971044d3cSBarry Smith #define LAPACKgetf2_ SGETF2
10071044d3cSBarry Smith #define BLASdot_     SDOT
10171044d3cSBarry Smith #define BLASnrm2_    SNRM2
10271044d3cSBarry Smith #define BLASscal_    SSCAL
10371044d3cSBarry Smith #define BLAScopy_    SCOPY
10471044d3cSBarry Smith #define BLASswap_    SSWAP
10571044d3cSBarry Smith #define BLASaxpy_    SAXPY
10671044d3cSBarry Smith #define BLASasum_    SASUM
10701ad1a64SSatish Balay #else
10871044d3cSBarry Smith #define LAPACKgeqrf_ sgeqrf
10971044d3cSBarry Smith #define LAPACKgetrf_ sgetrf
11071044d3cSBarry Smith #define LAPACKgetf2_ sgetf2
11171044d3cSBarry Smith #define BLASdot_     sdot
11271044d3cSBarry Smith #define BLASnrm2_    snrm2
11371044d3cSBarry Smith #define BLASscal_    sscal
11471044d3cSBarry Smith #define BLAScopy_    scopy
11571044d3cSBarry Smith #define BLASswap_    sswap
11671044d3cSBarry Smith #define BLASaxpy_    saxpy
11771044d3cSBarry Smith #define BLASasum_    sasum
11801ad1a64SSatish Balay #endif
11901ad1a64SSatish Balay 
12001ad1a64SSatish Balay #else
12101ad1a64SSatish Balay 
122ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
12371044d3cSBarry Smith #define LAPACKgeqrf_ dgeqrf_
12471044d3cSBarry Smith #define LAPACKgetrf_ dgetrf_
12571044d3cSBarry Smith #define LAPACKgetf2_ dgetf2_
12671044d3cSBarry Smith #define BLASdot_     ddot_
12771044d3cSBarry Smith #define BLASnrm2_    dnrm2_
12871044d3cSBarry Smith #define BLASscal_    dscal_
12971044d3cSBarry Smith #define BLAScopy_    dcopy_
13071044d3cSBarry Smith #define BLASswap_    dswap_
13171044d3cSBarry Smith #define BLASaxpy_    daxpy_
13271044d3cSBarry Smith #define BLASasum_    dasum_
133aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
13471044d3cSBarry Smith #define LAPACKgeqrf_ DGEQRF
13571044d3cSBarry Smith #define LAPACKgetrf_ DGETRF
13671044d3cSBarry Smith #define LAPACKgetf2_ DGETF2
13771044d3cSBarry Smith #define BLASdot_     DDOT
13871044d3cSBarry Smith #define BLASnrm2_    DNRM2
13971044d3cSBarry Smith #define BLASscal_    DSCAL
14071044d3cSBarry Smith #define BLAScopy_    DCOPY
14171044d3cSBarry Smith #define BLASswap_    DSWAP
14271044d3cSBarry Smith #define BLASaxpy_    DAXPY
14371044d3cSBarry Smith #define BLASasum_    DASUM
14425fce39dSBarry Smith #else
14571044d3cSBarry Smith #define LAPACKgeqrf_ dgeqrf
14671044d3cSBarry Smith #define LAPACKgetrf_ dgetrf
14771044d3cSBarry Smith #define LAPACKgetf2_ dgetf2
14871044d3cSBarry Smith #define BLASdot_     ddot
14971044d3cSBarry Smith #define BLASnrm2_    dnrm2
15071044d3cSBarry Smith #define BLASscal_    dscal
15171044d3cSBarry Smith #define BLAScopy_    dcopy
15271044d3cSBarry Smith #define BLASswap_    dswap
15371044d3cSBarry Smith #define BLASaxpy_    daxpy
15471044d3cSBarry Smith #define BLASasum_    dasum
155a1e12872SBarry Smith #endif
156a1e12872SBarry Smith 
15701ad1a64SSatish Balay #endif
15801ad1a64SSatish Balay 
1594eeb42bcSBarry Smith /*
1604eeb42bcSBarry Smith    Real with character string arguments.
1614eeb42bcSBarry Smith */
162f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
1638f4c8dbaSBarry Smith /*
1648f4c8dbaSBarry Smith    Note that this assumes that machines which use cptofcd() use
165aa482453SBarry Smith   the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E.
1668f4c8dbaSBarry Smith */
16771044d3cSBarry Smith #define LAPACKormqr_(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))
16871044d3cSBarry Smith #define LAPACKtrtrs_(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))
16971044d3cSBarry Smith #define LAPACKpotrf_(a,b,c,d,e)                   DPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
17071044d3cSBarry Smith #define LAPACKpotrs_(a,b,c,d,e,f,g,h)             DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
17171044d3cSBarry Smith #define BLASgemv_(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))
17271044d3cSBarry Smith #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
17371044d3cSBarry Smith #define BLASgemm_(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))
17471044d3cSBarry Smith #define LAPACKgesvd_(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))
17571044d3cSBarry Smith #define LAPACKgeev_(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))
176*041ef51dSHong Zhang #define LAPACKsygv_(a,b,c,d,e,f,g,h,i,j,k,l)  DSYGV((a),_cptofcd((a),1),_cptofcd((a),1),(d),(e),(f),(g),(h),(i),(j),(k),(l))
177*041ef51dSHong Zhang #define LAPACKsygvx_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) DSYGVX((a),_cptofcd((a),1),_cptofcd((a),1),_cptofcd((a),1),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(o),(p),(q),(r),(s),(t),(u),(v),(w))
17871044d3cSBarry Smith #define BLAStrmv_  DTRMV
17971044d3cSBarry Smith #define LAPACKtrsl_  DTRSL
18071044d3cSBarry Smith #define LAPACKgetrf_ DGETRF
181516d1546SSatish Balay 
182516d1546SSatish Balay #elif defined(PETSC_USE_SINGLE)
183516d1546SSatish Balay 
184516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
18571044d3cSBarry Smith #define LAPACKormqr_ sormqr_
18671044d3cSBarry Smith #define LAPACKtrtrs_ strtrs_
18771044d3cSBarry Smith #define LAPACKpotrf_ spotrf_
18871044d3cSBarry Smith #define LAPACKpotrs_ spotrs_
18971044d3cSBarry Smith #define BLASgemv_  sgemv_
19071044d3cSBarry Smith #define LAPACKgetrs_ sgetrs_
19171044d3cSBarry Smith #define BLAStrmv_  strmv_
19271044d3cSBarry Smith #define LAPACKtrsl_  strsl_
19371044d3cSBarry Smith #define BLASgemm_  sgemm_
19471044d3cSBarry Smith #define LAPACKgesvd_ sgesvd_
19571044d3cSBarry Smith #define LAPACKgeev_  sgeev_
196*041ef51dSHong Zhang #define LAPACKsygv_  ssygv_
197*041ef51dSHong Zhang #define LAPACKsygvx_  ssygvx_
198*041ef51dSHong Zhang 
199516d1546SSatish Balay #elif defined(PETSC_HAVE_FORTRAN_CAPS)
20071044d3cSBarry Smith #define LAPACKormqr_ SORMQR
20171044d3cSBarry Smith #define LAPACKtrtrs_ STRTRS
20271044d3cSBarry Smith #define LAPACKpotrf_ SPOTRF
20371044d3cSBarry Smith #define LAPACKpotrs_ SPOTRS
20471044d3cSBarry Smith #define BLASgemv_  SGEMV
20571044d3cSBarry Smith #define LAPACKgetrs_ SGETRS
20671044d3cSBarry Smith #define BLAStrmv_  STRMV
20771044d3cSBarry Smith #define LAPACKtrsl_  STRSL
20871044d3cSBarry Smith #define LAPACKgesvd_ SGESVD
20971044d3cSBarry Smith #define LAPACKgeev_  SGEEV
210*041ef51dSHong Zhang #define LAPACKsygv_  SSYGV
211*041ef51dSHong Zhang #define LAPACKsygvx_ SSYGVX
21271044d3cSBarry Smith #define BLASgemm_  SGEMM
213516d1546SSatish Balay #else
21471044d3cSBarry Smith #define LAPACKormqr_ sormqr
21571044d3cSBarry Smith #define LAPACKtrtrs_ strtrs
21671044d3cSBarry Smith #define LAPACKpotrf_ spotrf
21771044d3cSBarry Smith #define LAPACKpotrs_ spotrs
21871044d3cSBarry Smith #define BLASgemv_  sgemv
21971044d3cSBarry Smith #define LAPACKgetrs_ sgetrs
22071044d3cSBarry Smith #define BLAStrmv_  strmv
22171044d3cSBarry Smith #define LAPACKtrsl_  strsl
22271044d3cSBarry Smith #define BLASgemm_  sgemm
22371044d3cSBarry Smith #define LAPACKgesvd_ sgesvd
22471044d3cSBarry Smith #define LAPACKgeev_  sgeev
225*041ef51dSHong Zhang #define LAPACKsygv_  ssygv_
226*041ef51dSHong Zhang #define LAPACKsygvx_  ssygvx_
227516d1546SSatish Balay #endif
228516d1546SSatish Balay 
229516d1546SSatish Balay #else /* PETSC_USE_SINGLE */
230516d1546SSatish Balay 
231516d1546SSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
23271044d3cSBarry Smith #define LAPACKormqr_ dormqr_
23371044d3cSBarry Smith #define LAPACKtrtrs_ dtrtrs_
23471044d3cSBarry Smith #define LAPACKpotrf_ dpotrf_
23571044d3cSBarry Smith #define LAPACKpotrs_ dpotrs_
23671044d3cSBarry Smith #define BLASgemv_  dgemv_
23771044d3cSBarry Smith #define LAPACKgetrs_ dgetrs_
23871044d3cSBarry Smith #define BLAStrmv_  dtrmv_
23971044d3cSBarry Smith #define LAPACKtrsl_  dtrsl_
24071044d3cSBarry Smith #define BLASgemm_  dgemm_
24171044d3cSBarry Smith #define LAPACKgesvd_ dgesvd_
24271044d3cSBarry Smith #define LAPACKgeev_  dgeev_
243*041ef51dSHong Zhang #define LAPACKsygv_  dsygv_
244*041ef51dSHong Zhang #define LAPACKsygvx_  dsygvx_
245*041ef51dSHong Zhang 
246aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
24771044d3cSBarry Smith #define LAPACKormqr_ DORMQR
24871044d3cSBarry Smith #define LAPACKtrtrs_ DTRTRS
24971044d3cSBarry Smith #define LAPACKpotrf_ DPOTRF
25071044d3cSBarry Smith #define LAPACKpotrs_ DPOTRS
25171044d3cSBarry Smith #define BLASgemv_  DGEMV
25271044d3cSBarry Smith #define LAPACKgetrs_ DGETRS
25371044d3cSBarry Smith #define BLAStrmv_  DTRMV
25471044d3cSBarry Smith #define LAPACKtrsl_  DTRSL
25571044d3cSBarry Smith #define LAPACKgesvd_ DGESVD
25671044d3cSBarry Smith #define LAPACKgeev_  DGEEV
257*041ef51dSHong Zhang #define LAPACKsygv_  DSYGV
258*041ef51dSHong Zhang #define LAPACKsygvx_  DSYGVX
25971044d3cSBarry Smith #define BLASgemm_  DGEMM
26025fce39dSBarry Smith #else
26171044d3cSBarry Smith #define LAPACKormqr_ dormqr
26271044d3cSBarry Smith #define LAPACKtrtrs_ dtrtrs
26371044d3cSBarry Smith #define LAPACKpotrf_ dpotrf
26471044d3cSBarry Smith #define LAPACKpotrs_ dpotrs
26571044d3cSBarry Smith #define BLASgemv_  dgemv
26671044d3cSBarry Smith #define LAPACKgetrs_ dgetrs
26771044d3cSBarry Smith #define BLAStrmv_  dtrmv
26871044d3cSBarry Smith #define LAPACKtrsl_  dtrsl
26971044d3cSBarry Smith #define BLASgemm_  dgemm
27071044d3cSBarry Smith #define LAPACKgesvd_ dgesvd
27171044d3cSBarry Smith #define LAPACKgeev_  dgeev
272*041ef51dSHong Zhang #define LAPACKsygv_  dsygv
273*041ef51dSHong Zhang #define LAPACKsygvx_  dsygvx
274a1e12872SBarry Smith #endif
275a1e12872SBarry Smith 
276516d1546SSatish Balay #endif /* PETSC_USES_CPTOFCD */
277516d1546SSatish Balay 
278a1e12872SBarry Smith #else
2794eeb42bcSBarry Smith /*
2804eeb42bcSBarry Smith    Complex with no character string arguments
2814eeb42bcSBarry Smith */
282f1af5d2fSBarry Smith #if defined(PETSC_USES_FORTRAN_SINGLE)
2838f4c8dbaSBarry Smith #define ZGEQRF  CGEQRF
2848f4c8dbaSBarry Smith #define ZDOTC   CDOTC
2858f4c8dbaSBarry Smith #define DZNRM2  SCNRM2
2868f4c8dbaSBarry Smith #define ZSCAL   CSCAL
2878f4c8dbaSBarry Smith #define ZCOPY   CCOPY
2888f4c8dbaSBarry Smith #define ZSWAP   CSWAP
2898f4c8dbaSBarry Smith #define ZAXPY   CAXPY
2908f4c8dbaSBarry Smith #define DZASUM  SCASUM
2918f4c8dbaSBarry Smith #define ZGETRF  CGETRF
2928f4c8dbaSBarry Smith #define ZTRTRS  CTRTRS
2938f4c8dbaSBarry Smith #define ZPOTRF  CPOTRF
2948f4c8dbaSBarry Smith #define ZPOTRS  CPOTRS
2958f4c8dbaSBarry Smith #define ZGEMV   CGEMV
2968f4c8dbaSBarry Smith #define ZGETRS  CGETRS
2978f4c8dbaSBarry Smith #define ZGEMM   SGEMM
2988f4c8dbaSBarry Smith #define ZTRMV   CTRMV
299160814fdSSatish Balay #define ZTRSL   CTRSL
300633a50d3SSatish Balay #define ZGEEV   CGEEV
301*041ef51dSHong Zhang #define ZSYGV   CSYGV
302*041ef51dSHong Zhang #define ZSYGVX  CSYGVX
3038f4c8dbaSBarry Smith #endif
3048f4c8dbaSBarry Smith 
305ae7cfcebSSatish Balay #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
30671044d3cSBarry Smith #define LAPACKgeqrf_ zgeqrf_
30771044d3cSBarry Smith #define LAPACKgetrf_ zgetrf_
30871044d3cSBarry Smith #define LAPACKgetf2_ zgetf2_
30971044d3cSBarry Smith #define BLASdot_     zdotc_
31071044d3cSBarry Smith #define BLASnrm2_    dznrm2_
31171044d3cSBarry Smith #define BLASscal_    zscal_
31271044d3cSBarry Smith #define BLAScopy_    zcopy_
31371044d3cSBarry Smith #define BLASswap_    zswap_
31471044d3cSBarry Smith #define BLASaxpy_    zaxpy_
31571044d3cSBarry Smith #define BLASasum_    dzasum_
316aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
31771044d3cSBarry Smith #define LAPACKgeqrf_ ZGEQRF
31871044d3cSBarry Smith #define LAPACKgetrf_ ZGETRF
31971044d3cSBarry Smith #define BLASdot_     ZDOTC
32071044d3cSBarry Smith #define BLASnrm2_    DZNRM2
32171044d3cSBarry Smith #define BLASscal_    ZSCAL
32271044d3cSBarry Smith #define BLAScopy_    ZCOPY
32371044d3cSBarry Smith #define BLASswap_    ZSWAP
32471044d3cSBarry Smith #define BLASaxpy_    ZAXPY
32571044d3cSBarry Smith #define BLASasum_    DZASUM
32625fce39dSBarry Smith #else
32771044d3cSBarry Smith #define LAPACKgeqrf_ zgeqrf
32871044d3cSBarry Smith #define LAPACKgetrf_ zgetrf
32971044d3cSBarry Smith #define LAPACKgetf2_ zgetf2
33071044d3cSBarry Smith #define BLASdot_     zdotc
33171044d3cSBarry Smith #define BLASnrm2_    dznrm2
33271044d3cSBarry Smith #define BLASscal_    zscal
33371044d3cSBarry Smith #define BLAScopy_    zcopy
33471044d3cSBarry Smith #define BLASswap_    zswap
33571044d3cSBarry Smith #define BLASaxpy_    zaxpy
33671044d3cSBarry Smith #define BLASasum_    dzasum
337a1e12872SBarry Smith #endif
338a1e12872SBarry Smith 
339f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
34071044d3cSBarry Smith #define LAPACKtrtrs_(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))
34171044d3cSBarry Smith #define LAPACKpotrf_(a,b,c,d,e)                     ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
34271044d3cSBarry Smith #define LAPACKpotrs_(a,b,c,d,e,f,g,h)               ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
34371044d3cSBarry Smith #define BLASgemv_(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))
34471044d3cSBarry Smith #define LAPACKgetrs_(a,b,c,d,e,f,g,h,i)             ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
34571044d3cSBarry Smith #define BLASgemm_(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))
34671044d3cSBarry Smith #define LAPACKgesvd_(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))
34771044d3cSBarry Smith #define LAPACKgeev_(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))
348*041ef51dSHong Zhang #define LAPACKsygv_(a,b,c,d,e,f,g,h,i,j,k,l)    ZSYGV((a),_cptofcd((a),1),_cptofcd((a),1),(d),(e),(f),(g),(h),(i),(j),(k),(l))
349*041ef51dSHong Zhang #define LAPACKsygvx_(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w)    ZSYGVX((a),_cptofcd((a),1),_cptofcd((a),1),_cptofcd((a),1),(e),(f),(g),(h),(i),(j),(k),(l),(m),(n),(o),(p),(q),(r),(s),(t),(u),(v),(w))
350*041ef51dSHong Zhang 
35171044d3cSBarry Smith #define BLAStrmv_    ZTRMV
35271044d3cSBarry Smith #define LAPACKtrsl_  ZTRSL
353ae7cfcebSSatish Balay #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
35471044d3cSBarry Smith #define LAPACKtrtrs_ ztrtrs_
35571044d3cSBarry Smith #define LAPACKpotrf_ zpotrf_
35671044d3cSBarry Smith #define LAPACKpotrs_ zpotrs_
35771044d3cSBarry Smith #define BLASgemv_    zgemv_
35871044d3cSBarry Smith #define LAPACKgetrs_ zgetrs_
35971044d3cSBarry Smith #define BLAStrmv_    ztrmv_
36071044d3cSBarry Smith #define LAPACKtrsl_  ztrsl_
36171044d3cSBarry Smith #define BLASgemm_    zgemm_
36271044d3cSBarry Smith #define LAPACKgesvd_ zgesvd_
36371044d3cSBarry Smith #define LAPACKgeev_  zgeev_
364*041ef51dSHong Zhang #define LAPACKsygv_  zsygv_
365*041ef51dSHong Zhang #define LAPACKsygvx_  zsygvx_
366*041ef51dSHong Zhang 
367aa482453SBarry Smith #elif defined(PETSC_HAVE_FORTRAN_CAPS)
36871044d3cSBarry Smith #define LAPACKtrtrs_ ZTRTRS
36971044d3cSBarry Smith #define LAPACKpotrf_ ZPOTRF
37071044d3cSBarry Smith #define LAPACKpotrs_ ZPOTRS
37171044d3cSBarry Smith #define BLASgemv_    ZGEMV
37271044d3cSBarry Smith #define LAPACKgetrf_ ZGETRF
37371044d3cSBarry Smith #define LAPACKgetf2_ ZGETF2
37471044d3cSBarry Smith #define LAPACKgetrs_ ZGETRS
37571044d3cSBarry Smith #define BLAStrmv_    ZTRMV
37671044d3cSBarry Smith #define LAPACKtrsl_  ZTRSL
37771044d3cSBarry Smith #define BLASgemm_    ZGEMM
37871044d3cSBarry Smith #define LAPACKgesvd_ ZGESVD
37971044d3cSBarry Smith #define LAPACKgeev_  ZGEEV
380*041ef51dSHong Zhang #define LAPACKsygv_  ZSYGV
381*041ef51dSHong Zhang #define LAPACKsygvx_  ZSYGVX
382*041ef51dSHong Zhang 
38325fce39dSBarry Smith #else
38471044d3cSBarry Smith #define LAPACKtrtrs_ ztrtrs
38571044d3cSBarry Smith #define LAPACKpotrf_ zpotrf
38671044d3cSBarry Smith #define LAPACKpotrs_ zpotrs
38771044d3cSBarry Smith #define BLASgemv_    zgemv
38871044d3cSBarry Smith #define LAPACKgetrs_ zgetrs
38971044d3cSBarry Smith #define BLAStrmv_    ztrmv
39071044d3cSBarry Smith #define LAPACKtrsl_  ztrsl
39171044d3cSBarry Smith #define BLASgemm_    zgemm
39271044d3cSBarry Smith #define LAPACKgesvd_ zgesvd
39371044d3cSBarry Smith #define LAPACKgeev_  zgeev
394*041ef51dSHong Zhang #define LAPACKsygv_  zsygv
395*041ef51dSHong Zhang #define LAPACKsygvx_  zsygvx
396a1e12872SBarry Smith #endif
397a1e12872SBarry Smith 
398a1e12872SBarry Smith #endif
399a1e12872SBarry Smith 
400fb2e594dSBarry Smith EXTERN_C_BEGIN
401a1e12872SBarry Smith 
4028f4c8dbaSBarry Smith /*
40371044d3cSBarry Smith    BLASdot cannot be used with COMPLEX because it cannot
4048f4c8dbaSBarry Smith    handle returing a double complex to C++.
405126c565eSBarry Smith */
40671044d3cSBarry Smith EXTERN PetscReal BLASdot_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
40771044d3cSBarry Smith EXTERN PetscReal BLASnrm2_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
40871044d3cSBarry Smith EXTERN PetscReal BLASasum_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
40971044d3cSBarry Smith EXTERN void      BLASscal_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
41071044d3cSBarry Smith EXTERN void      BLAScopy_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
41171044d3cSBarry Smith EXTERN void      BLASswap_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
41271044d3cSBarry Smith EXTERN void      BLASaxpy_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
41371044d3cSBarry Smith EXTERN void      LAPACKgetrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
41471044d3cSBarry Smith EXTERN void      LAPACKgetf2_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
41571044d3cSBarry Smith EXTERN void      LAPACKgeqrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4165392566eSBarry Smith 
417f1af5d2fSBarry Smith #if defined(PETSC_USES_CPTOFCD)
418112a2221SBarry Smith 
419aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX)
4204ce68768SBarry Smith EXTERN void   ZORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4214ce68768SBarry Smith EXTERN void   ZTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4224ce68768SBarry Smith EXTERN void   ZPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4234ce68768SBarry Smith EXTERN void   ZGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
4244ce68768SBarry Smith EXTERN void   ZPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4254ce68768SBarry Smith EXTERN void   ZGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4264ce68768SBarry Smith EXTERN void   ZGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
4274ce68768SBarry Smith EXTERN void   ZGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
4284ce68768SBarry Smith EXTERN void   ZGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
429*041ef51dSHong Zhang EXTERN void   ZSYGV(PetscBLASInt*,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
430*041ef51dSHong Zhang EXTERN void   ZSYGVX(PetscBLASInt*,_fcd,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
431*041ef51dSHong Zhang 
4325392566eSBarry Smith #else
4334ce68768SBarry Smith EXTERN void   DORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4344ce68768SBarry Smith EXTERN void   DTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4354ce68768SBarry Smith EXTERN void   DPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4364ce68768SBarry Smith EXTERN void   DGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
4374ce68768SBarry Smith EXTERN void   DPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4384ce68768SBarry Smith EXTERN void   DGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4394ce68768SBarry Smith EXTERN void   DGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
4404ce68768SBarry Smith EXTERN void   DGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
4414ce68768SBarry Smith EXTERN void   DGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
442*041ef51dSHong Zhang EXTERN void   DSYGV(PetscBLASInt*,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
443*041ef51dSHong Zhang EXTERN void   DSYGVX(PetscBLASInt*,_fcd,_fcd,_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
444112a2221SBarry Smith #endif
445112a2221SBarry Smith 
446112a2221SBarry Smith #else
44771044d3cSBarry Smith EXTERN void   LAPACKormqr_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
44871044d3cSBarry Smith EXTERN void   LAPACKtrtrs_(const char*,const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
44971044d3cSBarry Smith EXTERN void   LAPACKpotrf_(const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
45071044d3cSBarry Smith EXTERN void   BLASgemv_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
45171044d3cSBarry Smith EXTERN void   LAPACKpotrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
45271044d3cSBarry Smith EXTERN void   LAPACKgetrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
45371044d3cSBarry Smith EXTERN void   BLASgemm_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
454e38aa075SLois Curfman McInnes 
455e38aa075SLois Curfman McInnes /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */
456aa482453SBarry Smith #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX)
45771044d3cSBarry Smith EXTERN void   LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
45871044d3cSBarry Smith EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
459aa482453SBarry Smith #elif defined(PETSC_HAVE_ESSL)
46071044d3cSBarry Smith EXTERN void   LAPACKgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
46171044d3cSBarry Smith EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
462aa482453SBarry Smith #elif !defined(PETSC_USE_COMPLEX)
46371044d3cSBarry Smith EXTERN void   LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscReal*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
46471044d3cSBarry Smith EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
465*041ef51dSHong Zhang EXTERN void   LAPACKsygv_(PetscBLASInt*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
466*041ef51dSHong Zhang EXTERN void   LAPACKsygvx_(PetscBLASInt*,const char*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
467d4fbbf0eSBarry Smith #else
46871044d3cSBarry Smith EXTERN void   LAPACKgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
469*041ef51dSHong Zhang EXTERN void   LAPACKsygv_(PetscBLASInt*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
470*041ef51dSHong Zhang EXTERN void   LAPACKsygvx_(PetscBLASInt*,const char*,const char*,const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscReal*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
47171044d3cSBarry Smith EXTERN void   LAPACKgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
472d4fbbf0eSBarry Smith #endif
4735392566eSBarry Smith #endif
474a1e12872SBarry Smith 
475fb2e594dSBarry Smith EXTERN_C_END
476e9fa29b7SSatish Balay PETSC_EXTERN_CXX_END
477a1e12872SBarry Smith #endif
478