Home
浅谈ABAQUS用户子程序
李青清华大学工程力学系
摘要本文首先概要介绍了ABAQUS的用户子程序和应用程序,然后从参数,功能两方面详细论述了DLOAD, UEXTERNALDB, URDFIL三个用户子程序和GETENVVAR,POSFIL,DBFILE三个应用程序,并详细介绍了ABAQUS的结果文件(.FIL)存储格式。
关键字ABAQUS,用户子程序,应用程序,结果文件
一、前言:
ABAQUS为用户提供了强大而又灵活的用户子程序接口(USER SUBROUTINE)和应用程序接口(UTILITY ROUTINE)。ABAQUS 6.2.5一共有42个用户子程序接口,13个应用程序接口,用户可以定义包括边界条件、荷载条件、接触条件、材料特性以及利用用户子程序和其它应用软件进行数据交换等等。这些用户子程序接口使用户解决一些问题时有很大的灵活性,同时大大的扩充了ABAQUS的功能。例如:如果荷载条件是时间的函数,这在ABAQUS/CAE 和INPUT 文件中是难以实现的,但在用户子程序DLOAD中就很容易实现。
二.在ABAQUS中使用用户子程序
ABAQUS的用户子程序是根据ABAQUS提供的相应接口,按照FORTRAN语法用户自己编写的代码。在一个算例中,用户可以用到多个用户子程序,但必须把它们放在一个以.FOR为扩展名的文件中。运行带有用户子程序的算例时有两种方法,一是在CAE中运行,在EDIT JOB菜单的GENERAL子菜单的USER SUBROUTINE FILE对话框中选择用户子程序所在的文件即可;另外是在ABABQUS COMMAND用运行,语法如下:
ABAQUS JOB=[JOB] USER¡[.FOR]¡C
用户在编写用户子程序时,要注意以下几点:
1.用户子程序不能嵌套。即任何用户子程序都不能调用任何其他用户子程
Home
序,但可以调用用户自己编写的FORTRAN子程序和ABAQUS应用程序。当用户编写FORTRAN子程序时,建议子程序名以K开头,以免和ABAQUS内部程序冲突。
2.当用户在用户子程序中利用OPEN打开外部文件时,要注意以下两点:一是设备号的选择是有限制的,
只能取15-18和大于100的设备号,其余的都已被ABAQUS占用。二是用户需提供外部文件的绝对路径而不是相对路径。
3.ABAQUS 应用程序必须由用户子程序调用。
当用到某个用户子程序时,用户所关心的主要有两方面:一是ABAQUS提供的用户子程序的接口参数。有些参数是ABAQUS传到用户子程序中的,例如SUBROUTINE DLOAD中的KSTEP,KINC,COORDS;有些是需要用户自己定义的,例如F。二是ABAQUS何时调用该用户子程序,对于不同的用户子程序ABAQUS调用的时间是不同的。有些是在每个STEP的开始,有的是STEP结尾,有的是在每个INCREMENT的开始等等。当ABAQUS调用用户子程序是,都会把当前的STEP和INCREMENT利用用户子程序的两个实参KSTEP和KINC传给用户子程序,用户可编个小程序把它们输出到外部文件中,这样对ABAQUS何时调用该用户子程序就会有更深的了解。
下面就选出几个常用的用户子程序和应用程序进行详细解释:一.SUBROUTINE
DLOAD(F,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS, JLTYP,SNAME) 参数:
1.F为用户定义的是每个积分点所作用的荷载的大小;
2. KSTEP,KINC为ABAQUS传到用户子程序当前的STEP和INCREMENT值;3. TIME(1),TIME(2)为
当前STEP TIME和INCREMENT TIME的值;
4. NOEL,NPT为积分点所在单元的编号和积分点的编号;
5. COORDS为当前积分点的坐标;
6.除F外,所有参数的值都是ABAQUS传到用户子程序中的。
功能:
1.荷载可以被定义为积分点坐标、时间、单元编号和单元节点编号的函数。
Home
2.用户可以从其他程序的结果文件中进行相关操作来定义积分点F的大小。
例1:这个例子在每个积分点施加的荷载不仅是坐标的函数,而且是随STEP 变化而变化的。
SUBROUTINE DLOAD(P,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS,
1 JLTYP,SNAME)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION TIME(2),COORDS(3)
CHARACTER*80 SNAME
PARAMETER (PLOAD=100.E4)
C
IF (KSTEP.EQ.1) THEN !当STEP=1时的荷载大小
P=PLOAD
ELSE IF (KSTEP.EQ.2) THEN !当STEP=2时的荷载大小
P=COORDS(1)*PLOAD !施加在积分点的荷载P是坐标的函数
调用子程序的例子
ELSE IF (KSTEP.EQ.3) THEN !当STEP=3时的荷载大小
P=COORDS(1)**2*PLOAD
ELSE IF (KSTEP.EQ.4) THEN !当STEP=4时的荷载大小
P=COORDS(1)**3*PLOAD
ELSE IF (KSTEP.EQ.5) THEN !当STEP=5时的荷载大小
P=COORDS(1)**4*PLOAD
END IF
RETURN
END
二. UBROUTINE UEXTERNALDB(LOP,LRESTART,TIME,DTIME,KSTEP,KINC) 参数:
用户可以利用LOP开关来控制自己的代码程序何时被ABAQUS调用。LOP=0(3)表示在计算的开始(
结束)ABAQUS调用此用户子程序;LOP=1 (2) 表示在每个INCREMENT的开始(结束)ABAQUS调用此用户子程序;LOP了=4 表示在每个RESTART的开始ABAQUS调用此用户子程序。这为用户子程序提供了很大的灵活性。
功能:
1.可以用来和其它用户子程序及其它软件进行数据通讯。
2.可以用来在适当的时间打开,关闭外部文件。
3.用户可以把自己编写的ABAQUS扩充功能的程序代码通过此用户子程序嵌
Home 入到ABAQUS中。
例2.新建一个与JOB名相同但扩展名(.ALE)不同的文件,此用户子程序用到了GETENVVAR应用程序来获得ABAQUS的环境变量,用DMKNAME子程序来合成所需的文件名。
SUBROUTINE UEXTERNALDB(LOP,LRSTART,TIME,DTIME,KSTEP,KINC)
INCLUDE 'ABA_PARAM.INC'
CHARACTER XINDIR*255,XFNAME*80
CHARACTER DMKNAME*255,FNAMEX*80
C
LXFNAME=0
LXINDIR=0
XFNAME =' '
XINDIR =' '
CALL GETENVV AR('FNAME',XFNAME,LXFNAME) !读取input文件名
CALL GETENVV AR ('OUTDIR',XINDIR,LXINDIR) !读取input文件所在的路径IF(LOP.EQ.0) THEN
FNAMEX=DMKNAME(XFNAME(1:LXFNAME),XINDIR(1:LXINDIR), '.ALE')
!生成所要新建文件的文件名
OPEN(UNIT=17,FILE=FNAMEX,STATUS='UNKNOWN',FORM='FORMATTED')
!打开文件
WRITE(17,*)'Opening new user '
WRITE(17,*)'Writing dummy data to '
END IF
RETURN
END
c
C COMPOSE A FILENAME DIRECTORY/JOBNAME.EXTEN
CHARACTER*(*) FUNCTION DMKNAME(FNAME,DNAME,EXTEN)
C
CHARACTER*(*) FNAME,DNAME,EXTEN
C FNAME I JOBNAME
C DNAME I DIRECTORY
C EXTEN I EXTENSION
C DMKNAME O DIRECTORY/JOBNAME.EXTEN
LTOT = LEN(FNAME)
LF = 0
DO K1 = LTOT,2,-1
Home
IF (LF.EQ.0.AND.FNAME(K1:K1).NE.' ') LF = K1
END DO
LTOT = LEN(DNAME)
LD = 0
DO K1 = LTOT,2,-1
IF (LD.EQ.0.AND.DNAME(K1:K1).NE.' ') LD = K1
END DO
LTOT = LEN(EXTEN)
LE = 0
DO K1 = LTOT,2,-1
IF (LE.EQ.0.AND.EXTEN(K1:K1).NE.' ') LE = K1
END DO
IF ((LF + LD + LE) .LE. LEN(DMKNAME)) THEN
DMKNAME = DNAME(1:LD)//FNAME(1:LF)
LTOT = LD + LF
IF ( LE.GT.0) THEN
DMKNAME = DMKNAME(1:LTOT)//EXTEN(1:LE)
END IF
END IF
C
RETURN
END
三.SUBROUTINE URDFIL (LSTOP,LOVRWRT,KSTEP,KINC,DTIME,TIME)
参数:
1. LSTOP是决定ABAQUS分析是否继续的开关。如果LSTOP=1,分析中止;
否则,分析继续。
2. LOVRWRT是决定能否把上个INCREMENT的结果文件覆盖的开关。
LOVRWRT=1,覆盖,这样可大大减少结果文件的大小;否则,不覆盖。3. LSTEP和LOVRWRT参数是留给用户自己定义的,KSTEP,KINC,DTIME,TIME是ABAQUS传给用户子程序的参数。
功能:
1.读结果文件(.FIL)中的数据。
2.利用LSTOP开关,用户可中止ABAQUS计算
URDFIL要用到以下两个ABAQUS应用程序:POSFIL和DBFILE
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论