1*> \brief \b ZLACRM multiplies a complex matrix by a square real matrix. 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8*> \htmlonly 9*> Download ZLACRM + dependencies 10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlacrm.f"> 11*> [TGZ]</a> 12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlacrm.f"> 13*> [ZIP]</a> 14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacrm.f"> 15*> [TXT]</a> 16*> \endhtmlonly 17* 18* Definition: 19* =========== 20* 21* SUBROUTINE ZLACRM( M, N, A, LDA, B, LDB, C, LDC, RWORK ) 22* 23* .. Scalar Arguments .. 24* INTEGER LDA, LDB, LDC, M, N 25* .. 26* .. Array Arguments .. 27* DOUBLE PRECISION B( LDB, * ), RWORK( * ) 28* COMPLEX*16 A( LDA, * ), C( LDC, * ) 29* .. 30* 31* 32*> \par Purpose: 33* ============= 34*> 35*> \verbatim 36*> 37*> ZLACRM performs a very simple matrix-matrix multiplication: 38*> C := A * B, 39*> where A is M by N and complex; B is N by N and real; 40*> C is M by N and complex. 41*> \endverbatim 42* 43* Arguments: 44* ========== 45* 46*> \param[in] M 47*> \verbatim 48*> M is INTEGER 49*> The number of rows of the matrix A and of the matrix C. 50*> M >= 0. 51*> \endverbatim 52*> 53*> \param[in] N 54*> \verbatim 55*> N is INTEGER 56*> The number of columns and rows of the matrix B and 57*> the number of columns of the matrix C. 58*> N >= 0. 59*> \endverbatim 60*> 61*> \param[in] A 62*> \verbatim 63*> A is COMPLEX*16 array, dimension (LDA, N) 64*> A contains the M by N matrix A. 65*> \endverbatim 66*> 67*> \param[in] LDA 68*> \verbatim 69*> LDA is INTEGER 70*> The leading dimension of the array A. LDA >=max(1,M). 71*> \endverbatim 72*> 73*> \param[in] B 74*> \verbatim 75*> B is DOUBLE PRECISION array, dimension (LDB, N) 76*> B contains the N by N matrix B. 77*> \endverbatim 78*> 79*> \param[in] LDB 80*> \verbatim 81*> LDB is INTEGER 82*> The leading dimension of the array B. LDB >=max(1,N). 83*> \endverbatim 84*> 85*> \param[in] C 86*> \verbatim 87*> C is COMPLEX*16 array, dimension (LDC, N) 88*> C contains the M by N matrix C. 89*> \endverbatim 90*> 91*> \param[in] LDC 92*> \verbatim 93*> LDC is INTEGER 94*> The leading dimension of the array C. LDC >=max(1,N). 95*> \endverbatim 96*> 97*> \param[out] RWORK 98*> \verbatim 99*> RWORK is DOUBLE PRECISION array, dimension (2*M*N) 100*> \endverbatim 101* 102* Authors: 103* ======== 104* 105*> \author Univ. of Tennessee 106*> \author Univ. of California Berkeley 107*> \author Univ. of Colorado Denver 108*> \author NAG Ltd. 109* 110*> \date September 2012 111* 112*> \ingroup complex16OTHERauxiliary 113* 114* ===================================================================== 115 SUBROUTINE ZLACRM( M, N, A, LDA, B, LDB, C, LDC, RWORK ) 116* 117* -- LAPACK auxiliary routine (version 3.4.2) -- 118* -- LAPACK is a software package provided by Univ. of Tennessee, -- 119* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 120* September 2012 121* 122* .. Scalar Arguments .. 123 INTEGER LDA, LDB, LDC, M, N 124* .. 125* .. Array Arguments .. 126 DOUBLE PRECISION B( LDB, * ), RWORK( * ) 127 COMPLEX*16 A( LDA, * ), C( LDC, * ) 128* .. 129* 130* ===================================================================== 131* 132* .. Parameters .. 133 DOUBLE PRECISION ONE, ZERO 134 PARAMETER ( ONE = 1.0D0, ZERO = 0.0D0 ) 135* .. 136* .. Local Scalars .. 137 INTEGER I, J, L 138* .. 139* .. Intrinsic Functions .. 140 INTRINSIC DBLE, DCMPLX, DIMAG 141* .. 142* .. External Subroutines .. 143 EXTERNAL DGEMM 144* .. 145* .. Executable Statements .. 146* 147* Quick return if possible. 148* 149 IF( ( M.EQ.0 ) .OR. ( N.EQ.0 ) ) 150 $ RETURN 151* 152 DO 20 J = 1, N 153 DO 10 I = 1, M 154 RWORK( ( J-1 )*M+I ) = DBLE( A( I, J ) ) 155 10 CONTINUE 156 20 CONTINUE 157* 158 L = M*N + 1 159 CALL DGEMM( 'N', 'N', M, N, N, ONE, RWORK, M, B, LDB, ZERO, 160 $ RWORK( L ), M ) 161 DO 40 J = 1, N 162 DO 30 I = 1, M 163 C( I, J ) = RWORK( L+( J-1 )*M+I-1 ) 164 30 CONTINUE 165 40 CONTINUE 166* 167 DO 60 J = 1, N 168 DO 50 I = 1, M 169 RWORK( ( J-1 )*M+I ) = DIMAG( A( I, J ) ) 170 50 CONTINUE 171 60 CONTINUE 172 CALL DGEMM( 'N', 'N', M, N, N, ONE, RWORK, M, B, LDB, ZERO, 173 $ RWORK( L ), M ) 174 DO 80 J = 1, N 175 DO 70 I = 1, M 176 C( I, J ) = DCMPLX( DBLE( C( I, J ) ), 177 $ RWORK( L+( J-1 )*M+I-1 ) ) 178 70 CONTINUE 179 80 CONTINUE 180* 181 RETURN 182* 183* End of ZLACRM 184* 185 END 186