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))
218 theta = (eps(1) + eps(2) + eps(3))/3.d0
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
integer(kind=4), parameter kreal
This module provides functions for elastic material.
subroutine calelasticmatrix(matl, sectType, D, temp, hdflag)
Calculate isotropic elastic matrix.
This module summarizes all information 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 updateviscoelastic(matl, sectType, eps, sig, vsig, dt, temp, tempn)
This subroutine provides to update stress for viscoelastic material.
subroutine calviscoelasticmatrix(matl, sectType, dt, D, temp)
This subroutine calculates tangent moduli for isotropic viscoelastic material.
Structure to manage all material related data.
All data should be recorded in every quadrature points.