360 SUBROUTINE ddrvsg2stg( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH,
361 $ nounit, a, lda, b, ldb, d, d2, z, ldz, ab,
362 $ bb, ap, bp, work, nwork, iwork, liwork,
373 INTEGER INFO, LDA, LDB, LDZ, LIWORK, NOUNIT, NSIZES,
375 DOUBLE PRECISION THRESH
379 INTEGER ISEED( 4 ), IWORK( * ), NN( * )
380 DOUBLE PRECISION A( lda, * ), AB( lda, * ), AP( * ),
381 $ b( ldb, * ), bb( ldb, * ), bp( * ), d( * ),
382 $ d2( * ), result( * ), work( * ), z( ldz, * )
388 DOUBLE PRECISION ZERO, ONE, TEN
389 parameter ( zero = 0.0d0, one = 1.0d0, ten = 10.0d0 )
391 parameter ( maxtyp = 21 )
396 INTEGER I, IBTYPE, IBUPLO, IINFO, IJ, IL, IMODE, ITEMP,
397 $ itype, iu, j, jcol, jsize, jtype, ka, ka9, kb,
398 $ kb9, m, mtypes, n, nerrs, nmats, nmax, ntest,
400 DOUBLE PRECISION ABSTOL, ANINV, ANORM, COND, OVFL, RTOVFL,
401 $ rtunfl, ulp, ulpinv, unfl, vl, vu, temp1, temp2
404 INTEGER IDUMMA( 1 ), IOLDSD( 4 ), ISEED2( 4 ),
405 $ kmagn( maxtyp ), kmode( maxtyp ),
410 DOUBLE PRECISION DLAMCH, DLARND
411 EXTERNAL lsame, dlamch, dlarnd
420 INTRINSIC abs, dble, max, min, sqrt
423 DATA ktype / 1, 2, 5*4, 5*5, 3*8, 6*9 /
424 DATA kmagn / 2*1, 1, 1, 1, 2, 3, 1, 1, 1, 2, 3, 1,
426 DATA kmode / 2*0, 4, 3, 1, 4, 4, 4, 3, 1, 4, 4, 0,
439 nmax = max( nmax, nn( j ) )
446 IF( nsizes.LT.0 )
THEN
448 ELSE IF( badnn )
THEN
450 ELSE IF( ntypes.LT.0 )
THEN
452 ELSE IF( lda.LE.1 .OR. lda.LT.nmax )
THEN
454 ELSE IF( ldz.LE.1 .OR. ldz.LT.nmax )
THEN
456 ELSE IF( 2*max( nmax, 3 )**2.GT.nwork )
THEN
458 ELSE IF( 2*max( nmax, 3 )**2.GT.liwork )
THEN
463 CALL xerbla(
'DDRVSG2STG', -info )
469 IF( nsizes.EQ.0 .OR. ntypes.EQ.0 )
474 unfl = dlamch(
'Safe minimum' )
475 ovfl = dlamch(
'Overflow' )
477 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
479 rtunfl = sqrt( unfl )
480 rtovfl = sqrt( ovfl )
483 iseed2( i ) = iseed( i )
491 DO 650 jsize = 1, nsizes
493 aninv = one / dble( max( 1, n ) )
495 IF( nsizes.NE.1 )
THEN
496 mtypes = min( maxtyp, ntypes )
498 mtypes = min( maxtyp+1, ntypes )
503 DO 640 jtype = 1, mtypes
504 IF( .NOT.dotype( jtype ) )
510 ioldsd( j ) = iseed( j )
528 IF( mtypes.GT.maxtyp )
531 itype = ktype( jtype )
532 imode = kmode( jtype )
536 GO TO ( 40, 50, 60 )kmagn( jtype )
543 anorm = ( rtovfl*ulp )*aninv
547 anorm = rtunfl*n*ulpinv
557 IF( itype.EQ.1 )
THEN
563 CALL dlaset(
'Full', lda, n, zero, zero, a, lda )
565 ELSE IF( itype.EQ.2 )
THEN
571 CALL dlaset(
'Full', lda, n, zero, zero, a, lda )
573 a( jcol, jcol ) = anorm
576 ELSE IF( itype.EQ.4 )
THEN
582 CALL dlatms( n, n,
'S', iseed,
'S', work, imode, cond,
583 $ anorm, 0, 0,
'N', a, lda, work( n+1 ),
586 ELSE IF( itype.EQ.5 )
THEN
592 CALL dlatms( n, n,
'S', iseed,
'S', work, imode, cond,
593 $ anorm, n, n,
'N', a, lda, work( n+1 ),
596 ELSE IF( itype.EQ.7 )
THEN
602 CALL dlatmr( n, n,
'S', iseed,
'S', work, 6, one, one,
603 $
'T',
'N', work( n+1 ), 1, one,
604 $ work( 2*n+1 ), 1, one,
'N', idumma, 0, 0,
605 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
607 ELSE IF( itype.EQ.8 )
THEN
613 CALL dlatmr( n, n,
'S', iseed,
'H', work, 6, one, one,
614 $
'T',
'N', work( n+1 ), 1, one,
615 $ work( 2*n+1 ), 1, one,
'N', idumma, n, n,
616 $ zero, anorm,
'NO', a, lda, iwork, iinfo )
618 ELSE IF( itype.EQ.9 )
THEN
632 IF( kb9.GT.ka9 )
THEN
636 ka = max( 0, min( n-1, ka9 ) )
637 kb = max( 0, min( n-1, kb9 ) )
638 CALL dlatms( n, n,
'S', iseed,
'S', work, imode, cond,
639 $ anorm, ka, ka,
'N', a, lda, work( n+1 ),
647 IF( iinfo.NE.0 )
THEN
648 WRITE( nounit, fmt = 9999 )
'Generator', iinfo, n, jtype,
661 il = 1 + int( ( n-1 )*dlarnd( 1, iseed2 ) )
662 iu = 1 + int( ( n-1 )*dlarnd( 1, iseed2 ) )
691 CALL dlatms( n, n,
'U', iseed,
'P', work, 5, ten, one,
692 $ kb, kb, uplo, b, ldb, work( n+1 ),
699 CALL dlacpy(
' ', n, n, a, lda, z, ldz )
700 CALL dlacpy( uplo, n, n, b, ldb, bb, ldb )
702 CALL dsygv( ibtype,
'V', uplo, n, z, ldz, bb, ldb, d,
703 $ work, nwork, iinfo )
704 IF( iinfo.NE.0 )
THEN
705 WRITE( nounit, fmt = 9999 )
'DSYGV(V,' // uplo //
706 $
')', iinfo, n, jtype, ioldsd
708 IF( iinfo.LT.0 )
THEN
711 result( ntest ) = ulpinv
718 CALL dsgt01( ibtype, uplo, n, n, a, lda, b, ldb, z,
719 $ ldz, d, work, result( ntest ) )
725 CALL dlacpy(
' ', n, n, a, lda, z, ldz )
726 CALL dlacpy( uplo, n, n, b, ldb, bb, ldb )
729 $ bb, ldb, d2, work, nwork, iinfo )
730 IF( iinfo.NE.0 )
THEN
731 WRITE( nounit, fmt = 9999 )
732 $
'DSYGV_2STAGE(V,' // uplo //
733 $
')', iinfo, n, jtype, ioldsd
735 IF( iinfo.LT.0 )
THEN
738 result( ntest ) = ulpinv
755 temp1 = max( temp1, abs( d( j ) ),
757 temp2 = max( temp2, abs( d( j )-d2( j ) ) )
760 result( ntest ) = temp2 /
761 $ max( unfl, ulp*max( temp1, temp2 ) )
767 CALL dlacpy(
' ', n, n, a, lda, z, ldz )
768 CALL dlacpy( uplo, n, n, b, ldb, bb, ldb )
770 CALL dsygvd( ibtype,
'V', uplo, n, z, ldz, bb, ldb, d,
771 $ work, nwork, iwork, liwork, iinfo )
772 IF( iinfo.NE.0 )
THEN
773 WRITE( nounit, fmt = 9999 )
'DSYGVD(V,' // uplo //
774 $
')', iinfo, n, jtype, ioldsd
776 IF( iinfo.LT.0 )
THEN
779 result( ntest ) = ulpinv
786 CALL dsgt01( ibtype, uplo, n, n, a, lda, b, ldb, z,
787 $ ldz, d, work, result( ntest ) )
793 CALL dlacpy(
' ', n, n, a, lda, ab, lda )
794 CALL dlacpy( uplo, n, n, b, ldb, bb, ldb )
796 CALL dsygvx( ibtype,
'V',
'A', uplo, n, ab, lda, bb,
797 $ ldb, vl, vu, il, iu, abstol, m, d, z,
798 $ ldz, work, nwork, iwork( n+1 ), iwork,
800 IF( iinfo.NE.0 )
THEN
801 WRITE( nounit, fmt = 9999 )
'DSYGVX(V,A' // uplo //
802 $
')', iinfo, n, jtype, ioldsd
804 IF( iinfo.LT.0 )
THEN
807 result( ntest ) = ulpinv
814 CALL dsgt01( ibtype, uplo, n, n, a, lda, b, ldb, z,
815 $ ldz, d, work, result( ntest ) )
819 CALL dlacpy(
' ', n, n, a, lda, ab, lda )
820 CALL dlacpy( uplo, n, n, b, ldb, bb, ldb )
829 CALL dsygvx( ibtype,
'V',
'V', uplo, n, ab, lda, bb,
830 $ ldb, vl, vu, il, iu, abstol, m, d, z,
831 $ ldz, work, nwork, iwork( n+1 ), iwork,
833 IF( iinfo.NE.0 )
THEN
834 WRITE( nounit, fmt = 9999 )
'DSYGVX(V,V,' //
835 $ uplo //
')', iinfo, n, jtype, ioldsd
837 IF( iinfo.LT.0 )
THEN
840 result( ntest ) = ulpinv
847 CALL dsgt01( ibtype, uplo, n, m, a, lda, b, ldb, z,
848 $ ldz, d, work, result( ntest ) )
852 CALL dlacpy(
' ', n, n, a, lda, ab, lda )
853 CALL dlacpy( uplo, n, n, b, ldb, bb, ldb )
855 CALL dsygvx( ibtype,
'V',
'I', uplo, n, ab, lda, bb,
856 $ ldb, vl, vu, il, iu, abstol, m, d, z,
857 $ ldz, work, nwork, iwork( n+1 ), iwork,
859 IF( iinfo.NE.0 )
THEN
860 WRITE( nounit, fmt = 9999 )
'DSYGVX(V,I,' //
861 $ uplo //
')', iinfo, n, jtype, ioldsd
863 IF( iinfo.LT.0 )
THEN
866 result( ntest ) = ulpinv
873 CALL dsgt01( ibtype, uplo, n, m, a, lda, b, ldb, z,
874 $ ldz, d, work, result( ntest ) )
884 IF( lsame( uplo,
'U' ) )
THEN
904 CALL dspgv( ibtype,
'V', uplo, n, ap, bp, d, z, ldz,
906 IF( iinfo.NE.0 )
THEN
907 WRITE( nounit, fmt = 9999 )
'DSPGV(V,' // uplo //
908 $
')', iinfo, n, jtype, ioldsd
910 IF( iinfo.LT.0 )
THEN
913 result( ntest ) = ulpinv
920 CALL dsgt01( ibtype, uplo, n, n, a, lda, b, ldb, z,
921 $ ldz, d, work, result( ntest ) )
929 IF( lsame( uplo,
'U' ) )
THEN
949 CALL dspgvd( ibtype,
'V', uplo, n, ap, bp, d, z, ldz,
950 $ work, nwork, iwork, liwork, iinfo )
951 IF( iinfo.NE.0 )
THEN
952 WRITE( nounit, fmt = 9999 )
'DSPGVD(V,' // uplo //
953 $
')', iinfo, n, jtype, ioldsd
955 IF( iinfo.LT.0 )
THEN
958 result( ntest ) = ulpinv
965 CALL dsgt01( ibtype, uplo, n, n, a, lda, b, ldb, z,
966 $ ldz, d, work, result( ntest ) )
974 IF( lsame( uplo,
'U' ) )
THEN
994 CALL dspgvx( ibtype,
'V',
'A', uplo, n, ap, bp, vl,
995 $ vu, il, iu, abstol, m, d, z, ldz, work,
996 $ iwork( n+1 ), iwork, info )
997 IF( iinfo.NE.0 )
THEN
998 WRITE( nounit, fmt = 9999 )
'DSPGVX(V,A' // uplo //
999 $
')', iinfo, n, jtype, ioldsd
1001 IF( iinfo.LT.0 )
THEN
1004 result( ntest ) = ulpinv
1011 CALL dsgt01( ibtype, uplo, n, m, a, lda, b, ldb, z,
1012 $ ldz, d, work, result( ntest ) )
1018 IF( lsame( uplo,
'U' ) )
THEN
1022 ap( ij ) = a( i, j )
1023 bp( ij ) = b( i, j )
1031 ap( ij ) = a( i, j )
1032 bp( ij ) = b( i, j )
1040 CALL dspgvx( ibtype,
'V',
'V', uplo, n, ap, bp, vl,
1041 $ vu, il, iu, abstol, m, d, z, ldz, work,
1042 $ iwork( n+1 ), iwork, info )
1043 IF( iinfo.NE.0 )
THEN
1044 WRITE( nounit, fmt = 9999 )
'DSPGVX(V,V' // uplo //
1045 $
')', iinfo, n, jtype, ioldsd
1047 IF( iinfo.LT.0 )
THEN
1050 result( ntest ) = ulpinv
1057 CALL dsgt01( ibtype, uplo, n, m, a, lda, b, ldb, z,
1058 $ ldz, d, work, result( ntest ) )
1064 IF( lsame( uplo,
'U' ) )
THEN
1068 ap( ij ) = a( i, j )
1069 bp( ij ) = b( i, j )
1077 ap( ij ) = a( i, j )
1078 bp( ij ) = b( i, j )
1084 CALL dspgvx( ibtype,
'V',
'I', uplo, n, ap, bp, vl,
1085 $ vu, il, iu, abstol, m, d, z, ldz, work,
1086 $ iwork( n+1 ), iwork, info )
1087 IF( iinfo.NE.0 )
THEN
1088 WRITE( nounit, fmt = 9999 )
'DSPGVX(V,I' // uplo //
1089 $
')', iinfo, n, jtype, ioldsd
1091 IF( iinfo.LT.0 )
THEN
1094 result( ntest ) = ulpinv
1101 CALL dsgt01( ibtype, uplo, n, m, a, lda, b, ldb, z,
1102 $ ldz, d, work, result( ntest ) )
1106 IF( ibtype.EQ.1 )
THEN
1114 IF( lsame( uplo,
'U' ) )
THEN
1116 DO 320 i = max( 1, j-ka ), j
1117 ab( ka+1+i-j, j ) = a( i, j )
1119 DO 330 i = max( 1, j-kb ), j
1120 bb( kb+1+i-j, j ) = b( i, j )
1125 DO 350 i = j, min( n, j+ka )
1126 ab( 1+i-j, j ) = a( i, j )
1128 DO 360 i = j, min( n, j+kb )
1129 bb( 1+i-j, j ) = b( i, j )
1134 CALL dsbgv(
'V', uplo, n, ka, kb, ab, lda, bb, ldb,
1135 $ d, z, ldz, work, iinfo )
1136 IF( iinfo.NE.0 )
THEN
1137 WRITE( nounit, fmt = 9999 )
'DSBGV(V,' //
1138 $ uplo //
')', iinfo, n, jtype, ioldsd
1140 IF( iinfo.LT.0 )
THEN
1143 result( ntest ) = ulpinv
1150 CALL dsgt01( ibtype, uplo, n, n, a, lda, b, ldb, z,
1151 $ ldz, d, work, result( ntest ) )
1159 IF( lsame( uplo,
'U' ) )
THEN
1161 DO 380 i = max( 1, j-ka ), j
1162 ab( ka+1+i-j, j ) = a( i, j )
1164 DO 390 i = max( 1, j-kb ), j
1165 bb( kb+1+i-j, j ) = b( i, j )
1170 DO 410 i = j, min( n, j+ka )
1171 ab( 1+i-j, j ) = a( i, j )
1173 DO 420 i = j, min( n, j+kb )
1174 bb( 1+i-j, j ) = b( i, j )
1179 CALL dsbgvd(
'V', uplo, n, ka, kb, ab, lda, bb,
1180 $ ldb, d, z, ldz, work, nwork, iwork,
1182 IF( iinfo.NE.0 )
THEN
1183 WRITE( nounit, fmt = 9999 )
'DSBGVD(V,' //
1184 $ uplo //
')', iinfo, n, jtype, ioldsd
1186 IF( iinfo.LT.0 )
THEN
1189 result( ntest ) = ulpinv
1196 CALL dsgt01( ibtype, uplo, n, n, a, lda, b, ldb, z,
1197 $ ldz, d, work, result( ntest ) )
1205 IF( lsame( uplo,
'U' ) )
THEN
1207 DO 440 i = max( 1, j-ka ), j
1208 ab( ka+1+i-j, j ) = a( i, j )
1210 DO 450 i = max( 1, j-kb ), j
1211 bb( kb+1+i-j, j ) = b( i, j )
1216 DO 470 i = j, min( n, j+ka )
1217 ab( 1+i-j, j ) = a( i, j )
1219 DO 480 i = j, min( n, j+kb )
1220 bb( 1+i-j, j ) = b( i, j )
1225 CALL dsbgvx(
'V',
'A', uplo, n, ka, kb, ab, lda,
1226 $ bb, ldb, bp, max( 1, n ), vl, vu, il,
1227 $ iu, abstol, m, d, z, ldz, work,
1228 $ iwork( n+1 ), iwork, iinfo )
1229 IF( iinfo.NE.0 )
THEN
1230 WRITE( nounit, fmt = 9999 )
'DSBGVX(V,A' //
1231 $ uplo //
')', iinfo, n, jtype, ioldsd
1233 IF( iinfo.LT.0 )
THEN
1236 result( ntest ) = ulpinv
1243 CALL dsgt01( ibtype, uplo, n, m, a, lda, b, ldb, z,
1244 $ ldz, d, work, result( ntest ) )
1251 IF( lsame( uplo,
'U' ) )
THEN
1253 DO 500 i = max( 1, j-ka ), j
1254 ab( ka+1+i-j, j ) = a( i, j )
1256 DO 510 i = max( 1, j-kb ), j
1257 bb( kb+1+i-j, j ) = b( i, j )
1262 DO 530 i = j, min( n, j+ka )
1263 ab( 1+i-j, j ) = a( i, j )
1265 DO 540 i = j, min( n, j+kb )
1266 bb( 1+i-j, j ) = b( i, j )
1273 CALL dsbgvx(
'V',
'V', uplo, n, ka, kb, ab, lda,
1274 $ bb, ldb, bp, max( 1, n ), vl, vu, il,
1275 $ iu, abstol, m, d, z, ldz, work,
1276 $ iwork( n+1 ), iwork, iinfo )
1277 IF( iinfo.NE.0 )
THEN
1278 WRITE( nounit, fmt = 9999 )
'DSBGVX(V,V' //
1279 $ uplo //
')', iinfo, n, jtype, ioldsd
1281 IF( iinfo.LT.0 )
THEN
1284 result( ntest ) = ulpinv
1291 CALL dsgt01( ibtype, uplo, n, m, a, lda, b, ldb, z,
1292 $ ldz, d, work, result( ntest ) )
1298 IF( lsame( uplo,
'U' ) )
THEN
1300 DO 560 i = max( 1, j-ka ), j
1301 ab( ka+1+i-j, j ) = a( i, j )
1303 DO 570 i = max( 1, j-kb ), j
1304 bb( kb+1+i-j, j ) = b( i, j )
1309 DO 590 i = j, min( n, j+ka )
1310 ab( 1+i-j, j ) = a( i, j )
1312 DO 600 i = j, min( n, j+kb )
1313 bb( 1+i-j, j ) = b( i, j )
1318 CALL dsbgvx(
'V',
'I', uplo, n, ka, kb, ab, lda,
1319 $ bb, ldb, bp, max( 1, n ), vl, vu, il,
1320 $ iu, abstol, m, d, z, ldz, work,
1321 $ iwork( n+1 ), iwork, iinfo )
1322 IF( iinfo.NE.0 )
THEN
1323 WRITE( nounit, fmt = 9999 )
'DSBGVX(V,I' //
1324 $ uplo //
')', iinfo, n, jtype, ioldsd
1326 IF( iinfo.LT.0 )
THEN
1329 result( ntest ) = ulpinv
1336 CALL dsgt01( ibtype, uplo, n, m, a, lda, b, ldb, z,
1337 $ ldz, d, work, result( ntest ) )
1346 ntestt = ntestt + ntest
1347 CALL dlafts(
'DSG', n, n, jtype, ntest, result, ioldsd,
1348 $ thresh, nounit, nerrs )
1354 CALL dlasum(
'DSG', nounit, nerrs, ntestt )
1360 9999
FORMAT(
' DDRVSG2STG: ', a,
' returned INFO=', i6,
'.', / 9x,
1361 $
'N=', i6,
', JTYPE=', i6,
', ISEED=(', 3( i5,
',' ), i5,
')' )
subroutine dlacpy(UPLO, M, N, A, LDA, B, LDB)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dsygv_2stage(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, INFO)
DSYGV_2STAGE
subroutine dsygv(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, INFO)
DSYGV
subroutine dlatmr(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, RSIGN, GRADE, DL, MODEL, CONDL, DR, MODER, CONDR, PIVTNG, IPIVOT, KL, KU, SPARSE, ANORM, PACK, A, LDA, IWORK, INFO)
DLATMR
subroutine dspgvd(ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
DSPGVD
subroutine dsbgvx(JOBZ, RANGE, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, Q, LDQ, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, IWORK, IFAIL, INFO)
DSBGVX
subroutine ddrvsg2stg(NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, NOUNIT, A, LDA, B, LDB, D, D2, Z, LDZ, AB, BB, AP, BP, WORK, NWORK, IWORK, LIWORK, RESULT, INFO)
DDRVSG2STG
subroutine dlaset(UPLO, M, N, ALPHA, BETA, A, LDA)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values...
subroutine dsygvd(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, IWORK, LIWORK, INFO)
DSYGVD
subroutine dspgvx(ITYPE, JOBZ, RANGE, UPLO, N, AP, BP, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, IWORK, IFAIL, INFO)
DSPGVX
subroutine dspgv(ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, INFO)
DSPGV
subroutine dlafts(TYPE, M, N, IMAT, NTESTS, RESULT, ISEED, THRESH, IOUNIT, IE)
DLAFTS
subroutine dsygvx(ITYPE, JOBZ, RANGE, UPLO, N, A, LDA, B, LDB, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, LWORK, IWORK, IFAIL, INFO)
DSYGVX
subroutine dsbgvd(JOBZ, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, W, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
DSBGVD
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dlabad(SMALL, LARGE)
DLABAD
subroutine dlasum(TYPE, IOUNIT, IE, NRUN)
DLASUM
subroutine dlatms(M, N, DIST, ISEED, SYM, D, MODE, COND, DMAX, KL, KU, PACK, A, LDA, WORK, INFO)
DLATMS
subroutine dsgt01(ITYPE, UPLO, N, M, A, LDA, B, LDB, Z, LDZ, D, WORK, RESULT)
DSGT01
subroutine dsbgv(JOBZ, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, W, Z, LDZ, WORK, INFO)
DSBGV