CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Bugs (
-   -   tetDecompositionMotionSolver (

hannes October 4, 2011 17:00

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":

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:



  tmp<pointField> deformedPoints(new pointField(allPoints().size(), vector::zero));
  const 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&>
      forAll(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 October 7, 2011 14:03

Ok, I got it. It should be like this to work as expected:


tmp<pointField> deformedPoints = -1.0 * motionSolver_().curPoints();
deformedPoints() += motionSolver_().newPoints();

The BCs of the motionU field should be updated _after_ querying curPoints()

All times are GMT -4. The time now is 13:46.