154 $ NI, NBI, IBI, NXI )
165 CHARACTER*( * ) name, opts
166 INTEGER , ni, nbi, ibi,
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
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.EQ.
IF( STAG'2stag
' ) THEN
360 LWORK = 2*NI*NBI + NI*MAX(NBI+1,FACTOPTNB)
361 $ + MAX(2*NBI*NBI, NBI*NTHREADS)
363.EQ.
ELSE IF( STAG'ge2gb
' ) THEN
364 LWORK = NI*NBI + NI*MAX(NBI,FACTOPTNB) + 2*NBI*NBI
365.EQ.
ELSE IF( STAG'gb2bd
' ) THEN
366 LWORK = (3*NBI+1)*NI + NBI*NTHREADS
369 LWORK = MAX ( 1, LWORK )
371.GT.
IF( LWORK0 ) THEN
377.EQ.
ELSE IF ( ISPEC 21 ) THEN
integer function ilaenv(ispec, name, opts, n1, n2, n3, n4)
ILAENV
integer function iparam2stage(ispec, name, opts, ni, nbi, ibi, nxi)
IPARAM2STAGE