LAPACK  3.7.0
LAPACK: Linear Algebra PACKage
integer function iparmq ( integer  ISPEC,
character, dimension( * )  NAME,
character, dimension( * )  OPTS,
integer  N,
integer  ILO,
integer  IHI,
integer  LWORK 
)

Definition at line 255 of file ilaenv.f.

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

Here is the call graph for this function: