Я хочу повернуть тензоры напряжений многих выходов поля (кадры модального анализа), добавить их и выполнить некоторые вычисления с новым тензором и сохранить все в новом выходном поле.
Для этого яАдрес каждой записи тензоров напряжений выходного поля каждого кадра из модального анализа, сохраните ее в новой матрице (numpy) и умножьте эту матрицу на мои матрицы вращения и возьмите сумму всех соответствующих тензоров напряжений из каждого кадра.Теперь я хочу сохранить эти новые тензоры, чтобы я мог визуализировать новые данные через abaqus в новом кадре.
Я не могу найти никакой информации о том, как мне нужно назначить / объявить тензорные данные для соответствующих точек интеграции и меток элементов, чтобы добавить их в новый выход поля.Я могу сделать это для скалярного поля, но не для тензорных данных.
Расчет работает хорошо.
присвоение тензорам напряжений каждого режима модального анализа различных весов и сохранение их в виде списка матриц
Spannungstensor={}length=len(odb.rootAssembly.instances['BALKEN-1'].elements)
for l in range(len(odb.steps['Modalanalyse'].frames)):
Spannungstensor[l]={}
for element in odb.rootAssembly.instances['BALKEN-1'].elements:
if element.label in Randelemente:
k=0
stressfield=odb.steps['Modalanalyse'].frames[l].fieldOutputs['S']
field=stressfield.getSubset(region=element, position= INTEGRATION_POINT,
elementType='C3D8')
fieldvalues=field.values
for v in fieldvalues:
o=element.label
Spannungstensor[l][o]={}
j=0
for integrationPoint in fieldvalues:
j=j+1
Spannungstensor[l][o][j]=np.array(((0,0,0),(0,0,0),(0,0,0)))
k=-1
for component in v.data:
k=k+1
if k<3:
Spannungstensor[l][o][j][k][k]=component *Wichtungen[l]
if k==3:
Spannungstensor[l][o][j][0][1]=component *Wichtungen[l]
Spannungstensor[l][o][j][1][0]=component *Wichtungen[l]
if k==4:
Spannungstensor[l][o][j][0][2]=component *Wichtungen[l]
Spannungstensor[l][o][j][2][0]=component *Wichtungen[l]
if k==5:
Spannungstensor[l][o][j][1][2]=component *Wichtungen[l]
Spannungstensor[l][o][j][2][1]=component *Wichtungen[l]
добавление тензоров напряжений и поворот тензора конечных напряжений
phi=np.pi/4
teta=0
#-Drehmatrix
Q=np.array(((np.cos(teta),np.sin(teta),0),
(-np.sin(teta)*np.cos(phi),np.cos(teta)*np.cos(phi),np.sin(phi)),
(np.sin(teta)*np.sin(phi),-np.cos(teta)*np.sin(phi),np.cos(phi))))
#-Drehmatrix transponiert
Qt=np.transpose(Q)
Spannungstensor_neu={}
for element in Spannungstensor[1]:
Spannungstensor_neu[element]={}
for integrationpoint in Spannungstensor[1][element]:
Spannungstensor_neu[element][integrationpoint]=np.array(((0,0,0),(0,0,0),(0,0,0)))
S=np.array(((0,0,0),(0,0,0),(0,0,0)))
for mode in range(len(odb.steps['Modalanalyse'].frames)):
S=S+Spannungstensor[mode][element][integrationpoint]
Spannungstensor_neu[element][integrationpoint]=Q*S*Qt
Spannungstensor_neu - это список, в котором первый индекс ссылается на элемент, второй индекс - на точку интегрирования элемента, а третий индекс ссылается на строку тензора напряжений (матрицы) ичетвертый индекс, относящийся к столбцу тензора напряжений (матрицы).
Каким образом должны быть данные для использования метода field.addData?
field.addData (position =..., instance = ..., tags = ..., data = ...) У меня есть уважаемые ярлыки в виде списка.
Спасибо за любую помощь заранее!