~ubuntu-branches/ubuntu/trusty/nwchem/trusty-proposed

« back to all changes in this revision

Viewing changes to src/lapack/double/zlatrd.f

  • Committer: Package Import Robot
  • Author(s): Michael Banck, Daniel Leidert, Andreas Tille, Michael Banck
  • Date: 2013-07-04 12:14:55 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20130704121455-5tvsx2qabor3nrui
Tags: 6.3-1
* New upstream release.
* Fixes anisotropic properties (Closes: #696361).
* New features include:
  + Multi-reference coupled cluster (MRCC) approaches
  + Hybrid DFT calculations with short-range HF 
  + New density-functionals including Minnesota (M08, M11) and HSE hybrid
    functionals
  + X-ray absorption spectroscopy (XAS) with TDDFT
  + Analytical gradients for the COSMO solvation model
  + Transition densities from TDDFT 
  + DFT+U and Electron-Transfer (ET) methods for plane wave calculations
  + Exploitation of space group symmetry in plane wave geometry optimizations
  + Local density of states (LDOS) collective variable added to Metadynamics
  + Various new XC functionals added for plane wave calculations, including
    hybrid and range-corrected ones
  + Electric field gradients with relativistic corrections 
  + Nudged Elastic Band optimization method
  + Updated basis sets and ECPs 

[ Daniel Leidert ]
* debian/watch: Fixed.

[ Andreas Tille ]
* debian/upstream: References

[ Michael Banck ]
* debian/upstream (Name): New field.
* debian/patches/02_makefile_flags.patch: Refreshed.
* debian/patches/06_statfs_kfreebsd.patch: Likewise.
* debian/patches/07_ga_target_force_linux.patch: Likewise.
* debian/patches/05_avoid_inline_assembler.patch: Removed, no longer needed.
* debian/patches/09_backported_6.1.1_fixes.patch: Likewise.
* debian/control (Build-Depends): Added gfortran-4.7 and gcc-4.7.
* debian/patches/10_force_gcc-4.7.patch: New patch, explicitly sets
  gfortran-4.7 and gcc-4.7, fixes test suite hang with gcc-4.8 (Closes:
  #701328, #713262).
* debian/testsuite: Added tests for COSMO analytical gradients and MRCC.
* debian/rules (MRCC_METHODS): New variable, required to enable MRCC methods.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
*> \brief \b ZLATRD reduces the first nb rows and columns of a symmetric/Hermitian matrix A to real tridiagonal form by an unitary similarity transformation.
 
2
*
 
3
*  =========== DOCUMENTATION ===========
 
4
*
 
5
* Online html documentation available at 
 
6
*            http://www.netlib.org/lapack/explore-html/ 
 
7
*
 
8
*> \htmlonly
 
9
*> Download ZLATRD + dependencies 
 
10
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlatrd.f"> 
 
11
*> [TGZ]</a> 
 
12
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlatrd.f"> 
 
13
*> [ZIP]</a> 
 
14
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatrd.f"> 
 
15
*> [TXT]</a>
 
16
*> \endhtmlonly 
 
17
*
 
18
*  Definition:
 
19
*  ===========
 
20
*
 
21
*       SUBROUTINE ZLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
 
22
 
23
*       .. Scalar Arguments ..
 
24
*       CHARACTER          UPLO
 
25
*       INTEGER            LDA, LDW, N, NB
 
26
*       ..
 
27
*       .. Array Arguments ..
 
28
*       DOUBLE PRECISION   E( * )
 
29
*       COMPLEX*16         A( LDA, * ), TAU( * ), W( LDW, * )
 
30
*       ..
 
31
*  
 
32
*
 
33
*> \par Purpose:
 
34
*  =============
 
35
*>
 
36
*> \verbatim
 
37
*>
 
38
*> ZLATRD reduces NB rows and columns of a complex Hermitian matrix A to
 
39
*> Hermitian tridiagonal form by a unitary similarity
 
40
*> transformation Q**H * A * Q, and returns the matrices V and W which are
 
41
*> needed to apply the transformation to the unreduced part of A.
 
42
*>
 
43
*> If UPLO = 'U', ZLATRD reduces the last NB rows and columns of a
 
44
*> matrix, of which the upper triangle is supplied;
 
45
*> if UPLO = 'L', ZLATRD reduces the first NB rows and columns of a
 
46
*> matrix, of which the lower triangle is supplied.
 
47
*>
 
48
*> This is an auxiliary routine called by ZHETRD.
 
49
*> \endverbatim
 
50
*
 
51
*  Arguments:
 
52
*  ==========
 
53
*
 
54
*> \param[in] UPLO
 
55
*> \verbatim
 
56
*>          UPLO is CHARACTER*1
 
57
*>          Specifies whether the upper or lower triangular part of the
 
58
*>          Hermitian matrix A is stored:
 
59
*>          = 'U': Upper triangular
 
60
*>          = 'L': Lower triangular
 
61
*> \endverbatim
 
62
*>
 
63
*> \param[in] N
 
64
*> \verbatim
 
65
*>          N is INTEGER
 
66
*>          The order of the matrix A.
 
67
*> \endverbatim
 
68
*>
 
69
*> \param[in] NB
 
70
*> \verbatim
 
71
*>          NB is INTEGER
 
72
*>          The number of rows and columns to be reduced.
 
73
*> \endverbatim
 
74
*>
 
75
*> \param[in,out] A
 
76
*> \verbatim
 
77
*>          A is COMPLEX*16 array, dimension (LDA,N)
 
78
*>          On entry, the Hermitian matrix A.  If UPLO = 'U', the leading
 
79
*>          n-by-n upper triangular part of A contains the upper
 
80
*>          triangular part of the matrix A, and the strictly lower
 
81
*>          triangular part of A is not referenced.  If UPLO = 'L', the
 
82
*>          leading n-by-n lower triangular part of A contains the lower
 
83
*>          triangular part of the matrix A, and the strictly upper
 
84
*>          triangular part of A is not referenced.
 
85
*>          On exit:
 
86
*>          if UPLO = 'U', the last NB columns have been reduced to
 
87
*>            tridiagonal form, with the diagonal elements overwriting
 
88
*>            the diagonal elements of A; the elements above the diagonal
 
89
*>            with the array TAU, represent the unitary matrix Q as a
 
90
*>            product of elementary reflectors;
 
91
*>          if UPLO = 'L', the first NB columns have been reduced to
 
92
*>            tridiagonal form, with the diagonal elements overwriting
 
93
*>            the diagonal elements of A; the elements below the diagonal
 
94
*>            with the array TAU, represent the  unitary matrix Q as a
 
95
*>            product of elementary reflectors.
 
96
*>          See Further Details.
 
97
*> \endverbatim
 
98
*>
 
99
*> \param[in] LDA
 
100
*> \verbatim
 
101
*>          LDA is INTEGER
 
102
*>          The leading dimension of the array A.  LDA >= max(1,N).
 
103
*> \endverbatim
 
104
*>
 
105
*> \param[out] E
 
106
*> \verbatim
 
107
*>          E is DOUBLE PRECISION array, dimension (N-1)
 
108
*>          If UPLO = 'U', E(n-nb:n-1) contains the superdiagonal
 
109
*>          elements of the last NB columns of the reduced matrix;
 
110
*>          if UPLO = 'L', E(1:nb) contains the subdiagonal elements of
 
111
*>          the first NB columns of the reduced matrix.
 
112
*> \endverbatim
 
113
*>
 
114
*> \param[out] TAU
 
115
*> \verbatim
 
116
*>          TAU is COMPLEX*16 array, dimension (N-1)
 
117
*>          The scalar factors of the elementary reflectors, stored in
 
118
*>          TAU(n-nb:n-1) if UPLO = 'U', and in TAU(1:nb) if UPLO = 'L'.
 
119
*>          See Further Details.
 
120
*> \endverbatim
 
121
*>
 
122
*> \param[out] W
 
123
*> \verbatim
 
124
*>          W is COMPLEX*16 array, dimension (LDW,NB)
 
125
*>          The n-by-nb matrix W required to update the unreduced part
 
126
*>          of A.
 
127
*> \endverbatim
 
128
*>
 
129
*> \param[in] LDW
 
130
*> \verbatim
 
131
*>          LDW is INTEGER
 
132
*>          The leading dimension of the array W. LDW >= max(1,N).
 
133
*> \endverbatim
 
134
*
 
135
*  Authors:
 
136
*  ========
 
137
*
 
138
*> \author Univ. of Tennessee 
 
139
*> \author Univ. of California Berkeley 
 
140
*> \author Univ. of Colorado Denver 
 
141
*> \author NAG Ltd. 
 
142
*
 
143
*> \date September 2012
 
144
*
 
145
*> \ingroup complex16OTHERauxiliary
 
146
*
 
147
*> \par Further Details:
 
148
*  =====================
 
149
*>
 
150
*> \verbatim
 
151
*>
 
152
*>  If UPLO = 'U', the matrix Q is represented as a product of elementary
 
153
*>  reflectors
 
154
*>
 
155
*>     Q = H(n) H(n-1) . . . H(n-nb+1).
 
156
*>
 
157
*>  Each H(i) has the form
 
158
*>
 
159
*>     H(i) = I - tau * v * v**H
 
160
*>
 
161
*>  where tau is a complex scalar, and v is a complex vector with
 
162
*>  v(i:n) = 0 and v(i-1) = 1; v(1:i-1) is stored on exit in A(1:i-1,i),
 
163
*>  and tau in TAU(i-1).
 
164
*>
 
165
*>  If UPLO = 'L', the matrix Q is represented as a product of elementary
 
166
*>  reflectors
 
167
*>
 
168
*>     Q = H(1) H(2) . . . H(nb).
 
169
*>
 
170
*>  Each H(i) has the form
 
171
*>
 
172
*>     H(i) = I - tau * v * v**H
 
173
*>
 
174
*>  where tau is a complex scalar, and v is a complex vector with
 
175
*>  v(1:i) = 0 and v(i+1) = 1; v(i+1:n) is stored on exit in A(i+1:n,i),
 
176
*>  and tau in TAU(i).
 
177
*>
 
178
*>  The elements of the vectors v together form the n-by-nb matrix V
 
179
*>  which is needed, with W, to apply the transformation to the unreduced
 
180
*>  part of the matrix, using a Hermitian rank-2k update of the form:
 
181
*>  A := A - V*W**H - W*V**H.
 
182
*>
 
183
*>  The contents of A on exit are illustrated by the following examples
 
184
*>  with n = 5 and nb = 2:
 
185
*>
 
186
*>  if UPLO = 'U':                       if UPLO = 'L':
 
187
*>
 
188
*>    (  a   a   a   v4  v5 )              (  d                  )
 
189
*>    (      a   a   v4  v5 )              (  1   d              )
 
190
*>    (          a   1   v5 )              (  v1  1   a          )
 
191
*>    (              d   1  )              (  v1  v2  a   a      )
 
192
*>    (                  d  )              (  v1  v2  a   a   a  )
 
193
*>
 
194
*>  where d denotes a diagonal element of the reduced matrix, a denotes
 
195
*>  an element of the original matrix that is unchanged, and vi denotes
 
196
*>  an element of the vector defining H(i).
 
197
*> \endverbatim
 
198
*>
 
199
*  =====================================================================
1
200
      SUBROUTINE ZLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
2
201
*
3
 
*  -- LAPACK auxiliary routine (version 2.0) --
4
 
*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
5
 
*     Courant Institute, Argonne National Lab, and Rice University
6
 
*     September 30, 1994
 
202
*  -- LAPACK auxiliary routine (version 3.4.2) --
 
203
*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 
204
*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 
205
*     September 2012
7
206
*
8
207
*     .. Scalar Arguments ..
9
208
      CHARACTER          UPLO
14
213
      COMPLEX*16         A( LDA, * ), TAU( * ), W( LDW, * )
15
214
*     ..
16
215
*
17
 
c
18
 
* $Id: zlatrd.f 19697 2010-10-29 16:57:34Z d3y133 $
19
 
c
20
 
*  Purpose
21
 
*  =======
22
 
*
23
 
*  ZLATRD reduces NB rows and columns of a complex Hermitian matrix A to
24
 
*  Hermitian tridiagonal form by a unitary similarity
25
 
*  transformation Q' * A * Q, and returns the matrices V and W which are
26
 
*  needed to apply the transformation to the unreduced part of A.
27
 
*
28
 
*  If UPLO = 'U', ZLATRD reduces the last NB rows and columns of a
29
 
*  matrix, of which the upper triangle is supplied;
30
 
*  if UPLO = 'L', ZLATRD reduces the first NB rows and columns of a
31
 
*  matrix, of which the lower triangle is supplied.
32
 
*
33
 
*  This is an auxiliary routine called by ZHETRD.
34
 
*
35
 
*  Arguments
36
 
*  =========
37
 
*
38
 
*  UPLO    (input) CHARACTER
39
 
*          Specifies whether the upper or lower triangular part of the
40
 
*          Hermitian matrix A is stored:
41
 
*          = 'U': Upper triangular
42
 
*          = 'L': Lower triangular
43
 
*
44
 
*  N       (input) INTEGER
45
 
*          The order of the matrix A.
46
 
*
47
 
*  NB      (input) INTEGER
48
 
*          The number of rows and columns to be reduced.
49
 
*
50
 
*  A       (input/output) COMPLEX*16 array, dimension (LDA,N)
51
 
*          On entry, the Hermitian matrix A.  If UPLO = 'U', the leading
52
 
*          n-by-n upper triangular part of A contains the upper
53
 
*          triangular part of the matrix A, and the strictly lower
54
 
*          triangular part of A is not referenced.  If UPLO = 'L', the
55
 
*          leading n-by-n lower triangular part of A contains the lower
56
 
*          triangular part of the matrix A, and the strictly upper
57
 
*          triangular part of A is not referenced.
58
 
*          On exit:
59
 
*          if UPLO = 'U', the last NB columns have been reduced to
60
 
*            tridiagonal form, with the diagonal elements overwriting
61
 
*            the diagonal elements of A; the elements above the diagonal
62
 
*            with the array TAU, represent the unitary matrix Q as a
63
 
*            product of elementary reflectors;
64
 
*          if UPLO = 'L', the first NB columns have been reduced to
65
 
*            tridiagonal form, with the diagonal elements overwriting
66
 
*            the diagonal elements of A; the elements below the diagonal
67
 
*            with the array TAU, represent the  unitary matrix Q as a
68
 
*            product of elementary reflectors.
69
 
*          See Further Details.
70
 
*
71
 
*  LDA     (input) INTEGER
72
 
*          The leading dimension of the array A.  LDA >= max(1,N).
73
 
*
74
 
*  E       (output) DOUBLE PRECISION array, dimension (N-1)
75
 
*          If UPLO = 'U', E(n-nb:n-1) contains the superdiagonal
76
 
*          elements of the last NB columns of the reduced matrix;
77
 
*          if UPLO = 'L', E(1:nb) contains the subdiagonal elements of
78
 
*          the first NB columns of the reduced matrix.
79
 
*
80
 
*  TAU     (output) COMPLEX*16 array, dimension (N-1)
81
 
*          The scalar factors of the elementary reflectors, stored in
82
 
*          TAU(n-nb:n-1) if UPLO = 'U', and in TAU(1:nb) if UPLO = 'L'.
83
 
*          See Further Details.
84
 
*
85
 
*  W       (output) COMPLEX*16 array, dimension (LDW,NB)
86
 
*          The n-by-nb matrix W required to update the unreduced part
87
 
*          of A.
88
 
*
89
 
*  LDW     (input) INTEGER
90
 
*          The leading dimension of the array W. LDW >= max(1,N).
91
 
*
92
 
*  Further Details
93
 
*  ===============
94
 
*
95
 
*  If UPLO = 'U', the matrix Q is represented as a product of elementary
96
 
*  reflectors
97
 
*
98
 
*     Q = H(n) H(n-1) . . . H(n-nb+1).
99
 
*
100
 
*  Each H(i) has the form
101
 
*
102
 
*     H(i) = I - tau * v * v'
103
 
*
104
 
*  where tau is a complex scalar, and v is a complex vector with
105
 
*  v(i:n) = 0 and v(i-1) = 1; v(1:i-1) is stored on exit in A(1:i-1,i),
106
 
*  and tau in TAU(i-1).
107
 
*
108
 
*  If UPLO = 'L', the matrix Q is represented as a product of elementary
109
 
*  reflectors
110
 
*
111
 
*     Q = H(1) H(2) . . . H(nb).
112
 
*
113
 
*  Each H(i) has the form
114
 
*
115
 
*     H(i) = I - tau * v * v'
116
 
*
117
 
*  where tau is a complex scalar, and v is a complex vector with
118
 
*  v(1:i) = 0 and v(i+1) = 1; v(i+1:n) is stored on exit in A(i+1:n,i),
119
 
*  and tau in TAU(i).
120
 
*
121
 
*  The elements of the vectors v together form the n-by-nb matrix V
122
 
*  which is needed, with W, to apply the transformation to the unreduced
123
 
*  part of the matrix, using a Hermitian rank-2k update of the form:
124
 
*  A := A - V*W' - W*V'.
125
 
*
126
 
*  The contents of A on exit are illustrated by the following examples
127
 
*  with n = 5 and nb = 2:
128
 
*
129
 
*  if UPLO = 'U':                       if UPLO = 'L':
130
 
*
131
 
*    (  a   a   a   v4  v5 )              (  d                  )
132
 
*    (      a   a   v4  v5 )              (  1   d              )
133
 
*    (          a   1   v5 )              (  v1  1   a          )
134
 
*    (              d   1  )              (  v1  v2  a   a      )
135
 
*    (                  d  )              (  v1  v2  a   a   a  )
136
 
*
137
 
*  where d denotes a diagonal element of the reduced matrix, a denotes
138
 
*  an element of the original matrix that is unchanged, and vi denotes
139
 
*  an element of the vector defining H(i).
140
 
*
141
216
*  =====================================================================
142
217
*
143
218
*     .. Parameters ..