Как я могу реконструировать сетку в Python/Matlab по координатам узлов и данным об их связности, существующим в файле ввода Abaqus?

Я работаю над моделью машинного обучения, которая предсказывает смещения узлов в объекте после приложения силы. Моя модель обучена с использованием данных, сгенерированных FEM Abaqus, и я хочу восстановить сетку по координатам узлов, предсказанным моделью ML. До сих пор мне удавалось воссоздать представление с трехмерным графиком рассеяния по координатам узлов, но это не сетка. Данные, которые у меня есть, существуют в файле Abaqus inp и состоят из координат узлов, а также того, какие узлы влияют на какие элементы (рисунок ниже). Входной файл Abaqus

Буду признателен, если кто-нибудь поможет мне с проблемой. Спасибо.


person Mehrdad Saaedi    schedule 13.04.2021    source источник
comment
Так в чем проблема? В вашем посте нет вопроса.   -  person Roman Zhuravlev    schedule 14.04.2021
comment
Вопрос в том, как я могу восстановить сетку с данными на прикрепленном изображении.   -  person Mehrdad Saaedi    schedule 14.04.2021
comment
Реконструировать как? В Абакусе? На скриншоте у вас уже есть часть входного файла, распознаваемого Abaqus.   -  person Roman Zhuravlev    schedule 14.04.2021
comment
Нет, не в Абакусе. У меня есть сетка в Abaqus. Как я объяснил, я использовал данные конечных элементов из Abaqus для обучения модели машинного обучения в Keras. Предполагается, что модель предсказывает смещения узлов, как это делает Abaqus. Теперь мне нужно проиллюстрировать мой прогноз смещения ML в 3D, чтобы визуально сравнить его с моей деформированной моделью из FEA. Вот почему я использовал термин реконструкции для сетки.   -  person Mehrdad Saaedi    schedule 14.04.2021
comment
Итак, вопрос в том, как построить сетку в питоне? Это означает, что на самом деле это не вопрос, связанный с абаком. Что ж, поскольку у вас есть доступ к Abaqus, самым простым способом было бы создать сиротскую сетку из ваших предсказанных данных. поэтому вы будете сравнивать две сетки, визуализированные с использованием одной и той же графической среды (в данном случае Abaqus CAE). В противном случае используйте любую библиотеку построения графиков, например matplotlib, plotly или другое решение, которое вы можете найти в Google.   -  person Roman Zhuravlev    schedule 14.04.2021


Ответы (2)


Учитывая, что у вас есть элемент тетраэдра, как я вижу из вашего файла .inp, вы можете использовать так называемую триангуляцию Делоне. Это в основном метод, который используется для создания сетки с тетраэдрами. Дело в том, что два исходящих меша не должны быть абсолютно одинаковыми. В MATLAB есть встроенный пример Делоне, взгляните на него. Вы также можете попробовать прочитать таблицу подключения из Abaqus и использовать эту.

Например. МАТЛАБ:

trimesh(T,x,y,z)

где T — матрица связности (либо считанная из абака, либо использующая функцию Делоне), а x, y, z — соответствующие координаты узлов.

Для python есть такие возможности, как тримеш, я ожидаю, что scipy также имеет некоторые возможности создания сетки.

person Nic    schedule 17.04.2021

Если я правильно понимаю, у вас есть список трехмерных тетраэдров, которые вы хотите визуализировать. В python вы можете сделать это, используя следующую функцию (которая изменена из моего предыдущего ответа, см. объяснение там).

def plot_tetra(ax, points, tetra_list):
    edges = collect_edges(tetra_list)
    x = np.array([])
    y = np.array([])
    z = np.array([])
    for (i,j) in edges:
        x = np.append(x, [points[i, 0], points[j, 0], np.nan])      
        y = np.append(y, [points[i, 1], points[j, 1], np.nan])      
        z = np.append(z, [points[i, 2], points[j, 2], np.nan])
    ax.plot3D(x, y, z, color='g', lw='0.1')

    ax.scatter(points[:,0], points[:,1], points[:,2], color='b')


def collect_edges(tetra_list):
    edges = set()
    for (i0, i1, i2, i3) in tetra_list:
        edges.add((i0,i1))
        edges.add((i0,i2))
        edges.add((i0,i3))
        edges.add((i1,i2))
        edges.add((i1,i3))
        edges.add((i2,i3))
    return edges

Возможный результат вызова этой функции с приведенным ниже кодом показан на следующем рисунке (тоже взято оттуда):

введите здесь описание изображения

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')
plot_tetra(ax, points, tetra_list)
person Iddo Hanniel    schedule 22.04.2021