ENH: topoSet: time loop

This commit is contained in:
mattijs
2011-06-21 18:56:20 +01:00
parent 1dfe404536
commit a38774d7e6
3 changed files with 223 additions and 120 deletions

View File

@ -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) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -33,15 +33,72 @@ Description
#include "cellSet.H" #include "cellSet.H"
#include "faceSet.H" #include "faceSet.H"
#include "pointSet.H" #include "pointSet.H"
#include "globalMeshData.H"
#include "timeSelector.H"
using namespace Foam; using namespace Foam;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
void printMesh(const Time& runTime, const polyMesh& mesh)
{
Info<< "Time:" << runTime.timeName()
<< " cells:" << mesh.globalData().nTotalCells()
<< " faces:" << mesh.globalData().nTotalFaces()
<< " points:" << mesh.globalData().nTotalPoints()
<< " patches:" << mesh.boundaryMesh().size()
<< " bb:" << mesh.bounds() << nl;
}
polyMesh::readUpdateState meshReadUpdate(polyMesh& mesh)
{
polyMesh::readUpdateState stat = mesh.readUpdate();
switch(stat)
{
case polyMesh::UNCHANGED:
{
Info<< " mesh not changed." << endl;
break;
}
case polyMesh::POINTS_MOVED:
{
Info<< " points moved; topology unchanged." << endl;
break;
}
case polyMesh::TOPO_CHANGE:
{
Info<< " topology changed; patches unchanged." << nl
<< " ";
printMesh(mesh.time(), mesh);
break;
}
case polyMesh::TOPO_PATCH_CHANGE:
{
Info<< " topology changed and patches changed." << nl
<< " ";
printMesh(mesh.time(), mesh);
break;
}
default:
{
FatalErrorIn("meshReadUpdate(polyMesh&)")
<< "Illegal mesh update state "
<< stat << abort(FatalError);
break;
}
}
return stat;
}
// Main program: // Main program:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
timeSelector::addOptions(true, false);
argList::addOption argList::addOption
( (
"dict", "dict",
@ -57,6 +114,9 @@ int main(int argc, char *argv[])
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"
instantList timeDirs = timeSelector::selectIfPresent(runTime, args);
# include "createNamedPolyMesh.H" # include "createNamedPolyMesh.H"
const bool noSync = args.optionFound("noSync"); const bool noSync = args.optionFound("noSync");
@ -99,18 +159,30 @@ int main(int argc, char *argv[])
// Read set construct info from dictionary // Read set construct info from dictionary
PtrList<dictionary> patchSources(topoSetDict.lookup("actions")); PtrList<dictionary> actions(topoSetDict.lookup("actions"));
forAll(patchSources, i) forAll(timeDirs, timeI)
{ {
const dictionary& dict = patchSources[i]; runTime.setTime(timeDirs[timeI], timeI);
Info<< "Time = " << runTime.timeName() << endl;
// Optionally re-read mesh
meshReadUpdate(mesh);
// Execute all actions
forAll(actions, i)
{
const dictionary& dict = actions[i];
const word setName(dict.lookup("name")); const word setName(dict.lookup("name"));
const word actionName(dict.lookup("action")); const word actionName(dict.lookup("action"));
const word setType(dict.lookup("type")); const word setType(dict.lookup("type"));
topoSetSource::setAction action = topoSetSource::toAction(actionName); topoSetSource::setAction action = topoSetSource::toAction
(
actionName
);
autoPtr<topoSet> currentSet; autoPtr<topoSet> currentSet;
if if
@ -141,7 +213,8 @@ int main(int argc, char *argv[])
// Handle special actions (clear, invert) locally, rest through sources. // Handle special actions (clear, invert) locally, rest through
// sources.
switch (action) switch (action)
{ {
case topoSetSource::NEW: case topoSetSource::NEW:
@ -223,6 +296,7 @@ int main(int argc, char *argv[])
<< endl; << endl;
} }
} }
}
Info<< "\nEnd\n" << endl; Info<< "\nEnd\n" << endl;

View File

@ -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) 2004-2010 OpenCFD Ltd. \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -51,7 +51,7 @@ bool Foam::timeSelector::selected(const instant& value) const
} }
Foam::List<bool> Foam::timeSelector::selected(const List<instant>& Times) const Foam::List<bool> Foam::timeSelector::selected(const instantList& Times) const
{ {
List<bool> lst(Times.size(), false); List<bool> lst(Times.size(), false);
@ -97,19 +97,14 @@ Foam::List<bool> Foam::timeSelector::selected(const List<instant>& Times) const
} }
Foam::List<Foam::instant> Foam::timeSelector::select Foam::List<Foam::instant> Foam::timeSelector::select(const instantList& Times)
( const
const List<instant>& Times
) const
{ {
return subset(selected(Times), Times); return subset(selected(Times), Times);
} }
void Foam::timeSelector::inplaceSelect void Foam::timeSelector::inplaceSelect(instantList& Times) const
(
List<instant>& Times
) const
{ {
inplaceSubset(selected(Times), Times); inplaceSubset(selected(Times), Times);
} }
@ -159,7 +154,7 @@ void Foam::timeSelector::addOptions
Foam::List<Foam::instant> Foam::timeSelector::select Foam::List<Foam::instant> Foam::timeSelector::select
( (
const List<instant>& timeDirs, const instantList& timeDirs,
const argList& args const argList& args
) )
{ {
@ -270,4 +265,29 @@ Foam::List<Foam::instant> Foam::timeSelector::select0
} }
Foam::List<Foam::instant> Foam::timeSelector::selectIfPresent
(
Time& runTime,
const argList& args
)
{
if
(
args.optionFound("latestTime")
|| args.optionFound("time")
|| args.optionFound("constant")
|| args.optionFound("noZero")
|| args.optionFound("zeroTime")
)
{
return select0(runTime, args);
}
else
{
// No timeSelector option specified. Do not change runTime.
return instantList(1, instant(runTime.value(), runTime.timeName()));
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -72,7 +72,7 @@ SourceFiles
#define timeSelector_H #define timeSelector_H
#include "scalarRanges.H" #include "scalarRanges.H"
#include "instant.H" #include "instantList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -109,13 +109,13 @@ public:
//- Return the set of selected instants in the given list that are //- Return the set of selected instants in the given list that are
// within the ranges // within the ranges
List<bool> selected(const List<instant>&) const; List<bool> selected(const instantList&) const;
//- Select a list of Time values that are within the ranges //- Select a list of Time values that are within the ranges
List<instant> select(const List<instant>&) const; instantList select(const instantList&) const;
//- Select a list of Time values that are within the ranges //- Select a list of Time values that are within the ranges
void inplaceSelect(List<instant>&) const; void inplaceSelect(instantList&) const;
//- Add the options handled by timeSelector to argList::validOptions //- Add the options handled by timeSelector to argList::validOptions
// //
@ -135,15 +135,24 @@ public:
); );
//- Return the set of times selected based on the argList options //- Return the set of times selected based on the argList options
static List<instant> select static instantList select
( (
const List<instant>&, const instantList&,
const argList& args const argList& args
); );
//- Return the set of times selected based on the argList options //- Return the set of times selected based on the argList options
// also set the runTime to the first instance // also set the runTime to the first instance
static List<instant> select0 static instantList select0
(
Time& runTime,
const argList& args
);
//- If any time option provided return the set of times (as select0)
// otherwise return just the current time.
// Also set the runTime to the first instance
static instantList selectIfPresent
( (
Time& runTime, Time& runTime,
const argList& args const argList& args