mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge remote branch 'OpenCFD/master' into olesenm
This commit is contained in:
@ -38,7 +38,7 @@ solidWallHeatFluxTemperatureFvPatchScalarField
|
|||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(p, iF),
|
fixedGradientFvPatchScalarField(p, iF),
|
||||||
q_(p.size(), 0.0),
|
q_(p.size(), 0.0),
|
||||||
KName_("undefined-K")
|
KName_("undefined-K")
|
||||||
{}
|
{}
|
||||||
@ -53,7 +53,7 @@ solidWallHeatFluxTemperatureFvPatchScalarField
|
|||||||
const fvPatchFieldMapper& mapper
|
const fvPatchFieldMapper& mapper
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
|
fixedGradientFvPatchScalarField(ptf, p, iF, mapper),
|
||||||
q_(ptf.q_, mapper),
|
q_(ptf.q_, mapper),
|
||||||
KName_(ptf.KName_)
|
KName_(ptf.KName_)
|
||||||
{}
|
{}
|
||||||
@ -67,7 +67,7 @@ solidWallHeatFluxTemperatureFvPatchScalarField
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(p, iF, dict),
|
fixedGradientFvPatchScalarField(p, iF, dict),
|
||||||
q_("q", dict, p.size()),
|
q_("q", dict, p.size()),
|
||||||
KName_(dict.lookup("K"))
|
KName_(dict.lookup("K"))
|
||||||
{}
|
{}
|
||||||
@ -79,7 +79,7 @@ solidWallHeatFluxTemperatureFvPatchScalarField
|
|||||||
const solidWallHeatFluxTemperatureFvPatchScalarField& tppsf
|
const solidWallHeatFluxTemperatureFvPatchScalarField& tppsf
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(tppsf),
|
fixedGradientFvPatchScalarField(tppsf),
|
||||||
q_(tppsf.q_),
|
q_(tppsf.q_),
|
||||||
KName_(tppsf.KName_)
|
KName_(tppsf.KName_)
|
||||||
{}
|
{}
|
||||||
@ -92,7 +92,7 @@ solidWallHeatFluxTemperatureFvPatchScalarField
|
|||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(tppsf, iF),
|
fixedGradientFvPatchScalarField(tppsf, iF),
|
||||||
q_(tppsf.q_),
|
q_(tppsf.q_),
|
||||||
KName_(tppsf.KName_)
|
KName_(tppsf.KName_)
|
||||||
{}
|
{}
|
||||||
@ -105,7 +105,7 @@ void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::autoMap
|
|||||||
const fvPatchFieldMapper& m
|
const fvPatchFieldMapper& m
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
fixedValueFvPatchScalarField::autoMap(m);
|
fixedGradientFvPatchScalarField::autoMap(m);
|
||||||
q_.autoMap(m);
|
q_.autoMap(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::rmap
|
|||||||
const labelList& addr
|
const labelList& addr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
fixedValueFvPatchScalarField::rmap(ptf, addr);
|
fixedGradientFvPatchScalarField::rmap(ptf, addr);
|
||||||
|
|
||||||
const solidWallHeatFluxTemperatureFvPatchScalarField& hfptf =
|
const solidWallHeatFluxTemperatureFvPatchScalarField& hfptf =
|
||||||
refCast<const solidWallHeatFluxTemperatureFvPatchScalarField>(ptf);
|
refCast<const solidWallHeatFluxTemperatureFvPatchScalarField>(ptf);
|
||||||
@ -132,14 +132,14 @@ void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::updateCoeffs()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const scalarField& Kw =
|
const scalarField& Kw = patch().lookupPatchField<volScalarField, scalar>
|
||||||
patch().lookupPatchField<volScalarField, scalar>(KName_);
|
(
|
||||||
|
KName_
|
||||||
|
);
|
||||||
|
|
||||||
const fvPatchScalarField& Tw = *this;
|
gradient() = q_/Kw;
|
||||||
|
|
||||||
operator==(q_/(patch().deltaCoeffs()*Kw) + Tw.patchInternalField());
|
fixedGradientFvPatchScalarField::updateCoeffs();
|
||||||
|
|
||||||
fixedValueFvPatchScalarField::updateCoeffs();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -148,9 +148,10 @@ void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::write
|
|||||||
Ostream& os
|
Ostream& os
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
fixedValueFvPatchScalarField::write(os);
|
fixedGradientFvPatchScalarField::write(os);
|
||||||
q_.writeEntry("q", os);
|
q_.writeEntry("q", os);
|
||||||
os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl;
|
os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl;
|
||||||
|
this->writeEntry("value", os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -46,7 +46,7 @@ SourceFiles
|
|||||||
#ifndef solidWallHeatFluxTemperatureFvPatchScalarField_H
|
#ifndef solidWallHeatFluxTemperatureFvPatchScalarField_H
|
||||||
#define solidWallHeatFluxTemperatureFvPatchScalarField_H
|
#define solidWallHeatFluxTemperatureFvPatchScalarField_H
|
||||||
|
|
||||||
#include "fixedValueFvPatchFields.H"
|
#include "fixedGradientFvPatchFields.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ namespace Foam
|
|||||||
|
|
||||||
class solidWallHeatFluxTemperatureFvPatchScalarField
|
class solidWallHeatFluxTemperatureFvPatchScalarField
|
||||||
:
|
:
|
||||||
public fixedValueFvPatchScalarField
|
public fixedGradientFvPatchScalarField
|
||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ forAll(patches, patchi)
|
|||||||
{
|
{
|
||||||
const fvPatch& currPatch = patches[patchi];
|
const fvPatch& currPatch = patches[patchi];
|
||||||
|
|
||||||
if (isType<wallFvPatch>(currPatch))
|
if (isA<wallFvPatch>(currPatch))
|
||||||
{
|
{
|
||||||
const vectorField nf = currPatch.nf();
|
const vectorField nf = currPatch.nf();
|
||||||
|
|
||||||
|
|||||||
@ -358,9 +358,22 @@ int main(int argc, char *argv[])
|
|||||||
timeSelector::addOptions(true, false);
|
timeSelector::addOptions(true, false);
|
||||||
|
|
||||||
argList::validArgs.append("feature angle[0-180]");
|
argList::validArgs.append("feature angle[0-180]");
|
||||||
argList::addBoolOption("splitAllFaces");
|
argList::addBoolOption
|
||||||
argList::addBoolOption("concaveMultiCells");
|
(
|
||||||
argList::addBoolOption("doNotPreserveFaceZones");
|
"splitAllFaces",
|
||||||
|
"have multiple faces inbetween cells"
|
||||||
|
);
|
||||||
|
argList::addBoolOption
|
||||||
|
(
|
||||||
|
"concaveMultiCells",
|
||||||
|
"split cells on concave boundary edges into multiple cells"
|
||||||
|
);
|
||||||
|
argList::addBoolOption
|
||||||
|
(
|
||||||
|
"doNotPreserveFaceZones",
|
||||||
|
"disable the default behaviour of preserving faceZones by having"
|
||||||
|
" multiple faces inbetween cells"
|
||||||
|
);
|
||||||
|
|
||||||
# include "setRootCase.H"
|
# include "setRootCase.H"
|
||||||
# include "createTime.H"
|
# include "createTime.H"
|
||||||
|
|||||||
@ -884,7 +884,7 @@ void starMesh::createCoupleMatches()
|
|||||||
<< "newSlaveEdges: " << newSlaveEdges << endl;
|
<< "newSlaveEdges: " << newSlaveEdges << endl;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
edge startEdge;
|
edge startEdge(-1, -1);
|
||||||
|
|
||||||
// Remember where the start edge was found:
|
// Remember where the start edge was found:
|
||||||
// 0 for not found
|
// 0 for not found
|
||||||
|
|||||||
@ -71,7 +71,7 @@ Foam::label Foam::checkTopology
|
|||||||
{
|
{
|
||||||
Info<< " ***FaceZone " << mesh.faceZones()[zoneI].name()
|
Info<< " ***FaceZone " << mesh.faceZones()[zoneI].name()
|
||||||
<< " is not correctly synchronised"
|
<< " is not correctly synchronised"
|
||||||
<< " acrosss coupled boundaries."
|
<< " across coupled boundaries."
|
||||||
<< " (coupled faces both"
|
<< " (coupled faces both"
|
||||||
<< " present in set but with opposite flipmap)" << endl;
|
<< " present in set but with opposite flipmap)" << endl;
|
||||||
noFailedChecks++;
|
noFailedChecks++;
|
||||||
|
|||||||
@ -8,5 +8,4 @@ EXE_LIBS = \
|
|||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-ldecompositionMethods \
|
-ldecompositionMethods \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-ldynamicMesh \
|
-ldynamicMesh
|
||||||
-L$(FOAM_MPI_LIBBIN) -lparMetisDecompositionMethod
|
|
||||||
|
|||||||
@ -110,40 +110,30 @@ void writeAllData
|
|||||||
{
|
{
|
||||||
if (nPrims)
|
if (nPrims)
|
||||||
{
|
{
|
||||||
PstreamBuffers pBufs(Pstream::nonBlocking);
|
|
||||||
|
|
||||||
if (!Pstream::master())
|
|
||||||
{
|
|
||||||
UOPstream toMaster(Pstream::masterNo(), pBufs);
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
|
||||||
{
|
|
||||||
toMaster<< map(vf, prims, cmpt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pBufs.finishedSends();
|
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
ensightFile << key << nl;
|
ensightFile << key << nl;
|
||||||
|
|
||||||
PtrList<UIPstream> fromSlaves(Pstream::nProcs());
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
|
||||||
{
|
|
||||||
fromSlaves.set(slave, new UIPstream(slave, pBufs));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
{
|
{
|
||||||
writeData(map(vf, prims, cmpt), ensightFile);
|
writeData(map(vf, prims, cmpt), ensightFile);
|
||||||
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
||||||
{
|
{
|
||||||
scalarField data(fromSlaves[slave]);
|
IPstream fromSlave(Pstream::scheduled, slave);
|
||||||
|
scalarField data(fromSlave);
|
||||||
writeData(data, ensightFile);
|
writeData(data, ensightFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
|
{
|
||||||
|
OPstream toMaster(Pstream::scheduled, Pstream::masterNo());
|
||||||
|
toMaster<< map(vf, prims, cmpt);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,40 +150,30 @@ void writeAllDataBinary
|
|||||||
{
|
{
|
||||||
if (nPrims)
|
if (nPrims)
|
||||||
{
|
{
|
||||||
PstreamBuffers pBufs(Pstream::nonBlocking);
|
|
||||||
|
|
||||||
if (!Pstream::master())
|
|
||||||
{
|
|
||||||
UOPstream toMaster(Pstream::masterNo(), pBufs);
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
|
||||||
{
|
|
||||||
toMaster<< map(vf, prims, cmpt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pBufs.finishedSends();
|
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
writeEnsDataBinary(key,ensightFile);
|
writeEnsDataBinary(key,ensightFile);
|
||||||
|
|
||||||
PtrList<UIPstream> fromSlaves(Pstream::nProcs());
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
|
||||||
{
|
|
||||||
fromSlaves.set(slave, new UIPstream(slave, pBufs));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
{
|
{
|
||||||
writeEnsDataBinary(map(vf, prims, cmpt), ensightFile);
|
writeEnsDataBinary(map(vf, prims, cmpt), ensightFile);
|
||||||
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
||||||
{
|
{
|
||||||
scalarField data(fromSlaves[slave]);
|
IPstream fromSlave(Pstream::scheduled, slave);
|
||||||
|
scalarField data(fromSlave);
|
||||||
writeEnsDataBinary(data, ensightFile);
|
writeEnsDataBinary(data, ensightFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
|
{
|
||||||
|
OPstream toMaster(Pstream::scheduled, Pstream::masterNo());
|
||||||
|
toMaster<< map(vf, prims, cmpt);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,40 +190,31 @@ void writeAllFaceData
|
|||||||
{
|
{
|
||||||
if (nPrims)
|
if (nPrims)
|
||||||
{
|
{
|
||||||
PstreamBuffers pBufs(Pstream::nonBlocking);
|
|
||||||
|
|
||||||
if (!Pstream::master())
|
|
||||||
{
|
|
||||||
UOPstream toMaster(Pstream::masterNo(), pBufs);
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
|
||||||
{
|
|
||||||
toMaster<< map(pf, prims, cmpt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pBufs.finishedSends();
|
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
ensightFile << key << nl;
|
ensightFile << key << nl;
|
||||||
|
|
||||||
PtrList<UIPstream> fromSlaves(Pstream::nProcs());
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
|
||||||
{
|
|
||||||
fromSlaves.set(slave, new UIPstream(slave, pBufs));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
{
|
{
|
||||||
writeData(map(pf, prims, cmpt), ensightFile);
|
writeData(map(pf, prims, cmpt), ensightFile);
|
||||||
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
||||||
{
|
{
|
||||||
scalarField pf(fromSlaves[slave]);
|
IPstream fromSlave(Pstream::scheduled, slave);
|
||||||
|
scalarField pf(fromSlave);
|
||||||
|
|
||||||
writeData(pf, ensightFile);
|
writeData(pf, ensightFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
|
{
|
||||||
|
OPstream toMaster(Pstream::scheduled, Pstream::masterNo());
|
||||||
|
toMaster<< map(pf, prims, cmpt);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,40 +231,31 @@ void writeAllFaceDataBinary
|
|||||||
{
|
{
|
||||||
if (nPrims)
|
if (nPrims)
|
||||||
{
|
{
|
||||||
PstreamBuffers pBufs(Pstream::nonBlocking);
|
|
||||||
|
|
||||||
if (!Pstream::master())
|
|
||||||
{
|
|
||||||
UOPstream toMaster(Pstream::masterNo(), pBufs);
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
|
||||||
{
|
|
||||||
toMaster<< map(pf, prims, cmpt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pBufs.finishedSends();
|
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
writeEnsDataBinary(key,ensightFile);
|
writeEnsDataBinary(key,ensightFile);
|
||||||
|
|
||||||
PtrList<UIPstream> fromSlaves(Pstream::nProcs());
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
|
||||||
{
|
|
||||||
fromSlaves.set(slave, new UIPstream(slave, pBufs));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
{
|
{
|
||||||
writeEnsDataBinary(map(pf, prims, cmpt), ensightFile);
|
writeEnsDataBinary(map(pf, prims, cmpt), ensightFile);
|
||||||
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
||||||
{
|
{
|
||||||
scalarField pf(fromSlaves[slave]);
|
IPstream fromSlave(Pstream::scheduled, slave);
|
||||||
|
scalarField pf(fromSlave);
|
||||||
|
|
||||||
writeEnsDataBinary(pf, ensightFile);
|
writeEnsDataBinary(pf, ensightFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
|
{
|
||||||
|
OPstream toMaster(Pstream::scheduled, Pstream::masterNo());
|
||||||
|
toMaster<< map(pf, prims, cmpt);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -539,6 +501,10 @@ void ensightFieldAscii
|
|||||||
const wordHashSet& patchNames = eMesh.patchNames();
|
const wordHashSet& patchNames = eMesh.patchNames();
|
||||||
const HashTable<ensightMesh::nFacePrimitives>&
|
const HashTable<ensightMesh::nFacePrimitives>&
|
||||||
nPatchPrims = eMesh.nPatchPrims();
|
nPatchPrims = eMesh.nPatchPrims();
|
||||||
|
const List<faceSets>& faceZoneFaceSets = eMesh.faceZoneFaceSets();
|
||||||
|
const wordHashSet& faceZoneNames = eMesh.faceZoneNames();
|
||||||
|
const HashTable<ensightMesh::nFacePrimitives>&
|
||||||
|
nFaceZonePrims = eMesh.nFaceZonePrims();
|
||||||
|
|
||||||
const labelList& tets = meshCellSets.tets;
|
const labelList& tets = meshCellSets.tets;
|
||||||
const labelList& pyrs = meshCellSets.pyrs;
|
const labelList& pyrs = meshCellSets.pyrs;
|
||||||
@ -557,7 +523,7 @@ void ensightFieldAscii
|
|||||||
postProcPath/ensightFileName,
|
postProcPath/ensightFileName,
|
||||||
runTime.writeFormat(),
|
runTime.writeFormat(),
|
||||||
runTime.writeVersion(),
|
runTime.writeVersion(),
|
||||||
runTime.writeCompression()
|
IOstream::UNCOMPRESSED
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,6 +533,8 @@ void ensightFieldAscii
|
|||||||
|
|
||||||
if (patchNames.empty())
|
if (patchNames.empty())
|
||||||
{
|
{
|
||||||
|
eMesh.barrier();
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
if (timeIndex == 0)
|
if (timeIndex == 0)
|
||||||
@ -592,29 +560,10 @@ void ensightFieldAscii
|
|||||||
|
|
||||||
if (meshCellSets.nHexesWedges)
|
if (meshCellSets.nHexesWedges)
|
||||||
{
|
{
|
||||||
PstreamBuffers pBufs(Pstream::nonBlocking);
|
|
||||||
|
|
||||||
if (!Pstream::master())
|
|
||||||
{
|
|
||||||
UOPstream toMaster(Pstream::masterNo(), pBufs);
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
|
||||||
{
|
|
||||||
toMaster<< map(vf, hexes, wedges, cmpt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pBufs.finishedSends();
|
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
ensightFile << "hexa8" << nl;
|
ensightFile << "hexa8" << nl;
|
||||||
|
|
||||||
PtrList<UIPstream> fromSlaves(Pstream::nProcs());
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
|
||||||
{
|
|
||||||
fromSlaves.set(slave, new UIPstream(slave, pBufs));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
{
|
{
|
||||||
writeData
|
writeData
|
||||||
@ -625,17 +574,57 @@ void ensightFieldAscii
|
|||||||
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
||||||
{
|
{
|
||||||
scalarField data(fromSlaves[slave]);
|
IPstream fromSlave(Pstream::scheduled, slave);
|
||||||
|
scalarField data(fromSlave);
|
||||||
writeData(data, ensightFile);
|
writeData(data, ensightFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
|
{
|
||||||
|
OPstream toMaster(Pstream::scheduled, Pstream::masterNo());
|
||||||
|
toMaster<< map(vf, hexes, wedges, cmpt);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
writeAllData("penta6", vf, prisms, meshCellSets.nPrisms, ensightFile);
|
writeAllData
|
||||||
writeAllData("pyramid5", vf, pyrs, meshCellSets.nPyrs, ensightFile);
|
(
|
||||||
writeAllData("tetra4", vf, tets, meshCellSets.nTets, ensightFile);
|
"penta6",
|
||||||
writeAllData("nfaced", vf, polys, meshCellSets.nPolys, ensightFile);
|
vf,
|
||||||
|
prisms,
|
||||||
|
meshCellSets.nPrisms,
|
||||||
|
ensightFile
|
||||||
|
);
|
||||||
|
|
||||||
|
writeAllData
|
||||||
|
(
|
||||||
|
"pyramid5",
|
||||||
|
vf,
|
||||||
|
pyrs,
|
||||||
|
meshCellSets.nPyrs,
|
||||||
|
ensightFile
|
||||||
|
);
|
||||||
|
|
||||||
|
writeAllData
|
||||||
|
(
|
||||||
|
"tetra4",
|
||||||
|
vf,
|
||||||
|
tets,
|
||||||
|
meshCellSets.nTets,
|
||||||
|
ensightFile
|
||||||
|
);
|
||||||
|
|
||||||
|
writeAllData
|
||||||
|
(
|
||||||
|
"nfaced",
|
||||||
|
vf,
|
||||||
|
polys,
|
||||||
|
meshCellSets.nPolys,
|
||||||
|
ensightFile
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
label ensightPatchI = eMesh.patchPartOffset();
|
label ensightPatchI = eMesh.patchPartOffset();
|
||||||
@ -644,6 +633,8 @@ void ensightFieldAscii
|
|||||||
{
|
{
|
||||||
const word& patchName = allPatchNames[patchi];
|
const word& patchName = allPatchNames[patchi];
|
||||||
|
|
||||||
|
eMesh.barrier();
|
||||||
|
|
||||||
if (patchNames.empty() || patchNames.found(patchName))
|
if (patchNames.empty() || patchNames.found(patchName))
|
||||||
{
|
{
|
||||||
if
|
if
|
||||||
@ -664,6 +655,80 @@ void ensightFieldAscii
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// write faceZones, if requested
|
||||||
|
if (faceZoneNames.size())
|
||||||
|
{
|
||||||
|
// Interpolates cell values to faces - needed only when exporting
|
||||||
|
// faceZones...
|
||||||
|
GeometricField<Type, fvsPatchField, surfaceMesh> sf
|
||||||
|
(
|
||||||
|
linearInterpolate(vf)
|
||||||
|
);
|
||||||
|
|
||||||
|
forAllConstIter(wordHashSet, faceZoneNames, iter)
|
||||||
|
{
|
||||||
|
const word& faceZoneName = iter.key();
|
||||||
|
|
||||||
|
eMesh.barrier();
|
||||||
|
|
||||||
|
label zoneID = mesh.faceZones().findZoneID(faceZoneName);
|
||||||
|
|
||||||
|
const faceZone& fz = mesh.faceZones()[zoneID];
|
||||||
|
|
||||||
|
// Prepare data to write
|
||||||
|
label nIncluded = 0;
|
||||||
|
forAll(fz, i)
|
||||||
|
{
|
||||||
|
if (eMesh.faceToBeIncluded(fz[i]))
|
||||||
|
{
|
||||||
|
++nIncluded;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Field<Type> values(nIncluded);
|
||||||
|
|
||||||
|
// Loop on the faceZone and store the needed field values
|
||||||
|
label j = 0;
|
||||||
|
forAll(fz, i)
|
||||||
|
{
|
||||||
|
label faceI = fz[i];
|
||||||
|
if (mesh.isInternalFace(faceI))
|
||||||
|
{
|
||||||
|
values[j] = sf[faceI];
|
||||||
|
++j;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (eMesh.faceToBeIncluded(faceI))
|
||||||
|
{
|
||||||
|
label patchI = mesh.boundaryMesh().whichPatch(faceI);
|
||||||
|
const polyPatch& pp = mesh.boundaryMesh()[patchI];
|
||||||
|
label patchFaceI = pp.whichFace(faceI);
|
||||||
|
Type value = sf.boundaryField()[patchI][patchFaceI];
|
||||||
|
values[j] = value;
|
||||||
|
++j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
writePatchField
|
||||||
|
(
|
||||||
|
values,
|
||||||
|
zoneID,
|
||||||
|
ensightPatchI,
|
||||||
|
faceZoneFaceSets[zoneID],
|
||||||
|
nFaceZonePrims.find(faceZoneName)(),
|
||||||
|
ensightFile
|
||||||
|
)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ensightPatchI++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
delete ensightFilePtr;
|
delete ensightFilePtr;
|
||||||
@ -695,6 +760,10 @@ void ensightFieldBinary
|
|||||||
const wordHashSet& patchNames = eMesh.patchNames();
|
const wordHashSet& patchNames = eMesh.patchNames();
|
||||||
const HashTable<ensightMesh::nFacePrimitives>&
|
const HashTable<ensightMesh::nFacePrimitives>&
|
||||||
nPatchPrims = eMesh.nPatchPrims();
|
nPatchPrims = eMesh.nPatchPrims();
|
||||||
|
const List<faceSets>& faceZoneFaceSets = eMesh.faceZoneFaceSets();
|
||||||
|
const wordHashSet& faceZoneNames = eMesh.faceZoneNames();
|
||||||
|
const HashTable<ensightMesh::nFacePrimitives>&
|
||||||
|
nFaceZonePrims = eMesh.nFaceZonePrims();
|
||||||
|
|
||||||
const labelList& tets = meshCellSets.tets;
|
const labelList& tets = meshCellSets.tets;
|
||||||
const labelList& pyrs = meshCellSets.pyrs;
|
const labelList& pyrs = meshCellSets.pyrs;
|
||||||
@ -722,6 +791,8 @@ void ensightFieldBinary
|
|||||||
|
|
||||||
if (patchNames.empty())
|
if (patchNames.empty())
|
||||||
{
|
{
|
||||||
|
eMesh.barrier();
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
if (timeIndex == 0)
|
if (timeIndex == 0)
|
||||||
@ -743,29 +814,10 @@ void ensightFieldBinary
|
|||||||
|
|
||||||
if (meshCellSets.nHexesWedges)
|
if (meshCellSets.nHexesWedges)
|
||||||
{
|
{
|
||||||
PstreamBuffers pBufs(Pstream::nonBlocking);
|
|
||||||
|
|
||||||
if (!Pstream::master())
|
|
||||||
{
|
|
||||||
UOPstream toMaster(Pstream::masterNo(), pBufs);
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
|
||||||
{
|
|
||||||
toMaster<< map(vf, hexes, wedges, cmpt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pBufs.finishedSends();
|
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
writeEnsDataBinary("hexa8",ensightFile);
|
writeEnsDataBinary("hexa8",ensightFile);
|
||||||
|
|
||||||
PtrList<UIPstream> fromSlaves(Pstream::nProcs());
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
|
||||||
{
|
|
||||||
fromSlaves.set(slave, new UIPstream(slave, pBufs));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
{
|
{
|
||||||
writeEnsDataBinary
|
writeEnsDataBinary
|
||||||
@ -776,11 +828,20 @@ void ensightFieldBinary
|
|||||||
|
|
||||||
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
for (int slave=1; slave<Pstream::nProcs(); slave++)
|
||||||
{
|
{
|
||||||
scalarField data(fromSlaves[slave]);
|
IPstream fromSlave(Pstream::scheduled, slave);
|
||||||
|
scalarField data(fromSlave);
|
||||||
writeEnsDataBinary(data, ensightFile);
|
writeEnsDataBinary(data, ensightFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (direction cmpt=0; cmpt<pTraits<Type>::nComponents; cmpt++)
|
||||||
|
{
|
||||||
|
OPstream toMaster(Pstream::scheduled, Pstream::masterNo());
|
||||||
|
toMaster<< map(vf, hexes, wedges, cmpt);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
writeAllDataBinary
|
writeAllDataBinary
|
||||||
@ -826,6 +887,8 @@ void ensightFieldBinary
|
|||||||
{
|
{
|
||||||
const word& patchName = allPatchNames[patchi];
|
const word& patchName = allPatchNames[patchi];
|
||||||
|
|
||||||
|
eMesh.barrier();
|
||||||
|
|
||||||
if (patchNames.empty() || patchNames.found(patchName))
|
if (patchNames.empty() || patchNames.found(patchName))
|
||||||
{
|
{
|
||||||
if
|
if
|
||||||
@ -844,6 +907,81 @@ void ensightFieldBinary
|
|||||||
ensightPatchI++;
|
ensightPatchI++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// write faceZones, if requested
|
||||||
|
if (faceZoneNames.size())
|
||||||
|
{
|
||||||
|
// Interpolates cell values to faces - needed only when exporting
|
||||||
|
// faceZones...
|
||||||
|
GeometricField<Type, fvsPatchField, surfaceMesh> sf
|
||||||
|
(
|
||||||
|
linearInterpolate(vf)
|
||||||
|
);
|
||||||
|
|
||||||
|
forAllConstIter(wordHashSet, faceZoneNames, iter)
|
||||||
|
{
|
||||||
|
const word& faceZoneName = iter.key();
|
||||||
|
|
||||||
|
eMesh.barrier();
|
||||||
|
|
||||||
|
label zoneID = mesh.faceZones().findZoneID(faceZoneName);
|
||||||
|
|
||||||
|
const faceZone& fz = mesh.faceZones()[zoneID];
|
||||||
|
|
||||||
|
// Prepare data to write
|
||||||
|
label nIncluded = 0;
|
||||||
|
forAll(fz, i)
|
||||||
|
{
|
||||||
|
if (eMesh.faceToBeIncluded(fz[i]))
|
||||||
|
{
|
||||||
|
++nIncluded;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Field<Type> values(nIncluded);
|
||||||
|
|
||||||
|
// Loop on the faceZone and store the needed field values
|
||||||
|
label j = 0;
|
||||||
|
forAll(fz, i)
|
||||||
|
{
|
||||||
|
label faceI = fz[i];
|
||||||
|
if (mesh.isInternalFace(faceI))
|
||||||
|
{
|
||||||
|
values[j] = sf[faceI];
|
||||||
|
++j;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (eMesh.faceToBeIncluded(faceI))
|
||||||
|
{
|
||||||
|
label patchI = mesh.boundaryMesh().whichPatch(faceI);
|
||||||
|
const polyPatch& pp = mesh.boundaryMesh()[patchI];
|
||||||
|
label patchFaceI = pp.whichFace(faceI);
|
||||||
|
Type value = sf.boundaryField()[patchI][patchFaceI];
|
||||||
|
values[j] = value;
|
||||||
|
++j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
writePatchFieldBinary
|
||||||
|
(
|
||||||
|
values,
|
||||||
|
zoneID,
|
||||||
|
ensightPatchI,
|
||||||
|
faceZoneFaceSets[zoneID],
|
||||||
|
nFaceZonePrims.find(faceZoneName)(),
|
||||||
|
ensightFile
|
||||||
|
)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ensightPatchI++;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Pstream::master())
|
if (Pstream::master())
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -42,7 +42,7 @@ SourceFiles
|
|||||||
#include "fvMesh.H"
|
#include "fvMesh.H"
|
||||||
#include "OFstream.H"
|
#include "OFstream.H"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include "globalIndex.H"
|
#include "PackedBoolList.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -51,6 +51,7 @@ namespace Foam
|
|||||||
|
|
||||||
class fvMesh;
|
class fvMesh;
|
||||||
class argList;
|
class argList;
|
||||||
|
class globalIndex;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class ensightMesh Declaration
|
Class ensightMesh Declaration
|
||||||
@ -98,6 +99,16 @@ private:
|
|||||||
|
|
||||||
HashTable<nFacePrimitives> nPatchPrims_;
|
HashTable<nFacePrimitives> nPatchPrims_;
|
||||||
|
|
||||||
|
// faceZone - related variables
|
||||||
|
List<faceSets> faceZoneFaceSets_;
|
||||||
|
|
||||||
|
wordHashSet faceZoneNames_;
|
||||||
|
|
||||||
|
HashTable<nFacePrimitives> nFaceZonePrims_;
|
||||||
|
|
||||||
|
//- Per boundary face whether to include or not
|
||||||
|
PackedBoolList boundaryFaceToBeIncluded_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
@ -206,6 +217,38 @@ private:
|
|||||||
OFstream& ensightGeometryFile
|
OFstream& ensightGeometryFile
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
void writeAllInternalPoints
|
||||||
|
(
|
||||||
|
const pointField& uniquePoints,
|
||||||
|
const label nPoints,
|
||||||
|
OFstream& ensightGeometryFile
|
||||||
|
) const;
|
||||||
|
|
||||||
|
void writeAllPatchPoints
|
||||||
|
(
|
||||||
|
label ensightPatchI,
|
||||||
|
const word& patchName,
|
||||||
|
const pointField& uniquePoints,
|
||||||
|
const label nPoints,
|
||||||
|
OFstream& ensightGeometryFile
|
||||||
|
) const;
|
||||||
|
|
||||||
|
void writeAllInternalPointsBinary
|
||||||
|
(
|
||||||
|
const pointField& uniquePoints,
|
||||||
|
const label nPoints,
|
||||||
|
std::ofstream& ensightGeometryFile
|
||||||
|
) const;
|
||||||
|
|
||||||
|
void writeAllPatchPointsBinary
|
||||||
|
(
|
||||||
|
label ensightPatchI,
|
||||||
|
const word& patchName,
|
||||||
|
const pointField& uniquePoints,
|
||||||
|
const label nPoints,
|
||||||
|
std::ofstream& ensightGeometryFile
|
||||||
|
) const;
|
||||||
|
|
||||||
void writeAscii
|
void writeAscii
|
||||||
(
|
(
|
||||||
const fileName& postProcPath,
|
const fileName& postProcPath,
|
||||||
@ -311,7 +354,12 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from fvMesh
|
//- Construct from fvMesh
|
||||||
ensightMesh(const fvMesh&, const argList& args, const bool binary);
|
ensightMesh
|
||||||
|
(
|
||||||
|
const fvMesh&,
|
||||||
|
const argList& args,
|
||||||
|
const bool binary
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -352,12 +400,36 @@ public:
|
|||||||
return nPatchPrims_;
|
return nPatchPrims_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const List<faceSets>& faceZoneFaceSets() const
|
||||||
|
{
|
||||||
|
return faceZoneFaceSets_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const wordHashSet& faceZoneNames() const
|
||||||
|
{
|
||||||
|
return faceZoneNames_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const HashTable<nFacePrimitives>& nFaceZonePrims() const
|
||||||
|
{
|
||||||
|
return nFaceZonePrims_;
|
||||||
|
}
|
||||||
|
|
||||||
//- The ensight part id for the first patch
|
//- The ensight part id for the first patch
|
||||||
label patchPartOffset() const
|
label patchPartOffset() const
|
||||||
{
|
{
|
||||||
return patchPartOffset_;
|
return patchPartOffset_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Other
|
||||||
|
|
||||||
|
//- When exporting faceZones, check if a given face has to be included
|
||||||
|
// or not (i.e. faces on processor boundaries)
|
||||||
|
bool faceToBeIncluded(const label faceI) const;
|
||||||
|
|
||||||
|
//- Helper to cause barrier. Necessary on Quadrics.
|
||||||
|
static void barrier();
|
||||||
|
|
||||||
|
|
||||||
// I-O
|
// I-O
|
||||||
|
|
||||||
@ -368,6 +440,7 @@ public:
|
|||||||
const label timeIndex,
|
const label timeIndex,
|
||||||
Ostream& ensightCaseFile
|
Ostream& ensightCaseFile
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -41,6 +41,9 @@ Usage
|
|||||||
@param -noPatches \n
|
@param -noPatches \n
|
||||||
Suppress writing any patches.
|
Suppress writing any patches.
|
||||||
|
|
||||||
|
@param -faceZones zoneList \n
|
||||||
|
Specify faceZones to write, with wildcards
|
||||||
|
|
||||||
Note
|
Note
|
||||||
Parallel support for cloud data is not supported
|
Parallel support for cloud data is not supported
|
||||||
- writes to @a EnSight directory to avoid collisions with foamToEnsightParts
|
- writes to @a EnSight directory to avoid collisions with foamToEnsightParts
|
||||||
@ -113,6 +116,12 @@ int main(int argc, char *argv[])
|
|||||||
"specify particular patches to write - eg '(inlet outlet)'. "
|
"specify particular patches to write - eg '(inlet outlet)'. "
|
||||||
"An empty list suppresses writing the internalMesh."
|
"An empty list suppresses writing the internalMesh."
|
||||||
);
|
);
|
||||||
|
argList::addOption
|
||||||
|
(
|
||||||
|
"faceZones",
|
||||||
|
"wordList",
|
||||||
|
"specify faceZones to write, with wildcards - eg '(mfp-.*)'. "
|
||||||
|
);
|
||||||
|
|
||||||
# include "setRootCase.H"
|
# include "setRootCase.H"
|
||||||
|
|
||||||
|
|||||||
@ -59,8 +59,8 @@ printHeader() {
|
|||||||
| ========= | |
|
| ========= | |
|
||||||
| \\\\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\\\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\\\ / O peration | Version: ${foamVersion} |
|
| \\\\ / O peration | Version: ${foamVersion} |
|
||||||
| \\\\ / A nd | |
|
| \\\\ / A nd | Web: www.OpenFOAM.org |
|
||||||
| \\\\/ M anipulation | www.OpenFOAM.org |
|
| \\\\/ M anipulation | |
|
||||||
\\*---------------------------------------------------------------------------*/
|
\\*---------------------------------------------------------------------------*/
|
||||||
FoamFile
|
FoamFile
|
||||||
{
|
{
|
||||||
|
|||||||
@ -147,6 +147,30 @@ case OPENMPI:
|
|||||||
unset mpi_version
|
unset mpi_version
|
||||||
breaksw
|
breaksw
|
||||||
|
|
||||||
|
case SYSTEMOPENMPI:
|
||||||
|
|
||||||
|
# This uses the installed openmpi. It needs mpicc installed!
|
||||||
|
|
||||||
|
set mpi_version=openmpi-system
|
||||||
|
|
||||||
|
# Set compilation flags here instead of in wmake/rules/../mplibSYSTEMOPENMPI
|
||||||
|
setenv PINC `mpicc --showme:compile`
|
||||||
|
setenv PLIBS `mpicc --showme:link`
|
||||||
|
set libDir=`echo "$PLIBS" | sed -e 's/.*-L\([^ ]*\).*/\1/'`
|
||||||
|
|
||||||
|
if ($?FOAM_VERBOSE && $?prompt) then
|
||||||
|
echo "Using system installed MPI:"
|
||||||
|
echo " compile flags : $PINC"
|
||||||
|
echo " link flags : $PLIBS"
|
||||||
|
echo " libmpi dir : $libDir"
|
||||||
|
endif
|
||||||
|
|
||||||
|
_foamAddLib $libDir
|
||||||
|
|
||||||
|
setenv FOAM_MPI_LIBBIN $FOAM_LIBBIN/$mpi_version
|
||||||
|
unset mpi_version libDir
|
||||||
|
breaksw
|
||||||
|
|
||||||
case MPICH:
|
case MPICH:
|
||||||
set mpi_version=mpich2-1.1.1p1
|
set mpi_version=mpich2-1.1.1p1
|
||||||
setenv MPI_HOME $WM_THIRD_PARTY_DIR/$mpi_version
|
setenv MPI_HOME $WM_THIRD_PARTY_DIR/$mpi_version
|
||||||
|
|||||||
@ -183,6 +183,28 @@ OPENMPI)
|
|||||||
unset mpi_version
|
unset mpi_version
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
SYSTEMOPENMPI)
|
||||||
|
mpi_version=openmpi-system
|
||||||
|
|
||||||
|
# Set compilation flags here instead of in wmake/rules/../mplibSYSTEMOPENMPI
|
||||||
|
export PINC=`mpicc --showme:compile`
|
||||||
|
export PLIBS=`mpicc --showme:link`
|
||||||
|
libDir=`echo "$PLIBS" | sed -e 's/.*-L\([^ ]*\).*/\1/'`
|
||||||
|
|
||||||
|
if [ "$FOAM_VERBOSE" -a "$PS1" ]
|
||||||
|
then
|
||||||
|
echo "Using system installed MPI:"
|
||||||
|
echo " compile flags : $PINC"
|
||||||
|
echo " link flags : $PLIBS"
|
||||||
|
echo " libmpi dir : $libDir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
_foamAddLib $libDir
|
||||||
|
|
||||||
|
export FOAM_MPI_LIBBIN=$FOAM_LIBBIN/$mpi_version
|
||||||
|
unset mpi_version libDir
|
||||||
|
;;
|
||||||
|
|
||||||
MPICH)
|
MPICH)
|
||||||
mpi_version=mpich2-1.1.1p1
|
mpi_version=mpich2-1.1.1p1
|
||||||
export MPI_HOME=$WM_THIRD_PARTY_DIR/$mpi_version
|
export MPI_HOME=$WM_THIRD_PARTY_DIR/$mpi_version
|
||||||
|
|||||||
10
src/Allwmake
10
src/Allwmake
@ -27,14 +27,18 @@ wmake libso edgeMesh
|
|||||||
wmake libso surfMesh
|
wmake libso surfMesh
|
||||||
wmake libso triSurface
|
wmake libso triSurface
|
||||||
|
|
||||||
# Decomposition methods needed by meshTools
|
# Decomposition methods needed by dummyThirdParty
|
||||||
wmake libso parallel/decompositionMethods
|
parallel/AllwmakeLnInclude
|
||||||
wmake libso parallel/metisDecomp
|
# dummyThirdParty (dummy metisDecomp, scotchDecomp etc) needed by e.g. meshTools
|
||||||
|
dummyThirdParty/Allwmake
|
||||||
|
|
||||||
wmake libso meshTools
|
wmake libso meshTools
|
||||||
wmake libso finiteVolume
|
wmake libso finiteVolume
|
||||||
wmake libso genericPatchFields
|
wmake libso genericPatchFields
|
||||||
|
|
||||||
|
# Build the proper scotchDecomp, metisDecomp etc.
|
||||||
|
parallel/Allwmake
|
||||||
|
|
||||||
wmake libso sampling
|
wmake libso sampling
|
||||||
|
|
||||||
wmake libso dynamicMesh
|
wmake libso dynamicMesh
|
||||||
|
|||||||
@ -466,40 +466,6 @@ void Foam::FaceCellWave<Type>::transform
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Send face info to neighbour.
|
|
||||||
template <class Type>
|
|
||||||
void Foam::FaceCellWave<Type>::sendPatchInfo
|
|
||||||
(
|
|
||||||
const label neighbour,
|
|
||||||
const label nFaces,
|
|
||||||
const labelList& faceLabels,
|
|
||||||
const List<Type>& faceInfo
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
OPstream toNeighbour(Pstream::blocking, neighbour);
|
|
||||||
|
|
||||||
writeFaces(nFaces, faceLabels, faceInfo, toNeighbour);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Receive face info from neighbour
|
|
||||||
template <class Type>
|
|
||||||
Foam::label Foam::FaceCellWave<Type>::receivePatchInfo
|
|
||||||
(
|
|
||||||
const label neighbour,
|
|
||||||
labelList& faceLabels,
|
|
||||||
List<Type>& faceInfo
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
IPstream fromNeighbour(Pstream::blocking, neighbour);
|
|
||||||
|
|
||||||
label nFaces = 0;
|
|
||||||
readFaces(nFaces, faceLabels, faceInfo, fromNeighbour);
|
|
||||||
|
|
||||||
return nFaces;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Offset mesh face. Used for transferring from one cyclic half to the other.
|
// Offset mesh face. Used for transferring from one cyclic half to the other.
|
||||||
template <class Type>
|
template <class Type>
|
||||||
void Foam::FaceCellWave<Type>::offset
|
void Foam::FaceCellWave<Type>::offset
|
||||||
@ -523,6 +489,8 @@ void Foam::FaceCellWave<Type>::handleProcPatches()
|
|||||||
{
|
{
|
||||||
// Send all
|
// Send all
|
||||||
|
|
||||||
|
PstreamBuffers pBufs(Pstream::nonBlocking);
|
||||||
|
|
||||||
forAll(mesh_.boundaryMesh(), patchI)
|
forAll(mesh_.boundaryMesh(), patchI)
|
||||||
{
|
{
|
||||||
const polyPatch& patch = mesh_.boundaryMesh()[patchI];
|
const polyPatch& patch = mesh_.boundaryMesh()[patchI];
|
||||||
@ -564,16 +532,13 @@ void Foam::FaceCellWave<Type>::handleProcPatches()
|
|||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
sendPatchInfo
|
UOPstream toNeighbour(procPatch.neighbProcNo(), pBufs);
|
||||||
(
|
writeFaces(nSendFaces, sendFaces, sendFacesInfo, toNeighbour);
|
||||||
procPatch.neighbProcNo(),
|
|
||||||
nSendFaces,
|
|
||||||
sendFaces,
|
|
||||||
sendFacesInfo
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pBufs.finishedSends();
|
||||||
|
|
||||||
// Receive all
|
// Receive all
|
||||||
|
|
||||||
forAll(mesh_.boundaryMesh(), patchI)
|
forAll(mesh_.boundaryMesh(), patchI)
|
||||||
@ -586,16 +551,20 @@ void Foam::FaceCellWave<Type>::handleProcPatches()
|
|||||||
refCast<const processorPolyPatch>(patch);
|
refCast<const processorPolyPatch>(patch);
|
||||||
|
|
||||||
// Allocate buffers
|
// Allocate buffers
|
||||||
label nReceiveFaces;
|
label nReceiveFaces = 0;
|
||||||
labelList receiveFaces(patch.size());
|
labelList receiveFaces(patch.size());
|
||||||
List<Type> receiveFacesInfo(patch.size());
|
List<Type> receiveFacesInfo(patch.size());
|
||||||
|
|
||||||
nReceiveFaces = receivePatchInfo
|
{
|
||||||
(
|
UIPstream fromNeighbour(procPatch.neighbProcNo(), pBufs);
|
||||||
procPatch.neighbProcNo(),
|
readFaces
|
||||||
receiveFaces,
|
(
|
||||||
receiveFacesInfo
|
nReceiveFaces,
|
||||||
);
|
receiveFaces,
|
||||||
|
receiveFacesInfo,
|
||||||
|
fromNeighbour
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -225,23 +225,6 @@ class FaceCellWave
|
|||||||
List<Type>& faceInfo
|
List<Type>& faceInfo
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Send info to neighbour
|
|
||||||
void sendPatchInfo
|
|
||||||
(
|
|
||||||
const label neighbour,
|
|
||||||
const label nFaces,
|
|
||||||
const labelList&,
|
|
||||||
const List<Type>&
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Receive info from neighbour. Returns number of faces received.
|
|
||||||
label receivePatchInfo
|
|
||||||
(
|
|
||||||
const label neighbour,
|
|
||||||
labelList&,
|
|
||||||
List<Type>&
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Offset face labels by constant value
|
//- Offset face labels by constant value
|
||||||
static void offset
|
static void offset
|
||||||
(
|
(
|
||||||
|
|||||||
@ -38,7 +38,8 @@ Foam::IPstream::IPstream
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
Pstream(commsType, bufSize),
|
Pstream(commsType, bufSize),
|
||||||
UIPstream(commsType, fromProcNo, buf_)
|
UIPstream(commsType, fromProcNo, buf_, externalBufPosition_),
|
||||||
|
externalBufPosition_(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -55,6 +55,9 @@ class IPstream
|
|||||||
public UIPstream
|
public UIPstream
|
||||||
{
|
{
|
||||||
|
|
||||||
|
//- Receive index
|
||||||
|
label externalBufPosition_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|||||||
@ -51,10 +51,31 @@ Foam::PstreamBuffers::PstreamBuffers
|
|||||||
version_(version),
|
version_(version),
|
||||||
sendBuf_(UPstream::nProcs()),
|
sendBuf_(UPstream::nProcs()),
|
||||||
recvBuf_(UPstream::nProcs()),
|
recvBuf_(UPstream::nProcs()),
|
||||||
|
recvBufPos_(UPstream::nProcs(), 0),
|
||||||
finishedSendsCalled_(false)
|
finishedSendsCalled_(false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::PstreamBuffers::~PstreamBuffers()
|
||||||
|
{
|
||||||
|
// Check that all data has been consumed.
|
||||||
|
forAll(recvBufPos_, procI)
|
||||||
|
{
|
||||||
|
if (recvBufPos_[procI] < recvBuf_[procI].size())
|
||||||
|
{
|
||||||
|
FatalErrorIn("PstreamBuffers::~PstreamBuffers()")
|
||||||
|
<< "Message from processor " << procI
|
||||||
|
<< " not fully consumed. messageSize:" << recvBuf_[procI].size()
|
||||||
|
<< " bytes of which only " << recvBufPos_[procI]
|
||||||
|
<< " consumed."
|
||||||
|
<< Foam::abort(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void Foam::PstreamBuffers::finishedSends(const bool block)
|
void Foam::PstreamBuffers::finishedSends(const bool block)
|
||||||
|
|||||||
@ -106,6 +106,9 @@ class PstreamBuffers
|
|||||||
//- receive buffer
|
//- receive buffer
|
||||||
List<DynamicList<char> > recvBuf_;
|
List<DynamicList<char> > recvBuf_;
|
||||||
|
|
||||||
|
//- read position in recvBuf_
|
||||||
|
labelList recvBufPos_;
|
||||||
|
|
||||||
bool finishedSendsCalled_;
|
bool finishedSendsCalled_;
|
||||||
|
|
||||||
// Private member functions
|
// Private member functions
|
||||||
@ -129,6 +132,10 @@ public:
|
|||||||
IOstream::versionNumber version=IOstream::currentVersion
|
IOstream::versionNumber version=IOstream::currentVersion
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
|
||||||
|
~PstreamBuffers();
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
|
|||||||
@ -77,20 +77,6 @@ inline void Foam::UIPstream::readFromBuffer
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::UIPstream::~UIPstream()
|
|
||||||
{
|
|
||||||
if (externalBufPosition_ < messageSize_)
|
|
||||||
{
|
|
||||||
FatalErrorIn("UIPstream::~UIPstream()")
|
|
||||||
<< "Message not fully consumed. messageSize:" << messageSize_
|
|
||||||
<< " bytes of which only " << externalBufPosition_
|
|
||||||
<< " consumed." << Foam::abort(FatalError);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::Istream& Foam::UIPstream::read(token& t)
|
Foam::Istream& Foam::UIPstream::read(token& t)
|
||||||
|
|||||||
@ -63,7 +63,7 @@ class UIPstream
|
|||||||
|
|
||||||
DynamicList<char>& externalBuf_;
|
DynamicList<char>& externalBuf_;
|
||||||
|
|
||||||
label externalBufPosition_;
|
label& externalBufPosition_;
|
||||||
|
|
||||||
const int tag_;
|
const int tag_;
|
||||||
|
|
||||||
@ -94,6 +94,7 @@ public:
|
|||||||
const commsTypes commsType,
|
const commsTypes commsType,
|
||||||
const int fromProcNo,
|
const int fromProcNo,
|
||||||
DynamicList<char>& externalBuf,
|
DynamicList<char>& externalBuf,
|
||||||
|
label& externalBufPosition,
|
||||||
const int tag = UPstream::msgType(),
|
const int tag = UPstream::msgType(),
|
||||||
streamFormat format=BINARY,
|
streamFormat format=BINARY,
|
||||||
versionNumber version=currentVersion
|
versionNumber version=currentVersion
|
||||||
@ -103,11 +104,6 @@ public:
|
|||||||
UIPstream(const int fromProcNo, PstreamBuffers&);
|
UIPstream(const int fromProcNo, PstreamBuffers&);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
|
||||||
|
|
||||||
~UIPstream();
|
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
// Inquiry
|
// Inquiry
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
// addOverwriteOption.H
|
// addOverwriteOption.H
|
||||||
// ~~~~~~~~~~~~~~~~~~~~
|
// ~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Foam::argList::addOption
|
Foam::argList::addBoolOption
|
||||||
(
|
(
|
||||||
"overwrite",
|
"overwrite",
|
||||||
"overwrite existing mesh/results files"
|
"overwrite existing mesh/results files"
|
||||||
|
|||||||
@ -57,7 +57,6 @@ void Foam::cyclicPointPatch::calcGeometry(PstreamBuffers&)
|
|||||||
{
|
{
|
||||||
const edgeList& cp = cyclicPolyPatch_.coupledPoints();
|
const edgeList& cp = cyclicPolyPatch_.coupledPoints();
|
||||||
const labelList& mp = cyclicPolyPatch_.meshPoints();
|
const labelList& mp = cyclicPolyPatch_.meshPoints();
|
||||||
const pointField& points = cyclicPolyPatch_.points();
|
|
||||||
|
|
||||||
DynamicList<label> separated;
|
DynamicList<label> separated;
|
||||||
forAll(cp, i)
|
forAll(cp, i)
|
||||||
|
|||||||
@ -36,6 +36,7 @@ Foam::UIPstream::UIPstream
|
|||||||
const commsTypes commsType,
|
const commsTypes commsType,
|
||||||
const int fromProcNo,
|
const int fromProcNo,
|
||||||
DynamicList<char>& externalBuf,
|
DynamicList<char>& externalBuf,
|
||||||
|
label& externalBufPosition,
|
||||||
const int tag,
|
const int tag,
|
||||||
streamFormat format,
|
streamFormat format,
|
||||||
versionNumber version
|
versionNumber version
|
||||||
@ -45,7 +46,7 @@ Foam::UIPstream::UIPstream
|
|||||||
Istream(format, version),
|
Istream(format, version),
|
||||||
fromProcNo_(fromProcNo),
|
fromProcNo_(fromProcNo),
|
||||||
externalBuf_(externalBuf),
|
externalBuf_(externalBuf),
|
||||||
externalBufPosition_(0),
|
externalBufPosition_(externalBufPosition),
|
||||||
tag_(tag),
|
tag_(tag),
|
||||||
messageSize_(0)
|
messageSize_(0)
|
||||||
{
|
{
|
||||||
@ -56,6 +57,7 @@ Foam::UIPstream::UIPstream
|
|||||||
"const commsTypes,"
|
"const commsTypes,"
|
||||||
"const int fromProcNo,"
|
"const int fromProcNo,"
|
||||||
"DynamicList<char>&,"
|
"DynamicList<char>&,"
|
||||||
|
"label&,"
|
||||||
"const int tag,"
|
"const int tag,"
|
||||||
"streamFormat, versionNumber"
|
"streamFormat, versionNumber"
|
||||||
")"
|
")"
|
||||||
|
|||||||
@ -40,6 +40,7 @@ Foam::UIPstream::UIPstream
|
|||||||
const commsTypes commsType,
|
const commsTypes commsType,
|
||||||
const int fromProcNo,
|
const int fromProcNo,
|
||||||
DynamicList<char>& externalBuf,
|
DynamicList<char>& externalBuf,
|
||||||
|
label& externalBufPosition,
|
||||||
const int tag,
|
const int tag,
|
||||||
streamFormat format,
|
streamFormat format,
|
||||||
versionNumber version
|
versionNumber version
|
||||||
@ -49,7 +50,7 @@ Foam::UIPstream::UIPstream
|
|||||||
Istream(format, version),
|
Istream(format, version),
|
||||||
fromProcNo_(fromProcNo),
|
fromProcNo_(fromProcNo),
|
||||||
externalBuf_(externalBuf),
|
externalBuf_(externalBuf),
|
||||||
externalBufPosition_(0),
|
externalBufPosition_(externalBufPosition),
|
||||||
tag_(tag),
|
tag_(tag),
|
||||||
messageSize_(0)
|
messageSize_(0)
|
||||||
{
|
{
|
||||||
@ -122,7 +123,7 @@ Foam::UIPstream::UIPstream(const int fromProcNo, PstreamBuffers& buffers)
|
|||||||
Istream(buffers.format_, buffers.version_),
|
Istream(buffers.format_, buffers.version_),
|
||||||
fromProcNo_(fromProcNo),
|
fromProcNo_(fromProcNo),
|
||||||
externalBuf_(buffers.recvBuf_[fromProcNo]),
|
externalBuf_(buffers.recvBuf_[fromProcNo]),
|
||||||
externalBufPosition_(0),
|
externalBufPosition_(buffers.recvBufPos_[fromProcNo]),
|
||||||
tag_(buffers.tag_),
|
tag_(buffers.tag_),
|
||||||
messageSize_(0)
|
messageSize_(0)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -45,7 +45,7 @@ bool Foam::UOPstream::write
|
|||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "UIPstream::write : starting write to:" << toProcNo
|
Pout<< "UOPstream::write : starting write to:" << toProcNo
|
||||||
<< " tag:" << tag << " size:" << label(bufSize)
|
<< " tag:" << tag << " size:" << label(bufSize)
|
||||||
<< " commsType:" << UPstream::commsTypeNames[commsType]
|
<< " commsType:" << UPstream::commsTypeNames[commsType]
|
||||||
<< Foam::endl;
|
<< Foam::endl;
|
||||||
@ -67,7 +67,7 @@ bool Foam::UOPstream::write
|
|||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "UIPstream::write : finished write to:" << toProcNo
|
Pout<< "UOPstream::write : finished write to:" << toProcNo
|
||||||
<< " tag:" << tag << " size:" << label(bufSize)
|
<< " tag:" << tag << " size:" << label(bufSize)
|
||||||
<< " commsType:" << UPstream::commsTypeNames[commsType]
|
<< " commsType:" << UPstream::commsTypeNames[commsType]
|
||||||
<< Foam::endl;
|
<< Foam::endl;
|
||||||
@ -87,7 +87,7 @@ bool Foam::UOPstream::write
|
|||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "UIPstream::write : finished write to:" << toProcNo
|
Pout<< "UOPstream::write : finished write to:" << toProcNo
|
||||||
<< " tag:" << tag << " size:" << label(bufSize)
|
<< " tag:" << tag << " size:" << label(bufSize)
|
||||||
<< " commsType:" << UPstream::commsTypeNames[commsType]
|
<< " commsType:" << UPstream::commsTypeNames[commsType]
|
||||||
<< Foam::endl;
|
<< Foam::endl;
|
||||||
@ -110,7 +110,7 @@ bool Foam::UOPstream::write
|
|||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
Pout<< "UIPstream::write : started write to:" << toProcNo
|
Pout<< "UOPstream::write : started write to:" << toProcNo
|
||||||
<< " tag:" << tag << " size:" << label(bufSize)
|
<< " tag:" << tag << " size:" << label(bufSize)
|
||||||
<< " commsType:" << UPstream::commsTypeNames[commsType]
|
<< " commsType:" << UPstream::commsTypeNames[commsType]
|
||||||
<< " request:" << PstreamGlobals::outstandingRequests_.size()
|
<< " request:" << PstreamGlobals::outstandingRequests_.size()
|
||||||
|
|||||||
11
src/dummyThirdParty/Allwmake
vendored
Executable file
11
src/dummyThirdParty/Allwmake
vendored
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
|
set -x
|
||||||
|
|
||||||
|
wmake libso scotchDecomp
|
||||||
|
wmake libso metisDecomp
|
||||||
|
wmake libso parMetisDecomp
|
||||||
|
wmake libso MGridGen
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------- end-of-file
|
||||||
3
src/dummyThirdParty/MGridGen/Make/files
vendored
Normal file
3
src/dummyThirdParty/MGridGen/Make/files
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dummyMGridGen.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/dummy/libMGridGen
|
||||||
3
src/dummyThirdParty/MGridGen/Make/options
vendored
Normal file
3
src/dummyThirdParty/MGridGen/Make/options
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
EXE_INC =
|
||||||
|
|
||||||
|
EXE_LIBS =
|
||||||
59
src/dummyThirdParty/MGridGen/dummyMGridGen.C
vendored
Normal file
59
src/dummyThirdParty/MGridGen/dummyMGridGen.C
vendored
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
//extern "C"
|
||||||
|
//{
|
||||||
|
#include "mgridgen.h"
|
||||||
|
//}
|
||||||
|
|
||||||
|
#include "error.H"
|
||||||
|
|
||||||
|
using namespace Foam;
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
static const char* notImplementedMessage =
|
||||||
|
"You are trying to use MGridGen but do not have the MGridGen library loaded.\n"
|
||||||
|
"This message is from the dummy MGridGen stub library instead.\n"
|
||||||
|
"\n"
|
||||||
|
"Normally the MGridGen library will be loaded through the LD_LIBRARY_PATH\n"
|
||||||
|
"environment variable but you are picking up this dummy library from the\n"
|
||||||
|
"$FOAM_LIBBIN/dummy directory. Please install MGridGen and make sure the\n"
|
||||||
|
"libMGridGen.so is in your LD_LIBRARY_PATH.";
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
void MGridGen(int, idxtype *, realtype *, realtype *, idxtype *, realtype *,
|
||||||
|
int, int, int *, int *, int *, idxtype *)
|
||||||
|
{
|
||||||
|
FatalErrorIn("MGridGen(..)")
|
||||||
|
<< notImplementedMessage
|
||||||
|
<< Foam::exit(Foam::FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
64
src/dummyThirdParty/MGridGen/mgridgen.h
vendored
Normal file
64
src/dummyThirdParty/MGridGen/mgridgen.h
vendored
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Namespace
|
||||||
|
C linkage
|
||||||
|
|
||||||
|
Description
|
||||||
|
Dummy stub for mgridgen library functions.
|
||||||
|
Only implements the absolute minimum we are using.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
dummyMGridGen.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef mgridgen_H
|
||||||
|
#define mgridgen_H
|
||||||
|
|
||||||
|
#include "scalar.H"
|
||||||
|
|
||||||
|
#ifndef idxtype
|
||||||
|
#define idxtype int
|
||||||
|
#define realtype Foam::scalar
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class metis Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
void MGridGen(int, idxtype *, realtype *, realtype *, idxtype *, realtype *,
|
||||||
|
int, int, int *, int *, int *, idxtype *);
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
3
src/dummyThirdParty/metisDecomp/Make/files
vendored
Normal file
3
src/dummyThirdParty/metisDecomp/Make/files
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dummyMetisDecomp.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/dummy/libmetisDecomp
|
||||||
5
src/dummyThirdParty/metisDecomp/Make/options
vendored
Normal file
5
src/dummyThirdParty/metisDecomp/Make/options
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I$(FOAM_SRC)/parallel/decompositionMethods/lnInclude \
|
||||||
|
-I$(FOAM_SRC)/parallel/metisDecomp/lnInclude
|
||||||
|
|
||||||
|
LIB_LIBS =
|
||||||
156
src/dummyThirdParty/metisDecomp/dummyMetisDecomp.C
vendored
Normal file
156
src/dummyThirdParty/metisDecomp/dummyMetisDecomp.C
vendored
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "metisDecomp.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "Time.H"
|
||||||
|
|
||||||
|
static const char* notImplementedMessage =
|
||||||
|
"You are trying to use metis but do not have the metisDecomp library loaded."
|
||||||
|
"\nThis message is from the dummy metisDecomp stub library instead.\n"
|
||||||
|
"\n"
|
||||||
|
"Please install metis and make sure that libmetis.so is in your "
|
||||||
|
"LD_LIBRARY_PATH.\n"
|
||||||
|
"The metisDecomp library can then be built in $FOAM_SRC/decompositionMethods/"
|
||||||
|
"metisDecomp\n";
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(metisDecomp, 0);
|
||||||
|
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
decompositionMethod,
|
||||||
|
metisDecomp,
|
||||||
|
dictionaryMesh
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::label Foam::metisDecomp::decompose
|
||||||
|
(
|
||||||
|
const List<int>& adjncy,
|
||||||
|
const List<int>& xadj,
|
||||||
|
const scalarField& cellWeights,
|
||||||
|
List<int>& finalDecomp
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList metisDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const List<int>&, "
|
||||||
|
"const List<int>&, "
|
||||||
|
"const scalarField&, "
|
||||||
|
"List<int>&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::metisDecomp::metisDecomp
|
||||||
|
(
|
||||||
|
const dictionary& decompositionDict,
|
||||||
|
const polyMesh& mesh
|
||||||
|
)
|
||||||
|
:
|
||||||
|
decompositionMethod(decompositionDict),
|
||||||
|
mesh_(mesh)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::labelList Foam::metisDecomp::decompose
|
||||||
|
(
|
||||||
|
const pointField& points,
|
||||||
|
const scalarField& pointWeights
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList metisDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const pointField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return labelList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::labelList Foam::metisDecomp::decompose
|
||||||
|
(
|
||||||
|
const labelList& agglom,
|
||||||
|
const pointField& agglomPoints,
|
||||||
|
const scalarField& agglomWeights
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList metisDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const labelList&, "
|
||||||
|
"const pointField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return labelList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::labelList Foam::metisDecomp::decompose
|
||||||
|
(
|
||||||
|
const labelListList& globalCellCells,
|
||||||
|
const pointField& cellCentres,
|
||||||
|
const scalarField& cellWeights
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList metisDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const labelListList&, "
|
||||||
|
"const pointField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return labelList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
3
src/dummyThirdParty/parMetisDecomp/Make/files
vendored
Normal file
3
src/dummyThirdParty/parMetisDecomp/Make/files
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dummyParMetisDecomp.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/dummy/libparMetisDecomp
|
||||||
5
src/dummyThirdParty/parMetisDecomp/Make/options
vendored
Normal file
5
src/dummyThirdParty/parMetisDecomp/Make/options
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I$(FOAM_SRC)/parallel/decompositionMethods/lnInclude \
|
||||||
|
-I$(FOAM_SRC)/parallel/parMetisDecomp/lnInclude
|
||||||
|
|
||||||
|
LIB_LIBS =
|
||||||
185
src/dummyThirdParty/parMetisDecomp/dummyParMetisDecomp.C
vendored
Normal file
185
src/dummyThirdParty/parMetisDecomp/dummyParMetisDecomp.C
vendored
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "parMetisDecomp.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "polyMesh.H"
|
||||||
|
#include "Time.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(parMetisDecomp, 0);
|
||||||
|
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
decompositionMethod,
|
||||||
|
parMetisDecomp,
|
||||||
|
dictionaryMesh
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char* notImplementedMessage =
|
||||||
|
"You are trying to use parMetis but do not have the parMetisDecomp library "
|
||||||
|
"loaded.\n"
|
||||||
|
"This message is from the dummy parMetisDecomp stub library instead.\n"
|
||||||
|
"\n"
|
||||||
|
"Please install parMetis and make sure that libparMetis.so is in your "
|
||||||
|
"LD_LIBRARY_PATH.\n"
|
||||||
|
"The parMetisDecomp library can then be built in $FOAM_SRC/decompositionMethods/"
|
||||||
|
"parMetisDecomp\n";
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
//- Does prevention of 0 cell domains and calls parmetis.
|
||||||
|
Foam::label Foam::parMetisDecomp::decompose
|
||||||
|
(
|
||||||
|
Field<int>& xadj,
|
||||||
|
Field<int>& adjncy,
|
||||||
|
const pointField& cellCentres,
|
||||||
|
Field<int>& cellWeights,
|
||||||
|
Field<int>& faceWeights,
|
||||||
|
const List<int>& options,
|
||||||
|
|
||||||
|
List<int>& finalDecomp
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"label parMetisDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"Field<int>&, "
|
||||||
|
"Field<int>&, "
|
||||||
|
"const pointField&, "
|
||||||
|
"Field<int>&, "
|
||||||
|
"Field<int>&, "
|
||||||
|
"const List<int>&, "
|
||||||
|
"List<int>&"
|
||||||
|
")"
|
||||||
|
)<< notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::parMetisDecomp::parMetisDecomp
|
||||||
|
(
|
||||||
|
const dictionary& decompositionDict,
|
||||||
|
const polyMesh& mesh
|
||||||
|
)
|
||||||
|
:
|
||||||
|
decompositionMethod(decompositionDict),
|
||||||
|
mesh_(mesh)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::labelList Foam::parMetisDecomp::decompose
|
||||||
|
(
|
||||||
|
const pointField& cc,
|
||||||
|
const scalarField& cWeights
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList parMetisDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const pointField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return labelList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::labelList Foam::parMetisDecomp::decompose
|
||||||
|
(
|
||||||
|
const labelList& cellToRegion,
|
||||||
|
const pointField& regionPoints,
|
||||||
|
const scalarField& regionWeights
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList parMetisDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const labelList&, "
|
||||||
|
"const pointField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return labelList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::labelList Foam::parMetisDecomp::decompose
|
||||||
|
(
|
||||||
|
const labelListList& globalCellCells,
|
||||||
|
const pointField& cellCentres,
|
||||||
|
const scalarField& cWeights
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList parMetisDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const labelListList&, "
|
||||||
|
"const pointField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return labelList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::parMetisDecomp::calcMetisDistributedCSR
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
List<int>& adjncy,
|
||||||
|
List<int>& xadj
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"void parMetisDecomp::calcMetisDistributedCSR"
|
||||||
|
"("
|
||||||
|
"const polyMesh&, "
|
||||||
|
"List<int>&, "
|
||||||
|
"List<int>&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
3
src/dummyThirdParty/scotchDecomp/Make/files
vendored
Normal file
3
src/dummyThirdParty/scotchDecomp/Make/files
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
dummyScotchDecomp.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/dummy/libscotchDecomp
|
||||||
6
src/dummyThirdParty/scotchDecomp/Make/options
vendored
Normal file
6
src/dummyThirdParty/scotchDecomp/Make/options
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I$(FOAM_SRC)/parallel/decompositionMethods/lnInclude \
|
||||||
|
-I$(FOAM_SRC)/parallel/scotchDecomp/lnInclude
|
||||||
|
|
||||||
|
LIB_LIBS =
|
||||||
|
|
||||||
280
src/dummyThirdParty/scotchDecomp/dummyScotchDecomp.C
vendored
Normal file
280
src/dummyThirdParty/scotchDecomp/dummyScotchDecomp.C
vendored
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
|
\\/ 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
From scotch forum:
|
||||||
|
|
||||||
|
By: Francois PELLEGRINI RE: Graph mapping 'strategy' string [ reply ]
|
||||||
|
2008-08-22 10:09 Strategy handling in Scotch is a bit tricky. In order
|
||||||
|
not to be confused, you must have a clear view of how they are built.
|
||||||
|
Here are some rules:
|
||||||
|
|
||||||
|
1- Strategies are made up of "methods" which are combined by means of
|
||||||
|
"operators".
|
||||||
|
|
||||||
|
2- A method is of the form "m{param=value,param=value,...}", where "m"
|
||||||
|
is a single character (this is your first error: "f" is a method name,
|
||||||
|
not a parameter name).
|
||||||
|
|
||||||
|
3- There exist different sort of strategies : bipartitioning strategies,
|
||||||
|
mapping strategies, ordering strategies, which cannot be mixed. For
|
||||||
|
instance, you cannot build a bipartitioning strategy and feed it to a
|
||||||
|
mapping method (this is your second error).
|
||||||
|
|
||||||
|
To use the "mapCompute" routine, you must create a mapping strategy, not
|
||||||
|
a bipartitioning one, and so use stratGraphMap() and not
|
||||||
|
stratGraphBipart(). Your mapping strategy should however be based on the
|
||||||
|
"recursive bipartitioning" method ("b"). For instance, a simple (and
|
||||||
|
hence not very efficient) mapping strategy can be :
|
||||||
|
|
||||||
|
"b{sep=f}"
|
||||||
|
|
||||||
|
which computes mappings with the recursive bipartitioning method "b",
|
||||||
|
this latter using the Fiduccia-Mattheyses method "f" to compute its
|
||||||
|
separators.
|
||||||
|
|
||||||
|
If you want an exact partition (see your previous post), try
|
||||||
|
"b{sep=fx}".
|
||||||
|
|
||||||
|
However, these strategies are not the most efficient, as they do not
|
||||||
|
make use of the multi-level framework.
|
||||||
|
|
||||||
|
To use the multi-level framework, try for instance:
|
||||||
|
|
||||||
|
"b{sep=m{vert=100,low=h,asc=f}x}"
|
||||||
|
|
||||||
|
The current default mapping strategy in Scotch can be seen by using the
|
||||||
|
"-vs" option of program gmap. It is, to date:
|
||||||
|
|
||||||
|
b
|
||||||
|
{
|
||||||
|
job=t,
|
||||||
|
map=t,
|
||||||
|
poli=S,
|
||||||
|
sep=
|
||||||
|
(
|
||||||
|
m
|
||||||
|
{
|
||||||
|
asc=b
|
||||||
|
{
|
||||||
|
bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005},
|
||||||
|
org=f{move=80,pass=-1,bal=0.005},
|
||||||
|
width=3
|
||||||
|
},
|
||||||
|
low=h{pass=10}f{move=80,pass=-1,bal=0.0005},
|
||||||
|
type=h,
|
||||||
|
vert=80,
|
||||||
|
rat=0.8
|
||||||
|
}
|
||||||
|
| m
|
||||||
|
{
|
||||||
|
asc=b
|
||||||
|
{
|
||||||
|
bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005},
|
||||||
|
org=f{move=80,pass=-1,bal=0.005},
|
||||||
|
width=3
|
||||||
|
},
|
||||||
|
low=h{pass=10}f{move=80,pass=-1,bal=0.0005},
|
||||||
|
type=h,
|
||||||
|
vert=80,
|
||||||
|
rat=0.8
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "scotchDecomp.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "Time.H"
|
||||||
|
|
||||||
|
static const char* notImplementedMessage =
|
||||||
|
"You are trying to use scotch but do not have the scotchDecomp library loaded."
|
||||||
|
"\nThis message is from the dummy scotchDecomp stub library instead.\n"
|
||||||
|
"\n"
|
||||||
|
"Please install scotch and make sure that libscotch.so is in your "
|
||||||
|
"LD_LIBRARY_PATH.\n"
|
||||||
|
"The scotchDecomp library can then be built in $FOAM_SRC/decompositionMethods/"
|
||||||
|
"scotchDecomp\n";
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(scotchDecomp, 0);
|
||||||
|
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
decompositionMethod,
|
||||||
|
scotchDecomp,
|
||||||
|
dictionaryMesh
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::scotchDecomp::check(const int retVal, const char* str)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::label Foam::scotchDecomp::decompose
|
||||||
|
(
|
||||||
|
const List<int>& adjncy,
|
||||||
|
const List<int>& xadj,
|
||||||
|
const scalarField& cWeights,
|
||||||
|
|
||||||
|
List<int>& finalDecomp
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"label scotchDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const List<int>&, "
|
||||||
|
"const List<int>&, "
|
||||||
|
"const scalarField&, "
|
||||||
|
"List<int>&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::scotchDecomp::scotchDecomp
|
||||||
|
(
|
||||||
|
const dictionary& decompositionDict,
|
||||||
|
const polyMesh& mesh
|
||||||
|
)
|
||||||
|
:
|
||||||
|
decompositionMethod(decompositionDict),
|
||||||
|
mesh_(mesh)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::labelList Foam::scotchDecomp::decompose
|
||||||
|
(
|
||||||
|
const pointField& points,
|
||||||
|
const scalarField& pointWeights
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList scotchDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const pointField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return labelList::null();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::labelList Foam::scotchDecomp::decompose
|
||||||
|
(
|
||||||
|
const labelList& agglom,
|
||||||
|
const pointField& agglomPoints,
|
||||||
|
const scalarField& pointWeights
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList scotchDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const labelList&, "
|
||||||
|
"const pointField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return labelList::null();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::labelList Foam::scotchDecomp::decompose
|
||||||
|
(
|
||||||
|
const labelListList& globalCellCells,
|
||||||
|
const pointField& cellCentres,
|
||||||
|
const scalarField& cWeights
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList scotchDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const labelListList&, "
|
||||||
|
"const pointField&, "
|
||||||
|
"const scalarField&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
|
||||||
|
return labelList::null();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::scotchDecomp::calcCSR
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
List<int>& adjncy,
|
||||||
|
List<int>& xadj
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList scotchDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const polyMesh&, "
|
||||||
|
"const List<int>&, "
|
||||||
|
"const List<int>&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::scotchDecomp::calcCSR
|
||||||
|
(
|
||||||
|
const labelListList& cellCells,
|
||||||
|
List<int>& adjncy,
|
||||||
|
List<int>& xadj
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"labelList scotchDecomp::decompose"
|
||||||
|
"("
|
||||||
|
"const labelListList&, "
|
||||||
|
"const List<int>&, "
|
||||||
|
"const List<int>&"
|
||||||
|
")"
|
||||||
|
) << notImplementedMessage << exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -123,6 +123,32 @@ angularOscillatingDisplacementPointPatchVectorField
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void angularOscillatingDisplacementPointPatchVectorField::autoMap
|
||||||
|
(
|
||||||
|
const pointPatchFieldMapper& m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
fixedValuePointPatchField<vector>::autoMap(m);
|
||||||
|
|
||||||
|
p0_.autoMap(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void angularOscillatingDisplacementPointPatchVectorField::rmap
|
||||||
|
(
|
||||||
|
const pointPatchField<vector>& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const angularOscillatingDisplacementPointPatchVectorField& aODptf =
|
||||||
|
refCast<const angularOscillatingDisplacementPointPatchVectorField>(ptf);
|
||||||
|
|
||||||
|
fixedValuePointPatchField<vector>::rmap(aODptf, addr);
|
||||||
|
|
||||||
|
p0_.rmap(aODptf.p0_, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void angularOscillatingDisplacementPointPatchVectorField::updateCoeffs()
|
void angularOscillatingDisplacementPointPatchVectorField::updateCoeffs()
|
||||||
{
|
{
|
||||||
if (this->updated())
|
if (this->updated())
|
||||||
|
|||||||
@ -132,6 +132,22 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
|
// Mapping functions
|
||||||
|
|
||||||
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
virtual void autoMap
|
||||||
|
(
|
||||||
|
const pointPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Reverse map the given pointPatchField onto this pointPatchField
|
||||||
|
virtual void rmap
|
||||||
|
(
|
||||||
|
const pointPatchField<vector>&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// Evaluation functions
|
// Evaluation functions
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
|
|||||||
@ -123,6 +123,32 @@ angularOscillatingVelocityPointPatchVectorField
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void angularOscillatingVelocityPointPatchVectorField::autoMap
|
||||||
|
(
|
||||||
|
const pointPatchFieldMapper& m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
fixedValuePointPatchField<vector>::autoMap(m);
|
||||||
|
|
||||||
|
p0_.autoMap(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void angularOscillatingVelocityPointPatchVectorField::rmap
|
||||||
|
(
|
||||||
|
const pointPatchField<vector>& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const angularOscillatingVelocityPointPatchVectorField& aOVptf =
|
||||||
|
refCast<const angularOscillatingVelocityPointPatchVectorField>(ptf);
|
||||||
|
|
||||||
|
fixedValuePointPatchField<vector>::rmap(aOVptf, addr);
|
||||||
|
|
||||||
|
p0_.rmap(aOVptf.p0_, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void angularOscillatingVelocityPointPatchVectorField::updateCoeffs()
|
void angularOscillatingVelocityPointPatchVectorField::updateCoeffs()
|
||||||
{
|
{
|
||||||
if (this->updated())
|
if (this->updated())
|
||||||
|
|||||||
@ -132,6 +132,22 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
|
// Mapping functions
|
||||||
|
|
||||||
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
virtual void autoMap
|
||||||
|
(
|
||||||
|
const pointPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Reverse map the given pointPatchField onto this pointPatchField
|
||||||
|
virtual void rmap
|
||||||
|
(
|
||||||
|
const pointPatchField<vector>&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// Evaluation functions
|
// Evaluation functions
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
|
|||||||
@ -111,6 +111,32 @@ oscillatingVelocityPointPatchVectorField
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void oscillatingVelocityPointPatchVectorField::autoMap
|
||||||
|
(
|
||||||
|
const pointPatchFieldMapper& m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
fixedValuePointPatchField<vector>::autoMap(m);
|
||||||
|
|
||||||
|
p0_.autoMap(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void oscillatingVelocityPointPatchVectorField::rmap
|
||||||
|
(
|
||||||
|
const pointPatchField<vector>& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const oscillatingVelocityPointPatchVectorField& oVptf =
|
||||||
|
refCast<const oscillatingVelocityPointPatchVectorField>(ptf);
|
||||||
|
|
||||||
|
fixedValuePointPatchField<vector>::rmap(oVptf, addr);
|
||||||
|
|
||||||
|
p0_.rmap(oVptf.p0_, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void oscillatingVelocityPointPatchVectorField::updateCoeffs()
|
void oscillatingVelocityPointPatchVectorField::updateCoeffs()
|
||||||
{
|
{
|
||||||
if (this->updated())
|
if (this->updated())
|
||||||
|
|||||||
@ -129,6 +129,22 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
|
// Mapping functions
|
||||||
|
|
||||||
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
virtual void autoMap
|
||||||
|
(
|
||||||
|
const pointPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Reverse map the given pointPatchField onto this pointPatchField
|
||||||
|
virtual void rmap
|
||||||
|
(
|
||||||
|
const pointPatchField<vector>&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// Evaluation functions
|
// Evaluation functions
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
|
|||||||
@ -39,11 +39,6 @@ SourceFiles
|
|||||||
#ifndef ReactingParcel_H
|
#ifndef ReactingParcel_H
|
||||||
#define ReactingParcel_H
|
#define ReactingParcel_H
|
||||||
|
|
||||||
#include "IOstream.H"
|
|
||||||
#include "autoPtr.H"
|
|
||||||
#include "interpolationCellPoint.H"
|
|
||||||
#include "contiguous.H"
|
|
||||||
|
|
||||||
#include "ThermoParcel.H"
|
#include "ThermoParcel.H"
|
||||||
#include "ReactingCloud.H"
|
#include "ReactingCloud.H"
|
||||||
#include "reactingParcel.H"
|
#include "reactingParcel.H"
|
||||||
|
|||||||
@ -40,11 +40,6 @@ SourceFiles
|
|||||||
#ifndef ThermoParcel_H
|
#ifndef ThermoParcel_H
|
||||||
#define ThermoParcel_H
|
#define ThermoParcel_H
|
||||||
|
|
||||||
#include "IOstream.H"
|
|
||||||
#include "autoPtr.H"
|
|
||||||
#include "interpolationCellPoint.H"
|
|
||||||
#include "contiguous.H"
|
|
||||||
|
|
||||||
#include "KinematicParcel.H"
|
#include "KinematicParcel.H"
|
||||||
#include "ThermoCloud.H"
|
#include "ThermoCloud.H"
|
||||||
|
|
||||||
|
|||||||
@ -6,5 +6,4 @@ EXE_INC = \
|
|||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-ltriSurface \
|
-ltriSurface \
|
||||||
-ldecompositionMethods \
|
-ldecompositionMethods \
|
||||||
-lmetisDecompositionMethod \
|
|
||||||
-llagrangian
|
-llagrangian
|
||||||
|
|||||||
@ -2433,7 +2433,7 @@ Foam::pointIndexHit Foam::indexedOctree<Type>::findLineAny
|
|||||||
template <class Type>
|
template <class Type>
|
||||||
Foam::labelList Foam::indexedOctree<Type>::findBox
|
Foam::labelList Foam::indexedOctree<Type>::findBox
|
||||||
(
|
(
|
||||||
const boundBox& searchBox
|
const treeBoundBox& searchBox
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
// Storage for labels of shapes inside bb. Size estimate.
|
// Storage for labels of shapes inside bb. Size estimate.
|
||||||
|
|||||||
@ -546,7 +546,7 @@ public:
|
|||||||
|
|
||||||
//- Find (in no particular order) indices of all shapes inside or
|
//- Find (in no particular order) indices of all shapes inside or
|
||||||
// overlapping bounding box (i.e. all shapes not outside box)
|
// overlapping bounding box (i.e. all shapes not outside box)
|
||||||
labelList findBox(const boundBox& bb) const;
|
labelList findBox(const treeBoundBox& bb) const;
|
||||||
|
|
||||||
//- Find deepest node (as parent+octant) containing point. Starts
|
//- Find deepest node (as parent+octant) containing point. Starts
|
||||||
// off from starting index in nodes_ (use 0 to start from top)
|
// off from starting index in nodes_ (use 0 to start from top)
|
||||||
|
|||||||
@ -2,7 +2,9 @@
|
|||||||
cd ${0%/*} || exit 1 # run from this directory
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
wmake libso decompositionMethods
|
wmakeLnInclude decompositionMethods
|
||||||
|
|
||||||
|
wmake libso scotchDecomp
|
||||||
wmake libso metisDecomp
|
wmake libso metisDecomp
|
||||||
wmake libso reconstruct
|
wmake libso reconstruct
|
||||||
|
|
||||||
@ -11,4 +13,7 @@ then
|
|||||||
( WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB; wmake libso parMetisDecomp )
|
( WM_OPTIONS=${WM_OPTIONS}$WM_MPLIB; wmake libso parMetisDecomp )
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
wmake libso decompositionMethods
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------- end-of-file
|
# ----------------------------------------------------------------- end-of-file
|
||||||
|
|||||||
8
src/parallel/AllwmakeLnInclude
Executable file
8
src/parallel/AllwmakeLnInclude
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
|
set -x
|
||||||
|
|
||||||
|
wmakeLnInclude decompositionMethods
|
||||||
|
wmakeLnInclude metisDecomp
|
||||||
|
wmakeLnInclude parMetisDecomp
|
||||||
|
wmakeLnInclude scotchDecomp
|
||||||
@ -4,6 +4,4 @@ simpleGeomDecomp/simpleGeomDecomp.C
|
|||||||
hierarchGeomDecomp/hierarchGeomDecomp.C
|
hierarchGeomDecomp/hierarchGeomDecomp.C
|
||||||
manualDecomp/manualDecomp.C
|
manualDecomp/manualDecomp.C
|
||||||
|
|
||||||
scotchDecomp/scotchDecomp.C
|
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libdecompositionMethods
|
LIB = $(FOAM_LIBBIN)/libdecompositionMethods
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
EXE_INC = \
|
EXE_INC =
|
||||||
-I$(WM_THIRD_PARTY_DIR)/scotch_5.1/include \
|
|
||||||
-I../metisDecomp/lnInclude
|
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-lscotch -lscotcherrexit
|
-L$(FOAM_LIBBIN)/dummy \
|
||||||
|
-L$(FOAM_MPI_LIBBIN) \
|
||||||
|
-lscotchDecomp \
|
||||||
|
-lmetisDecomp \
|
||||||
|
-lparMetisDecomp
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
metisDecomp.C
|
metisDecomp.C
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libmetisDecompositionMethod
|
LIB = $(FOAM_LIBBIN)/libmetisDecomp
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
-I$(WM_THIRD_PARTY_DIR)/metis-5.0pre2/include \
|
-I$(WM_THIRD_PARTY_DIR)/metis-5.0pre2/include \
|
||||||
-I../decompositionMethods/lnInclude
|
-I../decompositionMethods/lnInclude \
|
||||||
|
-I../scotchDecomp/lnInclude
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-lmetis \
|
-lmetis \
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
parMetisDecomp.C
|
parMetisDecomp.C
|
||||||
|
|
||||||
LIB = $(FOAM_MPI_LIBBIN)/libparMetisDecompositionMethod
|
LIB = $(FOAM_MPI_LIBBIN)/libparMetisDecomp
|
||||||
|
|||||||
@ -5,7 +5,8 @@ EXE_INC = \
|
|||||||
-I$(WM_THIRD_PARTY_DIR)/ParMetis-3.1/ParMETISLib \
|
-I$(WM_THIRD_PARTY_DIR)/ParMetis-3.1/ParMETISLib \
|
||||||
-I$(WM_THIRD_PARTY_DIR)/ParMetis-3.1 \
|
-I$(WM_THIRD_PARTY_DIR)/ParMetis-3.1 \
|
||||||
-I../decompositionMethods/lnInclude \
|
-I../decompositionMethods/lnInclude \
|
||||||
-I../metisDecomp/lnInclude
|
-I../metisDecomp/lnInclude \
|
||||||
|
-I../scotchDecomp/lnInclude
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-L$(FOAM_MPI_LIBBIN) \
|
-L$(FOAM_MPI_LIBBIN) \
|
||||||
|
|||||||
3
src/parallel/scotchDecomp/Make/files
Normal file
3
src/parallel/scotchDecomp/Make/files
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
scotchDecomp.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/libscotchDecomp
|
||||||
7
src/parallel/scotchDecomp/Make/options
Normal file
7
src/parallel/scotchDecomp/Make/options
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I$(WM_THIRD_PARTY_DIR)/scotch_5.1/include \
|
||||||
|
-I/usr/include/scotch \
|
||||||
|
-I../decompositionMethods/lnInclude
|
||||||
|
|
||||||
|
LIB_LIBS = \
|
||||||
|
-lscotch -lscotcherrexit
|
||||||
@ -48,7 +48,7 @@ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
|
|||||||
:
|
:
|
||||||
fixedValuePointPatchField<vector>(p, iF),
|
fixedValuePointPatchField<vector>(p, iF),
|
||||||
motion_(),
|
motion_(),
|
||||||
p0_(p.localPoints()),
|
initialPoints_(p.localPoints()),
|
||||||
rhoInf_(1.0)
|
rhoInf_(1.0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -70,13 +70,13 @@ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
|
|||||||
updateCoeffs();
|
updateCoeffs();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dict.found("p0"))
|
if (dict.found("initialPoints"))
|
||||||
{
|
{
|
||||||
p0_ = vectorField("p0", dict , p.size());
|
initialPoints_ = vectorField("initialPoints", dict , p.size());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p0_ = p.localPoints();
|
initialPoints_ = p.localPoints();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
|
|||||||
:
|
:
|
||||||
fixedValuePointPatchField<vector>(ptf, p, iF, mapper),
|
fixedValuePointPatchField<vector>(ptf, p, iF, mapper),
|
||||||
motion_(ptf.motion_),
|
motion_(ptf.motion_),
|
||||||
p0_(ptf.p0_, mapper),
|
initialPoints_(ptf.initialPoints_, mapper),
|
||||||
rhoInf_(ptf.rhoInf_)
|
rhoInf_(ptf.rhoInf_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -106,13 +106,42 @@ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
|
|||||||
:
|
:
|
||||||
fixedValuePointPatchField<vector>(ptf, iF),
|
fixedValuePointPatchField<vector>(ptf, iF),
|
||||||
motion_(ptf.motion_),
|
motion_(ptf.motion_),
|
||||||
p0_(ptf.p0_),
|
initialPoints_(ptf.initialPoints_),
|
||||||
rhoInf_(ptf.rhoInf_)
|
rhoInf_(ptf.rhoInf_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::autoMap
|
||||||
|
(
|
||||||
|
const pointPatchFieldMapper& m
|
||||||
|
)
|
||||||
|
{
|
||||||
|
fixedValuePointPatchField<vector>::autoMap(m);
|
||||||
|
|
||||||
|
initialPoints_.autoMap(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::rmap
|
||||||
|
(
|
||||||
|
const pointPatchField<vector>& ptf,
|
||||||
|
const labelList& addr
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField& uSDoFptf =
|
||||||
|
refCast
|
||||||
|
<
|
||||||
|
const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
|
||||||
|
>(ptf);
|
||||||
|
|
||||||
|
fixedValuePointPatchField<vector>::rmap(uSDoFptf, addr);
|
||||||
|
|
||||||
|
initialPoints_.rmap(uSDoFptf.initialPoints_, addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
|
void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
|
||||||
{
|
{
|
||||||
if (this->updated())
|
if (this->updated())
|
||||||
@ -138,7 +167,10 @@ void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
|
|||||||
// Do not modify the accelerations, except with gravity, where available
|
// Do not modify the accelerations, except with gravity, where available
|
||||||
motion_.updateForce(gravity*motion_.mass(), vector::zero, t.deltaTValue());
|
motion_.updateForce(gravity*motion_.mass(), vector::zero, t.deltaTValue());
|
||||||
|
|
||||||
Field<vector>::operator=(motion_.currentPosition(p0_) - p0_);
|
Field<vector>::operator=
|
||||||
|
(
|
||||||
|
motion_.currentPosition(initialPoints_) - initialPoints_
|
||||||
|
);
|
||||||
|
|
||||||
fixedValuePointPatchField<vector>::updateCoeffs();
|
fixedValuePointPatchField<vector>::updateCoeffs();
|
||||||
}
|
}
|
||||||
@ -153,7 +185,7 @@ void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::write
|
|||||||
motion_.write(os);
|
motion_.write(os);
|
||||||
os.writeKeyword("rhoInf")
|
os.writeKeyword("rhoInf")
|
||||||
<< rhoInf_ << token::END_STATEMENT << nl;
|
<< rhoInf_ << token::END_STATEMENT << nl;
|
||||||
p0_.writeEntry("p0", os);
|
initialPoints_.writeEntry("initialPoints", os);
|
||||||
writeEntry("value", os);
|
writeEntry("value", os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -57,8 +57,8 @@ class uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
|
|||||||
//- Six dof motion object
|
//- Six dof motion object
|
||||||
sixDoFRigidBodyMotion motion_;
|
sixDoFRigidBodyMotion motion_;
|
||||||
|
|
||||||
//- Reference positions of points on the patch
|
//- Initial positions of points on the patch
|
||||||
pointField p0_;
|
pointField initialPoints_;
|
||||||
|
|
||||||
//- Reference density required by the forces object for
|
//- Reference density required by the forces object for
|
||||||
// incompressible calculations. Retained here to give
|
// incompressible calculations. Retained here to give
|
||||||
@ -136,6 +136,22 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
|
// Mapping functions
|
||||||
|
|
||||||
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
virtual void autoMap
|
||||||
|
(
|
||||||
|
const pointPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Reverse map the given pointPatchField onto this pointPatchField
|
||||||
|
virtual void rmap
|
||||||
|
(
|
||||||
|
const pointPatchField<vector>&,
|
||||||
|
const labelList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
// Evaluation functions
|
// Evaluation functions
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
|
|||||||
@ -284,6 +284,7 @@ Foam::distanceSurface::distanceSurface
|
|||||||
distance_(readScalar(dict.lookup("distance"))),
|
distance_(readScalar(dict.lookup("distance"))),
|
||||||
signed_(readBool(dict.lookup("signed"))),
|
signed_(readBool(dict.lookup("signed"))),
|
||||||
regularise_(dict.lookupOrDefault("regularise", true)),
|
regularise_(dict.lookupOrDefault("regularise", true)),
|
||||||
|
average_(dict.lookupOrDefault("average", false)),
|
||||||
zoneName_(word::null),
|
zoneName_(word::null),
|
||||||
needsUpdate_(true),
|
needsUpdate_(true),
|
||||||
isoSurfPtr_(NULL),
|
isoSurfPtr_(NULL),
|
||||||
|
|||||||
@ -68,6 +68,9 @@ class distanceSurface
|
|||||||
//- Whether to coarsen
|
//- Whether to coarsen
|
||||||
const Switch regularise_;
|
const Switch regularise_;
|
||||||
|
|
||||||
|
//- Whether to recalculate cell values as average of point values
|
||||||
|
const Switch average_;
|
||||||
|
|
||||||
//- zone name (if restricted to zones)
|
//- zone name (if restricted to zones)
|
||||||
word zoneName_;
|
word zoneName_;
|
||||||
|
|
||||||
|
|||||||
@ -62,7 +62,15 @@ Foam::distanceSurface::interpolateField
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Sample.
|
// Sample.
|
||||||
return surface().interpolate(volFld, pointFld());
|
return surface().interpolate
|
||||||
|
(
|
||||||
|
(
|
||||||
|
average_
|
||||||
|
? pointAverage(pointFld())()
|
||||||
|
: volFld
|
||||||
|
),
|
||||||
|
pointFld()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -164,7 +164,10 @@ void Foam::sampledIsoSurface::getIsoFields() const
|
|||||||
// point field.
|
// point field.
|
||||||
if (average_)
|
if (average_)
|
||||||
{
|
{
|
||||||
storedVolFieldPtr_.reset(average(fvm, *pointFieldPtr_).ptr());
|
storedVolFieldPtr_.reset
|
||||||
|
(
|
||||||
|
pointAverage(*pointFieldPtr_).ptr()
|
||||||
|
);
|
||||||
volFieldPtr_ = storedVolFieldPtr_.operator->();
|
volFieldPtr_ = storedVolFieldPtr_.operator->();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +268,7 @@ void Foam::sampledIsoSurface::getIsoFields() const
|
|||||||
{
|
{
|
||||||
storedVolSubFieldPtr_.reset
|
storedVolSubFieldPtr_.reset
|
||||||
(
|
(
|
||||||
average(subFvm, *pointSubFieldPtr_).ptr()
|
pointAverage(*pointSubFieldPtr_).ptr()
|
||||||
);
|
);
|
||||||
volSubFieldPtr_ = storedVolSubFieldPtr_.operator->();
|
volSubFieldPtr_ = storedVolSubFieldPtr_.operator->();
|
||||||
}
|
}
|
||||||
@ -286,99 +289,6 @@ void Foam::sampledIsoSurface::getIsoFields() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::volScalarField> Foam::sampledIsoSurface::average
|
|
||||||
(
|
|
||||||
const fvMesh& mesh,
|
|
||||||
const pointScalarField& pfld
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
tmp<volScalarField> tcellAvg
|
|
||||||
(
|
|
||||||
new volScalarField
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"cellAvg",
|
|
||||||
mesh.time().timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
),
|
|
||||||
mesh,
|
|
||||||
dimensionedScalar("zero", dimless, scalar(0.0))
|
|
||||||
)
|
|
||||||
);
|
|
||||||
volScalarField& cellAvg = tcellAvg();
|
|
||||||
|
|
||||||
labelField nPointCells(mesh.nCells(), 0);
|
|
||||||
{
|
|
||||||
for (label pointI = 0; pointI < mesh.nPoints(); pointI++)
|
|
||||||
{
|
|
||||||
const labelList& pCells = mesh.pointCells(pointI);
|
|
||||||
|
|
||||||
forAll(pCells, i)
|
|
||||||
{
|
|
||||||
label cellI = pCells[i];
|
|
||||||
|
|
||||||
cellAvg[cellI] += pfld[pointI];
|
|
||||||
nPointCells[cellI]++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
forAll(cellAvg, cellI)
|
|
||||||
{
|
|
||||||
cellAvg[cellI] /= nPointCells[cellI];
|
|
||||||
}
|
|
||||||
// Give value to calculatedFvPatchFields
|
|
||||||
cellAvg.correctBoundaryConditions();
|
|
||||||
|
|
||||||
return tcellAvg;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::tmp<Foam::pointScalarField> Foam::sampledIsoSurface::average
|
|
||||||
(
|
|
||||||
const pointMesh& pMesh,
|
|
||||||
const volScalarField& fld
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
tmp<pointScalarField> tpointAvg
|
|
||||||
(
|
|
||||||
new pointScalarField
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"pointAvg",
|
|
||||||
fld.time().timeName(),
|
|
||||||
fld.db(),
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
),
|
|
||||||
pMesh,
|
|
||||||
dimensionedScalar("zero", dimless, scalar(0.0))
|
|
||||||
)
|
|
||||||
);
|
|
||||||
pointScalarField& pointAvg = tpointAvg();
|
|
||||||
|
|
||||||
for (label pointI = 0; pointI < fld.mesh().nPoints(); pointI++)
|
|
||||||
{
|
|
||||||
const labelList& pCells = fld.mesh().pointCells(pointI);
|
|
||||||
|
|
||||||
forAll(pCells, i)
|
|
||||||
{
|
|
||||||
pointAvg[pointI] += fld[pCells[i]];
|
|
||||||
}
|
|
||||||
pointAvg[pointI] /= pCells.size();
|
|
||||||
}
|
|
||||||
// Give value to calculatedFvPatchFields
|
|
||||||
pointAvg.correctBoundaryConditions();
|
|
||||||
|
|
||||||
return tpointAvg;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool Foam::sampledIsoSurface::updateGeometry() const
|
bool Foam::sampledIsoSurface::updateGeometry() const
|
||||||
{
|
{
|
||||||
const fvMesh& fvm = static_cast<const fvMesh&>(mesh());
|
const fvMesh& fvm = static_cast<const fvMesh&>(mesh());
|
||||||
|
|||||||
@ -118,18 +118,6 @@ class sampledIsoSurface
|
|||||||
//- Get fields needed to recreate iso surface.
|
//- Get fields needed to recreate iso surface.
|
||||||
void getIsoFields() const;
|
void getIsoFields() const;
|
||||||
|
|
||||||
tmp<volScalarField> average
|
|
||||||
(
|
|
||||||
const fvMesh&,
|
|
||||||
const pointScalarField&
|
|
||||||
) const;
|
|
||||||
|
|
||||||
tmp<pointScalarField> average
|
|
||||||
(
|
|
||||||
const pointMesh&,
|
|
||||||
const volScalarField& fld
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Create iso surface (if time has changed)
|
//- Create iso surface (if time has changed)
|
||||||
// Do nothing (and return false) if no update was needed
|
// Do nothing (and return false) if no update was needed
|
||||||
bool updateGeometry() const;
|
bool updateGeometry() const;
|
||||||
|
|||||||
@ -71,7 +71,15 @@ Foam::sampledIsoSurface::interpolateField
|
|||||||
volPointInterpolation::New(volSubFld.mesh()).interpolate(volSubFld);
|
volPointInterpolation::New(volSubFld.mesh()).interpolate(volSubFld);
|
||||||
|
|
||||||
// Sample.
|
// Sample.
|
||||||
return surface().interpolate(volSubFld, tpointSubFld());
|
return surface().interpolate
|
||||||
|
(
|
||||||
|
(
|
||||||
|
average_
|
||||||
|
? pointAverage(tpointSubFld())()
|
||||||
|
: volSubFld
|
||||||
|
),
|
||||||
|
tpointSubFld()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -79,7 +87,15 @@ Foam::sampledIsoSurface::interpolateField
|
|||||||
volPointInterpolation::New(volFld.mesh()).interpolate(volFld);
|
volPointInterpolation::New(volFld.mesh()).interpolate(volFld);
|
||||||
|
|
||||||
// Sample.
|
// Sample.
|
||||||
return surface().interpolate(volFld, tpointFld());
|
return surface().interpolate
|
||||||
|
(
|
||||||
|
(
|
||||||
|
average_
|
||||||
|
? pointAverage(tpointFld())()
|
||||||
|
: volFld
|
||||||
|
),
|
||||||
|
tpointFld()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -254,6 +254,7 @@ Foam::sampledCuttingPlane::sampledCuttingPlane
|
|||||||
plane_(dict),
|
plane_(dict),
|
||||||
mergeTol_(dict.lookupOrDefault("mergeTol", 1E-6)),
|
mergeTol_(dict.lookupOrDefault("mergeTol", 1E-6)),
|
||||||
regularise_(dict.lookupOrDefault("regularise", true)),
|
regularise_(dict.lookupOrDefault("regularise", true)),
|
||||||
|
average_(dict.lookupOrDefault("average", false)),
|
||||||
zoneID_(dict.lookupOrDefault("zone", word::null), mesh.cellZones()),
|
zoneID_(dict.lookupOrDefault("zone", word::null), mesh.cellZones()),
|
||||||
exposedPatchName_(word::null),
|
exposedPatchName_(word::null),
|
||||||
needsUpdate_(true),
|
needsUpdate_(true),
|
||||||
|
|||||||
@ -66,6 +66,9 @@ class sampledCuttingPlane
|
|||||||
//- Whether to coarsen
|
//- Whether to coarsen
|
||||||
const Switch regularise_;
|
const Switch regularise_;
|
||||||
|
|
||||||
|
//- Whether to recalculate cell values as average of point values
|
||||||
|
const Switch average_;
|
||||||
|
|
||||||
//- zone name/index (if restricted to zones)
|
//- zone name/index (if restricted to zones)
|
||||||
mutable cellZoneID zoneID_;
|
mutable cellZoneID zoneID_;
|
||||||
|
|
||||||
|
|||||||
@ -67,7 +67,15 @@ Foam::sampledCuttingPlane::interpolateField
|
|||||||
volPointInterpolation::New(volSubFld.mesh()).interpolate(volSubFld);
|
volPointInterpolation::New(volSubFld.mesh()).interpolate(volSubFld);
|
||||||
|
|
||||||
// Sample.
|
// Sample.
|
||||||
return surface().interpolate(volSubFld, tpointSubFld());
|
return surface().interpolate
|
||||||
|
(
|
||||||
|
(
|
||||||
|
average_
|
||||||
|
? pointAverage(tpointSubFld())()
|
||||||
|
: volSubFld
|
||||||
|
),
|
||||||
|
tpointSubFld()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -77,7 +85,15 @@ Foam::sampledCuttingPlane::interpolateField
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Sample.
|
// Sample.
|
||||||
return surface().interpolate(volFld, tpointFld());
|
return surface().interpolate
|
||||||
|
(
|
||||||
|
(
|
||||||
|
average_
|
||||||
|
? pointAverage(tpointFld())()
|
||||||
|
: volFld
|
||||||
|
),
|
||||||
|
tpointFld()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -312,6 +312,13 @@ public:
|
|||||||
//- Project field onto surface
|
//- Project field onto surface
|
||||||
tmp<Field<vector> > project(const Field<tensor>&) const;
|
tmp<Field<vector> > project(const Field<tensor>&) const;
|
||||||
|
|
||||||
|
//- Interpolate from points to cell centre
|
||||||
|
template<class Type>
|
||||||
|
tmp<GeometricField<Type, fvPatchField, volMesh> > pointAverage
|
||||||
|
(
|
||||||
|
const GeometricField<Type, pointPatchField, pointMesh>& pfld
|
||||||
|
) const;
|
||||||
|
|
||||||
//- Sample field on surface
|
//- Sample field on surface
|
||||||
virtual tmp<scalarField> sample
|
virtual tmp<scalarField> sample
|
||||||
(
|
(
|
||||||
|
|||||||
@ -155,4 +155,59 @@ Foam::sampledSurface::project
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::tmp<Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh> >
|
||||||
|
Foam::sampledSurface::pointAverage
|
||||||
|
(
|
||||||
|
const GeometricField<Type, pointPatchField, pointMesh>& pfld
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const fvMesh& mesh = dynamic_cast<const fvMesh&>(pfld.mesh()());
|
||||||
|
|
||||||
|
tmp<GeometricField<Type, fvPatchField, volMesh> > tcellAvg
|
||||||
|
(
|
||||||
|
new GeometricField<Type, fvPatchField, volMesh>
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"cellAvg",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
pfld.db(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
false
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensioned<Type>("zero", dimless, pTraits<Type>::zero)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
GeometricField<Type, fvPatchField, volMesh>& cellAvg = tcellAvg();
|
||||||
|
|
||||||
|
labelField nPointCells(mesh.nCells(), 0);
|
||||||
|
{
|
||||||
|
for (label pointI = 0; pointI < mesh.nPoints(); pointI++)
|
||||||
|
{
|
||||||
|
const labelList& pCells = mesh.pointCells(pointI);
|
||||||
|
|
||||||
|
forAll(pCells, i)
|
||||||
|
{
|
||||||
|
label cellI = pCells[i];
|
||||||
|
|
||||||
|
cellAvg[cellI] += pfld[pointI];
|
||||||
|
nPointCells[cellI]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
forAll(cellAvg, cellI)
|
||||||
|
{
|
||||||
|
cellAvg[cellI] /= nPointCells[cellI];
|
||||||
|
}
|
||||||
|
// Give value to calculatedFvPatchFields
|
||||||
|
cellAvg.correctBoundaryConditions();
|
||||||
|
|
||||||
|
return tcellAvg;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -146,7 +146,7 @@ bool Foam::sampledTriSurfaceMesh::update()
|
|||||||
|
|
||||||
// Find the cells the triangles of the surface are in.
|
// Find the cells the triangles of the surface are in.
|
||||||
// Does approximation by looking at the face centres only
|
// Does approximation by looking at the face centres only
|
||||||
const pointField fc = surface_.faceCentres();
|
const pointField& fc = surface_.faceCentres();
|
||||||
|
|
||||||
cellLabels_.setSize(fc.size());
|
cellLabels_.setSize(fc.size());
|
||||||
|
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -246,8 +246,7 @@ Foam::tmp<Foam::volScalarField> Foam::ePsiThermo<MixtureType>::Cp() const
|
|||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionSet(0, 2, -2, -1, 0),
|
dimensionSet(0, 2, -2, -1, 0)
|
||||||
this->T_.boundaryField().types()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -244,8 +244,7 @@ Foam::tmp<Foam::volScalarField> Foam::hPsiThermo<MixtureType>::Cp() const
|
|||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionSet(0, 2, -2, -1, 0),
|
dimensionSet(0, 2, -2, -1, 0)
|
||||||
this->T_.boundaryField().types()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -244,8 +244,7 @@ Foam::tmp<Foam::volScalarField> Foam::hsPsiThermo<MixtureType>::Cp() const
|
|||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionSet(0, 2, -2, -1, 0),
|
dimensionSet(0, 2, -2, -1, 0)
|
||||||
this->T_.boundaryField().types()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -243,8 +243,7 @@ Foam::tmp<Foam::volScalarField> Foam::hRhoThermo<MixtureType>::Cp() const
|
|||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionSet(0, 2, -2, -1, 0),
|
dimensionSet(0, 2, -2, -1, 0)
|
||||||
this->T_.boundaryField().types()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -243,8 +243,7 @@ Foam::tmp<Foam::volScalarField> Foam::hsRhoThermo<MixtureType>::Cp() const
|
|||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimEnergy/dimMass/dimTemperature,
|
dimEnergy/dimMass/dimTemperature
|
||||||
this->T_.boundaryField().types()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -32,7 +32,12 @@ Class
|
|||||||
Foam::viscosityModel
|
Foam::viscosityModel
|
||||||
|
|
||||||
Description
|
Description
|
||||||
An abstract base class for incompressible viscosityModels
|
An abstract base class for incompressible viscosityModels.
|
||||||
|
|
||||||
|
The strain rate is defined by:
|
||||||
|
|
||||||
|
mag(symm(grad(U)))
|
||||||
|
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
viscosityModel.C
|
viscosityModel.C
|
||||||
@ -131,10 +136,9 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
//- Destructor
|
||||||
|
virtual ~viscosityModel()
|
||||||
virtual ~viscosityModel()
|
{}
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
@ -145,7 +149,7 @@ public:
|
|||||||
return viscosityProperties_;
|
return viscosityProperties_;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return the strain rate mag(grad(U))
|
//- Return the strain rate
|
||||||
tmp<volScalarField> strainRate() const;
|
tmp<volScalarField> strainRate() const;
|
||||||
|
|
||||||
//- Return the laminar viscosity
|
//- Return the laminar viscosity
|
||||||
|
|||||||
@ -42,71 +42,6 @@ namespace compressible
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
bool turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::interfaceOwner
|
|
||||||
(
|
|
||||||
const polyMesh& nbrRegion,
|
|
||||||
const polyPatch& nbrPatch
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
const fvMesh& myRegion = patch().boundaryMesh().mesh();
|
|
||||||
|
|
||||||
if (nbrRegion.name() == myRegion.name())
|
|
||||||
{
|
|
||||||
return patch().index() < nbrPatch.index();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const regionProperties& props =
|
|
||||||
myRegion.objectRegistry::parent().lookupObject<regionProperties>
|
|
||||||
(
|
|
||||||
"regionProperties"
|
|
||||||
);
|
|
||||||
|
|
||||||
label myIndex = findIndex(props.fluidRegionNames(), myRegion.name());
|
|
||||||
if (myIndex == -1)
|
|
||||||
{
|
|
||||||
label i = findIndex(props.solidRegionNames(), myRegion.name());
|
|
||||||
|
|
||||||
if (i == -1)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"turbulentTemperatureCoupledBaffleMixedFvPatchScalarField"
|
|
||||||
"::interfaceOwner(const polyMesh&"
|
|
||||||
", const polyPatch&)const"
|
|
||||||
) << "Cannot find region " << myRegion.name()
|
|
||||||
<< " neither in fluids " << props.fluidRegionNames()
|
|
||||||
<< " nor in solids " << props.solidRegionNames()
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
myIndex = props.fluidRegionNames().size() + i;
|
|
||||||
}
|
|
||||||
label nbrIndex = findIndex
|
|
||||||
(
|
|
||||||
props.fluidRegionNames(),
|
|
||||||
nbrRegion.name()
|
|
||||||
);
|
|
||||||
if (nbrIndex == -1)
|
|
||||||
{
|
|
||||||
label i = findIndex(props.solidRegionNames(), nbrRegion.name());
|
|
||||||
|
|
||||||
if (i == -1)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"coupleManager::interfaceOwner"
|
|
||||||
"(const polyMesh&, const polyPatch&) const"
|
|
||||||
) << "Cannot find region " << nbrRegion.name()
|
|
||||||
<< " neither in fluids " << props.fluidRegionNames()
|
|
||||||
<< " nor in solids " << props.solidRegionNames()
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
nbrIndex = props.fluidRegionNames().size() + i;
|
|
||||||
}
|
|
||||||
return myIndex < nbrIndex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -124,7 +59,6 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
this->refValue() = 0.0;
|
this->refValue() = 0.0;
|
||||||
this->refGrad() = 0.0;
|
this->refGrad() = 0.0;
|
||||||
this->valueFraction() = 1.0;
|
this->valueFraction() = 1.0;
|
||||||
this->fixesValue_ = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -139,8 +73,7 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
:
|
:
|
||||||
mixedFvPatchScalarField(ptf, p, iF, mapper),
|
mixedFvPatchScalarField(ptf, p, iF, mapper),
|
||||||
neighbourFieldName_(ptf.neighbourFieldName_),
|
neighbourFieldName_(ptf.neighbourFieldName_),
|
||||||
KName_(ptf.KName_),
|
KName_(ptf.KName_)
|
||||||
fixesValue_(ptf.fixesValue_)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -183,7 +116,6 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
refValue() = scalarField("refValue", dict, p.size());
|
refValue() = scalarField("refValue", dict, p.size());
|
||||||
refGrad() = scalarField("refGradient", dict, p.size());
|
refGrad() = scalarField("refGradient", dict, p.size());
|
||||||
valueFraction() = scalarField("valueFraction", dict, p.size());
|
valueFraction() = scalarField("valueFraction", dict, p.size());
|
||||||
fixesValue_ = readBool(dict.lookup("fixesValue"));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -191,7 +123,6 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
refValue() = *this;
|
refValue() = *this;
|
||||||
refGrad() = 0.0;
|
refGrad() = 0.0;
|
||||||
valueFraction() = 1.0;
|
valueFraction() = 1.0;
|
||||||
fixesValue_ = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,8 +136,7 @@ turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
:
|
:
|
||||||
mixedFvPatchScalarField(wtcsf, iF),
|
mixedFvPatchScalarField(wtcsf, iF),
|
||||||
neighbourFieldName_(wtcsf.neighbourFieldName_),
|
neighbourFieldName_(wtcsf.neighbourFieldName_),
|
||||||
KName_(wtcsf.KName_),
|
KName_(wtcsf.KName_)
|
||||||
fixesValue_(wtcsf.fixesValue_)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -281,95 +211,80 @@ void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::updateCoeffs()
|
|||||||
|
|
||||||
// Force recalculation of mapping and schedule
|
// Force recalculation of mapping and schedule
|
||||||
const mapDistribute& distMap = mpp.map();
|
const mapDistribute& distMap = mpp.map();
|
||||||
(void)distMap.schedule();
|
|
||||||
|
|
||||||
tmp<scalarField> intFld = patchInternalField();
|
tmp<scalarField> intFld = patchInternalField();
|
||||||
|
|
||||||
if (interfaceOwner(nbrMesh, nbrPatch.patch()))
|
|
||||||
{
|
|
||||||
// Note: other side information could be cached - it only needs
|
|
||||||
// to be updated the first time round the iteration (i.e. when
|
|
||||||
// switching regions) but unfortunately we don't have this information.
|
|
||||||
|
|
||||||
|
// Calculate the temperature by harmonic averaging
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
// Calculate the temperature by harmonic averaging
|
const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField& nbrField =
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
refCast
|
||||||
|
<
|
||||||
const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField&
|
const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
||||||
nbrField =
|
>
|
||||||
refCast
|
(
|
||||||
<
|
nbrPatch.lookupPatchField<volScalarField, scalar>
|
||||||
const turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|
||||||
>
|
|
||||||
(
|
(
|
||||||
nbrPatch.lookupPatchField<volScalarField, scalar>
|
neighbourFieldName_
|
||||||
(
|
)
|
||||||
neighbourFieldName_
|
);
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Swap to obtain full local values of neighbour internal field
|
// Swap to obtain full local values of neighbour internal field
|
||||||
scalarField nbrIntFld = nbrField.patchInternalField();
|
scalarField nbrIntFld = nbrField.patchInternalField();
|
||||||
mapDistribute::distribute
|
mapDistribute::distribute
|
||||||
(
|
(
|
||||||
Pstream::defaultCommsType,
|
Pstream::defaultCommsType,
|
||||||
distMap.schedule(),
|
distMap.schedule(),
|
||||||
distMap.constructSize(),
|
distMap.constructSize(),
|
||||||
distMap.subMap(), // what to send
|
distMap.subMap(), // what to send
|
||||||
distMap.constructMap(), // what to receive
|
distMap.constructMap(), // what to receive
|
||||||
nbrIntFld
|
nbrIntFld
|
||||||
);
|
);
|
||||||
|
|
||||||
// Swap to obtain full local values of neighbour K*delta
|
// Swap to obtain full local values of neighbour K*delta
|
||||||
scalarField nbrKDelta = nbrField.K()*nbrPatch.deltaCoeffs();
|
scalarField nbrKDelta = nbrField.K()*nbrPatch.deltaCoeffs();
|
||||||
mapDistribute::distribute
|
mapDistribute::distribute
|
||||||
(
|
(
|
||||||
Pstream::defaultCommsType,
|
Pstream::defaultCommsType,
|
||||||
distMap.schedule(),
|
distMap.schedule(),
|
||||||
distMap.constructSize(),
|
distMap.constructSize(),
|
||||||
distMap.subMap(), // what to send
|
distMap.subMap(), // what to send
|
||||||
distMap.constructMap(), // what to receive
|
distMap.constructMap(), // what to receive
|
||||||
nbrKDelta
|
nbrKDelta
|
||||||
);
|
);
|
||||||
|
|
||||||
tmp<scalarField> myKDelta = K()*patch().deltaCoeffs();
|
tmp<scalarField> myKDelta = K()*patch().deltaCoeffs();
|
||||||
|
|
||||||
// Calculate common wall temperature. Reuse *this to store common value.
|
|
||||||
scalarField Twall
|
|
||||||
(
|
|
||||||
(myKDelta()*intFld() + nbrKDelta*nbrIntFld)
|
|
||||||
/ (myKDelta() + nbrKDelta)
|
|
||||||
);
|
|
||||||
// Assign to me
|
|
||||||
fvPatchScalarField::operator=(Twall);
|
|
||||||
// Distribute back and assign to neighbour
|
|
||||||
mapDistribute::distribute
|
|
||||||
(
|
|
||||||
Pstream::defaultCommsType,
|
|
||||||
distMap.schedule(),
|
|
||||||
nbrField.size(),
|
|
||||||
distMap.constructMap(), // reverse : what to send
|
|
||||||
distMap.subMap(),
|
|
||||||
Twall
|
|
||||||
);
|
|
||||||
const_cast<turbulentTemperatureCoupledBaffleMixedFvPatchScalarField&>
|
|
||||||
(
|
|
||||||
nbrField
|
|
||||||
).fvPatchScalarField::operator=(Twall);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Switch between fixed value (of harmonic avg) or gradient
|
// Both sides agree on
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
// - temperature : (myKDelta*fld + nbrKDelta*nbrFld)/(myKDelta+nbrKDelta)
|
||||||
|
// - gradient : (temperature-fld)*delta
|
||||||
|
// We've got a degree of freedom in how to implement this in a mixed bc.
|
||||||
|
// (what gradient, what fixedValue and mixing coefficient)
|
||||||
|
// Two reasonable choices:
|
||||||
|
// 1. specify above temperature on one side (preferentially the high side)
|
||||||
|
// and above gradient on the other. So this will switch between pure
|
||||||
|
// fixedvalue and pure fixedgradient
|
||||||
|
// 2. specify gradient and temperature such that the equations are the
|
||||||
|
// same on both sides. This leads to the choice of
|
||||||
|
// - refGradient = zero gradient
|
||||||
|
// - refValue = neighbour value
|
||||||
|
// - mixFraction = nbrKDelta / (nbrKDelta + myKDelta())
|
||||||
|
|
||||||
label nFixed = 0;
|
|
||||||
|
|
||||||
// Like snGrad but bypass switching on refValue/refGrad.
|
this->refValue() = nbrIntFld;
|
||||||
tmp<scalarField> normalGradient = (*this-intFld())*patch().deltaCoeffs();
|
|
||||||
|
this->refGrad() = 0.0;
|
||||||
|
|
||||||
|
this->valueFraction() = nbrKDelta / (nbrKDelta + myKDelta());
|
||||||
|
|
||||||
|
mixedFvPatchScalarField::updateCoeffs();
|
||||||
|
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
scalar Q = gSum(K()*patch().magSf()*normalGradient());
|
scalar Q = gSum(K()*patch().magSf()*snGrad());
|
||||||
|
|
||||||
Info<< patch().boundaryMesh().mesh().name() << ':'
|
Info<< patch().boundaryMesh().mesh().name() << ':'
|
||||||
<< patch().name() << ':'
|
<< patch().name() << ':'
|
||||||
@ -384,48 +299,6 @@ void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::updateCoeffs()
|
|||||||
<< " avg:" << gAverage(*this)
|
<< " avg:" << gAverage(*this)
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
forAll(*this, i)
|
|
||||||
{
|
|
||||||
// if outgoing flux use fixed value.
|
|
||||||
if (normalGradient()[i] < 0.0)
|
|
||||||
{
|
|
||||||
this->refValue()[i] = operator[](i);
|
|
||||||
this->refGrad()[i] = 0.0; // not used by me
|
|
||||||
this->valueFraction()[i] = 1.0;
|
|
||||||
nFixed++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Fixed gradient. Make sure to have valid refValue (even though
|
|
||||||
// I am not using it - other boundary conditions might)
|
|
||||||
this->refValue()[i] = operator[](i);
|
|
||||||
this->refGrad()[i] = normalGradient()[i];
|
|
||||||
this->valueFraction()[i] = 0.0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
reduce(nFixed, sumOp<label>());
|
|
||||||
|
|
||||||
fixesValue_ = (nFixed > 0);
|
|
||||||
|
|
||||||
if (debug)
|
|
||||||
{
|
|
||||||
label nTotSize = returnReduce(this->size(), sumOp<label>());
|
|
||||||
|
|
||||||
Info<< patch().boundaryMesh().mesh().name() << ':'
|
|
||||||
<< patch().name() << ':'
|
|
||||||
<< this->dimensionedInternalField().name() << " -> "
|
|
||||||
<< nbrMesh.name() << ':'
|
|
||||||
<< nbrPatch.name() << ':'
|
|
||||||
<< this->dimensionedInternalField().name() << " :"
|
|
||||||
<< " patch:" << patch().name()
|
|
||||||
<< " out of:" << nTotSize
|
|
||||||
<< " fixedBC:" << nFixed
|
|
||||||
<< " gradient:" << nTotSize-nFixed << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
mixedFvPatchScalarField::updateCoeffs();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -438,7 +311,6 @@ void turbulentTemperatureCoupledBaffleMixedFvPatchScalarField::write
|
|||||||
os.writeKeyword("neighbourFieldName")<< neighbourFieldName_
|
os.writeKeyword("neighbourFieldName")<< neighbourFieldName_
|
||||||
<< token::END_STATEMENT << nl;
|
<< token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl;
|
os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("fixesValue") << fixesValue_ << token::END_STATEMENT << nl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -92,14 +92,6 @@ class turbulentTemperatureCoupledBaffleMixedFvPatchScalarField
|
|||||||
//- Name of thermal conductivity field
|
//- Name of thermal conductivity field
|
||||||
const word KName_;
|
const word KName_;
|
||||||
|
|
||||||
bool fixesValue_;
|
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- Am I or neighbour owner of interface
|
|
||||||
bool interfaceOwner(const polyMesh&, const polyPatch&) const;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -176,14 +168,6 @@ public:
|
|||||||
//- Get corresponding K field
|
//- Get corresponding K field
|
||||||
tmp<scalarField> K() const;
|
tmp<scalarField> K() const;
|
||||||
|
|
||||||
//- Return true if this patch field fixes a value.
|
|
||||||
// Needed to check if a level has to be specified while solving
|
|
||||||
// Poissons equations.
|
|
||||||
virtual bool fixesValue() const
|
|
||||||
{
|
|
||||||
return fixesValue_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
//- Update the coefficients associated with the patch field
|
||||||
virtual void updateCoeffs();
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|||||||
21
tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allclean
Executable file
21
tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allclean
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Source tutorial clean functions
|
||||||
|
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
|
||||||
|
|
||||||
|
cleanCase
|
||||||
|
rm -rf VTK
|
||||||
|
rm -rf constant/cellToRegion constant/polyMesh/sets
|
||||||
|
rm -rf 0/bottomAir
|
||||||
|
rm -rf 0/topAir
|
||||||
|
rm -rf 0/heater
|
||||||
|
rm -rf 0/leftSolid
|
||||||
|
rm -rf 0/rightSolid
|
||||||
|
rm -f 0/cellToRegion
|
||||||
|
rm -rf constant/bottomAir/polyMesh
|
||||||
|
rm -rf constant/topAir/polyMesh
|
||||||
|
rm -rf constant/heater/polyMesh
|
||||||
|
rm -rf constant/leftSolid/polyMesh
|
||||||
|
rm -rf constant/rightSolid/polyMesh
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
@ -11,7 +11,7 @@ runApplication setSet -batch makeCellSets.setSet
|
|||||||
rm -f constant/polyMesh/sets/*_old
|
rm -f constant/polyMesh/sets/*_old
|
||||||
|
|
||||||
runApplication setsToZones -noFlipMap
|
runApplication setsToZones -noFlipMap
|
||||||
runApplication splitMeshRegions -cellZones
|
runApplication splitMeshRegions -cellZones -overwrite
|
||||||
|
|
||||||
# remove fluid fields from solid regions (important for post-processing)
|
# remove fluid fields from solid regions (important for post-processing)
|
||||||
for i in heater leftSolid rightSolid
|
for i in heater leftSolid rightSolid
|
||||||
|
|||||||
@ -11,6 +11,7 @@ rm -rf 0/topAir
|
|||||||
rm -rf 0/heater
|
rm -rf 0/heater
|
||||||
rm -rf 0/leftSolid
|
rm -rf 0/leftSolid
|
||||||
rm -rf 0/rightSolid
|
rm -rf 0/rightSolid
|
||||||
|
rm -f 0/cellToRegion
|
||||||
rm -rf constant/bottomAir/polyMesh
|
rm -rf constant/bottomAir/polyMesh
|
||||||
rm -rf constant/topAir/polyMesh
|
rm -rf constant/topAir/polyMesh
|
||||||
rm -rf constant/heater/polyMesh
|
rm -rf constant/heater/polyMesh
|
||||||
|
|||||||
1
wmake/rules/General/mplibSYSTEMOPENMPI
Normal file
1
wmake/rules/General/mplibSYSTEMOPENMPI
Normal file
@ -0,0 +1 @@
|
|||||||
|
PFLAGS = -DOMPI_SKIP_MPICXX
|
||||||
1
wmake/rules/SiCortex64Gcc/mplibSYSTEMOPENMPI
Symbolic link
1
wmake/rules/SiCortex64Gcc/mplibSYSTEMOPENMPI
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../General/mplibSYSTEMOPENMPI
|
||||||
1
wmake/rules/SunOS64Gcc/mplibSYSTEMOPENMPI
Symbolic link
1
wmake/rules/SunOS64Gcc/mplibSYSTEMOPENMPI
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../General/mplibSYSTEMOPENMPI
|
||||||
BIN
wmake/rules/linux64Gcc/dirToString
Executable file
BIN
wmake/rules/linux64Gcc/dirToString
Executable file
Binary file not shown.
1
wmake/rules/linux64Gcc/mplibSYSTEMOPENMPI
Symbolic link
1
wmake/rules/linux64Gcc/mplibSYSTEMOPENMPI
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../General/mplibSYSTEMOPENMPI
|
||||||
BIN
wmake/rules/linux64Gcc/wmkdep
Executable file
BIN
wmake/rules/linux64Gcc/wmkdep
Executable file
Binary file not shown.
BIN
wmake/rules/linux64Gcc42/dirToString
Executable file
BIN
wmake/rules/linux64Gcc42/dirToString
Executable file
Binary file not shown.
1
wmake/rules/linux64Gcc42/mplibSYSTEMOPENMPI
Symbolic link
1
wmake/rules/linux64Gcc42/mplibSYSTEMOPENMPI
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../General/mplibSYSTEMOPENMPI
|
||||||
BIN
wmake/rules/linux64Gcc42/wmkdep
Executable file
BIN
wmake/rules/linux64Gcc42/wmkdep
Executable file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user