From f2500a3df5743845c056b324f5666144e6535b42 Mon Sep 17 00:00:00 2001 From: mattijs Date: Fri, 10 Jan 2014 14:36:07 +0000 Subject: [PATCH] ENH: snappyHexMesh: snap region edges to region feature edges --- .../autoHexMeshDriver/autoSnapDriver.C | 338 ++- .../autoHexMeshDriver/autoSnapDriver.H | 171 +- .../autoHexMeshDriver/autoSnapDriverFeature.C | 2062 ++++++++++------- .../layerParameters/layerParameters.C | 36 +- .../layerParameters/layerParameters.H | 80 +- .../medialAxisMeshMover.C | 4 +- .../medialAxisMeshMover.H | 7 +- .../refinementFeatures/refinementFeatures.C | 12 +- 8 files changed, 1660 insertions(+), 1050 deletions(-) diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C index 03017d8f8c..0a1a667c64 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -42,6 +42,7 @@ Description #include "refinementSurfaces.H" #include "unitConversion.H" #include "localPointRegion.H" +#include "PatchTools.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -415,6 +416,66 @@ Foam::pointField Foam::autoSnapDriver::smoothPatchDisplacement return patchDisp; } +//XXXXXXX +Foam::tmp Foam::autoSnapDriver::avg +( + const indirectPrimitivePatch& pp, + const pointField& localPoints +) +{ + const labelListList& pointEdges = pp.pointEdges(); + const edgeList& edges = pp.edges(); + + tmp tavg(new pointField(pointEdges.size(), vector::zero)); + pointField& avg = tavg(); + + forAll(pointEdges, vertI) + { + vector& avgPos = avg[vertI]; + + const labelList& pEdges = pointEdges[vertI]; + + forAll(pEdges, myEdgeI) + { + const edge& e = edges[pEdges[myEdgeI]]; + + label otherVertI = e.otherVertex(vertI); + + avgPos += localPoints[otherVertI]; + } + + avgPos /= pEdges.size(); + } + return tavg; +} +Foam::pointField Foam::autoSnapDriver::smoothLambdaMuPatchDisplacement +( + const motionSmoother& meshMover, + const List& baffles +) +{ + const indirectPrimitivePatch& pp = meshMover.patch(); + pointField newLocalPoints(pp.localPoints()); + + const label iters = 90; + const scalar lambda = 0.33; + const scalar mu = 0.34; + + for (label iter = 0; iter < iters; iter++) + { + // Lambda + newLocalPoints = + (1 - lambda)*newLocalPoints + + lambda*avg(pp, newLocalPoints); + + // Mu + newLocalPoints = + (1 + mu)*newLocalPoints + - mu*avg(pp, newLocalPoints); + } + return newLocalPoints-pp.localPoints(); +} +//XXXXXXX Foam::tmp Foam::autoSnapDriver::edgePatchDist @@ -684,6 +745,10 @@ void Foam::autoSnapDriver::preSmoothPatch } pointField patchDisp(smoothPatchDisplacement(meshMover, baffles)); + //pointField patchDisp + //( + // smoothLambdaMuPatchDisplacement(meshMover, baffles) + //); // The current mesh is the starting mesh to smooth from. meshMover.setDisplacement(patchDisp); @@ -2294,6 +2359,100 @@ Foam::autoPtr Foam::autoSnapDriver::repatchToSurface } +void Foam::autoSnapDriver::detectWarpedFaces +( + const scalar featureCos, + const indirectPrimitivePatch& pp, + + DynamicList