kusano 7d535a
/*  -- translated by f2c (version 19940927).
kusano 7d535a
   You must link the resulting object file with the libraries:
kusano 7d535a
	-lf2c -lm   (in that order)
kusano 7d535a
*/
kusano 7d535a
kusano 7d535a
#include <string.h></string.h>
kusano 7d535a
#include "f2c.h"
kusano 7d535a
kusano 7d535a
/* Table of constant values */
kusano 7d535a
kusano 7d535a
static integer c__2 = 2;
kusano 7d535a
kusano 7d535a
/* Subroutine */ int slatb4_(char *path, integer *imat, integer *m, integer *
kusano 7d535a
	n, char *type, integer *kl, integer *ku, real *anorm, integer *mode, 
kusano 7d535a
	real *cndnum, char *dist)
kusano 7d535a
{
kusano 7d535a
    /* Initialized data */
kusano 7d535a
kusano 7d535a
    static logical first = TRUE_;
kusano 7d535a
kusano 7d535a
    /* System generated locals */
kusano 7d535a
    integer i__1;
kusano 7d535a
kusano 7d535a
    /* Builtin functions */
kusano 7d535a
    double sqrt(doublereal);
kusano 7d535a
kusano 7d535a
    /* Local variables */
kusano 7d535a
    static real badc1, badc2, large, small;
kusano 7d535a
    static char c2[2];
kusano 7d535a
    extern /* Subroutine */ int slabad_(real *, real *);
kusano 7d535a
    extern float slamch_(char *);
kusano 7d535a
    extern logical lsamen_(integer *, char *, char *);
kusano 7d535a
    static integer mat;
kusano 7d535a
    static real eps;
kusano 7d535a
kusano 7d535a
kusano 7d535a
/*  -- LAPACK test routine (version 2.0) --   
kusano 7d535a
       Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
kusano 7d535a
       Courant Institute, Argonne National Lab, and Rice University   
kusano 7d535a
       February 29, 1992   
kusano 7d535a
kusano 7d535a
kusano 7d535a
    Purpose   
kusano 7d535a
    =======   
kusano 7d535a
kusano 7d535a
    SLATB4 sets parameters for the matrix generator based on the type of 
kusano 7d535a
  
kusano 7d535a
    matrix to be generated.   
kusano 7d535a
kusano 7d535a
    Arguments   
kusano 7d535a
    =========   
kusano 7d535a
kusano 7d535a
    PATH    (input) CHARACTER*3   
kusano 7d535a
            The LAPACK path name.   
kusano 7d535a
kusano 7d535a
    IMAT    (input) INTEGER   
kusano 7d535a
            An integer key describing which matrix to generate for this   
kusano 7d535a
            path.   
kusano 7d535a
kusano 7d535a
    M       (input) INTEGER   
kusano 7d535a
            The number of rows in the matrix to be generated.   
kusano 7d535a
kusano 7d535a
    N       (input) INTEGER   
kusano 7d535a
            The number of columns in the matrix to be generated.   
kusano 7d535a
kusano 7d535a
    TYPE    (output) CHARACTER*1   
kusano 7d535a
            The type of the matrix to be generated:   
kusano 7d535a
            = 'S':  symmetric matrix   
kusano 7d535a
            = 'P':  symmetric positive (semi)definite matrix   
kusano 7d535a
            = 'N':  nonsymmetric matrix   
kusano 7d535a
kusano 7d535a
    KL      (output) INTEGER   
kusano 7d535a
            The lower band width of the matrix to be generated.   
kusano 7d535a
kusano 7d535a
    KU      (output) INTEGER   
kusano 7d535a
            The upper band width of the matrix to be generated.   
kusano 7d535a
kusano 7d535a
    ANORM   (output) REAL   
kusano 7d535a
            The desired norm of the matrix to be generated.  The diagonal 
kusano 7d535a
  
kusano 7d535a
            matrix of singular values or eigenvalues is scaled by this   
kusano 7d535a
            value.   
kusano 7d535a
kusano 7d535a
    MODE    (output) INTEGER   
kusano 7d535a
            A key indicating how to choose the vector of eigenvalues.   
kusano 7d535a
kusano 7d535a
    CNDNUM  (output) REAL   
kusano 7d535a
            The desired condition number.   
kusano 7d535a
kusano 7d535a
    DIST    (output) CHARACTER*1   
kusano 7d535a
            The type of distribution to be used by the random number   
kusano 7d535a
            generator.   
kusano 7d535a
kusano 7d535a
    ===================================================================== 
kusano 7d535a
  
kusano 7d535a
kusano 7d535a
kusano 7d535a
       Set some constants for use in the subroutine. */
kusano 7d535a
kusano 7d535a
    if (first) {
kusano 7d535a
	first = FALSE_;
kusano 7d535a
	eps = slamch_("Precision");
kusano 7d535a
	badc2 = .1f / eps;
kusano 7d535a
	badc1 = sqrt(badc2);
kusano 7d535a
	small = slamch_("Safe minimum");
kusano 7d535a
	large = 1.f / small;
kusano 7d535a
kusano 7d535a
/*        If it looks like we're on a Cray, take the square root of   
kusano 7d535a
          SMALL and LARGE to avoid overflow and underflow problems. */
kusano 7d535a
kusano 7d535a
	slabad_(&small, &large);
kusano 7d535a
	small = small / eps * .25f;
kusano 7d535a
	large = 1.f / small;
kusano 7d535a
    }
kusano 7d535a
kusano 7d535a
    strncpy(c2, path + 1, 2);
kusano 7d535a
kusano 7d535a
/*     Set some parameters we don't plan to change. */
kusano 7d535a
kusano 7d535a
    *(unsigned char *)dist = 'S';
kusano 7d535a
    *mode = 3;
kusano 7d535a
kusano 7d535a
    if (lsamen_(&c__2, c2, "QR") || lsamen_(&c__2, c2, "LQ") 
kusano 7d535a
	    || lsamen_(&c__2, c2, "QL") || lsamen_(&c__2, c2, "RQ")) {
kusano 7d535a
kusano 7d535a
/*        xQR, xLQ, xQL, xRQ:  Set parameters to generate a general   
kusano 7d535a
                               M x N matrix.   
kusano 7d535a
kusano 7d535a
          Set TYPE, the type of matrix to be generated. */
kusano 7d535a
kusano 7d535a
	*(unsigned char *)type = 'N';
kusano 7d535a
kusano 7d535a
/*        Set the lower and upper bandwidths. */
kusano 7d535a
kusano 7d535a
	if (*imat == 1) {
kusano 7d535a
	    *kl = 0;
kusano 7d535a
	    *ku = 0;
kusano 7d535a
	} else if (*imat == 2) {
kusano 7d535a
	    *kl = 0;
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *n - 1;
kusano 7d535a
	    *ku = max(i__1,0);
kusano 7d535a
	} else if (*imat == 3) {
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *m - 1;
kusano 7d535a
	    *kl = max(i__1,0);
kusano 7d535a
	    *ku = 0;
kusano 7d535a
	} else {
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *m - 1;
kusano 7d535a
	    *kl = max(i__1,0);
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *n - 1;
kusano 7d535a
	    *ku = max(i__1,0);
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
/*        Set the condition number and norm. */
kusano 7d535a
kusano 7d535a
	if (*imat == 5) {
kusano 7d535a
	    *cndnum = badc1;
kusano 7d535a
	} else if (*imat == 6) {
kusano 7d535a
	    *cndnum = badc2;
kusano 7d535a
	} else {
kusano 7d535a
	    *cndnum = 2.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
	if (*imat == 7) {
kusano 7d535a
	    *anorm = small;
kusano 7d535a
	} else if (*imat == 8) {
kusano 7d535a
	    *anorm = large;
kusano 7d535a
	} else {
kusano 7d535a
	    *anorm = 1.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
    } else if (lsamen_(&c__2, c2, "GE")) {
kusano 7d535a
kusano 7d535a
/*        xGE:  Set parameters to generate a general M x N matrix.   
kusano 7d535a
kusano 7d535a
          Set TYPE, the type of matrix to be generated. */
kusano 7d535a
kusano 7d535a
	*(unsigned char *)type = 'N';
kusano 7d535a
kusano 7d535a
/*        Set the lower and upper bandwidths. */
kusano 7d535a
kusano 7d535a
	if (*imat == 1) {
kusano 7d535a
	    *kl = 0;
kusano 7d535a
	    *ku = 0;
kusano 7d535a
	} else if (*imat == 2) {
kusano 7d535a
	    *kl = 0;
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *n - 1;
kusano 7d535a
	    *ku = max(i__1,0);
kusano 7d535a
	} else if (*imat == 3) {
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *m - 1;
kusano 7d535a
	    *kl = max(i__1,0);
kusano 7d535a
	    *ku = 0;
kusano 7d535a
	} else {
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *m - 1;
kusano 7d535a
	    *kl = max(i__1,0);
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *n - 1;
kusano 7d535a
	    *ku = max(i__1,0);
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
/*        Set the condition number and norm. */
kusano 7d535a
kusano 7d535a
	if (*imat == 8) {
kusano 7d535a
	    *cndnum = badc1;
kusano 7d535a
	} else if (*imat == 9) {
kusano 7d535a
	    *cndnum = badc2;
kusano 7d535a
	} else {
kusano 7d535a
	    *cndnum = 2.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
	if (*imat == 10) {
kusano 7d535a
	    *anorm = small;
kusano 7d535a
	} else if (*imat == 11) {
kusano 7d535a
	    *anorm = large;
kusano 7d535a
	} else {
kusano 7d535a
	    *anorm = 1.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
    } else if (lsamen_(&c__2, c2, "GB")) {
kusano 7d535a
kusano 7d535a
/*        xGB:  Set parameters to generate a general banded matrix.   
kusano 7d535a
kusano 7d535a
          Set TYPE, the type of matrix to be generated. */
kusano 7d535a
kusano 7d535a
	*(unsigned char *)type = 'N';
kusano 7d535a
kusano 7d535a
/*        Set the condition number and norm. */
kusano 7d535a
kusano 7d535a
	if (*imat == 5) {
kusano 7d535a
	    *cndnum = badc1;
kusano 7d535a
	} else if (*imat == 6) {
kusano 7d535a
	    *cndnum = badc2 * .1f;
kusano 7d535a
	} else {
kusano 7d535a
	    *cndnum = 2.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
	if (*imat == 7) {
kusano 7d535a
	    *anorm = small;
kusano 7d535a
	} else if (*imat == 8) {
kusano 7d535a
	    *anorm = large;
kusano 7d535a
	} else {
kusano 7d535a
	    *anorm = 1.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
    } else if (lsamen_(&c__2, c2, "GT")) {
kusano 7d535a
kusano 7d535a
/*        xGT:  Set parameters to generate a general tridiagonal matri
kusano 7d535a
x.   
kusano 7d535a
kusano 7d535a
          Set TYPE, the type of matrix to be generated. */
kusano 7d535a
kusano 7d535a
	*(unsigned char *)type = 'N';
kusano 7d535a
kusano 7d535a
/*        Set the lower and upper bandwidths. */
kusano 7d535a
kusano 7d535a
	if (*imat == 1) {
kusano 7d535a
	    *kl = 0;
kusano 7d535a
	} else {
kusano 7d535a
	    *kl = 1;
kusano 7d535a
	}
kusano 7d535a
	*ku = *kl;
kusano 7d535a
kusano 7d535a
/*        Set the condition number and norm. */
kusano 7d535a
kusano 7d535a
	if (*imat == 3) {
kusano 7d535a
	    *cndnum = badc1;
kusano 7d535a
	} else if (*imat == 4) {
kusano 7d535a
	    *cndnum = badc2;
kusano 7d535a
	} else {
kusano 7d535a
	    *cndnum = 2.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
	if (*imat == 5 || *imat == 11) {
kusano 7d535a
	    *anorm = small;
kusano 7d535a
	} else if (*imat == 6 || *imat == 12) {
kusano 7d535a
	    *anorm = large;
kusano 7d535a
	} else {
kusano 7d535a
	    *anorm = 1.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
    } else if (lsamen_(&c__2, c2, "PO") || lsamen_(&c__2, c2, "PP") || lsamen_(&c__2, c2, "SY") || lsamen_(&c__2, c2, 
kusano 7d535a
	    "SP")) {
kusano 7d535a
kusano 7d535a
/*        xPO, xPP, xSY, xSP: Set parameters to generate a   
kusano 7d535a
          symmetric matrix.   
kusano 7d535a
kusano 7d535a
          Set TYPE, the type of matrix to be generated. */
kusano 7d535a
kusano 7d535a
	*(unsigned char *)type = *(unsigned char *)c2;
kusano 7d535a
kusano 7d535a
/*        Set the lower and upper bandwidths. */
kusano 7d535a
kusano 7d535a
	if (*imat == 1) {
kusano 7d535a
	    *kl = 0;
kusano 7d535a
	} else {
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *n - 1;
kusano 7d535a
	    *kl = max(i__1,0);
kusano 7d535a
	}
kusano 7d535a
	*ku = *kl;
kusano 7d535a
kusano 7d535a
/*        Set the condition number and norm. */
kusano 7d535a
kusano 7d535a
	if (*imat == 6) {
kusano 7d535a
	    *cndnum = badc1;
kusano 7d535a
	} else if (*imat == 7) {
kusano 7d535a
	    *cndnum = badc2;
kusano 7d535a
	} else {
kusano 7d535a
	    *cndnum = 2.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
	if (*imat == 8) {
kusano 7d535a
	    *anorm = small;
kusano 7d535a
	} else if (*imat == 9) {
kusano 7d535a
	    *anorm = large;
kusano 7d535a
	} else {
kusano 7d535a
	    *anorm = 1.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
    } else if (lsamen_(&c__2, c2, "PB")) {
kusano 7d535a
kusano 7d535a
/*        xPB:  Set parameters to generate a symmetric band matrix.   
kusano 7d535a
kusano 7d535a
          Set TYPE, the type of matrix to be generated. */
kusano 7d535a
kusano 7d535a
	*(unsigned char *)type = 'P';
kusano 7d535a
kusano 7d535a
/*        Set the norm and condition number. */
kusano 7d535a
kusano 7d535a
	if (*imat == 5) {
kusano 7d535a
	    *cndnum = badc1;
kusano 7d535a
	} else if (*imat == 6) {
kusano 7d535a
	    *cndnum = badc2;
kusano 7d535a
	} else {
kusano 7d535a
	    *cndnum = 2.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
	if (*imat == 7) {
kusano 7d535a
	    *anorm = small;
kusano 7d535a
	} else if (*imat == 8) {
kusano 7d535a
	    *anorm = large;
kusano 7d535a
	} else {
kusano 7d535a
	    *anorm = 1.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
    } else if (lsamen_(&c__2, c2, "PT")) {
kusano 7d535a
kusano 7d535a
/*        xPT:  Set parameters to generate a symmetric positive defini
kusano 7d535a
te   
kusano 7d535a
          tridiagonal matrix. */
kusano 7d535a
kusano 7d535a
	*(unsigned char *)type = 'P';
kusano 7d535a
	if (*imat == 1) {
kusano 7d535a
	    *kl = 0;
kusano 7d535a
	} else {
kusano 7d535a
	    *kl = 1;
kusano 7d535a
	}
kusano 7d535a
	*ku = *kl;
kusano 7d535a
kusano 7d535a
/*        Set the condition number and norm. */
kusano 7d535a
kusano 7d535a
	if (*imat == 3) {
kusano 7d535a
	    *cndnum = badc1;
kusano 7d535a
	} else if (*imat == 4) {
kusano 7d535a
	    *cndnum = badc2;
kusano 7d535a
	} else {
kusano 7d535a
	    *cndnum = 2.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
	if (*imat == 5 || *imat == 11) {
kusano 7d535a
	    *anorm = small;
kusano 7d535a
	} else if (*imat == 6 || *imat == 12) {
kusano 7d535a
	    *anorm = large;
kusano 7d535a
	} else {
kusano 7d535a
	    *anorm = 1.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
    } else if (lsamen_(&c__2, c2, "TR") || lsamen_(&c__2, c2, "TP")) {
kusano 7d535a
kusano 7d535a
/*        xTR, xTP:  Set parameters to generate a triangular matrix   
kusano 7d535a
kusano 7d535a
          Set TYPE, the type of matrix to be generated. */
kusano 7d535a
kusano 7d535a
	*(unsigned char *)type = 'N';
kusano 7d535a
kusano 7d535a
/*        Set the lower and upper bandwidths. */
kusano 7d535a
kusano 7d535a
	mat = abs(*imat);
kusano 7d535a
	if (mat == 1 || mat == 7) {
kusano 7d535a
	    *kl = 0;
kusano 7d535a
	    *ku = 0;
kusano 7d535a
	} else if (*imat < 0) {
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *n - 1;
kusano 7d535a
	    *kl = max(i__1,0);
kusano 7d535a
	    *ku = 0;
kusano 7d535a
	} else {
kusano 7d535a
	    *kl = 0;
kusano 7d535a
/* Computing MAX */
kusano 7d535a
	    i__1 = *n - 1;
kusano 7d535a
	    *ku = max(i__1,0);
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
/*        Set the condition number and norm. */
kusano 7d535a
kusano 7d535a
	if (mat == 3 || mat == 9) {
kusano 7d535a
	    *cndnum = badc1;
kusano 7d535a
	} else if (mat == 4) {
kusano 7d535a
	    *cndnum = badc2;
kusano 7d535a
	} else if (mat == 10) {
kusano 7d535a
	    *cndnum = badc2;
kusano 7d535a
	} else {
kusano 7d535a
	    *cndnum = 2.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
	if (mat == 5) {
kusano 7d535a
	    *anorm = small;
kusano 7d535a
	} else if (mat == 6) {
kusano 7d535a
	    *anorm = large;
kusano 7d535a
	} else {
kusano 7d535a
	    *anorm = 1.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
    } else if (lsamen_(&c__2, c2, "TB")) {
kusano 7d535a
kusano 7d535a
/*        xTB:  Set parameters to generate a triangular band matrix. 
kusano 7d535a
  
kusano 7d535a
kusano 7d535a
          Set TYPE, the type of matrix to be generated. */
kusano 7d535a
kusano 7d535a
	*(unsigned char *)type = 'N';
kusano 7d535a
kusano 7d535a
/*        Set the norm and condition number. */
kusano 7d535a
kusano 7d535a
	if (*imat == 2 || *imat == 8) {
kusano 7d535a
	    *cndnum = badc1;
kusano 7d535a
	} else if (*imat == 3 || *imat == 9) {
kusano 7d535a
	    *cndnum = badc2;
kusano 7d535a
	} else {
kusano 7d535a
	    *cndnum = 2.f;
kusano 7d535a
	}
kusano 7d535a
kusano 7d535a
	if (*imat == 4) {
kusano 7d535a
	    *anorm = small;
kusano 7d535a
	} else if (*imat == 5) {
kusano 7d535a
	    *anorm = large;
kusano 7d535a
	} else {
kusano 7d535a
	    *anorm = 1.f;
kusano 7d535a
	}
kusano 7d535a
    }
kusano 7d535a
    if (*n <= 1) {
kusano 7d535a
	*cndnum = 1.f;
kusano 7d535a
    }
kusano 7d535a
kusano 7d535a
    return 0;
kusano 7d535a
kusano 7d535a
/*     End of SLATB4 */
kusano 7d535a
kusano 7d535a
} /* slatb4_ */
kusano 7d535a