Reference documentation for deal.II version 9.1.0-pre
trilinos_epetra_vector.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2015 - 2018 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.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_trilinos_epetra_vector_h
17 #define dealii_trilinos_epetra_vector_h
18 
19 
20 #include <deal.II/base/config.h>
21 
22 #if defined(DEAL_II_WITH_TRILINOS) && defined(DEAL_II_WITH_MPI)
23 
24 # include <deal.II/base/index_set.h>
25 # include <deal.II/base/subscriptor.h>
26 
27 # include <deal.II/lac/trilinos_epetra_communication_pattern.h>
28 # include <deal.II/lac/vector_operation.h>
29 # include <deal.II/lac/vector_space_vector.h>
30 # include <deal.II/lac/vector_type_traits.h>
31 
32 # include <Epetra_FEVector.h>
33 # include <mpi.h>
34 
35 # include <memory>
36 
37 DEAL_II_NAMESPACE_OPEN
38 
39 namespace LinearAlgebra
40 {
41  // Forward declaration
42  template <typename Number>
43  class ReadWriteVector;
44 
45  namespace EpetraWrappers
46  {
57  class Vector : public VectorSpaceVector<double>, public Subscriptor
58  {
59  public:
63  Vector();
64 
69  Vector(const Vector &V);
70 
77  explicit Vector(const IndexSet &parallel_partitioner,
78  const MPI_Comm &communicator);
79 
86  void
87  reinit(const IndexSet &parallel_partitioner,
88  const MPI_Comm &communicator,
89  const bool omit_zeroing_entries = false);
90 
95  virtual void
97  const bool omit_zeroing_entries = false) override;
98 
104  Vector &
105  operator=(const Vector &V);
106 
111  virtual Vector &
112  operator=(const double s) override;
113 
123  virtual void
124  import(
125  const ReadWriteVector<double> & V,
126  VectorOperation::values operation,
127  std::shared_ptr<const CommunicationPatternBase> communication_pattern =
128  std::shared_ptr<const CommunicationPatternBase>()) override;
129 
133  virtual Vector &
134  operator*=(const double factor) override;
135 
139  virtual Vector &
140  operator/=(const double factor) override;
141 
145  virtual Vector &
146  operator+=(const VectorSpaceVector<double> &V) override;
147 
151  virtual Vector &
152  operator-=(const VectorSpaceVector<double> &V) override;
153 
158  virtual double
159  operator*(const VectorSpaceVector<double> &V) const override;
160 
164  virtual void
165  add(const double a) override;
166 
171  virtual void
172  add(const double a, const VectorSpaceVector<double> &V) override;
173 
178  virtual void
179  add(const double a,
180  const VectorSpaceVector<double> &V,
181  const double b,
182  const VectorSpaceVector<double> &W) override;
183 
188  virtual void
189  sadd(const double s,
190  const double a,
191  const VectorSpaceVector<double> &V) override;
192 
199  virtual void
200  scale(const VectorSpaceVector<double> &scaling_factors) override;
201 
205  virtual void
206  equ(const double a, const VectorSpaceVector<double> &V) override;
207 
211  virtual bool
212  all_zero() const override;
213 
217  virtual double
218  mean_value() const override;
219 
224  virtual double
225  l1_norm() const override;
226 
231  virtual double
232  l2_norm() const override;
233 
238  virtual double
239  linfty_norm() const override;
240 
263  virtual double
264  add_and_dot(const double a,
265  const VectorSpaceVector<double> &V,
266  const VectorSpaceVector<double> &W) override;
271  bool
272  has_ghost_elements() const;
273 
278  virtual size_type
279  size() const override;
280 
284  MPI_Comm
285  get_mpi_communicator() const;
286 
298  virtual ::IndexSet
299  locally_owned_elements() const override;
300 
305  const Epetra_FEVector &
306  trilinos_vector() const;
307 
312  Epetra_FEVector &
313  trilinos_vector();
314 
318  virtual void
319  print(std::ostream & out,
320  const unsigned int precision = 3,
321  const bool scientific = true,
322  const bool across = true) const override;
323 
327  virtual std::size_t
328  memory_consumption() const override;
329 
335 
342 
349  int,
350  << "An error with error number " << arg1
351  << " occurred while calling a Trilinos function");
352 
353  private:
359  void
360  create_epetra_comm_pattern(const IndexSet &source_index_set,
361  const MPI_Comm &mpi_comm);
362 
366  std::unique_ptr<Epetra_FEVector> vector;
367 
372 
377  std::shared_ptr<const CommunicationPattern> epetra_comm_pattern;
378  };
379 
380 
381  inline bool
383  {
384  return false;
385  }
386  } // namespace EpetraWrappers
387 } // namespace LinearAlgebra
388 
389 
393 template <>
394 struct is_serial_vector<LinearAlgebra::EpetraWrappers::Vector> : std::false_type
395 {};
396 
397 DEAL_II_NAMESPACE_CLOSE
398 
399 #endif
400 
401 #endif
virtual double l1_norm() const override
static::ExceptionBase & ExcDifferentParallelPartitioning()
const Epetra_FEVector & trilinos_vector() const
virtual ::IndexSet locally_owned_elements() const override
virtual double l2_norm() const override
virtual size_type size() const override
virtual void scale(const VectorSpaceVector< double > &scaling_factors) override
virtual std::size_t memory_consumption() const override
std::unique_ptr< Epetra_FEVector > vector
virtual void equ(const double a, const VectorSpaceVector< double > &V) override
#define DeclException1(Exception1, type1, outsequence)
Definition: exceptions.h:408
void create_epetra_comm_pattern(const IndexSet &source_index_set, const MPI_Comm &mpi_comm)
virtual Vector & operator*=(const double factor) override
#define DeclException0(Exception0)
Definition: exceptions.h:385
static::ExceptionBase & ExcTrilinosError(int arg1)
static::ExceptionBase & ExcVectorTypeNotCompatible()
void reinit(const IndexSet &parallel_partitioner, const MPI_Comm &communicator, const bool omit_zeroing_entries=false)
std::shared_ptr< const CommunicationPattern > epetra_comm_pattern
virtual void sadd(const double s, const double a, const VectorSpaceVector< double > &V) override
virtual Vector & operator+=(const VectorSpaceVector< double > &V) override
virtual Vector & operator/=(const double factor) override
virtual void print(std::ostream &out, const unsigned int precision=3, const bool scientific=true, const bool across=true) const override
virtual double mean_value() const override
virtual Vector & operator-=(const VectorSpaceVector< double > &V) override
virtual double operator*(const VectorSpaceVector< double > &V) const override
virtual void add(const double a) override
virtual double linfty_norm() const override
virtual double add_and_dot(const double a, const VectorSpaceVector< double > &V, const VectorSpaceVector< double > &W) override