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)

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要从Abaqus结果中提取最小位移,你可以使用Python脚本。 首先,你需要使用读取结果的模块,例如Odb Access模块。然后,你可以访问模型的位移量并选择最小值。 以下是一个简单的示例代码: ``` from odbAccess import * # Open the result file odb = openOdb('example.odb') # Get the minimum displacement min_disp = float('inf') for frame in odb.steps['Step-1'].frames: for node in frame.fieldOutputs['U'].values: disp = node.data[0] if disp < min_disp: min_disp = disp # Close the result file odb.close() # Print the result print('The minimum displacement is:', min_disp) ``` 希望这能帮到你! ### 回答2: Python可以使用Abaqus API提取abaqus结果中的最小位移。 首先,我们需要使用Python的`abaqus`模块导入所需的Abaqus API。然后,使用`openOdb`函数打开Abaqus结果数据库文件(.odb文件),并将其存储在odb对象中。 接下来,使用`steps`属性访问odb对象的步骤列表。选择所需的步骤,并将其存储在step对象中。 然后,使用`frames`属性访问步骤对象的帧列表。选择所需的帧,并将其存储在frame对象中。 接着,使用`historyRegions`属性访问odb对象的历史区域列表。选择包含所需位移数据的历史区域,并将其存储在historyRegion对象中。 最后,使用`historyOutputs`属性访问历史区域对象的历史输出列表。选择所需的历史输出,并将其存储在historyOutput对象中。 使用`data`属性访问历史输出对象的数据列表,并使用Python的内置函数`min`找到列表中的最小位移值。 以下是提取abaqus结果中最小位移的示例代码: ``` from abaqus import * from abaqusConstants import * odbPath = 'path/to/odb/file.odb' # 替换为结果数据库文件的路径 # 打开odb文件 odb = session.openOdb(odbPath) # 获取步骤 step = odb.steps['Step-1'] # 替换为所需的步骤 # 获取帧 frame = step.frames[-1] # 替换为所需的帧 # 获取历史区域 historyRegion = odb.historyRegions['Node ASSEMBLY.1'] # 替换为包含所需位移数据的历史区域 # 获取历史输出 historyOutput = historyRegion.historyOutputs['U3'] # 替换为所需的历史输出 # 获取数据 data = historyOutput.data # 找到最小位移 minDisplacement = min(data, key=lambda x: x[1]) print('最小位移为:', minDisplacement[1]) # 关闭odb文件 odb.close() ``` 请注意,上述代码中的路径、步骤、历史区域和历史输出名称应根据实际情况进行替换。 ### 回答3: 要提取abaqus结果中的最小位移,可以使用Python中的abaqus模块。首先,需要将结果数据导入Python环境。 导入abaqus模块代码如下: ```python from abaqus import * from abaqusConstants import * ``` 接下来,需要打开abaqus结果文件,可以使用`openOdb()`函数。代码如下: ```python odb = openOdb(path='result.odb') ``` 其中,`path`参数是结果文件的路径。 要提取位移数据,需要知道位移的对应标签或实例,可以使用`odb.steps.keys()`函数找到所有步骤,并使用`odb.steps['步骤名称']`获取特定步骤。例如: ```python step = odb.steps['Step-1'] ``` 然后,使用`step.frames[-1]`获取最后一个步骤的帧(最终结果)。 要获取最小位移,可以使用`frame.fieldOutputs`属性。代码如下: ```python displacement = frame.fieldOutputs['U'] ``` 其中,`'U'`是位移对应的输出变量名称,可以在abaqus中查看相应输出变量名称。 最后,我们遍历所有位移值并找到最小位移。代码如下: ```python min_displacement = min([d.magnitude() for d in displacement.values]) ``` 其中,`d.magnitude()`可以获取位移的值。 最小位移值存储在`min_displacement`变量中,可以根据需求进行进一步处理或输出。 最后,记得关闭结果文件: ```python odb.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值