OpenFOAM中使用字典和IOobject类实现输入输出操作
编译自:http://openfoamwiki.net/index.php/Input/Output_operations_using_dictionaries_and_the_IOobject_class
OpenFOAM中很多输入输出的操作都是使用IOobject类来实现的,其头文件说明了它的功能:
IOobject定义了对象的一些由objectRegistry隐式管理时所需要的属性,同时还提供了基础性的输入/输出流。一个IOobject
对象在构造的时候需要六个参数:对象名称,类名称,实例路径,一个objectRegistry的引用,以及描述读写方式的参数。
1 IOobject的构造函数
IOobject类有两种构造函数
- 从对象名称,实例路径,objectRegistry引用和读写设置来构造。
IOobject ( const word & name, const word & instance, const objectRegistry & registry, readOption r = NO_READ, writeOption w = NO_WRITE, bool registerObject = true )
- 从对象名称,实例路径,位置,objectRegistry引用和读写设置来构造。
IOobject ( const word & name, const word & instance, const fileName & local, const objectRegistry & registry, readOption r = NO_READ, writeOption w = NO_WRITE, bool registerObject = true )
在阅读以上的代码片段时,请注意word是从string派生出来的,fileName也是从string派生出来的。除此之外,Time和polyMesh
是从objectRegistry继承而来。 因此,作为polyMesh的派生类,fvMesh同样也是objectRegistry非直接继承的派生类。
2 读设置选项
读设置选项定义了对象在构造和显示调用读操作时的行为:
- MUST_READ
在对象构造时必须从Istream中读取,如果Istream不存在或者不能读取时会产生一个错误信息。
- READ_IF_PRESENT
如果Istream存在,则读取对象,否则不读取。仅仅在Istream存在但是不可读取的情况下才会产生错误信息。
- NO_READ
不读取对象
3 写设置选项
写选项定义了对象在析构和显式调用读操作时的行为。
- AUTO_WRITE
当objectRegistry要求写的时候会自动写。
- NO_WRITE
在对象析构的时候不会自动写,但是可以显式调用写操作。
4 IOobject和字典
字典在声明的同时可以使用IOobject进行读取。通常,一个字典的内容是设置信息时,其读设置选项会设置成MUST_READ,而写设置
选项则设置为NO_WRITE以防设置信息被错误的覆盖。例如通常用来读取输运性质的transportProperties字典的定义:
IOdictionary transportProperties ( IOobject ( "transportProperties", runTime.constant(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ) );
本例中使用了第一种构造函数,其中:
- "transportProperties" 是含有字典的文件名称。
- runTime.constant()实例路径,给出字典的位置,在本例中存在于算例的constant路径下。
- objectRegistry为mesh(前面提过polyMesh和fvMesh都是是objectRegistry的派生类)。
5 IOobject和场
类似于字典,对于场数据的读写设置同样也可以通过IOobject类来实现。对于各种类型的场来说,调用的语法甚至都是相同的,可以
参见下面的例子。如果我们想定义一个名字叫做T的volScalarField场,并将其每个时间点计算的场数据保存下来,并放在以时间点命
名的路径下,可以这样实现:
volScalarField T ( IOobject ( "T", runTime.timeName(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE ), mesh );
其中:
- "T" 为文件名。
- runTime.timeName()实例路径,这里是告诉OpenFOAM将每个文件存在以运行时间为名称的路径下面。
- mesh是所需的objectRegistry。
- 读/写设置选项设置为MUST_READ和AUTO_WRITE以便OpenFOAM可以读取场数据并自动保存。如果不需要读场数据,则需要将MUST_READ
- 改为NO_READ。