ScaLAPACK  2.0.2
ScaLAPACK: Scalable Linear Algebra PACKage
cmatadd.f
Go to the documentation of this file.
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