69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								  [auto_generated]
							 | 
						||
| 
								 | 
							
								  boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  [begin_description]
							 | 
						||
| 
								 | 
							
								  vector_space_norm_inf specialization for vexcl
							 | 
						||
| 
								 | 
							
								  [end_description]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Copyright 2009-2013 Karsten Ahnert
							 | 
						||
| 
								 | 
							
								  Copyright 2009-2013 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_VEXCL_VEXCL_NORM_INF_HPP_DEFINED
							 | 
						||
| 
								 | 
							
								#define BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_NORM_INF_HPP_DEFINED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <map>
							 | 
						||
| 
								 | 
							
								#include <algorithm>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <vexcl/vector.hpp>
							 | 
						||
| 
								 | 
							
								#include <vexcl/multivector.hpp>
							 | 
						||
| 
								 | 
							
								#include <vexcl/reductor.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								namespace numeric {
							 | 
						||
| 
								 | 
							
								namespace odeint {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// specialization for vexcl vector
							 | 
						||
| 
								 | 
							
								template <typename T>
							 | 
						||
| 
								 | 
							
								struct vector_space_norm_inf< vex::vector<T> > {
							 | 
						||
| 
								 | 
							
								    typedef T result_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    T operator()( const vex::vector<T> &x ) const {
							 | 
						||
| 
								 | 
							
								        const auto &max = vex::get_reductor<T, vex::MAX>(x.queue_list());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return max( fabs(x) );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// specialization for vexcl multivector
							 | 
						||
| 
								 | 
							
								template <typename T, size_t N>
							 | 
						||
| 
								 | 
							
								struct vector_space_norm_inf< vex::multivector<T, N> > {
							 | 
						||
| 
								 | 
							
								    typedef T result_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    T operator()( const vex::multivector<T, N> &x ) const {
							 | 
						||
| 
								 | 
							
								        const auto &max = vex::get_reductor<T, vex::MAX>(x.queue_list());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Reducing a multivector results in std::array<T, N>:
							 | 
						||
| 
								 | 
							
								        auto m = max( fabs(x) );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // We will need to reduce it even further:
							 | 
						||
| 
								 | 
							
								        return *std::max_element(m.begin(), m.end());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace odeint
							 | 
						||
| 
								 | 
							
								} // namespace numeric
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_VEXCL_VEXCL_NORM_INF_HPP_DEFINED
							 |