Создайте файл с набором координат в формате .csv (в примере coords.csv).
0.0,0.0,0.0 0.1,0.1,0.0
Затем создайте простую модель двух будущих оболочек с сеткой.
reset brick x 0.1 y 0.1 z 0.01 delete volume 1 keep_lower_geometry delete Surface 4 5 6 3 surface 1 2 size auto factor 4 mesh surface 1 2 block 1 add surface 2 1 create sphere radius 0.01 #вспомогательная сфера для визуального контроля
Затем создайте текстовый файл с расширением .py или .jou со следующим содержанием:
import csv # Импорт библиотеки для работы с csv-файлами import math # Импорт математической библиотеки для упрощения вычислений # Радиус сферы поиска r = 0.01 # Перенумерация узлов, начиная с 1 для удобства работы с номерами fidesys.cmd('renumber Node all start_id 1 uniqueids ') # Чтение файла с координатами будущих соединений file = open('C:/Users/quazz/Documents/CAE-Fidesys-5.1/coords.csv','r') # Открыть файл из любого каталога data=csv.reader(file, delimiter = ",") # Создаем переменную с данными из файла node_coordinates=[] #Создаем пустой массив для заполнения координатами # Считывание данных из CSV файла в массив координат for row in data: node_coordinates.append(row) print(node_coordinates) file.close() nodes_before_creating = cubit.get_node_count() # Для удобства отсчетов создаем переменную с числом узлов до начала процедур поиска # Создаем цикл для перебора массивов по счетчику с именем "node" for node in range(len(node_coordinates)): for_bond_nodes=[] # Массив для будущих интерфейсных узлов print(node_coordinates[node][0]+' '+node_coordinates[node][1]+' '+node_coordinates[node][2]) (cx,cy,cz)=(node_coordinates[node][0],node_coordinates[node][1],node_coordinates[node][2]) # Координаты обрабатываемого узла из списка по файлу # Перебираем узлы в модели for master_node in range(1,nodes_before_creating+1): (x,y,z)=cubit.get_nodal_coordinates(master_node) # Получение координат для узлов модели dist = math.pow((float(x)-float(cx)), 2)+math.pow((float(y)-float(cy)), 2)+math.pow((float(z)-float(cz)), 2) # Проверка нахождения в сфере поиска радиусом "r" от точек с координатами из файла соседних узлов # Если узлы лежат внутри сферы if dist<=(r**2): print("Точка с этими координатами находится внутри сферы поиска") # Пишем в консоль что лежат for_bond_nodes.append(master_node) # Записываем номера узлов для задания их в поле главных сущностей # Если в окрестности точки с координатами из файла есть близлежащие узлы в сфере поиска, то if len(for_bond_nodes)>0: print('for_bond_nodes',for_bond_nodes) fidesys.cmd('create node location ' + str(node_coordinates[node][0]+' '+node_coordinates[node][1]+' '+node_coordinates[node][2])) # Создаем узел в рассмотренных координатах fidesys.cmd('create coupling master node '+str(for_bond_nodes)+'slave node '+str(cubit.get_node_count())+' dofs all') # Создание связей соседних узлов с созданным nodes_after_creating = cubit.get_node_count() # Для удобства отсчетов создаем переменную с числом узлов после завершения процедур поиска fidesys.cmd('block '+str(cubit.get_next_block_id())+' add node '+str(nodes_before_creating+1)+' to '+str(nodes_after_creating)) # Добавление в блок узлов, созданных по данным из файла fidesys.cmd('block '+str(cubit.get_next_block_id()-1)+' name \'Bond_nodes\'') # Создание имени для интерфейсных узлов fidesys.cmd('block '+str(cubit.get_next_block_id()-1)+' element point') # Задание блоку категории "точка"
Затем откройте редактор журнала, в нем измените интерпретатор на Python ("Инструменты"-"Интерпретатор"-"Python") и откройте файл с ранее сохраненным скриптом и запустите.
В результате вы увидите созданную связь через интерфейсный узел, а также заметите, что для точки, в окрестности которой не было узлов в нужном диапазоне, связь создана не была.
