Ранее поминался метод подобластей, послуживший отправной точкой для ряда численных методов. Одним из таких методов является метод конечных объемов. Этот же метод является представителем еще одного широко распространившегося класса – интегральных методов. От классической формы записи метода подобластей взято разбиение расчетной области на подобласти и интегрирование невязки по подобласти. Отличием является отсутствие явной записи аппроксимирующей (пробной) функции. Но, по-прежнему, пытаемся «точно» решить уравнение в каждой подобласти. Поэтому по подобласти интегрируется исходное уравнение. Интегральные методы характеризуются тем, что сначала берется интеграл от дифференциального уравнения, получается интегральная форма записи уравнения. Затем уравнение в этой форме применяют к отдельным ячейкам сетки. В данном случае ячейки и подобласти – это одно и то же.

На самом деле, интегральная форма записи уравнений имеет (с точки зрения физики) даже более широкую область применения, чем дифференциальная. Дело в том, что при наличии разрывов функции, дифференциальные уравнения неприменимы, а их интегральные аналоги продолжают работать, работать и работать…. К сожалению, при их численной реализации это преимущество иногда утрачивается.

Как правило, интегралы от уравнений имеют простой и понятный физический смысл. Для примера рассмотрим уравнение неразрывности. Исходное дифференциальное уравнение записывается

проинтегрируем его по объему V, имеющему поверхность S, и по времени в интервале от t 0 до t 1 . При интегрировании производных воспользуемся формулой Стокса (частные случаи ее носят названия формул Грина и Остроградского-Гаусса). В результате получаем

В этой записи разность между первыми двумя интегралами означает изменение массы в заданном объеме за рассматриваемый интервал времени. А двойной интеграл показывает массу, втекающую в данный объем через ограничивающую его поверхность за тот же промежуток времени. Естественно, раз речь идет о численных методах, то эти интегралы считаются приближенно. И здесь начинаются вопросы аппроксимации, аналогичные тем, что рассматривались в методе конечных разностей.



Рассмотрим один из простейших случаев – двумерная прямоугольная равномерная сетка. В методе конечных объемов обычно значения функций определяются не в узлах сетки, а в центрах ячеек. Индексируются, соответственно, тоже не линии сетки в каждом направлении, а слои ячеек (см. рис.).

j-1
j
j+1
k-1
k
k+1
A
B
C
D

Для данного случая интегральная форма уравнения запишется так

Как видим, в данном случае мы получили обычное уравнение, какое могли написать и с помощью метода конечных разностей. Значит, к нему можно применять и те же методы исследования устойчивости. (Вопрос «на засыпку»: а устойчива ли данная схема?)

Но если мы получили то же самое, то стоило ли городить весь этот огород? В простейших случаях действительно никаких преимуществ мы не получаем. Но в ситуациях посложнее преимущества проявляются. Во-первых, как отмечалось выше, такие методы (даже в такой простейшей реализации) гораздо лучше описывают разрывы и области с высокими градиентами. При этом гарантируется выполнение законов сохранения массы, импульса и энергии, так как они соблюдаются в каждой ячейке. Во-вторых, эти методы выдерживают самые разнообразные издевательства над сеткой. Даже криволинейные, неравномерные и нерегулярные сетки не выбивают эти методы из колеи. Особенно часто эти преимущества ощущаются при задании граничных условий.

j-1
j
j+1
k-1
k
k+1
A
B
C
D
E

Например, для случая показанного на рисунке интегральная форма уравнения будет иметь вид

то есть просто там, где интеграл брали по площади полной ячейки, теперь берем по площади «обрезанной», там, где брали интеграл по полному ребру, теперь берем по оставшейся его части. Добавился интеграл по участку границы. Но он легко находится из граничных условий. В частности, если через стенку не подается массовый расход (а также не уносится масса с поверхности и/или пренебрегаем массовым потоком ионов, теряющих заряд на стенке), то такой интеграл просто равен нулю. В аналогичной записи уравнения энергии поток через стенку, как правило, приходится учитывать. Но его тоже нетрудно найти из граничных условий (если они правильно поставлены).

Для закрепления распишем, как будет выглядеть применение метода конечных объемов к одному из уравнений сохранения импульса. Возьмем плоский стационарный случай для однозарядных ионов. Пренебрежем вязкостью и упругими столкновениями. Получаем уравнение

Для прямоугольной сетки (см рис. выше) получаем

Простейшая аппроксимация такого уравнения запишется так

после сокращений получаем формулу

Некоторое время назад я искал описание операций, процессов, происходящих в библиотеке численного моделирования OpenFOAM. Нашел много абстрактных описаний работы метода конечных объёмов, классических разностных схем, различных физических уравнений. Мне же хотелось узнать более детально - откуда в таком-то выходном файле на такой-то итерации получились эти значения, какие выражения стоят за теми или иными параметрами в файлах настроек fvSchemes, fvSolution?
Для тех, кому это тоже интересно - эта статья. Те, кто хорошо знаком с OpenFOAM или с методами в нём реализованными - пишите о найденных ошибках и неточностях в личку.

На хабре уже была пара статей про OpenFOAM:

Поэтому не буду останавливаться на том, что это «открытая (GPL) платформа для численнного моделирования, предназначенная для моделирования, связанного с решением уравнений в частных производных методом конечных объёмов, и широко используемая для решения задач механики сплошных сред».

Сегодня я на простом примере опишу операции, которые происходят в ходе расчёта в OpenFOAM.

Итак, дана геометрия - куб со стороной 1 метр:

Перед нами стоит задача смоделировать поток-распространение некоторого скалярного поля (температура, количество вещества), который задаётся следующим уравнением переноса (1) внутри объема тела.

(1)
,

Где скалярная величина, например, выражает температуру [K] или концентрацию некоторого вещества, а выражает перенос вещества, массовый поток [кг/с].

Это уравнение, например, используют для моделирования распространения тепла
,
где k - теплопроводность, а - температура [K].

Оператор дивергенции на самом деле это

оператор .
Напомню, что существует оператор набла (оператор Гамильтона), который записывается следующим образом:
,

Где i, j, k - единичные векторы.
Если скалярно умножить оператор набла на векторную величину, то мы получим дивергенцию данного вектора:

«С точки зрения физики, дивергенция векторного поля является показателем того, в какой степени данная точка пространства является источником или стоком этого поля»

Если умножить оператор набла на скаляр, получается градиент этого скаляра:

Градиент показывает увеличение или уменьшение по какому-либо направлению величины скаляра .


Граничные условия задачи следующие: есть грань-вход, грань-выход, остальные грани - гладкие стенки.

Разбиение объема куба на конечные объемы

Наша сетка будет очень простая - делим куб на 5 равных ячеек вдоль оси Z.

Много формул

Метод конечных объёмов предусматривает, что (1) в интегральной форме (2) будет выполняться для каждого конечного объёма .

(2)
,

Где - геометрический центр конечного объёма.

Центр конечного объема


Упростим, преобразуем первое слагаемое выражения (2) следующим образом:

(2.1) (HJ-3.12)*

Как видно - мы приняли, что скалярная величина изменяется внутри конечного объема линейно и значение величины в некоторой точке внутри конечного объёма можно вычислить как:

Для упрощения второго слагаемого выражения (2) используем обобщённую теорему Гаусса-Остроградского : интеграл от дивергенции векторного поля по объёму , равен потоку вектора через поверхность , ограничивающую данный объём. На человеческом языке «сумма всех потоков в/из конечного объема равна сумме потоков через грани этого конечного объема»:

(2.3)
,

Где замкнутая поверхность, ограничивающая объём ,
- вектор, направленный по нормали от объёма .

Вектор S



Учитывая то, что конечный объём ограничен набором плоских граней, можно выражение (2.3) преобразовать к сумме интегралов по поверхности:

(2.4) (HJ-3.13)
,

Где выражает значение переменной в центре грани,
- вектор площади, выходит из центра грани, направлен в сторону от ячейки (локально), в сторону от ячейки с меньшим индексом к ячейке с большим индексом (глобально).

Еще немного про вектор S

Чтобы не хранить одни и те же параметры вектора два раза, т.к. очевидно, что у двух соседних ячеек вектор-нормали к грани между ячейками, направленный в сторону От центра ячейки будет различаться только направлением-знаком. Поэтому было создано owner-neighbour отношение между гранью и ячейкой. Если вектор площади (глобальный, положительное направление от ячейки с меньшим индексом к ячейке с большим индексом) указывает ОТ центра ячейки такое отношение между ячейкой и вектором , а точнее между ячейкой и гранью, обозначается owner). В случае если этот вектор указывает внутрь рассматриваемой ячейки, то отношение neighbour. Направление влияет на знак величины (+ для owner и - для neighbour) и это важно при суммировании см. далее.

Про разностные схемы

Значение в центре грани вычисляется через значения в центрах прилегающих ячеек - способ такого выражения носит название разностной схемы. В OpenFOAM тип разностной схемы задается в файле /system/fvSchemes :

DivSchemes { default none; div(phi,psi) Gauss linear; }

Gauss - означает, что выбрана центральная разностная схема;
linear - означает, что интерполяция с центров ячеек на центры граней будет происходить линейно.

Допустим, что наша скалярная величина изменяется внутри конечного объема от центра к граням линейно. Тогда аппроксимированное в центре грани значение будет вычисляться согласно формуле:

Где веса и рассчитываются как

Где - объемы ячеек.
Для случаев скошенных ячеек существуют более сложные формулы расчета весов аппроксимации.

Таким образом, значения phi_f в центрах граней ячеек вычисляются на основе значений в центрах ячеек. Значения градиентов grad(phi) вычисляются на основе значений phi_f.
И весь этот алгоритм может быть представлен в виде следующего псевдокода.
1. Объявляем массив градиентов конечных объемов, инициализируем его нулями 2. Пробегаемся по всем внутренним граням (которые не граничные) > Вычисляем flux_f = phi_f*S_f. Значения phi_f вычисляем на основе значений phi в центах ячеек > Добавляем flux_f к градиенту элемента-owner и -flux_f к градиенту элемента-neighbour 3. Пробегаемся по всем граничным граням > Вычисляем flux_f = phi_f*S_f > Добавляем flux_f к градиенту элементу-owner (neighbour-элементов у граничных граней нет) 4. Пробегаемся по всем элементам > Делим получившуюся сумму-градиент на объем элемента

Дискретизация по времени

Учитывая (2.1) и (2.4) выражение (2) принимает вид:

(3)

Согласно методу конечных объёмов проводится дискретизация по времени и выражение (3) записывается как:

(4)

Проинтегрируем (4):

(4.1)

Разделим левую и правую часть на :

(5)

Данные для матрицы дискретизации

Теперь мы можем получить систему линейных уравнений для каждого конечного объёма .

Ниже представлена нумерация узлов сетки, которую мы будем использовать.

Координаты узлов хранятся в /constant/polyMesh/points

24 ((0 0 0) (1 0 0) (0 1 0) (1 1 0) (0 0 0.2) (1 0 0.2) (0 1 0.2) (1 1 0.2) (0 0 0.4) (1 0 0.4) (0 1 0.4) (1 1 0.4) (0 0 0.6) (1 0 0.6) (0 1 0.6) (1 1 0.6) (0 0 0.8) (1 0 0.8) (0 1 0.8) (1 1 0.8) (0 0 1) (1 0 1) (0 1 1) (1 1 1))

Нумерация узлов-центров ячеек (50, 51 - центры граничных граней):

Нумерация узлов-центров граней:

Объемы элементов:

Коэффициенты интерполяции, необходимые для вычисления значений на гранях ячеек. Индекс «e» обозначает «правая грань ячейки». Правая относительно вида, как на рисунке «Нумерация узлов-центров ячеек»:

Формирование матрицы дискретизации

Для P = 0.
Выражение (5), описывающее поведение величины

Будет преобразовано в систему линейных алгебраических уравнений, каждое из которых вида:

Или, согласно индексам точек на гранях

А еще все потоки в/из ячейки могут быть выражены в виде суммы

Где, например, - коэффициент линеаризации потока в точке-центре ячейки E,
- коэффициент линеаризации потока в точке-центре грани,
- нелинейная часть (например, константа).

Согласно нумерации граней выражение примет вид:

С учетом граничных условий для элемента P_0 линейное алгебраическое уравнение может быть представлено в виде

… подставим ранее полученные коэффициенты…

Поток из inlet"a направлен в ячейку, поэтому имеет отрицательный знак.

Так как у нас в управляющем выражении присутствует кроме диффузионного еще и временной член, но конечное уравнение выглядит как

Для P = 1.

Для P = 4.

Система линейных алгебраических уравнений (СЛАУ) может быть представлена в матричном виде как

A(i,j) === 40.5 0.5 0 0 0 -0.5 40 0.5 0 0 0 -0.5 40 0.5 0 0 0 -0.5 40 0.5 0 0 0 -0.5 40.5

Psi = dimensions ; internalField nonuniform List 5(0.0246875 0.000308546 3.85622e-06 4.81954e-08 5.95005e-10);

На основе которого получаются значения для вектора

Затем вектор подставляется в СЛАУ и происходит новая итерация расчёта вектора .

И так до тех пор, пока невязка не достигнет требуемых пределов.

Ссылки

* Некоторые уравнения в этой статье взяты из диссертации Ясака Хрвое (HJ - номер уравнения) и если кому-то захочется прочитать про них подробнее (

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

Основная идея метода достаточно проста и легко поддается физической интерпретации. При дискретизации уравнений Навье-Стокса, осредненных по Рейнольдсу, расчетная область разбивается на большое количество непересекающихся элементарных объемов, таким образом, чтобы каждый объем содержал только одну расчетную (узловую) точку. Совокупность элементарных объемов называется расчетной сеткой. Ячейки сетки могут иметь различную форму. Наиболее часто используются шестигранники (гексаэдры) и четырехгранники (тетраэдры). Метод контрольного объема позволяет использовать ячейки с произвольным числом граней (пирамиды, призмы, сложные многогранники и т. п.).

Решение системы уравнений (1)–(18) представляется в виде набора значений искомых параметров в центрах этих объемов. Например, если разбить объем помещения на 1000 отдельных элементарных объемов (ячеек), то в результате решения мы будем иметь 1000 значений температуры, скорости, давления и т. д. На рис. 2 представлен фрагмент расчетной области. Ячейки пронумерованы индексами i, j, k .

Рис. 2. Фрагмент расчетной области

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

Следует отметить, что в большинстве современных расчетных гидродинамических пакетах таких как «STAR-CD», «FLUENT», «CFX» и многих других для дискретизации уравнений модели реализован метод контрольного объема.

Расчетные сетки

Процесс построения сетки относится к ключевым моментам проведения численного эксперимента. Выбор и построение адекватной для рассматриваемой задачи расчетной сетки является достаточно сложной и трудоемкой процедурой. Рациональный выбор сетки может значительно упростить численное решение задачи.

Рис. 3. Конфигурации ячеек сеток

Ячейки сетки могут иметь разную форму (рис. 3) и размеры, наилучшим образом подходящие для решения конкретной задачи. Наиболее простой вид сетки, когда ячейки одинаковы и имеют кубическую форму.

Как правило, вблизи твердых поверхностей сетка сгущается, т. е. ячейки имеют меньший размер по нормали к поверхности. Это делается для повышения точности расчетов в тех областях, где градиенты потоков изучаемых параметров изменяются быстрее, например, в пограничном слое.

Повысить точность расчетов и уменьшить ошибку аппроксимации можно 2 способами:

· повышением порядка точности дискретизации;

· уменьшением шага по сетке .

При решении нестационарных задач размеры ячеек Δx и шаг интегрирования по времени Δt связанны условием КФЛ (Куранта-Фридрихса-Леви): , u – скорость.

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

В пакете STAR-CCM осуществлен переход на использование полиэдральных ячеек (похожих на футбольный мяч), что позволяет за счет объединения ячеек исключить появление сильно скошенных ячеек.

Основное преимущество неструктурированных сеток по сравнению с регулярными – заключается в большей гибкости при дискретизации физической области сложной формы. При этом ячейки сетки должны иметь соизмеримые объемы или площади и не должны пересекаться. Однако к недостаткам такого типа сеток относится увеличение размерности сетки. Как показывает практика, для одного и того же объекта неструктурированная сетка при ее правильном построении имеет примерно в два раза больше ячеек, чем структурированная, что естественно приводит к увеличению времени счета по отношению к регулярным сеткам. Однако во многих случаях неструктурированные сетки являются единственно возможным вариантом построения из-за сложности геометрии объекта. Кроме того, при рациональном выборе алгоритма построения сетки время, затрачиваемое на построение неструктурированной сетки, оказывается существенно меньше, чем время построения структурированной (блочно-структурированной) сетки. В результате суммарное время, затраченное на решение задачи (включая время построения сетки и время счета), может при использовании неструктурированных сеток оказаться намного меньше, чем в случае структурированных.

Определение требуемой размерности сетки, само по себе, является весьма сложной задачей. Универсальный способ, которым следует руководствоваться при выборе размерности сетки, сводится к тому, что получаемое решение не должно изменяться при увеличении количества ячеек (сеточная сходимость).

Для типовых задач проведение исследования сеточной сходимости не является обязательным, так как можно ориентироваться на полученные ранее результаты. При переходе к изучению нового типа задач следует в обязательном порядке выполнить исследование сеточной сходимости и определелить требования к расчетной сетке.

Отметим, что при решении реальных задач вентиляции и кондиционирования воздуха характерное количество ячеек составляет, как правило, от 500 тысяч до 3 – 4 млн. в зависимости от геометрической сложности объекта, набора искомых параметров и специфики задачи. При этом время счета на кластере, состоящем, например из 24 ядер, может доходить до недели, а при решении нестационарных задач – до нескольких недель.

Пакет STAR-CCM+ включает в себя модуль для построения расчетных сеток. Существуют также отдельные пакеты для построения сеток, например, широко используемая – ANSYS, ICEM CFD (ICEM). Построенные во внешних пакетах сетки могут быть импортированы в пакет STAR-CCM+.

алгоритм программа моделирование

Отправной точкой метода конечных объёмов (МКО) является интегральная формулировка законов сохранения массы, импульса, энергии и др. Балансовые соотношения записываются для небольшого контрольного объема; их дискретный аналог получается суммированием по всем граням выделенного объема потоков массы, импульса и т.д., вычисленных по каким - либо квадратурным формулам. Поскольку интегральная формулировка законов сохранения не накладывает ограничений на форму контрольного объема, МКО пригоден для дискретизации уравнений гидрогазодинамики как на структурированных, так и на неструктурированных сетках с различной формой ячеек, что, в принципе, полностью решает проблему сложной геометрии расчетной области.

Следует заметить, однако, что использование неструктурированных сеток является довольно сложным в алгоритмическом отношении, трудоемким при реализации и ресурсоемким при проведении расчетов, в особенности при решении трехмерных задач. Это связано как с многообразием возможных форм ячеек расчетной сетки, так и с необходимостью применения более сложных методов для решения системы алгебраических уравнений, не имеющей определенной структуры. Практика последних лет показывает, что развитые разработки вычислительных средств, базирующихся на использовании неструктурированных сеток, по силам лишь достаточно крупным компаниям, имеющим соответствующие людские и финансовые ресурсы. Гораздо более экономичным оказывается использование блочно-структурированных сеток, предполагающее разбиение области течения на несколько подобластей (блоков) относительно простой формы, в каждой из которых строится своя расчетная сетка. В целом такая составная сетка не является структурированной, однако внутри каждого блока сохраняется обычная индексная нумерация узлов, что позволяет использовать эффективные алгоритмы, разработанные для структурированных сеток. Фактически, для перехода от одноблочной сетки к многоблочной необходимо лишь организовать стыковку блоков, т.е. обмен данными между соприкасающимися подобластями для учета их взаимного влияния. Заметим также, что разбиение задачи на отдельные относительно независимые блоки естественным образом вписывается в концепцию параллельных вычислений на кластерных системах с обработкой отдельных блоков на разных процессорах (компьютерах). Все это делает использование блочно-структурированных сеток в сочетании с МКО сравнительно простым, но чрезвычайно эффективным средством расширения геометрии решаемых задач, что исключительно важно для небольших университетских групп, разрабатывающих собственные программы в области гидрогазодинамики.

Отмеченные выше достоинства МКО послужили основанием к тому, что в начале 1990-х гг. именно этот подход с ориентацией на использование блочно-структурированных сеток был выбран авторами в качестве основы для разработки собственного пакета программ широкого профиля для задач гидрогазодинамики и конвективного теплообмена.