ABAQUS DISP二次开发(一)
浏览:3408 评论:22 收藏:28
1. 简介
定义复杂位移条件的子程序,可用于定义例如随时间和空间(坐标)同时变化的位移,随节点编号变化的位移等。
用于定义使用了User-defined的边界条件或连接运动的大小;
用户子程序定义的边界条件或连接运动定义中定义的所有自由度均会调用该子程序;
2. 子程序接口
SUBROUTINE DISP(U,KSTEP,KINC,TIME,NODE,NOEL,JDOF,COORDS)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION U(3),TIME(3),COORDS(3)
C
user coding to define U
RETURN
END
说明:
子程序在执行的过程中,遍历边界条件上的每个节点,遍历每个节点上的自由度约束,每个约束均执行一次子程序。变量NODE用于辨识节点、JDOF用于辨识自由度编号。
如果在边界条件定义时,输入了预定义值,那个程序执行过程中会将该值传入子程序。如果子程序不修改该值,那么abaqus会按照默认方式处理该约束条件。如果没有输入预定义值,那么子程序必须对其赋值,否则报错或者赋0值。
3. 变量
需要被定义的变量:
U(1)
需要定义的荷载变量,包括位移、孔隙压力、温度等。U(1)被传入时可以是预先在荷载设置中定义好的值,也可以是默认值(一般情况下默认为0)。如果荷载定义中多个变量使用了User-defined,那么程序会按照自由度的编号顺序,编列每一个自由度,每一次遍历都执行一次子程序,U(1)即代表该自由度。
如果程序需要规定变量的偏微分,例如在动态分析中的速度、加速度等,du/dt必须在U(2)中定义,d2u/dt2在U(3)中定义。执行过程与U(1)类似。
被传入的变量
名称 | 描述 |
---|---|
KSTEP | 分析步编号 |
KINC | 增量步编号 |
TIME(1) | 当前分析步值中的时间 |
TIME(2) | 当前总的分析时间 |
TIME(3) | 当前时间增量 |
NODE | 节点编号 如果子程序被用于描述连接运动或者接触运动,该变量不可用 |
NOEL | 单元编号 如果子程序被用于描述边界条件,该变量不可用 |
JDOF | 当前传入变量的自由度编号 |
COORDS | 荷载点当前坐标;如果考虑几何非线性,该值是上一个增量步结束时的值;否则是原始的节点坐标值;如果子程序被用于描述连接运动或接触运动,该变量不可用 |
4. 实例
建立一个长为10,横截面为矩形的梁,截面高宽均为0.1,材料属性为线弹性,E=2.06e5,v=0.3。梁两端均施加全约束,梁体本身采用DISP定义约束。划分100个单元。模型如下图所示:
使用如下代码实现,一个三角波传输的过程。
SUBROUTINE DISP(U,KSTEP,KINC,TIME,NODE,NOEL,JDOF,COORDS)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION U(3),TIME(3),COORDS(3)
Real*8 xx
C
xx = KINC * 0.07
IF (COORDS(1)>=xx) then
U(1) = 0
else if ( COORDS(1)<xx .AND. COORDS(1)>= xx-1 ) then
U(1) = 0.5 * (xx-COORDS(1))
else if (COORDS(1)< xx-1 .and. COORDS(1)>=xx-2) then
U(1) = 0.5 * (COORDS(1)-xx+2)
else
U(1) = 0.0
end if
if (NODE == 1 .or. NODE == 101) then
U(1) = 0
end if
RETURN
END
计算结果如下:

技术邻APP
工程师必备
工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP

28
22
28