13 subroutine dynamic_mat_ass_bc_vl(cstep, hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, fstrPARAM, hecLagMAT, t_curr, iter, conMAT)
19 integer(kind=kint) :: cstep
20 type(hecmwst_matrix) :: hecMAT
21 type(hecmwst_local_mesh) :: hecMESH
25 type(hecmwst_matrix_lagrange) :: hecLagMAT
26 real(kind=kreal) :: t_curr
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) :: flag_u, grpid
33 real(kind=kreal) :: b2, b3, b4, c1
34 real(kind=kreal) :: rhs, rhs0, f_t
36 if( fstrsolid%VELOCITY_type ==
kbcinitial )
return
40 if(dabs(fstrdynamic%gamma) .lt. 1.0e-20)
then
41 if( hecmesh%my_rank == 0 )
then
42 write(
imsg,*)
'stop due to fstrDYNAMIC%gamma = 0'
44 call hecmw_abort( hecmw_comm_get_comm())
47 b2 = fstrdynamic%t_delta &
48 *(fstrdynamic%gamma-fstrdynamic%beta)/fstrdynamic%gamma
49 b3 = fstrdynamic%t_delta**2 &
50 *(fstrdynamic%gamma-2.0*fstrdynamic%beta) &
51 /(2.0*fstrdynamic%gamma)
52 b4 = fstrdynamic%t_delta*fstrdynamic%beta/fstrdynamic%gamma
53 c1 = 2.0*fstrdynamic%t_delta
60 if( fstrdynamic%idx_eqa == 1 )
then
62 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
63 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
64 grpid = fstrsolid%VELOCITY_ngrp_GRPID(ig0)
66 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
68 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, t_curr, f_t, flag_u)
72 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
75 idofe = ityp - idofs*10
77 is0 = hecmesh%node_group%grp_index(ig-1) + 1
78 ie0 = hecmesh%node_group%grp_index(ig )
81 in = hecmesh%node_group%grp_item(ik)
82 do idof = idofs, idofe
84 if(
present(iter) )
then
89 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
90 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
94 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
95 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
96 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
99 if(
present(conmat))
then
100 call hecmw_mat_ass_bc(hecmat, in, idof, rhs, conmat)
102 call hecmw_mat_ass_bc(hecmat, in, idof, rhs)
105 .and. fstrparam%nlgeom .and. fstrdynamic%idx_resp == 1 )
then
106 if(
present(conmat))
then
107 call hecmw_mat_ass_bc_contactlag(conmat,heclagmat,in,idof,rhs)
109 call hecmw_mat_ass_bc_contactlag(hecmat,heclagmat,in,idof,rhs)
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, t_curr, 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
166 type(hecmwst_matrix) :: hecmat
167 type(hecmwst_local_mesh) :: hecMESH
171 integer(kind=kint) :: NDOF, ig0, ig, ityp, iS0, iE0, ik, in, idofS, idofE, idof
173 integer(kind=kint) :: flag_u, grpid
174 real(kind=kreal) :: rhs, f_t, t_curr
176 if( fstrsolid%VELOCITY_type ==
kbctransit )
return
181 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
182 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
183 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
184 grpid = fstrsolid%VELOCITY_ngrp_GRPID(ig0)
187 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, t_curr, f_t, flag_u)
190 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
192 is0 = hecmesh%node_group%grp_index(ig-1) + 1
193 ie0 = hecmesh%node_group%grp_index(ig )
195 idofe = ityp - idofs*10
198 in = hecmesh%node_group%grp_item(ik)
200 do idof = idofs, idofe
201 fstrdynamic%VEL (ndof*in-(ndof-idof),1) = rhs
215 type(hecmwst_matrix) :: hecmat
216 type(hecmwst_local_mesh) :: hecMESH
219 real(kind=kreal) :: t_curr
220 integer,
optional :: iter
222 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
223 integer(kind=kint) :: flag_u
224 real(kind=kreal) :: b2, b3, b4, c1
225 real(kind=kreal) :: rhs, rhs0, f_t
227 if( fstrsolid%VELOCITY_type ==
kbcinitial )
return
231 if(dabs(fstrdynamic%gamma) .lt. 1.0e-20)
then
232 if( hecmesh%my_rank == 0 )
then
233 write(
imsg,*)
'stop due to fstrDYNAMIC%gamma = 0'
235 call hecmw_abort( hecmw_comm_get_comm())
238 b2 = fstrdynamic%t_delta &
239 *(fstrdynamic%gamma-fstrdynamic%beta)/fstrdynamic%gamma
240 b3 = fstrdynamic%t_delta**2 &
241 *(fstrdynamic%gamma-2.0*fstrdynamic%beta) &
242 /(2.0*fstrdynamic%gamma)
243 b4 = fstrdynamic%t_delta*fstrdynamic%beta/fstrdynamic%gamma
244 c1 = 2.0*fstrdynamic%t_delta
249 do ig0 = 1, fstrsolid%VELOCITY_ngrp_tot
250 ig = fstrsolid%VELOCITY_ngrp_ID(ig0)
251 rhs = fstrsolid%VELOCITY_ngrp_val(ig0)
253 call table_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, t_curr, f_t, flag_u)
257 ityp = fstrsolid%VELOCITY_ngrp_type(ig0)
259 is0 = hecmesh%node_group%grp_index(ig-1) + 1
260 ie0 = hecmesh%node_group%grp_index(ig )
262 idofe = ityp - idofs*10
265 in = hecmesh%node_group%grp_item(ik)
266 do idof = idofs, idofe
267 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
269 hecmat%B(ndof*in-(ndof-idof)) = rhs* fstrdynamic%VEC1(ndof*in-(ndof-idof))
This module contains functions to set velocity boundary condition in dynamic analysis.
subroutine dynamic_explicit_ass_vl(hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, t_curr, iter)
subroutine dynamic_bc_init_vl(hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, t_curr)
This function sets initial condition of velocity.
subroutine dynamic_mat_ass_bc_vl(cstep, hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, fstrPARAM, hecLagMAT, t_curr, iter, conMAT)
This subrouitne set velocity boundary condition in dynamic analysis.
This module defines common 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
logical function fstr_isboundaryactive(fstrSOLID, nbc, cstep)
Table of lading step in dynamic analysis.
subroutine table_dyn(hecMESH, fstrSOLID, fstrDYNAMIC, ig0, t_curr, f_t, flag_u)
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
FSTR INNER CONTROL PARAMETERS (fstrPARAM)