Abaqus 中的 Python 脚本从输出数据库提取输出

问题描述 投票:0回答:1

我正在用 python 编写一段代码,用于提取 Abaqus 2019 中给定表面上所有节点的接触应力 (CPRESS)。我设法编写代码,以便提取节点标签以及表面的节点坐标并将其写入 csv 文件。但是,我在访问我感兴趣的节点的 CPRESS 值方面没有取得任何成功。

我在用户手册中阅读了有关在哪里可以找到 CPRESS 值的信息,但我没有看到代码没有为给定节点提取任何值的原因。这是我的代码:

import csv
from odbAccess import *

odb_Pfad = '123.odb' #not important
odb = openOdb(odb_Pfad)

instance_name = 'PRUEFKOERPER_4-1'
instance = odb.rootAssembly.instances[instance_name]

start_node_id = 0
end_node_id = 5000

partlabel = []
partxcord = []
partycord = []
partzcord = []

for node in instance.nodes:
    if start_node_id <= node.label <= end_node_id:
        partlabel.append(node.label)
        partxcord.append(node.coordinates[0])
        partycord.append(node.coordinates[1])
        partzcord.append(node.coordinates[2])

step_name = 'Belastung'
step = odb.steps[step_name]
last_frame = step.frames[-1]  #Last frame
cpress_dict = {value.nodeLabel: value.magnitude for value in last_frame.fieldOutputs['CPRESS'].values}

#write a csv file with the node ladel and the coordinates of the corresponding node, as  well as cpress-Value
csv_datei = '123.csv' #not important
with open(csv_datei, 'wb') as file:
    writer = csv.writer(file)
    writer.writerow(['Knoten ID', 'x', 'y', 'z', 'CPRESS'])
    for i in range(len(partlabel)):
        cpress_value = cpress_dict.get(partlabel[i], 'N/A')
        writer.writerow([partlabel[i], partxcord[i], partycord[i], partzcord[i],     cpress_value])

odb.close()
python abaqus abaqus-odb
1个回答
0
投票

访问接触相关输出与其他字段输出略有不同,因为接触相关输出是特定于接触对写入的。

要访问接触对的接触相关输出,您需要从属节点和主节点/表面名称的名称。
您可以从 Abaqus 查看器中找到接触对的确切名称:“工具”->“字段输出”->“从字段创建”-> 在这里,在“名称”列下,您可以找到所有接触对的确切名称可用的接触对。 此外,您可以将数据输出到文本文件,如下所示。

import numpy
cdata = odb.steps['Belastung'].frames[1].fieldOutputs['CPRESS   BOLTHEAD-CARR/CARR-BOLTHEAD']

# Get the contact surface names from field output name
fieldOutputname = cdata.name
surface_names = fieldOutputname.split('   ')[1].split('/')
fout = open('cpress.dat', 'w')

for i, data in enumerate(cdata.bulkDataBlocks):
    fout.write('%s\n' % surface_names[i])
    numpy.savetxt(fout, numpy.column_stack((data.nodeLabels, data.data)), fmt='%10d  
 %.8E')

fout.close()

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.