Input and Output operations using dictionaries and the IOobject class

Материал из ru.wiki.laduga.ru
Версия от 13:24, 29 декабря 2020; Laduga (обсуждение | вклад) (IOobject конструкторы)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск


Многие операции ввода-вывода выполняются в 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