229 $ D, E, HOUS, LHOUS, WORK, LWORK, INFO )
242 CHARACTER STAGE1, UPLO, VECT
243 INTEGER N, KD, LDAB, LHOUS, LWORK, INFO
247 REAL ( LDAB, ( * ), WORK(
255 parameter( rzero = 0.0e+0,
260 LOGICAL LQUERY, WANTQ, UPPER, AFTERS1
261 INTEGER I, M, K, IB, SWEEPID, MYID, SHIFT, STT, ST,
262 $ ed, stind, edind, blklastind, colpt, thed,
263 $ stepercol, grsiz, thgrsiz, thgrnb, thgrid,
264 $ nbtiles, ttype, tid, nthreads, debug,
266 $ inda, indw, apos, sizea, lda, indv, indtau,
267 $ sisev, sizetau, ldv, lhmin, lwmin
273 INTRINSIC min,
max, ceiling, real
278 EXTERNAL lsame, ilaenv2stage
287 afters1 = lsame( stage1,
'Y' )
288 wantq = lsame( vect,
'V' )
289 upper = lsame( uplo,
'U' )
290 lquery = ( lwork.EQ.-1 ) .OR. ( lhous.EQ.-1 )
294 ib = ilaenv2stage( 2,
'SSYTRD_SB2ST', vect, n, kd, -1, -1 )
295 lhmin = ilaenv2stage( 3,
'SSYTRD_SB2ST', vect, n, kd, ib, -1 )
296 lwmin = ilaenv2stage( 4,
'SSYTRD_SB2ST', vect, n, kd, ib, -1 )
298 IF( .NOT.afters1 .AND. .NOT.lsame( stage1,
'N' ) )
THEN
300 ELSE IF( .NOT.lsame( vect,
'N' ) )
THEN
302 ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
304 ELSE IF( n.LT.0 )
THEN
306 ELSE IF( kd.LT.0 )
THEN
308 ELSE IF( ldab.LT.(kd+1) )
THEN
310 ELSE IF( lhous.LT.lhmin .AND. .NOT.lquery )
THEN
312 ELSE IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
324 ELSE IF( LQUERY ) THEN
342 INDV = INDTAU + SIZETAU
359 AWPOS = INDA + KD + 1
375 D( I ) = ( AB( ABDPOS, I ) )
398 D( I ) = ( AB( ABDPOS, I ) )
403 E( I ) = ( AB( ABOFDPOS, I+1 ) )
407 E( I ) = ( AB( ABOFDPOS, I ) )
422 NBTILES = CEILING( REAL(N)/REAL(KD) )
423 STEPERCOL = CEILING( REAL(SHIFT)/REAL(GRSIZ) )
424 THGRNB = CEILING( REAL(N-1)/REAL(THGRSIZ) )
426 CALL SLACPY( "A", KD+1, N, AB, LDAB, WORK( APOS ), LDA )
427 CALL SLASET( "A", KD, N, ZERO, ZERO, WORK( AWPOS ), LDA )
433!$OMP PARALLEL PRIVATE( TID, THGRID, BLKLASTIND )
434!$OMP$ PRIVATE( THED, I, M, K, ST, ED, STT, SWEEPID )
435!$OMP$ PRIVATE( MYID, TTYPE, COLPT, STIND, EDIND )
436!$OMP$ SHARED ( UPLO, WANTQ, INDV, INDTAU, HOUS, WORK)
437!$OMP$ SHARED ( N, KD, IB, NBTILES, LDA, LDV, INDA )
438!$OMP$ SHARED ( STEPERCOL, THGRNB, THGRSIZ, GRSIZ, SHIFT )
444 DO 100 THGRID = 1, THGRNB
445 STT = (THGRID-1)*THGRSIZ+1
446 THED = MIN( (STT + THGRSIZ -1), (N-1))
450 DO 120 M = 1, STEPERCOL
452 DO 130 SWEEPID = ST, ED
454 MYID = (I-SWEEPID)*(STEPERCOL*GRSIZ)
456.EQ.
IF ( MYID1 ) THEN
459 TTYPE = MOD( MYID, 2 ) + 2
462.EQ.
IF( TTYPE2 ) THEN
463 COLPT = (MYID/2)*KD + SWEEPID
468 COLPT = ((MYID+1)/2)*KD + SWEEPID
471.GE..AND.
IF( ( STINDEDIND-1 )
472.EQ.
$ ( EDINDN ) ) THEN
481#if defined(_OPENMP) && _OPENMP >= 201307
482.NE.
IF( TTYPE1 ) THEN
483!$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1))
484!$OMP$ DEPEND(in:WORK(MYID-1))
485!$OMP$ DEPEND(out:WORK(MYID))
486 TID = OMP_GET_THREAD_NUM()
487 CALL SSB2ST_KERNELS( UPLO, WANTQ, TTYPE,
488 $ STIND, EDIND, SWEEPID, N, KD, IB,
489 $ WORK ( INDA ), LDA,
490 $ HOUS( INDV ), HOUS( INDTAU ), LDV,
491 $ WORK( INDW + TID*KD ) )
494!$OMP TASK DEPEND(in:WORK(MYID+SHIFT-1))
495!$OMP$ DEPEND(out:WORK(MYID))
496 TID = OMP_GET_THREAD_NUM()
497 CALL SSB2ST_KERNELS( UPLO, WANTQ, TTYPE,
498 $ STIND, EDIND, SWEEPID, N, KD, IB,
499 $ WORK ( INDA ), LDA,
500 $ HOUS( INDV ), HOUS( INDTAU ), LDV,
501 $ WORK( INDW + TID*KD ) )
505 CALL SSB2ST_KERNELS( UPLO, WANTQ, TTYPE,
506 $ STIND, EDIND, SWEEPID, N, KD, IB,
507 $ WORK ( INDA ), LDA,
508 $ HOUS( INDV ), HOUS( INDTAU ), LDV,
509 $ WORK( INDW + TID*KD ) )
511.GE.
IF ( BLKLASTIND(N-1) ) THEN
530 D( I ) = ( WORK( DPOS+(I-1)*LDA ) )
538 E( I ) = ( WORK( OFDPOS+I*LDA ) )
542 E( I ) = ( WORK( OFDPOS+(I-1)*LDA ) )
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine ssb2st_kernels(uplo, wantz, ttype, st, ed, sweep, n, nb, ib, a, lda, v, tau, ldvt, work)
SSB2ST_KERNELS
subroutine ssytrd_sb2st(stage1, vect, uplo, n, kd, ab, ldab, d, e, hous, lhous, work, lwork, info)
SSYTRD_SB2ST reduces a real symmetric band matrix A to real symmetric tridiagonal form T