175 SUBROUTINE zla_geamv ( TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA,
184 DOUBLE PRECISION ALPHA, BETA
185 INTEGER INCX, INCY, LDA, M, N
189 COMPLEX*16 A( lda, * ), X( * )
190 DOUBLE PRECISION Y( * )
197 parameter( one = 1.0d+0, zero = 0.0d+0 )
201 DOUBLE PRECISION TEMP, SAFE1
202 INTEGER I, INFO, IY, J, JX, KX, KY, LENX, LENY
207 DOUBLE PRECISION DLAMCH
214 INTRINSIC max, abs,
REAL, DIMAG, SIGN
217 DOUBLE PRECISION CABS1
220 cabs1( cdum ) = abs( dble( cdum ) ) + abs( dimag( cdum ) )
227 IF ( .NOT.( ( trans.EQ.ilatrans(
'N' ) )
228 $ .OR. ( trans.EQ.ilatrans(
'T' ) )
229 $ .OR. ( trans.EQ.ilatrans(
'C' ) ) ) )
THEN 231 ELSE IF( m.LT.0 )
THEN 233 ELSE IF( n.LT.0 )
THEN 235 ELSE IF( lda.LT.max( 1, m ) )
THEN 237 ELSE IF( incx.EQ.0 )
THEN 239 ELSE IF( incy.EQ.0 )
THEN 243 CALL xerbla(
'ZLA_GEAMV ', info )
249 IF( ( m.EQ.0 ).OR.( n.EQ.0 ).OR.
250 $ ( ( alpha.EQ.zero ).AND.( beta.EQ.one ) ) )
256 IF( trans.EQ.ilatrans(
'N' ) )
THEN 266 kx = 1 - ( lenx - 1 )*incx
271 ky = 1 - ( leny - 1 )*incy
277 safe1 = dlamch(
'Safe minimum' )
287 IF ( incx.EQ.1 )
THEN 288 IF( trans.EQ.ilatrans(
'N' ) )
THEN 290 IF ( beta .EQ. 0.0d+0 )
THEN 293 ELSE IF ( y( iy ) .EQ. 0.0d+0 )
THEN 297 y( iy ) = beta * abs( y( iy ) )
299 IF ( alpha .NE. 0.0d+0 )
THEN 301 temp = cabs1( a( i, j ) )
302 symb_zero = symb_zero .AND.
303 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
305 y( iy ) = y( iy ) + alpha*cabs1( x( j ) )*temp
309 IF ( .NOT.symb_zero ) y( iy ) =
310 $ y( iy ) + sign( safe1, y( iy ) )
316 IF ( beta .EQ. 0.0d+0 )
THEN 319 ELSE IF ( y( iy ) .EQ. 0.0d+0 )
THEN 323 y( iy ) = beta * abs( y( iy ) )
325 IF ( alpha .NE. 0.0d+0 )
THEN 327 temp = cabs1( a( j, i ) )
328 symb_zero = symb_zero .AND.
329 $ ( x( j ) .EQ. zero .OR. temp .EQ. zero )
331 y( iy ) = y( iy ) + alpha*cabs1( x( j ) )*temp
335 IF ( .NOT.symb_zero ) y( iy ) =
336 $ y( iy ) + sign( safe1, y( iy ) )
342 IF( trans.EQ.ilatrans(
'N' ) )
THEN 344 IF ( beta .EQ. 0.0d+0 )
THEN 347 ELSE IF ( y( iy ) .EQ. 0.0d+0 )
THEN 351 y( iy ) = beta * abs( y( iy ) )
353 IF ( alpha .NE. 0.0d+0 )
THEN 356 temp = cabs1( a( i, j ) )
357 symb_zero = symb_zero .AND.
358 $ ( x( jx ) .EQ. zero .OR. temp .EQ. zero )
360 y( iy ) = y( iy ) + alpha*cabs1( x( jx ) )*temp
365 IF ( .NOT.symb_zero ) y( iy ) =
366 $ y( iy ) + sign( safe1, y( iy ) )
372 IF ( beta .EQ. 0.0d+0 )
THEN 375 ELSE IF ( y( iy ) .EQ. 0.0d+0 )
THEN 379 y( iy ) = beta * abs( y( iy ) )
381 IF ( alpha .NE. 0.0d+0 )
THEN 384 temp = cabs1( a( j, i ) )
385 symb_zero = symb_zero .AND.
386 $ ( x( jx ) .EQ. zero .OR. temp .EQ. zero )
388 y( iy ) = y( iy ) + alpha*cabs1( x( jx ) )*temp
393 IF ( .NOT.symb_zero ) y( iy ) =
394 $ y( iy ) + sign( safe1, y( iy ) )
double precision function dlamch(CMACH)
DLAMCH
integer function ilatrans(TRANS)
ILATRANS
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zla_geamv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZLA_GEAMV computes a matrix-vector product using a general matrix to calculate error bounds...