LAPACK  3.10.0
LAPACK: Linear Algebra PACKage

◆ iparmq()

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

Definition at line 301 of file ilaenv.f.

302 *
303  INTEGER INMIN, INWIN, INIBL, ISHFTS, IACC22
304  parameter( inmin = 12, inwin = 13, inibl = 14,
305  $ ishfts = 15, iacc22 = 16 )
306  INTEGER NMIN, K22MIN, KACMIN, NIBBLE, KNWSWP
307  parameter( nmin = 11, k22min = 14, kacmin = 14,
308  $ nibble = 14, knwswp = 500 )
309  REAL TWO
310  parameter( two = 2.0 )
311 * ..
312 * .. Scalar Arguments ..
313  INTEGER IHI, ILO, ISPEC, LWORK, N
314  CHARACTER NAME*( * ), OPTS*( * )
315 * ..
316 * .. Local Scalars ..
317  INTEGER NH, NS
318 * ..
319 * .. Intrinsic Functions ..
320  INTRINSIC log, max, mod, nint, real
321 * ..
322 * .. Executable Statements ..
323  IF( ( ispec.EQ.ishfts ) .OR. ( ispec.EQ.inwin ) .OR.
324  $ ( ispec.EQ.iacc22 ) ) THEN
325 *
326 * ==== Set the number simultaneous shifts ====
327 *
328  nh = ihi - ilo + 1
329  ns = 2
330  IF( nh.GE.30 )
331  $ ns = 4
332  IF( nh.GE.60 )
333  $ ns = 10
334  IF( nh.GE.150 )
335  $ ns = max( 10, nh / nint( log( real( nh ) ) / log( two ) ) )
336  IF( nh.GE.590 )
337  $ ns = 64
338  IF( nh.GE.3000 )
339  $ ns = 128
340  IF( nh.GE.6000 )
341  $ ns = 256
342  ns = max( 2, ns-mod( ns, 2 ) )
343  END IF
344 *
345  IF( ispec.EQ.inmin ) THEN
346 *
347 *
348 * ===== Matrices of order smaller than NMIN get sent
349 * . to LAHQR, the classic double shift algorithm.
350 * . This must be at least 11. ====
351 *
352  iparmq = nmin
353 *
354  ELSE IF( ispec.EQ.inibl ) THEN
355 *
356 * ==== INIBL: skip a multi-shift qr iteration and
357 * . whenever aggressive early deflation finds
358 * . at least (NIBBLE*(window size)/100) deflations. ====
359 *
360  iparmq = nibble
361 *
362  ELSE IF( ispec.EQ.ishfts ) THEN
363 *
364 * ==== NSHFTS: The number of simultaneous shifts =====
365 *
366  iparmq = ns
367 *
368  ELSE IF( ispec.EQ.inwin ) THEN
369 *
370 * ==== NW: deflation window size. ====
371 *
372  IF( nh.LE.knwswp ) THEN
373  iparmq = ns
374  ELSE
375  iparmq = 3*ns / 2
376  END IF
377 *
378  ELSE IF( ispec.EQ.iacc22 ) THEN
379 *
380 * ==== IACC22: Whether to accumulate reflections
381 * . before updating the far-from-diagonal elements
382 * . and whether to use 2-by-2 block structure while
383 * . doing it. A small amount of work could be saved
384 * . by making this choice dependent also upon the
385 * . NH=IHI-ILO+1.
386 *
387  iparmq = 0
388  IF( ns.GE.kacmin )
389  $ iparmq = 1
390  IF( ns.GE.k22min )
391  $ iparmq = 2
392 *
393  ELSE
394 * ===== invalid value of ispec =====
395  iparmq = -1
396 *
397  END IF
398 *
399 * ==== End of IPARMQ ====
400 *
integer function iparmq(ISPEC, NAME, OPTS, N, ILO, IHI, LWORK)
IPARMQ
Definition: iparmq.f:230
Here is the call graph for this function: