boost.cxx 0.0.2 → 1.90.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/README.md +29 -2
  2. package/boost/cast.hpp +20 -0
  3. package/boost/numeric/conversion/bounds.hpp +24 -0
  4. package/boost/numeric/conversion/cast.hpp +61 -0
  5. package/boost/numeric/conversion/conversion_traits.hpp +32 -0
  6. package/boost/numeric/conversion/converter.hpp +68 -0
  7. package/boost/numeric/conversion/converter_policies.hpp +194 -0
  8. package/boost/numeric/conversion/detail/bounds.hpp +58 -0
  9. package/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
  10. package/boost/numeric/conversion/detail/converter.hpp +593 -0
  11. package/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
  12. package/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
  13. package/boost/numeric/conversion/detail/meta.hpp +120 -0
  14. package/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
  15. package/boost/numeric/conversion/detail/old_numeric_cast.hpp +308 -0
  16. package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
  17. package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
  18. package/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
  19. package/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
  20. package/boost/numeric/conversion/int_float_mixture.hpp +30 -0
  21. package/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
  22. package/boost/numeric/conversion/is_subranged.hpp +27 -0
  23. package/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
  24. package/boost/numeric/conversion/sign_mixture.hpp +30 -0
  25. package/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
  26. package/boost/numeric/conversion/udt_builtin_mixture.hpp +28 -0
  27. package/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
  28. package/boost/numeric/interval/arith.hpp +305 -0
  29. package/boost/numeric/interval/arith2.hpp +304 -0
  30. package/boost/numeric/interval/arith3.hpp +69 -0
  31. package/boost/numeric/interval/checking.hpp +130 -0
  32. package/boost/numeric/interval/compare/certain.hpp +113 -0
  33. package/boost/numeric/interval/compare/explicit.hpp +248 -0
  34. package/boost/numeric/interval/compare/lexicographic.hpp +122 -0
  35. package/boost/numeric/interval/compare/possible.hpp +113 -0
  36. package/boost/numeric/interval/compare/set.hpp +101 -0
  37. package/boost/numeric/interval/compare/tribool.hpp +138 -0
  38. package/boost/numeric/interval/compare.hpp +19 -0
  39. package/boost/numeric/interval/constants.hpp +85 -0
  40. package/boost/numeric/interval/detail/alpha_rounding_control.hpp +113 -0
  41. package/boost/numeric/interval/detail/bcc_rounding_control.hpp +57 -0
  42. package/boost/numeric/interval/detail/bugs.hpp +48 -0
  43. package/boost/numeric/interval/detail/c99_rounding_control.hpp +50 -0
  44. package/boost/numeric/interval/detail/c99sub_rounding_control.hpp +43 -0
  45. package/boost/numeric/interval/detail/division.hpp +194 -0
  46. package/boost/numeric/interval/detail/ia64_rounding_control.hpp +83 -0
  47. package/boost/numeric/interval/detail/interval_prototype.hpp +41 -0
  48. package/boost/numeric/interval/detail/msvc_rounding_control.hpp +113 -0
  49. package/boost/numeric/interval/detail/ppc_rounding_control.hpp +99 -0
  50. package/boost/numeric/interval/detail/sparc_rounding_control.hpp +112 -0
  51. package/boost/numeric/interval/detail/test_input.hpp +76 -0
  52. package/boost/numeric/interval/detail/x86_rounding_control.hpp +108 -0
  53. package/boost/numeric/interval/detail/x86gcc_rounding_control.hpp +51 -0
  54. package/boost/numeric/interval/ext/integer.hpp +70 -0
  55. package/boost/numeric/interval/ext/x86_fast_rounding_control.hpp +70 -0
  56. package/boost/numeric/interval/hw_rounding.hpp +73 -0
  57. package/boost/numeric/interval/interval.hpp +450 -0
  58. package/boost/numeric/interval/io.hpp +41 -0
  59. package/boost/numeric/interval/limits.hpp +49 -0
  60. package/boost/numeric/interval/policies.hpp +75 -0
  61. package/boost/numeric/interval/rounded_arith.hpp +120 -0
  62. package/boost/numeric/interval/rounded_transc.hpp +140 -0
  63. package/boost/numeric/interval/rounding.hpp +101 -0
  64. package/boost/numeric/interval/transc.hpp +232 -0
  65. package/boost/numeric/interval/utility.hpp +335 -0
  66. package/boost/numeric/interval/utility_fwd.hpp +172 -0
  67. package/boost/numeric/interval.hpp +32 -0
  68. package/boost/numeric/odeint/algebra/algebra_dispatcher.hpp +86 -0
  69. package/boost/numeric/odeint/algebra/array_algebra.hpp +293 -0
  70. package/boost/numeric/odeint/algebra/default_operations.hpp +599 -0
  71. package/boost/numeric/odeint/algebra/detail/extract_value_type.hpp +51 -0
  72. package/boost/numeric/odeint/algebra/detail/for_each.hpp +165 -0
  73. package/boost/numeric/odeint/algebra/detail/macros.hpp +35 -0
  74. package/boost/numeric/odeint/algebra/detail/norm_inf.hpp +46 -0
  75. package/boost/numeric/odeint/algebra/fusion_algebra.hpp +216 -0
  76. package/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp +48 -0
  77. package/boost/numeric/odeint/algebra/multi_array_algebra.hpp +146 -0
  78. package/boost/numeric/odeint/algebra/norm_result_type.hpp +33 -0
  79. package/boost/numeric/odeint/algebra/operations_dispatcher.hpp +41 -0
  80. package/boost/numeric/odeint/algebra/range_algebra.hpp +142 -0
  81. package/boost/numeric/odeint/algebra/vector_space_algebra.hpp +175 -0
  82. package/boost/numeric/odeint/config.hpp +53 -0
  83. package/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp +55 -0
  84. package/boost/numeric/odeint/external/blaze/blaze_resize.hpp +64 -0
  85. package/boost/numeric/odeint/external/compute/compute.hpp +27 -0
  86. package/boost/numeric/odeint/external/compute/compute_algebra.hpp +65 -0
  87. package/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp +41 -0
  88. package/boost/numeric/odeint/external/compute/compute_operations.hpp +198 -0
  89. package/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp +44 -0
  90. package/boost/numeric/odeint/external/compute/compute_resize.hpp +92 -0
  91. package/boost/numeric/odeint/external/eigen/eigen.hpp +27 -0
  92. package/boost/numeric/odeint/external/eigen/eigen_algebra.hpp +98 -0
  93. package/boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp +49 -0
  94. package/boost/numeric/odeint/external/eigen/eigen_resize.hpp +103 -0
  95. package/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp +228 -0
  96. package/boost/numeric/odeint/external/mkl/mkl_operations.hpp +181 -0
  97. package/boost/numeric/odeint/external/mpi/mpi.hpp +25 -0
  98. package/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp +62 -0
  99. package/boost/numeric/odeint/external/mpi/mpi_state.hpp +113 -0
  100. package/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp +95 -0
  101. package/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp +161 -0
  102. package/boost/numeric/odeint/external/mtl4/mtl4.hpp +23 -0
  103. package/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp +99 -0
  104. package/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp +134 -0
  105. package/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp +25 -0
  106. package/boost/numeric/odeint/external/nt2/nt2_copy.hpp +33 -0
  107. package/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp +31 -0
  108. package/boost/numeric/odeint/external/nt2/nt2_resize.hpp +54 -0
  109. package/boost/numeric/odeint/external/openmp/openmp.hpp +31 -0
  110. package/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp +281 -0
  111. package/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp +276 -0
  112. package/boost/numeric/odeint/external/openmp/openmp_state.hpp +172 -0
  113. package/boost/numeric/odeint/external/thrust/thrust.hpp +27 -0
  114. package/boost/numeric/odeint/external/thrust/thrust_algebra.hpp +217 -0
  115. package/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp +118 -0
  116. package/boost/numeric/odeint/external/thrust/thrust_operations.hpp +233 -0
  117. package/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp +118 -0
  118. package/boost/numeric/odeint/external/thrust/thrust_resize.hpp +197 -0
  119. package/boost/numeric/odeint/external/vexcl/vexcl.hpp +28 -0
  120. package/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp +61 -0
  121. package/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp +51 -0
  122. package/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp +55 -0
  123. package/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp +68 -0
  124. package/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp +96 -0
  125. package/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp +58 -0
  126. package/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp +226 -0
  127. package/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp +68 -0
  128. package/boost/numeric/odeint/integrate/check_adapter.hpp +222 -0
  129. package/boost/numeric/odeint/integrate/detail/functors.hpp +70 -0
  130. package/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp +161 -0
  131. package/boost/numeric/odeint/integrate/detail/integrate_const.hpp +167 -0
  132. package/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp +161 -0
  133. package/boost/numeric/odeint/integrate/detail/integrate_times.hpp +179 -0
  134. package/boost/numeric/odeint/integrate/integrate.hpp +133 -0
  135. package/boost/numeric/odeint/integrate/integrate_adaptive.hpp +127 -0
  136. package/boost/numeric/odeint/integrate/integrate_const.hpp +195 -0
  137. package/boost/numeric/odeint/integrate/integrate_n_steps.hpp +178 -0
  138. package/boost/numeric/odeint/integrate/integrate_times.hpp +220 -0
  139. package/boost/numeric/odeint/integrate/max_step_checker.hpp +114 -0
  140. package/boost/numeric/odeint/integrate/null_observer.hpp +38 -0
  141. package/boost/numeric/odeint/integrate/observer_collection.hpp +55 -0
  142. package/boost/numeric/odeint/iterator/adaptive_iterator.hpp +183 -0
  143. package/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp +175 -0
  144. package/boost/numeric/odeint/iterator/const_step_iterator.hpp +180 -0
  145. package/boost/numeric/odeint/iterator/const_step_time_iterator.hpp +173 -0
  146. package/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp +199 -0
  147. package/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp +251 -0
  148. package/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp +228 -0
  149. package/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp +239 -0
  150. package/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp +369 -0
  151. package/boost/numeric/odeint/iterator/integrate/detail/functors.hpp +70 -0
  152. package/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp +121 -0
  153. package/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp +111 -0
  154. package/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp +107 -0
  155. package/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp +67 -0
  156. package/boost/numeric/odeint/iterator/integrate/integrate.hpp +111 -0
  157. package/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp +127 -0
  158. package/boost/numeric/odeint/iterator/integrate/integrate_const.hpp +158 -0
  159. package/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp +123 -0
  160. package/boost/numeric/odeint/iterator/integrate/integrate_times.hpp +131 -0
  161. package/boost/numeric/odeint/iterator/integrate/null_observer.hpp +38 -0
  162. package/boost/numeric/odeint/iterator/integrate/observer_collection.hpp +55 -0
  163. package/boost/numeric/odeint/iterator/n_step_iterator.hpp +168 -0
  164. package/boost/numeric/odeint/iterator/n_step_time_iterator.hpp +169 -0
  165. package/boost/numeric/odeint/iterator/times_iterator.hpp +189 -0
  166. package/boost/numeric/odeint/iterator/times_time_iterator.hpp +193 -0
  167. package/boost/numeric/odeint/stepper/adams_bashforth.hpp +418 -0
  168. package/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp +313 -0
  169. package/boost/numeric/odeint/stepper/adams_moulton.hpp +201 -0
  170. package/boost/numeric/odeint/stepper/adaptive_adams_bashforth_moulton.hpp +237 -0
  171. package/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp +91 -0
  172. package/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp +588 -0
  173. package/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp +677 -0
  174. package/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp +415 -0
  175. package/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp +431 -0
  176. package/boost/numeric/odeint/stepper/bulirsch_stoer.hpp +642 -0
  177. package/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp +838 -0
  178. package/boost/numeric/odeint/stepper/controlled_adams_bashforth_moulton.hpp +322 -0
  179. package/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp +1018 -0
  180. package/boost/numeric/odeint/stepper/controlled_step_result.hpp +42 -0
  181. package/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp +476 -0
  182. package/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp +148 -0
  183. package/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp +168 -0
  184. package/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp +148 -0
  185. package/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp +168 -0
  186. package/boost/numeric/odeint/stepper/detail/adaptive_adams_coefficients.hpp +207 -0
  187. package/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp +247 -0
  188. package/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp +263 -0
  189. package/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp +252 -0
  190. package/boost/numeric/odeint/stepper/detail/pid_step_adjuster.hpp +199 -0
  191. package/boost/numeric/odeint/stepper/detail/pid_step_adjuster_coefficients.hpp +180 -0
  192. package/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp +84 -0
  193. package/boost/numeric/odeint/stepper/euler.hpp +166 -0
  194. package/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp +255 -0
  195. package/boost/numeric/odeint/stepper/explicit_generic_rk.hpp +246 -0
  196. package/boost/numeric/odeint/stepper/extrapolation_stepper.hpp +288 -0
  197. package/boost/numeric/odeint/stepper/generation/generation_controlled_adams_bashforth_moulton.hpp +59 -0
  198. package/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp +61 -0
  199. package/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp +65 -0
  200. package/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp +79 -0
  201. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp +47 -0
  202. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp +48 -0
  203. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp +56 -0
  204. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp +46 -0
  205. package/boost/numeric/odeint/stepper/generation/make_controlled.hpp +103 -0
  206. package/boost/numeric/odeint/stepper/generation/make_dense_output.hpp +100 -0
  207. package/boost/numeric/odeint/stepper/generation.hpp +37 -0
  208. package/boost/numeric/odeint/stepper/implicit_euler.hpp +170 -0
  209. package/boost/numeric/odeint/stepper/modified_midpoint.hpp +315 -0
  210. package/boost/numeric/odeint/stepper/rosenbrock4.hpp +346 -0
  211. package/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp +240 -0
  212. package/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp +204 -0
  213. package/boost/numeric/odeint/stepper/runge_kutta4.hpp +181 -0
  214. package/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp +232 -0
  215. package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp +231 -0
  216. package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp +289 -0
  217. package/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp +403 -0
  218. package/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp +374 -0
  219. package/boost/numeric/odeint/stepper/stepper_categories.hpp +66 -0
  220. package/boost/numeric/odeint/stepper/symplectic_euler.hpp +136 -0
  221. package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp +160 -0
  222. package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp +162 -0
  223. package/boost/numeric/odeint/stepper/velocity_verlet.hpp +375 -0
  224. package/boost/numeric/odeint/tools/assert.hpp +30 -0
  225. package/boost/numeric/odeint/tools/is_standalone.hpp +21 -0
  226. package/boost/numeric/odeint/tools/traits.hpp +39 -0
  227. package/boost/numeric/odeint/util/bind.hpp +35 -0
  228. package/boost/numeric/odeint/util/copy.hpp +88 -0
  229. package/boost/numeric/odeint/util/detail/is_range.hpp +127 -0
  230. package/boost/numeric/odeint/util/detail/less_with_sign.hpp +78 -0
  231. package/boost/numeric/odeint/util/is_pair.hpp +42 -0
  232. package/boost/numeric/odeint/util/is_resizeable.hpp +84 -0
  233. package/boost/numeric/odeint/util/multi_array_adaption.hpp +131 -0
  234. package/boost/numeric/odeint/util/n_ary_helper.hpp +96 -0
  235. package/boost/numeric/odeint/util/odeint_error.hpp +77 -0
  236. package/boost/numeric/odeint/util/resize.hpp +120 -0
  237. package/boost/numeric/odeint/util/resizer.hpp +94 -0
  238. package/boost/numeric/odeint/util/same_instance.hpp +56 -0
  239. package/boost/numeric/odeint/util/same_size.hpp +117 -0
  240. package/boost/numeric/odeint/util/split.hpp +64 -0
  241. package/boost/numeric/odeint/util/split_adaptor.hpp +103 -0
  242. package/boost/numeric/odeint/util/state_wrapper.hpp +50 -0
  243. package/boost/numeric/odeint/util/stepper_traits.hpp +63 -0
  244. package/boost/numeric/odeint/util/ublas_matrix_expression.patch +6 -0
  245. package/boost/numeric/odeint/util/ublas_wrapper.hpp +297 -0
  246. package/boost/numeric/odeint/util/unit_helper.hpp +151 -0
  247. package/boost/numeric/odeint/util/unwrap_reference.hpp +141 -0
  248. package/boost/numeric/odeint/version.hpp +55 -0
  249. package/boost/numeric/odeint.hpp +87 -0
  250. package/boost/numeric/ublas/assignment.hpp +1288 -0
  251. package/boost/numeric/ublas/banded.hpp +2372 -0
  252. package/boost/numeric/ublas/blas.hpp +499 -0
  253. package/boost/numeric/ublas/detail/concepts.hpp +1465 -0
  254. package/boost/numeric/ublas/detail/config.hpp +304 -0
  255. package/boost/numeric/ublas/detail/definitions.hpp +212 -0
  256. package/boost/numeric/ublas/detail/documentation.hpp +33 -0
  257. package/boost/numeric/ublas/detail/duff.hpp +56 -0
  258. package/boost/numeric/ublas/detail/iterator.hpp +1448 -0
  259. package/boost/numeric/ublas/detail/matrix_assign.hpp +1785 -0
  260. package/boost/numeric/ublas/detail/raw.hpp +878 -0
  261. package/boost/numeric/ublas/detail/returntype_deduction.hpp +174 -0
  262. package/boost/numeric/ublas/detail/temporary.hpp +33 -0
  263. package/boost/numeric/ublas/detail/vector_assign.hpp +609 -0
  264. package/boost/numeric/ublas/doxydoc.hpp +58 -0
  265. package/boost/numeric/ublas/exception.hpp +297 -0
  266. package/boost/numeric/ublas/experimental/sparse_view.hpp +317 -0
  267. package/boost/numeric/ublas/expression_types.hpp +506 -0
  268. package/boost/numeric/ublas/functional.hpp +2112 -0
  269. package/boost/numeric/ublas/fwd.hpp +229 -0
  270. package/boost/numeric/ublas/hermitian.hpp +2633 -0
  271. package/boost/numeric/ublas/io.hpp +355 -0
  272. package/boost/numeric/ublas/lu.hpp +350 -0
  273. package/boost/numeric/ublas/matrix.hpp +6013 -0
  274. package/boost/numeric/ublas/matrix_expression.hpp +5693 -0
  275. package/boost/numeric/ublas/matrix_proxy.hpp +5457 -0
  276. package/boost/numeric/ublas/matrix_sparse.hpp +5773 -0
  277. package/boost/numeric/ublas/matrix_vector.hpp +406 -0
  278. package/boost/numeric/ublas/opencl/elementwise.hpp +508 -0
  279. package/boost/numeric/ublas/opencl/library.hpp +38 -0
  280. package/boost/numeric/ublas/opencl/matrix.hpp +123 -0
  281. package/boost/numeric/ublas/opencl/misc.hpp +182 -0
  282. package/boost/numeric/ublas/opencl/operations.hpp +18 -0
  283. package/boost/numeric/ublas/opencl/prod.hpp +364 -0
  284. package/boost/numeric/ublas/opencl/transpose.hpp +142 -0
  285. package/boost/numeric/ublas/opencl/vector.hpp +90 -0
  286. package/boost/numeric/ublas/opencl.hpp +16 -0
  287. package/boost/numeric/ublas/operation/begin.hpp +318 -0
  288. package/boost/numeric/ublas/operation/c_array.hpp +41 -0
  289. package/boost/numeric/ublas/operation/end.hpp +318 -0
  290. package/boost/numeric/ublas/operation/num_columns.hpp +45 -0
  291. package/boost/numeric/ublas/operation/num_rows.hpp +44 -0
  292. package/boost/numeric/ublas/operation/size.hpp +350 -0
  293. package/boost/numeric/ublas/operation.hpp +830 -0
  294. package/boost/numeric/ublas/operation_blocked.hpp +266 -0
  295. package/boost/numeric/ublas/operation_sparse.hpp +198 -0
  296. package/boost/numeric/ublas/operations.hpp +26 -0
  297. package/boost/numeric/ublas/storage.hpp +2131 -0
  298. package/boost/numeric/ublas/storage_sparse.hpp +578 -0
  299. package/boost/numeric/ublas/symmetric.hpp +2309 -0
  300. package/boost/numeric/ublas/tags.hpp +37 -0
  301. package/boost/numeric/ublas/tensor/algorithms.hpp +345 -0
  302. package/boost/numeric/ublas/tensor/expression.hpp +181 -0
  303. package/boost/numeric/ublas/tensor/expression_evaluation.hpp +288 -0
  304. package/boost/numeric/ublas/tensor/extents.hpp +335 -0
  305. package/boost/numeric/ublas/tensor/functions.hpp +558 -0
  306. package/boost/numeric/ublas/tensor/index.hpp +89 -0
  307. package/boost/numeric/ublas/tensor/multi_index.hpp +110 -0
  308. package/boost/numeric/ublas/tensor/multi_index_utility.hpp +364 -0
  309. package/boost/numeric/ublas/tensor/multiplication.hpp +945 -0
  310. package/boost/numeric/ublas/tensor/operators_arithmetic.hpp +244 -0
  311. package/boost/numeric/ublas/tensor/operators_comparison.hpp +175 -0
  312. package/boost/numeric/ublas/tensor/ostream.hpp +122 -0
  313. package/boost/numeric/ublas/tensor/storage_traits.hpp +84 -0
  314. package/boost/numeric/ublas/tensor/strides.hpp +251 -0
  315. package/boost/numeric/ublas/tensor/tensor.hpp +734 -0
  316. package/boost/numeric/ublas/tensor.hpp +26 -0
  317. package/boost/numeric/ublas/traits/c_array.hpp +110 -0
  318. package/boost/numeric/ublas/traits/const_iterator_type.hpp +127 -0
  319. package/boost/numeric/ublas/traits/iterator_type.hpp +126 -0
  320. package/boost/numeric/ublas/traits.hpp +753 -0
  321. package/boost/numeric/ublas/triangular.hpp +2775 -0
  322. package/boost/numeric/ublas/vector.hpp +2947 -0
  323. package/boost/numeric/ublas/vector_expression.hpp +1762 -0
  324. package/boost/numeric/ublas/vector_of_vector.hpp +1347 -0
  325. package/boost/numeric/ublas/vector_proxy.hpp +1697 -0
  326. package/boost/numeric/ublas/vector_sparse.hpp +2246 -0
  327. package/package.json +3 -7
@@ -0,0 +1,228 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/external/gsl/gsl_wrapper.hpp
4
+
5
+ [begin_description]
6
+ Wrapper for gsl_vector.
7
+ [end_description]
8
+
9
+ Copyright 2011-2012 Mario Mulansky
10
+ Copyright 2011 Karsten Ahnert
11
+
12
+ Distributed under the Boost Software License, Version 1.0.
13
+ (See accompanying file LICENSE_1_0.txt or
14
+ copy at http://www.boost.org/LICENSE_1_0.txt)
15
+ */
16
+
17
+
18
+ #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_GSL_GSL_WRAPPER_HPP_INCLUDED
19
+ #define BOOST_NUMERIC_ODEINT_EXTERNAL_GSL_GSL_WRAPPER_HPP_INCLUDED
20
+
21
+ #include <new>
22
+
23
+ #include <gsl/gsl_vector.h>
24
+
25
+ #include <boost/range.hpp>
26
+ #include <boost/iterator/iterator_facade.hpp>
27
+
28
+
29
+ #include <boost/numeric/odeint/util/state_wrapper.hpp>
30
+ #include <boost/numeric/odeint/util/is_resizeable.hpp>
31
+ #include <boost/numeric/odeint/util/copy.hpp>
32
+
33
+ class const_gsl_vector_iterator;
34
+
35
+ /*
36
+ * defines an iterator for gsl_vector
37
+ */
38
+ class gsl_vector_iterator : public boost::iterator_facade< gsl_vector_iterator , double , boost::random_access_traversal_tag >
39
+ {
40
+ public :
41
+
42
+ gsl_vector_iterator( void ): m_p(0) , m_stride( 0 ) { }
43
+ explicit gsl_vector_iterator( gsl_vector *p ) : m_p( p->data ) , m_stride( p->stride ) { }
44
+ friend gsl_vector_iterator end_iterator( gsl_vector * );
45
+
46
+ private :
47
+
48
+ friend class boost::iterator_core_access;
49
+ friend class const_gsl_vector_iterator;
50
+
51
+ void increment( void ) { m_p += m_stride; }
52
+ void decrement( void ) { m_p -= m_stride; }
53
+ void advance( ptrdiff_t n ) { m_p += n*m_stride; }
54
+ bool equal( const gsl_vector_iterator &other ) const { return this->m_p == other.m_p; }
55
+ bool equal( const const_gsl_vector_iterator &other ) const;
56
+ double& dereference( void ) const { return *m_p; }
57
+
58
+ double *m_p;
59
+ size_t m_stride;
60
+ };
61
+
62
+
63
+
64
+ /*
65
+ * defines an const iterator for gsl_vector
66
+ */
67
+ class const_gsl_vector_iterator : public boost::iterator_facade< const_gsl_vector_iterator , const double , boost::random_access_traversal_tag >
68
+ {
69
+ public :
70
+
71
+ const_gsl_vector_iterator( void ): m_p(0) , m_stride( 0 ) { }
72
+ explicit const_gsl_vector_iterator( const gsl_vector *p ) : m_p( p->data ) , m_stride( p->stride ) { }
73
+ const_gsl_vector_iterator( const gsl_vector_iterator &p ) : m_p( p.m_p ) , m_stride( p.m_stride ) { }
74
+
75
+ private :
76
+
77
+ friend class boost::iterator_core_access;
78
+ friend class gsl_vector_iterator;
79
+ friend const_gsl_vector_iterator end_iterator( const gsl_vector * );
80
+
81
+ void increment( void ) { m_p += m_stride; }
82
+ void decrement( void ) { m_p -= m_stride; }
83
+ void advance( ptrdiff_t n ) { m_p += n*m_stride; }
84
+ bool equal( const const_gsl_vector_iterator &other ) const { return this->m_p == other.m_p; }
85
+ bool equal( const gsl_vector_iterator &other ) const { return this->m_p == other.m_p; }
86
+ const double& dereference( void ) const { return *m_p; }
87
+
88
+ const double *m_p;
89
+ size_t m_stride;
90
+ };
91
+
92
+
93
+ bool gsl_vector_iterator::equal( const const_gsl_vector_iterator &other ) const { return this->m_p == other.m_p; }
94
+
95
+
96
+ gsl_vector_iterator end_iterator( gsl_vector *x )
97
+ {
98
+ gsl_vector_iterator iter( x );
99
+ iter.m_p += iter.m_stride * x->size;
100
+ return iter;
101
+ }
102
+
103
+ const_gsl_vector_iterator end_iterator( const gsl_vector *x )
104
+ {
105
+ const_gsl_vector_iterator iter( x );
106
+ iter.m_p += iter.m_stride * x->size;
107
+ return iter;
108
+ }
109
+
110
+
111
+
112
+
113
+ namespace boost
114
+ {
115
+ template<>
116
+ struct range_mutable_iterator< gsl_vector* >
117
+ {
118
+ typedef gsl_vector_iterator type;
119
+ };
120
+
121
+ template<>
122
+ struct range_const_iterator< gsl_vector* >
123
+ {
124
+ typedef const_gsl_vector_iterator type;
125
+ };
126
+ } // namespace boost
127
+
128
+
129
+
130
+
131
+ // template<>
132
+ inline gsl_vector_iterator range_begin( gsl_vector *x )
133
+ {
134
+ return gsl_vector_iterator( x );
135
+ }
136
+
137
+ // template<>
138
+ inline const_gsl_vector_iterator range_begin( const gsl_vector *x )
139
+ {
140
+ return const_gsl_vector_iterator( x );
141
+ }
142
+
143
+ // template<>
144
+ inline gsl_vector_iterator range_end( gsl_vector *x )
145
+ {
146
+ return end_iterator( x );
147
+ }
148
+
149
+ // template<>
150
+ inline const_gsl_vector_iterator range_end( const gsl_vector *x )
151
+ {
152
+ return end_iterator( x );
153
+ }
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+ namespace boost {
162
+ namespace numeric {
163
+ namespace odeint {
164
+
165
+
166
+ template<>
167
+ struct is_resizeable< gsl_vector* >
168
+ {
169
+ //struct type : public std::integral_constant<bool, true> { };
170
+ typedef std::integral_constant<bool, true> type;
171
+ const static bool value = type::value;
172
+ };
173
+
174
+ template <>
175
+ struct same_size_impl< gsl_vector* , gsl_vector* >
176
+ {
177
+ static bool same_size( const gsl_vector* x , const gsl_vector* y )
178
+ {
179
+ return x->size == y->size;
180
+ }
181
+ };
182
+
183
+ template <>
184
+ struct resize_impl< gsl_vector* , gsl_vector* >
185
+ {
186
+ static void resize( gsl_vector* &x , const gsl_vector* y )
187
+ {
188
+ gsl_vector_free( x );
189
+ x = gsl_vector_alloc( y->size );
190
+ }
191
+ };
192
+
193
+ template<>
194
+ struct state_wrapper< gsl_vector* >
195
+ {
196
+ typedef double value_type;
197
+ typedef gsl_vector* state_type;
198
+ typedef state_wrapper< gsl_vector* > state_wrapper_type;
199
+
200
+ state_type m_v;
201
+
202
+ state_wrapper( )
203
+ {
204
+ m_v = gsl_vector_alloc( 1 );
205
+ }
206
+
207
+ state_wrapper( const state_wrapper_type &x )
208
+ {
209
+ resize( m_v , x.m_v );
210
+ gsl_vector_memcpy( m_v , x.m_v );
211
+ }
212
+
213
+
214
+ ~state_wrapper()
215
+ {
216
+ gsl_vector_free( m_v );
217
+ }
218
+
219
+ };
220
+
221
+ } // odeint
222
+ } // numeric
223
+ } // boost
224
+
225
+
226
+
227
+
228
+ #endif // BOOST_NUMERIC_ODEINT_EXTERNAL_GSL_GSL_WRAPPER_HPP_INCLUDED
@@ -0,0 +1,181 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/external/mkl/mkl_operations.hpp
4
+
5
+ [begin_description]
6
+ Wrapper classes for intel math kernel library types.
7
+ Get a free, non-commercial download of MKL at
8
+ http://software.intel.com/en-us/articles/non-commercial-software-download/
9
+ [end_description]
10
+
11
+ Copyright 2010-2011 Mario Mulansky
12
+ Copyright 2011-2013 Karsten Ahnert
13
+
14
+ Distributed under the Boost Software License, Version 1.0.
15
+ (See accompanying file LICENSE_1_0.txt or
16
+ copy at http://www.boost.org/LICENSE_1_0.txt)
17
+ */
18
+
19
+
20
+ #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MKL_MKL_OPERATIONS_HPP_INCLUDED
21
+ #define BOOST_NUMERIC_ODEINT_EXTERNAL_MKL_MKL_OPERATIONS_HPP_INCLUDED
22
+
23
+ #include <iostream>
24
+
25
+ #include <mkl_cblas.h>
26
+ #include <boost/numeric/odeint/algebra/default_operations.hpp>
27
+
28
+ /* exemplary example for writing bindings to the Intel MKL library
29
+ * see test/mkl for how to use mkl with odeint
30
+ * this is a quick and dirty implementation showing the general possibility.
31
+ * It works only with containers based on double and sequential memory allocation.
32
+ */
33
+
34
+ namespace boost {
35
+ namespace numeric {
36
+ namespace odeint {
37
+
38
+ /* only defined for doubles */
39
+ struct mkl_operations
40
+ {
41
+ //template< class Fac1 , class Fac2 > struct scale_sum2;
42
+
43
+ template< class F1 = double , class F2 = F1 >
44
+ struct scale_sum2
45
+ {
46
+ typedef double Fac1;
47
+ typedef double Fac2;
48
+ const Fac1 m_alpha1;
49
+ const Fac2 m_alpha2;
50
+
51
+ scale_sum2( const Fac1 alpha1 , const Fac2 alpha2 ) : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }
52
+
53
+ template< class T1 , class T2 , class T3 >
54
+ void operator()( T1 &t1 , const T2 &t2 , const T3 &t3) const
55
+ { // t1 = m_alpha1 * t2 + m_alpha2 * t3;
56
+ // we get Containers that have size() and [i]-access
57
+
58
+ const int n = t1.size();
59
+ //boost::numeric::odeint::copy( t1 , t3 );
60
+ if( &(t2[0]) != &(t1[0]) )
61
+ {
62
+ cblas_dcopy( n , &(t2[0]) , 1 , &(t1[0]) , 1 );
63
+ }
64
+ cblas_dscal( n , m_alpha1 , &(t1[0]) , 1 );
65
+ cblas_daxpy( n , m_alpha2 , &(t3[0]) , 1 , &(t1[0]) , 1 );
66
+ //daxpby( &n , &m_alpha2 , &(t3[0]) , &one , &m_alpha1 , &(t1[0]) , &one );
67
+ }
68
+ };
69
+
70
+ template< class F1 = double , class F2 = F1 , class F3 = F2 >
71
+ struct scale_sum3
72
+ {
73
+ typedef double Fac1;
74
+ typedef double Fac2;
75
+ typedef double Fac3;
76
+ const Fac1 m_alpha1;
77
+ const Fac2 m_alpha2;
78
+ const Fac3 m_alpha3;
79
+
80
+ scale_sum3( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 )
81
+ : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) { }
82
+
83
+ template< class T1 , class T2 , class T3 , class T4 >
84
+ void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 ) const
85
+ { // t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4;
86
+ // we get Containers that have size() and [i]-access
87
+
88
+ const int n = t1.size();
89
+ //boost::numeric::odeint::copy( t1 , t3 );
90
+ if( &(t2[0]) != &(t1[0]) )
91
+ {
92
+ cblas_dcopy( n , &(t2[0]) , 1 , &(t1[0]) , 1 );
93
+ }
94
+ cblas_dscal( n , m_alpha1 , &(t1[0]) , 1 );
95
+ cblas_daxpy( n , m_alpha2 , &(t3[0]) , 1 , &(t1[0]) , 1 );
96
+ //daxpby( &n , &m_alpha2 , &(t3[0]) , &one , &m_alpha1 , &(t1[0]) , &one );
97
+ cblas_daxpy( n , m_alpha3 , &(t4[0]) , 1 , &(t1[0]) , 1 );
98
+ }
99
+ };
100
+
101
+ template< class F1 = double , class F2 = F1 , class F3 = F2 , class F4 = F3 >
102
+ struct scale_sum4
103
+ {
104
+ typedef double Fac1;
105
+ typedef double Fac2;
106
+ typedef double Fac3;
107
+ typedef double Fac4;
108
+ const Fac1 m_alpha1;
109
+ const Fac2 m_alpha2;
110
+ const Fac3 m_alpha3;
111
+ const Fac4 m_alpha4;
112
+
113
+ scale_sum4( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 , const Fac4 alpha4 )
114
+ : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) { }
115
+
116
+ template< class T1 , class T2 , class T3 , class T4 , class T5 >
117
+ void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 ) const
118
+ { // t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5;
119
+ // we get Containers that have size() and [i]-access
120
+
121
+ const int n = t1.size();
122
+ //boost::numeric::odeint::copy( t1 , t3 );
123
+ if( &(t2[0]) != &(t1[0]) )
124
+ {
125
+ cblas_dcopy( n , &(t2[0]) , 1 , &(t1[0]) , 1 );
126
+ }
127
+
128
+ cblas_dscal( n , m_alpha1 , &(t1[0]) , 1 );
129
+ cblas_daxpy( n , m_alpha2 , &(t3[0]) , 1 , &(t1[0]) , 1 );
130
+ //daxpby( &n , &m_alpha2 , &(t3[0]) , &one , &m_alpha1 , &(t1[0]) , &one );
131
+ cblas_daxpy( n , m_alpha3 , &(t4[0]) , 1 , &(t1[0]) , 1 );
132
+ cblas_daxpy( n , m_alpha4 , &(t5[0]) , 1 , &(t1[0]) , 1 );
133
+ }
134
+ };
135
+
136
+
137
+ template< class F1 = double , class F2 = F1 , class F3 = F2 , class F4 = F3 , class F5 = F4 >
138
+ struct scale_sum5
139
+ {
140
+ typedef double Fac1;
141
+ typedef double Fac2;
142
+ typedef double Fac3;
143
+ typedef double Fac4;
144
+ typedef double Fac5;
145
+ const Fac1 m_alpha1;
146
+ const Fac2 m_alpha2;
147
+ const Fac3 m_alpha3;
148
+ const Fac4 m_alpha4;
149
+ const Fac5 m_alpha5;
150
+
151
+ scale_sum5( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 , const Fac4 alpha4 , const Fac5 alpha5 )
152
+ : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) { }
153
+
154
+ template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
155
+ void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 ) const
156
+ { // t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6;
157
+ // we get Containers that have size() and [i]-access
158
+
159
+ const int n = t1.size();
160
+ //boost::numeric::odeint::copy( t1 , t3 );
161
+ if( &(t2[0]) != &(t1[0]) )
162
+ {
163
+ cblas_dcopy( n , &(t2[0]) , 1 , &(t1[0]) , 1 );
164
+ }
165
+
166
+ cblas_dscal( n , m_alpha1 , &(t1[0]) , 1 );
167
+ cblas_daxpy( n , m_alpha2 , &(t3[0]) , 1 , &(t1[0]) , 1 );
168
+ //daxpby( &n , &m_alpha2 , &(t3[0]) , &one , &m_alpha1 , &(t1[0]) , &one );
169
+ cblas_daxpy( n , m_alpha3 , &(t4[0]) , 1 , &(t1[0]) , 1 );
170
+ cblas_daxpy( n , m_alpha4 , &(t5[0]) , 1 , &(t1[0]) , 1 );
171
+ cblas_daxpy( n , m_alpha5 , &(t6[0]) , 1 , &(t1[0]) , 1 );
172
+ }
173
+ };
174
+
175
+ };
176
+
177
+ } // odeint
178
+ } // numeric
179
+ } // boost
180
+
181
+ #endif // BOOST_NUMERIC_ODEINT_EXTERNAL_MKL_MKL_OPERATIONS_HPP_INCLUDED
@@ -0,0 +1,25 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/external/mpi/mpi.hpp
4
+
5
+ [begin_description]
6
+ Wrappers for MPI.
7
+ [end_description]
8
+
9
+ Copyright 2013 Karsten Ahnert
10
+ Copyright 2013 Mario Mulansky
11
+ Copyright 2013 Pascal Germroth
12
+
13
+ Distributed under the Boost Software License, Version 1.0.
14
+ (See accompanying file LICENSE_1_0.txt or
15
+ copy at http://www.boost.org/LICENSE_1_0.txt)
16
+ */
17
+
18
+
19
+ #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_HPP_INCLUDED
21
+
22
+ #include <boost/numeric/odeint/external/mpi/mpi_vector_state.hpp>
23
+ #include <boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp>
24
+
25
+ #endif
@@ -0,0 +1,62 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp
4
+
5
+ [begin_description]
6
+ Nested parallelized algebra for MPI.
7
+ [end_description]
8
+
9
+ Copyright 2013 Karsten Ahnert
10
+ Copyright 2013 Mario Mulansky
11
+ Copyright 2013 Pascal Germroth
12
+
13
+ Distributed under the Boost Software License, Version 1.0.
14
+ (See accompanying file LICENSE_1_0.txt or
15
+ copy at http://www.boost.org/LICENSE_1_0.txt)
16
+ */
17
+
18
+
19
+ #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_NESTED_ALGEBRA_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_NESTED_ALGEBRA_HPP_INCLUDED
21
+
22
+ #include <boost/numeric/odeint/algebra/norm_result_type.hpp>
23
+ #include <boost/numeric/odeint/util/n_ary_helper.hpp>
24
+
25
+ namespace boost {
26
+ namespace numeric {
27
+ namespace odeint {
28
+
29
+ /** \brief MPI-parallelized algebra, wrapping another algebra.
30
+ */
31
+ template< class InnerAlgebra >
32
+ struct mpi_nested_algebra
33
+ {
34
+
35
+ // execute the InnerAlgebra on each node's local data.
36
+ #define BOOST_ODEINT_GEN_BODY(n) \
37
+ InnerAlgebra::for_each##n( \
38
+ BOOST_PP_ENUM_BINARY_PARAMS(n, s, () BOOST_PP_INTERCEPT) , \
39
+ op \
40
+ );
41
+ BOOST_ODEINT_GEN_FOR_EACH(BOOST_ODEINT_GEN_BODY)
42
+ #undef BOOST_ODEINT_GEN_BODY
43
+
44
+
45
+ template< class NestedState >
46
+ static typename norm_result_type< typename NestedState::value_type >::type norm_inf( const NestedState &s )
47
+ {
48
+ typedef typename norm_result_type< typename NestedState::value_type >::type result_type;
49
+ // local maximum
50
+ result_type value = InnerAlgebra::norm_inf( s() );
51
+ // global maximum
52
+ return boost::mpi::all_reduce(s.world, value, boost::mpi::maximum<result_type>());
53
+ }
54
+
55
+ };
56
+
57
+
58
+ }
59
+ }
60
+ }
61
+
62
+ #endif
@@ -0,0 +1,113 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/external/mpi/mpi_state.hpp
4
+
5
+ [begin_description]
6
+ A generic split state, storing partial data on each node.
7
+ [end_description]
8
+
9
+ Copyright 2013 Karsten Ahnert
10
+ Copyright 2013 Mario Mulansky
11
+ Copyright 2013 Pascal Germroth
12
+
13
+ Distributed under the Boost Software License, Version 1.0.
14
+ (See accompanying file LICENSE_1_0.txt or
15
+ copy at http://www.boost.org/LICENSE_1_0.txt)
16
+ */
17
+
18
+
19
+ #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_STATE_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_STATE_HPP_INCLUDED
21
+
22
+ #include <vector>
23
+ #include <algorithm>
24
+ #include <boost/mpi.hpp>
25
+ #include <boost/numeric/odeint/util/copy.hpp>
26
+ #include <boost/numeric/odeint/util/split.hpp>
27
+ #include <boost/numeric/odeint/util/resize.hpp>
28
+ #include <boost/numeric/odeint/util/same_size.hpp>
29
+ #include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
30
+ #include <boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp>
31
+
32
+ namespace boost {
33
+ namespace numeric {
34
+ namespace odeint {
35
+
36
+ /** \brief A container which has its contents distributed among the nodes.
37
+ */
38
+ template< class InnerState >
39
+ struct mpi_state
40
+ {
41
+ typedef InnerState value_type;
42
+
43
+ // the node's local data.
44
+ InnerState m_data;
45
+
46
+ boost::mpi::communicator world;
47
+
48
+ mpi_state() {}
49
+ mpi_state(boost::mpi::communicator comm) : world(comm) {}
50
+
51
+ inline InnerState &operator()() { return m_data; }
52
+ inline const InnerState &operator()() const { return m_data; }
53
+ };
54
+
55
+
56
+
57
+
58
+ template< class InnerState >
59
+ struct is_resizeable< mpi_state< InnerState > >
60
+ : is_resizeable< InnerState > { };
61
+
62
+
63
+ template< class InnerState1 , class InnerState2 >
64
+ struct same_size_impl< mpi_state< InnerState1 > , mpi_state< InnerState2 > >
65
+ {
66
+ static bool same_size( const mpi_state< InnerState1 > &x , const mpi_state< InnerState2 > &y )
67
+ {
68
+ const bool local = boost::numeric::odeint::same_size(x(), y());
69
+ return boost::mpi::all_reduce(x.world, local, mpi::bitwise_and<bool>());
70
+ }
71
+ };
72
+
73
+
74
+ template< class InnerState1 , class InnerState2 >
75
+ struct resize_impl< mpi_state< InnerState1 > , mpi_state< InnerState2 > >
76
+ {
77
+ static void resize( mpi_state< InnerState1 > &x , const mpi_state< InnerState2 > &y )
78
+ {
79
+ // resize local parts on each node.
80
+ boost::numeric::odeint::resize(x(), y());
81
+ }
82
+ };
83
+
84
+
85
+ /** \brief Copy data between mpi_states of same size. */
86
+ template< class InnerState1 , class InnerState2 >
87
+ struct copy_impl< mpi_state< InnerState1 > , mpi_state< InnerState2 > >
88
+ {
89
+ static void copy( const mpi_state< InnerState1 > &from , mpi_state< InnerState2 > &to )
90
+ {
91
+ // copy local parts on each node.
92
+ boost::numeric::odeint::copy(from(), to());
93
+ }
94
+ };
95
+
96
+
97
+
98
+ /** \brief Use `mpi_algebra` for `mpi_state`. */
99
+ template< class InnerState >
100
+ struct algebra_dispatcher< mpi_state< InnerState > >
101
+ {
102
+ typedef mpi_nested_algebra<
103
+ typename algebra_dispatcher< InnerState >::algebra_type
104
+ > algebra_type;
105
+ };
106
+
107
+
108
+ }
109
+ }
110
+ }
111
+
112
+
113
+ #endif
@@ -0,0 +1,95 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/external/mpi/mpi_vector_state.hpp
4
+
5
+ [begin_description]
6
+ Copying a container from/to an mpi_state splits/joins it.
7
+ [end_description]
8
+
9
+ Copyright 2013 Karsten Ahnert
10
+ Copyright 2013 Mario Mulansky
11
+ Copyright 2013 Pascal Germroth
12
+
13
+ Distributed under the Boost Software License, Version 1.0.
14
+ (See accompanying file LICENSE_1_0.txt or
15
+ copy at http://www.boost.org/LICENSE_1_0.txt)
16
+ */
17
+
18
+
19
+ #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_VECTOR_STATE_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_VECTOR_STATE_HPP_INCLUDED
21
+
22
+ #include <vector>
23
+ #include <algorithm>
24
+ #include <boost/mpi.hpp>
25
+ #include <boost/numeric/odeint/util/copy.hpp>
26
+ #include <boost/numeric/odeint/util/split_adaptor.hpp>
27
+ #include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
28
+ #include <boost/numeric/odeint/external/mpi/mpi_state.hpp>
29
+ #include <boost/numeric/odeint/tools/assert.hpp>
30
+
31
+ namespace boost {
32
+ namespace numeric {
33
+ namespace odeint {
34
+
35
+
36
+ /** \brief Split data from some container on node 0 to the slaves.
37
+ * Source must be a model of Random Access Range. */
38
+ template< class Source , class InnerState >
39
+ struct split_impl< Source, mpi_state< InnerState >,
40
+ typename boost::enable_if< boost::has_range_const_iterator<Source> >::type >
41
+ {
42
+ typedef typename boost::range_iterator<const Source>::type iterator;
43
+
44
+ static void split( const Source &from, mpi_state< InnerState > &to )
45
+ {
46
+ std::vector< InnerState > pieces;
47
+ if(to.world.rank() == 0) {
48
+ const size_t num = static_cast<size_t>(to.world.size());
49
+ pieces.resize(num);
50
+ for(size_t i = 0 ; i < num ; i++) {
51
+ iterator_range<iterator> part = detail::make_split_range(from, i, num);
52
+ boost::numeric::odeint::resize(pieces[i], part);
53
+ boost::numeric::odeint::copy(part, pieces[i]);
54
+ }
55
+ }
56
+ // send to nodes
57
+ boost::mpi::scatter(to.world, pieces, to(), 0);
58
+ }
59
+ };
60
+
61
+ /** \brief Merge data from an mpi_state to some container on node 0.
62
+ * Target must be a model Single Pass Range. */
63
+ template< class Target, class InnerState >
64
+ struct unsplit_impl< mpi_state< InnerState >, Target,
65
+ typename boost::enable_if< boost::has_range_iterator<Target> >::type >
66
+ {
67
+ typedef typename boost::range_iterator<Target>::type iterator;
68
+
69
+ static void unsplit( const mpi_state< InnerState > &from , Target &to )
70
+ {
71
+ std::vector< InnerState > pieces;
72
+ // send data to root
73
+ boost::mpi::gather(from.world, from(), pieces, 0);
74
+ if(from.world.rank() == 0) {
75
+ // check target size
76
+ size_t total_size = 0;
77
+ for(size_t i = 0 ; i < pieces.size() ; i++)
78
+ total_size += boost::size(pieces[i]);
79
+ BOOST_NUMERIC_ODEINT_ASSERT( total_size <= boost::size(to) );
80
+ // copy parts
81
+ iterator out = boost::begin(to);
82
+ for(size_t i = 0 ; i < pieces.size() ; i++)
83
+ out = boost::copy(pieces[i], out);
84
+ }
85
+ }
86
+ };
87
+
88
+
89
+ }
90
+ }
91
+ }
92
+
93
+
94
+ #endif
95
+