LAPACK  3.6.1
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 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:224

Here is the call graph for this function: