1 SUBROUTINE ZLAKF2( 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*16 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*16, 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*16, dimension ( LDA, N )
43 * D (input) COMPLEX*16, dimension ( LDA, M )
44 * E (input) COMPLEX*16, dimension ( LDA, N )
45 * The matrices used in forming the output matrix Z.
46 *
47 * Z (output) COMPLEX*16, 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*16 ZERO
57 PARAMETER ( ZERO = ( 0.0D+0, 0.0D+0 ) )
58 * ..
59 * .. Local Scalars ..
60 INTEGER I, IK, J, JK, L, MN, MN2
61 * ..
62 * .. External Subroutines ..
63 EXTERNAL ZLASET
64 * ..
65 * .. Executable Statements ..
66 *
67 * Initialize Z
68 *
69 MN = M*N
70 MN2 = 2*MN
71 CALL ZLASET( '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 ZLAKF2
122 *
123 END
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*16 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*16, 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*16, dimension ( LDA, N )
43 * D (input) COMPLEX*16, dimension ( LDA, M )
44 * E (input) COMPLEX*16, dimension ( LDA, N )
45 * The matrices used in forming the output matrix Z.
46 *
47 * Z (output) COMPLEX*16, 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*16 ZERO
57 PARAMETER ( ZERO = ( 0.0D+0, 0.0D+0 ) )
58 * ..
59 * .. Local Scalars ..
60 INTEGER I, IK, J, JK, L, MN, MN2
61 * ..
62 * .. External Subroutines ..
63 EXTERNAL ZLASET
64 * ..
65 * .. Executable Statements ..
66 *
67 * Initialize Z
68 *
69 MN = M*N
70 MN2 = 2*MN
71 CALL ZLASET( '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 ZLAKF2
122 *
123 END