22 type(hecmwst_matrix) :: hecMAT
23 type(hecmwst_local_mesh) :: hecMESH
28 integer,
optional :: iter
29 type(hecmwst_matrix),
optional :: conMAT
31 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
32 integer(kind=kint) :: dyn_step, flag_u
33 real(kind=kreal) :: b2, b3, b4, c1
34 real(kind=kreal) :: rhs, rhs0, f_t
36 if( fstrsolid%ACCELERATION_type ==
kbcinitial )
return
38 dyn_step = fstrdynamic%i_step
41 b2 = fstrdynamic%t_delta
42 b3 = fstrdynamic%t_delta**2*(0.5d0-fstrdynamic%beta)
43 b4 = fstrdynamic%t_delta**2*fstrdynamic%beta
44 c1 = fstrdynamic%t_delta**2
51 if( fstrdynamic%idx_eqa == 1 )
then
53 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
54 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
55 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
57 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
61 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
64 idofe = ityp - idofs*10
66 is0 = hecmesh%node_group%grp_index(ig-1) + 1
67 ie0 = hecmesh%node_group%grp_index(ig )
70 in = hecmesh%node_group%grp_item(ik)
71 do idof = idofs, idofe
73 if(
present(iter) )
then
78 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
79 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
83 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
84 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
85 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
88 if(
present(conmat))
then
89 call hecmw_mat_ass_bc(hecmat, in, idof, rhs, conmat)
91 call hecmw_mat_ass_bc(hecmat, in, idof, rhs)
94 .and. fstrparam%nlgeom .and. fstrdynamic%idx_resp == 1 )
then
95 if(
present(conmat))
then
103 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
115 else if( fstrdynamic%idx_eqa == 11 )
then
117 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
118 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
119 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
121 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
125 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
127 is0 = hecmesh%node_group%grp_index(ig-1) + 1
128 ie0 = hecmesh%node_group%grp_index(ig )
130 idofe = ityp - idofs*10
133 in = hecmesh%node_group%grp_item(ik)
135 do idof = idofs, idofe
136 rhs = 2.0*fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
137 - fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
139 hecmat%B (ndof*in-(ndof-idof)) = rhs
140 fstrdynamic%VEC1(ndof*in-(ndof-idof)) = 1.0d0
143 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
164 type(hecmwst_matrix) :: hecmat
165 type(hecmwst_local_mesh) :: hecMESH
169 integer(kind=kint) :: NDOF, ig0, ig, ityp, iS0, iE0, ik, in, idofS, idofE, idof
171 integer(kind=kint) :: flag_u
172 real(kind=kreal) :: rhs, f_t
174 if( fstrsolid%ACCELERATION_type ==
kbctransit )
return
181 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
182 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
183 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
186 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
189 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
191 is0 = hecmesh%node_group%grp_index(ig-1) + 1
192 ie0 = hecmesh%node_group%grp_index(ig )
194 idofe = ityp - idofs*10
197 in = hecmesh%node_group%grp_item(ik)
199 do idof = idofs, idofe
200 fstrdynamic%ACC (ndof*in-(ndof-idof),1) = rhs
215 type(hecmwst_matrix) :: hecmat
216 type(hecmwst_local_mesh) :: hecMESH
219 integer,
optional :: iter
221 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
222 integer(kind=kint) :: dyn_step, flag_u
223 real(kind=kreal) :: b2, b3, b4, c1
224 real(kind=kreal) :: rhs, rhs0, f_t
226 if( fstrsolid%ACCELERATION_type ==
kbcinitial )
return
228 dyn_step = fstrdynamic%i_step
231 b2 = fstrdynamic%t_delta
232 b3 = fstrdynamic%t_delta**2*(0.5d0-fstrdynamic%beta)
233 b4 = fstrdynamic%t_delta**2*fstrdynamic%beta
234 c1 = fstrdynamic%t_delta**2
238 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
239 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
240 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
242 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
246 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
248 is0 = hecmesh%node_group%grp_index(ig-1) + 1
249 ie0 = hecmesh%node_group%grp_index(ig )
251 idofe = ityp - idofs*10
254 in = hecmesh%node_group%grp_item(ik)
256 do idof = idofs, idofe
257 rhs = 2.0*fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
258 - fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
260 hecmat%B(ndof*in-(ndof-idof)) = rhs* fstrdynamic%VEC1(ndof*in-(ndof-idof))
264 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
This module contains functions to set acceleration boundary condition in dynamic analysis.
subroutine dynamic_bc_init_ac(hecmesh, hecmat, fstrsolid, fstrdynamic)
This function sets initial condition of acceleration.
subroutine dynamic_mat_ass_bc_ac(hecmesh, hecmat, fstrsolid, fstrdynamic, fstrparam, fstrmat, iter, conmat)
This subrouitne set acceleration boundary condition in dynamic analysis.
subroutine dynamic_explicit_ass_ac(hecmesh, hecmat, fstrsolid, fstrdynamic, iter)
This module defined coomon data and basic structures for analysis.
integer(kind=kint), parameter kcaslagrange
contact analysis algorithm
integer(kind=kint), parameter kbcinitial
integer(kind=kint), parameter kbctransit
Table of lading step in dynamic analysis.
subroutine table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
FSTR INNER CONTROL PARAMETERS (fstrPARAM)