Использование сетки конечных элементов, построенной программой GMesh, для вычислений в программе Mathcad

Использование сетки конечных элементов, построенной программой GMesh, для вычислений в программе Mathcad

1 2 А.М. Филипов , М.В. Хоменко

1 ВолгГАСУ, Волгоград 2 Государственный университет по землеустройству, Москва

Аннотация: в статье приводятся алгоритмы и листинги пользовательских функций для импортирования сеток элементов в программную среду комплекса Mathcad, для их последующего анализа численными методами. А так же приведено решение по экспорту полученных результатов в программу GMesh для последующей визуализации. Ключевые слова: визуализация результатов расчета, импорт сеток элементов со сложной топологией, экспорт сеток элементов с произвольной топологией, GMesh, Mathcad.

При разработке численных алгоритмов [1-3], связанных с обработкой сложных двух- и трехмерных сеток и работ по их оптимизации существует необходимость в использовании относительно большеразмерных моделях со сложной топологией, а так же в предоставлении результатов в удобочитаемом виде - графиках, изополях, изоповерхностях [4,5]. Одной из достаточно простых и универсальных программ математического моделирования является Mathcad и его аналоги. Однако в их возможности обычно не входят средства построения 4-х мерных графиков и окраска поверхности и (или) отрезков в соответствии с заданными пользователем значениями.

Для достижения этих целей можно:

- применить сторонние готовые программные решения типа GMesh [6] и аналогичные (например, Array Visualizer позволяет отобразить узловые значения для 3-х мерной пространственной сетки без отображения самой сетки);

- самостоятельно разработать такое решение, используя специализированные библиотеки, как например MatFOR (разработка AnCAD), или общие, такие как OpenGL [7,8], GTK, QT, и др.

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

В данной статье предлагается описание функций Mathcad'a (MathSoft, Inc.) для импортирования исходной сетки узлов и элементов и экспорта результата в программу GMesh. При этом поставленная задача может быть решена разными способами, перечислим их в порядке сложности:

- ручное преобразование исходных файлов;

- использование программ преобразования файлов;

- получение необходимых данных, а так же формирование данных для отображения стандартными функциями Mathcad'a [9];

- использование средств разработки userefi [9,10].

Из предложенных способов первые два не обеспечивают автоматизации, последний требует хороших знаний в области программирования на языке C++ и написания динамически подгружаемых библиотек. Соответственно, наиболее оптимальным решением будет использование стандартных средств системы Mathcad, о чем и пойдет речь далее в данной статье.

Для импортирования данных используется алгоритм, основаный на особенностях используемой среды:

- автоматическое размещение массивов;

- массивы могут содержать одновременно как строковые, так и численные данные;

- ограниченный набор функций работы с символьными строками.

Чтение данных выполняется функцией READFILE [9,10] с

параметрами "fixed" и числом предполагаемых символов в строке (оно же число столбцов) равным 256 - это значение достаточно для считывания всех атрибутов элемента, имеющего до 30 узлов. Т.е. команда чтения будет иметь

вид: Atmp = READFILE(file_name,fixed,256). При этом функция передает вектор строк (см. рис. 1).

1

1 "$MeshFormat"

2 "2.2 0 &|Г

3 "$EndMeshFormat"

4 "$Nodes'r

5 1Э1

6 "1 ООО"

7 "2 10 0 0"

Э

Рис. 1 - фрагмент полученных из файла с сеткой элементов данных

Структура данных [6]:

1. Описание формата файла.

2. Описание атрибутов узлов сетки.

3. Описание атрибутов элементов.

4. Описание параметров результатов и данные результатов.

П.п. 4 является необязательным и может повторяться внутри одного файла.

В нашем случае интерес при импортировании представляют блоки 2 и 3 (при получении массива атрибутов элементов сетки) и, соответственно, блоки 2-4 при экспортировании сетки элементов.

Все блоки имеют начальную строку с заголовком блока, размер блока и конечную строку соответственно: $<Имя блока>, <размер блока> и $Е^<Имя блока>, (см. рис.1 строки 1, 3 и 4, 5). Это упрощает извлечение интересующих данных.

Рассмотрим подробнее функцию преобразования исходных данных в массив координат узлов и аналогичную, преобразующую исходные данные в массив атрибутов элементов (см. рис.2а). Т.к. функции аналогичные и отличаются только параметрами поиска интересующих блоков (выполняется

:

поиск слов «Nodes» и «Elements» соответственно), то ниже рассматривается первая из них.

Первоначально в цикле WHILE [9,10] выполняется поиск номера исходного массива, содержащего строку символов с интересующим заголовком блока, и вычисляются номера первого и последнего элемента, содержащего данные. Далее выбранный диапазон элементов исходного массива поэлементно передается пользовательской функции Str2NumVect(), выполняющей преобразование строки символов в числовой вектор. Листинг функции Str2NumVect() приведен на рис. 2б

Примечание: в приведенном листинге исходные данные содержит массив Atmp.

Рис.2 - Листинг функции преобразования исходных данных в массив координат узлов

Входящие в состав 81г2КишУее1() пользовательские функции афш^О, ЬСошраС;() и ЬЫй() выполняют выравнивание строки по левому краю, удаление повторяющихся пробелов и сдвиг элементов строки на указанное число позиций влево соответственно. Ввиду отсутствия в МаШсаСе возможности обратится к элементу строки без применения функции substr(),

обработка строк пользовательскими функциями осуществляется после их преобразования в последовательность АКБ1-кодов и обратным преобразованием после (функции Бй^ес() и vec2str() [9,10] соответственно). Листинги приведены на рис.За-в соответственно.

Рис.3 - листинги функций adjustl (а), ЬСотраС;(б), ЬЫй(в) Наличие функций adjustl() и ЬСотраС;() необязательно, если осуществляется обмен данными только между МаШса^ом и GMesh,ем, в остальных случаях -желательно.

Формирование файла с результатами для отображения в GMesh осуществляется путем формирования массива символьных строк и его последующей записи в файл, аналогично приведенным в статье [11]. В состав пользовательской функции, формирующей массив содержащий образ записываемого файла, входят следующие элементы:

1. res_header - формирование блока описания формата файла;

2. res_node() - формирование блока описания узлов;

3. res_elem() - формирование блока описания атрибутов элементов;

4. res_result() - формирование блока описания узловых значений.

Формирование блоков данных производится в соответствии с

требованиями [6], а именно: разделитель значений - пробел, разделитель целой и дробной части - точка. Блок описания узловых значений имеет дополнительные 8 строк [6]. Листинги пользовательских функций приведены соответственно на рис.5 а-д. Используемые переменные и массивы:

5. elem - массив с описанием элементов в соответствии с требованиями («№ элемента», «тип элемента», «кол-во дополнительных атрибутов», «атрибуты», «номера узлов»);

6. Name - имя графика (не поддерживаются символы кириллицы и спец.символы);

7. node - массив с координатами узлов сетки;

8. Time - позиция шкалы времени, для которой выводятся результаты;

9. Time_unit - единицы измерения шкалы времени результата;

10. Res - вектор узловых значений.

Функция r_out() нужна для записи числа в формате с плавающей точкой при его целом значении, т.е. если переменная равна «1», то ее строчная запись все равно будет иметь вид «1.00», листинг функции приведен на рис.5е.

:

ге 5

У

С.. .\test_exp о гЬ т эИ

ге5

ге5_Ьеа

Д

ге5_по<1е

а.

б.

АТ

АТ, ,ЖТ, "5Еп

АТ

ге5_е1ет

АТ

АТ-,_.. сопса1:|пит25&|Е.. " .пшп25И|Е.. ,,}," " ,пит22И| Е..

вЕ., , + 3 11

1?ог 12 £ 4.. со1а(Е) АГ2+1. - сопса1| АТ^+-. ," » .пипЗ^Ец й)) I * О V И < 3

АТ., "£Еп<1Е1етеп15"

3+ЮТ1ге

АТ

ге5_ге5ик(Хжпе ,Т1те,Е:е5) :=

Г.

11 <— сопсаЬ

АТ «—

Еог 11 г 1.. гсп*"5(К:е5) АТ„_.. сопсаг|пит2511(11)," " ,г_ош|Ее5.. "

ЕО+пт^Кез)

г_оШ

АТ

а1 <— пит2511

а1 <- сопсаЬ(а1,"_Ю" ) ^ 5еагсЬ(а1,"." ,0) < О

д.

е.

Рис.5 - листинг функций формирования и записи файла для GMesh

Исходная сетка элементов в программе GMesh приведена на рис.5 а. В качестве примера рассмотрена сетка элементов, содержащая одноузловые, линейные и плоские элементы. Узловые значения получены по формуле р(х) = со8(8х) см. рис.5б.

Тезе со1о!" Соз(бХ), {Т1ше: 1-1 уеаг}

-1 1

б.

Рис.5 - внешний вид исходной импортируемой сетки

Литература

1. Варвак П. М., Варвак Л.П. Метод сеток в задачах расчета строительных конструкций. М.: Стройиздат, 1977. 154 с.

2. Сабоннадьер Ж.К., Кулон Ж. Л. Метод конечных элементов и САПР: Пер. с франц.. М.: Мир, 1989. 190 с.

3. Singiresu, S.R., 2011. The Finite Element Method in Engineering. Elsevier UK, 726 p.

4. Лахов А. Я. Программное обеспечение для стереовизуализации результатов конечно-элементного моделирования // «Инженерный вестник Дона». 2013. №1. URL: ivdon.ru/ru/magazine/archive/n1y2013/1501

5. Рачковская Г. С. Математическое моделирование и компьютерная визуализации сложных геометрических форм // «Инженерный вестник Дона». 2013. №1. URL: ivdon.ru/ru/magazine/archive/n1y2013/1498

6. Gmsh: A three-dimensional finite element mesh generator with built-in pre-and post-processing facilities URL: gmsh.info/doc/texinfo/gmsh.html (дата обращения: 2.03.2016).

7. Евченко А. И. OpenGL и DirectX: программирование графики. Для профессионалов. СПб.: Питер, 2006. 350 с.

8. Lawrence, N., 2002. Compaq Visual Fortran: A Guide to Creating Windows Applications. Digital Press, 482 p.

9. Очков В.Ф. Mathcad 14 для студентов и инженеров русская версия. СПб.: БВХ-Петербург, 2009. 512 с.

10. Mathsoft, I., 2001. Mathcad: user's guide with reference manual : Mathcad 2001 professional. MathSoft, Inc., 528 p.

11. Филипов А. М. Подготовка файлов с результатами численного анализа для последующего графического отображения в программе Gmesh // Естественные и технические науки. 2014. №75. С. 4.

References

1. Varvak P. M., Varvak L.P. Metod setok v zadachakh rascheta stroitel'nykh konstruktsiy [The grid method in problems of design of structures]. M.: Stroyizdat, 1977. 154 p.

2. Sabonnad'er Zh.K., Kulon Zh.L. Metod konechnykh elementov i SAPR: Per. s frants. [Finite Element Method and CAD: Trans. from France]. M.: Mir, 1989. 190 p.

3. Singiresu, S.R., 2011. The Finite Element Method in Engineering. Elsevier UK, p. 726.

4. Lakhov A. Ya. Inzenernyj vestnik Dona (Rus), 2013. №1, URL: ivdon.ru/ru/magazine/archive/n1y2013/1501.

5. Rachkovskaya G. S. Inzenernyj vestnik Dona (Rus), 2013. №1. URL: ivdon.ru/ru/magazine/archive/n1y2013/1498.

6. Gmsh: A three-dimensional finite element mesh generator with built-in pre-and post-processing facilities URL: gmsh.info/doc/texinfo/gmsh.html (Date Views 2.03.2016).

7. Evchenko A. I. OpenGL i DirectX: programmirovanie grafiki. Dlya professionalov [OpengL and DirektH: graphics programming. For professionals]. SPb.: Piter, 2006. 350 p.

8. Lawrence, N., 2002. Compaq Visual Fortran: A Guide to Creating Windows Applications. Digital Press, 482 p.

9. Ochkov V.F. Mathcad 14 dlya studentov i inzhenerov russkaya versiya [Mathsad 14 for students and engineers Russian version]. SPb.: BVKh-Peterburg, 2009. 512 p.

10. Mathsoft, I., 2001. Mathcad: user's guide with reference manual : Mathcad 2001 professional. MathSoft, Inc., 528 p.

11. Filipov A. M. Podgotovka faylov s rezul'tatami chislennogo analiza dlya posleduyushchego graficheskogo otobrazheniya v programme Gmesh. Estestvennye i tekhnicheskie nauki. 2014. №75. p. 4.