ABAQUS学习记录1——用户子程序综述
概述
ABAQUS提供了相当丰富的单元类型,材料属性等数据库可供用户选择,但是工程问题是千变万化的,为了满足用户的特殊工程要求,ABAQUS为用户提供了强大而又灵活的用户子程序接口(USER SUBROUTINE)和应用程序接口(UTILITY ROUTINE)。用户可以利用子程序接口来编写自己想要实现的特殊功能,以此扩展ABAQUS的功能。ABAQUS 为用户提供了强大而又灵活的用户子程序接口(USER SUBROUTINE)和应用程序接口(UTILITY ROUTINE)。ABAQUS 6.2.5 一共有 42 个用户子程序接口,13 个应用程序接口,用户可以定义包括边界条件、荷载条件、接触条件、材料特性以及利用用户子程序和其它应用软件进行数据交换等等。这些用户子程序接口使用户解决一些问题时有很大的灵活性,同时大大的扩充了 ABAQUS 的功能。例如:如果荷载条件是时间的函数,这在 ABAQUS/CAE 和 INPUT 文件中是难以实现的,但在用户子程序 DLOAD 中就很容易实现。用户自定义子程序(User Subroutine)涵盖了建模、载荷到单元的几乎各个部分。
ABAQUS的用户子程序是根据ABAQUS提供的相应接口,按照FORTRAN语法而自己编写的代码。在一个算例中,用户可以用到多个用户子程序,但必须把它们放在一个以.FOR为扩展名的文件中。运行带有用户子程序的算例时有两种方法,一是在CAE中运行,在EDIT-JOB菜单的GENERAL子菜单的USER SUBROUTINE FILE对话框中选择用户子程序所在的文件即可;二是在ABAQUS COMMAND中运行,语法如下:ABAQUS JON=[JOB] USER=[.FOR]
编写子程序要注意的事项
- 用户子程序不能嵌套。即任何用户子程序都不能调用任何其他用户子程序,但可以调用用户自己编写的FORTRAN子程序和ABAQUS应用程序。当用户编写FORTRAN子程序时,建议子程序名以F开头,以免和ABAQUS内部程序冲突。
- 当用户子程序中利用OPEN打开外部文件时,要注意以下两点:一是设备号的选用是有限制的,只能取15-18和大于100的设备号。二是用户需提供外部文件的绝对路径而不是相对路径。
-ABAQUS应用程序必须由用户子程序调用。当用到某个用户子程序时,要关心的主要由两个方面:- 一是ABQUS提供的用户子程序的接口参数。有些参数是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)
参数:
- F 为用户定义的是每个积分点所作用的荷载的大小;
- KSTEP,KINC 为 ABAQUS 传到用户子程序当前的 STEP 和 INCREMENT 值;
- TIME(1),TIME(2)为当前 STEP TIME 和 INCREMENT TIME 的值;
- NOEL,NPT 为积分点所在单元的编号和积分点的编号;
- COORDS 为当前积分点的坐标;
- 除 F 外,所有参数的值都是 ABAQUS 传到用户子程序中的。
功能:
- 荷载可以被定义为积分点坐标、时间、单元编号和单元节点编号的函数。
- 用户可以从其他程序的结果文件中进行相关操作来定义积分点 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
B. 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 扩充功能的程序代码通过此用户子程序嵌入到 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 GETENVVAR('FNAME',XFNAME,LXFNAME) !读取 input 文件名
CALL GETENVVAR ('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 external file...'
WRITE(17,*)'Writing dummy data to this file...'
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
IF (LF.EQ.0.AND.FNAME(K1:K1).NE.' ') LF = K1 Home
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
CALL POSFIL (NSTEP,NINC,ARRAY,JRCD)
参数:
- NSTEP 和 NINC 的值都是由调用它的 URDFIL 用户子程序接口中的参数 KSTEP
和 KINC 传递下来。 - ARRAY 是用来存放 RECORD 2000 的值
- JRCD 为返回值。如果在结果文件中找到相应的 STEP 和 INCREMENT,返回值为0;否则为 1。
功能:
如果用户想要对某个STEP中的某个INCREMENT的结果数据进行操作,POSFIL
可定位用户想要进行操作的 STEP 和 INCREMENT 数据在结果文件中的位置。
CALL DBFILE (LOP,ARRAY,JRCD)
参数:
1.LOP 是用户自己定义的参数。LOP 设为 0 表示继续读下一条记录;LOP 设
为 2 表示文件已读到结尾后,又从头开始读起。
2.ARRAY 是用来存放从结果文件中读到的那条记录的数组。要用户注意的
是 ARRAY 数组的大小要能存放一条记录。
3.JRCD 是返回值,如果读到文件结尾,返回值为非 0 的整数。
功能:
读取结果文件中的一条记录。
如果想要熟练运用 SUBROUTINE URDFIL,那么用户必须对结果文件(.FIL)的格式有所了解。要让 ABAQUS 输出结果文件,用户必须在 INPUT 文件或 KEYWORD 中加入ELFILE 或着ELNODE。有些数据是 ABAQUS 自动写道结果文件中的,如 ABAQUS 的版- 号,节点编号和节点坐标;有些是用户用ELFILE 或着ELNODE定义的,比如应力、应变、节点位移等等。结果文件存放的是一条条的记录。为了区别不同的记录集,记录中有一项为RECORD KEY。不同的记录集,RECORD KEY 是不同的。比如节点坐标的记录集
(COORD)的 RECORD KEY 为 8;主应力(EP)的 RECORD KEY 为 403;用户可根据不同的 RECORD KEY 来分辨不同的记录集。每条记录包括好多个数据。每个记录是以*I 开头,数据中的实数是以 D 开头,输出格式为 E22.15 or D22.15;整数是以 I 开头,接着的数字为这个整数的位数,然后才是整数的值。字符数据以
A 开头。比如记录 *I 18I 41900I 15AS4R I 3195I 3198I 3205I 3204 这条记录第一项 18 表示这条记录一共有 8 个数据,1 为 8 的位数;第二项为 RECORD KEY其值为 1900,前面的 4 为 1900 的位数。第三项 5 表示是此单元编号,第四项 S4R
表示单元类型,剩余四项表示此单元四个节点的编号。
例 3:此程序是把结果文件中的每个节点的编号、坐标、速度和位移写到文件
F3.DAT
SUBROUTINE URDFIL(LSTOP,LOVRWRT,KSTEP,KINC,DTIME,TIME)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION ARRAY(513),JRRAY(NPRECD,513),TIME(2),LRUNIT(2,1)
1,COORD(3)
EQUIVALENCE (ARRAY(1),JRRAY(1,1))
CALL POSFIL(KSTEP,KINC,ARRAY,JRCD) ! 定位到当前的 STEP 和INCREMENT
OPEN(UNIT=17,FILE='G:\TEMP\F3.DAT') !打开文件
WRITE(17,*)KINC,KSTEP !把当前的 STEP 和 INCREMENT 输出到文件
DO 1000 K2=1,10
DO 100 K1=1,99999
C
CALL DBFILE(0,ARRAY,JRCD) !读入一条记录
IF(JRCD.NE.0)GO TO 110 !判断结果文件是否结束
KEY=JRRAY(1,2) !把 RECORD KEY 赋值于 KEY
C
IF(KEY.EQ.107) THEN !判断此条记录是否为节点坐标
KEL=JRRAY(1,3)
COORD(1)=ARRAY(4)
COORD(2)=ARRAY(5)
COORD(3)=ARRAY(6)
WRITE(17,120) KEL,COORD(1),COORD(2),COORD(3) !输出节点编号,坐标
120 FORMAT(5X,'NODE',I5,5X,'COORD',F20.14,5X,F20.14,5X,F20.14,5X)
ELSE IF(KEY.EQ.101)THEN !判断此条记录是否为位移
KEL=JRRAY(1,3)
COORD(1)=ARRAY(4)
COORD(2)=ARRAY(5)
COORD(3)=ARRAY(6)
WRITE(17,140) KEL,COORD(1),COORD(2),COORD(3)!输出节点编号,位移
140 FORMAT(5X,'NODE',I5,5X,'UCOORD',F20.14,5X,F20.14,5X,F20.14,5X)
ELSE IF(KEY.EQ.102)THEN !判断此条记录是否为速度
WRITE(17,130) ARRAY(3),ARRAY(4),ARRAY(5),ARRAY(6),ARRAY(7),
1 ARRAY(8),ARRAY(9) !输出节点编号,速度
130 FORMAT(5X,'NODE',I5,5X,'VELOVITY',F20.10,5X,F20.10,5X,F20.10,5X
1 ,F20.10,5X,F20.10,5X,F20.10,5X)
END IF
C
100 CONTINUE
1000 CONTINUE
110 CONTINUE
CLOSE(17) !关闭文件
RETURN
END
ABAQUS学习记录1——用户子程序综述的更多相关文章
- Abaqus用户子程序umat的学习
Abaqus用户子程序umat的学习 说明:在文件中,!后面的内容为注释内容.本文为学习心得,很多注释是自己摸索得到.如有不正确的地方,敬请指正. ! ------------------------ ...
- ABAQUS用户子程序一览表
说明 ABAQUS用户子程序一览表 ABAQUSStandard subroutines Refence 说明 本系列文章本人基本没有原创贡献,都是在学习过程中找到的相关书籍和教程相关内容的汇总和梳理 ...
- V4L2学习记录【转】
转自:http://blog.chinaunix.net/uid-30254565-id-5637600.html V4L2学习记录 这个还没有分析完,先在这放着,防止电脑坏掉丢了,以后再完善 V4L ...
- Python学习记录day7
目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
随机推荐
- 容器云未来:Kubernetes、Istio 和 Knative
导读 目前以Kubernetes为基础构建的容器生态逐渐完善,这其中Kubernetes.Istio.Knative三个独立项目被越来越多的人提及,并且已经开始尝试大规模落地实践,它们恰好构成了容器云 ...
- SCUT - 261 - 对称与反对称 - 构造 - 简单数论
https://scut.online/p/261 由于M不是质数,要用扩展欧几里得求逆元,而不是费马小定理! 由于M不是质数,要用扩展欧几里得求逆元,而不是费马小定理! 由于M不是质数,要用扩展欧几 ...
- sql server编写通用脚本自动检查两个不同服务器的新旧数据库的表结构差异
问题:工作过程中,不管是什么项目,伴随着项目不断升级版本,对应的项目数据库业务版本也不断升级,数据库出现新增表.修改表.删除表.新增字段.修改字段.删除字段等变化,如果人工检查,数据库表和字段比较多的 ...
- poj 3734 Blocks【指数型生成函数】
指数型生成函数,推一推可得: \[ (1+\frac{x^1}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+...)^2+(1+\frac{x^2}{2!}+\frac{x^4 ...
- 蒟蒻ACMer回忆录 · 一段弱校ACM的奋斗史
三年半的ACM生涯终于迎来了终点,退役之时,感慨万分,故写此文以纪念逝去的时光,那些为ACM拼搏的日子,那段弱校ACM的奋斗史. 三年半的ACM生涯,窝见证了CUMT从打铁到铜牌的突破,又见证了从铜牌 ...
- 本周学习总结(ng-zorro/MDN索引/读书笔记)
按钮 <button ng-button nzType="primary">Primary</button> nzType="" pri ...
- 1-docker基础
docker有三个基本概念:镜像/容器/仓库 镜像:一个完整的root文件系统,但并非一个iso的打包文件,而是使用分层存储.构建镜像时,是一层一层的.新的镜像,也可以在原有镜像上添加新层. 容器:是 ...
- Educational Codeforces Round 20 A
Description You are given matrix with n rows and n columns filled with zeroes. You should put k ones ...
- C++类成员函数与成员变量的内存布局
一.成员函数 成员函数可以被看作是类作用域的全局函数,不在对象分配的空间里,只有虚函数才会在类对象里有一个指针,存放虚函数的地址等相关信息.
- azkaban web ui界面出现异常诡异“丑”界面的问题解决(图文详解)
前期博客 启动azkaban时出现User xml file conf/azkaban-users.xml doesn't exist问题解决(图文详解) 问题详情 [hadoop@master co ...