Fixing copyright issues and code contributors
[alexxy/gromacs.git] / src / gmxlib / gmx_blas / daxpy.c
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 2012,2013, by the GROMACS development team, led by
5  * David van der Spoel, Berk Hess, Erik Lindahl, and including many
6  * others, as listed in the AUTHORS file in the top-level source
7  * directory and at http://www.gromacs.org.
8  *
9  * GROMACS is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * as published by the Free Software Foundation; either version 2.1
12  * of the License, or (at your option) any later version.
13  *
14  * GROMACS is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with GROMACS; if not, see
21  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
23  *
24  * If you want to redistribute modifications to GROMACS, please
25  * consider that scientific software is very special. Version
26  * control is crucial - bugs must be traceable. We will be happy to
27  * consider code for inclusion in the official distribution, but
28  * derived work must not be called official GROMACS. Details are found
29  * in the README & COPYING files - if they are missing, get the
30  * official version at http://www.gromacs.org.
31  *
32  * To help us fund GROMACS development, we humbly ask that you cite
33  * the research papers on the package. Check out http://www.gromacs.org.
34  */
35 #include "gmx_blas.h"
36
37
38 void
39 F77_FUNC(daxpy,DAXPY)(int   *   n_arg,
40                       double *   da_arg,
41                       double *   dx,
42                       int *      incx_arg,
43                       double *   dy,
44                       int *      incy_arg)
45 {
46   int i,ix,iy;
47   int n=*n_arg;
48   double da=*da_arg;
49   int incx = *incx_arg;
50   int incy = *incy_arg;
51
52   if (n<=0)
53     return;
54
55   if(incx!=1 || incy!=1) {
56     ix = 0;
57     iy = 0;
58     if(incx<0)
59       ix = (1-n)*incx;
60     if(incy<0)
61       iy = (1-n)*incy;
62     
63     for(i=0;i<n;i++,ix+=incx,iy+=incy) 
64       dy[iy] += da*dx[ix];
65
66     return;
67
68   } else {
69
70     /* unroll */
71     
72     for(i=0;i<(n-4);i+=4) {
73       dy[i]   += da*dx[i];
74       dy[i+1] += da*dx[i+1];
75       dy[i+2] += da*dx[i+2];
76       dy[i+3] += da*dx[i+3];
77     }
78     /* continue with current value of i */
79     for(;i<n;i++)
80       dy[i]   += da*dx[i];
81   }
82 }