讲解了abaqus提供的用于定义复杂面荷载的子程序utracload,这个子程序可以用于定义随时间、位置、积分点变化的面荷载、线荷载。最终以一个悬臂梁受力为例讲解具体的使用方法,帖子末尾给出了具体的程序。
子程序的接口可以在官方文档找到,下面是具体的接口
SUBROUTINE UTRACLOAD(ALPHA,T_USER,KSTEP,KINC,TIME,NOEL,NPT,
1 COORDS,DIRCOS,JLTYP,SNAME)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION T_USER(3), TIME(2), COORDS(3), DIRCOS(3,3)
CHARACTER*80 SNAME
user coding to define ALPHA and T_USER
RETURN
END
下面逐一介绍这个子程序的参数
ALPHA是需要我们计算的数值,不包括符号,这个数值会传给abaqus主程序。
T_USER是一个定义荷载方向的向量,有三个数值分别代表x、y和z。
KSTEP和KINC分别是当前分析步数和增量步数。
TIME(1)TIME(2)分别是当前分析步时间和分析总时间。
NOEL是用户自定义单元编号,这个参数需要和另一个子程序uel联合使用。
NPT是积分点数。
COORDS是荷载积分点的初始坐标,注意不是节点的坐标,如果计算打开了几何非线性,则是当前荷载积分点的坐标。
DIRCOS这个参数我没有用过,不多说,怕误导读者。
JLTYP是荷载的类型,这个参数是和inp文件相对应的,具体的对应关系为 其中,LoadLabel是inp文件中的荷载类型,JTYPE是子程序中的参数。这个参数可用于荷载判断。
设计了悬臂梁算例,这个算例并没有输入非常复杂的面荷载,只是施加了简单的三角函数荷载,不采用子程序也可以施加这种荷载,目的是能够将子程序的计算结果与abaqus进行对比。如果采用子程序施加很复杂的荷载,就没办法与abaqus进行对比了。
悬臂梁一端固定,顶端与悬臂端施加三角函数荷载,边界条件与荷载示意图为 其中,顶面的名称定义为“yz”,代表着面荷载的方向为垂直于y面与z同向,悬臂端的名称定义为“zy”,代表着面荷载的方向为垂直于z面与y同向,这个名称在子程序中需要。
这里给顶端施加的荷载为 ,悬臂端施加的荷载为 。
经常读我帖子的朋友都知道,我不太喜欢在结果上面花太多时间,我一般都是直接把所有的计算文件放到帖子末尾,放不下的文件一般私信我获取就行。下面简单的放一些计算结果。
首先是2.5s时刻的位移对比
2.5s时刻的 对比 5s时刻的位移对比
5s时刻的 对比 10s时刻的位移对比
10s时刻的 对比
下面是详细的子程序文件和部分inp文件,因为inp太大了放不下,如果有需要的,直接私信我就行。
首先给出for文件,代码以注释的形式给出讲解。
SUBROUTINE UTRACLOAD(ALPHA,T_USER,KSTEP,KINC,TIME,NOEL,NPT,
1 COORDS,DIRCOS,JLTYP,SNAME)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION T_USER(3), TIME(2), COORDS(3), DIRCOS(3,3)
CHARACTER*80 SNAME
character*10 surfyzz,surfzzy
c 注意这里的字符串是大写,因为参数sname默认也是大写
c 我一开习惯性始认为fortran不区分大小写
c 结果卡了我一下午!!!!!!!!!!!!
surfyzz='SURF-Y-ZZ'
surfzzy='SURF-Z-ZY'
c user coding to define ALPHA and T_USER
c index函数用于检查字符串surfyzz是否在sname中
if(index(sname,surfyzz).gt.0)then
ALPHA=1e+06*SIN(TIME(1))
c 设置面荷载方向,这里的是沿着z轴正向
t_user(1)=0
t_user(2)=0.0
t_user(3)=1
c index函数用于检查字符串surfzzy是否在sname中
elseif(index(sname,surfzzy).gt.0)then
ALPHA=1e+06*COS(TIME(1))
c 设置面荷载方向,这里的是沿着y轴负向
t_user(1)=0
t_user(2)=-1
t_user(3)=0.0
endif
RETURN
END
下面是带有子程序的部分inp文件,不带子程序的文件就不占用篇幅了,如有需要直接私信我。
*Heading
** Job name: Job-1 Model name: Model-1
** Generated by: Abaqus/CAE 2020
*Preprint, echo=NO, model=NO, history=NO, contact=NO
**
** PARTS
**
*Part, name=Part-1
*Node
1, 10., 10., 20.
**省略节点坐标
......
396, 0., 0., 0.
*Element, type=C3D8
1, 67, 68, 74, 73, 1, 2, 8, 7
**省略单元
......
250, 389, 390, 396, 395, 323, 324, 330, 329
*Nset, nset=Set-1, generate
1, 396, 1
*Elset, elset=Set-1, generate
1, 250, 1
*Elset, elset=_surf-y-zz_S6, internal, generate
1, 246, 5
*Surface, type=ELEMENT, name=surf-y-zz
_surf-y-zz_S6, S6
*Elset, elset=_surf-z-zy_S3, internal
1, 2, 3, 4, 5, 51, 52, 53, 54, 55, 101, 102, 103, 104, 105, 151
152, 153, 154, 155, 201, 202, 203, 204, 205
*Surface, type=ELEMENT, name=surf-z-zy
_surf-z-zy_S3, S3
** Section: Section-1
*Solid Section, elset=Set-1, material=Material-1
,
*End Part
**
**
** ASSEMBLY
**
*Assembly, name=Assembly
**
*Instance, name=Part-1-1, part=Part-1
*End Instance
**
*Nset, nset=Set-1, instance=Part-1-1
61, 62, 63, 64, 65, 66, 127, 128, 129, 130, 131, 132, 193, 194, 195, 196
197, 198, 259, 260, 261, 262, 263, 264, 325, 326, 327, 328, 329, 330, 391, 392
393, 394, 395, 396
*Elset, elset=Set-1, instance=Part-1-1
46, 47, 48, 49, 50, 96, 97, 98, 99, 100, 146, 147, 148, 149, 150, 196
197, 198, 199, 200, 246, 247, 248, 249, 250
*End Assembly
*Amplitude, name=cosx, definition=PERIODIC
1, 1., 0., 0.
1., 0.
*Amplitude, name=sinx, definition=PERIODIC
1, 1., 0., 0.
0., 1.
**
** MATERIALS
**
*Material, name=Material-1
*Density
2000.,
*Elastic
1e+10, 0.25
** ----------------------------------------------------------------
**
** STEP: Step-1
**
*Step, name=Step-1, nlgeom=NO, inc=1000
*Dynamic,direct
0.01,10.,
**
** BOUNDARY CONDITIONS
**
** Name: fixed Type: Displacement/Rotation
*Boundary
Set-1, 1, 1
Set-1, 2, 2
Set-1, 3, 3
**
** LOADS
**
** Name: surf-y-zz Type: Surface traction
** 这里的关键字调用了utracload子程序
*Dsload
Part-1-1.surf-y-zz, TRSHRNU, 1., 0., 0., 1.
** Name: surf-z-zy Type: Surface traction
*Dsload
Part-1-1.surf-z-zy, TRSHRNU, 1., 0., -1., 0.
**
** OUTPUT REQUESTS
**
*Restart, write, frequency=0
**
** FIELD OUTPUT: F-Output-1
**
*Output, field, variable=PRESELECT, frequency=1
**
** HISTORY OUTPUT: H-Output-1
**
*Output, history, variable=PRESELECT, frequency=1
*End Step