目录 概述 讲解了abaqus提供的用于定义复杂面荷载的子程序utracload ,这个子程序可以用于定义随时间、位置、积分点变化的面荷载、线荷载。最终以一个悬臂梁受力为例讲解具体的使用方法,帖子末尾给出了具体的程序 。
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
来源:有限元先生