diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C index 22e24d2b1b262dc3171ba6bc72e29a0efb71cdb3..7713abee57068346423fa92610d80da0990486fe 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C @@ -1262,6 +1262,9 @@ void Foam::autoLayerDriver::calculateLayerThickness << setf(ios_base::left) << setw(maxPatchNameLen) << "-----" << setw(0) << " ----- ------ --------- -------" << endl; + + const PackedBoolList isMasterPoint(syncTools::getMasterPoints(mesh)); + forAll(patchIDs, i) { label patchI = patchIDs[i]; @@ -1270,23 +1273,29 @@ void Foam::autoLayerDriver::calculateLayerThickness scalar sumThickness = 0; scalar sumNearWallThickness = 0; + label nMasterPoints = 0; forAll(meshPoints, patchPointI) { - label ppPointI = pp.meshPointMap()[meshPoints[patchPointI]]; + label meshPointI = meshPoints[patchPointI]; + if (isMasterPoint[meshPointI]) + { + label ppPointI = pp.meshPointMap()[meshPointI]; - sumThickness += thickness[ppPointI]; - sumNearWallThickness += layerParams.firstLayerThickness - ( - patchNLayers[ppPointI], - firstLayerThickness[ppPointI], - finalLayerThickness[ppPointI], - thickness[ppPointI], - expansionRatio[ppPointI] - ); + sumThickness += thickness[ppPointI]; + sumNearWallThickness += layerParams.firstLayerThickness + ( + patchNLayers[ppPointI], + firstLayerThickness[ppPointI], + finalLayerThickness[ppPointI], + thickness[ppPointI], + expansionRatio[ppPointI] + ); + nMasterPoints++; + } } - label totNPoints = returnReduce(meshPoints.size(), sumOp<label>()); + label totNPoints = returnReduce(nMasterPoints, sumOp<label>()); // For empty patches, totNPoints is 0. scalar avgThickness = 0; diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H index ee3ced9b219d72eb920424e3a74f73357b7c8e84..6a7272ad13119a5958362733ea987b5534af603b 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H @@ -403,6 +403,7 @@ class autoLayerDriver void smoothField ( const motionSmoother& meshMover, + const PackedBoolList& isMasterPoint, const PackedBoolList& isMasterEdge, const labelList& meshEdges, const scalarField& fieldMin, @@ -414,6 +415,7 @@ class autoLayerDriver void smoothPatchNormals ( const motionSmoother& meshMover, + const PackedBoolList& isMasterPoint, const PackedBoolList& isMasterEdge, const labelList& meshEdges, const label nSmoothDisp, @@ -424,6 +426,7 @@ class autoLayerDriver void smoothNormals ( const label nSmoothDisp, + const PackedBoolList& isMasterPoint, const PackedBoolList& isMasterEdge, const labelList& fixedPoints, pointVectorField& normals diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C index 07210a87f04fc6cd437f49dbcb278fa77dbc576e..bb6058c46f619687d5a5f9d779347da17a0f42cb 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C @@ -103,6 +103,7 @@ void Foam::autoLayerDriver::sumWeights void Foam::autoLayerDriver::smoothField ( const motionSmoother& meshMover, + const PackedBoolList& isMasterPoint, const PackedBoolList& isMasterEdge, const labelList& meshEdges, const scalarField& fieldMin, @@ -162,10 +163,14 @@ void Foam::autoLayerDriver::smoothField // Do residual calculation every so often. if ((iter % 10) == 0) { - Info<< " Iteration " << iter << " residual " - << gSum(mag(field-average)) - /returnReduce(average.size(), sumOp<label>()) - << endl; + scalar resid = meshRefinement::gAverage + ( + meshMover.mesh(), + isMasterPoint, + meshPoints, + mag(field-average)() + ); + Info<< " Iteration " << iter << " residual " << resid << endl; } } } @@ -265,6 +270,7 @@ void Foam::autoLayerDriver::smoothField void Foam::autoLayerDriver::smoothPatchNormals ( const motionSmoother& meshMover, + const PackedBoolList& isMasterPoint, const PackedBoolList& isMasterEdge, const labelList& meshEdges, const label nSmoothDisp, @@ -308,10 +314,15 @@ void Foam::autoLayerDriver::smoothPatchNormals // Do residual calculation every so often. if ((iter % 10) == 0) { - Info<< " Iteration " << iter << " residual " - << gSum(mag(normals-average)) - /returnReduce(average.size(), sumOp<label>()) - << endl; + scalar resid = meshRefinement::gAverage + ( + meshMover.mesh(), + isMasterPoint, + meshPoints, + mag(normals-average)() + ); + + Info<< " Iteration " << iter << " residual " << resid << endl; } // Transfer to normals vector field @@ -330,6 +341,7 @@ void Foam::autoLayerDriver::smoothPatchNormals void Foam::autoLayerDriver::smoothNormals ( const label nSmoothDisp, + const PackedBoolList& isMasterPoint, const PackedBoolList& isMasterEdge, const labelList& fixedPoints, pointVectorField& normals @@ -392,10 +404,14 @@ void Foam::autoLayerDriver::smoothNormals // Do residual calculation every so often. if ((iter % 10) == 0) { - Info<< " Iteration " << iter << " residual " - << gSum(mag(normals-average)) - /returnReduce(average.size(), sumOp<label>()) - << endl; + scalar resid = meshRefinement::gAverage + ( + mesh, + isMasterPoint, + mag(normals-average)() + ); + + Info<< " Iteration " << iter << " residual " << resid << endl; } @@ -802,25 +818,18 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo // Predetermine mesh edges // ~~~~~~~~~~~~~~~~~~~~~~~ - // Precalulate master edge (only relevant for shared edges) - PackedBoolList isMasterEdge(syncTools::getMasterEdges(mesh)); + // Precalulate master point/edge (only relevant for shared points/edges) + const PackedBoolList isMasterPoint(syncTools::getMasterPoints(mesh)); + const PackedBoolList isMasterEdge(syncTools::getMasterEdges(mesh)); // Precalculate meshEdge per pp edge - labelList meshEdges(pp.nEdges()); - - forAll(meshEdges, patchEdgeI) - { - const edge& e = pp.edges()[patchEdgeI]; - - label v0 = pp.meshPoints()[e[0]]; - label v1 = pp.meshPoints()[e[1]]; - meshEdges[patchEdgeI] = meshTools::findEdge + const labelList meshEdges + ( + pp.meshEdges ( mesh.edges(), - mesh.pointEdges()[v0], - v0, - v1 - ); - } + mesh.pointEdges() + ) + ); // Determine pointNormal @@ -845,6 +854,7 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo smoothPatchNormals ( meshMover, + isMasterPoint, isMasterEdge, meshEdges, nSmoothSurfaceNormals, @@ -929,18 +939,18 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo { pointField origin(pointWallDist.size()); scalarField distSqr(pointWallDist.size()); - scalarField passiveS(pointWallDist.size()); + //NA scalarField passiveS(pointWallDist.size()); pointField passiveV(pointWallDist.size()); forAll(pointWallDist, pointI) { origin[pointI] = pointWallDist[pointI].origin(); distSqr[pointI] = pointWallDist[pointI].distSqr(); - passiveS[pointI] = pointWallDist[pointI].s(); + //passiveS[pointI] = pointWallDist[pointI].s(); passiveV[pointI] = pointWallDist[pointI].v(); } meshRefinement::testSyncPointList("origin", mesh, origin); meshRefinement::testSyncPointList("distSqr", mesh, distSqr); - meshRefinement::testSyncPointList("passiveS", mesh, passiveS); + //meshRefinement::testSyncPointList("passiveS", mesh, passiveS); meshRefinement::testSyncPointList("passiveV", mesh, passiveV); } @@ -1186,7 +1196,14 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo } // Smooth normal vectors. Do not change normals on pp.meshPoints - smoothNormals(nSmoothNormals, isMasterEdge, meshPoints, dispVec); + smoothNormals + ( + nSmoothNormals, + isMasterPoint, + isMasterEdge, + meshPoints, + dispVec + ); if (debug&meshRefinement::MESH || debug&meshRefinement::LAYERINFO) { @@ -1288,25 +1305,18 @@ void Foam::autoLayerDriver::shrinkMeshMedialDistance const indirectPrimitivePatch& pp = meshMover.patch(); const labelList& meshPoints = pp.meshPoints(); - // Precalulate master edge (only relevant for shared edges) - PackedBoolList isMasterEdge(syncTools::getMasterEdges(mesh)); + // Precalulate master points/edge (only relevant for shared points/edges) + const PackedBoolList isMasterPoint(syncTools::getMasterPoints(mesh)); + const PackedBoolList isMasterEdge(syncTools::getMasterEdges(mesh)); // Precalculate meshEdge per pp edge - labelList meshEdges(pp.nEdges()); - - forAll(meshEdges, patchEdgeI) - { - const edge& e = pp.edges()[patchEdgeI]; - - label v0 = pp.meshPoints()[e[0]]; - label v1 = pp.meshPoints()[e[1]]; - meshEdges[patchEdgeI] = meshTools::findEdge + const labelList meshEdges + ( + pp.meshEdges ( mesh.edges(), - mesh.pointEdges()[v0], - v0, - v1 - ); - } + mesh.pointEdges() + ) + ); scalarField thickness(layerThickness.size()); @@ -1433,6 +1443,17 @@ void Foam::autoLayerDriver::shrinkMeshMedialDistance << numThicknessRatioExclude << " nodes where thickness to medial axis distance is large " << endl; + +{ + Info<< "** start thickness **" << endl; + meshRefinement::collectAndPrint(pp.localPoints(), thickness); + Info<< "** end thickness **" << endl; + Info<< "** patchDisp **" << endl; + meshRefinement::collectAndPrint(pp.localPoints(), patchDisp); + Info<< "** end patchDisp **" << endl; +} + + // find points where layer growth isolated to a lone point, edge or face findIsolatedRegions @@ -1461,6 +1482,7 @@ void Foam::autoLayerDriver::shrinkMeshMedialDistance smoothField ( meshMover, + isMasterPoint, isMasterEdge, meshEdges, minThickness, @@ -1608,10 +1630,19 @@ void Foam::autoLayerDriver::shrinkMeshMedialDistance // Do residual calculation every so often. if ((iter % 10) == 0) { +// Info<< " Iteration " << iter << " residual " +// << gSum(mag(displacement-average)) +// /returnReduce(average.size(), sumOp<label>()) +// << endl; + + scalar resid = meshRefinement::gAverage + ( + mesh, + syncTools::getMasterPoints(mesh), + mag(displacement-average)() + ); Info<< " Iteration " << iter << " residual " - << gSum(mag(displacement-average)) - /returnReduce(average.size(), sumOp<label>()) - << endl; + << resid << endl; } } }