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