Environmental enquiry function which returns values for tuning algorithmic performance.
value = iparmq( ispec, name, opts, n, ilo, ihi, lwork )
The function sets problem and machine dependent parameters useful for ?hseqr and its subroutines. It is called whenever ilaenv is called with 12≤ispec≤16.
Specifies the parameter to be returned as the value of iparmq:
= 12: (inmin) Matrices of order nmin or less are sent directly to ?lahqr, the implicit double shift QR algorithm. nmin must be at least 11.
= 13: (inwin) Size of the deflation window. This is best set greater than or equal to the number of simultaneous shifts ns. Larger matrices benefit from larger deflation windows.
= 14: (inibl) Determines when to stop nibbling and invest in an (expensive) multi-shift QR sweep. If the aggressive early deflation subroutine finds ld converged eigenvalues from an order nw deflation window and ld>(nw*nibble)/100, then the next QR sweep is skipped and early deflation is applied immediately to the remaining active diagonal block. Setting iparmq(ispec=14)=0 causes TTQRE to skip a multi-shift QR sweep whenever early deflation finds a converged eigenvalue. Setting iparmq(ispec=14) greater than or equal to 100 prevents TTQRE from skipping a multi-shift QR sweep.
= 15: (nshfts) The number of simultaneous shifts in a multi-shift QR iteration.
= 16: (iacc22) iparmq is set to 0, 1 or 2 with the following meanings.
0: During the multi-shift QR sweep, ?laqr5 does not accumulate reflections and does not use matrix-matrix multiply to update the far-from-diagonal matrix entries.
1: During the multi-shift QR sweep, ?laqr5 and/or ?laqr3 accumulates reflections and uses matrix-matrix multiply to update the far-from-diagonal matrix entries.
2: During the multi-shift QR sweep, ?laqr5 accumulates reflections and takes advantage of 2-by-2 block structure during matrix-matrix multiplies.
(If ?trrm is slower than ?gemm, then iparmq(ispec=16)=1 may be more efficient than iparmq(ispec=16)=2 despite the greater level of arithmetic work implied by the latter choice.)
CHARACTER*(*). The name of the calling subroutine.
CHARACTER*(*). This is a concatenation of the string arguments to TTQRE.
INTEGER. n is the order of the Hessenberg matrix H.
- ilo, ihi
It is assumed that H is already upper triangular in rows and columns 1:ilo-1 and ihi+1:n.
The amount of workspace available.
If value≥ 0: the value of the parameter specified by iparmq;
If value = -k < 0: the k-th argument had an illegal value.
The following conventions have been used when calling ilaenv from the LAPACK routines:
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.
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.
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 )