SUBROUTINE CGERC (M, N, ALPHA, X, INCX, Y, INCY, A, LDA) C .. Scalar Arguments .. COMPLEX ALPHA INTEGER INCX, INCY, LDA, M, N C .. Array Arguments .. COMPLEX A( LDA, * ), X( * ), Y( * ) C .. Parameters .. COMPLEX ZERO PARAMETER ( ZERO = ( 0.0E+0, 0.0E+0 ) ) C .. Local Scalars .. COMPLEX TEMP INTEGER I, INFO, IX, J, JY, KX C .. External Subroutines .. EXTERNAL XERBLA C .. Intrinsic Functions .. INTRINSIC CONJG, MAX C***FIRST EXECUTABLE STATEMENT CGERC C C Test the input parameters. C INFO = 0 IF ( M.LT.0 )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( INCX.EQ.0 )THEN INFO = 5 ELSE IF( INCY.EQ.0 )THEN INFO = 7 ELSE IF( LDA.LT.MAX( 1, M ) )THEN INFO = 9 END IF IF( INFO.NE.0 )THEN CALL XERBLA( 'CGERC ', INFO ) RETURN END IF C C Quick return if possible. C IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR.( ALPHA.EQ.ZERO ) ) $ RETURN C C Start the operations. In this version the elements of A are C accessed sequentially with one pass through A. C IF( INCY.GT.0 )THEN JY = 1 ELSE JY = 1 - ( N - 1 )*INCY END IF IF( INCX.EQ.1 )THEN DO 20, J = 1, N IF( Y( JY ).NE.ZERO )THEN TEMP = ALPHA*CONJG( Y( JY ) ) DO 10, I = 1, M A( I, J ) = A( I, J ) + X( I )*TEMP 10 CONTINUE END IF JY = JY + INCY 20 CONTINUE ELSE IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( M - 1 )*INCX END IF DO 40, J = 1, N IF( Y( JY ).NE.ZERO )THEN TEMP = ALPHA*CONJG( Y( JY ) ) IX = KX DO 30, I = 1, M A( I, J ) = A( I, J ) + X( IX )*TEMP IX = IX + INCX 30 CONTINUE END IF JY = JY + INCY 40 CONTINUE END IF C RETURN C C End of CGERC . C END