2 #include "../gmx_blas.h"
3 #include "../gmx_lapack.h"
4 #include "lapack_limits.h"
6 #include "types/simple.h"
9 F77_FUNC(dlasq1,DLASQ1)(int *n,
17 double minval,safemin;
22 minval = GMX_DOUBLE_MIN;
23 safemin = minval*(1.0+GMX_DOUBLE_EPS);
37 d[*n-1] = fabs(d[*n-1]);
39 if(fabs(sigmx)<GMX_DOUBLE_MIN) {
40 F77_FUNC(dlasrt,DLASRT)("D",n,d,&iinfo);
49 /* Copy d and e into work (z format) and scale.
50 * Squaring input data makes scaling by a power of the
53 scale = sqrt(eps/safemin);
56 F77_FUNC(dcopy,DCOPY)(n,d,&i,work,&j);
58 F77_FUNC(dcopy,DCOPY)(&k,e,&i,work+1,&j);
62 F77_FUNC(dlascl,DLASCL)("G",&i,&i,&sigmx,&scale,&j,&k,work,&j,&iinfo);
65 /* Compute q and e elements */
66 for(i=0;i<2*(*n)-1;i++)
67 work[i] = work[i]*work[i];
71 F77_FUNC(dlasq2,DLASQ2)(n,work,info);
78 F77_FUNC(dlascl,DLASCL)("G",&j,&j,&scale,&sigmx,n,&k,d,n,&iinfo);