Abaqus焊接仿真全面解析:从热源模型到协同软件应用,多场景案例分析
焊接仿真这玩意儿,说难不难,说简单也不简单。今天咱们就来唠唠怎么用Dflux子程序整出靠谱的热源载荷,顺带说说生死单元这些骚操作。搞搅拌摩擦焊的时候,热源移动速度超过20mm/s就报错,后来发现是质量缩放系数设太大了。这个includeStrain开关要是关了,激活的单元会自带"瞬移"效果,应力直接崩盘。、平板多焊缝同时焊接算例、搅拌摩擦焊算例(热源移动法)复合热源焊接算例、固有应变法的原理及仿真
abaqus焊接仿真培训资料,含热源模型,子程序 焊接应力应变场及其数值模拟理论简介 热力耦合理论(热应力分析) 协同软件的安装和修改、Abaqus软件使用基础 焊接模型的前处理部分Dflux子程序(热源载荷) 作业计算部分 、后处理部分 、平板对接接头单道焊算例(完全耦合)、T型接头单道焊算例(顺序耦合) 、平板对接接头生死单元算例 、平板对接接头多道焊算例 、平板多焊缝焊接算例 、平板多焊缝同时焊接算例、搅拌摩擦焊算例(热源移动法)复合热源焊接算例、固有应变法的原理及仿真实例

焊接仿真这玩意儿,说难不难,说简单也不简单。最近在搞Abaqus焊接模拟培训,发现热源模型和子程序这俩货真是让人又爱又恨。今天咱们就来唠唠怎么用Dflux子程序整出靠谱的热源载荷,顺带说说生死单元这些骚操作。

先说热力耦合这事。焊接过程温度场和应力场跟连体婴似的分不开,必须用完全耦合分析。记得在材料属性里勾上"Thermal Expansion"选项,不然应力算出来能差出两条街。比如Q235钢的参数得这么设:
mdb.models['Model-1'].Material(name='Q235')
mdb.models['Model-1'].materials['Q235'].Elastic(table=((2.1e5, 0.3), ))
mdb.models['Model-1'].materials['Q235'].Plastic(table=((235.0, 0.0), ))
mdb.models['Model-1'].materials['Q235'].Expansion(table=((1.2e-5, ), ))
这expansion系数要是设错了,热变形能给你整出外星飞船的造型。

重点来了——Dflux子程序。Fortran代码里有个关键参数FLUX,得根据双椭球热源模型来算。看这段核心代码:
DO K=1,NTENS
X_LOCAL = COORDS(1) - X0 - V*(TIME(2)-t_start)
Y_LOCAL = COORDS(2) - Y0
Z_LOCAL = COORDS(3) - Z0
IF (TIME(2) .GT. t_start .AND. TIME(2) .LE. t_end) THEN
Q = 0.6*eta*U*I/(a*b*c*pi*sqrt(pi))
FLUX(K) = Q*exp(-3*(X_LOCAL**2/a**2 + Y_LOCAL**2/b^2 + Z_LOCAL**2/c**2))
ENDIF
END DO
这里eta是电弧热效率,a、b、c控制热源形状。有个坑爹的地方——单位制!要是模型用毫米建的话,热流密度得乘以1e9,不然焊枪跟打火机似的没效果。

abaqus焊接仿真培训资料,含热源模型,子程序 焊接应力应变场及其数值模拟理论简介 热力耦合理论(热应力分析) 协同软件的安装和修改、Abaqus软件使用基础 焊接模型的前处理部分Dflux子程序(热源载荷) 作业计算部分 、后处理部分 、平板对接接头单道焊算例(完全耦合)、T型接头单道焊算例(顺序耦合) 、平板对接接头生死单元算例 、平板对接接头多道焊算例 、平板多焊缝焊接算例 、平板多焊缝同时焊接算例、搅拌摩擦焊算例(热源移动法)复合热源焊接算例、固有应变法的原理及仿真实例

生死单元算例更带劲。用model change实现逐层激活,但要注意单元激活时的初始应变。建议在initial分析步预定义所有单元,然后用:
mdb.models['Model-1'].ModelChange(name='Activate',
createStepName='Step-1',
regions=(
mdb.models['Model-1'].rootAssembly.sets['weld-layer-1'],
),
activeInStep=True,
includeStrain=ON)
这个includeStrain开关要是关了,激活的单元会自带"瞬移"效果,应力直接崩盘。实测过,打开后残余应力分布能跟实验数据对得上。

后处理有个骚操作——用Python脚本批量提取路径上的应力值。下面这段代码能自动输出所有frame的Mises应力:
from odbAccess import *
odb = openOdb('welding.odb')
section = odb.steps['Step-1'].frames[-1].fieldOutputs['S'].getSubset(
region=odb.rootAssembly.nodeSets['PATH_NODES'])
np.savetxt('stress.csv', section.values[0].data, delimiter=',')
搞T型接头时发现个玄学现象——约束方式稍微改改,角变形能从3mm直接飙到8mm。后来发现是夹具刚度的锅,用connector模拟螺栓连接比直接encastre靠谱得多。

最后说下多道焊的坑。每道焊的初始状态得用predefined field导入上一步结果,但ABAQUS/CAE里这个导入按钮藏得比孙悟空的定海神针还深。正确姿势是在命令行敲:
mdb.models['Model-1'].materials['Q235'].predefinedFields['Initial-2'].setValues(
fileName='Job-1.odb',
step=1,
increment=2)
搞搅拌摩擦焊的时候,热源移动速度超过20mm/s就报错,后来发现是质量缩放系数设太大了。这玩意儿跟走钢丝似的,调小了算到地老天荒,调大了结果飘到外太空。

总之焊接仿真这活,三分靠技术,七分靠玄学。多摔几次跟头,自然就摸出门道了。代码记得多备份,谁知道哪天子程序突然给你来个segmentation fault呢?

更多推荐


所有评论(0)