annotate DEPENDENCIES/generic/include/boost/numeric/odeint/external/thrust/thrust_algebra.hpp @ 76:e58ce2aebd18 emscripten

Merge from default branch
author Chris Cannam
date Thu, 30 Oct 2014 13:25:25 +0000
parents 2665513ce2d3
children c530137014c0
rev   line source
Chris@16 1 /*
Chris@16 2 [auto_generated]
Chris@16 3 boost/numeric/odeint/external/thrust/thrust_algebra.hpp
Chris@16 4
Chris@16 5 [begin_description]
Chris@16 6 An algebra for thrusts device_vectors.
Chris@16 7 [end_description]
Chris@16 8
Chris@16 9 Copyright 2009-2011 Karsten Ahnert
Chris@16 10 Copyright 2009-2011 Mario Mulansky
Chris@16 11
Chris@16 12 Distributed under the Boost Software License, Version 1.0.
Chris@16 13 (See accompanying file LICENSE_1_0.txt or
Chris@16 14 copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 15 */
Chris@16 16
Chris@16 17
Chris@16 18 #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_ALGEBRA_HPP_INCLUDED
Chris@16 19 #define BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_ALGEBRA_HPP_INCLUDED
Chris@16 20
Chris@16 21
Chris@16 22 #include <thrust/device_vector.h>
Chris@16 23 #include <thrust/for_each.h>
Chris@16 24 #include <thrust/iterator/zip_iterator.h>
Chris@16 25
Chris@16 26 #include <boost/range.hpp>
Chris@16 27
Chris@16 28 namespace boost {
Chris@16 29 namespace numeric {
Chris@16 30 namespace odeint {
Chris@16 31
Chris@16 32
Chris@16 33
Chris@16 34 /** ToDO extend until for_each14 for rk78 */
Chris@16 35
Chris@16 36 /*
Chris@16 37 * The const versions are needed for boost.range to work, i.e.
Chris@16 38 * it allows you to do
Chris@16 39 * for_each1( make_pair( vec1.begin() , vec1.begin() + 10 ) , op );
Chris@16 40 */
Chris@16 41
Chris@16 42 struct thrust_algebra
Chris@16 43 {
Chris@16 44 template< class StateType , class Operation >
Chris@16 45 static void for_each1( StateType &s , Operation op )
Chris@16 46 {
Chris@16 47 thrust::for_each( boost::begin(s) , boost::begin(s) , op );
Chris@16 48 }
Chris@16 49
Chris@16 50 template< class StateType1 , class StateType2 , class Operation >
Chris@16 51 static void for_each2( StateType1 &s1 , StateType2 &s2 , Operation op )
Chris@16 52 {
Chris@16 53 thrust::for_each(
Chris@16 54 thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
Chris@16 55 boost::begin(s2) ) ) ,
Chris@16 56 thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
Chris@16 57 boost::end(s2) ) ) ,
Chris@16 58 op);
Chris@16 59 }
Chris@16 60
Chris@16 61 template< class StateType1 , class StateType2 , class StateType3 , class Operation >
Chris@16 62 static void for_each3( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , Operation op )
Chris@16 63 {
Chris@16 64 thrust::for_each(
Chris@16 65 thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
Chris@16 66 boost::begin(s2) ,
Chris@16 67 boost::begin(s3) ) ) ,
Chris@16 68 thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
Chris@16 69 boost::end(s2) ,
Chris@16 70 boost::end(s3) ) ) ,
Chris@16 71 op);
Chris@16 72 }
Chris@16 73
Chris@16 74 template< class StateType1 , class StateType2 , class StateType3 , class StateType4 ,
Chris@16 75 class Operation >
Chris@16 76 static void for_each4( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , StateType4 &s4 ,
Chris@16 77 Operation op )
Chris@16 78 {
Chris@16 79 thrust::for_each(
Chris@16 80 thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
Chris@16 81 boost::begin(s2) ,
Chris@16 82 boost::begin(s3) ,
Chris@16 83 boost::begin(s4) ) ) ,
Chris@16 84 thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
Chris@16 85 boost::end(s2) ,
Chris@16 86 boost::end(s3) ,
Chris@16 87 boost::end(s4) ) ) ,
Chris@16 88 op);
Chris@16 89 }
Chris@16 90
Chris@16 91 template< class StateType1 , class StateType2 , class StateType3 ,
Chris@16 92 class StateType4 , class StateType5 ,class Operation >
Chris@16 93 static void for_each5( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , StateType4 &s4 ,
Chris@16 94 StateType5 &s5 , Operation op )
Chris@16 95 {
Chris@16 96 thrust::for_each(
Chris@16 97 thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
Chris@16 98 boost::begin(s2) ,
Chris@16 99 boost::begin(s3) ,
Chris@16 100 boost::begin(s4) ,
Chris@16 101 boost::begin(s5) ) ) ,
Chris@16 102 thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
Chris@16 103 boost::end(s2) ,
Chris@16 104 boost::end(s3) ,
Chris@16 105 boost::end(s4) ,
Chris@16 106 boost::end(s5) ) ) ,
Chris@16 107 op);
Chris@16 108 }
Chris@16 109
Chris@16 110 template< class StateType1 , class StateType2 , class StateType3 ,
Chris@16 111 class StateType4 , class StateType5 , class StateType6 , class Operation >
Chris@16 112 static void for_each6( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , StateType4 &s4 ,
Chris@16 113 StateType5 &s5 , StateType6 &s6 , Operation op )
Chris@16 114 {
Chris@16 115 thrust::for_each(
Chris@16 116 thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
Chris@16 117 boost::begin(s2) ,
Chris@16 118 boost::begin(s3) ,
Chris@16 119 boost::begin(s4) ,
Chris@16 120 boost::begin(s5) ,
Chris@16 121 boost::begin(s6) ) ) ,
Chris@16 122 thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
Chris@16 123 boost::end(s2) ,
Chris@16 124 boost::end(s3) ,
Chris@16 125 boost::end(s4) ,
Chris@16 126 boost::end(s5) ,
Chris@16 127 boost::end(s6) ) ) ,
Chris@16 128 op);
Chris@16 129 }
Chris@16 130
Chris@16 131 template< class StateType1 , class StateType2 , class StateType3 , class StateType4 ,
Chris@16 132 class StateType5 , class StateType6 , class StateType7 , class Operation >
Chris@16 133 static void for_each7( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , StateType4 &s4 ,
Chris@16 134 StateType5 &s5 , StateType6 &s6 , StateType7 &s7 , Operation op )
Chris@16 135 {
Chris@16 136 thrust::for_each(
Chris@16 137 thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
Chris@16 138 boost::begin(s2) ,
Chris@16 139 boost::begin(s3) ,
Chris@16 140 boost::begin(s4) ,
Chris@16 141 boost::begin(s5) ,
Chris@16 142 boost::begin(s6) ,
Chris@16 143 boost::begin(s7) ) ) ,
Chris@16 144 thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
Chris@16 145 boost::end(s2) ,
Chris@16 146 boost::end(s3) ,
Chris@16 147 boost::end(s4) ,
Chris@16 148 boost::end(s5) ,
Chris@16 149 boost::end(s6) ,
Chris@16 150 boost::end(s7) ) ) ,
Chris@16 151 op);
Chris@16 152 }
Chris@16 153
Chris@16 154 template< class StateType1 , class StateType2 , class StateType3 , class StateType4 ,
Chris@16 155 class StateType5 , class StateType6 , class StateType7 , class StateType8 , class Operation >
Chris@16 156 static void for_each8( StateType1 &s1 , StateType2 &s2 , StateType3 &s3 , StateType4 &s4 ,
Chris@16 157 StateType5 &s5 , StateType6 &s6 , StateType7 &s7 , StateType8 &s8 , Operation op )
Chris@16 158 {
Chris@16 159 thrust::for_each(
Chris@16 160 thrust::make_zip_iterator( thrust::make_tuple( boost::begin(s1) ,
Chris@16 161 boost::begin(s2) ,
Chris@16 162 boost::begin(s3) ,
Chris@16 163 boost::begin(s4) ,
Chris@16 164 boost::begin(s5) ,
Chris@16 165 boost::begin(s6) ,
Chris@16 166 boost::begin(s7) ,
Chris@16 167 boost::begin(s8) ) ) ,
Chris@16 168 thrust::make_zip_iterator( thrust::make_tuple( boost::end(s1) ,
Chris@16 169 boost::end(s2) ,
Chris@16 170 boost::end(s3) ,
Chris@16 171 boost::end(s4) ,
Chris@16 172 boost::end(s5) ,
Chris@16 173 boost::end(s6) ,
Chris@16 174 boost::end(s7) ,
Chris@16 175 boost::end(s8) ) ) ,
Chris@16 176 op);
Chris@16 177 }
Chris@16 178
Chris@16 179
Chris@16 180 template< class Value , class S , class Red >
Chris@16 181 Value reduce( const S &s , Red red , Value init)
Chris@16 182 {
Chris@16 183 return thrust::reduce( boost::begin( s ) , boost::end( s ) , init , red );
Chris@16 184 }
Chris@16 185
Chris@16 186
Chris@16 187
Chris@16 188
Chris@16 189 };
Chris@16 190
Chris@16 191
Chris@16 192 } // odeint
Chris@16 193 } // numeric
Chris@16 194 } // boost
Chris@16 195
Chris@16 196
Chris@16 197
Chris@16 198 #endif // BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_ALGEBRA_HPP_INCLUDED