Abaqus Python:后处理用py导出n个集合在某个方向的位移U1/U2/U3数据+ 逐帧输出

在批量提交几十个Job后,需要得到每个算例中20个SET在U3方向的位移,数据电子厂,在线打工

from odbAccess import openOdb
from textRepr import *
my_odb = openOdb(r"E:\240426slice\0425s3000t25slice.odb")
step = my_odb.steps['Step-1'] 
frame = step.frames[-1] 
dis_field = frame.fieldOutputs['U']
for i in range(0,20):
	setname = 'SET-N%s'%(i+1)
	NodeSet = my_odb.rootAssembly.nodeSets[setname]
	local_dis_values = dis_field.getSubset(region=NodeSet)
	with open('3_25_N%s'%(i+1)+'.txt','w') as f:  
		f.write("NodeLabel, NodeDis\n")
		for node_value in local_dis_values.values:
			txt_line = "{}, {}\n".format(node_value.nodeLabel,node_value.data[2])
			f.write(txt_line) 

解释如下:

from odbAccess import openOdb
from textRepr import *
my_odb = openOdb(r"E:\240426slice\0425s3000t25slice.odb") #""中间替换成自己的路径
step = my_odb.steps['Step-1'] 
frame = step.frames[-1] #-1代表最后一帧,根据自己需要,比如你场输出100步,需要第51帧的,-1改成51也行
dis_field = frame.fieldOutputs['U'] #U代表位移
for i in range(0,20): #这里写了一个循环因为我有20个set,名称是SET-N1到SET-N20
	setname = 'SET-N%s'%(i+1)
	NodeSet = my_odb.rootAssembly.nodeSets[setname]
	local_dis_values = dis_field.getSubset(region=NodeSet) #输出我指定的set的数据
	with open('3_25_N%s'%(i+1)+'.txt','w') as f:  #3_25_N%s'%(i+1)是我定义的名字3_25_Ni(i=1到20),可以改成自己的
		f.write("NodeLabel, NodeDis\n")
		for node_value in local_dis_values.values:
			txt_line = "{}, {}\n".format(node_value.nodeLabel,node_value.data[2]) 
#.data存储了xyz三个方向的位移,data[0]是x方向,data[1]是y方向,data[2]是z方向,我只需要U3位移,所以只输出2,需要三个方向可以直接.data
			#输出的格式是 节点编号-u3位移
			f.write(txt_line) 

在CAE界面操作

输出的文件在默认文件夹里,我是C/Temp里面:

如果只需要单个集合的U3位移可以参照此代码:

from odbAccess import openOdb
from textRepr import *
my_odb = openOdb(r"你的文件位置")
step = my_odb.steps['Step-1'] 
frame = step.frames[-1] 
dis_field = frame.fieldOutputs['U']
NodeSet = my_odb.rootAssembly.nodeSets['你的SET名称']
local_dis_values = dis_field.getSubset(region=NodeSet)
with open('你想输出的文件名字.txt','w') as f:  
	f.write("NodeLabel, NodeDis\n")
 	for node_value in local_dis_values.values:
		txt_line = "{}, {}\n".format(node_value.nodeLabel,node_value.data[2])
		f.write(txt_line)

-------------------------------------------------------------------------------------------------------------------------------

0429增加:好好好,数据不对劲还需要逐帧分析,修改代码如下:

from odbAccess import openOdb
from textRepr import *
my_odb = openOdb(r"E:\240426slice\0425s3000t250slice.odb")
step = my_odb.steps['Step-1'] 
for frame_step in range(44,60): #提取44-60帧的数据
	frame = step.frames[frame_step]
	dis_field = frame.fieldOutputs['U']
	for i in range(0,20):
		setname = 'SET-N%s'%(i+1)
		NodeSet = my_odb.rootAssembly.nodeSets[setname]
		local_dis_values = dis_field.getSubset(region=NodeSet)
		with open('3_250_N%s'%(i+1)+'F'+str(frame_step)+'.txt','w') as f:  
			f.write("NodeLabel, NodeDis\n")
			for node_value in local_dis_values.values:
				txt_line = "{}, {}\n".format(node_value.nodeLabel,node_value.data[2])
				f.write(txt_line) 

ref:PYTHON实现abaqus后处理(1)_python abaqus后处理-CSDN博客

Python提取ABAQUS求解结果odb中的变量信息 - 知乎 (zhihu.com)

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值