Split g96 I/O routines from confio.cpp
[gromacs.git] / src / gromacs / linearalgebra / gmx_blas / sger.c
blob71947e7222fc4b0e781335502d1969ad7c22304c
1 #include <math.h>
3 #include "gromacs/utility/real.h"
4 #include "../gmx_blas.h"
6 void
7 F77_FUNC(sger,SGER)(int *m__,
8 int *n__,
9 float *alpha__,
10 float *x,
11 int *incx__,
12 float *y,
13 int *incy__,
14 float *a,
15 int *lda__)
17 int ix,kx,jy;
18 int i,j;
19 float temp;
21 int m = *m__;
22 int n = *n__;
23 int incx = *incx__;
24 int incy = *incy__;
25 int lda = *lda__;
26 float alpha = *alpha__;
28 if(m<=0 || n<=0 || fabs(alpha)<GMX_FLOAT_MIN)
29 return;
31 if(incy>0)
32 jy = 0;
33 else
34 jy = incy * (1 - n);
36 if(incx==1) {
37 for(j=0;j<n;j++,jy+=incy)
38 if(fabs(y[jy])>GMX_FLOAT_MIN) {
39 temp = alpha * y[jy];
40 for(i=0;i<m;i++)
41 a[j*(lda)+i] += temp*x[i];
43 } else {
44 /* non-unit incx */
45 if(incx>0)
46 kx = 0;
47 else
48 kx = incx * (1 - m);
50 for(j=0;j<n;j++,jy+=incy) {
51 if(fabs(y[jy])>GMX_FLOAT_MIN) {
52 temp = alpha * y[jy];
53 ix = kx;
54 for(i=0;i<m;i++,ix+=incx)
55 a[j*(lda)+i] += temp*x[ix];
59 return;