From 5c0c1f63e019e3428d0a31706566a51166e70c40 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 29 Sep 2010 13:05:38 +0100 Subject: [PATCH 1/8] BUG: streamLineParticle : was using GREAT for deltaT which triggers lots of problems. Now using sqrt(GREAT). --- .../functionObjects/field/streamLine/streamLineParticle.C | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/postProcessing/functionObjects/field/streamLine/streamLineParticle.C b/src/postProcessing/functionObjects/field/streamLine/streamLineParticle.C index 78478222cb..ce90b7a55d 100644 --- a/src/postProcessing/functionObjects/field/streamLine/streamLineParticle.C +++ b/src/postProcessing/functionObjects/field/streamLine/streamLineParticle.C @@ -157,7 +157,9 @@ bool Foam::streamLineParticle::move(streamLineParticle::trackData& td) td.switchProcessor = false; td.keepParticle = true; - scalar deltaT = GREAT; //cloud().pMesh().time().deltaTValue(); + // Set very large dt. Note: cannot use GREAT since 1/GREAT is SMALL + // which is a trigger value for the tracking... + scalar deltaT = Foam::sqrt(GREAT); //cloud().pMesh().time().deltaTValue(); scalar tEnd = (1.0 - stepFraction())*deltaT; scalar dtMax = tEnd; @@ -169,6 +171,9 @@ bool Foam::streamLineParticle::move(streamLineParticle::trackData& td) && tEnd > ROOTVSMALL ) { + // TBD: implement subcycling so step through cells in more than + // one step. + // set the lagrangian time-step scalar dt = min(dtMax, tEnd); From 25389d5b5f6bf0e0069aa9270dd95353f4f4b44b Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 30 Sep 2010 14:06:30 +0100 Subject: [PATCH 2/8] STYLE: foamUpgradeCyclics : typo --- .../preProcessing/foamUpgradeCyclics/foamUpgradeCyclics.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/utilities/preProcessing/foamUpgradeCyclics/foamUpgradeCyclics.C b/applications/utilities/preProcessing/foamUpgradeCyclics/foamUpgradeCyclics.C index e615ebe210..89cf00cd1b 100644 --- a/applications/utilities/preProcessing/foamUpgradeCyclics/foamUpgradeCyclics.C +++ b/applications/utilities/preProcessing/foamUpgradeCyclics/foamUpgradeCyclics.C @@ -311,7 +311,7 @@ void rewriteField { IOWarningIn("rewriteField(..)", patchDict) << "Cyclic patch " << patchName - << " has value entry. Please removed this and rerun." + << " has value entry. Please remove this and rerun." << endl; } From 2a6e9f10c071974c3fb45cb932013ba7c14e17c7 Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 30 Sep 2010 14:07:12 +0100 Subject: [PATCH 3/8] COMP: testPrimitivePatch.C : extraneous include file --- applications/test/primitivePatch/testPrimitivePatch.C | 1 - 1 file changed, 1 deletion(-) diff --git a/applications/test/primitivePatch/testPrimitivePatch.C b/applications/test/primitivePatch/testPrimitivePatch.C index f85b65435b..7a98cf9af2 100644 --- a/applications/test/primitivePatch/testPrimitivePatch.C +++ b/applications/test/primitivePatch/testPrimitivePatch.C @@ -30,7 +30,6 @@ Description #include "Time.H" #include "polyMesh.H" #include "primitivePatch.H" -#include "faceIOList.H" #include "IFstream.H" #include "OFstream.H" From 5f43ae45ec3e592046c7a6623219c98faf90b365 Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 30 Sep 2010 14:13:46 +0100 Subject: [PATCH 4/8] ENH: allow patch specification; have conforming faceZones after layering --- .../generation/snappyHexMesh/snappyHexMesh.C | 41 +- .../snappyHexMesh/snappyHexMeshDict | 3 +- src/mesh/autoMesh/Make/files | 1 - .../autoHexMeshDriver/autoHexMeshDriver.C | 548 ------------------ .../autoHexMeshDriver/autoHexMeshDriver.H | 232 -------- .../autoHexMeshDriver/autoLayerDriver.C | 108 +++- .../autoHexMeshDriver/autoLayerDriver.H | 11 +- .../autoHexMeshDriver/autoLayerDriverShrink.C | 3 +- .../autoHexMeshDriver/autoRefineDriver.C | 8 +- .../autoHexMeshDriver/autoSnapDriver.C | 158 +---- .../autoHexMeshDriver/autoSnapDriver.H | 7 - .../layerParameters/layerParameters.C | 6 +- .../meshRefinement/meshRefinement.C | 59 +- .../meshRefinement/meshRefinement.H | 19 +- .../meshRefinement/meshRefinementBaffles.C | 150 ++++- .../refinementSurfaces/refinementSurfaces.C | 307 ++-------- .../refinementSurfaces/refinementSurfaces.H | 16 +- 17 files changed, 390 insertions(+), 1287 deletions(-) delete mode 100644 src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C delete mode 100644 src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.H diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C index c48abfbc39..71af306d33 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C @@ -293,11 +293,13 @@ int main(int argc, char *argv[]) // From global region number to mesh patch. globalToPatch.setSize(surfaces.nRegions(), -1); - Info<< "Patch\tRegion" << nl - << "-----\t------" + Info<< "Patch\tType\tRegion" << nl + << "-----\t----\t------" << endl; const labelList& surfaceGeometry = surfaces.surfaces(); + const PtrList& surfacePatchInfo = surfaces.patchInfo(); + forAll(surfaceGeometry, surfI) { label geomI = surfaceGeometry[surfI]; @@ -308,15 +310,34 @@ int main(int argc, char *argv[]) forAll(regNames, i) { - label patchI = meshRefiner.addMeshedPatch - ( - regNames[i], - wallPolyPatch::typeName - ); + label globalRegionI = surfaces.globalRegion(surfI, i); - Info<< patchI << '\t' << regNames[i] << nl; + label patchI; - globalToPatch[surfaces.globalRegion(surfI, i)] = patchI; + if (surfacePatchInfo.set(globalRegionI)) + { + patchI = meshRefiner.addMeshedPatch + ( + regNames[i], + surfacePatchInfo[globalRegionI] + ); + } + else + { + dictionary patchInfo; + patchInfo.set("type", wallPolyPatch::typeName); + + patchI = meshRefiner.addMeshedPatch + ( + regNames[i], + patchInfo + ); + } + + Info<< patchI << '\t' << mesh.boundaryMesh()[patchI].type() + << '\t' << regNames[i] << nl; + + globalToPatch[globalRegionI] = patchI; } Info<< nl; @@ -431,7 +452,7 @@ int main(int argc, char *argv[]) { cpuTime timer; - autoLayerDriver layerDriver(meshRefiner); + autoLayerDriver layerDriver(meshRefiner, globalToPatch); // Layer addition parameters layerParameters layerParams(layerDict, mesh.boundaryMesh()); diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict index a15aa483c4..dbfcbd12d5 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict @@ -343,7 +343,8 @@ meshQualityControls //- Minimum quality of the tet formed by the face-centre // and variable base point minimum decomposition triangles and - // the cell centre. Set to very negative number (e.g. -1E30) to + // the cell centre. This has to be a positive number for tracking + // to work. Set to very negative number (e.g. -1E30) to // disable. // <0 = inside out tet, // 0 = flat tet diff --git a/src/mesh/autoMesh/Make/files b/src/mesh/autoMesh/Make/files index fecec5db5d..ec877c5f94 100644 --- a/src/mesh/autoMesh/Make/files +++ b/src/mesh/autoMesh/Make/files @@ -5,7 +5,6 @@ $(autoHexMeshDriver)/autoLayerDriver.C $(autoHexMeshDriver)/autoLayerDriverShrink.C $(autoHexMeshDriver)/autoSnapDriver.C $(autoHexMeshDriver)/autoRefineDriver.C -$(autoHexMeshDriver)/autoHexMeshDriver.C $(autoHexMeshDriver)/layerParameters/layerParameters.C $(autoHexMeshDriver)/refinementParameters/refinementParameters.C diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C deleted file mode 100644 index 2d12064c97..0000000000 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.C +++ /dev/null @@ -1,548 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*----------------------------------------------------------------------------*/ - -#include "autoHexMeshDriver.H" -#include "fvMesh.H" -#include "Time.H" -#include "boundBox.H" -#include "wallPolyPatch.H" -#include "cellSet.H" -#include "syncTools.H" -#include "refinementParameters.H" -#include "snapParameters.H" -#include "layerParameters.H" -#include "autoRefineDriver.H" -#include "autoSnapDriver.H" -#include "autoLayerDriver.H" -#include "triSurfaceMesh.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(autoHexMeshDriver, 0); -} - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -// Check writing tolerance before doing any serious work -Foam::scalar Foam::autoHexMeshDriver::getMergeDistance(const scalar mergeTol) - const -{ - const boundBox& meshBb = mesh_.bounds(); - scalar mergeDist = mergeTol * meshBb.mag(); - scalar writeTol = std::pow - ( - scalar(10.0), - -scalar(IOstream::defaultPrecision()) - ); - - Info<< nl - << "Overall mesh bounding box : " << meshBb << nl - << "Relative tolerance : " << mergeTol << nl - << "Absolute matching distance : " << mergeDist << nl - << endl; - - if (mesh_.time().writeFormat() == IOstream::ASCII && mergeTol < writeTol) - { - FatalErrorIn("autoHexMeshDriver::getMergeDistance(const scalar) const") - << "Your current settings specify ASCII writing with " - << IOstream::defaultPrecision() << " digits precision." << endl - << "Your merging tolerance (" << mergeTol << ") is finer than this." - << endl - << "Please change your writeFormat to binary" - << " or increase the writePrecision" << endl - << "or adjust the merge tolerance (-mergeTol)." - << exit(FatalError); - } - - return mergeDist; -} - - -//// Specifically orient using a calculated point outside -//void Foam::autoHexMeshDriver::orientOutside -//( -// PtrList& shells -//) -//{ -// // Determine outside point. -// boundBox overallBb = boundBox::invertedBox; -// -// bool hasSurface = false; -// -// forAll(shells, shellI) -// { -// if (isA(shells[shellI])) -// { -// const triSurfaceMesh& shell = -// refCast(shells[shellI]); -// -// hasSurface = true; -// -// boundBox shellBb(shell.localPoints(), false); -// -// overallBb.min() = min(overallBb.min(), shellBb.min()); -// overallBb.max() = max(overallBb.max(), shellBb.max()); -// } -// } -// -// if (hasSurface) -// { -// const point outsidePt = 2 * overallBb.span(); -// -// //Info<< "Using point " << outsidePt << " to orient shells" << endl; -// -// forAll(shells, shellI) -// { -// if (isA(shells[shellI])) -// { -// triSurfaceMesh& shell = -// refCast(shells[shellI]); -// -// if (!refinementSurfaces::isSurfaceClosed(shell)) -// { -// FatalErrorIn("orientOutside(PtrList&)") -// << "Refinement shell " -// << shell.searchableSurface::name() -// << " is not closed." << exit(FatalError); -// } -// -// refinementSurfaces::orientSurface(outsidePt, shell); -// } -// } -// } -//} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -// Construct from components -Foam::autoHexMeshDriver::autoHexMeshDriver -( - fvMesh& mesh, - const bool overwrite, - const dictionary& dict, - const dictionary& decomposeDict -) -: - mesh_(mesh), - dict_(dict), - debug_(readLabel(dict_.lookup("debug"))), - mergeDist_(getMergeDistance(readScalar(dict_.lookup("mergeTolerance")))) -{ - if (debug_ > 0) - { - meshRefinement::debug = debug_; - autoHexMeshDriver::debug = debug_; - autoRefineDriver::debug = debug; - autoSnapDriver::debug = debug; - autoLayerDriver::debug = debug; - } - - refinementParameters refineParams(dict, 1); - - Info<< "Overall cell limit : " - << refineParams.maxGlobalCells() << endl; - Info<< "Per processor cell limit : " - << refineParams.maxLocalCells() << endl; - Info<< "Minimum number of cells to refine : " - << refineParams.minRefineCells() << endl; - Info<< "Curvature : " - << refineParams.curvature() << nl << endl; - Info<< "Layers between different refinement levels : " - << refineParams.nBufferLayers() << endl; - - PtrList shellDicts(dict_.lookup("refinementShells")); - - PtrList surfaceDicts(dict_.lookup("surfaces")); - - - // Read geometry - // ~~~~~~~~~~~~~ - - { - Info<< "Reading all geometry." << endl; - - // Construct dictionary with all shells and all refinement surfaces - dictionary geometryDict; - - forAll(shellDicts, shellI) - { - dictionary shellDict = shellDicts[shellI]; - const word name(shellDict.lookup("name")); - shellDict.remove("name"); - shellDict.remove("level"); - shellDict.remove("refineInside"); - geometryDict.add(name, shellDict); - } - - forAll(surfaceDicts, surfI) - { - dictionary surfDict = surfaceDicts[surfI]; - const word name(string::validate(surfDict.lookup("file"))); - surfDict.remove("file"); - surfDict.remove("regions"); - if (!surfDict.found("name")) - { - surfDict.add("name", name); - } - surfDict.add("type", triSurfaceMesh::typeName); - geometryDict.add(name, surfDict); - } - - allGeometryPtr_.reset - ( - new searchableSurfaces - ( - IOobject - ( - "abc", // dummy name - //mesh_.time().findInstance("triSurface", word::null), - // instance - mesh_.time().constant(), // instance - "triSurface", // local - mesh_.time(), // registry - IOobject::MUST_READ, - IOobject::NO_WRITE - ), - geometryDict - ) - ); - - Info<< "Read geometry in = " - << mesh_.time().cpuTimeIncrement() << " s" << endl; - } - - - // Read refinement surfaces - // ~~~~~~~~~~~~~~~~~~~~~~~~ - - { - Info<< "Reading surfaces and constructing search trees." << endl; - - surfacesPtr_.reset - ( - new refinementSurfaces - ( - allGeometryPtr_(), - surfaceDicts - ) - ); - Info<< "Read surfaces in = " - << mesh_.time().cpuTimeIncrement() << " s" << endl; - } - - // Read refinement shells - // ~~~~~~~~~~~~~~~~~~~~~~ - - { - Info<< "Reading refinement shells." << endl; - shellsPtr_.reset - ( - new shellSurfaces - ( - allGeometryPtr_(), - shellDicts - ) - ); - Info<< "Read refinement shells in = " - << mesh_.time().cpuTimeIncrement() << " s" << endl; - - //// Orient shell surfaces before any searching is done. - //Info<< "Orienting triSurface shells so point far away is outside." - // << endl; - //orientOutside(shells_); - //Info<< "Oriented shells in = " - // << mesh_.time().cpuTimeIncrement() << " s" << endl; - - Info<< "Setting refinement level of surface to be consistent" - << " with shells." << endl; - surfacesPtr_().setMinLevelFields(shells()); - Info<< "Checked shell refinement in = " - << mesh_.time().cpuTimeIncrement() << " s" << endl; - } - - - // Check faceZones are synchronised - meshRefinement::checkCoupledFaceZones(mesh_); - - - // Refinement engine - // ~~~~~~~~~~~~~~~~~ - - { - Info<< nl - << "Determining initial surface intersections" << nl - << "-----------------------------------------" << nl - << endl; - - // Main refinement engine - meshRefinerPtr_.reset - ( - new meshRefinement - ( - mesh, - mergeDist_, // tolerance used in sorting coordinates - overwrite, - surfaces(), - shells() - ) - ); - Info<< "Calculated surface intersections in = " - << mesh_.time().cpuTimeIncrement() << " s" << endl; - - // Some stats - meshRefinerPtr_().printMeshInfo(debug_, "Initial mesh"); - - meshRefinerPtr_().write - ( - debug_&meshRefinement::OBJINTERSECTIONS, - mesh_.time().path()/meshRefinerPtr_().timeName() - ); - } - - - // Add all the surface regions as patches - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - { - Info<< nl - << "Adding patches for surface regions" << nl - << "----------------------------------" << nl - << endl; - - // From global region number to mesh patch. - globalToPatch_.setSize(surfaces().nRegions(), -1); - - Info<< "Patch\tRegion" << nl - << "-----\t------" - << endl; - - const labelList& surfaceGeometry = surfaces().surfaces(); - forAll(surfaceGeometry, surfI) - { - label geomI = surfaceGeometry[surfI]; - - const wordList& regNames = allGeometryPtr_().regionNames()[geomI]; - - Info<< surfaces().names()[surfI] << ':' << nl << nl; - - forAll(regNames, i) - { - label patchI = meshRefinerPtr_().addMeshedPatch - ( - regNames[i], - wallPolyPatch::typeName - ); - - Info<< patchI << '\t' << regNames[i] << nl; - - globalToPatch_[surfaces().globalRegion(surfI, i)] = patchI; - } - - Info<< nl; - } - Info<< "Added patches in = " - << mesh_.time().cpuTimeIncrement() << " s" << nl << endl; - } - - - //// Add cyclics for any named faceZones - //// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - //// (these cyclics are used later on to temporarily put the faceZones - //// in when snapping) - // - //labelList namedSurfaces(surfaces().getNamedSurfaces()); - //if (namedSurfaces.size()) - //{ - // Info<< nl - // << "Introducing cyclics for faceZones" << nl - // << "---------------------------------" << nl - // << endl; - // - // // From surface to cyclic patch - // surfaceToCyclicPatch_.setSize(surfaces().size(), -1); - // - // Info<< "Patch\tZone" << nl - // << "----\t-----" - // << endl; - // - // forAll(namedSurfaces, i) - // { - // label surfI = namedSurfaces[i]; - // - // surfaceToCyclicPatch_[surfI] = meshRefinement::addPatch - // ( - // mesh, - // surfaces().faceZoneNames()[surfI], - // cyclicPolyPatch::typeName - // ); - // - // Info<< surfaceToCyclicPatch_[surfI] << '\t' - // << surfaces().faceZoneNames()[surfI] << nl << endl; - // } - // Info<< "Added cyclic patches in = " - // << mesh_.time().cpuTimeIncrement() << " s" << endl; - //} - - - // Parallel - // ~~~~~~~~ - - { - // Decomposition - decomposerPtr_ = decompositionMethod::New(decomposeDict); - decompositionMethod& decomposer = decomposerPtr_(); - - - if (Pstream::parRun() && !decomposer.parallelAware()) - { - FatalErrorIn("autoHexMeshDriver::autoHexMeshDriver" - "(const IOobject&, fvMesh&)") - << "You have selected decomposition method " - << decomposer.typeName - << " which is not parallel aware." << endl - << "Please select one that is (hierarchical, ptscotch)" - << exit(FatalError); - } - - // Mesh distribution engine (uses tolerance to reconstruct meshes) - distributorPtr_.reset(new fvMeshDistribute(mesh_, mergeDist_)); - } -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::autoHexMeshDriver::writeMesh(const string& msg) const -{ - const meshRefinement& meshRefiner = meshRefinerPtr_(); - - meshRefiner.printMeshInfo(debug_, msg); - Info<< "Writing mesh to time " << meshRefiner.timeName() << endl; - - meshRefiner.write(meshRefinement::MESH|meshRefinement::SCALARLEVELS, ""); - if (debug_ & meshRefinement::OBJINTERSECTIONS) - { - meshRefiner.write - ( - meshRefinement::OBJINTERSECTIONS, - mesh_.time().path()/meshRefiner.timeName() - ); - } - Info<< "Wrote mesh in = " - << mesh_.time().cpuTimeIncrement() << " s." << endl; -} - - -void Foam::autoHexMeshDriver::doMesh() -{ - const Switch wantRefine(dict_.lookup("doRefine")); - const Switch wantSnap(dict_.lookup("doSnap")); - const Switch wantLayers(dict_.lookup("doLayers")); - - Info<< "Do refinement : " << wantRefine << nl - << "Do snapping : " << wantSnap << nl - << "Do layers : " << wantLayers << nl - << endl; - - if (wantRefine) - { - const dictionary& motionDict = dict_.subDict("motionDict"); - - autoRefineDriver refineDriver - ( - meshRefinerPtr_(), - decomposerPtr_(), - distributorPtr_(), - globalToPatch_ - ); - - // Get all the refinement specific params - refinementParameters refineParams(dict_, 1); - - refineDriver.doRefine(dict_, refineParams, wantSnap, motionDict); - - // Write mesh - writeMesh("Refined mesh"); - } - - if (wantSnap) - { - const dictionary& snapDict = dict_.subDict("snapDict"); - const dictionary& motionDict = dict_.subDict("motionDict"); - - autoSnapDriver snapDriver - ( - meshRefinerPtr_(), - globalToPatch_ - ); - - // Get all the snapping specific params - snapParameters snapParams(snapDict, 1); - - snapDriver.doSnap(snapDict, motionDict, snapParams); - - // Write mesh. - writeMesh("Snapped mesh"); - } - - if (wantLayers) - { - const dictionary& motionDict = dict_.subDict("motionDict"); - const dictionary& shrinkDict = dict_.subDict("shrinkDict"); - PtrList surfaceDicts(dict_.lookup("surfaces")); - - autoLayerDriver layerDriver(meshRefinerPtr_()); - - // Get all the layer specific params - layerParameters layerParams - ( - surfaceDicts, - surfacesPtr_(), - globalToPatch_, - shrinkDict, - mesh_.boundaryMesh() - ); - - layerDriver.doLayers - ( - shrinkDict, - motionDict, - layerParams, - true, // pre-balance - decomposerPtr_(), - distributorPtr_() - ); - - // Write mesh. - writeMesh("Layer mesh"); - } -} - - -// ************************************************************************* // diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.H b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.H deleted file mode 100644 index 5637fe966b..0000000000 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoHexMeshDriver.H +++ /dev/null @@ -1,232 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Class - Foam::autoHexMeshDriver - -Description - main meshing driver. - -SourceFiles - autoHexMeshDriver.C - -\*---------------------------------------------------------------------------*/ - -#ifndef autoHexMeshDriver_H -#define autoHexMeshDriver_H - -#include "autoPtr.H" -#include "dictionary.H" -#include "searchableSurfaces.H" -#include "refinementSurfaces.H" -#include "shellSurfaces.H" -#include "meshRefinement.H" -#include "decompositionMethod.H" -#include "fvMeshDistribute.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// Class forward declarations -class fvMesh; - -/*---------------------------------------------------------------------------*\ - Class autoHexMeshDriver Declaration -\*---------------------------------------------------------------------------*/ - -class autoHexMeshDriver -{ - // Static data members - - //- Extrusion controls - enum extrudeMode - { - NOEXTRUDE, /*!< Do not extrude. No layers added. */ - EXTRUDE, /*!< Extrude */ - EXTRUDEREMOVE /*!< Extrude but afterwards remove added */ - /*!< faces locally */ - }; - - - // Private classes - - //- Combine operator class for equalizing displacements. - class minMagEqOp - { - public: - - void operator()(vector& x, const vector& y) const - { - if (magSqr(y) < magSqr(x)) - { - x = y; - } - } - }; - - //- Combine operator class to combine normal with other normal. - class nomalsCombine - { - public: - - void operator()(vector& x, const vector& y) const - { - if (y != point::max) - { - if (x == point::max) - { - x = y; - } - else - { - x *= (x&y); - } - } - } - }; - - - - // Private data - - //- Reference to mesh - fvMesh& mesh_; - - //- Input dictionary - const dictionary dict_; - - //- Debug level - const label debug_; - - //- Merge distance - const scalar mergeDist_; - - - //- All surface based geometry - autoPtr allGeometryPtr_; - - //- Shells (geometry for inside/outside refinement) - autoPtr shellsPtr_; - - //- Surfaces (geometry for intersection based refinement) - autoPtr surfacesPtr_; - - //- Per refinement surface region the patch - labelList globalToPatch_; - - //- Mesh refinement engine - autoPtr meshRefinerPtr_; - - //- Decomposition engine - autoPtr decomposerPtr_; - - //- Mesh distribution engine - autoPtr distributorPtr_; - - - - // Private Member Functions - - //- Calculate merge distance. Check against writing tolerance. - scalar getMergeDistance(const scalar mergeTol) const; - - //static void orientOutside(PtrList&); - - //- Disallow default bitwise copy construct - autoHexMeshDriver(const autoHexMeshDriver&); - - //- Disallow default bitwise assignment - void operator=(const autoHexMeshDriver&); - -public: - - //- Runtime type information - ClassName("autoHexMeshDriver"); - - - // Constructors - - //- Construct from dictionary and mesh to modify - autoHexMeshDriver - ( - fvMesh& mesh, - const bool overwrite, - const dictionary& meshDict, - const dictionary& decomposeDict - ); - - - // Member Functions - - // Access - - //- reference to mesh - const fvMesh& mesh() const - { - return mesh_; - } - fvMesh& mesh() - { - return mesh_; - } - - //- Surfaces to base refinement on - const refinementSurfaces& surfaces() const - { - return surfacesPtr_(); - } - - //- Surfaces to volume refinement on - const shellSurfaces& shells() const - { - return shellsPtr_(); - } - - //- Per refinementsurface, per region the patch - const labelList& globalToPatch() const - { - return globalToPatch_; - } - - - // Meshing - - //- Write mesh - void writeMesh(const string&) const; - - //- Do all : refine, snap, layers - void doMesh(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C index be138e9d90..8f7ada0487 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C @@ -193,13 +193,13 @@ Foam::label Foam::autoLayerDriver::mergePatchFacesUndo errorFaces ); - // if (checkEdgeConnectivity) - // { + //if (checkEdgeConnectivity) + //{ // Info<< "Checking edge-face connectivity (duplicate faces" // << " or non-consecutive shared vertices)" << endl; - + // // label nOldSize = errorFaces.size(); - + // // hasErrors = // mesh.checkFaceFaces // ( @@ -207,7 +207,7 @@ Foam::label Foam::autoLayerDriver::mergePatchFacesUndo // &errorFaces // ) // || hasErrors; - + // // Info<< "Detected additional " // << returnReduce // ( @@ -216,7 +216,7 @@ Foam::label Foam::autoLayerDriver::mergePatchFacesUndo // ) // << " faces with illegal face-face connectivity" // << endl; - // } + //} if (!hasErrors) { @@ -2344,6 +2344,7 @@ Foam::label Foam::autoLayerDriver::checkAndUnmark ( const addPatchCellLayer& addLayer, const dictionary& meshQualityDict, + const List& baffles, const indirectPrimitivePatch& pp, const fvMesh& newMesh, @@ -2355,7 +2356,15 @@ Foam::label Foam::autoLayerDriver::checkAndUnmark // Check the resulting mesh for errors Info<< nl << "Checking mesh with layer ..." << endl; faceSet wrongFaces(newMesh, "wrongFaces", newMesh.nFaces()/1000); - motionSmoother::checkMesh(false, newMesh, meshQualityDict, wrongFaces); + motionSmoother::checkMesh + ( + false, + newMesh, + meshQualityDict, + identity(newMesh.nFaces()), + baffles, + wrongFaces + ); Info<< "Detected " << returnReduce(wrongFaces.size(), sumOp