11 private :: hvisc, trs, trsinc
16 real(kind=
kreal)
function hvisc(x,expx)
17 real(kind=
kreal),
intent(in) :: x
18 real(kind=
kreal),
intent(in) :: expx
22 hvisc = 1.d0 - 0.5d0*x*(1.d0 - x/3.d0*(1.d0 &
23 - 0.25d0*x*(1.d0 - 0.2d0*x)))
27 hvisc = (1.d0 - expx)/x
34 real(kind=
kreal)
function trsinc(tn1,tn,mtype, mvar)
35 real(kind=
kreal),
intent(in) :: tn1
36 real(kind=
kreal),
intent(in) :: tn
37 integer,
intent(in) :: mtype
38 real(kind=
kreal),
intent(in) :: mvar(:)
40 real(kind=
kreal) :: hsn1, hsn, asn1, asn
44 hsn = -mvar(2)*( 1.d0/(tn-mvar(3))-1.d0/(mvar(1)-mvar(3)) )/mvar(4)
45 hsn1 = -mvar(2)*( 1.d0/(tn1-mvar(3))-1.d0/(mvar(1)-mvar(3)) )/mvar(4)
49 if( mvar(3)+tn1-mvar(1)<=0.d0 )
then
52 if( mvar(3)+tn-mvar(1)<=0.d0 )
then
55 hsn = mvar(2)*( tn-mvar(1) )/ (mvar(3)+tn-mvar(1) )*dlog(10.d0)
56 hsn1 = mvar(2)*( tn1-mvar(1) )/ (mvar(3)+tn1-mvar(1) )*dlog(10.d0)
60 if( dabs(hsn1-hsn)<1.d-5 )
then
61 trsinc = dexp((hsn1+hsn)*0.5d0)
65 trsinc = (asn1-asn)/(hsn1-hsn)
71 real(kind=
kreal)
function trs(tn,mtype, mvar)
72 real(kind=
kreal),
intent(in) :: tn
73 integer,
intent(in) :: mtype
74 real(kind=
kreal),
intent(in) :: mvar(:)
76 real(kind=
kreal) :: hsn
79 hsn = mvar(2)*( 1.d0/(tn-mvar(3))-1.d0/(mvar(1)-mvar(3)) )/mvar(4)
81 hsn = mvar(2)*( tn-mvar(1) )/ (mvar(3)+tn-mvar(1) )*dlog(10.d0)
94 integer,
intent(in) :: secttype
95 real(kind=
kreal),
intent(in) ::
dt
96 real(kind=
kreal),
intent(out) :: d(:,:)
97 real(kind=
kreal),
intent(in) :: temp
100 real(kind=
kreal) :: g,gg,k,kg, gfac,exp_n,mu_0,mu_n,dq_n,dtau
101 real(kind=
kreal) :: ina(1), outa(2), ee, pp, ddt
103 type(ttable),
pointer :: dicval
111 call fetch_tabledata(
mc_isoelastic, matl%dict, outa, ierr, ina )
119 if( matl%mtype>
viscoelastic ) ddt=trs(temp,matl%mtype, matl%variables)*
dt
128 g = ee/(2.d0*(1.d0 + pp))
129 k = ee/(3.d0*(1.d0 - 2.d0*pp))
137 if( ierr ) stop
"Viscoelastic properties not defined"
139 do n = 1,dicval%tbrow
140 mu_n = dicval%tbval(1,n)
141 dtau = ddt/dicval%tbval(2,n)
144 dq_n = mu_n * hvisc(dtau,exp_n)
155 kg = k - 0.6666666666666666d0*gg
160 d(j,j) = d(j,j) + 2.d0*gg
175 integer,
intent(in) :: sectType
176 real(kind=
kreal),
intent(in) ::
eps(6)
177 real(kind=
kreal),
intent(out) :: sig(6)
178 real(kind=
kreal),
intent(inout) :: vsig(:)
179 real(kind=
kreal),
intent(in) ::
dt
180 real(kind=
kreal),
intent(in) :: temp
181 real(kind=
kreal),
intent(in) :: tempn
184 real(kind=
kreal) :: g,k,kth, exp_n,mu_0,mu_n,dq_n,dtau, theta
185 real(kind=
kreal) :: ina(1), outa(2), ee, pp, ddt
187 real(kind=
kreal) :: devstrain(6), en(6), d(6,6)
188 type(ttable),
pointer :: dicval
194 call fetch_tabledata(
mc_isoelastic, matl%dict, outa, ierr, ina )
202 if( matl%mtype>
viscoelastic ) ddt=trsinc(temp, tempn, matl%mtype, matl%variables)*
dt
206 sig = matmul( d(:,:),
eps(:) )
213 g = ee/(2.d0*(1.d0 + pp))
214 k = ee/(3.d0*(1.d0 - 2.d0*pp))
220 devstrain(i) =
eps(i) - theta
223 devstrain(i) =
eps(i)*0.5d0
232 if( ierr ) stop
"Viscoelastic properties not defined"
234 en(:) = vsig(12*dicval%tbrow+1:12*dicval%tbrow+6)
236 do n = 1,dicval%tbrow
237 mu_n = dicval%tbval(1,n)
238 dtau = ddt/dicval%tbval(2,n)
241 dq_n = mu_n * hvisc(dtau,exp_n)
245 vsig((n-1)*12+i+6) = exp_n*vsig((n-1)*12+i) + dq_n*(devstrain(i) - en(i))
246 sig(i) = sig(i) + vsig((n-1)*12+i+6)
254 sig(i) = 2.d0*g*(mu_0*devstrain(i) + sig(i))
261 sig(i) = sig(i) + kth
271 integer :: i, n, nrow
272 real(kind=
kreal) :: thetan, vstrain(6)
276 gauss%fstatus((n-1)*12+i) = gauss%fstatus((n-1)*12+i+6)
279 vstrain = gauss%strain
280 thetan = (vstrain(1) + vstrain(2) + vstrain(3))/3.d0
282 gauss%fstatus(nrow*12+i) = vstrain(i) - thetan
285 gauss%fstatus(nrow*12+i) = vstrain(i)*0.5d0