3 #include "gmx_lapack.h"
6 F77_FUNC(dlasd8,DLASD8)(int *icompq,
19 int difr_dim1, difr_offset, i__1, i__2;
28 double diflj, difrj, dsigj;
34 /* avoid warnings on high gcc optimization levels */
43 difr_offset = 1 + difr_dim1;
54 d__[1] = fabs(z__[1]);
58 difr[(difr_dim1 << 1) + 1] = 1.;
64 for (i__ = 1; i__ <= i__1; ++i__) {
67 /* force store and reload from memory */
68 d__2 = (*p1) + (*p2) - dsigma[i__];
77 rho = F77_FUNC(dnrm2,DNRM2)(k, &z__[1], &c__1);
78 F77_FUNC(dlascl,DLASCL)("G", &c__0, &c__0, &rho, &one, k, &c__1, &z__[1], k, info);
81 F77_FUNC(dlaset,DLASET)("A", k, &c__1, &one, &one, &work[iwk3], k);
84 for (j = 1; j <= i__1; ++j) {
85 F77_FUNC(dlasd4,DLASD4)(k, &j, &dsigma[1], &z__[1], &work[iwk1], &rho, &d__[j], &work[
91 work[iwk3i + j] = work[iwk3i + j] * work[j] * work[iwk2i + j];
93 difr[j + difr_dim1] = -work[j + 1];
95 for (i__ = 1; i__ <= i__2; ++i__) {
96 work[iwk3i + i__] = work[iwk3i + i__] * work[i__] * work[iwk2i +
97 i__] / (dsigma[i__] - dsigma[j]) / (dsigma[i__] + dsigma[
101 for (i__ = j + 1; i__ <= i__2; ++i__) {
102 work[iwk3i + i__] = work[iwk3i + i__] * work[i__] * work[iwk2i +
103 i__] / (dsigma[i__] - dsigma[j]) / (dsigma[i__] + dsigma[
109 for (i__ = 1; i__ <= i__1; ++i__) {
110 d__2 = sqrt(fabs(work[iwk3i + i__]));
111 z__[i__] = (z__[i__] > 0) ? d__2 : -d__2;
115 for (j = 1; j <= i__1; ++j) {
120 difrj = -difr[j + difr_dim1];
121 dsigjp = -dsigma[j + 1];
123 work[j] = -z__[j] / diflj / (dsigma[j] + dj);
125 for (i__ = 1; i__ <= i__2; ++i__) {
128 /* force store and reload from memory */
129 t1 = (*p1) + (*p2) - diflj;
130 work[i__] = z__[i__] / t1 / ( dsigma[i__] + dj);
133 for (i__ = j + 1; i__ <= i__2; ++i__) {
136 /* force store and reload from memory */
137 t1 = (*p1) + (*p2) - difrj;
138 work[i__] = z__[i__] / t1 / (dsigma[i__] + dj);
140 temp = F77_FUNC(dnrm2,DNRM2)(k, &work[1], &c__1);
141 work[iwk2i + j] = F77_FUNC(ddot,DDOT)(k, &work[1], &c__1, &vf[1], &c__1) / temp;
142 work[iwk3i + j] = F77_FUNC(ddot,DDOT)(k, &work[1], &c__1, &vl[1], &c__1) / temp;
144 difr[j + (difr_dim1 << 1)] = temp;
148 F77_FUNC(dcopy,DCOPY)(k, &work[iwk2], &c__1, &vf[1], &c__1);
149 F77_FUNC(dcopy,DCOPY)(k, &work[iwk3], &c__1, &vl[1], &c__1);