Fix parallel mesh motion bug

This commit is contained in:
Hrvoje Jasak 2010-11-18 19:30:41 +00:00
parent cc22953ac4
commit 0706c07b6d
19 changed files with 51 additions and 39 deletions

View file

@ -48,7 +48,7 @@ void reduce
{
Pstream::gather(comms, Value, bop);
Pstream::scatter(comms, Value);
}
}
// Reduce using either linear or tree communication schedule
@ -67,7 +67,7 @@ void reduce
{
reduce(Pstream::treeCommunication(), Value, bop);
}
}
}
// Reduce using either linear or tree communication schedule
@ -90,7 +90,7 @@ T returnReduce
}
return WorkValue;
}
}
// Insist there is a specialisation for the reduction of a scalar

View file

@ -384,14 +384,14 @@ public:
//- Initialise evaluation of the patch field (do nothing)
virtual void initEvaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
)
{}
//- Evaluate the patch field
virtual void evaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
);
//- Update boundary value

View file

@ -147,7 +147,7 @@ public:
//- Evaluate the patch field
virtual void evaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
) = 0;
//- Add field to internal field

View file

@ -208,7 +208,7 @@ FixedValuePointPatchField<PatchField, Mesh, PointPatch, MatrixType, Type>
{
Field<Type>::operator=(ptf);
// insert the result into the internal field
// Insert the result into the internal field
initEvaluate();
}
@ -243,7 +243,8 @@ template
template<class> class MatrixType,
class Type
>
void FixedValuePointPatchField<PatchField, Mesh, PointPatch, MatrixType, Type>::
void
FixedValuePointPatchField<PatchField, Mesh, PointPatch, MatrixType, Type>::
operator==
(
const Type& t

View file

@ -138,7 +138,7 @@ public:
// there's nothing to do
virtual void initEvaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
)
{
ValuePointPatchField
@ -148,7 +148,7 @@ public:
virtual void evaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
)
{}

View file

@ -178,7 +178,7 @@ public:
//- Evaluate the patch field
virtual void evaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
);
//- Update boundary value

View file

@ -186,7 +186,7 @@ public:
//- Evaluate the patch field
virtual void evaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
)
{}

View file

@ -259,7 +259,7 @@ public:
//- Does the patch field perform the transfromation
virtual bool doTransform() const
{
return
return
!(
procPatch_.procPolyPatch().parallel()
|| pTraits<Type>::rank == 0
@ -269,13 +269,13 @@ public:
//- Initialise evaluation of the patch field
virtual void initEvaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
);
//- Evaluate the patch field
virtual void evaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
);
//- Init add field to internal field

View file

@ -152,7 +152,7 @@ public:
//- Update the patch field
virtual void evaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
);
};

View file

@ -28,7 +28,7 @@ Class
fixedValue/zeroGradient mix may be different for each direction.
I am still not sure how to do the fixedValue-fixedGradient
combination.
combination. HJ, date deleted
Description

View file

@ -508,29 +508,33 @@ void GlobalPointPatchField
// Create the global list and insert local values
if (globalPointPatch_.globalPointSize() > 0)
{
Field<Type> gpf
(
globalPointPatch_.globalPointSize(),
pTraits<Type>::zero
);
// Bug fix: use map-based communication. HJ, 18/Nov/2010
// Get addressing
const labelList& sharedPointAddr =
globalPointPatch_.sharedPointAddr();
// Get internal field data
Field<Type> pField = this->patchInternalField();
// Pack data into a map
Map<Type> dataMap;
forAll (sharedPointAddr, i)
{
gpf[sharedPointAddr[i]] = pField[i];
dataMap.insert(sharedPointAddr[i], pField[i]);
}
combineReduce(gpf, eqOp<Field<Type> >());
// Communicate map
Pstream::mapCombineGather(dataMap, eqOp<Type>());
Pstream::mapCombineScatter(dataMap);
// Extract local data
Field<Type> lpf(sharedPointAddr.size());
forAll (sharedPointAddr, i)
{
lpf[i] = gpf[sharedPointAddr[i]];
lpf[i] = dataMap[sharedPointAddr[i]];
}
// Get addressing and enforce values on all processors

View file

@ -185,7 +185,7 @@ public:
//- Evaluate the patch field
virtual void evaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
);
//- Add field to internal field

View file

@ -216,7 +216,7 @@ public:
// there's nothing to do
virtual void initEvaluate
(
const Pstream::commsTypes commsType=Pstream::blocking
const Pstream::commsTypes commsType = Pstream::blocking
);
//- Write

View file

@ -660,7 +660,7 @@ Foam::pointField Foam::globalMeshData::geometricSharedPoints() const
combineReduce(sharedPoints, plusEqOp<pointField>());
// Merge tolerance
scalar tolDim = matchTol_ * bb_.mag();
scalar tolDim = matchTol_*bb_.mag();
// And see how many are unique
labelList pMap;

View file

@ -22,7 +22,7 @@ License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*----------------------------------------------------------------------------*/
\*---------------------------------------------------------------------------*/
#include "syncTools.H"
#include "polyMesh.H"
@ -306,9 +306,9 @@ void Foam::syncTools::syncPointMap
}
}
//- Note: hasTransformation is only used for warning messages so
// reduction not strictly nessecary.
//reduce(hasTransformation, orOp<bool>());
// Note: hasTransformation is only used for warning messages so
// reduction not strictly nessecary.
// reduce(hasTransformation, orOp<bool>());
// Synchronize multiple shared points.
const globalMeshData& pd = mesh.globalData();

View file

@ -120,7 +120,7 @@ void Foam::laplaceTetDecompositionMotionSolver::solve()
}
if(needTotDisplacement())
if (needTotDisplacement())
{
totDisplacement() += motionU()*tetMesh().time().deltaT();
}

View file

@ -57,7 +57,7 @@ public:
for
(
typename SLList<Type>::const_iterator myObjectsIter =
typename SLList<Type>::const_iterator myObjectsIter =
myObjects.begin();
myObjectsIter != myObjects.end();
++myObjectsIter
@ -97,7 +97,7 @@ void Foam::tetPolyMeshFaceDecomp::addParallelPointPatch()
// The processor point patch will be added if processor boundaries
// exist in the case. If the mesh with processor boundaries is
// not created during a parallel run (e.g. decomposePar), the
// addressing will be dummy.
// addressing will be dummy. HJ, date deleted
if (mesh_.globalData().parallel())
{
@ -360,7 +360,12 @@ void Foam::tetPolyMeshFaceDecomp::addParallelPointPatch()
}
// Send the list to the first slave
OPstream toFirstSlave(Pstream::blocking, Pstream::firstSlave());
OPstream toFirstSlave
(
Pstream::blocking,
Pstream::firstSlave()
);
toFirstSlave << globalCutEdges;
}
else
@ -440,7 +445,6 @@ void Foam::tetPolyMeshFaceDecomp::addParallelPointPatch()
}
}
// Add the processor point patch
boundary_.setSize(boundary_.size() + 1);

View file

@ -91,7 +91,10 @@ tetPolyBoundaryMeshFaceDecomp::globalPatch() const
{
if (isA<globalTetPolyPatchFaceDecomp>(patches[patchI]))
{
return refCast<const globalTetPolyPatchFaceDecomp>(patches[patchI]);
return refCast<const globalTetPolyPatchFaceDecomp>
(
patches[patchI]
);
}
}

View file

@ -208,7 +208,7 @@ public:
virtual const word& name() const
{
// There can only be a single patch of this type - therefore
// its name is hard-coded.
// its name is hard-coded. HJ, date deleted
return type();
}