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.
- package/README.md +29 -2
- package/boost/cast.hpp +20 -0
- package/boost/numeric/conversion/bounds.hpp +24 -0
- package/boost/numeric/conversion/cast.hpp +61 -0
- package/boost/numeric/conversion/conversion_traits.hpp +32 -0
- package/boost/numeric/conversion/converter.hpp +68 -0
- package/boost/numeric/conversion/converter_policies.hpp +194 -0
- package/boost/numeric/conversion/detail/bounds.hpp +58 -0
- package/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
- package/boost/numeric/conversion/detail/converter.hpp +593 -0
- package/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
- package/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
- package/boost/numeric/conversion/detail/meta.hpp +120 -0
- package/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
- package/boost/numeric/conversion/detail/old_numeric_cast.hpp +308 -0
- package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
- package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
- package/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
- package/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
- package/boost/numeric/conversion/int_float_mixture.hpp +30 -0
- package/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
- package/boost/numeric/conversion/is_subranged.hpp +27 -0
- package/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
- package/boost/numeric/conversion/sign_mixture.hpp +30 -0
- package/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
- package/boost/numeric/conversion/udt_builtin_mixture.hpp +28 -0
- package/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
- package/boost/numeric/interval/arith.hpp +305 -0
- package/boost/numeric/interval/arith2.hpp +304 -0
- package/boost/numeric/interval/arith3.hpp +69 -0
- package/boost/numeric/interval/checking.hpp +130 -0
- package/boost/numeric/interval/compare/certain.hpp +113 -0
- package/boost/numeric/interval/compare/explicit.hpp +248 -0
- package/boost/numeric/interval/compare/lexicographic.hpp +122 -0
- package/boost/numeric/interval/compare/possible.hpp +113 -0
- package/boost/numeric/interval/compare/set.hpp +101 -0
- package/boost/numeric/interval/compare/tribool.hpp +138 -0
- package/boost/numeric/interval/compare.hpp +19 -0
- package/boost/numeric/interval/constants.hpp +85 -0
- package/boost/numeric/interval/detail/alpha_rounding_control.hpp +113 -0
- package/boost/numeric/interval/detail/bcc_rounding_control.hpp +57 -0
- package/boost/numeric/interval/detail/bugs.hpp +48 -0
- package/boost/numeric/interval/detail/c99_rounding_control.hpp +50 -0
- package/boost/numeric/interval/detail/c99sub_rounding_control.hpp +43 -0
- package/boost/numeric/interval/detail/division.hpp +194 -0
- package/boost/numeric/interval/detail/ia64_rounding_control.hpp +83 -0
- package/boost/numeric/interval/detail/interval_prototype.hpp +41 -0
- package/boost/numeric/interval/detail/msvc_rounding_control.hpp +113 -0
- package/boost/numeric/interval/detail/ppc_rounding_control.hpp +99 -0
- package/boost/numeric/interval/detail/sparc_rounding_control.hpp +112 -0
- package/boost/numeric/interval/detail/test_input.hpp +76 -0
- package/boost/numeric/interval/detail/x86_rounding_control.hpp +108 -0
- package/boost/numeric/interval/detail/x86gcc_rounding_control.hpp +51 -0
- package/boost/numeric/interval/ext/integer.hpp +70 -0
- package/boost/numeric/interval/ext/x86_fast_rounding_control.hpp +70 -0
- package/boost/numeric/interval/hw_rounding.hpp +73 -0
- package/boost/numeric/interval/interval.hpp +450 -0
- package/boost/numeric/interval/io.hpp +41 -0
- package/boost/numeric/interval/limits.hpp +49 -0
- package/boost/numeric/interval/policies.hpp +75 -0
- package/boost/numeric/interval/rounded_arith.hpp +120 -0
- package/boost/numeric/interval/rounded_transc.hpp +140 -0
- package/boost/numeric/interval/rounding.hpp +101 -0
- package/boost/numeric/interval/transc.hpp +232 -0
- package/boost/numeric/interval/utility.hpp +335 -0
- package/boost/numeric/interval/utility_fwd.hpp +172 -0
- package/boost/numeric/interval.hpp +32 -0
- package/boost/numeric/odeint/algebra/algebra_dispatcher.hpp +86 -0
- package/boost/numeric/odeint/algebra/array_algebra.hpp +293 -0
- package/boost/numeric/odeint/algebra/default_operations.hpp +599 -0
- package/boost/numeric/odeint/algebra/detail/extract_value_type.hpp +51 -0
- package/boost/numeric/odeint/algebra/detail/for_each.hpp +165 -0
- package/boost/numeric/odeint/algebra/detail/macros.hpp +35 -0
- package/boost/numeric/odeint/algebra/detail/norm_inf.hpp +46 -0
- package/boost/numeric/odeint/algebra/fusion_algebra.hpp +216 -0
- package/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp +48 -0
- package/boost/numeric/odeint/algebra/multi_array_algebra.hpp +146 -0
- package/boost/numeric/odeint/algebra/norm_result_type.hpp +33 -0
- package/boost/numeric/odeint/algebra/operations_dispatcher.hpp +41 -0
- package/boost/numeric/odeint/algebra/range_algebra.hpp +142 -0
- package/boost/numeric/odeint/algebra/vector_space_algebra.hpp +175 -0
- package/boost/numeric/odeint/config.hpp +53 -0
- package/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp +55 -0
- package/boost/numeric/odeint/external/blaze/blaze_resize.hpp +64 -0
- package/boost/numeric/odeint/external/compute/compute.hpp +27 -0
- package/boost/numeric/odeint/external/compute/compute_algebra.hpp +65 -0
- package/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp +41 -0
- package/boost/numeric/odeint/external/compute/compute_operations.hpp +198 -0
- package/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp +44 -0
- package/boost/numeric/odeint/external/compute/compute_resize.hpp +92 -0
- package/boost/numeric/odeint/external/eigen/eigen.hpp +27 -0
- package/boost/numeric/odeint/external/eigen/eigen_algebra.hpp +98 -0
- package/boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp +49 -0
- package/boost/numeric/odeint/external/eigen/eigen_resize.hpp +103 -0
- package/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp +228 -0
- package/boost/numeric/odeint/external/mkl/mkl_operations.hpp +181 -0
- package/boost/numeric/odeint/external/mpi/mpi.hpp +25 -0
- package/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp +62 -0
- package/boost/numeric/odeint/external/mpi/mpi_state.hpp +113 -0
- package/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp +95 -0
- package/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp +161 -0
- package/boost/numeric/odeint/external/mtl4/mtl4.hpp +23 -0
- package/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp +99 -0
- package/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp +134 -0
- package/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp +25 -0
- package/boost/numeric/odeint/external/nt2/nt2_copy.hpp +33 -0
- package/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp +31 -0
- package/boost/numeric/odeint/external/nt2/nt2_resize.hpp +54 -0
- package/boost/numeric/odeint/external/openmp/openmp.hpp +31 -0
- package/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp +281 -0
- package/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp +276 -0
- package/boost/numeric/odeint/external/openmp/openmp_state.hpp +172 -0
- package/boost/numeric/odeint/external/thrust/thrust.hpp +27 -0
- package/boost/numeric/odeint/external/thrust/thrust_algebra.hpp +217 -0
- package/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp +118 -0
- package/boost/numeric/odeint/external/thrust/thrust_operations.hpp +233 -0
- package/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp +118 -0
- package/boost/numeric/odeint/external/thrust/thrust_resize.hpp +197 -0
- package/boost/numeric/odeint/external/vexcl/vexcl.hpp +28 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp +61 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp +51 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp +55 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp +68 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp +96 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp +58 -0
- package/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp +226 -0
- package/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp +68 -0
- package/boost/numeric/odeint/integrate/check_adapter.hpp +222 -0
- package/boost/numeric/odeint/integrate/detail/functors.hpp +70 -0
- package/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp +161 -0
- package/boost/numeric/odeint/integrate/detail/integrate_const.hpp +167 -0
- package/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp +161 -0
- package/boost/numeric/odeint/integrate/detail/integrate_times.hpp +179 -0
- package/boost/numeric/odeint/integrate/integrate.hpp +133 -0
- package/boost/numeric/odeint/integrate/integrate_adaptive.hpp +127 -0
- package/boost/numeric/odeint/integrate/integrate_const.hpp +195 -0
- package/boost/numeric/odeint/integrate/integrate_n_steps.hpp +178 -0
- package/boost/numeric/odeint/integrate/integrate_times.hpp +220 -0
- package/boost/numeric/odeint/integrate/max_step_checker.hpp +114 -0
- package/boost/numeric/odeint/integrate/null_observer.hpp +38 -0
- package/boost/numeric/odeint/integrate/observer_collection.hpp +55 -0
- package/boost/numeric/odeint/iterator/adaptive_iterator.hpp +183 -0
- package/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp +175 -0
- package/boost/numeric/odeint/iterator/const_step_iterator.hpp +180 -0
- package/boost/numeric/odeint/iterator/const_step_time_iterator.hpp +173 -0
- package/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp +199 -0
- package/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp +251 -0
- package/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp +228 -0
- package/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp +239 -0
- package/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp +369 -0
- package/boost/numeric/odeint/iterator/integrate/detail/functors.hpp +70 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp +121 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp +111 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp +107 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp +67 -0
- package/boost/numeric/odeint/iterator/integrate/integrate.hpp +111 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp +127 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_const.hpp +158 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp +123 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_times.hpp +131 -0
- package/boost/numeric/odeint/iterator/integrate/null_observer.hpp +38 -0
- package/boost/numeric/odeint/iterator/integrate/observer_collection.hpp +55 -0
- package/boost/numeric/odeint/iterator/n_step_iterator.hpp +168 -0
- package/boost/numeric/odeint/iterator/n_step_time_iterator.hpp +169 -0
- package/boost/numeric/odeint/iterator/times_iterator.hpp +189 -0
- package/boost/numeric/odeint/iterator/times_time_iterator.hpp +193 -0
- package/boost/numeric/odeint/stepper/adams_bashforth.hpp +418 -0
- package/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp +313 -0
- package/boost/numeric/odeint/stepper/adams_moulton.hpp +201 -0
- package/boost/numeric/odeint/stepper/adaptive_adams_bashforth_moulton.hpp +237 -0
- package/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp +91 -0
- package/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp +588 -0
- package/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp +677 -0
- package/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp +415 -0
- package/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp +431 -0
- package/boost/numeric/odeint/stepper/bulirsch_stoer.hpp +642 -0
- package/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp +838 -0
- package/boost/numeric/odeint/stepper/controlled_adams_bashforth_moulton.hpp +322 -0
- package/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp +1018 -0
- package/boost/numeric/odeint/stepper/controlled_step_result.hpp +42 -0
- package/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp +476 -0
- package/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp +148 -0
- package/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp +168 -0
- package/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp +148 -0
- package/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp +168 -0
- package/boost/numeric/odeint/stepper/detail/adaptive_adams_coefficients.hpp +207 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp +247 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp +263 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp +252 -0
- package/boost/numeric/odeint/stepper/detail/pid_step_adjuster.hpp +199 -0
- package/boost/numeric/odeint/stepper/detail/pid_step_adjuster_coefficients.hpp +180 -0
- package/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp +84 -0
- package/boost/numeric/odeint/stepper/euler.hpp +166 -0
- package/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp +255 -0
- package/boost/numeric/odeint/stepper/explicit_generic_rk.hpp +246 -0
- package/boost/numeric/odeint/stepper/extrapolation_stepper.hpp +288 -0
- package/boost/numeric/odeint/stepper/generation/generation_controlled_adams_bashforth_moulton.hpp +59 -0
- package/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp +61 -0
- package/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp +65 -0
- package/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp +79 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp +47 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp +48 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp +56 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp +46 -0
- package/boost/numeric/odeint/stepper/generation/make_controlled.hpp +103 -0
- package/boost/numeric/odeint/stepper/generation/make_dense_output.hpp +100 -0
- package/boost/numeric/odeint/stepper/generation.hpp +37 -0
- package/boost/numeric/odeint/stepper/implicit_euler.hpp +170 -0
- package/boost/numeric/odeint/stepper/modified_midpoint.hpp +315 -0
- package/boost/numeric/odeint/stepper/rosenbrock4.hpp +346 -0
- package/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp +240 -0
- package/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp +204 -0
- package/boost/numeric/odeint/stepper/runge_kutta4.hpp +181 -0
- package/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp +232 -0
- package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp +231 -0
- package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp +289 -0
- package/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp +403 -0
- package/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp +374 -0
- package/boost/numeric/odeint/stepper/stepper_categories.hpp +66 -0
- package/boost/numeric/odeint/stepper/symplectic_euler.hpp +136 -0
- package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp +160 -0
- package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp +162 -0
- package/boost/numeric/odeint/stepper/velocity_verlet.hpp +375 -0
- package/boost/numeric/odeint/tools/assert.hpp +30 -0
- package/boost/numeric/odeint/tools/is_standalone.hpp +21 -0
- package/boost/numeric/odeint/tools/traits.hpp +39 -0
- package/boost/numeric/odeint/util/bind.hpp +35 -0
- package/boost/numeric/odeint/util/copy.hpp +88 -0
- package/boost/numeric/odeint/util/detail/is_range.hpp +127 -0
- package/boost/numeric/odeint/util/detail/less_with_sign.hpp +78 -0
- package/boost/numeric/odeint/util/is_pair.hpp +42 -0
- package/boost/numeric/odeint/util/is_resizeable.hpp +84 -0
- package/boost/numeric/odeint/util/multi_array_adaption.hpp +131 -0
- package/boost/numeric/odeint/util/n_ary_helper.hpp +96 -0
- package/boost/numeric/odeint/util/odeint_error.hpp +77 -0
- package/boost/numeric/odeint/util/resize.hpp +120 -0
- package/boost/numeric/odeint/util/resizer.hpp +94 -0
- package/boost/numeric/odeint/util/same_instance.hpp +56 -0
- package/boost/numeric/odeint/util/same_size.hpp +117 -0
- package/boost/numeric/odeint/util/split.hpp +64 -0
- package/boost/numeric/odeint/util/split_adaptor.hpp +103 -0
- package/boost/numeric/odeint/util/state_wrapper.hpp +50 -0
- package/boost/numeric/odeint/util/stepper_traits.hpp +63 -0
- package/boost/numeric/odeint/util/ublas_matrix_expression.patch +6 -0
- package/boost/numeric/odeint/util/ublas_wrapper.hpp +297 -0
- package/boost/numeric/odeint/util/unit_helper.hpp +151 -0
- package/boost/numeric/odeint/util/unwrap_reference.hpp +141 -0
- package/boost/numeric/odeint/version.hpp +55 -0
- package/boost/numeric/odeint.hpp +87 -0
- package/boost/numeric/ublas/assignment.hpp +1288 -0
- package/boost/numeric/ublas/banded.hpp +2372 -0
- package/boost/numeric/ublas/blas.hpp +499 -0
- package/boost/numeric/ublas/detail/concepts.hpp +1465 -0
- package/boost/numeric/ublas/detail/config.hpp +304 -0
- package/boost/numeric/ublas/detail/definitions.hpp +212 -0
- package/boost/numeric/ublas/detail/documentation.hpp +33 -0
- package/boost/numeric/ublas/detail/duff.hpp +56 -0
- package/boost/numeric/ublas/detail/iterator.hpp +1448 -0
- package/boost/numeric/ublas/detail/matrix_assign.hpp +1785 -0
- package/boost/numeric/ublas/detail/raw.hpp +878 -0
- package/boost/numeric/ublas/detail/returntype_deduction.hpp +174 -0
- package/boost/numeric/ublas/detail/temporary.hpp +33 -0
- package/boost/numeric/ublas/detail/vector_assign.hpp +609 -0
- package/boost/numeric/ublas/doxydoc.hpp +58 -0
- package/boost/numeric/ublas/exception.hpp +297 -0
- package/boost/numeric/ublas/experimental/sparse_view.hpp +317 -0
- package/boost/numeric/ublas/expression_types.hpp +506 -0
- package/boost/numeric/ublas/functional.hpp +2112 -0
- package/boost/numeric/ublas/fwd.hpp +229 -0
- package/boost/numeric/ublas/hermitian.hpp +2633 -0
- package/boost/numeric/ublas/io.hpp +355 -0
- package/boost/numeric/ublas/lu.hpp +350 -0
- package/boost/numeric/ublas/matrix.hpp +6013 -0
- package/boost/numeric/ublas/matrix_expression.hpp +5693 -0
- package/boost/numeric/ublas/matrix_proxy.hpp +5457 -0
- package/boost/numeric/ublas/matrix_sparse.hpp +5773 -0
- package/boost/numeric/ublas/matrix_vector.hpp +406 -0
- package/boost/numeric/ublas/opencl/elementwise.hpp +508 -0
- package/boost/numeric/ublas/opencl/library.hpp +38 -0
- package/boost/numeric/ublas/opencl/matrix.hpp +123 -0
- package/boost/numeric/ublas/opencl/misc.hpp +182 -0
- package/boost/numeric/ublas/opencl/operations.hpp +18 -0
- package/boost/numeric/ublas/opencl/prod.hpp +364 -0
- package/boost/numeric/ublas/opencl/transpose.hpp +142 -0
- package/boost/numeric/ublas/opencl/vector.hpp +90 -0
- package/boost/numeric/ublas/opencl.hpp +16 -0
- package/boost/numeric/ublas/operation/begin.hpp +318 -0
- package/boost/numeric/ublas/operation/c_array.hpp +41 -0
- package/boost/numeric/ublas/operation/end.hpp +318 -0
- package/boost/numeric/ublas/operation/num_columns.hpp +45 -0
- package/boost/numeric/ublas/operation/num_rows.hpp +44 -0
- package/boost/numeric/ublas/operation/size.hpp +350 -0
- package/boost/numeric/ublas/operation.hpp +830 -0
- package/boost/numeric/ublas/operation_blocked.hpp +266 -0
- package/boost/numeric/ublas/operation_sparse.hpp +198 -0
- package/boost/numeric/ublas/operations.hpp +26 -0
- package/boost/numeric/ublas/storage.hpp +2131 -0
- package/boost/numeric/ublas/storage_sparse.hpp +578 -0
- package/boost/numeric/ublas/symmetric.hpp +2309 -0
- package/boost/numeric/ublas/tags.hpp +37 -0
- package/boost/numeric/ublas/tensor/algorithms.hpp +345 -0
- package/boost/numeric/ublas/tensor/expression.hpp +181 -0
- package/boost/numeric/ublas/tensor/expression_evaluation.hpp +288 -0
- package/boost/numeric/ublas/tensor/extents.hpp +335 -0
- package/boost/numeric/ublas/tensor/functions.hpp +558 -0
- package/boost/numeric/ublas/tensor/index.hpp +89 -0
- package/boost/numeric/ublas/tensor/multi_index.hpp +110 -0
- package/boost/numeric/ublas/tensor/multi_index_utility.hpp +364 -0
- package/boost/numeric/ublas/tensor/multiplication.hpp +945 -0
- package/boost/numeric/ublas/tensor/operators_arithmetic.hpp +244 -0
- package/boost/numeric/ublas/tensor/operators_comparison.hpp +175 -0
- package/boost/numeric/ublas/tensor/ostream.hpp +122 -0
- package/boost/numeric/ublas/tensor/storage_traits.hpp +84 -0
- package/boost/numeric/ublas/tensor/strides.hpp +251 -0
- package/boost/numeric/ublas/tensor/tensor.hpp +734 -0
- package/boost/numeric/ublas/tensor.hpp +26 -0
- package/boost/numeric/ublas/traits/c_array.hpp +110 -0
- package/boost/numeric/ublas/traits/const_iterator_type.hpp +127 -0
- package/boost/numeric/ublas/traits/iterator_type.hpp +126 -0
- package/boost/numeric/ublas/traits.hpp +753 -0
- package/boost/numeric/ublas/triangular.hpp +2775 -0
- package/boost/numeric/ublas/vector.hpp +2947 -0
- package/boost/numeric/ublas/vector_expression.hpp +1762 -0
- package/boost/numeric/ublas/vector_of_vector.hpp +1347 -0
- package/boost/numeric/ublas/vector_proxy.hpp +1697 -0
- package/boost/numeric/ublas/vector_sparse.hpp +2246 -0
- 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
|