LINUX.ORG.RU

Алгоритм расчёта гидро-аэро-динамического процесса.

 , , ,


0

2

Сам я на c++ только учусь программировать, но сегодня в голову мне пришла идея которую наверно кто то из вас захочет реализовать в виде демки.

массив 16*16*16

В элементах массива есть воздух, вода, твёрдая порода. То есть 3 вида элементов. Температурой можно пренебречь.

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

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

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

Алгоритм трассировки:

Верхние блоки воздуха получают давление.

Каждый открытый блок воды получает давление.

По ходу итерации вниз, каждый блок воды прибавляет n давления блоку который ниже. При итерации каждый блок, присваивает своё давление блокам которые находятся по сторонам, при условии что давление в них ниже, величина цикла присваивания 16*16.

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

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

Если в 2х соприкасающихся блоках воздуха разное количество воздуха, то оно приходит к среднему арифметическому. Таковым образом становиться возможным что то вроде ударной волны.

Прототип такой штуки удобно в матлабе (есть под все системы) делать. А потом можно и встроенным С откомпелять. Я так деньги зарабатываю, только в геофизике, а не гидродинамике.

Deleted ()

Поздравляю, ты изобрёл volume of fluid method.

Кстати, это не плохо, а наоборот хорошо. Мозги развивает.

i-rinat ★★★★★ ()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от Deleted

А потом можно и встроенным С откомпелять.

Начиная с matlab 7.0 компиляции в C (а затем в нативный код) больше нет. Там свой байткод, который при запуске преобразуется в байт-код JVM.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

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

Deleted ()
Ответ на: комментарий от Deleted

Нельзя новые краденные версии ставить

А там и нет ничего кардинального нового или кардинально улучшенного. Так что ничего не потерял.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Тогда задам вопрос, насколько ресурсоёмким это будет если рассчитывать таких областей (16*16*16) итого 12^2 ? В реальном времени? То есть (16^3)*(12^2) ? Стоит ли это делать на обычном ПК? А если рассчитывать 20 таких стимуляций одновременно?

rezedent12 ☆☆☆ ()
Ответ на: комментарий от rezedent12

Ээээ... а зачем? Если для симуляции в игрушках, то наверное даже слишком сложно. Если для моделирования реальных процессов, скажем климата - то вообще то есть целая наука, сначала строится физ-мат модель, потом для нее строится числ схема, люди на таких вещах докторские защищают.

Если в 2х соприкасающихся блоках воздуха разное количество воздуха, то оно приходит к среднему арифметическому. Таковым образом становиться возможным что то вроде ударной волны.

Таким образом появляется аццкая сеточная диффузия вообще то.

AIv ★★★★★ ()
Ответ на: комментарий от rezedent12

насколько ресурсоёмким это будет

Вот тут ничего определённого сказать не могу. Но могу сказать вот что. В случае, если нужен физически корректный расчёт, реальное время обычно не критично. Если возникает вопрос о реальном времени, значит нужно, чтобы оно выглядело красиво, а не было точным.

Кстати, тебя возможно заинтересует вот это: http://ru.wikipedia.org/wiki/Гидродинамика_сглаженных_частиц

i-rinat ★★★★★ ()
Ответ на: комментарий от AIv

Таким образом появляется аццкая сеточная диффузия вообще то.

сеточная диффузия. Не могу себе это представить. Что это такое?

rezedent12 ☆☆☆ ()
Ответ на: комментарий от rezedent12

Это такой численный артефакт. Диффузия, обусловленная не какими то физическими процессами, а вычислениями на сетке. Ну сами смотрите, волна сжатия движется в газе со скоростью звука, при этом слабо расплывается (газ все таки не особо вязкая среда), и это физично. А за счет предлагаемого Вами алгоритма, волна будет двигаться со скоростью шаг-сетки/шаг-по-времени, и при этом очень быстро расплываться - вот такое расплывание и есть сеточная диффузия.

Вы таки не ответили зачем все это планируется использовать, для симуляции чего то там в игрушках, или для моделирования реальной физики?

AIv ★★★★★ ()

Кубач на крестах с физикой воды?

Sphinx ★★☆☆ ()
Ответ на: комментарий от AIv

Думаю лучше всего в игрушке. Что то вроде исследования подводных пещер.

rezedent12 ☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.