37 void Foam::slidingInterface::calcAttachedAddressing()
const
42 <<
" for object " <<
name() <<
" : "
43 <<
"Calculating zone face-cell addressing."
50 clearAttachedAddressing();
60 faceZones[masterFaceZoneID_.
index()]();
63 faceZones[masterFaceZoneID_.
index()];
66 faceZones[masterFaceZoneID_.
index()].flipMap();
68 masterFaceCellsPtr_.reset(
new labelList(masterPatchFaces.size()));
69 auto& mfc = *masterFaceCellsPtr_;
71 forAll(masterPatchFaces, facei)
73 if (masterFlip[facei])
75 mfc[facei] = nei[masterPatchFaces[facei]];
79 mfc[facei] = own[masterPatchFaces[facei]];
86 faceZones[slaveFaceZoneID_.
index()]();
89 faceZones[slaveFaceZoneID_.
index()];
92 faceZones[slaveFaceZoneID_.
index()].flipMap();
94 slaveFaceCellsPtr_.reset(
new labelList(slavePatchFaces.size()));
95 auto& sfc = *slaveFaceCellsPtr_;
97 forAll(slavePatchFaces, facei)
101 sfc[facei] = nei[slavePatchFaces[facei]];
105 sfc[facei] = own[slavePatchFaces[facei]];
110 if (
min(mfc) < 0 ||
min(sfc) < 0)
118 Pout<<
"No cell next to master patch face " << facei
119 <<
". Global face no: " << mfc[facei]
120 <<
" own: " << own[masterPatchFaces[facei]]
121 <<
" nei: " << nei[masterPatchFaces[facei]]
122 <<
" flip: " << masterFlip[facei] <<
endl;
130 Pout<<
"No cell next to slave patch face " << facei
131 <<
". Global face no: " << sfc[facei]
132 <<
" own: " << own[slavePatchFaces[facei]]
133 <<
" nei: " << nei[slavePatchFaces[facei]]
134 <<
" flip: " << slaveFlip[facei] <<
endl;
140 <<
"decoupled mesh or sliding interface definition."
150 *
max(masterPatch.size(), slavePatch.size())
154 const labelList& masterMeshPoints = masterPatch.meshPoints();
156 stickOutFaceMap.
clear();
158 for (
const label pointi : masterMeshPoints)
160 for (
const label facei : pointFaces[pointi])
162 const label zoneIdx = faceZones.whichZone(facei);
168 zoneIdx != masterFaceZoneID_.
index()
169 && zoneIdx != slaveFaceZoneID_.
index()
172 stickOutFaceMap.insert(facei);
177 masterStickOutFacesPtr_.reset(
new labelList(stickOutFaceMap.toc()));
186 const labelList& slaveMeshPoints = slavePatch.meshPoints();
188 stickOutFaceMap.
clear();
190 for (
const label pointi : slaveMeshPoints)
192 for (
const label facei : pointFaces[pointi])
194 const label zoneIdx = faceZones.whichZone(facei);
200 zoneIdx != masterFaceZoneID_.
index()
201 && zoneIdx != slaveFaceZoneID_.
index()
204 stickOutFaceMap.insert(facei);
209 slaveStickOutFacesPtr_.reset(
new labelList(stickOutFaceMap.toc()));
217 stickOutFaceMap.clear();
221 retiredPointMapPtr_.reset
230 cutPointEdgePairMapPtr_.reset
234 faceZones[slaveFaceZoneID_.
index()]().nEdges()
241 <<
"cannot be assembled for object " <<
name()
248 <<
" for object " <<
name() <<
" : "
249 <<
"Finished calculating zone face-cell addressing."
255 void Foam::slidingInterface::clearAttachedAddressing()
const
257 masterFaceCellsPtr_.reset(
nullptr);
258 slaveFaceCellsPtr_.reset(
nullptr);
260 masterStickOutFacesPtr_.reset(
nullptr);
261 slaveStickOutFacesPtr_.reset(
nullptr);
263 retiredPointMapPtr_.reset(
nullptr);
264 cutPointEdgePairMapPtr_.reset(
nullptr);
268 void Foam::slidingInterface::renumberAttachedAddressing
276 const labelList& reverseCellMap = m.reverseCellMap();
278 const labelList& mfc = masterFaceCells();
282 unique_ptr<labelList> newMfcPtr(
new labelList(mfc.size(), -1));
283 auto& newMfc = *newMfcPtr;
286 m.faceZoneFaceMap()[masterFaceZoneID_.index()];
290 label newCelli = reverseCellMap[mfc[mfzRenumber[facei]]];
294 newMfc[facei] = newCelli;
299 unique_ptr<labelList> newSfcPtr(
new labelList(sfc.size(), -1));
300 auto& newSfc = *newSfcPtr;
303 m.faceZoneFaceMap()[slaveFaceZoneID_.index()];
307 label newCelli = reverseCellMap[sfc[sfzRenumber[facei]]];
311 newSfc[facei] = newCelli;
318 if (
min(newMfc) < 0 ||
min(newSfc) < 0)
321 <<
"Error in cell renumbering for object " <<
name()
322 <<
". Some of master cells next "
323 <<
"to the interface have been removed."
330 const labelList& reverseFaceMap = m.reverseFaceMap();
333 const labelList& msof = masterStickOutFaces();
335 unique_ptr<labelList> newMsofPtr(
new labelList(msof.size(), -1));
336 auto& newMsof = *newMsofPtr;
340 label newFacei = reverseFaceMap[msof[facei]];
344 newMsof[facei] = newFacei;
349 const labelList& ssof = slaveStickOutFaces();
351 unique_ptr<labelList> newSsofPtr(
new labelList(ssof.size(), -1));
352 auto& newSsof = *newSsofPtr;
356 label newFacei = reverseFaceMap[ssof[facei]];
360 newSsof[facei] = newFacei;
367 if (
min(newMsof) < 0 ||
min(newSsof) < 0)
370 <<
"Error in face renumbering for object " <<
name()
371 <<
". Some of stick-out next "
372 <<
"to the interface have been removed."
378 const Map<label> rpm = retiredPointMap();
380 unique_ptr<Map<label>> newRpmPtr(
new Map<label>(rpm.size()));
381 auto& newRpm = *newRpmPtr;
384 const labelList& reversePointMap = m.reversePointMap();
388 const label key = reversePointMap[iter.key()];
389 const label val = reversePointMap[iter.val()];
394 if (key < 0 || val < 0)
397 <<
"Error in retired point numbering for object "
398 <<
name() <<
". Some of master "
399 <<
"points have been removed."
404 newRpm.insert(key, val);
408 const Map<Pair<edge>> cpepm = cutPointEdgePairMap();
410 unique_ptr<Map<Pair<edge>>> newCpepmPtr(
new Map<Pair<edge>>(cpepm.size()));
411 auto& newCpepm = *newCpepmPtr;
415 const label key = reversePointMap[iter.key()];
417 const Pair<edge>& oldPe = iter.val();
420 const label ms = reversePointMap[oldPe.first().start()];
421 const label
me = reversePointMap[oldPe.first().end()];
423 const label ss = reversePointMap[oldPe.second().start()];
424 const label se = reversePointMap[oldPe.second().end()];
429 if (key < 0 || ms < 0 ||
me < 0 || ss < 0 || se < 0)
432 <<
"Error in cut point edge pair map numbering for object "
433 <<
name() <<
". Some of master points have been removed."
438 newCpepm.insert(key, Pair<edge>(edge(ms,
me), edge(ss, se)));
441 if (!projectedSlavePointsPtr_)
444 <<
"Error in projected point numbering for object " <<
name()
449 const pointField& projectedSlavePoints = *projectedSlavePointsPtr_;
451 unique_ptr<pointField> newProjectedSlavePointsPtr
455 auto& newProjectedSlavePoints = *newProjectedSlavePointsPtr;
458 m.faceZonePointMap()[slaveFaceZoneID_.index()];
460 forAll(newProjectedSlavePoints, pointi)
462 if (sfzPointRenumber[pointi] > -1)
464 newProjectedSlavePoints[pointi] =
465 projectedSlavePoints[sfzPointRenumber[pointi]];
470 clearAttachedAddressing();
472 projectedSlavePointsPtr_.reset(
nullptr);
474 masterFaceCellsPtr_ = std::move(newMfcPtr);
475 slaveFaceCellsPtr_ = std::move(newSfcPtr);
477 masterStickOutFacesPtr_ = std::move(newMsofPtr);
478 slaveStickOutFacesPtr_ = std::move(newSsofPtr);
480 retiredPointMapPtr_ = std::move(newRpmPtr);
481 cutPointEdgePairMapPtr_ = std::move(newCpepmPtr);
482 projectedSlavePointsPtr_ = std::move(newProjectedSlavePointsPtr);
488 if (!masterFaceCellsPtr_)
491 <<
"Master zone face-cell addressing not available for object "
496 return *masterFaceCellsPtr_;
502 if (!slaveFaceCellsPtr_)
505 <<
"Slave zone face-cell addressing not available for object "
510 return *slaveFaceCellsPtr_;
514 const Foam::labelList& Foam::slidingInterface::masterStickOutFaces()
const
516 if (!masterStickOutFacesPtr_)
519 <<
"Master zone stick-out face addressing not available for object "
524 return *masterStickOutFacesPtr_;
528 const Foam::labelList& Foam::slidingInterface::slaveStickOutFaces()
const
530 if (!slaveStickOutFacesPtr_)
533 <<
"Slave zone stick-out face addressing not available for object "
538 return *slaveStickOutFacesPtr_;
544 if (!retiredPointMapPtr_)
547 <<
"Retired point map not available for object " <<
name()
551 return *retiredPointMapPtr_;
556 Foam::slidingInterface::cutPointEdgePairMap()
const
558 if (!cutPointEdgePairMapPtr_)
561 <<
"Retired point map not available for object " <<
name()
565 return *cutPointEdgePairMapPtr_;