44 const List<nearestAndDist>& localInfo,
52 boundBox(tgtPatch.points(), tgtPatch.meshPoints(),
true);
58 const pointField& srcCcs = srcPatch.faceCentres();
61 forAll(localInfo, srcFacei)
66 const scalar r2 = localInfo[srcFacei].second();
72 if (procBbs[proci].overlaps(srcCcs[srcFacei], r2))
74 dynSendMap[proci].append(srcFacei);
84 dynSendMap[proci].shrink();
85 sendMap[proci].transfer(dynSendMap[proci]);
89 Pout<<
"send map - to proc " << proci <<
" sending "
90 << sendMap[proci].size() <<
" elements" <<
endl;
106 autoPtr<indexedOctree<treeType>> tgtTreePtr;
109 tgtTreePtr = this->createTree(tgt);
113 globalIndex globalTgtCells(tgt.size());
123 List<nearestAndDist> localInfo(src.size());
126 const auto& tgtTree = tgtTreePtr();
130 const point& srcCc = srcCcs[srcCelli];
133 test = tgtTree.findNearest(srcCc, GREAT);
138 localInfo[srcCelli].second() =
magSqr(srcCc - test.hitPoint());
139 test.setIndex(globalTgtCells.toGlobal(test.index()));
148 for (
auto& info : localInfo)
150 info.second() = GREAT;
160 autoPtr<mapDistribute> mapPtr = calcFaceMap(localInfo, src, tgt);
161 mapDistribute& map = mapPtr();
163 List<nearestAndDist> remoteInfo(localInfo);
164 map.distribute(remoteInfo);
167 map.distribute(srcCcs);
171 const auto& tgtTree = tgtTreePtr();
178 test = tgtTree.findNearest(srcCcs[i], remoteInfo[i].second());
181 test.setIndex(globalTgtCells.toGlobal(test.index()));
182 testInfo.second() =
magSqr(test.hitPoint() - srcCcs[i]);
183 nearestEqOp()(remoteInfo[i], testInfo);
199 map.constructHasFlip(),
214 srcToTgtAddr.setSize(src.size());
215 srcToTgtWght.setSize(src.size());
216 forAll(srcToTgtAddr, srcFacei)
218 nearestEqOp()(localInfo[srcFacei], remoteInfo[srcFacei]);
219 if (localInfo[srcFacei].second() < maxDistance2_)
221 const label tgtFacei = localInfo[srcFacei].first().index();
222 srcToTgtAddr[srcFacei] =
labelList(1, tgtFacei);
227 List<Map<label>> cMap;
237 const bool reverseTarget
247 const bool requireMatch,
248 const bool reverseTarget,
249 const scalar lowWeightCorrection
260 maxDistance2_(ami.maxDistance2_)
280 const auto& src = this->srcPatch0();
281 const auto& tgt = this->tgtPatch0();
284 srcMagSf_ =
mag(src.faceAreas());
285 tgtMagSf_ =
mag(tgt.faceAreas());
288 bool symmetric_ =
true;
290 if (this->distributed())
315 srcAddress_.setSize(src.size());
316 srcWeights_.setSize(src.size());
320 tgtAddress_.setSize(tgt.size());
321 tgtWeights_.setSize(tgt.size());
327 const auto tgtTreePtr = this->createTree(tgtPatch);
328 const auto& tgtTree = tgtTreePtr();
332 const point& srcCc = srcCcs[srcFacei];
338 && (
magSqr(srcCc - tgtCcs[hit.
index()]) < maxDistance2_)
341 label tgtFacei = hit.
index();
342 srcAddress_[srcFacei] =
labelList(1, tgtFacei);
347 tgtAddress_[tgtFacei] =
labelList(1, srcFacei);
356 <<
"Unable to find target face for source face "
364 const auto srcTreePtr = this->createTree(srcPatch);
365 const auto& srcTree = srcTreePtr();
369 forAll(tgtWeights_, tgtCelli)
371 if (tgtAddress_[tgtCelli].empty())
373 const point& tgtCc = tgtCcs[tgtCelli];
379 && (
magSqr(tgtCc - srcCcs[hit.
index()]) < maxDistance2_)
391 <<
"Unable to find source face for target face "
399 srcWeightsSum_.setSize(srcWeights_.size(), 1);
400 tgtWeightsSum_.setSize(tgtWeights_.size(), 1);