Использование пакета конечных элементов FreeFen++ для задач гидродинамики, электрофореза и биологии
Покупка
Основная коллекция
Тематика:
Математика
Издательство:
Южный федеральный университет
Год издания: 2008
Кол-во страниц: 256
Дополнительно
Вид издания:
Монография
Уровень образования:
ВО - Магистратура
ISBN: 978-5-9275-0378-0
Артикул: 633290.01.99
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 01.03.01: Математика
- ВО - Магистратура
- 01.04.01: Математика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Южный федеральный университет М. Ю. Жуков, Е. В. Ширяева Использование пакета конечных элементов FreeFem++ для задач гидродинамики, электрофореза и биологии Ростов-на-Дону 2008
УДК 519.63; 532.5; 537.364 ББК 22.25 Ж 86 Печатается по решению кафедры вычислительной математики и математической физики и Совета факультета математики, механики и компьютерных наук ЮФУ от 15.09.2007 Р е ц е н з е н т ы Я. М. Ерусалимский, Н. В. Петровская Жуков М. Ю., Ширяева Е. В. Использование пакета конечных элементов FreeFem++ для задач гидродинамики, электрофореза и биологии. — Ростов н/Д : Изд-во ЮФУ, 2008. — 256 с., ил. Учебное пособие предназначено для практического освоения языка FreeFem++, используемого для численного решения задач математической физики методом конечных элементов. Содержит подробные программные коды и большой набор задач. Рекомендуется студентам факультета математики, механики и компьютерных наук ЮФУ. c⃝ М. Ю. Жуков, Е. В. Ширяева, 2008 c⃝ Издательство ЮФУ
Оглавление Часть I. Основы метода конечных элементов 11 1 Метод конечных элементов в одномерном случае 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 Метод конечных элементов в двумерном случае 29 2.1 Задача Дирихле для уравнения Лапласа. Слабое решение . . . . . . . . . 30 2.2 Построение приближенного решения . . . . . . . . . . . . . . . . . . . . . 31 Часть II. Обучение на примерах 35 3 Решение задач для уравнения Лапласа 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
Оглавление 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
Оглавление 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
Оглавление 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
Оглавление 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 Используемые обозначения и формулы 248 C Список ключевых слов 249 Литература 250
Предисловие FreeFem++ это интегрированная среда разработки (IDE) со своим собственным высокоуровневым языком программирования, предназначенная для численного решения дифференциальных уравнений в частных производных методом конечных элементов. FreeFem++ позволяет исследовать стационарные и нестационарные математические модели (в физике, химии, биологии, инженерных приложениях и т. п.) в 2D-пространственном случае и является прекрасным инструментом как для обучения методу конечных элементов, так и для решения научных проблем. FreeFem++ — свободно распространяемое математическое обеспечение, которое используется на различных платформах (Unix OS, Windows 9x, 2000, NT, XP и MacOS X). Авторы FreeFem++ — F. Hecht, O. Pironneau, A. Le Hyaric, K. Ohtsuka — сотрудники лаборатории Ж.-Л. Лионса университета Пьера и Марии Кюри (Париж VI) и Французской Академии Наук. В комплект установки FreeFem++1, помимо самой интегрированной среды разработки, включено большое количество примеров и подробное руководство пользователя [1]. Заметим, что хотя FreeFem++ и является средой разработки, по существу, это все-таки компилятор специального языка, существенно ориентированного на работу с методом конечных элементов и поэтому в дальнейшем удобно говорить именно о языке FreeFem++. Коротко перечислим возможности FreeFem++: 1. Построение численного решения стационарных и нестационарных, линейных и нелинейных двумерных краевых задач. 2. Непосредственно, т. е. без составления алгоритма, возможно решение только линейных стационарных краевых задач. При этом исходная задача должна быть представлена в слабой (вариационной) формулировке. 3. Решение нестационарных и нелинейных краевых задач требует составления некоторого алгоритма решения, пошагового для нестационарных и итерационного для нелинейных задач, позволяющего сводить исходную задачу к набору линейных краевых задач. 4. Пространственно двумерная область, в которой строится решение, описывается при помощи границ, задаваемых в параметрическом виде удобными аналитическими соотношениями. 5. Для триангуляции области используется встроенный автоматический генератор сеток, основанный на алгоритме Делоне–Вороного, при этом плотность внутренних точек области пропорциональна плотности точек 1 http://www.freefem.org/ff++ 8
Предисловие 9 на ее границе. При построении сеток применяется анизотропная адаптация, позволяющая эффективно перестраивать сетку в процессе проведения вычислений. Сгенерированные сетки можно сохранять в виде файлов и использовать в дальнейшем. 6. Для построения решения имеется большой набор финитных базисных функций (конечных элементов): кусочно-постоянные, линейные и квадратичные лагранжевы элементы и др. Имеется возможность создавать свои собственные базисные функции. 7. Для проведения расчетов имеется большой набор быстрых алгоритмов для решения эллиптических конечно-разностных задач. Это разнообразные прямые и итеративные алгоритмы решения систем линейных уравнений — LU, Cholesky, Crout, CG, GMRES, UMFPACK, а также алгоритмы для нахождения собственных значений и собственных векторов. 8. Имеется возможность получения информации о решении в графическом виде непосредственно на экране дисплея, а также в виде текстовых и postscript-файлов. 9. Алгоритмы записываются на языке, близком к C++ (знание C++ не требуется). При этом эффективность кода по скорости близка к оптимальной, сравнимой со скоростью программ, непосредственно написанных на языке С++. 10. В случае необходимости имеется возможность доступа к внутренним векторам и матрицам, что, в частности, позволяет создавать собственные алгоритмы решения задач взамен имеющихся стандартных. По сравнению с коммерческими пакетами, предназначенными для решения уравнений в частных производных, например, FemLab или FlexPDE, использование FreeFem++ требует б´ольшей «умственной» работы от пользователя. В частности, невозможно записать задачу в исходном виде (FlexPDE предоставляет такую возможность, а FemLab содержит список задач, в котором можно задавать численные значения параметров) — требуется преобразование к так называемой слабой формулировке. Менее развит и интерфейс среды FreeFem++. Однако эти минусы почти полностью компенсируются простотой языка FreeFem++, возможностью доступа ко всем внутренним данным и возможностью создания собственных алгоритмов. Иными словами, FreeFem++ это не «черный ящик», решающий задачи, а инструмент для исследовательской работы, которая, зачастую, требует конструирования уникальных методов решения. Одновременно с этим простота языка FreeFem++, как уже говорилось, позволяет использовать его для обучения способам применения метода конечных элементов. Предлагаемая книга предназначена читателям, желающим использовать метод конечных элементов для решения своих задач. В ней содержится большое количество примеров применения средств языка FreeFem++ к решению разнообразных задач математической физики. Книга ни в коем случае не заменяет руководства по использованию FreeFem++ [1]. Более того, предполагается, что чтение данной книги и [1] будет осуществляться параллельно. В [1] читатель найдет большое количество примеров и сможет изучить практически все возможности языка FreeFem++. Коротко опишем структуру материала в книге, который разбит на три
Предисловие части. В первой части (гл. 1, 2) дано краткое изложение метода конечных элементов для одномерного и двумерного случаев. Вторая часть — это алгоритмы решения на языке FreeFem++ различных конкретных задач. Спектр этих задач весьма широк: простейшие задачи для уравнения Лапласа в гл. 3, 4, задачи для уравнения переноса в гл. 5, задача об окраске шкур животных в гл. 6. Именно в этих главах содержатся основные алгоритмы и приемы, которые затем активно используются. Гл. 7–15 содержат задачи, связанные с течением жидкости: вихревые течения в гл. 7, тепловая конвекция в гл. 8, течения в каналах и обтекание препятствий в гл. 9, течение жидкости со свободной границей в гл. 14, течение Куэтта-Тейлора в гл. 15. Гл. 10–13 содержат задачи о переносе примесей в жидкости. Структура всех глав второй части примерно одинакова. Во-первых, это подробная постановка математической задачи с необходимыми сведениями из физики, биологии и т. п. Во-вторых, это алгоритм решения и код программы на языке FreeFem++. В-третьих, это иллюстрированные результаты вычислительного эксперимента. Такая схема, помимо изучения языка, позволяет, в частности, использовать книгу в качестве справочника для получения информации о постановке задач и результатах их численного решения. Наличие работоспособных кодов позволяет читателю без труда воспроизвести приводимые результаты расчетов и, изменив параметры, получить ответы на интересующие его вопросы. Третья часть содержит детальное описание языка FreeFem++ и предназначена для углубленного изучения его возможностей. В первую очередь это описание синтаксиса в гл. 16, описание приемов управления триангуляцией области в гл. 17, описание принципов выбора базисных функций для построения приближенного решения в гл. 18. В этой части, в гл. 19, описан выбор методов численного решения эллиптических конечно-разностных задач (систем линейных алгебраических уравнений) и изложены способы решения краевых задач, отличные от приведенных во второй части. В гл. 20 изложен способ решения краевых задач на собственные значения при помощи языка FreeFem++. Наконец, гл. 21 посвящена возможностям визуализации результатов расчета. Неоценимую помощь авторам оказали студенты факультета математики, механики и компьютерных наук Южного федерального университета Ю. К. Самадова, Д. Д. Дуброва и И. И. Чернухина (подготовка части рисунков и тестирование алгоритмов), а также сотрудники университета Н. М. Жукова, прочитавшая рукопись и лишившая будущего читателя возможности обнаружить большое количество опечаток, И. В. Ширяева, сделавшая ряд важных замечаний о синтаксисе языка при написании гл. 16. Работа выполнена благодаря поддержке внутренних грантов Южного федерального университета, а также при поддержке грантов РФФИ (07-0100389а), Европейского научного объединения «Регулярная и хаотическая гидродинамика» (07-01-9213) и гранта Президента поддержки ведущих научных школ Российской Федерации (НШ.5747.2006.1).