particle: Fixed AMI displacement check for transformations
Resolves bug report https://bugs.openfoam.org/view.php?id=3212
This commit is contained in:
@ -369,38 +369,9 @@ void Foam::particle::hitCyclicAMIPatch
|
|||||||
// register as incomplete
|
// register as incomplete
|
||||||
facei_ = tetFacei_;
|
facei_ = tetFacei_;
|
||||||
|
|
||||||
// Get the receive patch data
|
|
||||||
vector receiveNormal, receiveDisplacement;
|
|
||||||
if (onBoundaryFace())
|
|
||||||
{
|
|
||||||
patchData(receiveNormal, receiveDisplacement);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
receiveNormal = receiveCpp.faceNormals()[receiveFacei];
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the displacement points into the receiving face then issue a warning
|
|
||||||
// and remove the particle
|
|
||||||
if
|
|
||||||
(
|
|
||||||
onBoundaryFace()
|
|
||||||
&& ((displacement - fraction*receiveDisplacement) & receiveNormal) > 0
|
|
||||||
)
|
|
||||||
{
|
|
||||||
td.keepParticle = false;
|
|
||||||
WarningInFunction
|
|
||||||
<< "Particle transfer from " << cyclicAMIPolyPatch::typeName
|
|
||||||
<< " patches " << cpp.name() << " to " << receiveCpp.name()
|
|
||||||
<< " failed at position " << pos << " and with displacement "
|
|
||||||
<< (displacement - fraction*receiveDisplacement) << nl
|
|
||||||
<< " The displacement points into both the source and receiving "
|
|
||||||
<< "faces, so the tracking cannot proceed" << nl
|
|
||||||
<< " The particle has been removed" << nl << endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Transform the properties
|
// Transform the properties
|
||||||
|
vector displacementT = displacement;
|
||||||
|
|
||||||
const vectorTensorTransform AMITransform =
|
const vectorTensorTransform AMITransform =
|
||||||
receiveCpp.owner()
|
receiveCpp.owner()
|
||||||
? receiveCpp.AMITransforms()[receiveAMIi]
|
? receiveCpp.AMITransforms()[receiveAMIi]
|
||||||
@ -408,6 +379,7 @@ void Foam::particle::hitCyclicAMIPatch
|
|||||||
if (AMITransform.hasR())
|
if (AMITransform.hasR())
|
||||||
{
|
{
|
||||||
transformProperties(AMITransform.R());
|
transformProperties(AMITransform.R());
|
||||||
|
displacementT = transform(AMITransform.R(), displacementT);
|
||||||
}
|
}
|
||||||
else if (AMITransform.t() != vector::zero)
|
else if (AMITransform.t() != vector::zero)
|
||||||
{
|
{
|
||||||
@ -423,6 +395,7 @@ void Foam::particle::hitCyclicAMIPatch
|
|||||||
: receiveCpp.forwardT()[facei_]
|
: receiveCpp.forwardT()[facei_]
|
||||||
);
|
);
|
||||||
transformProperties(T);
|
transformProperties(T);
|
||||||
|
displacementT = transform(T, displacementT);
|
||||||
}
|
}
|
||||||
else if (receiveCpp.separated())
|
else if (receiveCpp.separated())
|
||||||
{
|
{
|
||||||
@ -434,6 +407,28 @@ void Foam::particle::hitCyclicAMIPatch
|
|||||||
);
|
);
|
||||||
transformProperties(-s);
|
transformProperties(-s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If on a boundary and the displacement points into the receiving face
|
||||||
|
// then issue a warning and remove the particle
|
||||||
|
if (onBoundaryFace())
|
||||||
|
{
|
||||||
|
vector receiveNormal, receiveDisplacement;
|
||||||
|
patchData(receiveNormal, receiveDisplacement);
|
||||||
|
|
||||||
|
if (((displacementT - fraction*receiveDisplacement)&receiveNormal) > 0)
|
||||||
|
{
|
||||||
|
td.keepParticle = false;
|
||||||
|
WarningInFunction
|
||||||
|
<< "Particle transfer from " << cyclicAMIPolyPatch::typeName
|
||||||
|
<< " patches " << cpp.name() << " to " << receiveCpp.name()
|
||||||
|
<< " failed at position " << pos << " and with displacement "
|
||||||
|
<< (displacementT - fraction*receiveDisplacement) << nl
|
||||||
|
<< " The displacement points into both the source and "
|
||||||
|
<< "receiving faces, so the tracking cannot proceed" << nl
|
||||||
|
<< " The particle has been removed" << nl << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user