Merge branch 'master' of /home/dm4/OpenFOAM/OpenFOAM-dev

This commit is contained in:
andy
2012-05-23 15:16:20 +01:00
29 changed files with 1114 additions and 1001 deletions

View File

@ -15,6 +15,9 @@
const volScalarField& kappa = tkappa(); const volScalarField& kappa = tkappa();
//const volSymmTensorField& K = tK(); //const volSymmTensorField& K = tK();
tmp<volScalarField> trhoCp = cp*rho;
const volScalarField& rhoCp = trhoCp();
volScalarField& T = thermo.T(); volScalarField& T = thermo.T();
IObasicSourceList& sources = solidHeatSources[i]; IObasicSourceList& sources = solidHeatSources[i];

View File

@ -4,7 +4,7 @@
tmp<fvScalarMatrix> TEqn tmp<fvScalarMatrix> TEqn
( (
- fvm::laplacian(betav*kappa, T, "laplacian(K,T)") - fvm::laplacian(betav*kappa, T, "laplacian(K,T)")
+ sources(rho, T) + sources(rhoCp, T)
); );
TEqn().relax(); TEqn().relax();

View File

@ -15,6 +15,9 @@
const volScalarField& kappa = tkappa(); const volScalarField& kappa = tkappa();
//const volSymmTensorField& K = tK(); //const volSymmTensorField& K = tK();
tmp<volScalarField> trhoCp = cp*rho;
const volScalarField& rhoCp = trhoCp();
volScalarField& T = thermo.T(); volScalarField& T = thermo.T();
IObasicSourceList& sources = solidHeatSources[i]; IObasicSourceList& sources = solidHeatSources[i];

View File

@ -10,7 +10,7 @@ if (finalIter)
( (
fvm::ddt(betav*rho*cp, T) fvm::ddt(betav*rho*cp, T)
- fvm::laplacian(betav*kappa, T, "laplacian(K,T)") - fvm::laplacian(betav*kappa, T, "laplacian(K,T)")
+ sources(rho, T) + sources(rhoCp, T)
); );
TEqn().relax(); TEqn().relax();

View File

@ -0,0 +1,75 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.openfoam.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
root "";
case "";
instance "";
local "";
class dictionary;
object meshQualityDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Maximum non-orthogonality allowed. Set to 180 to disable.
maxNonOrtho 65;
//- Max skewness allowed. Set to <0 to disable.
maxBoundarySkewness 50;
//- Max skewness allowed. Set to <0 to disable.
maxInternalSkewness 10;
//- Max concaveness allowed. Is angle (in degrees) below which concavity
// is allowed. 0 is straight face, <0 would be convex face.
// Set to 180 to disable.
maxConcave 80;
//- Minimum pyramid volume. Is absolute volume of cell pyramid.
// Set to a sensible fraction of the smallest cell volume expected.
// Set to very negative number (e.g. -1E30) to disable.
minVol 1e-20;
//- Minimum quality of the tet formed by the face-centre
// and variable base point minimum decomposition triangles and
// 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
// 1 = regular tet
minTetQuality 1e-30;
//- Minimum face area. Set to <0 to disable.
minArea -1;
//- Minimum face twist. Set to <-1 to disable. dot product of face normal
//- and face centre triangles normal
minTwist 0.0;
//- minimum normalised cell determinant
//- 1 = hex, <= 0 = folded or flattened illegal cell
minDeterminant 0.001;
//- minFaceWeight (0 -> 0.5)
minFaceWeight 0.02;
//- minVolRatio (0 -> 1)
minVolRatio 0.01;
//must be >0 for Fluent compatibility
minTriangleTwist -1;
// ************************************************************************* //

View File

@ -43,7 +43,7 @@ inline bool Foam::pointEdgeCollapse::update
<< "problem." << abort(FatalError); << "problem." << abort(FatalError);
} }
if (w2.collapseIndex_ == -1) if (w2.collapseIndex_ == -1 || collapseIndex_ == -1)
{ {
// Not marked for collapse; only happens on edges. // Not marked for collapse; only happens on edges.
return false; return false;
@ -56,11 +56,11 @@ inline bool Foam::pointEdgeCollapse::update
} }
else else
{ {
// Same coordinate. Same string? // Take over w2 if it is 'better'
if (w2.collapseIndex_ < collapseIndex_) if (w2.collapseIndex_ < collapseIndex_)
{ {
// Take over string index from w2 (and also coordinate but this // Take over string index and coordinate from w2
// was same)
operator=(w2); operator=(w2);
return true; return true;
} }
@ -85,35 +85,6 @@ inline bool Foam::pointEdgeCollapse::update
{ {
return false; return false;
} }
// if (samePoint(w2.collapsePoint_))
// {
// // Same coordinate. Same string?
// if (w2.collapseIndex_ < collapseIndex_)
// {
// // Take over string index from w2 (and also coordinate but
// // this was same)
// operator=(w2);
// return true;
// }
// else
// {
// return false;
// }
// }
// else
// {
// // Find nearest coordinate
// if (magSqr(w2.collapsePoint_) < magSqr(collapsePoint_))
// {
// operator=(w2);
// return true;
// }
// else
// {
// return false;
// }
// }
} }
} }

View File

@ -14,7 +14,7 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Move points: // Move boundary points:
// Every entry is two coordinates. First one is location of the point to move, // Every entry is two coordinates. First one is location of the point to move,
// the second is the position to move to. // the second is the position to move to.
pointsToMove pointsToMove
@ -22,15 +22,15 @@ pointsToMove
(( -0.17861 -0.45073 0.75276)( -0.18 -0.45073 0.75276)) (( -0.17861 -0.45073 0.75276)( -0.18 -0.45073 0.75276))
); );
// Split edge in two: // Split boundary edge in two:
// First coord is a point on the edge to cut, second is the position of the // First coord is a point on the (boundary) edge to cut, second is the
// newly introduced point // position of the newly introduced point
edgesToSplit edgesToSplit
( (
(( -0.17692 -0.45312 0.74516)( -0.18 -0.45 0.742)) (( -0.17692 -0.45312 0.74516)( -0.18 -0.45 0.742))
); );
// Triangulate a face: // Triangulate a boundary face:
// First coord is a point on the face to triangulate. It will introduce a // First coord is a point on the face to triangulate. It will introduce a
// point on the face, triangulate and move the point to the second coordinate. // point on the face, triangulate and move the point to the second coordinate.
facesToTriangulate facesToTriangulate
@ -38,8 +38,8 @@ facesToTriangulate
(( -0.039123 -0.45045 0.74083) (-0.03844 -0.45049 0.73572)) (( -0.039123 -0.45045 0.74083) (-0.03844 -0.45049 0.73572))
); );
// Edges to collapse. First coord is point on the edge, second is coordinate // Boundary edges to collapse. First coord is point on the edge, second
// to collapse to. // is coordinate to collapse to.
edgesToCollapse edgesToCollapse
( (
((0.054975 0.099987 0.0044074)(0.054975 0.099987 0.0044074)) ((0.054975 0.099987 0.0044074)(0.054975 0.099987 0.0044074))
@ -55,7 +55,8 @@ cellsToSplit
); );
// Change patch: // Change patch:
// Changes patchID of faces. Coord selects the face, label is the patch index. // Changes patchID of boundary faces. Coord selects the face, label is the
// patch index.
facesToRepatch facesToRepatch
( (
(( -0.039123 -0.45045 0.74083) 1) (( -0.039123 -0.45045 0.74083) 1)

View File

@ -1,3 +0,0 @@
checkCvMesh.C
EXE = $(FOAM_APPBIN)/checkCvMesh

View File

@ -1,14 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/triSurface/lnInclude \
-I$(LIB_SRC)/mesh/autoMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lfiniteVolume \
-ldynamicMesh \
-ltriSurface \
-lautoMesh \
-lmeshTools

View File

@ -1,122 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
\\/ 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 <http://www.gnu.org/licenses/>.
Application
checkCvMesh
Description
\*---------------------------------------------------------------------------*/
#include "argList.H"
#include "Time.H"
#include "fvMesh.H"
#include "autoSnapDriver.H"
#include "faceSet.H"
#include "motionSmoother.H"
#include "timeSelector.H"
using namespace Foam;
int main(int argc, char *argv[])
{
timeSelector::addOptions();
# include "addOverwriteOption.H"
# include "setRootCase.H"
# include "createTime.H"
instantList timeDirs = timeSelector::select0(runTime, args);
# include "createNamedPolyMesh.H"
runTime.functionObjects().off();
forAll(timeDirs, timeI)
{
runTime.setTime(timeDirs[timeI], timeI);
Info<< "Time = " << runTime.timeName()
<< nl << endl;
mesh.readUpdate();
// Check patches and faceZones are synchronised
mesh.boundaryMesh().checkParallelSync(true);
meshRefinement::checkCoupledFaceZones(mesh);
// Read meshing dictionary
IOdictionary cvMeshDict
(
IOobject
(
"cvMeshDict",
runTime.system(),
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
)
);
// mesh motion and mesh quality parameters
const dictionary& meshQualityDict
= cvMeshDict.subDict("meshQualityControls");
Info<< "Checking mesh ..." << endl;
faceSet wrongFaces(mesh, "wrongFaces", mesh.nFaces()/100);
motionSmoother::checkMesh(false, mesh, meshQualityDict, wrongFaces);
const label nInitErrors = returnReduce
(
wrongFaces.size(),
sumOp<label>()
);
Info<< "Detected " << nInitErrors << " illegal faces"
<< " (concave, zero area or negative cell pyramid volume)"
<< endl;
if (nInitErrors > 0)
{
Info<< "Writing " << nInitErrors
<< " faces in error to set "
<< wrongFaces.name() << endl;
wrongFaces.instance() = mesh.pointsInstance();
wrongFaces.write();
}
Info<< nl << "End of time " << runTime.timeName() << nl << endl;
}
Info<< "End\n" << endl;
return 0;
}

View File

@ -251,10 +251,10 @@ int main(int argc, char *argv[])
if (mode == PATCH || mode == MESH) if (mode == PATCH || mode == MESH)
{ {
if (flipNormals) if (flipNormals && mode == MESH)
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
<< "Flipping normals not supported for extrusions from patch." << "Flipping normals not supported for extrusions from mesh."
<< exit(FatalError); << exit(FatalError);
} }
@ -297,6 +297,60 @@ int main(int argc, char *argv[])
addPatchCellLayer layerExtrude(mesh, (mode == MESH)); addPatchCellLayer layerExtrude(mesh, (mode == MESH));
const labelList meshFaces(patchFaces(patches, sourcePatches)); const labelList meshFaces(patchFaces(patches, sourcePatches));
if (mode == PATCH && flipNormals)
{
// Cheat. Flip patch faces in mesh. This invalidates the
// mesh (open cells) but does produce the correct extrusion.
polyTopoChange meshMod(mesh);
forAll(meshFaces, i)
{
label meshFaceI = meshFaces[i];
label patchI = patches.whichPatch(meshFaceI);
label own = mesh.faceOwner()[meshFaceI];
label nei = -1;
if (patchI == -1)
{
nei = mesh.faceNeighbour()[meshFaceI];
}
label zoneI = mesh.faceZones().whichZone(meshFaceI);
bool zoneFlip = false;
if (zoneI != -1)
{
label index = mesh.faceZones()[zoneI].whichFace(meshFaceI);
zoneFlip = mesh.faceZones()[zoneI].flipMap()[index];
}
meshMod.modifyFace
(
mesh.faces()[meshFaceI].reverseFace(), // modified face
meshFaceI, // label of face
own, // owner
nei, // neighbour
true, // face flip
patchI, // patch for face
zoneI, // zone for face
zoneFlip // face flip in zone
);
}
// Change the mesh. No inflation.
autoPtr<mapPolyMesh> map = meshMod.changeMesh(mesh, false);
// Update fields
mesh.updateMesh(map);
// Move mesh (since morphing does not do this)
if (map().hasMotionPoints())
{
mesh.movePoints(map().preMotionPoints());
}
}
indirectPrimitivePatch extrudePatch indirectPrimitivePatch extrudePatch
( (
IndirectList<face> IndirectList<face>
@ -471,11 +525,6 @@ int main(int argc, char *argv[])
displacement[pointI] = extrudePt - layer0Points[pointI]; displacement[pointI] = extrudePt - layer0Points[pointI];
} }
if (flipNormals)
{
Info<< "Flipping faces." << nl << endl;
displacement = -displacement;
}
// Check if wedge (has layer0 different from original patch points) // Check if wedge (has layer0 different from original patch points)
// If so move the mesh to starting position. // If so move the mesh to starting position.

View File

@ -31,7 +31,8 @@ exposedPatchName movingWall;
// If construct from surface: // If construct from surface:
surface "movingWall.stl"; surface "movingWall.stl";
// Flip surface normals before usage. // Flip surface normals before usage. Valid only for extrude from surface or
// patch.
flipNormals false; flipNormals false;
//- Linear extrusion in point-normal direction //- Linear extrusion in point-normal direction

View File

@ -123,14 +123,6 @@ void writeMesh
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "addOverwriteOption.H" # include "addOverwriteOption.H"
Foam::argList::addBoolOption
(
"checkOnly",
"check existing mesh against snappyHexMeshDict settings"
);
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"
runTime.functionObjects().off(); runTime.functionObjects().off();
@ -141,8 +133,6 @@ int main(int argc, char *argv[])
const bool overwrite = args.optionFound("overwrite"); const bool overwrite = args.optionFound("overwrite");
const bool checkOnly = args.optionFound("checkOnly");
// Check patches and faceZones are synchronised // Check patches and faceZones are synchronised
mesh.boundaryMesh().checkParallelSync(true); mesh.boundaryMesh().checkParallelSync(true);
meshRefinement::checkCoupledFaceZones(mesh); meshRefinement::checkCoupledFaceZones(mesh);
@ -184,36 +174,6 @@ int main(int argc, char *argv[])
); );
if (checkOnly)
{
Info<< "Checking initial mesh ..." << endl;
faceSet wrongFaces(mesh, "wrongFaces", mesh.nFaces()/100);
motionSmoother::checkMesh(false, mesh, motionDict, wrongFaces);
const label nInitErrors = returnReduce
(
wrongFaces.size(),
sumOp<label>()
);
Info<< "Detected " << nInitErrors << " illegal faces"
<< " (concave, zero area or negative cell pyramid volume)"
<< endl;
if (nInitErrors > 0)
{
Info<< "Writing " << nInitErrors
<< " faces in error to set "
<< wrongFaces.name() << endl;
wrongFaces.instance() = mesh.pointsInstance();
wrongFaces.write();
}
Info<< "End\n" << endl;
return 0;
}
// Read decomposePar dictionary // Read decomposePar dictionary
IOdictionary decomposeDict IOdictionary decomposeDict

View File

@ -1,6 +1,7 @@
printMeshStats.C printMeshStats.C
checkTopology.C checkTopology.C
checkGeometry.C checkGeometry.C
checkMeshQuality.C
checkMesh.C checkMesh.C
EXE = $(FOAM_APPBIN)/checkMesh EXE = $(FOAM_APPBIN)/checkMesh

View File

@ -1,5 +1,7 @@
EXE_INC = \ EXE_INC = \
-I$(LIB_SRC)/meshTools/lnInclude -I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude
EXE_LIBS = \ EXE_LIBS = \
-lmeshTools -lmeshTools \
-ldynamicMesh

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -27,6 +27,21 @@ Application
Description Description
Checks validity of a mesh Checks validity of a mesh
Usage
- checkMesh [OPTION]
\param -allGeometry \n
Checks all (including non finite-volume specific) geometry
\param -allTopology \n
Checks all (including non finite-volume specific) addressing
\param -meshQualityDict \n
Checks against user defined (in \a system/meshQualityDict) quality settings
\param -region \<name\> \n
Specify an alternative mesh region.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "argList.H" #include "argList.H"
@ -39,6 +54,7 @@ Description
#include "printMeshStats.H" #include "printMeshStats.H"
#include "checkTopology.H" #include "checkTopology.H"
#include "checkGeometry.H" #include "checkGeometry.H"
#include "checkMeshQuality.H"
using namespace Foam; using namespace Foam;
@ -63,6 +79,11 @@ int main(int argc, char *argv[])
"allTopology", "allTopology",
"include extra topology checks" "include extra topology checks"
); );
argList::addBoolOption
(
"meshQualityDict",
"read user-defined mesh quality criterions from system/meshQualityDict"
);
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"
@ -72,6 +93,46 @@ int main(int argc, char *argv[])
const bool noTopology = args.optionFound("noTopology"); const bool noTopology = args.optionFound("noTopology");
const bool allGeometry = args.optionFound("allGeometry"); const bool allGeometry = args.optionFound("allGeometry");
const bool allTopology = args.optionFound("allTopology"); const bool allTopology = args.optionFound("allTopology");
const bool meshQualityDict = args.optionFound("meshQualityDict");
if (noTopology)
{
Info<< "Disabling all topology checks." << nl << endl;
}
if (allTopology)
{
Info<< "Enabling all (cell, face, edge, point) topology checks."
<< nl << endl;
}
if (allGeometry)
{
Info<< "Enabling all geometry checks." << nl << endl;
}
if (meshQualityDict)
{
Info<< "Enabling user-defined geometry checks." << nl << endl;
}
autoPtr<IOdictionary> qualDict;
if (meshQualityDict)
{
qualDict.reset
(
new IOdictionary
(
IOobject
(
"meshQualityDict",
mesh.time().system(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
)
);
}
forAll(timeDirs, timeI) forAll(timeDirs, timeI)
{ {
@ -96,25 +157,31 @@ int main(int argc, char *argv[])
printMeshStats(mesh, allTopology); printMeshStats(mesh, allTopology);
label noFailedChecks = 0; label nFailedChecks = 0;
if (!noTopology) if (!noTopology)
{ {
noFailedChecks += checkTopology(mesh, allTopology, allGeometry); nFailedChecks += checkTopology(mesh, allTopology, allGeometry);
} }
noFailedChecks += checkGeometry(mesh, allGeometry); nFailedChecks += checkGeometry(mesh, allGeometry);
// Note: no reduction in noFailedChecks necessary since is if (meshQualityDict)
{
nFailedChecks += checkMeshQuality(mesh, qualDict());
}
// Note: no reduction in nFailedChecks necessary since is
// counter of checks, not counter of failed cells,faces etc. // counter of checks, not counter of failed cells,faces etc.
if (noFailedChecks == 0) if (nFailedChecks == 0)
{ {
Info<< "\nMesh OK.\n" << endl; Info<< "\nMesh OK.\n" << endl;
} }
else else
{ {
Info<< "\nFailed " << noFailedChecks << " mesh checks.\n" Info<< "\nFailed " << nFailedChecks << " mesh checks.\n"
<< endl; << endl;
} }
} }
@ -124,6 +191,12 @@ int main(int argc, char *argv[])
label nFailedChecks = checkGeometry(mesh, allGeometry); label nFailedChecks = checkGeometry(mesh, allGeometry);
if (meshQualityDict)
{
nFailedChecks += checkMeshQuality(mesh, qualDict());
}
if (nFailedChecks) if (nFailedChecks)
{ {
Info<< "\nFailed " << nFailedChecks << " mesh checks.\n" Info<< "\nFailed " << nFailedChecks << " mesh checks.\n"

View File

@ -0,0 +1,34 @@
#include "checkMeshQuality.H"
#include "polyMesh.H"
#include "cellSet.H"
#include "faceSet.H"
#include "motionSmoother.H"
Foam::label Foam::checkMeshQuality
(
const polyMesh& mesh,
const dictionary& dict
)
{
label noFailedChecks = 0;
{
faceSet faces(mesh, "meshQualityFaces", mesh.nFaces()/100+1);
motionSmoother::checkMesh(false, mesh, dict, faces);
label nFaces = returnReduce(faces.size(), sumOp<label>());
if (nFaces > 0)
{
noFailedChecks++;
Info<< " <<Writing " << nFaces
<< " faces in error to set " << faces.name() << endl;
faces.instance() = mesh.pointsInstance();
faces.write();
}
}
return noFailedChecks;
}

View File

@ -0,0 +1,6 @@
#include "polyMesh.H"
namespace Foam
{
label checkMeshQuality(const polyMesh& mesh, const dictionary&);
}

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -52,6 +52,7 @@ Foam::vtkTopo::vtkTopo(const polyMesh& mesh)
const cellModel& tet = *(cellModeller::lookup("tet")); const cellModel& tet = *(cellModeller::lookup("tet"));
const cellModel& pyr = *(cellModeller::lookup("pyr")); const cellModel& pyr = *(cellModeller::lookup("pyr"));
const cellModel& prism = *(cellModeller::lookup("prism")); const cellModel& prism = *(cellModeller::lookup("prism"));
const cellModel& wedge = *(cellModeller::lookup("wedge"));
const cellModel& tetWedge = *(cellModeller::lookup("tetWedge")); const cellModel& tetWedge = *(cellModeller::lookup("tetWedge"));
const cellModel& hex = *(cellModeller::lookup("hex")); const cellModel& hex = *(cellModeller::lookup("hex"));
@ -77,7 +78,7 @@ Foam::vtkTopo::vtkTopo(const polyMesh& mesh)
if if
( (
model != hex model != hex
// && model != wedge // See above. && model != wedge // See above.
&& model != prism && model != prism
&& model != pyr && model != pyr
&& model != tet && model != tet
@ -164,21 +165,21 @@ Foam::vtkTopo::vtkTopo(const polyMesh& mesh)
cellTypes_[cellI] = VTK_WEDGE; cellTypes_[cellI] = VTK_WEDGE;
} }
// else if (cellModel == wedge) else if (cellModel == wedge)
// { {
// // Treat as squeezed hex // Treat as squeezed hex
// vtkVerts.setSize(8); vtkVerts.setSize(8);
// vtkVerts[0] = cellShape[0]; vtkVerts[0] = cellShape[0];
// vtkVerts[1] = cellShape[1]; vtkVerts[1] = cellShape[1];
// vtkVerts[2] = cellShape[2]; vtkVerts[2] = cellShape[2];
// vtkVerts[3] = cellShape[0]; vtkVerts[3] = cellShape[2];
// vtkVerts[4] = cellShape[3]; vtkVerts[4] = cellShape[3];
// vtkVerts[5] = cellShape[4]; vtkVerts[5] = cellShape[4];
// vtkVerts[6] = cellShape[5]; vtkVerts[6] = cellShape[5];
// vtkVerts[7] = cellShape[6]; vtkVerts[7] = cellShape[6];
//
// cellTypes_[cellI] = VTK_HEXAHEDRON; cellTypes_[cellI] = VTK_HEXAHEDRON;
// } }
else if (cellModel == hex) else if (cellModel == hex)
{ {
vtkVerts = cellShape; vtkVerts = cellShape;

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -554,6 +554,15 @@ public:
const int tag = UPstream::msgType() const int tag = UPstream::msgType()
); );
//- Distribute data using default commsType.
template<class T>
void distribute
(
DynamicList<T>& fld,
const bool dummyTransform = true,
const int tag = UPstream::msgType()
) const;
//- Distribute data using default commsType. //- Distribute data using default commsType.
template<class T> template<class T>
void distribute void distribute

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -887,6 +887,25 @@ void Foam::mapDistribute::applyInverseTransforms
} }
//- Distribute data using default commsType.
template<class T>
void Foam::mapDistribute::distribute
(
DynamicList<T>& fld,
const bool dummyTransform,
const int tag
) const
{
fld.shrink();
List<T>& fldList = static_cast<List<T>& >(fld);
distribute(fldList, dummyTransform, tag);
fld.setCapacity(fldList.size());
}
//- Distribute data using default commsType. //- Distribute data using default commsType.
template<class T> template<class T>
void Foam::mapDistribute::distribute void Foam::mapDistribute::distribute

View File

@ -634,7 +634,7 @@ bool Foam::processorPolyPatch::order
fileName str fileName str
( (
boundaryMesh().mesh().time().path() boundaryMesh().mesh().time().path()
/name()/name()+"_faces.obj" /name() + "_faces.obj"
); );
Pout<< "processorPolyPatch::order :" Pout<< "processorPolyPatch::order :"
<< " Writing faces to OBJ file " << str.name() << endl; << " Writing faces to OBJ file " << str.name() << endl;

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -127,9 +127,7 @@ public:
// A point can be deleted if // A point can be deleted if
// - it is not used by any edge. // - it is not used by any edge.
// or // or
// - is not used by an internal edge // - is used by only two edges
// - is used by only two boundary edges. (note that these two
// edges will always be boundary ones!)
// - these two edges are sufficiently in line (cos > minCos) // - these two edges are sufficiently in line (cos > minCos)
// - all processors agree that point can be deleted. // - all processors agree that point can be deleted.
label countPointUsage label countPointUsage

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -132,7 +132,7 @@ void Foam::cylindricalInletVelocityFvPatchVectorField::updateCoeffs()
vector hatAxis = axis_/mag(axis_); vector hatAxis = axis_/mag(axis_);
const vectorField r(patch().Cf() - centre_); const vectorField r(patch().Cf() - centre_);
tmp<vectorField> d = r - (hatAxis & r)*hatAxis; const vectorField d = r - (hatAxis & r)*hatAxis;
tmp<vectorField> tangVel tmp<vectorField> tangVel
( (

View File

@ -6,7 +6,8 @@ cd ${0%/*} || exit 1 # run from this directory
runApplication blockMesh runApplication blockMesh
runApplication cvMesh runApplication cvMesh
runApplication snappyHexMesh #runApplication collapseEdges 1e-10 180 -overwrite
runApplication snappyHexMesh -overwrite
runApplication checkMesh -constant -allGeometry -allTopology runApplication checkMesh -constant -allGeometry -allTopology
# ----------------------------------------------------------------- end-of-file # ----------------------------------------------------------------- end-of-file

View File

@ -92,6 +92,8 @@ surfaceConformation
surfaceConformationRebuildFrequency 10; surfaceConformationRebuildFrequency 10;
specialiseFeaturePoints off;
conformationControls conformationControls
{ {
initial initial
@ -230,18 +232,8 @@ polyMeshFiltering
meshQualityControls meshQualityControls
{ {
maxNonOrtho 65; #include "meshQualityDict"
maxBoundarySkewness 50;
maxInternalSkewness 10;
maxConcave 80;
minVol 1e-20;
minTetQuality 1e-30;
minArea -1;
minTwist 0.0;
minDeterminant 0.001;
minFaceWeight 0.02;
minVolRatio 0.01;
minTriangleTwist -1;
} }
// ************************************************************************* // // ************************************************************************* //

View File

@ -0,0 +1,73 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
root "";
case "";
instance "";
local "";
class dictionary;
object meshQualityDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//- Maximum non-orthogonality allowed. Set to 180 to disable.
maxNonOrtho 65;
//- Max skewness allowed. Set to <0 to disable.
maxBoundarySkewness 50;
maxInternalSkewness 10;
//- Max concaveness allowed. Is angle (in degrees) below which concavity
// is allowed. 0 is straight face, <0 would be convex face.
// Set to 180 to disable.
maxConcave 80;
//- Minimum quality of the tet formed by the face-centre
// and variable base point minimum decomposition triangles and
// 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
// 1 = regular tet
minTetQuality 1e-30;
//- Minimum pyramid volume. Is absolute volume of cell pyramid.
// Set to a sensible fraction of the smallest cell volume expected.
// Set to very negative number (e.g. -1E30) to disable.
minVol 1e-20;
//- Minimum face area. Set to <0 to disable.
minArea -1;
//- Minimum face twist. Set to <-1 to disable. dot product of face normal
//- and face centre triangles normal
minTwist 0.001;
//- minimum normalised cell determinant
//- 1 = hex, <= 0 = folded or flattened illegal cell
minDeterminant 0.001;
//- minFaceWeight (0 -> 0.5)
minFaceWeight 0.02;
//- minVolRatio (0 -> 1)
minVolRatio 0.01;
//must be >0 for Fluent compatibility
minTriangleTwist -1;
// ************************************************************************* //

View File

@ -282,53 +282,7 @@ addLayersControls
// where to undo. // where to undo.
meshQualityControls meshQualityControls
{ {
//- Maximum non-orthogonality allowed. Set to 180 to disable. #include "meshQualityDict"
maxNonOrtho 65;
//- Max skewness allowed. Set to <0 to disable.
maxBoundarySkewness 20;
maxInternalSkewness 4;
//- Max concaveness allowed. Is angle (in degrees) below which concavity
// is allowed. 0 is straight face, <0 would be convex face.
// Set to 180 to disable.
maxConcave 80;
//- Minimum pyramid volume. Is absolute volume of cell pyramid.
// Set to a sensible fraction of the smallest cell volume expected.
// Set to very negative number (e.g. -1E30) to disable.
minVol 1e-13;
//- Minimum quality of the tet formed by the face-centre
// and variable base point minimum decomposition triangles and
// 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
// 1 = regular tet
minTetQuality -1; //1e-30;
//- Minimum face area. Set to <0 to disable.
minArea -1;
//- Minimum face twist. Set to <-1 to disable. dot product of face normal
//- and face centre triangles normal
minTwist 0.02;
//- minimum normalised cell determinant
//- 1 = hex, <= 0 = folded or flattened illegal cell
minDeterminant 0.001;
//- minFaceWeight (0 -> 0.5)
minFaceWeight 0.02;
//- minVolRatio (0 -> 1)
minVolRatio 0.01;
//must be >0 for Fluent compatibility
minTriangleTwist -1;
// Advanced // Advanced