ViennaCL - The Vienna Computing Library: viennacl/linalg/norm_frobenius.hpp Source File

ViennaCL - The Vienna Computing Library 1.7.1 Free open-source GPU-accelerated linear algebra and solver library. |

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
norm_frobenius.hpp
Go to the documentation of this file.
1 #ifndef VIENNACL_LINALG_NORM_FROBENIUS_HPP_
2 #define VIENNACL_LINALG_NORM_FROBENIUS_HPP_
3
4 /* =========================================================================
5 Copyright (c) 2010-2016, 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 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"
28 #include "viennacl/meta/enable_if.hpp"
29 #include "viennacl/meta/tag_of.hpp"
30
31 namespace viennacl
32 {
33 //
34 // generic norm_frobenius 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 >
46 typename viennacl::enable_if< viennacl::is_ublas< typename viennacl::traits::tag_of< VectorT >::type >::value,
47 typename VectorT::value_type
48 >::type
49 norm_frobenius(VectorT const& v1)
50 {
51 return boost::numeric::ublas::norm_frobenius(v1);
52 }
53 #endif
54
55
56 // ----------------------------------------------------
57 // VIENNACL
58 //
59 template<typename NumericT>
60 scalar_expression< const matrix_base<NumericT>, const matrix_base<NumericT>, op_norm_frobenius>
61 norm_frobenius(const matrix_base<NumericT> & A)
62 {
63 return scalar_expression< const matrix_base<NumericT>, const matrix_base<NumericT>, op_norm_frobenius>(A, A);
64 }
65
66 } // end namespace linalg
67 } // end namespace viennacl
68 #endif
69
70
71
72
73
viennacl::enable_if
Simple enable-if variant that uses the SFINAE pattern.
Definition: enable_if.hpp:30
tag_of.hpp
Dispatch facility for distinguishing between ublas, STL and ViennaCL types.
tools.hpp
Various little tools used here and there in ViennaCL.
viennacl::matrix_base< NumericT >
forwards.h
This file provides the forward declarations for the main types used within ViennaCL.
viennacl::scalar_expression
A proxy for scalar expressions (e.g. from inner vector products)
Definition: forwards.h:230
v1
viennacl::vector< float > v1
Definition: global_variables.cpp:60
viennacl::linalg::norm_frobenius
scalar_expression< const matrix_base< NumericT >, const matrix_base< NumericT >, op_norm_frobenius > norm_frobenius(const matrix_base< NumericT > &A)
Definition: norm_frobenius.hpp:61
viennacl::op_norm_frobenius
A tag class representing the Frobenius-norm of a matrix.
Definition: forwards.h:217
enable_if.hpp
Simple enable-if variant that uses the SFINAE pattern.