14 integer(kind=kint) :: elemact_egrp_tot
15 integer(kind=kint),
pointer :: elemact_egrp_grpid (:) =>null()
16 integer(kind=kint),
pointer :: elemact_egrp_id (:) =>null()
17 integer(kind=kint),
pointer :: elemact_egrp_amp (:) =>null()
18 real(kind=kreal),
pointer :: elemact_egrp_eps(:) =>null()
19 integer(kind=kint),
pointer :: elemact_egrp_depends(:) =>null()
20 real(kind=kreal),
pointer :: elemact_egrp_ts_lower(:) =>null()
21 real(kind=kreal),
pointer :: elemact_egrp_ts_upper(:) =>null()
22 integer(kind=kint),
pointer :: elemact_egrp_state (:) =>null()
23 integer(kind=kint) :: elemact_n_changed = 0
24 logical :: elemact_conv_deferred = .false.
43 integer(kind=kint) :: i
45 write(*,
'(A,I0)')
'ELEMACT_egrp_tot: ', elact%ELEMACT_egrp_tot
46 do i=1,elact%ELEMACT_egrp_tot
47 write(*,*)
'DUMMY : ',i
48 write(*,*)
'GRPID : ',elact%ELEMACT_egrp_GRPID
49 write(*,*)
'EGRPID : ',elact%ELEMACT_egrp_ID
50 write(*,*)
'AMPLITUDE: ',elact%ELEMACT_egrp_amp
51 write(*,*)
'EPSILON : ',elact%ELEMACT_egrp_eps
52 write(*,*)
'DEPENDS : ',elact%ELEMACT_egrp_depends
53 write(*,*)
'THLOWER : ',elact%ELEMACT_egrp_ts_lower
54 write(*,*)
'THUPPER : ',elact%ELEMACT_egrp_ts_upper
59 subroutine stf_dummy( ndof, nn, ecoord, u, stiff, element )
61 integer(kind=kint),
intent(in) :: ndof
62 integer(kind=kint),
intent(in) :: nn
63 real(kind=kreal),
intent(in) :: ecoord(3,nn)
64 real(kind=kreal),
intent(in) :: u(3,nn)
65 type(
telement),
intent(inout) :: element
66 real(kind=kreal),
intent(out) :: stiff(:,:)
68 integer(kind=kint) :: i,j,k,m,n
69 real(kind=kreal) :: dnn, coeff, xmax(3), xmin(3), dl
72 xmax(1:3) = ecoord(1:3,1)
73 xmin(1:3) = ecoord(1:3,1)
76 if( ecoord(k,i) > xmax(k) ) xmax(k) = ecoord(k,i)
77 if( ecoord(k,i) < xmin(k) ) xmin(k) = ecoord(k,i)
80 dl = 0.33333333333d0*((xmax(1)-xmin(1))+(xmax(2)-xmin(2))+(xmax(3)-xmin(3)))
81 if( dl < 1.d-8 ) dl = 1.d0
83 coeff = element%elemact_coeff/dl
92 stiff(m+k,n+k) = stiff(m+k,n+k)-coeff*dnn
97 stiff(m+k,m+k) = stiff(m+k,m+k)+coeff
106 integer(kind=kint),
intent(in) :: ndof
107 integer(kind=kint),
intent(in) :: nn
108 real(kind=kreal),
intent(in) :: ecoord(3,nn)
109 real(kind=kreal),
intent(in) :: u(3,nn)
110 real(kind=kreal),
intent(in) :: du(3,nn)
111 type(
telement),
intent(inout) :: element
112 real(kind=kreal),
intent(out) :: qf(:)
114 integer(kind=kint) :: i,k,m
115 real(kind=kreal) :: dnn, coeff, aveu(3), xmax(3), xmin(3), dl
118 xmax(1:3) = ecoord(1:3,1)
119 xmin(1:3) = ecoord(1:3,1)
122 if( ecoord(k,i) > xmax(k) ) xmax(k) = ecoord(k,i)
123 if( ecoord(k,i) < xmin(k) ) xmin(k) = ecoord(k,i)
126 dl = 0.33333333333d0*((xmax(1)-xmin(1))+(xmax(2)-xmin(2))+(xmax(3)-xmin(3)))
127 if( dl < 1.d-8 ) dl = 1.d0
129 coeff = element%elemact_coeff/dl
134 aveu(k) = aveu(k) + u(k,i) + du(k,i)
137 aveu(:) = aveu(:)*dnn
144 qf(m+k) = coeff*(u(k,i)+du(k,i)-aveu(k))
148 do i=1,
size(element%gausses)
149 element%gausses(i)%strain = 0.d0
150 element%gausses(i)%stress = 0.d0
151 element%gausses(i)%strain_out = 0.d0
152 element%gausses(i)%stress_out = 0.d0
153 if(
associated(element%gausses(i)%istatus) ) element%gausses(i)%istatus = 0
154 if(
associated(element%gausses(i)%fstatus) ) element%gausses(i)%fstatus = 0.d0
This module defined elemact data and function.
integer, parameter kelactd_none
integer, parameter kelact_active
subroutine update_dummy(ndof, nn, ecoord, u, du, qf, element)
integer, parameter kelactd_stress
integer, parameter kelact_undefined
integer, parameter kelact_inactive
integer, parameter kelactd_strain
subroutine print_elemact_info(elact)
subroutine stf_dummy(ndof, nn, ecoord, u, stiff, element)
This modules defines a structure to record history dependent parameter in static analysis.
All data should be recorded in every elements.