66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /* | ||
|  |  [auto_generated] | ||
|  |  boost/numeric/odeint/external/compute/compute_algebra.hpp | ||
|  | 
 | ||
|  |  [begin_description] | ||
|  |  An algebra for Boost.Compute vectors. | ||
|  |  [end_description] | ||
|  | 
 | ||
|  |  Copyright 2009-2011 Karsten Ahnert | ||
|  |  Copyright 2009-2011 Mario Mulansky | ||
|  | 
 | ||
|  |  Distributed under the Boost Software License, Version 1.0. | ||
|  |  (See accompanying file LICENSE_1_0.txt or | ||
|  |  copy at http://www.boost.org/LICENSE_1_0.txt) | ||
|  |  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_ALGEBRA_HPP_DEFINED | ||
|  | #define BOOST_NUMERIC_ODEINT_EXTERNAL_COMPUTE_COMPUTE_ALGEBRA_HPP_DEFINED | ||
|  | 
 | ||
|  | #include <boost/preprocessor/repetition.hpp> | ||
|  | #include <boost/compute.hpp> | ||
|  | 
 | ||
|  | namespace boost { | ||
|  | namespace numeric { | ||
|  | namespace odeint { | ||
|  | 
 | ||
|  | struct compute_algebra | ||
|  | { | ||
|  | 
 | ||
|  | #define BOOST_ODEINT_COMPUTE_STATE_PARAM(z, n, unused)                         \ | ||
|  |             StateType ## n &s ## n, | ||
|  | 
 | ||
|  | #define BOOST_ODEINT_COMPUTE_ALGEBRA(z, n, unused)                             \ | ||
|  |     template< BOOST_PP_ENUM_PARAMS(n, class StateType), class Operation >      \ | ||
|  |     static void for_each ## n(                                                 \ | ||
|  |             BOOST_PP_REPEAT(n, BOOST_ODEINT_COMPUTE_STATE_PARAM, ~)            \ | ||
|  |             Operation op                                                       \ | ||
|  |             )                                                                  \ | ||
|  |     {                                                                          \ | ||
|  |         op( BOOST_PP_ENUM_PARAMS(n, s) );                                      \ | ||
|  |     } | ||
|  | 
 | ||
|  | BOOST_PP_REPEAT_FROM_TO(3, 9, BOOST_ODEINT_COMPUTE_ALGEBRA, ~) | ||
|  | 
 | ||
|  | #undef BOOST_ODEINT_COMPUTE_ALGEBRA | ||
|  | #undef BOOST_ODEINT_COMPUTE_STATE_PARAM | ||
|  | 
 | ||
|  |     template < class S > | ||
|  |     static typename S::value_type norm_inf( const S &s ) { | ||
|  |         typedef typename S::value_type value_type; | ||
|  | 
 | ||
|  |         BOOST_COMPUTE_FUNCTION(value_type, max_abs, (value_type, value_type), | ||
|  |         { | ||
|  |             return max(_1, fabs(_2)); | ||
|  |         }); | ||
|  | 
 | ||
|  |         return boost::compute::accumulate(s.begin(), s.end(), value_type(), max_abs); | ||
|  |     } | ||
|  | }; | ||
|  | } // odeint | ||
|  | } // numeric | ||
|  | } // boost | ||
|  | 
 | ||
|  | #endif |