1*> \brief \b DCHKEQ 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 DCHKEQ( THRESH, NOUT ) 12* 13* .. Scalar Arguments .. 14* INTEGER NOUT 15* DOUBLE PRECISION THRESH 16* .. 17* 18* 19*> \par Purpose: 20* ============= 21*> 22*> \verbatim 23*> 24*> DCHKEQ tests DGEEQU, DGBEQU, DPOEQU, DPPEQU and DPBEQU 25*> \endverbatim 26* 27* Arguments: 28* ========== 29* 30*> \param[in] THRESH 31*> \verbatim 32*> THRESH is DOUBLE PRECISION 33*> Threshold for testing routines. Should be between 2 and 10. 34*> \endverbatim 35*> 36*> \param[in] NOUT 37*> \verbatim 38*> NOUT is INTEGER 39*> The unit number for output. 40*> \endverbatim 41* 42* Authors: 43* ======== 44* 45*> \author Univ. of Tennessee 46*> \author Univ. of California Berkeley 47*> \author Univ. of Colorado Denver 48*> \author NAG Ltd. 49* 50*> \ingroup double_lin 51* 52* ===================================================================== 53 SUBROUTINE DCHKEQ( THRESH, NOUT ) 54* 55* -- LAPACK test routine -- 56* -- LAPACK is a software package provided by Univ. of Tennessee, -- 57* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 58* 59* .. Scalar Arguments .. 60 INTEGER NOUT 61 DOUBLE PRECISION THRESH 62* .. 63* 64* ===================================================================== 65* 66* .. Parameters .. 67 DOUBLE PRECISION ZERO, ONE, TEN 68 PARAMETER ( ZERO = 0.0D0, ONE = 1.0D+0, TEN = 1.0D1 ) 69 INTEGER NSZ, NSZB 70 PARAMETER ( NSZ = 5, NSZB = 3*NSZ-2 ) 71 INTEGER NSZP, NPOW 72 PARAMETER ( NSZP = ( NSZ*( NSZ+1 ) ) / 2, 73 $ NPOW = 2*NSZ+1 ) 74* .. 75* .. Local Scalars .. 76 LOGICAL OK 77 CHARACTER*3 PATH 78 INTEGER I, INFO, J, KL, KU, M, N 79 DOUBLE PRECISION CCOND, EPS, NORM, RATIO, RCMAX, RCMIN, RCOND 80* .. 81* .. Local Arrays .. 82 DOUBLE PRECISION A( NSZ, NSZ ), AB( NSZB, NSZ ), AP( NSZP ), 83 $ C( NSZ ), POW( NPOW ), R( NSZ ), RESLTS( 5 ), 84 $ RPOW( NPOW ) 85* .. 86* .. External Functions .. 87 DOUBLE PRECISION DLAMCH 88 EXTERNAL DLAMCH 89* .. 90* .. External Subroutines .. 91 EXTERNAL DGBEQU, DGEEQU, DPBEQU, DPOEQU, DPPEQU 92* .. 93* .. Intrinsic Functions .. 94 INTRINSIC ABS, MAX, MIN 95* .. 96* .. Executable Statements .. 97* 98 PATH( 1: 1 ) = 'Double precision' 99 PATH( 2: 3 ) = 'EQ' 100* 101 EPS = DLAMCH( 'P' ) 102 DO 10 I = 1, 5 103 RESLTS( I ) = ZERO 104 10 CONTINUE 105 DO 20 I = 1, NPOW 106 POW( I ) = TEN**( I-1 ) 107 RPOW( I ) = ONE / POW( I ) 108 20 CONTINUE 109* 110* Test DGEEQU 111* 112 DO 80 N = 0, NSZ 113 DO 70 M = 0, NSZ 114* 115 DO 40 J = 1, NSZ 116 DO 30 I = 1, NSZ 117 IF( I.LE.M .AND. J.LE.N ) THEN 118 A( I, J ) = POW( I+J+1 )*( -1 )**( I+J ) 119 ELSE 120 A( I, J ) = ZERO 121 END IF 122 30 CONTINUE 123 40 CONTINUE 124* 125 CALL DGEEQU( M, N, A, NSZ, R, C, RCOND, CCOND, NORM, INFO ) 126* 127 IF( INFO.NE.0 ) THEN 128 RESLTS( 1 ) = ONE 129 ELSE 130 IF( N.NE.0 .AND. M.NE.0 ) THEN 131 RESLTS( 1 ) = MAX( RESLTS( 1 ), 132 $ ABS( ( RCOND-RPOW( M ) ) / RPOW( M ) ) ) 133 RESLTS( 1 ) = MAX( RESLTS( 1 ), 134 $ ABS( ( CCOND-RPOW( N ) ) / RPOW( N ) ) ) 135 RESLTS( 1 ) = MAX( RESLTS( 1 ), 136 $ ABS( ( NORM-POW( N+M+1 ) ) / POW( N+M+ 137 $ 1 ) ) ) 138 DO 50 I = 1, M 139 RESLTS( 1 ) = MAX( RESLTS( 1 ), 140 $ ABS( ( R( I )-RPOW( I+N+1 ) ) / 141 $ RPOW( I+N+1 ) ) ) 142 50 CONTINUE 143 DO 60 J = 1, N 144 RESLTS( 1 ) = MAX( RESLTS( 1 ), 145 $ ABS( ( C( J )-POW( N-J+1 ) ) / 146 $ POW( N-J+1 ) ) ) 147 60 CONTINUE 148 END IF 149 END IF 150* 151 70 CONTINUE 152 80 CONTINUE 153* 154* Test with zero rows and columns 155* 156 DO 90 J = 1, NSZ 157 A( MAX( NSZ-1, 1 ), J ) = ZERO 158 90 CONTINUE 159 CALL DGEEQU( NSZ, NSZ, A, NSZ, R, C, RCOND, CCOND, NORM, INFO ) 160 IF( INFO.NE.MAX( NSZ-1, 1 ) ) 161 $ RESLTS( 1 ) = ONE 162* 163 DO 100 J = 1, NSZ 164 A( MAX( NSZ-1, 1 ), J ) = ONE 165 100 CONTINUE 166 DO 110 I = 1, NSZ 167 A( I, MAX( NSZ-1, 1 ) ) = ZERO 168 110 CONTINUE 169 CALL DGEEQU( NSZ, NSZ, A, NSZ, R, C, RCOND, CCOND, NORM, INFO ) 170 IF( INFO.NE.NSZ+MAX( NSZ-1, 1 ) ) 171 $ RESLTS( 1 ) = ONE 172 RESLTS( 1 ) = RESLTS( 1 ) / EPS 173* 174* Test DGBEQU 175* 176 DO 250 N = 0, NSZ 177 DO 240 M = 0, NSZ 178 DO 230 KL = 0, MAX( M-1, 0 ) 179 DO 220 KU = 0, MAX( N-1, 0 ) 180* 181 DO 130 J = 1, NSZ 182 DO 120 I = 1, NSZB 183 AB( I, J ) = ZERO 184 120 CONTINUE 185 130 CONTINUE 186 DO 150 J = 1, N 187 DO 140 I = 1, M 188 IF( I.LE.MIN( M, J+KL ) .AND. I.GE. 189 $ MAX( 1, J-KU ) .AND. J.LE.N ) THEN 190 AB( KU+1+I-J, J ) = POW( I+J+1 )* 191 $ ( -1 )**( I+J ) 192 END IF 193 140 CONTINUE 194 150 CONTINUE 195* 196 CALL DGBEQU( M, N, KL, KU, AB, NSZB, R, C, RCOND, 197 $ CCOND, NORM, INFO ) 198* 199 IF( INFO.NE.0 ) THEN 200 IF( .NOT.( ( N+KL.LT.M .AND. INFO.EQ.N+KL+1 ) .OR. 201 $ ( M+KU.LT.N .AND. INFO.EQ.2*M+KU+1 ) ) ) THEN 202 RESLTS( 2 ) = ONE 203 END IF 204 ELSE 205 IF( N.NE.0 .AND. M.NE.0 ) THEN 206* 207 RCMIN = R( 1 ) 208 RCMAX = R( 1 ) 209 DO 160 I = 1, M 210 RCMIN = MIN( RCMIN, R( I ) ) 211 RCMAX = MAX( RCMAX, R( I ) ) 212 160 CONTINUE 213 RATIO = RCMIN / RCMAX 214 RESLTS( 2 ) = MAX( RESLTS( 2 ), 215 $ ABS( ( RCOND-RATIO ) / RATIO ) ) 216* 217 RCMIN = C( 1 ) 218 RCMAX = C( 1 ) 219 DO 170 J = 1, N 220 RCMIN = MIN( RCMIN, C( J ) ) 221 RCMAX = MAX( RCMAX, C( J ) ) 222 170 CONTINUE 223 RATIO = RCMIN / RCMAX 224 RESLTS( 2 ) = MAX( RESLTS( 2 ), 225 $ ABS( ( CCOND-RATIO ) / RATIO ) ) 226* 227 RESLTS( 2 ) = MAX( RESLTS( 2 ), 228 $ ABS( ( NORM-POW( N+M+1 ) ) / 229 $ POW( N+M+1 ) ) ) 230 DO 190 I = 1, M 231 RCMAX = ZERO 232 DO 180 J = 1, N 233 IF( I.LE.J+KL .AND. I.GE.J-KU ) THEN 234 RATIO = ABS( R( I )*POW( I+J+1 )* 235 $ C( J ) ) 236 RCMAX = MAX( RCMAX, RATIO ) 237 END IF 238 180 CONTINUE 239 RESLTS( 2 ) = MAX( RESLTS( 2 ), 240 $ ABS( ONE-RCMAX ) ) 241 190 CONTINUE 242* 243 DO 210 J = 1, N 244 RCMAX = ZERO 245 DO 200 I = 1, M 246 IF( I.LE.J+KL .AND. I.GE.J-KU ) THEN 247 RATIO = ABS( R( I )*POW( I+J+1 )* 248 $ C( J ) ) 249 RCMAX = MAX( RCMAX, RATIO ) 250 END IF 251 200 CONTINUE 252 RESLTS( 2 ) = MAX( RESLTS( 2 ), 253 $ ABS( ONE-RCMAX ) ) 254 210 CONTINUE 255 END IF 256 END IF 257* 258 220 CONTINUE 259 230 CONTINUE 260 240 CONTINUE 261 250 CONTINUE 262 RESLTS( 2 ) = RESLTS( 2 ) / EPS 263* 264* Test DPOEQU 265* 266 DO 290 N = 0, NSZ 267* 268 DO 270 I = 1, NSZ 269 DO 260 J = 1, NSZ 270 IF( I.LE.N .AND. J.EQ.I ) THEN 271 A( I, J ) = POW( I+J+1 )*( -1 )**( I+J ) 272 ELSE 273 A( I, J ) = ZERO 274 END IF 275 260 CONTINUE 276 270 CONTINUE 277* 278 CALL DPOEQU( N, A, NSZ, R, RCOND, NORM, INFO ) 279* 280 IF( INFO.NE.0 ) THEN 281 RESLTS( 3 ) = ONE 282 ELSE 283 IF( N.NE.0 ) THEN 284 RESLTS( 3 ) = MAX( RESLTS( 3 ), 285 $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) ) 286 RESLTS( 3 ) = MAX( RESLTS( 3 ), 287 $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+ 288 $ 1 ) ) ) 289 DO 280 I = 1, N 290 RESLTS( 3 ) = MAX( RESLTS( 3 ), 291 $ ABS( ( R( I )-RPOW( I+1 ) ) / RPOW( I+ 292 $ 1 ) ) ) 293 280 CONTINUE 294 END IF 295 END IF 296 290 CONTINUE 297 A( MAX( NSZ-1, 1 ), MAX( NSZ-1, 1 ) ) = -ONE 298 CALL DPOEQU( NSZ, A, NSZ, R, RCOND, NORM, INFO ) 299 IF( INFO.NE.MAX( NSZ-1, 1 ) ) 300 $ RESLTS( 3 ) = ONE 301 RESLTS( 3 ) = RESLTS( 3 ) / EPS 302* 303* Test DPPEQU 304* 305 DO 360 N = 0, NSZ 306* 307* Upper triangular packed storage 308* 309 DO 300 I = 1, ( N*( N+1 ) ) / 2 310 AP( I ) = ZERO 311 300 CONTINUE 312 DO 310 I = 1, N 313 AP( ( I*( I+1 ) ) / 2 ) = POW( 2*I+1 ) 314 310 CONTINUE 315* 316 CALL DPPEQU( 'U', N, AP, R, RCOND, NORM, INFO ) 317* 318 IF( INFO.NE.0 ) THEN 319 RESLTS( 4 ) = ONE 320 ELSE 321 IF( N.NE.0 ) THEN 322 RESLTS( 4 ) = MAX( RESLTS( 4 ), 323 $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) ) 324 RESLTS( 4 ) = MAX( RESLTS( 4 ), 325 $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+ 326 $ 1 ) ) ) 327 DO 320 I = 1, N 328 RESLTS( 4 ) = MAX( RESLTS( 4 ), 329 $ ABS( ( R( I )-RPOW( I+1 ) ) / RPOW( I+ 330 $ 1 ) ) ) 331 320 CONTINUE 332 END IF 333 END IF 334* 335* Lower triangular packed storage 336* 337 DO 330 I = 1, ( N*( N+1 ) ) / 2 338 AP( I ) = ZERO 339 330 CONTINUE 340 J = 1 341 DO 340 I = 1, N 342 AP( J ) = POW( 2*I+1 ) 343 J = J + ( N-I+1 ) 344 340 CONTINUE 345* 346 CALL DPPEQU( 'L', N, AP, R, RCOND, NORM, INFO ) 347* 348 IF( INFO.NE.0 ) THEN 349 RESLTS( 4 ) = ONE 350 ELSE 351 IF( N.NE.0 ) THEN 352 RESLTS( 4 ) = MAX( RESLTS( 4 ), 353 $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) ) 354 RESLTS( 4 ) = MAX( RESLTS( 4 ), 355 $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+ 356 $ 1 ) ) ) 357 DO 350 I = 1, N 358 RESLTS( 4 ) = MAX( RESLTS( 4 ), 359 $ ABS( ( R( I )-RPOW( I+1 ) ) / RPOW( I+ 360 $ 1 ) ) ) 361 350 CONTINUE 362 END IF 363 END IF 364* 365 360 CONTINUE 366 I = ( NSZ*( NSZ+1 ) ) / 2 - 2 367 AP( I ) = -ONE 368 CALL DPPEQU( 'L', NSZ, AP, R, RCOND, NORM, INFO ) 369 IF( INFO.NE.MAX( NSZ-1, 1 ) ) 370 $ RESLTS( 4 ) = ONE 371 RESLTS( 4 ) = RESLTS( 4 ) / EPS 372* 373* Test DPBEQU 374* 375 DO 460 N = 0, NSZ 376 DO 450 KL = 0, MAX( N-1, 0 ) 377* 378* Test upper triangular storage 379* 380 DO 380 J = 1, NSZ 381 DO 370 I = 1, NSZB 382 AB( I, J ) = ZERO 383 370 CONTINUE 384 380 CONTINUE 385 DO 390 J = 1, N 386 AB( KL+1, J ) = POW( 2*J+1 ) 387 390 CONTINUE 388* 389 CALL DPBEQU( 'U', N, KL, AB, NSZB, R, RCOND, NORM, INFO ) 390* 391 IF( INFO.NE.0 ) THEN 392 RESLTS( 5 ) = ONE 393 ELSE 394 IF( N.NE.0 ) THEN 395 RESLTS( 5 ) = MAX( RESLTS( 5 ), 396 $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) ) 397 RESLTS( 5 ) = MAX( RESLTS( 5 ), 398 $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+ 399 $ 1 ) ) ) 400 DO 400 I = 1, N 401 RESLTS( 5 ) = MAX( RESLTS( 5 ), 402 $ ABS( ( R( I )-RPOW( I+1 ) ) / 403 $ RPOW( I+1 ) ) ) 404 400 CONTINUE 405 END IF 406 END IF 407 IF( N.NE.0 ) THEN 408 AB( KL+1, MAX( N-1, 1 ) ) = -ONE 409 CALL DPBEQU( 'U', N, KL, AB, NSZB, R, RCOND, NORM, INFO ) 410 IF( INFO.NE.MAX( N-1, 1 ) ) 411 $ RESLTS( 5 ) = ONE 412 END IF 413* 414* Test lower triangular storage 415* 416 DO 420 J = 1, NSZ 417 DO 410 I = 1, NSZB 418 AB( I, J ) = ZERO 419 410 CONTINUE 420 420 CONTINUE 421 DO 430 J = 1, N 422 AB( 1, J ) = POW( 2*J+1 ) 423 430 CONTINUE 424* 425 CALL DPBEQU( 'L', N, KL, AB, NSZB, R, RCOND, NORM, INFO ) 426* 427 IF( INFO.NE.0 ) THEN 428 RESLTS( 5 ) = ONE 429 ELSE 430 IF( N.NE.0 ) THEN 431 RESLTS( 5 ) = MAX( RESLTS( 5 ), 432 $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) ) 433 RESLTS( 5 ) = MAX( RESLTS( 5 ), 434 $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+ 435 $ 1 ) ) ) 436 DO 440 I = 1, N 437 RESLTS( 5 ) = MAX( RESLTS( 5 ), 438 $ ABS( ( R( I )-RPOW( I+1 ) ) / 439 $ RPOW( I+1 ) ) ) 440 440 CONTINUE 441 END IF 442 END IF 443 IF( N.NE.0 ) THEN 444 AB( 1, MAX( N-1, 1 ) ) = -ONE 445 CALL DPBEQU( 'L', N, KL, AB, NSZB, R, RCOND, NORM, INFO ) 446 IF( INFO.NE.MAX( N-1, 1 ) ) 447 $ RESLTS( 5 ) = ONE 448 END IF 449 450 CONTINUE 450 460 CONTINUE 451 RESLTS( 5 ) = RESLTS( 5 ) / EPS 452 OK = ( RESLTS( 1 ).LE.THRESH ) .AND. 453 $ ( RESLTS( 2 ).LE.THRESH ) .AND. 454 $ ( RESLTS( 3 ).LE.THRESH ) .AND. 455 $ ( RESLTS( 4 ).LE.THRESH ) .AND. ( RESLTS( 5 ).LE.THRESH ) 456 WRITE( NOUT, FMT = * ) 457 IF( OK ) THEN 458 WRITE( NOUT, FMT = 9999 )PATH 459 ELSE 460 IF( RESLTS( 1 ).GT.THRESH ) 461 $ WRITE( NOUT, FMT = 9998 )RESLTS( 1 ), THRESH 462 IF( RESLTS( 2 ).GT.THRESH ) 463 $ WRITE( NOUT, FMT = 9997 )RESLTS( 2 ), THRESH 464 IF( RESLTS( 3 ).GT.THRESH ) 465 $ WRITE( NOUT, FMT = 9996 )RESLTS( 3 ), THRESH 466 IF( RESLTS( 4 ).GT.THRESH ) 467 $ WRITE( NOUT, FMT = 9995 )RESLTS( 4 ), THRESH 468 IF( RESLTS( 5 ).GT.THRESH ) 469 $ WRITE( NOUT, FMT = 9994 )RESLTS( 5 ), THRESH 470 END IF 471 9999 FORMAT( 1X, 'All tests for ', A3, 472 $ ' routines passed the threshold' ) 473 9998 FORMAT( ' DGEEQU failed test with value ', D10.3, ' exceeding', 474 $ ' threshold ', D10.3 ) 475 9997 FORMAT( ' DGBEQU failed test with value ', D10.3, ' exceeding', 476 $ ' threshold ', D10.3 ) 477 9996 FORMAT( ' DPOEQU failed test with value ', D10.3, ' exceeding', 478 $ ' threshold ', D10.3 ) 479 9995 FORMAT( ' DPPEQU failed test with value ', D10.3, ' exceeding', 480 $ ' threshold ', D10.3 ) 481 9994 FORMAT( ' DPBEQU failed test with value ', D10.3, ' exceeding', 482 $ ' threshold ', D10.3 ) 483 RETURN 484* 485* End of DCHKEQ 486* 487 END 488