152 $ NI, NBI, IBI, NXI )
163 CHARACTER*( * ) name, opts
164 INTEGER ispec, ni, nbi, ibi, nxi
169 INTEGER i, ic, iz, kd, ib, lhous, lwork, nthreads,
170 $ factoptnb, qroptnb, lqoptnb
172 CHARACTER prec*1, algo*3, stag*5, subnam*12, vect*1
175 INTRINSIC char, ichar, max
186 IF( (ispec.LT.17).OR.(ispec.GT.21) )
THEN
196 nthreads = omp_get_num_threads()
201 IF( ispec .NE. 19 )
THEN
207 ic = ichar( subnam( 1: 1 ) )
209 IF( iz.EQ.90 .OR. iz.EQ.122 )
THEN
213 IF( ic.GE.97 .AND. ic.LE.122 )
THEN
214 subnam( 1: 1 ) = char( ic-32 )
216 ic = ichar( subnam( i: i ) )
217 IF( ic.GE.97 .AND. ic.LE.122 )
218 $ subnam( i: i ) = char( ic-32 )
222 ELSE IF( iz.EQ.233 .OR. iz.EQ.169 )
THEN
226 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
227 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
228 $ ( ic.GE.162 .AND. ic.LE.169 ) )
THEN
229 subnam( 1: 1 ) = char( ic+64 )
231 ic = ichar( subnam( i: i ) )
232 IF( ( ic.GE.129 .AND. ic.LE.137 ) .OR.
233 $ ( ic.GE.145 .AND. ic.LE.153 ) .OR.
234 $ ( ic.GE.162 .AND. ic.LE.169 ) )subnam( i:
235 $ i ) = char( ic+64 )
239 ELSE IF( iz.EQ.218 .OR. iz.EQ.250 )
THEN
243 IF( ic.GE.225 .AND. ic.LE.250 )
THEN
244 subnam( 1: 1 ) = char( ic-32 )
246 ic = ichar( subnam( i: i ) )
247 IF( ic.GE.225 .AND. ic.LE.250 )
248 $ subnam( i: i ) = char( ic-32 )
253 prec = subnam( 1: 1 )
254 algo = subnam( 4: 6 )
255 stag = subnam( 8:12 )
256 rprec = prec.EQ.
'S' .OR. prec.EQ.
'D'
257 cprec = prec.EQ.
'C' .OR. prec.EQ.
'Z'
261 IF( .NOT.( rprec .OR. cprec ) )
THEN
270 IF (( ispec .EQ. 17 ) .OR. ( ispec .EQ. 18 ))
THEN
276 IF( nthreads.GT.4 )
THEN
284 ELSE IF( nthreads.GT.1 )
THEN
304 ELSE IF ( ispec .EQ. 19 )
THEN
312 IF(
lsame( vect,
'N' ) )
THEN
313 lhous = max( 1, 4*ni )
316 lhous = max( 1, 4*ni ) + ibi
318 IF( lhous.GE.0 )
THEN
324 ELSE IF ( ispec .EQ. 20 )
THEN
341 subnam(2:6) =
'GEQRF'
342 qroptnb =
ilaenv( 1, subnam,
' ', ni, nbi, -1, -1 )
343 subnam(2:6) =
'GELQF'
344 lqoptnb =
ilaenv( 1, subnam,
' ', nbi, ni, -1, -1 )
346 factoptnb = max(qroptnb, lqoptnb)
347 IF( algo.EQ.
'TRD' )
THEN
348 IF( stag.EQ.
'2STAG' )
THEN
349 lwork = ni*nbi + ni*max(nbi+1,factoptnb)
350 $ + max(2*nbi*nbi, nbi*nthreads)
352 ELSE IF( (stag.EQ.
'HE2HB').OR.(stag.EQ.
'SY2SB') )
THEN
353 lwork = ni*nbi + ni*max(nbi,factoptnb) + 2*nbi*nbi
354 ELSE IF( (stag.EQ.
'HB2ST').OR.(stag.EQ.
'SB2ST') )
THEN
355 lwork = (2*nbi+1)*ni + nbi*nthreads
357 ELSE IF( algo.EQ.
'BRD' )
THEN
358 IF( stag.EQ.
'2STAG' )
THEN
359 lwork = 2*ni*nbi + ni*max(nbi+1,factoptnb)
360 $ + max(2*nbi*nbi, nbi*nthreads)
362 ELSE IF( stag.EQ.
'GE2GB' )
THEN
363 lwork = ni*nbi + ni*max(nbi,factoptnb) + 2*nbi*nbi
364 ELSE IF( stag.EQ.
'GB2BD' )
THEN
365 lwork = (3*nbi+1)*ni + nbi*nthreads
368 lwork = max( 1, lwork )
370 IF( lwork.GT.0 )
THEN
376 ELSE IF ( ispec .EQ. 21 )
THEN