1*> \brief \b CTBT06 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8* Definition: 9* =========== 10* 11* SUBROUTINE CTBT06( RCOND, RCONDC, UPLO, DIAG, N, KD, AB, LDAB, 12* RWORK, RAT ) 13* 14* .. Scalar Arguments .. 15* CHARACTER DIAG, UPLO 16* INTEGER KD, LDAB, N 17* REAL RAT, RCOND, RCONDC 18* .. 19* .. Array Arguments .. 20* REAL RWORK( * ) 21* COMPLEX AB( LDAB, * ) 22* .. 23* 24* 25*> \par Purpose: 26* ============= 27*> 28*> \verbatim 29*> 30*> CTBT06 computes a test ratio comparing RCOND (the reciprocal 31*> condition number of a triangular matrix A) and RCONDC, the estimate 32*> computed by CTBCON. Information about the triangular matrix A is 33*> used if one estimate is zero and the other is non-zero to decide if 34*> underflow in the estimate is justified. 35*> \endverbatim 36* 37* Arguments: 38* ========== 39* 40*> \param[in] RCOND 41*> \verbatim 42*> RCOND is REAL 43*> The estimate of the reciprocal condition number obtained by 44*> forming the explicit inverse of the matrix A and computing 45*> RCOND = 1/( norm(A) * norm(inv(A)) ). 46*> \endverbatim 47*> 48*> \param[in] RCONDC 49*> \verbatim 50*> RCONDC is REAL 51*> The estimate of the reciprocal condition number computed by 52*> CTBCON. 53*> \endverbatim 54*> 55*> \param[in] UPLO 56*> \verbatim 57*> UPLO is CHARACTER 58*> Specifies whether the matrix A is upper or lower triangular. 59*> = 'U': Upper triangular 60*> = 'L': Lower triangular 61*> \endverbatim 62*> 63*> \param[in] DIAG 64*> \verbatim 65*> DIAG is CHARACTER 66*> Specifies whether or not the matrix A is unit triangular. 67*> = 'N': Non-unit triangular 68*> = 'U': Unit triangular 69*> \endverbatim 70*> 71*> \param[in] N 72*> \verbatim 73*> N is INTEGER 74*> The order of the matrix A. N >= 0. 75*> \endverbatim 76*> 77*> \param[in] KD 78*> \verbatim 79*> KD is INTEGER 80*> The number of superdiagonals or subdiagonals of the 81*> triangular band matrix A. KD >= 0. 82*> \endverbatim 83*> 84*> \param[in] AB 85*> \verbatim 86*> AB is COMPLEX array, dimension (LDAB,N) 87*> The upper or lower triangular band matrix A, stored in the 88*> first kd+1 rows of the array. The j-th column of A is stored 89*> in the j-th column of the array AB as follows: 90*> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j; 91*> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd). 92*> \endverbatim 93*> 94*> \param[in] LDAB 95*> \verbatim 96*> LDAB is INTEGER 97*> The leading dimension of the array AB. LDAB >= KD+1. 98*> \endverbatim 99*> 100*> \param[out] RWORK 101*> \verbatim 102*> RWORK is REAL array, dimension (N) 103*> \endverbatim 104*> 105*> \param[out] RAT 106*> \verbatim 107*> RAT is REAL 108*> The test ratio. If both RCOND and RCONDC are nonzero, 109*> RAT = MAX( RCOND, RCONDC )/MIN( RCOND, RCONDC ) - 1. 110*> If RAT = 0, the two estimates are exactly the same. 111*> \endverbatim 112* 113* Authors: 114* ======== 115* 116*> \author Univ. of Tennessee 117*> \author Univ. of California Berkeley 118*> \author Univ. of Colorado Denver 119*> \author NAG Ltd. 120* 121*> \date December 2016 122* 123*> \ingroup complex_lin 124* 125* ===================================================================== 126 SUBROUTINE CTBT06( RCOND, RCONDC, UPLO, DIAG, N, KD, AB, LDAB, 127 $ RWORK, RAT ) 128* 129* -- LAPACK test routine (version 3.7.0) -- 130* -- LAPACK is a software package provided by Univ. of Tennessee, -- 131* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 132* December 2016 133* 134* .. Scalar Arguments .. 135 CHARACTER DIAG, UPLO 136 INTEGER KD, LDAB, N 137 REAL RAT, RCOND, RCONDC 138* .. 139* .. Array Arguments .. 140 REAL RWORK( * ) 141 COMPLEX AB( LDAB, * ) 142* .. 143* 144* ===================================================================== 145* 146* .. Parameters .. 147 REAL ZERO, ONE 148 PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 ) 149* .. 150* .. Local Scalars .. 151 REAL ANORM, BIGNUM, EPS, RMAX, RMIN 152* .. 153* .. External Functions .. 154 REAL CLANTB, SLAMCH 155 EXTERNAL CLANTB, SLAMCH 156* .. 157* .. Intrinsic Functions .. 158 INTRINSIC MAX, MIN 159* .. 160* .. Executable Statements .. 161* 162 EPS = SLAMCH( 'Epsilon' ) 163 RMAX = MAX( RCOND, RCONDC ) 164 RMIN = MIN( RCOND, RCONDC ) 165* 166* Do the easy cases first. 167* 168 IF( RMIN.LT.ZERO ) THEN 169* 170* Invalid value for RCOND or RCONDC, return 1/EPS. 171* 172 RAT = ONE / EPS 173* 174 ELSE IF( RMIN.GT.ZERO ) THEN 175* 176* Both estimates are positive, return RMAX/RMIN - 1. 177* 178 RAT = RMAX / RMIN - ONE 179* 180 ELSE IF( RMAX.EQ.ZERO ) THEN 181* 182* Both estimates zero. 183* 184 RAT = ZERO 185* 186 ELSE 187* 188* One estimate is zero, the other is non-zero. If the matrix is 189* ill-conditioned, return the nonzero estimate multiplied by 190* 1/EPS; if the matrix is badly scaled, return the nonzero 191* estimate multiplied by BIGNUM/TMAX, where TMAX is the maximum 192* element in absolute value in A. 193* 194 BIGNUM = ONE / SLAMCH( 'Safe minimum' ) 195 ANORM = CLANTB( 'M', UPLO, DIAG, N, KD, AB, LDAB, RWORK ) 196* 197 RAT = RMAX*( MIN( BIGNUM / MAX( ONE, ANORM ), ONE / EPS ) ) 198 END IF 199* 200 RETURN 201* 202* End of CTBT06 203* 204 END 205