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,228 @@
|
|
|
1
|
+
/*
|
|
2
|
+
[auto_generated]
|
|
3
|
+
boost/numeric/odeint/external/gsl/gsl_wrapper.hpp
|
|
4
|
+
|
|
5
|
+
[begin_description]
|
|
6
|
+
Wrapper for gsl_vector.
|
|
7
|
+
[end_description]
|
|
8
|
+
|
|
9
|
+
Copyright 2011-2012 Mario Mulansky
|
|
10
|
+
Copyright 2011 Karsten Ahnert
|
|
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_EXTERNAL_GSL_GSL_WRAPPER_HPP_INCLUDED
|
|
19
|
+
#define BOOST_NUMERIC_ODEINT_EXTERNAL_GSL_GSL_WRAPPER_HPP_INCLUDED
|
|
20
|
+
|
|
21
|
+
#include <new>
|
|
22
|
+
|
|
23
|
+
#include <gsl/gsl_vector.h>
|
|
24
|
+
|
|
25
|
+
#include <boost/range.hpp>
|
|
26
|
+
#include <boost/iterator/iterator_facade.hpp>
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
#include <boost/numeric/odeint/util/state_wrapper.hpp>
|
|
30
|
+
#include <boost/numeric/odeint/util/is_resizeable.hpp>
|
|
31
|
+
#include <boost/numeric/odeint/util/copy.hpp>
|
|
32
|
+
|
|
33
|
+
class const_gsl_vector_iterator;
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* defines an iterator for gsl_vector
|
|
37
|
+
*/
|
|
38
|
+
class gsl_vector_iterator : public boost::iterator_facade< gsl_vector_iterator , double , boost::random_access_traversal_tag >
|
|
39
|
+
{
|
|
40
|
+
public :
|
|
41
|
+
|
|
42
|
+
gsl_vector_iterator( void ): m_p(0) , m_stride( 0 ) { }
|
|
43
|
+
explicit gsl_vector_iterator( gsl_vector *p ) : m_p( p->data ) , m_stride( p->stride ) { }
|
|
44
|
+
friend gsl_vector_iterator end_iterator( gsl_vector * );
|
|
45
|
+
|
|
46
|
+
private :
|
|
47
|
+
|
|
48
|
+
friend class boost::iterator_core_access;
|
|
49
|
+
friend class const_gsl_vector_iterator;
|
|
50
|
+
|
|
51
|
+
void increment( void ) { m_p += m_stride; }
|
|
52
|
+
void decrement( void ) { m_p -= m_stride; }
|
|
53
|
+
void advance( ptrdiff_t n ) { m_p += n*m_stride; }
|
|
54
|
+
bool equal( const gsl_vector_iterator &other ) const { return this->m_p == other.m_p; }
|
|
55
|
+
bool equal( const const_gsl_vector_iterator &other ) const;
|
|
56
|
+
double& dereference( void ) const { return *m_p; }
|
|
57
|
+
|
|
58
|
+
double *m_p;
|
|
59
|
+
size_t m_stride;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* defines an const iterator for gsl_vector
|
|
66
|
+
*/
|
|
67
|
+
class const_gsl_vector_iterator : public boost::iterator_facade< const_gsl_vector_iterator , const double , boost::random_access_traversal_tag >
|
|
68
|
+
{
|
|
69
|
+
public :
|
|
70
|
+
|
|
71
|
+
const_gsl_vector_iterator( void ): m_p(0) , m_stride( 0 ) { }
|
|
72
|
+
explicit const_gsl_vector_iterator( const gsl_vector *p ) : m_p( p->data ) , m_stride( p->stride ) { }
|
|
73
|
+
const_gsl_vector_iterator( const gsl_vector_iterator &p ) : m_p( p.m_p ) , m_stride( p.m_stride ) { }
|
|
74
|
+
|
|
75
|
+
private :
|
|
76
|
+
|
|
77
|
+
friend class boost::iterator_core_access;
|
|
78
|
+
friend class gsl_vector_iterator;
|
|
79
|
+
friend const_gsl_vector_iterator end_iterator( const gsl_vector * );
|
|
80
|
+
|
|
81
|
+
void increment( void ) { m_p += m_stride; }
|
|
82
|
+
void decrement( void ) { m_p -= m_stride; }
|
|
83
|
+
void advance( ptrdiff_t n ) { m_p += n*m_stride; }
|
|
84
|
+
bool equal( const const_gsl_vector_iterator &other ) const { return this->m_p == other.m_p; }
|
|
85
|
+
bool equal( const gsl_vector_iterator &other ) const { return this->m_p == other.m_p; }
|
|
86
|
+
const double& dereference( void ) const { return *m_p; }
|
|
87
|
+
|
|
88
|
+
const double *m_p;
|
|
89
|
+
size_t m_stride;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
bool gsl_vector_iterator::equal( const const_gsl_vector_iterator &other ) const { return this->m_p == other.m_p; }
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
gsl_vector_iterator end_iterator( gsl_vector *x )
|
|
97
|
+
{
|
|
98
|
+
gsl_vector_iterator iter( x );
|
|
99
|
+
iter.m_p += iter.m_stride * x->size;
|
|
100
|
+
return iter;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const_gsl_vector_iterator end_iterator( const gsl_vector *x )
|
|
104
|
+
{
|
|
105
|
+
const_gsl_vector_iterator iter( x );
|
|
106
|
+
iter.m_p += iter.m_stride * x->size;
|
|
107
|
+
return iter;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
namespace boost
|
|
114
|
+
{
|
|
115
|
+
template<>
|
|
116
|
+
struct range_mutable_iterator< gsl_vector* >
|
|
117
|
+
{
|
|
118
|
+
typedef gsl_vector_iterator type;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
template<>
|
|
122
|
+
struct range_const_iterator< gsl_vector* >
|
|
123
|
+
{
|
|
124
|
+
typedef const_gsl_vector_iterator type;
|
|
125
|
+
};
|
|
126
|
+
} // namespace boost
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
// template<>
|
|
132
|
+
inline gsl_vector_iterator range_begin( gsl_vector *x )
|
|
133
|
+
{
|
|
134
|
+
return gsl_vector_iterator( x );
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// template<>
|
|
138
|
+
inline const_gsl_vector_iterator range_begin( const gsl_vector *x )
|
|
139
|
+
{
|
|
140
|
+
return const_gsl_vector_iterator( x );
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// template<>
|
|
144
|
+
inline gsl_vector_iterator range_end( gsl_vector *x )
|
|
145
|
+
{
|
|
146
|
+
return end_iterator( x );
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// template<>
|
|
150
|
+
inline const_gsl_vector_iterator range_end( const gsl_vector *x )
|
|
151
|
+
{
|
|
152
|
+
return end_iterator( x );
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
namespace boost {
|
|
162
|
+
namespace numeric {
|
|
163
|
+
namespace odeint {
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
template<>
|
|
167
|
+
struct is_resizeable< gsl_vector* >
|
|
168
|
+
{
|
|
169
|
+
//struct type : public std::integral_constant<bool, true> { };
|
|
170
|
+
typedef std::integral_constant<bool, true> type;
|
|
171
|
+
const static bool value = type::value;
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
template <>
|
|
175
|
+
struct same_size_impl< gsl_vector* , gsl_vector* >
|
|
176
|
+
{
|
|
177
|
+
static bool same_size( const gsl_vector* x , const gsl_vector* y )
|
|
178
|
+
{
|
|
179
|
+
return x->size == y->size;
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
template <>
|
|
184
|
+
struct resize_impl< gsl_vector* , gsl_vector* >
|
|
185
|
+
{
|
|
186
|
+
static void resize( gsl_vector* &x , const gsl_vector* y )
|
|
187
|
+
{
|
|
188
|
+
gsl_vector_free( x );
|
|
189
|
+
x = gsl_vector_alloc( y->size );
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
template<>
|
|
194
|
+
struct state_wrapper< gsl_vector* >
|
|
195
|
+
{
|
|
196
|
+
typedef double value_type;
|
|
197
|
+
typedef gsl_vector* state_type;
|
|
198
|
+
typedef state_wrapper< gsl_vector* > state_wrapper_type;
|
|
199
|
+
|
|
200
|
+
state_type m_v;
|
|
201
|
+
|
|
202
|
+
state_wrapper( )
|
|
203
|
+
{
|
|
204
|
+
m_v = gsl_vector_alloc( 1 );
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
state_wrapper( const state_wrapper_type &x )
|
|
208
|
+
{
|
|
209
|
+
resize( m_v , x.m_v );
|
|
210
|
+
gsl_vector_memcpy( m_v , x.m_v );
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
~state_wrapper()
|
|
215
|
+
{
|
|
216
|
+
gsl_vector_free( m_v );
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
} // odeint
|
|
222
|
+
} // numeric
|
|
223
|
+
} // boost
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_GSL_GSL_WRAPPER_HPP_INCLUDED
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/*
|
|
2
|
+
[auto_generated]
|
|
3
|
+
boost/numeric/odeint/external/mkl/mkl_operations.hpp
|
|
4
|
+
|
|
5
|
+
[begin_description]
|
|
6
|
+
Wrapper classes for intel math kernel library types.
|
|
7
|
+
Get a free, non-commercial download of MKL at
|
|
8
|
+
http://software.intel.com/en-us/articles/non-commercial-software-download/
|
|
9
|
+
[end_description]
|
|
10
|
+
|
|
11
|
+
Copyright 2010-2011 Mario Mulansky
|
|
12
|
+
Copyright 2011-2013 Karsten Ahnert
|
|
13
|
+
|
|
14
|
+
Distributed under the Boost Software License, Version 1.0.
|
|
15
|
+
(See accompanying file LICENSE_1_0.txt or
|
|
16
|
+
copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MKL_MKL_OPERATIONS_HPP_INCLUDED
|
|
21
|
+
#define BOOST_NUMERIC_ODEINT_EXTERNAL_MKL_MKL_OPERATIONS_HPP_INCLUDED
|
|
22
|
+
|
|
23
|
+
#include <iostream>
|
|
24
|
+
|
|
25
|
+
#include <mkl_cblas.h>
|
|
26
|
+
#include <boost/numeric/odeint/algebra/default_operations.hpp>
|
|
27
|
+
|
|
28
|
+
/* exemplary example for writing bindings to the Intel MKL library
|
|
29
|
+
* see test/mkl for how to use mkl with odeint
|
|
30
|
+
* this is a quick and dirty implementation showing the general possibility.
|
|
31
|
+
* It works only with containers based on double and sequential memory allocation.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
namespace boost {
|
|
35
|
+
namespace numeric {
|
|
36
|
+
namespace odeint {
|
|
37
|
+
|
|
38
|
+
/* only defined for doubles */
|
|
39
|
+
struct mkl_operations
|
|
40
|
+
{
|
|
41
|
+
//template< class Fac1 , class Fac2 > struct scale_sum2;
|
|
42
|
+
|
|
43
|
+
template< class F1 = double , class F2 = F1 >
|
|
44
|
+
struct scale_sum2
|
|
45
|
+
{
|
|
46
|
+
typedef double Fac1;
|
|
47
|
+
typedef double Fac2;
|
|
48
|
+
const Fac1 m_alpha1;
|
|
49
|
+
const Fac2 m_alpha2;
|
|
50
|
+
|
|
51
|
+
scale_sum2( const Fac1 alpha1 , const Fac2 alpha2 ) : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }
|
|
52
|
+
|
|
53
|
+
template< class T1 , class T2 , class T3 >
|
|
54
|
+
void operator()( T1 &t1 , const T2 &t2 , const T3 &t3) const
|
|
55
|
+
{ // t1 = m_alpha1 * t2 + m_alpha2 * t3;
|
|
56
|
+
// we get Containers that have size() and [i]-access
|
|
57
|
+
|
|
58
|
+
const int n = t1.size();
|
|
59
|
+
//boost::numeric::odeint::copy( t1 , t3 );
|
|
60
|
+
if( &(t2[0]) != &(t1[0]) )
|
|
61
|
+
{
|
|
62
|
+
cblas_dcopy( n , &(t2[0]) , 1 , &(t1[0]) , 1 );
|
|
63
|
+
}
|
|
64
|
+
cblas_dscal( n , m_alpha1 , &(t1[0]) , 1 );
|
|
65
|
+
cblas_daxpy( n , m_alpha2 , &(t3[0]) , 1 , &(t1[0]) , 1 );
|
|
66
|
+
//daxpby( &n , &m_alpha2 , &(t3[0]) , &one , &m_alpha1 , &(t1[0]) , &one );
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
template< class F1 = double , class F2 = F1 , class F3 = F2 >
|
|
71
|
+
struct scale_sum3
|
|
72
|
+
{
|
|
73
|
+
typedef double Fac1;
|
|
74
|
+
typedef double Fac2;
|
|
75
|
+
typedef double Fac3;
|
|
76
|
+
const Fac1 m_alpha1;
|
|
77
|
+
const Fac2 m_alpha2;
|
|
78
|
+
const Fac3 m_alpha3;
|
|
79
|
+
|
|
80
|
+
scale_sum3( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 )
|
|
81
|
+
: m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) { }
|
|
82
|
+
|
|
83
|
+
template< class T1 , class T2 , class T3 , class T4 >
|
|
84
|
+
void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 ) const
|
|
85
|
+
{ // t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4;
|
|
86
|
+
// we get Containers that have size() and [i]-access
|
|
87
|
+
|
|
88
|
+
const int n = t1.size();
|
|
89
|
+
//boost::numeric::odeint::copy( t1 , t3 );
|
|
90
|
+
if( &(t2[0]) != &(t1[0]) )
|
|
91
|
+
{
|
|
92
|
+
cblas_dcopy( n , &(t2[0]) , 1 , &(t1[0]) , 1 );
|
|
93
|
+
}
|
|
94
|
+
cblas_dscal( n , m_alpha1 , &(t1[0]) , 1 );
|
|
95
|
+
cblas_daxpy( n , m_alpha2 , &(t3[0]) , 1 , &(t1[0]) , 1 );
|
|
96
|
+
//daxpby( &n , &m_alpha2 , &(t3[0]) , &one , &m_alpha1 , &(t1[0]) , &one );
|
|
97
|
+
cblas_daxpy( n , m_alpha3 , &(t4[0]) , 1 , &(t1[0]) , 1 );
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
template< class F1 = double , class F2 = F1 , class F3 = F2 , class F4 = F3 >
|
|
102
|
+
struct scale_sum4
|
|
103
|
+
{
|
|
104
|
+
typedef double Fac1;
|
|
105
|
+
typedef double Fac2;
|
|
106
|
+
typedef double Fac3;
|
|
107
|
+
typedef double Fac4;
|
|
108
|
+
const Fac1 m_alpha1;
|
|
109
|
+
const Fac2 m_alpha2;
|
|
110
|
+
const Fac3 m_alpha3;
|
|
111
|
+
const Fac4 m_alpha4;
|
|
112
|
+
|
|
113
|
+
scale_sum4( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 , const Fac4 alpha4 )
|
|
114
|
+
: m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) { }
|
|
115
|
+
|
|
116
|
+
template< class T1 , class T2 , class T3 , class T4 , class T5 >
|
|
117
|
+
void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 ) const
|
|
118
|
+
{ // t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5;
|
|
119
|
+
// we get Containers that have size() and [i]-access
|
|
120
|
+
|
|
121
|
+
const int n = t1.size();
|
|
122
|
+
//boost::numeric::odeint::copy( t1 , t3 );
|
|
123
|
+
if( &(t2[0]) != &(t1[0]) )
|
|
124
|
+
{
|
|
125
|
+
cblas_dcopy( n , &(t2[0]) , 1 , &(t1[0]) , 1 );
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
cblas_dscal( n , m_alpha1 , &(t1[0]) , 1 );
|
|
129
|
+
cblas_daxpy( n , m_alpha2 , &(t3[0]) , 1 , &(t1[0]) , 1 );
|
|
130
|
+
//daxpby( &n , &m_alpha2 , &(t3[0]) , &one , &m_alpha1 , &(t1[0]) , &one );
|
|
131
|
+
cblas_daxpy( n , m_alpha3 , &(t4[0]) , 1 , &(t1[0]) , 1 );
|
|
132
|
+
cblas_daxpy( n , m_alpha4 , &(t5[0]) , 1 , &(t1[0]) , 1 );
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
template< class F1 = double , class F2 = F1 , class F3 = F2 , class F4 = F3 , class F5 = F4 >
|
|
138
|
+
struct scale_sum5
|
|
139
|
+
{
|
|
140
|
+
typedef double Fac1;
|
|
141
|
+
typedef double Fac2;
|
|
142
|
+
typedef double Fac3;
|
|
143
|
+
typedef double Fac4;
|
|
144
|
+
typedef double Fac5;
|
|
145
|
+
const Fac1 m_alpha1;
|
|
146
|
+
const Fac2 m_alpha2;
|
|
147
|
+
const Fac3 m_alpha3;
|
|
148
|
+
const Fac4 m_alpha4;
|
|
149
|
+
const Fac5 m_alpha5;
|
|
150
|
+
|
|
151
|
+
scale_sum5( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 , const Fac4 alpha4 , const Fac5 alpha5 )
|
|
152
|
+
: m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) { }
|
|
153
|
+
|
|
154
|
+
template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
|
|
155
|
+
void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 ) const
|
|
156
|
+
{ // t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6;
|
|
157
|
+
// we get Containers that have size() and [i]-access
|
|
158
|
+
|
|
159
|
+
const int n = t1.size();
|
|
160
|
+
//boost::numeric::odeint::copy( t1 , t3 );
|
|
161
|
+
if( &(t2[0]) != &(t1[0]) )
|
|
162
|
+
{
|
|
163
|
+
cblas_dcopy( n , &(t2[0]) , 1 , &(t1[0]) , 1 );
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
cblas_dscal( n , m_alpha1 , &(t1[0]) , 1 );
|
|
167
|
+
cblas_daxpy( n , m_alpha2 , &(t3[0]) , 1 , &(t1[0]) , 1 );
|
|
168
|
+
//daxpby( &n , &m_alpha2 , &(t3[0]) , &one , &m_alpha1 , &(t1[0]) , &one );
|
|
169
|
+
cblas_daxpy( n , m_alpha3 , &(t4[0]) , 1 , &(t1[0]) , 1 );
|
|
170
|
+
cblas_daxpy( n , m_alpha4 , &(t5[0]) , 1 , &(t1[0]) , 1 );
|
|
171
|
+
cblas_daxpy( n , m_alpha5 , &(t6[0]) , 1 , &(t1[0]) , 1 );
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
} // odeint
|
|
178
|
+
} // numeric
|
|
179
|
+
} // boost
|
|
180
|
+
|
|
181
|
+
#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_MKL_MKL_OPERATIONS_HPP_INCLUDED
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
[auto_generated]
|
|
3
|
+
boost/numeric/odeint/external/mpi/mpi.hpp
|
|
4
|
+
|
|
5
|
+
[begin_description]
|
|
6
|
+
Wrappers for MPI.
|
|
7
|
+
[end_description]
|
|
8
|
+
|
|
9
|
+
Copyright 2013 Karsten Ahnert
|
|
10
|
+
Copyright 2013 Mario Mulansky
|
|
11
|
+
Copyright 2013 Pascal Germroth
|
|
12
|
+
|
|
13
|
+
Distributed under the Boost Software License, Version 1.0.
|
|
14
|
+
(See accompanying file LICENSE_1_0.txt or
|
|
15
|
+
copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_HPP_INCLUDED
|
|
20
|
+
#define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_HPP_INCLUDED
|
|
21
|
+
|
|
22
|
+
#include <boost/numeric/odeint/external/mpi/mpi_vector_state.hpp>
|
|
23
|
+
#include <boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp>
|
|
24
|
+
|
|
25
|
+
#endif
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/*
|
|
2
|
+
[auto_generated]
|
|
3
|
+
boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp
|
|
4
|
+
|
|
5
|
+
[begin_description]
|
|
6
|
+
Nested parallelized algebra for MPI.
|
|
7
|
+
[end_description]
|
|
8
|
+
|
|
9
|
+
Copyright 2013 Karsten Ahnert
|
|
10
|
+
Copyright 2013 Mario Mulansky
|
|
11
|
+
Copyright 2013 Pascal Germroth
|
|
12
|
+
|
|
13
|
+
Distributed under the Boost Software License, Version 1.0.
|
|
14
|
+
(See accompanying file LICENSE_1_0.txt or
|
|
15
|
+
copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_NESTED_ALGEBRA_HPP_INCLUDED
|
|
20
|
+
#define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_NESTED_ALGEBRA_HPP_INCLUDED
|
|
21
|
+
|
|
22
|
+
#include <boost/numeric/odeint/algebra/norm_result_type.hpp>
|
|
23
|
+
#include <boost/numeric/odeint/util/n_ary_helper.hpp>
|
|
24
|
+
|
|
25
|
+
namespace boost {
|
|
26
|
+
namespace numeric {
|
|
27
|
+
namespace odeint {
|
|
28
|
+
|
|
29
|
+
/** \brief MPI-parallelized algebra, wrapping another algebra.
|
|
30
|
+
*/
|
|
31
|
+
template< class InnerAlgebra >
|
|
32
|
+
struct mpi_nested_algebra
|
|
33
|
+
{
|
|
34
|
+
|
|
35
|
+
// execute the InnerAlgebra on each node's local data.
|
|
36
|
+
#define BOOST_ODEINT_GEN_BODY(n) \
|
|
37
|
+
InnerAlgebra::for_each##n( \
|
|
38
|
+
BOOST_PP_ENUM_BINARY_PARAMS(n, s, () BOOST_PP_INTERCEPT) , \
|
|
39
|
+
op \
|
|
40
|
+
);
|
|
41
|
+
BOOST_ODEINT_GEN_FOR_EACH(BOOST_ODEINT_GEN_BODY)
|
|
42
|
+
#undef BOOST_ODEINT_GEN_BODY
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
template< class NestedState >
|
|
46
|
+
static typename norm_result_type< typename NestedState::value_type >::type norm_inf( const NestedState &s )
|
|
47
|
+
{
|
|
48
|
+
typedef typename norm_result_type< typename NestedState::value_type >::type result_type;
|
|
49
|
+
// local maximum
|
|
50
|
+
result_type value = InnerAlgebra::norm_inf( s() );
|
|
51
|
+
// global maximum
|
|
52
|
+
return boost::mpi::all_reduce(s.world, value, boost::mpi::maximum<result_type>());
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#endif
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/*
|
|
2
|
+
[auto_generated]
|
|
3
|
+
boost/numeric/odeint/external/mpi/mpi_state.hpp
|
|
4
|
+
|
|
5
|
+
[begin_description]
|
|
6
|
+
A generic split state, storing partial data on each node.
|
|
7
|
+
[end_description]
|
|
8
|
+
|
|
9
|
+
Copyright 2013 Karsten Ahnert
|
|
10
|
+
Copyright 2013 Mario Mulansky
|
|
11
|
+
Copyright 2013 Pascal Germroth
|
|
12
|
+
|
|
13
|
+
Distributed under the Boost Software License, Version 1.0.
|
|
14
|
+
(See accompanying file LICENSE_1_0.txt or
|
|
15
|
+
copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_STATE_HPP_INCLUDED
|
|
20
|
+
#define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_STATE_HPP_INCLUDED
|
|
21
|
+
|
|
22
|
+
#include <vector>
|
|
23
|
+
#include <algorithm>
|
|
24
|
+
#include <boost/mpi.hpp>
|
|
25
|
+
#include <boost/numeric/odeint/util/copy.hpp>
|
|
26
|
+
#include <boost/numeric/odeint/util/split.hpp>
|
|
27
|
+
#include <boost/numeric/odeint/util/resize.hpp>
|
|
28
|
+
#include <boost/numeric/odeint/util/same_size.hpp>
|
|
29
|
+
#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
|
|
30
|
+
#include <boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp>
|
|
31
|
+
|
|
32
|
+
namespace boost {
|
|
33
|
+
namespace numeric {
|
|
34
|
+
namespace odeint {
|
|
35
|
+
|
|
36
|
+
/** \brief A container which has its contents distributed among the nodes.
|
|
37
|
+
*/
|
|
38
|
+
template< class InnerState >
|
|
39
|
+
struct mpi_state
|
|
40
|
+
{
|
|
41
|
+
typedef InnerState value_type;
|
|
42
|
+
|
|
43
|
+
// the node's local data.
|
|
44
|
+
InnerState m_data;
|
|
45
|
+
|
|
46
|
+
boost::mpi::communicator world;
|
|
47
|
+
|
|
48
|
+
mpi_state() {}
|
|
49
|
+
mpi_state(boost::mpi::communicator comm) : world(comm) {}
|
|
50
|
+
|
|
51
|
+
inline InnerState &operator()() { return m_data; }
|
|
52
|
+
inline const InnerState &operator()() const { return m_data; }
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
template< class InnerState >
|
|
59
|
+
struct is_resizeable< mpi_state< InnerState > >
|
|
60
|
+
: is_resizeable< InnerState > { };
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
template< class InnerState1 , class InnerState2 >
|
|
64
|
+
struct same_size_impl< mpi_state< InnerState1 > , mpi_state< InnerState2 > >
|
|
65
|
+
{
|
|
66
|
+
static bool same_size( const mpi_state< InnerState1 > &x , const mpi_state< InnerState2 > &y )
|
|
67
|
+
{
|
|
68
|
+
const bool local = boost::numeric::odeint::same_size(x(), y());
|
|
69
|
+
return boost::mpi::all_reduce(x.world, local, mpi::bitwise_and<bool>());
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
template< class InnerState1 , class InnerState2 >
|
|
75
|
+
struct resize_impl< mpi_state< InnerState1 > , mpi_state< InnerState2 > >
|
|
76
|
+
{
|
|
77
|
+
static void resize( mpi_state< InnerState1 > &x , const mpi_state< InnerState2 > &y )
|
|
78
|
+
{
|
|
79
|
+
// resize local parts on each node.
|
|
80
|
+
boost::numeric::odeint::resize(x(), y());
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
/** \brief Copy data between mpi_states of same size. */
|
|
86
|
+
template< class InnerState1 , class InnerState2 >
|
|
87
|
+
struct copy_impl< mpi_state< InnerState1 > , mpi_state< InnerState2 > >
|
|
88
|
+
{
|
|
89
|
+
static void copy( const mpi_state< InnerState1 > &from , mpi_state< InnerState2 > &to )
|
|
90
|
+
{
|
|
91
|
+
// copy local parts on each node.
|
|
92
|
+
boost::numeric::odeint::copy(from(), to());
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
/** \brief Use `mpi_algebra` for `mpi_state`. */
|
|
99
|
+
template< class InnerState >
|
|
100
|
+
struct algebra_dispatcher< mpi_state< InnerState > >
|
|
101
|
+
{
|
|
102
|
+
typedef mpi_nested_algebra<
|
|
103
|
+
typename algebra_dispatcher< InnerState >::algebra_type
|
|
104
|
+
> algebra_type;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
#endif
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/*
|
|
2
|
+
[auto_generated]
|
|
3
|
+
boost/numeric/odeint/external/mpi/mpi_vector_state.hpp
|
|
4
|
+
|
|
5
|
+
[begin_description]
|
|
6
|
+
Copying a container from/to an mpi_state splits/joins it.
|
|
7
|
+
[end_description]
|
|
8
|
+
|
|
9
|
+
Copyright 2013 Karsten Ahnert
|
|
10
|
+
Copyright 2013 Mario Mulansky
|
|
11
|
+
Copyright 2013 Pascal Germroth
|
|
12
|
+
|
|
13
|
+
Distributed under the Boost Software License, Version 1.0.
|
|
14
|
+
(See accompanying file LICENSE_1_0.txt or
|
|
15
|
+
copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_VECTOR_STATE_HPP_INCLUDED
|
|
20
|
+
#define BOOST_NUMERIC_ODEINT_EXTERNAL_MPI_MPI_VECTOR_STATE_HPP_INCLUDED
|
|
21
|
+
|
|
22
|
+
#include <vector>
|
|
23
|
+
#include <algorithm>
|
|
24
|
+
#include <boost/mpi.hpp>
|
|
25
|
+
#include <boost/numeric/odeint/util/copy.hpp>
|
|
26
|
+
#include <boost/numeric/odeint/util/split_adaptor.hpp>
|
|
27
|
+
#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
|
|
28
|
+
#include <boost/numeric/odeint/external/mpi/mpi_state.hpp>
|
|
29
|
+
#include <boost/numeric/odeint/tools/assert.hpp>
|
|
30
|
+
|
|
31
|
+
namespace boost {
|
|
32
|
+
namespace numeric {
|
|
33
|
+
namespace odeint {
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
/** \brief Split data from some container on node 0 to the slaves.
|
|
37
|
+
* Source must be a model of Random Access Range. */
|
|
38
|
+
template< class Source , class InnerState >
|
|
39
|
+
struct split_impl< Source, mpi_state< InnerState >,
|
|
40
|
+
typename boost::enable_if< boost::has_range_const_iterator<Source> >::type >
|
|
41
|
+
{
|
|
42
|
+
typedef typename boost::range_iterator<const Source>::type iterator;
|
|
43
|
+
|
|
44
|
+
static void split( const Source &from, mpi_state< InnerState > &to )
|
|
45
|
+
{
|
|
46
|
+
std::vector< InnerState > pieces;
|
|
47
|
+
if(to.world.rank() == 0) {
|
|
48
|
+
const size_t num = static_cast<size_t>(to.world.size());
|
|
49
|
+
pieces.resize(num);
|
|
50
|
+
for(size_t i = 0 ; i < num ; i++) {
|
|
51
|
+
iterator_range<iterator> part = detail::make_split_range(from, i, num);
|
|
52
|
+
boost::numeric::odeint::resize(pieces[i], part);
|
|
53
|
+
boost::numeric::odeint::copy(part, pieces[i]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// send to nodes
|
|
57
|
+
boost::mpi::scatter(to.world, pieces, to(), 0);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/** \brief Merge data from an mpi_state to some container on node 0.
|
|
62
|
+
* Target must be a model Single Pass Range. */
|
|
63
|
+
template< class Target, class InnerState >
|
|
64
|
+
struct unsplit_impl< mpi_state< InnerState >, Target,
|
|
65
|
+
typename boost::enable_if< boost::has_range_iterator<Target> >::type >
|
|
66
|
+
{
|
|
67
|
+
typedef typename boost::range_iterator<Target>::type iterator;
|
|
68
|
+
|
|
69
|
+
static void unsplit( const mpi_state< InnerState > &from , Target &to )
|
|
70
|
+
{
|
|
71
|
+
std::vector< InnerState > pieces;
|
|
72
|
+
// send data to root
|
|
73
|
+
boost::mpi::gather(from.world, from(), pieces, 0);
|
|
74
|
+
if(from.world.rank() == 0) {
|
|
75
|
+
// check target size
|
|
76
|
+
size_t total_size = 0;
|
|
77
|
+
for(size_t i = 0 ; i < pieces.size() ; i++)
|
|
78
|
+
total_size += boost::size(pieces[i]);
|
|
79
|
+
BOOST_NUMERIC_ODEINT_ASSERT( total_size <= boost::size(to) );
|
|
80
|
+
// copy parts
|
|
81
|
+
iterator out = boost::begin(to);
|
|
82
|
+
for(size_t i = 0 ; i < pieces.size() ; i++)
|
|
83
|
+
out = boost::copy(pieces[i], out);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
#endif
|
|
95
|
+
|