ergo
Main Page
Namespaces
Classes
Files
File List
File Members
template_lapack_ladiv.h
Go to the documentation of this file.
1
/* Ergo, version 3.2, a program for linear scaling electronic structure
2
* calculations.
3
* Copyright (C) 2012 Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek.
4
*
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
*
18
* Primary academic reference:
19
* KohnâSham Density Functional Theory Electronic Structure Calculations
20
* with Linearly Scaling Computational Time and Memory Usage,
21
* Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek,
22
* J. Chem. Theory Comput. 7, 340 (2011),
23
* <http://dx.doi.org/10.1021/ct100611z>
24
*
25
* For further information about Ergo, see <http://www.ergoscf.org>.
26
*/
27
28
/* This file belongs to the template_lapack part of the Ergo source
29
* code. The source files in the template_lapack directory are modified
30
* versions of files originally distributed as CLAPACK, see the
31
* Copyright/license notice in the file template_lapack/COPYING.
32
*/
33
34
35
#ifndef TEMPLATE_LAPACK_LADIV_HEADER
36
#define TEMPLATE_LAPACK_LADIV_HEADER
37
38
39
template
<
class
Treal>
40
int
template_lapack_ladiv
(
const
Treal *a,
const
Treal *b,
const
Treal *c__,
41
const
Treal *d__, Treal *p, Treal *q)
42
{
43
/* -- LAPACK auxiliary routine (version 3.0) --
44
Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
45
Courant Institute, Argonne National Lab, and Rice University
46
October 31, 1992
47
48
49
Purpose
50
=======
51
52
DLADIV performs complex division in real arithmetic
53
54
a + i*b
55
p + i*q = ---------
56
c + i*d
57
58
The algorithm is due to Robert L. Smith and can be found
59
in D. Knuth, The art of Computer Programming, Vol.2, p.195
60
61
Arguments
62
=========
63
64
A (input) DOUBLE PRECISION
65
B (input) DOUBLE PRECISION
66
C (input) DOUBLE PRECISION
67
D (input) DOUBLE PRECISION
68
The scalars a, b, c, and d in the above expression.
69
70
P (output) DOUBLE PRECISION
71
Q (output) DOUBLE PRECISION
72
The scalars p and q in the above expression.
73
74
===================================================================== */
75
Treal e, f;
76
77
78
79
if
(
absMACRO
(*d__) <
absMACRO
(*c__)) {
80
e = *d__ / *c__;
81
f = *c__ + *d__ * e;
82
*p = (*a + *b * e) / f;
83
*q = (*b - *a * e) / f;
84
}
else
{
85
e = *c__ / *d__;
86
f = *d__ + *c__ * e;
87
*p = (*b + *a * e) / f;
88
*q = (-(*a) + *b * e) / f;
89
}
90
91
return
0;
92
93
/* End of DLADIV */
94
95
}
/* dladiv_ */
96
97
#endif
source
matrix
template_lapack
lapack
template_lapack_ladiv.h
Generated on Wed Nov 21 2012 09:33:43 for ergo by
1.8.1.1