Вы находитесь на странице: 1из 61

И.А.

Панкратов

МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ
РЕАЛЬНЫХ ПРОЦЕССОВ В ПАКЕТЕ
OPENFOAM

Учебное пособие
для студентов и магистрантов
направлений «Прикладная математика и информатика»,
«Механика и математическое моделирование»
и других естественно-научных специальностей

Саратов 2019
УДК [533.6:004.94](075.8)
ББК 22.253я73
П 16
Рецензенты:
Доктор физико-математических наук, доцент, заведующий кафедрой
прикладной информатики и информационных технологий в управлении
Поволжского института управления имени П.А. Столыпина – филиала
РАНХиГС Кондратов Д.В.

Доктор технических наук, профессор, профессор кафедры


«Информационно-коммуникационные системы и программная
инженерия» Саратовского государственного технического университета
имени Гагарина Ю.А. Львов А.А.

Рекомендовано к публикации
Ученым советом механико-математического факультета Саратовского
национального исследовательского государственного университета имени
Н.Г. Чернышевского

Автор:
Панкратов Илья Алексеевич, к.т.н., доцент кафедры математического и
компьютерного моделирования механико-математического факультета
Саратовского национального исследовательского государственного
университета имени Н.Г. Чернышевского

Панкратов И.А.
П 16 Математическое моделирование реальных процессов в пакете
OpenFOAM: Учебное пособие / И.А. Панкратов. – Саратов: Издательство
«Саратовский источник», 2019. – 61 с.
ISBN 978-5-91879-994-9

Данное учебное пособие посвящено изучению пакета прикладных


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

Ил. 52. Табл. 1. Библиогр. 12 назв.

© Панкратов И.А., 2019


СОДЕРЖАНИЕ
Введение ................................................................................................. 4
1 Установка программного обеспечения .......................................... 7
1.1 Средства виртуализации........................................................... 7
1.2 Установка Ubuntu.................................................................... 12
1.3 Установка OpenFOAM............................................................ 17
2 Нестационарное уравнение теплопроводности ........................... 20
2.1 Постановка задачи .................................................................. 20
2.2 Построение сетки с помощью blockMesh.............................. 21
2.3 Начальные и граничные условия ........................................... 32
2.4 Параметры задачи ................................................................... 34
2.5 Примеры численного решения задачи................................... 35
2.5.1 Условия Дирихле............................................................... 35
2.5.2 Условия Неймана .............................................................. 42
2.5.3 Двумерная пластина .......................................................... 44
3 Дополнительные сведения о ParaView ......................................... 46
Литература............................................................................................ 60

3
Введение
OpenFOAM – это открытая интегрируемая платформа для
численного моделирования процессов механики сплошных сред от гидро-
и аэродинамики, включая учет процессов горения, протекания химических
реакций, турбулентности и тепломассообмена, до механики
деформируемого твердого тела и электромагнетизма. Данная программа
распространяется под лицензией GPL 3 (General Public License)
разработанной организацией Free Software Foundation и работает под
операционной системой Linux.
OpenFOAM представляет собой набор модулей для моделирования
задач из различных научных областей, позволяющих решать следующие
задачи [1]:
1. Гидродинамика ньютоновских и неньютоновских вязких жидкостей
(как несжимаемых, так и сжимаемых) с учётом конвективного
теплообмена и действием сил гравитации. Для моделирования
турбулентных течений возможно использование RANS-моделей,
LES и DNS методов. Возможно решение дозвуковых, околозвуковых
и сверхзвуковых задач.
2. Прочностные расчеты.
3. Задачи теплопроводности в твёрдом теле.
4. Многофазные задачи, в том числе с описанием химических реакций
компонент потока.
5. Задачи, связанные с деформацией расчётной сетки.
6. Сопряжённые задачи.
7. Распараллеливание расчёта, как в кластерных, так и
многопроцессорных системах.
8. Некоторые другие задачи, при математической постановке которых
требуется решение дифференциальных уравнений в частных
производных в условиях сложной геометрии среды.
Приложения можно разделить на программы-решатели,
разработанные для решения конкретных задач сплошной среды и утилиты,
разработанные для манипулирования данными, например, для конвертации
расчетной сетки из одного формата в другой.
Преимуществом OpenFOAM является то, что приложения могут
создаваться самим пользователем при знании основных принципов
строения приложений OpenFOAM.
Рабочим языком OpenFOAM является язык C++. Данный язык
выбран для удобства представления математических операторов и
выражения в удобной форме до компиляции в исполняемый файл.
Условно код OpenFOAM можно разделить на следующие части (как
и любую другую сложную программу):
1. Ядро (core) – набор файлов, определяющих основные
функциональные возможности кода;
2. Библиотеки (solvers) – содержат множество моделей механики
сплошных сред;
4
3. Исполняемые файлы (utilities) – утилиты для решения задач
механики сплошных сред, подготовки и обработки данных.
Общая схема решения состоит из подготовки исходных данных с
помощью препроцессора, процесса решения, а также обработки и
визуализации результатов вычислений с помощью постпроцессора.
Решение любой задачи в данном прикладном программном пакете
начинается с описания геометрии расчетной области, построения сетки в
ней и задания граничных условий, что является основными задачами
препроцессора. Препроцессорами являются приложения blockMesh и
snappyHexMesh, которые входят в состав OpenFOAM.
Утилита blockMesh [2] наиболее подходит в случае областей
простейшей формы. Она позволяет строить структурированные сетки,
состоящие из гексаэдров. Принцип работы blockMesh заключается в
делении всей расчетной области на трехмерные гексаэдральные блоки.
Ребрами этих блоков могут быть отрезки прямых или дуг. Сетка
получается вследствие разбиения каждого блока на определенное число
ячеек в каждом направлении. Вся необходимая информация о построении
сетки указывается в текстовом файле blockMeshDict.
Утилита snappyHexMesh [3] является более мощным
препроцессором. В отличие от blockMesh, snappyHexMesh позволяет
строить сетки достаточно высокого качества в случае более сложной
геометрии расчетной области. Процесс построения сетки в snappyHexMesh
начинается с разбиения ячеек, пересекающих границы тел, находящихся в
вычислительной области. Масштаб получаемой сетки определяется
уровнем ее измельчения. SnappyHexMesh может выполняться в
параллельном режиме, допуская построение сеток, состоящих из
миллионов ячеек, при наличии достаточного числа вычислительных ядер и
объема оперативной памяти. Рассмотрение принципов работы
snappyHexMesh выходит за рамки настоящего пособия.
Задачей решателя является подготовка системы линейных
алгебраических уравнений, аппроксимирующих исходную
математическую модель, и нахождение ее решения. OpenFOAM содержит
большое количество решателей, которые разделены на группы,
соответствующие группам решаемых задач. Известно, что при численном
решении задач математической физики часто применяется метод конечных
разностей [4]. При этом значения искомых параметров находятся лишь
в конечном наборе точек, принадлежащих расчётной области. Также
применяются различные методы взвешенных невязок [5, 6]. В этом случае
искомые величины представляются в виде линейной комбинации базисных
функций. В OpenFOAM все задачи решаются с помощью метода конечных
объёмов (см., например, пособие [7]). Этот метод основан на
аппроксимации законов сохранения в интегральной форме. Внутри каждой
группы решатели учитывают особенности конкретных математических
моделей, а также выбор метода решения: различных алгоритмов решения
либо поиск нестационарного или стационарного решения. Результатом
5
работы решателя является набор файлов, в которых содержатся данные о
поле исследуемой величины в конкретный момент времени.
Пользователь может влиять на способ решения задачи. Он имеет
возможность редактирования исходного кода, т.к. исходный код всех
решателей открыт, может создать новый решатель либо настроить
параметры решателя, т.е. задать различные схемы аппроксимации
операторов дифференциальной задачи (оператора градиента, дивергенции,
оператора Лапласа, первых и вторых производных по времени) и схем
интерполяции. Также пользователь может выбрать метод решения системы
линейных алгебраических уравнений.
Задача постпроцессора состоит в обработке, анализе и визуализации
данных о поле исследуемой величины в конкретный момент времени.
Постпроцессором является программа ParaView версии 5.4.0. Эта
программа является основным средством визуализации результатов в
пакете OpenFOAM. Она разработана американской компанией Kitware inc.
ParaView обладает большими возможностями для визуализации, т.е.
позволяет визуализировать скалярные и векторные поля, линии тока,
изоповерхности, получать информацию о нужном поле в точке или вдоль
некоторой линии. Важной особенностью ParaView является поддержка
параллельной обработки данных на высокопроизводительных
вычислительных системах с общей или распределенной памятью.
Настоящее пособие состоит из трёх разделов. В первом из них
приведён обзор существующих средств виртуализации и даны
рекомендации по установке операционной системы (ОС) Ubuntu на
компьютер пользователя. Здесь же рассмотрены вопросы, непосредственно
касающиеся установки пакета OpenFOAM. Во втором разделе показаны
основные этапы выполнения математического моделирования физических
процессов с помощью OpenFOAM на примере нестационарного уравнения
теплопроводности. Приведены многочисленные примеры численного
решения задачи для различных вариантов задания граничных условий.
Последний раздел содержит описание работы с модулем ParaView,
инструментом для постобработки, поставляемым вместе с пакетом
OpenFOAM.

6
1 Установка программного обеспечения
1.1 Средства виртуализации
OpenFOAM работает под операционной системой (ОС) Linux.
Вообще говоря, установка OpenFOAM (например, из исходных кодов)
возможна в различных дистрибутивах ОС Linux. Автор настоящего
пособия настоятельно рекомендует использовать Ubuntu [8]. В Ubuntu есть
встроенный пакет для установки OpenFOAM. Рассмотрим, какие шаги
нужно предпринять для установки OpenFOAM.
Если Вы хотите работать под ОС Windows и не желаете
устанавливать Ubuntu второй системой, то начните с установки
программного продукта для виртуализации. Если у Вас уже установлена
Ubuntu, то Вы можете пропустить этот шаг и перейти к разделу 1.3. Далее
рассмотрено такое средство виртуализации, как VirtualBox [9].
VirtualBox является кросс-платформенным приложением
виртуализации. VirtualBox работает на компьютерах с процессорами Intel
или AMD под управлением операционных систем Windows, Mac, Linux
или Solaris. VirtualBox расширяет возможности вашего компьютера тем,
что позволяет работать множеству операционных систем одновременно
(внутри виртуальных машин). Например, Вы можете запустить Windows и
Linux на вашем Mac, запустить Windows Server 2008 на вашем Linux
сервере, запустить Linux на вашем ПК с Windows и т.д., и все они
одновременно будут работать с вашими программами. Вы можете
установить и запустить виртуальных машин столько, сколько вам нужно –
Ваша фантазия ограничивается только размером свободного дискового
пространства и памяти.
VirtualBox является мощным инструментом. Он может применяться
везде: от небольших встроенных систем и персональных компьютеров до
центров обработки данных и даже в «облачных» средах.
Для понимания технологии виртуализации, Вам необходимо
ознакомиться с небольшим количеством важных терминов.
Операционная система хоста (ОС хоста, host OS) – это операционная
система физического компьютера, в которой установлен VirtualBox.
Существуют версии VirtualBox для Windows, Mac OS X, Linux и Solaris
хостов.
Гостевая операционная система (Гостевая ОС, guest OS) – это
операционная система, работающая внутри виртуальной машины.
Теоретически, в VirtualBox могут работать любые операционные системы
x86 (DOS, Windows, OS/2, FreeBSD, OpenBSD), но для достижения
высокой производительности гостевых систем применяется оптимизация
некоторых операционных систем. Поддерживается и оптимизируется
работа для небольшого количества ОС (но это небольшое количество,
однако, включает в себя наиболее распространенные системы).
Виртуальная машина (ВМ, VM) – специальная среда, которую
VirtualBox создает для работы гостевой операционной системы. Другими
словами, Вы запускаете гостевую операционную систему «в» ВМ. Обычно,
7
ВМ существует в виде окна на рабочем столе вашего компьютера, но, в
зависимости от используемого интерфейса VirtualBox, она может занимать
весь Ваш экран (in full-screen mode) или отображаться на экране другого
компьютера.
На другом, более абстрактном уровне, VirtualBox воспринимает ВМ
как множество параметров, которые определяют ее поведение. Эти
параметры включают: аппаратные настройки (размер памяти выделенной
для ВМ, типы жёстких дисков, подключенные CD и т.д.) и текущее
состояние (ВМ работает, сохранена и т.п.). Эти настройки представлены в
окне менеджера VirtualBox, а также могут управляться через программу
командной строки VBoxManage. Другими словами, ВМ – это также то, что
Вы можете видеть в диалогах настроек.
Гостевые дополнения (Guest Additions) – это пакет программных
продуктов поставляемых с VirtualBox, но разработанных для установки
внутри ВМ, способствующих улучшению производительности гостевой
ОС и предоставления дополнительной функциональности.
На данный момент VirtualBox включает в себя следующие
возможности: нативная x86-виртуализация, не требующая наличия
поддержки аппаратных техник Intel VT или AMD-V (которая, однако,
может быть включена в настройках); дружественный пользовательский
интерфейс, в том числе и на русском языке (построенный с помощью Qt);
поддержка Windows, Linux и Mac OS хостовых систем; наличие Guest VM
Additions для упрощения взаимодействия с хостовыми ОС; поддержка
многопроцессорных и многоядерных систем; поддержка виртуализации
аудиоустройств; высокая производительность; поддержка различных
видов сетевого взаимодействия (NAT, Host Networking via Bridged,
Internal); поддержка дерева сохраненных состояний виртуальной машины
(snapshots), к которым может быть произведен откат из любого состояния
гостевой системы; описание настроек виртуальной машины в XML-
формате; поддержка общих папок для простого обмена файлами между
хостовой и гостевой системами.
Для того чтобы скачать VirtualBox, пройдите по ссылке
https://www.virtualbox.org/wiki/Downloads и выберите свою операционную
систему из представленных в списке. Рядом с каждым названием стоит
ссылка на скачивание Virtualbox. После сохранения файла с VirtualBox на
компьютер, запустите его. В установке платформы нет никаких
особенностей: она проста и проходит быстро. Вам нужно лишь выбрать
директорию установки, нажав на кнопку «Browse» либо оставить всё как
есть. Согласитесь с установкой всего программного обеспечения от Oracle,
так как оно нужно для корректной работы виртуальной машины. Такие
окна будут появляться несколько раз.
После первого запуска VirtualBox Вам будет доступна одна
единственная кнопка на панели инструментов слева – «Создать». Нажмите
её, и на экране появится уведомление о том, что Вы приступили к
созданию виртуальной машины.
8
Рис. 1.1 Новая виртуальная машина
Для начала, введите имя своей ОС. Это может быть любое слово,
которое поможет вам запомнить цель создания системы. Также выберите
саму систему, которая будет установлена в виртуальной машине (ОС
Ubuntu (64 bit)), как показано на рис. 1.2.

Рис. 1.2 Имя и тип виртуальной машины


Затем Вам предстоит указать количество оперативной памяти для
виртуальной машины. Конечно же, эта память будет выделена из Вашей
основной.

9
Рис. 1.3 Оперативная память
Следующий этап посвящен жёсткому диску, он будет виртуальным.
Выберите пункт «Создать новый виртуальный жёсткий диск», как
показано на рис. 1.4.

Рис. 1.4 Новый жёсткий диск


Тип файла, определяющий формат для хранения жёсткого диска
менять не нужно. Оставьте VDI (VirtualBox Disk Image, предлагаемый по
умолчанию), как показано на рис. 1.5.

10
Рис. 1.5 Тип жёсткого диска
Затем укажите формат хранения виртуального жёсткого диска, как
показано на рис. 1.6.

Рис. 1.6 Формат хранения жёсткого диска


Создавая виртуальную машину, можно выбрать один из двух разных
типов виртуальных жёстких дисков. Динамический диск будет занимать
лишь необходимое место на физическом носителе информации и
увеличиваться по мере заполнения.
Это удобно с той точки зрения, что виртуальная машина будет
занимать на жёстком диске место, которое пропорционально объёму
хранимых на ней данных. При этом динамический жёсткий диск работает
медленнее, чем диск фиксированного размера.
11
Также нужно выбрать размер жёсткого диска, как показано на
рис. 1.7.

Рис. 1.7 Размер жёсткого диска


Теперь виртуальная машина создана, однако, если её запустить, Вы
не увидите ничего, кроме черного экрана со служебной информацией. Т.е.
создан пока только «виртуальный компьютер» и никакая ОС на нём не
установлена. Процесс установки ОС Ubuntu описан в следующем разделе.

1.2 Установка Ubuntu


Установочный образ Ubuntu можно скачать с официального сайта
http://releases.ubuntu.com/18.04/. Здесь есть две ссылки – Desktop image и
Server install image. Также на этой странице представлены ссылки для
скачивания .torrent-файлов. (Предыдущие версии Ubuntu доступны по
ссылке http://releases.ubuntu.com/.) В настоящее время Ubuntu выпускается
только для 64-х битной архитектуры. Нам нужна версия для рабочего стола
– Desktop image. Заметим, что каждый четвёртый релиз Ubuntu называется
LTS и имеет длительный срок поддержки, на протяжении двух лет, и эта
версия является именно такой. А это означает, что на ближайшие
несколько лет – это основной вариант Ubuntu как для домашних
пользователей, так и для серверов. Скачайте образ диска с Ubuntu на Ваш
компьютер любым удобным для Вас способом.
Теперь зайдите в настройки Вашей виртуальной машины и в пункте
меню «Носители» в разделе «Контроллер IDE» щёлкните мышью на
пиктограмме компакт-диска справа от атрибута «Оптический привод» и
выберите файл образа оптического диска, хранящийся на Вашем
компьютере (см. рис. 1.8).

12
Рис. 1.8 Выбор образа Ubuntu
Также убедитесь в том, что в пункте «Система» порядок загрузки
таков, что оптический диск идёт перед жёстким диском (см. рис. 1.9).

Рис. 1.9 Порядок загрузки ОС


В этом же окне Вы можете настроить, например, общую папку для
передачи файлов между виртуальной машиной и ОС хоста.
Теперь Вы можете запустить Вашу виртуальную машину, нажав на
кнопку с изображением зелёной стрелки. При этом начнётся
непосредственно процесс установки ОС.
Сразу после запуска виртуальной машины Вы увидите чёрное окно с
символом Ubuntu. Находясь в этом окне Вы можете нажать на кнопку Esc
и прочесть служебную информацию о ходе процесса установки.
Дождитесь появления окна для выбора языка, на котором будет
производиться установка ОС Ubuntu. При желании Вы можете выбрать
русский язык, как показано на рис. 1.10.

13
Рис. 1.10 Язык установки Ubuntu
В открывшемся меню Вам необходимо выбрать пункт «Запустить
Ubuntu». Если система слишком долго загружается, то выключите
виртуальную машину и увеличьте количество оперативной памяти,
выделенной для виртуальной машины.
Дождитесь окончания загрузки. Когда система загрузится,
выполните двойной клик левой кнопкой мыши по значку «Установить
Ubuntu». Затем выберите язык для будущей системы. Далее выберите
раскладку клавиатуры по умолчанию. Вы можете спокойно выбирать
русскую, так как если во время установки вам понадобиться сменить
раскладку, то Вы сможете это очень просто сделать с помощью сочетания
клавиш Alt+Shift или Win+Пробел. Отметьте также галочки напротив
пунктов «Загрузить обновления во время установки Ubuntu» и
«Установить дополнительное программное обеспечение» как показано на
рис. 1.11.

Рис. 1.11 Дополнительное ПО


14
Далее Вам надо выбрать способ, которым будет выполнена разметка
жёсткого диска. Так как никакой системы ещё не установлено, Вы можете
полностью стереть диск и установить Ubuntu 18.04. Выберите этот пункт
меню, как показано на рис. 1.12.

Рис. 1.12 Тип установки ОС

В этом случае Вам нужно будет выбрать часовой пояс и создать


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

Рис. 1.13 Новый пользователь

Затем начнётся установка Ubuntu. Когда система сообщит, что


установка Ubuntu 18.04 завершена, перезагрузите Вашу виртуальную
машину.
Также Вы можете разметить диск самостоятельно. Для этого при
выборе типа установки ОС (см. рис. 1.12) отметьте пункт меню «Другой
вариант». Затем нажмите кнопку «Новая таблица разделов» как показано
на рис. 1.14.

15
Рис. 1.14 Новая таблица разделов
Заметим, что все изменения касаются лишь того места на Вашем
жёстком диске, которое выделено для виртуальной машины.
Нам необходимо создать два раздела: / – для самой операционной
системы и /home – для файлов пользователя.
Для создания раздела выберите пункт «Свободное пространство» и
нажмите кнопку со знаком «плюс». В открывшемся окне Вам будет
необходимо выбрать размер раздела. Размер раздела, как следует из
системных требований, должен быть не менее 10 Гбайт, но желательно
сделать больше – 20-30 Гбайт, чтобы Вам было его достаточно для
установки программ.
Здесь будет располагаться операционная система. Если Вы не
создадите раздел /home, то его файлы тоже будут находиться на этом
разделе.
Файловая система может быть zfs, btrfs, ext4 или reiserfs. Но лучше
выбирайте проверенную ext4. Точка монтирования – /.

Рис. 1.15 Корневой раздел


16
Создание домашнего раздела /home происходит аналогично.
Выберите всё оставшееся свободное пространство, как показано на
рис. 1.16. Вы можете выбрать такие же файловые системы, как и для
корня, нельзя только использовать fat32. Но, опять же, желательно взять
ext4. Точка монтирования – /home.
Когда всё будет готово, нажмите кнопку «Установить сейчас», а
затем подтвердите действие. После этого выберите часовой пояс на карте и
создайте нового пользователя как показано на рис. 1.13. После этого
начнется процесс установки ОС Ubuntu.

Рис. 1.16 Домашний раздел

1.3 Установка OpenFOAM


OpenFOAM и ParaView [10] могут быть легко установлены с
помощью инструмента управления пакетами apt. Вам нужно будет
предоставить пароль, придуманный ранее при создании пользователя, для
выполнения следующих команд с sudo.
Вначале откройте терминал. Вы можете найти его, нажав кнопку
«Показать приложения» в левом нижнем углу экрана. Также Вы можете
щёлкнуть правой кнопкой мыши на свободном месте и в появившемся
контекстном меню выбрать пункт «Открыть терминал» (Или
воспользуйтесь комбинацией клавиш «Ctrl+Alt+T»). Скопируйте и
вставьте в терминал следующие команды, чтобы добавить dl.openfoam.org
к списку репозиториев программ для apt. Также это добавит и открытый
ключ (gpg.key) для репозитория, чтобы включить проверку подписей
пакетов.
sudo sh -c "wget -O - http://dl.openfoam.org/gpg.key | apt-key add -"
sudo add-apt-repository http://dl.openfoam.org/ubuntu
Если всё сделано верно, то после выполнения первой команды,
система сообщит Вам, что подключение к сайту было успешным и ключ
скачан. Вы должны увидеть слово «OK». Если менеджеру пакетов не
удалось получить ключ, проверьте, доступен ли сайт dl.openfoam.org и не

17
допущена ли ошибка при наборе команды. Заметим, что параметром
команды «wget» является латинская буква «O», а не цифра ноль.
Это нужно сделать только один раз для данной системы.
Очевидно, что Вы должны включить доступ в Сеть для Вашей
виртуальной машины, чтобы иметь возможность установить программные
пакеты в Ubuntu. Сбой установки из-за проблем с сетью обычно приводит
к сообщению об ошибке, в котором говорится о сбоях в получении
архивов, заканчивается оно следующей строкой:
E: Unable to fetch some archives...
Обновите список пакетов apt с учетом нового репозитория, дав
команду
sudo apt update
Установите OpenFOAM (6 в названии пакета относится к версии 6),
который также устанавливает средство для постпроцессинга
paraviewopenfoam54.
sudo apt -y install openfoam6
Пакет OpenFOAM периодически обновляется. Для того чтобы
обновить OpenFOAM вместе с остальными пакетами Ubuntu, дайте
команды
sudo apt update
sudo apt upgrade
Также Вы можете обновить только OpenFOAM 6 с помощью
следующих команд
sudo apt update
sudo apt install --only-upgrade openfoam6
Чтобы использовать установленный пакет OpenFOAM, выполните
следующие действия. Откройте файл .bashrc в домашнем каталоге
пользователя в любом редакторе, например, введя в окне терминала
(обратите внимание на точку)
gedit ~/.bashrc
В конце файла добавьте следующую строку и сохраните файл.
source /opt/openfoam6/etc/bashrc
Если подобная строка уже существует, например, для предыдущей
версии OpenFOAM, то строка должна быть удалена или, в качестве
альтернативы, закомментирована с помощью # в начале строки. При
первой установке OpenFOAM такой строки в файле .bashrc естественно
нет.
Зарегистрируйте изменение файла .bashrc, набрав в командной
строке терминала (обратите внимание на точку) следующее:
18
source ~/.bashrc
Откройте новое окно терминала и проверьте работу решателя
simpleFoam из пакета OpenFOAM, введя в консоли команду
simpleFoam --help
Если всё сделано верно, то должно появиться сообщение,
содержащее некоторую справочную информацию. Установка и настройка
OpenFOAM завершены. В случае, если Вы столкнулись с некоторыми
затруднениями, то обратитесь к документации пакета OpenFOAM,
размещённой на официальном сайте проекта.
Для дальнейшей работы Вам также понадобится текстовый редактор
kate. Установите его, дав команду
sudo apt install kate konsole
Здесь konsole – это встроенный в редактор терминал. В текстовом
редакторе kate Вы будете редактировать конфигурационные файлы
OpenFOAM. При этом удобно выполнять команды OpenFOAM не в
отдельном окне терминала, а в том, которое находится рядом с
редактируемым текстом.
Запустите установленный текстовый редактор. Для этого найдите его
в меню приложений или дайте в консоли команду kate. Затем зайдите в
меню «Настройка -> Настроить Kate -> Модули» и поставьте галочку
напротив пункта «Встроенный терминал», как показано на рис. 1.17. После
этого подтвердите внесение изменений.

Рис. 1.17 Подключение встроенного терминала в kate


Также проверьте, что в разделе меню «Терминал» установлена
галочка напротив пункта «Синхронизировать терминал с текущим
документом автоматически (если возможно)».

19
После этого нажмите кнопку «Терминал» в нижней части окна kate.
Вы должны увидеть чёрное окно терминала снизу от окна с текстовым
файлом, как показано на рис. 1.18.

Рис. 1.18 Окно kate со встроенным терминалом


Также установите файловый менеджер Midnight Commander (mc),
дав команду в консоли
sudo apt install mc

2 Нестационарное уравнение теплопроводности


2.1 Постановка задачи
Рассмотрим пластину, изготовленную из некоторого материала с
заданным коэффициентом теплопроводности. Пусть в начальный момент
времени пластина имела температуру T1 , а на ее краях поддерживается
температура T2  T1 . Известно, что уравнение теплопроводности имеет
вид [11]
T
 DT   2T .
t
Здесь DT – коэффициент теплопроводности.
Необходимо изучить, как будет нагреваться пластина с течением
времени. Т.е. нужно решить краевую задачу для уравнения
теплопроводности с условиями типа Дирихле. Также можно рассмотреть
случай, когда одна или несколько сторон пластины теплоизолированы, т.е.
заданы условия Неймана. Пусть для определенности пластина
представляет собой параллелепипед со сторонами 1 м, 1 м и 10 см
соответственно.

20
2.2 Построение сетки с помощью blockMesh
Для того чтобы провести расчёт в пакете с открытым исходным
кодом OpenFOAM, создадим в домашней папке каталог Teplo, в котором
будут храниться файлы нашей задачи. Для этого дайте команды в консоли
cd ~
При этом Вы перейдёте в домашнюю папку.
mkdir Teplo
Команда mkdir создаёт каталог с тем именем, которое было передано
ей в качестве параметра.
Название этого каталога, вообще говоря, может быть любым. Оно
лишь отражает специфику решаемой задачи (не используйте пробелы и
кириллицу). Внутри этого каталога нужно создать каталоги с именами
constant и system (это зарезервированные слова OpenFOAM). Для этого
дайте команды
cd ~\Teplo
mkdir constant
mkdir system
или воспользуйтесь некоторым файловым менеджером (например,
Dolphin).
Вместо тильды Вы можете указать полный путь к Вашей домашней
папке. Например переход в папку Teplo можно совершить так
cd \home\user\Teplo
Затем в любом текстовом редакторе (например kate) нужно создать
текстовый файл под названием blockMeshDict (без расширения!) и
сохранить его в каталоге system.
Занесём в файл blockMeshDict следующую информацию
/*------------------------------------*- C++ -*------------------------------------*\
=======
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 6
\\/ M anipulation |
\*-------------------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
21
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 1.0;
vertices
(
(0 0 0) //0
(1 0 0) //1
(1 1 0) //2
(0 1 0) //3
(0 0 0.1) //4
(1 0 0.1) //5
(1 1 0.1) //6
(0 1 0.1) //7
);
Удобно установить подсветку в стиле C++, выбрав пункт меню
«Сервис -> Подсветка -> Исходный код -> С++».
Строки между
/*------------------------------------*- C++ -*------------------------------------*\
и
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
это «шапка» файла, в которой указаны версия OpenFOAM и тип
редактируемого файла. В дальнейшем для краткости изложения «шапка»
часто будет опускаться.
В строке
convertToMeters 1.0;
приведён масштабный коэффициент для перевода координат вершин
нашей расчётной области в метры. Если координаты вершин и так даны в
метрах, то строку с множителем 1.0 можно пропустить. Дециметрам
соответствует коэффициент 0.1, а сантиметрам и миллиметрам – 0.01 и
0.001 соответственно. Заметим, что все координаты должны быть взяты в
одних и тех же единицах измерения.
Список координат вершин расчётной области задаётся в блоке
vertices. В каждой строке в круглых скобках приводятся трёхмерные
декартовы координаты одной из точек (абсцисса, ордината и аппликата
соответственно). Порядок следования вершин здесь не важен. Символом //
22
обозначены однострочные комментарии. Легко видеть, что
закомментированы номера вершин (они пригодятся в дальнейшем).
OpenFOAM нумерует все вершины, начиная с нуля.
Для того чтобы разбить нашу вычислительную область на ячейки,
вершины нужно объединить в блоки. Самым простым блоком является
параллелепипед, состоящий из восьми вершин. Добавим в конец файла
blockMeshDict следующие строки
blocks
(
hex (0 1 2 3 4 5 6 7) (4 2 1) simpleGrading (1 1 1)
);
Разберём их. Ключевое слово blocks указывает на то, что далее в
фигурных скобках будут перечислены один или несколько блоков (в
простейшем случае это параллелепипеды). hex – зарезервированное слово
(hexahedron – англ. шестигранник). Затем в круглых скобках перечислены
вершины шестигранника. Удобно вначале задать, например, нижнюю
грань, а затем верхнюю. Заметим, что ребра граней не должны
пересекаться. Далее в круглых скобках через пробел приведены три числа
– количество ячеек, на которые мы хотим разбить вычислительную
область в направлении каждой из осей координат. Например, в нашем
случае в направлении оси Ox будет 4 ячейки (со сторонами по 1 / 4  0.25
м), в направлении оси Oy будет 2 ячейки (со сторонами по 1 / 2  0.5 м) и в
направлении оси Oz только одна ячейка со стороной 0.1 / 1  0.1 м. В
простейшем случае все ячейки должны быть одинаковыми
параллелепипедами. Для этого после ключевого слова simpleGrading
указаны три единицы в круглых скобках. Это означает, что в направлении
каждой из осей координат отношение длины стороны последней ячейки к
длине стороны первой ячейке равно единице, т.е. длины сторон этих ячеек
совпадают.
По умолчанию все грани блоков объединены в группу defaultFaces.
В дальнейшем нам понадобится задавать те или иные граничные условия.
Для этого нужно обозначить каждую из граней. Добавим в конец файла
blockMeshDict следующие строки
boundary
(
fixedWalls
{
type wall;
faces
(

23
(3 7 6 2) // top
(1 5 4 0) // bottom
(0 4 7 3) // left
(2 6 5 1) // right
(0 3 2 1) // back
(4 5 6 7) // front
);
}
);
Разберём их. После ключевого слова boundary в фигурных скобках
перечислены все грани нашего параллелепипеда. fixedWalls – это название
группы граней, оно может быть произвольным. Удобно давать группе
осмысленное имя. В нашем случае грани блока не движутся, они
фиксированы на месте. Это и отражено в названии группы. После названия
группы в фигурных скобках указан тип группы – wall (стена). Другие типы
групп будут разобраны далее. После ключевого слова faces в фигурных
скобках приведены все восемь граней нашего параллелепипеда. Каждая
грань задается простым перечислением номеров её вершин в круглых
скобках через пробел. Это как раз те номера, которые были ранее
закомментированы в блоке vertices. Заметим, что номера вершин идут не в
произвольном порядке. Порядок вершин таков, что если смотреть на грань
из центра блока, то вершины будут перечислены против часовой стрелки.
Какая именно вершина грани будет первой в списке – не важно. После
каждой грани закомментировано её название: top – верхняя грань
параллелепипеда, bottom – нижняя, left – левая, right – правая, back –
задняя и front – передняя. Это удобно, т.к. в случае ошибки будет легче
сориентироваться, какую грань рассматривал разработчик.
Для того чтобы задать такие параметры расчёта, как начальное и
конечное время, шаг по времени и т.д. в папке system нужно создать файл
controlDict. Занесём в него следующую информацию
/*------------------------------------*- C++ -*------------------------------------*\
=======
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 6
\\/ M anipulation |
\*-------------------------------------------------------------------------------------*/
FoamFile

24
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application laplacianFoam;
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime 3;
deltaT 0.005;
writeControl runTime;
writeInterval 0.1;
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable true;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Разберём некоторые строки этого файла. application – наименование
стандартного «решателя» OpenFOAM для уравнения теплопроводности.
startFrom – момент времени, с которого нужно начинать расчёт, latestTime
означает, что будет взят последний из моментов времени, до которого
досчитали в предыдущий раз. Если нужно каждый раз начинать расчёт
сначала, то latestTime следует заменить на startTime. startTime – момент
времени, в который начинается самый первый расчёт (в папке с таким
именем должен находиться файл с начальными и граничными условиями).
stopAt – время остановки расчёта. deltaT – шаг по времени (в некоторых
задачах его нужно выбирать так, чтобы число Куранта было меньше
единицы). Блок

25
writeControl runTime;
writeInterval 0.1;
говорит нам о том, что запись результатов расчёта в файл будет
происходить через каждую 0.1 секунду. Если мы хотим записывать в файл
результаты расчётов например для каждого двадцатого шага по времени,
то этот блок в файле controlDict следует заменить на
writeControl timeStep;
writeInterval 20;
writePrecision – количество значащих цифр при записи в файл результатов
расчёта.
Помимо всего прочего в папке system нужно создать файл
fvSchemes, в котором описаны схемы дискретизации для производных,
входящих в рассматриваемое уравнение. Этот файл имеет вид
/*------------------------------------*- C++ -*------------------------------------*\
=======
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 6
\\/ M anipulation |
\*-------------------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
26
object fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes
{
default Euler;
}
gradSchemes
{
default Gauss linear;
grad(T) Gauss linear;
}
divSchemes
{
default none;
}
laplacianSchemes
{
default none;
laplacian(DT,T) Gauss linear corrected;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default corrected;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Также в эту папку необходимо поместить файл fvSolution, в котором
описаны применяемые методы решения систем линейных алгебраических
уравнений. Этот файл имеет вид

27
/*------------------------------------*- C++ -*------------------------------------*\
=======
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 6
\\/ M anipulation |
\*-------------------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers
{
T
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0;
}
}
SIMPLE
{
nNonOrthogonalCorrectors 2;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
В блоке «T» указано, что система линейных алгебраических
уравнений относительно искомых значений температуры в центрах ячеек

28
будет решаться методом PCG (устойчивый метод сопряжённых градиентов
с предобуславливателем). При этом предобуславливатель DIC
соответствует неполному разложению Холецкого. Здесь же приведена
точность решения системы, при достижении которой итерационный
процесс завершится.
Для того чтобы построить сетку, откроем встроенный терминал и
перейдём в каталог Teplo, дав команду
cd ~\Teplo
или
cd ..
или
cd /home/user/Teplo
Вторая команда соответствует переходу на один уровень выше в
дереве папок (по умолчанию при открытии терминала мы находимся в
домашнем каталоге).
Затем дадим команду blockMesh как показано на рис. 2.1.

Рис. 2.1 Команда blockMesh


Результат работы команды blockMesh показан на рис. 2.2.

Рис. 2.2 Результат работы blockMesh


Если всё сделано верно, то в результате Вы получите сообщение
«End». Здесь указано, что наша вычислительная область разбита на 8 ячеек
(nCells), содержит 30 точек (nPoints) и 38 граней (nFaces) из которых 10
являются внутренними (nInternalFaces). Все 28 внешних граней
объединены в группу под названием fixedWalls.
29
В случае же, когда утилита blockMesh не сможет построить сетку,
будет выдано сообщение об ошибке. Тогда нужно вернуться к
редактированию файла blockMeshDict и после исправления ошибок
повторно дать команду blockMesh.
Заметим, что кроме опечаток в служебных словах, возможен случай,
когда описанная в файле blockMeshDict вычислительная область не
существует (например, перепутаны координаты вершин параллелепипеда).
Теперь воспользуемся утилитой paraFoam, входящей в комплект
поставки OpenFoam. Вернёмся в консоль. По-прежнему находясь в папке
Teplo, дадим команду paraFoam. Удобно заключить эту команду в скобки и
добавить амперсанд &.

Рис. 2.3 Команда paraFoam


Амперсанд переведёт выполнение команды paraFoam в фоновый
режим. При этом не нужно будет дожидаться окончания её работы, а
можно будет продолжить работу с терминалом. Если же просто дать
команду
paraFoam
то нельзя будет вернуться в терминал, пока не закроется окно ParaView.
В результате запустится ParaView и откроется новое окно
следующего вида:

Рис. 2.4 Окно ParaView


30
Вначале в окне ParaView нашей сетки не будет. Для того чтобы её
увидеть, нужно нажать на кнопку «Apply» (перед этим убедитесь, что
напротив пункта «Mesh Parts» стоит «крестик», т.е. будут отображены все
части сетки). Тогда перед нами появится параллелепипед. Изменим тип его
отображения на «Solid Color» (см. рис. 2.5).

Рис. 2.5 Тип отображения Solid Color

И, наконец, отобразим сетку, поменяв Surface на Wireframe (см.


рис. 2.6).

Рис. 2.6 Выбор вида отображения вычислительной области


Если всё сделано верно, то мы увидим нашу вычислительную
область, разбитую на требуемое количество ячеек (см. рис. 2.7).

Рис. 2.7 Сетка для параллелепипеда


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

31
Закроем окно ParaView и перейдём к формированию начальных и
граничных условий.

Задание:
Пусть abcdef – последние шесть цифр номера Вашей зачётной
книжки. Постройте параллелепипед с ребрами ab, cd и ef соответственно.
Единицы измерения определите так: вычислите x = f mod 4 (остаток от
деления последней цифры номера Вашей зачётной книжки на четыре)
Если x = 0, то ребра Вашего параллелепипеда заданы в метрах; х = 1 – в
дециметрах; х = 2 – в сантиметрах; х = 3 – в миллиметрах. Количество
ячеек выберите так, чтобы каждая ячейка была кубом с ребром 1.
Например, если номер зачетной книжки заканчивается на 123456, то
размеры параллелепипеда 12 см * 34 см * 56 см.

2.3 Начальные и граничные условия


Создадим внутри каталога Teplo папку 0, в которой будут храниться
начальные и граничные условия. Внутри папки 0 создадим текстовый файл
T (по-прежнему без расширения!). Имя файла указывает на то, что в нём
заданы условия именно для температуры. Занесём в файл T следующую
информацию
/*------------------------------------*- C++ -*------------------------------------*\
=======
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 6
\\/ M anipulation |
\*-------------------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object T;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 1 0 0 0];
internalField uniform 273;
Строки между
32
/*------------------------------------*- C++ -*------------------------------------*\
и
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
это по-прежнему «шапка» файла.
Далее указана единица измерения искомой физической величины
(температуры). После ключевого слова dimensions в квадратных скобках
приведены показатели степеней для следующих физических величин:
№ Физическая величина Единица измерения (СИ)
1 Масса Килограмм
2 Длина Метр
3 Время Секунда
4 Температура Градус Кельвина
5 Количество вещества Килограмм-моль
6 Сила тока Ампер
7 Интенсивность света Кандела

Таким образом, чтобы узнать размерность некоторой физической


величины, нужно возвести размерность i -й величины из этой таблицы в
степень, определяемую числом, стоящим в i -м столбце блока dimensions.
Полученные семь величин нужно перемножить между собой. Например,
для скорости (м/сек) блок dimensions выглядел бы так
dimensions [0 1 -1 0 0 0 0];
Заметим, что составные физические величины, такие, как ньютоны,
нужно представлять в виде произведения (например, Н = кг ∙ м ∙ сек-2).
В нашем же случае, температура T измеряется, как и положено
в градусах Кельвина.
В последней строке файла T задано однородное (uniform)
распределение поля температуры внутри вычислительной области в
начальный момент времени. Величина этого поля (273 градуса Кельвина ≈
0 градусов Цельсия) задана после ключевого слова uniform.
Для того чтобы задать граничные условия, добавим в конец файла T
следующие строки
boundaryField
{
fixedWalls
{
type fixedValue;
value uniform 373;
}
};
33
Здесь указано, что на границе под название fixedWalls задано
фиксированное (fixedValue) значение температуры (373 К). Эта
температура одна и та же (uniform) на всей границе.
Если мы хотим задать нулевой градиент температуры, то в блоке
boundaryField следует указать
boundaryField
{
fixedWalls
{
type zeroGradient;
}
};
И, наконец, если на некоторых гранях граничные условия не заданы,
то вместо zeroGradient нужно использовать ключевое слово empty. Такая
ситуация возможна, когда вместо параллелепипеда рассматривается
пластина. Пусть толщина пластины в направлении оси Oz пренебрежимо
мала. Тогда на гранях, перпендикулярных этой оси (в нашем случае это
грани back и front) нужно задать условия типа empty.

2.4 Параметры задачи


В рассматриваемом уравнении присутствует коэффициент
теплопроводности. Для того чтобы его задать, создадим в папке constant
текстовый файл transportProperties. Занесём в него следующую
информацию

/*------------------------------------*- C++ -*------------------------------------*\


=======
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 6
\\/ M anipulation |
\*-------------------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;

34
location "constant";
object transportProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
DT DT [0 2 -1 0 0 0 0] 4e-04;
Заметим, что синтаксис файлов OpenFOAM требует того, чтобы
название коэффициента (параметра) повторялось дважды. Затем в
квадратных скобках идёт размерность этого коэффициента (легко
проверить, что в нашем случае это м2/сек). В конце строки указана
величина коэффициента теплопроводности (экспоненциальную форму
записи использовать необязательно, но удобно). Название коэффициента
фиксировано.

2.5 Примеры численного решения задачи


2.5.1 Условия Дирихле
Для проведения расчётов изменим количество ячеек, на которые
разбита наша вычислительная область. Разобьём пластину на 10 ячеек по
осям Ox и Oу, а также на 5 ячеек по оси Oz. В этом случае блок blocks
файла blockMeshDict должен выглядеть так:
blocks
(
hex (0 1 2 3 4 5 6 7) (10 10 5) simpleGrading (1 1 1)
);
Для построения сетки нужно, как и ранее, дать команду blockMesh.
Заметим, что если Вы используете такой файловый менеджер, как Midnight
Commander, то для переключения в консоль и обратно можно использовать
комбинацию клавиш Ctrl + O. Это удобно, т.к. переходить из одной папки
в другую проще с помощью Midnight Commander, а не команд оболочки
bash.

Рис. 2.8 Окно Midnight Commander

35
Итак, находясь в папке Teplo, запустите Midnight Commander, дав
команду
mc
во встроенном терминале. Вы увидите структуру дерева папок,
показанную на рис. 2.8.
Для возврата в терминал нажмите комбинацию клавиш Ctrl-O. Затем
дайте команду blockMesh. Вы должны, как и ранее увидеть сообщение
«End». Это означает, что новая сетка построена. Если это не так, то
вернитесь к редактированию файла blockMeshDict для исправления
ошибок. Заметим, что теперь наша сетка состоит, как и требуется, из 500
ячеек ( 500  10 10  5 ). В этом можно убедиться, изучив раздел «Mesh
Information» в логе команды blockMesh (nCells: 500).
В отличие от раздела 2.2 у нас уже заданы начальные и граничные
условия задачи, а также её параметры. Запустите процесс решения
нестационарного уравнения теплопроводности. Для этого, не покидая
папку Teplo, дайте команду laplacianFoam.

Рис. 2.9 Команда laplacianFoam


Результат работы решателя laplacianFoam показан на рис. 2.10.

Рис. 2.10 Результат работы laplacianFoam


Если всё сделано верно, то в результате мы получим сообщение
«End», говорящее о том, что расчёт поля температуры окончен. В случае
же, когда решатель laplacianFoam не сможет довести расчёт до конечного
момента времени, будет выдано сообщение об ошибке. Чаще всего для её
устранения достаточно уменьшить шаг по времени. (Если, конечно, не
было опечаток при редактировании того или иного конфигурационного
файла OpenFOAM.) После исправления ошибок нужно повторно дать
команду laplacianFoam.

36
Задание:
Нагрейте таким же образом параллелепипед с ребрами ab, cd и ef
соответственно, построенный Вами в предыдущем задании.

Вернёмся в окно Midnight Commander, нажав Ctrl+O. Как показано


на рис. 2.11, внутри папки Teplo появились новые каталоги.

Рис. 2.11 Результаты расчётов laplacianFoam


Названия новых каталогов соответствуют тем моментам времени, в
которые производилась запись результатов. В нашем случае это 0.1, 0.2,
0.3 и т.д. Зайдём в любой из этих каталогов, например в последний (3).
Внутри находятся несколько файлов. Нас интересует файл T, в котором
хранятся результаты расчётов. Откроем в текстовом редакторе kate этот
файл. Он имеет вид
/*------------------------------------*- C++ -*------------------------------------*\
=======
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 6
\\/ M anipulation |
\*-------------------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "3.0";
object T;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
37
dimensions [0 0 0 1 0 0 0];
internalField nonuniform List<scalar>
500
(
364.874
362.943
362.827
...
314.827
314.943
315.827
);
boundaryField
{
fixedWalls
{
type fixedValue;
value uniform 373;
}
}
Разберём его. Вначале, после ключевого слова dimensions указана
размерность искомой величины (так же, как в папке «0»). Затем после
ключевого слова internalField (внутреннее поле) приведены значения
температуры в центрах ячеек вычислительной области. Заметим, что даны
шесть значащих цифр, а не шесть знаков после запятой (см. файл
controlDict). После этого списка указаны граничные условия. Рассчитанное
поле температуры является неоднородным (nonuniform).
Задание:
Опишите, чем отличается полученное Вами в предыдущем задании
поле температуры (в момент времени t  3 сек).

Для того чтобы изучить как меняется температура пластины с


течением времени, закройте файл с рассчитанными значениями
температуры. Затем вернитесь в консоль и, находясь в папке Teplo,
вызовите утилиту paraFoam так же, как для просмотра сетки (см. рис. 2.3).
Откроется окно ParaView. Убедитесь в том, что напротив пунктов Mesh
Parts и Volume Fields стоят «крестики». В пункте Volume Fields должно

38
присутствовать интересующее нас поле T. Нажмите кнопку «Apply».
Теперь вместо vtkBlockColors выберите в выпадающем списке поле T, как
показано на рис. 2.12.

Рис. 2.12 Выбор поля температуры


Вы увидите параллелепипед темно-красного цвета. Согласно шкале в
правом нижнем углу темно-красный цвет соответствует 373 К, а темно-
синий – 273 К.
Запустите просмотр изменения температуры, нажав кнопку Play
(зелёный треугольник в строке под меню). Несмотря на то, что начнёт
меняться время в окошке Time, Вы не увидите никаких изменений.
Согласно граничным условиям стенки параллелепипеда имеют одну и ту
же температуру в любой момент времени. Для того чтобы увидеть, как
нагревается пластинка, рассечём её плоскостью, перпендикулярной оси Oz.
Вот как это можно сделать.

а) Сечение  оси Ox б) Сечение  оси Oz


Рис. 2.13 Параметры сечения
Вернитесь к начальному моменту времени, нажав кнопку First Frame
(зелёный треугольник с прямоугольником слева от него). Убедитесь, что в
окошке Pipeline Browser выделена синим цветом строка Teplo.OpenFOAM.
39
Выберите инструмент Slice (Срез/Сечение). Он находится сверху над
Pipeline Browser. После этого появится плоскость под названием Slice1,
рассекающая параллелепипед на две части. Если хотите, Вы можете
дважды кликнуть мышью на Slice1 в окошке Pipeline Browser и
переименовать эту плоскость. Затем кликните мышью один раз на Slice1 в
окошке Pipeline Browser (если этот объект не выделен синим цветом) и
перейдите во вкладку Properties. В этой вкладке Вам нужно найти блок
Plane Parameters (см. рис. 2.13 а)).
По умолчанию плоскость сечения перпендикулярна оси Ox (выбран
пункт X Normal). Нажмите кнопку Z Normal, параметры сечения станут
такими, какие показаны на рис. 2.13 б). Затем нажмите кнопку Apply. При
этом положение плоскости изменится, и она станет перпендикулярна оси
Oz.
Обратите внимание на то, что в окошке Pipeline Browser теперь слева
от строк Teplo.OpenFOAM и Slice1 стоят символы черного глаза. Это
означает, что ParaView рисует как интересующее нас сечение, так и
исходный параллелепипед. Кликните мышью один раз на чёрном глазе
около строки Teplo.OpenFOAM (глаз станет серым). Вы увидите сечение и
рёбра параллелепипеда. Ещё раз кликните мышью на глазе около строки
Teplo.OpenFOAM, после этого опять отобразится параллелепипед. И,
наконец, в последний раз кликните мышью на чёрном глазе около строки
Teplo.OpenFOAM. После этого ParaView отобразит только интересующее
нас сечение, как показано на рис. 2.14.

Рис. 2.14 Распределение температуры в сечении при t  0 сек.

40
Заметим, что ParaView интерполирует значения температуры в
соседних ячейках.
Кликните мышью на строке Slice1. Убедитесь, что в сечении будет
отображаться температура T, а тип отображения – Surface (см. рис. 2.15).

Рис. 2.15 Тип отображения сечения


Обратите внимание на то, что тип отображения сечения может
отличаться от типа отображения параллелепипеда. Будьте внимательны,
когда меняете тип отображения или отображаемую величину для того или
иного объекта. Не забывайте нажимать кнопку «Apply» для подтверждения
внесённых изменений.
Удобно повернуть сечение (и параллелепипед вместе с ним), так,
чтобы оно было параллельно плоскости монитора. Для этого нажмите
кнопку Set view direction to -Z (справа от выпадающего списка Surface) и
приблизьте сечение, покрутив колёсико мыши (если это Вам нужно). Затем
кликните мышью на строке Teplo.OpenFOAM. После этого Paraview
отобразит нужное нам сечение с правильным полем и типом отображения.

Рис. 2.16 Укрупнённое сечение


При этом, как показано в левом нижнем углу рис. 2.16, ось Ox
направлена направо, ось Oy – вверх, ось Oz – на нас (по правилу правой
тройки).

41
Рис. 2.17 Распределение температуры в сечении при t  3 сек (условия
Дирихле
Нажмите кнопку Play. Вы увидите, как начнет меняться
распределение температуры в сечении пластины с течением времени. На
рис. 2.17 показано распределение температуры при t  3 сек .
Задания:
1. Очевидно, что при данных граничных условиях вся пластина
должна прогреться до 373 К. Проверьте это. Увеличьте время окончания
процесса в файле controlDict и запустите расчёт заново. Не забудьте перед
этим удалить каталоги 0.1, 0.2 и т.д. с результатами предыдущего расчёта.
Также можно увеличить коэффициент теплопроводности в файле
transportProperties, чтобы пластина быстрее нагрелась.
2. Установите, как нужно изменить параметры задачи, чтобы
полностью прогрелся построенный Вами параллелепипед с ребрами ab, cd
и ef соответственно.

2.5.2 Условия Неймана


Изменим граничные условия. Пусть теперь правая сторона пластины
теплоизолирована, т.е. производная по нормали от температуры на этой
стороне равна нулю. Найдём закон изменения температуры в данном
случае.
Начать нужно с изменения геометрии задачи. Отредактируем файл
blockMeshDict, выделив отдельно правую грань параллелепипеда. Блок
boundary примет вид

42
boundary
(
fixedWalls
{
type wall;
faces
(
(3 7 6 2) // top
(1 5 4 0) // bottom
(0 4 7 3) // left
(0 3 2 1) // back
(4 5 6 7) // front
);
};
rightWall
{
type wall;
faces
{
(2 6 5 1) // right
}
}
}
Разберём его. Появилась группа граней rightWall, включающая в
себя только одну, правую грань пластины. Остальные грани по-прежнему
входят в группу fixedWalls.
Затем изменим файл T. Блок boundaryField примет вид
boundaryField
(
fixedWalls
{
type fixedValue;
value uniform 373;
};
43
Рис. 2.18 Распределение температуры в сечении при t  3 сек (условие
Неймана)
rightWall
{
type zeroGradient;
}
}
На границе под названием fixedWalls по-прежнему задано
фиксированное значение температуры (373 К). На правой же стороне
пластины задан нулевой градиент температуры (условие Неймана).
Удалим папки с результатами предыдущих вычислений и запустим
расчёт поля температуры так, как было описано выше в разделе 2.5.1.
На рис. 2.18 показано распределение температуры при t  3 сек.
Задание:
Нагрейте таким же образом построенный Вами параллелепипед с
ребрами ab, cd и ef соответственно.

2.5.3 Двумерная пластина


Пусть толщина пластины в направлении оси Oz очень мала. Тогда
можно считать, что температура пластины не меняется в этом
направлении. Это позволяет нам уменьшить количество ячеек в
направлении оси Oz.
44
Вообще говоря, достаточно оставить лишь одну ячейку. Изменим
блок blocks файла blockMeshDict следующим образом
blocks
(
hex (0 1 2 3 4 5 6 7) (10 10 1) simpleGrading (1 1 1)
);
Теперь наша вычислительная область вместо пятисот ячеек
содержит лишь сто. Расчёт поля температуры должен закончиться быстрее,
чем раньше.
Также изменим блок boundary. Он примет вид
boundary
(
fixedWalls
{
type wall;
faces
(
(3 7 6 2) // top
(1 5 4 0) // bottom
(0 4 7 3) // left
(2 6 5 1) // right
);
};
frontAndBackWall
{
type empty;
faces
{
(0 3 2 1) // back
(4 5 6 7) // front
}
}
}

45
Разберём его. Появилась группа граней frontAndBackWall,
включающая в себя переднюю и заднюю грани параллелепипеда. Тип
empty – это специальный тип грани для случая, когда на ней не заданы
граничные условия. Остальные грани входят в группу fixedWalls.
Затем изменим файл T. Блок boundaryField примет вид
boundaryField
(
fixedWalls
{
type fixedValue;
value uniform 373;
};
frontAndBackWall
{
type empty;
}
}
На границе под названием fixedWalls по-прежнему задано
фиксированное значение температуры (373 К). На передней и задней
гранях граничные условия не заданы. Теперь задача стала двумерной,
искомое поле температуры зависит только от абсциссы и ординаты точек
пластины.
Удалите папки с результатами предыдущих вычислений и запустите
расчёт поля температуры так, как было описано выше в разделе 2.5.1.
Проверьте, как меняется поле температуры. Теперь необязательно
рассекать пластину плоскостью, перпендикулярной оси Oz.
Задание:
Нагрейте таким же образом построенный Вами параллелепипед с
ребрами ab, cd и ef соответственно.

3 Дополнительные сведения о ParaView


Основным инструментом постобработки, который предоставляет
OpenFOAM, является модуль ParaView – приложение для визуализации с
открытым исходным кодом. Модуль скомпилирован в две библиотеки
(PVFoamReader и vtkPVFoam). Рекомендуется использовать ParaView
версии 5.4.0, поставляемую с OpenFOAM 6. Подробные сведения о
практическом использовании ParaView доступны на официальном сайте
[10]. ParaView использует Visualisation Toolkit (VTK) в качестве механизма
обработки и визуализации данных и поэтому может считывать любые
данные в формате VTK. OpenFOAM включает в себя утилиту foamToVTK
46
для преобразования данных из своего собственного формата в формат
VTK. Это означает, что любые графические инструменты на основе VTK
могут быть использованы для последующей обработки кейсов OpenFOAM.
Это обеспечивает альтернативные средства для использования ParaView с
OpenFOAM.
Таким образом, для постобработки в OpenFOAM предлагается
использовать модуль ParaView. В качестве альтернативы данные
OpenFOAM могут быть преобразованы в формат VTK для чтения ParaView
или любыми другими графическими инструментами на основе VTK.

Рис. 3.1 Главное окно ParaView


paraFoam – это скрипт, который запускает модуль ParaView,
поставляемый с OpenFOAM. Его можно выполнить, как и любую другую
утилиту OpenFOAM, двумя способами: либо дать команду paraFoam в
текущем каталоге case; либо воспользоваться опцией -case и передать
утилите paraFoam в качестве аргумента путь к каталогу с файлами
OpenFOAM, например:
paraFoam -case /home/user/Teplo
В результате откроется окно ParaView, показанное на рис. 3.1.
Слева находится панель управления, которая содержит следующие
панели:
Pipeline Browser – отображает список модулей, открытых в ParaView,
где выбранные модули выделены синим цветом, а показ для данного
модуля может быть включен/отключен путем нажатия кнопки с символом
глаза рядом с ним.

47
Панель Properties – здесь показаны время, отображаемые регионы
вычислительной области и физические поля; здесь же находится панель
отображения, которая управляет визуальным представлением
рассматриваемой области (палитры цветов и т.д.). Заметим, что окно
Properties содержит панель Selection, в которой указаны параметры сетки и
физических полей.
Элементы управления показаны на рис. 3.2. Пользователь может
выбрать сетку и поля, которые загружаются в ParaView для всех моментов
времени.

Рис. 3.2 Окно Selection в ParaView


Есть и другие панели, которые можно выбрать в меню View,
включая информационную панель, которая предоставляет статистику,
такую как геометрия и размер сетки.
ParaView использует древовидную структуру, в которой данные
могут быть отфильтрованы из модуля case верхнего уровня для создания
наборов субмодулей. Например, изолинии давления могут быть
субмодулем модуля case, который содержит все данные о давлении. Мощь
ParaView в том, что пользователь может создать ряд субмодулей и
отображать только те, которые ему нужны, чтобы создать требуемое
изображение или анимацию. Например, пользователь может добавить
сетку и векторы скорости к изолиниям давления, включив и выключив
любой из элементов по мере необходимости.
Принцип работы с ParaView таков: пользователь выбирает некоторое
действие (фильтрует данные) и затем нажимает зеленую кнопку «Apply»
на панели Properties. Также есть дополнительные кнопки: кнопка «Reset»,
которая может использоваться при необходимости для возврата
графического интерфейса пользователя к исходному состоянию; и кнопка
«Delete», которая удалит активный модуль.

48
Как и в случае любой операции в paraFoam, пользователь должен
нажать кнопку применить после внесения изменений. Кнопка Apply
выделена зеленым цветом, чтобы предупредить пользователя, о том, что
изменения были сделаны, но не приняты. Такой метод работы имеет то
преимущество, что позволяет пользователю сделать ряд действий, прежде
чем принять их. Это особенно полезно в случаях, когда обработку данных
лучше свести к минимуму.
Если новые данные записываются во время выполнения ParaView,
пользователь должен загрузить дополнительные каталоги времени, нажав
кнопку Refresh Times.
Окно Properties содержит панель Display, показанную на рис. 3.3.
Здесь находятся параметры визуализации данных.

Рис. 3.3 Панель Display


При работе с ParaView важно помнить про следующие его
особенности, приведённые ниже.
Диапазон данных не может быть автоматически обновлен до
максимальных/минимальных пределов поля, поэтому пользователь должен
позаботиться о том, чтобы выбрать Rescale, когда это требуется, в
частности после загрузки исходного модуля.
При нажатии на кнопку Edit открывается окно, в котором находится
панель Color Map Editor. Здесь можно выбрать цвета в пределах шкалы.
Доступны такие шкалы, как RGB, HSV и др. Чаще всего используется
шкала, в которой синий цвет соответствует минимальному значению
искомой величины, а красный – максимальному. Этой шкале соответствует
пункт Diverging из выпадающего списка Color Space.
Также на панели Color Map Editor находится кнопка Edit Color
Legend Properties. При нажатии на неё появляется окно, показанное на
рис. 3.4, в котором можно настраивать параметры надписей к графикам,
49
например, шрифт, выравнивание текста, положение цифр на цветной
полосе и т.д.
Сетку можно увидеть, выбрав пункт Wireframe в меню Representation
панели Display. При этом в блоке Coloring удобно выбрать из
выпадающего меню пункт Solid Color.
Вычислительную область (или сетку (если выбран пункт Wireframe),
можно закрасить одним цветом, выбрав Solid Color в меню Coloring.
Доступны несколько предустановленных палитр цветов. По умолчанию
выбран вариант перехода от холодных цветов к теплым (Cool to Warm).
Изменить палитру можно, нажав на кнопку Choose Presets (справа от
кнопки Edit).

Рис. 3.4 Окно Color Legend


Изображение можно сделать полупрозрачным, отредактировав
значение в текстовом поле Opacity (1 = сплошной, 0 = невидимый) на
панели Styling.
ParaView дублирует функциональность выпадающих меню в верхней
части главного окна и основных панелей, а также в панелях инструментов
ниже основных выпадающих меню. Отображаемые панели инструментов
можно выбрать на панели инструментов в главном меню View. Вид по
умолчанию со всеми панелями инструментов показан на рис. 3.5.
Назначение многих кнопок понятно из их пиктограмм.

Рис. 3.5 Кнопки/меню ParaView

50
Также в меню Help пользователю дается краткое описание функции
любой кнопки.
Заметим, что для того чтобы сохранить скриншот, показывающий
картину распределения того или иного параметра в некоторый момент
времени, необязательно пользоваться клавишей Print Screen. Самый
простой способ вывода изображения в файл из ParaView – выбрать пункт
Save Screenshot в меню File. При этом появляется окно, в котором
пользователь может выбрать разрешение для сохранения изображения.
Существует кнопка, которая при нажатии сохраняет соотношение сторон
рисунка, поэтому, если пользователь изменяет разрешение в одном
направлении, разрешение автоматически настраивается в другом
направлении. После выбора количества точек на дюйм, изображение
можно сохранить. Для достижения высокого качества вывода,
пользователь может попробовать установить разрешение в 1000 пикселей
или более в направлении оси абсцисс, так чтобы изображение оставалось
чётким при масштабировании.
Для того чтобы создать анимационный ролик, пользователь должен
сначала выбрать пункт Save Animation из меню File. При этом появится
диалоговое окно, в котором пользователь может указать ряд параметров,
включая разрешение изображения. Пользователь должен указать
требуемое разрешение. Другим примечательным параметром является
количество кадров на каждый шаг по времени (Frame Rate). По умолчанию
одному шагу по времени соответствует один кадр. Но можно увеличить
это число, чтобы искусственно ввести больше кадров в анимацию. Этот
метод может быть особенно полезен для создания более медленной
анимации, поскольку некоторые видеопроигрыватели имеют
ограниченный контроль над скоростью воспроизведения, особенно при
использовании формата mpeg.
Задания:
1. Сохраните скриншоты, показывающие распределение
температуры при нагреве построенного Вами параллелепипеда в
различные моменты времени. Рассмотрите сечения, перпендикулярные
каждой из координатных осей.
2. Создайте анимационные ролики, показывающие, как происходит
нагрев параллелепипеда в каждом из трёх сечений.

Перейдём к более сложному анализу полученных данных, который


можно выполнить с помощью ParaView. Часто при проведении
математического моделирования того или иного физического процесса
требуется построить изолинии. Напомним, что изолиния – это кривая, во
всех точках которой искомая величина принимает одно и то значение. Вот
как можно построить изолинии с помощью ParaView.
Вернёмся к двумерной пластине, расчёт нагрева которой был
произведён в разделе 2.5.3. Построим сечение этой пластины плоскостью,
перпендикулярной оси Oz (см. раздел 2.5.1). Затем нужно выделить
51
сечение в окне Pipeline Browser и выбрать пункт меню Contour (слева от
Slice). В Pipeline Browser появится новый объект Contour1. Убедитесь, что
в свойствах (Properties) этого объекта в выпадающем списке Contour By
выбрано поле температуры T. Затем, нажав на кнопку с красным
крестиком (Remove all entries) уберите все строки из списка Isosurfaces
(если они там есть). Теперь нажмите кнопку Add a range of values, после
этого появится диалоговое окно.
В нашем случае минимальная температура точек пластины – 273 К, а
максимальная – 373 К. Построим 10 изолиний, равномерно
распределенных между 273 К и 373 К.
Заполните поля диалогового окна Add Range так, как показано на
рис. 3.6. Затем закройте это окно, нажав на кнопку OK.

Рис. 3.6 Диапазон изолиний


Затем нажмите на кнопку Apply. После этого пластинка пропадет, и
Вы увидите серый фон с десятью белыми изолиниями на краях пластинки.
Если хотите, можете изменить цвет изолиний, выбрав T в выпадающем
списке меню Coloring. (Но лучше оставить Solid Color, чтобы изолинии не
сливались с полем температуры.) Кликните мышью один раз на сером
глазе около строки Slice1 (глаз станет черным, и Вы увидите сечение
пластины). Затем дважды кликните мышью на сером глазе около строки
Teplo.OpenFOAM. После этого исчезнут рёбра параллелепипеда и перед
Вами будет сечение с изолиниями при t  0 сек. Нажмите на кнопку Play.
Вы увидите, как меняется с течением времени положение изолиний (это
кривые белого цвета). На рис. 3.7 показаны изолинии при t  3 сек.

Задание:
Сохраните скриншоты, показывающие изолинии температуры в трёх
сечениях построенного Вами параллелепипеда в различные моменты
времени. Также сохраните видео-файлы, демонстрирующие, как меняются
изолинии с течением времени.

52
Рис. 3.7 Изолинии температуры в сечении при t  3 сек

Вернёмся к началу процесса, нажав кнопку First Frame (0). Добавим


теперь к нашему сечению надпись, в которой будет отображаться текущее
время. Выберите пункт меню Sources -> Annotate Time. В Pipeline Browser
появится новый объект AnnotateTime1. Нажмите Apply. В левом верхнем
углу окна ParaView появится надпись с начальным временем расчёта.

Рис. 3.8 Надпись с текущим временем


В свойствах объекта AnnotateTime1 приведена следующая надпись:
Time: %f. Для отображения числа использован такой же формат, как в
функции printf языка C. Символ f означает вещественное число. Перед
этим символом можно указать, сколько знаков отводится на это число и
сколько знаков после запятой нужно вывести. Поменяйте эту надпись на

53
«Время: %0.2f» (кавычки печатать не нужно) и нажмите Apply. Надпись
изменится, у числа останется только два знака после запятой (см. рис. 3.8).
Для того чтобы поменять положение надписи на экране,
воспользуйтесь блоком Text Position, показанным на рис. 3.9.

Рис. 3.9 Положение надписи


Вы можете выбрать пункт Use Window Location и поместить надпись
в один из углов окна, а также разместить её по центру окна снизу или же
сверху. Также Вы можете выбрать пункт Lower Left Corner. После этого
Вы сможете перетаскивать надпись в нужное место левой кнопкой мыши.
Один из вариантов конечного положения надписи показан на рис. 3.10.

Рис. 3.10 Перемещенная надпись


Заметим, что иногда при изменении параметров задачи меняются
диапазоны изменения искомых величин. По умолчанию, границы
диапазонов пересчитываются только при нажатии кнопки Apply. Если Вас
это не устраивает, то зайдите в меню Edit -> Settings. В выпадающем
списке Transfer Function Reset Mode есть три варианта, показанные на
рис. 3.11.

54
Рис. 3.11 Диапазон изменения параметра

Здесь Grow and update on 'Apply' означает, что ParaView будет


расширять/сужать диапазон изменения параметра при нажатии на кнопку
Apply; Grow and update every timestep – расширять/сужать диапазон на
каждом шаге по времени; Clamp and update every timestep – расширять
диапазон на каждом шаге по времени, сужение диапазона не происходит.

Рис. 3.12 Свойства фильтра Calculator


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

55
Выделите синим цветом строку Slice1 и выберите пункт меню Filters
-> Common -> Calculator (также можно воспользоваться алфавитным
списком всех фильтров). В Pipeline Browser появится новый объект под
названием Calculator1. Его свойства показаны на рис. 3.12.

Рис. 3.13 Формула в фильтре Calculator

С помощью калькулятора можно рассчитать ту или иную


тригонометрическую функцию от некоторого параметра, модуль и норму
вектора (abs и norm).
Также можно выполнить и другие действия. Найдём, например, как
меняется квадрат температуры среза. Измените название выходного
массива на SqT (от англ. square of T – квадрат температуры). В следующей
строке напишите правую часть нужной функции (см. рис. 3.13). В
выпадающем списке Coloring выберите Ваше новое поле SqT и нажмите
Apply. Убедитесь также, что ParaView отображает только объекты
Calculator1 и AnnotateTime1. Символы глаз около остальных объектов
должны быть серыми.
На рис. 3.14 показан закон распределения квадрата температуры при
t  3 сек.

Задания:
1. Вернитесь к задаче о нагреве Вашего параллелепипеда. Поместите
в произвольное место экрана метку со временем. Увеличьте в надписи
количество знаков после запятой до трёх. Как нужно изменить параметры
задачи, чтобы при проведении математического моделирования менялась
последняя цифра в надписи?
2. Установите, как меняется с течением времени натуральный
логарифм температуры при нагреве Вашего параллелепипеда.

56
Рис. 3.14 Квадрат температуры в сечении при t  3 сек

Полезным фильтром, позволяющим анализировать изменение


параметра с течением времени вдоль некоторой линии является Plot Over
Line. Выделите синим цветом строку Slice1 и выберите пункт меню Filters -
> Data Analysis -> Plot Over Line. В Pipeline Browser появится новый объект
PlotOverLine1. Его свойства показаны на рис. 3.15.

Рис. 3.15 Свойства Plot Over Line

57
Установите белую линию параллельно оси абсцисс, нажав кнопку
X Axis, и затем нажмите кнопку Apply. Появится окно LineChartView1
содержащее график. После этого выберите в выпадающем списке
X_Array_Name (блок X Axis Parameters) пункт Points_X. Так Вы поменяете
подписи к оси абсцисс на абсциссы точек, через которые проходит Ваша
линия. Убедитесь также, что в разделе Series Parameters выбрано поле
температуры T.
После этого можно поменять названия осей, например левой и
нижней (Left Axis Title и Bottom Axis Title соответственно) и подписать
график (поле Chart Title).
Запустите визуализацию процесса, нажав кнопку Play. В окне
LineChartView1 появится график изменения температуры вдоль нужной
Вам линии. На рис. 3.16 показан закон изменения температуры вдоль оси
абсцисс при t  3 сек.

Рис. 3.16 Закон изменения температуры вдоль линии при t  3 сек

58
Таким образом, ParaView – это мощное средство, позволяющее
визуализировать и обрабатывать экспериментальные данные. Более
подробные сведения о нём можно почерпнуть на официальном сайте
проекта или в руководстве пользователя [12].

Задания:
1. Постройте графики изменения температуры пластины вдоль осей
ординат и аппликат соответственно.
2. Установите, как меняется с течением времени температура вдоль
каждой из осей при нагреве Вашего параллелепипеда.
3. Выберите произвольную линию, не параллельную координатной
оси. Установите, как меняется с течением времени температура вдоль этой
линии при нагреве Вашего параллелепипеда.

59
Литература
1. Официальный сайт OpenFOAM. – URL: https://openfoam.org/ (дата
обращения 14.01.2019).
2. Документация blockMesh. – URL: http://openfoamwiki.net/
index.php/blockMesh (дата обращения 15.01.2019).
3. Документация SnappyHexMesh. – URL: http://openfoamwiki.net/
index.php/blockMeshSnappyHexMesh (дата обращения 15.01.2019).
4. Самарский А.А. Введение в теорию разностных схем. – М.: Наука,
1971. – 552 с.
5. Зенкевич О., Морган К. Конечные элементы и аппроксимация. –
М.: Мир, 1986. – 318 с.
6. Коннор Дж., Бреббиа К. Метод конечных элементов в механике
жидкости. – Л.: Судостроение, 1979. – 264 с.
7. Ковеня В.М., Чирков Д.В. Методы конечных разностей и
конечных объёмов для решения задач математической физики. –
Новосибирск: Новосибирский государственный университет, 2013. – 87 с.
8. Официальный сайт Ubuntu. – URL: https://www.ubuntu.com/ (дата
обращения 10.02.2019).
9. Официальный сайт VirtualBox. – URL: https://www.virtualbox
.org (дата обращения 11.02.2019).
10. Официальный сайт ParaView. – URL: https://www.paraview.org/
(дата обращения 20.08.2019).
11. Тихонов А.Н., Самарский А.А. Уравнения математической
физики. – М.: Наука, 2004. – 798 с.
12. ParaView Guide. – URL: https://gitlab.kitware.com/paraview/
paraview-guide-ce (дата обращения 20.08.2019).

60
Учебное издание

Панкратов И.А.

МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ
РЕАЛЬНЫХ ПРОЦЕССОВ В ПАКЕТЕ OPENFOAM

Учебное пособие

для студентов и магистрантов

направлений «Прикладная математика и информатика»,


«Механика и математическое моделирование»
и других естественно-научных специальностей

Подписано в печать 29.10.2019 г. Формат 60×84/16.


Усл.-печ. л. 3,8. Усл.-изд. л. 3,4. Тираж 300 экз. Заказ № 298.
___________________________________________________________
Издательство «Саратовский источник»
г. Саратов, ул. Кутякова 138б, 3 этаж.
Тел. (8452) 52-05-93
E-mail: saristoch@bk.ru
Отпечатано в типографии «Саратовский источник»

61