Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Diplom3.pdf
Скачиваний:
143
Добавлен:
09.02.2015
Размер:
1.48 Mб
Скачать

Продолжение таблицы 19

Функция

Описание

 

 

 

 

 

 

ParseBoundaryField()

Сканирует подсловарь граничных полей

 

ParseOneBoundary(Bound

Сканирует

отдельное граничное поле и заполняет

его

aryField &b)

параметрами объект b

 

 

 

 

 

 

 

 

 

 

ParseBoundaryParam(Bou

Сканирует

отдельный параметр

граничного поля

и

ndaryField &b)

присваивает соответствующему параметру объекта b

 

 

соответствующее значение

 

 

ParseBoundaryType(Boun

Сканирует

тип граничного поля

и присваивает полю

daryField &b)

type объекта b соответствующее значение

 

 

 

 

 

 

 

 

Как и ранее, приведенные в таблице функции вызываются функциейпарсером CopyDict.

3.2.7 Разработка класса Constant

Для решения большинства задач с помощью OpenFOAM необходимо задать константы и физические свойства. Они задаются в файлах в папке constant, и имеют названия, как правило, содержащие слово «Properties» (свойства), например, transportProperties. Содержимое файлов с константами менее детерминировано, чем содержимое словаря blockMeshDict или controlDict. Каждый решатель, вопервых, нуждается в своем наборе файлов с константами, и во-вторых, содержимое того же файла transportProperties для решения задачи с помощью одного решателя может кардинально отличаться от содержимого того же файла для другого решателя. Пример содержимого файла transportProperties представлен в листинге 6.

49

Листинг 6 — пример содержимого файла transportProperties

phase1

 

 

 

 

 

{

 

 

 

 

 

transportModel

Newtonian;

 

 

nu

 

nu [ 0 2 -1 0 0 0 0 ] 1e-06;

rho

 

rho

[ 1 -3 0 0 0 0 0 ] 1000;

CrossPowerLawCoeffs

 

 

 

{

nu0

 

nu0 [ 0 2

-1 0 0 0 0 ] 1e-06;

 

 

 

nuInf

 

nuInf [

0 2 -1 0 0 0 0 ] 1e-06;

 

m

 

m [ 0 0 1 0 0 0 0 ] 1;

}

n

 

n [ 0 0 0 0 0 0 0 ] 0;

 

 

 

 

 

BirdCarreauCoeffs

 

 

 

{

 

 

 

 

 

 

nu0

 

nu0 [ 0 2 -1 0 0 0 0 ] 0.0142515;

 

nuInf

 

nuInf [ 0 2 -1 0 0 0 0 ] 1e-06;

Листинг 6 (продолжение)

 

 

 

 

k

 

k [ 0 0 1 0 0 0 0 ] 99.6;

 

n

 

n [ 0 0 0 0 0 0 0 ] 0.1003;

}

 

 

 

 

 

}

 

 

 

 

 

phase2

 

 

 

 

 

{

 

 

 

 

 

transportModel

Newtonian;

 

 

nu

 

nu [ 0 2 -1 0 0 0 0 ] 1.48e-05;

rho

 

rho

[ 1 -3 0 0 0 0 0 ] 1;

CrossPowerLawCoeffs

 

 

 

{

nu0

 

nu0 [ 0 2 -1 0 0 0 0 ] 1e-06;

 

 

 

nuInf

 

nuInf [ 0 2 -1 0 0 0 0 ] 1e-06;

 

m

 

m [ 0 0 1 0 0 0 0 ] 1;

}

n

 

n [ 0 0 0 0 0 0 0 ] 0;

 

 

 

 

 

BirdCarreauCoeffs

 

 

 

{

 

 

 

 

 

 

nu0

 

nu0 [ 0 2 -1 0 0 0 0 ] 0.0142515;

 

nuInf

 

nuInf [ 0 2 -1 0 0 0 0 ] 1e-06;

 

k

 

k [ 0 0 1 0 0 0 0 ] 99.6;

 

n

 

n [ 0 0 0 0 0 0 0 ] 0.1003;

}

 

 

 

 

 

}

 

 

 

 

 

sigma

sigma [

1 0 -2 0 0 0 0 ] 0.07;

В приведенном листинге можно увидеть древовидную структуру параметров: некоторые параметры могут содержать вложенные параметры, заключенные в фигурные скобки. Поэтому для хранения содержимого файлов физических свойств и констант был разработан класс ConstantParameter. Его поля представлены в таблице 20.

50

Таблица 20 —Поля класса ConstantParameter

Тип

Имя поля

Описание

 

 

 

QByteArray

name

Имя параметра

 

 

 

bool

isMulti

Признак того, что параметр является подсловарем,

 

 

в который могут включаться другие параметры. В

 

 

случае, если данное поле принимает значение

 

 

true, используется поле children, иначе —

 

 

параметр не является вложенным, и его значение

 

 

хранится в поле val

 

 

 

QByteArray

val

Значение параметра в случае, если флаг isMulti

 

 

не установлен; иначе поле не используется

 

 

 

QList<constantPar

children

Список указателей на вложенные параметры в

ameter*>

 

случае, если флаг isMulti установлен, иначе поле

 

 

 

 

не используется

Класс Constant включает в себя только одно поле типа

QList<ConstantParameter> под названием cParams, которое является

списком объектов описанного выше класса ConstantParameter. Таким образом в приложении хранится древовидная структура параметров, заданных в любом из файлов констант и физических свойств.

Разработанный класс Constant можно использовать также для представления содержимого файлов fvSolution и fvSchemes. Их содержимое также сильно зависит от используемого решателя и представляет собой набор параметров, некоторые из которых могут быть вложенными, поэтому класс ConstantParameter хорошо подойдет для хранения параметров этих файлов.

3.2.8 Разработка класса SetFieldsDict

Задания неоднородных внутренних полей, как правило, не производится путем ручного ввода значения каждой ячейки, как того требует OpenFOAM. Для этого существуют специальные утилиты. Простейшим инструментом для задания неоднородных полей является утилита setFields. Она позволяет одновременно задать определенное значение физической величины для всех ячеек, ограниченных

51

определенной геометрической фигурой (например, сферой или параллелепипедом). Для использования setFields необходимо отредактировать ее словарь setFieldsDict. Пример содержимого этого словаря представлен в листинге 7.

Листинг 7 — Пример содержимого словаря setFieldsDict

defaultFieldValues

(

volScalarFieldValue alpha1 1 volScalarFieldValue p_rgh 1e5

);

regions

(

sphereToCell

{

centre (0.5 0.5 0);

Листинг 7 (продолжение)

radius 0.1; fieldValues

(

volScalarFieldValue alpha1 0 volScalarFieldValue p_rgh 1e6

);

}

boxToCell

{

box (-10 1 -1) (10 10 1); fieldValues

(

volScalarFieldValue alpha1 0

);

}

);

Структура словаря setFieldsDict такова: сначала задается список defaultFieldValues значений полей по умолчанию, затем список регионов regions, в котором задаются подсловари геометрических фигур, ячейкам внутри которых необходимо присвоить определенное значение. Полный список фигур, используемых в setFieldsDict, можно посмотреть здесь [9].

Значение поля в setFieldsDict форматируется следующим образом:

<типПоля> <физическаяВеличина> <одноЗначение>

типПоля определяет, является ли физическаяВеличина скалярной, векторной или тензорной, и принимать значения volScalarFieldValue, volVectorFieldValue, volTensorFieldValue. После типа задается

название физической величины. При этом в начальной временной должен 52

существовать файл, содержащий информацию о данном поле. После названия задается одно значение физической величины так же, как в пункте 3.2.6.

Для хранения значения поля из словаря setFieldsDict был разработан класс SetFieldsValue. Его поля приведены в таблице 21.

Таблица 21 — Поля класса SetFieldsValue

Тип

Имя поля

Описание

 

 

 

int

valSize

Содержит количество компонент значения физической

 

 

величины (для скалярной — 1, для векторной — 3, для

 

 

тензорной - 9)

 

 

 

QByteArray

name

Название физической величины. Должно совпадать с

 

 

именем одного из файлов в начальной временной папке

SingleField

value

Значение физической величины

Value

 

 

 

 

 

Для представления элементов списка regions был разработан класс Region. Его поля представлены в таблице 22.

Таблица 22 — Поля класса Region

Тип

Имя поля

Описание

 

 

 

QByteArray

name

Имя региона — подсловаря. От него зависит,

 

 

какие параметры подребуются setFields для

 

 

правильной работы

 

 

 

QList<Parameter>

geometryParams

Список параметров (текстовые имя параметра

 

 

и значение), характерных для данного региона

 

 

 

QList<SingleField

FieldValues

Список значений полей в данном регионе

Value>

 

 

 

 

 

Для представления всего словаря setFieldsDict в приложении был разработан класс SetFieldsDict. Его поля представлены в таблице 23.

53

Таблица 23 — Поля класса SetFieldsDict

Тип

Имя поля

 

Описание

 

 

 

 

 

 

 

 

 

 

 

QList<SetFieldsValue>

defaultFieldValues

Список

значений

полей

по

 

 

 

 

умолчанию, вне регионов

 

 

 

 

 

 

 

 

QList<Region>

regions

 

Список регионов

 

 

Реализованные в классе SetFieldsDict функции для сканирования

словаря setFieldsDict представлены в таблице 24.

 

 

 

 

 

Таблица 24 — Функции класса SetFieldsDict

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Функция

 

Описание

 

 

 

 

 

 

 

 

 

 

 

 

ParseDefaultFieldValues()

Сканирует

 

список

defaultFieldValues,

 

 

заполняя элементами одноименное поле-список

 

 

defaultFieldValues

 

 

 

 

 

 

 

 

 

 

ParseOneFieldValue(SetFiel

Сканирует

одно

значение

поля и

присваивает

dsValue &v)

 

соответствующее значение объекту v

 

 

 

 

 

 

 

 

 

ParseRegions()

 

Сканирует список regions, заполняя элементами

 

 

одноименное поле-список

regions

 

 

 

 

 

 

 

 

 

ParseOneRegion(Region

 

Сканирует

один

подсловарь-регион

из

списка

&reg)

 

regions, присваивая соответствующее значение

 

 

 

 

объекту reg

 

 

 

 

 

 

 

 

 

 

 

 

ParseRegionParam(Parameter

Сканирует

один

параметр

подсловаря-региона,

&p)

 

присваивая соответствующее значение объекту p

 

 

 

 

 

 

 

 

ParseRegionFieldValues(Reg

Сканирует

 

список

fieldValues

внутри

ion &reg)

 

подсловаря-региона, добавляя соответствующий

 

 

 

 

элемент в поле-список fieldValues объекта reg

 

 

 

 

 

 

 

 

 

 

Как и прежде, функции для сканирования словаря setFieldsDict запускаются функцией-парсером CopyDict.

54

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]