Обзор свободных программ для расчета конструкций методом конечных элементов (МКЭ) на примере надругательства над звездчатым многогранником. Первая часть содержит «Введение» и начало разбирательства с 3D-CAD’ами.
Содержание
Введение
Классическая «технология» расчета конструкций МКЭ включает 4 этапа:
Твердотельное моделирование с применением 3D-CAD’ов.
Предпроцессинг: разбиение на конечные элементы.
Расчет.
Постпроцессинг: визуализация и анализ результатов.
В мире существует огромная «армия» коммерческого ПО класса CAD/CAE, решающая эти задачи как вместе – в одной системе-комбайне, так и по отдельности.
В нашей отрасли наиболее популярны для 3D-моделирования SolidWorks
, КОМПАС 3D
и Autodesk Inventor
, а для пунктов 2–4 – либо соответствующие модули в составе этих систем (SolidWorks Simulation
, APM-FEM
в КОМПАС-3D
или Stress Analysis
в Inventor
Professional
), либо – более серьезный ANSYS
.
Расчеты – дело ответственное. Для сложных систем лучше использовать профессиональные CAD/CAE-системы.
Однако, например, в нашей практике в 90% случаев приходится иметь дело либо с «очень», либо с «довольно» простыми конструкциями. Для их расчетов отлично зарекомендовал себя рассмотренный ниже свободный софт, справляющиеся с возложенными на него функциями не хуже коммерческих монстров. Применение свободных программ оправдано, когда подобные расчеты приходится делать «время от времени», а сами конструкции (повторюсь) – не слишком сложны. Завязываться на свободный софт по его текущему уровню развития в технологическом цикле машиностроительного проектирования CAD/CAE/CAМ по моему мнению пока преждевременно.
Мы многократно тестировали описанную ниже цепочку программ на предмет адекватности результатов:
сравнением с модельными задачами, для которых можно получить аналитическое решение (балки, стержневые системы);
сравнением с результатами, полученными в «серьезных» CAD/CAE;
испытаниями.
Никаких претензий в части адекватности к описанному ниже софту мы не выявили. Ошибки случались только от неправильности применения его человеком.
Пожалуй, единственный значимый недостаток – это определенное неудобство использования. «Порог входа» довольно высок. На разных этапах приходится применять программы с разными идеологиями и разными не вполне интуитивными интерфейсами. Как в любом свободном ПО, у этих программ немало недоработок. Но, если к их особенностям чуть-чуть попривыкнуть, «рука набивается». Расчеты получается делать достаточно быстро и качественно.
Важное условие – инженер должен понимать, что он делает и иметь определенный багаж теоретических знаний в строительной механике / сопромате и МКЭ. Но без этого – легко «натворить дел» и в коммерческих CAE. Их обманчивая простота «для домохозяек» продуцирует ситуацию, когда за расчеты берутся мало понимающие в них люди. При этом мотивации к изучению теории – не возникает. В итоге мы имеем настоящую эпидемию – море неграмотно сконструированных объектов. Иногда все заканчивается очень печально. В этом смысле, свободный софт, наоборот, мотивирует знать теорию. Без нее, скорее всего, просто ничего не получится. :)
Отметим, что вариантов использования различных программ на разных этапах «технологии» – множество. Перечислю в таблице лишь некоторые:
Этап | Возможный свободный (бесплатный) софт |
---|---|
1. 3D-моделирование | OpenSCAD, ImplicitCad, FreeCAD, CadQuery, SolveSpace, OnShape, Salome, Calculix cgx, GMSH, BRL-CAD |
2. Пред-процессинг | GMSH, Salome, NetGen, TetGen |
3. Расчет | CalculiX cсx, Code_Aster, GetDP, NGSolve |
4. Пост-процессинг | CalculiX cgx, Salome, GMSH, NetGen, ParaView |
Ниже будут рассмотрены варианты программ, на которых мы пока «примерно остановились» с кратким обзором отдельных альтернатив.
Чтобы было не скучно, последовательность расчета будет проиллюстрирована не на классических балках или «пистонах». Поиздеваемся над символом этого блога – звездчатым многогранником «Соединение пяти тетраэдров». Поставим скромную задачу выполнить самый простой линейный расчет напряженно-деформированного состояния. Более интересные нелинейные расчеты, расчеты устойчивости и динамический анализ – также без проблем делаются. Надеюсь о них написать как-нибудь в будущем.
CAD’ы: подготовка 3D-геометрии
OpenSCAD: 3D-моделер для программистов
OpenSCAD
– это легкая и простая, но совершенно крутейшая штука. 3D-модели здесь просто «пишутся» на удобном и очень простом языке программирования. Рядом – интерактивно строится результат.
Теоретически на нем можно делать весьма сильные вещи. Умельцы и делают. Когда нужно сформировать что-то «модельное» или «абстрактное» – я тоже с удовольствием его запускаю. Коллеги-конструкторы крутят у виска пальцем. :)
Вообще, идея описания конструкций на языке – на мой взгляд прекрасна. Она не получила развития в коммерческих CAD’ах скорее в силу традиций (не приучены конструкторы к текстам). А ведь достоинств у такого подхода немало:
Текст – прозрачен и гибок. Модель параметризуется и «работает» в точности так, как вы задумали.
Универсальность и выразительность языка – всегда выше GUI.
Текст хорошо «накапливается» и обобщается в библиотеки, которые дальше повторно используются. Уровни абстракций – наращиваются.
Текст не может «испортиться», как непонятный бинарный файл, в котором хранят модели обычные CAD’ы.
С текстом можно использовать системы контроля версий, такие как
Git
. Одно это очень многого стоит.Языковая модель CAD наиболее легко интегрируется с узкоспециальными САПР вашей предметной области. Это особенно актуально, если части такой САПР приходится разрабатывать самостоятельно.
С учетом впечатляющего прогресса в развитии языков программирования можно было бы сделать очень продвинутый и лаконичный язык описания конструкций. Можно было бы совместить описание на языке и визуальное проектирование элементов, которые в тексте задавать неудобно (например, как в конструкторах форм IDE).
Не все пункты это перечня реализуются в OpenSCAD
. :) Вообще, он – скорее концепт. В реальной работе, когда нужно быстро посчитать что-то не элементарно простое, в нем работать, конечно, не очень удобно. Приходится выбирать средства визуального проектирования, о которых речь пойдет ниже.
Но когда надо сделать что-то «модельное», «математически абстрактное», параметрическое, OpenSCAD
– крут. Например, вот описание нашего многогранника:
module tetrahedron(edgeLength){ // Правильный тетраэдр
points = [ [ 1, 1, 1],
[ 1,-1,-1],
[-1, 1,-1],
[-1,-1, 1] ];
faces = [ [ 0, 2, 1],
[ 3, 0, 1],
[ 0, 3, 2],
[ 1, 2, 3] ];
scale([1,1,1]*edgeLength/sqrt(8))
polyhedron(points, faces);
}
module fiveTetrahedra(edgeLength){ // Соединение пяти тетраэдров
for(i=[0:4]){
rotate([0,-atan(sqrt(5)/2-0.5), i*360/5])
tetrahedron(edgeLength);
}
}
// ---------------- Модель -------------------
rotate($t*360/5)
fiveTetrahedra(100);
Просто, лаконично, понятно без комментариев. Если они нужны, на сайте есть хорошая справка в виде «Шпаргалки».
Обратите внимание на простоту языка: операторов и конструкций там очень мало. Он изучается буквально за пару часов, и, кстати, здорово развивает пространственное мышление – намного лучше средств визуального проектирования.
Предпоследняя строчка нашего текста, где выполняется преобразование rotate
с параметром $t
, позволяет сделать в окне OpenSCAD
анимацию. Нельзя удержаться, чтобы не перегнать ее в .gif
: :)
Понятно, что анимацию можно сделать для любого параметрического поведения вашей системы, например смоделировать кинематический механизм.
OpenSCAD
очень популярен среди любителей 3D-печати. Кстати, они наплодили буквально тонны готовых текстов для разных моделей, открытых для повторного применения. OpenSCAD
позволяет сохранять модели в сеточном формате STL
, стандартном для 3D-печати.
OpenSCAD
– самый известный, но далеко не единственный проект «языкового» CAD. Автор OpenSCAD
Мариус Кинтель намерено сохраняет язык простым. Это по-своему здорово, но возможностей языка хватает далеко не всегда. В частности, огорчает отсутствие многих средств, к которым мы привыкли в языках программирования общего пользования. Имеется несколько альтернативных проектов. Основные из них представляют похожие средства описания геометрии вместе с продвинутыми возможностями различных базовых языков программирования.
№ | Альтернативный проект (ссылка) | Базовый язык | Особенности |
---|---|---|---|
1 | OpenJSCAD | JavaScript | Веб-интерфейс |
2 | CoffeeCAD | CoffeeScript | Веб-интерфейс |
3 | RapCAD | OpenSCAD с дополнениями | Заточен для RepRap-принтеров. GUI, похожий на OpenSCAD . |
4 | ImplicitCAD | OpenSCAD / Haskell | Написан целиком на Haskell . Добавляет к языку OpenSCAD много интересных возможностей. В частности, можно легко выполнить сглаживание граней и плавные переходы между частями моделей. Веб-интерфейс + работа из командной строки. |
5 | OpenSCAD.net | OpenSCAD / OpenJSCAD | Веб-интерфейс для OpenSCAD / OpenJSCAD |
6 | CadQuery | Python | Надстройка к FreeCAD либо веб-интерфейс. Позволяет работать с BREP-геометрией. Предоставляет высокоуровневые абстракции, позволяющие определять модель подобно тому, как описал бы ее человек на родном языке |
Я с особым интересом слежу на проектом ImplicitCad
(пункт 4), т.к. Haskell
– это безумно круто. :) И вообще: проект создает интересный канадский чувак Кристофер Олах, мыслящий очень продвинуто. Но особый интерес для нас представляет пункт 6 – CadCuery
(я планирую рассказать о нем немного подробней). Помимо того, что он открывает нам мощь Python
, он интересен вот почему.
Огромный недостаток OpenSCAD
(а также альтернатив пп. 1-5) для нас заключается в том, что он «мыслит» полигональными сетками, описывающими кривые поверхности приближенно. OpenSCAD
базируется на геометрическом ядре CGAL
и реализует технологию конструкционной блочной геометрии (CSG) с помощью сеток. По этой причине у него нет возможности сохранять модель в «точном» формате, описывающем геометрию на основе граничных поверхностей (BREP) в форматах .STEP
или .BREP
. А для последующих расчетов нам крайне желательно иметь геометрию в «точном» формате. Точно также OpenSCAD
не может и импортировать геометрию, скажем, из .STEP
. Очень жаль: иначе можно было бы использовать части модели, сделанные где-то еще, видоизменяя их на языковом CAD. Всех этих недостатков лишен CadQuery
, и о нем я еще напишу.
К счастью, геометрию, описанную в OpenSCAD
, «понимает» FreeCAD
, в который OpenSCAD
входит как один из модулей. Таким образом, можно писать модель в OpenSCAD
, а сохранять ее потом в «точном» формате через FreeCAD
. На практике, в принципе, это добавляет лишь три клика мышкой.
Для того, чтобы почувствовать разницу в представлениях BREP и с полигональными сетками, а также, чтобы предпроцессору не казалось все слишком элементарным, :) давайте чуть-чуть усложним нашу модель: сделаем объединение пяти тетраэдров с шаром. Для этого изменим концовку программы:
// ---------------- Модель -------------------
rotate($t*360/5)
union() {
fiveTetrahedra(100);
sphere(64*sqrt(6)/4, $fn=100);
}
Здесь радиус шара задан как \( 64\sqrt{6}/{4} \) т.к. для правильного тетраэдра радиус описанной сферы равен \( a \sqrt{6}/{4}\), где \(a\) – длина ребра. Можно проверить, что при \( 100\sqrt{6}/{4} \) сфера опишет наши тетраэдры.
Получаем:
Обратите внимание, что сферическая поверхность отрисована сеткой. $fn=100
– это ее «густота».
(Продолжение следует).
Лазерная резка — разработка резки и раскроя материалов, использующая лазер высочайшей мощности и обыкновенно используемая на промышленных производственных линиях. Сфокусированный лазерный луч, обыкновенно управляемый компом, обеспечивает высшую концентрацию энергии и дозволяет разрезать фактически всевозможные материалы независимо от их теплофизических качеств как рассчитать стоимость лазерной резки. В процессе резки, под воздействием лазерного луча материал разрезаемого участка плавится, возгорается, испаряется или выдувается струей газа. При данном можно получить узкие резы с минимальной зоной термического воздействия. Лазерная резка отличается отсутствием механического действия на обрабатываемый ткань, возникают наименьшие деформации, как кратковременные в резки, так и остаточные в полного остывания. Вследствие этого лазерную резку, числе легкодеформируемых и нежестких заготовок и составных, можно исполнять с высочайшей ступенью точности. Благодаря великой мощности лазерного излучения поддерживается высочайшая производительность процесса в сочетании с высочайшим качеством поверхностей реза. Легкое и сравнимо несложное управление лазерным излучением дозволяет осуществлять лазерную резку по трудному контуру плоских и больших частей и заготовок с высочайшей степенью автоматизации процесса.
ОтветитьУдалить