前述:
有限元模型中,当载荷比较复杂时,难以通过ABAQUS/CAE界面直接进行设置,这时候就需要使用DLOAD子程序。
一、环境准备
使用Abaqus时,需要将abaqus和Fortran关联才能用,其关联过程很麻烦。我也是不断的试错,最终找到比较好的解决方案Abaqus2022+VS2019+oneAPI2023,以下是关联的过程:··
二、Abaqus在线文档
https://abaqus-docs.mit.edu/2017/English/DSSIMULIA_Established.htmhttps://abaqus-docs.mit.edu/2017/English/DSSIMULIA_Established.htm点击:Abaqus->User Subroutines->Abaqus/Standard User Subroutines->DLOAD
SUBROUTINE DLOAD(F,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,
1 COORDS,JLTYP,SNAME)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION TIME(2), COORDS (3)
CHARACTER*80 SNAME
user coding to define F
RETURN
END
这是Abaqus提供的接口,值得注意的是:Fortran有严格的缩进要求,所以在编程的时候一定要注意。上图的地方就是我在第一次运行的时候一直报错!
!这里有一个debug的操作就是,abaqus每次在提交作业以后会生成xxx.log文件,查看该文件里面有报错的信息。
接上述,在VS2019中这样对齐(好像编译器不同要求不同,读者自己注意!!!)
三、编程
参数介绍:这里仅介绍几个常用的参数,其他的读者自行到上面官方手册查阅
TIME(1):Step当前的时间的值
TIME(2):总时间的当前值。
(注:只有一个Step时,TIME(1)=TIME(2))???F:分布荷载的大小。单位为FL−2表示表面载荷,FL−3表示车身力。
下面对函数体进行编程
SUBROUTINE DLOAD(F,KSTEP,KINC,TIME,NOEL,
1 NPT,LAYER,KSPT,COORDS,JLTYP,SNAME)
C
INCLUDE 'ABA_PARAM.INC'
C
real x,y,v,s //定义坐标值和速度与位移
DIMENSION TIME(2), COORDS(3)
CHARACTER*80 SNAME
v=10
x = COORDS(1) //COORDS(1)=x的坐标
y = COORDS(2) //COORDS(2)=y的坐标
s=v*TIME(1) //计算位移
if(x>=3 .AND. x<=7) then
if(y>s-0.5 .AND. y<=s) then
F=30
else
F=0
endif
else
F=0
endif
return
end
注:请不要直接复制粘贴!!!
如下图:加载子程序
等待运行结束:
欢迎指正