我正在尝试使用 python scirpt 从 abaqus .inp 文件写入 VTK 文件。将其转换为 vtk 的目的是可视化根据应变变化的材料属性。由于我没有使用 VTK 文件的经验,因此我在 abaqus 中创建了一个小立方体并导出了 .inp 文件。 FE 模型有 125 个六角形单元 (C3D8),有 216 个节点。 编写 vtk 后,每当我尝试在 paraview 中打开 vtk 文件时,模型中都会缺少几个元素。
我编写了一个Python脚本,它从inp中提取所有节点坐标和与其节点相关的元素连通性,并写入一个vtk文件。我遵循了 vtk 文档中提到的语法,但我无法弄清楚哪里出了问题。看来我在编写VTK文件的CELLS部分的部分有一些错误。
with open('Job-1.inp','r') as f:
contents = f.readlines()
node = '*Node'
node_conn = contents[9:225]
node_id, x, y, z = ([] for i in range(4))
for i in range(len(node_conn)):
node_id.append(int(node_conn[i].split(',')[0].replace(' ','')))
x.append(float(node_conn[i].split(',')[1].replace(' ','')))
y.append(float(node_conn[i].split(',')[2].replace(' ','')))
z.append(float(node_conn[i].split(',')[3].replace(' ','')))
elem_conn = contents[226:351]
elem_id,e1, e2, e3, e4, e5, e6, e7, e8 = ([] for i in range(9))
for i in range(len(elem_conn)):
elem_id.append(int(elem_conn[i].split(',')[0].replace(' ', '')))
e1.append(int(elem_conn[i].split(',')[1].replace(' ', '')) - 1)
e2.append(int(elem_conn[i].split(',')[2].replace(' ', '')) - 1)
e3.append(int(elem_conn[i].split(',')[3].replace(' ', '')) - 1)
e4.append(int(elem_conn[i].split(',')[4].replace(' ', '')) - 1)
e5.append(int(elem_conn[i].split(',')[5].replace(' ', '')) - 1)
e6.append(int(elem_conn[i].split(',')[6].replace(' ', '')) - 1)
e7.append(int(elem_conn[i].split(',')[7].replace(' ', '')) - 1)
e8.append(int(elem_conn[i].split(',')[8].replace(' ', '')) - 1)
with open("test.vtk",'w') as f:
f.write('# vtk DataFile Version 2.0\n')
f.write('ASCII\n')
f.write('DATASET UNSTRUCTURED_GRID\n')
f.write('POINTS {} FLOAT\n'.format(len(node_id)))
for i in range(len(node_id)):
f.write('{} {} {}\n'.format(x[i],y[i],z[i]))
f.write('CELLS {} {}\n'.format(len(elem_id),len(elem_id)*9))
for i in range(len(elem_id)):
f.write('8 {} {} {} {} {} {} {} {}\n'.format(e1[i],e2[i],e3[i],e4[i],
e5[i],e6[i],e7[i],e8[i]))
f.write('CELL_TYPES {}\n'.format(len(elem_id)))
for i in range(len(elem_id)):
f.write('12\n')```
Your help is greatly appreciated.
P.S:
The python code is not well written as I am a beginner.
Thank you
虽然我无法直接回答如何解决编写 VTK 文件的问题,但我可以为您提供两个先前构建的存储库,用于将 .odb 结果转换为 .vtk 文件类型。并非所有元素类型都受支持,但相当数量的常见元素都受支持。希望您的用例是其中之一
我之前使用过的带有用户指南的存储库 https://github.com/Liujie-SYSU/odb2vtk
我最近偶然发现可以提供扩展功能的 Repo https://codebase.helmholtz.cloud/ingo.scheider/abaqus_plugins/-/blob/master/odb2vtk.py