четверг, 26 января 2017 г.

Механические расчеты конструкций в свободном ПО. Часть 1

Введение

Классическая «технология» расчета конструкций МКЭ включает 4 этапа:

  1. Твердотельное моделирование с применением 3D-CAD’ов.

  2. Предпроцессинг: разбиение на конечные элементы.

  3. Расчет.

  4. Постпроцессинг: визуализация и анализ результатов.

В мире существует огромная «армия» коммерческого ПО класса 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’ах скорее в силу традиций (не приучены конструкторы к текстам). А ведь достоинств у такого подхода немало:

  1. Текст – прозрачен и гибок. Модель параметризуется и «работает» в точности так, как вы задумали.

  2. Универсальность и выразительность языка – всегда выше GUI.

  3. Текст хорошо «накапливается» и обобщается в библиотеки, которые дальше повторно используются. Уровни абстракций – наращиваются.

  4. Текст не может «испортиться», как непонятный бинарный файл, в котором хранят модели обычные CAD’ы.

  5. С текстом можно использовать системы контроля версий, такие как Git. Одно это очень многого стоит.

  6. Языковая модель CAD наиболее легко интегрируется с узкоспециальными САПР вашей предметной области. Это особенно актуально, если части такой САПР приходится разрабатывать самостоятельно.

  7. С учетом впечатляющего прогресса в развитии языков программирования можно было бы сделать очень продвинутый и лаконичный язык описания конструкций. Можно было бы совместить описание на языке и визуальное проектирование элементов, которые в тексте задавать неудобно (например, как в конструкторах форм 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 – это ее «густота».


(Продолжение следует).

1 комментарий:

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

    ОтветитьУдалить