- 积分
- 1
- 注册时间
- 2007-9-23
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 windsun.typ 于 2012-12-14 19:10 编辑
子程序Disp的详细分析
SUBROUTINE DISP(U,KSTEP,KINC,TIME,NODE,NOEL,JDOF,COORDS)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION U(3),TIME(2),COORDS(3)
C
用户自己编写的子程序代码
RETURN
END
---------------------------------------
首先,要注意的是,在计算中,子程序在每一个step,每一个increment,每一次迭代中,
都非常有可能被多次调用,而不是只被调用一次。
---------------------------------------
子程序中的变量解释
U:传出(返回)的数组。如果是位移边界时,U(1),U(2),U(3)分别代表位移,速度,加速度
KSTEP:传入的参数,step的编号。例如是在第n个step时调用本子程序的,那么传入的KSTEP就是KSTEP=n
KINC:传入的参数,increment的编号。例如是在第n个step中的第m个increment时调用本子程序的,
那么传入的KINC就是KINC=m
TIME:传入的数组,代表目前计算的时刻。其中TIME(1)代表调用本子程序时,在KSTEP中的时刻值;
而TIME(1)代表调用本子程序时,在总计算时间(包括前面所有已计算step的时长)中的时刻值
NODE:传入的参数,节点编号。计算中,Disp这个子程序不是循环所有节点的,而是从inp文件中指定的
节点集合中进行循环。例如,在inp中,调用Disp的语句为
*Boundary, user
BCNODES-LEFT, 8, 8
那么,节点的循环就在BCNODES-LEFT中进行,即只取BCNODES-LEFT中的节点作为NODE的参数值传递
入子程序中。另外,要注意的是,如果BCNODES-LEFT这个节点集合中的个别节点A已在前面的计算中
被定义了边界条件,则上述两句对A不起作用。例如上述的两句命令是定义孔压的,BCNODES-LEFT包
括编号为1,2,3,4的四个节点,其中节点2已经在更前面的部分被定义了零孔压,则这里的子程序对于
节点2是不起作用的,NODE=2时子程序不会被调用,传递进子程序的NODE参数也不会包括2这个值。
NOEL:传入的参数,单元编号。在举例的这个命令里
*Boundary, user
BCNODES-LEFT, 8, 8
限制循环范围的是节点集合BCNODES-LEFT而不是单元集合,单元编号NOEL没有被传递进来,所以NOEL
没被赋值,NOEL会一直等于零(已测试)。至于其他的情况下,NOEL的参数值是否会被传入来,则尚未
清除,可能当指定单元集合时,NOEL会被传递进来(可能)
JDOF:传入的参数,要被设置边界条件的自由度编号。在举例的这个命令里
*Boundary, user
BCNODES-LEFT, 8, 8
要被设置边界条件的自由度编号是8,代表孔压。所以,每一次调用子程序时传递进来的JDOF的参数
值都是8,没有其他值。这里8, 8代表从编号为8的自由度到编号为8的自由度,即仅仅取8。另外,
编号为1,2,3的自由度分别代表x,y,z方向的位移。具体可看manual的"convention"部分。
COORDS:传入的数组,指编号为NODE的节点的坐标。其中,COORDS(1),COORDS(2),COORDS(3)分别代表节点
x,y,z坐标。值得注意的是,这里可以考虑大变形的影响。
|
评分
-
1
查看全部评分
-
|