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,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 ¤t_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
|