LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ ilaenv()

integer function ilaenv ( integer ispec,
character*( * ) name,
character*( * ) opts,
integer n1,
integer n2,
integer n3,
integer n4 )

ILAENV

Purpose:
!>
!> ILAENV returns problem-dependent parameters for the local
!> environment.  See ISPEC for a description of the parameters.
!>
!> In this version, the problem-dependent parameters are contained in
!> the integer array IPARMS in the common block CLAENV and the value
!> with index ISPEC is copied to ILAENV.  This version of ILAENV is
!> to be used in conjunction with XLAENV in TESTING and TIMING.
!> 
Parameters
[in]ISPEC
!>          ISPEC is INTEGER
!>          Specifies the parameter to be returned as the value of
!>          ILAENV.
!>          = 1: the optimal blocksize; if this value is 1, an unblocked
!>               algorithm will give the best performance.
!>          = 2: the minimum block size for which the block routine
!>               should be used; if the usable block size is less than
!>               this value, an unblocked routine should be used.
!>          = 3: the crossover point (in a block routine, for N less
!>               than this value, an unblocked routine should be used)
!>          = 4: the number of shifts, used in the nonsymmetric
!>               eigenvalue routines
!>          = 5: the minimum column dimension for blocking to be used;
!>               rectangular blocks must have dimension at least k by m,
!>               where k is given by ILAENV(2,...) and m by ILAENV(5,...)
!>          = 6: the crossover point for the SVD (when reducing an m by n
!>               matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
!>               this value, a QR factorization is used first to reduce
!>               the matrix to a triangular form.)
!>          = 7: the number of processors
!>          = 8: the crossover point for the multishift QR and QZ methods
!>               for nonsymmetric eigenvalue problems.
!>          = 9: maximum size of the subproblems at the bottom of the
!>               computation tree in the divide-and-conquer algorithm
!>          =10: ieee NaN arithmetic can be trusted not to trap
!>          =11: infinity arithmetic can be trusted not to trap
!>          12 <= ISPEC <= 16:
!>               xHSEQR or one of its subroutines,
!>               see IPARMQ for detailed explanation
!>
!>          Other specifications (up to 100) can be added later.
!> 
[in]NAME
!>          NAME is CHARACTER*(*)
!>          The name of the calling subroutine.
!> 
[in]OPTS
!>          OPTS is CHARACTER*(*)
!>          The character options to the subroutine NAME, concatenated
!>          into a single character string.  For example, UPLO = 'U',
!>          TRANS = 'T', and DIAG = 'N' for a triangular routine would
!>          be specified as OPTS = 'UTN'.
!> 
[in]N1
!>          N1 is INTEGER
!> 
[in]N2
!>          N2 is INTEGER
!> 
[in]N3
!>          N3 is INTEGER
!> 
[in]N4
!>          N4 is INTEGER
!>
!>          Problem dimensions for the subroutine NAME; these may not all
!>          be required.
!> 
Returns
ILAENV
!>          ILAENV is INTEGER
!>          >= 0: the value of the parameter specified by ISPEC
!>          < 0:  if ILAENV = -k, the k-th argument had an illegal value.
!> 
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Further Details:
!>
!>  The following conventions have been used when calling ILAENV from the
!>  LAPACK routines:
!>  1)  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.
!>  2)  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.
!>  3)  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 )
!> 

Definition at line 151 of file ilaenv.f.

153*
154* -- LAPACK test routine --
155* -- LAPACK is a software package provided by Univ. of Tennessee, --
156* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
157*
158* .. Scalar Arguments ..
159 CHARACTER*( * ) NAME, OPTS
160 INTEGER ISPEC, N1, N2, N3, N4
161* ..
162*
163* =====================================================================
164*
165* .. Intrinsic Functions ..
166 INTRINSIC int, min, real
167* ..
168* .. External Functions ..
169 INTEGER IEEECK, IPARAM2STAGE
170 EXTERNAL ieeeck, iparam2stage
171* ..
172* .. Arrays in Common ..
173 INTEGER IPARMS( 100 )
174* ..
175* .. Common blocks ..
176 COMMON / claenv / iparms
177* ..
178* .. Save statement ..
179 SAVE / claenv /
180* ..
181* .. Executable Statements ..
182*
183 IF( ispec.GE.1 .AND. ispec.LE.5 ) THEN
184*
185* Return a value from the common block.
186*
187 ilaenv = iparms( ispec )
188*
189 ELSE IF( ispec.EQ.6 ) THEN
190*
191* Compute SVD crossover point.
192*
193 ilaenv = int( real( min( n1, n2 ) )*1.6e0 )
194*
195 ELSE IF( ispec.GE.7 .AND. ispec.LE.9 ) THEN
196*
197* Return a value from the common block.
198*
199 ilaenv = iparms( ispec )
200*
201 ELSE IF( ispec.EQ.10 ) THEN
202*
203* IEEE NaN arithmetic can be trusted not to trap
204*
205C ILAENV = 0
206 ilaenv = 1
207 IF( ilaenv.EQ.1 ) THEN
208 ilaenv = ieeeck( 1, 0.0, 1.0 )
209 END IF
210*
211 ELSE IF( ispec.EQ.11 ) THEN
212*
213* Infinity arithmetic can be trusted not to trap
214*
215C ILAENV = 0
216 ilaenv = 1
217 IF( ilaenv.EQ.1 ) THEN
218 ilaenv = ieeeck( 0, 0.0, 1.0 )
219 END IF
220*
221 ELSE IF(( ispec.GE.12 ) .AND. (ispec.LE.16)) THEN
222*
223* 12 <= ISPEC <= 16: xHSEQR or one of its subroutines.
224*
225 ilaenv = iparms( ispec )
226* WRITE(*,*) 'ISPEC = ',ISPEC,' ILAENV =',ILAENV
227* ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
228*
229 ELSE IF(( ispec.GE.17 ) .AND. (ispec.LE.21)) THEN
230*
231* 17 <= ISPEC <= 21: 2stage eigenvalues SVD routines.
232*
233 IF( ispec.EQ.17 ) THEN
234 ilaenv = iparms( 1 )
235 ELSE
236 ilaenv = iparam2stage( ispec, name, opts, n1, n2, n3, n4 )
237 ENDIF
238*
239 ELSE
240*
241* Invalid value for ISPEC
242*
243 ilaenv = -1
244 END IF
245*
246 RETURN
247*
248* End of ILAENV
249*
integer function ieeeck(ispec, zero, one)
IEEECK
Definition ieeeck.f:80
integer function ilaenv(ispec, name, opts, n1, n2, n3, n4)
ILAENV
Definition ilaenv.f:160
integer function iparam2stage(ispec, name, opts, ni, nbi, ibi, nxi)
IPARAM2STAGE
Here is the call graph for this function: