LAPACK  3.4.1
LAPACK: Linear Algebra PACKage
cget10.f
Go to the documentation of this file.
00001 *> \brief \b CGET10
00002 *
00003 *  =========== DOCUMENTATION ===========
00004 *
00005 * Online html documentation available at 
00006 *            http://www.netlib.org/lapack/explore-html/ 
00007 *
00008 *  Definition:
00009 *  ===========
00010 *
00011 *       SUBROUTINE CGET10( M, N, A, LDA, B, LDB, WORK, RWORK, RESULT )
00012 * 
00013 *       .. Scalar Arguments ..
00014 *       INTEGER            LDA, LDB, M, N
00015 *       REAL               RESULT
00016 *       ..
00017 *       .. Array Arguments ..
00018 *       REAL               RWORK( * )
00019 *       COMPLEX            A( LDA, * ), B( LDB, * ), WORK( * )
00020 *       ..
00021 *  
00022 *
00023 *> \par Purpose:
00024 *  =============
00025 *>
00026 *> \verbatim
00027 *>
00028 *> CGET10 compares two matrices A and B and computes the ratio
00029 *> RESULT = norm( A - B ) / ( norm(A) * M * EPS )
00030 *> \endverbatim
00031 *
00032 *  Arguments:
00033 *  ==========
00034 *
00035 *> \param[in] M
00036 *> \verbatim
00037 *>          M is INTEGER
00038 *>          The number of rows of the matrices A and B.
00039 *> \endverbatim
00040 *>
00041 *> \param[in] N
00042 *> \verbatim
00043 *>          N is INTEGER
00044 *>          The number of columns of the matrices A and B.
00045 *> \endverbatim
00046 *>
00047 *> \param[in] A
00048 *> \verbatim
00049 *>          A is COMPLEX array, dimension (LDA,N)
00050 *>          The m by n matrix A.
00051 *> \endverbatim
00052 *>
00053 *> \param[in] LDA
00054 *> \verbatim
00055 *>          LDA is INTEGER
00056 *>          The leading dimension of the array A.  LDA >= max(1,M).
00057 *> \endverbatim
00058 *>
00059 *> \param[in] B
00060 *> \verbatim
00061 *>          B is COMPLEX array, dimension (LDB,N)
00062 *>          The m by n matrix B.
00063 *> \endverbatim
00064 *>
00065 *> \param[in] LDB
00066 *> \verbatim
00067 *>          LDB is INTEGER
00068 *>          The leading dimension of the array B.  LDB >= max(1,M).
00069 *> \endverbatim
00070 *>
00071 *> \param[out] WORK
00072 *> \verbatim
00073 *>          WORK is COMPLEX array, dimension (M)
00074 *> \endverbatim
00075 *>
00076 *> \param[out] RWORK
00077 *> \verbatim
00078 *>          RWORK is COMPLEX array, dimension (M)
00079 *> \endverbatim
00080 *>
00081 *> \param[out] RESULT
00082 *> \verbatim
00083 *>          RESULT is REAL
00084 *>          RESULT = norm( A - B ) / ( norm(A) * M * EPS )
00085 *> \endverbatim
00086 *
00087 *  Authors:
00088 *  ========
00089 *
00090 *> \author Univ. of Tennessee 
00091 *> \author Univ. of California Berkeley 
00092 *> \author Univ. of Colorado Denver 
00093 *> \author NAG Ltd. 
00094 *
00095 *> \date November 2011
00096 *
00097 *> \ingroup complex_eig
00098 *
00099 *  =====================================================================
00100       SUBROUTINE CGET10( M, N, A, LDA, B, LDB, WORK, RWORK, RESULT )
00101 *
00102 *  -- LAPACK test routine (version 3.4.0) --
00103 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
00104 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
00105 *     November 2011
00106 *
00107 *     .. Scalar Arguments ..
00108       INTEGER            LDA, LDB, M, N
00109       REAL               RESULT
00110 *     ..
00111 *     .. Array Arguments ..
00112       REAL               RWORK( * )
00113       COMPLEX            A( LDA, * ), B( LDB, * ), WORK( * )
00114 *     ..
00115 *
00116 *  =====================================================================
00117 *
00118 *     .. Parameters ..
00119       REAL               ONE, ZERO
00120       PARAMETER          ( ONE = 1.0E+0, ZERO = 0.0E+0 )
00121 *     ..
00122 *     .. Local Scalars ..
00123       INTEGER            J
00124       REAL               ANORM, EPS, UNFL, WNORM
00125 *     ..
00126 *     .. External Functions ..
00127       REAL               SCASUM, SLAMCH, CLANGE
00128       EXTERNAL           SCASUM, SLAMCH, CLANGE
00129 *     ..
00130 *     .. External Subroutines ..
00131       EXTERNAL           CAXPY, CCOPY
00132 *     ..
00133 *     .. Intrinsic Functions ..
00134       INTRINSIC          MAX, MIN, REAL
00135 *     ..
00136 *     .. Executable Statements ..
00137 *
00138 *     Quick return if possible
00139 *
00140       IF( M.LE.0 .OR. N.LE.0 ) THEN
00141          RESULT = ZERO
00142          RETURN
00143       END IF
00144 *
00145       UNFL = SLAMCH( 'Safe minimum' )
00146       EPS = SLAMCH( 'Precision' )
00147 *
00148       WNORM = ZERO
00149       DO 10 J = 1, N
00150          CALL CCOPY( M, A( 1, J ), 1, WORK, 1 )
00151          CALL CAXPY( M, CMPLX( -ONE ), B( 1, J ), 1, WORK, 1 )
00152          WNORM = MAX( WNORM, SCASUM( N, WORK, 1 ) )
00153    10 CONTINUE
00154 *
00155       ANORM = MAX( CLANGE( '1', M, N, A, LDA, RWORK ), UNFL )
00156 *
00157       IF( ANORM.GT.WNORM ) THEN
00158          RESULT = ( WNORM / ANORM ) / ( M*EPS )
00159       ELSE
00160          IF( ANORM.LT.ONE ) THEN
00161             RESULT = ( MIN( WNORM, M*ANORM ) / ANORM ) / ( M*EPS )
00162          ELSE
00163             RESULT = MIN( WNORM / ANORM, REAL( M ) ) / ( M*EPS )
00164          END IF
00165       END IF
00166 *
00167       RETURN
00168 *
00169 *     End of CGET10
00170 *
00171       END
 All Files Functions