hannes |
October 4, 2011 17:00 |
tetDecompositionMotionSolver
Hello all,
I have noted some strange behaviour of the laplaceTetDecompositionMotionSolver (autoPtr motionSolver_ in the following snippets). I don't know if this is a bug. Maybe someone can comment on this:
I had expected the following code snippet to store the displacements of all mesh nodes (including boundary mesh points) in "deformedPoints":
Code:
tmp<pointField> deformedPoints = -1.0 * motionSolver_().curPoints();
deformedPoints() += motionSolver_().newPoints();
Unfortunately, only the displacement of the internal mesh points seemed to be right. The displacements of the mesh points on the mesh boundary were zero.
I had to code the following to get the wanted displacements:
Code:
motionSolver_().solve();
tmp<pointField> deformedPoints(new pointField(allPoints().size(), vector::zero));
const tetPointVectorField& motionU=
lookupObject<tetPointVectorField>("motionU");
forAll(allPoints(), ipi)
deformedPoints()[ipi]=motionU.internalField()[ipi] * time().deltaT().value();
forAll(motionU.boundaryField(), patchI)
{
if (isA<fixedValueTetPolyPatchVectorField>(motionU.boundaryField()[patchI]))
{
const labelList& meshPoints=boundaryMesh()[patchI].meshPoints();
const fixedValueTetPolyPatchVectorField& ppatch =
dynamic_cast<const fixedValueTetPolyPatchVectorField&>
(
motionU.boundaryField()[patchI]
);
forAll(meshPoints, mpi)
{
deformedPoints()[meshPoints[mpi]]=
ppatch[mpi] * time().deltaT().value();
}
}
}
This is a quite ugly code. Does someone perhaps knows a more elegant way? I would really appreciate that.
Thanks in advance,
Hannes
|