понедельник, 18 июля 2011 г.

Gmsh. FAQ

Недавно я перелистывал документацию Gmsh'а и обнаружил раздел, в который редко заглядывал, но который, возможно, понятнее меня объяснит некоторые вещи. Это FAQ - часто задаваемые вопросы. Я привожу здесь свой перевод этого раздела целиком, благо он не очень большой. Исходный текст вы можете найти на сайте Gmsh'а в разделе "Документация".

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

visualize - визуализировать
manual - мануал (можно также назвать "руководством")
tutorial - туториал (вообще, по словарю это - "пособие")
bug tracking - баг-трекинг ("контроль (слежение) над ошибками")
opaque move - оставляю без перевода
ghost triangulation - "ложная триангуляция" - не в курсе контекста, поэтому оставил без перевода
extrude - вытягивать (употребляется в значении: вытягивая точку, вы получите линию)
tolerance - это слово можно перевести по-разному. я использовал "допустимый предел", что, как мне кажется, наиболее подходит по контексту
transfinite - трансфинитный

Основы
1. Что такое Gmsh?
Gmsh - это автоматический генератор трехмерной конечноэлементой сетки со встроенными пре- и постпроцессорными средствами. Со Gmsh'ем вы можете создать или импортировать одно-, дву- и трехмерные геометрические модели, построить для них сетки, запустить внешние конечноэлементые решатели и визуализировать решения. Gmsh может быть использован как самостоятельная программа (с графическим интерфейсом или без него) или как C++ библиотека.
2. Каковы условия использования?
Gmsh распространяется на условиях GNU General Public License. Смотри лицензию для большей информации.
3. Что означает "Gmsh"?
Ничего... Название было получено от предыдущей версии, названной "msh" (сокращение от "mesh"), добавлением префикса "g", чтобы различать их. Формат файла для сетки, используемый Gmsh'ем по умолчанию, до сих пор имеет расширение .msh.
По-английски, люди склонны произносить "Gmsh" как "gee-mesh".
4. Где найти больше информации?
http://www.geuz.org/gmsh - это основное место, где можно получить информацию о Gmsh'е. Здесь вы найдете, например, полный мануал, базу данных баг-трекинга и архив Gmsh-рассылки с поиском (gmsh@geuz.org).

Проблемы установки
1. На каких ОС работает Gmsh?
Gmsh работает на Windows XP/Vista, Mac OS X, Linux и большинстве Unix систем.
2. Существуют ли дополнительные требования для запуска Gmsh'а?
На вашей системе должны быть установлены и прописаны в path библиотеки OpenGL. Бесплатную замену OpenGL'ю можно найти на http://www.mesa3d.org.
3. Как собрать Gmsh из исходников?
Вам нужен cmake (http://www.cmake.org) и C++ компилятор. Смотри файл "README.txt" в директории верхнего уровня исходников для большей информации.
4. Где хранит Gmsh свои файлы конфигурации?
Gmsh будет пытаться сохранить временные файлы и постоянные настройки конфигурации сначала в директорию $GMSH_HOME, затем в $HOME, $TMP или $TEMP (именно в таком порядке), если переменная окружения $GMSH_HOME не определена. Если ни одна из этих переменных не определена, Gmsh будет пробовать сохранить/загрузить свои файлы конфигурации из текущей рабочей директории.

Общие вопросы
1. Gmsh жалуется на недостающие библиотеки.
В Windows: если система жалуется на отсутствие библиотек "OPENGL32.DLL" или "GLU32.DLL", значит OpenGL был установлен на вашу машину неправильно. Вы можете скачать OpenGL с сайта Microsoft или напрямую с http://www.opengl.org.
В Unix: попробуйте "ldd gmsh" (или "otool -L gmsh" в Mac OS X), чтобы проверить, все ли требуемые библиотеки установлены на вашей машине. Если не все, установите их. Если все еще Gmsh не работает, перекомпилируйте его из исходников.
2. Gmsh перерисовывает изображения, когда другие окна частично закрывают графическое окно.
Отключите "opaque move" в вашем менеджере окна.
3. Рисунки отображаются очень медленно
Вы запускаете Gmsh с удаленного компьютера (через сеть) без GLX? Вам необходимо выключить двойную буферизацию (опцией командной строки "-nodb").
4. Есть ли в векторных PostScript/PDF файлах, сгенерированных Gmsh'ем, странная "ghost triangulation"?
Нет, нету. Эта "ghost triangulation" существует вследствие того, что большинство PostScript-просмотрщиков в настоящее время сглаживают графические примитивы, когда отображают страницы на экране. (Например, в gv вы можете отменить сглаживание через меню "State->Antialias"). Вы не должны видеть эту "ghost triangulation" в напечатанном виде (на бумаге).
5. Как сохранить GIF, JPEG, ... картинки?
Просто выберите подходящий формат в "File->Save As". По умолчанию Gmsh догадывается о формате через расширение файла, так что вы можете просто ввести "myfile.jpg" в поле ввода и Gmsh автоматически создаст JPEG файл.
6. Как сохранить MPEG, AVI, ... анимации?
Используя скрипт. Смотри в качестве примеров "tutorial/t8.geo" или "demos/anim.script".
7. Могу ли я изменить значения в полях ввода графического интерфейса с помощью мыши?
Да: движение мышью в цифровом поле ввода изменяет значение! Левая кнопка изменяет значение на один шаг при перемещении на один пиксел, средняя кнопка - на 10 шагов, правая кнопка - на 100 шагов.
8. Можно ли скопировать сообщения в буфер обмена?
Да, выделив содержимое поля ввода или строки в консоли сообщений ("Tools->Message Console"), скопируйте выделенный текст в буфер обмена.

Модуль геометрии
1. Поддерживает ли Gmsh NURBS кривые/поверхности?
Да, но только через импорт STEP, IGES или BREP моделей (не в ".geo" файлах). Для этого Gmsh должен быть собран с поддержкой OpenCASCADE.
2. Gmsh работает очень медленно, когда я использую много преобразований (перенос, поворот, симметрия, вытягивание и т.д.). Что не так?
По умолчанию Gmsh проверяет и удаляет все повторяющиеся объекты (точки, линии и поверхности) всякий раз, когда встречается команда преобразования. Это может значительно снизить скорость, если производится много трансформаций. Существует 2 решения этой проблемы:
а. вы можете сохранить развернутую (unrolled) геометрию в другой файл (например, с помощью "gmsh file.geo -0") и использовать этот новый файл для дальнейших вычислений;
б. или вы можете установить опцию Geometry.AutoCoherence = 0. Это предотвратит любую автоматическую проверку/замену дубликатов. Если вам все же нужно удалять повторяющиеся объекты, просто добавьте Coherence; в нужное место ваших geo файлов (например, перед созданием контуров линий и т.д.).
3. Как вывести на экран только определенные части моей модели?
Используйте "Tools->Visibility". Это позволит вам выбрать элементарные объекты или физические группы, а также элементы сетки, различными способами (в списке или дереве просмотра, по идентификационному номеру, интерактивно или через окно).
4. Можно ли редактировать STEP/IGES/BRep модели?
Еще нет. В настоящее время вы можете только изменить размер элементов сетки, определить объемы и физические группы или удалить объекты. Простейший способ сделать это - включить модель в .geo файл командой Merge "file.step"; и добавить соответствующие команды после этого. В будущем мы планируем добавить более глубокие возможности редактирования (удалять объекты, создавать "смешанные" поверхности и объемы, экспортировать в .geo формат и т.д.).
5. Как строить модульные геометрии?
Определить в отдельных файлах общие геометрические объекты и параметры, много раз используемые во всех ваших структурах определения задачи. Затем включить (посредством команды Include) эти файлы в ваш основной файл проекта.

Модуль сетки
1. Что делать, когда 2D неструктурированный алгоритм не работает?
Проверьте, что все кривые в модели не самопересекающиеся. Если значение Mesh.RandomFactor*size(triangle)/size(model) близко к значению машинной точности, увеличьте Mesh.RandomFactor. Если снова не работает, пришлите отчет об ошибках с версией вашей операционной системы и полной геометрией.
2. Что делать, когда 3D неструктурированный алгоритм не работает?
Проверьте, что все поверхности в вашей модели не самопересекающиеся или частично перекрывают друг друга. Если они не самопересекающиеся и не перекрывающиеся, попробуйте другие 3D алгоритмы "Tool->Options->Mesh->General->3D algorithm" или попробуйте адаптировать размеры элементов сетки в вашем входном файле таким образом, чтобы поверхность сетки лучше соответствовала геометрическим деталям модели. Если ничто не работает, пришлите отчет об ошибках с версией вашей операционной системы и полной геометрией.
3. Мои 2D сетки IGES файлов дают разрывы между поверхностями.
IGES файлы не содержат топологию модели, и поэтому могут возникнуть проблемы допустимого отклонения, когда импортер OpenCASCADE не может идентифицировать две (близкие) кривые как одну (что на самом деле было бы правильным).
Лучшее решение - не использовать IGES, а использовать вместо него STEP. Если вы все же должны использовать IGES, проверьте, что у вас нет повторяющихся кривых (например, выведите на экран их номера, используя "Tools->Options->Geometry->Visibility->Line numbers"). Если есть повторяющиеся кривые, попробуйте изменить геометрическую точность и сшейте грани (смотри опции в "Tools->Options->Geometry->General").
4. Качество элементов, сгенерированных 3D алгоритмом, очень плохое.
Используйте "Optimize quality" в меню сетки.
5. Нерекомбинированные 3D вытянутые сетки иногда не работают.
Алгоритм замены в настоящее время не очень хорош. Попробуйте немного изменить поверхностную сетку, или рекомбинируйте вашу сетку, чтобы получить призмы или параллелепипеды вместо тетраэдров.
6. Соединяет ли автоматически Gmsh неструктурированные тетраэдральные сетки со структурированными параллелепипеидальными сетками, используя пирамиды?
Нет. Нам нужна ваша помощь, чтобы это реализовать.
7. Можно ли явно присвоить номера областей вытянутым слоям?
Нет, эта возможность была исключена в Gmsh 2.0. Вместо этого вы должны использовать стандартный номер объекта.
8. Вы удалили генератор эллиптической сетки в Gmsh 2.0?
Да. Вы можете получить аналогичный результат, используя трансфинитный алгоритм со сглаживанием (например, Mesh.Smoothing = 10).
9.Поддерживает ли Gmsh криволинейные элементы?
Да, Gmsh может генерировать как элементы первого, так и второго порядка. Чтобы сгенерировать элементы второго порядка, нажмите "High order" в меню сетки после того, как сетка была построена. Для того, чтобы всегда генерировать элементы второго порядка, выберите "Generate second order elements" в панели настроек сетки. В режиме командной строки вы также можете использовать "-order 2".
10. Можно ли импортировать существующую поверхностную сетку в Gmsh и использовать ее для построения 3D сетки?
Да, вы можете импортировать поверхностную сетку в любом из поддерживаемых форматов сеток, определить объем и сгенерировать разбиение. В качестве примера смотри "demos/sphere-discrete.geo".
11. Как определить граничные условия или свойства материала в Gmsh'е?
По замыслу Gmsh не пытается содержать каждое возможное определение краевого условия или свойств материала - это работа скорее для решателя. Вместо этого Gmsh предлагает простой механизм отметки групп элементов, и это дает возможность решателю интерпретировать эти отметки (тэги) как краевые условия, материалы и т.д. Связь тэгов с элементами в Gmsh'е осуществляется посредством определения физических объектов (Physical Points, Physical Lines, Physical Surfaces и Physical Volumes). Смотри мануал и туториалы (в частности "t1.geo") для детального описания и в качестве примеров.
12. Как вывести на экран сетку, связанную только с определенными геометрическими объектами?
Смотри "Как вывести на экран только определенные части моей модели?
13. Как "рассмотреть" сетку  (например, заглянуть внутрь сложной структуры)?
Вы можете использовать "Tools->Clipping Planes", чтобы выделить интересующую область. Вы можете определить до 6-ти секущих плоскостей в Gmsh'е (то есть достаточно для определения "куба" внутри вашей модели) и каждая плоскость может отсекать как геометрию, так и сетку, и виды постпроцессора, и любую комбинацию из вышеперечисленного. Секущие плоскости определяются с помощью 4-х коэффициентов A, B, C, D уравнения A*x+B*y+C*z+D=0, которые могут быть настроены интерактивно движением мыши в полях ввода.
14. Какой смысл имеют Rho, Eta и Gamma в "Tools->Statistics"?
Они измеряют качество тетраэдров сетки:
Gamma = (приближенно) радиус вписанной сферы / радиус описанной сферы
Eta = (приближенно) объем тетраэдра в степени (2/3) / сумма длин ребер в степени 2
Rho = (приближенно) наименьшая длина ребра / наибольшая длина ребра
Для точного определения смотри Geo/MElement.cpp. Графики показывают зависимость между количеством элементов и мерой качества.
15. Почему номера вершин и/или элементов на экране не соответствуют номерам в файле сетки?
Gmsh перенумеровывает вершины и элементы сетки таким образом, чтобы они имели номера в непрерывной последовательности в выходных файлах. Поэтому номера, отображаемые на экране после генерации сетки, обычно отличаются от номеров, сохраненных в файлах сетки. Чтобы проверить действительные номера, сохраненные в выходном файле, просто загрузите файл сетки, используя "File->Open".

Модуль решателя
1. Как интегрировать мой собственный решатель в Gmsh?
Если вы только хотите запустить программу из Gmsh'а, просто отредактируйте настройки для определения команд вашего решателя (например, Solver.Name0, Solver.Exetutable0 и т.д.) и установите опцию ClientServer равной 0 (например, Solver.ClientServer0 = 0).
Если вы хотите, чтобы ваш решатель взаимодействовал со Gmsh'ем (для сообщений об ошибках, определения настроек, постпроцессора и т.д.), вам будет нужно связать ваш решатель с процедурами GmshClient и добавить вызовы соответствующих функций в вашу программу. Конечно, вам также будет нужно определить команды вашего решателя в файле опций, но в настоящее время вам следует установить переменную ClientServer равной 1 (например, Solver.ClientServer = 1). Примеры решателей для C, C++, Perl и Python доступны в исходниках в папке "utils/solvers".
2. В Windows Gmsh, кажется, не находит исполняемый файл решателя. Что не так?
Исполняемый файл решателя (например, getdp.exe) должен быть прописан в вашем path. Если нет, определите его местоположение в поле "Command".
3. Можно ли запустить Gmsh из своего решателя (вместо запуска решателя из Gmsh'а), чтобы просматривать решение?
Конечно. Простейший (однако скорее - деревянный) подход - перезапускать Gmsh каждый раз, когда вы хотите что-нибудь визуализировать (простая C-программа, показывающая как это сделать, приведена в "utils/misc/callgmsh.c"). Подход получше - изменить вашу программу так, чтобы она могла связываться со Gmsh'ем через сокет (смотри выше "Как интегрировать мой собственный решатель в Gmsh?"; вы можете опустить создание файла опций). Затем выберите "Always listen to incoming connection requests" на панели настроек решателя (или запустите Gmsh с опцией командной строки "-listen") и Gmsh всегда будет "слушать" вашу программу через сокет Solver.SocketName.

Модуль постпроцессора
1. Как отобразить часть рисунка?
Используйте "Tools->Plugins->Cut Plane".
2. Можно ли сохранить изоповерхность в файл?
Да: вначале запустите "Tools->Plugins->Cut Map", чтобы получить изоповерхность, а затем используйте "View->Save As", чтобы сохранить новый вид.
3. Может ли Gmsh генерировать изообъемы?
Да, с помощью плагина CutMap (установите опцию ExtractVolume равной -1 или 1, чтобы получить отрицательный или положительный уровень).
4. Как анимировать мои рисунки?
Если виды содержат различные временные шаги, то нажать кнопку "play" внизу графического окна, или изменить временной шаг вручную на панели настройки видов. Вы также можете использовать клавиши влево и вправо, чтобы изменить шаг по времени во всех видимых видах в реальном времени.
Если вы хотите запустить по кругу различные виды вместо использования шагов по времени, вы можете использовать опцию "Loop through views instead of time steps" на панели настройки видов или клавиши "вверх" и "вниз" на клавиатуре.
5. Как визуализировать деформированную сетку?
Загрузите векторный вид, содержащий поле смещения, и установите "Vector display" в "Displacement" на "View->Options->Aspect". Если смещение слишком мало (или велико), вы можете масштабировать его опцией "Displacement factor". (Помните, что вы можете двигать мышью во всех числовых полях ввода, чтобы изменять значения!)
Другой способ - использовать "General transformation expressions" (на "View->Options->Offset") со скалярным видом и с картой смещения, выбранной как источник данных.
6. Можно ли визуализировать поле на деформированной сетке?
Да, для этого существует несколько способов.
Простейший - загрузить два вида: первый вид содержит поле смещения (векторный вид, который будет использоваться для деформирования сетки), а второй - поле, которое вы хотите вывести на экран (этот вид должен содержать такое же количество элементов что и вид со смещением). Тогда вам нужно для первого вида установить "Vector display" в "Displacement", а второй указать как "Data source". (Возможно, вы захотите сделать второй вид также невидимым. Если вы хотите увеличить или уменьшить величину деформации, просто измените настройку "Displacement factor".)
Другой способ - использовать "General transformation expressions" (на "View->Options->Offset") для поля, которое вы хотите вывести на экран с картой смещения, выбранной как источник данных.
И еще один способ - использовать плагин "Warp".
7. Можно ли закрасить стрелки, представляющие векторное поле, в соответствии с данными из скалярного поля?
Да: загрузите векторное и скалярное поле (оба вида должны иметь одинаковое количество элементов) и в настройках векторного поля выберите скалярный вид в "Data source".
8. Можно ли закрасить значения изоповерхностей в соответствии с данными из другого скалярного вида?
Да, используя плагин "CutMap" (с опцией "dView") или плагин "Evaluate".
9. Существует ли способ сохранить анимации?
Да, используя скрипты. Смотри "tutorial/t8.geo" или "demos/anim.script" в качестве примеров.
10. Существует ли способ визуализировать только некоторые компоненты векторных/тензорных полей?
Да, используя опцию "Force field" в "Tools->Options->View->Visibility" или используя "Tools->Plugins->Extract".
11. Можно ли осуществлять арифметические операции над видом? Можно ли производить операции над различными видами?
Да, используя плагин "Evaluate".
12. Кажется, некоторые плагины создают пустые виды. Что не так?
Причины могут быть следующими:
а. плагин может быть написан для строго определенных типов элементов (например, только для треугольников или тетраэдров). В этом случае вы должны преобразовать ваш вид до запуска плагина (или вы можете использовать "Plugin(DecomposeinSimplex)" для преобразования всех четырехугольников, параллелепипедов, призм и пирамид в треугольники и тетраэдры).
б. плагин может ожидать сетку, в то время как вы передаете набор точек. В двумерном случае вы можете использовать "Plugin(Triangulate)" для преобразования набора точек в триангулированную поверхность. В трехмерном случае вы можете использовать "Plugin(Tetrahedralize)".
в. входные данные выходят за пределы допустимого диапазона
В любом случае вы можете удалить все пустые виды, используя "View->Remove->Empty Views" через интерфейс, или с помощью "Delete Empty Views;" в скрипте.
13. Как "заглянуть внутрь" сложного постпроцессорного вида?
Используйте "Tools->Clipping Planes".
При просмотре трехмерного скалярного поля вы также можете изменить палитру ("Tools->Options->View->Map") для того, чтобы сделать изоповерхности прозрачными: удерживая "Ctrl" во время передвижения мышью, чтобы нарисовать альфа канал от руки, или используя горячие клавиши "a", "Ctrl+a", "p" и "Ctrl+p".
Еще один способ - использовать опцию "ExtractVolume" в плагинах "CutSphere" или "CutPlane".
14. Я загружаю правильный 3D скалярный вид, но Gmsh ничего не отображает!
Если ваши данные постоянны на элементе, убедитесь, что вы не используете тип интервала "Iso-values" в "Tools->Options->View->Range".

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

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