21 type(hecmwst_matrix) :: hecMAT
22 type(hecmwst_local_mesh) :: hecMESH
27 type(hecmwst_matrix),
optional :: conMAT
29 integer,
optional :: iter
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%VELOCITY_type ==
kbcinitial )
return
38 dyn_step = fstrdynamic%i_step
41 if(dabs(fstrdynamic%ganma) .lt. 1.0e-20)
then
42 if( hecmesh%my_rank == 0 )
then
43 write(
imsg,*)
'stop due to fstrDYNAMIC%ganma = 0'
45 call hecmw_abort( hecmw_comm_get_comm())
48 b2 = fstrdynamic%t_delta &
49 *(fstrdynamic%ganma-fstrdynamic%beta)/fstrdynamic%ganma
50 b3 = fstrdynamic%t_delta**2 &
51 *(fstrdynamic%ganma-2.0*fstrdynamic%beta) &
52 /(2.0*fstrdynamic%ganma)
53 b4 = fstrdynamic%t_delta*fstrdynamic%beta/fstrdynamic%ganma
54 c1 = 2.0*fstrdynamic%t_delta
61 if( fstrdynamic%idx_eqa == 1 )
then
63 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
64 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
65 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
67 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
71 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
74 idofe = ityp - idofs*10
76 is0 = hecmesh%node_group%grp_index(ig-1) + 1
77 ie0 = hecmesh%node_group%grp_index(ig )
80 in = hecmesh%node_group%grp_item(ik)
81 do idof = idofs, idofe
83 if(
present(iter) )
then
88 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
89 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
93 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
94 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
95 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
98 if(
present(conmat))
then
99 call hecmw_mat_ass_bc(hecmat, in, idof, rhs, conmat)
101 call hecmw_mat_ass_bc(hecmat, in, idof, rhs)
104 .and. fstrparam%nlgeom .and. fstrdynamic%idx_resp == 1 )
then
105 if(
present(conmat))
then
113 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
124 else if( fstrdynamic%idx_eqa == 11 )
then
126 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
127 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
128 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
130 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
134 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
136 is0 = hecmesh%node_group%grp_index(ig-1) + 1
137 ie0 = hecmesh%node_group%grp_index(ig )
139 idofe = ityp - idofs*10
142 in = hecmesh%node_group%grp_item(ik)
143 do idof = idofs, idofe
144 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
146 hecmat%B (ndof*in-(ndof-idof)) = rhs
147 fstrdynamic%VEC1(ndof*in-(ndof-idof)) = 1.0d0
150 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
171 type(hecmwst_matrix) :: hecmat
172 type(hecmwst_local_mesh) :: hecMESH
176 integer(kind=kint) :: NDOF, ig0, ig, ityp, iS0, iE0, ik, in, idofS, idofE, idof
178 integer(kind=kint) :: flag_u
179 real(kind=kreal) :: rhs, f_t
181 if( fstrsolid%VELOCITY_type ==
kbctransit )
return
186 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
187 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
188 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
191 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
194 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
196 is0 = hecmesh%node_group%grp_index(ig-1) + 1
197 ie0 = hecmesh%node_group%grp_index(ig )
199 idofe = ityp - idofs*10
202 in = hecmesh%node_group%grp_item(ik)
204 do idof = idofs, idofe
205 fstrdynamic%VEL (ndof*in-(ndof-idof),1) = rhs
221 type(hecmwst_matrix) :: hecmat
222 type(hecmwst_local_mesh) :: hecMESH
225 integer,
optional :: iter
227 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
228 integer(kind=kint) :: dyn_step, flag_u
229 real(kind=kreal) :: b2, b3, b4, c1
230 real(kind=kreal) :: rhs, rhs0, f_t
232 if( fstrsolid%VELOCITY_type ==
kbcinitial )
return
234 dyn_step = fstrdynamic%i_step
237 if(dabs(fstrdynamic%ganma) .lt. 1.0e-20)
then
238 if( hecmesh%my_rank == 0 )
then
239 write(
imsg,*)
'stop due to fstrDYNAMIC%ganma = 0'
241 call hecmw_abort( hecmw_comm_get_comm())
244 b2 = fstrdynamic%t_delta &
245 *(fstrdynamic%ganma-fstrdynamic%beta)/fstrdynamic%ganma
246 b3 = fstrdynamic%t_delta**2 &
247 *(fstrdynamic%ganma-2.0*fstrdynamic%beta) &
248 /(2.0*fstrdynamic%ganma)
249 b4 = fstrdynamic%t_delta*fstrdynamic%beta/fstrdynamic%ganma
250 c1 = 2.0*fstrdynamic%t_delta
255 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
256 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
257 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
259 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
263 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
265 is0 = hecmesh%node_group%grp_index(ig-1) + 1
266 ie0 = hecmesh%node_group%grp_index(ig )
268 idofe = ityp - idofs*10
271 in = hecmesh%node_group%grp_item(ik)
272 do idof = idofs, idofe
273 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
275 hecmat%B(ndof*in-(ndof-idof)) = rhs* fstrdynamic%VEC1(ndof*in-(ndof-idof))
279 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
This module contains functions to set velocity boundary condition in dynamic analysis.
subroutine dynamic_bc_init_vl(hecmesh, hecmat, fstrsolid, fstrdynamic)
This function sets initial condition of velocity.
subroutine dynamic_explicit_ass_vl(hecmesh, hecmat, fstrsolid, fstrdynamic, iter)
subroutine dynamic_mat_ass_bc_vl(hecmesh, hecmat, fstrsolid, fstrdynamic, fstrparam, fstrmat, iter, conmat)
This subrouitne set velocity boundary condition in dynamic analysis.
This module defined coomon data and basic structures for analysis.
integer(kind=kint), parameter imsg
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)