1       SUBROUTINE CLAKF2( M, N, A, LDA, B, D, E, Z, LDZ )
  2 *
  3 *  -- LAPACK test routine (version 3.1) --
  4 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
  5 *     November 2006
  6 *
  7 *     .. Scalar Arguments ..
  8       INTEGER            LDA, LDZ, M, N
  9 *     ..
 10 *     .. Array Arguments ..
 11       COMPLEX            A( LDA, * ), B( LDA, * ), D( LDA, * ),
 12      $                   E( LDA, * ), Z( LDZ, * )
 13 *     ..
 14 *
 15 *  Purpose
 16 *  =======
 17 *
 18 *  Form the 2*M*N by 2*M*N matrix
 19 *
 20 *         Z = [ kron(In, A)  -kron(B', Im) ]
 21 *             [ kron(In, D)  -kron(E', Im) ],
 22 *
 23 *  where In is the identity matrix of size n and X' is the transpose
 24 *  of X. kron(X, Y) is the Kronecker product between the matrices X
 25 *  and Y.
 26 *
 27 *  Arguments
 28 *  =========
 29 *
 30 *  M       (input) INTEGER
 31 *          Size of matrix, must be >= 1.
 32 *
 33 *  N       (input) INTEGER
 34 *          Size of matrix, must be >= 1.
 35 *
 36 *  A       (input) COMPLEX, dimension ( LDA, M )
 37 *          The matrix A in the output matrix Z.
 38 *
 39 *  LDA     (input) INTEGER
 40 *          The leading dimension of A, B, D, and E. ( LDA >= M+N )
 41 *
 42 *  B       (input) COMPLEX, dimension ( LDA, N )
 43 *  D       (input) COMPLEX, dimension ( LDA, M )
 44 *  E       (input) COMPLEX, dimension ( LDA, N )
 45 *          The matrices used in forming the output matrix Z.
 46 *
 47 *  Z       (output) COMPLEX, dimension ( LDZ, 2*M*N )
 48 *          The resultant Kronecker M*N*2 by M*N*2 matrix (see above.)
 49 *
 50 *  LDZ     (input) INTEGER
 51 *          The leading dimension of Z. ( LDZ >= 2*M*N )
 52 *
 53 *  ====================================================================
 54 *
 55 *     .. Parameters ..
 56       COMPLEX            ZERO
 57       PARAMETER          ( ZERO = ( 0.0E+00.0E+0 ) )
 58 *     ..
 59 *     .. Local Scalars ..
 60       INTEGER            I, IK, J, JK, L, MN, MN2
 61 *     ..
 62 *     .. External Subroutines ..
 63       EXTERNAL           CLASET
 64 *     ..
 65 *     .. Executable Statements ..
 66 *
 67 *     Initialize Z
 68 *
 69       MN = M*N
 70       MN2 = 2*MN
 71       CALL CLASET( 'Full', MN2, MN2, ZERO, ZERO, Z, LDZ )
 72 *
 73       IK = 1
 74       DO 50 L = 1, N
 75 *
 76 *        form kron(In, A)
 77 *
 78          DO 20 I = 1, M
 79             DO 10 J = 1, M
 80                Z( IK+I-1, IK+J-1 ) = A( I, J )
 81    10       CONTINUE
 82    20    CONTINUE
 83 *
 84 *        form kron(In, D)
 85 *
 86          DO 40 I = 1, M
 87             DO 30 J = 1, M
 88                Z( IK+MN+I-1, IK+J-1 ) = D( I, J )
 89    30       CONTINUE
 90    40    CONTINUE
 91 *
 92          IK = IK + M
 93    50 CONTINUE
 94 *
 95       IK = 1
 96       DO 90 L = 1, N
 97          JK = MN + 1
 98 *
 99          DO 80 J = 1, N
100 *
101 *           form -kron(B', Im)
102 *
103             DO 60 I = 1, M
104                Z( IK+I-1, JK+I-1 ) = -B( J, L )
105    60       CONTINUE
106 *
107 *           form -kron(E', Im)
108 *
109             DO 70 I = 1, M
110                Z( IK+MN+I-1, JK+I-1 ) = -E( J, L )
111    70       CONTINUE
112 *
113             JK = JK + M
114    80    CONTINUE
115 *
116          IK = IK + M
117    90 CONTINUE
118 *
119       RETURN
120 *
121 *     End of CLAKF2
122 *
123       END