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

Иллюстрация DEEB-FLOW: экспериментальная установка для валидации расчёта
Интерактивная концептуальная иллюстрация: местный коэффициент теплоотдачи вдоль нагреваемой трубы, по мотивам проекта DEEB-FLOW. Ведите указатель поперёк, чтобы измельчить сетку с 4 до 32 ячеек: расчётные ступени сходятся к сеточно-независимой кривой (пунктир), а строка показаний даёт индекс сеточной сходимости. Расхождение, которое остаётся с измеренными точками и их погрешностями, и есть предмет валидации. Значения условные.

Красивая картинка и три вопроса

Студент показывает вам красивое поле течения вокруг автомобиля. Плавные цвета, правдоподобные линии тока, коэффициент сопротивления с тремя знаками после запятой. Вы задаёте три вопроса: какой был y+ на поверхности, сошёлся ли баланс массы и насколько изменилось сопротивление при измельчении сетки? Ни на один нет ответа.

Этот студент освоил программу для CFD. Сам CFD он ещё не освоил.

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

Что значит научиться CFD?

Это три вещи, а программа идёт четвёртой и значит меньше всего.

  • Физика. Что говорят уравнения сохранения, что делает каждый член и какие члены доминируют в вашей задаче. Числа Рейнольдса, Пекле и Маха говорят о течении до построения сетки больше, чем большинство цветных картинок после расчёта.
  • Численные методы. Как непрерывное уравнение превращается в алгебру и какую ошибку это вносит. Любой ответ метода конечных объёмов содержит погрешность дискретизации, и умение состоит в том, чтобы знать её величину и характер.
  • Суждение. Решить, что моделировать, проверить, что числа сошлись, балансы замкнуты и результат не чувствителен к сетке, и сравнить с чем-то независимым. Это верификация и валидация, и именно за это платят работодатели и заказчики.
  • Программа служит интерфейсом ко всему перечисленному. Её можно освоить за несколько недель, когда остальное уже на месте, и она всё равно меняется с каждым выпуском.

Какая математика нужна и зачем

Меньше, чем многие боятся, и больше, чем признаёт большинство учебных роликов.

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

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

φ(x + Δx) = φ + Δx φ′ + (Δx²/2) φ″ + (Δx³/6) φ‴ + …φ(x − Δx) = φ − Δx φ′ + (Δx²/2) φ″ − (Δx³/6) φ‴ + …D_c φ = [φ(x + Δx) − φ(x − Δx)] / (2Δx) = φ′ + (Δx²/6) φ‴ + …D_u φ = [φ(x) − φ(x − Δx)] / Δx = φ′ − (Δx/2) φ″ + …

Здесь D_c это центральная разность, а D_u разность против потока. Центральная разность имеет второй порядок: уменьшите шаг вдвое, и главная ошибка упадёт в четыре раза. Разность против потока имеет первый порядок, и её главный член ошибки пропорционален второй производной. Запомните это. На этом построен весь следующий раздел.

Напишите маленький решатель и сломайте его

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

Хорошая бесплатная отправная точка CFD Python, «12 шагов к уравнениям Навье-Стокса» Лорены Барбы и Гилберта Форсайта: блокноты Jupyter, которые ведут от одномерной линейной конвекции через диффузию, уравнение Бюргерса, уравнения Лапласа и Пуассона к двумерному течению в каверне и в канале. Материалы распространяются по лицензии CC-BY 4.0, код по BSD-3, так что их можно свободно использовать и адаптировать.

Затем проведите тот единственный эксперимент, который каждый инженер CFD должен проделать своими руками.

Пример расчёта: сеточное число Пекле

Возьмём стационарную одномерную конвекцию и диффузию скаляра φ на отрезке 0 ≤ x ≤ L при φ(0) = 0 и φ(L) = 1. Уравнение и его точное решение:

d(ρuφ)/dx = d/dx (Γ dφ/dx)φ(x) = [exp(Pe·x/L) − 1] / [exp(Pe) − 1], Pe = ρuL / Γ

При Pe = 50 решение почти равно нулю по всей области и резко растёт в тонком слое у правого конца. При x = 0,9 L точное значение около exp(−5) ≈ 0,007.

Разобьём отрезок на N одинаковых ячеек. Всё определяет сеточное число Пекле Pe_Δ = ρuΔx / Γ = Pe / N. На равномерной сетке каждая схема сводится к рекуррентному соотношению, решения которого растут от узла к узлу с постоянным множителем, и этот множитель показывает, что делает схема:

φ(i+1) / φ(i) → exp(Pe_Δ)r_c = (1 + Pe_Δ/2) / (1 − Pe_Δ/2)r_u = 1 + Pe_Δ

Первая строка это точное отношение значений в соседних узлах, r_c отношение для центральной схемы, r_u для схемы первого порядка против потока.

На 10 ячейках Pe_Δ = 5:

СхемаОтношение соседних узловЧто вы видите
Точное решениеexp(5) ≈ 148Резкий слой в последней ячейке
Центральная(1 + 2.5)/(1 − 2.5) ≈ −2.33Знак меняется от узла к узлу: осцилляции и значения вне диапазона от 0 до 1
Против потока1 + 5 = 6Гладко, монотонно и со слишком толстым слоем

На 40 ячейках Pe_Δ = 1,25: центральная схема даёт отношение около 4,3 при точном 3,5, гладко и близко; схема против потока даёт 2,25 и всё ещё заметно размазывает решение.

Отсюда следуют два урока, и это самые важные уроки статьи.

Центральная схема осциллирует при Pe_Δ > 2. Отношение становится отрицательным, и в решении появляются колебания, к физике отношения не имеющие. Это классический результат из учебника Патанкара, и именно поэтому коммерческие решатели в большинстве течений не используют чистую центральную схему для конвекции.

Схема против потока никогда не осциллирует и ошибается так, что выглядит правильной. Ошибка усечения из разложения Тейлора выше, (Δx/2)φ″, действует в точности как дополнительная диффузия. Схема ведёт себя так, будто коэффициент диффузии равен:

Γ_eff = Γ + ρuΔx/2 = Γ (1 + Pe_Δ/2)

На 10 ячейках это 3,5 Γ. Ваше гладкое решение по схеме против потока в главном порядке является решением задачи с числом Пекле около 50/3,5 ≈ 14, а вовсе не 50. На экране об этом ничего не говорит. Изолинии чистые, невязки красиво падают, а ответ относится к другому течению.

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

Любой современный решатель предлагает ограниченные схемы повышенного порядка (второй порядок против потока с ограничителями, QUICK, семейства TVD), которые находятся между этими крайностями. Понять, что делают эти настройки, вы сможете, только увидев, как ошибаются обе крайности.

Проверьте порядок точности

Теперь измельчайте сетку. Вычислите ошибку относительно точного решения на двух сетках с коэффициентом измельчения r. Если e₁ ошибка на грубой сетке, а e₂ на мелкой, наблюдаемый порядок равен:

p = ln(e₁ / e₂) / ln(r)

Пример расчёта с условными числами. Схема второго порядка даёт ошибки 0,020 и 0,0051 на сетках с шагами Δx и Δx/2, значит p = ln(3,92)/ln(2) ≈ 1,97. Верно. Если схема, которая должна иметь второй порядок, даёт 1,0, где-то есть что-то первого порядка: граничное условие, градиент, интерполяция на грани. Найти это лучшая численная школа, какая бывает. Тот же расчёт лежит в основе индекса сеточной сходимости, пошагово разобранного в нашей статье о сеточной независимости.

Поднимайтесь по лестнице задач с опубликованными ответами

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

СтупеньЗадачаЧему учитЭталонПроверка
1Одномерная конвекция с диффузиейСхемы, число Пекле, порядок точностиТочное решение вышеНаблюдаемый порядок совпадает с порядком схемы
2Каверна с подвижной крышкой, Re 100 и 1000Связь давления и скорости в 2DGhia, Ghia и Shin (1982), скорости на осевых линияхВаши профили ложатся на табличные точки
3Ламинарное течение в трубеНачальный участок, градиенты у стенкиХаген-Пуазейль: f = 64/ReКоэффициент трения стремится к 64/Re при измельчении сетки
4Обратный уступ, ламинарный режимОтрыв и присоединениеArmaly и др. (1983), измеренияДлина зоны рециркуляции в зависимости от числа Рейнольдса
5Цилиндр в канале, DFG 2D-2Нестационарное течение, шаг по времениFeatFlow: C_D,max = 3,2200, St = 0,30188Появляется срыв вихрей, и оба значения близки
6Турбулентный каналПристеночная обработка и пределы RANSDNS при Re_τ от 180 до 5200 (Lee и Moser, 2015; данные Oden Institute)Средняя скорость в пристеночных единицах против профиля DNS
7Нагреваемая труба, турбулентный режимКоэффициенты теплоотдачиКорреляция ГнелинскогоЧисло Нуссельта в пределах разброса корреляции

Ступень 3 заслуживает замечания. Длина ламинарного начального участка примерно 0,05 Re D, так что при Re = 1000 профилю нужно около 50 диаметров, чтобы установиться. Короткая труба даёт коэффициент трения заметно выше 64/Re, и это развивающееся течение делает то, что должно. Научиться отличать одно от другого и есть цель.

На ступени 6 большинство самоучек обнаруживает, что модель турбулентности это модель. Сравните профиль средней скорости в пристеночных единицах с DNS один раз при первой ячейке на y+ ≈ 1, а другой раз с пристеночными функциями при y+ ≈ 50. Статья о k-omega SST и k-epsilon в этом блоге объясняет, почему они ведут себя по-разному.

Ступень 5 к тому же хорошая проверка для любого, кто или что берётся ставить для вас расчёты CFD; статья об ИИ-агентах для CFD использует её именно так.

Потом осваивайте программу

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

Хорошо освойте один пакет, прежде чем пробовать несколько. Для учёбы достаточно двух бесплатных путей. OpenFOAM открыт, работает в Linux или в Windows через WSL. Ansys Student бесплатен для студентов и преподавателей, работает в Windows и допускает до 1 миллиона ячеек в задачах течения на четырёх ядрах, только для учебных целей. Миллиона ячеек хватает для каждой ступени описанной лестницы, и это не случайно.

Повторите ступени 2, 3 и 5 в пакете. Если ваша самописная каверна и коммерческая совпадают друг с другом и с Ghia, вы проверили обе и освоили настройки пакета через сравнение, а не через доверие.

Книги, которые стоит иметь

  • Versteeg и Malalasekera, An Introduction to Computational Fluid Dynamics: The Finite Volume Method. Самый понятный первый учебник по методу конечных объёмов, которым пользуются коммерческие коды.
  • Патанкар, «Численные методы решения задач теплообмена и динамики жидкости». Короткая, старая и по-прежнему лучшая книга о том, почему схемы ведут себя так, как ведут.
  • Ferziger, Perić и Street, Computational Methods for Fluid Dynamics. Справочник по численным методам, когда основы уже пройдены.
  • Moukalled, Mangani и Darwish, The Finite Volume Method in Computational Fluid Dynamics. Мост от теории к реализации в OpenFOAM.
  • Pope, Turbulent Flows. Для момента, когда вопрос «какая модель турбулентности?» становится настоящим.

План на 16 недель

Мой вариант для человека с инженерным образованием и примерно восемью-десятью часами в неделю. Каждый блок заканчивается результатом, который можно показать.

НеделиРаботаРезультат
1 и 2Ряды Тейлора, классы уравнений; шаги с 1 по 4 CFD PythonКод одномерной диффузии с точным решением
3 и 4Конвекция с диффузией; эксперимент с числом Пекле; порядок точностиГрафик точного решения, центральной схемы и схемы против потока при Pe_Δ = 5 и 1,25
5 и 6Шаги с 9 по 11 CFD Python; каверна с подвижной крышкойВаша каверна против Ghia и др. при Re 100
7 и 8Установка одного пакета; повтор каверны; ламинарное течение в трубеКоэффициент трения против 64/Re с измельчением сетки
9 и 10Построение сеток: пограничные слои, метрики качества; исследование на трёх сеткахИндекс сеточной сходимости для трубы
11 и 12Турбулентность и стенки; турбулентный каналu+ в зависимости от y+ в сравнении с DNS для двух пристеночных подходов
13 и 14Нестационарное течение; цилиндр DFGЧисло Струхаля и пиковое сопротивление против эталона
15 и 16Небольшой собственный проектКороткий отчёт со сходимостью, балансами, исследованием сетки и одним сравнением с данными

Последний результат как раз тот, благодаря которому вас возьмут на работу. Отчёт со словами «перепад давления 1245 Па при численной неопределённости 1,6%, расхождение с корреляцией в пределах 4%» стоит больше любого количества цветных картинок.

Типичные ошибки и как они выглядят на экране

  • Гладкое решение, которое ни с чем не сравнивали. Его дала схема против потока. Оно может отличаться от истины в разы, как показывает пример.
  • Колебания, «вылеченные» переходом на первый порядок. Колебания говорили, что сетка слишком груба для схемы. Первый порядок прячет сообщение и сохраняет ошибку.
  • Учебный пример, повторённый щелчок за щелчком. Он работает, а объяснить, почему каждая настройка именно такая, вы не можете. Меняйте по одной настройке и предсказывайте эффект до запуска.
  • Коэффициент трения, «неверный» на 30% в короткой трубе. Это начальный участок, и решатель прав.
  • Турбулентный расчёт без проверки y+. Пристеночная обработка ни разу не была в своей области применимости, и модель делала не то, что вы думаете.
  • Невязки как единственное свидетельство сходимости. Следите за величиной, которую будете указывать, и проверяйте баланс массы; статья о сходимости в этом блоге объясняет почему.

Что бы сделал я

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

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

Если нужна помощь в системе, наш курс «CFD-моделирование течений жидкостей и газов» идёт в том же порядке: постановка, физика, моделирование, верификация и интерпретация, а курс «Теплообмен в инженерных приложениях» охватывает ступень 7 и дальше. В любом случае держитесь правила: ни один результат не покидает ваш стол, пока его не сравнили с чем-то, что вы не считали сами.

Источники и материалы

Связанная услуга

Проверка моделей и нестандартные исследования

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

Посмотреть услуги
Все статьи