ViennaCL - The Vienna Computing Library  1.5.2
norm_inf.hpp
Go to the documentation of this file.
1 #ifndef VIENNACL_LINALG_NORM_INF_HPP_
2 #define VIENNACL_LINALG_NORM_INF_HPP_
3 
4 /* =========================================================================
5  Copyright (c) 2010-2014, Institute for Microelectronics,
6  Institute for Analysis and Scientific Computing,
7  TU Wien.
8  Portions of this software are copyright by UChicago Argonne, LLC.
9 
10  -----------------
11  ViennaCL - The Vienna Computing Library
12  -----------------
13 
14  Project Head: Karl Rupp rupp@iue.tuwien.ac.at
15 
16  (A list of authors and contributors can be found in the PDF manual)
17 
18  License: MIT (X11), see file LICENSE in the base directory
19 ============================================================================= */
20 
25 #include <cmath>
26 #include "viennacl/forwards.h"
27 #include "viennacl/tools/tools.hpp"
29 #include "viennacl/meta/tag_of.hpp"
30 
31 namespace viennacl
32 {
33  //
34  // generic norm_inf function
35  // uses tag dispatch to identify which algorithm
36  // should be called
37  //
38  namespace linalg
39  {
40 
41  #ifdef VIENNACL_WITH_UBLAS
42  // ----------------------------------------------------
43  // UBLAS
44  //
45  template< typename VectorT >
47  typename VectorT::value_type
48  >::type
49  norm_inf(VectorT const& v1)
50  {
52  }
53  #endif
54 
55 
56  // ----------------------------------------------------
57  // STL
58  //
59  template< typename T, typename A >
60  T norm_inf(std::vector<T, A> const & v1)
61  {
62  //std::cout << "stl .. " << std::endl;
63  T result = 0;
64  for (typename std::vector<T, A>::size_type i=0; i<v1.size(); ++i)
65  {
66  if (std::fabs(v1[i]) > result)
67  result = std::fabs(v1[i]);
68  }
69 
70  return result;
71  }
72 
73  // ----------------------------------------------------
74  // VIENNACL
75  //
76  template< typename ScalarType>
81  {
82  //std::cout << "viennacl .. " << std::endl;
85  viennacl::op_norm_inf >(v1, v1);
86  }
87 
88  // with vector expression:
89  template <typename LHS, typename RHS, typename OP>
94  {
97  viennacl::op_norm_inf >(vector, vector);
98  }
99 
100  // with matrix:
101  /*
102  template<typename NumericT, typename F>
103  scalar_expression< const matrix_base<NumericT, F>, const matrix_base<NumericT, F>, op_norm_inf>
104  norm_inf(const matrix<NumericT, F> & A)
105  {
106  return scalar_expression< const matrix_base<NumericT, F>, const matrix_base<NumericT, F>, op_norm_inf>(A, A);
107  }*/
108 
109 
110  } // end namespace linalg
111 } // end namespace viennacl
112 #endif
113 
114 
115 
116 
117 
Simple enable-if variant that uses the SFINAE pattern.
Definition: enable_if.hpp:29
Dispatch facility for distinguishing between ublas, STL and ViennaCL types.
Various little tools used here and there in ViennaCL.
This file provides the forward declarations for the main types used within ViennaCL.
A proxy for scalar expressions (e.g. from inner vector products)
Definition: forwards.h:175
An expression template class that represents a binary operation that yields a vector.
Definition: forwards.h:181
A vector class representing a linear memory sequence on the GPU. Inspired by boost::numeric::ublas::v...
Definition: forwards.h:208
T norm_inf(std::vector< T, A > const &v1)
Definition: norm_inf.hpp:60
viennacl::scalar_expression< const viennacl::vector_expression< const LHS, const RHS, OP >, const viennacl::vector_expression< const LHS, const RHS, OP >, viennacl::op_norm_inf > norm_inf(viennacl::vector_expression< const LHS, const RHS, OP > const &vector)
Definition: norm_inf.hpp:93
A tag class representing the inf-norm of a vector.
Definition: forwards.h:159
Simple enable-if variant that uses the SFINAE pattern.