mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' of /home/dm4/OpenFOAM/OpenFOAM-dev
This commit is contained in:
@ -13,6 +13,7 @@ EXE_INC = \
|
||||
${CGAL_EXACT} \
|
||||
${CGAL_INEXACT} \
|
||||
${CGAL_INC} \
|
||||
${c++CGALWARN} \
|
||||
-IconformalVoronoiMesh/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
|
||||
@ -14,6 +14,7 @@ EXE_INC = \
|
||||
${CGAL_EXACT} \
|
||||
${CGAL_INEXACT} \
|
||||
${CGAL_INC} \
|
||||
${c++CGALWARN} \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(LIB_SRC)/parallel/decompose/decompositionMethods/lnInclude \
|
||||
|
||||
@ -9,6 +9,7 @@ EXE_INC = \
|
||||
${EXE_FROUNDING_MATH} \
|
||||
${EXE_NDEBUG} \
|
||||
${CGAL_INC} \
|
||||
${c++CGALWARN} \
|
||||
-I$(FOAM_APP)/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/lnInclude \
|
||||
-I../cvMesh/vectorTools \
|
||||
-IconformalVoronoi2DMesh/lnInclude \
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
patchFaceOrientation.C
|
||||
orientFaceZone.C
|
||||
|
||||
EXE = $(FOAM_APPBIN)/orientFaceZone
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(LIB_SRC)/mesh/autoMesh/lnInclude \
|
||||
-I$(LIB_SRC)/triSurface/lnInclude
|
||||
|
||||
EXE_LIBS = \
|
||||
-lmeshTools \
|
||||
-lautoMesh \
|
||||
-ltriSurface
|
||||
|
||||
@ -52,10 +52,14 @@ inline Foam::autoPtr<T>::autoPtr(const autoPtr<T>& ap, const bool reUse)
|
||||
ptr_ = ap.ptr_;
|
||||
ap.ptr_ = 0;
|
||||
}
|
||||
else
|
||||
else if (ap.valid())
|
||||
{
|
||||
ptr_ = ap().clone().ptr();
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr_ = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -12,4 +12,22 @@ fi
|
||||
|
||||
wmake $makeType pairPatchAgglomeration
|
||||
|
||||
|
||||
## get SCOTCH_VERSION, SCOTCH_ARCH_PATH
|
||||
#if settings=`$WM_PROJECT_DIR/bin/foamEtcFile config/scotch.sh`
|
||||
#then
|
||||
# . $settings
|
||||
# echo "using SCOTCH_ARCH_PATH=$SCOTCH_ARCH_PATH"
|
||||
#else
|
||||
# echo
|
||||
# echo "Error: no config/scotch.sh settings"
|
||||
# echo
|
||||
#fi
|
||||
#
|
||||
#if [ -n "$SCOTCH_ARCH_PATH" ]
|
||||
#then
|
||||
# wmake $makeType scotchGamgAgglomeration
|
||||
#fi
|
||||
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
||||
|
||||
@ -17,6 +17,8 @@ $(autoHexMesh)/meshRefinement/meshRefinement.C
|
||||
$(autoHexMesh)/meshRefinement/meshRefinementMerge.C
|
||||
$(autoHexMesh)/meshRefinement/meshRefinementProblemCells.C
|
||||
$(autoHexMesh)/meshRefinement/meshRefinementRefine.C
|
||||
$(autoHexMesh)/meshRefinement/patchFaceOrientation.C
|
||||
|
||||
$(autoHexMesh)/refinementFeatures/refinementFeatures.C
|
||||
$(autoHexMesh)/refinementSurfaces/surfaceZonesInfo.C
|
||||
$(autoHexMesh)/refinementSurfaces/refinementSurfaces.C
|
||||
|
||||
@ -112,8 +112,6 @@ const
|
||||
|
||||
if (localCellI != -1)
|
||||
{
|
||||
Pout<< "Found point " << keepPoint << " in cell " << localCellI
|
||||
<< " on processor " << Pstream::myProcNo() << endl;
|
||||
globalCellI = globalCells.toGlobal(localCellI);
|
||||
}
|
||||
|
||||
@ -130,6 +128,14 @@ const
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
|
||||
label procI = globalCells.whichProcID(globalCellI);
|
||||
label procCellI = globalCells.toLocal(procI, globalCellI);
|
||||
|
||||
Info<< "Found point " << keepPoint << " in cell " << procCellI
|
||||
<< " on processor " << procI << endl;
|
||||
|
||||
|
||||
if (globalCells.isLocal(globalCellI))
|
||||
{
|
||||
cellLabels[i] = localCellI;
|
||||
|
||||
@ -379,6 +379,7 @@ Foam::label Foam::regionSplit::calcLocalRegionSplit
|
||||
|
||||
Foam::autoPtr<Foam::globalIndex> Foam::regionSplit::calcRegionSplit
|
||||
(
|
||||
const bool doGlobalRegions,
|
||||
const boolList& blockedFace,
|
||||
const List<labelPair>& explicitConnections,
|
||||
|
||||
@ -395,7 +396,7 @@ Foam::autoPtr<Foam::globalIndex> Foam::regionSplit::calcRegionSplit
|
||||
cellRegion
|
||||
);
|
||||
|
||||
if (!Pstream::parRun())
|
||||
if (!doGlobalRegions)
|
||||
{
|
||||
return autoPtr<globalIndex>(new globalIndex(nLocalRegions));
|
||||
}
|
||||
@ -422,7 +423,7 @@ Foam::autoPtr<Foam::globalIndex> Foam::regionSplit::calcRegionSplit
|
||||
// (this will create gaps in the global region list so they will get
|
||||
// merged later on)
|
||||
|
||||
while (Pstream::parRun())
|
||||
while (true)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
@ -690,13 +691,14 @@ Foam::autoPtr<Foam::globalIndex> Foam::regionSplit::calcRegionSplit
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::regionSplit::regionSplit(const polyMesh& mesh)
|
||||
Foam::regionSplit::regionSplit(const polyMesh& mesh, const bool doGlobalRegions)
|
||||
:
|
||||
MeshObject<polyMesh, Foam::TopologicalMeshObject, regionSplit>(mesh),
|
||||
labelList(mesh.nCells(), -1)
|
||||
{
|
||||
globalNumberingPtr_ = calcRegionSplit
|
||||
(
|
||||
doGlobalRegions, //do global regions
|
||||
boolList(0, false), //blockedFaces
|
||||
List<labelPair>(0), //explicitConnections,
|
||||
*this
|
||||
@ -707,7 +709,8 @@ Foam::regionSplit::regionSplit(const polyMesh& mesh)
|
||||
Foam::regionSplit::regionSplit
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
const boolList& blockedFace
|
||||
const boolList& blockedFace,
|
||||
const bool doGlobalRegions
|
||||
)
|
||||
:
|
||||
MeshObject<polyMesh, Foam::TopologicalMeshObject, regionSplit>(mesh),
|
||||
@ -715,6 +718,7 @@ Foam::regionSplit::regionSplit
|
||||
{
|
||||
globalNumberingPtr_ = calcRegionSplit
|
||||
(
|
||||
doGlobalRegions,
|
||||
blockedFace, //blockedFaces
|
||||
List<labelPair>(0), //explicitConnections,
|
||||
*this
|
||||
@ -726,7 +730,8 @@ Foam::regionSplit::regionSplit
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
const boolList& blockedFace,
|
||||
const List<labelPair>& explicitConnections
|
||||
const List<labelPair>& explicitConnections,
|
||||
const bool doGlobalRegions
|
||||
)
|
||||
:
|
||||
MeshObject<polyMesh, Foam::TopologicalMeshObject, regionSplit>(mesh),
|
||||
@ -734,6 +739,7 @@ Foam::regionSplit::regionSplit
|
||||
{
|
||||
globalNumberingPtr_ = calcRegionSplit
|
||||
(
|
||||
doGlobalRegions,
|
||||
blockedFace, //blockedFaces
|
||||
explicitConnections, //explicitConnections,
|
||||
*this
|
||||
|
||||
@ -87,6 +87,9 @@ Description
|
||||
proc0 | proc1 | proc2
|
||||
|
||||
|
||||
Can optionally keep all regions local to the processor.
|
||||
|
||||
|
||||
SourceFiles
|
||||
regionSplit.C
|
||||
|
||||
@ -155,6 +158,7 @@ class regionSplit
|
||||
//- Calculate global region split. Return globalIndex.
|
||||
autoPtr<globalIndex> calcRegionSplit
|
||||
(
|
||||
const bool doGlobalRegions,
|
||||
const boolList& blockedFace,
|
||||
const List<labelPair>& explicitConnections,
|
||||
labelList& cellRegion
|
||||
@ -170,11 +174,20 @@ public:
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
regionSplit(const polyMesh&);
|
||||
regionSplit
|
||||
(
|
||||
const polyMesh&,
|
||||
const bool doGlobalRegions = Pstream::parRun()
|
||||
);
|
||||
|
||||
//- Construct from mesh and whether face is blocked
|
||||
// NOTE: blockedFace has to be consistent across coupled faces!
|
||||
regionSplit(const polyMesh&, const boolList& blockedFace);
|
||||
regionSplit
|
||||
(
|
||||
const polyMesh&,
|
||||
const boolList& blockedFace,
|
||||
const bool doGlobalRegions = Pstream::parRun()
|
||||
);
|
||||
|
||||
//- Construct from mesh and whether face is blocked. Additional explicit
|
||||
// connections between normal boundary faces.
|
||||
@ -183,7 +196,8 @@ public:
|
||||
(
|
||||
const polyMesh&,
|
||||
const boolList& blockedFace,
|
||||
const List<labelPair>&
|
||||
const List<labelPair>&,
|
||||
const bool doGlobalRegions = Pstream::parRun()
|
||||
);
|
||||
|
||||
|
||||
@ -195,6 +209,12 @@ public:
|
||||
return globalNumberingPtr_();
|
||||
}
|
||||
|
||||
//- Return local number of regions
|
||||
label nLocalRegions() const
|
||||
{
|
||||
return globalNumbering().localSize(Pstream::myProcNo());
|
||||
}
|
||||
|
||||
//- Return total number of regions
|
||||
label nRegions() const
|
||||
{
|
||||
|
||||
@ -167,7 +167,7 @@ void Foam::decompositionMethod::calcCellCells
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
const labelList& agglom,
|
||||
const label nCoarse,
|
||||
const label nLocalCoarse,
|
||||
const bool parallel,
|
||||
CompactListList<label>& cellCells
|
||||
)
|
||||
@ -182,7 +182,7 @@ void Foam::decompositionMethod::calcCellCells
|
||||
|
||||
globalIndex globalAgglom
|
||||
(
|
||||
nCoarse,
|
||||
nLocalCoarse,
|
||||
Pstream::msgType(),
|
||||
Pstream::worldComm,
|
||||
parallel
|
||||
@ -224,7 +224,7 @@ void Foam::decompositionMethod::calcCellCells
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
// Number of faces per coarse cell
|
||||
labelList nFacesPerCell(nCoarse, 0);
|
||||
labelList nFacesPerCell(nLocalCoarse, 0);
|
||||
|
||||
for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++)
|
||||
{
|
||||
@ -374,7 +374,7 @@ void Foam::decompositionMethod::calcCellCells
|
||||
// const boolList& blockedFace,
|
||||
// const List<labelPair>& explicitConnections,
|
||||
// const labelList& agglom,
|
||||
// const label nCoarse,
|
||||
// const label nLocalCoarse,
|
||||
// const bool parallel,
|
||||
// CompactListList<label>& cellCells
|
||||
//)
|
||||
@ -389,7 +389,7 @@ void Foam::decompositionMethod::calcCellCells
|
||||
//
|
||||
// globalIndex globalAgglom
|
||||
// (
|
||||
// nCoarse,
|
||||
// nLocalCoarse,
|
||||
// Pstream::msgType(),
|
||||
// Pstream::worldComm,
|
||||
// parallel
|
||||
@ -431,7 +431,7 @@ void Foam::decompositionMethod::calcCellCells
|
||||
// // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
// // Number of faces per coarse cell
|
||||
// labelList nFacesPerCell(nCoarse, 0);
|
||||
// labelList nFacesPerCell(nLocalCoarse, 0);
|
||||
//
|
||||
// // 1. Internal faces
|
||||
// for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++)
|
||||
@ -764,6 +764,24 @@ Foam::labelList Foam::decompositionMethod::decompose
|
||||
// Any weights specified?
|
||||
label nWeights = returnReduce(cellWeights.size(), sumOp<label>());
|
||||
|
||||
if (nWeights > 0 && cellWeights.size() != mesh.nCells())
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"decompositionMethod::decompose\n"
|
||||
"(\n"
|
||||
" const polyMesh&,\n"
|
||||
" const scalarField&,\n"
|
||||
" const boolList&,\n"
|
||||
" const PtrList<labelList>&,\n"
|
||||
" const labelList&,\n"
|
||||
" const List<labelPair>&\n"
|
||||
) << "Number of weights " << cellWeights.size()
|
||||
<< " differs from number of cells " << mesh.nCells()
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
|
||||
// Any processor sets?
|
||||
label nProcSets = 0;
|
||||
forAll(specifiedProcessorFaces, setI)
|
||||
@ -828,10 +846,18 @@ Foam::labelList Foam::decompositionMethod::decompose
|
||||
<< nProcSets << endl << endl;
|
||||
}
|
||||
|
||||
// Determine global regions, separated by blockedFaces
|
||||
regionSplit globalRegion(mesh, blockedFace, explicitConnections);
|
||||
// Determine local regions, separated by blockedFaces
|
||||
regionSplit localRegion(mesh, blockedFace, explicitConnections, false);
|
||||
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "Constrained decomposition:" << endl
|
||||
<< " split into " << localRegion.nLocalRegions()
|
||||
<< " regions."
|
||||
<< endl;
|
||||
}
|
||||
|
||||
// Determine region cell centres
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@ -840,11 +866,11 @@ Foam::labelList Foam::decompositionMethod::decompose
|
||||
// somewhere in the middle of the domain which might not be anywhere
|
||||
// near any of the cells.
|
||||
|
||||
pointField regionCentres(globalRegion.nRegions(), point::max);
|
||||
pointField regionCentres(localRegion.nLocalRegions(), point::max);
|
||||
|
||||
forAll(globalRegion, cellI)
|
||||
forAll(localRegion, cellI)
|
||||
{
|
||||
label regionI = globalRegion[cellI];
|
||||
label regionI = localRegion[cellI];
|
||||
|
||||
if (regionCentres[regionI] == point::max)
|
||||
{
|
||||
@ -855,22 +881,22 @@ Foam::labelList Foam::decompositionMethod::decompose
|
||||
// Do decomposition on agglomeration
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
scalarField regionWeights(globalRegion.nRegions(), 0);
|
||||
scalarField regionWeights(localRegion.nLocalRegions(), 0);
|
||||
|
||||
if (nWeights > 0)
|
||||
{
|
||||
forAll(globalRegion, cellI)
|
||||
forAll(localRegion, cellI)
|
||||
{
|
||||
label regionI = globalRegion[cellI];
|
||||
label regionI = localRegion[cellI];
|
||||
|
||||
regionWeights[regionI] += cellWeights[cellI];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
forAll(globalRegion, cellI)
|
||||
forAll(localRegion, cellI)
|
||||
{
|
||||
label regionI = globalRegion[cellI];
|
||||
label regionI = localRegion[cellI];
|
||||
|
||||
regionWeights[regionI] += 1.0;
|
||||
}
|
||||
@ -879,7 +905,7 @@ Foam::labelList Foam::decompositionMethod::decompose
|
||||
finalDecomp = decompose
|
||||
(
|
||||
mesh,
|
||||
globalRegion,
|
||||
localRegion,
|
||||
regionCentres,
|
||||
regionWeights
|
||||
);
|
||||
|
||||
@ -219,7 +219,7 @@ public:
|
||||
// Other
|
||||
|
||||
//- Helper: determine (local or global) cellCells from mesh
|
||||
// agglomeration.
|
||||
// agglomeration. Agglomeration is local to the processor.
|
||||
// local : connections are in local indices. Coupled across
|
||||
// cyclics but not processor patches.
|
||||
// global : connections are in global indices. Coupled across
|
||||
@ -228,34 +228,11 @@ public:
|
||||
(
|
||||
const polyMesh& mesh,
|
||||
const labelList& agglom,
|
||||
const label nCoarse,
|
||||
const label nLocalCoarse,
|
||||
const bool global,
|
||||
CompactListList<label>& cellCells
|
||||
);
|
||||
|
||||
//- Helper: determine (local or global) cellCells from mesh
|
||||
// agglomeration and additional specification:
|
||||
// - any additional connections between non-coupled internal
|
||||
// or boundary faces.
|
||||
// - any internal or coupled faces (or additional connections)
|
||||
// are blocked
|
||||
//
|
||||
// local : connections are in local indices. Coupled across
|
||||
// cyclics but not processor patches.
|
||||
// global : connections are in global indices. Coupled across
|
||||
// cyclics and processor patches.
|
||||
//static void calcCellCells
|
||||
//(
|
||||
// const polyMesh& mesh,
|
||||
// const boolList& blockedFace,
|
||||
// const List<labelPair>& explicitConnections,
|
||||
// const labelList& agglom,
|
||||
// const label nCoarse,
|
||||
// const bool global,
|
||||
// CompactListList<label>& cellCells
|
||||
//);
|
||||
|
||||
|
||||
//- Helper: extract constraints:
|
||||
// blockedface: existing faces where owner and neighbour on same
|
||||
// proc
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
CGAL_INC = \
|
||||
-Wno-old-style-cast \
|
||||
-I$(CGAL_ARCH_PATH)/include \
|
||||
-I$(MPFR_ARCH_PATH)/include \
|
||||
-I$(GMP_ARCH_PATH)/include \
|
||||
|
||||
@ -3,6 +3,10 @@
|
||||
# -Woverloaded-virtual may produce spurious warnings, disable for now
|
||||
c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -Wno-overloaded-virtual -Wno-unused-comparison
|
||||
|
||||
|
||||
# Suppress CGAL warnings
|
||||
c++CGALWARN = -Wno-c++11-extensions -Wno-sometimes-uninitialized -Wno-mismatched-tags
|
||||
|
||||
CC = clang++ -m64
|
||||
|
||||
include $(RULES)/c++$(WM_COMPILE_OPTION)
|
||||
|
||||
@ -3,6 +3,10 @@
|
||||
# -Woverloaded-virtual may produce spurious warnings, disable for now
|
||||
c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -Wno-overloaded-virtual -Wno-unused-comparison
|
||||
|
||||
|
||||
# Suppress CGAL warnings
|
||||
c++CGALWARN = -Wno-c++11-extensions -Wno-sometimes-uninitialized -Wno-mismatched-tags
|
||||
|
||||
CC = clang++ -m32
|
||||
|
||||
include $(RULES)/c++$(WM_COMPILE_OPTION)
|
||||
|
||||
Reference in New Issue
Block a user