求大神:两种不同材料的USDFLD子程序如何放在一起识别
两种材料,USDFLD子程序中,区别在于两种材料的强度参数不一样,其他都一样,如何编辑让他们放在一起,计算机能够识别? 用一个if语句:USDFLD
if 材料名=材料1 调用USDFLD1
if 材料名=材料2 调用USDFLD2 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 分别定义两种材料名..不胜感激! 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
大概思路就是这样可能会有语法错误 自己改改吧 好长时间没用了 忘了 chenxm0298 发表于 2013-12-31 19:32
SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
1 CMNAME,ORNAME,NFIELD,NSTA ...
万分感谢,我试试 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
大神,我试了你的方法,程序有问题,你看能不能帮忙修改下,不胜感激! chenxm0298 发表于 2013-12-31 19:32
SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT,TIME,DTIME,
1 CMNAME,ORNAME,NFIELD,NSTA ...
大神,救救我吧,我对程序确实很多不会,我就这个问题,帮忙给我调试成功把 bingszabsina 发表于 2014-1-2 15:18
大神,救救我吧,我对程序确实很多不会,我就这个问题,帮忙给我调试成功把 ...
不好意思 家里电脑没装软件 办公室又上不了网 没办法给你调试 还是你自己慢慢琢磨琢磨吧好好检查一下 bingszabsina 发表于 2014-1-2 15:18
大神,救救我吧,我对程序确实很多不会,我就这个问题,帮忙给我调试成功把 ...
好像缺一个 end if 看看这个可以不 cartographer 发表于 2014-1-5 15:48
看看这个可以不
已调试...出错了....谢谢! bingszabsina 发表于 2014-1-7 15:23
已调试...出错了....谢谢!
你建一个简单的测试模型。提供一个inp出来
不然子程序是没法调的。
实际这个 我随便建了一个模型。是可以通过数据检查的。 请问您解决了么 bingszabsina 发表于 2014-1-7 15:23
已调试...出错了....谢谢!
我使用cartographer的就好使啊 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
避免状态变量的冲突? HIT-xds 发表于 2014-4-7 10:20
subroutine USDFLD2中是不是应该定义成
STATEV(4)=CR11
STATEV(5)=CR22
456 应该为124吧 HIT-xds 发表于 2014-4-6 20:43
请问您解决了么
早解决了,谢谢 bingszabsina 发表于 2014-5-23 15:56
早解决了,谢谢
我也遇到了类似的问题,请问怎么解决的?{:3_66:}
我的也是两种材料,这两种材料的statev()和field()如果都从1开始,不会冲突吗?
另外我查看后处理的场变量FV时,发现只能显示FV1和FV2,可是两种材料加起来一共有三个FV呀,会不会第一材料的field(1)(也就是后处理输出的FV1)被第二种材料的field(1)覆盖了呢? bingszabsina 发表于 2014-5-23 15:56
早解决了,谢谢
楼主可以贴一下程序么 王春泥Pris 发表于 2015-1-20 10:06
我也遇到了类似的问题,请问怎么解决的?
我的也是两种材料,这两种材料的statev()和field() ...
前辈这个问题你有没有解决?望指教!!
页:
[1]
2