Tpetra parallel linear algebra  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Tpetra_LocalOperator.hpp
1 // @HEADER
2 // *****************************************************************************
3 // Tpetra: Templated Linear Algebra Services Package
4 //
5 // Copyright 2008 NTESS and the Tpetra contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef TPETRA_LOCALOPERATOR_HPP
11 #define TPETRA_LOCALOPERATOR_HPP
12 
14 #include "Teuchos_BLAS_types.hpp"
15 #if KOKKOS_VERSION >= 40799
16 #include "KokkosKernels_ArithTraits.hpp"
17 #else
18 #include "Kokkos_ArithTraits.hpp"
19 #endif
20 #include <type_traits>
21 
22 namespace Tpetra {
23 
32 template <class Scalar, class Device>
34  public:
35 #if KOKKOS_VERSION >= 40799
36  using scalar_type = typename KokkosKernels::ArithTraits<Scalar>::val_type;
37 #else
38  using scalar_type = typename Kokkos::ArithTraits<Scalar>::val_type;
39 #endif
40  using array_layout = Kokkos::LayoutLeft;
41  using device_type =
42  Kokkos::Device<typename Device::execution_space,
43  typename Device::memory_space>;
44 
45  virtual ~LocalOperator() = default;
46 
47  virtual void
48  apply(Kokkos::View<const scalar_type**, array_layout,
49  device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
50  X,
51  Kokkos::View<scalar_type**, array_layout,
52  device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> >
53  Y,
54  const Teuchos::ETransp mode,
55  const scalar_type alpha,
56  const scalar_type beta) const = 0;
57 
58  virtual bool hasTransposeApply() const { return false; }
59 };
60 
61 } // namespace Tpetra
62 
63 #endif // TPETRA_LOCALOPERATOR_HPP
Abstract interface for local operators (e.g., matrices and preconditioners).
Forward declaration of Tpetra::LocalCrsMatrixOperator.