17 subroutine iso_creep(matl, sectType, stress, strain, extval,plstrain, &
18 dtime,ttime,stiffness, temp, hdflag)
20 integer,
intent(in) :: sectType
21 real(kind=
kreal),
intent(in) :: stress(6)
22 real(kind=
kreal),
intent(in) :: strain(6)
23 real(kind=
kreal),
intent(in) :: extval(:)
24 real(kind=
kreal),
intent(in) :: plstrain
25 real(kind=
kreal),
intent(in) :: ttime
26 real(kind=
kreal),
intent(in) :: dtime
27 real(kind=
kreal),
intent(out) :: stiffness(6,6)
28 real(kind=
kreal),
intent(in) :: temp
29 integer(kind=kint),
intent(in),
optional :: hdflag
31 integer :: i, j, hdflag_in
33 real(kind=
kreal) :: ina(1), outa(3)
34 real(kind=
kreal) :: xxn, aa
36 real(kind=
kreal) :: c3,e,un,g,stri(6),p,dstri,c4,c5,f,df, eqvs
39 if(
present(hdflag) ) hdflag_in = hdflag
49 if( dtime==0.d0 .or. all(stress==0.d0) )
return
50 if( hdflag_in == 2 )
return
55 call fetch_tabledata(
mc_isoelastic, matl%dict, outa(1:2), ierr, ina )
58 stop
"error in isotropic elasticity definition"
65 if( matl%mtype==
norton )
then
67 call fetch_tabledata(
mc_norton, matl%dict, outa, ierr, ina )
69 aa=outa(1)*((ttime+dtime)**(outa(3)+1.d0)-ttime**(outa(3)+1.d0))/(outa(3)+1.d0)
77 p=-(stri(1)+stri(2)+stri(3))/3.d0
82 dstri=dsqrt(1.5d0*(stri(1)*stri(1)+stri(2)*stri(2)+stri(3)*stri(3)+ &
83 2.d0*(stri(4)*stri(4)+stri(5)*stri(5)+stri(6)*stri(6))) )
90 if( eqvs<1.d-10 ) eqvs=1.d-10
97 c4=c3*plstrain/(dstri+3.d0*g*plstrain)
98 c3=c4-c3*df/(3.d0*g*df+1.d0)
103 stiffness(i,j) = stiffness(i,j) +c3*stri(i)*stri(j)
107 stiffness(i,i) = stiffness(i,i) - c4
109 stiffness(i,j) = stiffness(i,j) +c5
113 stiffness(i,i) = stiffness(i,i) - c4/2.d0
120 subroutine update_iso_creep(matl, sectType, strain, stress, extval, plstrain, &
121 dtime, ttime, temp, hdflag)
123 integer,
intent(in) :: secttype
124 real(kind=
kreal),
intent(in) :: strain(6)
125 real(kind=
kreal),
intent(inout) :: stress(6)
126 real(kind=
kreal),
intent(inout) :: extval(:)
127 real(kind=
kreal),
intent(out) :: plstrain
128 real(kind=
kreal),
intent(in) :: ttime
129 real(kind=
kreal),
intent(in) :: dtime
130 real(kind=
kreal),
intent(in) :: temp
131 integer(kind=kint),
intent(in),
optional :: hdflag
133 integer :: i, hdflag_in
135 real(kind=
kreal) :: ina(1), outa(3)
136 real(kind=
kreal) :: xxn, aa
138 real(kind=
kreal) :: e,un,g,dg,ddg,stri(6),p,dstri,f,df, eqvs
141 if(
present(hdflag) ) hdflag_in = hdflag
146 if( dtime==0.d0 )
return
147 if( hdflag_in == 2 )
return
152 call fetch_tabledata(
mc_isoelastic, matl%dict, outa(1:2), ierr, ina )
154 stop
"error in isotropic elasticity definition"
161 if( matl%mtype==
norton )
then
163 call fetch_tabledata(
mc_norton, matl%dict, outa, ierr, ina )
165 stop
"error in isotropic elasticity definition"
168 aa=outa(1)*((ttime+dtime)**(outa(3)+1.d0)-ttime**(outa(3)+1.d0))/(outa(3)+1.d0)
178 p=-(stri(1)+stri(2)+stri(3))/3.d0
183 dstri=dsqrt(1.5d0*(stri(1)*stri(1)+stri(2)*stri(2)+stri(3)*stri(3)+ &
184 2.d0*(stri(4)*stri(4)+stri(5)*stri(5)+stri(6)*stri(6))) )
190 if( matl%mtype==
norton )
then
191 eqvs = dstri-3.d0*g*dg
194 ddg = (f-dg)/(3.d0*g*df+1.d0)
196 if((ddg<dg*1.d-6).or.(ddg<1.d-12))
exit
200 stri(:) = stri(:)-3.d0*g*dg*stri(:)/dstri
201 stress(1:3) = stri(1:3)-p
202 stress(4:6) = stri(4:6)
217 gauss%fstatus(2) = gauss%fstatus(2)+gauss%plstrain