- PVSM.RU - https://www.pvsm.ru -
Дисциплина Computational fluid dynamics(CFD) [1] или, на русском языке, Вычислительная гидродинамика [2] изучает поведение различных потоков, в том числе вихревых. Это и моделирование цунами, и лавовых потоков, и выбрасываемых из жерла вулкана камней вместе с лавой и газами и многое другое. Посмотрим, как можно использовать совместно MantaFlow [3] и ParaView [4], реализовав на встроенном в MantaFlow [3] языке Python [5] необходимые функции конвертации данных. Как обычно, исходный код смотрите в моем GitHub репозитории: MantaFlow-ParaView [6].

Визуализация шлейфа извержения вулкана. Мы уже видели эту картинку в серии статей про визуализацию в ParaView Как визуализировать и анимировать (геофизические) модели [7], обсуждали создание геологических моделей в статье Методы компьютерного зрения для решения обратной задачи геофизики [8], а теперь поговорим и о моделировании дыма.
Для визуализационного моделирования зачастую используются упрощенные методы, пренебрегающие трением, в то время как для физического моделирования необходимо моделирование уравнений Навье-Стокса, учитывающих трение. Конечно, результаты физического моделирования могут быть использованы и просто для визуализации, хотя их получение более ресурсоемкое. В то же время, многие физические процессы не могут моделироваться без учета трения, к примеру, пирокластический поток [9]. К счастью, за последние несколько лет физическое моделирование потоков стало доступнее, в том числе, за счет методов машинного обучения — стало возможным точную модель низкой детализации дополнительно детализировать с помощью соответствующих методов (на мой взгляд, благодаря самоподобию процессов на разных масштабах, это вообще одно из самых удачных применений техник машинного обучения). Теперь и в открытой программе трехмерной графики Blender [10] используется именно физическое моделирование на основе открытого фреймфорка MantaFlow [3].
Как и в случае с методами спутниковой интерферометрии, см. предыдущую статью Геология XXI века как наука данных о Земле [11], методы моделирования потоков позволяют узнать многое о происходивших процессах — именно узнать, а не предположить. Действительно, моделируя лавовые потоки на палеорельефе (построенным, к примеру, путем решения обратной задачи геофизики), мы можем сравнить полученную модель с реально существующими [застывшими] лавовыми потоками и полями, поскольку они достаточно прочные и могут хорошо сохраняться многие и многие миллионы лет. Построенная модель позволяет изучить залегание различных слоев там, где у нас нет геологической информации, — зачастую, один и то же вулкан извергался многократно из разных жерл, при этом потоки лавы разных извержений [и разного состава] могут перекрываться. Кроме того, эта же модель покажет неувязки между используемой моделью палеорельефа и существующими лавовыми проявлениями — и позволит внести уточнения. То есть, вместо сложно формализуемой геологической интуиции, мы можем работать с моделью — в том числе, изменять параметры и оценивать, насколько разные геологические предположения вообще разумны. Поскольку я сам не геолог, а физик, для меня путь моделирования представляет вполне понятный интерес. В результате, геолог может точнее оценить возможные области залегания полезных ископаемых и их потенциал — разумеется, в геологическом исследовании вовсе не ставится задача обойтись без геолога, но, как и везде, ценность результатов согласуется с известным принципом информатики: "Мусор на входе — мусор на выходе", поэтому каждая возможность уточнить, заверить и дополнить имеющиеся данные в буквальном смысле на вес золота (или нефти, или воды,...).
Как уже сказано выше, MantaFlow это хорошо известный и поддерживаемый программный пакет, а также, на его основе есть несколько интересных производных проектов: с большим акцентом на использование машинного обучения PhiFlow [12], с возможностью вычисления параметров процесса по набору снимков reconstructScalarFlows [13] и другие.
MantaFlow позволяет моделировать ламинарные и турбулентные потоки, в том числе, пламя и клубы дыма и потоки воды и многое другое. Для примера я построил несколько моделей, чтобы оценить качество моделирования. Например, эта модель потока воды выглядит отлично и даже видны формирование и разрыв воздушных пузырей в потоке:
А это модель заполнения потоком воды заданного рельефа:
В репозитории вы найдете еще скрипт для модели пирокластического потока, с визуализированной в псевдоцветах плотностью выброса вулканического вещества (еще обычно нужны давление и скорости частиц, они в примере также вычисляются, но, для простоты, не сохраняются в скрипте — это можно добавить буквально в пару строк кода по аналогии с сохранением данных плотности).
Для меня самый удобный вариант это использование ParaView с моим расширением N-Cube ParaView plugin for 3D/4D GIS Data Visualization [14] для построения 3D модели рельефа в ParaView на основе NetCDF или GeoTIFF данных и сохранение нужного участка в формате OBJ для его использования в MantaFlow. Поскольку MantaFlow умеет этот формат загружать и работать с ним в безразмерных координатах, нам потребуется лишь указать нужный размер в безразмерных координатах (скажем, 100% по горизонтальным координатам и 25% по вертикальной — чтобы было достаточно места для моделирования столба дыма) и сохранить параметры преобразования для экспорта результатов в физических координатах. Вот скрипт репозитория с реализацией соответствующей функции: mesh2manta.py [15]
Поскольку мы задаем исходное пространство моделирования в физических координатах (файл OBJ и коэффициенты его масштабирования), у нас есть все необходимое, чтобы и результаты сохранить в физических координатах. По умолчанию, MantaFlow сохраняет безразмерные результаты в формате сжатых массивов Numpy, поэтому мы добавим сохранение в формат с поддержкой физических координат (VTK), см. скрипт репозитория npz2vtk.py [16]. Добавлю, что в скрипте создается массив xarray: N-D labeled arrays and datasets in Python [17], из которого одной командой [18] можно сохранить данные в формате NetCDF и некоторых других.
Как мы уже рассмотрели в предыдущих статьях (с примерами), ParaView поддерживает работу с сериями данных, так что мы можем работать с 4D данными — например, в виде 3D анимации. Вот пример анимации вулканического дыма из серии файлов VTK, экспортированных из MantaFlow:
Увеличение детальности моделей требует и больше ресурсов для их построения. Если модели на сетке 64х64х64 вычисляются за несколько минут на ноутбуке, то при удвоении разрешения по каждой координате время увеличивается в 8 раз (третья степень двойки).
Ниже показана намного более детальная модель на примере турбулентного торнадо с сайта проекта MantaFlow:
Мне эта модель показалась интересной и я попытался найти, как она построена. Не нашел и обратился к авторам, но они не смогли ответить на вопрос, сообщили лишь, что вычисления требуют мощностей компьютерного кластера. Вероятно, построение модели можно значительно ускорить с помощью библиотеки машинного обучения TensorFlow, поддержка которой встроена в MantaFlow (в официальном репозитории есть примеры).
Хотя именно о построении моделей мне и хотелось написать ранее, но пришлось начинать с серии статей про визуализацию данных и потом постепенно переходить уже непосредственно к моделированию. В самом деле, если не рассказать заранее, как хотя бы посмотреть результаты, получится не интересно. Хотя и можно использовать MantaFlow в Blender, но с последним я сам не работаю и не уверен, многие ли из читателей с ним достаточно знакомы. Так что пусть будет как есть — знакомство с ParaView ранее и рассказ про MantaFlow и ParaView, а те читатели, кому этого захочется — смогут попробовать MantaFlow и Blender.
Спасибо всем за внимание, думаю, на этом пока все с геофизическим моделированием, поскольку далее потребовалось бы переходить к более сложным вещам (например, растровому роутингу, о котором я уже ранее упоминал при обработке данных спутниковой интерферометрии — а еще это вероятностный подход к моделированию потоков и многое другое), и останется у меня, в лучшем случае, четверть читателя — голова какого-нибудь любителя поспать на клавиатуре. Если вам интересно — смотрите мои репозитории на GitHub и публикации на LinkedIn и подсказывайте, о чем, на ваш взгляд, стоит рассказывать.
Автор: Алексей Печников
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/3d/355590
Ссылки в тексте:
[1] Computational fluid dynamics(CFD): https://en.wikipedia.org/wiki/Computational_fluid_dynamics
[2] Вычислительная гидродинамика: https://ru.wikipedia.org/wiki%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B8%D0%B4%D1%80%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D0%BA%D0%B0
[3] MantaFlow: http://mantaflow.com/
[4] ParaView: https://www.paraview.org/
[5] Python: https://www.python.org/
[6] MantaFlow-ParaView: https://github.com/mobigroup/MantaFlow-ParaView
[7] Как визуализировать и анимировать (геофизические) модели: https://habr.com/ru/post/492362/
[8] Методы компьютерного зрения для решения обратной задачи геофизики: https://habr.com/ru/post/506426/
[9] пирокластический поток: https://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D1%80%D0%BE%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA
[10] Blender: https://www.blender.org/
[11] Геология XXI века как наука данных о Земле: https://habr.com/ru/post/507138/
[12] PhiFlow: https://github.com/tum-pbs/PhiFlow
[13] reconstructScalarFlows: https://github.com/mobigroup/reconstructScalarFlows
[14] N-Cube ParaView plugin for 3D/4D GIS Data Visualization: https://github.com/mobigroup/ParaView-plugins
[15] mesh2manta.py: https://github.com/mobigroup/MantaFlow-ParaView/blob/master/mesh2manta.py
[16] npz2vtk.py: https://github.com/mobigroup/MantaFlow-ParaView/blob/master/npz2vtk.py
[17] xarray: N-D labeled arrays and datasets in Python: http://xarray.pydata.org/en/stable/
[18] одной командой: http://xarray.pydata.org/en/stable/generated/xarray.Dataset.to_netcdf.html
[19] Источник: https://habr.com/ru/post/513500/?utm_source=habrahabr&utm_medium=rss&utm_campaign=513500
Нажмите здесь для печати.