首页/文章/ 详情

ABAQUS用户子程序参考手册:USDFLD

1年前浏览3813

用户子程序USDFLD:

1)允许你将材料点的场变量定义为关于时间或输出变量定义列表(Abaqus/Standard outputvariable identifiers)中定义的任意材料点输出变量的函数,除了用户自定义输出变量UVARMUVARMn

2)能够用于建立依赖于求解结果的材料属性,如将材料属性定义为关于场变量的函数;

3)在材料定义中包含了用户自定义场变量的单元的所有积分点上该用户子程序都将被调用;

4)必须通过调用子程序GETVRM来获取材料点数据;

5)能够使用并更新状态变量;

6)能够与用户子程序UFIELD联合使用来施加预定义场变量。

显式求解依赖性

由于该用户子程序只有在增量步的起始才能获取材料点数据,显然这样的求解方法是存在依赖性的:在一个给定的增量步下材料属性将保持不变。因此,结果的精度取决于时间增量步的大小。因此,你在该子程序中通过变量PNEWDT来控制时间增量步的大小。

定义场变量

在用户子程序USDFLD在调用之前,材料点的场变量的取值将通过定义在节点上的值插值得到。在该子程序中的场变量的任意改变都是局限在材料点上的,即在节点上的场变量的取值将不随材料点取值的改变而改变,而是保持通过初始条件,预定义场变量或在用户子程序UFIELD中定义的值。在该子程序中定义的场变量的取值将用于计算依赖于场变量取值的材料属性或者被传递到在其他材料点上被调用的用户子程序,如:

CREEP

HETVAL

UEXPAND

UHARD

UHYPEL

UMAT

UMATHT

UTRS

在材料点上的用户自定义场变量的输出可以通过单元积分点输出变量FV(参见Element integration pointvariables)获得。

获取材料点数据

在增量步起始时刻你可以通过子程序GETVRM来获取材料点的取值。材料点的取值可以通过在调用GETVRM时使用适当的输出变量键值来获得。材料点数据的取值将会被备份到数组ARRAYJARRAYFLGRAY中,三个数组分别对应浮点,整型和字符窜数据。对于一些没有定义在增量步起始时刻的材料点数据你可能无法获得其取值,如,ER

状态变量

由于在用户子程序中场变量的重定义都是局限于当前增量步(在每个增量步的起始时刻场变量的取值都将恢复为通过节点取值插值得到的取值),任何通过使用该子程序来实现依赖于历程的材料属性更新都必须通过引入用户自定义状态变量来实现。

状态变量可以在USDFLD中被更新然后传递到其他能够在该材料点被调用的子程序上,例如列举在上面的子程序。你需要指定状态变量的数量,例如在本节最后给出的示例(参见Allocating space)。

用户子程序界面



















     SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,    1 TIME,DTIME,CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,    2 KSPT,KSTEP,KINC,NDI,NSHR,COORD,JMAC,JMATYP,MATLAYO,LACCFLA)C      INCLUDE 'ABA_PARAM.INC'C      CHARACTER*80 CMNAME,ORNAME      CHARACTER*3  FLGRAY(15)      DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),    1 T(3,3),TIME(2)      DIMENSION ARRAY(15),JARRAY(15),JMAC(*),JMATYP(*),COORD(*)

     user coding to define FIELD and, if necessary, STATEV and PNEWDT

     RETURN      END

需要被定义的场变量

FIELD(NFIELD)

一个包含有当前材料点上的场变量数据的数组。该数组中的值是由在当前增量步结束时通过节点插值得到的取值传递过来的,这些节点上的取值是通过初始条件,预定义场变量或用户子程序UFIELD定义的。该插值方法同样用于温度的插值:对于线性单元将使用平均值,二次单元将使用近似的线性变化(参见Solid(continuum) element)。更新后的值将用于计算被定义为依赖于场变量取值的材料属性,随后被传递到将在该材料点上调用的其他用户子程序(CREEPHETVALUEXPANDUHARDUHYPELUMATUMATHTUTRS)中。

可以被更新的变量

STATEV(NSTATV)

一个含有求解状态变量的数组。在增量步的起始时刻这些变量将会被传递到该子程序中。在该子程序中所有的STATEV都将会被更新,更新后的取值将会被传递到其他将会在该材料点被调用的用户子程序(CREEPHETVALUEXPANDUHARDUHYPELUMATUMATHTUTRS)中。该材料点上的状态变量的数量的定义参见Allocating space

该变量用于定义建议采用的新的时间增量与当前使用的时间增量间的比值(DTIME,如下所述)。该变量允许你更改Abaqus/Standard的自动时间积分算法的增量取值(如果选择了自动时间增量)。

在调用子程序USDFLD之前PNEWDT被设定为一个非常大的值。

如果PNEWDT被重新定义为一个小于1.0的值,Abaqus/Standard必须终止时间增量并尝试使用一个更小的时间增量。因此,在自动时间积分算法中推荐采用的新的时间增量步为PNEWDT×DTIME,其中PNEWDT的取值为本次迭代中所有允许调用该子程序并重新定义PNEWDT的材料点中的取值的最小值。

如果在本次迭代中对于所有调用该子程序的材料点其PNEWDT的取值均大于1.0,并且在本次迭代中该增量步是收敛的,则Abaqus/Standard可能会提高时间增量步的取值。提供给自动时间积分算法的建议建议采用的新的时间增量步的取值为PNEWDT×DTIME,其中PNEWDT的取值为本次迭代中所有调用该子程序的材料点中的PNEWDT取值的最小值。

如果在分析过程中没有选择自动时间增量,则大于1.0PNEWDT的取值将会被忽略,小于1.0PNEWDT的取值将会导致计算终止。

传递过来用于观测的变量

DIRECT(3,3)

一个相对于全局基本方向有关的包含有材料方向余弦的数组。DIRECT(1,1), DIRECT(2,1),DIRECT(3,1)给出了第一材料方向的(1,2,3)分量;DIRECT(1,2), DIRECT(2,2),DIRECT(3,2)给出了第二材料方向的(1,2,3)分量,等等。对于壳单元和膜单元,第一方向和第二方向为面内方向,第三方向为法向方向。该信息对于梁单元是不可用的。

T(3,3)

一个相对于单元基本方向的包含有材料方向余弦的数组。这个数组相对于单元基本方向定义了材料方向(DIRECT)。对于连续单元TDIRECT是相同的。对于壳单元和膜单元,T(1,1)=cosθ,T(1,2)=-sinθ,T(2,1)=sinθ,T(2,2)=cosθ,T(3,3)=1.0,其他的所有分量为0,其中θ为围绕法向矢量逆时针选择的方向。如果没有使用单元方向,则T是一个单位矩阵。对于梁单元该方向同样不可用。

CELENT

特征单元长度。对于一阶单元该长度为穿过一个单元的典型长度;对于二阶单元,该长度为与一阶单元相同的典型长度的一半。对于梁单元和杆单元,该长度为单元的轴向长度。对于膜单元和壳单元,该长度为参考面的特征长度。对于轴对称单元,该长度仅为(r,z)平面的特征长度。

TIME(1)

当前增量步起始时刻的分析步时间的取值。

TIME(2)

当前增量步起始时刻的总时间的取值。

DTIME

时间增量

CMNAME

用户定义的材料名称

ORNAME

用户定义的局部方向名称。

NFIELD

在该材料点定义的场变量的数量。

NSTATV

用户定义的依赖于求解的状态变量(参见Allocation space)。

NOEL

单元号。

NPT

积分点号。

LAYER

层号(用于复合壳单元或分层实体)。

KSPT

当前层的截面点号。

KSTEP

分析步号。

KINC

增量号。

NDI

在当前材料点正应力分量的数量。

NSHR

在当前材料点的剪应力分量的数量。

COORD

当前材料点的坐标。

JMAC

为了获取输出变量必须被传递到子程序GETVARM的变量。

JMATYP

为了获取输出变量必须被传递到子程序GETVARM的变量。

MATLAYO

为了获取输出变量必须被传递到子程序GETVARM的变量。

LACCFLA

为了获取输出变量必须被传递到子程序GETVARM的变量。

示例:弹性损伤模型

下面为使用用户子程序USDFLD的一个示例。在该示例中一个杆单元承受由拉伸载荷。有限元模型中引入了一个弹性损伤模型:在加载历程中模量将会以一个关于最大拉伸应变的函数下降。最大拉伸应变将会以依赖于求解的状态变量的形式存储。参见预定义场中的“定义依赖于求解的场变量”。

输入文件











































HEADINGDAMAGED ELASTICITY MODEL WITH USER SUBROUTINE USDFLDELEMENT, TYPE=T2D2, ELSET=ONE1, 1, 2NODE1,  0., 0.2, 10., 0.SOLID SECTION, ELSET=ONE, MATERIAL=ELASTIC1.MATERIAL, NAME=ELASTICELASTIC, DEPENDENCIES=1** Table of modulus values decreasing as a function** of field variable 1.2000., 0.3, 0., 0.001500., 0.3, 0., 0.011200., 0.3, 0., 0.021000., 0.3, 0., 0.04USER DEFINED FIELDDEPVAR1BOUNDARY1, 1, 22, 2STEPSTATIC0.1, 1.0, 0.0, 0.1CLOAD2, 1, 20.END STEPSTEPSTATIC0.1, 1.0, 0.0, 0.1CLOAD2, 1, 0.END STEPSTEP, INC=20STATIC0.1, 2.0, 0.0, 0.1CLOAD2, 1, 40.END STEP

用户子程序






































       SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,     1 TIME,DTIME,CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,     2 KSPT,KSTEP,KINC,NDI,NSHR,COORD,JMAC,JMATYP,MATLAYO,     3 LACCFLA)C      INCLUDE 'ABA_PARAM.INC'C      CHARACTER*80 CMNAME,ORNAME      CHARACTER*3  FLGRAY(15)      DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),     1 T(3,3),TIME(2)      DIMENSION ARRAY(15),JARRAY(15),JMAC(*),JMATYP(*),     1 COORD(*)CC Absolute value of current strain:      CALL GETVRM('E',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,      MATLAYO,LACCFLA)      EPS = ABS( ARRAY(1) )C Maximum value of strain up to this point in time:      CALL GETVRM('SDV',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,      MATLAYO,LACCFLA)      EPSMAX = ARRAY(1)C Use the maximum strain as a field variable      FIELD(1) = MAX( EPS , EPSMAX )C Store the maximum strain as a solution dependent state C variable      STATEV(1) = FIELD(1)C If error, write comment to .DAT file:      IF(JRCD.NE.0)THEN       WRITE(6,*) 'REQUEST ERROR IN USDFLD FOR ELEMENT NUMBER ',     1     NOEL,'INTEGRATION POINT NUMBER ',NPT      ENDIFC      RETURN     END


来源:FEM and FEA
ACTAbaqusSTEPSUM材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-05-30
最近编辑:1年前
追逐繁星的Mono
硕士 签名征集中
获赞 47粉丝 87文章 66课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈