46 #ifndef MUELU_IPCFACTORY_DECL_HPP
47 #define MUELU_IPCFACTORY_DECL_HPP
58 #include "MueLu_PFactory.hpp"
63 #include "Intrepid2_Basis.hpp"
67 #include <Xpetra_Import.hpp>
111 template <
class Scalar =
double,
class LocalOrdinal =
int,
class GlobalOrdinal = LocalOrdinal,
class Node = KokkosClassic::DefaultNode::DefaultNodeType>
113 #undef MUELU_INTREPIDPCOARSENFACTORY_SHORT
119 typedef Intrepid2::Basis<typename Node::device_type::execution_space,double,double>
Basis;
161 const std::vector<bool> & hi_nodeIsOwned,
163 const std::vector<size_t> &lo_node_in_hi,
164 const Basis &lo_Basis,
165 const std::vector<LocalOrdinal> & hi_to_lo_map,
166 const Teuchos::RCP<const Map> & lo_colMap,
167 const Teuchos::RCP<const Map> & lo_domainMap,
168 const Teuchos::RCP<const Map> & hi_map,
169 Teuchos::RCP<Matrix>& P)
const;
174 const std::vector<bool> & hi_nodeIsOwned,
177 const Basis &lo_basis,
178 const std::vector<LocalOrdinal> & hi_to_lo_map,
179 const Teuchos::RCP<const Map> & lo_colMap,
180 const Teuchos::RCP<const Map> & lo_domainMap,
181 const Teuchos::RCP<const Map> & hi_map,
182 Teuchos::RCP<Matrix>& P)
const;
189 namespace MueLuIntrepid {
191 template<
class Scalar,
class KokkosExecutionSpace>
192 Teuchos::RCP<Intrepid2::Basis<KokkosExecutionSpace,Scalar,Scalar> >
BasisFactory(
const std::string & name,
int & degree);
194 template<
class Scalar,
class KokkosDeviceType>
195 void IntrepidGetLoNodeInHi(
const Teuchos::RCP<Intrepid2::Basis<typename KokkosDeviceType::execution_space,Scalar,Scalar> > &hi_basis,
196 const Teuchos::RCP<Intrepid2::Basis<typename KokkosDeviceType::execution_space,Scalar,Scalar> > &lo_basis,
197 std::vector<size_t> & lo_node_in_hi,
198 Kokkos::DynRankView<Scalar,KokkosDeviceType> & hi_DofCoords);
200 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node,
class LOFieldContainer>
201 void GenerateLoNodeInHiViaGIDs(
const std::vector<std::vector<size_t> > & candidates,
const LOFieldContainer & hi_elemToNode,
202 RCP<
const Xpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > & hi_columnMap,
203 LOFieldContainer & lo_elemToHiRepresentativeNode);
205 template <
class LocalOrdinal,
class LOFieldContainer>
207 const std::vector<bool> & hi_nodeIsOwned,
208 const std::vector<size_t> & lo_node_in_hi,
209 const Teuchos::ArrayRCP<const int> & hi_isDirichlet,
210 LOFieldContainer & lo_elemToNode,
211 std::vector<bool> & lo_nodeIsOwned,
212 std::vector<LocalOrdinal> & hi_to_lo_map,
213 int & lo_numOwnedNodes);
215 template <
class LocalOrdinal,
class LOFieldContainer>
217 const std::vector<bool> & hi_nodeIsOwned,
218 const LOFieldContainer & lo_elemToHiRepresentativeNode,
219 LOFieldContainer & lo_elemToNode,
220 std::vector<bool> & lo_nodeIsOwned,
221 std::vector<LocalOrdinal> & hi_to_lo_map,
222 int & lo_numOwnedNodes);
225 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
226 void GenerateColMapFromImport(
const Xpetra::Import<LocalOrdinal,GlobalOrdinal,Node> & hi_importer,
const std::vector<LocalOrdinal> &hi_to_lo_map,
const Xpetra::Map<LocalOrdinal,GlobalOrdinal,Node> & lo_domainMap,
const size_t & lo_columnMapLength, RCP<
const Xpetra::Map<LocalOrdinal,GlobalOrdinal,Node> > & lo_columnMap);
229 template<
class Basis,
class SCFieldContainer>
230 void GenerateRepresentativeBasisNodes(
const Basis & basis,
const SCFieldContainer & ReferenceNodeLocations,
const double threshold, std::vector<std::vector<size_t> > & representative_node_candidates);
236 template<
class Basis,
class LOFieldContainer,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
238 std::vector<std::vector<LocalOrdinal> > &seeds,
239 const Xpetra::Map<LocalOrdinal,GlobalOrdinal,Node> &rowMap,
240 const Xpetra::Map<LocalOrdinal,GlobalOrdinal,Node> &columnMap);
245 #define MUELU_INTREPIDPCOARSENFACTORY_SHORT
246 #endif // MUELU_INTREPIDPCOARSENFACTORY_DECL_HPP