Actual source code: petscblaslapack.h

      1: /*
      2:    This file provides some name space protection from LAPACK and BLAS and
      3: allows the appropriate single or double precision version to be used.
      4: This file also deals with different Fortran 77 naming conventions on machines.

      6:    Another problem is character strings are represented differently on
      7: on some machines in C and Fortran 77. This problem comes up on the
      8: Cray T3D/T3E.

     10: */
     11: #if !defined(_BLASLAPACK_H)
     12: #define _BLASLAPACK_H
     13:  #include petsc.h

     16: #if defined(PETSC_BLASLAPACK_MKL64_ONLY)
     17: #define PETSC_MISSING_LAPACK_GESVD
     18: #define PETSC_MISSING_LAPACK_GEEV
     19: #define PETSC_MISSING_LAPACK_GETRF
     20: #define PETSC_MISSING_LAPACK_POTRF
     21: #define PETSC_MISSING_LAPACK_GETRS
     22: #define PETSC_MISSING_LAPACK_POTRS
     23: #elif defined(PETSC_BLASLAPACK_MKL_ONLY)
     24: #define PETSC_MISSING_LAPACK_GESVD
     25: #define PETSC_MISSING_LAPACK_GEEV
     26: #elif defined(PETSC_BLASLAPACK_CRAY_ONLY)
     27: #define PETSC_MISSING_LAPACK_GESVD
     28: #elif defined(PETSC_BLASLAPACK_ESSL_ONLY)
     29: #define PETSC_MISSING_LAPACK_GESVD
     30: #define PETSC_MISSING_LAPACK_GETRF
     31: #define PETSC_MISSING_LAPACK_GETRS
     32: #define PETSC_MISSING_LAPACK_POTRF
     33: #define PETSC_MISSING_LAPACK_POTRS
     34: #endif

     36: /*
     37:    This include file on the Cray T3D/T3E defines the interface between
     38:   Fortran and C representations of character strings.
     39: */
     40: #if defined(PETSC_USES_CPTOFCD)
     41: #include <fortran.h>
     42: #endif

     44: #if !defined(PETSC_USE_COMPLEX)

     46: /*
     47:     These are real case with no character string arguments
     48: */

     50: #if defined(PETSC_USES_FORTRAN_SINGLE)
     51: /*
     52:    For these machines we must call the single precision Fortran version
     53: */
     54: #define DGEQRF   SGEQRF
     55: #define DGETRF   SGETRF
     56: #define DDOT     SDOT
     57: #define DNRM2    SNRM2
     58: #define DSCAL    SSCAL
     59: #define DCOPY    SCOPY
     60: #define DSWAP    SSWAP
     61: #define DAXPY    SAXPY
     62: #define DASUM    SASUM
     63: #define DSORMQR  SORMQR
     64: #define DTRTRS   STRTRS
     65: #define DPOTRF   SPOTRF
     66: #define DPOTRS   SPOTRS
     67: #define DGEMV    SGEMV
     68: #define DGETRS   SGETRS
     69: #define DGETRS   SGETRS
     70: #define DGEMM    SGEMM
     71: #define DGESVD   SGESVD
     72: #define DGEEV    SGEEV
     73: #define DTRMV    STRMV
     74: #define DTRSL    STRSL
     75: #endif

     77: #if defined(PETSC_USE_SINGLE)

     79: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
     80: #define LAgeqrf_ sgeqrf_
     81: #define LAgetrf_ sgetrf_
     82: #define LAgetf2_ sgetf2_
     83: #define BLdot_   sdot_
     84: #define BLnrm2_  snrm2_
     85: #define BLscal_  sscal_
     86: #define BLcopy_  scopy_
     87: #define BLswap_  sswap_
     88: #define BLaxpy_  saxpy_
     89: #define BLasum_  sasum_
     90: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
     91: #define LAgeqrf_ SGEQRF
     92: #define LAgetrf_ SGETRF
     93: #define LAgetf2_ SGETF2
     94: #define BLdot_   SDOT
     95: #define BLnrm2_  SNRM2
     96: #define BLscal_  SSCAL
     97: #define BLcopy_  SCOPY
     98: #define BLswap_  SSWAP
     99: #define BLaxpy_  SAXPY
    100: #define BLasum_  SASUM
    101: #else
    102: #define LAgeqrf_ sgeqrf
    103: #define LAgetrf_ sgetrf
    104: #define LAgetf2_ sgetf2
    105: #define BLdot_   sdot
    106: #define BLnrm2_  snrm2
    107: #define BLscal_  sscal
    108: #define BLcopy_  scopy
    109: #define BLswap_  sswap
    110: #define BLaxpy_  saxpy
    111: #define BLasum_  sasum
    112: #endif

    114: #else

    116: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
    117: #define LAgeqrf_ dgeqrf_
    118: #define LAgetrf_ dgetrf_
    119: #define LAgetf2_ dgetf2_
    120: #define BLdot_   ddot_
    121: #define BLnrm2_  dnrm2_
    122: #define BLscal_  dscal_
    123: #define BLcopy_  dcopy_
    124: #define BLswap_  dswap_
    125: #define BLaxpy_  daxpy_
    126: #define BLasum_  dasum_
    127: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
    128: #define LAgeqrf_ DGEQRF
    129: #define LAgetrf_ DGETRF
    130: #define LAgetf2_ DGETF2
    131: #define BLdot_   DDOT
    132: #define BLnrm2_  DNRM2
    133: #define BLscal_  DSCAL
    134: #define BLcopy_  DCOPY
    135: #define BLswap_  DSWAP
    136: #define BLaxpy_  DAXPY
    137: #define BLasum_  DASUM
    138: #else
    139: #define LAgeqrf_ dgeqrf
    140: #define LAgetrf_ dgetrf
    141: #define LAgetf2_ dgetf2
    142: #define BLdot_   ddot
    143: #define BLnrm2_  dnrm2
    144: #define BLscal_  dscal
    145: #define BLcopy_  dcopy
    146: #define BLswap_  dswap
    147: #define BLaxpy_  daxpy
    148: #define BLasum_  dasum
    149: #endif

    151: #endif

    153: /*
    154:    Real with character string arguments.
    155: */
    156: #if defined(PETSC_USES_CPTOFCD)
    157: /*
    158:    Note that this assumes that machines which use cptofcd() use
    159:   the PETSC_HAVE_FORTRAN_CAPS option. This is true on the Cray T3D/T3E.
    160: */
    161: #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))
    162: #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))
    163: #define LApotrf_(a,b,c,d,e)                   DPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
    164: #define LApotrs_(a,b,c,d,e,f,g,h)             DPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
    165: #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))
    166: #define LAgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
    167: #define LAgetrs_(a,b,c,d,e,f,g,h,i)           DGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
    168: #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))
    169: #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))
    170: #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))
    171: #define LAtrmv_  DTRMV
    172: #define LAtrsl_  DTRSL
    173: #define LAgetrf_ DGETRF

    175: #elif defined(PETSC_USE_SINGLE)

    177: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
    178: #define LAormqr_ sormqr_
    179: #define LAtrtrs_ strtrs_
    180: #define LApotrf_ spotrf_
    181: #define LApotrs_ spotrs_
    182: #define LAgemv_  sgemv_
    183: #define LAgetrs_ sgetrs_
    184: #define LAtrmv_  strmv_
    185: #define LAtrsl_  strsl_
    186: #define BLgemm_  sgemm_
    187: #define LAgesvd_ sgesvd_
    188: #define LAgeev_  sgeev_
    189: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
    190: #define LAormqr_ SORMQR
    191: #define LAtrtrs_ STRTRS
    192: #define LApotrf_ SPOTRF
    193: #define LApotrs_ SPOTRS
    194: #define LAgemv_  SGEMV
    195: #define LAgetrs_ SGETRS
    196: #define LAtrmv_  STRMV
    197: #define LAtrsl_  STRSL
    198: #define LAgesvd_ SGESVD
    199: #define LAgeev_  SGEEV
    200: #define BLgemm_  SGEMM
    201: #else
    202: #define LAormqr_ sormqr
    203: #define LAtrtrs_ strtrs
    204: #define LApotrf_ spotrf
    205: #define LApotrs_ spotrs
    206: #define LAgemv_  sgemv
    207: #define LAgetrs_ sgetrs
    208: #define LAtrmv_  strmv
    209: #define LAtrsl_  strsl
    210: #define BLgemm_  sgemm
    211: #define LAgesvd_ sgesvd
    212: #define LAgeev_  sgeev
    213: #endif

    215: #else /* PETSC_USE_SINGLE */

    217: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
    218: #define LAormqr_ dormqr_
    219: #define LAtrtrs_ dtrtrs_
    220: #define LApotrf_ dpotrf_
    221: #define LApotrs_ dpotrs_
    222: #define LAgemv_  dgemv_
    223: #define LAgetrs_ dgetrs_
    224: #define LAtrmv_  dtrmv_
    225: #define LAtrsl_  dtrsl_
    226: #define BLgemm_  dgemm_
    227: #define LAgesvd_ dgesvd_
    228: #define LAgeev_  dgeev_
    229: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
    230: #define LAormqr_ DORMQR
    231: #define LAtrtrs_ DTRTRS
    232: #define LApotrf_ DPOTRF
    233: #define LApotrs_ DPOTRS
    234: #define LAgemv_  DGEMV
    235: #define LAgetrs_ DGETRS
    236: #define LAtrmv_  DTRMV
    237: #define LAtrsl_  DTRSL
    238: #define LAgesvd_ DGESVD
    239: #define LAgeev_  DGEEV
    240: #define BLgemm_  DGEMM
    241: #else
    242: #define LAormqr_ dormqr
    243: #define LAtrtrs_ dtrtrs
    244: #define LApotrf_ dpotrf
    245: #define LApotrs_ dpotrs
    246: #define LAgemv_  dgemv
    247: #define LAgetrs_ dgetrs
    248: #define LAtrmv_  dtrmv
    249: #define LAtrsl_  dtrsl
    250: #define BLgemm_  dgemm
    251: #define LAgesvd_ dgesvd
    252: #define LAgeev_  dgeev
    253: #endif

    255: #endif /* PETSC_USES_CPTOFCD */

    257: #else
    258: /*
    259:    Complex with no character string arguments
    260: */
    261: #if defined(PETSC_USES_FORTRAN_SINGLE)
    262: #define ZGEQRF  CGEQRF
    263: #define ZDOTC   CDOTC
    264: #define DZNRM2  SCNRM2
    265: #define ZSCAL   CSCAL
    266: #define ZCOPY   CCOPY
    267: #define ZSWAP   CSWAP
    268: #define ZAXPY   CAXPY
    269: #define DZASUM  SCASUM
    270: #define ZGETRF  CGETRF
    271: #define ZTRTRS  CTRTRS
    272: #define ZPOTRF  CPOTRF
    273: #define ZPOTRS  CPOTRS
    274: #define ZGEMV   CGEMV
    275: #define ZGETRS  CGETRS
    276: #define ZGEMM   SGEMM
    277: #define ZTRMV   CTRMV
    278: #define ZTRSL   CTRSL
    279: #define ZGEEV   CGEEV
    280: #endif

    282: #if defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
    283: #define LAgeqrf_ zgeqrf_
    284: #define LAgetrf_ zgetrf_
    285: #define LAgetf2_ zgetf2_
    286: #define BLdot_   zdotc_
    287: #define BLnrm2_  dznrm2_
    288: #define BLscal_  zscal_
    289: #define BLcopy_  zcopy_
    290: #define BLswap_  zswap_
    291: #define BLaxpy_  zaxpy_
    292: #define BLasum_  dzasum_
    293: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
    294: #define LAgeqrf_ ZGEQRF
    295: #define BLdot_   ZDOTC
    296: #define BLnrm2_  DZNRM2
    297: #define BLscal_  ZSCAL
    298: #define BLcopy_  ZCOPY
    299: #define BLswap_  ZSWAP
    300: #define BLaxpy_  ZAXPY
    301: #define BLasum_  DZASUM
    302: #define LAgetrf_ ZGETRF
    303: #else
    304: #define LAgeqrf_ zgeqrf
    305: #define LAgetrf_ zgetrf
    306: #define LAgetf2_ zgetf2
    307: #define BLdot_   zdotc
    308: #define BLnrm2_  dznrm2
    309: #define BLscal_  zscal
    310: #define BLcopy_  zcopy
    311: #define BLswap_  zswap
    312: #define BLaxpy_  zaxpy
    313: #define BLasum_  dzasum
    314: #endif

    316: #if defined(PETSC_USES_CPTOFCD)
    317: #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))
    318: #define LApotrf_(a,b,c,d,e)                     ZPOTRF(_cptofcd((a),1),(b),(c),(d),(e))
    319: #define LApotrs_(a,b,c,d,e,f,g,h)               ZPOTRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h))
    320: #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))
    321: #define LAgetrs_(a,b,c,d,e,f,g,h,i)             ZGETRS(_cptofcd((a),1),(b),(c),(d),(e),(f),(g),(h),(i))
    322: #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))
    323: #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))
    324: #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))
    325: #define LAtrmv_  ZTRMV
    326: #define LAtrsl_  ZTRSL
    327: #elif defined(PETSC_HAVE_FORTRAN_UNDERSCORE) || defined(PETSC_BLASLAPACK_F2C)
    328: #define LAtrtrs_ ztrtrs_
    329: #define LApotrf_ zpotrf_
    330: #define LApotrs_ zpotrs_
    331: #define LAgemv_  zgemv_
    332: #define LAgetrs_ zgetrs_
    333: #define LAtrmv_  ztrmv_
    334: #define LAtrsl_  ztrsl_
    335: #define BLgemm_  zgemm_
    336: #define LAgesvd_ zgesvd_
    337: #define LAgeev_  zgeev_
    338: #elif defined(PETSC_HAVE_FORTRAN_CAPS)
    339: #define LAtrtrs_ ZTRTRS
    340: #define LApotrf_ ZPOTRF
    341: #define LApotrs_ ZPOTRS
    342: #define LAgemv_  ZGEMV
    343: #define LAgetrf_ ZGETRF
    344: #define LAgetf2_ ZGETF2
    345: #define LAgetrs_ ZGETRS
    346: #define LAtrmv_  ZTRMV
    347: #define LAtrsl_  ZTRSL
    348: #define BLgemm_  ZGEMM
    349: #define LAgesvd_ ZGESVD
    350: #define LAgeev_  ZGEEV
    351: #else
    352: #define LAtrtrs_ ztrtrs
    353: #define LApotrf_ zpotrf
    354: #define LApotrs_ zpotrs
    355: #define LAgemv_  zgemv
    356: #define LAgetrs_ zgetrs
    357: #define LAtrmv_  ztrmv
    358: #define LAtrsl_  ztrsl
    359: #define BLgemm_  zgemm
    360: #define LAgesvd_ zgesvd
    361: #define LAgeev_  zgeev
    362: #endif

    364: #endif

    368: /*
    369:    BLdot cannot be used with COMPLEX because it cannot
    370:    handle returing a double complex to C++.
    371: */
    372: EXTERN PetscReal BLdot_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
    373: EXTERN PetscReal BLnrm2_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
    374: EXTERN PetscReal BLasum_(PetscBLASInt*,PetscScalar*,PetscBLASInt*);
    375: EXTERN void      BLscal_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
    376: EXTERN void      BLcopy_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
    377: EXTERN void      BLswap_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
    378: EXTERN void      BLaxpy_(PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*);
    379: EXTERN void      LAgetrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
    380: EXTERN void      LAgetf2_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*);
    381: EXTERN void      LAgeqrf_(PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);

    383: #if defined(PETSC_USES_CPTOFCD)

    385: #if defined(PETSC_USE_COMPLEX)
    386: EXTERN void   ZORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    387: EXTERN void   ZTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    388: EXTERN void   ZPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    389: EXTERN void   ZGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
    390: EXTERN void   ZPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    391: EXTERN void   ZGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    392: EXTERN void   ZGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
    393: EXTERN void   ZGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
    394: EXTERN void   ZGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
    395: #else
    396: EXTERN void   DORMQR(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    397: EXTERN void   DTRTRS(_fcd,_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    398: EXTERN void   DPOTRF(_fcd,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    399: EXTERN void   DGEMV(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
    400: EXTERN void   DPOTRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    401: EXTERN void   DGETRS(_fcd,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    402: EXTERN void   DGEMM(_fcd,_fcd,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
    403: EXTERN void   DGESVD(_fcd,_fcd,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    404: EXTERN void   DGEEV(_fcd,_fcd,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    405: #endif

    407: #else
    408: EXTERN void   LAormqr_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    409: EXTERN void   LAtrtrs_(const char*,const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    410: EXTERN void   LApotrf_(const char*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    411: EXTERN void   LAgemv_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);
    412: EXTERN void   LApotrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    413: EXTERN void   LAgetrs_(const char*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    414: EXTERN void   BLgemm_(const char*,const char*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*);

    416: /* ESSL uses a different calling sequence for dgeev(), zgeev() than LAPACK; */
    417: #if defined(PETSC_HAVE_ESSL) && defined(PETSC_USE_COMPLEX)
    418: EXTERN void   LAgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
    419: EXTERN void   LAgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
    420: #elif defined(PETSC_HAVE_ESSL)
    421: EXTERN void   LAgeev_(PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscBLASInt*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
    422: EXTERN void   LAgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    423: #elif !defined(PETSC_USE_COMPLEX)
    424: EXTERN void   LAgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscReal*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    425: EXTERN void   LAgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscBLASInt*);
    426: #else
    427: EXTERN void   LAgeev_(const char*,const char*,PetscBLASInt *,PetscScalar *,PetscBLASInt*,PetscScalar*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
    428: EXTERN void   LAgesvd_(const char*,const char*,PetscBLASInt *,PetscBLASInt*,PetscScalar *,PetscBLASInt*,PetscReal*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscScalar*,PetscBLASInt*,PetscReal*,PetscBLASInt*);
    429: #endif
    430: #endif

    434: #endif