|
ScaLAPACK
2.0.2
ScaLAPACK: Scalable Linear Algebra PACKage
|
00001 SUBROUTINE CMATADD( M, N, ALPHA, A, LDA, BETA, C, LDC ) 00002 * 00003 * -- ScaLAPACK tools routine (version 1.7) -- 00004 * University of Tennessee, Knoxville, Oak Ridge National Laboratory, 00005 * and University of California, Berkeley. 00006 * May 1, 1997 00007 * 00008 * .. Scalar Arguments .. 00009 INTEGER LDA, LDC, M, N 00010 COMPLEX ALPHA, BETA 00011 * .. 00012 * .. Array Arguments .. 00013 COMPLEX A( LDA, * ), C( LDC, * ) 00014 * .. 00015 * 00016 * Purpose 00017 * ======= 00018 * 00019 * CMATADD performs the following local matrix-matrix operation 00020 * 00021 * C := alpha * A + beta * C, 00022 * 00023 * where alpha and beta are scalars, and A and C are m by n arrays. 00024 * 00025 * Arguments 00026 * ========= 00027 * 00028 * M (local input) INTEGER 00029 * The number of rows of the array A. M >= 0. 00030 * 00031 * N (local input) INTEGER 00032 * The number of columns of the array A. N >= 0. 00033 * 00034 * ALPHA (local input) COMPLEX 00035 * The scalar ALPHA. 00036 * 00037 * A (local input) COMPLEX 00038 * Array, dimension (LDA,*), the array A. 00039 * 00040 * LDA (local input) INTEGER 00041 * The leading dimension of the array A, LDA >= MAX(1, M) 00042 * 00043 * BETA (local input) COMPLEX 00044 * The scalar BETA. 00045 * 00046 * C (local input/local output) COMPLEX 00047 * Array, dimension (LDC,*), the array C. 00048 * 00049 * LDC (local input) INTEGER 00050 * The leading dimension of the array C, LDC >= MAX(1, M) 00051 * 00052 * ===================================================================== 00053 * 00054 * .. Parameters .. 00055 COMPLEX ZERO, ONE 00056 PARAMETER ( ZERO = ( 0.0E+0, 0.0E+0 ), 00057 $ ONE = ( 1.0E+0, 0.0E+0 ) ) 00058 * .. 00059 * .. Local Scalars .. 00060 INTEGER I, J 00061 * .. 00062 * .. Executable Statements .. 00063 * 00064 * Quick return if possible. 00065 * 00066 IF( (M.EQ.0).OR.(N.EQ.0).OR.((ALPHA.EQ.ZERO).AND.(BETA.EQ.ONE)) ) 00067 $ RETURN 00068 * 00069 IF( N.EQ.1 ) THEN 00070 IF( BETA.EQ.ZERO ) THEN 00071 IF( ALPHA.EQ.ZERO ) THEN 00072 DO 10 I = 1, M 00073 C( I, 1 ) = ZERO 00074 10 CONTINUE 00075 ELSE 00076 DO 20 I = 1, M 00077 C( I, 1 ) = ALPHA*A( I, 1 ) 00078 20 CONTINUE 00079 END IF 00080 ELSE 00081 IF( ALPHA.EQ.ONE ) THEN 00082 IF( BETA.EQ.ONE ) THEN 00083 DO 30 I = 1, M 00084 C( I, 1 ) = A( I, 1 ) + C( I, 1 ) 00085 30 CONTINUE 00086 ELSE 00087 DO 40 I = 1, M 00088 C( I, 1 ) = A( I, 1 ) + BETA*C( I, 1 ) 00089 40 CONTINUE 00090 END IF 00091 ELSE IF( BETA.EQ.ONE ) THEN 00092 DO 50 I = 1, M 00093 C( I, 1 ) = ALPHA*A( I, 1 ) + C( I, 1 ) 00094 50 CONTINUE 00095 ELSE 00096 DO 60 I = 1, M 00097 C( I, 1 ) = ALPHA*A( I, 1 ) + BETA*C( I, 1 ) 00098 60 CONTINUE 00099 END IF 00100 END IF 00101 ELSE 00102 IF( BETA.EQ.ZERO ) THEN 00103 IF( ALPHA.EQ.ZERO ) THEN 00104 DO 80 J = 1, N 00105 DO 70 I = 1, M 00106 C( I, J ) = ZERO 00107 70 CONTINUE 00108 80 CONTINUE 00109 ELSE 00110 DO 100 J = 1, N 00111 DO 90 I = 1, M 00112 C( I, J ) = ALPHA * A( I, J ) 00113 90 CONTINUE 00114 100 CONTINUE 00115 END IF 00116 ELSE 00117 IF( ALPHA.EQ.ONE ) THEN 00118 IF( BETA.EQ.ONE ) THEN 00119 DO 120 J = 1, N 00120 DO 110 I = 1, M 00121 C( I, J ) = A( I, J ) + C( I, J ) 00122 110 CONTINUE 00123 120 CONTINUE 00124 ELSE 00125 DO 140 J = 1, N 00126 DO 130 I = 1, M 00127 C( I, J ) = A( I, J ) + BETA * C( I, J ) 00128 130 CONTINUE 00129 140 CONTINUE 00130 END IF 00131 ELSE IF( BETA.EQ.ONE ) THEN 00132 DO 160 J = 1, N 00133 DO 150 I = 1, M 00134 C( I, J ) = C( I, J ) + ALPHA * A( I, J ) 00135 150 CONTINUE 00136 160 CONTINUE 00137 ELSE 00138 DO 180 J = 1, N 00139 DO 170 I = 1, M 00140 C( I, J ) = ALPHA * A( I, J ) + BETA * C( I, J ) 00141 170 CONTINUE 00142 180 CONTINUE 00143 END IF 00144 END IF 00145 END IF 00146 * 00147 RETURN 00148 * 00149 * End of CMATADD 00150 * 00151 END