Loading [MathJax]/extensions/TeX/AMSsymbols.js
 Reference documentation for deal.II version 8.5.1
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
cuda_vector.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2016 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii__cuda_vector_h
17 #define dealii__cuda_vector_h
18 
19 #include <deal.II/base/config.h>
20 #include <deal.II/lac/vector_space_vector.h>
21 
22 
23 #ifdef DEAL_II_WITH_CUDA
24 
25 DEAL_II_NAMESPACE_OPEN
26 
27 class CommunicationPatternBase;
28 class IndexSet;
29 template <typename Number> class ReadWriteVector;
30 
31 namespace LinearAlgebra
32 {
33  namespace CUDAWrappers
34  {
43  template <typename Number>
44  class Vector: public VectorSpaceVector<Number>
45  {
46  public:
47  typedef typename VectorSpaceVector<Number>::value_type value_type;
48  typedef typename VectorSpaceVector<Number>::size_type size_type;
49  typedef typename VectorSpaceVector<Number>::real_type real_type;
50 
54  Vector();
55 
59  Vector(const Vector<Number> &V);
60 
71  explicit Vector(const size_type n);
72 
76  ~Vector();
77 
83  void reinit(const size_type n,
84  const bool omit_zeroing_entries = false);
85 
94  virtual void import(const ReadWriteVector<Number> &V,
95  VectorOperation::values operation,
96  std_cxx11::shared_ptr<const CommunicationPatternBase> communication_pattern =
97  std_cxx11::shared_ptr<const CommunicationPatternBase> ()) override;
98 
102  virtual Vector<Number> &operator*= (const Number factor) override;
103 
107  virtual Vector<Number> &operator/= (const Number factor) override;
108 
112  virtual Vector<Number> &operator+= (const VectorSpaceVector<Number> &V) override;
113 
117  virtual Vector<Number> &operator-= (const VectorSpaceVector<Number> &V) override;
118 
122  virtual Number operator* (const VectorSpaceVector<Number> &V) const override;
123 
127  virtual void add(const Number a) override;
128 
132  virtual void add(const Number a, const VectorSpaceVector<Number> &V) override;
133 
137  virtual void add(const Number a, const VectorSpaceVector<Number> &V,
138  const Number b, const VectorSpaceVector<Number> &W) override;
139 
144  virtual void sadd(const Number s, const Number a,
145  const VectorSpaceVector<Number> &V) override;
146 
152  virtual void scale(const VectorSpaceVector<Number> &scaling_factors) override;
153 
157  virtual void equ(const Number a, const VectorSpaceVector<Number> &V) override;
158 
162  virtual value_type mean_value() const override;
163 
168  virtual real_type l1_norm() const override;
169 
174  virtual real_type l2_norm() const override;
175 
180  virtual real_type linfty_norm() const override;
181 
198  virtual Number add_and_dot(const Number a,
199  const VectorSpaceVector<Number> &V,
200  const VectorSpaceVector<Number> &W) override;
201 
205  Number *get_values() const;
206 
210  virtual size_type size() const override;
211 
216  virtual ::IndexSet locally_owned_elements() const override;
217 
221  virtual void print(std::ostream &out,
222  const unsigned int precision=2,
223  const bool scientific=true,
224  const bool across=true) const override;
225 
229  virtual std::size_t memory_consumption() const override;
230 
236  DeclException0(ExcVectorTypeNotCompatible);
237 
238  private:
242  Number *val;
243 
247  size_type n_elements;
248  };
249 
250 
251 
252  // ------------------------------ Inline functions -----------------------------
253  template <typename Number>
254  inline
255  Number *Vector<Number>::get_values() const
256  {
257  return val;
258  }
259 
260 
261 
262  template <typename Number>
263  inline
264  typename Vector<Number>::size_type Vector<Number>::size() const
265  {
266  return n_elements;
267  }
268 
269 
270  template <typename Number>
271  inline
273  {
274  return complete_index_set(n_elements);
275  }
276  }
277 }
278 
279 DEAL_II_NAMESPACE_CLOSE
280 
281 #endif
282 
283 #endif
void scale(const double scaling_factor, Triangulation< dim, spacedim > &triangulation)
Definition: grid_tools.cc:653
virtual size_type size() const
Definition: la_vector.h:336
#define DeclException0(Exception0)
Definition: exceptions.h:541
std_cxx11::enable_if< std_cxx11::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
virtual ::IndexSet locally_owned_elements() const
Definition: la_vector.h:345