154 $ NI, NBI, IBI, NXI )
165 CHARACTER*( * ) name, opts
166 INTEGER ispec, ni, nbi, ibi, nxi
171 INTEGER i, ic, iz, kd, ib, lhous, lwork, nthreads,
172 $ factoptnb, qroptnb, lqoptnb
174 CHARACTER prec*1, algo*3, stag*5, subnam*12, vect*1
177 INTRINSIC char, ichar,
max
187 IF( (ispec.LT.17).OR.(ispec.GT.21) )
THEN
197 nthreads = omp_get_num_threads()
202 IF( ispec .NE. 19 )
THEN
208 ic = ichar( subnam( 1: 1 ) )
210 IF( iz.EQ.90 .OR. iz.EQ.122 )
THEN
214 IF( ic.GE.97 .AND. ic.LE.122 )
THEN
215 subnam( 1: 1 ) = char( ic-32 )
217 ic = ichar( subnam( i: i ) )
218 IF( ic.GE.97 .AND. ic.LE.122 )
219 $ subnam( i: i ) = char( ic-32 )
223 ELSE IF( iz.EQ.233 .OR. iz.EQ.169 )
THEN
227 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
228 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
229 $ ( ic.GE.162 .AND. ic.LE.169 ) )
THEN
230 subnam( 1: 1 ) = char( ic+64 )
232 ic = ichar( subnam( i: i ) )
233 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
234 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
235 $ ( ic.GE.162 .AND. ic.LE.169 ) )subnam( i:
236 $ i ) = char( ic+64 )
240 ELSE IF( iz.EQ.218 .OR. iz.EQ.250 )
THEN
244 IF( ic.GE.225 .AND. ic.LE.250 )
THEN
245 subnam( 1: 1 ) = char( ic-32 )
247 ic = ichar( subnam( i: i ) )
248 IF( ic.GE.225 .AND. ic.LE.250 )
249 $ subnam( i: i ) = char( ic-32 )
254 prec = subnam( 1: 1 )
255 algo = subnam( 4: 6 )
256 stag = subnam( 8:12 )
257 rprec = prec.EQ.
'S' .OR. prec.EQ.
'D'
258 cprec = prec.EQ.
'C' .OR. prec.EQ.
'Z'
262 IF( .NOT.( rprec .OR. cprec ) )
THEN
271 IF (( ispec .EQ. 17 ) .OR. ( ispec .EQ. 18 ))
THEN
277 IF( nthreads.GT.4 )
THEN
285 ELSE IF( nthreads.GT.1 )
THEN
305 ELSE IF ( ispec .EQ. 19 )
THEN
313 IF( vect.EQ.
'N' )
THEN
314 lhous =
max( 1, 4*ni )
317 lhous =
max( 1, 4*ni ) + ibi
319 IF( lhous.GE.0 )
THEN
325 ELSE IF ( ispec .EQ. 20 )
THEN
342 subnam(2:6) =
'GEQRF'
343 qroptnb =
ilaenv( 1, subnam,
' ', ni, nbi, -1, -1 )
344 subnam(2:6) =
'GELQF'
345 lqoptnb =
ilaenv( 1, subnam,
' ', nbi, ni, -1, -1 )
347 factoptnb =
max(qroptnb, lqoptnb)
348 IF( algo.EQ.
'TRD' )
THEN
349 IF( stag.EQ.
'2STAG' )
THEN
350 lwork = ni*nbi + ni*
max(nbi+1,factoptnb)
351 $ +
max(2*nbi*nbi, nbi*nthreads)
353 ELSE IF( (stag.EQ.
'HE2HB').OR.(stag.EQ.
'SY2SB') )
THEN
354 lwork = ni*nbi + ni*
max(nbi,factoptnb) + 2*nbi*nbi
355 ELSE IF( (stag.EQ.
'HB2ST').OR.(stag.EQ.
'SB2ST') )
THEN
356 lwork = (2*nbi+1)*ni + nbi*nthreads
358 ELSE IF( algo.EQ.
'BRD' )
THEN
359 IF( stag.EQ.
'2STAG' )
THEN
360 lwork = 2*ni*nbi + ni*
max(nbi+1,factoptnb)
361 $ +
max(2*nbi*nbi, nbi*nthreads)
363 ELSE IF( stag.EQ.
'GE2GB' )
THEN
364 lwork = ni*nbi + ni*
max(nbi,factoptnb) + 2*nbi*nbi
365 ELSE IF( stag.EQ.
'GB2BD' )
THEN
366 lwork = (3*nbi+1)*ni + nbi*nthreads
369 lwork =
max( 1, lwork )
371 IF( lwork.GT.0 )
THEN
377 ELSE IF ( ispec .EQ. 21 )
THEN
integer function ilaenv(ispec, name, opts, n1, n2, n3, n4)
ILAENV