1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
SUBROUTINE ZMATADD( M, N, ALPHA, A, LDA, BETA, C, LDC )
*
* -- ScaLAPACK tools routine (version 1.7) --
* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
* and University of California, Berkeley.
* May 1, 1997
*
* .. Scalar Arguments ..
INTEGER LDA, LDC, M, N
COMPLEX*16 ALPHA, BETA
* ..
* .. Array Arguments ..
COMPLEX*16 A( LDA, * ), C( LDC, * )
* ..
*
* Purpose
* =======
*
* ZMATADD performs the following local matrix-matrix operation
*
* C := alpha * A + beta * C,
*
* where alpha and beta are scalars, and A and C are m by n arrays.
*
* Arguments
* =========
*
* M (local input) INTEGER
* The number of rows of the array A. M >= 0.
*
* N (local input) INTEGER
* The number of columns of the array A. N >= 0.
*
* ALPHA (local input) COMPLEX*16
* The scalar ALPHA.
*
* A (local input) COMPLEX*16
* Array, dimension (LDA,*), the array A.
*
* LDA (local input) INTEGER
* The leading dimension of the array A, LDA >= MAX(1, M)
*
* BETA (local input) COMPLEX*16
* The scalar BETA.
*
* C (local input/local output) COMPLEX*16
* Array, dimension (LDC,*), the array C.
*
* LDC (local input) INTEGER
* The leading dimension of the array C, LDC >= MAX(1, M)
*
* =====================================================================
*
* .. Parameters ..
COMPLEX*16 ZERO, ONE
PARAMETER ( ZERO = ( 0.0D+0, 0.0D+0 ),
$ ONE = ( 1.0D+0, 0.0D+0 ) )
* ..
* .. Local Scalars ..
INTEGER I, J
* ..
* .. Executable Statements ..
*
* Quick return if possible.
*
IF( (M.EQ.0).OR.(N.EQ.0).OR.((ALPHA.EQ.ZERO).AND.(BETA.EQ.ONE)) )
$ RETURN
*
IF( N.EQ.1 ) THEN
IF( BETA.EQ.ZERO ) THEN
IF( ALPHA.EQ.ZERO ) THEN
DO 10 I = 1, M
C( I, 1 ) = ZERO
10 CONTINUE
ELSE
DO 20 I = 1, M
C( I, 1 ) = ALPHA*A( I, 1 )
20 CONTINUE
END IF
ELSE
IF( ALPHA.EQ.ONE ) THEN
IF( BETA.EQ.ONE ) THEN
DO 30 I = 1, M
C( I, 1 ) = A( I, 1 ) + C( I, 1 )
30 CONTINUE
ELSE
DO 40 I = 1, M
C( I, 1 ) = A( I, 1 ) + BETA*C( I, 1 )
40 CONTINUE
END IF
ELSE IF( BETA.EQ.ONE ) THEN
DO 50 I = 1, M
C( I, 1 ) = ALPHA*A( I, 1 ) + C( I, 1 )
50 CONTINUE
ELSE
DO 60 I = 1, M
C( I, 1 ) = ALPHA*A( I, 1 ) + BETA*C( I, 1 )
60 CONTINUE
END IF
END IF
ELSE
IF( BETA.EQ.ZERO ) THEN
IF( ALPHA.EQ.ZERO ) THEN
DO 80 J = 1, N
DO 70 I = 1, M
C( I, J ) = ZERO
70 CONTINUE
80 CONTINUE
ELSE
DO 100 J = 1, N
DO 90 I = 1, M
C( I, J ) = ALPHA * A( I, J )
90 CONTINUE
100 CONTINUE
END IF
ELSE
IF( ALPHA.EQ.ONE ) THEN
IF( BETA.EQ.ONE ) THEN
DO 120 J = 1, N
DO 110 I = 1, M
C( I, J ) = A( I, J ) + C( I, J )
110 CONTINUE
120 CONTINUE
ELSE
DO 140 J = 1, N
DO 130 I = 1, M
C( I, J ) = A( I, J ) + BETA * C( I, J )
130 CONTINUE
140 CONTINUE
END IF
ELSE IF( BETA.EQ.ONE ) THEN
DO 160 J = 1, N
DO 150 I = 1, M
C( I, J ) = C( I, J ) + ALPHA * A( I, J )
150 CONTINUE
160 CONTINUE
ELSE
DO 180 J = 1, N
DO 170 I = 1, M
C( I, J ) = ALPHA * A( I, J ) + BETA * C( I, J )
170 CONTINUE
180 CONTINUE
END IF
END IF
END IF
*
RETURN
*
* End of ZMATADD
*
END
|