14 subroutine dynamic_mat_ass_bc_ac(cstep, hecMESH, hecMAT, fstrSOLID ,fstrDYNAMIC, fstrPARAM, hecLagMAT, t_curr, iter, conMAT)
20 integer(kind=kint) :: cstep
21 type(hecmwst_matrix) :: hecMAT
22 type(hecmwst_local_mesh) :: hecMESH
26 type(hecmwst_matrix_lagrange) :: hecLagMAT
27 real(kind=kreal) :: t_curr
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) :: flag_u, grpid
33 real(kind=kreal) :: b2, b3, b4, c1
34 real(kind=kreal) :: rhs, rhs0, f_t
36 if( fstrsolid%ACCELERATION_type ==
kbcinitial )
return
40 b2 = fstrdynamic%t_delta
41 b3 = fstrdynamic%t_delta**2*(0.5d0-fstrdynamic%beta)
42 b4 = fstrdynamic%t_delta**2*fstrdynamic%beta
43 c1 = fstrdynamic%t_delta**2
50 if( fstrdynamic%idx_eqa == 1 )
then
52 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
53 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
54 grpid = fstrsolid%ACCELERATION_ngrp_GRPID(ig0)
56 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
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
96 call hecmw_mat_ass_bc_contactlag(conmat,heclagmat,in,idof,rhs)
98 call hecmw_mat_ass_bc_contactlag(hecmat,heclagmat,in,idof,rhs)
112 else if( fstrdynamic%idx_eqa == 11 )
then
114 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
115 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
116 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
121 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
123 is0 = hecmesh%node_group%grp_index(ig-1) + 1
124 ie0 = hecmesh%node_group%grp_index(ig )
126 idofe = ityp - idofs*10
129 in = hecmesh%node_group%grp_item(ik)
131 do idof = idofs, idofe
132 rhs = 2.0*fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
133 - fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
135 hecmat%B (ndof*in-(ndof-idof)) = rhs
136 fstrdynamic%VEC1(ndof*in-(ndof-idof)) = 1.0d0
157 type(hecmwst_matrix) :: hecmat
158 type(hecmwst_local_mesh) :: hecMESH
161 real(kind=kreal) :: t_curr
163 integer(kind=kint) :: NDOF, ig0, ig, ityp, iS0, iE0, ik, in, idofS, idofE, idof
165 integer(kind=kint) :: flag_u, grpid
166 real(kind=kreal) :: rhs, f_t
168 if( fstrsolid%ACCELERATION_type ==
kbctransit )
return
175 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
176 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
177 grpid = fstrsolid%ACCELERATION_ngrp_GRPID(ig0)
179 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
184 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
186 is0 = hecmesh%node_group%grp_index(ig-1) + 1
187 ie0 = hecmesh%node_group%grp_index(ig )
189 idofe = ityp - idofs*10
192 in = hecmesh%node_group%grp_item(ik)
194 do idof = idofs, idofe
195 fstrdynamic%ACC (ndof*in-(ndof-idof),1) = rhs
208 type(hecmwst_matrix) :: hecmat
209 type(hecmwst_local_mesh) :: hecMESH
212 real(kind=kreal) :: t_curr
213 integer,
optional :: iter
215 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
216 integer(kind=kint) :: flag_u
217 real(kind=kreal) :: b2, b3, b4, c1
218 real(kind=kreal) :: rhs, rhs0, f_t
220 if( fstrsolid%ACCELERATION_type ==
kbcinitial )
return
224 b2 = fstrdynamic%t_delta
225 b3 = fstrdynamic%t_delta**2*(0.5d0-fstrdynamic%beta)
226 b4 = fstrdynamic%t_delta**2*fstrdynamic%beta
227 c1 = fstrdynamic%t_delta**2
231 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
232 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
233 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
238 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
240 is0 = hecmesh%node_group%grp_index(ig-1) + 1
241 ie0 = hecmesh%node_group%grp_index(ig )
243 idofe = ityp - idofs*10
246 in = hecmesh%node_group%grp_item(ik)
248 do idof = idofs, idofe
249 rhs = 2.0*fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
250 - fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
252 hecmat%B(ndof*in-(ndof-idof)) = rhs* fstrdynamic%VEC1(ndof*in-(ndof-idof))
This module contains functions to set acceleration boundary condition in dynamic analysis.
subroutine dynamic_bc_init_ac(hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, t_curr)
This function sets initial condition of acceleration.
subroutine dynamic_explicit_ass_ac(hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, t_curr, iter)
subroutine dynamic_mat_ass_bc_ac(cstep, hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, fstrPARAM, hecLagMAT, t_curr, iter, conMAT)
This subrouitne set acceleration boundary condition in dynamic analysis.
This module defines common data and basic structures for analysis.
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)
Amplitude evaluation for loading conditions in dynamic analysis.
subroutine fstr_get_amplitude_dyn(hecMESH, fstrSOLID, fstrDYNAMIC, ig0, t_curr, value, flag_u)
Evaluate the amplitude-scaled target value a(t) for dynamic analysis.
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
FSTR INNER CONTROL PARAMETERS (fstrPARAM)