test23.cpp 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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. #if defined(__GNUC__) && (__GNUC__ >= 9)
  13. #pragma GCC diagnostic ignored "-Wdeprecated-copy"
  14. #endif
  15. #include "test2.hpp"
  16. template <class M, int N>
  17. void test_blas_3<M, N>::test()
  18. {
  19. {
  20. M m1(N, N), m2(N, N), m3(N, N);
  21. // _t_mm
  22. initialize_matrix(m1);
  23. initialize_matrix(m2);
  24. ublas::blas_3::tmm(m1, value_type(1), m2, m1);
  25. std::cout << "tmm (m1, 1, m2, m1) = " << m1 << std::endl;
  26. initialize_matrix(m1);
  27. initialize_matrix(m2);
  28. ublas::blas_3::tmm(m1, value_type(1), m2, ublas::trans(m1));
  29. std::cout << "tmm (m1, 1, m2, trans (m1)) = " << m1 << std::endl;
  30. initialize_matrix(m1);
  31. initialize_matrix(m2);
  32. ublas::blas_3::tmm(m1, value_type(1), ublas::trans(m2), m1);
  33. std::cout << "tmm (m1, 1, trans (m2), m1) = " << m1 << std::endl;
  34. initialize_matrix(m1);
  35. initialize_matrix(m2);
  36. ublas::blas_3::tmm(m1, value_type(1), ublas::trans(m2), ublas::trans(m1));
  37. std::cout << "tmm (m1, 1, trans (m2), trans (m1)) = " << m1 << std::endl;
  38. #ifdef USE_STD_COMPLEX
  39. initialize_matrix(m1);
  40. initialize_matrix(m2);
  41. ublas::blas_3::tmm(m1, value_type(1), m2, ublas::herm(m1));
  42. std::cout << "tmm (m1, 1, m2, herm (m1)) = " << m1 << std::endl;
  43. initialize_matrix(m1);
  44. initialize_matrix(m2);
  45. ublas::blas_3::tmm(m1, value_type(1), ublas::herm(m2), m1);
  46. std::cout << "tmm (m1, 1, herm (m2), m1) = " << m1 << std::endl;
  47. initialize_matrix(m1);
  48. initialize_matrix(m2);
  49. ublas::blas_3::tmm(m1, value_type(1), ublas::trans(m2), ublas::herm(m1));
  50. std::cout << "tmm (m1, 1, trans (m2), herm (m1)) = " << m1 << std::endl;
  51. initialize_matrix(m1);
  52. initialize_matrix(m2);
  53. ublas::blas_3::tmm(m1, value_type(1), ublas::herm(m2), ublas::trans(m1));
  54. std::cout << "tmm (m1, 1, herm (m2), trans (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::herm(m1));
  58. std::cout << "tmm (m1, 1, herm (m2), herm (m1)) = " << m1 << std::endl;
  59. #endif
  60. // _t_sm
  61. initialize_matrix(m1);
  62. initialize_matrix(m2, ublas::lower_tag());
  63. initialize_matrix(m3);
  64. ublas::blas_3::tsm(m1, value_type(1), m2, ublas::lower_tag());
  65. std::cout << "tsm (m1, 1, m2) = " << m1 << " " << ublas::prod(m2, m1) - value_type(1) * m3 << std::endl;
  66. initialize_matrix(m1);
  67. initialize_matrix(m2, ublas::upper_tag());
  68. ublas::blas_3::tsm(m1, value_type(1), ublas::trans(m2), ublas::lower_tag());
  69. std::cout << "tsm (m1, 1, trans (m2)) = " << m1 << " " << ublas::prod(ublas::trans(m2), m1) - value_type(1) * m3 << std::endl;
  70. #ifdef USE_STD_COMPLEX
  71. initialize_matrix(m1);
  72. initialize_matrix(m2, ublas::upper_tag());
  73. ublas::blas_3::tsm(m1, value_type(1), ublas::herm(m2), ublas::lower_tag());
  74. std::cout << "tsm (m1, 1, herm (m2)) = " << m1 << " " << ublas::prod(ublas::herm(m2), m1) - value_type(1) * m3 << std::endl;
  75. #endif
  76. initialize_matrix(m1);
  77. initialize_matrix(m2, ublas::upper_tag());
  78. ublas::blas_3::tsm(m1, value_type(1), m2, ublas::upper_tag());
  79. std::cout << "tsm (m1, 1, m2) = " << m1 << " " << ublas::prod(m2, m1) - value_type(1) * m3 << std::endl;
  80. initialize_matrix(m1);
  81. initialize_matrix(m2, ublas::lower_tag());
  82. ublas::blas_3::tsm(m1, value_type(1), ublas::trans(m2), ublas::upper_tag());
  83. std::cout << "tsm (m1, 1, trans (m2)) = " << m1 << " " << ublas::prod(ublas::trans(m2), m1) - value_type(1) * m3 << std::endl;
  84. #ifdef USE_STD_COMPLEX
  85. initialize_matrix(m1);
  86. initialize_matrix(m2, ublas::lower_tag());
  87. ublas::blas_3::tsm(m1, value_type(1), ublas::herm(m2), ublas::upper_tag());
  88. std::cout << "tsm (m1, 1, herm (m2)) = " << m1 << " " << ublas::prod(ublas::herm(m2), m1) - value_type(1) * m3 << std::endl;
  89. #endif
  90. // _g_mm
  91. // _s_mm
  92. // _h_mm
  93. initialize_matrix(m1);
  94. initialize_matrix(m2);
  95. initialize_matrix(m3);
  96. ublas::blas_3::gmm(m1, value_type(1), value_type(1), m2, m3);
  97. std::cout << "gmm (m1, 1, 1, m2, m3) = " << m1 << std::endl;
  98. initialize_matrix(m1);
  99. initialize_matrix(m2);
  100. initialize_matrix(m3);
  101. ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::trans(m2), m3);
  102. std::cout << "gmm (m1, 1, 1, trans (m2), m3) = " << m1 << std::endl;
  103. initialize_matrix(m1);
  104. initialize_matrix(m2);
  105. initialize_matrix(m3);
  106. ublas::blas_3::gmm(m1, value_type(1), value_type(1), m2, ublas::trans(m3));
  107. std::cout << "gmm (m1, 1, 1, m2, trans (m3)) = " << m1 << std::endl;
  108. initialize_matrix(m1);
  109. initialize_matrix(m2);
  110. initialize_matrix(m3);
  111. ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::trans(m2), ublas::trans(m3));
  112. std::cout << "gmm (m1, 1, 1, trans (m2), trans (m3)) = " << m1 << std::endl;
  113. #ifdef USE_STD_COMPLEX
  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::herm(m2), m3);
  118. std::cout << "gmm (m1, 1, 1, herm (m2), m3) = " << m1 << std::endl;
  119. initialize_matrix(m1);
  120. initialize_matrix(m2);
  121. initialize_matrix(m3);
  122. ublas::blas_3::gmm(m1, value_type(1), value_type(1), m2, ublas::herm(m3));
  123. std::cout << "gmm (m1, 1, 1, m2, herm (m3)) = " << m1 << std::endl;
  124. initialize_matrix(m1);
  125. initialize_matrix(m2);
  126. initialize_matrix(m3);
  127. ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::herm(m2), ublas::trans(m3));
  128. std::cout << "gmm (m1, 1, 1, herm (m2), trans (m3)) = " << m1 << std::endl;
  129. initialize_matrix(m1);
  130. initialize_matrix(m2);
  131. initialize_matrix(m3);
  132. ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::trans(m2), ublas::herm(m3));
  133. std::cout << "gmm (m1, 1, 1, trans (m2), herm (m3)) = " << m1 << std::endl;
  134. initialize_matrix(m1);
  135. initialize_matrix(m2);
  136. initialize_matrix(m3);
  137. ublas::blas_3::gmm(m1, value_type(1), value_type(1), ublas::herm(m2), ublas::herm(m3));
  138. std::cout << "gmm (m1, 1, 1, herm (m2), herm (m3)) = " << m1 << std::endl;
  139. #endif
  140. // s_rk
  141. initialize_matrix(m1);
  142. initialize_matrix(m2);
  143. ublas::blas_3::srk(m1, value_type(1), value_type(1), m2);
  144. std::cout << "srk (m1, 1, 1, m2) = " << m1 << std::endl;
  145. initialize_matrix(m1);
  146. initialize_matrix(m2);
  147. ublas::blas_3::srk(m1, value_type(1), value_type(1), ublas::trans(m2));
  148. std::cout << "srk (m1, 1, 1, trans (m2)) = " << m1 << std::endl;
  149. #ifdef USE_STD_COMPLEX
  150. // h_rk
  151. initialize_matrix(m1);
  152. initialize_matrix(m2);
  153. ublas::blas_3::hrk(m1, value_type(1), value_type(1), m2);
  154. std::cout << "hrk (m1, 1, 1, m2) = " << m1 << std::endl;
  155. initialize_matrix(m1);
  156. initialize_matrix(m2);
  157. ublas::blas_3::hrk(m1, value_type(1), value_type(1), ublas::herm(m2));
  158. std::cout << "hrk (m1, 1, 1, herm (m2)) = " << m1 << std::endl;
  159. #endif
  160. // s_r2k
  161. initialize_matrix(m1);
  162. initialize_matrix(m2);
  163. initialize_matrix(m3);
  164. ublas::blas_3::sr2k(m1, value_type(1), value_type(1), m2, m3);
  165. std::cout << "sr2k (m1, 1, 1, m2, m3) = " << m1 << std::endl;
  166. initialize_matrix(m1);
  167. initialize_matrix(m2);
  168. initialize_matrix(m3);
  169. ublas::blas_3::sr2k(m1, value_type(1), value_type(1), ublas::trans(m2), ublas::trans(m3));
  170. std::cout << "sr2k (m1, 1, 1, trans (m2), trans (m3)) = " << m1 << std::endl;
  171. #ifdef USE_STD_COMPLEX
  172. // h_r2k
  173. initialize_matrix(m1);
  174. initialize_matrix(m2);
  175. initialize_matrix(m3);
  176. ublas::blas_3::hr2k(m1, value_type(1), value_type(1), m2, m3);
  177. std::cout << "hr2k (m1, 1, 1, m2, m3) = " << m1 << std::endl;
  178. initialize_matrix(m1);
  179. initialize_matrix(m2);
  180. initialize_matrix(m3);
  181. ublas::blas_3::hr2k(m1, value_type(1), value_type(1), ublas::herm(m2), ublas::herm(m3));
  182. std::cout << "hr2k (m1, 1, 1, herm (m2), herm (m3)) = " << m1 << std::endl;
  183. #endif
  184. }
  185. }
  186. #ifdef USE_FLOAT
  187. template struct test_blas_3<ublas::matrix<mp_test_type>, 3>;
  188. #endif
  189. #ifdef USE_DOUBLE
  190. template struct test_blas_3<ublas::matrix<double>, 3>;
  191. #endif
  192. #ifdef USE_STD_COMPLEX
  193. #ifdef USE_FLOAT
  194. template struct test_blas_3<ublas::matrix<std::complex<mp_test_type> >, 3>;
  195. #endif
  196. #ifdef USE_DOUBLE
  197. template struct test_blas_3<ublas::matrix<std::complex<double> >, 3>;
  198. #endif
  199. #endif