Найти стресс в уникальном узле на abaqus с помощью скрипта Python - PullRequest
0 голосов
/ 24 января 2019

Я объясняю свою проблему.Мне абсолютно необходимо найти напряжения в нескольких уникальных узловых точках на моей модели abaqus, используя скрипт на python.Сначала мне нужно найти узел, испытывающий максимальное главное напряжение, а затем мне также нужно будет найти узел, который максимизирует определенный параметр, который использует напряжения и деформации в уникальном узловом узле.

Сначала я попробовал подход max9111 Я видел здесь https://stackoverflow.com/a/43175485/10960993, но у меня возникла проблема в следующей строке с использованием сценария:

for i in xrange(0,Values.shape[1]):
    unq_sum = np.bincount(unq_idx, weights=Values[:,i])
    ...

У меня следующее сообщение об ошибке:

ValueError: The weights and list don't have the same length.

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

Спасибо за помощь!

1 Ответ

0 голосов
/ 07 августа 2019

Я наконец нашел решение своей проблемы, которое могло бы помочь многим людям (по крайней мере, это помогло моим коллегам). Решение, предложенное max9111 для усреднения значений напряжений на внешнем узле, является идеальным и единственным решением, если вы хотите узнать напряжения на поверхности с помощью сценариев Abaqus. Однако код должен быть изменен следующим образом, по крайней мере на Abaqus 6.16:

В первой части нет изменений

Field = session.odbs['ModelName.odb'].steps['StepName'].frames[0].fieldOutputs['S']
Field = Field.getSubset(position = ELEMENT_NODAL)
Values=Field.bulkDataBlocks[0].data
NodeLabels=Field.bulkDataBlocks[0].nodeLabels

NodeLabels_unique, unq_idx = np.unique(NodeLabels, return_inverse=True)
Values_Averaged=np.zeros((NodeLabels_unique.size,Values.shape[1]))
unq_counts = np.bincount(unq_idx)

Изменение появляется здесь в способе создания переменной Values ​​благодаря тому, как Abaqus хранит данные с bulkDataBlocks:

for i in xrange(0,Values.shape[1]):
    ValuesTemp = [item[i] for item in Values]
    unq_sum = np.bincount(unq_idx, weights=ValuesTemp)
    Values_Averaged[:,i] = unq_sum / unq_counts

    max_ind=np.unravel_index(np.argmax(Values_Averaged),Values_Averaged.shape)

print("The max stress is at NodeLabel "+str(NodeLabels_unique[max_ind[0]])+ " its value is "+ str(Values_Averaged[max_ind]) +" MPa.")
...