Abaqus无需选定对象输出压缩仿真各时间步最大应力值的方法咨询
Abaqus全模型各时间步最大Mises应力导出方案
你遇到的"At least one entity should be selected"报错,本质是自定义的MISESMAX场输出在导出时没有关联可选中的几何/网格实体,无需自定义该类最大值场输出,直接从基础应力场提取全模型最大值即可,无需指定固定应力出现区域。
方案1:CAE界面操作(适合时间步较少场景)
- 作业提交前无需单独设置MISESMAX自定义场输出,只需输出常规S(应力)场,输出对象选择整个模型/对应部件,输出位置包含积分点即可
- 计算完成打开ODB文件,依次点击菜单栏
工具->查询->探测值 - 弹出的探针设置框中,类型选择
场输出,变量下拉选择S->Mises,域选择整个模型 - 勾选
高亮显示最大值,切换到步骤/帧选项卡,选中所有需要导出的时间步对应的帧 - 点击
写入文件即可得到所有时间步对应全模型最大Mises应力的XY数据,可直接用Excel、记事本打开读取。
方案2:Python脚本批量导出(适合时间步较多场景)
- 复制下方代码到本地txt文件,替换代码中ODB路径、分析步名称、输出路径三个参数后,将文件后缀改为
.py - 打开Abaqus/CAE,依次点击
文件->运行脚本,选择保存的py文件即可自动导出结果
from abaqus import * from abaqusConstants import * import odbAccess # 替换为你的ODB文件绝对路径 odb_path = r'C:\simulation\compression_test.odb' # 替换为你的分析步名称 step_name = 'Compression_step' # 替换为输出结果的TXT文件路径 output_path = r'C:\simulation\max_stress_result.txt' # 读取ODB odb = odbAccess.openOdb(odb_path, readOnly=True) target_step = odb.steps[step_name] all_frames = target_step.frames result_data = [] for frame in all_frames: current_time = frame.frameValue stress_field = frame.fieldOutputs['S'] mises_field = stress_field.getScalarField(invariant=MISES) # 提取全模型所有积分点Mises应力的最大值 max_mises = max([val.data for val in mises_field.values]) result_data.append((current_time, max_mises)) # 写入结果文件 with open(output_path, 'w', encoding='utf-8') as f: f.write('时间\t最大Mises应力\n') for time_val, stress_val in result_data: f.write(f'{time_val}\t{stress_val:.6f}\n') odb.close()
内容的提问来源于stack exchange,提问作者rustin
相关产品推荐
相关产品推荐

