14 subroutine dynamic_mat_ass_bc_ac(cstep, hecMESH, hecMAT, fstrSOLID ,fstrDYNAMIC, fstrPARAM, hecLagMAT, hecEBC, &
22 integer(kind=kint) :: cstep
23 type(hecmwst_matrix) :: hecMAT
24 type(hecmwst_local_mesh) :: hecMESH
28 type(hecmwst_matrix_lagrange) :: hecLagMAT
29 type(hecmwst_ebc) :: hecEBC
30 real(kind=kreal) :: t_curr
31 integer,
optional :: iter
32 type(hecmwst_matrix),
optional :: conMAT
34 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
35 integer(kind=kint) :: flag_u, grpid
36 real(kind=kreal) :: b2, b3, b4, c1
37 real(kind=kreal) :: rhs, rhs0
39 if( fstrsolid%ACCELERATION_type ==
kbcinitial )
return
43 b2 = fstrdynamic%t_delta
44 b3 = fstrdynamic%t_delta**2*(0.5d0-fstrdynamic%beta)
45 b4 = fstrdynamic%t_delta**2*fstrdynamic%beta
46 c1 = fstrdynamic%t_delta**2
53 if( fstrdynamic%idx_eqa /= 11 )
then
55 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
56 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
57 grpid = fstrsolid%ACCELERATION_ngrp_GRPID(ig0)
59 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
64 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
67 idofe = ityp - idofs*10
69 is0 = hecmesh%node_group%grp_index(ig-1) + 1
70 ie0 = hecmesh%node_group%grp_index(ig )
73 in = hecmesh%node_group%grp_item(ik)
74 do idof = idofs, idofe
76 if(
present(iter) )
then
81 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
82 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
86 rhs = fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
87 + b2*fstrdynamic%VEL (ndof*in-(ndof-idof),1) &
88 + b3*fstrdynamic%ACC (ndof*in-(ndof-idof),1) &
93 .and. fstrparam%nlgeom .and. fstrdynamic%idx_resp == 1 )
then
94 if(
present(conmat))
then
95 call hecmw_mat_ass_bc_contactlag(conmat,heclagmat,in,idof,rhs)
97 call hecmw_mat_ass_bc_contactlag(hecmat,heclagmat,in,idof,rhs)
111 else if( fstrdynamic%idx_eqa == 11 )
then
113 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
114 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
115 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
120 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
122 is0 = hecmesh%node_group%grp_index(ig-1) + 1
123 ie0 = hecmesh%node_group%grp_index(ig )
125 idofe = ityp - idofs*10
128 in = hecmesh%node_group%grp_item(ik)
130 do idof = idofs, idofe
131 rhs = 2.0*fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
132 - fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
134 hecmat%B (ndof*in-(ndof-idof)) = rhs
135 fstrdynamic%VEC1(ndof*in-(ndof-idof)) = 1.0d0
156 type(hecmwst_matrix) :: hecmat
157 type(hecmwst_local_mesh) :: hecMESH
160 real(kind=kreal) :: t_curr
162 integer(kind=kint) :: NDOF, ig0, ig, ityp, iS0, iE0, ik, in, idofS, idofE, idof
164 integer(kind=kint) :: flag_u, grpid
165 real(kind=kreal) :: rhs
167 if( fstrsolid%ACCELERATION_type ==
kbctransit )
return
174 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
175 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
176 grpid = fstrsolid%ACCELERATION_ngrp_GRPID(ig0)
178 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
183 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
185 is0 = hecmesh%node_group%grp_index(ig-1) + 1
186 ie0 = hecmesh%node_group%grp_index(ig )
188 idofe = ityp - idofs*10
191 in = hecmesh%node_group%grp_item(ik)
193 do idof = idofs, idofe
194 fstrdynamic%ACC (ndof*in-(ndof-idof),1) = rhs
207 type(hecmwst_matrix) :: hecmat
208 type(hecmwst_local_mesh) :: hecMESH
211 real(kind=kreal) :: t_curr
212 integer,
optional :: iter
214 integer(kind=kint) :: ig0, ig, ityp, NDOF, iS0, iE0, ik, in, idofS, idofE, idof
215 integer(kind=kint) :: flag_u
216 real(kind=kreal) :: b2, b3, b4, c1
217 real(kind=kreal) :: rhs, rhs0
219 if( fstrsolid%ACCELERATION_type ==
kbcinitial )
return
223 b2 = fstrdynamic%t_delta
224 b3 = fstrdynamic%t_delta**2*(0.5d0-fstrdynamic%beta)
225 b4 = fstrdynamic%t_delta**2*fstrdynamic%beta
226 c1 = fstrdynamic%t_delta**2
230 do ig0 = 1, fstrsolid%ACCELERATION_ngrp_tot
231 ig = fstrsolid%ACCELERATION_ngrp_ID(ig0)
232 rhs = fstrsolid%ACCELERATION_ngrp_val(ig0)
237 ityp = fstrsolid%ACCELERATION_ngrp_type(ig0)
239 is0 = hecmesh%node_group%grp_index(ig-1) + 1
240 ie0 = hecmesh%node_group%grp_index(ig )
242 idofe = ityp - idofs*10
245 in = hecmesh%node_group%grp_item(ik)
247 do idof = idofs, idofe
248 rhs = 2.0*fstrdynamic%DISP(ndof*in-(ndof-idof),1) &
249 - fstrdynamic%DISP(ndof*in-(ndof-idof),3) &
251 hecmat%B(ndof*in-(ndof-idof)) = rhs* fstrdynamic%VEC1(ndof*in-(ndof-idof))
Essential boundary conditions kept as per-DOF marks and values so that they can be imposed on the mat...
subroutine, public hecmw_ebc_set(hecEBC, inode, idof, val)
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, hecEBC, 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)