c@427: #include "f2c.h" c@427: #include "string.h" c@427: c@427: /* Table of constant values */ c@427: c@428: static integer c__0 = 0; c@427: static real c_b163 = 0.f; c@427: static real c_b164 = 1.f; c@428: static integer c__1 = 1; c@427: c@427: integer ilaenv_(integer *ispec, char *name__, char *opts, integer *n1, c@427: integer *n2, integer *n3, integer *n4) c@427: { c@427: /* System generated locals */ c@427: integer ret_val; c@427: c@427: /* Builtin functions */ c@427: /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen); c@427: integer s_cmp(char *, char *, ftnlen, ftnlen); c@427: c@427: /* Local variables */ c@428: static integer i__; c@428: static char c1[1], c2[2], c3[3], c4[2]; c@428: static integer ic, nb, iz, nx; c@428: static logical cname; c@428: static integer nbmin; c@428: static logical sname; c@427: extern integer ieeeck_(integer *, real *, real *); c@428: static char subnam[6]; c@427: extern integer iparmq_(integer *, char *, char *, integer *, integer *, c@427: integer *, integer *); c@427: c@427: ftnlen name_len, opts_len; c@427: c@427: name_len = strlen (name__); c@427: opts_len = strlen (opts); c@427: c@428: c@428: /* -- LAPACK auxiliary routine (version 3.1.1) -- */ c@427: /* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */ c@427: /* January 2007 */ c@427: c@427: /* .. Scalar Arguments .. */ c@427: /* .. */ c@427: c@427: /* Purpose */ c@427: /* ======= */ c@427: c@427: /* ILAENV is called from the LAPACK routines to choose problem-dependent */ c@427: /* parameters for the local environment. See ISPEC for a description of */ c@427: /* the parameters. */ c@427: c@427: /* ILAENV returns an INTEGER */ c@427: /* if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC */ c@427: /* if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. */ c@427: c@427: /* This version provides a set of parameters which should give good, */ c@427: /* but not optimal, performance on many of the currently available */ c@427: /* computers. Users are encouraged to modify this subroutine to set */ c@427: /* the tuning parameters for their particular machine using the option */ c@427: /* and problem size information in the arguments. */ c@427: c@427: /* This routine will not function correctly if it is converted to all */ c@427: /* lower case. Converting it to all upper case is allowed. */ c@427: c@427: /* Arguments */ c@427: /* ========= */ c@427: c@427: /* ISPEC (input) INTEGER */ c@427: /* Specifies the parameter to be returned as the value of */ c@427: /* ILAENV. */ c@427: /* = 1: the optimal blocksize; if this value is 1, an unblocked */ c@427: /* algorithm will give the best performance. */ c@427: /* = 2: the minimum block size for which the block routine */ c@427: /* should be used; if the usable block size is less than */ c@427: /* this value, an unblocked routine should be used. */ c@427: /* = 3: the crossover point (in a block routine, for N less */ c@427: /* than this value, an unblocked routine should be used) */ c@427: /* = 4: the number of shifts, used in the nonsymmetric */ c@427: /* eigenvalue routines (DEPRECATED) */ c@427: /* = 5: the minimum column dimension for blocking to be used; */ c@427: /* rectangular blocks must have dimension at least k by m, */ c@427: /* where k is given by ILAENV(2,...) and m by ILAENV(5,...) */ c@427: /* = 6: the crossover point for the SVD (when reducing an m by n */ c@427: /* matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds */ c@427: /* this value, a QR factorization is used first to reduce */ c@427: /* the matrix to a triangular form.) */ c@427: /* = 7: the number of processors */ c@427: /* = 8: the crossover point for the multishift QR method */ c@427: /* for nonsymmetric eigenvalue problems (DEPRECATED) */ c@427: /* = 9: maximum size of the subproblems at the bottom of the */ c@427: /* computation tree in the divide-and-conquer algorithm */ c@427: /* (used by xGELSD and xGESDD) */ c@427: /* =10: ieee NaN arithmetic can be trusted not to trap */ c@427: /* =11: infinity arithmetic can be trusted not to trap */ c@427: /* 12 <= ISPEC <= 16: */ c@427: /* xHSEQR or one of its subroutines, */ c@427: /* see IPARMQ for detailed explanation */ c@427: c@427: /* NAME (input) CHARACTER*(*) */ c@427: /* The name of the calling subroutine, in either upper case or */ c@427: /* lower case. */ c@427: c@427: /* OPTS (input) CHARACTER*(*) */ c@427: /* The character options to the subroutine NAME, concatenated */ c@427: /* into a single character string. For example, UPLO = 'U', */ c@427: /* TRANS = 'T', and DIAG = 'N' for a triangular routine would */ c@427: /* be specified as OPTS = 'UTN'. */ c@427: c@427: /* N1 (input) INTEGER */ c@427: /* N2 (input) INTEGER */ c@427: /* N3 (input) INTEGER */ c@427: /* N4 (input) INTEGER */ c@427: /* Problem dimensions for the subroutine NAME; these may not all */ c@427: /* be required. */ c@427: c@427: /* Further Details */ c@427: /* =============== */ c@427: c@427: /* The following conventions have been used when calling ILAENV from the */ c@427: /* LAPACK routines: */ c@427: /* 1) OPTS is a concatenation of all of the character options to */ c@427: /* subroutine NAME, in the same order that they appear in the */ c@427: /* argument list for NAME, even if they are not used in determining */ c@427: /* the value of the parameter specified by ISPEC. */ c@427: /* 2) The problem dimensions N1, N2, N3, N4 are specified in the order */ c@427: /* that they appear in the argument list for NAME. N1 is used */ c@427: /* first, N2 second, and so on, and unused problem dimensions are */ c@427: /* passed a value of -1. */ c@427: /* 3) The parameter value returned by ILAENV is checked for validity in */ c@427: /* the calling subroutine. For example, ILAENV is used to retrieve */ c@427: /* the optimal blocksize for STRTRI as follows: */ c@427: c@427: /* NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) */ c@427: /* IF( NB.LE.1 ) NB = MAX( 1, N ) */ c@427: c@427: /* ===================================================================== */ c@427: c@427: /* .. Local Scalars .. */ c@427: /* .. */ c@427: /* .. Intrinsic Functions .. */ c@427: /* .. */ c@427: /* .. External Functions .. */ c@427: /* .. */ c@427: /* .. Executable Statements .. */ c@427: c@427: switch (*ispec) { c@427: case 1: goto L10; c@427: case 2: goto L10; c@427: case 3: goto L10; c@427: case 4: goto L80; c@427: case 5: goto L90; c@427: case 6: goto L100; c@427: case 7: goto L110; c@427: case 8: goto L120; c@427: case 9: goto L130; c@427: case 10: goto L140; c@427: case 11: goto L150; c@427: case 12: goto L160; c@427: case 13: goto L160; c@427: case 14: goto L160; c@427: case 15: goto L160; c@427: case 16: goto L160; c@427: } c@427: c@427: /* Invalid value for ISPEC */ c@427: c@427: ret_val = -1; c@427: return ret_val; c@427: c@427: L10: c@427: c@427: /* Convert NAME to upper case if the first character is lower case. */ c@427: c@427: ret_val = 1; c@427: s_copy(subnam, name__, (ftnlen)6, name_len); c@427: ic = *(unsigned char *)subnam; c@427: iz = 'Z'; c@427: if (iz == 90 || iz == 122) { c@427: c@427: /* ASCII character set */ c@427: c@427: if (ic >= 97 && ic <= 122) { c@427: *(unsigned char *)subnam = (char) (ic - 32); c@427: for (i__ = 2; i__ <= 6; ++i__) { c@427: ic = *(unsigned char *)&subnam[i__ - 1]; c@427: if (ic >= 97 && ic <= 122) { c@427: *(unsigned char *)&subnam[i__ - 1] = (char) (ic - 32); c@427: } c@427: /* L20: */ c@427: } c@427: } c@427: c@427: } else if (iz == 233 || iz == 169) { c@427: c@427: /* EBCDIC character set */ c@427: c@427: if (ic >= 129 && ic <= 137 || ic >= 145 && ic <= 153 || ic >= 162 && c@427: ic <= 169) { c@427: *(unsigned char *)subnam = (char) (ic + 64); c@427: for (i__ = 2; i__ <= 6; ++i__) { c@427: ic = *(unsigned char *)&subnam[i__ - 1]; c@427: if (ic >= 129 && ic <= 137 || ic >= 145 && ic <= 153 || ic >= c@427: 162 && ic <= 169) { c@427: *(unsigned char *)&subnam[i__ - 1] = (char) (ic + 64); c@427: } c@427: /* L30: */ c@427: } c@427: } c@427: c@427: } else if (iz == 218 || iz == 250) { c@427: c@427: /* Prime machines: ASCII+128 */ c@427: c@427: if (ic >= 225 && ic <= 250) { c@427: *(unsigned char *)subnam = (char) (ic - 32); c@427: for (i__ = 2; i__ <= 6; ++i__) { c@427: ic = *(unsigned char *)&subnam[i__ - 1]; c@427: if (ic >= 225 && ic <= 250) { c@427: *(unsigned char *)&subnam[i__ - 1] = (char) (ic - 32); c@427: } c@427: /* L40: */ c@427: } c@427: } c@427: } c@427: c@427: *(unsigned char *)c1 = *(unsigned char *)subnam; c@427: sname = *(unsigned char *)c1 == 'S' || *(unsigned char *)c1 == 'D'; c@427: cname = *(unsigned char *)c1 == 'C' || *(unsigned char *)c1 == 'Z'; c@427: if (! (cname || sname)) { c@427: return ret_val; c@427: } c@428: s_copy(c2, subnam + 1, (ftnlen)2, (ftnlen)2); c@428: s_copy(c3, subnam + 3, (ftnlen)3, (ftnlen)3); c@428: s_copy(c4, c3 + 1, (ftnlen)2, (ftnlen)2); c@427: c@427: switch (*ispec) { c@427: case 1: goto L50; c@427: case 2: goto L60; c@427: case 3: goto L70; c@427: } c@427: c@427: L50: c@427: c@427: /* ISPEC = 1: block size */ c@427: c@427: /* In these examples, separate code is provided for setting NB for */ c@427: /* real and complex. We assume that NB will take the same value in */ c@427: /* single or double precision. */ c@427: c@427: nb = 1; c@427: c@428: if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nb = 64; c@427: } else { c@427: nb = 64; c@427: } c@428: } else if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, c@428: "RQF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen) c@428: 3, (ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) c@427: == 0) { c@427: if (sname) { c@427: nb = 32; c@427: } else { c@427: nb = 32; c@427: } c@428: } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nb = 32; c@427: } else { c@427: nb = 32; c@427: } c@428: } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nb = 32; c@427: } else { c@427: nb = 32; c@427: } c@428: } else if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nb = 64; c@427: } else { c@427: nb = 64; c@427: } c@427: } c@428: } else if (s_cmp(c2, "PO", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nb = 64; c@427: } else { c@427: nb = 64; c@427: } c@427: } c@428: } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nb = 64; c@427: } else { c@427: nb = 64; c@427: } c@428: } else if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: nb = 32; c@428: } else if (sname && s_cmp(c3, "GST", (ftnlen)3, (ftnlen)3) == 0) { c@427: nb = 64; c@427: } c@428: } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { c@427: nb = 64; c@428: } else if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: nb = 32; c@428: } else if (s_cmp(c3, "GST", (ftnlen)3, (ftnlen)3) == 0) { c@427: nb = 64; c@427: } c@428: } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) { c@427: if (*(unsigned char *)c3 == 'G') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nb = 32; c@427: } c@427: } else if (*(unsigned char *)c3 == 'M') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nb = 32; c@427: } c@427: } c@428: } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) { c@427: if (*(unsigned char *)c3 == 'G') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nb = 32; c@427: } c@427: } else if (*(unsigned char *)c3 == 'M') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nb = 32; c@427: } c@427: } c@428: } else if (s_cmp(c2, "GB", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: if (*n4 <= 64) { c@427: nb = 1; c@427: } else { c@427: nb = 32; c@427: } c@427: } else { c@427: if (*n4 <= 64) { c@427: nb = 1; c@427: } else { c@427: nb = 32; c@427: } c@427: } c@427: } c@428: } else if (s_cmp(c2, "PB", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: if (*n2 <= 64) { c@427: nb = 1; c@427: } else { c@427: nb = 32; c@427: } c@427: } else { c@427: if (*n2 <= 64) { c@427: nb = 1; c@427: } else { c@427: nb = 32; c@427: } c@427: } c@427: } c@428: } else if (s_cmp(c2, "TR", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nb = 64; c@427: } else { c@427: nb = 64; c@427: } c@427: } c@428: } else if (s_cmp(c2, "LA", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "UUM", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nb = 64; c@427: } else { c@427: nb = 64; c@427: } c@427: } c@428: } else if (sname && s_cmp(c2, "ST", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "EBZ", (ftnlen)3, (ftnlen)3) == 0) { c@427: nb = 1; c@427: } c@427: } c@427: ret_val = nb; c@427: return ret_val; c@427: c@427: L60: c@427: c@427: /* ISPEC = 2: minimum block size */ c@427: c@427: nbmin = 2; c@428: if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "RQF", ( c@428: ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)3, ( c@428: ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) == 0) c@427: { c@427: if (sname) { c@427: nbmin = 2; c@427: } else { c@427: nbmin = 2; c@427: } c@428: } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nbmin = 2; c@427: } else { c@427: nbmin = 2; c@427: } c@428: } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nbmin = 2; c@427: } else { c@427: nbmin = 2; c@427: } c@428: } else if (s_cmp(c3, "TRI", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nbmin = 2; c@427: } else { c@427: nbmin = 2; c@427: } c@427: } c@428: } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRF", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nbmin = 8; c@427: } else { c@427: nbmin = 8; c@427: } c@428: } else if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: nbmin = 2; c@427: } c@428: } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: nbmin = 2; c@427: } c@428: } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) { c@427: if (*(unsigned char *)c3 == 'G') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nbmin = 2; c@427: } c@427: } else if (*(unsigned char *)c3 == 'M') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nbmin = 2; c@427: } c@427: } c@428: } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) { c@427: if (*(unsigned char *)c3 == 'G') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nbmin = 2; c@427: } c@427: } else if (*(unsigned char *)c3 == 'M') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nbmin = 2; c@427: } c@427: } c@427: } c@427: ret_val = nbmin; c@427: return ret_val; c@427: c@427: L70: c@427: c@427: /* ISPEC = 3: crossover point */ c@427: c@427: nx = 0; c@428: if (s_cmp(c2, "GE", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "QRF", (ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "RQF", ( c@428: ftnlen)3, (ftnlen)3) == 0 || s_cmp(c3, "LQF", (ftnlen)3, ( c@428: ftnlen)3) == 0 || s_cmp(c3, "QLF", (ftnlen)3, (ftnlen)3) == 0) c@427: { c@427: if (sname) { c@427: nx = 128; c@427: } else { c@427: nx = 128; c@427: } c@428: } else if (s_cmp(c3, "HRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nx = 128; c@427: } else { c@427: nx = 128; c@427: } c@428: } else if (s_cmp(c3, "BRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: if (sname) { c@427: nx = 128; c@427: } else { c@427: nx = 128; c@427: } c@427: } c@428: } else if (s_cmp(c2, "SY", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (sname && s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: nx = 32; c@427: } c@428: } else if (cname && s_cmp(c2, "HE", (ftnlen)2, (ftnlen)2) == 0) { c@428: if (s_cmp(c3, "TRD", (ftnlen)3, (ftnlen)3) == 0) { c@427: nx = 32; c@427: } c@428: } else if (sname && s_cmp(c2, "OR", (ftnlen)2, (ftnlen)2) == 0) { c@427: if (*(unsigned char *)c3 == 'G') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nx = 128; c@427: } c@427: } c@428: } else if (cname && s_cmp(c2, "UN", (ftnlen)2, (ftnlen)2) == 0) { c@427: if (*(unsigned char *)c3 == 'G') { c@428: if (s_cmp(c4, "QR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "RQ", c@428: (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "LQ", (ftnlen)2, ( c@428: ftnlen)2) == 0 || s_cmp(c4, "QL", (ftnlen)2, (ftnlen)2) == c@428: 0 || s_cmp(c4, "HR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp( c@428: c4, "TR", (ftnlen)2, (ftnlen)2) == 0 || s_cmp(c4, "BR", ( c@428: ftnlen)2, (ftnlen)2) == 0) { c@427: nx = 128; c@427: } c@427: } c@427: } c@427: ret_val = nx; c@427: return ret_val; c@427: c@427: L80: c@427: c@427: /* ISPEC = 4: number of shifts (used by xHSEQR) */ c@427: c@427: ret_val = 6; c@427: return ret_val; c@427: c@427: L90: c@427: c@427: /* ISPEC = 5: minimum column dimension (not used) */ c@427: c@427: ret_val = 2; c@427: return ret_val; c@427: c@427: L100: c@427: c@427: /* ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) */ c@427: c@427: ret_val = (integer) ((real) min(*n1,*n2) * 1.6f); c@427: return ret_val; c@427: c@427: L110: c@427: c@427: /* ISPEC = 7: number of processors (not used) */ c@427: c@427: ret_val = 1; c@427: return ret_val; c@427: c@427: L120: c@427: c@427: /* ISPEC = 8: crossover point for multishift (used by xHSEQR) */ c@427: c@427: ret_val = 50; c@427: return ret_val; c@427: c@427: L130: c@427: c@427: /* ISPEC = 9: maximum size of the subproblems at the bottom of the */ c@427: /* computation tree in the divide-and-conquer algorithm */ c@427: /* (used by xGELSD and xGESDD) */ c@427: c@427: ret_val = 25; c@427: return ret_val; c@427: c@427: L140: c@427: c@427: /* ISPEC = 10: ieee NaN arithmetic can be trusted not to trap */ c@427: c@427: /* ILAENV = 0 */ c@427: ret_val = 1; c@427: if (ret_val == 1) { c@428: ret_val = ieeeck_(&c__0, &c_b163, &c_b164); c@427: } c@427: return ret_val; c@427: c@427: L150: c@427: c@427: /* ISPEC = 11: infinity arithmetic can be trusted not to trap */ c@427: c@427: /* ILAENV = 0 */ c@427: ret_val = 1; c@427: if (ret_val == 1) { c@428: ret_val = ieeeck_(&c__1, &c_b163, &c_b164); c@427: } c@427: return ret_val; c@427: c@427: L160: c@427: c@427: /* 12 <= ISPEC <= 16: xHSEQR or one of its subroutines. */ c@427: c@427: ret_val = iparmq_(ispec, name__, opts, n1, n2, n3, n4) c@427: ; c@427: return ret_val; c@427: c@427: /* End of ILAENV */ c@427: c@427: } /* ilaenv_ */