84adb4d4e9d09bd4d283e0b6322b351acf100640
[alexxy/gromacs.git] / src / gmxlib / gmx_lapack / dgeqr2.c
1 #include "gmx_lapack.h"
2
3
4 void
5 F77_FUNC(dgeqr2,DGEQR2)(int *m,
6         int *n,
7         double *a,
8         int *lda,
9         double *tau,
10         double *work,
11         int *info)
12 {
13   int k = (*m < *n) ? *m : *n;
14   int i,i1,i2,i3;
15   double aii;
16
17   *info = 0;
18   
19   for(i=0;i<k;i++) {
20     i1 = *m - i;
21     i2 = ( (i+1) < (*m-1) ) ? (i+1) : (*m-1);
22     i3 = 1;
23     F77_FUNC(dlarfg,DLARFG)(&i1,&(a[i*(*lda)+i]),&(a[i*(*lda)+i2]),&i3,&(tau[i]));
24     if(i<(*n-1)) {
25       aii = a[i*(*lda)+i];
26       a[i*(*lda)+i] = 1.0;
27       i2 = *n - i - 1;
28       F77_FUNC(dlarf,DLARF)("L",&i1,&i2,&(a[i*(*lda)+i]),&i3,&(tau[i]),
29              &(a[(i+1)*(*lda)+i]),lda,work);
30       a[i*(*lda)+i] = aii;
31     }
32   }
33   return;
34 }