天大结构26 发表于 2013-12-26 17:06:03

求大神:两种不同材料的USDFLD子程序如何放在一起识别

两种材料,USDFLD子程序中,区别在于两种材料的强度参数不一样,其他都一样,如何编辑让他们放在一起,计算机能够识别?

chenxm0298 发表于 2013-12-30 21:56:48

用一个if语句:
USDFLD
if 材料名=材料1 调用USDFLD1
if 材料名=材料2 调用USDFLD2

bingszabsina 发表于 2013-12-31 14:37:05

chenxm0298 发表于 2013-12-30 21:56
用一个if语句:
USDFLD
if 材料名=材料1 调用USDFLD1


SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
C
      INCLUDE 'ABA_PARAM.INC'
C
C STRENGTH PARAMETERS
      PARAMETER(Xc=600,Xt=700,Yc=120,Yt=70,
   $    S12=45)
C
      CHARACTER*80 CMNAME,ORNAME
      CHARACTER*3FLGRAY(15)
      DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),T(3,3),TIME(2)
      DIMENSION ARRAY(15),JARRAY(15),coord(*),jmac(*),jmtyp(*)
C
C CALCULATE COEFFICIENT OF TSAI-WU
      F1 = 1/Xt-1/Xc
      F2 = 1/Yt-1/Yc
      F11 = 1/(Xt*Xc)
      F22 = 1/(Yt*Yc)
      F66 = 1/S12**2
      F12 = -0.5/(Xt*Xc*Yt*Yc)**0.5
C
C INITIALIZE FAILURE FLAGS FROM STATEV.
      CR11 = STATEV(1)
      CR22 = STATEV(2)
      CR12 = STATEV(3)            
C
C GET STRESSES FROM PREVIOUS INCREMENT
      CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,jrcd,
   $   jmac, jmtyp, matlayo, laccflg)
      ST11 = ARRAY(1)
      ST22 = ARRAY(2)
      ST33 = ARRAY(3)
      ST12 = ARRAY(4)
      ST13 = ARRAY(5)
      ST23 = ARRAY(6)
C
C TSAI-WU CRITERION
      CR = F1*ST11 + F2*ST22+ F11*ST11**2 + F22*ST22**2 +
   $       2*F12*ST11*ST22 + F66*ST12**2
C
C FAILURE TYPE
      IF (CR>=1) THEN
             H1 = F1*ST11 + F11*ST11**2
             H2 = F2*ST22 + F22*ST22**2
             H6 = F66*ST12**2
          IF (CR11<1) THEN
            IF((H1 .GE. H2).AND.(H1.GE.H6)) THEN
                  CR11=1
            ELSE
                  CR11=0
            ENDIF
          ENDIF
          IF (CR22<1) THEN
            IF ((H2 .GE. H1).AND.(H2.GE.H6)) THEN
                  CR22=1
            ELSE
                  CR22=0
            ENDIF
          ENDIF
          IF (CR12<1) THEN
            IF ((H6 .GE. H1).AND.(H6.GE.H2)) THEN
                  CR12=1
            ELSE
                  CR12=0
            ENDIF
          ENDIF
      ENDIF   
C
C   UPDATE STATEV            
      STATEV(1) = CR11
      STATEV(2) = CR22
      STATEV(3) = CR12   
C
C   UPDATE FIELD VARIABLES      
      IF (CR11>0) FIELD(1) = 1
      IF (CR22>0) FIELD(2) = 1
      IF (CR12>0) FIELD(3) = 1
      
      RETURN
      END


以上就是USDFLD子程序,我在poperty项,定义两种材料,即两种User Defined Field,这两种材料的不同之处就是把上边程序中Xc=600,Xt=700,Yc=120,Yt=70,S12=45 数据修改下,两种材料两种数据,其他都一样一样,在计算时,如何把他们联系起来,计算机识别,求操作,用M1和M2 分别定义两种材料名..不胜感激!

chenxm0298 发表于 2013-12-31 19:32:55

bingszabsina 发表于 2013-12-31 14:37
SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTA ...

SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
C
      INCLUDE 'ABA_PARAM.INC'
C
   if (cmname==M1 ) then
   callSUBROUTINE USDFLD1(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
   ELSE IF( cmname==M2 ) then
   callSUBROUTINE USDFLD2(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)

SUBROUTINE USDFLD1(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
C STRENGTH PARAMETERS
      PARAMETER(Xc=600,Xt=700,Yc=120,Yt=70,
   $    S12=45)
C
      CHARACTER*80 CMNAME,ORNAME
      CHARACTER*3FLGRAY(15)
      DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),T(3,3),TIME(2)
      DIMENSION ARRAY(15),JARRAY(15),coord(*),jmac(*),jmtyp(*)
C
C CALCULATE COEFFICIENT OF TSAI-WU
      F1 = 1/Xt-1/Xc
      F2 = 1/Yt-1/Yc
      F11 = 1/(Xt*Xc)
      F22 = 1/(Yt*Yc)
      F66 = 1/S12**2
      F12 = -0.5/(Xt*Xc*Yt*Yc)**0.5
C
C INITIALIZE FAILURE FLAGS FROM STATEV.
      CR11 = STATEV(1)
      CR22 = STATEV(2)
      CR12 = STATEV(3)            
C
C GET STRESSES FROM PREVIOUS INCREMENT
      CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,jrcd,
   $   jmac, jmtyp, matlayo, laccflg)
      ST11 = ARRAY(1)
      ST22 = ARRAY(2)
      ST33 = ARRAY(3)
      ST12 = ARRAY(4)
      ST13 = ARRAY(5)
      ST23 = ARRAY(6)
C
C TSAI-WU CRITERION
      CR = F1*ST11 + F2*ST22+ F11*ST11**2 + F22*ST22**2 +
   $       2*F12*ST11*ST22 + F66*ST12**2
C
C FAILURE TYPE
      IF (CR>=1) THEN
             H1 = F1*ST11 + F11*ST11**2
             H2 = F2*ST22 + F22*ST22**2
             H6 = F66*ST12**2
          IF (CR11<1) THEN
            IF((H1 .GE. H2).AND.(H1.GE.H6)) THEN
                  CR11=1
            ELSE
                  CR11=0
            ENDIF
          ENDIF
          IF (CR22<1) THEN
            IF ((H2 .GE. H1).AND.(H2.GE.H6)) THEN
                  CR22=1
            ELSE
                  CR22=0
            ENDIF
          ENDIF
          IF (CR12<1) THEN
            IF ((H6 .GE. H1).AND.(H6.GE.H2)) THEN
                  CR12=1
            ELSE
                  CR12=0
            ENDIF
          ENDIF
      ENDIF   
C
C   UPDATE STATEV            
      STATEV(1) = CR11
      STATEV(2) = CR22
      STATEV(3) = CR12   
C
C   UPDATE FIELD VARIABLES      
      IF (CR11>0) FIELD(1) = 1
      IF (CR22>0) FIELD(2) = 1
      IF (CR12>0) FIELD(3) = 1
      
      RETURN
      END

SUBROUTINE USDFLD2(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
C STRENGTH PARAMETERS
      PARAMETER(Xc=600,Xt=700,Yc=120,Yt=70,
   $    S12=45)
C
      CHARACTER*80 CMNAME,ORNAME
      CHARACTER*3FLGRAY(15)
      DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),T(3,3),TIME(2)
      DIMENSION ARRAY(15),JARRAY(15),coord(*),jmac(*),jmtyp(*)
C
C CALCULATE COEFFICIENT OF TSAI-WU
      F1 = 1/Xt-1/Xc
      F2 = 1/Yt-1/Yc
      F11 = 1/(Xt*Xc)
      F22 = 1/(Yt*Yc)
      F66 = 1/S12**2
      F12 = -0.5/(Xt*Xc*Yt*Yc)**0.5
C
C INITIALIZE FAILURE FLAGS FROM STATEV.
      CR11 = STATEV(1)
      CR22 = STATEV(2)
      CR12 = STATEV(3)            
C
C GET STRESSES FROM PREVIOUS INCREMENT
      CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,jrcd,
   $   jmac, jmtyp, matlayo, laccflg)
      ST11 = ARRAY(1)
      ST22 = ARRAY(2)
      ST33 = ARRAY(3)
      ST12 = ARRAY(4)
      ST13 = ARRAY(5)
      ST23 = ARRAY(6)
C
C TSAI-WU CRITERION
      CR = F1*ST11 + F2*ST22+ F11*ST11**2 + F22*ST22**2 +
   $       2*F12*ST11*ST22 + F66*ST12**2
C
C FAILURE TYPE
      IF (CR>=1) THEN
             H1 = F1*ST11 + F11*ST11**2
             H2 = F2*ST22 + F22*ST22**2
             H6 = F66*ST12**2
          IF (CR11<1) THEN
            IF((H1 .GE. H2).AND.(H1.GE.H6)) THEN
                  CR11=1
            ELSE
                  CR11=0
            ENDIF
          ENDIF
          IF (CR22<1) THEN
            IF ((H2 .GE. H1).AND.(H2.GE.H6)) THEN
                  CR22=1
            ELSE
                  CR22=0
            ENDIF
          ENDIF
          IF (CR12<1) THEN
            IF ((H6 .GE. H1).AND.(H6.GE.H2)) THEN
                  CR12=1
            ELSE
                  CR12=0
            ENDIF
          ENDIF
      ENDIF   
C
C   UPDATE STATEV            
      STATEV(1) = CR11
      STATEV(2) = CR22
      STATEV(3) = CR12   
C
C   UPDATE FIELD VARIABLES      
      IF (CR11>0) FIELD(1) = 1
      IF (CR22>0) FIELD(2) = 1
      IF (CR12>0) FIELD(3) = 1
      
      RETURN
      END
大概思路就是这样可能会有语法错误 自己改改吧 好长时间没用了 忘了

天大结构26 发表于 2014-1-1 15:49:55

chenxm0298 发表于 2013-12-31 19:32
SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTA ...

万分感谢,我试试

bingszabsina 发表于 2014-1-1 19:59:13

chenxm0298 发表于 2013-12-31 19:32
SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTA ...

SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
C
      INCLUDE 'ABA_PARAM.INC'
C
      IF (CMNAME(1:4) .EQ. 'MAT1') THEN
      CALL SUBROUTINE USDFLD1(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,
   1DTIME,CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
       ELSE IF( CMNAME(1:4) .EQ. 'MAT2' ) THEN
      CALLSUBROUTINE USDFLD2(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,
   1DTIME,CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
      END IF

   
      SUBROUTINE USDFLD1(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
C
      INCLUDE 'ABA_PARAM.INC'
C
C STRENGTH PARAMETERS
      PARAMETER(Xc=600,Xt=700,Yc=120,Yt=70,
   $    S12=45)
C
      CHARACTER*80 CMNAME,ORNAME
      CHARACTER*3FLGRAY(15)
      DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),T(3,3),TIME(2)
      DIMENSION ARRAY(15),JARRAY(15),coord(*),jmac(*),jmtyp(*)
C
C CALCULATE COEFFICIENT OF TSAI-WU
      F1 = 1/Xt-1/Xc
      F2 = 1/Yt-1/Yc
      F11 = 1/(Xt*Xc)
      F22 = 1/(Yt*Yc)
      F66 = 1/S12**2
      F12 = -0.5/(Xt*Xc*Yt*Yc)**0.5
C
C INITIALIZE FAILURE FLAGS FROM STATEV.
      CR11 = STATEV(1)
      CR22 = STATEV(2)
      CR12 = STATEV(3)            
C
C GET STRESSES FROM PREVIOUS INCREMENT
      CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,jrcd,
   $   jmac, jmtyp, matlayo, laccflg)
      ST11 = ARRAY(1)
      ST22 = ARRAY(2)
      ST33 = ARRAY(3)
      ST12 = ARRAY(4)
      ST13 = ARRAY(5)
      ST23 = ARRAY(6)
C
C TSAI-WU CRITERION
      CR = F1*ST11 + F2*ST22+ F11*ST11**2 + F22*ST22**2 +
   $       2*F12*ST11*ST22 + F66*ST12**2
C
C FAILURE TYPE
      IF (CR>=1) THEN
             H1 = F1*ST11 + F11*ST11**2
             H2 = F2*ST22 + F22*ST22**2
             H6 = F66*ST12**2
          IF (CR11<1) THEN
            IF((H1 .GE. H2).AND.(H1.GE.H6)) THEN
                  CR11=1
            ELSE
                  CR11=0
            ENDIF
          ENDIF
          IF (CR22<1) THEN
            IF ((H2 .GE. H1).AND.(H2.GE.H6)) THEN
                  CR22=1
            ELSE
                  CR22=0
            ENDIF
          ENDIF
          IF (CR12<1) THEN
            IF ((H6 .GE. H1).AND.(H6.GE.H2)) THEN
                  CR12=1
            ELSE
                  CR12=0
            ENDIF
          ENDIF
      ENDIF   
C
C   UPDATE STATEV            
      STATEV(1) = CR11
      STATEV(2) = CR22
      STATEV(3) = CR12   
C
C   UPDATE FIELD VARIABLES      
      IF (CR11>0) FIELD(1) = 1
      IF (CR22>0) FIELD(2) = 1
      IF (CR12>0) FIELD(3) = 1
      
      RETURN
      END
      
      
      SUBROUTINE USDFLD2(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTATV,NOEL,NPT,LAYER,KSPT,KSTEP,KINC,
   2 NDI,nshr,coord,jmac,jmtyp,matlayo,laccflg)
C
      INCLUDE 'ABA_PARAM.INC'
C
C STRENGTH PARAMETERS
      PARAMETER(Xc=400,Xt=600,Yc=120,Yt=70,
   $    S12=45)
C
      CHARACTER*80 CMNAME,ORNAME
      CHARACTER*3FLGRAY(15)
      DIMENSION FIELD(NFIELD),STATEV(NSTATV),DIRECT(3,3),T(3,3),TIME(2)
      DIMENSION ARRAY(15),JARRAY(15),coord(*),jmac(*),jmtyp(*)
C
C CALCULATE COEFFICIENT OF TSAI-WU
      F1 = 1/Xt-1/Xc
      F2 = 1/Yt-1/Yc
      F11 = 1/(Xt*Xc)
      F22 = 1/(Yt*Yc)
      F66 = 1/S12**2
      F12 = -0.5/(Xt*Xc*Yt*Yc)**0.5
C
C INITIALIZE FAILURE FLAGS FROM STATEV.
      CR11 = STATEV(1)
      CR22 = STATEV(2)
      CR12 = STATEV(3)            
C
C GET STRESSES FROM PREVIOUS INCREMENT
      CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,jrcd,
   $   jmac, jmtyp, matlayo, laccflg)
      ST11 = ARRAY(1)
      ST22 = ARRAY(2)
      ST33 = ARRAY(3)
      ST12 = ARRAY(4)
      ST13 = ARRAY(5)
      ST23 = ARRAY(6)
C
C TSAI-WU CRITERION
      CR = F1*ST11 + F2*ST22+ F11*ST11**2 + F22*ST22**2 +
   $       2*F12*ST11*ST22 + F66*ST12**2
C
C FAILURE TYPE
      IF (CR>=1) THEN
             H1 = F1*ST11 + F11*ST11**2
             H2 = F2*ST22 + F22*ST22**2
             H6 = F66*ST12**2
          IF (CR11<1) THEN
            IF((H1 .GE. H2).AND.(H1.GE.H6)) THEN
                  CR11=1
            ELSE
                  CR11=0
            ENDIF
          ENDIF
          IF (CR22<1) THEN
            IF ((H2 .GE. H1).AND.(H2.GE.H6)) THEN
                  CR22=1
            ELSE
                  CR22=0
            ENDIF
          ENDIF
          IF (CR12<1) THEN
            IF ((H6 .GE. H1).AND.(H6.GE.H2)) THEN
                  CR12=1
            ELSE
                  CR12=0
            ENDIF
          ENDIF
      ENDIF   
C
C   UPDATE STATEV            
      STATEV(1) = CR11
      STATEV(2) = CR22
      STATEV(3) = CR12   
C
C   UPDATE FIELD VARIABLES      
      IF (CR11>0) FIELD(1) = 1
      IF (CR22>0) FIELD(2) = 1
      IF (CR12>0) FIELD(3) = 1
      
      RETURN
      END
大神,我试了你的方法,程序有问题,你看能不能帮忙修改下,不胜感激!

bingszabsina 发表于 2014-1-2 15:18:17

chenxm0298 发表于 2013-12-31 19:32
SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTA ...

大神,救救我吧,我对程序确实很多不会,我就这个问题,帮忙给我调试成功把

chenxm0298 发表于 2014-1-5 10:41:15

bingszabsina 发表于 2014-1-2 15:18
大神,救救我吧,我对程序确实很多不会,我就这个问题,帮忙给我调试成功把 ...

不好意思 家里电脑没装软件 办公室又上不了网 没办法给你调试 还是你自己慢慢琢磨琢磨吧好好检查一下

chenxm0298 发表于 2014-1-5 10:43:25

bingszabsina 发表于 2014-1-2 15:18
大神,救救我吧,我对程序确实很多不会,我就这个问题,帮忙给我调试成功把 ...

好像缺一个 end if

cartographer 发表于 2014-1-5 15:48:04

看看这个可以不

bingszabsina 发表于 2014-1-7 15:23:55

cartographer 发表于 2014-1-5 15:48
看看这个可以不

已调试...出错了....谢谢!

cartographer 发表于 2014-1-7 16:09:43

bingszabsina 发表于 2014-1-7 15:23
已调试...出错了....谢谢!

你建一个简单的测试模型。提供一个inp出来

不然子程序是没法调的。

实际这个 我随便建了一个模型。是可以通过数据检查的。

HIT-xds 发表于 2014-4-6 20:43:45

请问您解决了么

HIT-xds 发表于 2014-4-7 10:16:59

bingszabsina 发表于 2014-1-7 15:23
已调试...出错了....谢谢!

我使用cartographer的就好使啊

HIT-xds 发表于 2014-4-7 10:20:22

chenxm0298 发表于 2013-12-31 19:32
SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
   1 CMNAME,ORNAME,NFIELD,NSTA ...

subroutine USDFLD2中是不是应该定义成
STATEV(4)=CR11
STATEV(5)=CR22
STATEV(6)=CR12
避免状态变量的冲突?

bingszabsina 发表于 2014-5-23 15:55:07

HIT-xds 发表于 2014-4-7 10:20
subroutine USDFLD2中是不是应该定义成
STATEV(4)=CR11
STATEV(5)=CR22


456 应该为124吧

bingszabsina 发表于 2014-5-23 15:56:15

HIT-xds 发表于 2014-4-6 20:43
请问您解决了么

早解决了,谢谢

王春泥Pris 发表于 2015-1-20 10:06:12

bingszabsina 发表于 2014-5-23 15:56
早解决了,谢谢

我也遇到了类似的问题,请问怎么解决的?{:3_66:}
我的也是两种材料,这两种材料的statev()和field()如果都从1开始,不会冲突吗?
另外我查看后处理的场变量FV时,发现只能显示FV1和FV2,可是两种材料加起来一共有三个FV呀,会不会第一材料的field(1)(也就是后处理输出的FV1)被第二种材料的field(1)覆盖了呢?

lyqday 发表于 2016-7-2 16:30:19

bingszabsina 发表于 2014-5-23 15:56
早解决了,谢谢

楼主可以贴一下程序么

113soim 发表于 2016-8-5 20:09:51

王春泥Pris 发表于 2015-1-20 10:06
我也遇到了类似的问题,请问怎么解决的?
我的也是两种材料,这两种材料的statev()和field() ...

前辈这个问题你有没有解决?望指教!!
页: [1] 2
查看完整版本: 求大神:两种不同材料的USDFLD子程序如何放在一起识别