179 SUBROUTINE zla_syamv( UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y,
188 DOUBLE PRECISION ALPHA, BETA
189 INTEGER INCX, INCY, LDA, N
193 COMPLEX*16 A( lda, * ), X( * )
194 DOUBLE PRECISION Y( * )
200 DOUBLE PRECISION ONE, ZERO
201 parameter ( one = 1.0d+0, zero = 0.0d+0 )
205 DOUBLE PRECISION TEMP, SAFE1
206 INTEGER I, INFO, IY, J, JX, KX, KY
211 DOUBLE PRECISION DLAMCH
218 INTRINSIC max, abs, sign,
REAL, DIMAG
221 DOUBLE PRECISION CABS1
224 cabs1( zdum ) = abs( dble( zdum ) ) + abs( dimag( zdum ) )
231 IF ( uplo.NE.ilauplo(
'U' ) .AND.
232 $ uplo.NE.ilauplo(
'L' ) )
THEN
234 ELSE IF( n.LT.0 )
THEN
236 ELSE IF( lda.LT.max( 1, n ) )
THEN
238 ELSE IF( incx.EQ.0 )
THEN
240 ELSE IF( incy.EQ.0 )
THEN
244 CALL xerbla(
'DSYMV ', info )
250 IF( ( n.EQ.0 ).OR.( ( alpha.EQ.zero ).AND.( beta.EQ.one ) ) )
258 kx = 1 - ( n - 1 )*incx
263 ky = 1 - ( n - 1 )*incy
269 safe1 = dlamch(
'Safe minimum' )
279 IF ( incx.EQ.1 )
THEN
280 IF ( uplo .EQ. ilauplo(
'U' ) )
THEN
282 IF ( beta .EQ. zero )
THEN
285 ELSE IF ( y( iy ) .EQ. zero )
THEN
289 y( iy ) = beta * abs( y( iy ) )
291 IF ( alpha .NE. zero )
THEN
293 temp = cabs1( a( j, i ) )
294 symb_zero = symb_zero .AND.
295 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
297 y( iy ) = y( iy ) + alpha*cabs1( x( j ) )*temp
300 temp = cabs1( a( i, j ) )
301 symb_zero = symb_zero .AND.
302 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
304 y( iy ) = y( iy ) + alpha*cabs1( x( j ) )*temp
308 IF ( .NOT.symb_zero )
309 $ y( iy ) = y( iy ) + sign( safe1, y( iy ) )
315 IF ( beta .EQ. zero )
THEN
318 ELSE IF ( y( iy ) .EQ. zero )
THEN
322 y( iy ) = beta * abs( y( iy ) )
324 IF ( alpha .NE. zero )
THEN
326 temp = cabs1( a( i, j ) )
327 symb_zero = symb_zero .AND.
328 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
330 y( iy ) = y( iy ) + alpha*cabs1( x( j ) )*temp
333 temp = cabs1( a( j, i ) )
334 symb_zero = symb_zero .AND.
335 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
337 y( iy ) = y( iy ) + alpha*cabs1( x( j ) )*temp
341 IF ( .NOT.symb_zero )
342 $ y( iy ) = y( iy ) + sign( safe1, y( iy ) )
348 IF ( uplo .EQ. ilauplo(
'U' ) )
THEN
350 IF ( beta .EQ. zero )
THEN
353 ELSE IF ( y( iy ) .EQ. zero )
THEN
357 y( iy ) = beta * abs( y( iy ) )
360 IF ( alpha .NE. zero )
THEN
362 temp = cabs1( a( j, i ) )
363 symb_zero = symb_zero .AND.
364 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
366 y( iy ) = y( iy ) + alpha*cabs1( x( jx ) )*temp
370 temp = cabs1( a( i, j ) )
371 symb_zero = symb_zero .AND.
372 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
374 y( iy ) = y( iy ) + alpha*cabs1( x( jx ) )*temp
379 IF ( .NOT.symb_zero )
380 $ y( iy ) = y( iy ) + sign( safe1, y( iy ) )
386 IF ( beta .EQ. zero )
THEN
389 ELSE IF ( y( iy ) .EQ. zero )
THEN
393 y( iy ) = beta * abs( y( iy ) )
396 IF ( alpha .NE. zero )
THEN
398 temp = cabs1( a( i, j ) )
399 symb_zero = symb_zero .AND.
400 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
402 y( iy ) = y( iy ) + alpha*cabs1( x( jx ) )*temp
406 temp = cabs1( a( j, i ) )
407 symb_zero = symb_zero .AND.
408 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
410 y( iy ) = y( iy ) + alpha*cabs1( x( jx ) )*temp
415 IF ( .NOT.symb_zero )
416 $ y( iy ) = y( iy ) + sign( safe1, y( iy ) )
double precision function dlamch(CMACH)
DLAMCH
subroutine xerbla(SRNAME, INFO)
XERBLA
integer function ilauplo(UPLO)
ILAUPLO
subroutine zla_syamv(UPLO, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZLA_SYAMV computes a matrix-vector product using a symmetric indefinite matrix to calculate error bou...