- 积分
- 1
- 注册时间
- 2004-9-29
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2006-8-8 19:28:49
|
显示全部楼层
来自 黑龙江哈尔滨
creep模拟
这是我假定某种材料的蠕变曲线,根据曲线拟合了蠕变率,修改了ansys提供的子程序
*deck,usercreep parallel user gal
SUBROUTINE usercreep (impflg, ldstep, isubst, matId , elemId,
& kDInPt, kLayer, kSecPt, nstatv, nprop,
& prop , time , dtime , temp , dtemp ,
& toffst, statev, creqv , pres , seqv ,
& delcr , dcrda)
c*************************************************************************
c *** primary function ***
c Define creep laws when creep table options are
c TB,CREEP with TBOPT=100.
c Demonstrate how to implement usercreep subroutine
c
c Creep equation is
c dotcreq := k0 * seqv ^ n * creqv ^ m * exp (-b/T)
c
c seqv is equivalent effective stress (Von-Mises stress)
c creqv is equivalent effective creep strain
c T is the temperature
c k0, m, n, b are materials constants,
c
c This model corresponds to primary creep function TBOPT = 1
c
c gal 10.01.1998
c
c*************************************************************************
c
c input arguments
c ===============
c impflg (in ,sc ,i) Explicit/implicit integration
c flag (currently not used)
c ldstep (in ,sc ,i) Current load step
c isubst (in ,sc ,i) Current sub step
c matId (in ,sc ,i) number of material index
c elemId (in ,sc ,i) Element number
c kDInPt (in ,sc ,i) Material integration point
c kLayer (in ,sc ,i) Layer number
c kSecPt (in ,sc ,i) Section point
c nstatv (in ,sc ,i) Number of state variables
c nprop (in ,sc ,i) size of mat properties array
c
c prop (dp ,ar(*),i) mat properties array
c This array is passed all the creep
c constants defined by command
c TBDATA associated with TB,CREEP
c (do not use prop(13), as it is used
c elsewhere)
c at temperature temp.
c time Current time
c dtime Current time increment
c temp Current temperature
c dtemp Current temperature increment
c toffst (dp, sc, i) temperature offset from absolute zero
c seqv (dp ,sc , i) equivalent effective stress
c creqv (dp ,sc , i) equivalent effective creep strain
c pres (dp ,sc , i) hydrostatic pressure stress, -(Sxx+Syy+Szz)/3
c
c input output arguments input desc / output desc
c ====================== ========== ===========
c statev (dp,ar(*), i/o) user defined iinternal state variables at
c time 't' / 't+dt'.
c This array will be passed in containing the
c values of these variables at start of the
c time increment. They must be updated in this
c subroutine to their values at the end of
c time increment, if any of these internal
c state variables are associated with the
c creep behavior.
c
c output arguments
c ================
c delcr (dp ,sc , o) incremental creep strain
c dcrda (dp,ar(*), o) output array
c dcrda(1) - derivitive of incremental creep
c strain to effective stress
c dcrda(2) - derivitive of incremental creep
c strain to creep strain
c
c local variables
c ===============
c c1,c2,c3,c4 (dp, sc, l) temporary variables as creep constants
c con1 (dp ,sc, l) temporary variable
c t (dp ,sc, l) temporary variable
c
c*************************************************************************
c
c --- parameters
c
#include "impcom.inc"
DOUBLE PRECISION ZERO
PARAMETER (ZERO = 0.0d0)
c
c --- argument list
c
INTEGER ldstep, isubst, matId , elemId,
& kDInPt, kLayer, kSecPt, nstatv,
& impflg, nprop
DOUBLE PRECISION dtime , time , temp , dtemp , toffst,
& creqv , seqv , pres
DOUBLE PRECISION prop(*), dcrda(*), statev(nstatv)
c
c --- local variables
c
DOUBLE PRECISION c1 , c2 , c3 , c4 ,
& con1 , delcr , t
c
c*************************************************************************
c
c *** skip when stress and creep strain are all zero
if (seqv.LE.ZERO.AND.creqv.LE.ZERO) GO TO 990
c *** add temperature off set
t = temp + toffst
c *** Primary creep function
c delcr := c1 * seqv ^ n * creqv ^ m * exp (-b/T) * dtime
c1 = prop(1)
c2 = prop(2)
c3 = prop(3)
c4 = prop(4)
c *** user need to make sure if c4 has nonzero value, temperature should be also nonzero.
con1 = ZERO
if(c4.ne.ZERO .and. t.gt.ZERO) con1 = c4/t
c *** calculate incremental creep strain
delcr = ZERO
c *** 修改为适合的蠕变方程
c IF(c1.gt.ZERO) delcr = (exp( log(c1) + c2 * log(seqv) +
c & c3 * log(creqv) - con1 )) * dtime
a1=1.14038
b1=0.14038
c1=0.4301
a2=1.08148
b2=0.02663
E0=1.E4
C E0为初始弹性摸量
IF(c1.gt.ZERO) then
delcr=seqv/E0*(-b1*c1**TIME*log(c1))* dtime
IF(time.GE.1.0) delcr=seqv/E0*(a2*b2*TIME**(b2-1)) * dtime
endif
c *** derivitive of incremental creep strain to effective stress
dcrda(1)= c2 * delcr / seqv
c *** derivitive of incremental creep strain to effective creep strain
dcrda(2)= c3 * delcr / creqv
c *** write the effective creep strain to last state variable for verification
statev(nstatv) = creqv
990 continue
return
end |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
评分
-
1
查看全部评分
-
|