Tpetra parallel linear algebra  Version of the Day
Tpetra_LocalCrsMatrixOperator_decl.hpp
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Tpetra: Templated Linear Algebra Services Package
5 // Copyright (2008) Sandia Corporation
6 //
7 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8 // the U.S. Government retains certain rights in this software.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // ************************************************************************
38 // @HEADER
39 
40 #ifndef TPETRA_LOCALCRSMATRIXOPERATOR_DECL_HPP
41 #define TPETRA_LOCALCRSMATRIXOPERATOR_DECL_HPP
42 
43 #include "Tpetra_LocalCrsMatrixOperator_fwd.hpp"
44 #include "Tpetra_LocalOperator.hpp"
45 #include "KokkosSparse_CrsMatrix.hpp"
46 #include <memory> // std::shared_ptr
47 
48 namespace Tpetra {
49 
59  template<class MultiVectorScalar, class MatrixScalar, class Device>
61  public LocalOperator<MultiVectorScalar, Device> {
62  private:
63  using mv_scalar_type =
65  using matrix_scalar_type =
66  typename LocalOperator<MatrixScalar, Device>::scalar_type;
67  using array_layout =
69  using device_type =
71  using local_ordinal_type =
73  using execution_space = typename Device::execution_space;
74  public:
75  using local_matrix_type =
76  KokkosSparse::CrsMatrix<matrix_scalar_type,
77  local_ordinal_type,
78  device_type>;
79  private:
80  using local_graph_type = typename local_matrix_type::StaticCrsGraphType;
81 
82  public:
83  LocalCrsMatrixOperator (const std::shared_ptr<local_matrix_type>& A);
84  ~LocalCrsMatrixOperator () override = default;
85 
86  void
87  apply (Kokkos::View<const mv_scalar_type**, array_layout,
88  device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> > X,
89  Kokkos::View<mv_scalar_type**, array_layout,
90  device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> > Y,
91  const Teuchos::ETransp mode,
92  const mv_scalar_type alpha,
93  const mv_scalar_type beta) const override;
94 
95  void
97  Kokkos::View<const mv_scalar_type**, array_layout,
98  device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> > X,
99  Kokkos::View<mv_scalar_type**, array_layout,
100  device_type, Kokkos::MemoryTraits<Kokkos::Unmanaged> > Y,
101  const Teuchos::ETransp mode,
102  const mv_scalar_type alpha,
103  const mv_scalar_type beta) const;
104 
105  bool hasTransposeApply () const override;
106 
107  const local_matrix_type& getLocalMatrix () const;
108 
109  private:
110  std::shared_ptr<local_matrix_type> A_;
111  };
112 
113 } // namespace Tpetra
114 
115 #endif // TPETRA_LOCALCRSMATRIXOPERATOR_DECL_HPP
Namespace Tpetra contains the class and methods constituting the Tpetra library.
Abstract interface for local operators (e.g., matrices and preconditioners).
Abstract interface for local operators (e.g., matrices and preconditioners).
void applyImbalancedRows(Kokkos::View< const mv_scalar_type **, array_layout, device_type, Kokkos::MemoryTraits< Kokkos::Unmanaged > > X, Kokkos::View< mv_scalar_type **, array_layout, device_type, Kokkos::MemoryTraits< Kokkos::Unmanaged > > Y, const Teuchos::ETransp mode, const mv_scalar_type alpha, const mv_scalar_type beta) const
Same behavior as apply() above, except give KokkosKernels a hint to use an SPMV algorithm that can ef...
int local_ordinal_type
Default value of Scalar template parameter.