1 #include "gmx_lapack.h"
3 #include "lapack_limits.h"
7 F77_FUNC(dgebrd,DGEBRD)(int *m,
19 /* System generated locals */
20 int a_dim1, a_offset, i_1, i_2, i_3, i_4;
25 int nbmin, iinfo, minmn;
28 double minusone = -1.0;
31 a_offset = 1 + a_dim1;
39 nb = DGEBRD_BLOCKSIZE;
42 work[1] = (double) ( (*m + *n) * nb);
45 minmn = (*m < *n) ? *m : *n;
51 ws = (*m > *n) ? *m : *n;
55 if (nb > 1 && nb < minmn) {
56 nx = DGEBRD_CROSSOVER;
58 ws = (double) ((*m + *n) * nb);
59 if ((double) (*lwork) < ws) {
60 nbmin = DGEBRD_MINBLOCKSIZE;
61 if (*lwork >= (*m + *n) * nbmin) {
62 nb = *lwork / (*m + *n);
75 for (i_ = 1; i_2 < 0 ? i_ >= i_1 : i_ <= i_1; i_ += i_2) {
79 F77_FUNC(dlabrd,DLABRD)(&i_3, &i_4, &nb, &a[i_ + i_ * a_dim1], lda, &d__[i_],
80 &e[i_], &tauq[i_], &taup[i_], &work[1], &ldwrkx,
81 &work[ldwrkx * nb + 1], &ldwrky);
83 i_3 = *m - i_ - nb + 1;
84 i_4 = *n - i_ - nb + 1;
85 F77_FUNC(dgemm,DGEMM)("N", "T", &i_3, &i_4, &nb, &minusone,
86 &a[i_ + nb + i_ * a_dim1], lda, &work[ldwrkx * nb + nb + 1],
87 &ldwrky, &one, &a[i_ + nb + (i_ + nb) * a_dim1], lda);
88 i_3 = *m - i_ - nb + 1;
89 i_4 = *n - i_ - nb + 1;
90 F77_FUNC(dgemm,DGEMM)("N", "N", &i_3, &i_4, &nb, &minusone, &work[nb + 1], &ldwrkx,
91 &a[i_ + (i_ + nb) * a_dim1], lda, &one,
92 &a[i_ + nb + (i_ + nb) * a_dim1], lda);
96 for (j = i_; j <= i_3; ++j) {
97 a[j + j * a_dim1] = d__[j];
98 a[j + (j + 1) * a_dim1] = e[j];
102 for (j = i_; j <= i_3; ++j) {
103 a[j + j * a_dim1] = d__[j];
104 a[j + 1 + j * a_dim1] = e[j];
111 F77_FUNC(dgebd2,DGEBD2)(&i_2, &i_1, &a[i_ + i_ * a_dim1], lda, &d__[i_], &e[i_], &
112 tauq[i_], &taup[i_], &work[1], &iinfo);