headmyshoulder / odeint-v2

odeint - solving ordinary differential equations in c++ v2
http://headmyshoulder.github.com/odeint-v2/
Other
344 stars 101 forks source link

Does integrate_adaptive() support VexCL? #107

Closed agerlach closed 9 years ago

agerlach commented 11 years ago

I am trying to migrate some code from Thrust + odeint to VexCL + odeint. I am doing parameters studies on ensembles of systems with many states and the need for nested zip_iterators when using thrust has caused me to look for a better solution.

I have VexCL working when I use integrate_const(), but I get compilation errors when trying integrate_adaptive(). Does integrate_adaptive() support VexCL?

Working:

...
typedef vex::vector< float >    vector_type;
typedef vex::multivector< float, 5 > state_type;
....
vector_type input( ctx.queue() , input_host );
state_type X(ctx.queue(), n);
runge_kutta4< state_type > stepper;
integrate_const( stepper , sys_func( input ) , X , 0.0 , Tf , dt );

Not Working:

...
typedef vex::vector< float >    vector_type;
typedef vex::multivector< float, 5 > state_type;
....
vector_type input( ctx.queue() , input_host );
state_type X(ctx.queue(), n);
typedef runge_kutta_cash_karp54<state_type> error_stepper_type;
size_t steps = integrate_adaptive(make_controlled<error_stepper_type>(1.0e-10,1.0e-6),sys_func( input),X,0.0,Tf,dt);

Thanks.

headmyshoulder commented 11 years ago

In principle it should work. Can you give us the compiler output?

agerlach commented 11 years ago

In file included from /usr/local/include/boost/numeric/odeint/util/ublas_wrapper.hpp:30:0, from /usr/local/include/boost/numeric/odeint.hpp:25, from ../adam.cpp:6: /usr/local/include/boost/numeric/odeint/algebra/default_operations.hpp: In member function ‘void boost::numeric::odeint::default_operations::rel_error::operator()(T3&, const T1&, const T2&) const [with T1 = vex::multivector<double, 3ul>, T2 = vex::multivector<double, 3ul>, T3 = vex::multivector<double, 3ul>, Fac1 = double]’: /usr/local/include/boost/numeric/odeint/algebra/vector_space_algebra.hpp:89:9: instantiated from ‘static void boost::numeric::odeint::vector_space_algebra::for_each3(S1&, S2&, S3&, Op) [with S1 = vex::multivector<double, 3ul>, S2 = const vex::multivector<double, 3ul>, S3 = const vex::multivector<double, 3ul>, Op = boost::numeric::odeint::default_operations::rel_error]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:81:9: instantiated from ‘boost::numeric::odeint::default_error_checker<Value, Algebra, Operations>::value_type boost::numeric::odeint::default_error_checker<Value, Algebra, Operations>::error(boost::numeric::odeint::default_error_checker<Value, Algebra, Operations>::algebra_type&, const State&, const Deriv&, Err&, Time) const [with State = vex::multivector<double, 3ul>, Deriv = vex::multivector<double, 3ul>, Err = vex::multivector<double, 3ul>, Time = double, Value = double, Algebra = boost::numeric::odeint::vector_space_algebra, Operations = boost::numeric::odeint::default_operations, boost::numeric::odeint::default_error_checker<Value, Algebra, Operations>::value_type = double, boost::numeric::odeint::default_error_checker<Value, Algebra, Operations>::algebra_type = boost::numeric::odeint::vector_space_algebra]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:349:9: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, const StateIn&, const DerivIn&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, StateOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateIn = vex::multivector<double, 3ul>, DerivIn = vex::multivector<double, 3ul>, StateOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:267:88: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, StateInOut&, const DerivIn&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, DerivIn = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:430:59: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step_v1(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:209:48: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp:101:13: instantiated from ‘size_t boost::numeric::odeint::detail::integrate_adaptive(Stepper, System, State&, Time&, Time, Time&, Observer, boost::numeric::odeint::controlled_stepper_tag) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:45:43: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time, Observer) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:83:110: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, size_t = long unsigned int]’ ../adam.cpp:71:109: instantiated from here /usr/local/include/boost/numeric/odeint/algebra/default_operations.hpp:443:13: error: no matching function for call to ‘abs(boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type)’ /usr/local/include/boost/numeric/odeint/algebra/default_operations.hpp:443:13: note: candidates are: /usr/include/stdlib.h:771:12: note: int abs(int) /usr/include/stdlib.h:771:12: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘int’ /usr/include/c++/4.6/cstdlib:139:3: note: long int std::abs(long int) /usr/include/c++/4.6/cstdlib:139:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘long int’ /usr/include/c++/4.6/cstdlib:173:3: note: long long int gnu_cxx::abs(long long int) /usr/include/c++/4.6/cstdlib:173:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘long long int’ /usr/include/c++/4.6/cmath:82:3: note: double std::abs(double) /usr/include/c++/4.6/cmath:82:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘double’ /usr/include/c++/4.6/cmath:86:3: note: float std::abs(float) /usr/include/c++/4.6/cmath:86:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘float’ /usr/include/c++/4.6/cmath:90:3: note: long double std::abs(long double) /usr/include/c++/4.6/cmath:90:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘long double’ /usr/include/c++/4.6/cmath:96:5: note: template typename gnu_cxx::enable_ifstd::is_integer<_Tp::value, double>::type std::abs(_Tp) /usr/include/c++/4.6/complex:592:5: note: template _Tp std::abs(const std::complex<_Tp>&) /home/agerlach/git/vexcl/vexcl/operations.hpp:688:1: note: template typename std::enable_if<(! std::is_integral<typename vex::cl_scalar_of<typename vex::detail::return_type::type>::type>::value), const typename boost::proto::result_of::makeexpr<boost::proto::tagns::tag::function, vex::fabs_func, const Arg&>::type>::type vex::abs(const Arg&) /home/agerlach/git/vexcl/vexcl/operations.hpp:668:1: note: template typename std::enable_if<std::is_integral<typename vex::cl_scalar_of<typename vex::detail::return_type::type>::type>::value, const typename boost::proto::result_of::makeexpr<boost::proto::tagns::tag::function, vex::abs_func, const Arg&>::type>::type vex::abs(const Arg&) /usr/local/include/boost/numeric/odeint/algebra/default_operations.hpp:443:13: error: no matching function for call to ‘abs(boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type)’ /usr/local/include/boost/numeric/odeint/algebra/default_operations.hpp:443:13: note: candidates are: /usr/include/stdlib.h:771:12: note: int abs(int) /usr/include/stdlib.h:771:12: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘int’ /usr/include/c++/4.6/cstdlib:139:3: note: long int std::abs(long int) /usr/include/c++/4.6/cstdlib:139:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘long int’ /usr/include/c++/4.6/cstdlib:173:3: note: long long int gnu_cxx::abs(long long int) /usr/include/c++/4.6/cstdlib:173:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘long long int’ /usr/include/c++/4.6/cmath:82:3: note: double std::abs(double) /usr/include/c++/4.6/cmath:82:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘double’ /usr/include/c++/4.6/cmath:86:3: note: float std::abs(float) /usr/include/c++/4.6/cmath:86:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘float’ /usr/include/c++/4.6/cmath:90:3: note: long double std::abs(long double) /usr/include/c++/4.6/cmath:90:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘long double’ /usr/include/c++/4.6/cmath:96:5: note: template typename __gnu_cxx::enable_ifstd::is_integer<_Tp::value, double>::type std::abs(_Tp) /usr/include/c++/4.6/complex:592:5: note: template _Tp std::abs(const std::complex<_Tp>&) /home/agerlach/git/vexcl/vexcl/operations.hpp:688:1: note: template typename std::enable_if<(! std::is_integral<typename vex::cl_scalar_of<typename vex::detail::return_type::type>::type>::value), const typename boost::proto::result_of::makeexpr<boost::proto::tagns::tag::function, vex::fabs_func, const Arg&>::type>::type vex::abs(const Arg&) /home/agerlach/git/vexcl/vexcl/operations.hpp:668:1: note: template typename std::enable_if<std::is_integral<typename vex::cl_scalar_of<typename vex::detail::return_type::type>::type>::value, const typename boost::proto::result_of::makeexpr<boost::proto::tagns::tag::function, vex::abs_func, const Arg&>::type>::type vex::abs(const Arg&) /usr/local/include/boost/numeric/odeint/algebra/default_operations.hpp:443:13: error: no matching function for call to ‘abs(boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type)’ /usr/local/include/boost/numeric/odeint/algebra/default_operations.hpp:443:13: note: candidates are: /usr/include/stdlib.h:771:12: note: int abs(int) /usr/include/stdlib.h:771:12: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘int’ /usr/include/c++/4.6/cstdlib:139:3: note: long int std::abs(long int) /usr/include/c++/4.6/cstdlib:139:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘long int’ /usr/include/c++/4.6/cstdlib:173:3: note: long long int gnu_cxx::abs(long long int) /usr/include/c++/4.6/cstdlib:173:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘long long int’ /usr/include/c++/4.6/cmath:82:3: note: double std::abs(double) /usr/include/c++/4.6/cmath:82:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘double’ /usr/include/c++/4.6/cmath:86:3: note: float std::abs(float) /usr/include/c++/4.6/cmath:86:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘float’ /usr/include/c++/4.6/cmath:90:3: note: long double std::abs(long double) /usr/include/c++/4.6/cmath:90:3: note: no known conversion for argument 1 from ‘boost::numeric::odeint::detail::get_unit_value_impl<vex::multivector<double, 3ul>, void>::result_type {aka vex::multivector<double, 3ul>}’ to ‘long double’ /usr/include/c++/4.6/cmath:96:5: note: template typename gnu_cxx::__enable_ifstd::is_integer<_Tp::value, double>::type std::abs(_Tp) /usr/include/c++/4.6/complex:592:5: note: template _Tp std::abs(const std::complex<_Tp>&) /home/agerlach/git/vexcl/vexcl/operations.hpp:688:1: note: template typename std::enable_if<(! std::is_integral<typename vex::cl_scalar_of<typename vex::detail::return_type::type>::type>::value), const typename boost::proto::result_of::makeexpr<boost::proto::tagns::tag::function, vex::fabs_func, const Arg&>::type>::type vex::abs(const Arg&) /home/agerlach/git/vexcl/vexcl/operations.hpp:668:1: note: template typename std::enable_if<std::is_integral<typename vex::cl_scalar_of<typename vex::detail::return_type::type>::type>::value, const typename boost::proto::result_of::makeexpr<boost::proto::tagns::tag::function, vex::abs_func, const Arg&>::type>::type vex::abs(const Arg&) In file included from /usr/local/include/boost/iterator/detail/facade_iterator_category.hpp:7:0, from /usr/local/include/boost/iterator/iterator_facade.hpp:14, from /usr/local/include/boost/filesystem/path.hpp:28, from /usr/local/include/boost/filesystem.hpp:16, from /home/agerlach/git/vexcl/vexcl/devlist.hpp:42, from /home/agerlach/git/vexcl/vexcl/vexcl.hpp:34, from ../adam.cpp:4: /usr/local/include/boost/iterator/iterator_categories.hpp: At global scope: /usr/local/include/boost/iterator/iterator_categories.hpp: In instantiation of ‘boost::iterator_traversal<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’: /usr/local/include/boost/range/concepts.hpp:116:79: instantiated from ‘boost::range_detail::IncrementableIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/range/concepts.hpp:135:16: instantiated from ‘boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/concept/detail/has_constraints.hpp:42:5: instantiated from ‘const bool boost::concepts::not_satisfied<boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> > >::value’ /usr/local/include/boost/concept/detail/has_constraints.hpp:45:31: instantiated from ‘boost::concepts::not_satisfied<boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::constelement> > >’ /usr/local/include/boost/mpl/if.hpp:67:11: instantiated from ‘boost::mpl::if<boost::concepts::not_satisfied<boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> > >, boost::concepts::constraint<boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> > >, boost::concepts::requirement<boost::concepts::failed**** boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >::****> >’ /usr/local/include/boost/concept/detail/general.hpp:50:8: [ skipping 11 instantiation contexts ] /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:430:59: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step_v1(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’

agerlach commented 11 years ago

/usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:209:48: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp:101:13: instantiated from ‘size_t boost::numeric::odeint::detail::integrate_adaptive(Stepper, System, State&, Time&, Time, Time&, Observer, boost::numeric::odeint::controlled_stepper_tag) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:45:43: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time, Observer) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:83:110: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, size_t = long unsigned int]’ ../adam.cpp:71:109: instantiated from here /usr/local/include/boost/iterator/iterator_categories.hpp:159:8: error: no type named ‘iterator_category’ in ‘struct boost::detail::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ In file included from /usr/local/include/boost/range/algorithm/equal.hpp:14:0, from /usr/local/include/boost/range/iterator_range_core.hpp:31, from /usr/local/include/boost/lexical_cast.hpp:174, from /usr/local/include/boost/math/constants/constants.hpp:18, from /home/agerlach/git/vexcl/vexcl/constants.hpp:41, from /home/agerlach/git/vexcl/vexcl/vexcl.hpp:35, from ../adam.cpp:4: /usr/local/include/boost/range/concepts.hpp: In instantiation of ‘boost::range_detail::IncrementableIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’: /usr/local/include/boost/range/concepts.hpp:135:16: instantiated from ‘boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/concept/detail/has_constraints.hpp:42:5: instantiated from ‘const bool boost::concepts::not_satisfied<boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> > >::value’ /usr/local/include/boost/concept/detail/has_constraints.hpp:45:31: instantiated from ‘boost::concepts::not_satisfied<boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::constelement> > >’ /usr/local/include/boost/mpl/if.hpp:67:11: instantiated from ‘boost::mpl::if<boost::concepts::not_satisfied<boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> > >, boost::concepts::constraint<boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> > >, boost::concepts::requirement<boost::concepts::failed**** boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::constelement> >::***> >’ /usr/local/include/boost/concept/detail/general.hpp:50:8: instantiated from ‘boost::concepts::requirement<void ()(boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >)>’ /usr/local/include/boost/range/concepts.hpp:259:1: [ skipping 10 instantiation contexts ] /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:430:59: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step_v1(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:209:48: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp:101:13: instantiated from ‘size_t boost::numeric::odeint::detail::integrate_adaptive(Stepper, System, State&, Time&, Time, Time&, Observer, boost::numeric::odeint::controlled_stepper_tag) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:45:43: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time, Observer) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:83:110: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, size_t = long unsigned int]’ ../adam.cpp:71:109: instantiated from here /usr/local/include/boost/range/concepts.hpp:116:79: error: no type named ‘type’ in ‘struct boost::iterator_traversal<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/range/concepts.hpp:122:1: error: no type named ‘type’ in ‘struct boost::iterator_traversal<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/range/concepts.hpp: In destructor ‘boost::range_detail::SinglePassIteratorConcept::~SinglePassIteratorConcept() [with Iterator = vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::constelement>]’: /usr/local/include/boost/concept/detail/general.hpp:38:28: instantiated from ‘static void boost::concepts::requirement<boost::concepts::failed**** Model::***>::failed() [with Model = boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >]’ /usr/local/include/boost/range/concepts.hpp:259:1: instantiated from ‘boost::SinglePassRangeConcept<const vex::multivector<double, 3ul> >’ /usr/local/include/boost/concept/detail/has_constraints.hpp:42:5: instantiated from ‘const bool boost::concepts::not_satisfied<boost::SinglePassRangeConcept<const vex::multivector<double, 3ul> > >::value’ /usr/local/include/boost/concept/detail/has_constraints.hpp:45:31: instantiated from ‘boost::concepts::notsatisfied<boost::SinglePassRangeConcept<const vex::multivector<double, 3ul> > >’ /usr/local/include/boost/mpl/if.hpp:67:11: instantiated from ‘boost::mpl::if<boost::concepts::notsatisfied<boost::SinglePassRangeConcept<const vex::multivector<double, 3ul> > >, boost::concepts::constraint<boost::SinglePassRangeConcept<const vex::multivector<double, 3ul> > >, boost::concepts::requirement<boost::concepts::failed******* boost::SinglePassRangeConcept<const vex::multivector<double, 3ul> >::*_> >’ /usr/local/include/boost/concept/detail/general.hpp:50:8: [ skipping 6 instantiation contexts ] /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:430:59: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step_v1(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:209:48: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp:101:13: instantiated from ‘size_t boost::numeric::odeint::detail::integrate_adaptive(Stepper, System, State&, Time&, Time, Time&, Observer, boost::numeric::odeint::controlled_stepper_tag) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:45:43: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time, Observer) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:83:110: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, size_t = long unsigned int]’ ../adam.cpp:71:109: instantiated from here /usr/local/include/boost/range/concepts.hpp:155:17: error: no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive] /usr/local/include/boost/range/concepts.hpp:157:92: error: no type named ‘reference’ in ‘struct boost::detail::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/range/concepts.hpp:157:92: error: no type named ‘reference’ in ‘struct boost::detail::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/range/concepts.hpp:160:92: error: no type named ‘reference’ in ‘struct boost::detail::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/range/concepts.hpp:160:92: error: no type named ‘reference’ in ‘struct boost::detail::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/range/concepts.hpp: In destructor ‘boost::range_detail::IncrementableIteratorConcept::~IncrementableIteratorConcept() [with Iterator = vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element>]’: /usr/local/include/boost/concept/usage.hpp:22:29: instantiated from ‘boost::concepts::usage_requirements::~usage_requirements() [with Model = boost::range_detail::IncrementableIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::constelement> >]’ /usr/local/include/boost/concept/detail/general.hpp:38:28: instantiated from ‘static void boost::concepts::requirement<boost::concepts::failed******* Model::**>::failed() [with Model = boost::concepts::usage_requirements<boost::range_detail::IncrementableIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> > >]’ /usr/local/include/boost/range/concepts.hpp:124:1: instantiated from ‘boost::range_detail::IncrementableIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/range/concepts.hpp:135:16: instantiated from ‘boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/local/include/boost/concept/detail/has_constraints.hpp:42:5: instantiated from ‘const bool boost::concepts::not_satisfied<boost::range_detail::SinglePassIteratorConcept<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> > >::value’ /usr/local/include/boost/concept/detail/has_constraints.hpp:45:31: [ skipping 13 instantiation contexts ] /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:430:59: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step_v1(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:209:48: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp:101:13: instantiated from ‘size_t boost::numeric::odeint::detail::integrate_adaptive(Stepper, System, State&, Time&, Time, Time&, Observer, boost::numeric::odeint::controlled_stepper_tag) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:45:43: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time, Observer) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:83:110: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, size_t = long unsigned int]’ ../adam.cpp:71:109: instantiated from here /usr/local/include/boost/range/concepts.hpp:127:17: error: no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive] In file included from /usr/include/c++/4.6/bits/char_traits.h:41:0, from /usr/include/c++/4.6/ios:41, from /usr/include/c++/4.6/ostream:40, from /usr/include/c++/4.6/iostream:40, from ../adam.cpp:1: /usr/include/c++/4.6/bits/stl_algobase.h: In function ‘_OI std::copy_move_a(_II, _II, _OI) [with bool _IsMove = false, _II = vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element>, _OI = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’: /usr/include/c++/4.6/bits/stl_algobase.h:422:39: instantiated from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false, _II = vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element>, _OI = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’ /usr/include/c++/4.6/bits/stl_algobase.h:454:18: instantiated from ‘_OI std::copy(_II, _II, _OI) [with _II = vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element>, _OI = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’ /usr/local/include/boost/range/algorithm/copy.hpp:34:59: instantiated from ‘OutputIterator boost::range::copy(const SinglePassRange&, OutputIterator) [with SinglePassRange = vex::multivector<double, 3ul>, OutputIterator = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’ /usr/local/include/boost/numeric/odeint/util/copy.hpp:37:9: instantiated from ‘void boost::numeric::odeint::detail::docopying(const Container1&, Container2&, mpl::true) [with Container1 = vex::multivector<double, 3ul>, Container2 = vex::multivector<double, 3ul>, mpl::true = mpl::bool_]’ /usr/local/include/boost/numeric/odeint/util/copy.hpp:59:9: instantiated from ‘static void boost::numeric::odeint::copy_impl<Container1, Container2, Enabler>::copy(const Container1&, Container2&) [with Container1 = vex::multivector<double, 3ul>, Container2 = vex::multivector<double, 3ul>, Enabler = void]’ /usr/local/include/boost/numeric/odeint/util/copy.hpp:66:5: [ skipping 2 instantiation contexts ] /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:430:59: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step_v1(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:209:48: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp:101:13: instantiated from ‘size_t boost::numeric::odeint::detail::integrate_adaptive(Stepper, System, State&, Time&, Time, Time&, Observer, boost::numeric::odeint::controlled_stepper_tag) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:45:43: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time, Observer) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:83:110: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, size_t = long unsigned int]’ ../adam.cpp:71:109: instantiated from here /usr/include/c++/4.6/bits/stl_algobase.h:375:57: error: no type named ‘value_type’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/include/c++/4.6/bits/stl_algobase.h:422:39: instantiated from ‘_OI std::copy_move_a2(_II, _II, _OI) [with bool _IsMove = false, _II = vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element>, _OI = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’ /usr/include/c++/4.6/bits/stl_algobase.h:454:18: instantiated from ‘_OI std::copy(_II, _II, _OI) [with _II = vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element>, _OI = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’ /usr/local/include/boost/range/algorithm/copy.hpp:34:59: instantiated from ‘OutputIterator boost::range::copy(const SinglePassRange&, OutputIterator) [with SinglePassRange = vex::multivector<double, 3ul>, OutputIterator = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’ /usr/local/include/boost/numeric/odeint/util/copy.hpp:37:9: instantiated from ‘void boost::numeric::odeint::detail::docopying(const Container1&, Container2&, mpl::true) [with Container1 = vex::multivector<double, 3ul>, Container2 = vex::multivector<double, 3ul>, mpl::true = mpl::bool_]’ /usr/local/include/boost/numeric/odeint/util/copy.hpp:59:9: instantiated from ‘static void boost::numeric::odeint::copy_impl<Container1, Container2, Enabler>::copy(const Container1&, Container2&) [with Container1 = vex::multivector<double, 3ul>, Container2 = vex::multivector<double, 3ul>, Enabler = void]’ /usr/local/include/boost/numeric/odeint/util/copy.hpp:66:5: [ skipping 2 instantiation contexts ] /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:430:59: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step_v1(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:209:48: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp:101:13: instantiated from ‘size_t boost::numeric::odeint::detail::integrate_adaptive(Stepper, System, State&, Time&, Time, Time&, Observer, boost::numeric::odeint::controlled_stepper_tag) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:45:43: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time, Observer) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:83:110: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, size_t = long unsigned int]’ ../adam.cpp:71:109: instantiated from here /usr/include/c++/4.6/bits/stl_algobase.h:376:57: error: no type named ‘value_type’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element> >’ /usr/include/c++/4.6/bits/stl_algobase.h:377:64: error: no type named ‘iterator_category’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/include/c++/4.6/bits/stl_algobase.h:381:57: error: no type named ‘value_type’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ /usr/include/c++/4.6/bits/stl_algobase.h:422:39: instantiated from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false, _II = vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element>, _OI = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’ /usr/include/c++/4.6/bits/stl_algobase.h:454:18: instantiated from ‘_OI std::copy(_II, _II, _OI) [with _II = vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element>, _OI = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’ /usr/local/include/boost/range/algorithm/copy.hpp:34:59: instantiated from ‘OutputIterator boost::range::copy(const SinglePassRange&, OutputIterator) [with SinglePassRange = vex::multivector<double, 3ul>, OutputIterator = vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element>]’ /usr/local/include/boost/numeric/odeint/util/copy.hpp:37:9: instantiated from ‘void boost::numeric::odeint::detail::docopying(const Container1&, Container2&, mpl::true) [with Container1 = vex::multivector<double, 3ul>, Container2 = vex::multivector<double, 3ul>, mpl::true = mpl::bool_]’ /usr/local/include/boost/numeric/odeint/util/copy.hpp:59:9: instantiated from ‘static void boost::numeric::odeint::copy_impl<Container1, Container2, Enabler>::copy(const Container1&, Container2&) [with Container1 = vex::multivector<double, 3ul>, Container2 = vex::multivector<double, 3ul>, Enabler = void]’ /usr/local/include/boost/numeric/odeint/util/copy.hpp:66:5: [ skipping 2 instantiation contexts ] /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:430:59: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step_v1(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:209:48: instantiated from ‘boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::try_step(System, StateInOut&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type&) [with System = sys_func, StateInOut = vex::multivector<double, 3ul>, ErrorStepper = boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, ErrorChecker = boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, Resizer = boost::numeric::odeint::initially_resizer, boost::numeric::odeint::controlled_runge_kutta<ErrorStepper, ErrorChecker, Resizer, boost::numeric::odeint::explicit_error_stepper_tag>::time_type = double]’ /usr/local/include/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp:101:13: instantiated from ‘size_t boost::numeric::odeint::detail::integrate_adaptive(Stepper, System, State&, Time&, Time, Time&, Observer, boost::numeric::odeint::controlled_stepper_tag) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:45:43: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time, Observer) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, Observer = boost::numeric::odeint::null_observer, size_t = long unsigned int]’ /usr/local/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:83:110: instantiated from ‘size_t boost::numeric::odeint::integrate_adaptive(Stepper, System, State&, Time, Time, Time) [with Stepper = boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_cash_karp54<vex::multivector<double, 3ul> >, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::vector_space_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_tag>, System = sys_func, State = vex::multivector<double, 3ul>, Time = double, size_t = long unsigned int]’ ../adam.cpp:71:109: instantiated from here /usr/include/c++/4.6/bits/stl_algobase.h:384:70: error: no type named ‘iterator_category’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’

ddemidov commented 11 years ago

It looks like a specification of boost::numeric::odeint::detail::get_unit_value_impl for vexcl types is required. @headmyshoulder, if that correct, I could provide it.

But even if adaptive stepper will work, I think it would make same steps for all of the systems in the parameter study. Would that be acceptable?

headmyshoulder commented 11 years ago

For me, it seems that abs() is not implemented for vex::multivector<>. get_unit_value simply return the argument that has been passed (by value, maybe this is not good for performance). But then, there is no abs() function. And abs() must be the elementwise abs function.

I am not sure if adaptive_stepper increases the performance. I can imagine situations where it might make sense, for example if you have intermittent dynamics for large parameter regions, or if your solutions are mostly regular. But of course it depends on the problem. Nevertheless, I assume that you will not loose too much if you use integrate_const.

ddemidov commented 11 years ago

The problem with abs is that OpenCL only provides it for integral types. With floating point types one should use fabs. VexCL provides an overload of abs for vector expressions that tries to do the right thing depending on the result type of the expression. For multivector expressions this is not possible in general case. But I could provide such overload just for multivectors (so that abs(x) works and abs(2 * x) does not). The other way would be to replace a call to abs with a call to fabs in odeint's code. But I am not sure if that is acceptable.

headmyshoulder commented 11 years ago

On 10/31/2013 11:35 AM, Denis Demidov wrote:

The problem with |abs| is that OpenCL only provides it for integral types. With floating point types one should use |fabs|. VexCL provides an overload of |abs| for vector expressions that tries to do the right thing depending on the result type of the expression. For multivector expressions this is not possible in general case. But I could provide such overload just for multivectors (so that |abs(x)| works and |abs(2 * x)| does not). The other way would be to replace a call to |abs| with a call to |fabs| in odeint's code. But I am not sure if that is acceptable.

abs must return a vexcl vector or a vexcl expression, hence x = abs( y ) means that x[i] = abs( y[i] ) for all i.

ddemidov commented 11 years ago

I understand that, its just direct translation to OpenCL code is impossible:

x[i] = abs(y[i]);

will result in OpenCL kernel compile error if y is a vector of float/double values.

ddemidov commented 11 years ago

@agerlach, could you please check if the code compiles with 29cb4d8adc6df3a794419a29f216eae273df136c? You can get the patched odeint version by

git clone -b vexcl-mvec-abs https://github.com/ddemidov/odeint-v2

If that does not, could you please provide a minimal but complete example that should compile, but leads to compile errors?

agerlach commented 11 years ago

@ddemidov , I'm still gettting many errors. They are included below. For an example, make the following changes to https://github.com/headmyshoulder/odeint-v2/blob/master/libs/numeric/odeint/examples/vexcl/lorenz_ensemble.cpp

Change line 76 from

runge_kutta4< state_type > stepper;

to

typedef runge_kutta_cash_karp54<state_type> error_stepper_type;

And line 79 from

integrate_const( stepper , sys_func( R ) , X , 0.0 , t_max , dt );

to

size_t steps = integrate_adaptive(make_controlled<error_stepper_type>(1.0e-10,1.0e-6),sys_func(R),X,0.0,t_max,dt);

Errors: Description Resource Path Location Type no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive] vexclTry line 155, external location: /usr/local/include/boost/range/concepts.hpp C/C++ Problem no type named ‘reference’ in ‘struct boost::detail::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ vexclTry line 157, external location: /usr/local/include/boost/range/concepts.hpp C/C++ Problem [ skipping 6 instantiation contexts ] vexclTry line 50, external location: /usr/local/include/boost/concept/detail/general.hpp C/C++ Problem no type named ‘reference’ in ‘struct boost::detail::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ vexclTry line 160, external location: /usr/local/include/boost/range/concepts.hpp C/C++ Problem [ skipping 13 instantiation contexts ] vexclTry line 45, external location: /usr/local/include/boost/concept/detail/has_constraints.hpp C/C++ Problem no ‘operator++(int)’ declared for postfix ‘++’ [-fpermissive] vexclTry line 127, external location: /usr/local/include/boost/range/concepts.hpp C/C++ Problem [ skipping 2 instantiation contexts ] vexclTry line 66, external location: /usr/local/include/boost/numeric/odeint/util/copy.hpp C/C++ Problem no type named ‘value_type’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ vexclTry line 381, external location: /usr/include/c++/4.6/bits/stl_algobase.h C/C++ Problem no type named ‘iterator_category’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ vexclTry line 377, external location: /usr/include/c++/4.6/bits/stl_algobase.h C/C++ Problem no type named ‘value_type’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::element> >’ vexclTry line 376, external location: /usr/include/c++/4.6/bits/stl_algobase.h C/C++ Problem no type named ‘value_type’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ vexclTry line 375, external location: /usr/include/c++/4.6/bits/stl_algobase.h C/C++ Problem [ skipping 11 instantiation contexts ] vexclTry line 50, external location: /usr/local/include/boost/concept/detail/general.hpp C/C++ Problem make: *\ [adam.o] Error 1 vexclTry C/C++ Problem no type named ‘iterator_category’ in ‘struct boost::detail::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ vexclTry line 159, external location: /usr/local/include/boost/iterator/iterator_categories.hpp C/C++ Problem no type named ‘iterator_category’ in ‘struct std::iterator_traits<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ vexclTry line 384, external location: /usr/include/c++/4.6/bits/stl_algobase.h C/C++ Problem [ skipping 10 instantiation contexts ] vexclTry line 259, external location: /usr/local/include/boost/range/concepts.hpp C/C++ Problem no type named ‘type’ in ‘struct boost::iterator_traversal<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ vexclTry line 122, external location: /usr/local/include/boost/range/concepts.hpp C/C++ Problem no type named ‘type’ in ‘struct boost::iterator_traversal<vex::multivector<double, 3ul>::iterator_type<const vex::multivector<double, 3ul>, vex::multivector<double, 3ul>::const_element> >’ vexclTry line 116, external location: /usr/local/include/boost/range/concepts.hpp C/C++ Problem

ddemidov commented 11 years ago

I am able to compile and run the modified lorenz_ensemble example with 2099a1224f45d2703910d13dfa4acb30e2cabc48.

git clone -b vexcl-mvec-copy https://github.com/ddemidov/odeint-v2

Does this output meaningful results for your problem?

headmyshoulder commented 11 years ago

On 10/31/2013 01:17 PM, Denis Demidov wrote:

I understand that, its just direct translation to OpenCL code is impossible:

x[i] = abs(y[i]);

will result in OpenCL kernel compile error if y is a vector of |float|/|double| values.

We could provide a method elementwise_abs (maybe with a better name) with a default implementation like

template< typename T > T elementwise_abs( T a ) { using std::abs; return abs( a ); }

This one could then be specialized by vexcl or other libraries and even be used with expression templates. @ddemidov would this be sufficient for you to adapt the controlled steppers?

ddemidov commented 11 years ago

I have already provided the specialization of abs that works with vex:multivector in 29cb4d8adc6df3a794419a29f216eae273df136c. Those seem to work fine, so I don't think it is worth adding elementwise_abs() and making odeint use it.

headmyshoulder commented 11 years ago

On 10/31/2013 05:00 PM, Denis Demidov wrote:

I have already provided the specialization of |abs| that works with |vex:multivector| in 29cb4d8 https://github.com/headmyshoulder/odeint-v2/commit/29cb4d8adc6df3a794419a29f216eae273df136c. Those seem to work fine, so I don't think it is worth adding |elementwise_abs()| and making odeint use it.

Ok, I see. My idea with elementwise_abs is to make it an odeint function which can and should be overloaded. The problem might be that an library overloads or implements abs in the L2 sense and then it can't be used with odeint anymore, at least not in the controlled steppers.

ddemidov commented 11 years ago

Well, if you decide to go with an elementwise_abs(), I'll be happy to provide a vexcl specialization for it :).

agerlach commented 11 years ago

I am able to compile and run the modified lorenz_ensemble example with 2099a12.

git clone -b vexcl-mvec-copy https://github.com/ddemidov/odeint-v2 Does this output meaningful results for your problem?

This seems to be working and, on initial inspection, the results are as expected.

ddemidov commented 11 years ago

I've made a pull request containing the necessary changes (#108).