36 void Foam::slidingInterface::calcAttachedAddressing()
const
41 <<
" for object " <<
name() <<
" : "
42 <<
"Calculating zone face-cell addressing."
49 clearAttachedAddressing();
59 faceZones[masterFaceZoneID_.
index()]();
62 faceZones[masterFaceZoneID_.
index()];
65 faceZones[masterFaceZoneID_.
index()].flipMap();
67 masterFaceCellsPtr_.reset(
new labelList(masterPatchFaces.size()));
68 auto& mfc = *masterFaceCellsPtr_;
70 forAll(masterPatchFaces, facei)
72 if (masterFlip[facei])
74 mfc[facei] = nei[masterPatchFaces[facei]];
78 mfc[facei] = own[masterPatchFaces[facei]];
85 faceZones[slaveFaceZoneID_.
index()]();
88 faceZones[slaveFaceZoneID_.
index()];
91 faceZones[slaveFaceZoneID_.
index()].flipMap();
93 slaveFaceCellsPtr_.reset(
new labelList(slavePatchFaces.size()));
94 auto& sfc = *slaveFaceCellsPtr_;
96 forAll(slavePatchFaces, facei)
100 sfc[facei] = nei[slavePatchFaces[facei]];
104 sfc[facei] = own[slavePatchFaces[facei]];
109 if (
min(mfc) < 0 ||
min(sfc) < 0)
117 Pout<<
"No cell next to master patch face " << facei
118 <<
". Global face no: " << mfc[facei]
119 <<
" own: " << own[masterPatchFaces[facei]]
120 <<
" nei: " << nei[masterPatchFaces[facei]]
121 <<
" flip: " << masterFlip[facei] <<
endl;
129 Pout<<
"No cell next to slave patch face " << facei
130 <<
". Global face no: " << sfc[facei]
131 <<
" own: " << own[slavePatchFaces[facei]]
132 <<
" nei: " << nei[slavePatchFaces[facei]]
133 <<
" flip: " << slaveFlip[facei] <<
endl;
139 <<
"decoupled mesh or sliding interface definition."
149 *
max(masterPatch.size(), slavePatch.size())
153 const labelList& masterMeshPoints = masterPatch.meshPoints();
155 stickOutFaceMap.
clear();
157 for (
const label pointi : masterMeshPoints)
159 for (
const label facei : pointFaces[pointi])
161 const label zoneIdx = faceZones.whichZone(facei);
167 zoneIdx != masterFaceZoneID_.
index()
168 && zoneIdx != slaveFaceZoneID_.
index()
171 stickOutFaceMap.insert(facei);
176 masterStickOutFacesPtr_.reset(
new labelList(stickOutFaceMap.toc()));
185 const labelList& slaveMeshPoints = slavePatch.meshPoints();
187 stickOutFaceMap.
clear();
189 for (
const label pointi : slaveMeshPoints)
191 for (
const label facei : pointFaces[pointi])
193 const label zoneIdx = faceZones.whichZone(facei);
199 zoneIdx != masterFaceZoneID_.
index()
200 && zoneIdx != slaveFaceZoneID_.
index()
203 stickOutFaceMap.insert(facei);
208 slaveStickOutFacesPtr_.reset(
new labelList(stickOutFaceMap.toc()));
216 stickOutFaceMap.clear();
220 retiredPointMapPtr_.reset
224 2*faceZones[slaveFaceZoneID_.
index()]().nPoints()
229 cutPointEdgePairMapPtr_.reset
233 faceZones[slaveFaceZoneID_.
index()]().nEdges()
240 <<
"cannot be assembled for object " <<
name()
247 <<
" for object " <<
name() <<
" : "
248 <<
"Finished calculating zone face-cell addressing."
254 void Foam::slidingInterface::clearAttachedAddressing()
const
256 masterFaceCellsPtr_.reset(
nullptr);
257 slaveFaceCellsPtr_.reset(
nullptr);
259 masterStickOutFacesPtr_.reset(
nullptr);
260 slaveStickOutFacesPtr_.reset(
nullptr);
262 retiredPointMapPtr_.reset(
nullptr);
263 cutPointEdgePairMapPtr_.reset(
nullptr);
267 void Foam::slidingInterface::renumberAttachedAddressing
275 const labelList& reverseCellMap = m.reverseCellMap();
277 const labelList& mfc = masterFaceCells();
281 unique_ptr<labelList> newMfcPtr(
new labelList(mfc.size(), -1));
282 auto& newMfc = *newMfcPtr;
285 m.faceZoneFaceMap()[masterFaceZoneID_.index()];
289 label newCelli = reverseCellMap[mfc[mfzRenumber[facei]]];
293 newMfc[facei] = newCelli;
298 unique_ptr<labelList> newSfcPtr(
new labelList(sfc.size(), -1));
299 auto& newSfc = *newSfcPtr;
302 m.faceZoneFaceMap()[slaveFaceZoneID_.index()];
306 label newCelli = reverseCellMap[sfc[sfzRenumber[facei]]];
310 newSfc[facei] = newCelli;
317 if (
min(newMfc) < 0 ||
min(newSfc) < 0)
320 <<
"Error in cell renumbering for object " <<
name()
321 <<
". Some of master cells next "
322 <<
"to the interface have been removed."
329 const labelList& reverseFaceMap = m.reverseFaceMap();
332 const labelList& msof = masterStickOutFaces();
334 unique_ptr<labelList> newMsofPtr(
new labelList(msof.size(), -1));
335 auto& newMsof = *newMsofPtr;
339 label newFacei = reverseFaceMap[msof[facei]];
343 newMsof[facei] = newFacei;
348 const labelList& ssof = slaveStickOutFaces();
350 unique_ptr<labelList> newSsofPtr(
new labelList(ssof.size(), -1));
351 auto& newSsof = *newSsofPtr;
355 label newFacei = reverseFaceMap[ssof[facei]];
359 newSsof[facei] = newFacei;
366 if (
min(newMsof) < 0 ||
min(newSsof) < 0)
369 <<
"Error in face renumbering for object " <<
name()
370 <<
". Some of stick-out next "
371 <<
"to the interface have been removed."
377 const Map<label> rpm = retiredPointMap();
379 unique_ptr<Map<label>> newRpmPtr(
new Map<label>(rpm.size()));
380 auto& newRpm = *newRpmPtr;
383 const labelList& reversePointMap = m.reversePointMap();
387 const label
key = reversePointMap[iter.key()];
388 const label val = reversePointMap[iter.val()];
393 if (
key < 0 || val < 0)
396 <<
"Error in retired point numbering for object "
397 <<
name() <<
". Some of master "
398 <<
"points have been removed."
403 newRpm.insert(
key, val);
407 const Map<Pair<edge>> cpepm = cutPointEdgePairMap();
409 unique_ptr<Map<Pair<edge>>> newCpepmPtr(
new Map<Pair<edge>>(cpepm.size()));
410 auto& newCpepm = *newCpepmPtr;
414 const label
key = reversePointMap[iter.key()];
416 const Pair<edge>& oldPe = iter.val();
419 const label ms = reversePointMap[oldPe.first().start()];
420 const label
me = reversePointMap[oldPe.first().end()];
422 const label ss = reversePointMap[oldPe.second().start()];
423 const label se = reversePointMap[oldPe.second().end()];
428 if (
key < 0 || ms < 0 ||
me < 0 || ss < 0 || se < 0)
431 <<
"Error in cut point edge pair map numbering for object "
432 <<
name() <<
". Some of master points have been removed."
437 newCpepm.insert(
key, Pair<edge>(edge(ms,
me), edge(ss, se)));
440 if (!projectedSlavePointsPtr_)
443 <<
"Error in projected point numbering for object " <<
name()
448 const pointField& projectedSlavePoints = *projectedSlavePointsPtr_;
450 unique_ptr<pointField> newProjectedSlavePointsPtr
454 auto& newProjectedSlavePoints = *newProjectedSlavePointsPtr;
457 m.faceZonePointMap()[slaveFaceZoneID_.index()];
459 forAll(newProjectedSlavePoints, pointi)
461 if (sfzPointRenumber[pointi] > -1)
463 newProjectedSlavePoints[pointi] =
464 projectedSlavePoints[sfzPointRenumber[pointi]];
469 clearAttachedAddressing();
471 projectedSlavePointsPtr_.reset(
nullptr);
473 masterFaceCellsPtr_ = std::move(newMfcPtr);
474 slaveFaceCellsPtr_ = std::move(newSfcPtr);
476 masterStickOutFacesPtr_ = std::move(newMsofPtr);
477 slaveStickOutFacesPtr_ = std::move(newSsofPtr);
479 retiredPointMapPtr_ = std::move(newRpmPtr);
480 cutPointEdgePairMapPtr_ = std::move(newCpepmPtr);
481 projectedSlavePointsPtr_ = std::move(newProjectedSlavePointsPtr);
487 if (!masterFaceCellsPtr_)
490 <<
"Master zone face-cell addressing not available for object "
495 return *masterFaceCellsPtr_;
501 if (!slaveFaceCellsPtr_)
504 <<
"Slave zone face-cell addressing not available for object "
509 return *slaveFaceCellsPtr_;
513 const Foam::labelList& Foam::slidingInterface::masterStickOutFaces()
const
515 if (!masterStickOutFacesPtr_)
518 <<
"Master zone stick-out face addressing not available for object "
523 return *masterStickOutFacesPtr_;
527 const Foam::labelList& Foam::slidingInterface::slaveStickOutFaces()
const
529 if (!slaveStickOutFacesPtr_)
532 <<
"Slave zone stick-out face addressing not available for object "
537 return *slaveStickOutFacesPtr_;
543 if (!retiredPointMapPtr_)
546 <<
"Retired point map not available for object " <<
name()
550 return *retiredPointMapPtr_;
555 Foam::slidingInterface::cutPointEdgePairMap()
const
557 if (!cutPointEdgePairMapPtr_)
560 <<
"Retired point map not available for object " <<
name()
564 return *cutPointEdgePairMapPtr_;