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),
optional :: 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
109 if(
present( temp ) )
then
118 if(
present(temp) )
then
120 call fetch_tabledata(
mc_isoelastic, matl%dict, outa, ierr, ina )
128 if( matl%mtype>
viscoelastic ) ddt=trs(temp,matl%mtype, matl%variables)*dt
136 g = ee/(2.d0*(1.d0 + pp))
137 k = ee/(3.d0*(1.d0 - 2.d0*pp))
147 if( ierr ) stop
"Viscoelastic properties not defined"
149 do n = 1,dicval%tbrow
150 mu_n = dicval%tbval(1,n)
151 dtau = ddt/dicval%tbval(2,n)
154 dq_n = mu_n * hvisc(dtau,exp_n)
165 kg = k - 0.6666666666666666d0*gg
170 d(j,j) = d(j,j) + 2.d0*gg
185 integer,
intent(in) :: sectType
186 real(kind=
kreal),
intent(in) :: eps(6)
187 real(kind=
kreal),
intent(out) :: sig(6)
188 real(kind=
kreal),
intent(inout) :: vsig(:)
189 real(kind=
kreal),
intent(in) :: dt
190 real(kind=
kreal),
optional :: temp
191 real(kind=
kreal),
optional :: tempn
194 real(kind=
kreal) :: g,k,kth, exp_n,mu_0,mu_n,dq_n,dtau, theta
195 real(kind=
kreal) :: ina(1), outa(2), ee, pp, ddt
197 real(kind=
kreal) :: devstrain(6), en(6), d(6,6)
198 type(ttable),
pointer :: dicval
202 if(
present(temp) )
then
204 call fetch_tabledata(
mc_isoelastic, matl%dict, outa, ierr, ina )
212 if( matl%mtype>
viscoelastic ) ddt=trsinc(temp,tempn, matl%mtype, matl%variables)*dt
215 sig = matmul( d(:,:), eps(:) )
226 g = ee/(2.d0*(1.d0 + pp))
227 k = ee/(3.d0*(1.d0 - 2.d0*pp))
231 theta = (eps(1) + eps(2) + eps(3))/3.d0
233 devstrain(i) = eps(i) - theta
236 devstrain(i) = eps(i)*0.5d0
245 if( ierr ) stop
"Viscoelastic properties not defined"
247 en(:) = vsig(12*dicval%tbrow+1:12*dicval%tbrow+6)
249 do n = 1,dicval%tbrow
250 mu_n = dicval%tbval(1,n)
251 dtau = ddt/dicval%tbval(2,n)
254 dq_n = mu_n * hvisc(dtau,exp_n)
258 vsig((n-1)*12+i+6) = exp_n*vsig((n-1)*12+i) + dq_n*(devstrain(i) - en(i))
259 sig(i) = sig(i) + vsig((n-1)*12+i+6)
267 sig(i) = 2.d0*g*(mu_0*devstrain(i) + sig(i))
274 sig(i) = sig(i) + kth
284 integer :: i, n, nrow
285 real(kind=
kreal) :: thetan, vstrain(6)
289 gauss%fstatus((n-1)*12+i) = gauss%fstatus((n-1)*12+i+6)
292 vstrain = gauss%strain
293 thetan = (vstrain(1) + vstrain(2) + vstrain(3))/3.d0
295 gauss%fstatus(nrow*12+i) = vstrain(i) - thetan
298 gauss%fstatus(nrow*12+i) = vstrain(i)*0.5d0
integer(kind=4), parameter kreal
This module provides functions for elastic material.
subroutine calelasticmatrix(matl, secttype, d, temp)
Calculate isotropic elastic matrix.
This module summarizes all infomation of material properties.
integer(kind=kint), parameter m_youngs
character(len=dict_key_length) mc_viscoelastic
integer(kind=kint), parameter viscoelastic
integer(kind=kint), parameter d3
integer(kind=kint), parameter m_poisson
character(len=dict_key_length) mc_isoelastic
This modules defines a structure to record history dependent parameter in static analysis.
This module provides functions for viscoelastic calculation.
subroutine updateviscoelasticstate(gauss)
Update viscoplastic state.
subroutine calviscoelasticmatrix(matl, secttype, dt, d, temp)
This subroutine calculates tangent moduli for isotropic viscoelastic material.
subroutine updateviscoelastic(matl, secttype, eps, sig, vsig, dt, temp, tempn)
This subroutine provides to update stress for viscoelastic material.
Stucture to management all material relates data.
All data should be recorded in every quadrature points.