21 ,fstrDYNAMIC,fstrPARAM &
22 ,fstrCPL,fstrFREQ, hecLagMAT &
26 type(hecmwst_local_mesh) :: hecMESH
27 type(hecmwst_matrix) :: hecMAT
34 type(hecmwst_matrix_lagrange) :: hecLagMAT
35 type(fstr_info_contactchange) :: infoCTChange
36 type(hecmwst_matrix) :: conMAT
37 integer(kind=kint) :: i, j, num_monit, ig, is, iE, ik, in, ing, iunitS, iunit, ierror, flag, limit
38 character(len=HECMW_FILENAME_LEN) :: fname, header
39 integer(kind=kint) :: restart_step_num, restart_substep_num, restart_step_count, ndof
43 if(dabs(fstrdynamic%t_delta) < 1.0e-20)
then
44 if( hecmesh%my_rank == 0 )
then
45 write(
imsg,*)
'stop due to fstrDYNAMIC%t_delta = 0'
47 call hecmw_abort( hecmw_comm_get_comm())
49 call fstr_dynamic_alloc( hecmesh, fstrdynamic )
53 if(fstrdynamic%idx_resp == 1)
then
58 header = adjustl(
"MONITOR/")
61 ig = fstrdynamic%ngrp_monit
62 is = hecmesh%node_group%grp_index(ig-1)+1
63 ie = hecmesh%node_group%grp_index(ig)
65 in = hecmesh%node_group%grp_item(ik)
66 if (in > hecmesh%nn_internal) cycle
67 num_monit = num_monit+1
68 ing = hecmesh%global_node_id(in)
69 iunits = 10*(num_monit-1)
71 iunit = iunits + fstrdynamic%dynamic_IW4
72 write(fname,
'(a,i0,a)') trim(header)//
'dyna_disp_',ing,
'.txt'
73 if(fstrdynamic%restart_nout < 0 )
then
74 open(iunit,file=fname, position =
'append', iostat=ierror)
76 open(iunit,file=fname, status =
'replace', iostat=ierror)
78 if( ierror /= 0 )
then
79 write(*,*)
'stop due to file opening error:',trim(fname)
80 call hecmw_abort( hecmw_comm_get_comm())
83 iunit = iunits + fstrdynamic%dynamic_IW5
84 write(fname,
'(a,i0,a)') trim(header)//
'dyna_velo_',ing,
'.txt'
85 if(fstrdynamic%restart_nout < 0 )
then
86 open(iunit,file=fname, position =
'append', iostat=ierror)
88 open(iunit,file=fname, status =
'replace', iostat=ierror)
90 if( ierror /= 0 )
then
91 write(*,*)
'stop due to file opening error',trim(fname)
92 call hecmw_abort( hecmw_comm_get_comm())
95 iunit = iunits + fstrdynamic%dynamic_IW6
96 write(fname,
'(a,i0,a)') trim(header)//
'dyna_acce_',ing,
'.txt'
97 if(fstrdynamic%restart_nout < 0 )
then
98 open(iunit,file=fname, position =
'append', iostat=ierror)
100 open(iunit,file=fname, status =
'replace', iostat=ierror)
102 if( ierror /= 0 )
then
103 write(*,*)
'stop due to file opening error',trim(fname)
104 call hecmw_abort( hecmw_comm_get_comm())
107 iunit = iunits + fstrdynamic%dynamic_IW7
108 write(fname,
'(a,i0,a)') trim(header)//
'dyna_force_',ing,
'.txt'
109 if(fstrdynamic%restart_nout < 0 )
then
110 open(iunit,file=fname, position =
'append', iostat=ierror)
112 open(iunit,file=fname, status =
'replace', iostat=ierror)
114 if( ierror /= 0 )
then
115 write(*,*)
'stop due to file opening error',trim(fname)
116 call hecmw_abort( hecmw_comm_get_comm())
118 iunit = iunits + fstrdynamic%dynamic_IW8
119 write(fname,
'(a,i0,a)') trim(header)//
'dyna_strain_',ing,
'.txt'
120 if(fstrdynamic%restart_nout < 0 )
then
121 open(iunit,file=fname, position =
'append', iostat=ierror)
123 open(iunit,file=fname, status =
'replace', iostat=ierror)
125 if( ierror /= 0 )
then
126 write(*,*)
'stop due to file opening error',trim(fname)
127 call hecmw_abort( hecmw_comm_get_comm())
130 iunit = iunits + fstrdynamic%dynamic_IW9
131 write(fname,
'(a,i0,a)') trim(header)//
'dyna_stress_',ing,
'.txt'
132 if(fstrdynamic%restart_nout < 0 )
then
133 open(iunit,file=fname, position =
'append', iostat=ierror)
135 open(iunit,file=fname, status =
'replace', iostat=ierror)
137 if( ierror /= 0 )
then
138 write(*,*)
'stop due to file opening error',trim(fname)
139 call hecmw_abort( hecmw_comm_get_comm())
147 fstrdynamic%DISP = 0.d0
148 fstrdynamic%VEL = 0.d0
149 fstrdynamic%ACC = 0.d0
150 fstrsolid%unode(:) =0.d0
151 fstrsolid%QFORCE(:) =0.d0
152 fstrdynamic%kineticEnergy=0.d0
153 fstrdynamic%strainEnergy=0.d0
154 fstrdynamic%totalEnergy=0.d0
155 call fstr_updatestate( hecmesh, fstrsolid, 0.d0 )
160 restart_substep_num = 1
161 restart_step_count = 0
162 infoctchange%contactNode_previous = 0
168 do i= 1, hecmesh%n_node
171 fstrdynamic%VEL(ndof*i-(ndof-ing),1) =
g_initialcnd(j)%realval(i)
174 do i = 1, hecmesh%n_node
177 fstrdynamic%ACC(ndof*i-(ndof-ing),1) =
g_initialcnd(j)%realval(i)
183 if(fstrdynamic%restart_nout >= 0 )
then
184 call dynamic_bc_init (hecmesh, hecmat, fstrsolid, fstrdynamic, fstrdynamic%t_curr)
185 call dynamic_bc_init_vl(hecmesh, hecmat, fstrsolid, fstrdynamic, fstrdynamic%t_curr)
186 call dynamic_bc_init_ac(hecmesh, hecmat, fstrsolid, fstrdynamic, fstrdynamic%t_curr)
190 if(fstrdynamic%restart_nout < 0 )
then
191 if( fstrdynamic%idx_eqa /= 11 )
then
192 call fstr_read_restart_dyna_nl(restart_step_num,restart_substep_num,hecmesh,fstrsolid,fstrdynamic,fstrparam,&
193 infoctchange%contactNode_previous,restart_step_count)
194 elseif(fstrdynamic%idx_eqa == 11)
then
195 call fstr_read_restart_dyna_nl(restart_step_num,restart_substep_num,hecmesh,fstrsolid,fstrdynamic,fstrparam,&
196 infoctchange%contactNode_previous,restart_step_count)
198 fstrdynamic%restart_nout = - fstrdynamic%restart_nout
199 hecmat%Iarray(98) = 1
204 if(fstrdynamic%idx_resp == 1)
then
206 if(fstrdynamic%idx_eqa /= 11)
then
208 ,fstrdynamic,fstrparam &
209 ,fstrcpl,heclagmat,restart_step_num,restart_substep_num,infoctchange &
210 ,conmat,restart_step_count )
212 else if(fstrdynamic%idx_eqa == 11)
then
214 ,fstrdynamic,fstrparam,infoctchange &
215 ,fstrcpl, restart_substep_num, restart_step_count )
218 else if(fstrdynamic%idx_resp == 2)
then
220 if( fstrparam%nlgeom )
then
221 if( hecmesh%my_rank .eq. 0 )
then
222 write(
imsg,*)
'stop: steady-state harmonic response analysis is not yet available !'
224 call hecmw_abort( hecmw_comm_get_comm())
228 fstrparam, fstrfreq, heclagmat)
232 if(fstrdynamic%idx_resp == 1)
then
235 close(iunits + fstrdynamic%dynamic_IW4)
236 close(iunits + fstrdynamic%dynamic_IW5)
237 close(iunits + fstrdynamic%dynamic_IW6)
238 close(iunits + fstrdynamic%dynamic_IW7)
239 close(iunits + fstrdynamic%dynamic_IW8)
240 close(iunits + fstrdynamic%dynamic_IW9)
245 call fstr_dynamic_finalize( fstrdynamic )
248 deallocate( fstreig%mass )
void hecmw_ctrl_is_subdir(int *flag, int *limit)
void hecmw_ctrl_make_subdir(char *filename, int *err, int len)
This module contains subroutines for nonlinear explicit dynamic analysis.
subroutine fstr_solve_dynamic_nlexplicit(hecMESH, hecMAT, fstrSOLID, fstrEIG, fstrDYN, fstrPARAM, infoCTChange, fstrCPL, restrt_step_num, restrt_step_count)
This module contains subroutines for nonlinear implicit dynamic analysis.
subroutine fstr_solve_nlgeom_dynamic_implicit_contactslag(hecMESH, hecMAT, fstrSOLID, fstrEIG, fstrDYNAMIC, fstrPARAM, fstrCPL, hecLagMAT, restart_step_num, restart_substep_num, infoCTChange, conMAT, restart_step_count)
This subroutine provides function of nonlinear implicit dynamic analysis using the Newmark or HHT met...
This module contains steady state frequency analysis.
subroutine fstr_solve_frequency_analysis(hecMESH, hecMAT, fstrSOLID, fstrEIG, fstrDYNAMIC, fstrPARAM, fstrFREQ, hecLagMAT)
This module contains subroutines controlling dynamic calculation.
subroutine fstr_solve_dynamic(hecMESH, hecMAT, fstrSOLID, fstrEIG, fstrDYNAMIC, fstrPARAM, fstrCPL, fstrFREQ, hecLagMAT, conMAT)
Master subroutine for dynamic analysis.
This module provides functions to read in data from control file and do necessary preparation for fol...
This module provides functions to deal with time and increment of stress analysis.
subroutine fstr_set_timeinc_base(dtime_base)
subroutine fstr_set_time(time)
This module defines common data and basic structures for analysis.
subroutine hecmat_finalize(hecMAT)
integer(kind=kint), parameter imsg
type(tinitialcondition), dimension(:), pointer, save g_initialcnd
Data for coupling analysis.
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
Package of data used by Lanczos eigenvalue solver.
FSTR INNER CONTROL PARAMETERS (fstrPARAM)