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,222 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/integrate/check_adapter.hpp
4
+
5
+ [begin_description]
6
+ Adapters to add checking facility to stepper and observer
7
+ [end_description]
8
+
9
+ Copyright 2015 Mario Mulansky
10
+
11
+ Distributed under the Boost Software License, Version 1.0.
12
+ (See accompanying file LICENSE_1_0.txt or
13
+ copy at http://www.boost.org/LICENSE_1_0.txt)
14
+ */
15
+
16
+ #ifndef BOOST_NUMERIC_ODEINT_INTEGRATE_CHECK_ADAPTER_HPP_INCLUDED
17
+ #define BOOST_NUMERIC_ODEINT_INTEGRATE_CHECK_ADAPTER_HPP_INCLUDED
18
+
19
+ #include <boost/numeric/odeint/stepper/stepper_categories.hpp>
20
+ #include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
21
+
22
+
23
+ namespace boost {
24
+ namespace numeric {
25
+ namespace odeint {
26
+
27
+ template<class Stepper, class Checker,
28
+ class StepperCategory = typename base_tag<typename Stepper::stepper_category>::type>
29
+ class checked_stepper;
30
+
31
+
32
+ /**
33
+ * \brief Adapter to combine basic stepper and checker.
34
+ */
35
+ template<class Stepper, class Checker>
36
+ class checked_stepper<Stepper, Checker, stepper_tag>
37
+ {
38
+
39
+ public:
40
+ typedef Stepper stepper_type;
41
+ typedef Checker checker_type;
42
+ // forward stepper typedefs
43
+ typedef typename stepper_type::state_type state_type;
44
+ typedef typename stepper_type::value_type value_type;
45
+ typedef typename stepper_type::deriv_type deriv_type;
46
+ typedef typename stepper_type::time_type time_type;
47
+
48
+ private:
49
+ stepper_type &m_stepper;
50
+ checker_type &m_checker;
51
+
52
+ public:
53
+ /**
54
+ * \brief Construct the checked_stepper.
55
+ */
56
+ checked_stepper(stepper_type &stepper, checker_type &checker)
57
+ : m_stepper(stepper), m_checker(checker) { }
58
+
59
+ /**
60
+ * \brief forward of the do_step method
61
+ */
62
+ template<class System, class StateInOut>
63
+ void do_step(System system, StateInOut &state, const time_type t, const time_type dt)
64
+ {
65
+ // do the step
66
+ m_stepper.do_step(system, state, t, dt);
67
+ // call the checker
68
+ m_checker();
69
+ }
70
+ };
71
+
72
+
73
+ /**
74
+ * \brief Adapter to combine controlled stepper and checker.
75
+ */
76
+ template<class ControlledStepper, class Checker>
77
+ class checked_stepper<ControlledStepper, Checker, controlled_stepper_tag>
78
+ {
79
+
80
+ public:
81
+ typedef ControlledStepper stepper_type;
82
+ typedef Checker checker_type;
83
+ // forward stepper typedefs
84
+ typedef typename stepper_type::state_type state_type;
85
+ typedef typename stepper_type::value_type value_type;
86
+ typedef typename stepper_type::deriv_type deriv_type;
87
+ typedef typename stepper_type::time_type time_type;
88
+
89
+ private:
90
+ stepper_type &m_stepper;
91
+ checker_type &m_checker;
92
+
93
+ public:
94
+ /**
95
+ * \brief Construct the checked_stepper.
96
+ */
97
+ checked_stepper(stepper_type &stepper, checker_type &checker)
98
+ : m_stepper(stepper), m_checker(checker) { }
99
+
100
+ /**
101
+ * \brief forward of the do_step method
102
+ */
103
+ template< class System , class StateInOut >
104
+ controlled_step_result try_step( System system , StateInOut &state , time_type &t , time_type &dt )
105
+ {
106
+ // do the step
107
+ if( m_stepper.try_step(system, state, t, dt) == success )
108
+ {
109
+ // call the checker if step was successful
110
+ m_checker();
111
+ return success;
112
+ } else
113
+ {
114
+ // step failed -> return fail
115
+ return fail;
116
+ }
117
+ }
118
+ };
119
+
120
+
121
+ /**
122
+ * \brief Adapter to combine dense out stepper and checker.
123
+ */
124
+ template<class DenseOutStepper, class Checker>
125
+ class checked_stepper<DenseOutStepper, Checker, dense_output_stepper_tag>
126
+ {
127
+
128
+ public:
129
+ typedef DenseOutStepper stepper_type;
130
+ typedef Checker checker_type;
131
+ // forward stepper typedefs
132
+ typedef typename stepper_type::state_type state_type;
133
+ typedef typename stepper_type::value_type value_type;
134
+ typedef typename stepper_type::deriv_type deriv_type;
135
+ typedef typename stepper_type::time_type time_type;
136
+
137
+ private:
138
+ stepper_type &m_stepper;
139
+ checker_type &m_checker;
140
+
141
+ public:
142
+ /**
143
+ * \brief Construct the checked_stepper.
144
+ */
145
+ checked_stepper(stepper_type &stepper, checker_type &checker)
146
+ : m_stepper(stepper), m_checker(checker) { }
147
+
148
+
149
+ template< class System >
150
+ std::pair< time_type , time_type > do_step( System system )
151
+ {
152
+ m_checker();
153
+ return m_stepper.do_step(system);
154
+ }
155
+
156
+ /* provide the remaining dense out stepper interface */
157
+ template< class StateType >
158
+ void initialize( const StateType &x0 , time_type t0 , time_type dt0 )
159
+ { m_stepper.initialize(x0, t0, dt0); }
160
+
161
+
162
+ template< class StateOut >
163
+ void calc_state( time_type t , StateOut &x ) const
164
+ { m_stepper.calc_state(t, x); }
165
+
166
+ template< class StateOut >
167
+ void calc_state( time_type t , const StateOut &x ) const
168
+ { m_stepper.calc_state(t, x); }
169
+
170
+ const state_type& current_state( void ) const
171
+ { return m_stepper.current_state(); }
172
+
173
+ time_type current_time( void ) const
174
+ { return m_stepper.current_time(); }
175
+
176
+ const state_type& previous_state( void ) const
177
+ { return m_stepper.previous_state(); }
178
+
179
+ time_type previous_time( void ) const
180
+ { return m_stepper.previous_time(); }
181
+
182
+ time_type current_time_step( void ) const
183
+ { return m_stepper.current_time_step(); }
184
+
185
+ };
186
+
187
+
188
+ /**
189
+ * \brief Adapter to combine observer and checker.
190
+ */
191
+ template<class Observer, class Checker>
192
+ class checked_observer
193
+ {
194
+ public:
195
+ typedef Observer observer_type;
196
+ typedef Checker checker_type;
197
+
198
+ private:
199
+ observer_type &m_observer;
200
+ checker_type &m_checker;
201
+
202
+ public:
203
+ checked_observer(observer_type &observer, checker_type &checker)
204
+ : m_observer(observer), m_checker(checker)
205
+ {}
206
+
207
+ template< class State , class Time >
208
+ void operator()(const State& state, Time t) const
209
+ {
210
+ // call the observer
211
+ m_observer(state, t);
212
+ // reset the checker
213
+ m_checker.reset();
214
+ }
215
+ };
216
+
217
+
218
+ } // namespace odeint
219
+ } // namespace numeric
220
+ } // namespace boost
221
+
222
+ #endif
@@ -0,0 +1,70 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/integrate/detail/functors.hpp
4
+
5
+ [begin_description]
6
+ some functors for the iterator based integrate routines
7
+ [end_description]
8
+
9
+ Copyright 2009-2013 Karsten Ahnert
10
+ Copyright 2009-2013 Mario Mulansky
11
+
12
+ Distributed under the Boost Software License, Version 1.0.
13
+ (See accompanying file LICENSE_1_0.txt or
14
+ copy at http://www.boost.org/LICENSE_1_0.txt)
15
+ */
16
+
17
+
18
+ #ifndef BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_FUNCTORS_HPP_INCLUDED
19
+ #define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_FUNCTORS_HPP_INCLUDED
20
+
21
+ #include <utility>
22
+
23
+ namespace boost {
24
+ namespace numeric {
25
+ namespace odeint {
26
+ namespace detail {
27
+
28
+
29
+ template< class Observer >
30
+ struct obs_caller {
31
+
32
+ size_t &m_n;
33
+ Observer m_obs;
34
+
35
+ obs_caller( size_t &m , Observer &obs ) : m_n(m) , m_obs( obs ) {}
36
+
37
+ template< class State , class Time >
38
+ void operator()( std::pair< const State & , const Time & > x )
39
+ {
40
+ typedef typename odeint::unwrap_reference< Observer >::type observer_type;
41
+ observer_type &obs = m_obs;
42
+ obs( x.first , x.second );
43
+ m_n++;
44
+ }
45
+ };
46
+
47
+ template< class Observer , class Time >
48
+ struct obs_caller_time {
49
+
50
+ Time &m_t;
51
+ Observer m_obs;
52
+
53
+ obs_caller_time( Time &t , Observer &obs ) : m_t(t) , m_obs( obs ) {}
54
+
55
+ template< class State >
56
+ void operator()( std::pair< const State & , const Time & > x )
57
+ {
58
+ typedef typename odeint::unwrap_reference< Observer >::type observer_type;
59
+ observer_type &obs = m_obs;
60
+ obs( x.first , x.second );
61
+ m_t = x.second;
62
+ }
63
+ };
64
+
65
+ } // namespace detail
66
+ } // namespace odeint
67
+ } // namespace numeric
68
+ } // namespace boost
69
+
70
+ #endif // BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_FUNCTORS_HPP_INCLUDED
@@ -0,0 +1,161 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp
4
+
5
+ [begin_description]
6
+ Default Integrate adaptive implementation.
7
+ [end_description]
8
+
9
+ Copyright 2011-2013 Karsten Ahnert
10
+ Copyright 2011-2015 Mario Mulansky
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_INTEGRATE_DETAIL_INTEGRATE_ADAPTIVE_HPP_INCLUDED
20
+ #define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_ADAPTIVE_HPP_INCLUDED
21
+
22
+ #include <stdexcept>
23
+
24
+ #include <boost/throw_exception.hpp>
25
+
26
+ #include <boost/numeric/odeint/stepper/stepper_categories.hpp>
27
+ #include <boost/numeric/odeint/stepper/controlled_step_result.hpp>
28
+ #include <boost/numeric/odeint/integrate/max_step_checker.hpp>
29
+ #include <boost/numeric/odeint/integrate/detail/integrate_const.hpp>
30
+ #include <boost/numeric/odeint/util/bind.hpp>
31
+ #include <boost/numeric/odeint/util/unwrap_reference.hpp>
32
+ #include <boost/numeric/odeint/util/copy.hpp>
33
+
34
+ #include <boost/numeric/odeint/util/detail/less_with_sign.hpp>
35
+
36
+
37
+ #include <iostream>
38
+
39
+ namespace boost {
40
+ namespace numeric {
41
+ namespace odeint {
42
+ namespace detail {
43
+
44
+ // forward declaration
45
+ template< class Stepper , class System , class State , class Time , class Observer >
46
+ size_t integrate_const(
47
+ Stepper stepper , System system , State &start_state ,
48
+ Time start_time , Time end_time , Time dt ,
49
+ Observer observer , stepper_tag );
50
+
51
+ /*
52
+ * integrate_adaptive for simple stepper is basically an integrate_const + some last step
53
+ */
54
+ template< class Stepper , class System , class State , class Time , class Observer >
55
+ size_t integrate_adaptive(
56
+ Stepper stepper , System system , State &start_state ,
57
+ Time start_time , Time end_time , Time dt ,
58
+ Observer observer , stepper_tag
59
+ )
60
+ {
61
+ size_t steps = detail::integrate_const( stepper , system , start_state , start_time ,
62
+ end_time , dt , observer , stepper_tag() );
63
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
64
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
65
+
66
+ Time end = start_time + dt*steps;
67
+ if( less_with_sign( end , end_time , dt ) )
68
+ { //make a last step to end exactly at end_time
69
+ st.do_step( system , start_state , end , end_time - end );
70
+ steps++;
71
+ obs( start_state , end_time );
72
+ }
73
+ return steps;
74
+ }
75
+
76
+
77
+ /*
78
+ * integrate adaptive for controlled stepper
79
+ */
80
+ template< class Stepper , class System , class State , class Time , class Observer >
81
+ size_t integrate_adaptive(
82
+ Stepper stepper , System system , State &start_state ,
83
+ Time &start_time , Time end_time , Time &dt ,
84
+ Observer observer , controlled_stepper_tag
85
+ )
86
+ {
87
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
88
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
89
+
90
+ failed_step_checker fail_checker; // to throw a runtime_error if step size adjustment fails
91
+ size_t count = 0;
92
+ while( less_with_sign( start_time , end_time , dt ) )
93
+ {
94
+ obs( start_state , start_time );
95
+ if( less_with_sign( end_time , static_cast<Time>(start_time + dt) , dt ) )
96
+ {
97
+ dt = end_time - start_time;
98
+ }
99
+
100
+ controlled_step_result res;
101
+ do
102
+ {
103
+ res = st.try_step( system , start_state , start_time , dt );
104
+ fail_checker(); // check number of failed steps
105
+ }
106
+ while( res == fail );
107
+ fail_checker.reset(); // if we reach here, the step was successful -> reset fail checker
108
+
109
+ ++count;
110
+ }
111
+ obs( start_state , start_time );
112
+ return count;
113
+ }
114
+
115
+
116
+ /*
117
+ * integrate adaptive for dense output steppers
118
+ *
119
+ * step size control is used if the stepper supports it
120
+ */
121
+ template< class Stepper , class System , class State , class Time , class Observer >
122
+ size_t integrate_adaptive(
123
+ Stepper stepper , System system , State &start_state ,
124
+ Time start_time , Time end_time , Time dt ,
125
+ Observer observer , dense_output_stepper_tag )
126
+ {
127
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
128
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
129
+
130
+ size_t count = 0;
131
+ st.initialize( start_state , start_time , dt );
132
+
133
+ while( less_with_sign( st.current_time() , end_time , st.current_time_step() ) )
134
+ {
135
+ while( less_eq_with_sign( static_cast<Time>(st.current_time() + st.current_time_step()) ,
136
+ end_time ,
137
+ st.current_time_step() ) )
138
+ { //make sure we don't go beyond the end_time
139
+ obs( st.current_state() , st.current_time() );
140
+ st.do_step( system );
141
+ ++count;
142
+ }
143
+ // calculate time step to arrive exactly at end time
144
+ st.initialize( st.current_state() , st.current_time() , static_cast<Time>(end_time - st.current_time()) );
145
+ }
146
+ obs( st.current_state() , st.current_time() );
147
+ // overwrite start_state with the final point
148
+ boost::numeric::odeint::copy( st.current_state() , start_state );
149
+ return count;
150
+ }
151
+
152
+
153
+
154
+
155
+ } // namespace detail
156
+ } // namespace odeint
157
+ } // namespace numeric
158
+ } // namespace boost
159
+
160
+
161
+ #endif // BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_ADAPTIVE_HPP_INCLUDED
@@ -0,0 +1,167 @@
1
+ /*
2
+ [auto_generated]
3
+ boost/numeric/odeint/integrate/detail/integrate_const.hpp
4
+
5
+ [begin_description]
6
+ integrate const implementation
7
+ [end_description]
8
+
9
+ Copyright 2012-2015 Mario Mulansky
10
+ Copyright 2012 Christoph Koke
11
+ Copyright 2012 Karsten Ahnert
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
+ #ifndef BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_CONST_HPP_INCLUDED
19
+ #define BOOST_NUMERIC_ODEINT_INTEGRATE_DETAIL_INTEGRATE_CONST_HPP_INCLUDED
20
+
21
+ #include <boost/numeric/odeint/util/unwrap_reference.hpp>
22
+ #include <boost/numeric/odeint/stepper/stepper_categories.hpp>
23
+ #include <boost/numeric/odeint/util/unit_helper.hpp>
24
+ #include <boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp>
25
+
26
+ #include <boost/numeric/odeint/util/detail/less_with_sign.hpp>
27
+
28
+ namespace boost {
29
+ namespace numeric {
30
+ namespace odeint {
31
+ namespace detail {
32
+
33
+ // forward declaration
34
+ template< class Stepper , class System , class State , class Time , class Observer >
35
+ size_t integrate_adaptive(
36
+ Stepper stepper , System system , State &start_state ,
37
+ Time &start_time , Time end_time , Time &dt ,
38
+ Observer observer , controlled_stepper_tag
39
+ );
40
+
41
+
42
+ template< class Stepper , class System , class State , class Time , class Observer >
43
+ size_t integrate_const(
44
+ Stepper stepper , System system , State &start_state ,
45
+ Time start_time , Time end_time , Time dt ,
46
+ Observer observer , stepper_tag
47
+ )
48
+ {
49
+
50
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
51
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
52
+
53
+ Time time = start_time;
54
+ int step = 0;
55
+ // cast time+dt explicitely in case of expression templates (e.g. multiprecision)
56
+ while( less_eq_with_sign( static_cast<Time>(time+dt) , end_time , dt ) )
57
+ {
58
+ obs( start_state , time );
59
+ st.do_step( system , start_state , time , dt );
60
+ // direct computation of the time avoids error propagation happening when using time += dt
61
+ // we need clumsy type analysis to get boost units working here
62
+ ++step;
63
+ time = start_time + static_cast< typename unit_value_type<Time>::type >(step) * dt;
64
+ }
65
+ obs( start_state , time );
66
+
67
+ return step;
68
+ }
69
+
70
+
71
+
72
+ template< class Stepper , class System , class State , class Time , class Observer >
73
+ size_t integrate_const(
74
+ Stepper stepper , System system , State &start_state ,
75
+ Time start_time , Time end_time , Time dt ,
76
+ Observer observer , controlled_stepper_tag
77
+ )
78
+ {
79
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
80
+
81
+ Time time = start_time;
82
+ const Time time_step = dt;
83
+ int real_steps = 0;
84
+ int step = 0;
85
+
86
+ while( less_eq_with_sign( static_cast<Time>(time+time_step) , end_time , dt ) )
87
+ {
88
+ obs( start_state , time );
89
+ // integrate_adaptive_checked uses the given checker to throw if an overflow occurs
90
+ real_steps += detail::integrate_adaptive(stepper, system, start_state, time,
91
+ static_cast<Time>(time + time_step), dt,
92
+ null_observer(), controlled_stepper_tag());
93
+ // direct computation of the time avoids error propagation happening when using time += dt
94
+ // we need clumsy type analysis to get boost units working here
95
+ step++;
96
+ time = start_time + static_cast< typename unit_value_type<Time>::type >(step) * time_step;
97
+ }
98
+ obs( start_state , time );
99
+
100
+ return real_steps;
101
+ }
102
+
103
+
104
+ template< class Stepper , class System , class State , class Time , class Observer >
105
+ size_t integrate_const(
106
+ Stepper stepper , System system , State &start_state ,
107
+ Time start_time , Time end_time , Time dt ,
108
+ Observer observer , dense_output_stepper_tag
109
+ )
110
+ {
111
+ typename odeint::unwrap_reference< Observer >::type &obs = observer;
112
+ typename odeint::unwrap_reference< Stepper >::type &st = stepper;
113
+
114
+ Time time = start_time;
115
+
116
+ st.initialize( start_state , time , dt );
117
+ obs( start_state , time );
118
+ time += dt;
119
+
120
+ int obs_step( 1 );
121
+ int real_step( 0 );
122
+
123
+ while( less_eq_with_sign( static_cast<Time>(time+dt) , end_time , dt ) )
124
+ {
125
+ while( less_eq_with_sign( time , st.current_time() , dt ) )
126
+ {
127
+ st.calc_state( time , start_state );
128
+ obs( start_state , time );
129
+ ++obs_step;
130
+ // direct computation of the time avoids error propagation happening when using time += dt
131
+ // we need clumsy type analysis to get boost units working here
132
+ time = start_time + static_cast< typename unit_value_type<Time>::type >(obs_step) * dt;
133
+ }
134
+ // we have not reached the end, do another real step
135
+ if( less_with_sign( static_cast<Time>(st.current_time()+st.current_time_step()) ,
136
+ end_time ,
137
+ st.current_time_step() ) )
138
+ {
139
+ while( less_eq_with_sign( st.current_time() , time , dt ) )
140
+ {
141
+ st.do_step( system );
142
+ ++real_step;
143
+ }
144
+ }
145
+ else if( less_with_sign( st.current_time() , end_time , st.current_time_step() ) )
146
+ { // do the last step ending exactly on the end point
147
+ st.initialize( st.current_state() , st.current_time() , end_time - st.current_time() );
148
+ st.do_step( system );
149
+ ++real_step;
150
+ }
151
+
152
+ }
153
+ // last observation, if we are still in observation interval
154
+ // might happen due to finite precision problems when computing the the time
155
+ if( less_eq_with_sign( time , end_time , dt ) )
156
+ {
157
+ st.calc_state( time , start_state );
158
+ obs( start_state , time );
159
+ }
160
+
161
+ return real_step;
162
+ }
163
+
164
+
165
+ } } } }
166
+
167
+ #endif