OpenFOAM中使用字典和IOobject类实现输入输出操作

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的派生类)。


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。

你可能感兴趣的:(OpenFOAM用户手册)