LAPACK 3.12.0 LAPACK: Linear Algebra PACKage
Searching...
No Matches
ilaenv.f
Go to the documentation of this file.
1*> \brief \b ILAENV
2*
3* =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6* http://www.netlib.org/lapack/explore-html/
7*
8* Definition:
9* ===========
10*
11* INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3,
12* N4 )
13*
14* .. Scalar Arguments ..
15* CHARACTER*( * ) NAME, OPTS
16* INTEGER ISPEC, N1, N2, N3, N4
17* ..
18*
19*
20*> \par Purpose:
21* =============
22*>
23*> \verbatim
24*>
25*> ILAENV returns problem-dependent parameters for the local
26*> environment. See ISPEC for a description of the parameters.
27*>
28*> In this version, the problem-dependent parameters are contained in
29*> the integer array IPARMS in the common block CLAENV and the value
30*> with index ISPEC is copied to ILAENV. This version of ILAENV is
31*> to be used in conjunction with XLAENV in TESTING and TIMING.
32*> \endverbatim
33*
34* Arguments:
35* ==========
36*
37*> \param[in] ISPEC
38*> \verbatim
39*> ISPEC is INTEGER
40*> Specifies the parameter to be returned as the value of
41*> ILAENV.
42*> = 1: the optimal blocksize; if this value is 1, an unblocked
43*> algorithm will give the best performance.
44*> = 2: the minimum block size for which the block routine
45*> should be used; if the usable block size is less than
46*> this value, an unblocked routine should be used.
47*> = 3: the crossover point (in a block routine, for N less
48*> than this value, an unblocked routine should be used)
49*> = 4: the number of shifts, used in the nonsymmetric
50*> eigenvalue routines
51*> = 5: the minimum column dimension for blocking to be used;
52*> rectangular blocks must have dimension at least k by m,
53*> where k is given by ILAENV(2,...) and m by ILAENV(5,...)
54*> = 6: the crossover point for the SVD (when reducing an m by n
55*> matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds
56*> this value, a QR factorization is used first to reduce
57*> the matrix to a triangular form.)
58*> = 7: the number of processors
59*> = 8: the crossover point for the multishift QR and QZ methods
60*> for nonsymmetric eigenvalue problems.
61*> = 9: maximum size of the subproblems at the bottom of the
62*> computation tree in the divide-and-conquer algorithm
63*> =10: ieee NaN arithmetic can be trusted not to trap
64*> =11: infinity arithmetic can be trusted not to trap
65*>
66*> Other specifications (up to 100) can be added later.
67*> \endverbatim
68*>
69*> \param[in] NAME
70*> \verbatim
71*> NAME is CHARACTER*(*)
72*> The name of the calling subroutine.
73*> \endverbatim
74*>
75*> \param[in] OPTS
76*> \verbatim
77*> OPTS is CHARACTER*(*)
78*> The character options to the subroutine NAME, concatenated
79*> into a single character string. For example, UPLO = 'U',
80*> TRANS = 'T', and DIAG = 'N' for a triangular routine would
81*> be specified as OPTS = 'UTN'.
82*> \endverbatim
83*>
84*> \param[in] N1
85*> \verbatim
86*> N1 is INTEGER
87*> \endverbatim
88*>
89*> \param[in] N2
90*> \verbatim
91*> N2 is INTEGER
92*> \endverbatim
93*>
94*> \param[in] N3
95*> \verbatim
96*> N3 is INTEGER
97*> \endverbatim
98*>
99*> \param[in] N4
100*> \verbatim
101*> N4 is INTEGER
102*>
103*> Problem dimensions for the subroutine NAME; these may not all
104*> be required.
105*> \endverbatim
106*>
107*> \return ILAENV
108*> \verbatim
109*> ILAENV is INTEGER
110*> >= 0: the value of the parameter specified by ISPEC
111*> < 0: if ILAENV = -k, the k-th argument had an illegal value.
112*> \endverbatim
113*
114* Authors:
115* ========
116*
117*> \author Univ. of Tennessee
118*> \author Univ. of California Berkeley
119*> \author Univ. of Colorado Denver
120*> \author NAG Ltd.
121*
122*> \ingroup aux_lin
123*
124*> \par Further Details:
125* =====================
126*>
127*> \verbatim
128*>
129*> The following conventions have been used when calling ILAENV from the
130*> LAPACK routines:
131*> 1) OPTS is a concatenation of all of the character options to
132*> subroutine NAME, in the same order that they appear in the
133*> argument list for NAME, even if they are not used in determining
134*> the value of the parameter specified by ISPEC.
135*> 2) The problem dimensions N1, N2, N3, N4 are specified in the order
136*> that they appear in the argument list for NAME. N1 is used
137*> first, N2 second, and so on, and unused problem dimensions are
138*> passed a value of -1.
139*> 3) The parameter value returned by ILAENV is checked for validity in
140*> the calling subroutine. For example, ILAENV is used to retrieve
141*> the optimal blocksize for STRTRI as follows:
142*>
143*> NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 )
144*> IF( NB.LE.1 ) NB = MAX( 1, N )
145*> \endverbatim
146*>
147* =====================================================================
148 INTEGER FUNCTION ilaenv( ISPEC, NAME, OPTS, N1, N2, N3,
149 \$ N4 )
150*
151* -- LAPACK test routine --
152* -- LAPACK is a software package provided by Univ. of Tennessee, --
153* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
154*
155* .. Scalar Arguments ..
156 CHARACTER*( * ) name, opts
157 INTEGER ispec, n1, n2, n3, n4
158* ..
159*
160* =====================================================================
161*
162* .. Intrinsic Functions ..
163 INTRINSIC int, min, real
164* ..
165* .. External Functions ..
166 INTEGER ieeeck
167 EXTERNAL ieeeck
168* ..
169* .. Arrays in Common ..
170 INTEGER iparms( 100 )
171* ..
172* .. Common blocks ..
173 COMMON / claenv / iparms
174* ..
175* .. Save statement ..
176 SAVE / claenv /
177* ..
178* .. Executable Statements ..
179*
180 IF( ispec.GE.1 .AND. ispec.LE.5 ) THEN
181*
182* Return a value from the common block.
183*
184 IF ( name(2:6).EQ.'GEQR ' ) THEN
185 IF (n3.EQ.2) THEN
186 ilaenv = iparms( 2 )
187 ELSE
188 ilaenv = iparms( 1 )
189 END IF
190 ELSE IF ( name(2:6).EQ.'GELQ ' ) THEN
191 IF (n3.EQ.2) THEN
192 ilaenv = iparms( 2 )
193 ELSE
194 ilaenv = iparms( 1 )
195 END IF
196 ELSE
197 ilaenv = iparms( ispec )
198 END IF
199*
200 ELSE IF( ispec.EQ.6 ) THEN
201*
202* Compute SVD crossover point.
203*
204 ilaenv = int( real( min( n1, n2 ) )*1.6e0 )
205*
206 ELSE IF( ispec.GE.7 .AND. ispec.LE.9 ) THEN
207*
208* Return a value from the common block.
209*
210 ilaenv = iparms( ispec )
211*
212 ELSE IF( ispec.EQ.10 ) THEN
213*
214* IEEE NaN arithmetic can be trusted not to trap
215*
216C ILAENV = 0
217 ilaenv = 1
218 IF( ilaenv.EQ.1 ) THEN
219 ilaenv = ieeeck( 1, 0.0, 1.0 )
220 END IF
221*
222 ELSE IF( ispec.EQ.11 ) THEN
223*
224* Infinity arithmetic can be trusted not to trap
225*
226C ILAENV = 0
227 ilaenv = 1
228 IF( ilaenv.EQ.1 ) THEN
229 ilaenv = ieeeck( 0, 0.0, 1.0 )
230 END IF
231*
232 ELSE
233*
234* Invalid value for ISPEC
235*
236 ilaenv = -1
237 END IF
238*
239 RETURN
240*
241* End of ILAENV
242*
243 END
244 INTEGER FUNCTION ilaenv2stage( ISPEC, NAME, OPTS, N1, N2,
245 \$ N3, N4 )
246* .. Scalar Arguments ..
247 CHARACTER*( * ) name, opts
248 INTEGER ispec, n1, n2, n3, n4
249* ..
250*
251* =====================================================================
252*
253* .. Local variables ..
254 INTEGER iispec
255* .. External Functions ..
256 INTEGER iparam2stage
257 EXTERNAL iparam2stage
258* ..
259* .. Arrays in Common ..
260 INTEGER iparms( 100 )
261* ..
262* .. Common blocks ..
263 COMMON / claenv / iparms
264* ..
265* .. Save statement ..
266 SAVE / claenv /
267* ..
268* .. Executable Statements ..
269*
270 IF(( ispec.GE.1 ) .AND. (ispec.LE.5)) THEN
271*
272* 1 <= ISPEC <= 5: 2stage eigenvalues SVD routines.
273*
274 IF( ispec.EQ.1 ) THEN
275 ilaenv2stage = iparms( 1 )
276 ELSE
277 iispec = 16 + ispec
278 ilaenv2stage = iparam2stage( iispec, name, opts,
279 \$ n1, n2, n3, n4 )
280 ENDIF
281*
282 ELSE
283*
284* Invalid value for ISPEC
285*
286 ilaenv2stage = -1
287 END IF
288*
289 RETURN
290 END
integer function ieeeck(ispec, zero, one)
IEEECK
Definition ieeeck.f:82
integer function ilaenv2stage(ispec, name, opts, n1, n2, n3, n4)
ILAENV2STAGE
integer function ilaenv(ispec, name, opts, n1, n2, n3, n4)
ILAENV
Definition ilaenv.f:162
integer function iparam2stage(ispec, name, opts, ni, nbi, ibi, nxi)
IPARAM2STAGE