zhpt21.c
Go to the documentation of this file.
00001 /* zhpt21.f -- translated by f2c (version 20061008).
00002    You must link the resulting object file with libf2c:
00003         on Microsoft Windows system, link with libf2c.lib;
00004         on Linux or Unix systems, link with .../path/to/libf2c.a -lm
00005         or, if you install libf2c.a in a standard place, with -lf2c -lm
00006         -- in that order, at the end of the command line, as in
00007                 cc *.o -lf2c -lm
00008         Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
00009 
00010                 http://www.netlib.org/f2c/libf2c.zip
00011 */
00012 
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015 
00016 /* Table of constant values */
00017 
00018 static doublecomplex c_b1 = {0.,0.};
00019 static doublecomplex c_b2 = {1.,0.};
00020 static integer c__1 = 1;
00021 
00022 /* Subroutine */ int zhpt21_(integer *itype, char *uplo, integer *n, integer *
00023         kband, doublecomplex *ap, doublereal *d__, doublereal *e, 
00024         doublecomplex *u, integer *ldu, doublecomplex *vp, doublecomplex *tau, 
00025          doublecomplex *work, doublereal *rwork, doublereal *result)
00026 {
00027     /* System generated locals */
00028     integer u_dim1, u_offset, i__1, i__2, i__3, i__4, i__5, i__6;
00029     doublereal d__1, d__2;
00030     doublecomplex z__1, z__2, z__3;
00031 
00032     /* Local variables */
00033     integer j, jp, jr, jp1, lap;
00034     doublereal ulp, unfl;
00035     doublecomplex temp;
00036     extern /* Subroutine */ int zhpr_(char *, integer *, doublereal *, 
00037             doublecomplex *, integer *, doublecomplex *), zhpr2_(char 
00038             *, integer *, doublecomplex *, doublecomplex *, integer *, 
00039             doublecomplex *, integer *, doublecomplex *);
00040     extern logical lsame_(char *, char *);
00041     integer iinfo;
00042     doublereal anorm;
00043     extern /* Subroutine */ int zgemm_(char *, char *, integer *, integer *, 
00044             integer *, doublecomplex *, doublecomplex *, integer *, 
00045             doublecomplex *, integer *, doublecomplex *, doublecomplex *, 
00046             integer *);
00047     char cuplo[1];
00048     doublecomplex vsave;
00049     extern /* Double Complex */ VOID zdotc_(doublecomplex *, integer *, 
00050             doublecomplex *, integer *, doublecomplex *, integer *);
00051     logical lower;
00052     doublereal wnorm;
00053     extern /* Subroutine */ int zcopy_(integer *, doublecomplex *, integer *, 
00054             doublecomplex *, integer *), zhpmv_(char *, integer *, 
00055             doublecomplex *, doublecomplex *, doublecomplex *, integer *, 
00056             doublecomplex *, doublecomplex *, integer *), zaxpy_(
00057             integer *, doublecomplex *, doublecomplex *, integer *, 
00058             doublecomplex *, integer *);
00059     extern doublereal dlamch_(char *), zlange_(char *, integer *, 
00060             integer *, doublecomplex *, integer *, doublereal *), 
00061             zlanhp_(char *, char *, integer *, doublecomplex *, doublereal *);
00062     extern /* Subroutine */ int zlacpy_(char *, integer *, integer *, 
00063             doublecomplex *, integer *, doublecomplex *, integer *), 
00064             zlaset_(char *, integer *, integer *, doublecomplex *, 
00065             doublecomplex *, doublecomplex *, integer *), zupmtr_(
00066             char *, char *, char *, integer *, integer *, doublecomplex *, 
00067             doublecomplex *, doublecomplex *, integer *, doublecomplex *, 
00068             integer *);
00069 
00070 
00071 /*  -- LAPACK test routine (version 3.1) -- */
00072 /*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
00073 /*     November 2006 */
00074 
00075 /*     .. Scalar Arguments .. */
00076 /*     .. */
00077 /*     .. Array Arguments .. */
00078 /*     .. */
00079 
00080 /*  Purpose */
00081 /*  ======= */
00082 
00083 /*  ZHPT21  generally checks a decomposition of the form */
00084 
00085 /*          A = U S U* */
00086 
00087 /*  where * means conjugate transpose, A is hermitian, U is */
00088 /*  unitary, and S is diagonal (if KBAND=0) or (real) symmetric */
00089 /*  tridiagonal (if KBAND=1).  If ITYPE=1, then U is represented as */
00090 /*  a dense matrix, otherwise the U is expressed as a product of */
00091 /*  Householder transformations, whose vectors are stored in the */
00092 /*  array "V" and whose scaling constants are in "TAU"; we shall */
00093 /*  use the letter "V" to refer to the product of Householder */
00094 /*  transformations (which should be equal to U). */
00095 
00096 /*  Specifically, if ITYPE=1, then: */
00097 
00098 /*          RESULT(1) = | A - U S U* | / ( |A| n ulp ) *and* */
00099 /*          RESULT(2) = | I - UU* | / ( n ulp ) */
00100 
00101 /*  If ITYPE=2, then: */
00102 
00103 /*          RESULT(1) = | A - V S V* | / ( |A| n ulp ) */
00104 
00105 /*  If ITYPE=3, then: */
00106 
00107 /*          RESULT(1) = | I - UV* | / ( n ulp ) */
00108 
00109 /*  Packed storage means that, for example, if UPLO='U', then the columns */
00110 /*  of the upper triangle of A are stored one after another, so that */
00111 /*  A(1,j+1) immediately follows A(j,j) in the array AP.  Similarly, if */
00112 /*  UPLO='L', then the columns of the lower triangle of A are stored one */
00113 /*  after another in AP, so that A(j+1,j+1) immediately follows A(n,j) */
00114 /*  in the array AP.  This means that A(i,j) is stored in: */
00115 
00116 /*     AP( i + j*(j-1)/2 )                 if UPLO='U' */
00117 
00118 /*     AP( i + (2*n-j)*(j-1)/2 )           if UPLO='L' */
00119 
00120 /*  The array VP bears the same relation to the matrix V that A does to */
00121 /*  AP. */
00122 
00123 /*  For ITYPE > 1, the transformation U is expressed as a product */
00124 /*  of Householder transformations: */
00125 
00126 /*     If UPLO='U', then  V = H(n-1)...H(1),  where */
00127 
00128 /*         H(j) = I  -  tau(j) v(j) v(j)* */
00129 
00130 /*     and the first j-1 elements of v(j) are stored in V(1:j-1,j+1), */
00131 /*     (i.e., VP( j*(j+1)/2 + 1 : j*(j+1)/2 + j-1 ) ), */
00132 /*     the j-th element is 1, and the last n-j elements are 0. */
00133 
00134 /*     If UPLO='L', then  V = H(1)...H(n-1),  where */
00135 
00136 /*         H(j) = I  -  tau(j) v(j) v(j)* */
00137 
00138 /*     and the first j elements of v(j) are 0, the (j+1)-st is 1, and the */
00139 /*     (j+2)-nd through n-th elements are stored in V(j+2:n,j) (i.e., */
00140 /*     in VP( (2*n-j)*(j-1)/2 + j+2 : (2*n-j)*(j-1)/2 + n ) .) */
00141 
00142 /*  Arguments */
00143 /*  ========= */
00144 
00145 /*  ITYPE   (input) INTEGER */
00146 /*          Specifies the type of tests to be performed. */
00147 /*          1: U expressed as a dense unitary matrix: */
00148 /*             RESULT(1) = | A - U S U* | / ( |A| n ulp )   *and* */
00149 /*             RESULT(2) = | I - UU* | / ( n ulp ) */
00150 
00151 /*          2: U expressed as a product V of Housholder transformations: */
00152 /*             RESULT(1) = | A - V S V* | / ( |A| n ulp ) */
00153 
00154 /*          3: U expressed both as a dense unitary matrix and */
00155 /*             as a product of Housholder transformations: */
00156 /*             RESULT(1) = | I - UV* | / ( n ulp ) */
00157 
00158 /*  UPLO    (input) CHARACTER */
00159 /*          If UPLO='U', the upper triangle of A and V will be used and */
00160 /*          the (strictly) lower triangle will not be referenced. */
00161 /*          If UPLO='L', the lower triangle of A and V will be used and */
00162 /*          the (strictly) upper triangle will not be referenced. */
00163 
00164 /*  N       (input) INTEGER */
00165 /*          The size of the matrix.  If it is zero, ZHPT21 does nothing. */
00166 /*          It must be at least zero. */
00167 
00168 /*  KBAND   (input) INTEGER */
00169 /*          The bandwidth of the matrix.  It may only be zero or one. */
00170 /*          If zero, then S is diagonal, and E is not referenced.  If */
00171 /*          one, then S is symmetric tri-diagonal. */
00172 
00173 /*  AP      (input) COMPLEX*16 array, dimension (N*(N+1)/2) */
00174 /*          The original (unfactored) matrix.  It is assumed to be */
00175 /*          hermitian, and contains the columns of just the upper */
00176 /*          triangle (UPLO='U') or only the lower triangle (UPLO='L'), */
00177 /*          packed one after another. */
00178 
00179 /*  D       (input) DOUBLE PRECISION array, dimension (N) */
00180 /*          The diagonal of the (symmetric tri-) diagonal matrix. */
00181 
00182 /*  E       (input) DOUBLE PRECISION array, dimension (N) */
00183 /*          The off-diagonal of the (symmetric tri-) diagonal matrix. */
00184 /*          E(1) is the (1,2) and (2,1) element, E(2) is the (2,3) and */
00185 /*          (3,2) element, etc. */
00186 /*          Not referenced if KBAND=0. */
00187 
00188 /*  U       (input) COMPLEX*16 array, dimension (LDU, N) */
00189 /*          If ITYPE=1 or 3, this contains the unitary matrix in */
00190 /*          the decomposition, expressed as a dense matrix.  If ITYPE=2, */
00191 /*          then it is not referenced. */
00192 
00193 /*  LDU     (input) INTEGER */
00194 /*          The leading dimension of U.  LDU must be at least N and */
00195 /*          at least 1. */
00196 
00197 /*  VP      (input) DOUBLE PRECISION array, dimension (N*(N+1)/2) */
00198 /*          If ITYPE=2 or 3, the columns of this array contain the */
00199 /*          Householder vectors used to describe the unitary matrix */
00200 /*          in the decomposition, as described in purpose. */
00201 /*          *NOTE* If ITYPE=2 or 3, V is modified and restored.  The */
00202 /*          subdiagonal (if UPLO='L') or the superdiagonal (if UPLO='U') */
00203 /*          is set to one, and later reset to its original value, during */
00204 /*          the course of the calculation. */
00205 /*          If ITYPE=1, then it is neither referenced nor modified. */
00206 
00207 /*  TAU     (input) COMPLEX*16 array, dimension (N) */
00208 /*          If ITYPE >= 2, then TAU(j) is the scalar factor of */
00209 /*          v(j) v(j)* in the Householder transformation H(j) of */
00210 /*          the product  U = H(1)...H(n-2) */
00211 /*          If ITYPE < 2, then TAU is not referenced. */
00212 
00213 /*  WORK    (workspace) COMPLEX*16 array, dimension (N**2) */
00214 /*          Workspace. */
00215 
00216 /*  RWORK   (workspace) DOUBLE PRECISION array, dimension (N) */
00217 /*          Workspace. */
00218 
00219 /*  RESULT  (output) DOUBLE PRECISION array, dimension (2) */
00220 /*          The values computed by the two tests described above.  The */
00221 /*          values are currently limited to 1/ulp, to avoid overflow. */
00222 /*          RESULT(1) is always modified.  RESULT(2) is modified only */
00223 /*          if ITYPE=1. */
00224 
00225 /*  ===================================================================== */
00226 
00227 /*     .. Parameters .. */
00228 /*     .. */
00229 /*     .. Local Scalars .. */
00230 /*     .. */
00231 /*     .. External Functions .. */
00232 /*     .. */
00233 /*     .. External Subroutines .. */
00234 /*     .. */
00235 /*     .. Intrinsic Functions .. */
00236 /*     .. */
00237 /*     .. Executable Statements .. */
00238 
00239 /*     Constants */
00240 
00241     /* Parameter adjustments */
00242     --ap;
00243     --d__;
00244     --e;
00245     u_dim1 = *ldu;
00246     u_offset = 1 + u_dim1;
00247     u -= u_offset;
00248     --vp;
00249     --tau;
00250     --work;
00251     --rwork;
00252     --result;
00253 
00254     /* Function Body */
00255     result[1] = 0.;
00256     if (*itype == 1) {
00257         result[2] = 0.;
00258     }
00259     if (*n <= 0) {
00260         return 0;
00261     }
00262 
00263     lap = *n * (*n + 1) / 2;
00264 
00265     if (lsame_(uplo, "U")) {
00266         lower = FALSE_;
00267         *(unsigned char *)cuplo = 'U';
00268     } else {
00269         lower = TRUE_;
00270         *(unsigned char *)cuplo = 'L';
00271     }
00272 
00273     unfl = dlamch_("Safe minimum");
00274     ulp = dlamch_("Epsilon") * dlamch_("Base");
00275 
00276 /*     Some Error Checks */
00277 
00278     if (*itype < 1 || *itype > 3) {
00279         result[1] = 10. / ulp;
00280         return 0;
00281     }
00282 
00283 /*     Do Test 1 */
00284 
00285 /*     Norm of A: */
00286 
00287     if (*itype == 3) {
00288         anorm = 1.;
00289     } else {
00290 /* Computing MAX */
00291         d__1 = zlanhp_("1", cuplo, n, &ap[1], &rwork[1])
00292                 ;
00293         anorm = max(d__1,unfl);
00294     }
00295 
00296 /*     Compute error matrix: */
00297 
00298     if (*itype == 1) {
00299 
00300 /*        ITYPE=1: error = A - U S U* */
00301 
00302         zlaset_("Full", n, n, &c_b1, &c_b1, &work[1], n);
00303         zcopy_(&lap, &ap[1], &c__1, &work[1], &c__1);
00304 
00305         i__1 = *n;
00306         for (j = 1; j <= i__1; ++j) {
00307             d__1 = -d__[j];
00308             zhpr_(cuplo, n, &d__1, &u[j * u_dim1 + 1], &c__1, &work[1]);
00309 /* L10: */
00310         }
00311 
00312         if (*n > 1 && *kband == 1) {
00313             i__1 = *n - 1;
00314             for (j = 1; j <= i__1; ++j) {
00315                 i__2 = j;
00316                 z__2.r = e[i__2], z__2.i = 0.;
00317                 z__1.r = -z__2.r, z__1.i = -z__2.i;
00318                 zhpr2_(cuplo, n, &z__1, &u[j * u_dim1 + 1], &c__1, &u[(j - 1) 
00319                         * u_dim1 + 1], &c__1, &work[1]);
00320 /* L20: */
00321             }
00322         }
00323         wnorm = zlanhp_("1", cuplo, n, &work[1], &rwork[1]);
00324 
00325     } else if (*itype == 2) {
00326 
00327 /*        ITYPE=2: error = V S V* - A */
00328 
00329         zlaset_("Full", n, n, &c_b1, &c_b1, &work[1], n);
00330 
00331         if (lower) {
00332             i__1 = lap;
00333             i__2 = *n;
00334             work[i__1].r = d__[i__2], work[i__1].i = 0.;
00335             for (j = *n - 1; j >= 1; --j) {
00336                 jp = ((*n << 1) - j) * (j - 1) / 2;
00337                 jp1 = jp + *n - j;
00338                 if (*kband == 1) {
00339                     i__1 = jp + j + 1;
00340                     i__2 = j;
00341                     z__2.r = 1. - tau[i__2].r, z__2.i = 0. - tau[i__2].i;
00342                     i__3 = j;
00343                     z__1.r = e[i__3] * z__2.r, z__1.i = e[i__3] * z__2.i;
00344                     work[i__1].r = z__1.r, work[i__1].i = z__1.i;
00345                     i__1 = *n;
00346                     for (jr = j + 2; jr <= i__1; ++jr) {
00347                         i__2 = jp + jr;
00348                         i__3 = j;
00349                         z__3.r = -tau[i__3].r, z__3.i = -tau[i__3].i;
00350                         i__4 = j;
00351                         z__2.r = e[i__4] * z__3.r, z__2.i = e[i__4] * z__3.i;
00352                         i__5 = jp + jr;
00353                         z__1.r = z__2.r * vp[i__5].r - z__2.i * vp[i__5].i, 
00354                                 z__1.i = z__2.r * vp[i__5].i + z__2.i * vp[
00355                                 i__5].r;
00356                         work[i__2].r = z__1.r, work[i__2].i = z__1.i;
00357 /* L30: */
00358                     }
00359                 }
00360 
00361                 i__1 = j;
00362                 if (tau[i__1].r != 0. || tau[i__1].i != 0.) {
00363                     i__1 = jp + j + 1;
00364                     vsave.r = vp[i__1].r, vsave.i = vp[i__1].i;
00365                     i__1 = jp + j + 1;
00366                     vp[i__1].r = 1., vp[i__1].i = 0.;
00367                     i__1 = *n - j;
00368                     zhpmv_("L", &i__1, &c_b2, &work[jp1 + j + 1], &vp[jp + j 
00369                             + 1], &c__1, &c_b1, &work[lap + 1], &c__1);
00370                     i__1 = j;
00371                     z__2.r = tau[i__1].r * -.5, z__2.i = tau[i__1].i * -.5;
00372                     i__2 = *n - j;
00373                     zdotc_(&z__3, &i__2, &work[lap + 1], &c__1, &vp[jp + j + 
00374                             1], &c__1);
00375                     z__1.r = z__2.r * z__3.r - z__2.i * z__3.i, z__1.i = 
00376                             z__2.r * z__3.i + z__2.i * z__3.r;
00377                     temp.r = z__1.r, temp.i = z__1.i;
00378                     i__1 = *n - j;
00379                     zaxpy_(&i__1, &temp, &vp[jp + j + 1], &c__1, &work[lap + 
00380                             1], &c__1);
00381                     i__1 = *n - j;
00382                     i__2 = j;
00383                     z__1.r = -tau[i__2].r, z__1.i = -tau[i__2].i;
00384                     zhpr2_("L", &i__1, &z__1, &vp[jp + j + 1], &c__1, &work[
00385                             lap + 1], &c__1, &work[jp1 + j + 1]);
00386 
00387                     i__1 = jp + j + 1;
00388                     vp[i__1].r = vsave.r, vp[i__1].i = vsave.i;
00389                 }
00390                 i__1 = jp + j;
00391                 i__2 = j;
00392                 work[i__1].r = d__[i__2], work[i__1].i = 0.;
00393 /* L40: */
00394             }
00395         } else {
00396             work[1].r = d__[1], work[1].i = 0.;
00397             i__1 = *n - 1;
00398             for (j = 1; j <= i__1; ++j) {
00399                 jp = j * (j - 1) / 2;
00400                 jp1 = jp + j;
00401                 if (*kband == 1) {
00402                     i__2 = jp1 + j;
00403                     i__3 = j;
00404                     z__2.r = 1. - tau[i__3].r, z__2.i = 0. - tau[i__3].i;
00405                     i__4 = j;
00406                     z__1.r = e[i__4] * z__2.r, z__1.i = e[i__4] * z__2.i;
00407                     work[i__2].r = z__1.r, work[i__2].i = z__1.i;
00408                     i__2 = j - 1;
00409                     for (jr = 1; jr <= i__2; ++jr) {
00410                         i__3 = jp1 + jr;
00411                         i__4 = j;
00412                         z__3.r = -tau[i__4].r, z__3.i = -tau[i__4].i;
00413                         i__5 = j;
00414                         z__2.r = e[i__5] * z__3.r, z__2.i = e[i__5] * z__3.i;
00415                         i__6 = jp1 + jr;
00416                         z__1.r = z__2.r * vp[i__6].r - z__2.i * vp[i__6].i, 
00417                                 z__1.i = z__2.r * vp[i__6].i + z__2.i * vp[
00418                                 i__6].r;
00419                         work[i__3].r = z__1.r, work[i__3].i = z__1.i;
00420 /* L50: */
00421                     }
00422                 }
00423 
00424                 i__2 = j;
00425                 if (tau[i__2].r != 0. || tau[i__2].i != 0.) {
00426                     i__2 = jp1 + j;
00427                     vsave.r = vp[i__2].r, vsave.i = vp[i__2].i;
00428                     i__2 = jp1 + j;
00429                     vp[i__2].r = 1., vp[i__2].i = 0.;
00430                     zhpmv_("U", &j, &c_b2, &work[1], &vp[jp1 + 1], &c__1, &
00431                             c_b1, &work[lap + 1], &c__1);
00432                     i__2 = j;
00433                     z__2.r = tau[i__2].r * -.5, z__2.i = tau[i__2].i * -.5;
00434                     zdotc_(&z__3, &j, &work[lap + 1], &c__1, &vp[jp1 + 1], &
00435                             c__1);
00436                     z__1.r = z__2.r * z__3.r - z__2.i * z__3.i, z__1.i = 
00437                             z__2.r * z__3.i + z__2.i * z__3.r;
00438                     temp.r = z__1.r, temp.i = z__1.i;
00439                     zaxpy_(&j, &temp, &vp[jp1 + 1], &c__1, &work[lap + 1], &
00440                             c__1);
00441                     i__2 = j;
00442                     z__1.r = -tau[i__2].r, z__1.i = -tau[i__2].i;
00443                     zhpr2_("U", &j, &z__1, &vp[jp1 + 1], &c__1, &work[lap + 1]
00444 , &c__1, &work[1]);
00445                     i__2 = jp1 + j;
00446                     vp[i__2].r = vsave.r, vp[i__2].i = vsave.i;
00447                 }
00448                 i__2 = jp1 + j + 1;
00449                 i__3 = j + 1;
00450                 work[i__2].r = d__[i__3], work[i__2].i = 0.;
00451 /* L60: */
00452             }
00453         }
00454 
00455         i__1 = lap;
00456         for (j = 1; j <= i__1; ++j) {
00457             i__2 = j;
00458             i__3 = j;
00459             i__4 = j;
00460             z__1.r = work[i__3].r - ap[i__4].r, z__1.i = work[i__3].i - ap[
00461                     i__4].i;
00462             work[i__2].r = z__1.r, work[i__2].i = z__1.i;
00463 /* L70: */
00464         }
00465         wnorm = zlanhp_("1", cuplo, n, &work[1], &rwork[1]);
00466 
00467     } else if (*itype == 3) {
00468 
00469 /*        ITYPE=3: error = U V* - I */
00470 
00471         if (*n < 2) {
00472             return 0;
00473         }
00474         zlacpy_(" ", n, n, &u[u_offset], ldu, &work[1], n);
00475 /* Computing 2nd power */
00476         i__1 = *n;
00477         zupmtr_("R", cuplo, "C", n, n, &vp[1], &tau[1], &work[1], n, &work[
00478                 i__1 * i__1 + 1], &iinfo);
00479         if (iinfo != 0) {
00480             result[1] = 10. / ulp;
00481             return 0;
00482         }
00483 
00484         i__1 = *n;
00485         for (j = 1; j <= i__1; ++j) {
00486             i__2 = (*n + 1) * (j - 1) + 1;
00487             i__3 = (*n + 1) * (j - 1) + 1;
00488             z__1.r = work[i__3].r - 1., z__1.i = work[i__3].i - 0.;
00489             work[i__2].r = z__1.r, work[i__2].i = z__1.i;
00490 /* L80: */
00491         }
00492 
00493         wnorm = zlange_("1", n, n, &work[1], n, &rwork[1]);
00494     }
00495 
00496     if (anorm > wnorm) {
00497         result[1] = wnorm / anorm / (*n * ulp);
00498     } else {
00499         if (anorm < 1.) {
00500 /* Computing MIN */
00501             d__1 = wnorm, d__2 = *n * anorm;
00502             result[1] = min(d__1,d__2) / anorm / (*n * ulp);
00503         } else {
00504 /* Computing MIN */
00505             d__1 = wnorm / anorm, d__2 = (doublereal) (*n);
00506             result[1] = min(d__1,d__2) / (*n * ulp);
00507         }
00508     }
00509 
00510 /*     Do Test 2 */
00511 
00512 /*     Compute  UU* - I */
00513 
00514     if (*itype == 1) {
00515         zgemm_("N", "C", n, n, n, &c_b2, &u[u_offset], ldu, &u[u_offset], ldu, 
00516                  &c_b1, &work[1], n);
00517 
00518         i__1 = *n;
00519         for (j = 1; j <= i__1; ++j) {
00520             i__2 = (*n + 1) * (j - 1) + 1;
00521             i__3 = (*n + 1) * (j - 1) + 1;
00522             z__1.r = work[i__3].r - 1., z__1.i = work[i__3].i - 0.;
00523             work[i__2].r = z__1.r, work[i__2].i = z__1.i;
00524 /* L90: */
00525         }
00526 
00527 /* Computing MIN */
00528         d__1 = zlange_("1", n, n, &work[1], n, &rwork[1]), d__2 = (
00529                 doublereal) (*n);
00530         result[2] = min(d__1,d__2) / (*n * ulp);
00531     }
00532 
00533     return 0;
00534 
00535 /*     End of ZHPT21 */
00536 
00537 } /* zhpt21_ */


swiftnav
Author(s):
autogenerated on Sat Jun 8 2019 18:56:39