LAPACK  3.5.0
LAPACK: Linear Algebra PACKage
ilaenv.f File Reference

Go to the source code of this file.

Functions/Subroutines

integer function ilaenv (ISPEC, NAME, OPTS, N1, N2, N3, N4)
 ILAENV More...
 
integer function iparmq (ISPEC, NAME, OPTS, N, ILO, IHI, LWORK)
 

Function/Subroutine Documentation

integer function ilaenv ( integer  ISPEC,
character*( * )  NAME,
character*( * )  OPTS,
integer  N1,
integer  N2,
integer  N3,
integer  N4 
)

ILAENV

Purpose:
 ILAENV returns problem-dependent parameters for the local
 environment.  See ISPEC for a description of the parameters.

 In this version, the problem-dependent parameters are contained in
 the integer array IPARMS in the common block CLAENV and the value
 with index ISPEC is copied to ILAENV.  This version of ILAENV is
 to be used in conjunction with XLAENV in TESTING and TIMING.
Parameters
[in]ISPEC
          ISPEC is INTEGER
          Specifies the parameter to be returned as the value of
          ILAENV.
          = 1: the optimal blocksize; if this value is 1, an unblocked
               algorithm will give the best performance.
          = 2: the minimum block size for which the block routine
               should be used; if the usable block size is less than
               this value, an unblocked routine should be used.
          = 3: the crossover point (in a block routine, for N less
               than this value, an unblocked routine should be used)
          = 4: the number of shifts, used in the nonsymmetric
               eigenvalue routines
          = 5: the minimum column dimension for blocking to be used;
               rectangular blocks must have dimension at least k by m,
               where k is given by ILAENV(2,...) and m by ILAENV(5,...)
          = 6: the crossover point for the SVD (when reducing an m by n
               matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
               this value, a QR factorization is used first to reduce
               the matrix to a triangular form.)
          = 7: the number of processors
          = 8: the crossover point for the multishift QR and QZ methods
               for nonsymmetric eigenvalue problems.
          = 9: maximum size of the subproblems at the bottom of the
               computation tree in the divide-and-conquer algorithm
          =10: ieee NaN arithmetic can be trusted not to trap
          =11: infinity arithmetic can be trusted not to trap
          12 <= ISPEC <= 16:
               xHSEQR or one of its subroutines,
               see IPARMQ for detailed explanation

          Other specifications (up to 100) can be added later.
[in]NAME
          NAME is CHARACTER*(*)
          The name of the calling subroutine.
[in]OPTS
          OPTS is CHARACTER*(*)
          The character options to the subroutine NAME, concatenated
          into a single character string.  For example, UPLO = 'U',
          TRANS = 'T', and DIAG = 'N' for a triangular routine would
          be specified as OPTS = 'UTN'.
[in]N1
          N1 is INTEGER
[in]N2
          N2 is INTEGER
[in]N3
          N3 is INTEGER
[in]N4
          N4 is INTEGER

          Problem dimensions for the subroutine NAME; these may not all
          be required.
Returns
ILAENV
          ILAENV is INTEGER
          >= 0: the value of the parameter specified by ISPEC
          < 0:  if ILAENV = -k, the k-th argument had an illegal value.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Date
November 2011
Further Details:
  The following conventions have been used when calling ILAENV from the
  LAPACK routines:
  1)  OPTS is a concatenation of all of the character options to
      subroutine NAME, in the same order that they appear in the
      argument list for NAME, even if they are not used in determining
      the value of the parameter specified by ISPEC.
  2)  The problem dimensions N1, N2, N3, N4 are specified in the order
      that they appear in the argument list for NAME.  N1 is used
      first, N2 second, and so on, and unused problem dimensions are
      passed a value of -1.
  3)  The parameter value returned by ILAENV is checked for validity in
      the calling subroutine.  For example, ILAENV is used to retrieve
      the optimal blocksize for STRTRI as follows:

      NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
      IF( NB.LE.1 ) NB = MAX( 1, N )

Definition at line 155 of file ilaenv.f.

155 *
156 * -- LAPACK test routine (version 3.4.0) --
157 * -- LAPACK is a software package provided by Univ. of Tennessee, --
158 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
159 * November 2011
160 *
161 * .. Scalar Arguments ..
162  CHARACTER*( * ) name, opts
163  INTEGER ispec, n1, n2, n3, n4
164 * ..
165 *
166 * =====================================================================
167 *
168 * .. Intrinsic Functions ..
169  INTRINSIC int, min, real
170 * ..
171 * .. External Functions ..
172  INTEGER ieeeck
173  EXTERNAL ieeeck
174 * ..
175 * .. Arrays in Common ..
176  INTEGER iparms( 100 )
177 * ..
178 * .. Common blocks ..
179  COMMON / claenv / iparms
180 * ..
181 * .. Save statement ..
182  SAVE / claenv /
183 * ..
184 * .. Executable Statements ..
185 *
186  IF( ispec.GE.1 .AND. ispec.LE.5 ) THEN
187 *
188 * Return a value from the common block.
189 *
190  ilaenv = iparms( ispec )
191 *
192  ELSE IF( ispec.EQ.6 ) THEN
193 *
194 * Compute SVD crossover point.
195 *
196  ilaenv = int( REAL( MIN( N1, N2 ) )*1.6e0 )
197 *
198  ELSE IF( ispec.GE.7 .AND. ispec.LE.9 ) THEN
199 *
200 * Return a value from the common block.
201 *
202  ilaenv = iparms( ispec )
203 *
204  ELSE IF( ispec.EQ.10 ) THEN
205 *
206 * IEEE NaN arithmetic can be trusted not to trap
207 *
208 C ILAENV = 0
209  ilaenv = 1
210  IF( ilaenv.EQ.1 ) THEN
211  ilaenv = ieeeck( 1, 0.0, 1.0 )
212  END IF
213 *
214  ELSE IF( ispec.EQ.11 ) THEN
215 *
216 * Infinity arithmetic can be trusted not to trap
217 *
218 C ILAENV = 0
219  ilaenv = 1
220  IF( ilaenv.EQ.1 ) THEN
221  ilaenv = ieeeck( 0, 0.0, 1.0 )
222  END IF
223 *
224  ELSE IF(( ispec.GE.12 ) .AND. (ispec.LE.16)) THEN
225 *
226 * 12 <= ISPEC <= 16: xHSEQR or one of its subroutines.
227 *
228  ilaenv = iparms( ispec )
229 * WRITE(*,*) 'ISPEC = ',ISPEC,' ILAENV =',ILAENV
230 * ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
231 *
232  ELSE
233 *
234 * Invalid value for ISPEC
235 *
236  ilaenv = -1
237  END IF
238 *
239  RETURN
240 *
241 * End of ILAENV
242 *
integer function ieeeck(ISPEC, ZERO, ONE)
Definition: tstiee.f:626
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
Definition: tstiee.f:83

Here is the call graph for this function:

integer function iparmq ( integer  ISPEC,
character, dimension( * )  NAME,
character, dimension( * )  OPTS,
integer  N,
integer  ILO,
integer  IHI,
integer  LWORK 
)

Definition at line 245 of file ilaenv.f.

245 *
246  INTEGER inmin, inwin, inibl, ishfts, iacc22
247  parameter( inmin = 12, inwin = 13, inibl = 14,
248  $ ishfts = 15, iacc22 = 16 )
249  INTEGER nmin, k22min, kacmin, nibble, knwswp
250  parameter( nmin = 11, k22min = 14, kacmin = 14,
251  $ nibble = 14, knwswp = 500 )
252  REAL two
253  parameter( two = 2.0 )
254 * ..
255 * .. Scalar Arguments ..
256  INTEGER ihi, ilo, ispec, lwork, n
257  CHARACTER name*( * ), opts*( * )
258 * ..
259 * .. Local Scalars ..
260  INTEGER nh, ns
261 * ..
262 * .. Intrinsic Functions ..
263  INTRINSIC log, max, mod, nint, real
264 * ..
265 * .. Executable Statements ..
266  IF( ( ispec.EQ.ishfts ) .OR. ( ispec.EQ.inwin ) .OR.
267  $ ( ispec.EQ.iacc22 ) ) THEN
268 *
269 * ==== Set the number simultaneous shifts ====
270 *
271  nh = ihi - ilo + 1
272  ns = 2
273  IF( nh.GE.30 )
274  $ ns = 4
275  IF( nh.GE.60 )
276  $ ns = 10
277  IF( nh.GE.150 )
278  $ ns = max( 10, nh / nint( log( REAL( NH ) ) / log( two ) ) )
279  IF( nh.GE.590 )
280  $ ns = 64
281  IF( nh.GE.3000 )
282  $ ns = 128
283  IF( nh.GE.6000 )
284  $ ns = 256
285  ns = max( 2, ns-mod( ns, 2 ) )
286  END IF
287 *
288  IF( ispec.EQ.inmin ) THEN
289 *
290 *
291 * ===== Matrices of order smaller than NMIN get sent
292 * . to LAHQR, the classic double shift algorithm.
293 * . This must be at least 11. ====
294 *
295  iparmq = nmin
296 *
297  ELSE IF( ispec.EQ.inibl ) THEN
298 *
299 * ==== INIBL: skip a multi-shift qr iteration and
300 * . whenever aggressive early deflation finds
301 * . at least (NIBBLE*(window size)/100) deflations. ====
302 *
303  iparmq = nibble
304 *
305  ELSE IF( ispec.EQ.ishfts ) THEN
306 *
307 * ==== NSHFTS: The number of simultaneous shifts =====
308 *
309  iparmq = ns
310 *
311  ELSE IF( ispec.EQ.inwin ) THEN
312 *
313 * ==== NW: deflation window size. ====
314 *
315  IF( nh.LE.knwswp ) THEN
316  iparmq = ns
317  ELSE
318  iparmq = 3*ns / 2
319  END IF
320 *
321  ELSE IF( ispec.EQ.iacc22 ) THEN
322 *
323 * ==== IACC22: Whether to accumulate reflections
324 * . before updating the far-from-diagonal elements
325 * . and whether to use 2-by-2 block structure while
326 * . doing it. A small amount of work could be saved
327 * . by making this choice dependent also upon the
328 * . NH=IHI-ILO+1.
329 *
330  iparmq = 0
331  IF( ns.GE.kacmin )
332  $ iparmq = 1
333  IF( ns.GE.k22min )
334  $ iparmq = 2
335 *
336  ELSE
337 * ===== invalid value of ispec =====
338  iparmq = -1
339 *
340  END IF
341 *
342 * ==== End of IPARMQ ====
343 *
integer function iparmq(ISPEC, NAME, OPTS, N, ILO, IHI, LWORK)
IPARMQ
Definition: iparmq.f:216

Here is the call graph for this function: