13 subroutine dynamic_mat_ass_bc_vl(hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, fstrPARAM, hecLagMAT, iter, conMAT)
19 type(hecmwst_matrix) :: hecmat
20 type(hecmwst_local_mesh) :: hecMESH
24 type(hecmwst_matrix_lagrange) :: hecLagMAT
25 type(hecmwst_matrix),
optional :: conMAT
27 integer,
optional :: iter
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%VELOCITY_type ==
kbcinitial )
return
36 dyn_step = fstrdynamic%i_step
39 if(dabs(fstrdynamic%ganma) .lt. 1.0e-20)
then
40 if( hecmesh%my_rank == 0 )
then
41 write(
imsg,*)
'stop due to fstrDYNAMIC%ganma = 0'
43 call hecmw_abort( hecmw_comm_get_comm())
46 b2 = fstrdynamic%t_delta &
47 *(fstrdynamic%ganma-fstrdynamic%beta)/fstrdynamic%ganma
48 b3 = fstrdynamic%t_delta**2 &
49 *(fstrdynamic%ganma-2.0*fstrdynamic%beta) &
50 /(2.0*fstrdynamic%ganma)
51 b4 = fstrdynamic%t_delta*fstrdynamic%beta/fstrdynamic%ganma
52 c1 = 2.0*fstrdynamic%t_delta
59 if( fstrdynamic%idx_eqa == 1 )
then
61 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
62 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
63 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
65 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
69 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
72 idofe = ityp - idofs*10
74 is0 = hecmesh%node_group%grp_index(ig-1) + 1
75 ie0 = hecmesh%node_group%grp_index(ig )
78 in = hecmesh%node_group%grp_item(ik)
79 do idof = idofs, idofe
81 if(
present(iter) )
then
86 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
87 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
91 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
92 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
93 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
96 if(
present(conmat))
then
97 call hecmw_mat_ass_bc(hecmat, in, idof, rhs, conmat)
99 call hecmw_mat_ass_bc(hecmat, in, idof, rhs)
102 .and. fstrparam%nlgeom .and. fstrdynamic%idx_resp == 1 )
then
103 if(
present(conmat))
then
104 call hecmw_mat_ass_bc_contactlag(conmat,heclagmat,in,idof,rhs)
106 call hecmw_mat_ass_bc_contactlag(hecmat,heclagmat,in,idof,rhs)
111 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
122 else if( fstrdynamic%idx_eqa == 11 )
then
124 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
125 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
126 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
128 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
132 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
134 is0 = hecmesh%node_group%grp_index(ig-1) + 1
135 ie0 = hecmesh%node_group%grp_index(ig )
137 idofe = ityp - idofs*10
140 in = hecmesh%node_group%grp_item(ik)
141 do idof = idofs, idofe
142 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
144 hecmat%B (ndof*in-(ndof-idof)) = rhs
145 fstrdynamic%VEC1(ndof*in-(ndof-idof)) = 1.0d0
148 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)
169 type(hecmwst_matrix) :: hecmat
170 type(hecmwst_local_mesh) :: hecMESH
174 integer(kind=kint) :: NDOF, ig0, ig, ityp, iS0, iE0, ik, in, idofS, idofE, idof
176 integer(kind=kint) :: flag_u
177 real(kind=kreal) :: rhs, f_t
179 if( fstrsolid%VELOCITY_type ==
kbctransit )
return
184 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
185 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
186 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
189 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
192 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
194 is0 = hecmesh%node_group%grp_index(ig-1) + 1
195 ie0 = hecmesh%node_group%grp_index(ig )
197 idofe = ityp - idofs*10
200 in = hecmesh%node_group%grp_item(ik)
202 do idof = idofs, idofe
203 fstrdynamic%VEL (ndof*in-(ndof-idof),1) = rhs
217 type(hecmwst_matrix) :: hecmat
218 type(hecmwst_local_mesh) :: hecMESH
221 integer,
optional :: iter
223 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
224 integer(kind=kint) :: dyn_step, flag_u
225 real(kind=kreal) :: b2, b3, b4, c1
226 real(kind=kreal) :: rhs, rhs0, f_t
228 if( fstrsolid%VELOCITY_type ==
kbcinitial )
return
230 dyn_step = fstrdynamic%i_step
233 if(dabs(fstrdynamic%ganma) .lt. 1.0e-20)
then
234 if( hecmesh%my_rank == 0 )
then
235 write(
imsg,*)
'stop due to fstrDYNAMIC%ganma = 0'
237 call hecmw_abort( hecmw_comm_get_comm())
240 b2 = fstrdynamic%t_delta &
241 *(fstrdynamic%ganma-fstrdynamic%beta)/fstrdynamic%ganma
242 b3 = fstrdynamic%t_delta**2 &
243 *(fstrdynamic%ganma-2.0*fstrdynamic%beta) &
244 /(2.0*fstrdynamic%ganma)
245 b4 = fstrdynamic%t_delta*fstrdynamic%beta/fstrdynamic%ganma
246 c1 = 2.0*fstrdynamic%t_delta
251 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
252 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
253 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
255 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, f_t, flag_u)
259 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
261 is0 = hecmesh%node_group%grp_index(ig-1) + 1
262 ie0 = hecmesh%node_group%grp_index(ig )
264 idofe = ityp - idofs*10
267 in = hecmesh%node_group%grp_item(ik)
268 do idof = idofs, idofe
269 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
271 hecmat%B(ndof*in-(ndof-idof)) = rhs* fstrdynamic%VEC1(ndof*in-(ndof-idof))
275 fstrsolid%REACTION(ndof*(in-1)+idof) = fstrsolid%QFORCE(ndof*(in-1)+idof)