[原创]Abaqus UFIELD 和 USDFLD子程序详解

UFIELDUSDFLD子程序详解

                                      ———公众号‘CAE仿真实验室’出品

    UFIELDUSDFLDAbaqus极具迷惑性的两个子程序,这两个家伙长得就比较像兄弟,而且是用来自定义场变量的,同时还有一个状态变量state variable掺和在中间,再加上帮助里面的解释也基本上不是人话,很容易就把人搞二了今天帖主就来理一理这两个子程序。

1、自定义场变量

    Abaqus场变量可以先简单理解为每个单元或者每个节点都有一个值的变量,像结果输出中的温度、应力和应变等。有时候我们也需要定义Abaqus中不存在的一些稀奇古怪,有意义或无意义的场变量,比如浓度场,固化度场,损伤度。场变量最场用于定义变化的材料参数,即让材料属性如密度,弹性模量和一个场变量相关,通过更新场变量的值来改变材料参数(这一点和温度相关的材料参数本质上是一致的),而场变量的更新在这两个子程序中均可以完成,UFIELD是用来指定预定义变量的USDFLD对积分点的场变量重新定义UFIELDUSDFLD的本质上的区别是一个是定义在节点上的,一个是定义在单元材料积分点上的,同时这两个又可以相互搭配,干不累

2、简单实例

通过一个小例子来领会一下它们的要义实例通过自定义场变量来定义随时间变化的弹性模量,如图所示,定义弹性常数的时候,number of field variable 设为1下面两行参数表示Field变量1弹性模量为10000Field变量为2弹性模量为20000


[原创]Abaqus UFIELD 和 USDFLD子程序详解的图1 

 inp中定义Ufield和Usdfld的关键字和Ufield代码如下:

[原创]Abaqus UFIELD 和 USDFLD子程序详解的图2[原创]Abaqus UFIELD 和 USDFLD子程序详解的图3 

 

[原创]Abaqus UFIELD 和 USDFLD子程序详解的图4 

     如下应力应变曲线可以看出,时间步0.5s之前弹性模量为10000,0.5s后弹性模量为20000,确实是按照预期效果改变的。

[原创]Abaqus UFIELD 和 USDFLD子程序详解的图5 

通过给定field 不同的值,研究弹性模量的变化,发现当场变量小1时候,取1对应的值,大于2时候,是2对应的值,在12之间,则是通过插值得到。

blob.png    

当然这个例子比较简单,可以不用子程序,直接通过*field 实现

[原创]Abaqus UFIELD 和 USDFLD子程序详解的图7

    最后,通过USDFLD也可以实现单元生死,将在以后说明。

3UFIELD

Abaqus可以通过关键字*Field来定义预定义场变量,对于简单的问题,可以直接通过数据行的形式来定义场变量值,如下小例子,可以通过inp文件直接给定节点场变量的值,在field output中可以选上FV就可以在后处理中查看场变量云图了但需要注意的是云图显示的并非节点值而是插值得到的积分点的值。对于较为复杂的场变量,往往没办法直接通过数据行的形式定义,这个时候就需要用到自定义场变量子程序了,即UFIELD子程序。

[原创]Abaqus UFIELD 和 USDFLD子程序详解的图8[原创]Abaqus UFIELD 和 USDFLD子程序详解的图9 

UFIELD中可以随时更新场变量,有两种更新方法,独立更新方法(Individual variable updates)和同时更新方法Simultaneous variable updates),独立更新就是每次调用子程序只更新一个场变量,如果有多个场变量需要更新,就调用多次同时更新就是一次调用子程序时,更新多个场变量,独立更新是默认的更新方法,同时更新一般用于场变量之间相互关联的时候两者的子程序格式和inp文件中的接口 略有差异,说明如下

独立更新时,FIELD(NSECPT,NFIELD)的大小为FIELD(1,1),但是可以通过KFIELD的值来判别这个场变量属于哪一个,Inp中*FIELD,USER中也需要指定哪一个场变量,下图中为三个场变量,所以需要添加三行,子程序中通过IF(KFIELD=1or2or3)来判断对应关系。

         *Field,user,variable=1

         *Field,user,variable=2

         *Field,user,variable=3.

[原创]Abaqus UFIELD 和 USDFLD子程序详解的图10 

  同时更新时,FIELD(NSECPT,NFIELD)大小为FIELD(1,NFIELD),这时NFIELD=3,FIELD(1,1)FIELD1,2),FIELD1,3)之间是相互关联的,用独立更新的办法显然比较难实现,Inp中,子程序关键字则为*FIELD,user,number=3  

[原创]Abaqus UFIELD 和 USDFLD子程序详解的图11 

4USDFLD 

USDFLD子程序我已之前的一帖子[ http://www.jishulink.com/content/post/315597  Abaqus传热分析HETVAL和USDFLD子程序联合]介绍过,它与UFIELD不同的地方是对积分点的场变量进行重新定义。通过initial condition 或者*field定义的预定义场变量是定义在节点上的,调用USDFLD之前,积分点处的场变量值是通过节点处的值插值得到的(插值方法和温度场插值一样),在调用USDFLD积分点处的场变量被重新定义

1UFIELD可以指定预定,并且可以更节点处场变量,并且可以插值到积分点

2USDFLD可以直接重定义结分店的值,不影响节点处的值

3依赖于场变量的材料属性是根据积分点处的场变量值来更新材料参数的

USDFLD 还有一个比较有用的功能就是可以和其他子程序联合使用,以达到传递数据的作用STATEV ()数组可以传递到 CREEP, HETVAL, UEXPAN, UMAT, UMATHT, UTRS子程序。

5USDFLDDFIELD联合使用,

   当同时定义了这两个子程序的时候让人较为困惑的是场变量到底根据那个子程序来更新,这就和先调用哪一个程序关系很大了我们通过输出场变量的值和时间进行测试:

[原创]Abaqus UFIELD 和 USDFLD子程序详解的图12 [原创]Abaqus UFIELD 和 USDFLD子程序详解的图13 

 

我们可以发现,abaqus是先调用UFIELD再调用USDFLD 由于材料参数用在材料积分点上的,因而场变量相关的材料参数,依赖积分点的场变量,而不是节点的场变量也就同时通过UFIELDUSDFLD来定义场变量时,实际是根据USDFLD更新材料参数了。下图说明了UFIELDUSDFLD调用的情况USDFLD调用增量步开始,UFIELD调用增量步结束

[原创]Abaqus UFIELD 和 USDFLD子程序详解的图14 

3几点总结

UFIELD指定预定义节点场变量的、USDFLD是用来重新定义材积分点的场变量当没有USDFLD定义材料积分点的场变量时,会通过节点场变量插值得到。当改变材料积分点场变量时,节点值不会改变。

USDFLD定义后是没有激活的,必须通过*Field*initial conditiontype=field关键字来激活,或者定义场变量依赖的材料参数也可以激活

*field*initial condition关键字都不支持abaqus CAE操作,可以编辑inp或者edit keyword

学习有限元奇巧淫技

学习有限元理论知识

了然于心、游刃有余

CAE仿真实验室,更多有限元干货等你来拿!欢迎留言讨论、若有疑问可私信~

https://mmbiz.qlogo.cn/mmbiz_jpg/ZKtYgmRdvjvCyNCM9Bib9iakX2vLpPqRNWLEV4jh9kyegl0hp4KRWIE0z3ZDXib8xzeKsh8NjQGV86sPSPUNVt5cQ/0?wx_fmt=jpeg


(6条)
默认 最新
学习了
评论 点赞
感谢分享
评论 点赞

查看更多评论 >

点赞 19 评论 5 收藏 48
关注