找回密码
 注册
Simdroid-非首页
查看: 3414|回复: 39

[子程序] 浅谈定义场子程序 UFIELD 和 USDFLD 的应用及作用关系

[复制链接]
发表于 2009-7-3 13:34:35 | 显示全部楼层 |阅读模式 来自 澳大利亚
浅谈定义场子程序 UFIELD 和 USDFLD 的应用及作用关系



最近花了几天时间学习和总结了ABAQUS中子程序 UFIELD 与 USDFLD 的应用,在此简单总结一下,仅供参考。

为便于理解,采用半白话文。

UFIELD 与 USDFLD 是abaqus中常用的定义场变量的子程序。

所谓预定义场,简单理解的话可看作是一种与温度场类似的场,比如可以理解成电磁场,浓度场,化学势场等等,只要你在子程序中需要用到类似变量,均可以视其为预定义场。

1. UFIELD(User subroutine to specify predefined field variables.) 用于指定预定义场变量。

需要说明的是 UFIELD定义的场是直接定义到节点上的,所定义的节点场变量可以在分析中随时更新。 有两种更新方法:独立更新 和同时更新。

a)独立更新,  就是在分析过程中,多个场变量可一个一个地更新数值。

在abaqus中默认的变量更新就是独立更新的方式,也就是一次只有一个变量得到更新,如果有多个变量都需要更新,则需要调用多次UFIELD子程序,更新几个变量就调用几次UFIELD子程序。这种独立更新方式常用于场变量相互独立的情况。


独立更新的inp 结构如下:

*INITIAL CONDITIONS,TYPE=FIELD,VARIABLE=1
NALL,100.
*INITIAL CONDITIONS,TYPE=FIELD,VARIABLE=2
NALL,200.
*INITIAL CONDITIONS,TYPE=FIELD,VARIABLE=3
NALL,100.
*STEP
*STATIC
*BOUNDARY
***
***
***
*FIELD,USER,VARIABLE=2
NALL,
*FIELD,USER,VARIABLE=2
NALL,
*FIELD,USER,VARIABLE=3
NALL,


子程序结构:

      SUBROUTINE UFIELD(FIELD,KFIELD,NSECPT,KSTEP,KINC,TIME,NODE,COORDS,
     1                  TEMP,DTEMP,NFIELD)
C
      INCLUDE 'ABA_PARAM.INC'
C
      DIMENSION FIELD(NSECPT,NFIELD),COORDS(3),TIME(2),TEMP(NSECPT),
     1          DTEMP(NSECPT)
C
      IF(***) THEN
        FIELD(1,1)=***
      ELSE IF(***) THEN
        FIELD(1,1)=***
      ELSE IF(***) THEN
        FIELD(1,1)=***
      ENDIF        
      RETURN
      END


b)同时更新,所谓同时更新,就是在分析中多个变量通过UFIELD子程序同时得到更新,也就是一次有多个变量同时得到更新。

这种同时更新方式常用于场变量相互依赖的情况。在这种更新方式中,在inp中必须指定需要同时更新场变量的数目。

同时更新的inp 结构如下:

*INITIAL CONDITIONS,TYPE=FIELD,VARIABLE=1
NALL,100.
*INITIAL CONDITIONS,TYPE=FIELD,VARIABLE=2
NALL,200.
*INITIAL CONDITIONS,TYPE=FIELD,VARIABLE=3
NALL,100.
*STEP
*STATIC
*BOUNDARY
***
***
***
*FIELD,USER, NUMBER=3
NALL,


子程序结构:

      SUBROUTINE UFIELD(FIELD,KFIELD,NSECPT,KSTEP,KINC,TIME,NODE,COORDS,        
     1                  TEMP,DTEMP,NFIELD)                                      
C                                                                              
      INCLUDE 'ABA_PARAM.INC'                                                   
C                                                                              
      DIMENSION FIELD(NSECPT,NFIELD),COORDS(3),TIME(2),TEMP(NSECPT),            
     1          DTEMP(NSECPT)                                                   
C                                                                              
        FIELD(1,1)=***                                             
        FIELD(1,2)=***                                          
        FIELD(1,3)=***                                      
c                                                                              
      RETURN                                                                    
      END


2. USDFLD(User subroutine to redefine field variables at a material point.)  用于对积分点的场变量进行重定义。

这点与UFIELD显著不同,它只是对积分点处的场变量进行重定义,之所以称之为重定义是因为在应用USDFLD子程序之前,尽管 initial conditions, predefined field variables, 或者 ubroutine UFIELD 并没有指定积分点处的场变量(initial conditions, predefined field variables, 或者 ubroutine UFIELD 只是给定的节点处的场变量值),但积分点处的场变量可以通过相应节点处的场变量插值得到,也就是说默认是对节点场变量值插值以得到积分点处的场变量值。

但可能插值锁得到的积分点处的场变量值 不是我们分析所需要的,比如,你想在一个积分点上定义场变量作为时间的函数,或是任何可用的积分点变量(在输出变量标识符表中列出的那些,但是不包括用户自己定义的UVARM and UVARMn中的那些输出变量)的函数。这时就可以通过USDFLD对积分点场变量进行重新指定,因此我们称之为重定义积分点场变量,也就是覆盖插值得到的值,生成自己需要的值。

需要指出的是

a)调用的USDFLD子程序适用在所有的单元积分点上,因为材料定义包括用户定义的场变量。

b)如果想得到材料的具体积分点数据,须调用应用程序GETVRM来提取。

c)在用户子程序中对场变量的任何改变对于是局限于积分点的:节点的场变量值不受影响,仍然保持initial conditions, predefined field variables, 或者 ubroutine UFIELD所定义的场变量值。

d)在USDFLD中定义的场变量的值被用于计算材料属性的值,并传送到其他的需在积分点上调用的用户子程序中,比如
CREEP,HETVAL,UEXPAN,UHARD,UHYPEL,UMAT,UMATHT,UTRS (注意: 这些子程序的中场变量都是作用于积分点上的而不是节点上)


e)状态变量可以在USDFLD中被更新,然后可以传递到如上面所列出的那些其他用户子程序中去。

附上帮助文档上的例子

      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(*)
C
C 当前应变的绝对值:
      CALL GETVRM('E',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,  !材料点量的值通过调用GETVRM 得到
      MATLAYO,LACCFLA)
      EPS = ABS( ARRAY(1) )
C 积分点应变的最大值:
      CALL GETVRM('SDV',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,
      MATLAYO,LACCFLA)
      EPSMAX = ARRAY(1)
C 这里的场变量指的是EPS , EPSMAX二者之间的最大值。
      FIELD(1) = MAX( EPS , EPSMAX )
C 将最大应变存储为一个状态变量

      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
      ENDIF
C
      RETURN
      END


3  UFIELD 与 USDFLD的关系:

a) 他们所定义的对象是不同的,UFIELD针对 节点 定义场变量, USDFLD针对积分点重定义场变量。

b) 在一个分析中,可以联合使用UFIELD 与 USDFLD,不过注意他们的含义和作用范围,USDFLD对积分点场变量进行重定义后并不影响UFIELD所定义的节点场变量值, 也就是节点场值 不会对 积分点处的场变量值进行插值,而仍是采用原来UFIELD(或initial conditions, predefined field variables)所定义的节点场变量值。

c)虽然说在一个分析中UFIELD 与 USDFLD可以联合使用,但并不意味着 UFIELD 与 USDFLD可以互相嵌套,二者不能嵌套。在ABAQUS中任何用户子程序都不能调用任何其他用户子程序,但可以调用用户自己编写的FORTRAN子程序和ABAQUS应用程序,比如上文中的 CALL GETVRM('SDV',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP, MATLAYO,LACCFLA)

d)需在积分点上调用的用户子程序中,比如
CREEP,HETVAL,UEXPAN,UHARD,UHYPEL,UMAT,UMATHT,UTRS ,虽然它们需要场变量是作用在积分点上的,但如果没有用USDFLD, 它们仍可以调用UFIELD(或initial conditions, predefined field variables)所指定的节点场变量值,子程序会自动将节点场变量插值为所需的积分点场变量值。  即如果没有对积分点场变量进行重定义时,CREEP,HETVAL,UEXPAN,UHARD,UHYPEL,UMAT,UMATHT,UTRS等需在积分点调用的子程序仍然可以调用节点场变量值。


以上总结,均通过自己反复实例验证,希望对大家有所帮助。 有机会把验证的例子传上来!

评分

1

查看全部评分

发表于 2009-7-3 21:25:42 | 显示全部楼层 来自 英国
Simdroid开发平台
补充:

如果定义了 USDFLD 子程序,则需要在 inp中 激活USDFLD的场变量, 需要用*material,  或  intial condition 或*field  激活。
ma 发表于 2009-7-3 14:37


这样说是不是恰当一些:
*FIELD,USER
调用UFIELD

*USER DEFINED FIELD
调用USDFLD

*INITIAL CONDITION, TYPE=FIELD
赋初始值给场量

一些关键字后面的DEPENDENCIES=number,用来激活场量。
回复 1 不支持 0

使用道具 举报

发表于 2009-7-3 17:35:15 | 显示全部楼层 来自 奥地利
1# ma
二者还可以定义和更新求解相关状态变量solution-dependent state variables的
等待实例
回复 1 不支持 0

使用道具 举报

 楼主| 发表于 2009-7-3 14:37:06 | 显示全部楼层 来自 澳大利亚
补充:

如果定义了 USDFLD 子程序,则需要在 inp中 激活USDFLD的场变量, 需要用*material,  或  intial condition 或*field  激活。
回复 1 不支持 0

使用道具 举报

 楼主| 发表于 2009-7-3 17:49:34 | 显示全部楼层 来自 澳大利亚
现在 又发现一些新的问题

不明白子程序之间具体的传递过程   和传递位置

可看一下我的问题
http://forum.simwe.com/thread-887381-1-1.html
回复 不支持

使用道具 举报

 楼主| 发表于 2009-7-3 21:59:50 | 显示全部楼层 来自 澳大利亚
激活场变量 不见得是通过 DEPENDENCIES=number

除了材料,还有 intial condition 或*field
回复 不支持

使用道具 举报

发表于 2009-7-4 10:53:12 | 显示全部楼层 来自 台湾台北
usdfld 中
將直角座標轉換成圓柱座標後
密度或著是楊氏係數可以隨著徑向做改變嗎?
這時的場變量 是不是就是我的密度與場變數!!??
回复 不支持

使用道具 举报

发表于 2009-7-4 11:47:28 | 显示全部楼层 来自 广东深圳
学习了.谢谢分享.
回复 不支持

使用道具 举报

发表于 2009-7-20 21:13:43 | 显示全部楼层 来自 武汉大学
讲的很清楚,谢谢
回复 不支持

使用道具 举报

发表于 2009-7-31 08:20:33 | 显示全部楼层 来自 江苏苏州
学习了,,谢谢
回复 不支持

使用道具 举报

发表于 2009-8-26 14:31:14 | 显示全部楼层 来自 江苏南京
各位上个实例就更好了,方便学习
回复 不支持

使用道具 举报

发表于 2010-1-25 17:20:03 | 显示全部楼层 来自 LAN
这个世界上总有一些高手,自叹不如啊
回复 不支持

使用道具 举报

发表于 2010-2-3 22:30:04 | 显示全部楼层 来自 北京海淀
请问楼主:材料里面定义的DEPENDENCIES=number
变量和
           inp中 intial condition 或中step    *field的场变量怎么关联?
             激活场变量?????
回复 不支持

使用道具 举报

发表于 2010-2-3 22:33:19 | 显示全部楼层 来自 北京海淀
帮助文档里,用了   材料中一个场变量,   
                           而建了3个场变量,他们之间好像没有关联?
回复 不支持

使用道具 举报

发表于 2010-2-3 22:40:11 | 显示全部楼层 来自 北京海淀
这个问题?请务必思考一下,怎么通过变量field实现的不同区域材料的定义:每个节点的材料常数不同,
  或者      生成节点数据   ,然后INITIAL CONDITION, TYPE=FIELD
通过直接加上input关键字,实现??

        以及      在组合材料中场变量怎么识别?
回复 不支持

使用道具 举报

发表于 2010-3-25 10:18:25 | 显示全部楼层 来自 北京海淀
楼主好强大啊,学习
回复 不支持

使用道具 举报

发表于 2010-3-25 10:19:08 | 显示全部楼层 来自 北京海淀
问下楼主,例子啥时候有啊?
回复 不支持

使用道具 举报

发表于 2010-3-25 22:04:37 | 显示全部楼层 来自 北京海淀
救民于水火啊
回复 不支持

使用道具 举报

发表于 2010-5-29 11:00:28 | 显示全部楼层 来自 清华大学
顶顶顶,帮大忙了
回复 不支持

使用道具 举报

发表于 2010-6-10 14:45:38 | 显示全部楼层 来自 浙江杭州
这个问题?请务必思考一下,怎么通过变量field实现的不同区域材料的定义:每个节点的材料常数不同,: R& ^# Z8 P) G7 F
  或者      生成节点数据   ,然后INITIAL CONDITION, TYPE=FIELD9 W7 w8 i3 d$ v9 Q
通过直接加上input关键字,实现??
$ F  r1 B' f% M5 F. q- @
+ L4 ^7 |! O+ v  M6 [. q* W& g0 e        以及      在组合材料中场变量怎么识别?
这个问题我也想知道呢
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-20 08:56 , Processed in 0.051651 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表