diff --git a/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C b/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C index 727cd66b64086317eea2cf9ed08167188c56bf85..92e8fd31789d29339c16323ee02f9a26cce664e6 100644 --- a/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C +++ b/src/surfMesh/writers/ensight/ensightSurfaceWriterCollated.C @@ -25,7 +25,42 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Compare time values with tolerance +static const equalOp<scalar> equalTimes(ROOTSMALL); + +// Use ListOps findLower (with tolerance), to find the location of the next +// time-related index. +static label findTimeIndex(const UList<scalar>& list, const scalar val) +{ + label idx = + findLower + ( + list, + val, + 0, + [](const scalar a, const scalar b) + { + return (a < b) && (Foam::mag(b - a) > ROOTSMALL); + } + ); + + if (idx < 0 || !equalTimes(list[idx], val)) + { + ++idx; + } + + return idx; +} + +} // End namespace Foam + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // Foam::fileName Foam::surfaceWriters::ensightWriter::writeCollated() { @@ -119,22 +154,18 @@ Foam::fileName Foam::surfaceWriters::ensightWriter::writeCollated dict.readIfPresent("meshes", meshes); dict.readIfPresent("times", times); - timeIndex = 1+findLower(times, timeValue); + timeIndex = findTimeIndex(times, timeValue); if (meshChanged) { meshValue = timeValue; - meshIndex = 1+findLower(meshes, meshValue); + meshIndex = findTimeIndex(meshes, meshValue); } else if (meshes.size()) { meshIndex = meshes.size()-1; meshValue = meshes.last(); } - else - { - meshIndex = 0; - } } } @@ -142,11 +173,11 @@ Foam::fileName Foam::surfaceWriters::ensightWriter::writeCollated meshes.resize(meshIndex+1, -1); times.resize(timeIndex+1, -1); - if (meshes[meshIndex] != meshValue) - { - stateChanged = true; - } - if (times[timeIndex] != timeValue) + if + ( + !equalTimes(meshes[meshIndex], meshValue) + || !equalTimes(times[timeIndex], timeValue) + ) { stateChanged = true; }