ENH: improve robustness of outputFilterOutputControl

This commit is contained in:
Mark Olesen
2010-05-18 09:24:46 +02:00
parent db07daf6ba
commit 7abd54708c
3 changed files with 33 additions and 16 deletions

View File

@ -33,25 +33,25 @@ Foam::NamedEnum<Enum, nEnum>::NamedEnum()
: :
HashTable<int>(2*nEnum) HashTable<int>(2*nEnum)
{ {
for (int i=0; i<nEnum; i++) for (int enumI = 0; enumI < nEnum; ++enumI)
{ {
if (!names[i] || names[i][0] == '\0') if (!names[enumI] || names[enumI][0] == '\0')
{ {
stringList goodNames(i); stringList goodNames(enumI);
for (int j = 0; j < i; j++) for (int i = 0; i < enumI; ++i)
{ {
goodNames[j] = names[j]; goodNames[i] = names[i];
} }
FatalErrorIn("NamedEnum<Enum, nEnum>::NamedEnum()") FatalErrorIn("NamedEnum<Enum, nEnum>::NamedEnum()")
<< "Illegal enumeration name at position " << i << endl << "Illegal enumeration name at position " << enumI << endl
<< "after entries " << goodNames << ".\n" << "after entries " << goodNames << ".\n"
<< "Possibly your NamedEnum<Enum, nEnum>::names array" << "Possibly your NamedEnum<Enum, nEnum>::names array"
<< " is not of size " << nEnum << endl << " is not of size " << nEnum << endl
<< abort(FatalError); << abort(FatalError);
} }
insert(names[i], i); insert(names[enumI], enumI);
} }
} }
@ -61,7 +61,7 @@ Foam::NamedEnum<Enum, nEnum>::NamedEnum()
template<class Enum, int nEnum> template<class Enum, int nEnum>
Enum Foam::NamedEnum<Enum, nEnum>::read(Istream& is) const Enum Foam::NamedEnum<Enum, nEnum>::read(Istream& is) const
{ {
word name(is); const word name(is);
HashTable<int>::const_iterator iter = find(name); HashTable<int>::const_iterator iter = find(name);
@ -71,7 +71,7 @@ Enum Foam::NamedEnum<Enum, nEnum>::read(Istream& is) const
( (
"NamedEnum<Enum, nEnum>::read(Istream&) const", is "NamedEnum<Enum, nEnum>::read(Istream&) const", is
) << name << " is not in enumeration: " ) << name << " is not in enumeration: "
<< toc() << exit(FatalIOError); << sortedToc() << exit(FatalIOError);
} }
return Enum(iter()); return Enum(iter());

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) 1991-2009 OpenCFD Ltd. \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -68,17 +68,27 @@ Foam::outputFilterOutputControl::~outputFilterOutputControl()
void Foam::outputFilterOutputControl::read(const dictionary& dict) void Foam::outputFilterOutputControl::read(const dictionary& dict)
{ {
outputControl_ = outputControlNames_.read(dict.lookup("outputControl")); if (dict.found("outputControl"))
{
outputControl_ = outputControlNames_.read(dict.lookup("outputControl"));
}
else
{
outputControl_ = ocTimeStep;
}
switch (outputControl_) switch (outputControl_)
{ {
case ocTimeStep: case ocTimeStep:
{ {
dict.lookup("outputInterval") >> outputInterval_; outputInterval_ = dict.lookupOrDefault<label>("outputInterval", 0);
break;
} }
default: default:
{ {
// do nothing // do nothing
break;
} }
} }
} }
@ -97,17 +107,21 @@ bool Foam::outputFilterOutputControl::output() const
); );
break; break;
} }
case ocOutputTime: case ocOutputTime:
{ {
return time_.outputTime(); return time_.outputTime();
break; break;
} }
default: default:
{ {
// this error should not actually be possible
FatalErrorIn("bool Foam::outputFilterOutputControl::output()") FatalErrorIn("bool Foam::outputFilterOutputControl::output()")
<< "Unknown output control: " << "Undefined output control: "
<< outputControlNames_[outputControl_] << nl << outputControlNames_[outputControl_] << nl
<< abort(FatalError); << abort(FatalError);
break;
} }
} }

View File

@ -25,6 +25,8 @@ Class
Foam::outputFilterOutputControl Foam::outputFilterOutputControl
Description Description
An output control for function objects.
The default is time-step execution at every interval.
SourceFiles SourceFiles
outputFilterOutputControl.C outputFilterOutputControl.C
@ -51,10 +53,11 @@ class outputFilterOutputControl
{ {
public: public:
//- The output control options
enum outputControls enum outputControls
{ {
ocTimeStep, ocTimeStep, /*!< execution is coupled to the time-step */
ocOutputTime ocOutputTime /*!< execution is coupled to the output-time */
}; };
@ -71,7 +74,7 @@ private:
//- Type of output //- Type of output
outputControls outputControl_; outputControls outputControl_;
//- The execution interval (in time steps) when using TIMESTEP mode //- The execution interval (in time steps) when using @c timeStep mode,
// a value <= 1 means execute at every time step // a value <= 1 means execute at every time step
label outputInterval_; label outputInterval_;