57 const int NumDimensions,
const int interpolationOrder,
58 const Array<GO> GFineNodesPerDir,
59 const Array<LO> LFineNodesPerDir,
const Array<LO> CoarseRate,
60 const GO MinGlobalIndex) :
61 IndexManager(comm, coupled, false, NumDimensions, interpolationOrder, GFineNodesPerDir, LFineNodesPerDir) {
64 for(
int dim = 0; dim < 3; ++dim) {
66 if(CoarseRate.size() == 1) {
68 }
else if(CoarseRate.size() == this->numDimensions) {
83 for(
int dim = 0; dim < 3; ++dim) {
103 Array<LO>& ghostedNodeCoarseLIDs, Array<int>& ghostedNodeCoarsePIDs, Array<GO>&ghostedNodeCoarseGIDs)
const {
114 Array<LO> ghostedCoarseNodeCoarseIndices(3), ghostedCoarseNodeFineIndices(3), ijk(3);
115 LO currentIndex = -1, currentCoarseIndex = -1;
117 for(ijk[1] = 0; ijk[1] < this->ghostedNodesPerDir[1]; ++ijk[1]) {
118 for(ijk[0] = 0; ijk[0] < this->ghostedNodesPerDir[0]; ++ijk[0]) {
119 currentIndex = ijk[2]*this->
numGhostedNodes10 + ijk[1]*this->ghostedNodesPerDir[0] + ijk[0];
123 GO myCoarseGID = ghostedCoarseNodeCoarseIndices[0]
126 ghostedNodeCoarseGIDs[currentIndex] = myCoarseGID;
127 GO myGID = 0, factor[3] = {};
131 for(
int dim = 0; dim < 3; ++dim) {
136 + ijk[dim]*this->
coarseRate[dim])*factor[dim];
150 (!this->
ghostInterface[1] || ijk[0] != this->ghostedNodesPerDir[0] - 1) &&
151 (!this->
ghostInterface[3] || ijk[1] != this->ghostedNodesPerDir[1] - 1) &&
152 (!this->
ghostInterface[5] || ijk[2] != this->ghostedNodesPerDir[2] - 1)) {
156 currentCoarseIndex = 0;
168 currentCoarseIndex += ijk[0] - 1;
170 currentCoarseIndex += ijk[0];
176 lCoarseNodeCoarseGIDs[currentCoarseIndex] = myCoarseGID;
177 lCoarseNodeFineGIDs[currentCoarseIndex] = myGID;
179 ghostedCoarseNodeFineGIDs[currentIndex] = myGID;
184 RCP<const Map> coarseMap = Xpetra::MapFactory<LO,GO,NO>::Build (fineMap->lib(),
185 this->gNumCoarseNodes,
186 lCoarseNodeCoarseGIDs(),
187 fineMap->getIndexBase(),
190 coarseMap->getRemoteIndexList(ghostedNodeCoarseGIDs(),
191 ghostedNodeCoarsePIDs(),
192 ghostedNodeCoarseLIDs());
199 Array<GO>& coarseNodeCoarseGIDs,
200 Array<GO>& coarseNodeFineGIDs)
const {
207 ArrayView<const GO> fineNodeGIDs = fineCoordinatesMap->getLocalElementList();
209 Array<GO> coarseStartIndices(3);
211 for(
int dim = 0; dim < 3; ++dim) {
214 if(tmp > 0) {++coarseStartIndices[dim];}
219 Array<LO> lCoarseIndices(3);
220 Array<GO> gCoarseIndices(3);
227 coarseNodeFineGIDs[coarseLID] = fineNodeGIDs[fineLID];
230 for(
int dim=0; dim<3; dim++) {
231 gCoarseIndices[dim] = coarseStartIndices[dim] + lCoarseIndices[dim];
236 coarseNodeCoarseGIDs[coarseLID] );