1 //
2 // Copyright (c) 2000-2002
3 // Joerg Walter, Mathias Koch
4 //
5 // Distributed under the Boost Software License, Version 1.0. (See
6 // accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8 //
9 // The authors gratefully acknowledge the support of
10 // GeNeSys mbH & Co. KG in producing this work.
11 //
12
13 #if defined(__GNUC__) && (__GNUC__ >= 9)
14 #pragma GCC diagnostic ignored "-Wdeprecated-copy"
15 #endif
16
17 #include "test2.hpp"
18
19 template <class M, int N>
test()20 void test_blas_3<M, N>::test()
21 {
22 {
23 M m1(N, N), m2(N, N), m3(N, N);
24
25 // _t_mm
26 initialize_matrix(m1);
27 initialize_matrix(m2);
28 ublas::blas_3::tmm(m1, value_type(1), m2, m1);
29 std::cout << "tmm (m1, 1, m2, m1) = " << m1 << std::endl;
30 initialize_matrix(m1);
31 initialize_matrix(m2);
32 ublas::blas_3::tmm(m1, value_type(1), m2, ublas::trans(m1));
33 std::cout << "tmm (m1, 1, m2, trans (m1)) = " << m1 << std::endl;
34 initialize_matrix(m1);
35 initialize_matrix(m2);
36 ublas::blas_3::tmm(m1, value_type(1), ublas::trans(m2), m1);
37 std::cout << "tmm (m1, 1, trans (m2), m1) = " << m1 << std::endl;
38 initialize_matrix(m1);
39 initialize_matrix(m2);
40 ublas::blas_3::tmm(m1, value_type(1), ublas::trans(m2), ublas::trans(m1));
41 std::cout << "tmm (m1, 1, trans (m2), trans (m1)) = " << m1 << std::endl;
42 #ifdef USE_STD_COMPLEX
43 initialize_matrix(m1);
44 initialize_matrix(m2);
45 ublas::blas_3::tmm(m1, value_type(1), m2, ublas::herm(m1));
46 std::cout << "tmm (m1, 1, m2, herm (m1)) = " << m1 << std::endl;
47 initialize_matrix(m1);
48 initialize_matrix(m2);
49 ublas::blas_3::tmm(m1, value_type(1), ublas::herm(m2), m1);
50 std::cout << "tmm (m1, 1, herm (m2), m1) = " << m1 << std::endl;
51 initialize_matrix(m1);
52 initialize_matrix(m2);
53 ublas::blas_3::tmm(m1, value_type(1), ublas::trans(m2), ublas::herm(m1));
54 std::cout << "tmm (m1, 1, trans (m2), herm (m1)) = " << m1 << std::endl;
55 initialize_matrix(m1);
56 initialize_matrix(m2);
57 ublas::blas_3::tmm(m1, value_type(1), ublas::herm(m2), ublas::trans(m1));
58 std::cout << "tmm (m1, 1, herm (m2), trans (m1)) = " << m1 << std::endl;
59 initialize_matrix(m1);
60 initialize_matrix(m2);
61 ublas::blas_3::tmm(m1, value_type(1), ublas::herm(m2), ublas::herm(m1));
62 std::cout << "tmm (m1, 1, herm (m2), herm (m1)) = " << m1 << std::endl;
63 #endif
64
65 // _t_sm
66 initialize_matrix(m1);
67 initialize_matrix(m2, ublas::lower_tag());
68 initialize_matrix(m3);
69 ublas::blas_3::tsm(m1, value_type(1), m2, ublas::lower_tag());
70 std::cout << "tsm (m1, 1, m2) = " << m1 << " " << ublas::prod(m2, m1) - value_type(1) * m3 << std::endl;
71 initialize_matrix(m1);
72 initialize_matrix(m2, ublas::upper_tag());
73 ublas::blas_3::tsm(m1, value_type(1), ublas::trans(m2), ublas::lower_tag());
74 std::cout << "tsm (m1, 1, trans (m2)) = " << m1 << " " << ublas::prod(ublas::trans(m2), m1) - value_type(1) * m3 << std::endl;
75 #ifdef USE_STD_COMPLEX
76 initialize_matrix(m1);
77 initialize_matrix(m2, ublas::upper_tag());
78 ublas::blas_3::tsm(m1, value_type(1), ublas::herm(m2), ublas::lower_tag());
79 std::cout << "tsm (m1, 1, herm (m2)) = " << m1 << " " << ublas::prod(ublas::herm(m2), m1) - value_type(1) * m3 << std::endl;
80 #endif
81 initialize_matrix(m1);
82 initialize_matrix(m2, ublas::upper_tag());
83 ublas::blas_3::tsm(m1, value_type(1), m2, ublas::upper_tag());
84 std::cout << "tsm (m1, 1, m2) = " << m1 << " " << ublas::prod(m2, m1) - value_type(1) * m3 << std::endl;
85 initialize_matrix(m1);
86 initialize_matrix(m2, ublas::lower_tag());
87 ublas::blas_3::tsm(m1, value_type(1), ublas::trans(m2), ublas::upper_tag());
88 std::cout << "tsm (m1, 1, trans (m2)) = " << m1 << " " << ublas::prod(ublas::trans(m2), m1) - value_type(1) * m3 << std::endl;
89 #ifdef USE_STD_COMPLEX
90 initialize_matrix(m1);
91 initialize_matrix(m2, ublas::lower_tag());
92 ublas::blas_3::tsm(m1, value_type(1), ublas::herm(m2), ublas::upper_tag());
93 std::cout << "tsm (m1, 1, herm (m2)) = " << m1 << " " << ublas::prod(ublas::herm(m2), m1) - value_type(1) * m3 << std::endl;
94 #endif
95
96 // _g_mm
97 // _s_mm
98 // _h_mm
99 initialize_matrix(m1);
100 initialize_matrix(m2);
101 initialize_matrix(m3);
102 ublas::blas_3::gmm(m1, value_type(1), value_type(1), m2, m3);
103 std::cout << "gmm (m1, 1, 1, m2, m3) = " << m1 << std::endl;
104 initialize_matrix(m1);
105 initialize_matrix(m2);
106 initialize_matrix(m3);
107 ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::trans(m2), m3);
108 std::cout << "gmm (m1, 1, 1, trans (m2), m3) = " << m1 << std::endl;
109 initialize_matrix(m1);
110 initialize_matrix(m2);
111 initialize_matrix(m3);
112 ublas::blas_3::gmm(m1, value_type(1), value_type(1), m2, ublas::trans(m3));
113 std::cout << "gmm (m1, 1, 1, m2, trans (m3)) = " << m1 << std::endl;
114 initialize_matrix(m1);
115 initialize_matrix(m2);
116 initialize_matrix(m3);
117 ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::trans(m2), ublas::trans(m3));
118 std::cout << "gmm (m1, 1, 1, trans (m2), trans (m3)) = " << m1 << std::endl;
119 #ifdef USE_STD_COMPLEX
120 initialize_matrix(m1);
121 initialize_matrix(m2);
122 initialize_matrix(m3);
123 ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::herm(m2), m3);
124 std::cout << "gmm (m1, 1, 1, herm (m2), m3) = " << m1 << std::endl;
125 initialize_matrix(m1);
126 initialize_matrix(m2);
127 initialize_matrix(m3);
128 ublas::blas_3::gmm(m1, value_type(1), value_type(1), m2, ublas::herm(m3));
129 std::cout << "gmm (m1, 1, 1, m2, herm (m3)) = " << m1 << std::endl;
130 initialize_matrix(m1);
131 initialize_matrix(m2);
132 initialize_matrix(m3);
133 ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::herm(m2), ublas::trans(m3));
134 std::cout << "gmm (m1, 1, 1, herm (m2), trans (m3)) = " << m1 << std::endl;
135 initialize_matrix(m1);
136 initialize_matrix(m2);
137 initialize_matrix(m3);
138 ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::trans(m2), ublas::herm(m3));
139 std::cout << "gmm (m1, 1, 1, trans (m2), herm (m3)) = " << m1 << std::endl;
140 initialize_matrix(m1);
141 initialize_matrix(m2);
142 initialize_matrix(m3);
143 ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::herm(m2), ublas::herm(m3));
144 std::cout << "gmm (m1, 1, 1, herm (m2), herm (m3)) = " << m1 << std::endl;
145 #endif
146
147 // s_rk
148 initialize_matrix(m1);
149 initialize_matrix(m2);
150 ublas::blas_3::srk(m1, value_type(1), value_type(1), m2);
151 std::cout << "srk (m1, 1, 1, m2) = " << m1 << std::endl;
152 initialize_matrix(m1);
153 initialize_matrix(m2);
154 ublas::blas_3::srk(m1, value_type(1), value_type(1), ublas::trans(m2));
155 std::cout << "srk (m1, 1, 1, trans (m2)) = " << m1 << std::endl;
156
157 #ifdef USE_STD_COMPLEX
158 // h_rk
159 initialize_matrix(m1);
160 initialize_matrix(m2);
161 ublas::blas_3::hrk(m1, value_type(1), value_type(1), m2);
162 std::cout << "hrk (m1, 1, 1, m2) = " << m1 << std::endl;
163 initialize_matrix(m1);
164 initialize_matrix(m2);
165 ublas::blas_3::hrk(m1, value_type(1), value_type(1), ublas::herm(m2));
166 std::cout << "hrk (m1, 1, 1, herm (m2)) = " << m1 << std::endl;
167 #endif
168
169 // s_r2k
170 initialize_matrix(m1);
171 initialize_matrix(m2);
172 initialize_matrix(m3);
173 ublas::blas_3::sr2k(m1, value_type(1), value_type(1), m2, m3);
174 std::cout << "sr2k (m1, 1, 1, m2, m3) = " << m1 << std::endl;
175 initialize_matrix(m1);
176 initialize_matrix(m2);
177 initialize_matrix(m3);
178 ublas::blas_3::sr2k(m1, value_type(1), value_type(1), ublas::trans(m2), ublas::trans(m3));
179 std::cout << "sr2k (m1, 1, 1, trans (m2), trans (m3)) = " << m1 << std::endl;
180
181 #ifdef USE_STD_COMPLEX
182 // h_r2k
183 initialize_matrix(m1);
184 initialize_matrix(m2);
185 initialize_matrix(m3);
186 ublas::blas_3::hr2k(m1, value_type(1), value_type(1), m2, m3);
187 std::cout << "hr2k (m1, 1, 1, m2, m3) = " << m1 << std::endl;
188 initialize_matrix(m1);
189 initialize_matrix(m2);
190 initialize_matrix(m3);
191 ublas::blas_3::hr2k(m1, value_type(1), value_type(1), ublas::herm(m2), ublas::herm(m3));
192 std::cout << "hr2k (m1, 1, 1, herm (m2), herm (m3)) = " << m1 << std::endl;
193 #endif
194 }
195 }
196
197 #ifdef USE_FLOAT
198 template struct test_blas_3<ublas::matrix<mp_test_type>, 3>;
199 #endif
200
201 #ifdef USE_DOUBLE
202 template struct test_blas_3<ublas::matrix<double>, 3>;
203 #endif
204
205 #ifdef USE_STD_COMPLEX
206 #ifdef USE_FLOAT
207 template struct test_blas_3<ublas::matrix<std::complex<mp_test_type> >, 3>;
208 #endif
209
210 #ifdef USE_DOUBLE
211 template struct test_blas_3<ublas::matrix<std::complex<double> >, 3>;
212 #endif
213 #endif
214