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