50 if (
debug && (!src.size() || !tgt.size()))
52 Pout<<
"AMI: Patches not on processor: Source faces = "
53 << src.size() <<
", target faces = " << tgt.size()
60 const scalar maxBoundsError = 0.05;
63 boundBox bbSrc(src.points(), src.meshPoints(),
true);
64 boundBox bbTgt(tgt.points(), tgt.meshPoints(),
true);
66 boundBox bbTgtInf(bbTgt);
67 bbTgtInf.inflate(maxBoundsError);
69 if (!bbTgtInf.contains(bbSrc))
72 <<
"Source and target patch bounding boxes are not similar"
74 <<
" source box span : " << bbSrc.span() <<
nl
75 <<
" target box span : " << bbTgt.span() <<
nl
76 <<
" source box : " << bbSrc <<
nl
77 <<
" target box : " << bbTgt <<
nl
78 <<
" inflated target box : " << bbTgtInf <<
endl;
89 extendedTgtMapPtr_.reset(calcProcMap(srcPatch0(), tgtPatch0()));
90 const mapDistribute& map = extendedTgtMapPtr_();
94 globalIndex globalTgtFaces(tgtPatch0().size());
95 distributeAndMergePatches
107 extendedTgtPatchPtr_.reset
120 const auto& src = this->srcPatch();
121 const auto& tgt = this->tgtPatch();
123 bool foundFace =
false;
130 else if (!tgt.size())
133 << src.size() <<
" source faces but no target faces" <<
endl;
139 treePtr_.reset(createTree(tgt));
142 if ((srcFacei == -1) || (tgtFacei == -1))
148 tgtFacei = findTargetFace(facei);
162 <<
"Unable to find initial target face"
172 Pout<<
"AMI: initial target face = " << tgtFacei <<
endl;
188 static label
count = 1;
193 Pout<<
"Face intersection area (" <<
count <<
"):" <<
nl
194 <<
" f1 face = " << f1 <<
nl
195 <<
" f1 pts = " << f1pts <<
nl
196 <<
" f2 face = " << f2 <<
nl
197 <<
" f2 pts = " << f2pts <<
nl
198 <<
" area = " <<
area
203 for (
const point& pt : f1pts)
214 for (
const point& pt : f2pts)
219 const label
n = f1pts.size();
222 os<<
" " <<
n + i + 1;
232 const label srcFacei,
234 const label srcFacePti
237 const auto& src = srcPatch();
239 label targetFacei = -1;
242 const face& srcFace = src[srcFacei];
246 const boundBox bb(srcPts, srcFace,
false);
249 srcFacePti == -1 ? bb.
centre() : srcPts[srcFace[srcFacePti]];
256 targetFacei =
sample.index();
260 Pout<<
"Source point = " << srcPt <<
", Sample point = "
261 <<
sample.hitPoint() <<
", Sample index = " <<
sample.index()
274 const DynamicList<label>& visitedFaces,
275 DynamicList<label>& faceIDs
283 for (
const label nbrFacei : nbrFaces)
286 if (!visitedFaces.found(nbrFacei) && !faceIDs.found(nbrFacei))
291 const scalar cosI = n1 & n2;
295 faceIDs.append(nbrFacei);
305 List<DynamicList<face>>& tris,
310 tris.setSize(
patch.size());
311 magSf.setSize(
patch.size());
332 const DynamicList<face>& triFaces = tris[facei];
334 for (
const face&
f : triFaces)
350 if (!requireMatch_ && distributed())
358 tgtMagSf_ = tgtPatch0().magFaceAreas();
360 for (
const labelList& smap : this->extendedTgtMapPtr_->subMap())
362 UIndirectList<scalar>(tgtMagSf_, smap) =
363 UIndirectList<scalar>(newTgtMagSf, smap);
373 const dictionary&
dict,
374 const bool reverseTarget
377 AMIInterpolation(
dict, reverseTarget),
380 extendedTgtPatchPtr_(nullptr),
382 extendedTgtPoints_(),
383 extendedTgtFaceIDs_(),
384 extendedTgtMapPtr_(nullptr),
388 faceAreaIntersect::triangulationModeNames_.getOrDefault
400 const bool requireMatch,
401 const bool reverseTarget,
402 const scalar lowWeightCorrection,
409 extendedTgtPatchPtr_(nullptr),
411 extendedTgtPoints_(),
412 extendedTgtFaceIDs_(),
413 extendedTgtMapPtr_(nullptr),
424 extendedTgtPatchPtr_(nullptr),
426 extendedTgtPoints_(),
427 extendedTgtFaceIDs_(),
428 extendedTgtMapPtr_(nullptr),
430 triMode_(ami.triMode_)
449 createExtendedTgtPatch();
452 const auto& src = this->srcPatch();
453 const auto& tgt = this->tgtPatch();
456 srcMagSf_.setSize(src.size(), 1.0);
457 tgtMagSf_.setSize(tgt.size(), 1.0);
460 triangulatePatch(src, srcTris_, srcMagSf_);
461 triangulatePatch(tgt, tgtTris_, tgtMagSf_);
467 srcAddress_.setSize(src.size());
468 srcWeights_.setSize(src.size());
469 tgtAddress_.setSize(tgt.size());
470 tgtWeights_.setSize(tgt.size());