21 const int NumDimensions,
const int interpolationOrder,
22 const Array<GO> GFineNodesPerDir,
23 const Array<LO> LFineNodesPerDir,
const Array<LO> CoarseRate,
24 const GO MinGlobalIndex)
25 :
IndexManager(comm, coupled, false, NumDimensions, interpolationOrder, GFineNodesPerDir, LFineNodesPerDir) {
27 for (
int dim = 0; dim < 3; ++dim) {
29 if (CoarseRate.size() == 1) {
31 }
else if (CoarseRate.size() == this->numDimensions) {
46 for (
int dim = 0; dim < 3; ++dim) {
65 Array<LO>& ghostedNodeCoarseLIDs, Array<int>& ghostedNodeCoarsePIDs, Array<GO>& ghostedNodeCoarseGIDs)
const {
75 Array<LO> ghostedCoarseNodeCoarseIndices(3), ghostedCoarseNodeFineIndices(3), ijk(3);
76 LO currentIndex = -1, currentCoarseIndex = -1;
78 for (ijk[1] = 0; ijk[1] < this->ghostedNodesPerDir[1]; ++ijk[1]) {
79 for (ijk[0] = 0; ijk[0] < this->ghostedNodesPerDir[0]; ++ijk[0]) {
80 currentIndex = ijk[2] * this->
numGhostedNodes10 + ijk[1] * this->ghostedNodesPerDir[0] + ijk[0];
84 GO myCoarseGID = ghostedCoarseNodeCoarseIndices[0] + ghostedCoarseNodeCoarseIndices[1] * this->
gCoarseNodesPerDir[0] + ghostedCoarseNodeCoarseIndices[2] * this->
gNumCoarseNodes10;
85 ghostedNodeCoarseGIDs[currentIndex] = myCoarseGID;
86 GO myGID = 0, factor[3] = {};
90 for (
int dim = 0; dim < 3; ++dim) {
106 (!this->
ghostInterface[1] || ijk[0] != this->ghostedNodesPerDir[0] - 1) &&
107 (!this->
ghostInterface[3] || ijk[1] != this->ghostedNodesPerDir[1] - 1) &&
108 (!this->
ghostInterface[5] || ijk[2] != this->ghostedNodesPerDir[2] - 1)) {
111 currentCoarseIndex = 0;
123 currentCoarseIndex += ijk[0] - 1;
125 currentCoarseIndex += ijk[0];
131 lCoarseNodeCoarseGIDs[currentCoarseIndex] = myCoarseGID;
132 lCoarseNodeFineGIDs[currentCoarseIndex] = myGID;
134 ghostedCoarseNodeFineGIDs[currentIndex] = myGID;
139 RCP<const Map> coarseMap = Xpetra::MapFactory<LO, GO, NO>::Build(fineMap->lib(),
140 this->gNumCoarseNodes,
141 lCoarseNodeCoarseGIDs(),
142 fineMap->getIndexBase(),
145 coarseMap->getRemoteIndexList(ghostedNodeCoarseGIDs(),
146 ghostedNodeCoarsePIDs(),
147 ghostedNodeCoarseLIDs());
154 Array<GO>& coarseNodeCoarseGIDs,
155 Array<GO>& coarseNodeFineGIDs)
const {
161 ArrayView<const GO> fineNodeGIDs = fineCoordinatesMap->getLocalElementList();
163 Array<GO> coarseStartIndices(3);
165 for (
int dim = 0; dim < 3; ++dim) {
169 ++coarseStartIndices[dim];
175 Array<LO> lCoarseIndices(3);
176 Array<GO> gCoarseIndices(3);
183 coarseNodeFineGIDs[coarseLID] = fineNodeGIDs[fineLID];
186 for (
int dim = 0; dim < 3; dim++) {
187 gCoarseIndices[dim] = coarseStartIndices[dim] + lCoarseIndices[dim];
192 coarseNodeCoarseGIDs[coarseLID]);