![]() |
LAPACK
3.4.1
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b CLATB4 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 CLATB4( PATH, IMAT, M, N, TYPE, KL, KU, ANORM, MODE, 00012 * CNDNUM, DIST ) 00013 * 00014 * .. Scalar Arguments .. 00015 * CHARACTER DIST, TYPE 00016 * CHARACTER*3 PATH 00017 * INTEGER IMAT, KL, KU, M, MODE, N 00018 * REAL ANORM, CNDNUM 00019 * .. 00020 * 00021 * 00022 *> \par Purpose: 00023 * ============= 00024 *> 00025 *> \verbatim 00026 *> 00027 *> CLATB4 sets parameters for the matrix generator based on the type of 00028 *> matrix to be generated. 00029 *> \endverbatim 00030 * 00031 * Arguments: 00032 * ========== 00033 * 00034 *> \param[in] PATH 00035 *> \verbatim 00036 *> PATH is CHARACTER*3 00037 *> The LAPACK path name. 00038 *> \endverbatim 00039 *> 00040 *> \param[in] IMAT 00041 *> \verbatim 00042 *> IMAT is INTEGER 00043 *> An integer key describing which matrix to generate for this 00044 *> path. 00045 *> \endverbatim 00046 *> 00047 *> \param[in] M 00048 *> \verbatim 00049 *> M is INTEGER 00050 *> The number of rows in the matrix to be generated. 00051 *> \endverbatim 00052 *> 00053 *> \param[in] N 00054 *> \verbatim 00055 *> N is INTEGER 00056 *> The number of columns in the matrix to be generated. 00057 *> \endverbatim 00058 *> 00059 *> \param[out] TYPE 00060 *> \verbatim 00061 *> TYPE is CHARACTER*1 00062 *> The type of the matrix to be generated: 00063 *> = 'S': symmetric matrix 00064 *> = 'P': symmetric positive (semi)definite matrix 00065 *> = 'N': nonsymmetric matrix 00066 *> \endverbatim 00067 *> 00068 *> \param[out] KL 00069 *> \verbatim 00070 *> KL is INTEGER 00071 *> The lower band width of the matrix to be generated. 00072 *> \endverbatim 00073 *> 00074 *> \param[out] KU 00075 *> \verbatim 00076 *> KU is INTEGER 00077 *> The upper band width of the matrix to be generated. 00078 *> \endverbatim 00079 *> 00080 *> \param[out] ANORM 00081 *> \verbatim 00082 *> ANORM is REAL 00083 *> The desired norm of the matrix to be generated. The diagonal 00084 *> matrix of singular values or eigenvalues is scaled by this 00085 *> value. 00086 *> \endverbatim 00087 *> 00088 *> \param[out] MODE 00089 *> \verbatim 00090 *> MODE is INTEGER 00091 *> A key indicating how to choose the vector of eigenvalues. 00092 *> \endverbatim 00093 *> 00094 *> \param[out] CNDNUM 00095 *> \verbatim 00096 *> CNDNUM is REAL 00097 *> The desired condition number. 00098 *> \endverbatim 00099 *> 00100 *> \param[out] DIST 00101 *> \verbatim 00102 *> DIST is CHARACTER*1 00103 *> The type of distribution to be used by the random number 00104 *> generator. 00105 *> \endverbatim 00106 * 00107 * Authors: 00108 * ======== 00109 * 00110 *> \author Univ. of Tennessee 00111 *> \author Univ. of California Berkeley 00112 *> \author Univ. of Colorado Denver 00113 *> \author NAG Ltd. 00114 * 00115 *> \date November 2011 00116 * 00117 *> \ingroup complex_lin 00118 * 00119 * ===================================================================== 00120 SUBROUTINE CLATB4( PATH, IMAT, M, N, TYPE, KL, KU, ANORM, MODE, 00121 $ CNDNUM, DIST ) 00122 * 00123 * -- LAPACK test routine (version 3.4.0) -- 00124 * -- LAPACK is a software package provided by Univ. of Tennessee, -- 00125 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00126 * November 2011 00127 * 00128 * .. Scalar Arguments .. 00129 CHARACTER DIST, TYPE 00130 CHARACTER*3 PATH 00131 INTEGER IMAT, KL, KU, M, MODE, N 00132 REAL ANORM, CNDNUM 00133 * .. 00134 * 00135 * ===================================================================== 00136 * 00137 * .. Parameters .. 00138 REAL SHRINK, TENTH 00139 PARAMETER ( SHRINK = 0.25E0, TENTH = 0.1E+0 ) 00140 REAL ONE 00141 PARAMETER ( ONE = 1.0E+0 ) 00142 REAL TWO 00143 PARAMETER ( TWO = 2.0E+0 ) 00144 * .. 00145 * .. Local Scalars .. 00146 LOGICAL FIRST 00147 CHARACTER*2 C2 00148 INTEGER MAT 00149 REAL BADC1, BADC2, EPS, LARGE, SMALL 00150 * .. 00151 * .. External Functions .. 00152 LOGICAL LSAMEN 00153 REAL SLAMCH 00154 EXTERNAL LSAMEN, SLAMCH 00155 * .. 00156 * .. Intrinsic Functions .. 00157 INTRINSIC ABS, MAX, SQRT 00158 * .. 00159 * .. External Subroutines .. 00160 EXTERNAL SLABAD 00161 * .. 00162 * .. Save statement .. 00163 SAVE EPS, SMALL, LARGE, BADC1, BADC2, FIRST 00164 * .. 00165 * .. Data statements .. 00166 DATA FIRST / .TRUE. / 00167 * .. 00168 * .. Executable Statements .. 00169 * 00170 * Set some constants for use in the subroutine. 00171 * 00172 IF( FIRST ) THEN 00173 FIRST = .FALSE. 00174 EPS = SLAMCH( 'Precision' ) 00175 BADC2 = TENTH / EPS 00176 BADC1 = SQRT( BADC2 ) 00177 SMALL = SLAMCH( 'Safe minimum' ) 00178 LARGE = ONE / SMALL 00179 * 00180 * If it looks like we're on a Cray, take the square root of 00181 * SMALL and LARGE to avoid overflow and underflow problems. 00182 * 00183 CALL SLABAD( SMALL, LARGE ) 00184 SMALL = SHRINK*( SMALL / EPS ) 00185 LARGE = ONE / SMALL 00186 END IF 00187 * 00188 C2 = PATH( 2: 3 ) 00189 * 00190 * Set some parameters we don't plan to change. 00191 * 00192 DIST = 'S' 00193 MODE = 3 00194 * 00195 * xQR, xLQ, xQL, xRQ: Set parameters to generate a general 00196 * M x N matrix. 00197 * 00198 IF( LSAMEN( 2, C2, 'QR' ) .OR. LSAMEN( 2, C2, 'LQ' ) .OR. 00199 $ LSAMEN( 2, C2, 'QL' ) .OR. LSAMEN( 2, C2, 'RQ' ) ) THEN 00200 * 00201 * Set TYPE, the type of matrix to be generated. 00202 * 00203 TYPE = 'N' 00204 * 00205 * Set the lower and upper bandwidths. 00206 * 00207 IF( IMAT.EQ.1 ) THEN 00208 KL = 0 00209 KU = 0 00210 ELSE IF( IMAT.EQ.2 ) THEN 00211 KL = 0 00212 KU = MAX( N-1, 0 ) 00213 ELSE IF( IMAT.EQ.3 ) THEN 00214 KL = MAX( M-1, 0 ) 00215 KU = 0 00216 ELSE 00217 KL = MAX( M-1, 0 ) 00218 KU = MAX( N-1, 0 ) 00219 END IF 00220 * 00221 * Set the condition number and norm. 00222 * 00223 IF( IMAT.EQ.5 ) THEN 00224 CNDNUM = BADC1 00225 ELSE IF( IMAT.EQ.6 ) THEN 00226 CNDNUM = BADC2 00227 ELSE 00228 CNDNUM = TWO 00229 END IF 00230 * 00231 IF( IMAT.EQ.7 ) THEN 00232 ANORM = SMALL 00233 ELSE IF( IMAT.EQ.8 ) THEN 00234 ANORM = LARGE 00235 ELSE 00236 ANORM = ONE 00237 END IF 00238 * 00239 ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN 00240 * 00241 * xGE: Set parameters to generate a general M x N matrix. 00242 * 00243 * Set TYPE, the type of matrix to be generated. 00244 * 00245 TYPE = 'N' 00246 * 00247 * Set the lower and upper bandwidths. 00248 * 00249 IF( IMAT.EQ.1 ) THEN 00250 KL = 0 00251 KU = 0 00252 ELSE IF( IMAT.EQ.2 ) THEN 00253 KL = 0 00254 KU = MAX( N-1, 0 ) 00255 ELSE IF( IMAT.EQ.3 ) THEN 00256 KL = MAX( M-1, 0 ) 00257 KU = 0 00258 ELSE 00259 KL = MAX( M-1, 0 ) 00260 KU = MAX( N-1, 0 ) 00261 END IF 00262 * 00263 * Set the condition number and norm. 00264 * 00265 IF( IMAT.EQ.8 ) THEN 00266 CNDNUM = BADC1 00267 ELSE IF( IMAT.EQ.9 ) THEN 00268 CNDNUM = BADC2 00269 ELSE 00270 CNDNUM = TWO 00271 END IF 00272 * 00273 IF( IMAT.EQ.10 ) THEN 00274 ANORM = SMALL 00275 ELSE IF( IMAT.EQ.11 ) THEN 00276 ANORM = LARGE 00277 ELSE 00278 ANORM = ONE 00279 END IF 00280 * 00281 ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN 00282 * 00283 * xGB: Set parameters to generate a general banded matrix. 00284 * 00285 * Set TYPE, the type of matrix to be generated. 00286 * 00287 TYPE = 'N' 00288 * 00289 * Set the condition number and norm. 00290 * 00291 IF( IMAT.EQ.5 ) THEN 00292 CNDNUM = BADC1 00293 ELSE IF( IMAT.EQ.6 ) THEN 00294 CNDNUM = TENTH*BADC2 00295 ELSE 00296 CNDNUM = TWO 00297 END IF 00298 * 00299 IF( IMAT.EQ.7 ) THEN 00300 ANORM = SMALL 00301 ELSE IF( IMAT.EQ.8 ) THEN 00302 ANORM = LARGE 00303 ELSE 00304 ANORM = ONE 00305 END IF 00306 * 00307 ELSE IF( LSAMEN( 2, C2, 'GT' ) ) THEN 00308 * 00309 * xGT: Set parameters to generate a general tridiagonal matrix. 00310 * 00311 * Set TYPE, the type of matrix to be generated. 00312 * 00313 TYPE = 'N' 00314 * 00315 * Set the lower and upper bandwidths. 00316 * 00317 IF( IMAT.EQ.1 ) THEN 00318 KL = 0 00319 ELSE 00320 KL = 1 00321 END IF 00322 KU = KL 00323 * 00324 * Set the condition number and norm. 00325 * 00326 IF( IMAT.EQ.3 ) THEN 00327 CNDNUM = BADC1 00328 ELSE IF( IMAT.EQ.4 ) THEN 00329 CNDNUM = BADC2 00330 ELSE 00331 CNDNUM = TWO 00332 END IF 00333 * 00334 IF( IMAT.EQ.5 .OR. IMAT.EQ.11 ) THEN 00335 ANORM = SMALL 00336 ELSE IF( IMAT.EQ.6 .OR. IMAT.EQ.12 ) THEN 00337 ANORM = LARGE 00338 ELSE 00339 ANORM = ONE 00340 END IF 00341 * 00342 ELSE IF( LSAMEN( 2, C2, 'PO' ) .OR. LSAMEN( 2, C2, 'PP' ) .OR. 00343 $ LSAMEN( 2, C2, 'HE' ) .OR. LSAMEN( 2, C2, 'HP' ) .OR. 00344 $ LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) ) THEN 00345 * 00346 * xPO, xPP, xHE, xHP, xSY, xSP: Set parameters to generate a 00347 * symmetric or Hermitian matrix. 00348 * 00349 * Set TYPE, the type of matrix to be generated. 00350 * 00351 TYPE = C2( 1: 1 ) 00352 * 00353 * Set the lower and upper bandwidths. 00354 * 00355 IF( IMAT.EQ.1 ) THEN 00356 KL = 0 00357 ELSE 00358 KL = MAX( N-1, 0 ) 00359 END IF 00360 KU = KL 00361 * 00362 * Set the condition number and norm. 00363 * 00364 IF( IMAT.EQ.6 ) THEN 00365 CNDNUM = BADC1 00366 ELSE IF( IMAT.EQ.7 ) THEN 00367 CNDNUM = BADC2 00368 ELSE 00369 CNDNUM = TWO 00370 END IF 00371 * 00372 IF( IMAT.EQ.8 ) THEN 00373 ANORM = SMALL 00374 ELSE IF( IMAT.EQ.9 ) THEN 00375 ANORM = LARGE 00376 ELSE 00377 ANORM = ONE 00378 END IF 00379 * 00380 ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN 00381 * 00382 * xPB: Set parameters to generate a symmetric band matrix. 00383 * 00384 * Set TYPE, the type of matrix to be generated. 00385 * 00386 TYPE = 'P' 00387 * 00388 * Set the norm and condition number. 00389 * 00390 IF( IMAT.EQ.5 ) THEN 00391 CNDNUM = BADC1 00392 ELSE IF( IMAT.EQ.6 ) THEN 00393 CNDNUM = BADC2 00394 ELSE 00395 CNDNUM = TWO 00396 END IF 00397 * 00398 IF( IMAT.EQ.7 ) THEN 00399 ANORM = SMALL 00400 ELSE IF( IMAT.EQ.8 ) THEN 00401 ANORM = LARGE 00402 ELSE 00403 ANORM = ONE 00404 END IF 00405 * 00406 ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN 00407 * 00408 * xPT: Set parameters to generate a symmetric positive definite 00409 * tridiagonal matrix. 00410 * 00411 TYPE = 'P' 00412 IF( IMAT.EQ.1 ) THEN 00413 KL = 0 00414 ELSE 00415 KL = 1 00416 END IF 00417 KU = KL 00418 * 00419 * Set the condition number and norm. 00420 * 00421 IF( IMAT.EQ.3 ) THEN 00422 CNDNUM = BADC1 00423 ELSE IF( IMAT.EQ.4 ) THEN 00424 CNDNUM = BADC2 00425 ELSE 00426 CNDNUM = TWO 00427 END IF 00428 * 00429 IF( IMAT.EQ.5 .OR. IMAT.EQ.11 ) THEN 00430 ANORM = SMALL 00431 ELSE IF( IMAT.EQ.6 .OR. IMAT.EQ.12 ) THEN 00432 ANORM = LARGE 00433 ELSE 00434 ANORM = ONE 00435 END IF 00436 * 00437 ELSE IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) ) THEN 00438 * 00439 * xTR, xTP: Set parameters to generate a triangular matrix 00440 * 00441 * Set TYPE, the type of matrix to be generated. 00442 * 00443 TYPE = 'N' 00444 * 00445 * Set the lower and upper bandwidths. 00446 * 00447 MAT = ABS( IMAT ) 00448 IF( MAT.EQ.1 .OR. MAT.EQ.7 ) THEN 00449 KL = 0 00450 KU = 0 00451 ELSE IF( IMAT.LT.0 ) THEN 00452 KL = MAX( N-1, 0 ) 00453 KU = 0 00454 ELSE 00455 KL = 0 00456 KU = MAX( N-1, 0 ) 00457 END IF 00458 * 00459 * Set the condition number and norm. 00460 * 00461 IF( MAT.EQ.3 .OR. MAT.EQ.9 ) THEN 00462 CNDNUM = BADC1 00463 ELSE IF( MAT.EQ.4 .OR. MAT.EQ.10 ) THEN 00464 CNDNUM = BADC2 00465 ELSE 00466 CNDNUM = TWO 00467 END IF 00468 * 00469 IF( MAT.EQ.5 ) THEN 00470 ANORM = SMALL 00471 ELSE IF( MAT.EQ.6 ) THEN 00472 ANORM = LARGE 00473 ELSE 00474 ANORM = ONE 00475 END IF 00476 * 00477 ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN 00478 * 00479 * xTB: Set parameters to generate a triangular band matrix. 00480 * 00481 * Set TYPE, the type of matrix to be generated. 00482 * 00483 TYPE = 'N' 00484 * 00485 * Set the norm and condition number. 00486 * 00487 IF( IMAT.EQ.2 .OR. IMAT.EQ.8 ) THEN 00488 CNDNUM = BADC1 00489 ELSE IF( IMAT.EQ.3 .OR. IMAT.EQ.9 ) THEN 00490 CNDNUM = BADC2 00491 ELSE 00492 CNDNUM = TWO 00493 END IF 00494 * 00495 IF( IMAT.EQ.4 ) THEN 00496 ANORM = SMALL 00497 ELSE IF( IMAT.EQ.5 ) THEN 00498 ANORM = LARGE 00499 ELSE 00500 ANORM = ONE 00501 END IF 00502 END IF 00503 IF( N.LE.1 ) 00504 $ CNDNUM = ONE 00505 * 00506 RETURN 00507 * 00508 * End of CLATB4 00509 * 00510 END