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,166 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/stepper/euler.hpp
4
+
5
+ [begin_description]
6
+ Implementation of the classical explicit Euler stepper. This method is really simple and should only
7
+ be used for demonstration purposes.
8
+ [end_description]
9
+
10
+ Copyright 2010-2013 Karsten Ahnert
11
+ Copyright 2010-2013 Mario Mulansky
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_STEPPER_EULER_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_STEPPER_EULER_HPP_INCLUDED
21
+
22
+
23
+ #include <boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp>
24
+ #include <boost/numeric/odeint/util/resizer.hpp>
25
+ #include <boost/numeric/odeint/algebra/range_algebra.hpp>
26
+ #include <boost/numeric/odeint/algebra/default_operations.hpp>
27
+ #include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
28
+ #include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
29
+
30
+ namespace boost {
31
+ namespace numeric {
32
+ namespace odeint {
33
+
34
+
35
+ template<
36
+ class State ,
37
+ class Value = double ,
38
+ class Deriv = State ,
39
+ class Time = Value ,
40
+ class Algebra = typename algebra_dispatcher< State >::algebra_type ,
41
+ class Operations = typename operations_dispatcher< State >::operations_type ,
42
+ class Resizer = initially_resizer
43
+ >
44
+ #ifndef DOXYGEN_SKIP
45
+ class euler
46
+ : public explicit_stepper_base<
47
+ euler< State , Value , Deriv , Time , Algebra , Operations , Resizer > ,
48
+ 1 , State , Value , Deriv , Time , Algebra , Operations , Resizer >
49
+ #else
50
+ class euler : public explicit_stepper_base
51
+ #endif
52
+ {
53
+ public :
54
+
55
+ #ifndef DOXYGEN_SKIP
56
+ typedef explicit_stepper_base< euler< State , Value , Deriv , Time , Algebra , Operations , Resizer > , 1 , State , Value , Deriv , Time , Algebra , Operations , Resizer > stepper_base_type;
57
+ #else
58
+ typedef explicit_stepper_base< euler< ... > , ... > stepper_base_type;
59
+ #endif
60
+ typedef typename stepper_base_type::state_type state_type;
61
+ typedef typename stepper_base_type::value_type value_type;
62
+ typedef typename stepper_base_type::deriv_type deriv_type;
63
+ typedef typename stepper_base_type::time_type time_type;
64
+ typedef typename stepper_base_type::algebra_type algebra_type;
65
+ typedef typename stepper_base_type::operations_type operations_type;
66
+ typedef typename stepper_base_type::resizer_type resizer_type;
67
+
68
+ #ifndef DOXYGEN_SKIP
69
+ typedef typename stepper_base_type::stepper_type stepper_type;
70
+ typedef typename stepper_base_type::wrapped_state_type wrapped_state_type;
71
+ typedef typename stepper_base_type::wrapped_deriv_type wrapped_deriv_type;
72
+ #endif
73
+
74
+
75
+ euler( const algebra_type &algebra = algebra_type() ) : stepper_base_type( algebra )
76
+ { }
77
+
78
+ template< class System , class StateIn , class DerivIn , class StateOut >
79
+ void do_step_impl( System /* system */ , const StateIn &in , const DerivIn &dxdt , time_type /* t */ , StateOut &out , time_type dt )
80
+ {
81
+ stepper_base_type::m_algebra.for_each3( out , in , dxdt ,
82
+ typename operations_type::template scale_sum2< value_type , time_type >( 1.0 , dt ) );
83
+
84
+ }
85
+
86
+ template< class StateOut , class StateIn1 , class StateIn2 >
87
+ void calc_state( StateOut &x , time_type t , const StateIn1 &old_state , time_type t_old , const StateIn2 & /*current_state*/ , time_type /* t_new */ ) const
88
+ {
89
+ const time_type delta = t - t_old;
90
+ stepper_base_type::m_algebra.for_each3( x , old_state , stepper_base_type::m_dxdt.m_v ,
91
+ typename operations_type::template scale_sum2< value_type , time_type >( 1.0 , delta ) );
92
+ }
93
+
94
+ template< class StateType >
95
+ void adjust_size( const StateType &x )
96
+ {
97
+ stepper_base_type::adjust_size( x );
98
+ }
99
+ };
100
+
101
+
102
+
103
+ /********** DOXYGEN ***********/
104
+
105
+ /**
106
+ * \class euler
107
+ * \brief An implementation of the Euler method.
108
+ *
109
+ * The Euler method is a very simply solver for ordinary differential equations. This method should not be used
110
+ * for real applications. It is only useful for demonstration purposes. Step size control is not provided but
111
+ * trivial continuous output is available.
112
+ *
113
+ * This class derives from explicit_stepper_base and inherits its interface via CRTP (current recurring template pattern),
114
+ * see explicit_stepper_base
115
+ *
116
+ * \tparam State The state type.
117
+ * \tparam Value The value type.
118
+ * \tparam Deriv The type representing the time derivative of the state.
119
+ * \tparam Time The time representing the independent variable - the time.
120
+ * \tparam Algebra The algebra type.
121
+ * \tparam Operations The operations type.
122
+ * \tparam Resizer The resizer policy type.
123
+ */
124
+
125
+ /**
126
+ * \fn euler::euler( const algebra_type &algebra )
127
+ * \brief Constructs the euler class. This constructor can be used as a default
128
+ * constructor of the algebra has a default constructor.
129
+ * \param algebra A copy of algebra is made and stored inside explicit_stepper_base.
130
+ */
131
+
132
+ /**
133
+ * \fn euler::do_step_impl( System system , const StateIn &in , const DerivIn &dxdt , time_type t , StateOut &out , time_type dt )
134
+ * \brief This method performs one step. The derivative `dxdt` of `in` at the time `t` is passed to the method.
135
+ * The result is updated out of place, hence the input is in `in` and the output in `out`.
136
+ * Access to this step functionality is provided by explicit_stepper_base and
137
+ * `do_step_impl` should not be called directly.
138
+ *
139
+ * \param system The system function to solve, hence the r.h.s. of the ODE. It must fulfill the
140
+ * Simple System concept.
141
+ * \param in The state of the ODE which should be solved. in is not modified in this method
142
+ * \param dxdt The derivative of x at t.
143
+ * \param t The value of the time, at which the step should be performed.
144
+ * \param out The result of the step is written in out.
145
+ * \param dt The step size.
146
+ */
147
+
148
+
149
+ /**
150
+ * \fn euler::calc_state( StateOut &x , time_type t , const StateIn1 &old_state , time_type t_old , const StateIn2 &current_state , time_type t_new ) const
151
+ * \brief This method is used for continuous output and it calculates the state `x` at a time `t` from the
152
+ * knowledge of two states `old_state` and `current_state` at time points `t_old` and `t_new`.
153
+ */
154
+
155
+ /**
156
+ * \fn euler::adjust_size( const StateType &x )
157
+ * \brief Adjust the size of all temporaries in the stepper manually.
158
+ * \param x A state from which the size of the temporaries to be resized is deduced.
159
+ */
160
+
161
+ } // odeint
162
+ } // numeric
163
+ } // boost
164
+
165
+
166
+ #endif // BOOST_NUMERIC_ODEINT_STEPPER_EULER_HPP_INCLUDED
@@ -0,0 +1,255 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp
4
+
5
+ [begin_description]
6
+ Implementation of the generic Runge Kutta error stepper. Base class for many RK error steppers.
7
+ [end_description]
8
+
9
+ Copyright 2011-2013 Mario Mulansky
10
+ Copyright 2011-2013 Karsten Ahnert
11
+ Copyright 2012 Christoph Koke
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_STEPPER_EXPLICIT_ERROR_GENERIC_RK_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_STEPPER_EXPLICIT_ERROR_GENERIC_RK_HPP_INCLUDED
21
+
22
+ #include <boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp>
23
+
24
+ #include <boost/numeric/odeint/algebra/default_operations.hpp>
25
+ #include <boost/numeric/odeint/algebra/range_algebra.hpp>
26
+ #include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
27
+ #include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
28
+ #include <boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp>
29
+ #include <boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp>
30
+ #include <boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp>
31
+
32
+ #include <boost/numeric/odeint/util/state_wrapper.hpp>
33
+ #include <boost/numeric/odeint/util/is_resizeable.hpp>
34
+ #include <boost/numeric/odeint/util/resizer.hpp>
35
+
36
+
37
+
38
+ namespace boost {
39
+ namespace numeric {
40
+ namespace odeint {
41
+
42
+
43
+ template<
44
+ size_t StageCount,
45
+ size_t Order,
46
+ size_t StepperOrder ,
47
+ size_t ErrorOrder ,
48
+ class State ,
49
+ class Value = double ,
50
+ class Deriv = State ,
51
+ class Time = Value ,
52
+ class Algebra = typename algebra_dispatcher< State >::algebra_type ,
53
+ class Operations = typename operations_dispatcher< State >::operations_type ,
54
+ class Resizer = initially_resizer
55
+ >
56
+ #ifndef DOXYGEN_SKIP
57
+ class explicit_error_generic_rk
58
+ : public explicit_error_stepper_base<
59
+ explicit_error_generic_rk< StageCount , Order , StepperOrder , ErrorOrder , State ,
60
+ Value , Deriv , Time , Algebra , Operations , Resizer > ,
61
+ Order , StepperOrder , ErrorOrder , State , Value , Deriv , Time , Algebra ,
62
+ Operations , Resizer >
63
+ #else
64
+ class explicit_error_generic_rk : public explicit_error_stepper_base
65
+ #endif
66
+ {
67
+
68
+ public:
69
+ #ifndef DOXYGEN_SKIP
70
+ typedef explicit_error_stepper_base<
71
+ explicit_error_generic_rk< StageCount , Order , StepperOrder , ErrorOrder , State ,
72
+ Value , Deriv , Time , Algebra , Operations , Resizer > ,
73
+ Order , StepperOrder , ErrorOrder , State , Value , Deriv , Time , Algebra ,
74
+ Operations , Resizer > stepper_base_type;
75
+ #else
76
+ typedef explicit_stepper_base< ... > stepper_base_type;
77
+ #endif
78
+ typedef typename stepper_base_type::state_type state_type;
79
+ typedef typename stepper_base_type::wrapped_state_type wrapped_state_type;
80
+ typedef typename stepper_base_type::value_type value_type;
81
+ typedef typename stepper_base_type::deriv_type deriv_type;
82
+ typedef typename stepper_base_type::wrapped_deriv_type wrapped_deriv_type;
83
+ typedef typename stepper_base_type::time_type time_type;
84
+ typedef typename stepper_base_type::algebra_type algebra_type;
85
+ typedef typename stepper_base_type::operations_type operations_type;
86
+ typedef typename stepper_base_type::resizer_type resizer_type;
87
+ #ifndef DOXYGEN_SKIP
88
+ typedef explicit_error_generic_rk< StageCount , Order , StepperOrder , ErrorOrder , State ,
89
+ Value , Deriv , Time , Algebra , Operations , Resizer > stepper_type;
90
+ #endif
91
+ typedef detail::generic_rk_algorithm< StageCount , Value , Algebra , Operations > rk_algorithm_type;
92
+
93
+ typedef typename rk_algorithm_type::coef_a_type coef_a_type;
94
+ typedef typename rk_algorithm_type::coef_b_type coef_b_type;
95
+ typedef typename rk_algorithm_type::coef_c_type coef_c_type;
96
+
97
+ static const size_t stage_count = StageCount;
98
+
99
+ private:
100
+
101
+
102
+ public:
103
+
104
+ // we use an explicit_generic_rk to do the normal rk step
105
+ // and add a separate calculation of the error estimate afterwards
106
+ explicit_error_generic_rk( const coef_a_type &a ,
107
+ const coef_b_type &b ,
108
+ const coef_b_type &b2 ,
109
+ const coef_c_type &c ,
110
+ const algebra_type &algebra = algebra_type() )
111
+ : stepper_base_type( algebra ) , m_rk_algorithm( a , b , c ) , m_b2( b2 )
112
+ { }
113
+
114
+
115
+ template< class System , class StateIn , class DerivIn , class StateOut , class Err >
116
+ void do_step_impl( System system , const StateIn &in , const DerivIn &dxdt ,
117
+ time_type t , StateOut &out , time_type dt , Err &xerr )
118
+ {
119
+ // normal step
120
+ do_step_impl( system , in , dxdt , t , out , dt );
121
+
122
+ // additionally, perform the error calculation
123
+ detail::template generic_rk_call_algebra< StageCount , algebra_type >()( stepper_base_type::m_algebra ,
124
+ xerr , dxdt , m_F , detail::generic_rk_scale_sum_err< StageCount , operations_type , value_type , time_type >( m_b2 , dt) );
125
+ }
126
+
127
+
128
+ template< class System , class StateIn , class DerivIn , class StateOut >
129
+ void do_step_impl( System system , const StateIn &in , const DerivIn &dxdt ,
130
+ time_type t , StateOut &out , time_type dt )
131
+ {
132
+ m_resizer.adjust_size(in, [this](auto&& arg) { return this->resize_impl<StateIn>(std::forward<decltype(arg)>(arg)); });
133
+
134
+ // actual calculation done in generic_rk.hpp
135
+ m_rk_algorithm.do_step( stepper_base_type::m_algebra , system , in , dxdt , t , out , dt , m_x_tmp.m_v , m_F );
136
+ }
137
+
138
+
139
+ template< class StateIn >
140
+ void adjust_size( const StateIn &x )
141
+ {
142
+ resize_impl( x );
143
+ stepper_base_type::adjust_size( x );
144
+ }
145
+
146
+
147
+ private:
148
+
149
+ template< class StateIn >
150
+ bool resize_impl( const StateIn &x )
151
+ {
152
+ bool resized( false );
153
+ resized |= adjust_size_by_resizeability( m_x_tmp , x , typename is_resizeable<state_type>::type() );
154
+ for( size_t i = 0 ; i < StageCount-1 ; ++i )
155
+ {
156
+ resized |= adjust_size_by_resizeability( m_F[i] , x , typename is_resizeable<deriv_type>::type() );
157
+ }
158
+ return resized;
159
+ }
160
+
161
+
162
+ rk_algorithm_type m_rk_algorithm;
163
+ coef_b_type m_b2;
164
+
165
+ resizer_type m_resizer;
166
+
167
+ wrapped_state_type m_x_tmp;
168
+ wrapped_deriv_type m_F[StageCount-1];
169
+
170
+ };
171
+
172
+
173
+ /********* DOXYGEN *********/
174
+
175
+ /**
176
+ * \class explicit_error_generic_rk
177
+ * \brief A generic implementation of explicit Runge-Kutta algorithms with error estimation. This class is as a
178
+ * base class for all explicit Runge-Kutta steppers with error estimation.
179
+ *
180
+ * This class implements the explicit Runge-Kutta algorithms with error estimation in a generic way.
181
+ * The Butcher tableau is passed to the stepper which constructs the stepper scheme with the help of a
182
+ * template-metaprogramming algorithm. ToDo : Add example!
183
+ *
184
+ * This class derives explicit_error_stepper_base which provides the stepper interface.
185
+ *
186
+ * \tparam StageCount The number of stages of the Runge-Kutta algorithm.
187
+ * \tparam Order The order of a stepper if the stepper is used without error estimation.
188
+ * \tparam StepperOrder The order of a step if the stepper is used with error estimation. Usually Order and StepperOrder have
189
+ * the same value.
190
+ * \tparam ErrorOrder The order of the error step if the stepper is used with error estimation.
191
+ * \tparam State The type representing the state of the ODE.
192
+ * \tparam Value The floating point type which is used in the computations.
193
+ * \tparam Time The type representing the independent variable - the time - of the ODE.
194
+ * \tparam Algebra The algebra type.
195
+ * \tparam Operations The operations type.
196
+ * \tparam Resizer The resizer policy type.
197
+ */
198
+
199
+
200
+ /**
201
+ * \fn explicit_error_generic_rk::explicit_error_generic_rk( const coef_a_type &a , const coef_b_type &b , const coef_b_type &b2 , const coef_c_type &c , const algebra_type &algebra )
202
+ * \brief Constructs the explicit_error_generik_rk class with the given parameters a, b, b2 and c. See examples section for details on the coefficients.
203
+ *
204
+ * \param a Triangular matrix of parameters b in the Butcher tableau.
205
+ * \param b Last row of the butcher tableau.
206
+ * \param b2 Parameters for lower-order evaluation to estimate the error.
207
+ * \param c Parameters to calculate the time points in the Butcher tableau.
208
+ * \param algebra A copy of algebra is made and stored inside explicit_stepper_base.
209
+ */
210
+
211
+
212
+ /**
213
+ * \fn explicit_error_generic_rk::do_step_impl( System system , const StateIn &in , const DerivIn &dxdt , time_type t , StateOut &out , time_type dt , Err &xerr )
214
+ * \brief This method performs one step. The derivative `dxdt` of `in` at the time `t` is passed to the method.
215
+ * The result is updated out-of-place, hence the input is in `in` and the output in `out`. Futhermore, an
216
+ * estimation of the error is stored in `xerr`. `do_step_impl` is used by explicit_error_stepper_base.
217
+ *
218
+ * \param system The system function to solve, hence the r.h.s. of the ODE. It must fulfill the
219
+ * Simple System concept.
220
+ * \param in The state of the ODE which should be solved. in is not modified in this method
221
+ * \param dxdt The derivative of x at t.
222
+ * \param t The value of the time, at which the step should be performed.
223
+ * \param out The result of the step is written in out.
224
+ * \param dt The step size.
225
+ * \param xerr The result of the error estimation is written in xerr.
226
+ */
227
+
228
+ /**
229
+ * \fn explicit_error_generic_rk::do_step_impl( System system , const StateIn &in , const DerivIn &dxdt , time_type t , StateOut &out , time_type dt )
230
+ * \brief This method performs one step. The derivative `dxdt` of `in` at the time `t` is passed to the method.
231
+ * The result is updated out-of-place, hence the input is in `in` and the output in `out`.
232
+ * Access to this step functionality is provided by explicit_stepper_base and
233
+ * `do_step_impl` should not be called directly.
234
+ *
235
+ * \param system The system function to solve, hence the r.h.s. of the ODE. It must fulfill the
236
+ * Simple System concept.
237
+ * \param in The state of the ODE which should be solved. in is not modified in this method
238
+ * \param dxdt The derivative of x at t.
239
+ * \param t The value of the time, at which the step should be performed.
240
+ * \param out The result of the step is written in out.
241
+ * \param dt The step size.
242
+ */
243
+
244
+ /**
245
+ * \fn explicit_error_generic_rk::adjust_size( const StateIn &x )
246
+ * \brief Adjust the size of all temporaries in the stepper manually.
247
+ * \param x A state from which the size of the temporaries to be resized is deduced.
248
+ */
249
+
250
+ }
251
+ }
252
+ }
253
+
254
+
255
+ #endif // BOOST_NUMERIC_ODEINT_STEPPER_EXPLICIT_ERROR_GENERIC_RK_HPP_INCLUDED
@@ -0,0 +1,246 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/stepper/explicit_generic_rk.hpp
4
+
5
+ [begin_description]
6
+ Implementation of the generic Runge-Kutta steppers. This is the base class for many Runge-Kutta steppers.
7
+ [end_description]
8
+
9
+ Copyright 2011-2013 Mario Mulansky
10
+ Copyright 2011-2013 Karsten Ahnert
11
+ Copyright 2012 Christoph Koke
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_STEPPER_EXPLICIT_GENERIC_RK_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_STEPPER_EXPLICIT_GENERIC_RK_HPP_INCLUDED
21
+
22
+
23
+ #include <array>
24
+
25
+
26
+ #include <boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp>
27
+ #include <boost/numeric/odeint/algebra/range_algebra.hpp>
28
+ #include <boost/numeric/odeint/algebra/default_operations.hpp>
29
+ #include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
30
+ #include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
31
+ #include <boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp>
32
+
33
+ #include <boost/numeric/odeint/util/state_wrapper.hpp>
34
+ #include <boost/numeric/odeint/util/is_resizeable.hpp>
35
+ #include <boost/numeric/odeint/util/resizer.hpp>
36
+
37
+ namespace boost {
38
+ namespace numeric {
39
+ namespace odeint {
40
+
41
+ //forward declarations
42
+
43
+ #ifndef DOXYGEN_SKIP
44
+ template<
45
+ size_t StageCount,
46
+ size_t Order,
47
+ class State ,
48
+ class Value = double ,
49
+ class Deriv = State ,
50
+ class Time = Value ,
51
+ class Algebra = typename algebra_dispatcher< State >::algebra_type ,
52
+ class Operations = typename operations_dispatcher< State >::operations_type ,
53
+ class Resizer = initially_resizer
54
+ >
55
+ class explicit_generic_rk;
56
+
57
+
58
+ struct stage_vector;
59
+
60
+ template< class T , class Constant >
61
+ struct array_wrapper
62
+ {
63
+ typedef const typename std::array< T , Constant::value > type;
64
+ };
65
+
66
+ template< class T , size_t i >
67
+ struct stage
68
+ {
69
+ T c;
70
+ std::array< T , i > a;
71
+ };
72
+
73
+
74
+ template< class T , class Constant >
75
+ struct stage_wrapper
76
+ {
77
+ typedef stage< T , Constant::value > type;
78
+ };
79
+ #endif
80
+
81
+
82
+ template<
83
+ size_t StageCount,
84
+ size_t Order,
85
+ class State ,
86
+ class Value ,
87
+ class Deriv ,
88
+ class Time ,
89
+ class Algebra ,
90
+ class Operations ,
91
+ class Resizer
92
+ >
93
+ #ifndef DOXYGEN_SKIP
94
+ class explicit_generic_rk : public explicit_stepper_base<
95
+ explicit_generic_rk< StageCount , Order , State , Value , Deriv , Time , Algebra , Operations , Resizer > ,
96
+ Order , State , Value , Deriv , Time , Algebra , Operations , Resizer >
97
+ #else
98
+ class explicit_generic_rk : public explicit_stepper_base
99
+ #endif
100
+ {
101
+
102
+ public:
103
+
104
+ #ifndef DOXYGEN_SKIP
105
+ typedef explicit_stepper_base<
106
+ explicit_generic_rk< StageCount , Order , State , Value , Deriv ,Time , Algebra , Operations , Resizer > ,
107
+ Order , State , Value , Deriv , Time , Algebra ,
108
+ Operations , Resizer > stepper_base_type;
109
+ #else
110
+ typedef explicit_stepper_base< ... > stepper_base_type;
111
+ #endif
112
+
113
+ typedef typename stepper_base_type::state_type state_type;
114
+ typedef typename stepper_base_type::wrapped_state_type wrapped_state_type;
115
+ typedef typename stepper_base_type::value_type value_type;
116
+ typedef typename stepper_base_type::deriv_type deriv_type;
117
+ typedef typename stepper_base_type::wrapped_deriv_type wrapped_deriv_type;
118
+ typedef typename stepper_base_type::time_type time_type;
119
+ typedef typename stepper_base_type::algebra_type algebra_type;
120
+ typedef typename stepper_base_type::operations_type operations_type;
121
+ typedef typename stepper_base_type::resizer_type resizer_type;
122
+
123
+ #ifndef DOXYGEN_SKIP
124
+ typedef explicit_generic_rk< StageCount , Order , State , Value , Deriv ,Time , Algebra , Operations , Resizer > stepper_type;
125
+ #endif
126
+
127
+ typedef detail::generic_rk_algorithm< StageCount , Value , Algebra , Operations > rk_algorithm_type;
128
+
129
+ typedef typename rk_algorithm_type::coef_a_type coef_a_type;
130
+ typedef typename rk_algorithm_type::coef_b_type coef_b_type;
131
+ typedef typename rk_algorithm_type::coef_c_type coef_c_type;
132
+
133
+ #ifndef DOXYGEN_SKIP
134
+ static const size_t stage_count = StageCount;
135
+ #endif
136
+
137
+ public:
138
+
139
+ explicit_generic_rk( const coef_a_type &a , const coef_b_type &b , const coef_c_type &c ,
140
+ const algebra_type &algebra = algebra_type() )
141
+ : stepper_base_type( algebra ) , m_rk_algorithm( a , b , c )
142
+ { }
143
+
144
+
145
+ template< class System , class StateIn , class DerivIn , class StateOut >
146
+ void do_step_impl( System system , const StateIn &in , const DerivIn &dxdt ,
147
+ time_type t , StateOut &out , time_type dt )
148
+ {
149
+ m_resizer.adjust_size(in, [this](auto&& arg) { return this->resize_impl<StateIn>(std::forward<decltype(arg)>(arg)); });
150
+
151
+ // actual calculation done in generic_rk.hpp
152
+ m_rk_algorithm.do_step( stepper_base_type::m_algebra , system , in , dxdt , t , out , dt , m_x_tmp.m_v , m_F );
153
+ }
154
+
155
+ template< class StateIn >
156
+ void adjust_size( const StateIn &x )
157
+ {
158
+ resize_impl( x );
159
+ stepper_base_type::adjust_size( x );
160
+ }
161
+
162
+ private:
163
+
164
+ template< class StateIn >
165
+ bool resize_impl( const StateIn &x )
166
+ {
167
+ bool resized( false );
168
+ resized |= adjust_size_by_resizeability( m_x_tmp , x , typename is_resizeable<state_type>::type() );
169
+ for( size_t i = 0 ; i < StageCount-1 ; ++i )
170
+ {
171
+ resized |= adjust_size_by_resizeability( m_F[i] , x , typename is_resizeable<deriv_type>::type() );
172
+ }
173
+ return resized;
174
+ }
175
+
176
+
177
+ rk_algorithm_type m_rk_algorithm;
178
+
179
+ resizer_type m_resizer;
180
+
181
+ wrapped_state_type m_x_tmp;
182
+ wrapped_deriv_type m_F[StageCount-1];
183
+
184
+ };
185
+
186
+
187
+
188
+ /*********** DOXYGEN *************/
189
+
190
+ /**
191
+ * \class explicit_generic_rk
192
+ * \brief A generic implementation of explicit Runge-Kutta algorithms. This class is as a base class
193
+ * for all explicit Runge-Kutta steppers.
194
+ *
195
+ * This class implements the explicit Runge-Kutta algorithms without error estimation in a generic way.
196
+ * The Butcher tableau is passed to the stepper which constructs the stepper scheme with the help of a
197
+ * template-metaprogramming algorithm. ToDo : Add example!
198
+ *
199
+ * This class derives explicit_stepper_base which provides the stepper interface.
200
+ *
201
+ * \tparam StageCount The number of stages of the Runge-Kutta algorithm.
202
+ * \tparam Order The order of the stepper.
203
+ * \tparam State The type representing the state of the ODE.
204
+ * \tparam Value The floating point type which is used in the computations.
205
+ * \tparam Time The type representing the independent variable - the time - of the ODE.
206
+ * \tparam Algebra The algebra type.
207
+ * \tparam Operations The operations type.
208
+ * \tparam Resizer The resizer policy type.
209
+ */
210
+
211
+ /**
212
+ * \fn explicit_generic_rk::explicit_generic_rk( const coef_a_type &a , const coef_b_type &b , const coef_c_type &c , const algebra_type &algebra )
213
+ * \brief Constructs the explicit_generic_rk class. See examples section for details on the coefficients.
214
+ * \param a Triangular matrix of parameters b in the Butcher tableau.
215
+ * \param b Last row of the butcher tableau.
216
+ * \param c Parameters to calculate the time points in the Butcher tableau.
217
+ * \param algebra A copy of algebra is made and stored inside explicit_stepper_base.
218
+ */
219
+
220
+ /**
221
+ * \fn explicit_generic_rk::do_step_impl( System system , const StateIn &in , const DerivIn &dxdt , time_type t , StateOut &out , time_type dt )
222
+ * \brief This method performs one step. The derivative `dxdt` of `in` at the time `t` is passed to the method.
223
+ * The result is updated out of place, hence the input is in `in` and the output in `out`.
224
+ * Access to this step functionality is provided by explicit_stepper_base and
225
+ * `do_step_impl` should not be called directly.
226
+ *
227
+ * \param system The system function to solve, hence the r.h.s. of the ODE. It must fulfill the
228
+ * Simple System concept.
229
+ * \param in The state of the ODE which should be solved. in is not modified in this method
230
+ * \param dxdt The derivative of x at t.
231
+ * \param t The value of the time, at which the step should be performed.
232
+ * \param out The result of the step is written in out.
233
+ * \param dt The step size.
234
+ */
235
+
236
+
237
+ /**
238
+ * \fn explicit_generic_rk::adjust_size( const StateIn &x )
239
+ * \brief Adjust the size of all temporaries in the stepper manually.
240
+ * \param x A state from which the size of the temporaries to be resized is deduced.
241
+ */
242
+
243
+ }
244
+ }
245
+ }
246
+ #endif // BOOST_NUMERIC_ODEINT_STEPPER_EXPLICIT_GENERIC_RK_HPP_INCLUDED