264 |
|
|
265 |
bool Rectangle::ownSample(int fsType, index_t id) const |
bool Rectangle::ownSample(int fsType, index_t id) const |
266 |
{ |
{ |
267 |
#ifdef ESYS_MPI |
if (getMPISize()==1) |
268 |
|
return true; |
269 |
|
|
270 |
switch (fsType) { |
switch (fsType) { |
271 |
case Nodes: |
case Nodes: |
272 |
case ReducedNodes: //FIXME: reduced |
case ReducedNodes: //FIXME: reduced |
280 |
return (m_dofMap[id%m_NE0+m_N0*(id/m_NE0)] < getNumDOF()); |
return (m_dofMap[id%m_NE0+m_N0*(id/m_NE0)] < getNumDOF()); |
281 |
case FaceElements: |
case FaceElements: |
282 |
case ReducedFaceElements: |
case ReducedFaceElements: |
283 |
|
{ |
284 |
|
// check ownership of face element's first node |
285 |
|
const IndexVector faces = getNumFacesPerBoundary(); |
286 |
|
dim_t n=0; |
287 |
|
for (size_t i=0; i<faces.size(); i++) { |
288 |
|
n+=faces[i]; |
289 |
|
if (id<n) { |
290 |
|
index_t k; |
291 |
|
if (i==1) |
292 |
|
k=m_N0-1; |
293 |
|
else if (i==3) |
294 |
|
k=m_N0*(m_N1-1); |
295 |
|
else |
296 |
|
k=0; |
297 |
|
// determine whether to move right or up |
298 |
|
const index_t delta=(i/2==0 ? m_N0 : 1); |
299 |
|
return (m_dofMap[k+(id-n+faces[i])*delta] < getNumDOF()); |
300 |
|
} |
301 |
|
} |
302 |
|
return false; |
303 |
|
} |
304 |
default: |
default: |
305 |
break; |
break; |
306 |
} |
} |
309 |
msg << "ownSample() not implemented for " |
msg << "ownSample() not implemented for " |
310 |
<< functionSpaceTypeAsString(fsType); |
<< functionSpaceTypeAsString(fsType); |
311 |
throw RipleyException(msg.str()); |
throw RipleyException(msg.str()); |
|
#else |
|
|
return true; |
|
|
#endif |
|
312 |
} |
} |
313 |
|
|
314 |
void Rectangle::setToGradient(escript::Data& out, const escript::Data& cIn) const |
void Rectangle::setToGradient(escript::Data& out, const escript::Data& cIn) const |