46#ifndef MUELU_MATRIXFREETENTATIVEPFACTORY_KOKKOS_DEF_HPP
47#define MUELU_MATRIXFREETENTATIVEPFACTORY_KOKKOS_DEF_HPP
49#include "Kokkos_UnorderedMap.hpp"
53#include "MueLu_Aggregates_kokkos.hpp"
54#include "MueLu_AmalgamationFactory_kokkos.hpp"
55#include "MueLu_AmalgamationInfo_kokkos.hpp"
56#include "MueLu_CoarseMapFactory_kokkos.hpp"
58#include "MueLu_NullspaceFactory_kokkos.hpp"
59#include "MueLu_PerfUtils.hpp"
61#include "MueLu_MatrixFreeTentativeP_kokkos.hpp"
62#include "MueLu_Utilities_kokkos.hpp"
66 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class DeviceType>
68 RCP<ParameterList> validParamList = rcp(
new ParameterList());
70 validParamList->set< RCP<const FactoryBase> >(
"A", Teuchos::null,
"Generating factory of the matrix A");
71 validParamList->set< RCP<const FactoryBase> >(
"Aggregates", Teuchos::null,
"Generating factory of the aggregates");
72 validParamList->set< RCP<const FactoryBase> >(
"Nullspace", Teuchos::null,
"Generating factory of the nullspace");
73 validParamList->set< RCP<const FactoryBase> >(
"Scaled Nullspace", Teuchos::null,
"Generating factory of the scaled nullspace");
74 validParamList->set< RCP<const FactoryBase> >(
"UnAmalgamationInfo", Teuchos::null,
"Generating factory of UnAmalgamationInfo");
75 validParamList->set< RCP<const FactoryBase> >(
"CoarseMap", Teuchos::null,
"Generating factory of the coarse map");
76 validParamList->set< RCP<const FactoryBase> >(
"Coordinates", Teuchos::null,
"Generating factory of the coordinates");
79 ParameterList norecurse;
80 norecurse.disableRecursiveValidation();
81 validParamList->set<ParameterList> (
"matrixmatrix: kernel params", norecurse,
"MatrixMatrix kernel parameters");
83 return validParamList;
86 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class DeviceType>
89 const ParameterList& pL = GetParameterList();
91 std::string nspName =
"Nullspace";
92 if(pL.isParameter(
"Nullspace name")) nspName = pL.get<std::string>(
"Nullspace name");
94 Input(fineLevel,
"Aggregates");
95 Input(fineLevel, nspName);
96 Input(fineLevel,
"UnAmalgamationInfo");
97 Input(fineLevel,
"CoarseMap");
100 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class DeviceType>
102 return BuildP(fineLevel, coarseLevel);
105 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class DeviceType>
109 const ParameterList& pL = GetParameterList();
110 std::string nspName =
"Nullspace";
111 if(pL.isParameter(
"Nullspace name")) nspName = pL.get<std::string>(
"Nullspace name");
113 auto aggregates = Get< RCP<Aggregates_kokkos> > (fineLevel,
"Aggregates");
114 auto amalgInfo = Get< RCP<AmalgamationInfo_kokkos> > (fineLevel,
"UnAmalgamationInfo");
115 auto fineNullspace = Get< RCP<MultiVector> > (fineLevel, nspName);
116 auto coarseMap = Get< RCP<const Map> > (fineLevel,
"CoarseMap");
117 Teuchos::RCP<const Map> fineMap = fineNullspace->getMap();
120 if (aggregates->AggregatesCrossProcessors())
121 TEUCHOS_TEST_FOR_EXCEPTION(
true,
Exceptions::RuntimeError,
"MatrixFreeTentativePFactory does not support aggregates that cross processors!");
123 size_t NSDim = fineNullspace->getNumVectors();
124 RCP<MultiVector> coarseNullspace = MultiVectorFactory::Build(coarseMap, NSDim);
127 P->apply(*fineNullspace,*coarseNullspace,Teuchos::TRANS,1.0,0.0);
129 Set(coarseLevel,
"Nullspace", coarseNullspace);
130 Set(coarseLevel,
"P", P);
135#define MUELU_MATRIXFREETENTATIVEPFACTORY_KOKKOS_SHORT
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Exception throws to report errors in the internal logical of the program.
Timer to be used in factories. Similar to Monitor but with additional timers.
Class that holds all level-specific information.
Namespace for MueLu classes and methods.