ssytf2.c
Go to the documentation of this file.
00001 /* ssytf2.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 integer c__1 = 1;
00019 
00020 /* Subroutine */ int ssytf2_(char *uplo, integer *n, real *a, integer *lda, 
00021         integer *ipiv, integer *info)
00022 {
00023     /* System generated locals */
00024     integer a_dim1, a_offset, i__1, i__2;
00025     real r__1, r__2, r__3;
00026 
00027     /* Builtin functions */
00028     double sqrt(doublereal);
00029 
00030     /* Local variables */
00031     integer i__, j, k;
00032     real t, r1, d11, d12, d21, d22;
00033     integer kk, kp;
00034     real wk, wkm1, wkp1;
00035     integer imax, jmax;
00036     extern /* Subroutine */ int ssyr_(char *, integer *, real *, real *, 
00037             integer *, real *, integer *);
00038     real alpha;
00039     extern logical lsame_(char *, char *);
00040     extern /* Subroutine */ int sscal_(integer *, real *, real *, integer *);
00041     integer kstep;
00042     logical upper;
00043     extern /* Subroutine */ int sswap_(integer *, real *, integer *, real *, 
00044             integer *);
00045     real absakk;
00046     extern /* Subroutine */ int xerbla_(char *, integer *);
00047     extern integer isamax_(integer *, real *, integer *);
00048     real colmax;
00049     extern logical sisnan_(real *);
00050     real rowmax;
00051 
00052 
00053 /*  -- LAPACK routine (version 3.2) -- */
00054 /*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
00055 /*     November 2006 */
00056 
00057 /*     .. Scalar Arguments .. */
00058 /*     .. */
00059 /*     .. Array Arguments .. */
00060 /*     .. */
00061 
00062 /*  Purpose */
00063 /*  ======= */
00064 
00065 /*  SSYTF2 computes the factorization of a real symmetric matrix A using */
00066 /*  the Bunch-Kaufman diagonal pivoting method: */
00067 
00068 /*     A = U*D*U'  or  A = L*D*L' */
00069 
00070 /*  where U (or L) is a product of permutation and unit upper (lower) */
00071 /*  triangular matrices, U' is the transpose of U, and D is symmetric and */
00072 /*  block diagonal with 1-by-1 and 2-by-2 diagonal blocks. */
00073 
00074 /*  This is the unblocked version of the algorithm, calling Level 2 BLAS. */
00075 
00076 /*  Arguments */
00077 /*  ========= */
00078 
00079 /*  UPLO    (input) CHARACTER*1 */
00080 /*          Specifies whether the upper or lower triangular part of the */
00081 /*          symmetric matrix A is stored: */
00082 /*          = 'U':  Upper triangular */
00083 /*          = 'L':  Lower triangular */
00084 
00085 /*  N       (input) INTEGER */
00086 /*          The order of the matrix A.  N >= 0. */
00087 
00088 /*  A       (input/output) REAL array, dimension (LDA,N) */
00089 /*          On entry, the symmetric matrix A.  If UPLO = 'U', the leading */
00090 /*          n-by-n upper triangular part of A contains the upper */
00091 /*          triangular part of the matrix A, and the strictly lower */
00092 /*          triangular part of A is not referenced.  If UPLO = 'L', the */
00093 /*          leading n-by-n lower triangular part of A contains the lower */
00094 /*          triangular part of the matrix A, and the strictly upper */
00095 /*          triangular part of A is not referenced. */
00096 
00097 /*          On exit, the block diagonal matrix D and the multipliers used */
00098 /*          to obtain the factor U or L (see below for further details). */
00099 
00100 /*  LDA     (input) INTEGER */
00101 /*          The leading dimension of the array A.  LDA >= max(1,N). */
00102 
00103 /*  IPIV    (output) INTEGER array, dimension (N) */
00104 /*          Details of the interchanges and the block structure of D. */
00105 /*          If IPIV(k) > 0, then rows and columns k and IPIV(k) were */
00106 /*          interchanged and D(k,k) is a 1-by-1 diagonal block. */
00107 /*          If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and */
00108 /*          columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) */
00109 /*          is a 2-by-2 diagonal block.  If UPLO = 'L' and IPIV(k) = */
00110 /*          IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were */
00111 /*          interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block. */
00112 
00113 /*  INFO    (output) INTEGER */
00114 /*          = 0: successful exit */
00115 /*          < 0: if INFO = -k, the k-th argument had an illegal value */
00116 /*          > 0: if INFO = k, D(k,k) is exactly zero.  The factorization */
00117 /*               has been completed, but the block diagonal matrix D is */
00118 /*               exactly singular, and division by zero will occur if it */
00119 /*               is used to solve a system of equations. */
00120 
00121 /*  Further Details */
00122 /*  =============== */
00123 
00124 /*  09-29-06 - patch from */
00125 /*    Bobby Cheng, MathWorks */
00126 
00127 /*    Replace l.204 and l.372 */
00128 /*         IF( MAX( ABSAKK, COLMAX ).EQ.ZERO ) THEN */
00129 /*    by */
00130 /*         IF( (MAX( ABSAKK, COLMAX ).EQ.ZERO) .OR. SISNAN(ABSAKK) ) THEN */
00131 
00132 /*  01-01-96 - Based on modifications by */
00133 /*    J. Lewis, Boeing Computer Services Company */
00134 /*    A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA */
00135 /*  1-96 - Based on modifications by J. Lewis, Boeing Computer Services */
00136 /*         Company */
00137 
00138 /*  If UPLO = 'U', then A = U*D*U', where */
00139 /*     U = P(n)*U(n)* ... *P(k)U(k)* ..., */
00140 /*  i.e., U is a product of terms P(k)*U(k), where k decreases from n to */
00141 /*  1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 */
00142 /*  and 2-by-2 diagonal blocks D(k).  P(k) is a permutation matrix as */
00143 /*  defined by IPIV(k), and U(k) is a unit upper triangular matrix, such */
00144 /*  that if the diagonal block D(k) is of order s (s = 1 or 2), then */
00145 
00146 /*             (   I    v    0   )   k-s */
00147 /*     U(k) =  (   0    I    0   )   s */
00148 /*             (   0    0    I   )   n-k */
00149 /*                k-s   s   n-k */
00150 
00151 /*  If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). */
00152 /*  If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), */
00153 /*  and A(k,k), and v overwrites A(1:k-2,k-1:k). */
00154 
00155 /*  If UPLO = 'L', then A = L*D*L', where */
00156 /*     L = P(1)*L(1)* ... *P(k)*L(k)* ..., */
00157 /*  i.e., L is a product of terms P(k)*L(k), where k increases from 1 to */
00158 /*  n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 */
00159 /*  and 2-by-2 diagonal blocks D(k).  P(k) is a permutation matrix as */
00160 /*  defined by IPIV(k), and L(k) is a unit lower triangular matrix, such */
00161 /*  that if the diagonal block D(k) is of order s (s = 1 or 2), then */
00162 
00163 /*             (   I    0     0   )  k-1 */
00164 /*     L(k) =  (   0    I     0   )  s */
00165 /*             (   0    v     I   )  n-k-s+1 */
00166 /*                k-1   s  n-k-s+1 */
00167 
00168 /*  If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). */
00169 /*  If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), */
00170 /*  and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1). */
00171 
00172 /*  ===================================================================== */
00173 
00174 /*     .. Parameters .. */
00175 /*     .. */
00176 /*     .. Local Scalars .. */
00177 /*     .. */
00178 /*     .. External Functions .. */
00179 /*     .. */
00180 /*     .. External Subroutines .. */
00181 /*     .. */
00182 /*     .. Intrinsic Functions .. */
00183 /*     .. */
00184 /*     .. Executable Statements .. */
00185 
00186 /*     Test the input parameters. */
00187 
00188     /* Parameter adjustments */
00189     a_dim1 = *lda;
00190     a_offset = 1 + a_dim1;
00191     a -= a_offset;
00192     --ipiv;
00193 
00194     /* Function Body */
00195     *info = 0;
00196     upper = lsame_(uplo, "U");
00197     if (! upper && ! lsame_(uplo, "L")) {
00198         *info = -1;
00199     } else if (*n < 0) {
00200         *info = -2;
00201     } else if (*lda < max(1,*n)) {
00202         *info = -4;
00203     }
00204     if (*info != 0) {
00205         i__1 = -(*info);
00206         xerbla_("SSYTF2", &i__1);
00207         return 0;
00208     }
00209 
00210 /*     Initialize ALPHA for use in choosing pivot block size. */
00211 
00212     alpha = (sqrt(17.f) + 1.f) / 8.f;
00213 
00214     if (upper) {
00215 
00216 /*        Factorize A as U*D*U' using the upper triangle of A */
00217 
00218 /*        K is the main loop index, decreasing from N to 1 in steps of */
00219 /*        1 or 2 */
00220 
00221         k = *n;
00222 L10:
00223 
00224 /*        If K < 1, exit from loop */
00225 
00226         if (k < 1) {
00227             goto L70;
00228         }
00229         kstep = 1;
00230 
00231 /*        Determine rows and columns to be interchanged and whether */
00232 /*        a 1-by-1 or 2-by-2 pivot block will be used */
00233 
00234         absakk = (r__1 = a[k + k * a_dim1], dabs(r__1));
00235 
00236 /*        IMAX is the row-index of the largest off-diagonal element in */
00237 /*        column K, and COLMAX is its absolute value */
00238 
00239         if (k > 1) {
00240             i__1 = k - 1;
00241             imax = isamax_(&i__1, &a[k * a_dim1 + 1], &c__1);
00242             colmax = (r__1 = a[imax + k * a_dim1], dabs(r__1));
00243         } else {
00244             colmax = 0.f;
00245         }
00246 
00247         if (dmax(absakk,colmax) == 0.f || sisnan_(&absakk)) {
00248 
00249 /*           Column K is zero or contains a NaN: set INFO and continue */
00250 
00251             if (*info == 0) {
00252                 *info = k;
00253             }
00254             kp = k;
00255         } else {
00256             if (absakk >= alpha * colmax) {
00257 
00258 /*              no interchange, use 1-by-1 pivot block */
00259 
00260                 kp = k;
00261             } else {
00262 
00263 /*              JMAX is the column-index of the largest off-diagonal */
00264 /*              element in row IMAX, and ROWMAX is its absolute value */
00265 
00266                 i__1 = k - imax;
00267                 jmax = imax + isamax_(&i__1, &a[imax + (imax + 1) * a_dim1], 
00268                         lda);
00269                 rowmax = (r__1 = a[imax + jmax * a_dim1], dabs(r__1));
00270                 if (imax > 1) {
00271                     i__1 = imax - 1;
00272                     jmax = isamax_(&i__1, &a[imax * a_dim1 + 1], &c__1);
00273 /* Computing MAX */
00274                     r__2 = rowmax, r__3 = (r__1 = a[jmax + imax * a_dim1], 
00275                             dabs(r__1));
00276                     rowmax = dmax(r__2,r__3);
00277                 }
00278 
00279                 if (absakk >= alpha * colmax * (colmax / rowmax)) {
00280 
00281 /*                 no interchange, use 1-by-1 pivot block */
00282 
00283                     kp = k;
00284                 } else if ((r__1 = a[imax + imax * a_dim1], dabs(r__1)) >= 
00285                         alpha * rowmax) {
00286 
00287 /*                 interchange rows and columns K and IMAX, use 1-by-1 */
00288 /*                 pivot block */
00289 
00290                     kp = imax;
00291                 } else {
00292 
00293 /*                 interchange rows and columns K-1 and IMAX, use 2-by-2 */
00294 /*                 pivot block */
00295 
00296                     kp = imax;
00297                     kstep = 2;
00298                 }
00299             }
00300 
00301             kk = k - kstep + 1;
00302             if (kp != kk) {
00303 
00304 /*              Interchange rows and columns KK and KP in the leading */
00305 /*              submatrix A(1:k,1:k) */
00306 
00307                 i__1 = kp - 1;
00308                 sswap_(&i__1, &a[kk * a_dim1 + 1], &c__1, &a[kp * a_dim1 + 1], 
00309                          &c__1);
00310                 i__1 = kk - kp - 1;
00311                 sswap_(&i__1, &a[kp + 1 + kk * a_dim1], &c__1, &a[kp + (kp + 
00312                         1) * a_dim1], lda);
00313                 t = a[kk + kk * a_dim1];
00314                 a[kk + kk * a_dim1] = a[kp + kp * a_dim1];
00315                 a[kp + kp * a_dim1] = t;
00316                 if (kstep == 2) {
00317                     t = a[k - 1 + k * a_dim1];
00318                     a[k - 1 + k * a_dim1] = a[kp + k * a_dim1];
00319                     a[kp + k * a_dim1] = t;
00320                 }
00321             }
00322 
00323 /*           Update the leading submatrix */
00324 
00325             if (kstep == 1) {
00326 
00327 /*              1-by-1 pivot block D(k): column k now holds */
00328 
00329 /*              W(k) = U(k)*D(k) */
00330 
00331 /*              where U(k) is the k-th column of U */
00332 
00333 /*              Perform a rank-1 update of A(1:k-1,1:k-1) as */
00334 
00335 /*              A := A - U(k)*D(k)*U(k)' = A - W(k)*1/D(k)*W(k)' */
00336 
00337                 r1 = 1.f / a[k + k * a_dim1];
00338                 i__1 = k - 1;
00339                 r__1 = -r1;
00340                 ssyr_(uplo, &i__1, &r__1, &a[k * a_dim1 + 1], &c__1, &a[
00341                         a_offset], lda);
00342 
00343 /*              Store U(k) in column k */
00344 
00345                 i__1 = k - 1;
00346                 sscal_(&i__1, &r1, &a[k * a_dim1 + 1], &c__1);
00347             } else {
00348 
00349 /*              2-by-2 pivot block D(k): columns k and k-1 now hold */
00350 
00351 /*              ( W(k-1) W(k) ) = ( U(k-1) U(k) )*D(k) */
00352 
00353 /*              where U(k) and U(k-1) are the k-th and (k-1)-th columns */
00354 /*              of U */
00355 
00356 /*              Perform a rank-2 update of A(1:k-2,1:k-2) as */
00357 
00358 /*              A := A - ( U(k-1) U(k) )*D(k)*( U(k-1) U(k) )' */
00359 /*                 = A - ( W(k-1) W(k) )*inv(D(k))*( W(k-1) W(k) )' */
00360 
00361                 if (k > 2) {
00362 
00363                     d12 = a[k - 1 + k * a_dim1];
00364                     d22 = a[k - 1 + (k - 1) * a_dim1] / d12;
00365                     d11 = a[k + k * a_dim1] / d12;
00366                     t = 1.f / (d11 * d22 - 1.f);
00367                     d12 = t / d12;
00368 
00369                     for (j = k - 2; j >= 1; --j) {
00370                         wkm1 = d12 * (d11 * a[j + (k - 1) * a_dim1] - a[j + k 
00371                                 * a_dim1]);
00372                         wk = d12 * (d22 * a[j + k * a_dim1] - a[j + (k - 1) * 
00373                                 a_dim1]);
00374                         for (i__ = j; i__ >= 1; --i__) {
00375                             a[i__ + j * a_dim1] = a[i__ + j * a_dim1] - a[i__ 
00376                                     + k * a_dim1] * wk - a[i__ + (k - 1) * 
00377                                     a_dim1] * wkm1;
00378 /* L20: */
00379                         }
00380                         a[j + k * a_dim1] = wk;
00381                         a[j + (k - 1) * a_dim1] = wkm1;
00382 /* L30: */
00383                     }
00384 
00385                 }
00386 
00387             }
00388         }
00389 
00390 /*        Store details of the interchanges in IPIV */
00391 
00392         if (kstep == 1) {
00393             ipiv[k] = kp;
00394         } else {
00395             ipiv[k] = -kp;
00396             ipiv[k - 1] = -kp;
00397         }
00398 
00399 /*        Decrease K and return to the start of the main loop */
00400 
00401         k -= kstep;
00402         goto L10;
00403 
00404     } else {
00405 
00406 /*        Factorize A as L*D*L' using the lower triangle of A */
00407 
00408 /*        K is the main loop index, increasing from 1 to N in steps of */
00409 /*        1 or 2 */
00410 
00411         k = 1;
00412 L40:
00413 
00414 /*        If K > N, exit from loop */
00415 
00416         if (k > *n) {
00417             goto L70;
00418         }
00419         kstep = 1;
00420 
00421 /*        Determine rows and columns to be interchanged and whether */
00422 /*        a 1-by-1 or 2-by-2 pivot block will be used */
00423 
00424         absakk = (r__1 = a[k + k * a_dim1], dabs(r__1));
00425 
00426 /*        IMAX is the row-index of the largest off-diagonal element in */
00427 /*        column K, and COLMAX is its absolute value */
00428 
00429         if (k < *n) {
00430             i__1 = *n - k;
00431             imax = k + isamax_(&i__1, &a[k + 1 + k * a_dim1], &c__1);
00432             colmax = (r__1 = a[imax + k * a_dim1], dabs(r__1));
00433         } else {
00434             colmax = 0.f;
00435         }
00436 
00437         if (dmax(absakk,colmax) == 0.f || sisnan_(&absakk)) {
00438 
00439 /*           Column K is zero or contains a NaN: set INFO and continue */
00440 
00441             if (*info == 0) {
00442                 *info = k;
00443             }
00444             kp = k;
00445         } else {
00446             if (absakk >= alpha * colmax) {
00447 
00448 /*              no interchange, use 1-by-1 pivot block */
00449 
00450                 kp = k;
00451             } else {
00452 
00453 /*              JMAX is the column-index of the largest off-diagonal */
00454 /*              element in row IMAX, and ROWMAX is its absolute value */
00455 
00456                 i__1 = imax - k;
00457                 jmax = k - 1 + isamax_(&i__1, &a[imax + k * a_dim1], lda);
00458                 rowmax = (r__1 = a[imax + jmax * a_dim1], dabs(r__1));
00459                 if (imax < *n) {
00460                     i__1 = *n - imax;
00461                     jmax = imax + isamax_(&i__1, &a[imax + 1 + imax * a_dim1], 
00462                              &c__1);
00463 /* Computing MAX */
00464                     r__2 = rowmax, r__3 = (r__1 = a[jmax + imax * a_dim1], 
00465                             dabs(r__1));
00466                     rowmax = dmax(r__2,r__3);
00467                 }
00468 
00469                 if (absakk >= alpha * colmax * (colmax / rowmax)) {
00470 
00471 /*                 no interchange, use 1-by-1 pivot block */
00472 
00473                     kp = k;
00474                 } else if ((r__1 = a[imax + imax * a_dim1], dabs(r__1)) >= 
00475                         alpha * rowmax) {
00476 
00477 /*                 interchange rows and columns K and IMAX, use 1-by-1 */
00478 /*                 pivot block */
00479 
00480                     kp = imax;
00481                 } else {
00482 
00483 /*                 interchange rows and columns K+1 and IMAX, use 2-by-2 */
00484 /*                 pivot block */
00485 
00486                     kp = imax;
00487                     kstep = 2;
00488                 }
00489             }
00490 
00491             kk = k + kstep - 1;
00492             if (kp != kk) {
00493 
00494 /*              Interchange rows and columns KK and KP in the trailing */
00495 /*              submatrix A(k:n,k:n) */
00496 
00497                 if (kp < *n) {
00498                     i__1 = *n - kp;
00499                     sswap_(&i__1, &a[kp + 1 + kk * a_dim1], &c__1, &a[kp + 1 
00500                             + kp * a_dim1], &c__1);
00501                 }
00502                 i__1 = kp - kk - 1;
00503                 sswap_(&i__1, &a[kk + 1 + kk * a_dim1], &c__1, &a[kp + (kk + 
00504                         1) * a_dim1], lda);
00505                 t = a[kk + kk * a_dim1];
00506                 a[kk + kk * a_dim1] = a[kp + kp * a_dim1];
00507                 a[kp + kp * a_dim1] = t;
00508                 if (kstep == 2) {
00509                     t = a[k + 1 + k * a_dim1];
00510                     a[k + 1 + k * a_dim1] = a[kp + k * a_dim1];
00511                     a[kp + k * a_dim1] = t;
00512                 }
00513             }
00514 
00515 /*           Update the trailing submatrix */
00516 
00517             if (kstep == 1) {
00518 
00519 /*              1-by-1 pivot block D(k): column k now holds */
00520 
00521 /*              W(k) = L(k)*D(k) */
00522 
00523 /*              where L(k) is the k-th column of L */
00524 
00525                 if (k < *n) {
00526 
00527 /*                 Perform a rank-1 update of A(k+1:n,k+1:n) as */
00528 
00529 /*                 A := A - L(k)*D(k)*L(k)' = A - W(k)*(1/D(k))*W(k)' */
00530 
00531                     d11 = 1.f / a[k + k * a_dim1];
00532                     i__1 = *n - k;
00533                     r__1 = -d11;
00534                     ssyr_(uplo, &i__1, &r__1, &a[k + 1 + k * a_dim1], &c__1, &
00535                             a[k + 1 + (k + 1) * a_dim1], lda);
00536 
00537 /*                 Store L(k) in column K */
00538 
00539                     i__1 = *n - k;
00540                     sscal_(&i__1, &d11, &a[k + 1 + k * a_dim1], &c__1);
00541                 }
00542             } else {
00543 
00544 /*              2-by-2 pivot block D(k) */
00545 
00546                 if (k < *n - 1) {
00547 
00548 /*                 Perform a rank-2 update of A(k+2:n,k+2:n) as */
00549 
00550 /*                 A := A - ( (A(k) A(k+1))*D(k)**(-1) ) * (A(k) A(k+1))' */
00551 
00552 /*                 where L(k) and L(k+1) are the k-th and (k+1)-th */
00553 /*                 columns of L */
00554 
00555                     d21 = a[k + 1 + k * a_dim1];
00556                     d11 = a[k + 1 + (k + 1) * a_dim1] / d21;
00557                     d22 = a[k + k * a_dim1] / d21;
00558                     t = 1.f / (d11 * d22 - 1.f);
00559                     d21 = t / d21;
00560 
00561                     i__1 = *n;
00562                     for (j = k + 2; j <= i__1; ++j) {
00563 
00564                         wk = d21 * (d11 * a[j + k * a_dim1] - a[j + (k + 1) * 
00565                                 a_dim1]);
00566                         wkp1 = d21 * (d22 * a[j + (k + 1) * a_dim1] - a[j + k 
00567                                 * a_dim1]);
00568 
00569                         i__2 = *n;
00570                         for (i__ = j; i__ <= i__2; ++i__) {
00571                             a[i__ + j * a_dim1] = a[i__ + j * a_dim1] - a[i__ 
00572                                     + k * a_dim1] * wk - a[i__ + (k + 1) * 
00573                                     a_dim1] * wkp1;
00574 /* L50: */
00575                         }
00576 
00577                         a[j + k * a_dim1] = wk;
00578                         a[j + (k + 1) * a_dim1] = wkp1;
00579 
00580 /* L60: */
00581                     }
00582                 }
00583             }
00584         }
00585 
00586 /*        Store details of the interchanges in IPIV */
00587 
00588         if (kstep == 1) {
00589             ipiv[k] = kp;
00590         } else {
00591             ipiv[k] = -kp;
00592             ipiv[k + 1] = -kp;
00593         }
00594 
00595 /*        Increase K and return to the start of the main loop */
00596 
00597         k += kstep;
00598         goto L40;
00599 
00600     }
00601 
00602 L70:
00603 
00604     return 0;
00605 
00606 /*     End of SSYTF2 */
00607 
00608 } /* ssytf2_ */


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