14 subroutine dynamic_mat_ass_bc_ac(hecMESH, hecMAT, fstrSOLID ,fstrDYNAMIC, fstrPARAM, hecLagMAT, iter, conMAT)
20 type(hecmwst_matrix) :: hecmat
21 type(hecmwst_local_mesh) :: hecMESH
25 type(hecmwst_matrix_lagrange) :: hecLagMAT
26 integer,
optional :: iter
27 type(hecmwst_matrix),
optional :: conMAT
29 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
30 integer(kind=kint) :: dyn_step, flag_u
31 real(kind=kreal) :: b2, b3, b4, c1
32 real(kind=kreal) :: rhs, rhs0, f_t
34 if( fstrsolid%ACCELERATION_type ==
kbcinitial )
return
36 dyn_step = fstrdynamic%i_step
39 b2 = fstrdynamic%t_delta
40 b3 = fstrdynamic%t_delta**2*(0.5d0-fstrdynamic%beta)
41 b4 = fstrdynamic%t_delta**2*fstrdynamic%beta
42 c1 = fstrdynamic%t_delta**2
49 if( fstrdynamic%idx_eqa == 1 )
then
51 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
52 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
53 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
55 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
59 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
62 idofe = ityp - idofs*10
64 is0 = hecmesh%node_group%grp_index(ig-1) + 1
65 ie0 = hecmesh%node_group%grp_index(ig )
68 in = hecmesh%node_group%grp_item(ik)
69 do idof = idofs, idofe
71 if(
present(iter) )
then
76 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
77 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
81 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
82 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
83 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
86 if(
present(conmat))
then
87 call hecmw_mat_ass_bc(hecmat, in, idof, rhs, conmat)
89 call hecmw_mat_ass_bc(hecmat, in, idof, rhs)
92 .and. fstrparam%nlgeom .and. fstrdynamic%idx_resp == 1 )
then
93 if(
present(conmat))
then
94 call hecmw_mat_ass_bc_contactlag(conmat,heclagmat,in,idof,rhs)
96 call hecmw_mat_ass_bc_contactlag(hecmat,heclagmat,in,idof,rhs)
101 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
113 else if( fstrdynamic%idx_eqa == 11 )
then
115 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
116 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
117 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
119 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
123 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
125 is0 = hecmesh%node_group%grp_index(ig-1) + 1
126 ie0 = hecmesh%node_group%grp_index(ig )
128 idofe = ityp - idofs*10
131 in = hecmesh%node_group%grp_item(ik)
133 do idof = idofs, idofe
134 rhs = 2.0*fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
135 - fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
137 hecmat%B (ndof*in-(ndof-idof)) = rhs
138 fstrdynamic%VEC1(ndof*in-(ndof-idof)) = 1.0d0
141 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
162 type(hecmwst_matrix) :: hecmat
163 type(hecmwst_local_mesh) :: hecMESH
167 integer(kind=kint) :: NDOF, ig0, ig, ityp, iS0, iE0, ik, in, idofS, idofE, idof
169 integer(kind=kint) :: flag_u
170 real(kind=kreal) :: rhs, f_t
172 if( fstrsolid%ACCELERATION_type ==
kbctransit )
return
179 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
180 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
181 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
184 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
187 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
189 is0 = hecmesh%node_group%grp_index(ig-1) + 1
190 ie0 = hecmesh%node_group%grp_index(ig )
192 idofe = ityp - idofs*10
195 in = hecmesh%node_group%grp_item(ik)
197 do idof = idofs, idofe
198 fstrdynamic%ACC (ndof*in-(ndof-idof),1) = rhs
211 type(hecmwst_matrix) :: hecmat
212 type(hecmwst_local_mesh) :: hecMESH
215 integer,
optional :: iter
217 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
218 integer(kind=kint) :: dyn_step, flag_u
219 real(kind=kreal) :: b2, b3, b4, c1
220 real(kind=kreal) :: rhs, rhs0, f_t
222 if( fstrsolid%ACCELERATION_type ==
kbcinitial )
return
224 dyn_step = fstrdynamic%i_step
227 b2 = fstrdynamic%t_delta
228 b3 = fstrdynamic%t_delta**2*(0.5d0-fstrdynamic%beta)
229 b4 = fstrdynamic%t_delta**2*fstrdynamic%beta
230 c1 = fstrdynamic%t_delta**2
234 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
235 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
236 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
238 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
242 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
244 is0 = hecmesh%node_group%grp_index(ig-1) + 1
245 ie0 = hecmesh%node_group%grp_index(ig )
247 idofe = ityp - idofs*10
250 in = hecmesh%node_group%grp_item(ik)
252 do idof = idofs, idofe
253 rhs = 2.0*fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
254 - fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
256 hecmat%B(ndof*in-(ndof-idof)) = rhs* fstrdynamic%VEC1(ndof*in-(ndof-idof))
260 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)