MueLu  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MueLu_GeometricInterpolationPFactory_kokkos_decl.hpp
Go to the documentation of this file.
1 // @HEADER
2 // *****************************************************************************
3 // MueLu: A package for multigrid based preconditioning
4 //
5 // Copyright 2012 NTESS and the MueLu contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef MUELU_GEOMETRICINTERPOLATIONPFACTORY_KOKKOS_DECL_HPP
11 #define MUELU_GEOMETRICINTERPOLATIONPFACTORY_KOKKOS_DECL_HPP
12 
13 // Teuchos includes for dense linear algebra
17 
18 #include "Xpetra_CrsGraph_fwd.hpp"
19 
20 #include "MueLu_PFactory.hpp"
21 #include "MueLu_Level_fwd.hpp"
23 
24 namespace MueLu {
25 
26 template <class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
28 #undef MUELU_GEOMETRICINTERPOLATIONPFACTORY_KOKKOS_SHORT
29 #include "MueLu_UseShortNames.hpp"
30 
31  public:
32  // Declare useful types
35  using device_type = typename Node::device_type;
36  using execution_space = typename Node::execution_space;
37 #if KOKKOS_VERSION >= 40799
38  using impl_scalar_type = typename KokkosKernels::ArithTraits<real_type>::val_type;
39 #else
40  using impl_scalar_type = typename Kokkos::ArithTraits<real_type>::val_type;
41 #endif
42  using coord_view_type = typename Kokkos::View<impl_scalar_type**,
43  Kokkos::LayoutLeft,
45 
47 
48 
51 
55 
57 
59 
60 
61  void DeclareInput(Level& fineLevel, Level& coarseLevel) const;
62 
64 
66 
67 
68  void Build(Level& fineLevel, Level& coarseLevel) const;
69  void BuildP(Level& fineLevel, Level& coarseLevel) const;
70 
72 
74 
75 
80 
82  coord_view_type fineCoordView,
83  coord_view_type coarseCoordView);
84 
85  KOKKOS_INLINE_FUNCTION
86  void operator()(const LO nodeIdx) const;
87 
88  }; // struct coarseCoordinatesBuilderFunctor
89 
91 
92  void BuildConstantP(RCP<Matrix>& P, RCP<const CrsGraph>& prolongatorGraph, RCP<Matrix>& A) const;
93 
94  private:
95  void BuildLinearP(RCP<Matrix>& A, RCP<const CrsGraph>& prolongatorGraph,
96  RCP<realvaluedmultivector_type>& fineCoordinates,
97  RCP<realvaluedmultivector_type>& ghostCoordinates,
98  const int numDimensions, RCP<Matrix>& P) const;
99  void ComputeLinearInterpolationStencil(const int numDimensions, const int numInterpolationPoints,
100  const Array<Array<real_type> > coord,
101  Array<real_type>& stencil) const;
102  void GetInterpolationFunctions(const LO numDimensions,
103  const Teuchos::SerialDenseVector<LO, real_type> parametricCoordinates,
104  real_type functions[4][8]) const;
105 
106 }; // class GeometricInterpolationPFactory_kokkos
107 
108 } // namespace MueLu
109 
110 #define MUELU_GEOMETRICINTERPOLATIONPFACTORY_KOKKOS_SHORT
111 #endif // MUELU_GEOMETRICINTERPOLATIONPFACTORY_KOKKOS_DECL_HPP
coarseCoordinatesBuilderFunctor(RCP< IndexManager_kokkos > geoData, coord_view_type fineCoordView, coord_view_type coarseCoordView)
LocalOrdinal LO
void GetInterpolationFunctions(const LO numDimensions, const Teuchos::SerialDenseVector< LO, real_type > parametricCoordinates, real_type functions[4][8]) const
void Build(Level &fineLevel, Level &coarseLevel) const
Build an object with this factory.
typename Teuchos::ScalarTraits< SC >::coordinateType real_type
typename Kokkos::ArithTraits< real_type >::val_type impl_scalar_type
Class that holds all level-specific information.
Definition: MueLu_Level.hpp:63
void ComputeLinearInterpolationStencil(const int numDimensions, const int numInterpolationPoints, const Array< Array< real_type > > coord, Array< real_type > &stencil) const
typename Kokkos::View< impl_scalar_type **, Kokkos::LayoutLeft, device_type > coord_view_type
void BuildConstantP(RCP< Matrix > &P, RCP< const CrsGraph > &prolongatorGraph, RCP< Matrix > &A) const
void BuildP(Level &fineLevel, Level &coarseLevel) const
Abstract Build method.
void BuildLinearP(RCP< Matrix > &A, RCP< const CrsGraph > &prolongatorGraph, RCP< realvaluedmultivector_type > &fineCoordinates, RCP< realvaluedmultivector_type > &ghostCoordinates, const int numDimensions, RCP< Matrix > &P) const
RCP< const ParameterList > GetValidParameterList() const
Return a const parameter list of valid parameters that setParameterList() will accept.
Container class for mesh layout and indices calculation.
Factory that provides an interface for a concrete implementation of a prolongation operator...
void DeclareInput(Level &fineLevel, Level &coarseLevel) const
Input.