#include "blaswrap.h" /* -- translated by f2c (version 19990503). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "f2c.h" /* Table of constant values */ static integer c__7 = 7; static real c_b5 = 0.f; static real c_b6 = 1.f; doublereal srzt02_(integer *m, integer *n, real *af, integer *lda, real *tau, real *work, integer *lwork) { /* System generated locals */ integer af_dim1, af_offset, i__1, i__2; real ret_val; /* Local variables */ static integer info, i__; static real rwork[1]; extern doublereal slamch_(char *), slange_(char *, integer *, integer *, real *, integer *, real *); extern /* Subroutine */ int xerbla_(char *, integer *), slaset_( char *, integer *, integer *, real *, real *, real *, integer *), sormrz_(char *, char *, integer *, integer *, integer *, integer *, real *, integer *, real *, real *, integer *, real *, integer *, integer *); /* -- LAPACK test routine (version 3.0) -- Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., Courant Institute, Argonne National Lab, and Rice University June 30, 1999 Purpose ======= SRZT02 returns || I - Q'*Q || / ( M * eps) where the matrix Q is defined by the Householder transformations generated by STZRZF. Arguments ========= M (input) INTEGER The number of rows of the matrix AF. N (input) INTEGER The number of columns of the matrix AF. AF (input) REAL array, dimension (LDA,N) The output of STZRZF. LDA (input) INTEGER The leading dimension of the array AF. TAU (input) REAL array, dimension (M) Details of the Householder transformations as returned by STZRZF. WORK (workspace) REAL array, dimension (LWORK) LWORK (input) INTEGER length of WORK array. LWORK >= N*N+N*NB. ===================================================================== Parameter adjustments */ af_dim1 = *lda; af_offset = 1 + af_dim1 * 1; af -= af_offset; --tau; --work; /* Function Body */ ret_val = 0.f; if (*lwork < *n * *n + *n) { xerbla_("SRZT02", &c__7); return ret_val; } /* Quick return if possible */ if (*m <= 0 || *n <= 0) { return ret_val; } /* Q := I */ slaset_("Full", n, n, &c_b5, &c_b6, &work[1], n); /* Q := P(1) * ... * P(m) * Q */ i__1 = *n - *m; i__2 = *lwork - *n * *n; sormrz_("Left", "No transpose", n, n, m, &i__1, &af[af_offset], lda, &tau[ 1], &work[1], n, &work[*n * *n + 1], &i__2, &info); /* Q := P(m) * ... * P(1) * Q */ i__1 = *n - *m; i__2 = *lwork - *n * *n; sormrz_("Left", "Transpose", n, n, m, &i__1, &af[af_offset], lda, &tau[1], &work[1], n, &work[*n * *n + 1], &i__2, &info); /* Q := Q - I */ i__1 = *n; for (i__ = 1; i__ <= i__1; ++i__) { work[(i__ - 1) * *n + i__] += -1.f; /* L10: */ } ret_val = slange_("One-norm", n, n, &work[1], n, rwork) / ( slamch_("Epsilon") * (real) max(*m,*n)); return ret_val; /* End of SRZT02 */ } /* srzt02_ */ .