annotate DEPENDENCIES/generic/include/boost/numeric/odeint/external/thrust/thrust_operations.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*
Chris@16 2 [auto_generated]
Chris@16 3 boost/numeric/odeint/external/thrust/thrust_operations.hpp
Chris@16 4
Chris@16 5 [begin_description]
Chris@16 6 Operations of thrust zipped iterators. Is the counterpart of the thrust_algebra.
Chris@16 7 [end_description]
Chris@16 8
Chris@101 9 Copyright 2010-2013 Mario Mulansky
Chris@101 10 Copyright 2010-2012 Karsten Ahnert
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_OPERATIONS_HPP_INCLUDED
Chris@16 19 #define BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_OPERATIONS_HPP_INCLUDED
Chris@16 20
Chris@16 21 namespace boost {
Chris@16 22 namespace numeric {
Chris@16 23 namespace odeint {
Chris@16 24
Chris@16 25 #include <thrust/tuple.h>
Chris@16 26 #include <thrust/iterator/zip_iterator.h>
Chris@16 27
Chris@16 28 /**ToDo extend to scale_sum13 for rk78 */
Chris@16 29
Chris@16 30 struct thrust_operations
Chris@16 31 {
Chris@16 32 template< class Fac1 = double , class Fac2 = Fac1 >
Chris@16 33 struct scale_sum2
Chris@16 34 {
Chris@16 35 const Fac1 m_alpha1;
Chris@16 36 const Fac2 m_alpha2;
Chris@16 37
Chris@16 38 scale_sum2( const Fac1 alpha1 , const Fac2 alpha2 )
Chris@16 39 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }
Chris@16 40
Chris@16 41 template< class Tuple >
Chris@16 42 __host__ __device__
Chris@16 43 void operator()( Tuple t ) const
Chris@16 44 {
Chris@16 45 thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) + m_alpha2 * thrust::get<2>(t);
Chris@16 46 }
Chris@16 47 };
Chris@16 48
Chris@16 49 template< class Fac1 = double , class Fac2 = Fac1 >
Chris@16 50 struct scale_sum_swap2
Chris@16 51 {
Chris@16 52 const Fac1 m_alpha1;
Chris@16 53 const Fac2 m_alpha2;
Chris@16 54
Chris@16 55 scale_sum_swap2( const Fac1 alpha1 , const Fac2 alpha2 )
Chris@16 56 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }
Chris@16 57
Chris@16 58 template< class Tuple >
Chris@16 59 __host__ __device__
Chris@16 60 void operator()( Tuple t ) const
Chris@16 61 {
Chris@16 62 typename thrust::tuple_element<0,Tuple>::type tmp = thrust::get<0>(t);
Chris@16 63 thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) + m_alpha2 * thrust::get<2>(t);
Chris@16 64 thrust::get<1>(t) = tmp;
Chris@16 65 }
Chris@16 66 };
Chris@16 67
Chris@16 68 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 >
Chris@16 69 struct scale_sum3
Chris@16 70 {
Chris@16 71 const Fac1 m_alpha1;
Chris@16 72 const Fac2 m_alpha2;
Chris@16 73 const Fac3 m_alpha3;
Chris@16 74
Chris@16 75 scale_sum3( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 )
Chris@16 76 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) { }
Chris@16 77
Chris@16 78 template< class Tuple >
Chris@16 79 __host__ __device__
Chris@16 80 void operator()( Tuple t ) const
Chris@16 81 {
Chris@16 82 thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
Chris@16 83 m_alpha2 * thrust::get<2>(t) +
Chris@16 84 m_alpha3 * thrust::get<3>(t);
Chris@16 85 }
Chris@16 86 };
Chris@16 87
Chris@16 88
Chris@16 89 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 >
Chris@16 90 struct scale_sum4
Chris@16 91 {
Chris@16 92 const Fac1 m_alpha1;
Chris@16 93 const Fac2 m_alpha2;
Chris@16 94 const Fac3 m_alpha3;
Chris@16 95 const Fac4 m_alpha4;
Chris@16 96
Chris@16 97 scale_sum4( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 , const Fac4 alpha4 )
Chris@16 98 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ){ }
Chris@16 99
Chris@16 100 template< class Tuple >
Chris@16 101 __host__ __device__
Chris@16 102 void operator()( Tuple t ) const
Chris@16 103 {
Chris@16 104 thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
Chris@16 105 m_alpha2 * thrust::get<2>(t) +
Chris@16 106 m_alpha3 * thrust::get<3>(t) +
Chris@16 107 m_alpha4 * thrust::get<4>(t);
Chris@16 108 }
Chris@16 109 };
Chris@16 110
Chris@16 111
Chris@16 112 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 ,
Chris@16 113 class Fac4 = Fac3 , class Fac5 = Fac4 >
Chris@16 114 struct scale_sum5
Chris@16 115 {
Chris@16 116 const Fac1 m_alpha1;
Chris@16 117 const Fac2 m_alpha2;
Chris@16 118 const Fac3 m_alpha3;
Chris@16 119 const Fac4 m_alpha4;
Chris@16 120 const Fac5 m_alpha5;
Chris@16 121
Chris@16 122 scale_sum5( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 ,
Chris@16 123 const Fac4 alpha4 , const Fac5 alpha5 )
Chris@16 124 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) ,
Chris@16 125 m_alpha4( alpha4 ) , m_alpha5( alpha5 ) { }
Chris@16 126
Chris@16 127 template< class Tuple >
Chris@16 128 __host__ __device__
Chris@16 129 void operator()( Tuple t ) const
Chris@16 130 {
Chris@16 131 thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
Chris@16 132 m_alpha2 * thrust::get<2>(t) +
Chris@16 133 m_alpha3 * thrust::get<3>(t) +
Chris@16 134 m_alpha4 * thrust::get<4>(t) +
Chris@16 135 m_alpha5 * thrust::get<5>(t);
Chris@16 136 }
Chris@16 137 };
Chris@16 138
Chris@16 139
Chris@16 140 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 ,
Chris@16 141 class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 >
Chris@16 142 struct scale_sum6
Chris@16 143 {
Chris@16 144 const Fac1 m_alpha1;
Chris@16 145 const Fac2 m_alpha2;
Chris@16 146 const Fac3 m_alpha3;
Chris@16 147 const Fac4 m_alpha4;
Chris@16 148 const Fac5 m_alpha5;
Chris@16 149 const Fac6 m_alpha6;
Chris@16 150
Chris@16 151 scale_sum6( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 ,
Chris@16 152 const Fac4 alpha4 , const Fac5 alpha5 , const Fac6 alpha6 )
Chris@16 153 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) ,
Chris@16 154 m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) { }
Chris@16 155
Chris@16 156 template< class Tuple >
Chris@16 157 __host__ __device__
Chris@16 158 void operator()( Tuple t ) const
Chris@16 159 {
Chris@16 160 thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
Chris@16 161 m_alpha2 * thrust::get<2>(t) +
Chris@16 162 m_alpha3 * thrust::get<3>(t) +
Chris@16 163 m_alpha4 * thrust::get<4>(t) +
Chris@16 164 m_alpha5 * thrust::get<5>(t) +
Chris@16 165 m_alpha6 * thrust::get<6>(t);
Chris@16 166 }
Chris@16 167 };
Chris@16 168
Chris@16 169
Chris@16 170 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 ,
Chris@16 171 class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 >
Chris@16 172 struct scale_sum7
Chris@16 173 {
Chris@16 174 const Fac1 m_alpha1;
Chris@16 175 const Fac2 m_alpha2;
Chris@16 176 const Fac3 m_alpha3;
Chris@16 177 const Fac4 m_alpha4;
Chris@16 178 const Fac5 m_alpha5;
Chris@16 179 const Fac6 m_alpha6;
Chris@16 180 const Fac7 m_alpha7;
Chris@16 181
Chris@16 182 scale_sum7( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 ,
Chris@16 183 const Fac4 alpha4 , const Fac5 alpha5 , const Fac6 alpha6 , const Fac7 alpha7 )
Chris@16 184 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) ,
Chris@16 185 m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) { }
Chris@16 186
Chris@16 187 template< class Tuple >
Chris@16 188 __host__ __device__
Chris@16 189 void operator()( Tuple t ) const
Chris@16 190 {
Chris@16 191 thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
Chris@16 192 m_alpha2 * thrust::get<2>(t) +
Chris@16 193 m_alpha3 * thrust::get<3>(t) +
Chris@16 194 m_alpha4 * thrust::get<4>(t) +
Chris@16 195 m_alpha5 * thrust::get<5>(t) +
Chris@16 196 m_alpha6 * thrust::get<6>(t) +
Chris@16 197 m_alpha7 * thrust::get<7>(t) ;
Chris@16 198 }
Chris@16 199 };
Chris@16 200
Chris@16 201
Chris@16 202
Chris@16 203
Chris@16 204 template< class Fac1 = double >
Chris@16 205 struct rel_error
Chris@16 206 {
Chris@16 207 const Fac1 m_eps_abs , m_eps_rel , m_a_x , m_a_dxdt;
Chris@16 208
Chris@16 209 rel_error( const Fac1 eps_abs , const Fac1 eps_rel , const Fac1 a_x , const Fac1 a_dxdt )
Chris@16 210 : m_eps_abs( eps_abs ) , m_eps_rel( eps_rel ) , m_a_x( a_x ) , m_a_dxdt( a_dxdt ) { }
Chris@16 211
Chris@16 212
Chris@16 213 template< class Tuple >
Chris@16 214 __host__ __device__
Chris@16 215 void operator()( Tuple t ) const
Chris@16 216 {
Chris@16 217 using std::abs;
Chris@16 218 thrust::get< 0 >( t ) = abs( thrust::get< 0 >( t ) ) /
Chris@16 219 ( m_eps_abs + m_eps_rel * ( m_a_x * abs( thrust::get< 1 >( t ) + m_a_dxdt * abs( thrust::get< 2 >( t ) ) ) ) );
Chris@16 220 }
Chris@16 221
Chris@16 222 typedef void result_type;
Chris@16 223 };
Chris@16 224
Chris@16 225
Chris@16 226 };
Chris@16 227
Chris@16 228 } // odeint
Chris@16 229 } // numeric
Chris@16 230 } // boost
Chris@16 231
Chris@16 232
Chris@16 233 #endif // BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_OPERATIONS_HPP_INCLUDED