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
313 INTEGER IHI, ILO, ISPEC, LWORK, N
314 CHARACTER NAME*( * ), OPTS*( * )
315
316
317 INTEGER NH, NS
318
319
320 INTRINSIC log, max, mod, nint, real
321
322
323 IF( ( ispec.EQ.ishfts ) .OR. ( ispec.EQ.inwin ) .OR.
324 $ ( ispec.EQ.iacc22 ) ) THEN
325
326
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
349
350
351
353
354 ELSE IF( ispec.EQ.inibl ) THEN
355
356
357
358
359
361
362 ELSE IF( ispec.EQ.ishfts ) THEN
363
364
365
367
368 ELSE IF( ispec.EQ.inwin ) THEN
369
370
371
372 IF( nh.LE.knwswp ) THEN
374 ELSE
376 END IF
377
378 ELSE IF( ispec.EQ.iacc22 ) THEN
379
380
381
382
383
384
385
386
388 IF( ns.GE.kacmin )
390 IF( ns.GE.k22min )
392
393 ELSE
394
396
397 END IF
398
399
400
integer function iparmq(ispec, name, opts, n, ilo, ihi, lwork)
IPARMQ