вторник, 14 июня 2011 г.

Gmsh. Введение

Что такое Gmsh?
Это программный продукт, на сайте которого написано: "Gmsh: a three-dimensional finite element mesh generator with built-in pre- and post-processing facilities". Перевод такой: "Gmsh: генератор трехмерной конечноэлементной сетки со встроенными пре- и постпроцессорными средствами". Gmsh - программа бесплатная, да еще и с открытым исходным кодом. Кому нужно подробное описание лицензии, просим сюда. Изначально Gmsh разрабатывался двумя людьми: Christophe Geuzaine и Jean-François Remacle. Именно они и значатся в копирайте программы. Однако в настоящее время разработка (очень активная разработка!) и поддержка осуществляется также сотрудниками Applied and Computational Electromagnetics group из Montefiore Institute. Gmsh имеет отличную документацию (на английском языке), много примеров использования с комментариями (ищите все это на сайте) и хорошую поддержку - любой вопрос (сформулированный на английском или французском языке) можно отправить на gmsh@geuz.org, откуда он попадет в рассылку, которую получают разработчики и многие пользователи Gmsh'а. Там отвечают довольно быстро (1-2 дня) и не пинают за плохой английский.
Завершая обзор ссылок на ресурсы Gmsh'а, нельзя не отметить несколько публикаций на русском языке. Вот то, что я нашел в рунете:
  1. http://dwg.ru/dnl/3574 - методичка "Начинаем работать с Gmsh". По-видимому, единственное, что в данный момент есть путного про Gmsh на русском языке. Материал там не лишен неточностей, но для того, чтобы начать что-то делать в Gmsh'е его вполне достаточно.
  2. http://simfem.blogspot.com/ - блог, посвященный разработке МКЭ программного обеспечения. Собственно, про Gmsh там немного, но можно посмотреть.
  3. http://sovety.blogspot.com/2008/03/free-software-for-solving-pdes.html - обзор свободных программ для численных расчетов (очень хороший обзор!). Про Gmsh там в настоящий момент нет ничего, зато есть очень много про пакеты, с которыми Gmsh умеет работать. Да и вообще, если вы занимаетесь численным моделированием, загляните - я там нашел много интересного (и сам немного поучаствовал).

Для чего нужен Gmsh?
Напомню, что процедуру численного моделирования (по крайней мере, физических процессов) можно грубо описать следующей последовательностью:
задание геометрии - построение сетки - решение - постпроцессинг (обработка полученных результатов) - визуализация.
При желании Gmsh можно использовать на всех приведенных этапах решения задачи (да-да, и на этапе решения тоже. Правда для этого нужно подключить внешний решатель, например, свой собственный или GetDP, который интегрируется в Gmsh очень легко, поскольку его разрабатывают те же люди. Скачать GetDP можно с сайта одного из авторов Gmsh'а). Но, я считаю, что это излишне. Более или менее Gmsh подходит для пунктов 1, 2 и 5 - все зависит от задачи. Я же советую использовать Gmsh только как триангулятор, т.е. генератор сетки (не обязательно треугольной или тетраэдральной). В крайнем случае, если вы имеете дело с простой геометрией (а так бывает очень часто для вычислителей-прикладников, которым не нужна сложная область моделирования, а нужен новый решатель), Gmsh удобно использовать и для задания геометрии, благо в нем есть для этого и интерактивное управление, и встроенный язык.

Альтернатива Gmsh'у?
Их много. Например, некоторые программы-решатели имеют в комплекте какой-нибудь свой триангулятор. Однако основные конкуренты Gmsh'а это, конечно, Netgen и Tetgen. С Netgen'ом я знакомился очень давно, остались приятные, но очень смутные воспоминания. В скором будущем собираюсь их освежить. С Tetgen'ом я и вовсе никогда не работал. Поэтому не буду говорить, что Gmsh лучше них. Тем более не скажу, чем он хуже. Однако я обнаружил нечто, что позволяет мне посоветовать использовать Gmsh вместо этих триангуляторов. А именно, полазив в документации, можно обнаружить следующий абзац, рассказывающий о выборе алгоритма генерации сетки:
"6.1 Choosing the right unstructured algorithm
<...>
In 3D two unstructured algorithms are available:
1. The "Delaunay" algorithm is split into two separate steps. First, an initial mesh of the union of all the volumes in the model is performed using H. Si’s Tetgen algorithm. Then a three-dimensional version of the 2D Delaunay algorithm described above is applied.
2. The "Frontal" algorithm uses J. Schoeberl’s Netgen algorithm."
Переведу:
6.1 Выбор подходящего неструктурированного алгоритма
<...>
В трехмерном случае доступны 2 неструктурированных алгоритма:
1. Алгоритм "Делоне" состоит из двух отдельных этапов. Вначале генерируется сетка для всех объемных фигур модели с помощью Tetgen-алгоритма H. Si (прим. перевод. - это автор Tetgen'а). Затем применяется трехмерная версия  двумерного алгоритма Делоне, описанного выше (прим. перевод. - выше описывались алгоритмы для двумерных моделей)
2. "Фронтальный" алгоритм использует Netgen-алгоритм J. Schoeberl (прим. перевод. - это автор Netgen'а).
Таким образом, связь между Gmsh'ем, Netgen'ом и Tetgen'ом можно проиллюстрировать так:
То есть, с одной стороны, Gmsh - это такой же триангулятор, как и другие, но с другой - он вобрал в себя алгоритмы генерации сетки из других программ, таких как Tetgen и Netgen. В Gmsh'е есть даже Netgen-оптимизация тетраэдральной сетки. Так что Gmsh строит сетку не хуже.

Где взять Gmsh?
Gmsh можно скачать с его сайта. В разделе Download имеются готовые к использованию версии для Windows, Linux и Mac OS X. К тому же имеется архив версий. Я, например, настоятельно рекомендую использовать (и сам использую) не самую последнюю на данный момент версию (2.5.0), а предпоследнюю (2.4.2). Несмотря на некоторые нововведения, последняя версия обладает большим количеством багов, которые, конечно, активно вылавливаются, но все равно остаются в достаточном числе. Также есть возможность скачать исходники, для тех кто хочет поковыряться во внутренностях Gmsh'а.
Обновлено 24.08.2012 На сегодняшний день последним релизом является версия 2.6.1. Могу сказать, что там довольно много улучшений, связанных именно с генерацией сетки, помимо обычных расширений функциональности, которые, впрочем, не всегда делают продукт лучше. Так что, теперь версия 2.4.2 уже точно устарела.

Запуск Gmsh'а
Ну и напоследок, коротко о том, как запускать Gmsh. Те, кто пользуется не Windows, я думаю, разберутся и сами. Пользователи же Windows могут запустить Gmsh из проводника просто щелкнув по gmsh.exe. Однако я советую запускать Gmsh через командную строку, используя, например, Far или Total Commander. В командной строке можно передать кучу опций через параметры, чего нельзя сделать через проводник.

Итак, поняв что такое Gmsh, для чего он нужен, оглянувшись на ближайших конкурентов и узнав где его скачать и как запустить, попробуем использовать его для генерации симплициальной (т.е. треугольной или тетраэдральной) сетки простой дву- и трехмерной модели.

Комментариев нет:

Отправить комментарий