Fixing copyright issues and code contributors
[alexxy/gromacs.git] / src / gmxlib / gmx_lapack / slae2.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 <math.h>
36 #include "gmx_lapack.h"
37
38
39 void
40 F77_FUNC(slae2,SLAE2)(float *a, 
41        float *b,
42        float *c__, 
43        float *rt1, 
44        float *rt2)
45 {
46     float d__1;
47     float ab, df, tb, sm, rt, adf, acmn, acmx;
48
49
50     sm = *a + *c__;
51     df = *a - *c__;
52     adf = fabs(df);
53     tb = *b + *b;
54     ab = fabs(tb);
55     if (fabs(*a) > fabs(*c__)) {
56         acmx = *a;
57         acmn = *c__;
58     } else {
59         acmx = *c__;
60         acmn = *a;
61     }
62     if (adf > ab) {
63         d__1 = ab / adf;
64         rt = adf * sqrt(d__1 * d__1 + 1.);
65     } else if (adf < ab) {
66         d__1 = adf / ab;
67         rt = ab * sqrt(d__1 * d__1 + 1.);
68     } else {
69
70         rt = ab * sqrt(2.);
71     }
72     if (sm < 0.) {
73         *rt1 = (sm - rt) * .5;
74         *rt2 = acmx / *rt1 * acmn - *b / *rt1 * *b;
75     } else if (sm > 0.) {
76         *rt1 = (sm + rt) * .5;
77         *rt2 = acmx / *rt1 * acmn - *b / *rt1 * *b;
78     } else {
79         *rt1 = rt * .5;
80         *rt2 = rt * -.5;
81     }
82     return;
83
84 }
85
86