1       SUBROUTINE CGET10( M, N, A, LDA, B, LDB, WORK, RWORK, RESULT )
  2 *
  3 *  -- LAPACK test routine (version 3.1) --
  4 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
  5 *     November 2006
  6 *
  7 *     .. Scalar Arguments ..
  8       INTEGER            LDA, LDB, M, N
  9       REAL               RESULT
 10 *     ..
 11 *     .. Array Arguments ..
 12       REAL               RWORK( * )
 13       COMPLEX            A( LDA, * ), B( LDB, * ), WORK( * )
 14 *     ..
 15 *
 16 *  Purpose
 17 *  =======
 18 *
 19 *  CGET10 compares two matrices A and B and computes the ratio
 20 *  RESULT = norm( A - B ) / ( norm(A) * M * EPS )
 21 *
 22 *  Arguments
 23 *  =========
 24 *
 25 *  M       (input) INTEGER
 26 *          The number of rows of the matrices A and B.
 27 *
 28 *  N       (input) INTEGER
 29 *          The number of columns of the matrices A and B.
 30 *
 31 *  A       (input) COMPLEX array, dimension (LDA,N)
 32 *          The m by n matrix A.
 33 *
 34 *  LDA     (input) INTEGER
 35 *          The leading dimension of the array A.  LDA >= max(1,M).
 36 *
 37 *  B       (input) COMPLEX array, dimension (LDB,N)
 38 *          The m by n matrix B.
 39 *
 40 *  LDB     (input) INTEGER
 41 *          The leading dimension of the array B.  LDB >= max(1,M).
 42 *
 43 *  WORK    (workspace) COMPLEX array, dimension (M)
 44 *
 45 *  RWORK   (workspace) COMPLEX array, dimension (M)
 46 *
 47 *  RESULT  (output) REAL
 48 *          RESULT = norm( A - B ) / ( norm(A) * M * EPS )
 49 *
 50 *  =====================================================================
 51 *
 52 *     .. Parameters ..
 53       REAL               ONE, ZERO
 54       PARAMETER          ( ONE = 1.0E+0, ZERO = 0.0E+0 )
 55 *     ..
 56 *     .. Local Scalars ..
 57       INTEGER            J
 58       REAL               ANORM, EPS, UNFL, WNORM
 59 *     ..
 60 *     .. External Functions ..
 61       REAL               SCASUM, SLAMCH, CLANGE
 62       EXTERNAL           SCASUM, SLAMCH, CLANGE
 63 *     ..
 64 *     .. External Subroutines ..
 65       EXTERNAL           CAXPY, CCOPY
 66 *     ..
 67 *     .. Intrinsic Functions ..
 68       INTRINSIC          MAXMIN, REAL
 69 *     ..
 70 *     .. Executable Statements ..
 71 *
 72 *     Quick return if possible
 73 *
 74       IF( M.LE.0 .OR. N.LE.0 ) THEN
 75          RESULT = ZERO
 76          RETURN
 77       END IF
 78 *
 79       UNFL = SLAMCH( 'Safe minimum' )
 80       EPS = SLAMCH( 'Precision' )
 81 *
 82       WNORM = ZERO
 83       DO 10 J = 1, N
 84          CALL CCOPY( M, A( 1, J ), 1, WORK, 1 )
 85          CALL CAXPY( M, CMPLX-ONE ), B( 1, J ), 1, WORK, 1 )
 86          WNORM = MAX( WNORM, SCASUM( N, WORK, 1 ) )
 87    10 CONTINUE
 88 *
 89       ANORM = MAX( CLANGE( '1', M, N, A, LDA, RWORK ), UNFL )
 90 *
 91       IF( ANORM.GT.WNORM ) THEN
 92          RESULT = ( WNORM / ANORM ) / ( M*EPS )
 93       ELSE
 94          IF( ANORM.LT.ONE ) THEN
 95             RESULT = ( MIN( WNORM, M*ANORM ) / ANORM ) / ( M*EPS )
 96          ELSE
 97             RESULT = MIN( WNORM / ANORM, REAL( M ) ) / ( M*EPS )
 98          END IF
 99       END IF
100 *
101       RETURN
102 *
103 *     End of CGET10
104 *
105       END