diff --git a/applications/solvers/combustion/chemFoam/readInitialConditions.H b/applications/solvers/combustion/chemFoam/readInitialConditions.H index 3fbb13a0fc..08050be816 100644 --- a/applications/solvers/combustion/chemFoam/readInitialConditions.H +++ b/applications/solvers/combustion/chemFoam/readInitialConditions.H @@ -99,7 +99,7 @@ scalar u0 = hs0 - p0/rho0; scalar R0 = p0/(rho0*T0); Rspecific[0] = R0; - + scalar integratedHeat = 0.0; Info << constProp << " will be held constant." << nl diff --git a/applications/test/vectorTools/Test-vectorTools.C b/applications/test/vectorTools/Test-vectorTools.C index 0c85ac935b..85d18ed989 100644 --- a/applications/test/vectorTools/Test-vectorTools.C +++ b/applications/test/vectorTools/Test-vectorTools.C @@ -8,7 +8,7 @@ using namespace Foam; void test(const vector& a, const vector& b, const scalar tolerance) { - Info<< "Vectors " << a << " and " << b + Info<< "Vectors " << a << " and " << b << " are (to tolerance of " << tolerance << "): "; if (vectorTools::areParallel(a, b, tolerance)) diff --git a/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.H b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.H index 4ab8bdb167..0b3cf0b4f2 100644 --- a/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.H +++ b/applications/utilities/mesh/generation/cv2DMesh/conformalVoronoi2DMesh/cv2DControls/cv2DControls.H @@ -252,4 +252,4 @@ public: #endif -// ************************************************************************* // +// ************************************************************************* // diff --git a/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearPointPairs.C b/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearPointPairs.C index a1d1919f12..3d4ac7cf2a 100644 --- a/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearPointPairs.C +++ b/applications/utilities/mesh/generation/cv2DMesh/insertSurfaceNearPointPairs.C @@ -93,7 +93,7 @@ void Foam::CV2D::insertSurfaceNearPointPairs() nNearPoints++; - // Correct the edge iterator for the change in the + // Correct the edge iterator for the change in the // number of edges following the point-pair insertion eit = Finite_edges_iterator ( diff --git a/applications/utilities/mesh/generation/cvMesh/Make/options b/applications/utilities/mesh/generation/cvMesh/Make/options index a0a776d977..5efdb12572 100644 --- a/applications/utilities/mesh/generation/cvMesh/Make/options +++ b/applications/utilities/mesh/generation/cvMesh/Make/options @@ -20,7 +20,8 @@ EXE_LIBS = \ $(CGAL_LIBS) \ -lconformalVoronoiMesh \ -lmeshTools \ - -ldecompositionMethods -L$(FOAM_LIBBIN)/dummy -lscotchDecomp \ + -ldecompositionMethods \ + -L$(FOAM_LIBBIN)/dummy -lptscotchDecomp \ -ledgeMesh \ -ltriSurface \ -ldynamicMesh diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/options b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/options index 1a1902b559..2d2d1a1178 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/options +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/Make/options @@ -19,7 +19,6 @@ EXE_INC = \ EXE_LIBS = \ -lmeshTools \ - -ldecompositionMethods -L$(FOAM_LIBBIN)/dummy -lscotchDecomp \ -ledgeMesh \ -ltriSurface \ -ldynamicMesh diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.C index d40427abf7..788c1d69c6 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.C +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/cellSizeCalculationType/fieldFromFile/fieldFromFile.C @@ -63,7 +63,7 @@ Foam::fieldFromFile::fieldFromFile Foam::triSurfaceScalarField Foam::fieldFromFile::load() { - Info<< "Loading: " << fileName_ << endl; + Info<< indent << "Loading: " << fileName_ << endl; triSurfaceScalarField surfaceCellSize ( diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.C index 5e2d032d91..fc91ed279b 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.C +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/nonUniformField/nonUniformField.C @@ -82,9 +82,9 @@ Foam::nonUniformField::nonUniformField Info<< decrIndent; Info<< indent << "Cell size field statistics:" << nl - << indent << " Minimum: " << min(surfaceCellSize_).value() << nl - << indent << " Average: " << average(surfaceCellSize_).value() << nl - << indent << " Maximum: " << max(surfaceCellSize_).value() << endl; + << indent << " Minimum: " << min(surfaceCellSize_).value() << nl + << indent << " Average: " << average(surfaceCellSize_).value() << nl + << indent << " Maximum: " << max(surfaceCellSize_).value() << endl; Info<< decrIndent; } diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.C index 7022511c4c..04d9af824f 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.C +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/surfaceCellSizeFunction/surfaceCellSizeFunction.C @@ -46,7 +46,10 @@ Foam::surfaceCellSizeFunction::surfaceCellSizeFunction dictionary(surfaceCellSizeFunctionDict), surface_(surface), coeffsDict_(subDict(type + "Coeffs")), - refinementFactor_(readScalar(lookup("refinementFactor"))) + refinementFactor_ + ( + lookupOrDefault("refinementFactor", 1.0) + ) {} diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.H index 9e54e86b48..3677837933 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.H +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/cellSizeControlSurfaces/surfaceCellSizeFunction/uniformValue/uniformValue.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C index 09d27dfa36..de23690ea4 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.C @@ -44,6 +44,142 @@ const Foam::scalar Foam::conformalVoronoiMesh::tolParallel = 1e-3; // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +Foam::scalar Foam::conformalVoronoiMesh::requiredSize +( + const Foam::point& pt +) const +{ + pointIndexHit surfHit; + label hitSurface; + + DynamicList cellSizeHits; + + geometryToConformTo_.findSurfaceNearest + ( + pt, + sqr(GREAT), + surfHit, + hitSurface + ); + + if (!surfHit.hit()) + { + FatalErrorIn + ( + "Foam::tensor Foam::conformalVoronoiMesh::requiredAlignment" + ) + << "findSurfaceNearest did not find a hit across the surfaces." + << exit(FatalError) << endl; + } + + cellSizeHits.append(cellSizeControl().cellSize(pt)); + + // Primary alignment + + vectorField norm(1); + + allGeometry_[hitSurface].getNormal + ( + List(1, surfHit), + norm + ); + + const vector np = norm[0]; + + // Generate equally spaced 'spokes' in a circle normal to the + // direction from the vertex to the closest point on the surface + // and look for a secondary intersection. + + const vector d = surfHit.hitPoint() - pt; + + const tensor Rp = rotationTensor(vector(0,0,1), np); + + const label s = cvMeshControls().alignmentSearchSpokes(); + + const scalar spanMag = geometryToConformTo_.globalBounds().mag(); + + scalar totalDist = 0; + + for (label i = 0; i < s; i++) + { + vector spoke + ( + Foam::cos(i*constant::mathematical::twoPi/s), + Foam::sin(i*constant::mathematical::twoPi/s), + 0 + ); + + spoke *= spanMag; + + spoke = Rp & spoke; + + pointIndexHit spokeHit; + + label spokeSurface = -1; + + // internal spoke + + geometryToConformTo_.findSurfaceNearestIntersection + ( + pt, + pt + spoke, + spokeHit, + spokeSurface + ); + + if (spokeHit.hit()) + { + const Foam::point& hitPt = spokeHit.hitPoint(); + + scalar spokeHitDistance = mag(hitPt - pt); + + cellSizeHits.append + ( + cellSizeControl().cellSize(hitPt) + ); + + totalDist += spokeHitDistance; + } + + //external spoke + + Foam::point mirrorPt = pt + 2*d; + + geometryToConformTo_.findSurfaceNearestIntersection + ( + mirrorPt, + mirrorPt + spoke, + spokeHit, + spokeSurface + ); + + if (spokeHit.hit()) + { + const Foam::point& hitPt = spokeHit.hitPoint(); + + scalar spokeHitDistance = mag(hitPt - mirrorPt); + + cellSizeHits.append + ( + cellSizeControl().cellSize(hitPt) + ); + + totalDist += spokeHitDistance; + } + } + + scalar cellSize = 0; + + forAll(cellSizeHits, hitI) + { + cellSize += cellSizeHits[hitI]; + } + + return cellSize/cellSizeHits.size(); + //return cellSizeControl().cellSize(pt); +} + + Foam::tensor Foam::conformalVoronoiMesh::requiredAlignment ( const Foam::point& pt @@ -828,10 +964,7 @@ void Foam::conformalVoronoiMesh::storeSizesAndAlignments { sizeAndAlignmentLocations_[i] = topoint(*pit); - storedSizes_[i] = cellSizeControl().cellSize - ( - sizeAndAlignmentLocations_[i] - ); + storedSizes_[i] = requiredSize(sizeAndAlignmentLocations_[i]); storedAlignments_[i] = requiredAlignment(sizeAndAlignmentLocations_[i]); diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H index 81ce496c71..f9648dc1e7 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMesh.H @@ -268,6 +268,9 @@ private: //- Return the local maximum surface protrusion distance inline scalar maxSurfaceProtrusion(const Foam::point& pt) const; + //- Return the required cell size at the given location + scalar requiredSize(const Foam::point& pt) const; + //- Return the required alignment directions at the given location tensor requiredAlignment(const Foam::point& pt) const; @@ -533,6 +536,11 @@ private: const Delaunay::Finite_edges_iterator& eit ) const; + boolList dualFaceBoundaryPoints + ( + const Delaunay::Finite_edges_iterator& eit + ) const; + //- Finds the maximum filterCount of the dual vertices // (Delaunay cells) that form the dual face produced by the // supplied edge @@ -839,6 +847,13 @@ private: const Delaunay::Finite_facets_iterator& fit ) const; + //- Merge adjacent edges that are not attached to other faces + label mergeNearlyParallelEdges + ( + const pointField& pts, + const scalar maxCosAngle + ); + //- Merge vertices that are very close together void mergeCloseDualVertices ( diff --git a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshCalcDualMesh.C b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshCalcDualMesh.C index 5586446cb8..e0fe697e88 100644 --- a/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshCalcDualMesh.C +++ b/applications/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/conformalVoronoiMesh/conformalVoronoiMeshCalcDualMesh.C @@ -212,6 +212,20 @@ void Foam::conformalVoronoiMesh::calcDualMesh Info<< nl << "Collapsing unnecessary faces" << endl; collapseFaces(points, boundaryPts, deferredCollapseFaces); + + const scalar maxCosAngle + = cos(degToRad(cvMeshControls().edgeMergeAngle())); + + Info<< nl << "Merging adjacent edges which have an angle " + << "of greater than " + << cvMeshControls().edgeMergeAngle() << ": " << endl; + + label nRemovedEdges = + mergeNearlyParallelEdges(points, maxCosAngle); + + reduce(nRemovedEdges, sumOp