228       SUBROUTINE chpt21( ITYPE, UPLO, N, KBAND, AP, D, E, U, LDU, VP,
 
  229      $                   TAU, WORK, RWORK, RESULT )
 
  238       INTEGER            ITYPE, KBAND, LDU, N
 
  241       REAL               D( * ), E( * ), RESULT( 2 ), RWORK( * )
 
  242       COMPLEX            AP( * ), TAU( * ), U( LDU, * ), VP( * ),
 
  250       parameter( zero = 0.0e+0, one = 1.0e+0, ten = 10.0e+0 )
 
  252       parameter( half = 1.0e+0 / 2.0e+0 )
 
  254       parameter( czero = ( 0.0e+0, 0.0e+0 ),
 
  255      $                   cone = ( 1.0e+0, 0.0e+0 ) )
 
  260       INTEGER            IINFO, J, JP, JP1, JR, LAP
 
  261       REAL               ANORM, ULP, UNFL, WNORM
 
  266       REAL               CLANGE, CLANHP, SLAMCH
 
  268       EXTERNAL           lsame, clange, clanhp, slamch, cdotc
 
  275       INTRINSIC          cmplx, max, min, real
 
  287       lap = ( n*( n+1 ) ) / 2
 
  289       IF( lsame( uplo, 
'U' ) ) 
THEN 
  297       unfl = slamch( 
'Safe minimum' )
 
  298       ulp = slamch( 
'Epsilon' )*slamch( 
'Base' )
 
  302       IF( itype.LT.1 .OR. itype.GT.3 ) 
THEN 
  303          result( 1 ) = ten / ulp
 
  311       IF( itype.EQ.3 ) 
THEN 
  314          anorm = max( clanhp( 
'1', cuplo, n, ap, rwork ), unfl )
 
  319       IF( itype.EQ.1 ) 
THEN 
  323          CALL claset( 
'Full', n, n, czero, czero, work, n )
 
  324          CALL ccopy( lap, ap, 1, work, 1 )
 
  327             CALL chpr( cuplo, n, -d( j ), u( 1, j ), 1, work )
 
  330          IF( n.GT.1 .AND. kband.EQ.1 ) 
THEN 
  332                CALL chpr2( cuplo, n, -cmplx( e( j ) ), u( 1, j ), 1,
 
  333      $                     u( 1, j-1 ), 1, work )
 
  336          wnorm = clanhp( 
'1', cuplo, n, work, rwork )
 
  338       ELSE IF( itype.EQ.2 ) 
THEN 
  342          CALL claset( 
'Full', n, n, czero, czero, work, n )
 
  346             DO 40 j = n - 1, 1, -1
 
  347                jp = ( ( 2*n-j )*( j-1 ) ) / 2
 
  349                IF( kband.EQ.1 ) 
THEN 
  350                   work( jp+j+1 ) = ( cone-tau( j ) )*e( j )
 
  352                      work( jp+jr ) = -tau( j )*e( j )*vp( jp+jr )
 
  356                IF( tau( j ).NE.czero ) 
THEN 
  359                   CALL chpmv( 
'L', n-j, cone, work( jp1+j+1 ),
 
  360      $                        vp( jp+j+1 ), 1, czero, work( lap+1 ), 1 )
 
  361                   temp = -half*tau( j )*cdotc( n-j, work( lap+1 ), 1,
 
  363                   CALL caxpy( n-j, temp, vp( jp+j+1 ), 1, work( lap+1 ),
 
  365                   CALL chpr2( 
'L', n-j, -tau( j ), vp( jp+j+1 ), 1,
 
  366      $                        work( lap+1 ), 1, work( jp1+j+1 ) )
 
  370                work( jp+j ) = d( j )
 
  375                jp = ( j*( j-1 ) ) / 2
 
  377                IF( kband.EQ.1 ) 
THEN 
  378                   work( jp1+j ) = ( cone-tau( j ) )*e( j )
 
  380                      work( jp1+jr ) = -tau( j )*e( j )*vp( jp1+jr )
 
  384                IF( tau( j ).NE.czero ) 
THEN 
  387                   CALL chpmv( 
'U', j, cone, work, vp( jp1+1 ), 1, czero,
 
  389                   temp = -half*tau( j )*cdotc( j, work( lap+1 ), 1,
 
  391                   CALL caxpy( j, temp, vp( jp1+1 ), 1, work( lap+1 ),
 
  393                   CALL chpr2( 
'U', j, -tau( j ), vp( jp1+1 ), 1,
 
  394      $                        work( lap+1 ), 1, work )
 
  397                work( jp1+j+1 ) = d( j+1 )
 
  402             work( j ) = work( j ) - ap( j )
 
  404          wnorm = clanhp( 
'1', cuplo, n, work, rwork )
 
  406       ELSE IF( itype.EQ.3 ) 
THEN 
  412          CALL clacpy( 
' ', n, n, u, ldu, work, n )
 
  413          CALL cupmtr( 
'R', cuplo, 
'C', n, n, vp, tau, work, n,
 
  414      $                work( n**2+1 ), iinfo )
 
  415          IF( iinfo.NE.0 ) 
THEN 
  416             result( 1 ) = ten / ulp
 
  421             work( ( n+1 )*( j-1 )+1 ) = work( ( n+1 )*( j-1 )+1 ) - cone
 
  424          wnorm = clange( 
'1', n, n, work, n, rwork )
 
  427       IF( anorm.GT.wnorm ) 
THEN 
  428          result( 1 ) = ( wnorm / anorm ) / ( n*ulp )
 
  430          IF( anorm.LT.one ) 
THEN 
  431             result( 1 ) = ( min( wnorm, n*anorm ) / anorm ) / ( n*ulp )
 
  433             result( 1 ) = min( wnorm / anorm, real( n ) ) / ( n*ulp )
 
  441       IF( itype.EQ.1 ) 
THEN 
  442          CALL cgemm( 
'N', 
'C', n, n, n, cone, u, ldu, u, ldu, czero,
 
  446             work( ( n+1 )*( j-1 )+1 ) = work( ( n+1 )*( j-1 )+1 ) - cone
 
  449          result( 2 ) = min( clange( 
'1', n, n, work, n, rwork ),
 
  450      $                 real( n ) ) / ( n*ulp )