diff --git a/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C b/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C index e595cc9561..a0cf90b80b 100644 --- a/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C +++ b/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C @@ -989,14 +989,14 @@ void Foam::conformalVoronoiMesh::limitDisplacement // If dispPt is outside bounding box then displacement cuts boundary limit = true; - Info<< "bb limit" << endl; + Info<< " bb limit" << endl; } else if (geometryToConformTo_.findSurfaceAnyIntersection(pt, dispPt)) { // Full surface penetration test limit = true; - Info<< "intersection limit" << endl; + Info<< " intersection limit" << endl; } else { @@ -1004,23 +1004,33 @@ void Foam::conformalVoronoiMesh::limitDisplacement // Within twice the local surface point pair insertion distance is // considered "too close" + scalar searchDistanceSqr = sqr + ( + 2*vit->targetCellSize() + *cvMeshControls().pointPairDistanceCoeff() + ); + geometryToConformTo_.findSurfaceNearest ( dispPt, - sqr - ( - 2*vit->targetCellSize() - *cvMeshControls().pointPairDistanceCoeff() - ), + searchDistanceSqr, surfHit, hitSurface ); - limit = surfHit.hit(); - - if (limit) + if (surfHit.hit()) { - Info<< "proximity limit" << endl; + Info<< " proximity limit" << endl; + + limit = true; + + if (magSqr(pt - surfHit.hitPoint()) <= searchDistanceSqr) + { + Info<< " Cannot limit displacement, point " << pt + << "closer than tolerance." << endl; + + return; + } } } @@ -2356,8 +2366,6 @@ void Foam::conformalVoronoiMesh::move() // indexing of the tessellation. if (runTime_.outputTime()) { - writeInternalDelaunayVertices(); - writeMesh(false); writeTargetCellSize(); diff --git a/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H b/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H index bed93bd13c..6b3ddd1662 100644 --- a/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H +++ b/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H @@ -430,7 +430,7 @@ public: //- Write the internal Delaunay vertices of the tessellation as a // pointField that may be used to restart the meshing process - void writeInternalDelaunayVertices() const; + void writeInternalDelaunayVertices(bool writeToConstant) const; //- Write polyMesh void writeMesh(bool writeToConstant = true); diff --git a/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshIO.C b/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshIO.C index 797db635f2..86c1817c9f 100644 --- a/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshIO.C +++ b/src/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshIO.C @@ -77,11 +77,11 @@ void Foam::conformalVoronoiMesh::writePoints } -void Foam::conformalVoronoiMesh::writeInternalDelaunayVertices() const +void Foam::conformalVoronoiMesh::writeInternalDelaunayVertices +( + bool writeToConstant +) const { - Info<< nl << " Writing internal Delaunay vertices to pointField " - << "ADD NAME CHOICE ARGUMENT" << endl; - pointField internalDelaunayVertices(number_of_vertices()); label vertI = 0; @@ -101,18 +101,30 @@ void Foam::conformalVoronoiMesh::writeInternalDelaunayVertices() const internalDelaunayVertices.setSize(vertI); - pointIOField internalDVs + IOobject io ( - IOobject + "internalDelaunayVertices", + runTime_.timeName(), + runTime_, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ); + + if (writeToConstant) + { + io = IOobject ( "internalDelaunayVertices", - runTime_.timeName(), + runTime_.constant(), runTime_, IOobject::NO_READ, IOobject::AUTO_WRITE - ), - internalDelaunayVertices - ); + ); + } + + Info<< nl << " Writing " << io.name() << " to " << io.instance() << endl; + + pointIOField internalDVs(io, internalDelaunayVertices); internalDVs.write(); } @@ -128,6 +140,8 @@ void Foam::conformalVoronoiMesh::writeMesh(bool writeToConstant) labelList patchSizes(0); labelList patchStarts(0); + writeInternalDelaunayVertices(writeToConstant); + calcDualMesh ( points, @@ -165,7 +179,6 @@ void Foam::conformalVoronoiMesh::writeMesh(bool writeToConstant) IOobject::NO_READ, IOobject::AUTO_WRITE ); - } else { diff --git a/src/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.C b/src/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.C index befe1db9ae..10c3c87e8d 100644 --- a/src/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.C +++ b/src/conformalVoronoiMesh/relaxationModel/adaptiveLinear/adaptiveLinear.C @@ -59,18 +59,22 @@ scalar adaptiveLinear::relaxation() { if (cvMesh_.time().timeOutputValue() > lastTimeValue_) { + scalar currentRelxation = relaxation_; + relaxation_ -= - (relaxation_ - relaxationEnd_) - /( - ( - cvMesh_.time().endTime().value() - - cvMesh_.time().timeOutputValue() - ) - /(cvMesh_.time().timeOutputValue() - lastTimeValue_) - + 1 - ); + (relaxation_ - relaxationEnd_) + /( + ( + cvMesh_.time().endTime().value() + - cvMesh_.time().timeOutputValue() + ) + /(cvMesh_.time().timeOutputValue() - lastTimeValue_) + + 1 + ); lastTimeValue_ = cvMesh_.time().timeOutputValue(); + + return currentRelxation; } return relaxation_;