Данный пример демонстрирует возможность вычисления спектра ответа и дальнейшее его применение в расчетах, зная при этом только временную нагрузку. Задача прогоняется в цикле питона, где для каждой итерации учитываются характеристики пружины и ее граничные условия. На каждой итерации получается отклик пружины на периодическую нагрузку, откуда вытаскиваются максимальные значения.
Итоговые значения записываются в виде "частот - максимальное пермещение" в формате csv. Полученный csv-файл учитывается в спектральном анализе как нагрузка.
Получение csv-файла
Для корректной работы python-файла, сначало нужно установить библиотеку meshio: pip install meshio.
Создать новый файл python. Для этого запустите среду разработки IDLE из меню «Пуск» или папки, где установлен Python. Выберите File - New File.
Cкопируйте в открывшееся пустое окно следующий скрипт:
import sys # системная библиотека
import os # системная библиотека
import math # библиотека для работы с числами
import meshio # библиотека работы с выходными данными расчетов
import csv # библиотека для работы с csv файлами
fidesys_path = r'C:\Program Files\Fidesys\CAE-Fidesys-6.0' # директория, где установлен фидесис
base_dir = os.path.dirname(os.path.abspath(__file__)) # директория скрипта питона
prep_paths = [os.path.join(fidesys_path, 'preprocessor', 'bin'),
os.path.join(fidesys_path, 'preprocessor', 'bin', 'plugins'),
os.path.join(fidesys_path, 'preprocessor', 'bin', 'acis', 'code', 'bin'),
os.path.join(fidesys_path, 'preprocessor', 'structure')] # Директории, где препроцессор
calc_path = os.path.join(fidesys_path,'bin', 'FidesysCalc.exe') # Директория, где решатель
for path in prep_paths:
os.environ['PATH'] += os.pathsep + path # Добавление пути к препроцессору в PATH
os.add_dll_directory(path)
sys.path.append(path) # Добавление пути к препроцессору в PATH
# Импорт библиотеки Фидесис.
try:
import cubit
import fidesys
except ModuleNotFoundError:
print("В скрипте указан следующий путь к Фидесис: ", fidesys_path)
print("Укажите в скрипте путь к вашей версии Фидесис. Вероятно ваша версия отличается от указанной или установлена в другую директорию.")
sys.exit(1)
m = 1 # масса
omegaArray = [i for i in range(1,31)] # массив собственных частот
dampingRatio = 0.02 # модальный коэффициент демфирования
data = [['f','dx']] # массив для записи данных в csv
cubit.init([""]) # инициализация функций препроцессора
fc = fidesys.FidesysComponent() # cоздание обязательного компонента Фидесис fc
fc.init_application(prep_paths[0]) # инициализация
fc.start_up_no_args() # запуск обязательного компонента Фидесис fc
# Запуск цикла по массиву частот.
for element in omegaArray:
dispArray = [] # массив перемещений
stiffness = round(m*((2*math.pi*element)**2),3) # коэффициент жесткости на каждой итерации
dampingCoeff = 2*dampingRatio*m*math.sqrt(element/m) # коэффициент вязкости на каждой итерации
fidesys.cmd('reset')
fidesys.cmd('create curve location 0 0 0 location 0 1e-03 0')
fidesys.cmd('curve all interval 1')
fidesys.cmd('curve all scheme equal')
fidesys.cmd('curve all interval 1')
fidesys.cmd('curve all scheme equal')
fidesys.cmd('mesh curve all')
fidesys.cmd('create material 1 from \'Углеродистая сталь\'')
fidesys.cmd('set duplicate block elements off')
fidesys.cmd('block 1 add curve 1 ')
fidesys.cmd('set duplicate block elements off')
fidesys.cmd('create spring properties 1')
fidesys.cmd('modify spring properties 1 type \'linear_spring\'')
fidesys.cmd(f'modify spring properties 1 stiffness {stiffness}')
fidesys.cmd(f'modify spring properties 1 spring_constant_damping {dampingCoeff}')
fidesys.cmd('modify spring properties 1 spring_linear_damping 0')
fidesys.cmd('modify spring properties 1 spring_mass 0')
fidesys.cmd('block 1 element spring')
fidesys.cmd('block 1 spring properties 1')
fidesys.cmd('set duplicate block elements off')
fidesys.cmd('block 2 add vertex 2 ')
fidesys.cmd('create lumpmass properties 1')
fidesys.cmd('modify lumpmass properties 1 mass 1')
fidesys.cmd('block 2 cs 1 element lumpmass')
fidesys.cmd('block 2 lumpmass properties 1')
fidesys.cmd('create displacement on vertex 1 dof all fix 0 ')
fidesys.cmd('create displacement on vertex 2 dof 1 dof 3 dof 4 dof 5 dof 6 fix 0 ')
fidesys.cmd("create formula 1 '40 * cos(t) * cos(112.406 * t)'")
fidesys.cmd('create gravity global')
fidesys.cmd('modify gravity 1 dof 2 formula 1')
fidesys.cmd('analysis type dynamic dim3 preload off')
fidesys.cmd('dynamic method mode_superposition scheme implicit steps 25 newmark_gamma 0.005 maxtime 0.224 mod_count 1')
fidesys.cmd(f"calculation start path '{base_dir}/{element}_freq.pvd'")
# Расчет закончен в пределах итерации. Переходим к формированию данных для записи.
solutionPath = f'{base_dir}/{element}_freq' # директория, где находятся результаты
solutionFiles = os.listdir(path = solutionPath) # массив файлов результатов
vtuFiles = list(filter(lambda el:el.split('.')[1] == 'vtu', solutionFiles)) # массив с vtu файлами
# Цикл по vtu файлам. Из первого файла массива вытаскиваем собственную частоту, из остальных - результаты пермещений для каждого временного шага.
for vtuFile in vtuFiles:
mesh = meshio.read(f'{solutionPath}/{vtuFile}') # чтение vtu файла
if vtuFiles.index(vtuFile) == 0:
freq = mesh.field_data['Eigen Values'][0] # получение собственной частоты
else:
disp = abs(mesh.point_data['Displacement'][2][1]) # получения модуля перемещения
dispArray.append(disp) # добавление в массив dispArray disp на каждой итерации по vtu файлам
# Цикл по vtu файлам закончен.
recordValues = [freq,max(dispArray)] # формирование массива частота - максимальное значение перемещения
data.append(recordValues) # добавление в data полученные значения recordValues
# Цикл по элементам массива частот закончен.
fc.delete_application() # очистка памяти фидесиса
# Запись csv файла.
os.chdir(base_dir) # замена текущего каталога на base_dir (фидесис в процессе работы мог поменять рабочий каталог)
file = open('dispSpectr.csv','w+',newline = '') # открытие файла csv для записи
writer = csv.writer(file) # создание объекта писателя
writer.writerows(data) # запись массива data
file.close() # закрытие файла csv
print("Запись файла csv прошла успешно!")
Запустите на расчет. Выберите Run - Run Module.
После того как расчет прошел вы увидите:
В папке с файлом скрипта будут лежать файлы с результатами. Нужно открыть и проверить значения в файле с названием dispSpectr:
Далее необходимо подготовить модель для расчета. Откройте Fidesys и импортируйте модель скачать файл. Для этого на панели инструментов нажмите на значок Импорт, выберете нужную модель. Нажмите Готово.
Построение сетки
Для построения тетраэдральной сетки задайте в настройках сетки тип элемента по умолчанию, для этого на верхней панели выберите Инструменты - Настройки. Далее в настройках найти раздел "Настройки сетки" и выбрать тип элемента - тетраэдр, после чего нажать "Сохранить".
Постройте тетраэдральную сетку. На панели команд выберите Режим - Сетка, Объект - Объемная, Действие - Интервалы. Из выплывающего списка выберите Автоматический размер. Задайте необходимые параметры. Нажмите Задать размер, Построить сетку.
Задание материала и свойств блока
Создайте материал. На панели команд выберите Режим - Материал, Объект - Управление материалами. В открывшемся виджете Управление материалами в средней колонке укажите имя материала. В колонке свойств откройте список Упругость и перетащите Материал Гука в колонку Свойства материала, затем в левой колонке перейдите в раздел и перетащите Общие → Плотность. Задайте необходимые значения. Нажмите Применить
Создайте блок. На панели команд выберите Режим - Блоки, Объект - Блок, Действие - Добавить сущность в блок. Задайте необходимые параметры. Нажмите Применить.
Задайте свойства блоку. На панели команд выберите Режим - Блоки, Объект - Блок, Действие - Свойства/параметры блока. Задайте необходимые параметры. Нажмите Применить.
Задание граничных условий
Закрепите модель в перемещениях. На панели команд выберите Режим - Граничные условия, Объект - Перемещения, Действие - Создать. Задайте необходимые параметры. Нажмите Применить.
Запуск расчета
Для запуска на расчет в CAE Fidesys выберите на панели команд Режим - Настройки расчета, Объект - Спектральный, Спектральный - Общие. Задайте требуемые параметры и нажмите Применить, Начать расчет.
Анализ результатов
Откройте файл с результатами. Это можно сделать тремя способами:
Нажмите Ctrl+E;
В главном меню выберите Расчёт - Результаты. Нажмите Открыть последний результат;
На панели команд выберите Результаты (Режим - Результаты, Результаты - Открыть Результаты).
Появится окно Fidesys Viewer, в котором вы сможете ознакомиться с результатами расчёта.
Выберите фильтр Фильтр - Алфавитный указатель - Линейно-Спектральный анализ. На странице свойств укажите необходимые параметры, далее укажите путь до файла с данными спектра отклика, которые был посчитан выше с помощью python-файла. Нажмите Применить.
Выведите результаты перемещения и напряжения, полученные методом "Корень квадратный из суммы квадратов". Из первого выпадающего списка выберите Перемещения_ККСК, из второго – Сумма.
Затем выберите Перемещения_ККСК, из второго – Сумма.
Использование консольного интерфейса
Построение геометрии, генерацию сетки, задание граничных условий и материалов можно выполнить с использованием консольного интерфейса. Ниже приведён код программы, позволяющий выполнить шаги описанного выше руководства, необходимо только самостоятельно указать полный путь и название сохраняемого файла.
reset import step "C:/models/tank_step.stp" heal set default element tri volume all size auto factor 4 mesh volume all create material 1 modify material 1 name 'stal' modify material 1 set property 'MODULUS' value 2e+11 modify material 1 set property 'POISSON' value 0.3 modify material 1 set property 'DENSITY' value 7800 set duplicate block elements off block 1 add volume 1 block 1 material 1 cs 1 element solid order 1 create displacement on surface 10 16 18 20 12 14 dof all fix 0 analysis type spectrum dim3 preload off spectrum type linear eigenvalue find 6 smallest
fidesys