Создайте модель крышки с множеством болтов, моделируемых балочными элементами по скрипту, приведенному ниже.
В модели также создаются наборы узлов, путем выбирания сущностей, которые являются для них исходными - "вершин" на краях линий (для болтов) и "кривых" сверху и снизу вокруг краев линий. Наборы узлов можно создать, используя "Режим"->"Множества", "Объект"->"Набор узлов", "Действие"->"Управление". Данные действия уже присутствуют в скрипте.
reset create Cylinder height 0.05 radius 0.4 webcut volume all with plane zplane offset 0.005 webcut volume all with plane zplane offset -0.005 webcut volume 2 with cylinder radius 0.39 axis z webcut volume 4 3 2 with cylinder radius 0.35 axis z delete volume 5 6 2 create Cylinder height 0.05 radius 0.01 move Volume 7 x 0.37 include_merged Volume 7 copy rotate 10 about z repeat 36 subtract volume 8 to 43 from volume 1 3 4 create curve location on surface 32 center location on surface 31 center delete volume 7 4 Curve 309 copy rotate 10 about z repeat 35 volume all size auto factor 1 mesh volume all curve 309 to 344 interval 1 curve 309 to 344 scheme equal mesh curve 309 to 344 create material 1 from 'Углеродистая сталь' create material 2 from 'Резина' block 1 add volume 1 3 block 1 name 'Фланцевое соединение' block 3 add curve 309 to 344 block 3 name 'Болты' block 'Фланцевое соединение' material 1 cs 1 element solid order 1 create beam properties 1 modify beam properties 1 type 'Ellipse' modify beam properties 1 angle 0.0 modify beam properties 1 ey 0.0 modify beam properties 1 ez 0.0 modify beam properties 1 geom_a 0.02 modify beam properties 1 geom_b 0.02 modify beam properties 1 mesh_quality 6 modify beam properties 1 warping_dof off block 'Болты' material 1 cs 1 element beam order 1 block 'Болты' beam properties 1 nodeset 1 add vertex 333 331 327 335 337 341 323 329 339 343 317 321 325 319 313 311 309 371 367 347 365 361 357 345 377 379 351 355 363 353 375 349 373 369 359 315 nodeset 1 name 'Гайки' nodeset 2 add vertex 328 334 340 326 332 320 336 338 330 342 344 322 318 324 316 312 314 310 360 362 356 350 370 372 346 368 378 380 352 376 374 366 354 348 364 358 nodeset 2 name 'Шляпки' nodeset 3 add curve 136 162 156 140 132 148 158 152 154 134 146 160 150 138 144 142 130 164 94 100 102 108 112 120 114 96 106 98 110 124 126 118 128 122 116 104 nodeset 3 name 'Отв. верхней крышки' nodeset 4 add curve 166 170 168 180 184 178 186 190 172 174 176 182 188 204 208 198 206 192 222 230 210 212 234 224 226 232 202 214 196 218 236 194 200 220 216 228 nodeset 4 name 'Отв. нижней части' create displacement on surface 24 dof all fix create pressure on surface 177 magnitude 101000 analysis type static elasticity dim3 output nodalforce off energy off midresults on record3d on material off without_smoothing off fullperiodic off
Затем создайте текстовый файл с расширением .py со следующим содержанием:
import math # Импорт математической библиотеки bolt_up_nodeset=cubit.get_nodeset_nodes_inclusive(1) # Получение номеров узлов в первом наборе - гайки bolt_down_nodeset=cubit.get_nodeset_nodes_inclusive(2) # Получение номеров узлов во втором наборе - шляпки болтов holes_up_nodeset=cubit.get_nodeset_nodes_inclusive(3) # Получение номеров узлов в третьем наборе - отверстия возле гаек holes_down_nodeset=cubit.get_nodeset_nodes_inclusive(4) # Получение номеров узлов в четвертом наборе - отверстия возле шляпок # Радиус сферы поиска r = 0.011 coupling_count=0 # Счетчик для связей, чтобы можно было правильно добавлять степени свободы к связям по степеням свободы # Цикл, который проводит действия с узлами, номера которых получены из первого набора - гаек for master_node in bolt_up_nodeset: (x_m,y_m,z_m)=cubit.get_nodal_coordinates(master_node) # Получение координат для узлов print("Ищем вокруг узла", master_node, "с координатами", x_m,y_m,z_m) slave_nodes_array=[] # Цикл, который проводит действия с узлами, номера которых получены их третьего набора - отверстий возле гаек for slave_node in holes_up_nodeset: (x,y,z)=cubit.get_nodal_coordinates(slave_node) dist = math.pow((float(x)-float(x_m)), 2)+math.pow((float(y)-float(y_m)), 2)+math.pow((float(z)-float(z_m)), 2) # Проверка нахождения в сфере поиска радиусом "r" от точек с координатами из файла соседних узлов if dist<=(r**2): # Если узлы лежат внутри сферы print("Узел",slave_node,"с координатами",x,y,z, "находится внутри сферы поиска") # Пишем в консоль что лежат slave_nodes_array.append(slave_node) # Если в окрестности узла болта в нужном диапазоне есть один и более узлов (что мы проверяли выше), то создать связь с этими узлами if len(slave_nodes_array)>0: fidesys.cmd('create coupling master node '+str(master_node)+' slave node' +str(slave_nodes_array)+' dofs') coupling_count=coupling_count+1 fidesys.cmd('modify coupling '+str(coupling_count)+' dof 1') fidesys.cmd('modify coupling '+str(coupling_count)+' dof 2') fidesys.cmd('modify coupling '+str(coupling_count)+' dof 3') for master_node in bolt_down_nodeset: (x_m,y_m,z_m)=cubit.get_nodal_coordinates(master_node) # Получение координат для узлов print("Ищем вокруг узла", master_node, "с координатами", x_m,y_m,z_m) slave_nodes_array=[] for slave_node in holes_down_nodeset: (x,y,z)=cubit.get_nodal_coordinates(slave_node) dist = math.pow((float(x)-float(x_m)), 2)+math.pow((float(y)-float(y_m)), 2)+math.pow((float(z)-float(z_m)), 2) # Проверка нахождения в сфере поиска радиусом "r" от точек с координатами из файла соседних узлов if dist<=(r**2): # Если узлы лежат внутри сферы print("Узел",slave_node,"с координатами",x,y,z, "находится внутри сферы поиска") # Пишем в консоль что лежат slave_nodes_array.append(slave_node) if len(slave_nodes_array)>0: fidesys.cmd('create coupling master node '+str(master_node)+' slave node' +str(slave_nodes_array)+' distance') coupling_count=coupling_count+1
Затем откройте редактор журнала, в нем измените интерпретатор на Python ("Инструменты"-"Интерпретатор"-"Python") и откройте файл с ранее сохраненным скриптом и запустите нажатием зеленой кнопки "Плэй" ("Выполнить текущий файл").
После проделанных манипуляций в дереве в соединениях вы увидите 72 созданные связи, часть из которых по степеням свободы, а часть по расстоянию. Связи создавались, опираясь на узлы, расположенные внутри заранее созданных наборов узлов.
