Pull to refresh

Comments 48

да, очень похоже. а как вы определили что по той же книге7
Я взял ту книгу и написал тот код :)
не забываем, что для этого видео использовалась видюха gtx 680 — 1500 ядер
Вещь безусловно интересная. Где это применяете Вы, если не секрет? Давайте поразмышляем где это можно применить в быту?
как минимум в Формуле 1 используют CFD весьма серьёзно. Массово стали использовать где-то 5-8 лет назад, в связи с тем, что значение аэродинамики стало более важным, и давать заметное преимущество перед соперниками. Плюс это значительно дешевле, чем производить тесты в аэродинамической трубе.
Какие 5-8 лет назад? Намного, намного раньше!
Как минимум ещё в начале 90-х годов я видел описание такого софта
Гм, О.М. Белоцерковский в 58-м (!) году решил задачу обтекания затупленного тела сверхзвуковым потоком. На имевшейся тогда вычислительной технике.
Я не понимаю, почему минусуют про Формулу 1, ведь написано всё верно. То что математические алгоритмы и численные схемы разработали в 58(!) году не значит, что в то же время появилось железо и софт позволяющее за приемлемое время рассчитать с достаточной детализацией аэродинамику целой машины.
Значение аэродинамики было всегда важно в Формлуе 1, а не 5-8 лет назад.
Вы болиды 30-х годов видели? Уже тогда они были обтекаемыми.
Речь шла об использовании численного CFD анализа, а не об обтекаемых формах в принципе. То что поверхность автомобиля должна быть плавной и гладкой поймёт и ребёнок, а что бы посчитать опмитмальную форму и смоделировать движение воздуха, нужен компьютер, причем очень мощный и с достаточным объемом памяти. Вы многопроцессорные системы с гигабайтами памяти 30х годов видели?
Возможно, я невнимательно читал, но я не очень понял, вам нужно, чтобы было
красиво, или чтобы было правдоподобно? Если красиво-это скорее всяческие методы частиц — могу завтра накидвть ссылочек. Если хочется строить реальные содели — от упрощений придется отказаться и пойти почитать хороших книжек. Начните с Куликовский, Погорелов, Семенов — Математические вопросы численного решения гиперболических систем уравнений. Насчет кодов — плохо вы искали. Спросите гугл про gerris flow solver — узнаете много нового
Да, правильная тема, а еще можно по категориям в википедии (особенно английской) полазить — там много разных проектов в той или иной степени отражено.
Foam большой и сложный — зачем изобретать велосипед7
Да, еще одно ключевое слово накину, чтобы вам было, что погуглить — «уравнения мелкой воды» они же — «shallow water equations»
Это другой вид уравнений и к гидродинамике на самом деле имеет мало отношения (разве что название). Гиперболические уравнения описывают законы сохранения энергии, это распространение волн, уравнение траффика, моделирование цунами, землетрясений.
Автору нужно «красиво и быстро». На мелкой воде это вполне реализуемо и достижимо с той степенью достоверности, которую хочет автор (для больших водоемов, в подобластях, где с нужной автору точностью выполняются условия применимости уравнений мелкой воды). Опять же, если автор хочет это вставить в какую-то игрушку потом, от того, что 2d решается куда быстрее, чем 3d, он сильно выиграет.
Да, если стоит задача только волны на поверхности показать, тогда согласен.
Cжимаемая гидродинамика — это гиперболические уравнения.
по многочисленным просьбам добавил видео (пока без крипперов) )
Насчет применения — в бытовых условиях я думаю можно применить в играх (лет через 10)

Спасибо за книжку, посмотрел, действительно много интересного есть… но в тоже время сложновато написано в математическом плане)
Мне хочется красиво, правдоподобно и быстро. Красиво и правдоподобно в данном случае это одно и тоже.
Слишком сильно от упрощений нельзя отказываться иначе придёться отказаться от RealTime. Нужен баланс — упрощенно в глубине воды и правдоподобно на поверхности.
Сколько ни смотрел методы частиц — ни выглядят они красиво — там не чувствуется давление, к тому же для
больших сцен, насколько я могу судить, они медленнее чем нативные решения.
Ясно. Тогда попробуйте подружить через граничные условия мелкую воду (для всяких озер, речек, и т.п., где нет водопадов — самое оно, особенно — если есть большие пространства) со своим кодом для переходных участков.
Невозможно смоделировать реку уравнением мелкой воды. Оно описывает только высоту поднятия жидкости, но не описывает что происходит внутри нее, там нет понятия «потока»
Не только. Да, в 2-d варианте у вас в каждой ячейке есть только две скорости (нет различия по глубинам). Если вам хочется турбулентный хвост за лодкой увидеть — не получится, а если вам хватит волн от упавшей скалы — то вполне.
Что бы был real-time, то вам определенно надо использовать GPU алгоритмы. На CPU никогда такой скорости не добиться для более-менее больших сцен.
GPU пока что бессмысленно. Т.к при увеличении размеров сцены количество расчитываемых ячеек
(и соответственно время расчета) будет увеличиваться намного быстрее чем возможности расчетов на GPU. Ускорение примерно можно ожидать раз в 10 — но что от него толку — быстрее будут только маленькие сценки.
Есть интересная тема — тепловое моделирование для помещений, используя конвективные и лучевые модели теплопереноса. Речь конечно о воздушной + твердой среде, зато это вполне можно потом использовать в коммерческих целях.
Как видно — исчезла конвекция, что несколько ухудшает поведение жидкости, но в целом визуально выглядит вполне нормально.Отсутствие конвекции дает сразу несколько плюсов — исчезает нелинейность, улучшается стабильность и шаг по времени можно делать больше, также конвекция обычно очень затратный терм по количеству необходимых вычислений, к тому же чтобы правильно дискретизировать конвекцию- применяют специальные схемы — что выглядит достаточно громоздко.


Всё, конечно, прокомментировано верно, но, к слову, отбрасывать их корректно только для очень маленьких скоростей движения, когда Re<<1. Именно конвективное слагаемое v-nabla-v является определяющим в поведении жидкости. Иначе у Вас получается движение частиц жидкости в среде с сопротивлением и силой тяжести, но теряется значительная часть взаимодействия между ними — это слагаемое описывает внутренний перенос импульса в системе. А ещё в Вашей среде, по всей вероятно, становится невозможной турбулентность, которая для процессов тепло и массопереноса крайне важна.
Автор хочет «чтобы в игрушке в риал-тайме было красиво». Автор не будет считать на этом реальную физику (надеюсь!). Поэтому ему вполне осознанно наплевать на соответствие его тепло-массопереноса и измеримой реальности.
Некоторые красивости обнаруживаются именно благодаря нелинейности) Хотя, если нужны только волны по воде, то достаточно и такого приближения (пока они маленькие).
А что можно приспособить для симуляции поведения сильно неоднородных по вязкости жидкостей? Важна только наглядность.
Посмотрите SPH fluids и всякие их модификации. Сам разработкой и писанием этого не занимался, но реализации во всяком софте с вязкостями работают хорошо.
UFO just landed and posted this here
А как вы сделали 3D граничные условия свободной поверхности? На сколько я знаю, в книге, откуда взяты картинки, описан только 2D случай, и он уже является нетривиальным (рассматривается 15 возможных комбинаций клеток вода/не вода).
Хоткел вам предложить залезть к автору в исходники и посмотреть — залез сам и ужаснулся…
UFO just landed and posted this here
Вы бы хоть открыли какой-нибудь файл с исходниками, открывать и закрывать архив — толку мало.
Копирование использовалось, потому что нету никакого ядра, каждый проект — это отдельная реализация этого самого ядра с приличными изменениями алгоритмов.

Если внимательно посмотреть — то последние версии проектов аккуратно разбиты на модули в лучших традициях OOP)
Вашу бы энергию, да в мирных целях. Потратьте немного времени на осознание git. Вынесите конкретные примеры (и специфичный для конкретного примера код, если не можете от него избавиться) в отдельные директории с подходящими makefile-ами. Пишите ортогональный код — любая ваша идея должна быть (в идеале) отражена в коде ровно один раз.
UFO just landed and posted this here
Это один и тот же человек или у меня в глазах двоится?)
Концепция как раз детально описана в посте) Да, в книге описано 15 комбинаций — из них основных 8.
Описано все это там достаточно сумбурно. Если бы вы знали сколько времени я потратил на понимание что к чему на поверхности)
Для 3D я сделал свой вариант, прилично отличающийся от описания в книге. Смысл такой:
1) на границе мы никак не должны влиять на воду — куда течет, туда и течет. все что нам нужно — проставить адекватные граничные условия — то есть такие, которые будут направлять скорости туда же куда они и направлены в соседнем приграничном слое
2) Поэтому просто копируем скорости из соседнего слоя воды, именно здесь много тонкостей — нужно чтобы это было симметрично и учитывать что мы идем в процессе простановки сначала по х потом по y и по z клеткам
Случаев в 3D намного больше — около 30 основных и еще почти столько же вторичных — бес которых уже можно смотреть на результат.
Думаю, в книге всё не с потолка взято, условия на границе ставятся из условий нулевой скорости на границе (условия Дирихле). Трудно будет не учитывать некоторые случаи, если они случаются во время расчетов.
Sign up to leave a comment.

Articles