2 #include "gmx_lapack.h"
3 #include "lapack_limits.h"
6 F77_FUNC(ssytrd,SSYTRD)(const char *uplo, int *n, float *a, int *
7 lda, float *d__, float *e, float *tau, float *
8 work, int *lwork, int *info)
10 /* System generated locals */
11 int a_dim1, a_offset, i__1, i__2, i__3;
14 int i__, j, nb, kk, nx, iws;
23 /* Parameter adjustments */
25 a_offset = 1 + a_dim1;
34 upper = (*uplo=='U' || *uplo=='u');
35 lquery = (*lwork == -1);
37 if (! upper && ! (*uplo=='L' || *uplo=='l')) {
41 } else if (*lda < ((1>*n) ? 1 : *n)) {
43 } else if (*lwork < 1 && ! lquery) {
49 nb = DSYTRD_BLOCKSIZE;
51 work[1] = (float) lwkopt;
65 if (nb > 1 && nb < *n) {
67 nx = DSYTRD_CROSSOVER;
74 i__1 = *lwork / ldwork;
75 nb = (i__1>1) ? i__1 : 1;
76 nbmin = DSYTRD_MINBLOCKSIZE;
90 kk = *n - (*n - nx + nb - 1) / nb * nb;
93 for (i__ = *n - nb + 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ +=
97 F77_FUNC(slatrd,SLATRD)(uplo, &i__3, &nb, &a[a_offset], lda, &e[1], &tau[1], &
101 F77_FUNC(ssyr2k,SSYR2K)(uplo, "No transpose", &i__3, &nb, &c_b22, &a[i__ * a_dim1
102 + 1], lda, &work[1], &ldwork, &c_b23, &a[a_offset], lda);
105 for (j = i__; j <= i__3; ++j) {
106 a[j - 1 + j * a_dim1] = e[j - 1];
107 d__[j] = a[j + j * a_dim1];
113 F77_FUNC(ssytd2,SSYTD2)(uplo, &kk, &a[a_offset], lda, &d__[1], &e[1], &tau[1], &iinfo);
118 for (i__ = 1; i__1 < 0 ? i__ >= i__2 : i__ <= i__2; i__ += i__1) {
122 F77_FUNC(slatrd,SLATRD)(uplo, &i__3, &nb, &a[i__ + i__ * a_dim1], lda, &e[i__], &
123 tau[i__], &work[1], &ldwork);
125 i__3 = *n - i__ - nb + 1;
126 F77_FUNC(ssyr2k,SSYR2K)(uplo, "No transpose", &i__3, &nb, &c_b22, &a[i__ + nb +
127 i__ * a_dim1], lda, &work[nb + 1], &ldwork, &c_b23, &a[
128 i__ + nb + (i__ + nb) * a_dim1], lda);
132 for (j = i__; j <= i__3; ++j) {
133 a[j + 1 + j * a_dim1] = e[j];
134 d__[j] = a[j + j * a_dim1];
142 F77_FUNC(ssytd2,SSYTD2)(uplo, &i__1, &a[i__ + i__ * a_dim1], lda, &d__[i__], &e[i__],
146 work[1] = (float) lwkopt;