Warning: file(datafile/online) [function.file]: failed to open stream: No such file or directory in /home/all2one/public_html/bbs/topic.php on line 200
阳光精品论坛 > 『 CAE 专栏 』 > 浅谈定义场子程序 UFIELD 和 USDFLD 的应用及作用关系
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
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 y' 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所定义的场变量值。
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