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
|
SUBROUTINE IMMDDA( M, N, ALPHA, A, LDA, BETA, B, LDB )
*
* -- PBLAS auxiliary routine (version 2.0) --
* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
* and University of California, Berkeley.
* April 1, 1998
*
* .. Scalar Arguments ..
INTEGER LDA, LDB, M, N
INTEGER ALPHA, BETA
* ..
* .. Array Arguments ..
INTEGER A( LDA, * ), B( LDB, * )
* ..
*
* Purpose
* =======
*
* IMMDDA performs the following operation:
*
* A := alpha * A + beta * B,
*
* where alpha, beta are scalars and A and B are m by n matrices.
*
* Arguments
* =========
*
* M (local input) INTEGER
* On entry, M specifies the number of rows of A and B. M must
* be at least zero.
*
* N (local input) INTEGER
* On entry, N specifies the number of columns of A and B.
* N must be at least zero.
*
* ALPHA (local input) INTEGER
* On entry, ALPHA specifies the scalar alpha. When ALPHA is
* supplied as zero then the local entries of the array A need
* not be set on input.
*
* A (local input/local output) INTEGER array
* On entry, A is an array of dimension ( LDA, N ). On exit, the
* leading m by n part of B has been added to the leading m by n
* part of A.
*
* LDA (local input) INTEGER
* On entry, LDA specifies the leading dimension of the array A.
* LDA must be at least max( 1, M ).
*
* BETA (local input) INTEGER
* On entry, BETA specifies the scalar beta. When BETA is sup-
* plied as zero then the local entries of the array B need not
* be set on input.
*
* B (local input) INTEGER array
* On entry, B is an array of dimension ( LDB, N ).
*
* LDB (local input) INTEGER
* On entry, LDB specifies the leading dimension of the array B.
* LDB must be at least max( 1, M ).
*
* -- Written on April 1, 1998 by
* Antoine Petitet, University of Tennessee, Knoxville 37996, USA.
*
* =====================================================================
*
* .. Parameters ..
INTEGER ONE, ZERO
PARAMETER ( ONE = 1, ZERO = 0 )
* ..
* .. Local Scalars ..
INTEGER I, J
* ..
* .. Executable Statements ..
*
IF( BETA.EQ.ONE ) THEN
IF( ALPHA.EQ.ZERO ) THEN
DO 20 J = 1, N
DO 10 I = 1, M
A( I, J ) = B( I, J )
10 CONTINUE
20 CONTINUE
ELSE IF( ALPHA.NE.ONE ) THEN
DO 40 J = 1, N
DO 30 I = 1, M
A( I, J ) = B( I, J ) + ALPHA * A( I, J )
30 CONTINUE
40 CONTINUE
ELSE
DO 60 J = 1, N
DO 50 I = 1, M
A( I, J ) = B( I, J ) + A( I, J )
50 CONTINUE
60 CONTINUE
END IF
ELSE IF( BETA.NE.ZERO ) THEN
IF( ALPHA.EQ.ZERO ) THEN
DO 80 J = 1, N
DO 70 I = 1, M
A( I, J ) = BETA * B( I, J )
70 CONTINUE
80 CONTINUE
ELSE IF( ALPHA.NE.ONE ) THEN
DO 100 J = 1, N
DO 90 I = 1, M
A( I, J ) = BETA * B( I, J ) + ALPHA * A( I, J )
90 CONTINUE
100 CONTINUE
ELSE
DO 120 J = 1, N
DO 110 I = 1, M
A( I, J ) = BETA * B( I, J ) + A( I, J )
110 CONTINUE
120 CONTINUE
END IF
ELSE
IF( ALPHA.EQ.ZERO ) THEN
DO 140 J = 1, N
DO 130 I = 1, M
A( I, J ) = ZERO
130 CONTINUE
140 CONTINUE
ELSE IF( ALPHA.NE.ONE ) THEN
DO 160 J = 1, N
DO 150 I = 1, M
A( I, J ) = ALPHA * A( I, J )
150 CONTINUE
160 CONTINUE
END IF
END IF
*
RETURN
*
* End of IMMDDA
*
END
|