首页/文章/ 详情

Abaqus与DeepSeek(4)_Abaqus 助手写子程序有点东西

2小时前浏览3

编写Abaqus子程序需要使用Fortran语言,这对没有编程基础或对Fortran语言不够熟悉的用户来说,是一个不小的挑战。更复杂的是,在编写子程序的过程中,除了编码本身,还需要熟练掌握Abaqus的接口结构及其数据交换机制,这无疑增加了工作难度。此外,由于Abaqus与用户子程序的配合依赖外部的Fortran编译器,一旦出现报错,就很难准确定位问题所在。因此,这项任务可以说既烧脑又耗时。

上文中介绍了创建基于DeepSeek的Abaqus助手。为了测试这位“新伙伴”的能力,我尝试用它来帮忙创建一个高斯热源子程序。让人意外的是,助手的表现很不错,确实“有点东西”!。


二维高斯热源 – 直线运动

先来个直线运动,向 Abaqus 助手发出请求:帮我写出平面高斯热源的函数表达式,并根据函数表达式编写平面高斯热源的Abaqus子程序。其中热源的电压为15V,电流为100A,电弧的热功率为0.85。热源的初始位置坐标为X0=0,Y0=0,Z0=0.005,焊接速度为0.005m/s,沿X轴正向焊接。整个模型中尺寸使用SI(m)单位。














































      SUBROUTINE DFLUX(FLUX,SOL,KSTEP,KINC,TIME,NOEL,NPT,COORDS,     1 JLTYP,TEMP,PRESS,SNAME)C      INCLUDE 'ABA_PARAM.INC'C      DIMENSION COORDS(3),FLUX(2)      CHARACTER*80 SNAMECC     --- 用户可调参数 ---      REAL, PARAMETER :: eta = 0.85      ! 热效率      REAL, PARAMETER :: V = 15.0        ! 电压(V)      REAL, PARAMETER :: I = 100.0       ! 电流(A)      REAL, PARAMETER :: X0 = 0.0        ! 初始X坐标(m)      REAL, PARAMETER :: Y0 = 0.0        ! 初始Y坐标(m)      REAL, PARAMETER :: Z0 = 0.005      ! 作用面Z坐标(m)      REAL, PARAMETER :: v_weld = 0.005  ! 焊接速度(m/s)      REAL, PARAMETER :: r0 = 0.01       ! 高斯半径(m)C      REAL :: Q_total, x_center, dx, dy, r_sq, exponent      REAL, PARAMETER :: PI = 3.141592653589793CC     --- 计算总功率 ---      Q_total = eta * V * I  ! 总功率 = 0.85*15*100 = 1275 WCC     --- 计算当前时刻热源中心坐标 ---      x_center = X0 + v_weld * TIMECC     --- 仅对Z=0.005平面作用 ---      IF (ABS(COORDS(3) - Z0) .GT. 1e-6) THEN          FLUX(1) = 0.0          RETURN      ENDIFCC     --- 计算相对位置 ---      dx = COORDS(1) - x_center      dy = COORDS(2) - Y0      r_sq = dx**2 + dy**2CC     --- 高斯分布计算 ---      exponent = -3.0 * r_sq / (r0**2)      FLUX(1) = (3.0 * Q_total) / (PI * r0**2) * EXP(exponent)C      RETURN      END

我们来看看 Abaqus 助手的回答吧:

1)由于我指定了热源的移动方向,助手给出的高斯热源函数表达式中巧妙地包含了 (x(t)) 项,看来它确实能理解需求,细节考虑得还不错;

2)不仅提供了完整的子程序,还贴心地添加了详细的注释(写代码的应该讨厌注释,也最讨厌别人不注释);

3)助手注意到我没提供热源的半径,主动帮我补充了这个细节,很可以;

4)不过,它在创建模型时误将模型厚度理解为0,这点有些小瑕疵,但总体问题不大;

5)意外的是,它还顺带给出了常见问题的处理建议,这波功能加分!

总体来说,我对这次回答非常满意。不过,说到底实践才是检验真理的唯一标准,接下来就让我们验证一下这个子程序到底能不能顺利跑起来吧!


哎哟,不错哦!这子程序直接复 制过来竟然不需要任何修改,就能成功运行并正确计算,着实有点实力!


二维高斯热源 – 沿sin函数曲线运动


这次热源沿 y=0.04sin(50x) 曲线运动。

不需要重新编辑请求,直接向 Abaqus 助手提示需求即可:热源和焊接速度不变,现在热源移动不正是沿着X轴正向,而是沿y=sin(50*x)函数运动,帮我重写子程序。

















































      SUBROUTINE DFLUX(FLUX,SOL,KSTEP,KINC,TIME,NOEL,NPT,COORDS,     1 JLTYP,TEMP,PRESS,SNAME)C      INCLUDE 'ABA_PARAM.INC'C      DIMENSION COORDS(3),FLUX(2)      CHARACTER*80 SNAMECC     --- 用户可调参数 ---      REAL, PARAMETER :: eta    = 0.85      ! 热效率      REAL, PARAMETER :: V      = 15.0      ! 电压(V)      REAL, PARAMETER :: I      = 100.0     ! 电流(A)      REAL, PARAMETER :: X0     = 0.0       ! 初始X坐标(m)      REAL, PARAMETER :: Y0     = 0.0       ! 初始Y坐标(m)      REAL, PARAMETER :: Z0     = 0.005     ! 作用面Z坐标(m)      REAL, PARAMETER :: v_weld = 0.005     ! 焊接速度(m/s)      REAL, PARAMETER :: r0     = 0.01      ! 高斯半径(m)      REAL, PARAMETER :: A      = 0.001     ! 振幅(m)      REAL, PARAMETER :: omega  = 50.0      ! 空间角频率(rad/m)      REAL, PARAMETER :: PI     = 3.141592653589793C      REAL :: Q_total, x_center, y_center, dx, dy, r_sq, exponentCC     --- 计算总功率 ---      Q_total = eta * V * I  ! 总功率 = 1275 WCC     --- 计算动态热源中心坐标 ---      x_center = X0 + v_weld * TIME      y_center = Y0 + A * SIN(omega * x_center)  ! 空间正弦路径CC     --- 仅对Z=0.005平面作用 ---      IF (ABS(COORDS(3) - Z0) .GT. 1e-6) THEN          FLUX(1) = 0.0          RETURN      ENDIFCC     --- 计算相对位置 ---      dx = COORDS(1) - x_center      dy = COORDS(2) - y_center      r_sq = dx**2 + dy**2CC     --- 高斯分布计算 ---      exponent = -3.0 * r_sq / (r0**2)      FLUX(1) = (3.0 * Q_total) / (PI * r0**2) * EXP(exponent)C      RETURN      END

再来看看 Abaqus 助手的回答吧:

1)准确地给出了 (x) 和 (y) 的数学运动模型;

2)更新了子程序,但由于我的请求是 (y = sin(50x)),所以它默认的幅值是 0.001m;

3)提供了关键的参数说明和验证运动曲线的方法,很贴心;

4)给出了参数调整和网格设置的优化建议,为实际操作增添了不少指导价值;

5)依旧贴心地提供了常见问题的处理建议,值得好评。

接下来,再次验证一下这个子程序是否能正确运行吧!另外,我将子程序中的幅值调整为 0.04m,以符合预期。



这次的子程序代码拿过来依然可以直接运行且结果完全正确!不得不说,写这个 DFLUX 子程序,确实表现相当不错。

当然,这也可能得益于网络上关于 DFLUX 子程序的学习资料非常丰富,因此 DeepSeek 在编写这类子程序时显得更加得心应手。不过,其他类型的子程序表现如何就不得而知了。总的来说,这次体验还是相当不错的。如果大家有编写子程序的需求,不妨试试借助 DeepSeek 来帮助快速入门,或许会带来意想不到的成效!



来源:仿真技术汇
ACTFluxAbaqus焊接
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-02-25
最近编辑:2小时前
SimulateTech
硕士 签名征集中
获赞 58粉丝 32文章 80课程 2
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈