test23.cpp 9.0 KB

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