143 if(coupled_ && (startIndices[dim + 3] != gFineNodesPerDir[dim] - 1) &&
144 (rem > Teuchos::as<double>(coarseRate[dim]) / 2.0)) {
145 ghostInterface[2*dim + 1] =
true;
148 }
else if(interpolationOrder_ == 1) {
149 if(coupled_ && (startIndices[dim] % coarseRate[dim] != 0 ||
150 startIndices[dim] == gFineNodesPerDir[dim]-1)) {
151 ghostInterface[2*dim] =
true;
153 if(coupled_ && (startIndices[dim + 3] != gFineNodesPerDir[dim] - 1) &&
154 ((lFineNodesPerDir[dim] == 1) || (startIndices[dim + 3] % coarseRate[dim] != 0))) {
155 ghostInterface[2*dim+1] =
true;
164 *out <<
"singleCoarsePoint? " << singleCoarsePoint_ << std::endl;
165 *out <<
"gFineNodesPerDir: " << gFineNodesPerDir << std::endl;
166 *out <<
"lFineNodesPerDir: " << lFineNodesPerDir << std::endl;
167 *out <<
"endRate: " << endRate << std::endl;
168 *out <<
"ghostInterface: {" << ghostInterface[0] <<
", " << ghostInterface[1] <<
", "
169 << ghostInterface[2] <<
", " << ghostInterface[3] <<
", " << ghostInterface[4] <<
", "
170 << ghostInterface[5] <<
"}" << std::endl;
171 *out <<
"meshEdge: {" << meshEdge[0] <<
", " << meshEdge[1] <<
", "
172 << meshEdge[2] <<
", " << meshEdge[3] <<
", " << meshEdge[4] <<
", "
173 << meshEdge[5] <<
"}" << std::endl;
174 *out <<
"startIndices: " << startIndices << std::endl;
175 *out <<
"offsets: " << offsets << std::endl;
176 *out <<
"coarseNodeOffsets: " << coarseNodeOffsets << std::endl;
191 for(
int dim = 0; dim < 3; ++dim) {
192 if(dim < numDimensions) {
196 if( meshEdge[2*dim + 1] ) {
197 lCoarseNodesPerDir[dim] = (lFineNodesPerDir[dim] - endRate[dim] + offsets[dim] - 1)
198 / coarseRate[dim] + 1;
199 if(offsets[dim] == 0) {++lCoarseNodesPerDir[dim];}
203 if(singleCoarsePoint_ && lFineNodesPerDir[dim] - 1 < coarseRate[dim]) {
204 lCoarseNodesPerDir[dim] =1;
207 lCoarseNodesPerDir[dim] = (lFineNodesPerDir[dim] + offsets[dim] - 1) / coarseRate[dim];
208 if(offsets[dim] == 0) {++lCoarseNodesPerDir[dim];}
214 if(interpolationOrder_ == 0) {
215 startGhostedCoarseNode[dim] = startIndices[dim] / coarseRate[dim];
216 int rem = startIndices[dim] % coarseRate[dim];
217 if(rem > (Teuchos::as<double>(coarseRate[dim]) / 2.0) ) {
218 ++startGhostedCoarseNode[dim];
221 if((startIndices[dim] == gFineNodesPerDir[dim] - 1) &&
222 (startIndices[dim] % coarseRate[dim] == 0)) {
223 startGhostedCoarseNode[dim] = startIndices[dim] / coarseRate[dim] - 1;
225 startGhostedCoarseNode[dim] = startIndices[dim] / coarseRate[dim];
231 gCoarseNodesPerDir[dim] = (gFineNodesPerDir[dim] - 1) / coarseRate[dim];
232 if((gFineNodesPerDir[dim] - 1) % coarseRate[dim] == 0) {
233 ++gCoarseNodesPerDir[dim];
235 gCoarseNodesPerDir[dim] += 2;
239 gCoarseNodesPerDir[dim] = 1;
240 lCoarseNodesPerDir[dim] = 1;
245 if(lFineNodesPerDir[dim] < 1) {lCoarseNodesPerDir[dim] = 0;}
246 ghostedNodesPerDir[dim] = lCoarseNodesPerDir[dim];
248 if(ghostInterface[2*dim]) {ghostedNodesPerDir[dim] += 1;}
250 if(ghostInterface[2*dim + 1]) {ghostedNodesPerDir[dim] += 1;}
255 for(
int dim = 0; dim < 3; ++dim) {
256 gCoarseNodesPerDir[dim] = -1;
261 lNumCoarseNodes10 = lCoarseNodesPerDir[0]*lCoarseNodesPerDir[1];
262 lNumCoarseNodes = lNumCoarseNodes10*lCoarseNodesPerDir[2];
263 numGhostedNodes10 = ghostedNodesPerDir[1]*ghostedNodesPerDir[0];
264 numGhostedNodes = numGhostedNodes10*ghostedNodesPerDir[2];
265 numGhostNodes = numGhostedNodes - lNumCoarseNodes;
267 *out <<
"lCoarseNodesPerDir: " << lCoarseNodesPerDir << std::endl;
268 *out <<
"gCoarseNodesPerDir: " << gCoarseNodesPerDir << std::endl;
269 *out <<
"ghostedNodesPerDir: " << ghostedNodesPerDir << std::endl;
270 *out <<
"lNumCoarseNodes=" << lNumCoarseNodes << std::endl;
271 *out <<
"numGhostedNodes=" << numGhostedNodes << std::endl;