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,281 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp
4
+
5
+ [begin_description]
6
+ Nested parallelized algebra for OpenMP.
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_OPENMP_OPENMP_NESTED_ALGEBRA_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_NESTED_ALGEBRA_HPP_INCLUDED
21
+
22
+ #include <boost/range.hpp>
23
+ #include <boost/numeric/odeint/algebra/norm_result_type.hpp>
24
+ #include <boost/numeric/odeint/util/n_ary_helper.hpp>
25
+ #include <boost/numeric/odeint/tools/assert.hpp>
26
+
27
+ namespace boost {
28
+ namespace numeric {
29
+ namespace odeint {
30
+
31
+ /** \brief OpenMP-parallelized algebra, wrapping another, non-parallelized algebra.
32
+ *
33
+ * NestedState must be a model of Random Access Range, where the elements are sub-states
34
+ * which will be processed in parallel.
35
+ */
36
+ template< class InnerAlgebra >
37
+ struct openmp_nested_algebra
38
+ {
39
+
40
+ #if __cplusplus >= 201103L // C++11 supports _Pragma
41
+
42
+ #define BOOST_ODEINT_GEN_LOCAL(z, n, unused) \
43
+ BOOST_NUMERIC_ODEINT_ASSERT_MSG( len == boost::size(s ## n), "All nested state ranges must have the same size." ); \
44
+ typename boost::range_iterator<S ## n>::type beg ## n = boost::begin(s ## n);
45
+ #define BOOST_ODEINT_GEN_BODY(n) \
46
+ const size_t len = boost::size(s0); \
47
+ BOOST_PP_REPEAT(n, BOOST_ODEINT_GEN_LOCAL, ~) \
48
+ _Pragma("omp parallel for schedule(runtime)") \
49
+ for( size_t i = 0 ; i < len ; i++ ) \
50
+ InnerAlgebra::for_each##n( \
51
+ BOOST_PP_ENUM_BINARY_PARAMS(n, beg, [i] BOOST_PP_INTERCEPT) , \
52
+ op \
53
+ );
54
+ BOOST_ODEINT_GEN_FOR_EACH(BOOST_ODEINT_GEN_BODY)
55
+ #undef BOOST_ODEINT_GEN_BODY
56
+ #undef BOOST_ODEINT_GEN_LOCAL
57
+
58
+ #else
59
+
60
+ template< class S0 , class Op > static void for_each1 ( S0 &s0 , Op op ) {
61
+ const size_t len = boost::size(s0);
62
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
63
+ #pragma omp parallel for schedule(runtime)
64
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each1( beg0 [i] , op );
65
+ }
66
+ template< class S0 , class S1 , class Op > static void for_each2 ( S0 &s0 , S1 &s1 , Op op ) {
67
+ const size_t len = boost::size(s0);
68
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
69
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
70
+ #pragma omp parallel for schedule(runtime)
71
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each2( beg0 [i] , beg1 [i] , op );
72
+ }
73
+ template< class S0 , class S1 , class S2 , class Op > static void for_each3 ( S0 &s0 , S1 &s1 , S2 &s2 , Op op ) {
74
+ const size_t len = boost::size(s0);
75
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
76
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
77
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
78
+ #pragma omp parallel for schedule(runtime)
79
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each3( beg0 [i] , beg1 [i] , beg2 [i] , op );
80
+ }
81
+ template< class S0 , class S1 , class S2 , class S3 , class Op > static void for_each4 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , Op op ) {
82
+ const size_t len = boost::size(s0);
83
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
84
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
85
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
86
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
87
+ #pragma omp parallel for schedule(runtime)
88
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each4( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , op );
89
+ }
90
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class Op > static void for_each5 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op ) {
91
+ const size_t len = boost::size(s0);
92
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
93
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
94
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
95
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
96
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
97
+ #pragma omp parallel for schedule(runtime)
98
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each5( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , op );
99
+ }
100
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class Op > static void for_each6 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op ) {
101
+ const size_t len = boost::size(s0);
102
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
103
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
104
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
105
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
106
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
107
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
108
+ #pragma omp parallel for schedule(runtime)
109
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each6( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , op );
110
+ }
111
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op > static void for_each7 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op ) {
112
+ const size_t len = boost::size(s0);
113
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
114
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
115
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
116
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
117
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
118
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
119
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
120
+ #pragma omp parallel for schedule(runtime)
121
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each7( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , op );
122
+ }
123
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class Op > static void for_each8 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op ) {
124
+ const size_t len = boost::size(s0);
125
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
126
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
127
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
128
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
129
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
130
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
131
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
132
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
133
+ #pragma omp parallel for schedule(runtime)
134
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each8( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , op );
135
+ }
136
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class Op > static void for_each9 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op ) {
137
+ const size_t len = boost::size(s0);
138
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
139
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
140
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
141
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
142
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
143
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
144
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
145
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
146
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
147
+ #pragma omp parallel for schedule(runtime)
148
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each9( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , op );
149
+ }
150
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class Op > static void for_each10 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , Op op ) {
151
+ const size_t len = boost::size(s0);
152
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
153
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
154
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
155
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
156
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
157
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
158
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
159
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
160
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
161
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
162
+ #pragma omp parallel for schedule(runtime)
163
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each10( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , op );
164
+ }
165
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class Op > static void for_each11 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , Op op ) {
166
+ const size_t len = boost::size(s0);
167
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
168
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
169
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
170
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
171
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
172
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
173
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
174
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
175
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
176
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
177
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
178
+ #pragma omp parallel for schedule(runtime)
179
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each11( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , op );
180
+ }
181
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class Op > static void for_each12 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , Op op ) {
182
+ const size_t len = boost::size(s0);
183
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
184
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
185
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
186
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
187
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
188
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
189
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
190
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
191
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
192
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
193
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
194
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
195
+ #pragma omp parallel for schedule(runtime)
196
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each12( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , op );
197
+ }
198
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class Op > static void for_each13 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , Op op ) {
199
+ const size_t len = boost::size(s0);
200
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
201
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
202
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
203
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
204
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
205
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
206
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
207
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
208
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
209
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
210
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
211
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
212
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
213
+ #pragma omp parallel for schedule(runtime)
214
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each13( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , op );
215
+ }
216
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class Op > static void for_each14 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , Op op ) {
217
+ const size_t len = boost::size(s0);
218
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
219
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
220
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
221
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
222
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
223
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
224
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
225
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
226
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
227
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
228
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
229
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
230
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
231
+ typename boost::range_iterator<S13>::type beg13 = boost::begin(s13);
232
+ #pragma omp parallel for schedule(runtime)
233
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each14( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , beg13 [i] , op );
234
+ }
235
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class Op > static void for_each15 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , Op op ) {
236
+ const size_t len = boost::size(s0);
237
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
238
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
239
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
240
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
241
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
242
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
243
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
244
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
245
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
246
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
247
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
248
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
249
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
250
+ typename boost::range_iterator<S13>::type beg13 = boost::begin(s13);
251
+ typename boost::range_iterator<S14>::type beg14 = boost::begin(s14);
252
+ #pragma omp parallel for schedule(runtime)
253
+ for( size_t i = 0 ; i < len ; i++ ) InnerAlgebra::for_each15( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , beg13 [i] , beg14 [i] , op );
254
+ }
255
+
256
+ #endif
257
+
258
+
259
+ template< class NestedState >
260
+ static typename norm_result_type< typename NestedState::value_type >::type norm_inf( const NestedState &s )
261
+ {
262
+ typedef typename boost::range_iterator<const NestedState>::type iterator;
263
+ typedef typename std::iterator_traits<iterator>::value_type value_type;
264
+ typedef typename norm_result_type<value_type>::type result_type;
265
+ result_type init = static_cast< result_type >( 0 );
266
+ const size_t len = boost::size(s);
267
+ iterator beg = boost::begin(s);
268
+ # pragma omp parallel for reduction(max: init) schedule(dynamic)
269
+ for( size_t i = 0 ; i < len ; i++ )
270
+ init = (std::max)( init , InnerAlgebra::norm_inf( beg[i] ) );
271
+ return init;
272
+ }
273
+
274
+ };
275
+
276
+
277
+ }
278
+ }
279
+ }
280
+
281
+ #endif
@@ -0,0 +1,276 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp
4
+
5
+ [begin_description]
6
+ Range algebra for OpenMP.
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_OPENMP_OPENMP_RANGE_ALGEBRA_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_EXTERNAL_OPENMP_OPENMP_RANGE_ALGEBRA_HPP_INCLUDED
21
+
22
+ #include <boost/range.hpp>
23
+ #include <boost/numeric/odeint/algebra/norm_result_type.hpp>
24
+ #include <boost/numeric/odeint/util/n_ary_helper.hpp>
25
+ #include <boost/numeric/odeint/tools/assert.hpp>
26
+
27
+ namespace boost {
28
+ namespace numeric {
29
+ namespace odeint {
30
+
31
+ /** \brief OpenMP-parallelized range algebra.
32
+ *
33
+ * State must be a model of Random Access Range.
34
+ */
35
+ struct openmp_range_algebra
36
+ {
37
+
38
+ #if __cplusplus >= 201103L // C++11 supports _Pragma
39
+
40
+ #define BOOST_ODEINT_GEN_LOCAL(z, n, unused) \
41
+ BOOST_NUMERIC_ODEINT_ASSERT_MSG( len == boost::size(s ## n), "All state ranges must have the same size." ); \
42
+ typename boost::range_iterator<S ## n>::type beg ## n = boost::begin(s ## n);
43
+ #define BOOST_ODEINT_GEN_BODY(n) \
44
+ const size_t len = boost::size(s0); \
45
+ BOOST_PP_REPEAT(n, BOOST_ODEINT_GEN_LOCAL, ~) \
46
+ _Pragma("omp parallel for schedule(runtime)") \
47
+ for( size_t i = 0 ; i < len ; i++ ) \
48
+ op( BOOST_PP_ENUM_BINARY_PARAMS(n, beg, [i] BOOST_PP_INTERCEPT) );
49
+ BOOST_ODEINT_GEN_FOR_EACH(BOOST_ODEINT_GEN_BODY)
50
+ #undef BOOST_ODEINT_GEN_BODY
51
+ #undef BOOST_ODEINT_GEN_LOCAL
52
+
53
+ #else
54
+
55
+ template< class S0 , class Op > static void for_each1 ( S0 &s0 , Op op ) {
56
+ const size_t len = boost::size(s0);
57
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
58
+ #pragma omp parallel for schedule(runtime)
59
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] );
60
+ }
61
+ template< class S0 , class S1 , class Op > static void for_each2 ( S0 &s0 , S1 &s1 , Op op ) {
62
+ const size_t len = boost::size(s0);
63
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
64
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
65
+ #pragma omp parallel for schedule(runtime)
66
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] );
67
+ }
68
+ template< class S0 , class S1 , class S2 , class Op > static void for_each3 ( S0 &s0 , S1 &s1 , S2 &s2 , Op op ) {
69
+ const size_t len = boost::size(s0);
70
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
71
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
72
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
73
+ #pragma omp parallel for schedule(runtime)
74
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] );
75
+ }
76
+ template< class S0 , class S1 , class S2 , class S3 , class Op > static void for_each4 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , Op op ) {
77
+ const size_t len = boost::size(s0);
78
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
79
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
80
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
81
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
82
+ #pragma omp parallel for schedule(runtime)
83
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] );
84
+ }
85
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class Op > static void for_each5 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op ) {
86
+ const size_t len = boost::size(s0);
87
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
88
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
89
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
90
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
91
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
92
+ #pragma omp parallel for schedule(runtime)
93
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] );
94
+ }
95
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class Op > static void for_each6 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op ) {
96
+ const size_t len = boost::size(s0);
97
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
98
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
99
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
100
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
101
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
102
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
103
+ #pragma omp parallel for schedule(runtime)
104
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] );
105
+ }
106
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op > static void for_each7 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op ) {
107
+ const size_t len = boost::size(s0);
108
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
109
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
110
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
111
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
112
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
113
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
114
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
115
+ #pragma omp parallel for schedule(runtime)
116
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] );
117
+ }
118
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class Op > static void for_each8 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op ) {
119
+ const size_t len = boost::size(s0);
120
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
121
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
122
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
123
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
124
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
125
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
126
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
127
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
128
+ #pragma omp parallel for schedule(runtime)
129
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] );
130
+ }
131
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class Op > static void for_each9 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op ) {
132
+ const size_t len = boost::size(s0);
133
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
134
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
135
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
136
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
137
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
138
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
139
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
140
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
141
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
142
+ #pragma omp parallel for schedule(runtime)
143
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] );
144
+ }
145
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class Op > static void for_each10 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , Op op ) {
146
+ const size_t len = boost::size(s0);
147
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
148
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
149
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
150
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
151
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
152
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
153
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
154
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
155
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
156
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
157
+ #pragma omp parallel for schedule(runtime)
158
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] );
159
+ }
160
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class Op > static void for_each11 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , Op op ) {
161
+ const size_t len = boost::size(s0);
162
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
163
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
164
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
165
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
166
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
167
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
168
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
169
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
170
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
171
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
172
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
173
+ #pragma omp parallel for schedule(runtime)
174
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] );
175
+ }
176
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class Op > static void for_each12 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , Op op ) {
177
+ const size_t len = boost::size(s0);
178
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
179
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
180
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
181
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
182
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
183
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
184
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
185
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
186
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
187
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
188
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
189
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
190
+ #pragma omp parallel for schedule(runtime)
191
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] );
192
+ }
193
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class Op > static void for_each13 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , Op op ) {
194
+ const size_t len = boost::size(s0);
195
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
196
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
197
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
198
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
199
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
200
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
201
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
202
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
203
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
204
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
205
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
206
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
207
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
208
+ #pragma omp parallel for schedule(runtime)
209
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] );
210
+ }
211
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class Op > static void for_each14 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , Op op ) {
212
+ const size_t len = boost::size(s0);
213
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
214
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
215
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
216
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
217
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
218
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
219
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
220
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
221
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
222
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
223
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
224
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
225
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
226
+ typename boost::range_iterator<S13>::type beg13 = boost::begin(s13);
227
+ #pragma omp parallel for schedule(runtime)
228
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , beg13 [i] );
229
+ }
230
+ template< class S0 , class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class Op > static void for_each15 ( S0 &s0 , S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , Op op ) {
231
+ const size_t len = boost::size(s0);
232
+ typename boost::range_iterator<S0>::type beg0 = boost::begin(s0);
233
+ typename boost::range_iterator<S1>::type beg1 = boost::begin(s1);
234
+ typename boost::range_iterator<S2>::type beg2 = boost::begin(s2);
235
+ typename boost::range_iterator<S3>::type beg3 = boost::begin(s3);
236
+ typename boost::range_iterator<S4>::type beg4 = boost::begin(s4);
237
+ typename boost::range_iterator<S5>::type beg5 = boost::begin(s5);
238
+ typename boost::range_iterator<S6>::type beg6 = boost::begin(s6);
239
+ typename boost::range_iterator<S7>::type beg7 = boost::begin(s7);
240
+ typename boost::range_iterator<S8>::type beg8 = boost::begin(s8);
241
+ typename boost::range_iterator<S9>::type beg9 = boost::begin(s9);
242
+ typename boost::range_iterator<S10>::type beg10 = boost::begin(s10);
243
+ typename boost::range_iterator<S11>::type beg11 = boost::begin(s11);
244
+ typename boost::range_iterator<S12>::type beg12 = boost::begin(s12);
245
+ typename boost::range_iterator<S13>::type beg13 = boost::begin(s13);
246
+ typename boost::range_iterator<S14>::type beg14 = boost::begin(s14);
247
+ #pragma omp parallel for schedule(runtime)
248
+ for( size_t i = 0 ; i < len ; i++ ) op( beg0 [i] , beg1 [i] , beg2 [i] , beg3 [i] , beg4 [i] , beg5 [i] , beg6 [i] , beg7 [i] , beg8 [i] , beg9 [i] , beg10 [i] , beg11 [i] , beg12 [i] , beg13 [i] , beg14 [i] );
249
+ }
250
+
251
+ #endif
252
+
253
+
254
+ template< class S >
255
+ static typename norm_result_type< S >::type norm_inf( const S &s )
256
+ {
257
+ using std::max;
258
+ using std::abs;
259
+ typedef typename norm_result_type< S >::type result_type;
260
+ result_type init = static_cast< result_type >( 0 );
261
+ const size_t len = boost::size(s);
262
+ typename boost::range_iterator<const S>::type beg = boost::begin(s);
263
+ # pragma omp parallel for reduction(max: init) schedule(dynamic)
264
+ for( size_t i = 0 ; i < len ; ++i )
265
+ init = max( init , abs( beg[i] ) );
266
+ return init;
267
+ }
268
+
269
+ };
270
+
271
+
272
+ }
273
+ }
274
+ }
275
+
276
+ #endif