Input and Output operations using dictionaries and the IOobject class
Многие операции ввода-вывода выполняются в OpenFOAM с помощью класса IOobject, который описывается в его заголовочном файле следующим образом:
IOobject определяет атрибуты объекта, для которого поддерживается неявное управление objectRegistry, и предоставляет инфраструктуру для работы потока ввода-вывода (I/O). IOobject содержит имя объекта, имя класса, путь к сущности (instance), ссылку на objectRegistry, и параметры, определяющие параметры его хранения.
Содержание
IOobject
конструкторы
Конструктор IOobject
может иметь 2 формы:
1. Построение из имени (name), сущности (instance), реестра и IO-опций:
IOobject ( const word & name, const word & instance, const objectRegistry & registry, readOption r = NO_READ, writeOption w = NO_WRITE, bool registerObject = true )
2. Построение из имени, сущности (instance), расположения (local), реестра и IO-опций:
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
. Более того, Time
и polyMesh
наследуют objectRegistry
. Как следствие fvMesh
, наследуя polyMesh
, косвенно наследует и objectRegistry
. Дополнительные сведения смотрите в справочнике IOobject class reference.
Параметры чтения
Параметры чтения, определяющие, что делается при создании объекта и явном чтении:
-
MUST_READ
– объект должен быть считан изIstream
при создании. ЕслиIstream
не существует или не может быть прочитан, выдаётся сообщение об ошибке. -
READ_IF_PRESENT
– считывает объект изIstream
еслиIstream
существует, в противном случае, нет. Сообщение об ошибке выдаётся только в том случае, еслиIstream
существует, но не может быть прочитан. -
NO_READ
– не читать объект.
Параметры записи
Параметрами записи, определяющие, что делается при уничтожении объекта и записи в явном виде:
-
AUTO_WRITE
– объект записывается автоматически по запросуobjectRegistry
. -
NO_WRITE
– объект не записывается автоматически при уничтожении, но может быть записан явно.
IOobject
и словари
Словари могут быть прочитаны с помощью класса IOobject
, когда они объявлены. Обычно readOption
для словаря - это MUST_READ
, а writeOption
это NO_WRITE
, чтобы не перезаписывать настройки, содержащиеся в словаре .
Например, код, необходимый для чтения словаря transportProperties
это:
IOdictionary transportProperties ( IOobject ( "transportProperties", runTime.constant(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ) );
В этом случае принимается первая форма конструктора, где:
-
transportProperties
это имя файла, содержащего словарь. -
runTime.constant()
, инстанс, задающий расположение словаря, который в данном случае содержится директорииconstant
. -
objectRegistry
представлен сеткой (mesh).
IOobject
и поля
Аналогично словарям, параметры чтения и записи для поля можно задать с помощью класса IOobject
. Синтаксис почти одинаков для всех типов полей, и показан на следующем примере.
Если мы хотим определить volScalarField
с именем T
, сохраняя его в определённые пользователем интервалы времени в файле с именем T
:
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
.
Ссылка на оригинал - http://openfoamwiki.net/index.php/OpenFOAM_guide/Input_and_Output_operations_using_dictionaries_and_the_IOobject_class