Я хотел бы создать контурную диаграмму жесткости из результатов полевых работ. Для этого мне нужно разделить NFORC2 (Y-компонент вектора узловой силы) на U2 (смещение в направлении Y).
Я пытался использовать Create Field Output -> From Fields, где мы можем определить наши собственные выходные переменные. Скаляры могут быть извлечены из векторов с помощью getScalarField (), но Abaqus выдает ошибку, потому что NFOR C - это целая переменная элемента, а U - узловая переменная.
Таким образом, кажется, что единственный способ - написать скрипт, который будет конвертировать NFOR C. Я нашел код, который может сохранить переменную как элемент узловой. Он был разработан для напряжения, которое рассчитывается в точках интеграции, поэтому я не уверен, что он будет правильно преобразовывать NFOR C, но это единственный вариант, который у меня есть. Это сохраняет некоторые результаты, поэтому я предполагаю, что это правильно.
Однако Abaqus все еще не позволяет мне разделить эту новую переменную на U2. Кажется, я должен сначала преобразовать его в уникальный узел. Для этого я нашел другой скрипт Python и добавил его в первый. Видимо, я сделал что-то не так, потому что появляется ошибка.
Вот два сценария, объединенные в один:
from abaqusConstants import *
from odbAccess import *
import numpy as np
# ***********************************************
odbPath="path_to_odb_file"
stepName="Step-1"
frameNumber=-1 #last frame in the stepName
sourceOutputFieldName='NFORC2' #element forces field
newOutputFieldName='NFORC2_at_NODES_UNIQUE'
# ************************************************
odb=session.openOdb(name=odbPath,readOnly=FALSE)
step=odb.steps[stepName]
frame=step.frames[frameNumber]
sourceField=frame.fieldOutputs[sourceOutputFieldName]
subField=sourceField.getSubset(position=ELEMENT_NODAL)
Values=subField.bulkDataBlocks[0].data
NodeLabels=subField.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)
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
newField=frame.FieldOutput(name=newOutputFieldName, field=Values_Averaged)
odb.save()
odb.close()
Ошибка, которую я получаю, указывает на следующую строку кода:
newField=frame.FieldOutput(name=newOutputFieldName, field=Values_Averaged)
Сообщение об ошибке: Ошибка типа: ошибка ключевого слова в поле
Знаете ли вы, что может быть причиной ошибки и как должен выглядеть скрипт?