Time.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2024 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::Time
26 
27 Description
28  Class to control time during OpenFOAM simulations that is also the
29  top-level objectRegistry.
30 
31 SourceFiles
32  Time.C
33  TimeIO.C
34  findInstance.C
35 
36 \*---------------------------------------------------------------------------*/
37 
38 #ifndef Time_H
39 #define Time_H
40 
41 #include "TimePaths.H"
42 #include "objectRegistry.H"
43 #include "controlIOdictionary.H"
44 #include "FIFOStack.H"
45 #include "clock.H"
46 #include "cpuTime.H"
47 #include "TimeState.H"
48 #include "userTime.H"
49 #include "Switch.H"
50 #include "instantList.H"
51 #include "NamedEnum.H"
52 #include "typeInfo.H"
53 #include "dlLibraryTable.H"
54 #include "functionObjectList.H"
55 #include "sigWriteNow.H"
56 #include "sigStopAtWriteNow.H"
57 
58 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
59 
60 namespace Foam
61 {
62 
63 // Forward declaration of classes
64 class argList;
65 
66 /*---------------------------------------------------------------------------*\
67  Class Time Declaration
68 \*---------------------------------------------------------------------------*/
69 
70 class Time
71 :
72  public clock,
73  public cpuTime,
74  public TimePaths,
75  public objectRegistry,
76  public TimeState
77 {
78  // Private Data
79 
80  //- Is runtime modification of dictionaries allowed?
81  Switch runTimeModifiable_;
82 
83  friend class controlIOdictionary;
84 
85  //- The controlDict
86  controlIOdictionary controlDict_;
87 
88 
89 public:
90 
91  //- Write control options
92  enum class writeControl
93  {
94  timeStep,
95  runTime,
97  clockTime,
98  cpuTime
99  };
100 
101  //- Stop-run control options
102  enum class stopAtControl
103  {
104  endTime,
105  noWriteNow,
106  writeNow,
107  nextWrite
108  };
109 
110  //- Supported time directory name formats
111  enum class format
112  {
113  general = 0,
116  };
117 
119 
121 
122 
123 protected:
124 
125  // Protected data
126 
128  scalar startTime_;
129  mutable scalar endTime_;
130  scalar beginTime_;
131 
132  //- Optional user-time, defaults to realTime in s
134 
135  mutable stopAtControl stopAt_;
136 
138 
139  scalar writeInterval_;
140 
143 
144  // One-shot writing
145  bool writeOnce_;
146 
147  //- Is the time currently being sub-cycled?
148  bool subCycling_;
149 
150  //- If time is being sub-cycled this is the previous TimeState
152 
153  // Signal handlers for writing
154 
155  //- Enable one-shot writing upon signal
157 
158  //- Enable write and clean exit upon signal
160 
161 
162  //- Time directory name format
163  static format format_;
164 
165  //- Time directory name precision
166  static int precision_;
167 
168  //- Current time directory name precision adjusted as necessary
169  // to ensure time directory names are unique
170  // particularly if the time-step is reduced during the run
171  static int curPrecision_;
172 
173  //- Maximum time directory name precision
174  static const int maxPrecision_;
175 
176  //- Adjust the time step so that writing occurs at the specified time
177  void adjustDeltaT();
178 
179  //- Set the controls from the current controlDict
180  void setControls();
181 
182  //- Read the control dictionary and set the write controls etc.
183  virtual void readDict();
184 
185 
186 private:
187 
188  //- Default write option
189  IOstream::streamFormat writeFormat_;
190 
191  //- Default output file format version number
192  IOstream::versionNumber writeVersion_;
193 
194  //- Default output compression
195  IOstream::compressionType writeCompression_;
196 
197  //- Is temporary object cache enabled
198  mutable bool cacheTemporaryObjects_;
199 
200  //- Function objects executed at start and on ++, +=
201  mutable functionObjectList functionObjects_;
202 
203 
204 public:
205 
206  TypeName("time");
207 
208  //- The default control dictionary name (normally "controlDict")
209  static word controlDictName;
210 
211 
212  // Constructors
213 
214  //- Construct given name of dictionary to read and argument list
215  Time
216  (
217  const word& name,
218  const argList& args,
219  const bool enableFunctionObjects = true
220  );
221 
222  //- Construct given name of dictionary to read, rootPath and casePath
223  Time
224  (
225  const word& name,
226  const fileName& rootPath,
227  const fileName& caseName,
228  const bool enableFunctionObjects = true
229  );
230 
231  //- Construct given dictionary, rootPath and casePath
232  Time
233  (
234  const dictionary& dict,
235  const fileName& rootPath,
236  const fileName& caseName,
237  const bool enableFunctionObjects = true
238  );
239 
240  //- Construct given endTime, rootPath and casePath
241  Time
242  (
243  const fileName& rootPath,
244  const fileName& caseName,
245  const bool enableFunctionObjects = true
246  );
247 
248 
249  //- Destructor
250  virtual ~Time();
251 
252 
253  // Member Functions
254 
255  // Database functions
256 
257  //- Explicitly inherit rootPath from TimePaths to disambiguate from
258  // the corresponding method in objectRegistry
259  using TimePaths::rootPath;
260 
261  //- Explicitly inherit caseName from TimePaths to disambiguate from
262  // the corresponding method in objectRegistry
263  using TimePaths::caseName;
264 
265  //- Explicitly inherit path from TimePaths to disambiguate from
266  // the corresponding method in objectRegistry
267  using TimePaths::path;
268 
269  //- Return the control dict
270  const IOdictionary& controlDict() const
271  {
272  return controlDict_;
273  }
274 
275  //- Local directory path of this objectRegistry relative to time
276  virtual const fileName& dbDir() const
277  {
278  return fileName::null;
279  }
280 
281  //- Return current time path
282  fileName timePath() const
283  {
284  return path()/name();
285  }
286 
287  //- Default write format
289  {
290  return writeFormat_;
291  }
292 
293  //- Default write version number
295  {
296  return writeVersion_;
297  }
298 
299  //- Default write compression
301  {
302  return writeCompression_;
303  }
304 
305  //- Supports re-reading
306  const Switch& runTimeModifiable() const
307  {
308  return runTimeModifiable_;
309  }
310 
311  //- Read the objects that have been modified
312  void readModifiedObjects();
313 
314  //- Return the location of "dir" containing the file "name".
315  // (eg, used in reading mesh data)
316  // If name is null, search for the directory "dir" only.
317  // Does not search beyond stopInstance (if set) or constant.
319  (
320  const fileName& dir,
321  const word& name = word::null,
323  const word& stopInstance = word::null
324  ) const;
325 
326  //- Search the case for valid time directories
327  instantList times() const;
328 
329  //- Search the case for the time directory path
330  // corresponding to the given instance
331  word findInstancePath(const fileName& path, const instant&) const;
332 
333  //- Search the case for the time directory path
334  // corresponding to the given instance
335  word findInstancePath(const instant&) const;
336 
337  //- Search the case for the time closest to the given time
338  instant findClosestTime(const scalar) const;
339 
340  //- Search instantList for the time index closest to the given time
342  (
343  const instantList&,
344  const scalar,
345  const word& constantName = "constant"
346  );
347 
348  //- Write time dictionary to the <time>/uniform directory
349  virtual bool writeTimeDict() const;
350 
351  //- Write using given format, version and compression
352  virtual bool writeObject
353  (
357  const bool write
358  ) const;
359 
360  //- Write the objects now (not at end of iteration) and continue
361  // the run
362  bool writeNow();
363 
364  //- Write the objects now (not at end of iteration) and end the run
365  bool writeAndEnd();
366 
367  //- Write the objects once (one shot) and continue the run
368  void writeOnce();
369 
370 
371  // Access
372 
374 
375  //- Return time name of given scalar time
376  // formatted with given precision
377  static word timeName
378  (
379  const scalar,
380  const int precision = curPrecision_
381  );
382 
383  //- Search a given directory for valid time directories
384  static instantList findTimes
385  (
386  const fileName&,
387  const word& constantName = "constant"
388  );
389 
390  //- Return start time index
391  virtual label startTimeIndex() const;
392 
393  //- Return begin time (initial start time)
394  virtual dimensionedScalar beginTime() const;
395 
396  //- Return start time
397  virtual dimensionedScalar startTime() const;
398 
399  //- Return end time
400  virtual dimensionedScalar endTime() const;
401 
402  //- Return the userTime
403  const userTimes::userTime& userTime() const;
404 
405  //- Return current user time value
406  scalar userTimeValue() const;
407 
408  //- Return user time step value
409  scalar userDeltaTValue() const;
410 
411  //- Convert the user-time (e.g. CA deg) to real-time (s).
412  scalar userTimeToTime(const scalar tau) const;
413 
414  //- Convert the real-time (s) into user-time (e.g. CA deg)
415  scalar timeToUserTime(const scalar t) const;
416 
417  //- Return current user time name with units
418  word userTimeName() const;
419 
420  //- Return the user-time unit conversion
421  const unitConversion& userUnits() const;
422 
423  //- Return the write interval units
424  const unitConversion& writeIntervalUnits() const;
425 
426  //- Return the list of function objects
427  const functionObjectList& functionObjects() const
428  {
429  return functionObjects_;
430  }
431 
432  //- Return true if the run is a restart, i.e. startTime != beginTime
433  bool restart() const
434  {
435  return startTime_ != beginTime_;
436  }
437 
438  //- Return true if time currently being sub-cycled, otherwise false
439  bool subCycling() const
440  {
441  return subCycling_;
442  }
443 
444  //- Return previous TimeState if time is being sub-cycled
445  const TimeState& prevTimeState() const
446  {
447  return prevTimeState_();
448  }
449 
450 
451  // Check
452 
453  //- Return true if run should continue without any side effects
454  virtual bool running() const;
455 
456  //- Return true if run should continue,
457  // also invokes the functionObjectList::end() method
458  // when the time goes out of range
459  // \note
460  // For correct behaviour, the following style of time-loop
461  // is recommended:
462  // \code
463  // while (runTime.run())
464  // {
465  // runTime++;
466  // solve;
467  // runTime.write();
468  // }
469  // \endcode
470  virtual bool run() const;
471 
472  //- Return true if run should continue and if so increment time
473  // also invokes the functionObjectList::end() method
474  // when the time goes out of range
475  // \note
476  // For correct behaviour, the following style of time-loop
477  // is recommended:
478  // \code
479  // while (runTime.loop())
480  // {
481  // solve;
482  // runTime.write();
483  // }
484  // \endcode
485  virtual bool loop();
486 
487  //- Return true if end of run,
488  // does not invoke any functionObject methods
489  // \note
490  // The rounding heuristics near endTime mean that
491  // \code run() \endcode and \code !end() \endcode may
492  // not yield the same result
493  virtual bool end() const;
494 
495 
496  // Edit
497 
498  //- Adjust the current stopAtControl. Note that this value
499  // only persists until the next time the dictionary is read.
500  // Return true if the stopAtControl changed.
501  virtual bool stopAt(const stopAtControl) const;
502 
503  //- Reset the time and time-index to those of the given time
504  virtual void setTime(const Time&);
505 
506  //- Reset the time and time-index
507  virtual void setTime(const instant&, const label newIndex);
508 
509  //- Reset the time and time-index
510  virtual void setTime
511  (
512  const dimensionedScalar&,
513  const label newIndex
514  );
515 
516  //- Reset the time and time-index
517  virtual void setTime(const scalar, const label newIndex);
518 
519  //- Reset end time
520  virtual void setEndTime(const dimensionedScalar&);
521 
522  //- Reset end time
523  virtual void setEndTime(const scalar);
524 
525  //- Reset time step
526  virtual void setDeltaT(const dimensionedScalar&);
527 
528  //- Reset time step
529  virtual void setDeltaT(const scalar);
530 
531  //- Reset time step without additional adjustment or modification
532  // by function objects
533  virtual void setDeltaTNoAdjust(const scalar);
534 
535  //- Reset the write interval
536  virtual void setWriteInterval(const scalar writeInterval);
537 
538  //- Set time to sub-cycle for the given number of steps
539  virtual TimeState subCycle(const label nSubCycles);
540 
541  //- Reset time after sub-cycling back to previous TimeState
542  virtual void endSubCycle();
543 
544  //- Return non-const access to the list of function objects
546  {
547  return functionObjects_;
548  }
549 
550 
551  // Member Operators
552 
553  //- Set deltaT to that specified and increment time via operator++()
554  virtual Time& operator+=(const dimensionedScalar&);
555 
556  //- Set deltaT to that specified and increment time via operator++()
557  virtual Time& operator+=(const scalar);
558 
559  //- Prefix increment,
560  // also invokes the functionObjectList::start() or
561  // functionObjectList::execute() method, depending on the time-index
562  virtual Time& operator++();
563 
564  //- Postfix increment, this is identical to the prefix increment
565  virtual Time& operator++(int);
566 };
567 
568 
569 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
570 
571 } // End namespace Foam
572 
573 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
574 
575 #endif
576 
577 // ************************************************************************* //
A FIFO stack based on a singly-linked list.
Definition: FIFOStack.H:54
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Definition: IOdictionary.H:57
readOption
Enumeration defining the read options.
Definition: IOobject.H:117
Version number type.
Definition: IOstream.H:97
streamFormat
Enumeration for the format of data in the stream.
Definition: IOstream.H:87
compressionType
Enumeration for the format of data in the stream.
Definition: IOstream.H:194
A simple wrapper around bool so that it can be read as a word: true/false, on/off,...
Definition: Switch.H:61
A class for addressing time paths without using the Time class.
Definition: TimePaths.H:49
fileName path() const
Return path.
Definition: TimePaths.H:138
static const word constantName
Definition: TimePaths.H:62
const fileName & caseName() const
Return case name.
Definition: TimePaths.H:106
const fileName & rootPath() const
Return root path.
Definition: TimePaths.H:94
The time value with time-stepping information, user-defined remapping, etc.
Definition: TimeState.H:55
friend class Time
Declare friendship with the Time class.
Definition: TimeState.H:70
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:76
virtual bool run() const
Return true if run should continue,.
Definition: Time.C:901
virtual void readDict()
Read the control dictionary and set the write controls etc.
Definition: TimeIO.C:32
static int precision_
Time directory name precision.
Definition: Time.H:165
scalar timeToUserTime(const scalar t) const
Convert the real-time (s) into user-time (e.g. CA deg)
Definition: Time.C:850
instantList times() const
Search the case for valid time directories.
Definition: Time.C:651
virtual void setTime(const Time &)
Reset the time and time-index to those of the given time.
Definition: Time.C:985
const TimeState & prevTimeState() const
Return previous TimeState if time is being sub-cycled.
Definition: Time.H:444
const unitConversion & userUnits() const
Return the user-time unit conversion.
Definition: Time.C:869
virtual bool writeTimeDict() const
Write time dictionary to the <time>/uniform directory.
Definition: TimeIO.C:222
bool writeAndEnd()
Write the objects now (not at end of iteration) and end the run.
Definition: TimeIO.C:317
virtual dimensionedScalar startTime() const
Return start time.
Definition: Time.C:802
static const NamedEnum< stopAtControl, 4 > stopAtControlNames
Definition: Time.H:117
sigStopAtWriteNow sigStopAtWriteNow_
Enable write and clean exit upon signal.
Definition: Time.H:158
bool writeNow()
Write the objects now (not at end of iteration) and continue.
Definition: TimeIO.C:310
const unitConversion & writeIntervalUnits() const
Return the write interval units.
Definition: Time.C:875
static instantList findTimes(const fileName &, const word &constantName="constant")
Search a given directory for valid time directories.
Definition: findTimes.C:36
static int curPrecision_
Current time directory name precision adjusted as necessary.
Definition: Time.H:170
void adjustDeltaT()
Adjust the time step so that writing occurs at the specified time.
Definition: Time.C:84
format
Supported time directory name formats.
Definition: Time.H:111
scalar userTimeToTime(const scalar tau) const
Convert the user-time (e.g. CA deg) to real-time (s).
Definition: Time.C:844
fileName path() const
Explicitly inherit path from TimePaths to disambiguate from.
Definition: TimePaths.H:138
scalar writeInterval_
Definition: Time.H:138
TypeName("time")
stopAtControl stopAt_
Definition: Time.H:134
virtual dimensionedScalar beginTime() const
Return begin time (initial start time)
Definition: Time.C:791
FIFOStack< word > previousWriteTimes_
Definition: Time.H:141
scalar userTimeValue() const
Return current user time value.
Definition: Time.C:830
scalar userDeltaTValue() const
Return user time step value.
Definition: Time.C:836
void writeOnce()
Write the objects once (one shot) and continue the run.
Definition: TimeIO.C:326
static const int maxPrecision_
Maximum time directory name precision.
Definition: Time.H:173
autoPtr< TimeState > prevTimeState_
If time is being sub-cycled this is the previous TimeState.
Definition: Time.H:150
word findInstance(const fileName &dir, const word &name=word::null, const IOobject::readOption rOpt=IOobject::MUST_READ, const word &stopInstance=word::null) const
Return the location of "dir" containing the file "name".
Definition: Time.C:658
virtual bool writeObject(IOstream::streamFormat, IOstream::versionNumber, IOstream::compressionType, const bool write) const
Write using given format, version and compression.
Definition: TimeIO.C:258
const Switch & runTimeModifiable() const
Supports re-reading.
Definition: Time.H:305
virtual void setWriteInterval(const scalar writeInterval)
Reset the write interval.
Definition: Time.C:1081
virtual void setEndTime(const dimensionedScalar &)
Reset end time.
Definition: Time.C:1045
IOstream::versionNumber writeVersion() const
Default write version number.
Definition: Time.H:293
word userTimeName() const
Return current user time name with units.
Definition: Time.C:856
label purgeWrite_
Definition: Time.H:140
bool subCycling() const
Return true if time currently being sub-cycled, otherwise false.
Definition: Time.H:438
IOstream::streamFormat writeFormat() const
Default write format.
Definition: Time.H:287
writeControl writeControl_
Definition: Time.H:136
sigWriteNow sigWriteNow_
Enable one-shot writing upon signal.
Definition: Time.H:155
virtual bool running() const
Return true if run should continue without any side effects.
Definition: Time.C:895
void setControls()
Set the controls from the current controlDict.
Definition: Time.C:110
word findInstancePath(const fileName &path, const instant &) const
Search the case for the time directory path.
Definition: Time.C:689
virtual void setDeltaT(const dimensionedScalar &)
Reset time step.
Definition: Time.C:1057
static word controlDictName
The default control dictionary name (normally "controlDict")
Definition: Time.H:208
scalar endTime_
Definition: Time.H:128
static word timeName(const scalar, const int precision=curPrecision_)
Return time name of given scalar time.
Definition: Time.C:641
virtual const fileName & dbDir() const
Local directory path of this objectRegistry relative to time.
Definition: Time.H:275
bool writeOnce_
Definition: Time.H:144
autoPtr< userTimes::userTime > userTime_
Optional user-time, defaults to realTime in s.
Definition: Time.H:132
stopAtControl
Stop-run control options.
Definition: Time.H:102
@ nextWrite
stop the next time data are written
@ writeNow
set endTime to stop immediately w/ writing
@ endTime
stop when Time reaches the prescribed endTime
@ noWriteNow
set endTime to stop immediately w/o writing
static format format_
Time directory name format.
Definition: Time.H:162
const IOdictionary & controlDict() const
Return the control dict.
Definition: Time.H:269
virtual bool stopAt(const stopAtControl) const
Adjust the current stopAtControl. Note that this value.
Definition: Time.C:967
const userTimes::userTime & userTime() const
Return the userTime.
Definition: Time.C:824
virtual label startTimeIndex() const
Return start time index.
Definition: Time.C:785
label startTimeIndex_
Definition: Time.H:126
virtual void endSubCycle()
Reset time after sub-cycling back to previous TimeState.
Definition: Time.C:1123
virtual void setDeltaTNoAdjust(const scalar)
Reset time step without additional adjustment or modification.
Definition: Time.C:1074
IOstream::compressionType writeCompression() const
Default write compression.
Definition: Time.H:299
virtual Time & operator++()
Prefix increment,.
Definition: Time.C:1149
static const NamedEnum< writeControl, 5 > writeControlNames
Definition: Time.H:119
scalar startTime_
Definition: Time.H:127
void readModifiedObjects()
Read the objects that have been modified.
Definition: TimeIO.C:200
fileName timePath() const
Return current time path.
Definition: Time.H:281
scalar beginTime_
Definition: Time.H:129
virtual TimeState subCycle(const label nSubCycles)
Set time to sub-cycle for the given number of steps.
Definition: Time.C:1109
writeControl
Write control options.
Definition: Time.H:92
virtual bool loop()
Return true if run should continue and if so increment time.
Definition: Time.C:948
bool subCycling_
Is the time currently being sub-cycled?
Definition: Time.H:147
bool restart() const
Return true if the run is a restart, i.e. startTime != beginTime.
Definition: Time.H:432
virtual dimensionedScalar endTime() const
Return end time.
Definition: Time.C:813
virtual ~Time()
Destructor.
Definition: Time.C:632
static label findClosestTimeIndex(const instantList &, const scalar, const word &constantName="constant")
Search instantList for the time index closest to the given time.
Definition: Time.C:760
virtual Time & operator+=(const dimensionedScalar &)
Set deltaT to that specified and increment time via operator++()
Definition: Time.C:1136
virtual bool end() const
Return true if end of run,.
Definition: Time.C:961
instant findClosestTime(const scalar) const
Search the case for the time closest to the given time.
Definition: Time.C:723
const fileName & caseName() const
Explicitly inherit caseName from TimePaths to disambiguate from.
Definition: TimePaths.H:106
const functionObjectList & functionObjects() const
Return the list of function objects.
Definition: Time.H:426
const fileName & rootPath() const
Explicitly inherit rootPath from TimePaths to disambiguate from.
Definition: TimePaths.H:94
Extract command arguments and options from the supplied argc and argv parameters.
Definition: argList.H:103
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: autoPtr.H:51
Read access to the system clock with formatting.
Definition: clock.H:51
controlDict specific IOdictionary to provide automatic read-update for Time
Starts timing CPU usage and return elapsed time from start.
Definition: cpuTime.H:55
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:162
const word & name() const
Return const reference to name.
A class for handling file names.
Definition: fileName.H:82
static const fileName null
An empty fileName.
Definition: fileName.H:97
List of function objects with start(), execute() and end() functions that is called for each object.
An instant of time. Contains the time value and name.
Definition: instant.H:67
Registry of regIOobjects.
virtual bool write(const bool write=true) const
Write using setting from DB.
Signal handler to write and exit when the stopAtWriteNowSignal is sent.
Signal handler to write when the writeNowSignal is sent.
Definition: sigWriteNow.H:64
Unit conversion structure. Contains the associated dimensions and the multiplier with which to conver...
A class for handling words, derived from string.
Definition: word.H:62
static const word null
An empty word.
Definition: word.H:77
Namespace for OpenFOAM.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
IOstream & fixed(IOstream &io)
Definition: IOstream.H:573
IOstream & scientific(IOstream &io)
Definition: IOstream.H:579
dictionary dict
Foam::argList args(argc, argv)
Basic run-time type information using word as the type's name. Used to enhance the standard RTTI to c...