mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'feature-domain-decomposition' into 'develop'
Minor improvements for redistributePar See merge request Development/OpenFOAM-plus!181
This commit is contained in:
@ -0,0 +1,3 @@
|
|||||||
|
foamListRegions.C
|
||||||
|
|
||||||
|
EXE = $(FOAM_APPBIN)/foamListRegions
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I$(LIB_SRC)/regionModels/regionModel/lnInclude
|
||||||
|
|
||||||
|
EXE_LIBS = \
|
||||||
|
-lregionModels
|
||||||
@ -0,0 +1,113 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2017 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Application
|
||||||
|
foamListRegions
|
||||||
|
|
||||||
|
Group
|
||||||
|
grpPostProcessingUtilities
|
||||||
|
|
||||||
|
Description
|
||||||
|
List regions from constant/regionProperties.
|
||||||
|
|
||||||
|
To simplify parsing of the output, the normal banner information
|
||||||
|
is suppressed.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
\b foamListRegions [OPTION]
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "argList.H"
|
||||||
|
#include "Time.H"
|
||||||
|
#include "regionProperties.H"
|
||||||
|
|
||||||
|
using namespace Foam;
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
argList::addNote("List regions from constant/regionProperties");
|
||||||
|
|
||||||
|
argList::noBanner();
|
||||||
|
argList::noParallel();
|
||||||
|
argList::noJobInfo();
|
||||||
|
argList::noFunctionObjects();
|
||||||
|
// No profiling since there is no time loop
|
||||||
|
|
||||||
|
// Non-mandatory arguments
|
||||||
|
argList::addArgument("regionType ... regionType");
|
||||||
|
|
||||||
|
#include "setRootCaseNonMandatoryArgs.H"
|
||||||
|
|
||||||
|
// As per "createTime.H", but quieter.
|
||||||
|
Time runTime(Time::controlDictName, args);
|
||||||
|
|
||||||
|
regionProperties rp(runTime);
|
||||||
|
|
||||||
|
// We now handle checking args and general sanity etc.
|
||||||
|
wordList regionTypes;
|
||||||
|
|
||||||
|
if (args.size() > 1)
|
||||||
|
{
|
||||||
|
regionTypes.setSize(args.size()-1);
|
||||||
|
|
||||||
|
label nTypes = 0;
|
||||||
|
for (label argi = 1; argi < args.size(); ++argi)
|
||||||
|
{
|
||||||
|
regionTypes[nTypes] = args[argi];
|
||||||
|
|
||||||
|
if (rp.found(regionTypes[nTypes]))
|
||||||
|
{
|
||||||
|
++nTypes;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr<< "No region-type: " << regionTypes[nTypes] << nl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
regionTypes.setSize(nTypes);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
regionTypes = rp.sortedToc();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (const word& regionType : regionTypes)
|
||||||
|
{
|
||||||
|
const wordList& regionNames = rp[regionType];
|
||||||
|
|
||||||
|
for (const word& regionName : regionNames)
|
||||||
|
{
|
||||||
|
Info<< regionName << nl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -3,7 +3,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) 2011-2017 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -275,15 +275,15 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
#include "setRootCase.H"
|
#include "setRootCase.H"
|
||||||
|
|
||||||
bool region = args.optionFound("region");
|
const bool optRegion = args.optionFound("region");
|
||||||
bool allRegions = args.optionFound("allRegions");
|
const bool allRegions = args.optionFound("allRegions");
|
||||||
bool writeCellDist = args.optionFound("cellDist");
|
const bool writeCellDist = args.optionFound("cellDist");
|
||||||
bool copyZero = args.optionFound("copyZero");
|
const bool copyZero = args.optionFound("copyZero");
|
||||||
bool copyUniform = args.optionFound("copyUniform");
|
const bool copyUniform = args.optionFound("copyUniform");
|
||||||
|
const bool decomposeSets = !args.optionFound("noSets");
|
||||||
bool decomposeFieldsOnly = args.optionFound("fields");
|
bool decomposeFieldsOnly = args.optionFound("fields");
|
||||||
bool decomposeSets = !args.optionFound("noSets");
|
|
||||||
bool forceOverwrite = args.optionFound("force");
|
bool forceOverwrite = args.optionFound("force");
|
||||||
bool ifRequiredDecomposition = args.optionFound("ifRequired");
|
const bool ifRequiredDecomposition = args.optionFound("ifRequired");
|
||||||
|
|
||||||
// Set time from database
|
// Set time from database
|
||||||
#include "createTime.H"
|
#include "createTime.H"
|
||||||
@ -296,44 +296,30 @@ int main(int argc, char *argv[])
|
|||||||
args.optionReadIfPresent("decomposeParDict", decompDictFile);
|
args.optionReadIfPresent("decomposeParDict", decompDictFile);
|
||||||
|
|
||||||
wordList regionNames;
|
wordList regionNames;
|
||||||
wordList regionDirs;
|
|
||||||
if (allRegions)
|
if (allRegions)
|
||||||
{
|
{
|
||||||
Info<< "Decomposing all regions in regionProperties" << nl << endl;
|
Info<< "Decomposing all regions in regionProperties" << nl << endl;
|
||||||
regionProperties rp(runTime);
|
regionProperties rp(runTime);
|
||||||
forAllConstIter(HashTable<wordList>, rp, iter)
|
|
||||||
|
wordHashSet names;
|
||||||
|
forAllConstIters(rp, iter)
|
||||||
{
|
{
|
||||||
const wordList& regions = iter();
|
names.insert(iter.object());
|
||||||
forAll(regions, i)
|
|
||||||
{
|
|
||||||
if (!regionNames.found(regions[i]))
|
|
||||||
{
|
|
||||||
regionNames.append(regions[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
regionDirs = regionNames;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
word regionName;
|
|
||||||
if (args.optionReadIfPresent("region", regionName))
|
|
||||||
{
|
|
||||||
regionNames = wordList(1, regionName);
|
|
||||||
regionDirs = regionNames;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
regionNames = wordList(1, fvMesh::defaultRegion);
|
|
||||||
regionDirs = wordList(1, word::null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
regionNames = names.sortedToc();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
regionNames = {fvMesh::defaultRegion};
|
||||||
|
args.optionReadIfPresent("region", regionNames[0]);
|
||||||
|
}
|
||||||
|
|
||||||
forAll(regionNames, regioni)
|
forAll(regionNames, regioni)
|
||||||
{
|
{
|
||||||
const word& regionName = regionNames[regioni];
|
const word& regionName = regionNames[regioni];
|
||||||
const word& regionDir = regionDirs[regioni];
|
const word& regionDir =
|
||||||
|
regionName == fvMesh::defaultRegion ? word::null : regionName;
|
||||||
|
|
||||||
Info<< "\n\nDecomposing mesh " << regionName << nl << endl;
|
Info<< "\n\nDecomposing mesh " << regionName << nl << endl;
|
||||||
|
|
||||||
@ -391,7 +377,7 @@ int main(int argc, char *argv[])
|
|||||||
Info<< "Using existing processor directories" << nl;
|
Info<< "Using existing processor directories" << nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (region || allRegions)
|
if (allRegions || optRegion)
|
||||||
{
|
{
|
||||||
procDirsProblem = false;
|
procDirsProblem = false;
|
||||||
forceOverwrite = false;
|
forceOverwrite = false;
|
||||||
@ -527,7 +513,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
// Copy the 0 directory into each of the processor directories
|
// Copy the 0 directory into each of the processor directories
|
||||||
fileName prevTimePath;
|
fileName prevTimePath;
|
||||||
for (label proci = 0; proci < mesh.nProcs(); proci++)
|
for (label proci = 0; proci < mesh.nProcs(); ++proci)
|
||||||
{
|
{
|
||||||
Time processorDb
|
Time processorDb
|
||||||
(
|
(
|
||||||
@ -736,13 +722,13 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
label cloudI = 0;
|
label cloudI = 0;
|
||||||
|
|
||||||
forAll(cloudDirs, i)
|
for (const fileName& cloudDir : cloudDirs)
|
||||||
{
|
{
|
||||||
IOobjectList sprayObjs
|
IOobjectList sprayObjs
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
runTime.timeName(),
|
runTime.timeName(),
|
||||||
cloud::prefix/cloudDirs[i],
|
cloud::prefix/cloudDir,
|
||||||
IOobject::MUST_READ,
|
IOobject::MUST_READ,
|
||||||
IOobject::NO_WRITE,
|
IOobject::NO_WRITE,
|
||||||
false
|
false
|
||||||
@ -759,7 +745,7 @@ int main(int argc, char *argv[])
|
|||||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Info<< "Identified lagrangian data set: "
|
Info<< "Identified lagrangian data set: "
|
||||||
<< cloudDirs[i] << endl;
|
<< cloudDir << endl;
|
||||||
|
|
||||||
lagrangianPositions.set
|
lagrangianPositions.set
|
||||||
(
|
(
|
||||||
@ -767,7 +753,7 @@ int main(int argc, char *argv[])
|
|||||||
new Cloud<indexedParticle>
|
new Cloud<indexedParticle>
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
cloudDirs[i],
|
cloudDir,
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -944,7 +930,7 @@ int main(int argc, char *argv[])
|
|||||||
Info<< endl;
|
Info<< endl;
|
||||||
|
|
||||||
// split the fields over processors
|
// split the fields over processors
|
||||||
for (label proci = 0; proci < mesh.nProcs(); proci++)
|
for (label proci = 0; proci < mesh.nProcs(); ++proci)
|
||||||
{
|
{
|
||||||
Info<< "Processor " << proci << ": field transfer" << endl;
|
Info<< "Processor " << proci << ": field transfer" << endl;
|
||||||
|
|
||||||
@ -1234,8 +1220,8 @@ int main(int argc, char *argv[])
|
|||||||
// directory
|
// directory
|
||||||
decomposeUniform(copyUniform, mesh, processorDb, regionDir);
|
decomposeUniform(copyUniform, mesh, processorDb, regionDir);
|
||||||
|
|
||||||
// For the first region of a multi-region case additionally
|
// For a multi-region case, also decompose the "uniform"
|
||||||
// decompose the "uniform" directory in the time directory
|
// directory in the time directory
|
||||||
if (regionNames.size() > 1 && regioni == 0)
|
if (regionNames.size() > 1 && regioni == 0)
|
||||||
{
|
{
|
||||||
decomposeUniform(copyUniform, mesh, processorDb);
|
decomposeUniform(copyUniform, mesh, processorDb);
|
||||||
|
|||||||
@ -54,14 +54,14 @@ Description
|
|||||||
|
|
||||||
bool haveAllTimes
|
bool haveAllTimes
|
||||||
(
|
(
|
||||||
const HashSet<word>& masterTimeDirSet,
|
const wordHashSet& masterTimeDirSet,
|
||||||
const instantList& timeDirs
|
const instantList& timeDirs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Loop over all times
|
// Loop over all times
|
||||||
forAll(timeDirs, timei)
|
for (const instant& t : timeDirs)
|
||||||
{
|
{
|
||||||
if (!masterTimeDirSet.found(timeDirs[timei].name()))
|
if (!masterTimeDirSet.found(t.name()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -126,11 +126,8 @@ int main(int argc, char *argv[])
|
|||||||
#include "setRootCase.H"
|
#include "setRootCase.H"
|
||||||
#include "createTime.H"
|
#include "createTime.H"
|
||||||
|
|
||||||
HashSet<word> selectedFields;
|
wordHashSet selectedFields;
|
||||||
if (args.optionFound("fields"))
|
args.optionReadIfPresent("fields", selectedFields);
|
||||||
{
|
|
||||||
args.optionLookup("fields")() >> selectedFields;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bool noFields = args.optionFound("noFields");
|
const bool noFields = args.optionFound("noFields");
|
||||||
|
|
||||||
@ -158,8 +155,8 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HashSet<word> selectedLagrangianFields;
|
wordHashSet selectedLagrangianFields;
|
||||||
if (args.optionFound("lagrangianFields"))
|
if (args.optionReadIfPresent("lagrangianFields", selectedLagrangianFields))
|
||||||
{
|
{
|
||||||
if (noLagrangian)
|
if (noLagrangian)
|
||||||
{
|
{
|
||||||
@ -168,50 +165,42 @@ int main(int argc, char *argv[])
|
|||||||
<< "options together."
|
<< "options together."
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
args.optionLookup("lagrangianFields")() >> selectedLagrangianFields;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const bool newTimes = args.optionFound("newTimes");
|
const bool newTimes = args.optionFound("newTimes");
|
||||||
const bool allRegions = args.optionFound("allRegions");
|
const bool allRegions = args.optionFound("allRegions");
|
||||||
|
|
||||||
|
|
||||||
wordList regionNames;
|
wordList regionNames;
|
||||||
wordList regionDirs;
|
wordList regionDirs;
|
||||||
if (allRegions)
|
if (allRegions)
|
||||||
{
|
{
|
||||||
Info<< "Reconstructing for all regions in regionProperties" << nl
|
Info<< "Reconstructing all regions in regionProperties" << nl << endl;
|
||||||
<< endl;
|
|
||||||
regionProperties rp(runTime);
|
regionProperties rp(runTime);
|
||||||
forAllConstIter(HashTable<wordList>, rp, iter)
|
|
||||||
|
wordHashSet names;
|
||||||
|
forAllConstIters(rp, iter)
|
||||||
{
|
{
|
||||||
const wordList& regions = iter();
|
names.insert(iter.object());
|
||||||
forAll(regions, i)
|
|
||||||
{
|
|
||||||
if (!regionNames.found(regions[i]))
|
|
||||||
{
|
|
||||||
regionNames.append(regions[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
regionNames = names.sortedToc();
|
||||||
regionDirs = regionNames;
|
regionDirs = regionNames;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
word regionName;
|
regionNames = {fvMesh::defaultRegion};
|
||||||
if (args.optionReadIfPresent("region", regionName))
|
if (args.optionReadIfPresent("region", regionNames[0]))
|
||||||
{
|
{
|
||||||
regionNames = wordList(1, regionName);
|
|
||||||
regionDirs = regionNames;
|
regionDirs = regionNames;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
regionNames = wordList(1, fvMesh::defaultRegion);
|
regionDirs = {word::null};
|
||||||
regionDirs = wordList(1, word::null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Determine the processor count
|
// Determine the processor count
|
||||||
label nProcs = fileHandler().nProcs(args.path(), regionDirs[0]);
|
label nProcs = fileHandler().nProcs(args.path(), regionDirs[0]);
|
||||||
|
|
||||||
@ -267,10 +256,10 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
masterTimeDirs = runTime.times();
|
masterTimeDirs = runTime.times();
|
||||||
}
|
}
|
||||||
HashSet<word> masterTimeDirSet(2*masterTimeDirs.size());
|
wordHashSet masterTimeDirSet(2*masterTimeDirs.size());
|
||||||
forAll(masterTimeDirs, i)
|
for (const instant& t : masterTimeDirs)
|
||||||
{
|
{
|
||||||
masterTimeDirSet.insert(masterTimeDirs[i].name());
|
masterTimeDirSet.insert(t.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -567,21 +556,18 @@ int main(int argc, char *argv[])
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
forAll(cloudDirs, i)
|
for (const fileName& cloudDir : cloudDirs)
|
||||||
{
|
{
|
||||||
// Check if we already have cloud objects for this
|
// Check if we already have cloud objects for this
|
||||||
// cloudname
|
// cloudname
|
||||||
HashTable<IOobjectList>::const_iterator iter =
|
if (!cloudObjects.found(cloudDir))
|
||||||
cloudObjects.find(cloudDirs[i]);
|
|
||||||
|
|
||||||
if (iter == cloudObjects.end())
|
|
||||||
{
|
{
|
||||||
// Do local scan for valid cloud objects
|
// Do local scan for valid cloud objects
|
||||||
IOobjectList sprayObjs
|
IOobjectList sprayObjs
|
||||||
(
|
(
|
||||||
procMeshes.meshes()[proci],
|
procMeshes.meshes()[proci],
|
||||||
databases[proci].timeName(),
|
databases[proci].timeName(),
|
||||||
cloud::prefix/cloudDirs[i]
|
cloud::prefix/cloudDir
|
||||||
);
|
);
|
||||||
|
|
||||||
IOobject* positionsPtr =
|
IOobject* positionsPtr =
|
||||||
@ -591,7 +577,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (coordsPtr || positionsPtr)
|
if (coordsPtr || positionsPtr)
|
||||||
{
|
{
|
||||||
cloudObjects.insert(cloudDirs[i], sprayObjs);
|
cloudObjects.insert(cloudDir, sprayObjs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -606,7 +592,7 @@ int main(int argc, char *argv[])
|
|||||||
const word cloudName = word::validate(iter.key());
|
const word cloudName = word::validate(iter.key());
|
||||||
|
|
||||||
// Objects (on arbitrary processor)
|
// Objects (on arbitrary processor)
|
||||||
const IOobjectList& sprayObjs = iter();
|
const IOobjectList& sprayObjs = iter.object();
|
||||||
|
|
||||||
Info<< "Reconstructing lagrangian fields for cloud "
|
Info<< "Reconstructing lagrangian fields for cloud "
|
||||||
<< cloudName << nl << endl;
|
<< cloudName << nl << endl;
|
||||||
|
|||||||
@ -3,7 +3,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) 2011-2017 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2015-2017 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -105,7 +105,7 @@ scalar getMergeDistance
|
|||||||
scalar mergeTol = defaultMergeTol;
|
scalar mergeTol = defaultMergeTol;
|
||||||
args.optionReadIfPresent("mergeTol", mergeTol);
|
args.optionReadIfPresent("mergeTol", mergeTol);
|
||||||
|
|
||||||
scalar writeTol =
|
const scalar writeTol =
|
||||||
Foam::pow(scalar(10.0), -scalar(IOstream::defaultPrecision()));
|
Foam::pow(scalar(10.0), -scalar(IOstream::defaultPrecision()));
|
||||||
|
|
||||||
Info<< "Merge tolerance : " << mergeTol << nl
|
Info<< "Merge tolerance : " << mergeTol << nl
|
||||||
@ -236,7 +236,7 @@ void writeDecomposition
|
|||||||
(
|
(
|
||||||
const word& name,
|
const word& name,
|
||||||
const fvMesh& mesh,
|
const fvMesh& mesh,
|
||||||
const labelList& decomp
|
const labelUList& decomp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Write the decomposition as labelList for use with 'manual'
|
// Write the decomposition as labelList for use with 'manual'
|
||||||
@ -388,10 +388,9 @@ void determineDecomposition
|
|||||||
// Write addressing if decomposing (1 to many) or reconstructing (many to 1)
|
// Write addressing if decomposing (1 to many) or reconstructing (many to 1)
|
||||||
void writeProcAddressing
|
void writeProcAddressing
|
||||||
(
|
(
|
||||||
const bool decompose,
|
|
||||||
const fileName& meshSubDir,
|
|
||||||
const fvMesh& mesh,
|
const fvMesh& mesh,
|
||||||
const mapDistributePolyMesh& map
|
const mapDistributePolyMesh& map,
|
||||||
|
const bool decompose
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Info<< "Writing procAddressing files to " << mesh.facesInstance()
|
Info<< "Writing procAddressing files to " << mesh.facesInstance()
|
||||||
@ -403,7 +402,7 @@ void writeProcAddressing
|
|||||||
(
|
(
|
||||||
"cellProcAddressing",
|
"cellProcAddressing",
|
||||||
mesh.facesInstance(),
|
mesh.facesInstance(),
|
||||||
meshSubDir,
|
polyMesh::meshSubDir,
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ
|
IOobject::NO_READ
|
||||||
),
|
),
|
||||||
@ -416,7 +415,7 @@ void writeProcAddressing
|
|||||||
(
|
(
|
||||||
"faceProcAddressing",
|
"faceProcAddressing",
|
||||||
mesh.facesInstance(),
|
mesh.facesInstance(),
|
||||||
meshSubDir,
|
polyMesh::meshSubDir,
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ
|
IOobject::NO_READ
|
||||||
),
|
),
|
||||||
@ -429,7 +428,7 @@ void writeProcAddressing
|
|||||||
(
|
(
|
||||||
"pointProcAddressing",
|
"pointProcAddressing",
|
||||||
mesh.facesInstance(),
|
mesh.facesInstance(),
|
||||||
meshSubDir,
|
polyMesh::meshSubDir,
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ
|
IOobject::NO_READ
|
||||||
),
|
),
|
||||||
@ -442,7 +441,7 @@ void writeProcAddressing
|
|||||||
(
|
(
|
||||||
"boundaryProcAddressing",
|
"boundaryProcAddressing",
|
||||||
mesh.facesInstance(),
|
mesh.facesInstance(),
|
||||||
meshSubDir,
|
polyMesh::meshSubDir,
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ
|
IOobject::NO_READ
|
||||||
),
|
),
|
||||||
@ -545,10 +544,10 @@ void writeProcAddressing
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cellOk = cellMap.write();
|
const bool cellOk = cellMap.write();
|
||||||
bool faceOk = faceMap.write();
|
const bool faceOk = faceMap.write();
|
||||||
bool pointOk = pointMap.write();
|
const bool pointOk = pointMap.write();
|
||||||
bool patchOk = patchMap.write();
|
const bool patchOk = patchMap.write();
|
||||||
|
|
||||||
if (!cellOk || !faceOk || !pointOk || !patchOk)
|
if (!cellOk || !faceOk || !pointOk || !patchOk)
|
||||||
{
|
{
|
||||||
@ -562,6 +561,24 @@ void writeProcAddressing
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Remove addressing
|
||||||
|
void removeProcAddressing(const polyMesh& mesh)
|
||||||
|
{
|
||||||
|
for (const auto prefix : {"boundary", "cell", "face", "point"})
|
||||||
|
{
|
||||||
|
IOobject io
|
||||||
|
(
|
||||||
|
prefix + word("ProcAddressing"),
|
||||||
|
mesh.facesInstance(),
|
||||||
|
polyMesh::meshSubDir,
|
||||||
|
mesh
|
||||||
|
);
|
||||||
|
|
||||||
|
const fileName procFile(io.objectPath());
|
||||||
|
rm(procFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Generic mesh-based field reading
|
// Generic mesh-based field reading
|
||||||
template<class GeoField>
|
template<class GeoField>
|
||||||
@ -906,8 +923,8 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite
|
|||||||
|
|
||||||
// We don't want to map the decomposition (mapping already tested when
|
// We don't want to map the decomposition (mapping already tested when
|
||||||
// mapping the cell centre field)
|
// mapping the cell centre field)
|
||||||
IOobjectList::iterator iter = objects.find("cellDist");
|
auto iter = objects.find("cellDist");
|
||||||
if (iter != objects.end())
|
if (iter.found())
|
||||||
{
|
{
|
||||||
objects.erase(iter);
|
objects.erase(iter);
|
||||||
}
|
}
|
||||||
@ -1162,7 +1179,7 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite
|
|||||||
(
|
(
|
||||||
"procAddressing",
|
"procAddressing",
|
||||||
mesh.facesInstance(),
|
mesh.facesInstance(),
|
||||||
meshSubDir,
|
polyMesh::meshSubDir,
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
@ -1181,16 +1198,16 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite
|
|||||||
|
|
||||||
mesh.write();
|
mesh.write();
|
||||||
topoSet::removeFiles(mesh);
|
topoSet::removeFiles(mesh);
|
||||||
forAll(pointFieldNames, i)
|
for (const word& fieldName : pointFieldNames)
|
||||||
{
|
{
|
||||||
IOobject io
|
IOobject io
|
||||||
(
|
(
|
||||||
pointFieldNames[i],
|
fieldName,
|
||||||
runTime.timeName(),
|
runTime.timeName(),
|
||||||
mesh
|
mesh
|
||||||
);
|
);
|
||||||
|
|
||||||
fileName fieldFile(io.objectPath());
|
const fileName fieldFile(io.objectPath());
|
||||||
if (topoSet::debug) DebugVar(fieldFile);
|
if (topoSet::debug) DebugVar(fieldFile);
|
||||||
rm(fieldFile);
|
rm(fieldFile);
|
||||||
}
|
}
|
||||||
@ -1204,16 +1221,16 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite
|
|||||||
{
|
{
|
||||||
mesh.write();
|
mesh.write();
|
||||||
topoSet::removeFiles(mesh);
|
topoSet::removeFiles(mesh);
|
||||||
forAll(pointFieldNames, i)
|
for (const word& fieldName : pointFieldNames)
|
||||||
{
|
{
|
||||||
IOobject io
|
IOobject io
|
||||||
(
|
(
|
||||||
pointFieldNames[i],
|
fieldName,
|
||||||
runTime.timeName(),
|
runTime.timeName(),
|
||||||
mesh
|
mesh
|
||||||
);
|
);
|
||||||
|
|
||||||
fileName fieldFile(io.objectPath());
|
const fileName fieldFile(io.objectPath());
|
||||||
if (topoSet::debug) DebugVar(fieldFile);
|
if (topoSet::debug) DebugVar(fieldFile);
|
||||||
rm(fieldFile);
|
rm(fieldFile);
|
||||||
}
|
}
|
||||||
@ -1224,7 +1241,16 @@ autoPtr<mapDistributePolyMesh> redistributeAndWrite
|
|||||||
|
|
||||||
if (decompose || nDestProcs == 1)
|
if (decompose || nDestProcs == 1)
|
||||||
{
|
{
|
||||||
writeProcAddressing(decompose, meshSubDir, mesh, map);
|
// Decompose (1 -> N) or reconstruct (N -> 1)
|
||||||
|
// so {boundary,cell,face,point}ProcAddressing have meaning
|
||||||
|
writeProcAddressing(mesh, map, decompose);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Redistribute (N -> M)
|
||||||
|
// {boundary,cell,face,point}ProcAddressing would be incorrect
|
||||||
|
// - can either remove or redistribute previous
|
||||||
|
removeProcAddressing(mesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2272,9 +2298,9 @@ int main(int argc, char *argv[])
|
|||||||
Foam::argList args(argc, argv);
|
Foam::argList args(argc, argv);
|
||||||
bool decompose = args.optionFound("decompose");
|
bool decompose = args.optionFound("decompose");
|
||||||
const bool reconstruct = args.optionFound("reconstruct");
|
const bool reconstruct = args.optionFound("reconstruct");
|
||||||
|
const bool writeCellDist = args.optionFound("cellDist");
|
||||||
|
const bool newTimes = args.optionFound("newTimes");
|
||||||
bool overwrite = args.optionFound("overwrite");
|
bool overwrite = args.optionFound("overwrite");
|
||||||
bool writeCellDist = args.optionFound("cellDist");
|
|
||||||
bool newTimes = args.optionFound("newTimes");
|
|
||||||
|
|
||||||
|
|
||||||
if (Foam::sigFpe::requested())
|
if (Foam::sigFpe::requested())
|
||||||
@ -2363,8 +2389,7 @@ int main(int argc, char *argv[])
|
|||||||
Info<< "No processor directories; switching on decompose mode"
|
Info<< "No processor directories; switching on decompose mode"
|
||||||
<< nl << endl;
|
<< nl << endl;
|
||||||
}
|
}
|
||||||
// If master changed to decompose mode make sure all nodes know about
|
// If master changed to decompose mode make sure all nodes know about it
|
||||||
// it
|
|
||||||
Pstream::scatter(decompose);
|
Pstream::scatter(decompose);
|
||||||
|
|
||||||
|
|
||||||
@ -2382,9 +2407,9 @@ int main(int argc, char *argv[])
|
|||||||
timeDirs = Time::findTimes(args.path(), "constant");
|
timeDirs = Time::findTimes(args.path(), "constant");
|
||||||
}
|
}
|
||||||
Pstream::scatter(timeDirs);
|
Pstream::scatter(timeDirs);
|
||||||
forAll(timeDirs, i)
|
for (const instant& t : timeDirs)
|
||||||
{
|
{
|
||||||
mkDir(args.path()/timeDirs[i].name());
|
mkDir(args.path()/t.name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2418,9 +2443,9 @@ int main(int argc, char *argv[])
|
|||||||
timeDirs = Time::findTimes(basePath, "constant");
|
timeDirs = Time::findTimes(basePath, "constant");
|
||||||
}
|
}
|
||||||
Pstream::scatter(timeDirs);
|
Pstream::scatter(timeDirs);
|
||||||
forAll(timeDirs, i)
|
for (const instant& t : timeDirs)
|
||||||
{
|
{
|
||||||
mkDir(basePath/timeDirs[i].name());
|
mkDir(basePath/t.name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2441,33 +2466,32 @@ int main(int argc, char *argv[])
|
|||||||
if (newTimes)
|
if (newTimes)
|
||||||
{
|
{
|
||||||
instantList baseTimeDirs(baseRunTime.times());
|
instantList baseTimeDirs(baseRunTime.times());
|
||||||
forAll(baseTimeDirs, i)
|
for (const instant& t : baseTimeDirs)
|
||||||
{
|
{
|
||||||
masterTimeDirSet.insert(baseTimeDirs[i].name());
|
masterTimeDirSet.insert(t.name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Determine any region
|
// Determine any region
|
||||||
word regionName = polyMesh::defaultRegion;
|
word regionName = polyMesh::defaultRegion;
|
||||||
fileName meshSubDir;
|
fileName meshSubDir = polyMesh::meshSubDir;
|
||||||
if (args.optionReadIfPresent("region", regionName))
|
if (args.optionReadIfPresent("region", regionName))
|
||||||
{
|
{
|
||||||
meshSubDir = regionName/polyMesh::meshSubDir;
|
meshSubDir = regionName/polyMesh::meshSubDir;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
meshSubDir = polyMesh::meshSubDir;
|
|
||||||
}
|
|
||||||
Info<< "Using mesh subdirectory " << meshSubDir << nl << endl;
|
Info<< "Using mesh subdirectory " << meshSubDir << nl << endl;
|
||||||
|
|
||||||
|
|
||||||
|
// Allow override of decomposeParDict location
|
||||||
|
fileName decompDictFile;
|
||||||
|
args.optionReadIfPresent("decomposeParDict", decompDictFile);
|
||||||
|
|
||||||
|
|
||||||
// Demand driven lagrangian mapper
|
// Demand driven lagrangian mapper
|
||||||
autoPtr<parLagrangianRedistributor> lagrangianReconstructorPtr;
|
autoPtr<parLagrangianRedistributor> lagrangianReconstructorPtr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (reconstruct)
|
if (reconstruct)
|
||||||
{
|
{
|
||||||
// use the times list from the master processor
|
// use the times list from the master processor
|
||||||
@ -2689,7 +2713,8 @@ int main(int argc, char *argv[])
|
|||||||
// detect points by hand
|
// detect points by hand
|
||||||
if (mesh.pointsInstance() != mesh.facesInstance())
|
if (mesh.pointsInstance() != mesh.facesInstance())
|
||||||
{
|
{
|
||||||
Info<< " Dected initial mesh motion; reconstructing points" << nl
|
Info<< " Detected initial mesh motion;"
|
||||||
|
<< " reconstructing points" << nl
|
||||||
<< endl;
|
<< endl;
|
||||||
fvReconstructorPtr().reconstructPoints();
|
fvReconstructorPtr().reconstructPoints();
|
||||||
}
|
}
|
||||||
@ -2918,11 +2943,6 @@ int main(int argc, char *argv[])
|
|||||||
mesh.bounds()
|
mesh.bounds()
|
||||||
);
|
);
|
||||||
|
|
||||||
// Allow override of decomposeParDict location
|
|
||||||
fileName decompDictFile;
|
|
||||||
args.optionReadIfPresent("decomposeParDict", decompDictFile);
|
|
||||||
|
|
||||||
|
|
||||||
// Determine decomposition
|
// Determine decomposition
|
||||||
// ~~~~~~~~~~~~~~~~~~~~~~~
|
// ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|||||||
@ -2,16 +2,10 @@
|
|||||||
cd ${0%/*} || exit 1 # Run from this directory
|
cd ${0%/*} || exit 1 # Run from this directory
|
||||||
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
|
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
|
||||||
|
|
||||||
cleanCase
|
cleanCase0
|
||||||
|
|
||||||
rm -rf VTK
|
rm -rf VTK
|
||||||
rm -rf constant/cellToRegion
|
rm -rf constant/cellToRegion
|
||||||
rm -f 0/cellToRegion
|
|
||||||
rm -rf 0/bottomWater
|
|
||||||
rm -rf 0/topAir
|
|
||||||
rm -rf 0/heater
|
|
||||||
rm -rf 0/leftSolid
|
|
||||||
rm -rf 0/rightSolid
|
|
||||||
|
|
||||||
rm -rf constant/bottomWater/polyMesh
|
rm -rf constant/bottomWater/polyMesh
|
||||||
rm -rf constant/topAir/polyMesh
|
rm -rf constant/topAir/polyMesh
|
||||||
|
|||||||
@ -4,23 +4,25 @@ cd ${0%/*} || exit 1 # Run from this directory
|
|||||||
|
|
||||||
runApplication blockMesh
|
runApplication blockMesh
|
||||||
runApplication topoSet
|
runApplication topoSet
|
||||||
|
|
||||||
|
# Restore initial fields
|
||||||
|
restore0Dir
|
||||||
|
|
||||||
runApplication splitMeshRegions -cellZones -overwrite
|
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 region in $(foamListRegions solid)
|
||||||
do
|
do
|
||||||
rm -f 0*/$i/{nut,alphat,epsilon,k,U,p_rgh}
|
rm -f 0/$region/{nut,alphat,epsilon,k,U,p_rgh}
|
||||||
done
|
done
|
||||||
|
|
||||||
for i in bottomWater topAir heater leftSolid rightSolid
|
for region in $(foamListRegions)
|
||||||
do
|
do
|
||||||
runApplication -s $i changeDictionary -region $i
|
runApplication -s $region changeDictionary -region $region
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "Creating files for paraview post-processing"
|
echo "Use paraFoam -touch-all to create files for paraview post-processing"
|
||||||
echo
|
echo
|
||||||
paraFoam -touchAll
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -30,12 +30,11 @@ regions
|
|||||||
heater
|
heater
|
||||||
{
|
{
|
||||||
numberOfSubdomains 1;
|
numberOfSubdomains 1;
|
||||||
method none;
|
method simple; // none;
|
||||||
|
|
||||||
coeffs
|
coeffs
|
||||||
{
|
{
|
||||||
n (1 1 1);
|
n (1 1 1);
|
||||||
delta 0.001;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,10 +20,12 @@ internalField uniform 300;
|
|||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
|
#includeEtc "caseDicts/setConstraintTypes"
|
||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
type calculated;
|
type calculated;
|
||||||
value uniform 300;
|
value $internalField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,10 +20,12 @@ internalField uniform (0.01 0 0);
|
|||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
|
#includeEtc "caseDicts/setConstraintTypes"
|
||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
type calculated;
|
type calculated;
|
||||||
value uniform (0.01 0 0);
|
value $internalField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,12 +20,13 @@ internalField uniform 0;
|
|||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
|
#includeEtc "caseDicts/setConstraintTypes"
|
||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
type calculated;
|
type calculated;
|
||||||
value uniform 0;
|
value $internalField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -20,12 +20,13 @@ internalField uniform 0.01;
|
|||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
|
#includeEtc "caseDicts/setConstraintTypes"
|
||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
type calculated;
|
type calculated;
|
||||||
value uniform 0.01;
|
value $internalField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -20,12 +20,13 @@ internalField uniform 0.1;
|
|||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
|
#includeEtc "caseDicts/setConstraintTypes"
|
||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
type calculated;
|
type calculated;
|
||||||
value uniform 0.1;
|
value $internalField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -20,10 +20,12 @@ internalField uniform 1e5;
|
|||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
|
#includeEtc "caseDicts/setConstraintTypes"
|
||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
type calculated;
|
type calculated;
|
||||||
value uniform 1e5;
|
value $internalField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,10 +20,12 @@ internalField uniform 1e5;
|
|||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
|
#includeEtc "caseDicts/setConstraintTypes"
|
||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
type calculated;
|
type calculated;
|
||||||
value uniform 1e5;
|
value $internalField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,10 +20,12 @@ internalField uniform 8000;
|
|||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
|
#includeEtc "caseDicts/setConstraintTypes"
|
||||||
|
|
||||||
".*"
|
".*"
|
||||||
{
|
{
|
||||||
type calculated;
|
type calculated;
|
||||||
value uniform 8000;
|
value $internalField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2,19 +2,13 @@
|
|||||||
cd ${0%/*} || exit 1 # Run from this directory
|
cd ${0%/*} || exit 1 # Run from this directory
|
||||||
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
|
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
|
||||||
|
|
||||||
cleanCase
|
cleanCase0
|
||||||
|
|
||||||
rm -rf constant/extendedFeatureEdgeMesh > /dev/null 2>&1
|
rm -rf constant/extendedFeatureEdgeMesh > /dev/null 2>&1
|
||||||
rm -f constant/triSurface/*.eMesh > /dev/null 2>&1
|
rm -f constant/triSurface/*.eMesh > /dev/null 2>&1
|
||||||
|
|
||||||
rm -rf VTK
|
rm -rf VTK
|
||||||
rm -rf constant/cellToRegion
|
rm -rf constant/cellToRegion
|
||||||
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/bottomAir/polyMesh
|
||||||
rm -rf constant/topAir/polyMesh
|
rm -rf constant/topAir/polyMesh
|
||||||
|
|||||||
@ -1,45 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
cd ${0%/*} || exit 1 # Run from this directory
|
|
||||||
. $WM_PROJECT_DIR/bin/tools/RunFunctions # Tutorial run functions
|
|
||||||
|
|
||||||
rm -rf constant/polyMesh/sets
|
|
||||||
|
|
||||||
runApplication blockMesh
|
|
||||||
runApplication surfaceFeatureExtract
|
|
||||||
|
|
||||||
runApplication snappyHexMesh -overwrite
|
|
||||||
runApplication splitMeshRegions -cellZones -overwrite
|
|
||||||
|
|
||||||
# remove fluid fields from solid regions (important for post-processing)
|
|
||||||
for i in heater leftSolid rightSolid
|
|
||||||
do
|
|
||||||
rm -f 0*/$i/{nut,alphat,epsilon,k,U,p_rgh}
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
for i in bottomAir topAir heater leftSolid rightSolid
|
|
||||||
do
|
|
||||||
runApplication -s $i changeDictionary -region $i
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
#-- Run on single processor
|
|
||||||
runApplication $(getApplication)
|
|
||||||
|
|
||||||
|
|
||||||
## Decompose
|
|
||||||
#runApplication decomposePar -allRegions
|
|
||||||
#
|
|
||||||
## Run
|
|
||||||
#runParallel $(getApplication)
|
|
||||||
#
|
|
||||||
## Reconstruct
|
|
||||||
#runApplication reconstructPar -allRegions
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "creating files for paraview post-processing"
|
|
||||||
echo
|
|
||||||
paraFoam -touchAll
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
Allrun-parallel
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # Run from this directory
|
||||||
|
. $WM_PROJECT_DIR/bin/tools/RunFunctions # Tutorial run functions
|
||||||
|
|
||||||
|
rm -rf constant/polyMesh/sets
|
||||||
|
|
||||||
|
# For meshing only
|
||||||
|
decompDict="-decomposeParDict system/decomposeParDict.6"
|
||||||
|
|
||||||
|
runApplication blockMesh
|
||||||
|
runApplication surfaceFeatureExtract
|
||||||
|
|
||||||
|
runApplication $decompDict decomposePar
|
||||||
|
|
||||||
|
runParallel $decompDict snappyHexMesh -overwrite
|
||||||
|
|
||||||
|
# Restore initial fields
|
||||||
|
restore0Dir -processor
|
||||||
|
|
||||||
|
runParallel $decompDict splitMeshRegions -cellZones -overwrite
|
||||||
|
|
||||||
|
# Remove fluid fields from solid regions (important for post-processing)
|
||||||
|
for region in $(foamListRegions solid)
|
||||||
|
do
|
||||||
|
rm -f 0/$region/{nut,alphat,epsilon,k,U,p_rgh}
|
||||||
|
rm -f processor*/0/$region/{nut,alphat,epsilon,k,U,p_rgh}
|
||||||
|
done
|
||||||
|
|
||||||
|
for region in $(foamListRegions)
|
||||||
|
do
|
||||||
|
runParallel $decompDict -s $region changeDictionary -region $region
|
||||||
|
done
|
||||||
|
|
||||||
|
# Redistribute onto fewer processors, with special treatment for heater
|
||||||
|
for region in $(foamListRegions)
|
||||||
|
do
|
||||||
|
runParallel -np 6 -s redist-$region \
|
||||||
|
redistributePar -overwrite -region $region
|
||||||
|
done
|
||||||
|
|
||||||
|
#-- Run in parallel
|
||||||
|
runParallel $(getApplication)
|
||||||
|
|
||||||
|
# Reconstruct
|
||||||
|
for region in $(foamListRegions)
|
||||||
|
do
|
||||||
|
runParallel -s reconstruct-$region \
|
||||||
|
redistributePar -reconstruct -region $region
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Use paraFoam -touch-all to create files for paraview post-processing"
|
||||||
|
echo
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd ${0%/*} || exit 1 # Run from this directory
|
||||||
|
. $WM_PROJECT_DIR/bin/tools/RunFunctions # Tutorial run functions
|
||||||
|
|
||||||
|
rm -rf constant/polyMesh/sets
|
||||||
|
|
||||||
|
runApplication blockMesh
|
||||||
|
runApplication surfaceFeatureExtract
|
||||||
|
|
||||||
|
runApplication snappyHexMesh -overwrite
|
||||||
|
|
||||||
|
# Restore initial fields
|
||||||
|
restore0Dir
|
||||||
|
|
||||||
|
runApplication splitMeshRegions -cellZones -overwrite
|
||||||
|
|
||||||
|
# Remove fluid fields from solid regions (important for post-processing)
|
||||||
|
for region in $(foamListRegions solid)
|
||||||
|
do
|
||||||
|
rm -f 0/$region/{nut,alphat,epsilon,k,U,p_rgh}
|
||||||
|
done
|
||||||
|
|
||||||
|
for region in $(foamListRegions)
|
||||||
|
do
|
||||||
|
runApplication -s $region changeDictionary -region $region
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# Run on single processor
|
||||||
|
runApplication $(getApplication)
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Use paraFoam -touch-all to create files for paraview post-processing"
|
||||||
|
echo
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
@ -37,6 +37,10 @@ U
|
|||||||
type fixedValue;
|
type fixedValue;
|
||||||
value uniform (0 0 0);
|
value uniform (0 0 0);
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,6 +55,11 @@ T
|
|||||||
type zeroGradient;
|
type zeroGradient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
|
|
||||||
"bottomAir_to_.*"
|
"bottomAir_to_.*"
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
||||||
@ -74,6 +83,10 @@ epsilon
|
|||||||
type epsilonWallFunction;
|
type epsilonWallFunction;
|
||||||
value uniform 0.01;
|
value uniform 0.01;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,6 +101,10 @@ k
|
|||||||
type kqRWallFunction;
|
type kqRWallFunction;
|
||||||
value uniform 0.1;
|
value uniform 0.1;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,6 +119,10 @@ p_rgh
|
|||||||
type fixedFluxPressure;
|
type fixedFluxPressure;
|
||||||
value uniform 1e5;
|
value uniform 1e5;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,6 +137,10 @@ p
|
|||||||
type calculated;
|
type calculated;
|
||||||
value uniform 1e5;
|
value uniform 1e5;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,48 +0,0 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
|
||||||
| ========= | |
|
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
|
||||||
| \\ / O peration | Version: plus |
|
|
||||||
| \\ / A nd | Web: www.OpenFOAM.com |
|
|
||||||
| \\/ M anipulation | |
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
FoamFile
|
|
||||||
{
|
|
||||||
version 2.0;
|
|
||||||
format ascii;
|
|
||||||
class dictionary;
|
|
||||||
object decomposeParDict;
|
|
||||||
}
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
numberOfSubdomains 4;
|
|
||||||
|
|
||||||
//- Keep owner and neighbour on same processor for faces in zones:
|
|
||||||
// preserveFaceZones (heater solid1 solid3);
|
|
||||||
|
|
||||||
method scotch;
|
|
||||||
// method hierarchical;
|
|
||||||
// method simple;
|
|
||||||
// method manual;
|
|
||||||
|
|
||||||
coeffs
|
|
||||||
{
|
|
||||||
n (2 2 1);
|
|
||||||
//delta 0.001; // default=0.001
|
|
||||||
//order xyz; // default=xzy
|
|
||||||
dataFile "decompositionData";
|
|
||||||
}
|
|
||||||
|
|
||||||
scotchCoeffs
|
|
||||||
{
|
|
||||||
//processorWeights
|
|
||||||
//(
|
|
||||||
// 1
|
|
||||||
// 1
|
|
||||||
// 1
|
|
||||||
// 1
|
|
||||||
//);
|
|
||||||
//writeGraph true;
|
|
||||||
//strategy "b";
|
|
||||||
}
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
../decomposeParDict
|
||||||
@ -19,30 +19,25 @@ numberOfSubdomains 4;
|
|||||||
//- Keep owner and neighbour on same processor for faces in zones:
|
//- Keep owner and neighbour on same processor for faces in zones:
|
||||||
// preserveFaceZones (heater solid1 solid3);
|
// preserveFaceZones (heater solid1 solid3);
|
||||||
|
|
||||||
// method scotch;
|
method scotch;
|
||||||
method hierarchical;
|
|
||||||
// method simple;
|
regions
|
||||||
// method manual;
|
{
|
||||||
|
heater
|
||||||
|
{
|
||||||
|
numberOfSubdomains 1;
|
||||||
|
method simple;
|
||||||
|
|
||||||
|
coeffs
|
||||||
|
{
|
||||||
|
n (1 1 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
coeffs
|
coeffs
|
||||||
{
|
{
|
||||||
n (2 2 1);
|
n (2 2 1);
|
||||||
//delta 0.001; // default=0.001
|
|
||||||
//order xyz; // default=xzy
|
|
||||||
dataFile "decompositionData";
|
|
||||||
}
|
|
||||||
|
|
||||||
scotchCoeffs
|
|
||||||
{
|
|
||||||
//processorWeights
|
|
||||||
//(
|
|
||||||
// 1
|
|
||||||
// 1
|
|
||||||
// 1
|
|
||||||
// 1
|
|
||||||
//);
|
|
||||||
//writeGraph true;
|
|
||||||
//strategy "b";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -41,6 +41,10 @@ T
|
|||||||
type zeroGradient;
|
type zeroGradient;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
"heater_to_.*"
|
"heater_to_.*"
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
||||||
|
|||||||
@ -1,49 +0,0 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
|
||||||
| ========= | |
|
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
|
||||||
| \\ / O peration | Version: plus |
|
|
||||||
| \\ / A nd | Web: www.OpenFOAM.com |
|
|
||||||
| \\/ M anipulation | |
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
FoamFile
|
|
||||||
{
|
|
||||||
version 2.0;
|
|
||||||
format ascii;
|
|
||||||
class dictionary;
|
|
||||||
object decomposeParDict;
|
|
||||||
}
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
numberOfSubdomains 4;
|
|
||||||
|
|
||||||
//- Keep owner and neighbour on same processor for faces in zones:
|
|
||||||
// preserveFaceZones (heater solid1 solid3);
|
|
||||||
|
|
||||||
method scotch;
|
|
||||||
// method hierarchical;
|
|
||||||
// method simple;
|
|
||||||
// method manual;
|
|
||||||
|
|
||||||
coeffs
|
|
||||||
{
|
|
||||||
n (2 2 1);
|
|
||||||
//delta 0.001; // default=0.001
|
|
||||||
//order xyz; // default=xzy
|
|
||||||
dataFile "decompositionData";
|
|
||||||
}
|
|
||||||
|
|
||||||
scotchCoeffs
|
|
||||||
{
|
|
||||||
//processorWeights
|
|
||||||
//(
|
|
||||||
// 1
|
|
||||||
// 1
|
|
||||||
// 1
|
|
||||||
// 1
|
|
||||||
//);
|
|
||||||
//writeGraph true;
|
|
||||||
//strategy "b";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
../decomposeParDict
|
||||||
@ -37,6 +37,10 @@ T
|
|||||||
type zeroGradient;
|
type zeroGradient;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
"leftSolid_to_.*"
|
"leftSolid_to_.*"
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
||||||
|
|||||||
@ -37,6 +37,10 @@ T
|
|||||||
type zeroGradient;
|
type zeroGradient;
|
||||||
value uniform 300;
|
value uniform 300;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
"rightSolid_to_.*"
|
"rightSolid_to_.*"
|
||||||
{
|
{
|
||||||
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
type compressible::turbulentTemperatureCoupledBaffleMixed;
|
||||||
|
|||||||
@ -25,6 +25,10 @@ U
|
|||||||
type fixedValue;
|
type fixedValue;
|
||||||
value uniform (0 0 0);
|
value uniform (0 0 0);
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
minX
|
minX
|
||||||
{
|
{
|
||||||
type fixedValue;
|
type fixedValue;
|
||||||
@ -49,6 +53,10 @@ T
|
|||||||
{
|
{
|
||||||
type zeroGradient;
|
type zeroGradient;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
|
|
||||||
minX
|
minX
|
||||||
{
|
{
|
||||||
@ -83,6 +91,10 @@ epsilon
|
|||||||
type epsilonWallFunction;
|
type epsilonWallFunction;
|
||||||
value uniform 0.01;
|
value uniform 0.01;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
|
|
||||||
minX
|
minX
|
||||||
{
|
{
|
||||||
@ -109,6 +121,10 @@ k
|
|||||||
type kqRWallFunction;
|
type kqRWallFunction;
|
||||||
value uniform 0.1;
|
value uniform 0.1;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
|
|
||||||
minX
|
minX
|
||||||
{
|
{
|
||||||
@ -135,6 +151,10 @@ p_rgh
|
|||||||
type fixedFluxPressure;
|
type fixedFluxPressure;
|
||||||
value uniform 1e5;
|
value uniform 1e5;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
|
|
||||||
maxX
|
maxX
|
||||||
{
|
{
|
||||||
@ -155,6 +175,10 @@ p
|
|||||||
type calculated;
|
type calculated;
|
||||||
value uniform 1e5;
|
value uniform 1e5;
|
||||||
}
|
}
|
||||||
|
"procBoundary.*"
|
||||||
|
{
|
||||||
|
type processor;
|
||||||
|
}
|
||||||
|
|
||||||
maxX
|
maxX
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
#-------------------------------*- makefile -*---------------------------------
|
#-------------------------------*- makefile -*---------------------------------
|
||||||
WM_VERSION = OPENFOAM_PLUS=1706
|
WM_VERSION = OPENFOAM_PLUS=1712
|
||||||
|
|
||||||
AR = ar
|
AR = ar
|
||||||
ARFLAGS = cr
|
ARFLAGS = cr
|
||||||
|
|||||||
Reference in New Issue
Block a user