4 #include "gromacs/utility/real.h"
6 #include "../gmx_blas.h"
9 F77_FUNC(dsyr2,DSYR2)(const char * uplo,
19 int kx,ky,ix,iy,jx,jy,j,i;
21 const char ch=toupper(*uplo);
27 float alpha = *alpha__;
30 if(n<=0 || fabs(alpha)<GMX_DOUBLE_MIN || incx==0 || incy==0 ||
31 (ch != 'U' && ch != 'L'))
34 jx = jy = kx = ky = 0;
36 /* init start points for non-unit increments */
37 if(incx!=1 || incy!=1) {
41 kx = 1 - (n - 1)*(incx);
45 ky = 1 - (n - 1)*(incy);
52 /* Data in upper part of A */
53 if(incx==1 && incy==1) {
54 /* Unit increments for both x and y */
56 if( fabs(x[j-1])>GMX_DOUBLE_MIN || fabs(y[j-1])>GMX_DOUBLE_MIN ) {
57 temp1 = alpha * y[j-1];
58 temp2 = alpha * x[j-1];
60 a[(j-1)*(lda)+(i-1)] += x[i-1]*temp1 + y[i-1]*temp2;
65 /* non-unit increments */
68 if( fabs(x[jx-1])>GMX_DOUBLE_MIN || fabs(y[jy-1])>GMX_DOUBLE_MIN ) {
69 temp1 = alpha * y[jy-1];
70 temp2 = alpha * x[jx-1];
74 a[(j-1)*(lda)+(i-1)] += x[ix-1]*temp1 + y[iy-1]*temp2;
84 /* Data in lower part of A */
85 if(incx==1 && incy==1) {
86 /* Unit increments for both x and y */
88 if( fabs(x[j-1])>GMX_DOUBLE_MIN || fabs(y[j-1])>GMX_DOUBLE_MIN ) {
89 temp1 = alpha * y[j-1];
90 temp2 = alpha * x[j-1];
92 a[(j-1)*(lda)+(i-1)] += x[i-1]*temp1 + y[i-1]*temp2;
97 /* non-unit increments */
100 if( fabs(x[jx-1])>GMX_DOUBLE_MIN || fabs(y[jy-1])>GMX_DOUBLE_MIN ) {
101 temp1 = alpha * y[jy-1];
102 temp2 = alpha * x[jx-1];
106 a[(j-1)*(lda)+(i-1)] += x[ix-1]*temp1 + y[iy-1]*temp2;