diff --git a/applications/utilities/mesh/generation/CV3DMesher/CV3D.C b/applications/utilities/mesh/generation/CV3DMesher/CV3D.C index d4c449fbb0e503b59f36cd723f30982ddd4ad36c..d16bf4cc7232fb8f2944aade5abdaeb21317b0e7 100644 --- a/applications/utilities/mesh/generation/CV3DMesher/CV3D.C +++ b/applications/utilities/mesh/generation/CV3DMesher/CV3D.C @@ -202,28 +202,27 @@ void Foam::CV3D::setVertexAlignmentDirections() alignmentDirections[2] = nt; - Info<< "internal " << vit->internalPoint() - << nl << alignmentDirections - << nl << "v " << vert + alignmentDirections[0] - << nl << "v " << vert + alignmentDirections[1] - << nl << "v " << vert + alignmentDirections[2] - << nl << "v " << vert - << nl << "v " << pHit.hitPoint() - << nl << "v " << closestSpokeHitPoint - << nl << "f 4 1" - << nl << "f 4 2" - << nl << "f 4 3" - << nl << endl; + // Info<< "internal " << vit->internalPoint() + // << nl << alignmentDirections + // << nl << "v " << vert + alignmentDirections[0] + // << nl << "v " << vert + alignmentDirections[1] + // << nl << "v " << vert + alignmentDirections[2] + // << nl << "v " << vert + // << nl << "v " << pHit.hitPoint() + // << nl << "v " << closestSpokeHitPoint + // << nl << "f 4 1" + // << nl << "f 4 2" + // << nl << "f 4 3" + // << nl << endl; } else { - // Using on the primary alignment and the closest of the - // globalAlignmentDirections - - alignmentDirections.setSize(0); - } + // Using only the primary alignment + alignmentDirections.setSize(1); + alignmentDirections[0] = np; + } } else { @@ -257,6 +256,30 @@ Foam::scalar Foam::CV3D::alignmentDistanceWeight(scalar dist) const return w; } + +Foam::scalar Foam::CV3D::faceAreaWeight(scalar faceArea) const +{ + scalar fl2 = 0.2; + + scalar fu2 = 1.0; + + scalar m2 = controls_.minCellSize2; + + if (faceArea < fl2*m2) + { + return 0; + } + else if (faceArea < fu2*m2) + { + return faceArea/((fu2 - fl2)*m2) - 1/((fu2/fl2) - 1); + } + else + { + return 1; + } +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::CV3D::CV3D @@ -563,19 +586,31 @@ void Foam::CV3D::relaxPoints(const scalar relaxation) point dualFaceCentre(dualFace.centre(dualVertices)); - scalar weight = 1.0; + vector rAB = dVA - dVB; + + scalar rABMag = mag(rAB); + + scalar faceArea = dualFace.mag(dualVertices); + + scalar directStiffness = 2.0*relaxation; + + scalar transverseStiffness = 0.0001*relaxation; + + scalar r0 = 0.9*controls_.minCellSize; + + vector dA = -directStiffness*(1 - r0/rABMag) + *faceAreaWeight(faceArea)*rAB; + + vector dT = transverseStiffness*faceAreaWeight(faceArea) + *(dualFaceCentre - 0.5*(dVA - dVB)); if (vA->internalPoint()) { - //displacementAccumulator[vA->index()] = vA->index()*vector::one; - displacementAccumulator[vA->index()] += - relaxation*weight*(dualFaceCentre - dVA); + displacementAccumulator[vA->index()] += dA + dT; } if (vB->internalPoint()) { - //displacementAccumulator[vB->index()] = vB->index()*vector::one; - displacementAccumulator[vB->index()] += - relaxation*weight*(dualFaceCentre - dVB); + displacementAccumulator[vB->index()] += -dA + dT; } } } diff --git a/applications/utilities/mesh/generation/CV3DMesher/CV3D.H b/applications/utilities/mesh/generation/CV3DMesher/CV3D.H index d1d4defd2eca82fe0edf88ae56cf043c059fb048..8825c0a868aca4a84aab7433752dd361b8ca0c98 100644 --- a/applications/utilities/mesh/generation/CV3DMesher/CV3D.H +++ b/applications/utilities/mesh/generation/CV3DMesher/CV3D.H @@ -113,9 +113,6 @@ public: //- Square of nearWallAlignedDist scalar nearWallAlignedDist2; - //- Alignment direction vectors - vectorField globalAlignmentDirections; - //- Chose if the cell orientation should relax during the iterations // or remain fixed to the x-y directions Switch relaxOrientation; @@ -253,6 +250,8 @@ private: const vector& n ); + inline void insertVb(const Vb& v); + inline void movePoint(const Vertex_handle& vh, const point& p); //- Create the initial mesh from the bounding-box @@ -338,6 +337,8 @@ private: scalar alignmentDistanceWeight(scalar dist) const; + scalar faceAreaWeight(scalar faceArea) const; + public: diff --git a/applications/utilities/mesh/generation/CV3DMesher/CV3DI.H b/applications/utilities/mesh/generation/CV3DMesher/CV3DI.H index 308b928aca2633643ef687bc06f0fed90e31f1bc..08eed966789ec0649805ba7631bb2c9d6c89ae3c 100644 --- a/applications/utilities/mesh/generation/CV3DMesher/CV3DI.H +++ b/applications/utilities/mesh/generation/CV3DMesher/CV3DI.H @@ -92,6 +92,26 @@ inline void Foam::CV3D::insertPointPair } +inline void Foam::CV3D::insertVb(const Vb& v) +{ + const Point& Pt(v.point()); + + uint nVert = number_of_vertices(); + + Vertex_handle vh = insert(Pt); + + if (nVert == number_of_vertices()) + { + FatalErrorIn("Foam::CV3D::insert(const Vb& v") + << "Failed to reinsert Vb at " << topoint(Pt) + << endl; + } + + vh->index() = v.index(); + vh->type() = v.type(); +} + + void Foam::CV3D::movePoint(const Vertex_handle& vh, const point& p) { label vi = vh->index(); diff --git a/applications/utilities/mesh/generation/CV3DMesher/controls.C b/applications/utilities/mesh/generation/CV3DMesher/controls.C index 6bf7d89e187db675f5162be8fe2eff3a6f55ed75..6675af0dfe15bf79cc8fec8ca9b72fad4527643d 100644 --- a/applications/utilities/mesh/generation/CV3DMesher/controls.C +++ b/applications/utilities/mesh/generation/CV3DMesher/controls.C @@ -45,7 +45,6 @@ Foam::CV3D::controls::controls(const IOdictionary& controlDict) readScalar(controlDict.lookup("nearWallAlignedDist"))*minCellSize ), nearWallAlignedDist2(Foam::sqr(nearWallAlignedDist)), - globalAlignmentDirections(controlDict.lookup("globalAlignmentDirections")), relaxOrientation(controlDict.lookup("relaxOrientation")), insertSurfaceNearestPointPairs ( @@ -63,17 +62,7 @@ Foam::CV3D::controls::controls(const IOdictionary& controlDict) writeFinalTriangulation(controlDict.lookup("writeFinalTriangulation")), randomiseInitialGrid(controlDict.lookup("randomiseInitialGrid")), randomPerturbation(readScalar(controlDict.lookup("randomPerturbation"))) -{ - if(globalAlignmentDirections.size() < 3) - { - FatalErrorIn("Foam::CV3D::controls::controls") - << "Too many alignment directions specified - 3 at maximum." - << exit(FatalError); - - } - - globalAlignmentDirections /= mag(globalAlignmentDirections); -} +{} // ************************************************************************* // diff --git a/applications/utilities/mesh/generation/CV3DMesher/insertFeaturePoints.C b/applications/utilities/mesh/generation/CV3DMesher/insertFeaturePoints.C index ec62ace251666095ffcef8d286dfcaead5dc13f8..cf4bee2b1edd7b5716423b6b3f9bd8fdec57f6bf 100644 --- a/applications/utilities/mesh/generation/CV3DMesher/insertFeaturePoints.C +++ b/applications/utilities/mesh/generation/CV3DMesher/insertFeaturePoints.C @@ -578,8 +578,6 @@ void Foam::CV3D::insertFeaturePoints() vit++ ) { - // featureConstrainingVertices_[featPtI] = vit; - featureConstrainingVertices_[featPtI] = Vb(vit->point()); featureConstrainingVertices_[featPtI].index() = vit->index(); @@ -602,24 +600,9 @@ void Foam::CV3D::reinsertFeaturePoints() { if (featureConstrainingVertices_.size()) { - forAll(featureConstrainingVertices_, f) { - const Point& fPt(featureConstrainingVertices_[f].point()); - - uint nVert = number_of_vertices(); - - Vertex_handle vh = insert(fPt); - - if (nVert == number_of_vertices()) - { - FatalErrorIn("Foam::CV3D::reinsertFeaturePoints") - << "Failed to reinsert feature point " << topoint(fPt) - << endl; - } - - vh->index() = featureConstrainingVertices_[f].index(); - vh->type() = featureConstrainingVertices_[f].type(); + insertVb(featureConstrainingVertices_[f]); } } else