14 type(hecmwst_local_mesh),
intent(in) :: hecMESH
16 integer(kind=kint),
intent(in) :: cstep
17 real(kind=kreal),
intent(in) :: ctime
19 integer(kind=kint) :: idum, amp_id, gid
20 real(kind=kreal) :: amp_val
21 integer(kind=kint) :: state
23 do idum = 1, fstrsolid%elemact%ELEMACT_egrp_tot
24 gid = fstrsolid%elemact%ELEMACT_egrp_GRPID(idum)
30 amp_id = fstrsolid%elemact%ELEMACT_egrp_amp(idum)
33 call hecmw_get_amplitude_value(hecmesh%amp, amp_id, ctime, amp_val)
34 if( amp_val < 1.d0 )
then
41 state = fstrsolid%elemact%ELEMACT_egrp_state(idum)
43 if( fstrsolid%elemact%ELEMACT_egrp_depends(idum) ==
kelactd_none )
then
44 call set_elemact_flag( hecmesh, fstrsolid%elemact, idum, fstrsolid%elements, state, .false. )
46 call set_elemact_flag( hecmesh, fstrsolid%elemact, idum, fstrsolid%elements, state, .true. )
53 type(hecmwst_local_mesh),
intent(in) :: hecMESH
55 integer(kind=kint),
intent(in) :: cstep
56 real(kind=kreal),
intent(in) :: ctime
58 integer(kind=kint) :: idum, amp_id, gid, dtype
59 real(kind=kreal) :: amp_val, thlow, thup
60 integer(kind=kint) :: state
62 do idum = 1, fstrsolid%elemact%ELEMACT_egrp_tot
63 gid = fstrsolid%elemact%ELEMACT_egrp_GRPID(idum)
66 amp_id = fstrsolid%elemact%ELEMACT_egrp_amp(idum)
69 call hecmw_get_amplitude_value(hecmesh%amp, amp_id, ctime, amp_val)
70 if( amp_val < 1.d0 ) cycle
73 state = fstrsolid%elemact%ELEMACT_egrp_state(idum)
80 type(hecmwst_local_mesh),
intent(in) :: hecMESH
81 type(
telemact),
intent(in) :: elemact
82 real(kind=kreal),
intent(in) :: ctime
83 type(telement),
pointer,
intent(inout) :: elements(:)
85 integer(kind=kint) :: idum, amp_id
86 real(kind=kreal) :: amp_val
90 do idum = 1, elemact%ELEMACT_egrp_tot
91 amp_id = elemact%ELEMACT_egrp_amp(idum)
94 call hecmw_get_amplitude_value(hecmesh%amp, amp_id, ctime, amp_val)
95 if( amp_val < 1.d0 ) cycle
104 integer(kind=kint),
intent(in) :: ndof
105 type(hecmwst_local_mesh),
intent(in) :: hecMESH
106 type(
telemact),
intent(in) :: elemact
107 type(telement),
pointer,
intent(inout) :: elements(:)
108 real(kind=kreal),
pointer,
intent(in) :: vec_old(:)
109 real(kind=kreal),
pointer,
intent(inout) :: vec_new(:)
111 integer(kind=kint) :: icel, in0
112 integer(kind=kint) :: iS, iE, ic_type, nodlocal, i
113 real(kind=kreal),
pointer :: active(:)
115 allocate(active(hecmesh%n_node))
118 do itype = 1, hecmesh%n_elem_type
119 is = hecmesh%elem_type_index(itype-1) + 1
120 ie = hecmesh%elem_type_index(itype )
121 ic_type = hecmesh%elem_type_item(itype)
123 if (hecmw_is_etype_link(ic_type)) cycle
124 if(ic_type == 3414) cycle
128 in0 = hecmesh%elem_node_index(icel-1)
129 nn = hecmw_get_max_node(ic_type)
131 nodlocal = hecmesh%elem_node_item(in0+i)
132 active(nodlocal) = 1.d0
137 call hecmw_update_r(hecmesh,active,hecmesh%n_node,1)
139 do i = 1, hecmesh%n_node
140 if( active(i) > 0.d0 ) cycle
141 vec_new(ndof*(i-1)+1:ndof*i) = vec_old(ndof*(i-1)+1:ndof*i)
149 type(hecmwst_local_mesh),
intent(in) :: hecmesh
150 type(telement),
pointer,
intent(in) :: elements(:)
151 real(kind=kreal),
pointer,
intent(inout) :: outval(:)
153 integer(kind=kint) :: icel
156 do icel = 1, hecmesh%n_elem
157 if( elements(icel)%elemact_flag ==
kelact_inactive ) outval(icel) = 1.d0
163 type(hecmwst_local_mesh),
intent(in) :: hecMESH
164 type(
telemact),
intent(in) :: elemact
165 integer(kind=kint),
intent(in) :: dumid
166 type(telement),
pointer,
intent(inout) :: elements(:)
168 integer(kind=kint) :: ig, iS0, iE0, ik, icel
170 if( dumid < 0 .or. dumid > elemact%ELEMACT_egrp_tot )
return
172 ig = elemact%ELEMACT_egrp_ID(dumid)
173 is0 = hecmesh%elem_group%grp_index(ig-1) + 1
174 ie0 = hecmesh%elem_group%grp_index(ig )
177 icel = hecmesh%elem_group%grp_item(ik)
179 elements(icel)%elemact_coeff = elemact%ELEMACT_egrp_eps(dumid)
185 type(hecmwst_local_mesh),
intent(in) :: hecMESH
186 type(
telemact),
intent(in) :: elemact
187 integer(kind=kint),
intent(in) :: dumid
188 type(telement),
pointer,
intent(inout) :: elements(:)
190 integer(kind=kint) :: ig, iS0, iE0, ik, icel, dtype, ig0
191 real(kind=kreal) :: thlow, thup, stress(6), mises, ps
192 integer(kind=kint) :: state
194 if( dumid < 0 .or. dumid > elemact%ELEMACT_egrp_tot )
return
195 if( elemact%ELEMACT_egrp_depends(dumid) ==
kelactd_none )
return
197 ig = elemact%ELEMACT_egrp_ID(dumid)
198 is0 = hecmesh%elem_group%grp_index(ig-1) + 1
199 ie0 = hecmesh%elem_group%grp_index(ig )
201 thlow = elemact%ELEMACT_egrp_ts_lower(dumid)
202 thup = elemact%ELEMACT_egrp_ts_upper(dumid)
206 if (
associated(elemact%ELEMACT_egrp_state))
then
207 state = elemact%ELEMACT_egrp_state(dumid)
211 icel = hecmesh%elem_group%grp_item(ik)
213 if( elements(icel)%elemact_flag == state ) cycle
215 do ig0=1,
size(elements(icel)%gausses)
218 stress(1:6) = elements(icel)%gausses(ig0)%stress(1:6)
219 elseif( elemact%ELEMACT_egrp_depends(dumid) ==
kelactd_strain )
then
220 stress(1:6) = elements(icel)%gausses(ig0)%strain(1:6)
222 write(*,*)
"Error: Unknown elemact dependency type"
225 ps = ( stress(1) + stress(2) + stress(3) ) / 3.0d0
226 mises = 0.5d0 * ( (stress(1)-ps)**2 + (stress(2)-ps)**2 + (stress(3)-ps)**2 )
227 mises = mises + stress(4)**2 + stress(5)**2 + stress(6)**2
228 mises = dsqrt( 3.0d0 * mises )
230 if(thlow <= mises .and. mises <= thup)
then
231 elements(icel)%elemact_flag = state
240 elements(icel)%elemact_coeff = elemact%ELEMACT_egrp_eps(dumid)
248 type(hecmwst_local_mesh),
intent(in) :: hecMESH
249 type(
telemact),
intent(in) :: elemact
250 integer(kind=kint),
intent(in) :: dumid
251 type(telement),
pointer,
intent(inout) :: elements(:)
252 integer(kind=kint),
intent(in) :: flag
253 logical,
intent(in) :: init_only
255 integer(kind=kint) :: ig, iS0, iE0, ik, icel
257 if( dumid < 0 .or. dumid > elemact%ELEMACT_egrp_tot )
return
259 ig = elemact%ELEMACT_egrp_ID(dumid)
260 is0 = hecmesh%elem_group%grp_index(ig-1) + 1
261 ie0 = hecmesh%elem_group%grp_index(ig )
264 icel = hecmesh%elem_group%grp_item(ik)
266 if( elements(icel)%elemact_flag ==
kelact_undefined ) elements(icel)%elemact_flag = flag
268 elements(icel)%elemact_flag = flag
270 elements(icel)%elemact_coeff = elemact%ELEMACT_egrp_eps(dumid)
276 type(hecmwst_local_mesh),
intent(in) :: hecMESH
277 type(
telemact),
intent(in) :: elemact
278 type(telement),
pointer,
intent(inout) :: elements(:)
280 integer(kind=kint) :: idum, ig, iS0, iE0, ik, icel
282 do idum = 1, elemact%ELEMACT_egrp_tot
283 ig = elemact%ELEMACT_egrp_GRPID(idum)
284 is0 = hecmesh%elem_group%grp_index(ig-1) + 1
285 ie0 = hecmesh%elem_group%grp_index(ig )
288 icel = hecmesh%elem_group%grp_item(ik)
This module defined elemact data and function.
integer, parameter kelactd_none
integer, parameter kelact_active
integer, parameter kelactd_stress
integer, parameter kelact_undefined
integer, parameter kelact_inactive
integer, parameter kelactd_strain
This module provide a function to elemact elements.
subroutine output_elemact_flag(hecMESH, elements, outval)
subroutine fstr_update_elemact_solid_by_value(hecMESH, fstrSOLID, cstep, ctime)
subroutine fstr_update_elemact_heat(hecMESH, elemact, ctime, elements)
subroutine set_elemact_flag(hecMESH, elemact, dumid, elements, flag, init_only)
subroutine activate_elemact_flag(hecMESH, elemact, dumid, elements)
subroutine fstr_updatedof_elemact(ndof, hecMESH, elemact, elements, vec_old, vec_new)
subroutine clear_elemact_flag_all(hecMESH, elemact, elements)
subroutine activate_elemact_flag_by_value(hecMESH, elemact, dumid, elements)
subroutine fstr_update_elemact_solid(hecMESH, fstrSOLID, cstep, ctime)
This module defines common data and basic structures for analysis.
logical function fstr_iselemactivationactive(fstrSOLID, nbc, cstep)