Commit 8a8d5b2d authored by sergio's avatar sergio
Browse files
parents d8a14ecf a47b12ea
......@@ -105,7 +105,15 @@
+ Additional wall functions for primary region momentum and temperature
taking film into account
+ Parallel aware
*** *New* ptscotch decomposition method
*** *New* ptscotch decomposition method.
*** *New* multiLevel decomposition method.
Decomposes in levels, e.g. first decompose onto number of nodes and
then onto number of cores per node. This will minimise off-node
communication. Each level can use any of the other decomposition methods
*** *New* structured decomposition method.
Does a 2D decomposition of a mesh. Valid only for an 'extruded' mesh, i.e.
columns of cells originating from a patch. Bases decomposition on this
patch and assigns the cells according to the patch decomposition.
*** *Updated* scotch decomposition method to run in parallel by doing
decomposition on the master. Unfortunately scotch and ptscotch cannot
be linked in to the same executable.
......@@ -229,7 +237,8 @@
(nonuniformTransform)cyclic <zoneA>_<zoneB>
+ extrudes into master direction (i.e. away from the owner cell
if flipMap is false)
+ =topoSet=: replacement of cellSet,faceSet,pointSet utilities.
+ =topoSet=: replacement of cellSet,faceSet,pointSet utilities. Multiple
commands operating on different sets.
Comparable to a dictionary driven =setSet= utility.
*** Updated utilities
+ =setFields=: optionally use faceSets to set patch values (see
......
......@@ -37,6 +37,7 @@ method scotch;
// method metis;
// method manual;
// method multiLevel;
// method structured; // does 2D decomposition of structured mesh
multiLevelCoeffs
{
......@@ -108,6 +109,15 @@ manualCoeffs
}
structuredCoeffs
{
// Patches to do 2D decomposition on. Structured mesh only; cells have
// to be in 'columns' on top of patches.
patches (bottomPatch);
}
//// Is the case distributed
//distributed yes;
//// Per slave (so nProcs-1 entries) the directory above the case.
......
......@@ -860,6 +860,16 @@ bool Foam::domainDecomposition::writeDecomposition()
scalar avgProcPatches = scalar(totProcPatches)/nProcs_;
scalar avgProcFaces = scalar(totProcFaces)/nProcs_;
// In case of all faces on one processor. Just to avoid division by 0.
if (totProcPatches == 0)
{
avgProcPatches = 1;
}
if (totProcFaces == 0)
{
avgProcFaces = 1;
}
Info<< nl
<< "Number of processor faces = " << totProcFaces/2 << nl
<< "Max number of cells = " << maxProcCells
......
......@@ -475,6 +475,16 @@ void printMeshData(const polyMesh& mesh)
scalar avgProcPatches = scalar(totProcPatches)/Pstream::nProcs();
scalar avgProcFaces = scalar(totProcFaces)/Pstream::nProcs();
// In case of all faces on one processor. Just to avoid division by 0.
if (totProcPatches == 0)
{
avgProcPatches = 1;
}
if (totProcFaces == 0)
{
avgProcFaces = 1;
}
Info<< nl
<< "Number of processor faces = " << totProcFaces/2 << nl
<< "Max number of cells = " << maxProcCells
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -249,7 +249,11 @@ int main(int argc, char *argv[])
// search engine
indexedOctree<treeDataTriSurface> selectTree
(
treeDataTriSurface(selectSurf),
treeDataTriSurface
(
selectSurf,
indexedOctree<treeDataTriSurface>::perturbTol()
),
bb.extend(rndGen, 1E-4), // slightly randomize bb
8, // maxLevel
10, // leafsize
......
......@@ -714,7 +714,7 @@ Foam::point Foam::indexedOctree<Type>::pushPoint
)
{
// Get local length scale.
const vector perturbVec = perturbTol_*(bb.span());
const vector perturbVec = perturbTol_*bb.span();
point perturbedPt(pt);
......
......@@ -179,9 +179,14 @@ defineTypeNameAndDebug(Foam::treeDataTriSurface, 0);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::treeDataTriSurface::treeDataTriSurface(const triSurface& surface)
Foam::treeDataTriSurface::treeDataTriSurface
(
const triSurface& surface,
const scalar planarTol
)
:
surface_(surface)
surface_(surface),
planarTol_(planarTol)
{}
......@@ -437,7 +442,7 @@ bool Foam::treeDataTriSurface::intersects
dir,
points,
intersection::HALF_RAY,
indexedOctree<treeDataTriSurface>::perturbTol()
planarTol_
);
if (inter.hit() && inter.distance() <= 1)
......
......@@ -55,8 +55,11 @@ class treeDataTriSurface
{
// Private data
//- Reference to triSurface
const triSurface& surface_;
//- Tolerance to use for intersection tests
const scalar planarTol_;
// Private Member Functions
......@@ -83,8 +86,9 @@ public:
// Constructors
//- Construct from triSurface. Holds reference.
treeDataTriSurface(const triSurface&);
//- Construct from triSurface and tolerance for intersection
// tests. Holds reference.
treeDataTriSurface(const triSurface&, const scalar planarTol);
// Member Functions
......
......@@ -492,7 +492,7 @@ void Foam::triSurfaceMesh::movePoints(const pointField& newPoints)
const Foam::indexedOctree<Foam::treeDataTriSurface>&
Foam::triSurfaceMesh::tree() const
Foam::triSurfaceMesh::tree() const
{
if (tree_.empty())
{
......@@ -528,7 +528,7 @@ const Foam::indexedOctree<Foam::treeDataTriSurface>&
(
new indexedOctree<treeDataTriSurface>
(
treeDataTriSurface(*this),
treeDataTriSurface(*this, tolerance_),
bb,
maxTreeDepth_, // maxLevel
10, // leafsize
......@@ -544,7 +544,7 @@ const Foam::indexedOctree<Foam::treeDataTriSurface>&
const Foam::indexedOctree<Foam::treeDataEdge>&
Foam::triSurfaceMesh::edgeTree() const
Foam::triSurfaceMesh::edgeTree() const
{
if (edgeTree_.empty())
{
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -64,7 +64,11 @@ Foam::triSurfaceSearch::triSurfaceSearch(const triSurface& surface)
(
new indexedOctree<treeDataTriSurface>
(
treeDataTriSurface(surface_),
treeDataTriSurface
(
surface_,
indexedOctree<treeDataTriSurface>::perturbTol()
),
treeBb,
8, // maxLevel
10, // leafsize
......
......@@ -448,8 +448,8 @@ void Foam::decompositionMethod::calcCellCells
// Count number of faces (internal + coupled)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Number of faces per cell
labelList nFacesPerCell(mesh.nCells(), 0);
// Number of faces per coarse cell
labelList nFacesPerCell(nCoarse, 0);
for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++)
{
......@@ -481,7 +481,11 @@ void Foam::decompositionMethod::calcCellCells
{
label own = agglom[faceOwner[faceI]];
label globalNei = globalNeighbour[bFaceI];
if (cellPair.insert(labelPair(own, globalNei)))
if
(
globalAgglom.toGlobal(own) != globalNei
&& cellPair.insert(labelPair(own, globalNei))
)
{
nFacesPerCell[own]++;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment