1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
      SUBROUTINE XERBLA_ARRAY(SRNAME_ARRAY, SRNAME_LEN, INFO)
*
*  -- LAPACK auxiliary routine (version 3.0) --
*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
*     September 19, 2006
*
      IMPLICIT NONE
*     .. Scalar Arguments ..
      INTEGER SRNAME_LEN, INFO
*     ..
*     .. Array Arguments ..
      CHARACTER(1) SRNAME_ARRAY(SRNAME_LEN)
*     ..
*
*  Purpose
*  =======
*
*  XERBLA_ARRAY assists other languages in calling XERBLA, the LAPACK
*  and BLAS error handler.  Rather than taking a Fortran string argument
*  as the function's name, XERBLA_ARRAY takes an array of single
*  characters along with the array's length.  XERBLA_ARRAY then copies
*  up to 32 characters of that array into a Fortran string and passes
*  that to XERBLA.  If called with a non-positive SRNAME_LEN,
*  XERBLA_ARRAY will call XERBLA with a string of all blank characters.
*
*  Say some macro or other device makes XERBLA_ARRAY available to C99
*  by a name lapack_xerbla and with a common Fortran calling convention.
*  Then a C99 program could invoke XERBLA via:
*     {
*       int flen = strlen(__func__);
*       lapack_xerbla(__func__, &flen, &info);
*     }
*
*  Providing XERBLA_ARRAY is not necessary for intercepting LAPACK
*  errors.  XERBLA_ARRAY calls XERBLA.
*
*  Arguments
*  =========
*
*  SRNAME_ARRAY (input) CHARACTER(1) array, dimension (SRNAME_LEN)
*          The name of the routine which called XERBLA_ARRAY.
*
*  SRNAME_LEN (input) INTEGER
*          The length of the name in SRNAME_ARRAY.
*
*  INFO    (input) INTEGER
*          The position of the invalid parameter in the parameter list
*          of the calling routine.
*
* =====================================================================
*
*     ..
*     .. Local Scalars ..
      INTEGER I
*     ..
*     .. Local Arrays ..
      CHARACTER*32 SRNAME
*     ..
*     .. Intrinsic Functions ..
      INTRINSIC MIN, LEN
*     ..
*     .. External Functions ..
      EXTERNAL XERBLA
*     ..
*     .. Executable Statements ..
      SRNAME = ''
      DO I = 1MIN( SRNAME_LEN, LEN( SRNAME ) )
         SRNAME( I:I ) = SRNAME_ARRAY( I )
      END DO

      CALL XERBLA( SRNAME, INFO )

      RETURN
      END