46 #ifndef MUELU_GENERALGEOMETRICPFACTORY_DECL_HPP 47 #define MUELU_GENERALGEOMETRICPFACTORY_DECL_HPP 49 #include <Teuchos_SerialDenseVector.hpp> 51 #include <Xpetra_MultiVector.hpp> 52 #include <Xpetra_Matrix_fwd.hpp> 55 #include "MueLu_PFactory.hpp" 62 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
115 template <
class Scalar =
double,
class LocalOrdinal =
int,
class GlobalOrdinal = LocalOrdinal,
class Node = KokkosClassic::DefaultNode::DefaultNodeType>
117 #undef MUELU_GENERALGEOMETRICPFACTORY_SHORT 134 RCP<const ParameterList> GetValidParameterList()
const;
139 void DeclareInput(
Level& fineLevel,
Level& coarseLevel)
const;
146 void Build (
Level& fineLevel,
Level& coarseLevel)
const;
147 void BuildP(
Level& fineLevel,
Level& coarseLevel)
const;
157 std::string meshLayout =
"Global Lexicographic";
159 LO lNumFineNodes = -1, lNumCoarseNodes = -1, lNumGhostNodes = -1,lNumGhostedNodes = -1;
160 LO myBlock = -1, numBlocks = -1, lNumFineNodes10 = -1;
161 GO gNumFineNodes = -1, gNumCoarseNodes = -1, gNumFineNodes10 = -1, minGlobalIndex = -1;
163 Array<LO> lFineNodesPerDir, lCoarseNodesPerDir,
offsets, ghostedCoarseNodesPerDir;
164 Array<GO>
startIndices, gFineNodesPerDir, gCoarseNodesPerDir, startGhostedCoarseNode;
166 bool ghostInterface[6] = {
false};
169 coarseRate.resize(3);
171 lFineNodesPerDir.resize(3);
172 lCoarseNodesPerDir.resize(3);
174 ghostedCoarseNodesPerDir.resize(3);
175 startIndices.resize(6);
176 gFineNodesPerDir.resize(3);
177 gCoarseNodesPerDir.resize(3);
178 startGhostedCoarseNode.resize(3);
201 void MeshLayoutInterface(
const int interpolationOrder,
const LO blkSize,
202 RCP<const Map> fineCoordsMap, RCP<GeometricData> myGeometry,
203 RCP<NodesIDs> ghostedCoarseNodes,
204 Array<Array<GO> >& lCoarseNodesGIDs)
const;
206 void GetCoarsePoints(
const int interpolationOrder,
const LO blkSize,
207 RCP<const Map> fineCoordsMap, RCP<GeometricData> myGeometry,
208 RCP<NodesIDs> ghostedCoarseNodes,
209 Array<Array<GO> >& lCoarseNodesGIDs)
const;
211 void MakeGeneralGeometricP(RCP<GeometricData> myGeo,
212 const RCP<Xpetra::MultiVector<double,LO,GO,NO> >& fCoords,
213 const LO nnzP,
const LO dofsPerNode,
214 RCP<const Map>& stridedDomainMapP,
215 RCP<Matrix> & Amat, RCP<Matrix>& P,
216 RCP<Xpetra::MultiVector<double,LO,GO,NO> >& cCoords,
217 RCP<NodesIDs> ghostedCoarseNodes, Array<Array<GO> > coarseNodesGIDs,
218 int interpolationOrder)
const;
220 void ComputeStencil(
const LO numDimension,
const Array<GO> currentNodeIndices,
221 const Array<GO> coarseNodeIndices,
const LO rate[3],
222 const Array<Array<double> > coord,
const int interpolationOrder,
223 std::vector<double>& stencil)
const;
225 void ComputeConstantInterpolationStencil(
const LO numDimension,
226 const Array<GO> currentNodeIndices,
227 const Array<GO> coarseNodeIndices,
228 const LO rate[3], std::vector<double>& stencil)
const;
230 void ComputeLinearInterpolationStencil(
const LO numDimension,
const Array<Array<double> > coord,
231 std::vector<double>& stencil)
const;
232 void GetInterpolationFunctions(
const LO numDimension,
233 const Teuchos::SerialDenseVector<LO,double> parameters,
234 double functions[4][8])
const;
236 void sh_sort_permute(
237 const typename Teuchos::Array<LocalOrdinal>::iterator& first1,
238 const typename Teuchos::Array<LocalOrdinal>::iterator& last1,
239 const typename Teuchos::Array<LocalOrdinal>::iterator& first2,
240 const typename Teuchos::Array<LocalOrdinal>::iterator& last2)
const;
243 const typename Teuchos::Array<LocalOrdinal>::iterator& first1,
244 const typename Teuchos::Array<LocalOrdinal>::iterator& last1,
245 const typename Teuchos::Array<LocalOrdinal>::iterator& first2,
246 const typename Teuchos::Array<LocalOrdinal>::iterator& last2)
const;
248 void GetGIDLocalLexicographic(
const GO i,
const GO j,
const GO k,
249 const Array<LO> coarseNodeFineIndices,
250 const RCP<GeometricData> myGeo,
const LO myRankIndex,
const LO pi,
251 const LO pj,
const LO pk,
252 const typename std::vector<std::vector<GO> >::iterator blockStart,
253 const typename std::vector<std::vector<GO> >::iterator blockEnd,
254 GO& myGID, LO& myPID, LO& myLID)
const;
260 #define MUELU_GENERALGEOMETRICPFACTORY_SHORT 261 #endif // MUELU_GENERALGEOMETRICPFACTORY_DECL_HPP
std::vector< GO > colInds
virtual ~GeneralGeometricPFactory()
Destructor.
GeneralGeometricPFactory()
Constructor.
std::vector< std::vector< GO > > meshData
Namespace for MueLu classes and methods.
Prolongator factory performing geometric coarsening.
Class that holds all level-specific information.
Factory that provides an interface for a concrete implementation of a prolongation operator...