annotate ext/clapack/src/ilaenv.c @ 483:fdaa63607c15

Untabify, indent, tidy
author Chris Cannam <cannam@all-day-breakfast.com>
date Fri, 31 May 2019 11:54:32 +0100
parents 68a41957200e
children
rev   line source
c@427 1 #include "f2c.h"
c@427 2 #include "string.h"
c@427 3
c@427 4 /* Table of constant values */
c@427 5
c@428 6 static integer c__0 = 0;
c@427 7 static real c_b163 = 0.f;
c@427 8 static real c_b164 = 1.f;
c@428 9 static integer c__1 = 1;
c@427 10
c@427 11 integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1,
c@427 12 integer *n2, integer *n3, integer *n4)
c@427 13 {
c@427 14 /* System generated locals */
c@427 15 integer ret_val;
c@427 16
c@427 17 /* Builtin functions */
c@427 18 /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen);
c@427 19 integer s_cmp(char *, char *, ftnlen, ftnlen);
c@427 20
c@427 21 /* Local variables */
c@428 22 static integer i__;
c@428 23 static char c1[1], c2[2], c3[3], c4[2];
c@428 24 static integer ic, nb, iz, nx;
c@428 25 static logical cname;
c@428 26 static integer nbmin;
c@428 27 static logical sname;
c@427 28 extern integer ieeeck_(integer *, real *, real *);
c@428 29 static char subnam[6];
c@427 30 extern integer iparmq_(integer *, char *, char *, integer *, integer *,
c@427 31 integer *, integer *);
c@427 32
c@427 33 ftnlen name_len, opts_len;
c@427 34
c@427 35 name_len = strlen (name__);
c@427 36 opts_len = strlen (opts);
c@427 37
c@428 38
c@428 39 /* -- LAPACK auxiliary routine (version 3.1.1) -- */
c@427 40 /* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
c@427 41 /* January 2007 */
c@427 42
c@427 43 /* .. Scalar Arguments .. */
c@427 44 /* .. */
c@427 45
c@427 46 /* Purpose */
c@427 47 /* ======= */
c@427 48
c@427 49 /* ILAENV is called from the LAPACK routines to choose problem-dependent */
c@427 50 /* parameters for the local environment. See ISPEC for a description of */
c@427 51 /* the parameters. */
c@427 52
c@427 53 /* ILAENV returns an INTEGER */
c@427 54 /* if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC */
c@427 55 /* if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. */
c@427 56
c@427 57 /* This version provides a set of parameters which should give good, */
c@427 58 /* but not optimal, performance on many of the currently available */
c@427 59 /* computers. Users are encouraged to modify this subroutine to set */
c@427 60 /* the tuning parameters for their particular machine using the option */
c@427 61 /* and problem size information in the arguments. */
c@427 62
c@427 63 /* This routine will not function correctly if it is converted to all */
c@427 64 /* lower case. Converting it to all upper case is allowed. */
c@427 65
c@427 66 /* Arguments */
c@427 67 /* ========= */
c@427 68
c@427 69 /* ISPEC (input) INTEGER */
c@427 70 /* Specifies the parameter to be returned as the value of */
c@427 71 /* ILAENV. */
c@427 72 /* = 1: the optimal blocksize; if this value is 1, an unblocked */
c@427 73 /* algorithm will give the best performance. */
c@427 74 /* = 2: the minimum block size for which the block routine */
c@427 75 /* should be used; if the usable block size is less than */
c@427 76 /* this value, an unblocked routine should be used. */
c@427 77 /* = 3: the crossover point (in a block routine, for N less */
c@427 78 /* than this value, an unblocked routine should be used) */
c@427 79 /* = 4: the number of shifts, used in the nonsymmetric */
c@427 80 /* eigenvalue routines (DEPRECATED) */
c@427 81 /* = 5: the minimum column dimension for blocking to be used; */
c@427 82 /* rectangular blocks must have dimension at least k by m, */
c@427 83 /* where k is given by ILAENV(2,...) and m by ILAENV(5,...) */
c@427 84 /* = 6: the crossover point for the SVD (when reducing an m by n */
c@427 85 /* matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds */
c@427 86 /* this value, a QR factorization is used first to reduce */
c@427 87 /* the matrix to a triangular form.) */
c@427 88 /* = 7: the number of processors */
c@427 89 /* = 8: the crossover point for the multishift QR method */
c@427 90 /* for nonsymmetric eigenvalue problems (DEPRECATED) */
c@427 91 /* = 9: maximum size of the subproblems at the bottom of the */
c@427 92 /* computation tree in the divide-and-conquer algorithm */
c@427 93 /* (used by xGELSD and xGESDD) */
c@427 94 /* =10: ieee NaN arithmetic can be trusted not to trap */
c@427 95 /* =11: infinity arithmetic can be trusted not to trap */
c@427 96 /* 12 <= ISPEC <= 16: */
c@427 97 /* xHSEQR or one of its subroutines, */
c@427 98 /* see IPARMQ for detailed explanation */
c@427 99
c@427 100 /* NAME (input) CHARACTER*(*) */
c@427 101 /* The name of the calling subroutine, in either upper case or */
c@427 102 /* lower case. */
c@427 103
c@427 104 /* OPTS (input) CHARACTER*(*) */
c@427 105 /* The character options to the subroutine NAME, concatenated */
c@427 106 /* into a single character string. For example, UPLO = 'U', */
c@427 107 /* TRANS = 'T', and DIAG = 'N' for a triangular routine would */
c@427 108 /* be specified as OPTS = 'UTN'. */
c@427 109
c@427 110 /* N1 (input) INTEGER */
c@427 111 /* N2 (input) INTEGER */
c@427 112 /* N3 (input) INTEGER */
c@427 113 /* N4 (input) INTEGER */
c@427 114 /* Problem dimensions for the subroutine NAME; these may not all */
c@427 115 /* be required. */
c@427 116
c@427 117 /* Further Details */
c@427 118 /* =============== */
c@427 119
c@427 120 /* The following conventions have been used when calling ILAENV from the */
c@427 121 /* LAPACK routines: */
c@427 122 /* 1) OPTS is a concatenation of all of the character options to */
c@427 123 /* subroutine NAME, in the same order that they appear in the */
c@427 124 /* argument list for NAME, even if they are not used in determining */
c@427 125 /* the value of the parameter specified by ISPEC. */
c@427 126 /* 2) The problem dimensions N1, N2, N3, N4 are specified in the order */
c@427 127 /* that they appear in the argument list for NAME. N1 is used */
c@427 128 /* first, N2 second, and so on, and unused problem dimensions are */
c@427 129 /* passed a value of -1. */
c@427 130 /* 3) The parameter value returned by ILAENV is checked for validity in */
c@427 131 /* the calling subroutine. For example, ILAENV is used to retrieve */
c@427 132 /* the optimal blocksize for STRTRI as follows: */
c@427 133
c@427 134 /* NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) */
c@427 135 /* IF( NB.LE.1 ) NB = MAX( 1, N ) */
c@427 136
c@427 137 /* ===================================================================== */
c@427 138
c@427 139 /* .. Local Scalars .. */
c@427 140 /* .. */
c@427 141 /* .. Intrinsic Functions .. */
c@427 142 /* .. */
c@427 143 /* .. External Functions .. */
c@427 144 /* .. */
c@427 145 /* .. Executable Statements .. */
c@427 146
c@427 147 switch (*ispec) {
c@427 148 case 1: goto L10;
c@427 149 case 2: goto L10;
c@427 150 case 3: goto L10;
c@427 151 case 4: goto L80;
c@427 152 case 5: goto L90;
c@427 153 case 6: goto L100;
c@427 154 case 7: goto L110;
c@427 155 case 8: goto L120;
c@427 156 case 9: goto L130;
c@427 157 case 10: goto L140;
c@427 158 case 11: goto L150;
c@427 159 case 12: goto L160;
c@427 160 case 13: goto L160;
c@427 161 case 14: goto L160;
c@427 162 case 15: goto L160;
c@427 163 case 16: goto L160;
c@427 164 }
c@427 165
c@427 166 /* Invalid value for ISPEC */
c@427 167
c@427 168 ret_val = -1;
c@427 169 return ret_val;
c@427 170
c@427 171 L10:
c@427 172
c@427 173 /* Convert NAME to upper case if the first character is lower case. */
c@427 174
c@427 175 ret_val = 1;
c@427 176 s_copy(subnam, name__, (ftnlen)6, name_len);
c@427 177 ic = *(unsigned char *)subnam;
c@427 178 iz = 'Z';
c@427 179 if (iz == 90 || iz == 122) {
c@427 180
c@427 181 /* ASCII character set */
c@427 182
c@427 183 if (ic >= 97 && ic <= 122) {
c@427 184 *(unsigned char *)subnam = (char) (ic - 32);
c@427 185 for (i__ = 2; i__ <= 6; ++i__) {
c@427 186 ic = *(unsigned char *)&subnam[i__ - 1];
c@427 187 if (ic >= 97 && ic <= 122) {
c@427 188 *(unsigned char *)&subnam[i__ - 1] = (char) (ic - 32);
c@427 189 }
c@427 190 /* L20: */
c@427 191 }
c@427 192 }
c@427 193
c@427 194 } else if (iz == 233 || iz == 169) {
c@427 195
c@427 196 /* EBCDIC character set */
c@427 197
c@427 198 if (ic >= 129 && ic <= 137 || ic >= 145 && ic <= 153 || ic >= 162 &&
c@427 199 ic <= 169) {
c@427 200 *(unsigned char *)subnam = (char) (ic + 64);
c@427 201 for (i__ = 2; i__ <= 6; ++i__) {
c@427 202 ic = *(unsigned char *)&subnam[i__ - 1];
c@427 203 if (ic >= 129 && ic <= 137 || ic >= 145 && ic <= 153 || ic >=
c@427 204 162 && ic <= 169) {
c@427 205 *(unsigned char *)&subnam[i__ - 1] = (char) (ic + 64);
c@427 206 }
c@427 207 /* L30: */
c@427 208 }
c@427 209 }
c@427 210
c@427 211 } else if (iz == 218 || iz == 250) {
c@427 212
c@427 213 /* Prime machines: ASCII+128 */
c@427 214
c@427 215 if (ic >= 225 && ic <= 250) {
c@427 216 *(unsigned char *)subnam = (char) (ic - 32);
c@427 217 for (i__ = 2; i__ <= 6; ++i__) {
c@427 218 ic = *(unsigned char *)&subnam[i__ - 1];
c@427 219 if (ic >= 225 && ic <= 250) {
c@427 220 *(unsigned char *)&subnam[i__ - 1] = (char) (ic - 32);
c@427 221 }
c@427 222 /* L40: */
c@427 223 }
c@427 224 }
c@427 225 }
c@427 226
c@427 227 *(unsigned char *)c1 = *(unsigned char *)subnam;
c@427 228 sname = *(unsigned char *)c1 == 'S' || *(unsigned char *)c1 == 'D';
c@427 229 cname = *(unsigned char *)c1 == 'C' || *(unsigned char *)c1 == 'Z';
c@427 230 if (! (cname || sname)) {
c@427 231 return ret_val;
c@427 232 }
c@428 233 s_copy(c2, subnam + 1, (ftnlen)2, (ftnlen)2);
c@428 234 s_copy(c3, subnam + 3, (ftnlen)3, (ftnlen)3);
c@428 235 s_copy(c4, c3 + 1, (ftnlen)2, (ftnlen)2);
c@427 236
c@427 237 switch (*ispec) {
c@427 238 case 1: goto L50;
c@427 239 case 2: goto L60;
c@427 240 case 3: goto L70;
c@427 241 }
c@427 242
c@427 243 L50:
c@427 244
c@427 245 /* ISPEC = 1: block size */
c@427 246
c@427 247 /* In these examples, separate code is provided for setting NB for */
c@427 248 /* real and complex. We assume that NB will take the same value in */
c@427 249 /* single or double precision. */
c@427 250
c@427 251 nb = 1;
c@427 252
c@428 253 if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) {
c@428 254 if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
c@427 255 if (sname) {
c@427 256 nb = 64;
c@427 257 } else {
c@427 258 nb = 64;
c@427 259 }
c@428 260 } else if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3,
c@428 261 "RQF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)
c@428 262 3, (ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3)
c@427 263 == 0) {
c@427 264 if (sname) {
c@427 265 nb = 32;
c@427 266 } else {
c@427 267 nb = 32;
c@427 268 }
c@428 269 } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 270 if (sname) {
c@427 271 nb = 32;
c@427 272 } else {
c@427 273 nb = 32;
c@427 274 }
c@428 275 } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 276 if (sname) {
c@427 277 nb = 32;
c@427 278 } else {
c@427 279 nb = 32;
c@427 280 }
c@428 281 } else if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) {
c@427 282 if (sname) {
c@427 283 nb = 64;
c@427 284 } else {
c@427 285 nb = 64;
c@427 286 }
c@427 287 }
c@428 288 } else if (s_cmp(c2, "PO", (ftnlen)2, (ftnlen)2) == 0) {
c@428 289 if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
c@427 290 if (sname) {
c@427 291 nb = 64;
c@427 292 } else {
c@427 293 nb = 64;
c@427 294 }
c@427 295 }
c@428 296 } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) {
c@428 297 if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
c@427 298 if (sname) {
c@427 299 nb = 64;
c@427 300 } else {
c@427 301 nb = 64;
c@427 302 }
c@428 303 } else if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 304 nb = 32;
c@428 305 } else if (sname && s_cmp(c3, "GST", (ftnlen)3, (ftnlen)3) == 0) {
c@427 306 nb = 64;
c@427 307 }
c@428 308 } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) {
c@428 309 if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
c@427 310 nb = 64;
c@428 311 } else if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 312 nb = 32;
c@428 313 } else if (s_cmp(c3, "GST", (ftnlen)3, (ftnlen)3) == 0) {
c@427 314 nb = 64;
c@427 315 }
c@428 316 } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) {
c@427 317 if (*(unsigned char *)c3 == 'G') {
c@428 318 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 319 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 320 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 321 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 322 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 323 ftnlen)2, (ftnlen)2) == 0) {
c@427 324 nb = 32;
c@427 325 }
c@427 326 } else if (*(unsigned char *)c3 == 'M') {
c@428 327 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 328 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 329 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 330 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 331 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 332 ftnlen)2, (ftnlen)2) == 0) {
c@427 333 nb = 32;
c@427 334 }
c@427 335 }
c@428 336 } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) {
c@427 337 if (*(unsigned char *)c3 == 'G') {
c@428 338 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 339 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 340 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 341 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 342 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 343 ftnlen)2, (ftnlen)2) == 0) {
c@427 344 nb = 32;
c@427 345 }
c@427 346 } else if (*(unsigned char *)c3 == 'M') {
c@428 347 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 348 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 349 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 350 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 351 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 352 ftnlen)2, (ftnlen)2) == 0) {
c@427 353 nb = 32;
c@427 354 }
c@427 355 }
c@428 356 } else if (s_cmp(c2, "GB", (ftnlen)2, (ftnlen)2) == 0) {
c@428 357 if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
c@427 358 if (sname) {
c@427 359 if (*n4 <= 64) {
c@427 360 nb = 1;
c@427 361 } else {
c@427 362 nb = 32;
c@427 363 }
c@427 364 } else {
c@427 365 if (*n4 <= 64) {
c@427 366 nb = 1;
c@427 367 } else {
c@427 368 nb = 32;
c@427 369 }
c@427 370 }
c@427 371 }
c@428 372 } else if (s_cmp(c2, "PB", (ftnlen)2, (ftnlen)2) == 0) {
c@428 373 if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
c@427 374 if (sname) {
c@427 375 if (*n2 <= 64) {
c@427 376 nb = 1;
c@427 377 } else {
c@427 378 nb = 32;
c@427 379 }
c@427 380 } else {
c@427 381 if (*n2 <= 64) {
c@427 382 nb = 1;
c@427 383 } else {
c@427 384 nb = 32;
c@427 385 }
c@427 386 }
c@427 387 }
c@428 388 } else if (s_cmp(c2, "TR", (ftnlen)2, (ftnlen)2) == 0) {
c@428 389 if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) {
c@427 390 if (sname) {
c@427 391 nb = 64;
c@427 392 } else {
c@427 393 nb = 64;
c@427 394 }
c@427 395 }
c@428 396 } else if (s_cmp(c2, "LA", (ftnlen)2, (ftnlen)2) == 0) {
c@428 397 if (s_cmp(c3, "UUM", (ftnlen)3, (ftnlen)3) == 0) {
c@427 398 if (sname) {
c@427 399 nb = 64;
c@427 400 } else {
c@427 401 nb = 64;
c@427 402 }
c@427 403 }
c@428 404 } else if (sname && s_cmp(c2, "ST", (ftnlen)2, (ftnlen)2) == 0) {
c@428 405 if (s_cmp(c3, "EBZ", (ftnlen)3, (ftnlen)3) == 0) {
c@427 406 nb = 1;
c@427 407 }
c@427 408 }
c@427 409 ret_val = nb;
c@427 410 return ret_val;
c@427 411
c@427 412 L60:
c@427 413
c@427 414 /* ISPEC = 2: minimum block size */
c@427 415
c@427 416 nbmin = 2;
c@428 417 if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) {
c@428 418 if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "RQF", (
c@428 419 ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)3, (
c@428 420 ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) == 0)
c@427 421 {
c@427 422 if (sname) {
c@427 423 nbmin = 2;
c@427 424 } else {
c@427 425 nbmin = 2;
c@427 426 }
c@428 427 } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 428 if (sname) {
c@427 429 nbmin = 2;
c@427 430 } else {
c@427 431 nbmin = 2;
c@427 432 }
c@428 433 } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 434 if (sname) {
c@427 435 nbmin = 2;
c@427 436 } else {
c@427 437 nbmin = 2;
c@427 438 }
c@428 439 } else if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) {
c@427 440 if (sname) {
c@427 441 nbmin = 2;
c@427 442 } else {
c@427 443 nbmin = 2;
c@427 444 }
c@427 445 }
c@428 446 } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) {
c@428 447 if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) {
c@427 448 if (sname) {
c@427 449 nbmin = 8;
c@427 450 } else {
c@427 451 nbmin = 8;
c@427 452 }
c@428 453 } else if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 454 nbmin = 2;
c@427 455 }
c@428 456 } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) {
c@428 457 if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 458 nbmin = 2;
c@427 459 }
c@428 460 } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) {
c@427 461 if (*(unsigned char *)c3 == 'G') {
c@428 462 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 463 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 464 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 465 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 466 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 467 ftnlen)2, (ftnlen)2) == 0) {
c@427 468 nbmin = 2;
c@427 469 }
c@427 470 } else if (*(unsigned char *)c3 == 'M') {
c@428 471 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 472 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 473 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 474 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 475 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 476 ftnlen)2, (ftnlen)2) == 0) {
c@427 477 nbmin = 2;
c@427 478 }
c@427 479 }
c@428 480 } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) {
c@427 481 if (*(unsigned char *)c3 == 'G') {
c@428 482 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 483 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 484 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 485 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 486 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 487 ftnlen)2, (ftnlen)2) == 0) {
c@427 488 nbmin = 2;
c@427 489 }
c@427 490 } else if (*(unsigned char *)c3 == 'M') {
c@428 491 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 492 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 493 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 494 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 495 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 496 ftnlen)2, (ftnlen)2) == 0) {
c@427 497 nbmin = 2;
c@427 498 }
c@427 499 }
c@427 500 }
c@427 501 ret_val = nbmin;
c@427 502 return ret_val;
c@427 503
c@427 504 L70:
c@427 505
c@427 506 /* ISPEC = 3: crossover point */
c@427 507
c@427 508 nx = 0;
c@428 509 if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) {
c@428 510 if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "RQF", (
c@428 511 ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)3, (
c@428 512 ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) == 0)
c@427 513 {
c@427 514 if (sname) {
c@427 515 nx = 128;
c@427 516 } else {
c@427 517 nx = 128;
c@427 518 }
c@428 519 } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 520 if (sname) {
c@427 521 nx = 128;
c@427 522 } else {
c@427 523 nx = 128;
c@427 524 }
c@428 525 } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 526 if (sname) {
c@427 527 nx = 128;
c@427 528 } else {
c@427 529 nx = 128;
c@427 530 }
c@427 531 }
c@428 532 } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) {
c@428 533 if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 534 nx = 32;
c@427 535 }
c@428 536 } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) {
c@428 537 if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) {
c@427 538 nx = 32;
c@427 539 }
c@428 540 } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) {
c@427 541 if (*(unsigned char *)c3 == 'G') {
c@428 542 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 543 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 544 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 545 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 546 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 547 ftnlen)2, (ftnlen)2) == 0) {
c@427 548 nx = 128;
c@427 549 }
c@427 550 }
c@428 551 } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) {
c@427 552 if (*(unsigned char *)c3 == 'G') {
c@428 553 if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ",
c@428 554 (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, (
c@428 555 ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) ==
c@428 556 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(
c@428 557 c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", (
c@428 558 ftnlen)2, (ftnlen)2) == 0) {
c@427 559 nx = 128;
c@427 560 }
c@427 561 }
c@427 562 }
c@427 563 ret_val = nx;
c@427 564 return ret_val;
c@427 565
c@427 566 L80:
c@427 567
c@427 568 /* ISPEC = 4: number of shifts (used by xHSEQR) */
c@427 569
c@427 570 ret_val = 6;
c@427 571 return ret_val;
c@427 572
c@427 573 L90:
c@427 574
c@427 575 /* ISPEC = 5: minimum column dimension (not used) */
c@427 576
c@427 577 ret_val = 2;
c@427 578 return ret_val;
c@427 579
c@427 580 L100:
c@427 581
c@427 582 /* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) */
c@427 583
c@427 584 ret_val = (integer) ((real) min(*n1,*n2) * 1.6f);
c@427 585 return ret_val;
c@427 586
c@427 587 L110:
c@427 588
c@427 589 /* ISPEC = 7: number of processors (not used) */
c@427 590
c@427 591 ret_val = 1;
c@427 592 return ret_val;
c@427 593
c@427 594 L120:
c@427 595
c@427 596 /* ISPEC = 8: crossover point for multishift (used by xHSEQR) */
c@427 597
c@427 598 ret_val = 50;
c@427 599 return ret_val;
c@427 600
c@427 601 L130:
c@427 602
c@427 603 /* ISPEC = 9: maximum size of the subproblems at the bottom of the */
c@427 604 /* computation tree in the divide-and-conquer algorithm */
c@427 605 /* (used by xGELSD and xGESDD) */
c@427 606
c@427 607 ret_val = 25;
c@427 608 return ret_val;
c@427 609
c@427 610 L140:
c@427 611
c@427 612 /* ISPEC = 10: ieee NaN arithmetic can be trusted not to trap */
c@427 613
c@427 614 /* ILAENV = 0 */
c@427 615 ret_val = 1;
c@427 616 if (ret_val == 1) {
c@428 617 ret_val = ieeeck_(&c__0, &c_b163, &c_b164);
c@427 618 }
c@427 619 return ret_val;
c@427 620
c@427 621 L150:
c@427 622
c@427 623 /* ISPEC = 11: infinity arithmetic can be trusted not to trap */
c@427 624
c@427 625 /* ILAENV = 0 */
c@427 626 ret_val = 1;
c@427 627 if (ret_val == 1) {
c@428 628 ret_val = ieeeck_(&c__1, &c_b163, &c_b164);
c@427 629 }
c@427 630 return ret_val;
c@427 631
c@427 632 L160:
c@427 633
c@427 634 /* 12 <= ISPEC <= 16: xHSEQR or one of its subroutines. */
c@427 635
c@427 636 ret_val = iparmq_(ispec, name__, opts, n1, n2, n3, n4)
c@427 637 ;
c@427 638 return ret_val;
c@427 639
c@427 640 /* End of ILAENV */
c@427 641
c@427 642 } /* ilaenv_ */