当前位置:文档之家› ABAQUS子程序

ABAQUS子程序

ABAQUS子程序
ABAQUS子程序

ABAQUS用户子程序

当用到某个用户子程序时,用户所关心的主要有两方面:一是ABAQUS提供的用户子程序的接口参数。有些参数是ABAQUS传到用户子程序中的,例如SUBROUTINE DLOAD中的KSTEP,KINC,COORDS;有些是需要用户自己定义的,例如F。二是ABAQUS何时调用该用户子程序,对于不同的用户子程序ABAQUS调用的时间是不同的。有些是在每个STEP的开始,有的是STEP结尾,有的是在每个INCREMENT的开始等等。当ABAQUS调用用户子程序是,都会把当前的STEP和INCREMENT利用用户子程序的两个实参KSTEP和KINC传给用户子程序,用户可编个小程序把它们输出到外部文件中,这样对ABAQUS何时调用该用户子程序就会有更深的了解。

(子程序中很重要的就是要知道由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.荷载可以被定义为积分点坐标、时间、单元编号和单元节点编号的函数。

2.用户可以从其他程序的结果文件中进行相关操作来定义积分点F的大小。

例1:这个例子在每个积分点施加的荷载不仅是坐标的函数,而且是随STEP变化而变化的。SUBROUTINE DLOAD(P,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS,

1 JLTYP,SNAME)

INCLUDE 'ABA_PARAM.INC' C

DIMENSION TIME(2),COORDS(3)

CHARACTER*80 SNAME

PARAMETER (PLOAD=100.E4)

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

UMAT 子程序具有强大的功能,使用UMAT 子程序:

(1) 可以定义材料的本构关系,使用ABAQUS 材料库中没有包含的材料进行计算,扩充程序功能。

(2) 几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋予ABAQUS 中的任何单元;

(3) 必须在UMAT 中提供材料本构模型的雅可比(Jacobian)矩阵,即应力增量对应变增量的变化率。

(4) 可以和用户子程序“USDFLD”联合使用,通过“USDFLD”重新定义单元每一物质点上传递到UMAT 中场变量的数值。

由于主程序与UMAT 之间存在数据传递,甚至共用一些变量,因此必须遵守有关UMAT 的书写格式,UMAT 中常用的变量在文件开头予以定义,通常格式为:

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,

1 RPL,DDSDDT,DRPLDE,DRPLDT,

2 STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,

3 NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT,

4 CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC)

INCLUDE 'ABA_PARAM.INC'

CHARACTER*80 CMNAME

DIMENSION STRESS(NTENS),STATEV(NSTATV),

1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS),

2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1),

3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)

user coding to define DDSDDE, STRESS, STATEV, SSE, SPD, SCD

and, if necessary, RPL, DDSDDT, DRPLDE, DRPLDT, PNEWDT

RETURN

END

UMAT 中的应力矩阵、应变矩阵以及矩阵DDSDDE ,DDSDDT ,DRPLDE 等,都是直接分量存储在前,剪切分量存储在后。直接分量有NDI 个,剪切分量有NSHR 个。各分量之间的顺序根据单元自由度的不同有一些差异,所以编写UMAT 时要考虑到所使用单元的类别。下面对UMAT 中用到的一些变量进行说明:

DDSDDE(NTENS,NTENS)

是一个NTENS 维的方阵,称作雅可比矩阵,,是应力的增量,是应变的增量,DDSDDE(I,J)表示增量步结束时第J 个应变分量的改变引起的第I 个应力分量的变化。通常雅可比是一个对称矩阵,除非在“*USER MATERIAL”语句中加入了“UNSYMM”参数。

STRESS (NTENS)

应力张量矩阵,对应NDI 个直接分量和NSHR 个剪切分量。在增量步的开始,应力张量矩阵中的数值通过UMAT 和主程序之间的接口传递到UMAT 中,在增量步的结束UMAT 将对应力张量矩阵更新。对于包含刚体转动的有限应变问题,一个增量步调用UMAT 之前就已经对应力张量的进行了刚体转动,因此在UMAT 中只需处理应力张量的共旋部分。UMAT 中应力张量的度量为柯西(真实)应力。

STATEV (NSTATEV)

用于存储状态变量的矩阵,在增量步开始时将数值传递到UMAT 中。也可在子程序USDFLD或UEXPAN 中先更新数据,然后增量步开始时将更新后的数据传递到UMAT 中。在增量步的结束必须更新状态变量矩阵中的数据。和应力张量矩阵不同的是:对于有限应变问题,除了材料本构行为引起的数据更新以外,状态变量矩阵中的任何矢量或者张量都必须通过旋转来考虑材料的刚体运动。

状态变量矩阵的维数,等于关键字“*DEPVAR”定义的数值。状态变量矩阵的维数通过ABAQUS 输入文件中的关键字“*DEPVAR”定义,关键字下面数据行的数值即为状态变量矩阵的维数。

材料常数的个数,等于关键字“*USER MATERIAL”中“CONSTANTS”常数设定的值。

PROPS (NPROPS)

材料常数矩阵,矩阵中元素的数值对应于关键字“*USER MATERIAL”下面的数据行。

SSE ,SPD ,SCD

分别定义每一增量步的弹性应变能,塑性耗散和蠕变耗散。它们对计算结果没有影响,仅仅作为能量输出。其他变量:

STRAN( NTENS) :应变矩阵;

DSTRAN( NTENS) :应变增量矩阵;

DTIME :增量步的时间增量;

NDI :直接应力分量的个数;

NSHR :剪切应力分量的个数;

NTENS :总应力分量的个数,NTENS NDI NSHR = + 。

使用UMAT 时需要注意单元的沙漏控制刚度和横向剪切刚度。通常减缩积分单元的沙漏控制刚度和板、壳、梁单元的横向剪切刚度是通过材料属性中的弹性性质定义的。这些刚度基于材料初始剪切模量的值,通常在材料定义中通过“*ELASTIC”选项定义。但是使用UMAT 的时候,ABAQUS 对程序输入文件进行预处理的时候得不到剪切模量的数值。所以这时候用户必须使用“*HOURGLASS STIFFNESS” 选项来定义具有沙漏模式的单元的沙漏控制刚度,使用“*TRANSVERSE SHEAR STIFFNESS”选项来定义板、壳、梁单元的横向剪切刚度。

几个关于子程序的问题及相应解答

Q: 本人在用umat作本构模型时,

*static,

1,500,0.000001,0.1 此时要求的增量步很多,即每次增量要很小,

*static

1,500 时,在弹性向塑性过度时,出现错误,增量过大,出现尖点.?

A: YOU CAN TRY AS FOLLOWS:

*STEP,EXTRAPOLATION=NO,INC=2000000

*STATIC

0.001,500.0,0.00001,0.1。

Q: 在abaqus中,如果采用umat,利用自己的本构,如何让abaqus明白这种材料的弹塑性应

变,也就是说,如何让程序返回弹性应变与塑性应变,好在output中输出,我曾想用最笨

地方法,在uvarm中定义输出,利用getvrm获取材料点的值,但无法获取增量应力,材料常

数等,研究了帮助中的例子,umatmst3.inp,umatmst3.for,他采用mises J2 流动理论,我

在output history 显示他已进入塑性状态,但他的PE仍然为0!!?

A: 用uvar( )勉强成功。

Q: 偶在umat中调用求主应力函数

CALL SPRINC(STRESS,PS,LSTR,NDI,NSHR)

后,存储主应力得数组PS中

各个主应力排列顺序是什么?

PS1>PS2>PS3 ?

PS1

PS1>PS3>PS2 ?

A: 第二个。

个人觉得:

umat实现自己的本构没有固定的方法,对于不同的本构有可能必须采用不同的方法。这要

靠自己不断地摸索。有可能一种方法对于简单加载问题还行,但有可能对于复杂问题并不

收敛。最重要一点,就是umat中采用的算法必须consistent.再就是ddsdde必须正确,(如

果采用back_Euler 方法等一些算法,ddsdde错误有时不影响结果(对于简单加载问题没有

影响,能收敛,),但对于复杂问题不收敛。

uptonow,你这个算法对于Mises,hill,J2,J2d等一类的屈服函数是正确的,但具体的本构

还要灵活运用,这我也正学习,正在摸索。

有时,umat需要很强的有限元基础,并且对采用的本构要很熟悉,不要在一颗树上吊死才

好。首先要确认自己的umat没有错误,如果没有,但就是不收敛(在不断减小加载步长的

情况下,当然最好对步长不敏感,特别是对于粘弹性,粘塑性,内变量一类的材料,有的

本构取决于背应力的计算)。那就应该考虑换一种算法。

一点体会,请大家探讨。

Q: abaqus-uamt的老问题,缺少'ABA_PARAM.INC'文件?

A: 在cvf6.5调试时,显示缺少'ABA_PARAM.INC'文件!

这个没有任何关系的,这个错误将在ABAQUS调用UMAT的时候自动会找到,仅仅有这个错误

将没有任何影响的。也就是说,ABAQUS中调用的时候,实际并不存在这个错误。FT,忘了

说一句了,你把ABA_PARAM.INC.dp或ABA_PARAM.INC.sp拷到你的程序工作空间后,应该将

把ABA_PARAM.INC.dp或ABA_PARAM.INC.sp的后缀.sp或.dp去掉,即将ABA_PARAM.IN C.dp 或

ABA_PARAM.INC.sp改名为ABA_PARAM.INC。

呵呵,他的意思是在Visual Fortran中调试其子程序,我觉得这是一个好办法,我当时也

是这麽办的,毕竟在ABAQUS中调试是非常麻烦的,只有当你的UMAT没有语法或者明显的逻

辑错误,你在ABAQUS中调试才能事半功倍。

Q:uvarm可以输出到哪里?.odb可以么?

另外那个strav??就是自己定义用于umat的那个数组里的数可以输出到.odb里么?

A:在umat中,statev是不能用在output中的,statev只是作为一个解的

状态变量,说来惭愧,我是在umat中定义peeq,(peeq)的求解一般在

弹塑性力学书上有(等效塑性应变),用write()写入一个临时文件,

((切记:这个文件unit号不要与abaqus中的重合,因为他有一些系统默认

的文件号,))

然后在uvarm中读取,以uvarm输出,因为uvarm可以以odb的形式输出,

支持output,field,output,history

Q:在本版看了一个一维固结的例子,其中含有用户子程序,如下

SUBROUTINE UFIELD(FIELD,KFIELD,NSECPT,KSTEP,KINC,TIME,NODE,

COORDS,TEMP,DTEMP)

INCLUDE 'ABA_PARAM.INC'

DIMENSION FIELD(NSECPT),TIME(2),COORDS(3),TEMP(NSECPT), DTEMP(NSECPT)

KFIELD=1

FIELD(1)=COORDS(2)

RETURN

END

我在VF6.5中进行调试,提示找不到ABA_PARAM.INC

请问大侠这如何解决。

还有我因为是初次接触用户子程序,我查阅了本版所有的相关贴子,都讲的不太详细,我将问题总结一下,大侠们能不能详细的讲解一下,

1子程序格式(程序后缀是.f; .f90; .for;.obj??)

2CAE中如何调用,command下如何调用?

3若有多个子程序同时存在,如何处理

4我对VF不是很熟,是否可以用VC,C++编写子程序?

A: 若要在vf中调试,那么应该根据需要把SITE文件夹中的ABA_PARAM_DP.INC(双精度)或ABA_PARAM_SP.INC(单精度)拷到相应的位置,并改名为ABA_PARAM.INC即可。

1。我试过,.for格是应该是不可以的,至少6.2和6.3版本应该是不行,其他的没用过,没有发言权。在Abaqus中,运行abaqus j=jobname user=username时,默认的用户子程序后缀名是.for(.f,.f90应该都不行的,手册上也有讲过),只有在username.for文件没有找到的情况下,才会去搜索username.obj,如果两者都没有,就会报错误信息。

如果username包括扩展名for或obj,那么就根据各自的扩展名ABAQUS会自动选择进行操作。

2。cae中在creat job的job manager中的general中可以指定子程序;command下用命令:abaqus j=jobnam e user=userfilenam e (无后缀);

3。将其写在一个文件中即可,然后用一个总的子程序调用(具体参见手册)

4。据说6.4的将可以,6.3的你可以尝试着将VC,C++程序编译为obj文件,没试过。

在你的工作目录下应该已经存在ufield.obj和uvarm.obj这两个文件(这两个文件应该是你分别单独调试ufield.FOR和uvarm.FOR时自动编译生成的,你可以将他们删掉试试看),但是由于你的FOR文件中已经有了UVARM和UFIELD这两个subroutine,显然会造成重复定义,请查实。

Q: 假定采用mises屈服准则。

1 在调用UMAT之前,ABAQUS传递给UMAT本次增量开始时的应力sigma(0),总应变E,应变增

量delta(E)。

状态变量保存:弹性应变,塑性应变,等效塑性应变。

(请问,状态变量保存的弹性应变+塑性应变是否等于ABAQUS传递给UMAT的总应变???

??)

2,然后在UMAT中利用上述的ABAQUS传递的量和状态变量得到DDSDDE矩阵,然后返回给ABAQUS,ABAQUS根据delta(sigm a)=ddsdde*delta(E),并且得到本次增量结束时的应力

sigma(1)=sigma(0)+delta(sigma)=sigma(0)+ddsdde*delta(E)

3 然后更新本次增量结束时的状态变量:弹性应变,塑性应变,等效塑性应变以供下次调

用UMAT

请问手册上UMAT必须更新应力,可是根据上述我的理解好像是ABAQUS根据UMAT提供的本

次增量的DDSDDE在ABAQUS中更新,请问到底是怎么回事?谢谢!

A: 1 在调用UMAT之前,ABAQUS传递给UMAT本次增量开始时的应力sigma(0),总应变E,应..

: 量delta(E)。

: 状态变量保存:弹性应变,塑性应变,等效塑性应变。

2,然后在UMAT中利用上述的ABAQUS传递的量和状态变量得到DDSDDE矩阵,然后返回给

: ABAQUS,ABAQUS根据delta(sigma)=ddsdde*delta(E),并且得到本次增量结束时的应力

3 然后更新本次增量结束时的状态变量:弹性应变,塑性应变,等效塑性应变以供下

以上有些answers本人并没有亲自证实,如有问题请及时更正!

abaqus学习经验

第一章 ABAQUS 简介

[1] (pp7)在[开始] →[程序] →[ABAQUS 6.5-1]→[ABAQUS COMMAND],DOS 提示符下输入命令

Abaqus fetch job =

可以提取想要的算例input 文件。

第二章 ABAQUS 基本使用方法

[2](pp15)快捷键:Ctrl+Alt+左键来缩放模型;Ctrl+Alt+中键来平移模型;Ctrl+Alt+右键来旋转模型。

②(pp16)ABAQUS/CAE 不会自动保存模型数据,用户应当每隔一段时间自己保存模型以避免意外

丢失。

[3](pp17)平面应力问题的截面属性类型是Solid(实心体)而不是Shell(壳)。ABAQUS/CAE 推荐的建模方法是把整个数值模型(如材料、边界条件、载荷等)都直接定义在几

何模型上。

载荷类型Pressure 的含义是单位面积上的力,正值表示压力,负值表示拉力。

[4](pp22)对于应力集中问题,使用二次单元可以提高应力结果的精度。

[5](pp23)Dismiss 和Cancel 按钮的作用都是关闭当前对话框,其区别在于:前者出现在包含只读数

据的对话框中;后者出现在允许作出修改的对话框中,点击Cancel 按钮可关闭对话框,而不保存

所修改的内容。

[6](pp26)每个模型中只能有一个装配件,它是由一个或多个实体组成的,所谓的“实体”(instance)

是部件(part)在装配件中的一种映射,一个部件可以对应多个实体。材料和截面属性定义在部件

上,相互作用(interaction)、边界条件、载荷等定义在实体上,网格可以定义在部件上或实体上,

对求解过程和输出结果的控制参数定义在整个模型上。

[7](pp26) ABAQUS/CAE 中的部件有两种:几何部件(native part)和网格部件(orphan mesh part)。

创建几何部件有两种方法:(1)使用Part 功能模块中的拉伸、旋转、扫掠、倒角和放样等特征来直

接创建几何部件。(2)导入已有的CAD 模型文件,方法是:点击主菜单

File→Import→Part。网

格部件不包含特征,只包含节点、单元、面、集合的信息。创建网格部件有三种方法:(1)导入

ODB 文件中的网格。(2)导入INP 文件中的网格。(3)把几何部件转化为网格部件,方法是:进

入Mesh 功能模块,点击主菜单Mesh→Create Mesh Part。

[8](pp31)初始分析步只有一个,名称是initial,它不能被编辑、重命名、替换、复制或删除。在初

始分析步之后,需要创建一个或多个后续分析步,主要有两大类:(1)通用分析步(general analysis

step)可以用于线性或非线性分析。常用的通用分析步包含以下类型:—Static, General: ABAQUS/Standard 静力分析

—Dynamics, Implicit: ABAQUS/Standard 隐式动力分析

—Dynamics, Explicit: ABAQUS/ Explicit 显式动态分析

(2)线性摄动分析步(linear perturbation step)只能用来分析线性问题。在ABAQUS/Explicit 中

不能使用线性摄动分析步。在ABAQUS/Standard 中以下分析类型总是采用线性摄动分析步。

—Buckle: 线性特征值屈曲。

—Frequency: 频率提取分析。

—Modal dynamics: 瞬时模态动态分析。

—Random response: 随机响应分析。

—Response spectrum: 反应谱分析。

—Steady-state dynamics: 稳态动态分析。

[9](pp33)在静态分析中,如果模型中不含阻尼或与速率相关的材料性质,“时间”就没有实际的物

理意义。为方便起见,一般都把分析步时间设为默认的1。每创建一个分析步,ABAQUS/CAE 就

会自动生成一个该分析步的输出要求。

[10] (pp34)自适应网格主要用于ABAQUS/Explicit 以及ABAQUS/Standard 中的表面磨损过程

模拟。在一般的ABAQUS/Standard 分析中,尽管也可设定自适应网格,但不会起到明显的作用。

Step 功能模块中,主菜单Other→Adaptive Mesh Domain 和Other→Adaptive Mesh Controls 分别

设置划分区域和参数。

[11](pp37)使用主菜单Field 可以定义场变量(包括初始速度场和温度场变量)。有些场变量与分

析步有关,也有些仅仅作用于分析的开始阶段。使用主菜单Load Case 可以定义载荷状况。载荷状

况由一系列的载荷和边界条件组成,用于静力摄动分析和稳态动力分析。[12](pp42)独立实体是对部件的复制,可以直接对独立实体划分网格,而不能对相应的部件划分

网格。非独立实体是部件的指针,不能直接对非独立实体划分网格,而只能对相应的部件划分网格。

由网格部件创建的实体都是非独立实体。

[13](pp45)Quad 单元(二维区域内完全使用四边形网格)和Hex 单元(三维区域内完全使用六

面体网格)可以用较小的计算代价得到较高的精度,因此应尽可能选择这两种单元。

[14](pp45)结构化网格和扫掠网格一般采用Quad 单元和Hex 单元,分析精度相对较高。因此优

先选用这两种划分技术。使用自由网格划分技术时,一般来说,节点的位置会与种子的位置相吻

合。使用结构化网格和扫掠网格划分技术时,如果定义了受完全约束的种子,划分可能失败。

[15](pp45)划分网格的两种算法:

中性轴算法(Medial Axis):

(1)中性轴算法(Medial Axis)更易得到单元形状规则的网格,但网格与种子的位置吻合得较差。

(2)在二维区域中,使用此算法时选择Minimize the mesh transition(最小化网格的过渡)可提

高网格质量,但更容易偏离种子。当种子布置得较稀疏时,使用中性轴算法得到的单元形状更规则。

(3)如果在模型的一部分边上定义了受完全约束的种子,中性轴算法会自动为其他的边选择最佳

的种子分布。

(4)中性轴算法不支持由CAD 模型导入的不精确模型和虚拟拓扑。Advancing Front 算法

(1)网格可以与种子的位置很好地吻合,但在较窄的区域内,精确匹配每粒种子可能会使网格

歪斜。

(2)更容易得到单元大小均匀的网格。有些情况下,单元均匀是很重要的,例如在

ABAQUS/Explicit 中,网格中的小单元会限制增量步长。

(3)容易实现从粗网格到细网格的过渡。

(4)支持不精确模型和二维模型的虚拟拓扑。

[16](pp50)网格划分失败时的解决办法

网格划分失败的原因:

(1)几何模型有问题,例如模型中有自由边或很小的边、面、尖角、裂缝等。(2)种子布置得太稀疏。

如果无法成功地划分Tet 网格,可以尝试以下措施:

(1)在Mesh 功能模块中,选择主菜单Tools→Query 下的Geometry Diagnostics,检查模型中

是否有自由边、短边、小平面、小尖角或微小的裂缝。如果几何部件是由CAD 模型导入的,

则应注意检查是否模型本身就有问题(有时可能是数值误差导致的);如果几何部件是在

ABAQUS/CAE 中创建的,应注意是否在进行拉伸或切割操作时,由于几何坐标的误差,出

现了上述问题。

(2)在Mesh 功能模块中,可以使用主菜单Tools→Virtual Topology(虚拟拓扑)来合并小的边

或面,或忽略某些边或顶点。

(3)在Part 功能模块中,点击主菜单Tools→Repair,可以修复存在问题的几何实体。

(4)在无法生成网格的位置加密种子。

[17](pp51)网格质量检查

在Mesh 功能模块中,点击主菜单Mesh→Verify,可以选择部件、实体、几何区域或单元,检查其

网格的质量,获得节点和单元信息。在Verify Mesh 对话框,选择Statistical Checks(统计检查)

可以检查单元的几何形状,选择Analysis Checks(分析检查)可以检查分析过程中会导致错误或

警告信息的单元。单击Highlight 按钮,符合检查判据的单元就会以高亮度显示出来。

[18](pp51)单元类型

ABAQUS 拥有433 种单元,分8 大类:连续体单元(continuum element,即实体单元solid

element)、壳单元、薄膜单元、梁单元、杆单元、刚体单元、连接单元和无限元。

(1)线性单元(即一阶单元);二次单元(即二阶单元);修正的二次单元(只有Tri 或Tet 才有

此类型)。

(2) ABAQUS/Explicit 中没有二次完全积分的连续体单元。

(3)线性完全积分单元的缺点:承受弯曲载荷时,会出现剪切自锁,造成单元过于刚硬,即使

划分很细的网格,计算精度仍然很差。

(4)二次完全积分单元的优点:(A)应力计算结果很精确,适合模拟应力集中问题;(B)一般

情况下,没有剪切自锁问题。但使用这种单元时要注意:(A)不能用于接触分析;(B)对

于弹塑性分析,如果材料不可压缩(例如金属材料),则容易产生体积自锁;(C)当单元发

生扭曲或弯曲应力有梯度时,有可能出现某种程度的自锁。

(5)线性减缩积分单元在单元中心只有一个积分点,存在沙漏数值问题而过于柔软。采用这种

单元模拟承受弯曲载荷的结构时,沿厚度方向上至少应划分四个单元。优点:(A)位移计

算结果较精确;(B)网格存在扭曲变形时(例如Quad 单元的角度远远大于或小于90o),

分析精度不会受到明显的影响;(C)在弯曲载荷下不易发生剪切自锁。缺点:(A)需要较

细网格克服沙漏问题;(B)如果希望以应力集中部位的节点应力作为分析目标,则不能选

用此单元。

(6)二次减缩积分单元不但保持线性减缩积分单元的上述优点,还具有如下特点:(A)即使不

划分很细的网格也不会出现严重的沙漏问题;(B)即使在复杂应力状态下,对自锁问题也

不敏感。使用这种单元要注意:(A)不能用于接触分析;(B)不能用于大应变问题;(C)

存在与线性减缩积分单元类似的问题,即节点应力的精度往往低于二次完全积分单元。

(7)非协调模式单元可克服线性完全积分单元中的剪切自锁问题,仅在ABAQUS/Standard 有。

优点:(A)克服了剪切自锁问题,在单元扭曲比较小的情况下,得到的位移和应力结果很

精确;(B)在弯曲问题中,在厚度方向上只需很少的单元,就可以得到与二次单元相当的

结果,而计算成本却明显降低;(C)使用了增强变形梯度的非协调模式,单元交界处不会

重叠或开洞,因此很容易扩展到非线性、有限应变得位移。但使用这种单元时要注意:如

果所关心部位的单元扭曲比较大,尤其是出现交错扭曲时,分析精度会降低。(8)使用Tri 或Tet 单元要注意:(A)线性Tri 或Tet 单元的精度很差,不要在模型中所关心的

部位及其附近区域使用;(B)二次Tri 或Tet 单元的精度较高,而且能模拟任意的几何形状,

但计算代价比Quad 或Hex 单元大,因此如果能用Quad 或Hex 单元,就尽量不

要使用Tri

或Tet 单元;(C)二次Tet 单元(C3D10)适于ABAQUS/Standard 中的小位移无接触问题;

修正的二次Tet 单元(C3D10M)适于ABAQUS/Explicit 和ABAQUS/Standard 中的大变形和

接触问题;(D)使用自有网格不易通过布置种子来控制实体内部的单元大小。(9)杂交单元在ABAQUS/Standard 中,每一种实体单元都有其对应的杂交单元,用于不可压

缩材料(泊松比为0.5,如橡胶)或近似不可压缩材料(泊松比大于0.475)。除了平面应力

问题之外,不能用普通单元来模拟不可压缩材料的响应,因为此时单元中的应力士不确定

的。ABAQUS/Explicit 中没有杂交单元。

[19](pp57)在混合使用不同类型单元时,应确保其交界处远离所关心的区域,并仔细检查分析结

果是否正确。对于无法完全采用Hex 单元网格的实体,还可采用以下方法:(A)对整个实体划分

Tet 单元网格,使用二次单元C3D10 或修正的二次单元C3D10M,同样可以达到所需精度,只是计

算时间较长;(B)改变实体中不重要部位的几何形状,然后对整个实体采用Hex 单元网格。

[20](pp60)三维实体单元类型的选择原则

(1)对于三维区域,尽可能采用结构化网格划分或扫掠网格划分技术,从而得到Hex 单元网格,

减小计算代价,提高计算精度。当几何形状复杂时,也可以在不重要的区域使用少量楔形单元。

(2)如果使用了自由网格划分技术,Tet 单元类型应选择二次单元。在ABAQUS/Explicit 中应选择

修正的Tet 单元C3D10M,在ABAQUS/Standard 中可以选择C3D10,但如果有大的塑性变形,或

模型中存在接触,而且使用的是默认的硬接触关系,则也应选择修正的Tet 单元C3D10M。

(3)ABAQUS 的所有单元均可用于动态分析,选取单元的一般原则与静力分析相同。但在使用

ABAQUS/Explicit 模拟冲击或爆炸载荷时,应选用线性单元,因为它们具有集中质量公式,模拟应

力波的效果优于二次单元所采用的一致质量公式。

如果使用的是 ABAQUS/Standard,在选择单元类型时还应该注意:

(1)对于应力集中问题,尽量不要使用线性减缩积分单元,可使用二次单元来提高精度。如果

在应力集中部位进行了网格细化,使用二次减缩积分单元与二次完全积分单元得到的应力

结果相差不大,而二次减缩积分单元的计算时间相对较短。

(2)对于弹塑性分析,如果材料是不可压缩性的(例如金属材料),则不能使用二次完全积分单

元,否则会出现体积自锁问题,也不要使用二次Tri 或Tet 单元。推荐使用的是修正的二次

Tri 或Tet 单元、非协调单元以及线性减缩积分单元。

(3)如果模型中存在接触或大的扭曲变形,则应使用线性Quad 或Hex 单元以及修正的二次Tri

或Tet 单元,而不能使用其它的二次单元。

(4)对于以弯曲为主的问题,如果能够保证在所关心的部位的单元扭曲较小,使用非协调单元

可以得到非常精确的结果。

(5)除了平面应力问题之外,如果材料是完全不可压缩的(如橡胶材料),则应使用杂交单元;

在某些情况下,对于近似不可压缩材料也应使用杂交单元。

[21](pp61)壳单元类型及选择原则

如果一个薄壁构件的厚度远小于其典型结构整体尺寸(一般为小于1/10),并且可以忽略厚度

方向的应力,就可以用壳单元来模拟此结构。壳体问题可分两类:薄壳问题(忽略横向剪切变形)

和厚壳问题(考虑横向剪切变形)。对于单一各向同性材料,一般当厚度和跨度的比值小于1/15 时,

可以认为是薄壳;大于1/15 时,则可以认为是厚壳。对于复合材料,这个比值要更小一些。

按薄壳和厚壳分为:通用壳单元和特殊用途壳单元。前者对薄壳和厚壳均有效;按单元定义方式可分为:常规壳单元和连续体壳单元。前者通过定义单元的平面尺寸、表面法向何

初始曲率来对参考面进行离散,只能在截面属性中定义壳的厚度,不能通过节点来定义壳的厚度。

后者类似于三维实体单元,对整个三维结构进行离散。

选择原则:

(1)对于薄壳问题,常规壳单元的性能优于连续体单元;而对于接触问题,连续体壳单元的计

算结果更加精确,因为它能在双面接触中考虑厚度的变化。

(2)如果需要考虑薄膜模式或弯曲模式的沙漏问题,或模型中有面内弯曲,在ABAQUS/Standard 中使用S4 单元可获得很高的精度。

(3) S4R 单元性能稳定,适用范围很广。

(4) S3/S3R 单元可以作为通用壳单元使用。由于单元中的常应变近似,需要划分较细的网格来

模拟弯曲变形或高应变梯度。

(5)对于复合材料,为模拟剪切变形的影响,应使用适于厚壳的单元(例如

S4、S4R、S3、S3R、

S8R),并要注意检查截面是否保持平面。

(6)四边形或三角形的二次壳单元对剪切自锁或薄膜自锁都不敏感,适用于一般的小应变薄壳。

(7)在接触模拟中,如果必须使用二次单元,不要选择STRI65 单元,而应使用S9R5。

(8)如果模型规模很大且只表现几何线性,使用S4R5 单元(线性薄壳单元)比通用壳单元更

节约计算成本。

石亦平ABAQUS 有限元分析实例祥解之读后小结

第 6 页共 6 页

(9)在ABAQUS/Explicit 中,如果包含任意大转动和小薄膜应变,应选用小薄膜应变单元。

[22] 梁单元类型的选择

如果一个构件横截面的尺寸远小于其轴向尺度(一般的判据为小于1/10),并且沿长度方向的应力

是最重要的因素,就可以考虑梁单元来模拟此结构。ABAQUS 中的所有单元都是梁柱类单元,即可

以产生轴向变形、弯曲变形和扭转变形。Timoshenko 梁单元还考虑了横向剪切变形的影响。B21

和B31(线性梁单元)以及B22 和B32 单元(二次梁单元)是考虑剪切变形的Timoshenko 梁单

元,它们既适用于模拟剪切变形起重要作用的深梁,又适用于模拟剪切变形不太重要的细长梁。这

些单元的截面特性与厚壳单元的横截面特性相同。

ABAQUS/Standard 中三次单元B23 和B33 被称为Euler-Bernoulli 梁单元,它们不能模拟剪切变形,

但适合于模拟细长的构件(很截面的尺寸小于轴向尺度的1/10)。由于三次单元可以模拟沿长度方

向的三阶变量,所以只需划分很少的单元就可以得到很精确的结果。

选择原则:

(1)在任何包含接触的问题中,应使用B21 或B31 单元(线性剪切应变梁单元)。

(2)如果横向剪切变形很重要,则应采用B22 或B32 单元(二次Timoshenko 梁单元)。

(3)在ABAQUS/Standard 中的几何非线性模拟中,如果结构非常刚硬或非常柔软,应使用杂交

单元,例如B21H 或B32H 单元。

(4)如果在ABAQUS/Standard 中模拟具有开口薄壁横截面的结构,应使用基于横截面翘曲理论

的两单元,例如B31OS 或B32OS 单元。

ABAQUS中Fortran子程序调用方法

第一种方法: / o/ J5 @6 U/ ^- o$ 1. 建立工作目录/ ]" 2. 将Abaqus安装目录\6.4-pr11\site下的aba_param_dp.inc或aba_param_sp.inc拷贝到工作目录,并改名为aba_param.inc; # ~/ |0 I0 E6 {, @4 X3 q: W3. 将编译的fortran程序拷贝到工作目录; 4. 将.obj文件拷贝到工作目录; 5. 建立好输入文件.inp; 6. 运行abaqusjob=inp_name user=fortran name即可。 第二种方法: 在Job模块里,创建工作,在EditJob对话框中选择General选项卡,在Usersubroutine file中点击Select 按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for或.f)。 , D8 i7 d/r c6 @" | 以下是网上摘录的资料,供参考:. |$ t/ }$W7 Y6 m4 h6 D6 j 用户进行二次开发时,要在命令行窗口执行下面的命令: 4 O. R+ ^,@( ? abaqus job=job_name user=sub_name ABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU.lib和动态库standardU.dll,还有其它一些临时文件,而它的主程序(如standard.exe和explicit.exe等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。这种运行机制与ANSYS、LS-DYNA、marc等都不同。 : j6 g' R-o( {0 [* N2 J3 X这些生成的临时文件要到文件夹C:\Documentsand Settings\Administrator\Local Settings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。 1子程序格式(程序后缀是.f; .f90; .for;.obj??) 答:我试过,.for格是应该是不可以的,至少6.2和6.3版本应该是不行,其他的没用过,没有发言权。在Abaqus中,运行abaqusj=jobname user=username时,默认的用户子程序后缀名是.for(.f,.f90应该都不行的,手册上也有讲过),只有在username.for文件没有找到的情况下,才会去搜索username.obj,如果两者都没有,就会报错误信息。 如果username包括扩展名for或obj,那么就根据各自的扩展名ABAQUS会自动选择进行操作。 2CAE中如何调用?Command下如何调用? 答:CAE中在creat job的jobmanager中的general中可以指定子程序; Command下用命令:abaqus j=jobnameuser=userfilename (无后缀); 3若有多个子程序同时存在,如何处理 答:将其写在一个文件中即可,然后用一个总的子程序调用(具体参见手册) 4我对VF不是很熟,是否可以用VC,C++编写子程序? A: 若要在vf中调试,那么应该根据需要把SITE文件夹中的ABA_PARAM_DP.INC(双精度)或ABA_PARAM_SP.INC(单精度)拷到相应的位置,并改名为ABA_PARAM.INC即可。 据说6.4的将可以,6.3的你可以尝试着将VC,C++程序编译为obj文件,没试过。在你的工作目录下应该已经存在ufield.obj和uvarm.obj这两个文件(这两个文件应该是你分别单独调试ufield.FOR和uvarm.FOR时自动编译生成的,你可以将他们删掉试试看),但是由于你的FOR文件中已经有了UV ARM 和UFIELD这两个subroutine,显然会造成重复定义,请查实。 用户子程序的使用 假设你的输入文件为:a.inp b.for 那么在ABAQUS Command 中的命令应该是这样的: abaqusjob=a user=b

ABAQUS子程序

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.用户子程序不能嵌套。即任何用户子程序都不能调用任何其他用户子程

abaqus简单umat子程序

SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,RPL,DDSDDT, 1 DRPLDE,DRPLDT,STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED, 2 CMNAME,NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT, 3 PNEWDT,CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC) include 'aba_param.inc' CHARACTER*8 CMNAME DIMENSION STRESS(NTENS),STATEV(NSTATV),DDSDDE(NTENS,NTENS), 1 DDSDDT(NTENS),DRPLDE(NTENS),STRAN(NTENS),DSTRAN(NTENS), 2 TIME(2),PREDEF(1),DPRED(1),PROPS(NPROPS),COORDS(3),DROT(3,3), 3 DFGRD0(3,3),DFGRD1(3,3) C UMAT FOR ISOTROPIC ELASTICITY C CANNOT BE USE D FOR PLAN E STRESS C ---------------------------------------------------------------- C PROPS(1) - E C PROPS(2) - NU C ---------------------------------------------------------------- C IF (NDI.NE.3) THEN WRITE (*,*) 'THIS UMAT MAY ONLY BE USED FOR ELEMENTS 1 WITH THREE DIRECT STRESS COMPONENTS' CALL XIT ENDIF open(400,file='D:\test.txt') C ELASTIC PROPERTIES EMOD=PROPS(1) ENU=PROPS(2) EBULK3=EMOD/(1-2*ENU) EG2=EMOD/(1+ENU) EG=EG2/2 EG3=3*EG ELAM=(EBULK3-EG2)/3 write(400,*) 'temp=',temp C ELASTIC STIFFNESS C DO K1=1, NDI DO K2=1, NDI DDSDDE(K2, K1)=ELAM END DO DDSDDE(K1, K1)=EG2+ELAM

ABAQUS用户子程序

当用到某个用户子程序时,用户所关心的主要有两方面:一是ABAQUS提供的用户子程序的接口参数。有些参数是ABAQUS传到用户子程序中的,例如SUBROUTINE DLOAD中的KSTEP,KINC,COORDS;有些是需要用户自己定义的,例如F。二是ABAQUS何时调用该用户子程序,对于不同的用户子程序ABAQUS调用的时间是不同的。有些是在每个STEP的开始,有的是STEP结尾,有的是在每个INCREMENT的开始等等。当ABAQUS 调用用户子程序是,都会把当前的STEP和INCREMENT利用用户子程序的两个实参KSTEP和KINC传给用户子程序,用户可编个小程序把它们输出到外部文件中,这样对ABAQUS何时调用该用户子程序就会有更深的了解。 (子程序中很重要的就是要知道由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.荷载可以被定义为积分点坐标、时间、单元编号和单元节点编号的函数。 2.用户可以从其他程序的结果文件中进行相关操作来定义积分点F的大小。 例1:这个例子在每个积分点施加的荷载不仅是坐标的函数,而且是随STEP变化而变化的。SUBROUTINE DLOAD(P,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS, 1 JLTYP,SNAME) INCLUDE 'ABA_PARAM.INC' C DIMENSION TIME(2),COORDS(3) CHARACTER*80 SNAME PARAMETER (PLOAD=100.E4) 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 UMAT 子程序具有强大的功能,使用UMAT 子程序: (1) 可以定义材料的本构关系,使用ABAQUS 材料库中没有包含的材料进行计算,扩

Abaqus材料用户子程序UMAT基础知识与手册例子完整解释

1、为何需要使用用户材料子程序(User-Defined Material, UMAT )? 很简单,当ABAQUS 没有提供我们需要的材料模型时。所以,在决定自己定义一种新的材料模型之前,最好对ABAQUS 已经提供的模型心中有数,并且尽量使用现有的模型,因为这些模型已经经过详细的验证,并被广泛接受。 UMAT 子程序具有强大的功能,使用UMAT 子程序: (1)可以定义材料的本构关系,使用ABAQUS 材料库中没有包含的材料进行计算,扩充程序功能。 (2) 几乎可以用于力学行为分析的任何分析过程,几乎可以把用户材料属性赋予ABAQU S 中的任何单元。 (3) 必须在UMAT 中提供材料本构模型的雅可比(Jacobian )矩阵,即应力增量对应变增量的变化率。 (4) 可以和用户子程序“USDFLD ”联合使用,通过“USDFLD ”重新定义单元每一物质点上传递到UMAT 中场变量的数值。 2、需要哪些基础知识? 先看一下ABAQUS 手册(ABAQUS Analysis User's Manual )里的一段话: Warning: The use of this option generally requires considerable expertise(一定的专业知识). The user is cautioned that the implementation (实现) of any realistic constitutive (基本) model requires extensive (广泛的) development and testing. Initial testing on a single eleme nt model with prescribed traction loading (指定拉伸载荷) is strongly recommended. 但这并不意味着非力学专业,或者力学基础知识不很丰富者就只能望洋兴叹,因为我们的任务不是开发一套完整的有限元软件,而只是提供一个描述材料力学性能的本构方程(Constitutive equation )而已。当然,最基本的一些概念和知识还是要具备的,比如: 应力(stress),应变(strain )及其分量; volumetric part 和deviatoric part ;模量(modul us )、泊松比(Poisson’s ratio)、拉梅常数(Lame constant);矩阵的加减乘除甚至求逆;还有一些高等数学知识如积分、微分等。 3、UMAT 的基本任务? 我们知道,有限元计算(增量方法)的基本问题是: 已知第n 步的结果(应力,应变等)n σ,n ε,然后给出一个应变增量1+n d ε,计算新的应力1+n σ。UMAT 要完成这一计算,并要计算Jacobian 矩阵DDSDDE(I,J) =εσΔ?Δ?/。σΔ是应力增量矩阵(张量或许更合适),εΔ是应变增量矩阵。DDSDDE(I,J) 定义了第J 个应变分量的微小变化对

ABAQUS用户子程序

ABAQUS用户子程序 转自https://www.doczj.com/doc/ba15305002.html, 当用到某个用户子程序时,用户所关心的主要有两方面:一是ABAQUS提供的用户子程序的接口参数。有些参数是ABAQUS传到用户子程序中的,例如SUBROUTINE DLOAD中的KSTEP,KINC,COORDS;有些是需要用户自己定义的,例如F。二是ABAQUS何时调用该用户子程序,对于不同的用户子程序ABAQUS调用的时间是不同的。有些是在每个STEP的开始,有的是STEP结尾,有的是在每个INCREMENT的开始等等。当ABAQUS调用用户子程序是,都会把当前的STEP和INCREMENT利用用户子程序的两个实参KSTEP和KINC传给用户子程序,用户可编个小程序把它们输出到外部文件中,这样对ABAQUS何时调用该用户子程序就会有更深的了解。 (子程序中很重要的就是要知道由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.荷载可以被定义为积分点坐标、时间、单元编号和单元节点编号的函数。 2.用户可以从其他程序的结果文件中进行相关操作来定义积分点F的大小。 例1:这个例子在每个积分点施加的荷载不仅是坐标的函数,而且是随STEP变化而变化的。SUBROUTINE DLOAD(P,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS, 1 JLTYP,SNAME) INCLUDE 'ABA_PARAM.INC' C DIMENSION TIME(2),COORDS(3) CHARACTER80 SNAME PARAMETER (PLOAD=100.E4) 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)2PLOAD ELSE IF (KSTEP.EQ.4) THEN !当STEP=4时的荷载大小 P=COORDS(1)3PLOAD ELSE IF (KSTEP.EQ.5) THEN !当STEP=5时的荷载大小 P=COORDS(1)4PLOAD

ABAQUS子程序UMAT的应用

A B A Q U S子程序U M A T 的应用 This model paper was revised by the Standardization Office on December 10, 2020

目录

摘要 ABAQUS软件功能强大,特别是能够模拟复杂的非线性问题,它包括了多种材料本构关系及失效准则模型,并具有良好的开放性,提供了若干个用户子程序接口,允许用户以代码的形式来扩展主程序的功能。 本文主要研究了ABAQUS用户子程序UMAT的开发方法,采用FORTRAN语言编制了各向同性硬化材料模型的接口程序,研究该类材料的弹塑性本构关系极其实现方法。 本文紧紧围绕UMAT的二次开发技术,首先对其接口原理做了详细介绍,然后针 对非线性有限元增量理论中的常刚度法和切线刚度法的算法理论做了深入的剖析,推导出了常刚度法和切线刚度法的算法理论的具体表达式,然后分别编制了两种算法的UMAT程序,最后建立了一个具体的验算模型,通过与ABAQUS自带弹塑性本构关系的计算结果相比较,验证两者的正确性。 本文还对常刚度法和切线刚度法得算法效率做了对比,得出了在非线性程度较高 时切线刚度法效率高于常刚度法的结论。 关键字: ABAQUS、UMAT、有限元、材料非线性、FORTRAN、切线刚度 ABSTRACT ABAQUS software powerful, especially to simulate complex non-linear problem, which includes a wide range of material constitutive model and failure criteria, and has a good open, providing a number of user subroutine interface that allows users to code form to expand the functions of the main program.

ABAQUS子程序USDFLD

Abaqus/CAE User's Manual 12.8.5 Defining field variables at a material point (在一个材料点定义场变量) In Abaqus/Standard you can introduce dependence on solution variables with user subroutine USDFLD. This subroutine allows you to define field variables at a material point as functions of time, of any of the available material point quantities listed in “Abaqus/Standard output variable identifiers,” Section 4.2.1 of the Abaqus Analysis User's Manual, and of material directions. Material properties defined as functions of these field variables may, thus, be dependent on the solution. User subroutine USDFLD is called at each point for which the material definition includes a reference to the user subroutine. (在ABAQUS里面,你能够用子程序USDFLD来求解变量。USDFLD允许你将一个材料点上的场变量定义为时间函数,能够使用到的材料点在用户使用手册4.2.1节中“abaqus输出变量的标识码”中被提及到。材料的特性被定义作为场变量的函数,因此依赖于求解方法。) (在每个被定义材料性能的点USDFLD能够被调用) To include a reference to user subroutine USDFLD in a material definition: 1.From the menu bar in the Edit Material dialog box, select General User Defined Field. (For information on displaying the Edit Material dialog box, see “Creating or editing a material,” Section 12.7.1.) 2.Click OK to close the Edit Material dialog box. Alternatively, you can select another material behavior to define from the menus in the Edit Material dialog box (see “Browsing and modifying material behaviors,” Section 12.7.2, for more information). Abaqus/CAE User's Manual (子程序USDFLD在材料中的定义过程可参考下面:

abaqus材料子程序

各向同性材料损伤本构模型 SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD, + RPL,DDSDDT,DRPLDE,DRPLDT, + STRAN,DSTRAN,TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME, + NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,DROT,PNEWDT, + CELENT,DFGRD0,DFGRD1,NOEL,NPT,LAYER,KSPT,KSTEP,KINC) INCLUDE 'ABA_PARAM.INC' CHARACTER*80 CMNAME DIMENSION STRESS(NTENS),STATEV(NSTATV), + DDSDDE(NTENS,NTENS),DDSDDT(NTENS), + DRPLDE(NTENS),STRAN(NTENS),DSTRAN(NTENS), + TIME(2),PREDEF(1),DPRED(1),PROPS(NPROPS), + COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3) DIMENSION STRANT(6),TSTRANT(4),PT(1) DIMENSION OLD_STRESS(6) DIMENSION DOLD_STRESS(6),D_STRESS(6) DIMENSION C(6,6),CD(6,6),DSTRESS(6),BSTRESS(6),ROOT(3), + DFMNDE(6),DDMDE(6),DCDDM(6,6),ATEMP1(6), ATEMP2(6) PARAMETER (ZERO=0.D0,ONE=1.D0,TWO=2.D0,FOUR=4.D0,HALF = 0.5D0) C start C IF (NPROPS.LT.2) THEN C WRITE(7,*) '** ERROR: UMAT REQUIRES *NPROPS=2' C STOP C EN D IF E11 =PROPS(1) V12 =PROPS(2) G12 =PROPS(1)/TWO/(ONE+PROPS(2)) C Critical values of stresses XT=PROPS(3) XC=PROPS(4) XS=PROPS(5) GX=PROPS(6) !Fracture energy in matrix ETA=0.001 C Current strain DO I = 1, NTENS STRANT(I) = STRAN(I) + DSTRAN(I) END DO C Stiffness DO I = 1, 6 DO J = 1, 6 C(I,J)=ZERO END DO END DO ATEMP = (1+V12)*(1-TWO*V12) C(1,1) = E11*(1-V12)/ATEMP C(2,2) = E11*(1-V12)/ATEMP C(3,3) = E11*(1-V12)/ATEMP C(1,2) = E11*V12/ATEMP

ABAQUS用户子程序

ABAQUS用户子程序 ABAQUS/Standard subroutines: 1.CREEP: Define time-dependent, viscoplastic behavior (creep and swelling). 定义和时间相关的、粘塑性的运动(蠕变和膨胀) 2. DFLOW: Define nonuniform pore fluid velocity in a consolidation analysis. 在压实分析中,定义非均匀孔隙流速度 3. DFLUX: Define nonuniform distributed flux in a heat transfer or mass diffusion analysis. 在热传递和质量扩散分析中,定义非均匀的分布流量 4. DISP: Specify prescribed boundary conditions. 指定规定的边界条件 5. DLOAD: Specify nonuniform distributed loads. 指定非均匀的分布荷载 6. FILM: Define nonuniform film coefficient and associated sink temperatures for heat transfer analysis. 对热传递分析指定非均匀的膜层散热系数和联合的散热器温度 7. FLOW: Define nonuniform seepage coefficient and associated sink pore pressure for consolidation analysis. 对压实分析定义非均匀的渗流系数和渗入孔隙压力 8. FRIC: Define frictional behavior for contact surfaces. 对接触面定义摩擦 9. GAPCON: Define conductance between contact surfaces or nodes in a fully coupled temperature-displacement analysis or pure heat transfer analysis. 在一个完全耦合的温度—置换分析或者是纯热传递分析中,定义接触面或节点间的导热系数。 10. GAPELECTR: Define electrical conductance between surfaces in a coupled thermal-electrical analysis. 在耦合热电分析中,定义表面间的导电系数 11. HARDINI: Define initial equivalent plastic strain and initial backstress tensor. 定义初始等效应变和初始反应力张量 12. HETVAL: Provide internal heat generation in heat transfer analysis. 在热传递分析中提供初始热 13. MPC: Define multi-point constraints. 定义多点约束 14. ORIENT: Provide an orientation for defining local material directions or local directions for kinematic coupling constraints or local rigid body

abaqus1用户材料子程序

19 ABAQUS用户材料子程序(UMAT) 虽然ABAQUS为用户提供了大量的单元库和求解模型,使用户能够利用这些模型处理绝大多数的问题;但是现实世界毕竟十分复杂,ABAQUS不可能把所有可能出现的问题都包含进去。所以ABAQUS提供了大量的用户子程序(User Subroutine)。用户子程序允许用户在找不到合适模型的情况下自行定义符合自己问题的模型。这些用户子程序涵盖了建模从载荷到单元的几乎各个部分。 ABAQUS为用户提供的这个接口,允许用户通过自定义的子程序定制ABAQUS,以实现特定的功能。用户子程序具有以下的功能和特点:(1)如果ABAQUS的一些固有选项模型功能有限;用户子程序可以提高ABAQUS中这些选项的功能;(2)通常用户子程序是用FORTRAN语言的代码写成;(3)它可以以几种不同的方式包含在模型中;(4)由于它们没有存储在restart文件中,如果需要的话,可以在重新开始运行时修改它;(5)在某些情况下它可以利用ABAQUS允许的已有程序。 要在模型中包含用户子程序,可以利用ABAQUS执行程序,在abaqus执行程序中应用user选项指明包含这些子程序的FORTRAN源程序或者目标程序的名字。 提示:ABAQUS的输入文件除了可以通过ABAQUS/CAE的作业模块中提交运行外,还可以在ABAQUS Command窗口中输入ABAQUS执行程序直接运行: ABAQUS job=输入文件名 user=用户子程序的Fortran文件名 ABAQUS/Standard和ABAQUS/Explicit都支持用户子程序功能,但是他们所支持的用户子程序种类不尽相同,读者在需要使用时请注意查询手册。 在接下来的最后两章里,我们将讨论两种常用的用户子程序——用户材料子程序和用户单元子程序。 本章将通过在ABAQUS/Standard中创建Johnson-Cook的材料模型,对编写Standard 的用户材料子程序UMAT进行一个简单介绍。ABAQUS/Explicit中的用户材料子程序VUMAT的思想与之相似,但是由于隐式和显式两种方法本身的差异,它们之间也有一些不同,请读者在自己具体使用前首先仔细查阅ABAQUS手册中的相关内容。

ABAQUS中Fortran子程序调用方法—自己总结

第一种方法:在Job模块里,创建工作,在Edit Job对话框中选择General选项卡,在User subroutine file中点击Select按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for 或.f)。 第二种方法: 1. 建立工作目录 2. 将Abaqus安装目录\\site下的或拷贝到工作目录,并改名为; 3. 将编译的fortran程序拷贝到工作目录; 4. 将.obj文件拷贝到工作目录; 5. 建立好输入文件.inp; 6. 运行abaqus job=inp_name user=fortran name即可。 以下是网上摘录的资料,供参考: 用户进行二次开发时,要在命令行窗口执行下面的命令: abaqus job=job_name user=sub_name ABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库和动态库,还有其它一些临时文件,而它的主程序(如和等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。这种运行机制与ANSYS、LS-DYNA、marc等都不同。 这些生成的临时文件要到文件夹C:\Documents and Settings\Administrator\Local Settings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。 1 子程序格式(程序后缀是.f; .f90; .for;.obj) 答:我试过,.for格是应该是不可以的,至少和版本应该是不行,其他的没用过,没有发言权。 在Abaqus中,运行abaqus j=jobname user=username时,默认的用户子程序后缀名是.for (.f,.f90应该都不行的,手册上也有讲过),只有在文件没有找到的情况下,才会去搜索,如果两者都没有,就会报错误信息。 如果username包括扩展名for或obj,那么就根据各自的扩展名ABAQUS会自动选择进行操作。 2 CAE中如何调用Command下如何调用 答:CAE中在creat job的job manager中的general中可以指定子程序; Command下用命令:abaqus j=jobname user=userfilename(无后缀); 3 若有多个子程序同时存在,如何处理 答:将其写在一个文件中即可,然后用一个总的子程序调用(具体参见手册) 4 我对VF不是很熟,是否可以用VC,C++编写子程序

abaqus中UMAT子程序编写方法

UMAT User subroutine to define a material's mechanical behavior. Product: Abaqus/Standard Warning: The use of this subroutine generally requires considerable expertise. You are cautioned that the implementation of any realistic constitutive model requires extensive development and testing. Initial testing on a single-element model with prescribed traction loading is strongly recommended. References ?“User-defined mechanical material behavior,” Section 25.7.1 of the Abaqus Analysis User's Manual ?“User-defined thermal material behavior,” Section 25.7.2 of the Abaqus Analysis User's Manual ?*USER MATERIAL ?“SDVINI,” Section 4.1.11 of the Abaqus Verification Manual ?“UMAT and UHYPER,” Section 4.1.21 of the Abaqus Verification Manual Overview User subroutine UMAT: ?can be used to define the mechanical constitutive behavior of a material; ?will be called at all material calculation points of elements for which the material definition includes a user-defined material behavior; ?can be used with any procedure that includes mechanical behavior; ?can use solution-dependent state variables; ?must update the stresses and solution-dependent state variables to their values at the end of the increment for which it is called; ?must provide the material Jacobian matrix, , for the mechanical constitutive model; ?can be used in conjunction with user subroutine USDFLD to redefine any field variables before they are passed in; and

21ABAQUS用户材料子程序_1502407

21 ABAQUS用户材料子程序(UMAT) 虽然ABAQUS为用户提供了大量的单元库和求解模型,使用户能够利用这些模型处理绝大多数的问题;但是实际问题毕竟非常复杂,ABAQUS不可能直接求解所有可能出现的问题。所以ABAQUS提供了大量的用户自定义子程序(User Subroutine),允许用户在找不到合适模型的情况下自行定义符合自己问题的模型。这些用户子程序涵盖了建模、载荷到单元的几乎各个部分。 用户子程序具有以下的功能和特点:(1)如果ABAQUS的一些固有选项模型功能有限,用户子程序可以提高ABAQUS中这些选项的功能;(2)通常用户子程序是用FORTRAN语言的代码写成;(3)它可以以几种不同的方式包含在模型中;(4)由于它们没有存储在restart文件中,如果需要的话,可以在重新开始运行时修改它;(5)在某些情况下它可以利用ABAQUS允许的已有程序。 要在模型中包含用户子程序,可以利用ABAQUS执行程序,在执行程序中应用user 选项指明包含这些子程序的FORTRAN源程序或者目标程序的名字。 提示:ABAQUS的输入文件除了可以通过ABAQUS/CAE的作业模块中提交运行外,还可以在ABAQUS Command窗口中输入ABAQUS执行程序直接运行: ABAQUS job=输入文件名 user=用户子程序的Fortran文件名 ABAQUS/Standard和ABAQUS/Explicit都支持用户子程序功能,但是他们所支持的用户子程序种类不尽相同,读者在需要使用时请注意查询手册。 在接下来的两章里,我们将讨论两种常用的用户子程序——用户材料子程序和用户

ABAQUS子程序

ABAQUS用户子程序 当用到某个用户子程序时,用户所关心的主要有两方面:一是ABAQUS提供的用户子程序的接口参数。有些参数是ABAQUS传到用户子程序中的,例如SUBROUTINE DLOAD中的KSTEP,KINC,COORDS;有些是需要用户自己定义的,例如F。二是ABAQUS何时调用该用户子程序,对于不同的用户子程序ABAQUS调用的时间是不同的。有些是在每个STEP的开始,有的是STEP结尾,有的是在每个INCREMENT的开始等等。当ABAQUS调用用户子程序是,都会把当前的STEP和INCREMENT利用用户子程序的两个实参KSTEP和KINC传给用户子程序,用户可编个小程序把它们输出到外部文件中,这样对ABAQUS何时调用该用户子程序就会有更深的了解。 (子程序中很重要的就是要知道由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.荷载可以被定义为积分点坐标、时间、单元编号和单元节点编号的函数。 2.用户可以从其他程序的结果文件中进行相关操作来定义积分点F的大小。 例1:这个例子在每个积分点施加的荷载不仅是坐标的函数,而且是随STEP变化而变化的。SUBROUTINE DLOAD(P,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,COORDS, 1 JLTYP,SNAME) INCLUDE 'ABA_PARAM.INC' C DIMENSION TIME(2),COORDS(3) CHARACTER*80 SNAME PARAMETER (PLOAD=100.E4) 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 UMAT 子程序具有强大的功能,使用UMAT 子程序:

相关主题
文本预览
相关文档 最新文档