Чтение сетки Gmsh в Matlab

Теперь рассмотрим чтение сетки Gmsh в Matlab. Сетка Gmsh должна быть сохранена в msh-файл. Версия формата «2.2 0 8». Она указывается в начале msh-файла. Не исключено что работать будут и другие версии. Пишем на Matlab класс, конструктором которого является функция с аргументом в виде имени текстового msh-файла. Поля и методы сделаем доступными (public).

Чтение сетки Gmsh в Matlab: Общие сведения

Msh-файл состоит из блоков. Каждый блок начинается с двух строк: $ИмяБлока и строки количества элементов в блоке. Далее следуют построчно данные. Заканчивается блок строкой вида $EndИмяБлока. Подробнее о формате см. документацию Gmsh тут.

Конструктор класса не раскладывает элементы по физическим группам, т.е. по регионам. Эту часть сделать сложновато сразу вместе с чтением, поэтому оставил на потом. Не хочется усложнять чтение дополнительным функционалом. Пока — только считываем данные, как они есть в файле и создаем массивы. В тех случаях, когда массивы содержат разнотипные данные, используются ячейки (Cells). Это характерно для блока $PhysicalNames. То же самое можно сказать и о применении ячеек в тех ситуациях, когда массивы элементов одного блока имеют разную длину, что характерно для блока $Elements.

Для экспериментов применяется файл простой сетки из четырех прямоугольных элементов: SimpleQuadMesh. В этом архиве и скрипт (geo) и экспортированный файл сетки (msh). В сетке пять регионов (physicalNames) — четыре линии и одна поверхность.

Исходный код (Matlab)

Скачать: GmshToMatlab

Запуск:

Mesh = GmshToMatlab('SimpleQuadMesh.msh');

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.