From be461afe5a9e960163f0d23e74af9be3c713890f Mon Sep 17 00:00:00 2001 From: Chris Greenshields Date: Fri, 4 Jul 2008 22:20:24 +0100 Subject: [PATCH 01/12] Change to Doxyfile so the collaboration diagrams are not huge --- doc/Doxygen/Doxyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Doxygen/Doxyfile b/doc/Doxygen/Doxyfile index 13c36d9d30..a0d244d89a 100644 --- a/doc/Doxygen/Doxyfile +++ b/doc/Doxygen/Doxyfile @@ -1259,7 +1259,7 @@ DOT_GRAPH_MAX_NODES = 50 # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. -MAX_DOT_GRAPH_DEPTH = 0 +MAX_DOT_GRAPH_DEPTH = 3 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. From b7bb04e81b3126bccce4db4b3e8e5cb3b67d1d2f Mon Sep 17 00:00:00 2001 From: mattijs Date: Mon, 7 Jul 2008 18:40:05 +0100 Subject: [PATCH 02/12] trisurfaceMeshes superceded by searchableSurfaces --- ...aceSlipDisplacementPointPatchVectorField.C | 291 ++++++++++-------- ...aceSlipDisplacementPointPatchVectorField.H | 12 +- 2 files changed, 177 insertions(+), 126 deletions(-) diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C index cfedeb6112..7b035e0e4a 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C @@ -62,7 +62,6 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(p, iF), - surfaceNames_(), projectMode_(NEAREST), projectDir_(vector::zero), wedgePlane_(-1) @@ -78,7 +77,7 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(p, iF, dict), - surfaceNames_(dict.lookup("projectSurfaces")), + surfacesDict_(dict.subDict("geometry")), projectMode_(followModeNames_.read(dict.lookup("followMode"))), projectDir_(dict.lookup("projectDirection")), wedgePlane_(readLabel(dict.lookup("wedgePlane"))), @@ -96,7 +95,7 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(p, iF), - surfaceNames_(ppf.surfaceNames()), + surfacesDict_(ppf.surfacesDict()), projectMode_(ppf.projectMode()), projectDir_(ppf.projectDir()), wedgePlane_(ppf.wedgePlane()), @@ -111,7 +110,7 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(ppf), - surfaceNames_(ppf.surfaceNames()), + surfacesDict_(ppf.surfacesDict()), projectMode_(ppf.projectMode()), projectDir_(ppf.projectDir()), wedgePlane_(ppf.wedgePlane()), @@ -127,7 +126,7 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(ppf, iF), - surfaceNames_(ppf.surfaceNames()), + surfacesDict_(ppf.surfacesDict()), projectMode_(ppf.projectMode()), projectDir_(ppf.projectDir()), wedgePlane_(ppf.wedgePlane()), @@ -137,14 +136,14 @@ surfaceSlipDisplacementPointPatchVectorField // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -const triSurfaceMeshes& surfaceSlipDisplacementPointPatchVectorField:: +const searchableSurfaces& surfaceSlipDisplacementPointPatchVectorField:: surfaces() const { if (!surfacesPtr_.valid()) { surfacesPtr_.reset ( - new triSurfaceMeshes + new searchableSurfaces ( IOobject ( @@ -155,7 +154,7 @@ surfaces() const IOobject::MUST_READ, IOobject::NO_WRITE ), - surfaceNames_ + surfacesDict_ ) ); } @@ -215,128 +214,180 @@ void surfaceSlipDisplacementPointPatchVectorField::evaluate ); const pointField& points0 = motionSolver.points0(); - forAll(localPoints, i) + +//XXXXXX + + + pointField start(meshPoints.size()); + forAll(start, i) { - if (zonePtr && (zonePtr->whichPoint(meshPoints[i]) >= 0)) + start[i] = points0[meshPoints[i]] + displacement[i]; + } + + if (projectMode_ == NEAREST) + { + List nearest; + labelList hitSurfaces; + surfaces().findNearest + ( + start, + scalarField(start.size(), sqr(projectLen)), + hitSurfaces, + nearest + ); + + forAll(nearest, i) { - // Fixed point. Reset to point0 location. - - //Pout<< " Fixed point:" << meshPoints[i] - // << " coord:" << localPoints[i] - // << " should be at:" << points0[meshPoints[i]] - // << endl; - displacement[i] = points0[meshPoints[i]] - localPoints[i]; - } - else - { - point start(points0[meshPoints[i]] + displacement[i]); - - scalar offset = 0; - pointIndexHit intersection; - - if (projectMode_ == NEAREST) + if (zonePtr && (zonePtr->whichPoint(meshPoints[i]) >= 0)) { - surfaces().findNearest(start, sqr(projectLen), intersection); + // Fixed point. Reset to point0 location. + displacement[i] = points0[meshPoints[i]] - localPoints[i]; } - else + else if (nearest[i].hit()) { - // Check if already on surface - surfaces().findNearest(start, sqr(SMALL), intersection); - - if (!intersection.hit()) - { - // No nearest found. Do intersection - - if (projectMode_ == POINTNORMAL) - { - projectVec = projectLen*patch().pointNormals()[i]; - } - - // Knock out any wedge component - if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents) - { - offset = start[wedgePlane_]; - start[wedgePlane_] = 0; - projectVec[wedgePlane_] = 0; - } - - label rightSurf0, rightSurf1; - pointIndexHit rightHit0, rightHit1; - surfaces().findNearestIntersection - ( - start, - start+projectVec, - rightSurf0, - rightHit0, - rightSurf1, - rightHit1 - ); - - // Do intersection - label leftSurf0, leftSurf1; - pointIndexHit leftHit0, leftHit1; - surfaces().findNearestIntersection - ( - start, - start-projectVec, - leftSurf0, - leftHit0, - leftSurf1, - leftHit1 - ); - - if (rightHit0.hit()) - { - if (leftHit0.hit()) - { - if - ( - magSqr(rightHit0.hitPoint()-start) - < magSqr(leftHit0.hitPoint()-start) - ) - { - intersection = rightHit0; - } - else - { - intersection = leftHit0; - } - } - else - { - intersection = rightHit0; - } - } - else - { - if (leftHit0.hit()) - { - intersection = leftHit0; - } - } - } - } - - // Update *this from intersection point - - if (intersection.hit()) - { - point interPt = intersection.hitPoint(); - - if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents) - { - interPt[wedgePlane_] += offset; - } - displacement[i] = interPt-points0[meshPoints[i]]; + displacement[i] = + nearest[i].hitPoint() + - points0[meshPoints[i]]; } else { Pout<< " point:" << meshPoints[i] << " coord:" << localPoints[i] - << " did not find any intersection between ray from " - << start-projectVec << " to " << start+projectVec + << " did not find any surface within " << projectLen << endl; - } + } + } + } + else + { + // Do tests on all points. Combine later on. + + // 1. Check if already on surface + List nearest; + { + labelList nearestSurface; + surfaces().findNearest + ( + start, + scalarField(start.size(), sqr(SMALL)), + nearestSurface, + nearest + ); + } + + // 2. intersection. (combined later on with information from nearest + // above) + vectorField projectVecs(start.size(), projectVec); + + if (projectMode_ == POINTNORMAL) + { + projectVecs = projectLen*patch().pointNormals(); + } + + // Knock out any wedge component + scalarField offset(start.size(), 0.0); + if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents) + { + forAll(offset, i) + { + offset[i] = start[i][wedgePlane_]; + start[i][wedgePlane_] = 0; + projectVecs[i][wedgePlane_] = 0; + } + } + + List rightHit; + { + labelList rightSurf; + surfaces().findAnyIntersection + ( + start, + start+projectVecs, + rightSurf, + rightHit + ); + } + + List leftHit; + { + labelList leftSurf; + surfaces().findAnyIntersection + ( + start, + start-projectVecs, + leftSurf, + leftHit + ); + } + + // 3. Choose either -fixed, nearest, right, left. + forAll(displacement, i) + { + if (zonePtr && (zonePtr->whichPoint(meshPoints[i]) >= 0)) + { + // Fixed point. Reset to point0 location. + displacement[i] = points0[meshPoints[i]] - localPoints[i]; + } + else if (nearest[i].hit()) + { + // Found nearest. + displacement[i] = + nearest[i].hitPoint() + - points0[meshPoints[i]]; + } + else + { + pointIndexHit interPt; + + if (rightHit[i].hit()) + { + if (leftHit[i].hit()) + { + if + ( + magSqr(rightHit[i].hitPoint()-start[i]) + < magSqr(leftHit[i].hitPoint()-start[i]) + ) + { + interPt = rightHit[i]; + } + else + { + interPt = leftHit[i]; + } + } + else + { + interPt = rightHit[i]; + } + } + else + { + if (leftHit[i].hit()) + { + interPt = leftHit[i]; + } + } + + + if (interPt.hit()) + { + if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents) + { + interPt.rawPoint()[wedgePlane_] += offset[i]; + } + displacement[i] = interPt.rawPoint()-points0[meshPoints[i]]; + } + else + { + Pout<< " point:" << meshPoints[i] + << " coord:" << localPoints[i] + << " did not find any intersection between ray from " + << start[i]-projectVecs[i] + << " to " << start[i]+projectVecs[i] + << endl; + } + } } } @@ -353,7 +404,7 @@ void surfaceSlipDisplacementPointPatchVectorField::evaluate void surfaceSlipDisplacementPointPatchVectorField::write(Ostream& os) const { pointPatchVectorField::write(os); - os.writeKeyword("projectSurfaces") << surfaceNames_ + os.writeKeyword("geometry") << surfacesDict_ << token::END_STATEMENT << nl; os.writeKeyword("followMode") << followModeNames_[projectMode_] << token::END_STATEMENT << nl; diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H index b164795cac..5b8fca9409 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H @@ -52,7 +52,7 @@ SourceFiles #define surfaceSlipDisplacementPointPatchVectorField_H #include "pointPatchFields.H" -#include "triSurfaceMeshes.H" +#include "searchableSurfaces.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -87,7 +87,7 @@ private: static const NamedEnum followModeNames_; //- names of surfaces - const fileNameList surfaceNames_; + const dictionary surfacesDict_; //- How to follow/project onto surface const followMode projectMode_; @@ -102,7 +102,7 @@ private: const word frozenPointsZone_; //- Demand driven: surface to follow - mutable autoPtr surfacesPtr_; + mutable autoPtr surfacesPtr_; // Private Member Functions @@ -187,13 +187,13 @@ public: // Member Functions //- Surfaces to follow - const fileNameList& surfaceNames() const + const dictionary& surfacesDict() const { - return surfaceNames_; + return surfacesDict_; } //- Surface to follow. Demand loads surfaceNames. - const triSurfaceMeshes& surfaces() const; + const searchableSurfaces& surfaces() const; //- Mode of projection/following followMode projectMode() const From 76f2d62bde6d872e6c3a5ed15d271b8a28ad5d45 Mon Sep 17 00:00:00 2001 From: mattijs Date: Mon, 7 Jul 2008 18:41:09 +0100 Subject: [PATCH 03/12] mesh driver rewrite; initial distributed surfaces --- src/autoMesh/Make/files | 16 +- .../autoHexMeshDriver/autoHexMeshDriver.C | 1230 ++++++++--------- .../autoHexMeshDriver/autoHexMeshDriver.H | 145 +- .../autoHexMeshDriverLayers.C | 337 ++--- .../autoHexMeshDriver/autoHexMeshDriverSnap.C | 224 +-- .../layerParameters/layerParameters.C | 213 +++ .../layerParameters/layerParameters.H | 246 ++++ .../refinementParameters.C | 123 ++ .../refinementParameters.H | 154 +++ .../snapParameters/snapParameters.C | 54 + .../snapParameters/snapParameters.H | 129 ++ .../meshRefinement/meshRefinement.C | 711 ++-------- .../meshRefinement/meshRefinement.H | 40 +- .../meshRefinement/meshRefinementBaffles.C | 434 +++--- .../meshRefinement/meshRefinementMerge.C | 15 - .../meshRefinement/meshRefinementRefine.C | 842 ++++++----- .../refinementSurfaces/refinementSurfaces.C | 989 ++++++++----- .../refinementSurfaces/refinementSurfaces.H | 176 ++- .../autoHexMesh/shellSurfaces/shellSurfaces.C | 465 +++++++ .../autoHexMesh/shellSurfaces/shellSurfaces.H | 182 +++ .../trackedParticle/ExactParticle.C | 2 +- .../polyTopoChange/addPatchCellLayer.C | 4 +- .../polyTopoChange/addPatchCellLayer.H | 4 +- src/meshTools/Make/files | 18 +- .../searchableSurface/searchableBox.C | 541 ++++++++ .../searchableSurface/searchableBox.H | 249 ++++ .../searchableSurface/searchableSphere.C | 328 +++++ .../searchableSurface/searchableSphere.H | 204 +++ .../searchableSurface/searchableSurface.C | 43 +- .../searchableSurface/searchableSurface.H | 322 +++++ .../searchableSurface/searchableSurfaces.C | 355 +++++ .../searchableSurface/searchableSurfaces.H | 187 +++ .../searchableSurfacesQueries.C | 822 +++++++++++ .../searchableSurfacesQueries.H | 198 +++ .../searchableSurface/triSurfaceMesh.C | 552 ++++++++ .../searchableSurface/triSurfaceMesh.H | 103 +- .../searchableSurface/searchableBox.C | 247 ---- .../searchableSurface/searchableBox.H | 161 --- .../searchableSurface/searchableSurface.H | 257 ---- .../searchableSurface/triSurfaceMesh.C | 271 ---- .../triSurfaceMeshes/triSurfaceMeshes.C | 916 ------------ .../triSurfaceMeshes/triSurfaceMeshes.H | 261 ---- 42 files changed, 7945 insertions(+), 4825 deletions(-) create mode 100644 src/autoMesh/autoHexMesh/autoHexMeshDriver/layerParameters/layerParameters.C create mode 100644 src/autoMesh/autoHexMesh/autoHexMeshDriver/layerParameters/layerParameters.H create mode 100644 src/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.C create mode 100644 src/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.H create mode 100644 src/autoMesh/autoHexMesh/autoHexMeshDriver/snapParameters/snapParameters.C create mode 100644 src/autoMesh/autoHexMesh/autoHexMeshDriver/snapParameters/snapParameters.H create mode 100644 src/autoMesh/autoHexMesh/shellSurfaces/shellSurfaces.C create mode 100644 src/autoMesh/autoHexMesh/shellSurfaces/shellSurfaces.H create mode 100644 src/meshTools/searchableSurface/searchableBox.C create mode 100644 src/meshTools/searchableSurface/searchableBox.H create mode 100644 src/meshTools/searchableSurface/searchableSphere.C create mode 100644 src/meshTools/searchableSurface/searchableSphere.H rename src/meshTools/{triSurface => }/searchableSurface/searchableSurface.C (65%) create mode 100644 src/meshTools/searchableSurface/searchableSurface.H create mode 100644 src/meshTools/searchableSurface/searchableSurfaces.C create mode 100644 src/meshTools/searchableSurface/searchableSurfaces.H create mode 100644 src/meshTools/searchableSurface/searchableSurfacesQueries.C create mode 100644 src/meshTools/searchableSurface/searchableSurfacesQueries.H create mode 100644 src/meshTools/searchableSurface/triSurfaceMesh.C rename src/meshTools/{triSurface => }/searchableSurface/triSurfaceMesh.H (64%) delete mode 100644 src/meshTools/triSurface/searchableSurface/searchableBox.C delete mode 100644 src/meshTools/triSurface/searchableSurface/searchableBox.H delete mode 100644 src/meshTools/triSurface/searchableSurface/searchableSurface.H delete mode 100644 src/meshTools/triSurface/searchableSurface/triSurfaceMesh.C delete mode 100644 src/meshTools/triSurface/triSurfaceMeshes/triSurfaceMeshes.C delete mode 100644 src/meshTools/triSurface/triSurfaceMeshes/triSurfaceMeshes.H diff --git a/src/autoMesh/Make/files b/src/autoMesh/Make/files index c562ee5c6d..1c763a316c 100644 --- a/src/autoMesh/Make/files +++ b/src/autoMesh/Make/files @@ -1,15 +1,21 @@ autoHexMesh = autoHexMesh +autoHexMeshDriver = $(autoHexMesh)/autoHexMeshDriver + +$(autoHexMeshDriver)/autoHexMeshDriver.C +$(autoHexMeshDriver)/autoHexMeshDriverLayers.C +$(autoHexMeshDriver)/autoHexMeshDriverShrink.C +$(autoHexMeshDriver)/autoHexMeshDriverSnap.C +$(autoHexMeshDriver)/layerParameters/layerParameters.C +$(autoHexMeshDriver)/refinementParameters/refinementParameters.C +$(autoHexMeshDriver)/snapParameters/snapParameters.C +$(autoHexMeshDriver)/pointData/pointData.C -$(autoHexMesh)/autoHexMeshDriver/autoHexMeshDriver.C -$(autoHexMesh)/autoHexMeshDriver/autoHexMeshDriverLayers.C -$(autoHexMesh)/autoHexMeshDriver/autoHexMeshDriverShrink.C -$(autoHexMesh)/autoHexMeshDriver/autoHexMeshDriverSnap.C -$(autoHexMesh)/autoHexMeshDriver/pointData/pointData.C $(autoHexMesh)/meshRefinement/meshRefinementBaffles.C $(autoHexMesh)/meshRefinement/meshRefinement.C $(autoHexMesh)/meshRefinement/meshRefinementMerge.C $(autoHexMesh)/meshRefinement/meshRefinementRefine.C $(autoHexMesh)/refinementSurfaces/refinementSurfaces.C +$(autoHexMesh)/shellSurfaces/shellSurfaces.C $(autoHexMesh)/trackedParticle/trackedParticle.C $(autoHexMesh)/trackedParticle/trackedParticleCloud.C diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C index a15b422032..94c217ebcc 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C @@ -35,6 +35,9 @@ License #include "syncTools.H" #include "motionSmoother.H" #include "pointMesh.H" +#include "refinementParameters.H" +#include "snapParameters.H" +#include "layerParameters.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -60,7 +63,8 @@ Foam::scalar Foam::autoHexMeshDriver::getMergeDistance(const scalar mergeTol) -scalar(IOstream::defaultPrecision()) ); - Info<< "Overall mesh bounding box : " << meshBb << nl + Info<< nl + << "Overall mesh bounding box : " << meshBb << nl << "Relative tolerance : " << mergeTol << nl << "Absolute matching distance : " << mergeDist << nl << endl; @@ -82,110 +86,59 @@ Foam::scalar Foam::autoHexMeshDriver::getMergeDistance(const scalar mergeTol) } -// Return per keeppoint -1 or the local cell label the point is in. Guaranteed -// to be only on one processor. -Foam::labelList Foam::autoHexMeshDriver::findCells(const pointField& keepPoints) - const -{ - // Global calculation engine - globalIndex globalCells(mesh_.nCells()); - - // Cell label per point - labelList cellLabels(keepPoints.size()); - - forAll(keepPoints, i) - { - const point& keepPoint = keepPoints[i]; - - label localCellI = mesh_.findCell(keepPoint); - - label globalCellI = -1; - - if (localCellI != -1) - { - Pout<< "Found point " << keepPoint << " in cell " << localCellI - << " on processor " << Pstream::myProcNo() << endl; - globalCellI = globalCells.toGlobal(localCellI); - } - - reduce(globalCellI, maxOp