前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【阿信ABAQUS子程序(7)】USDFLD

【阿信ABAQUS子程序(7)】USDFLD

作者头像
阿信老师CAE
发布2022-05-17 16:37:37
3.5K0
发布2022-05-17 16:37:37
举报
文章被收录于专栏:ABAQUS二次开发ABAQUS二次开发

ABAQUS子程序USDFLD(User subroutine to redefine field variables at a material point.),提供了用户自定义场变量的功能。USDFLD所有功能均可采用UMAT实现,但是相对而言其应用方式较UMAT更为简单,并不需要用户去重新开发材料本构模型,可以借助于ABAQUS自带的本构,通过读取计算过程中积分点上的场变量信息,在经过一定的计算之后上传新的自定义场变量结果即可,同时也可以通过这种机制反作用自带本构模型。

ABAQUS子程序USDFLD的接口如下:

代码语言:javascript
复制
      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(*)


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


      RETURN
      END

ABAQUS帮助文档对USDFLD子程序中各个哑元的说明很详细,本文不再一一复述,仅列出一个较为重要的数组FIELD,帮助文档介绍如下。

FIELD(NFIELD)

An array containing the field variables at the current material point. These are passed in with the values interpolated from the nodes at the end of the current increment, as specified with initial condition definitions, predefined field variable definitions, or user subroutine UFIELD. The interpolation is performed using the same scheme used to interpolate temperatures: an average value is used for linear elements; an approximate linear variation is used for quadratic elements (also see “Solid (continuum) elements,” Section 28.1.1 of the Abaqus Analysis User's Guide). The updated values are used to calculate the values of material properties that are defined to depend on field variables and are passed into other user subroutines (CREEP, HETVAL, UEXPAN, UHARD, UHYPEL, UMAT, UMATHT, and UTRS) that are called at this material point.

下面我们采用一个小例子来演示一下USDFLD的使用,模型如图所示,为一简单的轧制过程仿真模型,采用平面应变单元。

图1 计算模型

在本文中定义一个状态变量SDV1来表征工件中应力分量S22绝对值大于360MPa的区域,SDV1为固定值,设定为1。

总的来说实现这个入门级任务的子程序并不复杂,读者朋友可以尝试编写更为复杂的程序,比如进行相变仿真和材料属性的改变等等,限于篇幅,本文不再进行更为深入的介绍。

本文USDFLD子程序具体代码如下:

代码语言:javascript
复制
      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 laccflg)
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(*)
      real S22

C    获取积分点应力张量
      CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,jrcd,
     $     jmac, jmtyp, matlayo, laccflg)     
      S22 = ABS( ARRAY(2) )

C    更新状态变量 
      FIELD(1) = 0.5D0
      STATEV(1) = 0.d0      
      IF (S22 .GE. 3.6D8) THEN 
        STATEV(1) = 1.D0
      END IF 
C
      RETURN
      END

计算结果云图如下:

图2 S22云图

图3 自定义TEST_S22状态变量云图

从计算结果云图看,本文USDFLD子程序很好的实现了预定目标。

补充说明内容:

(1)在USDFLD中用到的子程序GETVRM,可以读取积分点的所有状态变量,详情请查阅帮助文档。

(2)在结果中显示自定义状态变量SDV的名称。通常而言,我们子程序中会有较多的自定义状态变量SDV,在结果中显示为SDV1、SDV2。。。,很不方便,记不清楚。如需显示状态变量的名称,则可按照下图所示,按照1,SDV名称,2,SDV名称。。对应续行即可。下图为在ABAQUS/CAE界面修改关键字方式,也可以直接在inp文件中修改。

图4 修改结果文件中自定义状态变量SDV的显示名称

【阿信ABAQUS子程序系列文章——未完待续】

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ABAQUS二次开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云图数据可视化
腾讯云图数据可视化(Tencent Cloud Visualization) 是一站式数据可视化展示平台,旨在帮助用户快速通过可视化图表展示大量数据,低门槛快速打造出专业大屏数据展示。精心预设多种行业模板,极致展示数据魅力。采用拖拽式自由布局,全图形化编辑,快速可视化制作。腾讯云图数据可视化支持多种数据来源配置,支持数据实时同步更新,同时基于 Web 页面渲染,可灵活投屏多种屏幕终端。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档