Pull to refresh

Создание удобной CAE системы на базе пре/постпроцессора GiD и любой расчетной программы

Reading time7 min
Views5.3K
В данной статье я бы хотел поделится своим опытом работы с одной малоизвестной коммерческой CAE программой.

Имя этой программе GiD, и перед тем, как перейти к описанию, хотелось бы коротко рассказать о том, как я пришел к ее использованию.


Пролог

Я являюсь студентом одного из технических факультетов, одного из сибирских ВУЗов. За ненадобностью (и просто от греха подальше) конкретизировать не стану. На факультете студентам некоторых кафедр преподается курс вычислительной механики. Разумеется, при качественном изучении подобной дисциплины, никак нельзя обойтись без соответствующего программного обеспечения, и таковое на кафедре имелось. Более того, оно на этой же кафедре было разработано, успешно выполняло свои функции (на протяжении многих лет) и на момент создания было, вполне актуальным.

Если конкретнее, то это был комплект из программы создания конечно-элементных сеток и пре/постпроцессинга (Pascal с использованием DOS графики), расчетной программы, базирующейся на методе конечных элементов (fortran 75) и оптимизатора сеток (тоже fortran). Взаимодействие между этими программами осуществлялось с помощью вооруженного знаниями и командной строкой студента.

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

Сами поиски подробно описывать не стану, речь не об этом. Замечу лишь, что такой комбайн как ANSYS для этих целей не подходил (тем более для него на факультете был выделен аж целый один отдельный курс лекций). Среди многочисленных open source проектов тоже не было очевидного претендента, удовлетворяющего нашим требованиям. В конце концов, прислушавшись к совету своего научного руководителя, я начал присматриваться к GiD.

Персональный пре/постпроцессор

В итоге выяснилось, что этот комплекс представляет из себя:
  1. графический препроцессор с довольно мощным аппаратом геометрического моделирования, дискретизации геометрических моделей и неплохими возможностями импорта геометрии и сеток из других CAE/CAD программ
  2. неплохой и довольно простой графический постпроцессор, позволяющий анализировать результаты проделанных вычислений


Несколько скриншотов






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

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

Скорее всего, это не единственная программа, выполняющая такие функции, и я буду премного благодарен тем, кто приведет примеры. Но так уж вышло, что далее работать я стал именно с ней. Тем более демо-версия не накладывала никаких ограничений на срок работы с программой и на ее функциональность, кроме ограничения на количество используемых в сетке узлов (не более 1010 узлов). То есть для обучающих целей она могла использоваться, вообще говоря, бесплатно.

Цена продукта, кстати говоря, тоже весьма приемлема (только не нужно воспринимать эту информацию как рекламу). Вдобавок ко всему, разработчики предоставляют версии для различных платформ, что было очень удобно, так как я использую Ubuntu, а на машинах факультета стоят либо XP либо семерка.

Мы решили заменить устаревший пре/постпроцессор используемого нами программного комплекса GiD-ом, оставив ту же расчетную программу.

Как это работает?

Для того чтобы организовать связь между пре/пострпоцессорм GiD и некоторым решателем (уж простите, если кому режет слух, но в моем словарном запасе нет русского аналога слову solver), используются гибкие и довольно простые механизмы, о которых я вкратце, на примерах расскажу.

Итак, мы имеем:
  1. собственную расчетную программу расчета НДС пластин на базе МКЭ
  2. коммерческий пре/постпроцессор


А необходимо нам сообразить из этого рабочую, простую и удобную CAE систему, пригодную для тех или иных целей (в моем случае обучение работе с подобными системами)

Подробные инструкции к этому процессу, как и руководство по работе в пре/постпроцессоре, подробно описано в мануалах, от разработчиков. На офсайте продукта вообще можно найти много доступной и полезной информации, от FAQ до материалов конференций, посвященных работе с GiD.А благодаря стараниям некой
Irene Grigorieva from University of Kemerovo
пользовательский мануал доступен на русском языке (хотя, на мой взгляд, это могли сделать и сами разработчики).

Я же затрону лишь основные аспекты.

Система шаблоннов

GiD осуществляет взаимодействие между своим препроцессором и решателем путем обмена файлами данных (ANSI типа). Если вы хотите использовать ее для работы с программой, которая в качестве входных данных для своих расчетов использует какие-либо не форматированные (или с закрытым форматом) файлы, то, скорее всего, у вас ничего не выйдет. Хотя возможно появится, а может быть уже появилось, какой-нибудь модуль/дополнение.

Для того чтобы передать информацию, о построенной (или импортированной) в препроцессоре модели во входной файл решателя, используется система шаблонов. Шаблон представляет из себя файл с расширением .bas, написанный, в соответствии с придуманными разработчиками правилами, который указывает препроцессору в каком виде нужно записать данные о сетке в файл.



Шаблон состоит из набора любых символов, в котором все символы, кроме ключевых слов, следующих за символом «*», GiD воспринимает, как простой текст, и в том же виде передает во входной файл.

Ниже в качестве пояснения представлено несколько примеров «шаблон – результат»

Пример 1. Вывод общего числа элементов и узлов сетки

myproblem.bas
Myprogram datafile                              
NumberOfNode = *NPoin
NumberOfElements = *NElems


projectname.dat
Myprogram datafile                              
NumberOfNode = 12
NumberOfElements = 10


Пример 2. Список элементов

myproblem.bas
ElemsList 
Elem Node1 Node2 Node3 Material Elemtype
*Loop elems
*ElemsNum *ElemsConec *ElemsMat *ElemsTypeName
*End elems 


projectname.dat
ElemsList
Elem /Node1  Node2 Node3 / Material 
1   / 1 2 12 /  1  
2   / 2 11 12 / 2
3   / 2 3 11 / 2
4   / 3 10 11 / 2
5   / 3 4 10 / 2
6   / 4 9 10 / 1
7   / 4 5 9 / 1
8   / 5 8 9 / 1
9   / 5 6 8 / 2
10 / 6 7 8 / 2


Пример 3. Создание переменных. Форматированный вывод.

myproblem.bas
*Set var pi= 3.1415926535897
*Set var circlelength
*Set var  radius=15
*format(IRadius=15, CircleLength=%5.3f)
*operation(2*radius*pi)


projectname.dat
Radius=15, CircleLength=94.245


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

В наборе этом присутствуют и стандартные циклы, и условия, и циклы по элементам, и messаge-box-ы, для уведомлениях об ошибках, и еще много чего. Если же стандартного набора не хватит, ввиду сложного формата входного файла, или необходимости реализации каких-то хитрых функций, то в шаблоне можно использовать процедуры, написанные на языке Tcl (как из идущей в комплекте библиотеки, так и написанные пользователем). Интерпретатор Tcl идет в комплекте, так что о его установке беспокоиться не придется.

Проблематика конкретной задачи

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

Для того чтобы можно было оперировать этим набором данных, опять таки нужно создавать текстовые файлы с соответствующими расширениями.
  • .cnd — для описания используемых вами граничных условии
  • .mat — для описания материалов, и третий
  • .prb — для прочих параметров.


С созданием этих файлов все еще проще чем с шаблонами. Вот пример файла в котором описывается два граничных условия(нагрузка в узле, и начальное перемещение узла)

myproblem.cnd
CONDITION: Point-Move
CONDTYPE: over points
CONDMESHTYPE: over nodes
QUESTION: X-Move
VALUE: 0
QUESTION: Y-Move
VALUE: 0
HELP:перемещение{см}
END CONDITION

CONDITION: Point-Force-Load
CONDTYPE: over points
CONDMESHTYPE: over nodes
QUESTION: X-Force
VALUE: 0.0
QUESTION: Y-Force
VALUE: 0.0
HELP: Нагрузка{см}
END CONDITION


После создания всех указанных выше файлов, нужно «сложить» их в папку с любым угодным вам именем (которое впоследствии будет использоваться в интерфейсе программы, в качестве идентификатора вашей задачи) и «расширением» .gid. Папку эту нужно поместить одну из подкаталогов программы GiD, при следующем запуске ваш тип задачи будет доступен для работы.

Проекты хранятся в папках с тем же «расширением» .gid. Туда же помещаются полученные с помощью шаблонов файлы данных, а так же дублируются файлы с граничными условиями и материалами (для возможности менять их применительно только к одному проекту). Шаблонов может быть сколь угодно много, и каждому из них будет соответствовать свой файл данных.

Готово! Как заводить?

Когда модель построена, сетка сгенерирована, граничные условия заданы – нужно запустить решатель. Чтобы это можно было сделать непосредственно из препроцессора, нужно написать простенький скрипт. При нажатии кнопки “Caclulate” в GiD, программа просто запустит этот скрипт с тремя параметрами (имя проекта, путь к папке проекта, путь к папке с определением типа задачи). В скрипте можете реализовать все, что вам не хватало, на CMD в Windows или на bash/sh в Linux.

А что же с постпроцессором?

С постпроцессором, к сожалению, все не так гибко. Он требует от расчетной программы, вывода данных в файлы, в угодном ему формате. Более удобной системы пока не придумали.

В моем случае эта проблема была решена созданием «конвертера», который, на основе выходных файлов нашей расчетной программы, создавал файлы, необходимые постпроцессору. Формат этих файлов подробно описан в мануалах, и создание такого «конвертера» не составит труда, при наличии минимальных навыков работы с файлами в любом языке программирования.

Подведение итогов

GiD может оказаться полезен тем, кто ищет простой и удобный пре/постпроцессор для решения самых разнообразных задач, но при этом не хочет обзаводиться такими гигантами как ANSYS (даже самый базовых комплект которого включает в себя много, порой лишних и ненужных инженерам/исследователям функций, за которые, хочешь не хочешь придётся платить).

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

Надеюсь данный материал будет кому-то полезен.
Tags:
Hubs:
+3
Comments0

Articles