ScaLAPACK 2.1  2.1
ScaLAPACK: Scalable Linear Algebra PACKage
cmmadd.f
Go to the documentation of this file.
1  SUBROUTINE cmmadd( M, N, ALPHA, A, LDA, BETA, B, LDB )
2 *
3 * -- PBLAS auxiliary routine (version 2.0) --
4 * University of Tennessee, Knoxville, Oak Ridge National Laboratory,
5 * and University of California, Berkeley.
6 * April 1, 1998
7 *
8 * .. Scalar Arguments ..
9  INTEGER LDA, LDB, M, N
10  COMPLEX ALPHA, BETA
11 * ..
12 * .. Array Arguments ..
13  COMPLEX A( LDA, * ), B( LDB, * )
14 * ..
15 *
16 * Purpose
17 * =======
18 *
19 * CMMADD performs the following operation:
20 *
21 * B := alpha * A + beta * B,
22 *
23 * where alpha, beta are scalars and A and B are m by n matrices.
24 *
25 * Arguments
26 * =========
27 *
28 * M (local input) INTEGER
29 * On entry, M specifies the number of rows of A and B. M must
30 * be at least zero.
31 *
32 * N (local input) INTEGER
33 * On entry, N specifies the number of columns of A and B.
34 * N must be at least zero.
35 *
36 * ALPHA (local input) COMPLEX
37 * On entry, ALPHA specifies the scalar alpha. When ALPHA is
38 * supplied as zero then the local entries of the array A need
39 * not be set on input.
40 *
41 * A (local input) COMPLEX array
42 * On entry, A is an array of dimension ( LDA, N ).
43 *
44 * LDA (local input) INTEGER
45 * On entry, LDA specifies the leading dimension of the array A.
46 * LDA must be at least max( 1, M ).
47 *
48 * BETA (local input) COMPLEX
49 * On entry, BETA specifies the scalar beta. When BETA is sup-
50 * plied as zero then the local entries of the array B need not
51 * be set on input.
52 *
53 * B (local input/local output) COMPLEX array
54 * On entry, B is an array of dimension ( LDB, N ). On exit, the
55 * leading m by n part of A has been added to the leading m by n
56 * part of B.
57 *
58 * LDB (local input) INTEGER
59 * On entry, LDB specifies the leading dimension of the array B.
60 * LDB must be at least max( 1, M ).
61 *
62 * -- Written on April 1, 1998 by
63 * Antoine Petitet, University of Tennessee, Knoxville 37996, USA.
64 *
65 * =====================================================================
66 *
67 * .. Parameters ..
68  COMPLEX ONE, ZERO
69  parameter( one = ( 1.0e+0, 0.0e+0 ),
70  $ zero = ( 0.0e+0, 0.0e+0 ) )
71 * ..
72 * .. Local Scalars ..
73  INTEGER I, J
74 * ..
75 * .. External Subroutines ..
76  EXTERNAL caxpy, ccopy, cscal
77 * ..
78 * .. Executable Statements ..
79 *
80  IF( alpha.EQ.one ) THEN
81  IF( beta.EQ.zero ) THEN
82  DO 20 j = 1, n
83  CALL ccopy( m, a( 1, j ), 1, b( 1, j ), 1 )
84 * DO 10 I = 1, M
85 * B( I, J ) = A( I, J )
86 * 10 CONTINUE
87  20 CONTINUE
88  ELSE IF( beta.NE.one ) THEN
89  DO 40 j = 1, n
90  DO 30 i = 1, m
91  b( i, j ) = a( i, j ) + beta * b( i, j )
92  30 CONTINUE
93  40 CONTINUE
94  ELSE
95  DO 60 j = 1, n
96  CALL caxpy( m, one, a( 1, j ), 1, b( 1, j ), 1 )
97 * DO 50 I = 1, M
98 * B( I, J ) = A( I, J ) + B( I, J )
99 * 50 CONTINUE
100  60 CONTINUE
101  END IF
102  ELSE IF( alpha.NE.zero ) THEN
103  IF( beta.EQ.zero ) THEN
104  DO 80 j = 1, n
105  DO 70 i = 1, m
106  b( i, j ) = alpha * a( i, j )
107  70 CONTINUE
108  80 CONTINUE
109  ELSE IF( beta.NE.one ) THEN
110  DO 100 j = 1, n
111  DO 90 i = 1, m
112  b( i, j ) = alpha * a( i, j ) + beta * b( i, j )
113  90 CONTINUE
114  100 CONTINUE
115  ELSE
116  DO 120 j = 1, n
117  CALL caxpy( m, alpha, a( 1, j ), 1, b( 1, j ), 1 )
118 * DO 110 I = 1, M
119 * B( I, J ) = ALPHA * A( I, J ) + B( I, J )
120 * 110 CONTINUE
121  120 CONTINUE
122  END IF
123  ELSE
124  IF( beta.EQ.zero ) THEN
125  DO 140 j = 1, n
126  DO 130 i = 1, m
127  b( i, j ) = zero
128  130 CONTINUE
129  140 CONTINUE
130  ELSE IF( beta.NE.one ) THEN
131  DO 160 j = 1, n
132  CALL cscal( m, beta, b( 1, j ), 1 )
133 * DO 150 I = 1, M
134 * B( I, J ) = BETA * B( I, J )
135 * 150 CONTINUE
136  160 CONTINUE
137  END IF
138  END IF
139 *
140  RETURN
141 *
142 * End of CMMADD
143 *
144  END
cmmadd
subroutine cmmadd(M, N, ALPHA, A, LDA, BETA, B, LDB)
Definition: cmmadd.f:2