Гидродинамическое моделирование (CFD) на рельефе с помощью MantaFlow и визуализация результатов в ParaView

    Дисциплина Computational fluid dynamics(CFD) или, на русском языке, Вычислительная гидродинамика изучает поведение различных потоков, в том числе вихревых. Это и моделирование цунами, и лавовых потоков, и выбрасываемых из жерла вулкана камней вместе с лавой и газами и многое другое. Посмотрим, как можно использовать совместно MantaFlow и ParaView, реализовав на встроенном в MantaFlow языке Python необходимые функции конвертации данных. Как обычно, исходный код смотрите в моем GitHub репозитории: MantaFlow-ParaView.


    Tambora Volcano Plume Simulation


    Визуализация шлейфа извержения вулкана. Мы уже видели эту картинку в серии статей про визуализацию в ParaView Как визуализировать и анимировать (геофизические) модели, обсуждали создание геологических моделей в статье Методы компьютерного зрения для решения обратной задачи геофизики, а теперь поговорим и о моделировании дыма.


    Введение


    Для визуализационного моделирования зачастую используются упрощенные методы, пренебрегающие трением, в то время как для физического моделирования необходимо моделирование уравнений Навье-Стокса, учитывающих трение. Конечно, результаты физического моделирования могут быть использованы и просто для визуализации, хотя их получение более ресурсоемкое. В то же время, многие физические процессы не могут моделироваться без учета трения, к примеру, пирокластический поток. К счастью, за последние несколько лет физическое моделирование потоков стало доступнее, в том числе, за счет методов машинного обучения — стало возможным точную модель низкой детализации дополнительно детализировать с помощью соответствующих методов (на мой взгляд, благодаря самоподобию процессов на разных масштабах, это вообще одно из самых удачных применений техник машинного обучения). Теперь и в открытой программе трехмерной графики Blender используется именно физическое моделирование на основе открытого фреймфорка MantaFlow.


    Как и в случае с методами спутниковой интерферометрии, см. предыдущую статью Геология XXI века как наука данных о Земле, методы моделирования потоков позволяют узнать многое о происходивших процессах — именно узнать, а не предположить. Действительно, моделируя лавовые потоки на палеорельефе (построенным, к примеру, путем решения обратной задачи геофизики), мы можем сравнить полученную модель с реально существующими [застывшими] лавовыми потоками и полями, поскольку они достаточно прочные и могут хорошо сохраняться многие и многие миллионы лет. Построенная модель позволяет изучить залегание различных слоев там, где у нас нет геологической информации, — зачастую, один и то же вулкан извергался многократно из разных жерл, при этом потоки лавы разных извержений [и разного состава] могут перекрываться. Кроме того, эта же модель покажет неувязки между используемой моделью палеорельефа и существующими лавовыми проявлениями — и позволит внести уточнения. То есть, вместо сложно формализуемой геологической интуиции, мы можем работать с моделью — в том числе, изменять параметры и оценивать, насколько разные геологические предположения вообще разумны. Поскольку я сам не геолог, а физик, для меня путь моделирования представляет вполне понятный интерес. В результате, геолог может точнее оценить возможные области залегания полезных ископаемых и их потенциал — разумеется, в геологическом исследовании вовсе не ставится задача обойтись без геолога, но, как и везде, ценность результатов согласуется с известным принципом информатики: "Мусор на входе — мусор на выходе", поэтому каждая возможность уточнить, заверить и дополнить имеющиеся данные в буквальном смысле на вес золота (или нефти, или воды,...).


    MantaFlow


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


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



    А это модель заполнения потоком воды заданного рельефа:



    В репозитории вы найдете еще скрипт для модели пирокластического потока, с визуализированной в псевдоцветах плотностью выброса вулканического вещества (еще обычно нужны давление и скорости частиц, они в примере также вычисляются, но, для простоты, не сохраняются в скрипте — это можно добавить буквально в пару строк кода по аналогии с сохранением данных плотности).


    Добавим рельеф в MantaFlow


    Для меня самый удобный вариант это использование ParaView с моим расширением N-Cube ParaView plugin for 3D/4D GIS Data Visualization для построения 3D модели рельефа в ParaView на основе NetCDF или GeoTIFF данных и сохранение нужного участка в формате OBJ для его использования в MantaFlow. Поскольку MantaFlow умеет этот формат загружать и работать с ним в безразмерных координатах, нам потребуется лишь указать нужный размер в безразмерных координатах (скажем, 100% по горизонтальным координатам и 25% по вертикальной — чтобы было достаточно места для моделирования столба дыма) и сохранить параметры преобразования для экспорта результатов в физических координатах. Вот скрипт репозитория с реализацией соответствующей функции: mesh2manta.py


    Сохраним результаты моделирования в MantaFlow для ParaView


    Поскольку мы задаем исходное пространство моделирования в физических координатах (файл OBJ и коэффициенты его масштабирования), у нас есть все необходимое, чтобы и результаты сохранить в физических координатах. По умолчанию, MantaFlow сохраняет безразмерные результаты в формате сжатых массивов Numpy, поэтому мы добавим сохранение в формат с поддержкой физических координат (VTK), см. скрипт репозитория npz2vtk.py. Добавлю, что в скрипте создается массив xarray: N-D labeled arrays and datasets in Python, из которого одной командой можно сохранить данные в формате NetCDF и некоторых других.


    Визуализация в ParaView


    Как мы уже рассмотрели в предыдущих статьях (с примерами), ParaView поддерживает работу с сериями данных, так что мы можем работать с 4D данными — например, в виде 3D анимации. Вот пример анимации вулканического дыма из серии файлов VTK, экспортированных из MantaFlow:



    Модели высокой детализации


    Увеличение детальности моделей требует и больше ресурсов для их построения. Если модели на сетке 64х64х64 вычисляются за несколько минут на ноутбуке, то при удвоении разрешения по каждой координате время увеличивается в 8 раз (третья степень двойки).


    Ниже показана намного более детальная модель на примере турбулентного торнадо с сайта проекта MantaFlow:



    Мне эта модель показалась интересной и я попытался найти, как она построена. Не нашел и обратился к авторам, но они не смогли ответить на вопрос, сообщили лишь, что вычисления требуют мощностей компьютерного кластера. Вероятно, построение модели можно значительно ускорить с помощью библиотеки машинного обучения TensorFlow, поддержка которой встроена в MantaFlow (в официальном репозитории есть примеры).


    Заключение


    Хотя именно о построении моделей мне и хотелось написать ранее, но пришлось начинать с серии статей про визуализацию данных и потом постепенно переходить уже непосредственно к моделированию. В самом деле, если не рассказать заранее, как хотя бы посмотреть результаты, получится не интересно. Хотя и можно использовать MantaFlow в Blender, но с последним я сам не работаю и не уверен, многие ли из читателей с ним достаточно знакомы. Так что пусть будет как есть — знакомство с ParaView ранее и рассказ про MantaFlow и ParaView, а те читатели, кому этого захочется — смогут попробовать MantaFlow и Blender.


    Спасибо всем за внимание, думаю, на этом пока все с геофизическим моделированием, поскольку далее потребовалось бы переходить к более сложным вещам (например, растровому роутингу, о котором я уже ранее упоминал при обработке данных спутниковой интерферометрии — а еще это вероятностный подход к моделированию потоков и многое другое), и останется у меня, в лучшем случае, четверть читателя — голова какого-нибудь любителя поспать на клавиатуре. Если вам интересно — смотрите мои репозитории на GitHub и публикации на LinkedIn и подсказывайте, о чем, на ваш взгляд, стоит рассказывать.

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 15

      +2
      off С недавнего интересуюсь вопросом моделированием воздушных потоков в городе. Оказалось, что эти потоки большая проблема для мультикоптеров в проектах курьерской доставки — есть места, где дрон не может преодолеть ветер между зданиями.
      видео

        0

        Спасибо за пример, интересно. Видимо, у вас сложность с размером модели? Если задать размер типового здания один пиксел на несколько в горизонтальном сечении, результат хоть как-то приближен к реальности? Тут вариант с tensorflow для улучшения детальности выглядит как раз подходящим.

          +1
          Да, размер модели — для меня проблема. Чисто личный интерес проверить моделированием утверждение, что на больших плоских мысах, бриз создает кумулятивную струю.
            +1

            Посмотрите примеры MantaFlow, они по умолчанию на сетке 64х64х64, у вас можно попробовать по вертикали снизить разрешение и увеличить по горизонтали, к примеру, для задания сетки 128х128х16:


            # solver params
            dim = 3
            res = 128
            scale = 0.125

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

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

              А что на счет проверки сеточной сходимости?

                0

                Да как всегда — считаете то же самое на двойном и половинном масштабе и оцениваете сходимость. То есть будет ли результат при увеличении детализации постепенно уточняться (сходиться) или получится нечто совсем другое. Это же не проверка корректности, тут чисто технически все просто оценить.

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

                    Так и возьмите потом сетку поболее, если сходимость есть и результат физически адекватный. Сетки 256х256х64 и 50-100 шагов по времени за несколько часов на ноутбуке 2014 года считаются, а если убедились, что параметры модели годные — на Amazon AWS EC2 или где вам удобно считаете уже на нужной сетке. Просто не стоит начинать сразу с долгих вычислений, пока вы не уверены в том, что у вас вообще получится.

          +2
          Проблема не только для коптеров — часто, отраженные от массивных фасадов потоки, имеют у основания скорости значительно превышающие значения комфортности для пешеходных зон. У нас в стране это никак не регламентируется. Помню только модель москва-сити изготавливали физическую для обдувки, но больше для правильного учета влияния потоков между сооружениями друг на друга. Знаю еще в ansys собирают такие модели.
            0

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

              +1
              Образование строительное, в гидро/газодинамике я — ноль, к сожалению.
          +1
          классная статья, спасибо автору
            0
            интересно получилось, успехов автору
              0
              Автор, расскажете в следующий раз про Blender.
              Paraview я знаю, в связкe с OpenFoam =)
              P.S: Спасибо за статью.
                0

                Так про Blender я, кроме названия, и не знаю ничего:)

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое