23 fstrdynamic%idx_eqa = 1
24 fstrdynamic%idx_resp = 1
25 fstrdynamic%n_step = 1
26 fstrdynamic%t_start = 0.0
27 fstrdynamic%t_curr = 0.0d0
28 fstrdynamic%t_end = 1.0
29 fstrdynamic%t_delta = 1.0
30 fstrdynamic%gamma = 0.5
31 fstrdynamic%beta = 0.25
32 fstrdynamic%alpha = 0.0
34 fstrdynamic%idx_dmp = 1
35 fstrdynamic%ray_m = 0.0
36 fstrdynamic%ray_k = 0.0
37 fstrdynamic%restart_nout = 0
38 fstrdynamic%nout = 100
39 fstrdynamic%ngrp_monit = 0
40 fstrdynamic%nout_monit = 1
41 fstrdynamic%iout_list(1) = 0
42 fstrdynamic%iout_list(2) = 0
43 fstrdynamic%iout_list(3) = 0
44 fstrdynamic%iout_list(4) = 0
45 fstrdynamic%iout_list(5) = 0
46 fstrdynamic%iout_list(6) = 0
53 type(hecmwst_local_mesh),
target :: hecMESH
56 integer :: ierror, ndof,nnod
60 if(fstrdynamic%idx_eqa == 11)
then
61 allocate( fstrdynamic%DISP(ndof*nnod,3) ,stat=ierror )
62 if( ierror /= 0 )
then
63 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
64 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
66 call hecmw_abort( hecmw_comm_get_comm())
68 allocate( fstrdynamic%VEL (ndof*nnod,1) ,stat=ierror )
69 if( ierror /= 0 )
then
70 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
71 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
73 call hecmw_abort( hecmw_comm_get_comm())
75 allocate( fstrdynamic%ACC (ndof*nnod,1) ,stat=ierror )
76 if( ierror /= 0 )
then
77 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
78 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
80 call hecmw_abort( hecmw_comm_get_comm())
83 allocate( fstrdynamic%DISP(ndof*nnod,2) ,stat=ierror )
84 if( ierror /= 0 )
then
85 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
86 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
88 call hecmw_abort( hecmw_comm_get_comm())
90 allocate( fstrdynamic%VEL (ndof*nnod,2) ,stat=ierror )
91 if( ierror /= 0 )
then
92 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
93 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
95 call hecmw_abort( hecmw_comm_get_comm())
97 allocate( fstrdynamic%ACC (ndof*nnod,2) ,stat=ierror )
98 if( ierror /= 0 )
then
99 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
100 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
102 call hecmw_abort( hecmw_comm_get_comm())
107 allocate( fstrdynamic%VEC1(ndof*nnod) ,stat=ierror )
108 if( ierror /= 0 )
then
109 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
110 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
112 call hecmw_abort( hecmw_comm_get_comm())
114 allocate( fstrdynamic%VEC2(ndof*nnod) ,stat=ierror )
115 if( ierror /= 0 )
then
116 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
117 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
119 call hecmw_abort( hecmw_comm_get_comm())
121 allocate( fstrdynamic%VEC3(ndof*nnod) ,stat=ierror )
122 if( ierror /= 0 )
then
123 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
124 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
126 call hecmw_abort( hecmw_comm_get_comm())
128 if( fstrdynamic%idx_eqa == 2 )
then
129 allocate( fstrdynamic%HHT_FORCE(ndof*nnod) ,stat=ierror )
130 if( ierror /= 0 )
then
131 write(
idbg,*)
'stop due to allocation error <fstr_solve_LINEAR_DYNAMIC, HHT_FORCE>'
132 write(
idbg,*)
' rank = ', hecmesh%my_rank,
' ierror = ',ierror
134 call hecmw_abort( hecmw_comm_get_comm())
136 fstrdynamic%HHT_FORCE(:) = 0.0d0
146 if(
associated(fstrdynamic%DISP) ) &
147 deallocate( fstrdynamic%DISP ,stat=ierror )
148 if( ierror /= 0 )
then
149 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, DISP>'
151 call hecmw_abort( hecmw_comm_get_comm())
153 if(
associated(fstrdynamic%VEL) ) &
154 deallocate( fstrdynamic%VEL ,stat=ierror )
155 if( ierror /= 0 )
then
156 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEL>'
158 call hecmw_abort( hecmw_comm_get_comm())
160 if(
associated(fstrdynamic%ACC) ) &
161 deallocate( fstrdynamic%ACC ,stat=ierror )
162 if( ierror /= 0 )
then
163 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, ACC>'
165 call hecmw_abort( hecmw_comm_get_comm())
167 if(
associated(fstrdynamic%HHT_FORCE) )
then
168 deallocate( fstrdynamic%HHT_FORCE ,stat=ierror )
169 if( ierror /= 0 )
then
170 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, HHT_FORCE>'
172 call hecmw_abort( hecmw_comm_get_comm())
175 if(
associated(fstrdynamic%VEC1) ) &
176 deallocate( fstrdynamic%VEC1 ,stat=ierror )
177 if( ierror /= 0 )
then
178 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC1>'
180 call hecmw_abort( hecmw_comm_get_comm())
182 if(
associated(fstrdynamic%VEC2) ) &
183 deallocate( fstrdynamic%VEC2 ,stat=ierror )
184 if( ierror /= 0 )
then
185 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC2>'
187 call hecmw_abort( hecmw_comm_get_comm())
189 if(
associated(fstrdynamic%VEC3) ) &
190 deallocate( fstrdynamic%VEC3 ,stat=ierror )
191 if( ierror /= 0 )
then
192 write(
idbg,*)
'stop due to deallocation error <fstr_solve_LINEAR_DYNAMIC, VEC3>'
194 call hecmw_abort( hecmw_comm_get_comm())
205 integer(kind=kint) :: ctrl
207 integer(kind=kint) :: rcode
208 character(HECMW_NAME_LEN) :: grp_id_name(1)
209 integer(kind=kint) :: grp_id(1)
210 logical :: is_alpha_given
228 grp_id_name(1), hecmw_name_len, &
234 if( p%DYN%idx_eqa /= 1 .and. p%DYN%idx_eqa /= 2 .and. p%DYN%idx_eqa /= 11 )
then
235 write(*,*)
'### Error: !DYNAMIC time integration type must be 1 (Newmark-beta), 2 (HHT) or 11 (explicit)'
236 write(
ilog,*)
'### Error: !DYNAMIC time integration type must be 1 (Newmark-beta), 2 (HHT) or 11 (explicit)'
241 if( p%DYN%idx_eqa == 2 .and. p%DYN%idx_resp /= 1 )
then
242 write(*,*)
'### Error: HHT method is available only for time history analysis'
243 write(
ilog,*)
'### Error: HHT method is available only for time history analysis'
249 is_alpha_given = ( p%DYN%alpha < huge(0.0d0) )
250 if( p%DYN%idx_eqa == 2 )
then
251 if( .not. is_alpha_given )
then
252 write(*,*)
'### Warning: !DYNAMIC HHT parameter alpha is not given; Newmark-beta method is used'
253 write(
ilog,*)
'### Warning: !DYNAMIC HHT parameter alpha is not given; Newmark-beta method is used'
257 if( p%DYN%alpha < -1.0d0/3.0d0 .or. p%DYN%alpha > 0.0d0 )
then
258 write(*,*)
'### Warning: !DYNAMIC HHT parameter alpha must be in [-1/3, 0]; alpha = 0 is used'
259 write(
ilog,*)
'### Warning: !DYNAMIC HHT parameter alpha must be in [-1/3, 0]; alpha = 0 is used'
263 p%DYN%beta = 0.25d0*(1.0d0-p%DYN%alpha)**2
264 p%DYN%gamma = 0.5d0-p%DYN%alpha
265 if(
myrank == 0 )
write(
imsg,
'(a,3(1x,1pe12.5))') &
266 'INFO: HHT method with alpha, beta, gamma =', p%DYN%alpha, p%DYN%beta, p%DYN%gamma
269 if( is_alpha_given )
then
270 write(*,*)
'### Warning: !DYNAMIC HHT parameter alpha is ignored except for the HHT method (2)'
271 write(
ilog,*)
'### Warning: !DYNAMIC HHT parameter alpha is ignored except for the HHT method (2)'
277 write(*,*)
'### Error: !DYNAMIC mass matrix type must be 1 (lumped) or 2 (consistent)'
278 write(
ilog,*)
'### Error: !DYNAMIC mass matrix type must be 1 (lumped) or 2 (consistent)'
284 (p%DYN%idx_eqa == 11 .or. p%DYN%idx_resp /= 1) )
then
285 write(*,*)
'### Error: consistent mass matrix is available only for implicit transient analysis'
286 write(
ilog,*)
'### Error: consistent mass matrix is available only for implicit transient analysis'
292 if (p%DYN%idx_resp == 1)
then
294 p%DYN%ngrp_monit = grp_id(1)
296 read(grp_id_name,*) p%DYN%ngrp_monit
This module contains control file data obtaining functions for dynamic analysis.
integer(kind=kint) function fstr_ctrl_get_dynamic(ctrl, nlgeom, idx_eqa, idx_resp, n_step, t_start, t_end, t_delta, gamma, beta, alpha, idx_mas, idx_dmp, ray_m, ray_k, nout, node_id, node_id_len, nout_monit, iout_list)
Read in !DYNAMIC.
This module contains auxiliary functions in calculation setup.
subroutine fstr_ctrl_err_stop
This module contains auxiliary functions in calculation setup.
subroutine node_grp_name_to_id_ex(hecMESH, header_name, n, grp_id_name, grp_ID)
This module provides subroutines to initialize, allocate and finalize fstr_dynamic,...
subroutine fstr_dynamic_finalize(fstrDYNAMIC)
Finalizer of fstr_dynamic.
subroutine fstr_setup_dynamic(ctrl, P)
Read in !DYNAMIC !
subroutine fstr_dynamic_init(fstrDYNAMIC)
Initial setting of dynamic calculation.
subroutine fstr_dynamic_alloc(hecMESH, fstrDYNAMIC)
Initial setting of dynamic calculation.
This module defines common data and basic structures for analysis.
integer(kind=kint) myrank
PARALLEL EXECUTION.
integer(kind=kint), parameter imsg
integer(kind=kint), parameter idbg
integer(kind=kint), parameter kmassconsistent
integer(kind=kint), parameter ilog
FILE HANDLER.
integer(kind=kint), parameter kmasslumped
mass matrix type
Package of all data needs to initialize.
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)