ergo
template_blas_rot.h
Go to the documentation of this file.
1
/* Ergo, version 3.8, a program for linear scaling electronic structure
2
* calculations.
3
* Copyright (C) 2019 Elias Rudberg, Emanuel H. Rubensson, Pawel Salek,
4
* and Anastasia Kruchinina.
5
*
6
* This program is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*
19
* Primary academic reference:
20
* Ergo: An open-source program for linear-scaling electronic structure
21
* calculations,
22
* Elias Rudberg, Emanuel H. Rubensson, Pawel Salek, and Anastasia
23
* Kruchinina,
24
* SoftwareX 7, 107 (2018),
25
* <http://dx.doi.org/10.1016/j.softx.2018.03.005>
26
*
27
* For further information about Ergo, see <http://www.ergoscf.org>.
28
*/
29
30
/* This file belongs to the template_lapack part of the Ergo source
31
* code. The source files in the template_lapack directory are modified
32
* versions of files originally distributed as CLAPACK, see the
33
* Copyright/license notice in the file template_lapack/COPYING.
34
*/
35
36
37
#ifndef TEMPLATE_BLAS_ROT_HEADER
38
#define TEMPLATE_BLAS_ROT_HEADER
39
40
41
template
<
class
Treal>
42
int
template_blas_rot
(
const
integer
*n, Treal *dx,
const
integer
*incx,
43
Treal *dy,
const
integer
*incy,
const
Treal *c__,
const
Treal *s)
44
{
45
/* System generated locals */
46
integer
i__1;
47
/* Local variables */
48
integer
i__;
49
Treal dtemp;
50
integer
ix, iy;
51
/* applies a plane rotation.
52
jack dongarra, linpack, 3/11/78.
53
modified 12/3/93, array(1) declarations changed to array(*)
54
Parameter adjustments */
55
--dy;
56
--dx;
57
/* Function Body */
58
if
(*n <= 0) {
59
return
0;
60
}
61
if
(*incx == 1 && *incy == 1) {
62
goto
L20;
63
}
64
/* code for unequal increments or equal increments not equal
65
to 1 */
66
ix = 1;
67
iy = 1;
68
if
(*incx < 0) {
69
ix = (-(*n) + 1) * *incx + 1;
70
}
71
if
(*incy < 0) {
72
iy = (-(*n) + 1) * *incy + 1;
73
}
74
i__1 = *n;
75
for
(i__ = 1; i__ <= i__1; ++i__) {
76
dtemp = *c__ * dx[ix] + *s * dy[iy];
77
dy[iy] = *c__ * dy[iy] - *s * dx[ix];
78
dx[ix] = dtemp;
79
ix += *incx;
80
iy += *incy;
81
/* L10: */
82
}
83
return
0;
84
/* code for both increments equal to 1 */
85
L20:
86
i__1 = *n;
87
for
(i__ = 1; i__ <= i__1; ++i__) {
88
dtemp = *c__ * dx[i__] + *s * dy[i__];
89
dy[i__] = *c__ * dy[i__] - *s * dx[i__];
90
dx[i__] = dtemp;
91
/* L30: */
92
}
93
return
0;
94
}
/* drot_ */
95
96
#endif
template_blas_rot
int template_blas_rot(const integer *n, Treal *dx, const integer *incx, Treal *dy, const integer *incy, const Treal *c__, const Treal *s)
Definition:
template_blas_rot.h:42
integer
int integer
Definition:
template_blas_common.h:40
source
matrix
template_lapack
blas
template_blas_rot.h
Generated on Sun Aug 16 2020 00:00:00 for ergo by
1.8.18