Merge branch 'master' of /home/dm4/OpenFOAM/OpenFOAM-dev

This commit is contained in:
andy
2012-12-05 17:43:19 +00:00
85 changed files with 1185 additions and 712 deletions

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -40,7 +40,7 @@ defineTypeNameAndDebug(Foam::IOobject, 0);
// ----- ------
// "foo" ("", "", "foo")
// "foo/bar" ("foo", "", "bar")
// "/XXX" ERROR - no absolute path
// "/XXX/bar" ("/XXX", "", "bar")
// "foo/bar/" ERROR - no name
// "foo/xxx/bar" ("foo", "xxx", "bar")
// "foo/xxx/yyy/bar" ("foo", "xxx/yyy", "bar")
@ -64,14 +64,6 @@ bool Foam::IOobject::IOobject::fileNameComponents
return false;
}
if (path.isAbsolute())
{
// called with absolute path
WarningIn("IOobject::fileNameComponents(const fileName&, ...)")
<< "called with absolute path: " << path << "\n";
return false;
}
string::size_type first = path.find('/');
if (first == string::npos)
@ -81,6 +73,15 @@ bool Foam::IOobject::IOobject::fileNameComponents
// check afterwards
name.string::operator=(path);
}
else if (first == 0)
{
// Leading '/'. Absolute fileName
string::size_type last = path.rfind('/');
instance = path.substr(0, last);
// check afterwards
name.string::operator=(path.substr(last+1));
}
else
{
instance = path.substr(0, first);
@ -246,7 +247,14 @@ const Foam::fileName& Foam::IOobject::rootPath() const
Foam::fileName Foam::IOobject::path() const
{
return rootPath()/caseName()/instance()/db_.dbDir()/local();
if (instance().isAbsolute())
{
return instance();
}
else
{
return rootPath()/caseName()/instance()/db_.dbDir()/local();
}
}
@ -256,61 +264,80 @@ Foam::fileName Foam::IOobject::path
const fileName& local
) const
{
//Note: can only be called with relative instance since is word type
return rootPath()/caseName()/instance/db_.dbDir()/local;
}
Foam::fileName Foam::IOobject::filePath() const
{
fileName path = this->path();
fileName objectPath = path/name();
if (isFile(objectPath))
if (instance().isAbsolute())
{
return objectPath;
fileName objectPath = instance()/name();
if (isFile(objectPath))
{
return objectPath;
}
else
{
return fileName::null;
}
}
else
{
if
(
time().processorCase()
&& (
instance() == time().system()
|| instance() == time().constant()
)
)
{
fileName parentObjectPath =
rootPath()/caseName()
/".."/instance()/db_.dbDir()/local()/name();
fileName path = this->path();
fileName objectPath = path/name();
if (isFile(parentObjectPath))
{
return parentObjectPath;
}
if (isFile(objectPath))
{
return objectPath;
}
if (!isDir(path))
else
{
word newInstancePath = time().findInstancePath(instant(instance()));
if (newInstancePath.size())
if
(
time().processorCase()
&& (
instance() == time().system()
|| instance() == time().constant()
)
)
{
fileName fName
(
fileName parentObjectPath =
rootPath()/caseName()
/newInstancePath/db_.dbDir()/local()/name()
/".."/instance()/db_.dbDir()/local()/name();
if (isFile(parentObjectPath))
{
return parentObjectPath;
}
}
if (!isDir(path))
{
word newInstancePath = time().findInstancePath
(
instant(instance())
);
if (isFile(fName))
if (newInstancePath.size())
{
return fName;
fileName fName
(
rootPath()/caseName()
/newInstancePath/db_.dbDir()/local()/name()
);
if (isFile(fName))
{
return fName;
}
}
}
}
}
return fileName::null;
return fileName::null;
}
}

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -46,7 +46,7 @@ Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
(
const word& outputFilterName,
const objectRegistry& obr,
const fileName& dictName,
const word& dictName,
const IOobject::readOption rOpt,
const bool readFromFiles
)
@ -66,6 +66,30 @@ Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
{}
template<class OutputFilter>
Foam::IOOutputFilter<OutputFilter>::IOOutputFilter
(
const word& outputFilterName,
const objectRegistry& obr,
const fileName& dictName,
const IOobject::readOption rOpt,
const bool readFromFiles
)
:
IOdictionary
(
IOobject
(
dictName,
obr,
rOpt,
IOobject::NO_WRITE
)
),
OutputFilter(outputFilterName, obr, *this, readFromFiles)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
template<class OutputFilter>

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -89,7 +89,19 @@ public:
(
const word& outputFilterName,
const objectRegistry&,
const fileName& dictName = OutputFilter::typeName() + "Dict",
const word& dictName = OutputFilter::typeName() + "Dict",
const IOobject::readOption rOpt = IOobject::MUST_READ_IF_MODIFIED,
const bool loadFromFile = false
);
//- Construct for given objectRegistry and dictionary
// Dictionary read from full path.
// Allow the possibility to load fields from files
IOOutputFilter
(
const word& outputFilterName,
const objectRegistry&,
const fileName& dictName,
const IOobject::readOption rOpt = IOobject::MUST_READ_IF_MODIFIED,
const bool loadFromFile = false
);

View File

@ -0,0 +1,10 @@
//
// addDictOption.H
// ~~~~~~~~~~~~~~~~~
Foam::argList::addOption
(
"dict",
"file",
"read control dictionary from specified location"
);

View File

@ -0,0 +1,33 @@
//
// setConstantMeshDictionaryIO.H
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fileName dictPath = "";
if (args.optionFound("dict"))
{
dictPath = args["dict"];
if (isDir(dictPath))
{
dictPath = dictPath / dictName;
}
}
IOobject dictIO
(
dictName,
runTime.constant(),
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
);
if (dictPath.size())
{
dictIO = IOobject
(
dictPath,
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
);
}

View File

@ -0,0 +1,33 @@
//
// setSystemMeshDictionaryIO.H
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fileName dictPath = "";
if (args.optionFound("dict"))
{
dictPath = args["dict"];
if (isDir(dictPath))
{
dictPath = dictPath / dictName;
}
}
IOobject dictIO
(
dictName,
runTime.system(),
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
);
if (dictPath.size())
{
dictIO = IOobject
(
dictPath,
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
);
}

View File

@ -0,0 +1,33 @@
//
// setSystemRunTimeDictionaryIO.H
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fileName dictPath = "";
if (args.optionFound("dict"))
{
dictPath = args["dict"];
if (isDir(dictPath))
{
dictPath = dictPath / dictName;
}
}
IOobject dictIO
(
dictName,
runTime.system(),
runTime,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
);
if (dictPath.size())
{
dictIO = IOobject
(
dictPath,
runTime,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
);
}

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -21,23 +21,12 @@ License
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Description
snGrad scheme with limited non-orthogonal correction.
The limiter is controlled by a coefficient with a value between 0 and 1
which when 0 switches the correction off and the scheme behaves as
uncorrectedSnGrad, when set to 1 the full correction is applied and the
scheme behaves as correctedSnGrad and when set to 0.5 the limiter is
calculated such that the non-orthogonal contribution does not exceed the
orthogonal part.
\*---------------------------------------------------------------------------*/
#include "fv.H"
#include "limitedSnGrad.H"
#include "volFields.H"
#include "surfaceFields.H"
#include "correctedSnGrad.H"
#include "localMax.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -68,7 +57,7 @@ limitedSnGrad<Type>::correction
{
const GeometricField<Type, fvsPatchField, surfaceMesh> corr
(
correctedSnGrad<Type>(this->mesh()).correction(vf)
correctedScheme_().correction(vf)
);
const surfaceScalarField limiter
@ -76,7 +65,7 @@ limitedSnGrad<Type>::correction
min
(
limitCoeff_
*mag(snGradScheme<Type>::snGrad(vf, deltaCoeffs(vf), "orthSnGrad"))
*mag(snGradScheme<Type>::snGrad(vf, deltaCoeffs(vf), "SndGrad"))
/(
(1 - limitCoeff_)*mag(corr)
+ dimensionedScalar("small", corr.dimensions(), SMALL)

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -25,14 +25,20 @@ Class
Foam::fv::limitedSnGrad
Description
Central-difference snGrad scheme with limited non-orthogonal correction.
Run-time selected snGrad scheme with limited non-orthogonal correction.
The limiter is controlled by a coefficient with a value between 0 and 1
which when 0 switches the correction off and the scheme behaves as
uncorrectedSnGrad, when set to 1 the full correction is applied and the
scheme behaves as correctedSnGrad and when set to 0.5 the limiter is
calculated such that the non-orthogonal contribution does not exceed the
orthogonal part.
uncorrectedSnGrad, when set to 1 the full correction of the selected scheme
is used and when set to 0.5 the limiter is calculated such that the
non-orthogonal contribution does not exceed the orthogonal part.
Format:
limited <corrected scheme> <coefficient>;
or
limited <coefficient>; // Backward compatibility
SourceFiles
limitedSnGrad.C
@ -42,7 +48,7 @@ SourceFiles
#ifndef limitedSnGrad_H
#define limitedSnGrad_H
#include "snGradScheme.H"
#include "correctedSnGrad.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -65,6 +71,8 @@ class limitedSnGrad
{
// Private data
tmp<snGradScheme<Type> > correctedScheme_;
scalar limitCoeff_;
@ -73,6 +81,34 @@ class limitedSnGrad
//- Disallow default bitwise assignment
void operator=(const limitedSnGrad&);
//- Lookup function for the corrected to support backward compatibility
// of dictionary specification
tmp<snGradScheme<Type> > lookupCorrectedScheme(Istream& schemeData)
{
token nextToken(schemeData);
if (nextToken.isNumber())
{
limitCoeff_ = nextToken.number();
return tmp<snGradScheme<Type> >
(
new correctedSnGrad<Type>(this->mesh())
);
}
else
{
schemeData.putBack(nextToken);
tmp<snGradScheme<Type> > tcorrectedScheme
(
fv::snGradScheme<Type>::New(this->mesh(), schemeData)
);
schemeData >> limitCoeff_;
return tcorrectedScheme;
}
}
public:
@ -85,22 +121,24 @@ public:
//- Construct from mesh
limitedSnGrad(const fvMesh& mesh)
:
snGradScheme<Type>(mesh)
snGradScheme<Type>(mesh),
correctedScheme_(new correctedSnGrad<Type>(this->mesh())),
limitCoeff_(1)
{}
//- Construct from mesh and data stream
limitedSnGrad(const fvMesh& mesh, Istream& is)
limitedSnGrad(const fvMesh& mesh, Istream& schemeData)
:
snGradScheme<Type>(mesh),
limitCoeff_(readScalar(is))
correctedScheme_(lookupCorrectedScheme(schemeData))
{
if (limitCoeff_ < 0 || limitCoeff_ > 1)
{
FatalIOErrorIn
(
"limitedSnGrad(const fvMesh& mesh, Istream& is) : ",
is
"limitedSnGrad(const fvMesh& mesh, Istream& schemeData) : ",
schemeData
) << "limitCoeff is specified as " << limitCoeff_
<< " but should be >= 0 && <= 1"
<< exit(FatalIOError);

View File

@ -2372,11 +2372,13 @@ void Foam::autoLayerDriver::getLayerCellsFaces
Foam::autoLayerDriver::autoLayerDriver
(
meshRefinement& meshRefiner,
const labelList& globalToPatch
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch
)
:
meshRefiner_(meshRefiner),
globalToPatch_(globalToPatch)
globalToMasterPatch_(globalToMasterPatch),
globalToSlavePatch_(globalToSlavePatch)
{}
@ -2435,7 +2437,12 @@ void Foam::autoLayerDriver::addLayers
// Create baffles (pairs of faces that share the same points)
// Baffles stored as owner and neighbour face that have been created.
List<labelPair> baffles;
meshRefiner_.createZoneBaffles(globalToPatch_, baffles);
meshRefiner_.createZoneBaffles
(
globalToMasterPatch_,
globalToSlavePatch_,
baffles
);
if (debug&meshRefinement::MESH)
{

View File

@ -99,7 +99,10 @@ class autoLayerDriver
meshRefinement& meshRefiner_;
//- From surface region to patch
const labelList globalToPatch_;
const labelList globalToMasterPatch_;
//- From surface region to patch
const labelList globalToSlavePatch_;
@ -518,7 +521,8 @@ public:
autoLayerDriver
(
meshRefinement& meshRefiner,
const labelList& globalToPatch
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch
);

View File

@ -1135,6 +1135,12 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo
<< " " << medialRatio.name()
<< " : ratio of medial distance to wall distance" << nl
<< endl;
meshRefiner_.mesh().setInstance(meshRefiner_.timeName());
meshRefiner_.write
(
debug,
mesh.time().path()/meshRefiner_.timeName()
);
dispVec.write();
medialDist.write();
medialVec.write();
@ -1409,6 +1415,94 @@ void Foam::autoLayerDriver::shrinkMeshMedialDistance
*dispVec[pointI];
}
//XXXXX
// // Smear displacement away from fixed values (medialRatio=0 or 1)
// {
// const edgeList& edges = mesh.edges();
// scalarField edgeWeight(edges.size(), 0.0);
// forAll(edges, edgeI)
// {
// if (isMasterEdge[edgeI])
// {
// scalar eMag = edges[edgeI].mag(mesh.points());
// if (eMag > VSMALL)
// {
// edgeWeight[edgeI] = 1.0/eMag;
// }
// else
// {
// edgeWeight[edgeI] = GREAT;
// }
// }
// }
// scalarField invSumWeight(mesh.nPoints());
// sumWeights(isMasterEdge, edgeWeight, invSumWeight);
//
//
// // Get smoothly varying patch field.
// Info<< "shrinkMeshDistance : Smoothing displacement ..." << endl;
//
// const scalar lambda = 0.33;
// const scalar mu = -0.34;
//
// pointField average(mesh.nPoints());
// for (label iter = 0; iter < 90; iter++)
// {
// // Calculate average of field
// averageNeighbours
// (
// mesh,
// edgeWeight,
// invSumWeight,
// displacement,
// average
// );
//
// forAll(displacement, i)
// {
// if (medialRatio[i] > SMALL && medialRatio[i] < 1-SMALL)
// {
// displacement[i] =
// (1-lambda)*displacement[i]
// +lambda*average[i];
// }
// }
//
//
// // Calculate average of field
// averageNeighbours
// (
// mesh,
// edgeWeight,
// invSumWeight,
// displacement,
// average
// );
//
// forAll(displacement, i)
// {
// if (medialRatio[i] > SMALL && medialRatio[i] < 1-SMALL)
// {
// displacement[i] = (1-mu)*displacement[i]+mu*average[i];
// }
// }
//
//
// // Do residual calculation every so often.
// if ((iter % 10) == 0)
// {
// Info<< " Iteration " << iter << " residual "
// << gSum(mag(displacement-average))
// /returnReduce(average.size(), sumOp<label>())
// << endl;
// }
// }
// }
//XXXXX
if (debug&meshRefinement::MESH || debug&meshRefinement::LAYERINFO)
{
const_cast<Time&>(mesh.time())++;

View File

@ -57,13 +57,15 @@ Foam::autoRefineDriver::autoRefineDriver
meshRefinement& meshRefiner,
decompositionMethod& decomposer,
fvMeshDistribute& distributor,
const labelList& globalToPatch
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch
)
:
meshRefiner_(meshRefiner),
decomposer_(decomposer),
distributor_(distributor),
globalToPatch_(globalToPatch)
globalToMasterPatch_(globalToMasterPatch),
globalToSlavePatch_(globalToSlavePatch)
{}
@ -313,7 +315,8 @@ void Foam::autoRefineDriver::removeInsideCells
meshRefiner_.splitMesh
(
nBufferLayers, // nBufferLayers
globalToPatch_,
globalToMasterPatch_,
globalToSlavePatch_,
refineParams.keepPoints()[0]
);
@ -521,7 +524,8 @@ void Foam::autoRefineDriver::baffleAndSplitMesh
!handleSnapProblems, // merge free standing baffles?
motionDict,
const_cast<Time&>(mesh.time()),
globalToPatch_,
globalToMasterPatch_,
globalToSlavePatch_,
refineParams.keepPoints()[0]
);
}
@ -606,7 +610,8 @@ void Foam::autoRefineDriver::splitAndMergeBaffles
//true, // merge free standing baffles?
motionDict,
const_cast<Time&>(mesh.time()),
globalToPatch_,
globalToMasterPatch_,
globalToSlavePatch_,
refineParams.keepPoints()[0]
);

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -65,7 +65,10 @@ class autoRefineDriver
fvMeshDistribute& distributor_;
//- From surface region to patch
const labelList globalToPatch_;
const labelList globalToMasterPatch_;
//- From surface region to patch
const labelList globalToSlavePatch_;
// Private Member Functions
@ -146,7 +149,8 @@ public:
meshRefinement& meshRefiner,
decompositionMethod& decomposer,
fvMeshDistribute& distributor,
const labelList& globalToPatch
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch
);

View File

@ -573,11 +573,13 @@ bool Foam::autoSnapDriver::outwardsDisplacement
Foam::autoSnapDriver::autoSnapDriver
(
meshRefinement& meshRefiner,
const labelList& globalToPatch
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch
)
:
meshRefiner_(meshRefiner),
globalToPatch_(globalToPatch)
globalToMasterPatch_(globalToMasterPatch),
globalToSlavePatch_(globalToSlavePatch)
{}
@ -1191,7 +1193,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::autoSnapDriver::repatchToSurface
if (hitSurface[i] != -1 && !isZonedFace.get(faceI))
{
closestPatch[i] = globalToPatch_
closestPatch[i] = globalToMasterPatch_
[
surfaces.globalRegion
(
@ -1265,7 +1267,12 @@ void Foam::autoSnapDriver::doSnap
// Create baffles (pairs of faces that share the same points)
// Baffles stored as owner and neighbour face that have been created.
List<labelPair> baffles;
meshRefiner_.createZoneBaffles(globalToPatch_, baffles);
meshRefiner_.createZoneBaffles
(
globalToMasterPatch_,
globalToSlavePatch_,
baffles
);
// Selectively 'forget' about the baffles, i.e. not check across them

View File

@ -59,8 +59,11 @@ class autoSnapDriver
//- Mesh+surface
meshRefinement& meshRefiner_;
//- From surface region to patch
const labelList globalToPatch_;
//- From global surface region to master side patch
const labelList globalToMasterPatch_;
//- From global surface region to slave side patch
const labelList globalToSlavePatch_;
// Private Member Functions
@ -390,7 +393,8 @@ public:
autoSnapDriver
(
meshRefinement& meshRefiner,
const labelList& globalToPatch
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch
);

View File

@ -573,7 +573,7 @@ void Foam::autoSnapDriver::calcNearestFacePointProperties
pFc[i] = pp.faceCentres()[faceI];
//label meshFaceI = pp.addressing()[faceI];
//pFid[i] = mesh.boundaryMesh().whichPatch(meshFaceI);
pFid[i] = globalToPatch_[faceSurfaceGlobalRegion[faceI]];
pFid[i] = globalToMasterPatch_[faceSurfaceGlobalRegion[faceI]];
}
}

View File

@ -55,6 +55,7 @@ License
#include "searchableSurfaces.H"
#include "treeBoundBox.H"
#include "zeroGradientFvPatchFields.H"
#include "fvMeshTools.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -1700,7 +1701,7 @@ Foam::label Foam::meshRefinement::addPatch
oldToNew[addedPatchI] = insertPatchI;
// Shuffle into place
polyPatches.reorder(oldToNew);
polyPatches.reorder(oldToNew, true);
fvPatches.reorder(oldToNew);
reorderPatchFields<volScalarField>(mesh, oldToNew);
@ -1736,6 +1737,28 @@ Foam::label Foam::meshRefinement::addMeshedPatch
// Add patch
label patchI = addPatch(mesh_, name, patchInfo);
// dictionary patchDict(patchInfo);
// patchDict.set("nFaces", 0);
// patchDict.set("startFace", 0);
// autoPtr<polyPatch> ppPtr
// (
// polyPatch::New
// (
// name,
// patchDict,
// 0,
// mesh_.boundaryMesh()
// )
// );
// label patchI = fvMeshTools::addPatch
// (
// mesh_,
// ppPtr(),
// dictionary(), // optional field values
// calculatedFvPatchField<scalar>::typeName,
// true
// );
// Store
label sz = meshedPatches_.size();
meshedPatches_.setSize(sz+1);

View File

@ -330,10 +330,11 @@ private:
// Baffle handling
//- Get faces to repatch. Returns map from face to patch.
Map<label> getZoneBafflePatches
Map<labelPair> getZoneBafflePatches
(
const bool allowBoundary,
const labelList& globalToPatch
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch
) const;
//- Geometric test on see whether face needs to be baffled:
@ -349,7 +350,7 @@ private:
//- Determine patches for baffles
void getBafflePatches
(
const labelList& globalToPatch,
const labelList& globalToMasterPatch,
const labelList& neiLevel,
const pointField& neiCc,
labelList& ownPatch,
@ -426,7 +427,7 @@ private:
const dictionary& motionDict,
const bool removeEdgeConnectedCells,
const scalarField& perpendicularAngle,
const labelList& globalToPatch
const labelList& globalToMasterPatch
) const;
@ -707,7 +708,8 @@ public:
const bool mergeFreeStanding,
const dictionary& motionDict,
Time& runTime,
const labelList& globalToPatch,
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch,
const point& keepPoint
);
@ -716,7 +718,8 @@ public:
autoPtr<mapPolyMesh> splitMesh
(
const label nBufferLayers,
const labelList& globalToPatch,
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch,
const point& keepPoint
);
@ -741,7 +744,8 @@ public:
// baffles.
autoPtr<mapPolyMesh> createZoneBaffles
(
const labelList& globalToPatch,
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch,
List<labelPair>&
);

View File

@ -259,7 +259,7 @@ bool Foam::meshRefinement::validBaffleTopology
// Determine patches for baffles on all intersected unnamed faces
void Foam::meshRefinement::getBafflePatches
(
const labelList& globalToPatch,
const labelList& globalToMasterPatch,
const labelList& neiLevel,
const pointField& neiCc,
@ -376,11 +376,11 @@ void Foam::meshRefinement::getBafflePatches
}
// Pick up the patches
ownPatch[faceI] = globalToPatch
ownPatch[faceI] = globalToMasterPatch
[
surfaces_.globalRegion(surface1[i], region1[i])
];
neiPatch[faceI] = globalToPatch
neiPatch[faceI] = globalToMasterPatch
[
surfaces_.globalRegion(surface2[i], region2[i])
];
@ -406,14 +406,14 @@ void Foam::meshRefinement::getBafflePatches
}
// Get faces to repatch. Returns map from face to patch.
Foam::Map<Foam::label> Foam::meshRefinement::getZoneBafflePatches
Foam::Map<Foam::labelPair> Foam::meshRefinement::getZoneBafflePatches
(
const bool allowBoundary,
const labelList& globalToPatch
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch
) const
{
Map<label> bafflePatch(mesh_.nFaces()/1000);
Map<labelPair> bafflePatch(mesh_.nFaces()/1000);
const wordList& faceZoneNames = surfaces_.faceZoneNames();
const faceZoneMesh& fZones = mesh_.faceZones();
@ -427,40 +427,39 @@ Foam::Map<Foam::label> Foam::meshRefinement::getZoneBafflePatches
const faceZone& fZone = fZones[zoneI];
//// Get patch allocated for zone
//label patchI = surfaceToCyclicPatch_[surfI];
// Get patch of (first region) of surface
label patchI = globalToPatch[surfaces_.globalRegion(surfI, 0)];
// Get patch allocated for zone
label globalRegionI = surfaces_.globalRegion(surfI, 0);
labelPair zPatches
(
globalToMasterPatch[globalRegionI],
globalToSlavePatch[globalRegionI]
);
Info<< "For surface "
<< surfaces_.names()[surfI]
<< " found faceZone " << fZone.name()
<< " and patch " << mesh_.boundaryMesh()[patchI].name()
Info<< "For zone " << fZone.name() << " found patches "
<< mesh_.boundaryMesh()[zPatches[0]].name() << " and "
<< mesh_.boundaryMesh()[zPatches[1]].name()
<< endl;
forAll(fZone, i)
{
label faceI = fZone[i];
if (allowBoundary || mesh_.isInternalFace(faceI))
{
if (!bafflePatch.insert(faceI, patchI))
labelPair patches = zPatches;
if (fZone.flipMap()[i])
{
label oldPatchI = bafflePatch[faceI];
patches = patches.reversePair();
}
if (oldPatchI != patchI)
{
FatalErrorIn("getZoneBafflePatches(const bool)")
<< "Face " << faceI
<< " fc:" << mesh_.faceCentres()[faceI]
<< " in zone " << fZone.name()
<< " is in patch "
<< mesh_.boundaryMesh()[oldPatchI].name()
<< " and in patch "
<< mesh_.boundaryMesh()[patchI].name()
<< abort(FatalError);
}
if (!bafflePatch.insert(faceI, patches))
{
FatalErrorIn("getZoneBafflePatches(..)")
<< "Face " << faceI
<< " fc:" << mesh_.faceCentres()[faceI]
<< " in zone " << fZone.name()
<< " is in multiple zones!"
<< abort(FatalError);
}
}
}
@ -698,7 +697,8 @@ Foam::List<Foam::labelPair> Foam::meshRefinement::getDuplicateFaces
Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::createZoneBaffles
(
const labelList& globalToPatch,
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch,
List<labelPair>& baffles
)
{
@ -714,20 +714,30 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::createZoneBaffles
// Get faces (internal only) to be baffled. Map from face to patch
// label.
Map<label> faceToPatch(getZoneBafflePatches(false, globalToPatch));
Map<labelPair> faceToPatch
(
getZoneBafflePatches
(
false,
globalToMasterPatch,
globalToSlavePatch
)
);
label nZoneFaces = returnReduce(faceToPatch.size(), sumOp<label>());
if (nZoneFaces > 0)
{
// Convert into labelLists
labelList ownPatch(mesh_.nFaces(), -1);
forAllConstIter(Map<label>, faceToPatch, iter)
labelList neiPatch(mesh_.nFaces(), -1);
forAllConstIter(Map<labelPair>, faceToPatch, iter)
{
ownPatch[iter.key()] = iter();
ownPatch[iter.key()] = iter().first();
neiPatch[iter.key()] = iter().second();
}
// Create baffles. both sides same patch.
map = createBaffles(ownPatch, ownPatch);
map = createBaffles(ownPatch, neiPatch);
// Get pairs of faces created.
// Just loop over faceMap and store baffle if we encounter a slave
@ -744,7 +754,10 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::createZoneBaffles
label oldFaceI = faceMap[faceI];
// Does face originate from face-to-patch
Map<label>::const_iterator iter = faceToPatch.find(oldFaceI);
Map<labelPair>::const_iterator iter = faceToPatch.find
(
oldFaceI
);
if (iter != faceToPatch.end())
{
@ -1344,7 +1357,8 @@ void Foam::meshRefinement::findCellZoneGeometric
// Sync
syncTools::syncFaceList(mesh_, namedSurfaceIndex, maxEqOp<label>());
}
//XXXXXXXXX
void Foam::meshRefinement::findCellZoneInsideWalk
(
const labelList& locationSurfaces, // indices of surfaces with inside point
@ -1446,7 +1460,6 @@ void Foam::meshRefinement::findCellZoneInsideWalk
}
}
}
//XXXXXXXXX
bool Foam::meshRefinement::calcRegionToZone
@ -1827,7 +1840,8 @@ void Foam::meshRefinement::baffleAndSplitMesh
const bool mergeFreeStanding,
const dictionary& motionDict,
Time& runTime,
const labelList& globalToPatch,
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch,
const point& keepPoint
)
{
@ -1849,7 +1863,7 @@ void Foam::meshRefinement::baffleAndSplitMesh
labelList ownPatch, neiPatch;
getBafflePatches
(
globalToPatch,
globalToMasterPatch,
neiLevel,
neiCc,
@ -1899,7 +1913,7 @@ void Foam::meshRefinement::baffleAndSplitMesh
motionDict,
removeEdgeConnectedCells,
perpendicularAngle,
globalToPatch
globalToMasterPatch
)
//markFacesOnProblemCellsGeometric(motionDict)
);
@ -1917,7 +1931,7 @@ void Foam::meshRefinement::baffleAndSplitMesh
motionDict,
removeEdgeConnectedCells,
perpendicularAngle,
globalToPatch
globalToMasterPatch
)
);
forAll(facePatchTopo, faceI)
@ -2051,7 +2065,8 @@ void Foam::meshRefinement::baffleAndSplitMesh
Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMesh
(
const label nBufferLayers,
const labelList& globalToPatch,
const labelList& globalToMasterPatch,
const labelList& globalToSlavePatch,
const point& keepPoint
)
{
@ -2066,7 +2081,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMesh
labelList ownPatch, neiPatch;
getBafflePatches
(
globalToPatch,
globalToMasterPatch,
neiLevel,
neiCc,
@ -2129,9 +2144,9 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMesh
// Patch for exposed faces for lack of anything sensible.
label defaultPatch = 0;
if (globalToPatch.size())
if (globalToMasterPatch.size())
{
defaultPatch = globalToPatch[0];
defaultPatch = globalToMasterPatch[0];
}
for (label i = 0; i < nBufferLayers; i++)

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -68,12 +68,7 @@ int main(int argc, char *argv[])
"noFlow",
"suppress creating flow models (execFlowFunctionObjects only)"
);
Foam::argList::addOption
(
"dict",
"name",
"dictionary to use"
);
#include "addDictOption.H"
#include "setRootCase.H"
#include "createTime.H"