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

« back to all changes in this revision

Viewing changes to src/lapack/double/iparmq.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 IPARMQ
 
2
*
 
3
*  =========== DOCUMENTATION ===========
 
4
*
 
5
* Online html documentation available at 
 
6
*            http://www.netlib.org/lapack/explore-html/ 
 
7
*
 
8
*> \htmlonly
 
9
*> Download IPARMQ + dependencies 
 
10
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/iparmq.f"> 
 
11
*> [TGZ]</a> 
 
12
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/iparmq.f"> 
 
13
*> [ZIP]</a> 
 
14
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/iparmq.f"> 
 
15
*> [TXT]</a>
 
16
*> \endhtmlonly 
 
17
*
 
18
*  Definition:
 
19
*  ===========
 
20
*
 
21
*       INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK )
 
22
 
23
*       .. Scalar Arguments ..
 
24
*       INTEGER            IHI, ILO, ISPEC, LWORK, N
 
25
*       CHARACTER          NAME*( * ), OPTS*( * )
 
26
*  
 
27
*
 
28
*> \par Purpose:
 
29
*  =============
 
30
*>
 
31
*> \verbatim
 
32
*>
 
33
*>      This program sets problem and machine dependent parameters
 
34
*>      useful for xHSEQR and its subroutines. It is called whenever 
 
35
*>      ILAENV is called with 12 <= ISPEC <= 16
 
36
*> \endverbatim
 
37
*
 
38
*  Arguments:
 
39
*  ==========
 
40
*
 
41
*> \param[in] ISPEC
 
42
*> \verbatim
 
43
*>          ISPEC is integer scalar
 
44
*>              ISPEC specifies which tunable parameter IPARMQ should
 
45
*>              return.
 
46
*>
 
47
*>              ISPEC=12: (INMIN)  Matrices of order nmin or less
 
48
*>                        are sent directly to xLAHQR, the implicit
 
49
*>                        double shift QR algorithm.  NMIN must be
 
50
*>                        at least 11.
 
51
*>
 
52
*>              ISPEC=13: (INWIN)  Size of the deflation window.
 
53
*>                        This is best set greater than or equal to
 
54
*>                        the number of simultaneous shifts NS.
 
55
*>                        Larger matrices benefit from larger deflation
 
56
*>                        windows.
 
57
*>
 
58
*>              ISPEC=14: (INIBL) Determines when to stop nibbling and
 
59
*>                        invest in an (expensive) multi-shift QR sweep.
 
60
*>                        If the aggressive early deflation subroutine
 
61
*>                        finds LD converged eigenvalues from an order
 
62
*>                        NW deflation window and LD.GT.(NW*NIBBLE)/100,
 
63
*>                        then the next QR sweep is skipped and early
 
64
*>                        deflation is applied immediately to the
 
65
*>                        remaining active diagonal block.  Setting
 
66
*>                        IPARMQ(ISPEC=14) = 0 causes TTQRE to skip a
 
67
*>                        multi-shift QR sweep whenever early deflation
 
68
*>                        finds a converged eigenvalue.  Setting
 
69
*>                        IPARMQ(ISPEC=14) greater than or equal to 100
 
70
*>                        prevents TTQRE from skipping a multi-shift
 
71
*>                        QR sweep.
 
72
*>
 
73
*>              ISPEC=15: (NSHFTS) The number of simultaneous shifts in
 
74
*>                        a multi-shift QR iteration.
 
75
*>
 
76
*>              ISPEC=16: (IACC22) IPARMQ is set to 0, 1 or 2 with the
 
77
*>                        following meanings.
 
78
*>                        0:  During the multi-shift QR sweep,
 
79
*>                            xLAQR5 does not accumulate reflections and
 
80
*>                            does not use matrix-matrix multiply to
 
81
*>                            update the far-from-diagonal matrix
 
82
*>                            entries.
 
83
*>                        1:  During the multi-shift QR sweep,
 
84
*>                            xLAQR5 and/or xLAQRaccumulates reflections and uses
 
85
*>                            matrix-matrix multiply to update the
 
86
*>                            far-from-diagonal matrix entries.
 
87
*>                        2:  During the multi-shift QR sweep.
 
88
*>                            xLAQR5 accumulates reflections and takes
 
89
*>                            advantage of 2-by-2 block structure during
 
90
*>                            matrix-matrix multiplies.
 
91
*>                        (If xTRMM is slower than xGEMM, then
 
92
*>                        IPARMQ(ISPEC=16)=1 may be more efficient than
 
93
*>                        IPARMQ(ISPEC=16)=2 despite the greater level of
 
94
*>                        arithmetic work implied by the latter choice.)
 
95
*> \endverbatim
 
96
*>
 
97
*> \param[in] NAME
 
98
*> \verbatim
 
99
*>          NAME is character string
 
100
*>               Name of the calling subroutine
 
101
*> \endverbatim
 
102
*>
 
103
*> \param[in] OPTS
 
104
*> \verbatim
 
105
*>          OPTS is character string
 
106
*>               This is a concatenation of the string arguments to
 
107
*>               TTQRE.
 
108
*> \endverbatim
 
109
*>
 
110
*> \param[in] N
 
111
*> \verbatim
 
112
*>          N is integer scalar
 
113
*>               N is the order of the Hessenberg matrix H.
 
114
*> \endverbatim
 
115
*>
 
116
*> \param[in] ILO
 
117
*> \verbatim
 
118
*>          ILO is INTEGER
 
119
*> \endverbatim
 
120
*>
 
121
*> \param[in] IHI
 
122
*> \verbatim
 
123
*>          IHI is INTEGER
 
124
*>               It is assumed that H is already upper triangular
 
125
*>               in rows and columns 1:ILO-1 and IHI+1:N.
 
126
*> \endverbatim
 
127
*>
 
128
*> \param[in] LWORK
 
129
*> \verbatim
 
130
*>          LWORK is integer scalar
 
131
*>               The amount of workspace available.
 
132
*> \endverbatim
 
133
*
 
134
*  Authors:
 
135
*  ========
 
136
*
 
137
*> \author Univ. of Tennessee 
 
138
*> \author Univ. of California Berkeley 
 
139
*> \author Univ. of Colorado Denver 
 
140
*> \author NAG Ltd. 
 
141
*
 
142
*> \date November 2011
 
143
*
 
144
*> \ingroup auxOTHERauxiliary
 
145
*
 
146
*> \par Further Details:
 
147
*  =====================
 
148
*>
 
149
*> \verbatim
 
150
*>
 
151
*>       Little is known about how best to choose these parameters.
 
152
*>       It is possible to use different values of the parameters
 
153
*>       for each of CHSEQR, DHSEQR, SHSEQR and ZHSEQR.
 
154
*>
 
155
*>       It is probably best to choose different parameters for
 
156
*>       different matrices and different parameters at different
 
157
*>       times during the iteration, but this has not been
 
158
*>       implemented --- yet.
 
159
*>
 
160
*>
 
161
*>       The best choices of most of the parameters depend
 
162
*>       in an ill-understood way on the relative execution
 
163
*>       rate of xLAQR3 and xLAQR5 and on the nature of each
 
164
*>       particular eigenvalue problem.  Experiment may be the
 
165
*>       only practical way to determine which choices are most
 
166
*>       effective.
 
167
*>
 
168
*>       Following is a list of default values supplied by IPARMQ.
 
169
*>       These defaults may be adjusted in order to attain better
 
170
*>       performance in any particular computational environment.
 
171
*>
 
172
*>       IPARMQ(ISPEC=12) The xLAHQR vs xLAQR0 crossover point.
 
173
*>                        Default: 75. (Must be at least 11.)
 
174
*>
 
175
*>       IPARMQ(ISPEC=13) Recommended deflation window size.
 
176
*>                        This depends on ILO, IHI and NS, the
 
177
*>                        number of simultaneous shifts returned
 
178
*>                        by IPARMQ(ISPEC=15).  The default for
 
179
*>                        (IHI-ILO+1).LE.500 is NS.  The default
 
180
*>                        for (IHI-ILO+1).GT.500 is 3*NS/2.
 
181
*>
 
182
*>       IPARMQ(ISPEC=14) Nibble crossover point.  Default: 14.
 
183
*>
 
184
*>       IPARMQ(ISPEC=15) Number of simultaneous shifts, NS.
 
185
*>                        a multi-shift QR iteration.
 
186
*>
 
187
*>                        If IHI-ILO+1 is ...
 
188
*>
 
189
*>                        greater than      ...but less    ... the
 
190
*>                        or equal to ...      than        default is
 
191
*>
 
192
*>                                0               30       NS =   2+
 
193
*>                               30               60       NS =   4+
 
194
*>                               60              150       NS =  10
 
195
*>                              150              590       NS =  **
 
196
*>                              590             3000       NS =  64
 
197
*>                             3000             6000       NS = 128
 
198
*>                             6000             infinity   NS = 256
 
199
*>
 
200
*>                    (+)  By default matrices of this order are
 
201
*>                         passed to the implicit double shift routine
 
202
*>                         xLAHQR.  See IPARMQ(ISPEC=12) above.   These
 
203
*>                         values of NS are used only in case of a rare
 
204
*>                         xLAHQR failure.
 
205
*>
 
206
*>                    (**) The asterisks (**) indicate an ad-hoc
 
207
*>                         function increasing from 10 to 64.
 
208
*>
 
209
*>       IPARMQ(ISPEC=16) Select structured matrix multiply.
 
210
*>                        (See ISPEC=16 above for details.)
 
211
*>                        Default: 3.
 
212
*> \endverbatim
 
213
*>
 
214
*  =====================================================================
 
215
      INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK )
 
216
*
 
217
*  -- LAPACK auxiliary routine (version 3.4.0) --
 
218
*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 
219
*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 
220
*     November 2011
 
221
*
 
222
*     .. Scalar Arguments ..
 
223
      INTEGER            IHI, ILO, ISPEC, LWORK, N
 
224
      CHARACTER          NAME*( * ), OPTS*( * )
 
225
*
 
226
*  ================================================================
 
227
*     .. Parameters ..
 
228
      INTEGER            INMIN, INWIN, INIBL, ISHFTS, IACC22
 
229
      PARAMETER          ( INMIN = 12, INWIN = 13, INIBL = 14,
 
230
     $                   ISHFTS = 15, IACC22 = 16 )
 
231
      INTEGER            NMIN, K22MIN, KACMIN, NIBBLE, KNWSWP
 
232
      PARAMETER          ( NMIN = 75, K22MIN = 14, KACMIN = 14,
 
233
     $                   NIBBLE = 14, KNWSWP = 500 )
 
234
      REAL               TWO
 
235
      PARAMETER          ( TWO = 2.0 )
 
236
*     ..
 
237
*     .. Local Scalars ..
 
238
      INTEGER            NH, NS
 
239
*     ..
 
240
*     .. Intrinsic Functions ..
 
241
      INTRINSIC          LOG, MAX, MOD, NINT, REAL
 
242
*     ..
 
243
*     .. Executable Statements ..
 
244
      IF( ( ISPEC.EQ.ISHFTS ) .OR. ( ISPEC.EQ.INWIN ) .OR.
 
245
     $    ( ISPEC.EQ.IACC22 ) ) THEN
 
246
*
 
247
*        ==== Set the number simultaneous shifts ====
 
248
*
 
249
         NH = IHI - ILO + 1
 
250
         NS = 2
 
251
         IF( NH.GE.30 )
 
252
     $      NS = 4
 
253
         IF( NH.GE.60 )
 
254
     $      NS = 10
 
255
         IF( NH.GE.150 )
 
256
     $      NS = MAX( 10, NH / NINT( LOG( REAL( NH ) ) / LOG( TWO ) ) )
 
257
         IF( NH.GE.590 )
 
258
     $      NS = 64
 
259
         IF( NH.GE.3000 )
 
260
     $      NS = 128
 
261
         IF( NH.GE.6000 )
 
262
     $      NS = 256
 
263
         NS = MAX( 2, NS-MOD( NS, 2 ) )
 
264
      END IF
 
265
*
 
266
      IF( ISPEC.EQ.INMIN ) THEN
 
267
*
 
268
*
 
269
*        ===== Matrices of order smaller than NMIN get sent
 
270
*        .     to xLAHQR, the classic double shift algorithm.
 
271
*        .     This must be at least 11. ====
 
272
*
 
273
         IPARMQ = NMIN
 
274
*
 
275
      ELSE IF( ISPEC.EQ.INIBL ) THEN
 
276
*
 
277
*        ==== INIBL: skip a multi-shift qr iteration and
 
278
*        .    whenever aggressive early deflation finds
 
279
*        .    at least (NIBBLE*(window size)/100) deflations. ====
 
280
*
 
281
         IPARMQ = NIBBLE
 
282
*
 
283
      ELSE IF( ISPEC.EQ.ISHFTS ) THEN
 
284
*
 
285
*        ==== NSHFTS: The number of simultaneous shifts =====
 
286
*
 
287
         IPARMQ = NS
 
288
*
 
289
      ELSE IF( ISPEC.EQ.INWIN ) THEN
 
290
*
 
291
*        ==== NW: deflation window size.  ====
 
292
*
 
293
         IF( NH.LE.KNWSWP ) THEN
 
294
            IPARMQ = NS
 
295
         ELSE
 
296
            IPARMQ = 3*NS / 2
 
297
         END IF
 
298
*
 
299
      ELSE IF( ISPEC.EQ.IACC22 ) THEN
 
300
*
 
301
*        ==== IACC22: Whether to accumulate reflections
 
302
*        .     before updating the far-from-diagonal elements
 
303
*        .     and whether to use 2-by-2 block structure while
 
304
*        .     doing it.  A small amount of work could be saved
 
305
*        .     by making this choice dependent also upon the
 
306
*        .     NH=IHI-ILO+1.
 
307
*
 
308
         IPARMQ = 0
 
309
         IF( NS.GE.KACMIN )
 
310
     $      IPARMQ = 1
 
311
         IF( NS.GE.K22MIN )
 
312
     $      IPARMQ = 2
 
313
*
 
314
      ELSE
 
315
*        ===== invalid value of ispec =====
 
316
         IPARMQ = -1
 
317
*
 
318
      END IF
 
319
*
 
320
*     ==== End of IPARMQ ====
 
321
*
 
322
      END