mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' of ssh://hunt//home/noisy3/OpenFOAM/OpenFOAM-dev
This commit is contained in:
@ -20,7 +20,8 @@ The disadvantages:
|
|||||||
- a patch-wise loop now might need to store data to go to the neighbour half
|
- a patch-wise loop now might need to store data to go to the neighbour half
|
||||||
since it is no longer handled in a single patch.
|
since it is no longer handled in a single patch.
|
||||||
- decomposed cyclics now require overlapping communications so will
|
- decomposed cyclics now require overlapping communications so will
|
||||||
only work in non-blocking mode. Hence the underlying message passing library
|
only work in 'nonBlocking' mode or 'blocking' (=buffered) mode but not
|
||||||
|
in 'scheduled' mode. The underlying message passing library
|
||||||
will require overlapping communications with message tags.
|
will require overlapping communications with message tags.
|
||||||
- it is quite a code-change and there might be some oversights.
|
- it is quite a code-change and there might be some oversights.
|
||||||
- once converted (see foamUpgradeCyclics below) cases are not backwards
|
- once converted (see foamUpgradeCyclics below) cases are not backwards
|
||||||
@ -103,19 +104,14 @@ type 'processorCyclic'.
|
|||||||
|
|
||||||
|
|
||||||
- processor patches use overlapping communication using a different message
|
- processor patches use overlapping communication using a different message
|
||||||
tag. This maps straight through into the MPI message tag.
|
tag. This maps straight through into the MPI message tag. Each processor
|
||||||
See processorCyclicPolyPatch::tag(). This needs to be calculated the
|
'interface' (processorPolyPatch, processorFvPatch, etc.) has a 'tag()'
|
||||||
same on both sides so is calculated as
|
to use for communication.
|
||||||
Pstream::nProcs()*max(myProcNo, neighbProcNo)
|
|
||||||
+ min(myProcNo, neighbProcNo)
|
|
||||||
which is
|
|
||||||
- unique
|
|
||||||
- commutative
|
|
||||||
- does not interfere with the default tag (= 1)
|
|
||||||
|
|
||||||
|
|
||||||
- when constructing a GeometricField from a dictionary it will explicitly
|
- when constructing a GeometricField from a dictionary it will explicitly
|
||||||
check for non-existing entries for cyclic patches and exit with an error message
|
check for non-existing entries for cyclic patches and exit with an error message
|
||||||
warning to run foamUpgradeCyclics.
|
warning to run foamUpgradeCyclics. (1.7.x will check if you are trying
|
||||||
|
to run a case which has split cyclics)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -112,13 +112,6 @@ directMappedVelocityFluxFixedValueFvPatchField
|
|||||||
<< " in file " << dimensionedInternalField().objectPath()
|
<< " in file " << dimensionedInternalField().objectPath()
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Force calculation of schedule (uses parallel comms)
|
|
||||||
const directMappedPolyPatch& mpp = refCast<const directMappedPolyPatch>
|
|
||||||
(
|
|
||||||
this->patch().patch()
|
|
||||||
);
|
|
||||||
(void)mpp.map().schedule();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -42,24 +42,26 @@ void Foam::singleCellFvMesh::agglomerateMesh
|
|||||||
const polyBoundaryMesh& oldPatches = mesh.boundaryMesh();
|
const polyBoundaryMesh& oldPatches = mesh.boundaryMesh();
|
||||||
|
|
||||||
// Check agglomeration within patch face range and continuous
|
// Check agglomeration within patch face range and continuous
|
||||||
labelList nAgglom(oldPatches.size());
|
labelList nAgglom(oldPatches.size(), 0);
|
||||||
|
|
||||||
forAll(oldPatches, patchI)
|
forAll(oldPatches, patchI)
|
||||||
{
|
{
|
||||||
const polyPatch& pp = oldPatches[patchI];
|
const polyPatch& pp = oldPatches[patchI];
|
||||||
|
if (pp.size() > 0)
|
||||||
nAgglom[patchI] = max(agglom[patchI])+1;
|
|
||||||
|
|
||||||
forAll(pp, i)
|
|
||||||
{
|
{
|
||||||
if (agglom[patchI][i] < 0 || agglom[patchI][i] >= pp.size())
|
nAgglom[patchI] = max(agglom[patchI])+1;
|
||||||
|
|
||||||
|
forAll(pp, i)
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
if (agglom[patchI][i] < 0 || agglom[patchI][i] >= pp.size())
|
||||||
(
|
{
|
||||||
"singleCellFvMesh::agglomerateMesh(..)"
|
FatalErrorIn
|
||||||
) << "agglomeration on patch " << patchI
|
(
|
||||||
<< " is out of range 0.." << pp.size()-1
|
"singleCellFvMesh::agglomerateMesh(..)"
|
||||||
<< exit(FatalError);
|
) << "agglomeration on patch " << patchI
|
||||||
|
<< " is out of range 0.." << pp.size()-1
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,6 +157,8 @@ void Foam::singleCellFvMesh::agglomerateMesh
|
|||||||
|
|
||||||
forAll(oldPatches, patchI)
|
forAll(oldPatches, patchI)
|
||||||
{
|
{
|
||||||
|
patchStarts[patchI] = coarseI;
|
||||||
|
|
||||||
const polyPatch& pp = oldPatches[patchI];
|
const polyPatch& pp = oldPatches[patchI];
|
||||||
|
|
||||||
if (pp.size() > 0)
|
if (pp.size() > 0)
|
||||||
@ -170,8 +174,6 @@ void Foam::singleCellFvMesh::agglomerateMesh
|
|||||||
// From agglomeration to compact patch face
|
// From agglomeration to compact patch face
|
||||||
labelList agglomToFace(nAgglom[patchI], -1);
|
labelList agglomToFace(nAgglom[patchI], -1);
|
||||||
|
|
||||||
patchStarts[patchI] = coarseI;
|
|
||||||
|
|
||||||
forAll(pp, i)
|
forAll(pp, i)
|
||||||
{
|
{
|
||||||
label myAgglom = agglom[patchI][i];
|
label myAgglom = agglom[patchI][i];
|
||||||
@ -223,9 +225,9 @@ void Foam::singleCellFvMesh::agglomerateMesh
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
patchSizes[patchI] = coarseI-patchStarts[patchI];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
patchSizes[patchI] = coarseI-patchStarts[patchI];
|
||||||
}
|
}
|
||||||
|
|
||||||
//Pout<< "patchStarts:" << patchStarts << endl;
|
//Pout<< "patchStarts:" << patchStarts << endl;
|
||||||
|
|||||||
@ -2794,6 +2794,30 @@ Foam::indexedOctree<Type>::getVolumeType
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <class Type>
|
||||||
|
template <class CompareOp>
|
||||||
|
void Foam::indexedOctree<Type>::findNear
|
||||||
|
(
|
||||||
|
const scalar nearDist,
|
||||||
|
const indexedOctree<Type>& tree2,
|
||||||
|
CompareOp& cop
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
findNear
|
||||||
|
(
|
||||||
|
nearDist,
|
||||||
|
true,
|
||||||
|
*this,
|
||||||
|
nodePlusOctant(0, 0),
|
||||||
|
bb(),
|
||||||
|
tree2,
|
||||||
|
nodePlusOctant(0, 0),
|
||||||
|
tree2.bb(),
|
||||||
|
cop
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Print contents of nodeI
|
// Print contents of nodeI
|
||||||
template <class Type>
|
template <class Type>
|
||||||
void Foam::indexedOctree<Type>::print
|
void Foam::indexedOctree<Type>::print
|
||||||
|
|||||||
@ -168,7 +168,6 @@ bool Foam::streamLineParticle::move(streamLineParticle::trackData& td)
|
|||||||
td.keepParticle
|
td.keepParticle
|
||||||
&& !td.switchProcessor
|
&& !td.switchProcessor
|
||||||
&& lifeTime_ > 0
|
&& lifeTime_ > 0
|
||||||
&& tEnd > ROOTVSMALL
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// TBD: implement subcycling so step through cells in more than
|
// TBD: implement subcycling so step through cells in more than
|
||||||
@ -191,6 +190,12 @@ bool Foam::streamLineParticle::move(streamLineParticle::trackData& td)
|
|||||||
|
|
||||||
tEnd -= dt;
|
tEnd -= dt;
|
||||||
stepFraction() = 1.0 - tEnd/deltaT;
|
stepFraction() = 1.0 - tEnd/deltaT;
|
||||||
|
|
||||||
|
if (tEnd <= ROOTVSMALL)
|
||||||
|
{
|
||||||
|
// Force removal
|
||||||
|
lifeTime_ = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!td.keepParticle || lifeTime_ == 0)
|
if (!td.keepParticle || lifeTime_ == 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user