Южный федеральный университет М.Ю. Жуков, Е. В. Ширяева Использование пакета конечных элементов FreeFem++ для задач гидродинамики, электрофореза и биологии Ростов-на-Дону 2008 УДК 519.63; 532.5; 537.364 ББК 22.25 Ж86 и Совета факультета математики, механики и компьютерных наук ЮФУ от 15.09.2007 кафедры вычислительной математики и математической физики Печатается по решению Ре ц е нз е нты Я.М. Ерусалимский, Н. В. Петровская Жуков М.Ю., Ширяева Е. В. <...> Использование пакета конечных элементов FreeFem++ для задач гидродинамики, электрофореза и биологии. <...> Обучение на примерах 3 Решение задач для уравнения Лапласа 29 2.1 Задача Дирихле для уравнения Лапласа. <...> Это разнообразные прямые и итеративные алгоритмы решения систем линейных уравнений —LU, Cholesky, Crout, CG, GMRES, UMFPACK, а также алгоритмы для нахождения собственных значений и собственных векторов. <...> По сравнению с коммерческими пакетами, предназначенными для решения уравнений в частных производных, например, FemLab или FlexPDE, использование FreeFem++ требует б´ ольшей «умственной» работы от пользователя. <...> Книга ни в коем случае не заменяет руководства по использованию FreeFem++ [1]. <...> 10–13 содержат задачи о переносе примесей в жидкости. <...> Для названия базисных функций используются термины: тестовые функции, пробные функции и т. п. <...> 1.2 Построение приближенного решения задачи 1.2.1 Слабое решение Будем искать приближенное решение задачи (1.4) в виде uh(x) = n−1 k=1 где uh(x) — приближенное решение, функции ϕk(x) предполагаются известными, линейно независимыми и называются базисными функциями (другие названия — тестовые функции, пробные функции), ck — коэффициенты, подлежащие определению. <...> Заметим, что функция (1.5) будет являться приближением решения исходной задачи (1.1), (1.2), если на базисные функции ϕk(x) будут наложены дополнительные ограничения (1.6) — требования удовлетворения граничным условиям (1.2). ления матрицы Aik (см. <...> Особенно подчеркнем, что матрица Aik будет симметрична при любом выборе базисных функций. <...> 1.3.1 Финитные базисные <...>
Использование_пакета_конечных_элементов_FreeFen++_для_задач_гидродинамики,_электрофореза_и_биологии.pdf
УДК 519.63; 532.5; 537.364
ББК 22.25
Ж 86
и Совета факультета математики, механики и компьютерных наук ЮФУ
от 15.09.2007
кафедры вычислительной математики и математической физики
Печатается по решению
Я.М. Ерусалимский, Н. В. Петровская
Ре ц е н з е н ты
Жуков М.Ю., Ширяева Е. В.
да Использование пакета конечных элементов FreeFem++ для заИзд-воч
гидродинамики, электрофореза и биологии. — Ростов н/Д :
ЮФУ, 2008. — 256 с., ил.
Учебное пособие предназначено для практического освоения языка
физикиFreeFem++, используемого для численного решения задач математической
механики и компьютерных наук ЮФУ.
методом конечных элементов. Содержит подробные программные
тики,коды и большой набор задач. Рекомендуется студентам факультета матемаc
М.Ю. Жуков, Е. В. Ширяева, 2008
c Издательство ЮФУ
Стр.2
Оглавление
Часть I. Основы метода конечных элементов
1 Метод конечных элементов в одномерном случае
11
12
1.1 Сильное и слабое решение задачи . . . . . . . . . . . . . . . . . . . . . . . 12
1.2 Построение приближенного решения задачи . . . . . . . . . . . . . . . . . 14
1.2.1 Слабое решение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.2 Метод Галеркина. Сильное решение . . . . . . . . . . . . . . . . . . 15
1.2.3 Конечно-разностный метод . . . . . . . . . . . . . . . . . . . . . . . 16
1.3 Выбор базисных функций . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.1 Финитные базисные функции . . . . . . . . . . . . . . . . . . . . . 19
1.3.2 Вычисление элементов матрицы Aik и вектора bi . . . . . . . . . . 22
1.4 Естественные и главные краевые условия . . . . . . . . . . . . . . . . . . 24
2 Метод конечных элементов в двумерном случае
Часть II. Обучение на примерах
3 Решение задач для уравнения Лапласа
29
2.1 Задача Дирихле для уравнения Лапласа. Слабое решение . . . . . . . . . 30
2.2 Построение приближенного решения . . . . . . . . . . . . . . . . . . . . . 31
35
38
3.1 Задача о стационарном распределении температуры . . . . . . . . . . . . 38
3.1.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.1.2 Слабая формулировка задачи . . . . . . . . . . . . . . . . . . . . . 39
3.1.3 Слабая формулировка задачи на языке FreeFem++ . . . . . . . . . 41
3.1.4 Задание области D на языке FreeFem++ . . . . . . . . . . . . . . . 42
3.1.5 Полный код программы на языке FreeFem++ . . . . . . . . . . . . 43
3.2 Решение задачи о распределении температуры в областях сложной формы 44
3.2.1 Решение задачи для круга . . . . . . . . . . . . . . . . . . . . . . . 45
3.2.2 Распределение температуры в четырехугольнике . . . . . . . . . . 45
3.2.3 Решение задачи в криволинейной области . . . . . . . . . . . . . . 46
3.2.4 Решение задачи в области с отверстием . . . . . . . . . . . . . . . 47
3.3 Физические задачи, приводящие к уравнению Лапласа . . . . . . . . . . . 48
3.3.1 Теплопроводность . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.2 Диффузия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.3.3 Электрический потенциал (электростатика) . . . . . . . . . . . . . 52
3.3.4 Электрический потенциал (проводимость) . . . . . . . . . . . . . . 53
3.3.5 Потенциальное течение несжимаемой жидкости . . . . . . . . . . . 54
3.3.5.1 Стационарное обтекание крыла . . . . . . . . . . . . . . . 55
4 Решение нестационарной задачи для уравнения Лапласа
59
4.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2 Способ построения решения . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2.1 Аппроксимация производной по времени . . . . . . . . . . . . . . . 60
4.2.2 Слабая формулировка задачи . . . . . . . . . . . . . . . . . . . . . 61
3
Стр.3
4
Оглавление
4.3 Реализация алгоритма на языке FreeFem++ . . . . . . . . . . . . . . . . . 61
4.4 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.5 Общая схема аппроксимации производной по времени . . . . . . . . . . . 64
4.6 Контроль погрешности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5 Уравнение переноса
69
5.1 Постановка задачи Коши для гиперболических уравнений . . . . . . . . . 69
5.2 Метод характеристик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.3 Метод характеристик (двумерный случай) . . . . . . . . . . . . . . . . . . 72
5.4 Аппроксимация уравнения переноса . . . . . . . . . . . . . . . . . . . . . . 74
5.5 Реализация алгоритма на языке FreeFem++ . . . . . . . . . . . . . . . . . 75
5.6 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.7 Уравнение диффузии–переноса . . . . . . . . . . . . . . . . . . . . . . . . 77
6 Уравнения реакция–диффузия. Окраска шкур животных
78
6.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.2 Слабая формулировка задачи . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.3 Фрагменты кодов на языке FreeFem++ . . . . . . . . . . . . . . . . . . . . 80
6.4 Окраска шкур животных . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.4.1 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . 82
6.4.1.1 Деформация области . . . . . . . . . . . . . . . . . . . . . 84
6.4.1.2 Различные модификации кода . . . . . . . . . . . . . . . . 84
6.4.2 Реализация алгоритма на языке FreeFem++ . . . . . . . . . . . . . 85
7 Перенос-диффузия вихря
89
7.1 Переменные вихрь-функция тока . . . . . . . . . . . . . . . . . . . . . . . 89
7.2 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.3 Алгоритм решения задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.4 Реализация алгоритма на языке FreeFem++ . . . . . . . . . . . . . . . . . 92
7.5 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 93
7.5.1 Движение вихрей в квадратной области . . . . . . . . . . . . . . . 93
7.5.2 Движение вихрей в круге . . . . . . . . . . . . . . . . . . . . . . . . 94
7.5.3 Периодические краевые условия. Вихри на торе . . . . . . . . . . . 96
8 Тепловая конвекция
98
8.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
8.2 Алгоритм решения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
8.2.1 Аппроксимация по времени . . . . . . . . . . . . . . . . . . . . . . . 100
8.2.2 Метод проекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
8.2.3 Решение задачи Неймана . . . . . . . . . . . . . . . . . . . . . . . . 102
8.2.4 Общая схема решения задачи . . . . . . . . . . . . . . . . . . . . . 103
8.3 Реализация алгоритма на языке FreeFem++ . . . . . . . . . . . . . . . . . 104
8.4 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.4.1 Теплоизолированная прямоугольная область . . . . . . . . . . . . . 106
8.4.2 Теплоизолированный круг . . . . . . . . . . . . . . . . . . . . . . . 107
8.4.3 Тепловая конвекция в «чайнике» . . . . . . . . . . . . . . . . . . . 107
8.4.4 Тепловая конвекция в «электрочайнике» . . . . . . . . . . . . . . . 108
8.5 Числа подобия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
9 Различные течения жидкости
110
9.1 Задача о течении жидкости в полости . . . . . . . . . . . . . . . . . . . . 110
9.1.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
9.1.2 Реализация алгоритма на языке FreeFem++ . . . . . . . . . . . . . 111
9.1.3 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . 112
9.2 Течение в канале . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
9.2.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
9.2.2 Реализация алгоритма на языке FreeFem++ . . . . . . . . . . . . . 115
9.2.3 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . 117
9.2.3.1 Течение в канале T-образной формы . . . . . . . . . . . . 117
Стр.4
Оглавление
5
9.2.3.2 Обтекание препятствия в канале . . . . . . . . . . . . . . 118
9.3 Обтекание тел жидкостью. Дорожка Кармана . . . . . . . . . . . . . . . . 119
9.3.1 Обтекание прямоугольного тела вязкой жидкостью . . . . . . . . . 119
9.3.2 Обтекание круглого тела вязкой жидкостью . . . . . . . . . . . . . 119
9.3.3 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . 120
10 Перенос пассивной примеси
122
10.1 Задача о движении пассивной примеси в жидкости . . . . . . . . . . . . . 122
10.2 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
10.3 Алгоритм решения задачи на языке FreeFem++ . . . . . . . . . . . . . . . 123
10.4 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 126
11 Перенос примеси электрическим полем
128
11.1 Основные уравнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
11.2 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
11.3 Алгоритм решения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
11.4 Реализация алгоритма на языке FreeFem++ . . . . . . . . . . . . . . . . . 132
11.5 Бездиффузионная модель переноса . . . . . . . . . . . . . . . . . . . . . . 133
11.5.1 Условия на разрыве . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
11.5.2 Задача о распаде начального разрыва . . . . . . . . . . . . . . . . 134
11.6 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 136
11.6.1 Случай α > 0 (увеличение σ с ростом c) . . . . . . . . . . . . . . . 136
11.6.2 Влияние параметра α на перенос примеси . . . . . . . . . . . . . . 137
11.7 Метод решения задачи, не использующий оператор convect . . . . . . . . 138
12 Задача о движении двух примесей
140
12.1 Основные уравнения и постановка задачи . . . . . . . . . . . . . . . . . . 140
12.2 Реализация алгоритма решения на языке FreeFem++ . . . . . . . . . . . . 141
12.3 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 142
12.4 Решение задачи с использованием ключевого слова convect . . . . . . . . 143
13 Перенос примеси электрическим полем и жидкостью
145
13.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
13.2 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 146
13.2.1 Перенос примеси жидкостью и электрическим полем . . . . . . . . 146
13.2.2 Сравнение различных типов переноса . . . . . . . . . . . . . . . . . 148
14 Решение задачи со свободной границей
149
14.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
14.2 Код на языке FreeFem++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
14.3 Результаты расчетов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
15 Течение Куэтта-Тейлора между вращающимися цилиндрами
154
15.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
15.1.1 Функция тока . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
15.2 Алгоритм решения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
15.2.1 Аппроксимация по времени . . . . . . . . . . . . . . . . . . . . . . . 156
15.2.2 Проекционный метод . . . . . . . . . . . . . . . . . . . . . . . . . . 157
15.2.3 Слабая формулировка задачи . . . . . . . . . . . . . . . . . . . . . 157
15.3 Реализация алгоритма на языке FreeFem++ . . . . . . . . . . . . . . . . . 158
15.4 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 160
Часть III. Конструкции языка FreeFem++ (краткий обзор)
161
Стр.5
6
Оглавление
16 Синтаксис
162
16.1 Типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
16.1.1 Основные типы данных . . . . . . . . . . . . . . . . . . . . . . . . . 164
16.1.2 Глобальные переменные . . . . . . . . . . . . . . . . . . . . . . . . . 165
16.2 Системные команды . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
16.3 Математические операции . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
16.4 Функции одной переменной . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
16.4.1 Встроенные функции . . . . . . . . . . . . . . . . . . . . . . . . . . 168
16.4.1.1 Элементарные функции . . . . . . . . . . . . . . . . . . . 168
16.4.1.2 Случайные функции . . . . . . . . . . . . . . . . . . . . . 170
16.4.1.3 Дополнительные математические функции . . . . . . . . 170
16.5 Функции двух переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
16.5.1 Задание функций с помощью формул . . . . . . . . . . . . . . . . . 170
16.5.2 Конечноэлементные функции . . . . . . . . . . . . . . . . . . . . . 171
16.6 Оператор условного перехода . . . . . . . . . . . . . . . . . . . . . . . . . 172
16.7 Циклы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
16.7.1 Цикл с параметром . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
16.7.2 Цикл с условием . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
16.8 Операторы ввода/вывода. Файлы . . . . . . . . . . . . . . . . . . . . . . . 174
16.9 Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.9.1 Одномерные массивы . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.9.2 Двумерные массивы с целочисленными индексами . . . . . . . . . 178
16.10Разреженные матрицы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
16.10.1Создание разреженной матрицы . . . . . . . . . . . . . . . . . . . . 180
16.10.2Операции над разреженными матрицами . . . . . . . . . . . . . . . 186
17 Генерация сеток
191
17.1 Простейшая область. Ключевое слово square . . . . . . . . . . . . . . . . 191
17.2 Ключевое слово border . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
17.3 Запись/чтение сгенерированных сеток . . . . . . . . . . . . . . . . . . . . 194
17.4 Ключевое слово «triangulate» . . . . . . . . . . . . . . . . . . . . . . . . 195
17.5 Ключевое слово «movemesh» . . . . . . . . . . . . . . . . . . . . . . . . . . 196
17.6 Ключевое слово «adaptmesh» . . . . . . . . . . . . . . . . . . . . . . . . . . 197
18 Конечные элементы
201
18.1 Интерполяция кусочно-линейными функциями . . . . . . . . . . . . . . . 201
18.1.1 Барицентрические координаты . . . . . . . . . . . . . . . . . . . . . 202
18.1.2 Интерполяция на треугольнике . . . . . . . . . . . . . . . . . . . . 204
18.1.3 Линии уровня . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
18.1.4 FE-функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
18.1.5 Кусочно-линейная интерполяция . . . . . . . . . . . . . . . . . . . 207
18.2 Базисные функции в FreeFem++ . . . . . . . . . . . . . . . . . . . . . . . . 209
18.2.1 P0 элементы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
18.2.2 P1 элементы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
18.2.3 P2 элементы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
18.2.4 P1nc элементы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
18.2.5 Элементы P1b и P2b . . . . . . . . . . . . . . . . . . . . . . . . . . 213
18.3 Векторнозначные FE-функции . . . . . . . . . . . . . . . . . . . . . . . . . 214
18.3.1 RT0 элементы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
18.4 Загружаемые конечные элементы . . . . . . . . . . . . . . . . . . . . . . . 217
18.5 Численное интегрирование . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
18.5.1 Интегрирование по границе области . . . . . . . . . . . . . . . . . 218
18.5.2 Интегрирование по области . . . . . . . . . . . . . . . . . . . . . . 220
Стр.6
Оглавление
7
19 Способы записи и решения задач в языке FreeFem++
223
19.1 Ключевые слова problem и solve . . . . . . . . . . . . . . . . . . . . . . . . 224
19.1.1 Слабая форма задачи и краевые условия . . . . . . . . . . . . . . . 224
19.1.2 Параметры, влияющие на решение задачи . . . . . . . . . . . . . . 226
19.2 Вариационные формы и разреженные матрицы . . . . . . . . . . . . . . . 227
19.3 Ключевое слово macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
20 Задачи на собственные значения
233
20.1 Функция EigenValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
20.2 Собственные значения оператора Лапласа . . . . . . . . . . . . . . . . . . 234
20.2.1 Задача для прямоугольника . . . . . . . . . . . . . . . . . . . . . . 235
20.2.2 Задача для квадрата . . . . . . . . . . . . . . . . . . . . . . . . . . 235
20.3 Вычислительный эксперимент . . . . . . . . . . . . . . . . . . . . . . . . . 236
21 Визуализация результатов расчетов
238
21.1 Визуализация с помощью средств FreeFem++ . . . . . . . . . . . . . . . . 238
21.1.1 Параметры команды plot . . . . . . . . . . . . . . . . . . . . . . . 239
21.2 Визуализация с помощью программы medit . . . . . . . . . . . . . . . . . 243
21.3 Визуализация с помощью программы gnuplot . . . . . . . . . . . . . . . . 244
A Установка программного обеспечения
246
A.1 Взаимодействие с текстовыми редакторами . . . . . . . . . . . . . . . . . 246
B Используемые обозначения и формулы
C Список ключевых слов
Литература
248
249
250
Стр.7