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

Использование сетки конечных элементов, построенной программой GMesh, для вычислений в программе Mathcad Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
331
73
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ВИЗУАЛИЗАЦИЯ РЕЗУЛЬТАТОВ РАСЧЕТА / ИМПОРТ СЕТОК ЭЛЕМЕНТОВ СО СЛОЖНОЙ ТОПОЛОГИЕЙ / ЭКСПОРТ СЕТОК ЭЛЕМЕНТОВ С ПРОИЗВОЛЬНОЙ ТОПОЛОГИЕЙ / GMESH / MATHCAD / VISUALIZATION OF NUMERICAL RESULTS / TRANSFER MESH WITH COMPLEX TOPOLOGY

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Филипов А. М., Хоменко М. В.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Using the finite element mesh, created by GMesh, for calculations in Mathcad

The article treats the issues of data exchange between Mathcad and Gmsh. To solve this problem built-in and predefined functions are used in Mathcad without recourse to UFI tools. The solution proposed in the article is connected with importing a mesh with a complex topology into Mathcad for further processing with the use of numerical methods. The solution involving a partially automated transmission of the results of calculations in the nodes of spatial mesh cells for further visualization is also considered in the article.

Текст научной работы на тему «Использование сетки конечных элементов, построенной программой 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 (М, Е. Маше, Тт, МЕ:е б) := агаск (ге 5_Ие а£1ег . ге 5_по (1е (X), ге 5_е1е т(Е) , ге з_ге =и11:(Хате , Гт, Же 5 ))

У

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

ге5(пос1е,е1ет.Хате Дшге.Еен)

ге5_Ьеа(1ег := ("ШезИятаГ "12 0 3" "^ЕгиШезЬТоппа!:" )

■ Д

ге5_по<1е(Х)

а.

б.

АТ ( "ШоЛек" пшп25И(го'л-5(М)))1 й)Г П £ 1.. Г01*"5(Х)

АТ, ,ЖТ, "5Еп(1Хо(1е5" З+ПтВ^Еч)

АТ

ге5_е1ет(Е)

АТ ("5Е1етеп15" пшп25й(гоч"5(Е))) б)С П £ 1.. ЮТ5(Е)

АТ-,_.. сопса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еБа1а" "1" 11 "1" гаи^Тте) "3" "О" "Iм )Т АТ„ пит2511(го^У5(Ее5))

Еог 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

б.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Рис.5 - внешний вид исходной импортируемой сетки (а) и результат, отображаемый в программе GMesh (б)

Литература

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.

i Надоели баннеры? Вы всегда можете отключить рекламу.