39 void Foam::meshToMesh::add
52 template<
class Type,
class CombineOp>
60 if (result.size() != tgtToSrcCellAddr_.size())
63 <<
"Supplied field size is not equal to target mesh size" <<
nl
64 <<
" source mesh = " << srcToTgtCellAddr_.size() <<
nl
65 <<
" target mesh = " << tgtToSrcCellAddr_.size() <<
nl
66 <<
" supplied field = " << result.size()
72 if (singleMeshProc_ == -1)
81 const labelList& srcAddress = tgtToSrcCellAddr_[celli];
82 const scalarList& srcWeight = tgtToSrcCellWght_[celli];
84 if (srcAddress.size())
87 result[celli] *= (1.0 -
sum(srcWeight));
90 label srcI = srcAddress[i];
91 scalar w = srcWeight[i];
92 cbop(result[celli], celli, work[srcI], w);
101 const labelList& srcAddress = tgtToSrcCellAddr_[celli];
102 const scalarList& srcWeight = tgtToSrcCellWght_[celli];
104 if (srcAddress.size())
107 result[celli] *= (1.0 -
sum(srcWeight));
110 label srcI = srcAddress[i];
111 scalar w = srcWeight[i];
112 cbop(result[celli], celli, srcField[srcI], w);
120 template<
class Type,
class CombineOp>
125 const CombineOp& cop,
129 if (result.size() != tgtToSrcCellAddr_.size())
132 <<
"Supplied field size is not equal to target mesh size" <<
nl
133 <<
" source mesh = " << srcToTgtCellAddr_.size() <<
nl
134 <<
" target mesh = " << tgtToSrcCellAddr_.size() <<
nl
135 <<
" supplied field = " << result.size()
141 if (singleMeshProc_ == -1)
146 mapSrcToTgt(srcField, cop, result);
163 const labelList& srcAddress = tgtToSrcCellAddr_[cellI];
164 const scalarList& srcWeight = tgtToSrcCellWght_[cellI];
165 const pointList& srcVec = tgtToSrcCellVec_[cellI];
167 if (srcAddress.size())
169 result[cellI] *= (1.0 -
sum(srcWeight));
172 label srcI = srcAddress[i];
173 scalar w = srcWeight[i];
174 const vector& v = srcVec[i];
175 const Type srcVal = work[srcI]+(workGrad[srcI]&v);
176 cbop(result[cellI], cellI, srcVal, w);
183 if (tgtToSrcCellVec_.empty())
186 mapSrcToTgt(srcField, cop, result);
192 const labelList& srcAddress = tgtToSrcCellAddr_[cellI];
193 const scalarList& srcWeight = tgtToSrcCellWght_[cellI];
194 const pointList& srcVec = tgtToSrcCellVec_[cellI];
196 if (srcAddress.size())
199 result[cellI] *= (1.0 -
sum(srcWeight));
202 label srcI = srcAddress[i];
203 scalar w = srcWeight[i];
204 const vector& v = srcVec[i];
205 const Type srcVal = srcField[srcI]+(srcGradField[srcI]&v);
206 cbop(result[cellI], cellI, srcVal, w);
214 template<
class Type,
class CombineOp>
225 tgtToSrcCellAddr_.size(),
230 mapSrcToTgt(srcField, cop, tresult.
ref());
236 template<
class Type,
class CombineOp>
243 return mapSrcToTgt(tsrcField(), cop);
263 return mapSrcToTgt(tsrcField());
267 template<
class Type,
class CombineOp>
271 const CombineOp& cop,
275 if (result.size() != srcToTgtCellAddr_.size())
278 <<
"Supplied field size is not equal to source mesh size" <<
nl
279 <<
" source mesh = " << srcToTgtCellAddr_.size() <<
nl
280 <<
" target mesh = " << tgtToSrcCellAddr_.size() <<
nl
281 <<
" supplied field = " << result.size()
287 if (singleMeshProc_ == -1)
296 const labelList& tgtAddress = srcToTgtCellAddr_[celli];
297 const scalarList& tgtWeight = srcToTgtCellWght_[celli];
299 if (tgtAddress.size())
301 result[celli] *= (1.0 -
sum(tgtWeight));
304 label tgtI = tgtAddress[i];
305 scalar w = tgtWeight[i];
306 cbop(result[celli], celli, work[tgtI], w);
315 const labelList& tgtAddress = srcToTgtCellAddr_[celli];
316 const scalarList& tgtWeight = srcToTgtCellWght_[celli];
318 if (tgtAddress.size())
320 result[celli] *= (1.0 -
sum(tgtWeight));
323 label tgtI = tgtAddress[i];
324 scalar w = tgtWeight[i];
325 cbop(result[celli], celli, tgtField[tgtI], w);
333 template<
class Type,
class CombineOp>
338 const CombineOp& cop,
342 if (result.size() != srcToTgtCellAddr_.size())
345 <<
"Supplied field size is not equal to source mesh size" <<
nl
346 <<
" source mesh = " << srcToTgtCellAddr_.size() <<
nl
347 <<
" target mesh = " << tgtToSrcCellAddr_.size() <<
nl
348 <<
" supplied field = " << result.size()
354 if (singleMeshProc_ == -1)
359 mapTgtToSrc(tgtField, cop, result);
376 const labelList& tgtAddress = srcToTgtCellAddr_[cellI];
377 const scalarList& tgtWeight = srcToTgtCellWght_[cellI];
378 const pointList& tgtVec = srcToTgtCellVec_[cellI];
380 if (tgtAddress.size())
382 result[cellI] *= (1.0 -
sum(tgtWeight));
385 label tgtI = tgtAddress[i];
386 scalar w = tgtWeight[i];
387 const vector& v = tgtVec[i];
388 const Type tgtVal = work[tgtI]+(workGrad[tgtI]&v);
389 cbop(result[cellI], cellI, tgtVal, w);
398 const labelList& tgtAddress = srcToTgtCellAddr_[cellI];
399 const scalarList& tgtWeight = srcToTgtCellWght_[cellI];
400 const pointList& tgtVec = srcToTgtCellVec_[cellI];
402 if (tgtAddress.size())
404 result[cellI] *= (1.0 -
sum(tgtWeight));
407 label tgtI = tgtAddress[i];
408 scalar w = tgtWeight[i];
409 const vector& v = tgtVec[i];
410 const Type tgtVal = tgtField[tgtI]+(tgtGradField[tgtI]&v);
411 cbop(result[cellI], cellI, tgtVal, w);
419 template<
class Type,
class CombineOp>
430 srcToTgtCellAddr_.size(),
435 mapTgtToSrc(tgtField, cop, tresult.
ref());
441 template<
class Type,
class CombineOp>
448 return mapTgtToSrc(ttgtField(), cop);
472 template<
class Type,
class CombineOp>
473 void Foam::meshToMesh::mapInternalSrcToTgt
476 const CombineOp& cop,
478 const bool secondOrder
498 template<
class Type,
class CombineOp>
499 void Foam::meshToMesh::mapAndOpSrcToTgt
502 const Field<Type>& srcField,
503 Field<Type>& tgtField,
507 tgtField = Type(
Zero);
509 AMI.interpolateToTarget
512 multiplyWeightedOp<Type, CombineOp>(cop),
519 template<
class Type,
class CombineOp>
523 const CombineOp& cop,
525 const bool secondOrder
528 mapInternalSrcToTgt(
field, cop, result, secondOrder);
537 label srcPatchi = srcPatchID_[i];
538 label tgtPatchi = tgtPatchID_[i];
553 AMIList[i].singlePatchProc(),
555 AMIList[i].singlePatchProc() == -1
556 ? &AMIList[i].srcMap()
559 AMIList[i].tgtAddress(),
560 AMIList[i].tgtWeights()
571 mapAndOpSrcToTgt(AMIList[i], srcField, tgtField, cop);
574 forAll(cuttingPatches_, i)
576 label patchi = cuttingPatches_[i];
583 template<
class Type,
class CombineOp>
588 const CombineOp& cop,
589 const bool secondOrder
594 const fvMesh& tgtMesh =
static_cast<const fvMesh&
>(tgtRegion_);
597 const typename fieldType::Boundary& srcBfld =
598 field.boundaryField();
607 label srcPatchi = srcPatchID_[i];
608 label tgtPatchi = tgtPatchID_[i];
610 if (!tgtPatchFields.set(tgtPatchi))
630 forAll(tgtPatchFields, tgtPatchi)
632 if (!tgtPatchFields.set(tgtPatchi))
655 type() +
":interpolate(" +
field.name() +
")",
668 mapSrcToTgt(
field, cop, tresult.ref(), secondOrder);
674 template<
class Type,
class CombineOp>
679 const CombineOp& cop,
680 const bool secondOrder
683 return mapSrcToTgt(tfield(), cop, secondOrder);
692 const bool secondOrder
704 const bool secondOrder
711 template<
class Type,
class CombineOp>
712 void Foam::meshToMesh::mapInternalTgtToSrc
715 const CombineOp& cop,
717 const bool secondOrder
737 template<
class Type,
class CombineOp>
738 void Foam::meshToMesh::mapAndOpTgtToSrc
741 Field<Type>& srcField,
742 const Field<Type>& tgtField,
746 srcField = Type(
Zero);
748 AMI.interpolateToSource
751 multiplyWeightedOp<Type, CombineOp>(cop),
758 template<
class Type,
class CombineOp>
762 const CombineOp& cop,
764 const bool secondOrder
767 mapInternalTgtToSrc(
field, cop, result, secondOrder);
773 label srcPatchi = srcPatchID_[i];
774 label tgtPatchi = tgtPatchID_[i];
790 AMIList[i].singlePatchProc(),
792 AMIList[i].singlePatchProc() == -1
793 ? &AMIList[i].tgtMap()
796 AMIList[i].srcAddress(),
797 AMIList[i].srcWeights()
807 mapAndOpTgtToSrc(AMIList[i], srcField, tgtField, cop);
810 forAll(cuttingPatches_, i)
812 label patchi = cuttingPatches_[i];
819 template<
class Type,
class CombineOp>
824 const CombineOp& cop,
825 const bool secondOrder
830 const fvMesh& srcMesh =
static_cast<const fvMesh&
>(srcRegion_);
833 const typename fieldType::Boundary& tgtBfld =
834 field.boundaryField();
843 label srcPatchi = srcPatchID_[i];
844 label tgtPatchi = tgtPatchID_[i];
846 if (!srcPatchFields.set(tgtPatchi))
866 forAll(srcPatchFields, srcPatchi)
868 if (!srcPatchFields.set(srcPatchi))
891 type() +
":interpolate(" +
field.name() +
")",
904 mapTgtToSrc(
field, cop, tresult.ref(), secondOrder);
910 template<
class Type,
class CombineOp>
915 const CombineOp& cop,
916 const bool secondOrder
919 return mapTgtToSrc(tfield(), cop, secondOrder);
928 const bool secondOrder
940 const bool secondOrder