latestTime handlind

This commit is contained in:
mattijs
2008-12-03 11:19:26 +00:00
parent 928a283a6a
commit 881c6451a5

View File

@ -56,22 +56,12 @@ Foam::List<bool> Foam::timeSelector::selected(const List<instant>& Times) const
{ {
List<bool> lst(Times.size(), false); List<bool> lst(Times.size(), false);
// check ranges // check ranges, avoid false positive on constant/
forAll(Times, i) forAll(Times, timeI)
{ {
if (selected(Times[i])) if (Times[timeI].name() != "constant" && selected(Times[timeI]))
{ {
lst[i] = true; lst[timeI] = true;
}
}
// avoid false positive on "constant"
forAll(Times, i)
{
if (Times[i].name() == "constant")
{
lst[i] = false;
break;
} }
} }
@ -85,15 +75,15 @@ Foam::List<bool> Foam::timeSelector::selected(const List<instant>& Times) const
int nearestIndex = -1; int nearestIndex = -1;
scalar nearestDiff = Foam::GREAT; scalar nearestDiff = Foam::GREAT;
forAll(Times, timeIndex) forAll(Times, timeI)
{ {
if (Times[timeIndex].name() == "constant") continue; if (Times[timeI].name() == "constant") continue;
scalar diff = fabs(Times[timeIndex].value() - target); scalar diff = fabs(Times[timeI].value() - target);
if (diff < nearestDiff) if (diff < nearestDiff)
{ {
nearestDiff = diff; nearestDiff = diff;
nearestIndex = timeIndex; nearestIndex = timeI;
} }
} }
@ -156,6 +146,27 @@ Foam::List<Foam::instant> Foam::timeSelector::select
{ {
List<bool> selectTimes(timeDirs.size(), true); List<bool> selectTimes(timeDirs.size(), true);
// determine locations of constant/ and 0/ directories
label constantIdx = -1;
label zeroIdx = -1;
forAll(timeDirs, timeI)
{
if (timeDirs[timeI].name() == "constant")
{
constantIdx = timeI;
}
else if (timeDirs[timeI].value() == 0)
{
zeroIdx = timeI;
}
if (constantIdx >= 0 && zeroIdx >= 0)
{
break;
}
}
if (args.options().found("time")) if (args.options().found("time"))
{ {
selectTimes = timeSelector selectTimes = timeSelector
@ -166,25 +177,31 @@ Foam::List<Foam::instant> Foam::timeSelector::select
else if (args.options().found("latestTime")) else if (args.options().found("latestTime"))
{ {
selectTimes = false; selectTimes = false;
const label latestIdx = timeDirs.size() - 1;
// avoid false match on constant/ or 0/ // avoid false match on constant/ or 0/
if (timeDirs.size() > 2) if (latestIdx != constantIdx && latestIdx != zeroIdx)
{ {
selectTimes[timeDirs.size() - 1] = true; selectTimes[latestIdx] = true;
} }
} }
if (timeDirs.size() > 1) // special treatment for constant/
if (constantIdx >= 0)
{ {
selectTimes[0] = args.options().found("constant"); selectTimes[constantIdx] = args.options().found("constant");
}
// special treatment for 0/
if (zeroIdx >= 0)
{
if (args.options().found("noZero")) if (args.options().found("noZero"))
{ {
selectTimes[1] = false; selectTimes[zeroIdx] = false;
} }
else if (argList::validOptions.found("zeroTime")) else if (argList::validOptions.found("zeroTime"))
{ {
selectTimes[1] = args.options().found("zeroTime"); selectTimes[zeroIdx] = args.options().found("zeroTime");
} }
} }