Топологическая оптимизация формы плоского трехточечного кронштейна в 2D-постановке с выводом stl модели для 3D-печати в Fidesys 4.0

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

На основе результата (оптимизированной топологии) необходимо построить 3D модель, пригодную для последующего аддитивного производства.

Построение модели

1. Создайте параллелепипед.

На панели команд выберите модуль построения объёмной геометрии (Режим — Геометрия, Объект — Поверхность, Действие — Создать).

Из списка геометрических примитивов выберите Прямоугольник.

Задайте следующие параметры :

  • Ширина: 0.5;

  • Высота: 0.3;

  • Z-плоскость.

Нажмите Применить.

Будет создан прямоугольник как показано на рисунке ниже.

Далее необходимо создать 3 одинаковых круга, которые в свою очередь позволят задать границы неизменяемых областей будущих мест креплений.

Перейдите в Режим — Геометрия, Объект — Поверхность, Действие — Создать

Из списка геометрических примитивов выберите Круг.

Задайте следующие параметры :

  • Радиус;

  • Радиус: 0.03;

  • Z-плоскость.

Нажмите Применить.

Повторите эту процедуру еще 2 раза. 

Получится следующий результат.

На следующем шаге переместите круги в места будущих областей закрпеления и нагружения.

Перейдите в Режим — Геометрия, Объект — Поверхность, Действие — Преобразовать

Из списка действий выберите Переместить.

Задайте следующие параметры :

  • Поверхность ID(s): 2;

  • Расстояние;

  • Расстояние по Х: 0.2;

  • Расстояние по Y: -0.1;

  • Расстояние по Y: 0.

Нажмите Применить.

Выбранный круг переместится с указанным сдвигом.

Затем проделайте эту процедуру еще 2 раза, но с другими значениями в полях.

Для поверхности 3 задайте следующие параметры:

  • Поверхность ID(s): 3;

  • Расстояние;

  • Расстояние по Х: -0.2;

  • Расстояние по Y: -0.1;

  • Расстояние по Y: 0.

Нажмите Применить.

Для поверхности 4 задайте параметры:

  • Поверхность ID(s): 4;

  • Расстояние;

  • Расстояние по Х: -0.2;

  • Расстояние по Y: 0.1;

  • Расстояние по Y: 0.

Нажмите Применить.

В результате выполненных действий на экране будет наблюдаться следующее.

На следующем этапе "вычтите" из прямоугольника (поверхность 1) круги (поверхности 2, 3 и 4).

Перейдите в Режим — Геометрия, Объект — Поверхность, Действие — Логические операции

Из списка действий выберите Вычесть.

Задайте следующие параметры :

  • А ID поверхносте(ей): 1;

  • B ID поверхносте(ей): 2 3 4.

Нажмите Применить.

Результатом выполненных действий станет поверхность с тремя вырезами, как показано на рисунке ниже.

Затем снова создайте 3 круга, как это делалось выше.

Перейдите в Режим — Геометрия, Объект — Поверхность, Действие — Создать

Из списка геометрических примитивов выберите Круг.

Задайте следующие параметры :

  • Радиус;

  • Радиус: 0.03;

  • Z-плоскость.

Нажмите Применить.

И снова повторите эту процедуру еще 2 раза. 

Далее также как ранее передвиньте созданные круги. Однако новые круги будут иметь другие номера поверхностей - 6, 7 и 8.

Перейдите в Режим — Геометрия, Объект — Поверхность, Действие — Преобразовать

Из списка действий выберите Переместить.

Задайте следующие параметры :

  • Поверхность ID(s): 6;

  • Расстояние;

  • Расстояние по Х: 0.2;

  • Расстояние по Y: -0.1;

  • Расстояние по Y: 0.

Нажмите Применить.

Выбранный круг переместится на указанную координату.

Затем проделайте эту процедуру еще 2 раза, но с другими значениями в полях.

Для поверхности 7 задайте следующие параметры:

  • Поверхность ID(s): 7;

  • Расстояние;

  • Расстояние по Х: -0.2;

  • Расстояние по Y: -0.1;

  • Расстояние по Y: 0.

Нажмите Применить.

Для поверхности 8 задайте параметры:

  • Поверхность ID(s): 8;

  • Расстояние;

  • Расстояние по Х: -0.2;

  • Расстояние по Y: 0.1;

  • Расстояние по Y: 0.

Нажмите Применить.

В результате выполненных действий на экране будет наблюдаться следующее.

Теперь необходимо по той же схеме создать и переместить еще 3 круга с меньшими радиусами.

Перейдите в Режим — Геометрия, Объект — Поверхность, Действие — Создать

Из списка геометрических примитивов выберите Круг.

Задайте следующие параметры :

  • Радиус;

  • Радиус: 0.02;

  • Z-плоскость.

Нажмите Применить.

Повторите эту процедуру еще 2 раза. 

Затем переместите новые круги (поверхности 9, 10 и 11) по аналогии с созданными ранее.

Перейдите в Режим — Геометрия, Объект — Поверхность, Действие — Преобразовать

Из списка действий выберите Переместить.

Задайте следующие параметры :

  • Поверхность ID(s): 9;

  • Расстояние;

  • Расстояние по Х: 0.2;

  • Расстояние по Y: -0.1;

  • Расстояние по Y: 0.

Нажмите Применить. Выбранный круг переместится на указанную координату.

Затем проделайте эту процедуру еще 2 раза, но с другими значениями в полях.

Для поверхности 10 задайте следующие параметры:

  • Поверхность ID(s): 10;

  • Расстояние;

  • Расстояние по Х: -0.2;

  • Расстояние по Y: -0.1;

  • Расстояние по Y: 0.

Нажмите Применить.

Для поверхности 11 задайте параметры:

  • Поверхность ID(s): 11;

  • Расстояние;

  • Расстояние по Х: -0.2;

  • Расстояние по Y: 0.1;

  • Расстояние по Y: 0.

Нажмите Применить.

В результате вы увидите на экране изображение как на рисунке ниже.

На следующем шаге необходимо "вычесть" из поверхностей больших кругов поверхности малых.

Перейдите в Режим — Геометрия, Объект — Поверхность, Действие — Логические операции

Из списка действий выберите Вычесть.

Задайте следующие параметры :

  • А ID поверхности(ей): 7;

  • B ID поверхности(ей): 10.

Нажмите Применить.

Затем следующие параметры :

  • А ID поверхности(ей): 8;

  • B ID поверхности(ей): 11.

Нажмите Применить.

И наконец параметры:

  • А ID поверхности(ей): 6;

  • B ID поверхности(ей): 9.

Нажмите Применить.

Результатом проделанных действий будет следующее.

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

Перейдите в Режим — Геометрия, Объект — Кривая, Действие — Срастить

Из списка действий выберите Срастить.

Впишите в поле ID кривой(ых): all

Нажмите Применить.

Построение сетки

1. Постройте сетку.

Перейдите в Режим — Сетка, Объект — Поверхностная, Действие — Интервалы.

Выберите Задать размер и в поле Выбор объемов впишите all.

В поле Примерный размер впишите 0.005.

Нажмите Построить сетку.

В итоге получится следующий результат построения сетки.

Задание материала и свойств блока

1. Создайте материал.

Перейдите в Режим — Материал, Объект — Управление материалами. После чего откроется окно материалов, где необходимо будет ввести название для материала, который будет использоваться.

После того как вы задали имя (в рассматриваемом случае Topological Mat), необходимо развернуть дерево свойств в ветке Упругость-Материал Гука и перетянув, зажав левой кнопкой мыши, свойства Модуль Юнга и Коэффициент Пуассона из дерева свойств в правую нижнюю область. Также необходимо поступить со свойством Предел прочности из ветки Прочность-Изотропная прочность.

Затем задайте значения аналогично примеру ниже.

Далее нажмите Применить и затем Х в правом верхнем углу панели Управление материалами.

Следующим шагом необходимо создать блок для передачи свойств поверхностям.

2. Создайте блок.

Перейдите в Режим — Блоки, Объект — Блок, Действие — Добавить сущность в блок.

Выберите в списке сущностей Поверхность, а в строке ID объекта(ов) впишите all, чтобы добавить в блок все поверхности сразу.

Нажмите Применить.

Перейдите в Режим — Блоки, Объект — Блок, Действие — Свойства/параметры блока.

Выберите из выпадающего списка Имя блока созданный блок (в рассматриваемом примере он будет единственный).

Далее из выпадающего списка Материал выберите созданный материал.

Затем из выпадающего списка  Категория выберите Плоскость.

Нажмите Применить.

Задание граничных условий

1. Создайте граничные условия.

Для этого перейдите в Режим — Граничные условия, Объект — Перемещение, Действие — Создать.

Выберите Поверхность, кликните в строку ID объекта(ов), а после этого с зажатым Ctrl кликайте на интересующие поверхности.

После чего в строке ID объекта(ов) появятся номера выбранных поверхностей 12 и 14.

Поставьте галочку в поле Все в меню Степени свободы.

Нажмите Применить.

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

2. Приложите нагрузку.

Для приложения нагрузки перейдите в Режим — Граничные условия, Объект — Точечная сила, Действие — Создать.

В списке объектов выберите Кривая, кликните в поле ID объекта(ов), а затем на внутреннюю кривую правого верхнего отверстия.

После чего в поле ID объекта(ов) появится ее номер 18.

В поле Сила впишите значение 100.

В поле Направление задайте 1 0 0, тем самым указывая направление вдоль оси Х.

Нажмите Применить.

Теперь необходимо "защитить" от алгоритма круговую поверхность вокруг зоны приложения нагрузки. Для этого на поверхность необходимо задать малую нагрузку, которая "защитит" поверхность, но при этом не окажет влияния на результаты. Это второй способ "защиты" неизменяемых областей.

Для приложения нагрузки перейдите в Режим — Граничные условия, Объект — Точечная сила, Действие — Создать.

В списке объектов выберите Поверхность, кликните в поле ID объекта(ов), а затем на поверхность вокруг отверстия.

После чего в поле ID объекта(ов) появится ее номер 13.

В поле Сила впишите значение 1e-6.

В поле Направление задайте 1 0 0, тем самым указывая направление вдоль оси Х.

Нажмите Применить.

Запуск на предварительный статический расчет

1. Задайте настройки расчета.

Перейдите в Режим — Настройки расчета, Настройки расчета — Статический, Статический — Общие

Выберите размерность 2D.

Нажмите Применить, а затем Начать расчет.

В открывшемся окне выберите место сохранения результатов и имя файла. Затем нажмите Сохранить.

После этого начнется расчет.

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

Анализ результатов

Для просмотра результатов необходимо перейти в постпроцессор Fidesys Viewer . Чтобы это сделать нужно перейти в Режим - Результаты и нажать Открыть результаты.

Результаты статического расчета. Напряжения по мизесу.

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

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

Алгоритм пытается сохранить все зоны, где напряжения равны или превышают значение, заданное в качестве "предела прочности".

Примеры результатов расчета топологической оптимизации в зависимости от значений "предела прочности" на 20 шаге (до наступления второго этапа - последние 5 шагов - утолщение возле зон граничных условий и нагрузок) расчета приведены на рисунке ниже.

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

Задание предела прочности и запуск на расчет

1. Задайте новое значение предела прочности.

В рассматриваемом примере значение "предела прочности" будет задано 20000 Па.

Перейдите в Режим — Материал, Объект — Управление материалами. После чего откроется окно материалов, где необходимо будет ввести новое значение предела прочности.

Задайте значение предела прочности 20000

Далее нажмите Применить и затем Х в правом верхнем углу панели Управление материалами.

2. Запустите расчет топологической оптимизации

Перейдите в Режим — Настройки расчета, Настройки расчета — Топологическая оптимизация

Выберите размерность 2D.

Нажмите Применить, а затем Начать расчет.

В открывшемся окне выберите место сохранения результатов и имя файла. Затем нажмите Сохранить.

После этого начнется расчет.

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

Анализ результатов топологической оптимизации

Для просмотра результатов необходимо перейти в постпроцессор Fidesys Viewer. Вновь перейдите Режим - Результаты и нажать Открыть результаты.

В открывшемся окне Fidesys Viewer примените фильтр "Порог" (Фильтры - Алфавитный указатель - Порог).

Далее выберите 20 шаг, входной массив "Модуль упругости" , поставьте галочку в поле "Только элементы, значения в узлах которых лежат в границах диапазона" (во всех узлах) и нажмите Применить .

Затем необходимо подвинуть верхний ползунок минимального значения модуля упругости до значения порядка 2е9, а нижним ползунком выставить максимум в 2е11 и нажать Применить.

Если все было сделано правильно, то в окне модели вы увидите результат - топологически оптимизированную конструкцию. Далее ее можно экспортировать в формате пригодном для обратного импорта в препроцессор.

Перейдите в меню Файл->Сохранить данные модели.

Выберите место сохранения и формат .e и нажмите ОК.

В открывшемся окне также нажмите ОК.

Импорт и удаление оптимизированной топологии

1. Вновь откройте в препроцессор.

Если вы еще не закрыли препроцессор с созданной моделью, то сначала удалите с нее сетку для удобства работы.

Перейдите в Режим — Сетка, Объект — Поверхностная, Действие — Удалить.

В поле ID поверхности(ей) впишите all.

Нажмите Применить.

Если препроцессор был закрыл или модель была удалена, то возможно будет сначала импортировать топологию, а потом повторить создание модели поверх топологии.

2. Импортируйте модель.

Перейдите в меню Файл->Импорт.

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

В следующем открывшемся окне выберите "Свободная сетка" и нажмите Готово.

Если все было сделано правильно, то вы увидите оптимизированную топологию внутри геометрической модели.

Можно приступать к процедурам редактирования геометрии с учетом вида оптимизированной топологии.

3. Удалите ненужную топологию

После того как вы модифицируете вашу модель и образ топологии более не будет нужен, его необходимо удалить.

Перейдите в Режим — Сетка, Объект — Четырехугольная, Действие — Удалить.

В поле ID четырехугольников впишите all.

Нажмите Применить.

Затем нажмите кнопку Обновить экран.

Экспорт готовой модели для 3D-печати

Перейдите в меню Файл->Экспорт.

В открывшемся окне выберите формат .stl и введите имя модели.

Нажмите Сохранить.

В открывшемся окне нажмите Готово.

Использование консольного интерфейсa

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

reset
create surface rectangle width 0.5 height 0.3 zplane 
create surface circle radius 0.03 zplane 
create surface circle radius 0.03 zplane 
create surface circle radius 0.03 zplane 
move Surface 2 x 0.2 y -0.1 include_merged 
move Surface 3 x -0.2 y -0.1 include_merged 
move Surface 4 x -0.2 y 0.1 include_merged 
subtract surface 2 3 4 from surface 1 
create surface circle radius 0.03 zplane 
create surface circle radius 0.03 zplane 
create surface circle radius 0.03 zplane 
move Surface 6 x 0.2 y -0.1 include_merged 
move Surface 7 x -0.2 y -0.1 include_merged 
move Surface 8 x -0.2 y 0.1 include_merged 
create surface circle radius 0.02 zplane 
create surface circle radius 0.02 zplane 
create surface circle radius 0.02 zplane 
move Surface 9 x 0.2 y -0.1 include_merged 
move Surface 10 x -0.2 y -0.1 include_merged 
move Surface 11 x -0.2 y 0.1 include_merged 
subtract surface 10 from surface 7 
subtract surface 11 from surface 8 
subtract surface 9 from surface 6 
merge curve all 
surface all size 0.005
mesh surface all
create material 1
modify material 1 name 'Topological Mat'
modify material 1 set property 'MODULUS' value 2e+11
modify material 1 set property 'POISSON' value 0.3
modify material 1 set property 'ISO_ULTIMATE_STRENGTH' value 20000
set duplicate block elements off
block 1 add surface all
block 'Block 1' material 1 cs 1 element plane order 1
create displacement  on surface 14 12  dof all fix  
create force  on curve 18  force value 100 direction 1 0 0
create force  on surface 13  force value 1e-6 direction 1 0 0

Ниже приведен скрипт, учитывающий импорт оптимизированной топологии Optimized_shape.e, с последующим редактированием модели по ее форме. Не забудьте поправить путь к директории в которой хранится файл с оптимизированной топологией.

reset
create surface rectangle width 0.5 height 0.3 zplane
create surface circle radius 0.03 zplane
create surface circle radius 0.03 zplane
create surface circle radius 0.03 zplane
move Surface 2 x 0.2 y -0.1 include_merged
move Surface 3 x -0.2 y -0.1 include_merged
move Surface 4 x -0.2 y 0.1 include_merged
subtract surface 2 3 4 from surface 1
create surface circle radius 0.03 zplane
create surface circle radius 0.03 zplane
create surface circle radius 0.03 zplane
move Surface 6 x 0.2 y -0.1 include_merged
move Surface 7 x -0.2 y -0.1 include_merged
move Surface 8 x -0.2 y 0.1 include_merged
create surface circle radius 0.02 zplane
create surface circle radius 0.02 zplane
create surface circle radius 0.02 zplane
move Surface 9 x 0.2 y -0.1 include_merged
move Surface 10 x -0.2 y -0.1 include_merged
move Surface 11 x -0.2 y 0.1 include_merged
subtract surface 10 from surface 7
subtract surface 11 from surface 8
subtract surface 9 from surface 6
merge curve all
surface all size 0.005
mesh surface all
create material 1
modify material 1 name 'Topological Mat'
modify material 1 set property 'MODULUS' value 2e+11
modify material 1 set property 'POISSON' value 0.3
modify material 1 set property 'ISO_ULTIMATE_STRENGTH' value 1
set duplicate block elements off
block 1 add surface all
block 'Block 1' material 1 cs 1 element plane order 1
create displacement  on surface 14 12  dof all fix 
create force  on curve 18  force value 100 direction 1 0 0
create force  on surface 13  force value 1e-6 direction 1 0 0
delete mesh surface all propagate
#Здесь вам необходимо указать путь к директории с сохраненной топологией
import mesh 'C:/Users/User/Documents/CAE-Fidesys-4.0/Optimized_shape.e' no_geom
webcut body 1 with plane yplane offset 0.08 rotate -35 about z center 0 0 0
webcut body 1 with plane yplane offset -0.005 rotate -35 about z
webcut body 1 with plane yplane offset 0.12 rotate 45 about z
webcut body 1 with plane xplane offset -0.168
delete Surface 16 21
webcut body 13  with plane xplane offset -0.165 rotate -38 about z center 0 0 0
webcut body 15 with plane xplane offset -0.05 rotate 60 about z center 0 0 0
delete Surface 26
delete Face all
unite surface all
sweep surface all  direction 0 0 1 distance 0.05  merge
modify curve 81 83 85 87 89 69 68 71 73 75 77 79  blend radius 0.02