20 ,fstrDYNAMIC,fstrRESULT,fstrPARAM &
21 ,fstrCPL,fstrFREQ, hecLagMAT &
25 type(hecmwst_local_mesh) :: hecMESH
26 type(hecmwst_matrix) :: hecMAT
29 type(hecmwst_result_data) :: fstrRESULT
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) :: restrt_step_num, ndof
40 integer(kind=kint) :: restrt_step(1)
44 if(dabs(fstrdynamic%t_delta) < 1.0e-20)
then
45 if( hecmesh%my_rank == 0 )
then
46 write(
imsg,*)
'stop due to fstrDYNAMIC%t_delta = 0'
48 call hecmw_abort( hecmw_comm_get_comm())
54 if(fstrdynamic%idx_resp == 1)
then
59 header = adjustl(
"MONITOR/")
62 ig = fstrdynamic%ngrp_monit
63 is = hecmesh%node_group%grp_index(ig-1)+1
64 ie = hecmesh%node_group%grp_index(ig)
66 in = hecmesh%node_group%grp_item(ik)
67 if (in > hecmesh%nn_internal) cycle
68 num_monit = num_monit+1
69 ing = hecmesh%global_node_id(in)
70 iunits = 10*(num_monit-1)
72 iunit = iunits + fstrdynamic%dynamic_IW4
73 write(fname,
'(a,i0,a)') trim(header)//
'dyna_disp_',ing,
'.txt'
74 if(fstrdynamic%restart_nout < 0 )
then
75 open(iunit,file=fname, position =
'append', iostat=ierror)
77 open(iunit,file=fname, status =
'replace', iostat=ierror)
79 if( ierror /= 0 )
then
80 write(*,*)
'stop due to file opening error:',trim(fname)
81 call hecmw_abort( hecmw_comm_get_comm())
84 iunit = iunits + fstrdynamic%dynamic_IW5
85 write(fname,
'(a,i0,a)') trim(header)//
'dyna_velo_',ing,
'.txt'
86 if(fstrdynamic%restart_nout < 0 )
then
87 open(iunit,file=fname, position =
'append', iostat=ierror)
89 open(iunit,file=fname, status =
'replace', iostat=ierror)
91 if( ierror /= 0 )
then
92 write(*,*)
'stop due to file opening error',trim(fname)
93 call hecmw_abort( hecmw_comm_get_comm())
96 iunit = iunits + fstrdynamic%dynamic_IW6
97 write(fname,
'(a,i0,a)') trim(header)//
'dyna_acce_',ing,
'.txt'
98 if(fstrdynamic%restart_nout < 0 )
then
99 open(iunit,file=fname, position =
'append', iostat=ierror)
101 open(iunit,file=fname, status =
'replace', iostat=ierror)
103 if( ierror /= 0 )
then
104 write(*,*)
'stop due to file opening error',trim(fname)
105 call hecmw_abort( hecmw_comm_get_comm())
108 iunit = iunits + fstrdynamic%dynamic_IW7
109 write(fname,
'(a,i0,a)') trim(header)//
'dyna_force_',ing,
'.txt'
110 if(fstrdynamic%restart_nout < 0 )
then
111 open(iunit,file=fname, position =
'append', iostat=ierror)
113 open(iunit,file=fname, status =
'replace', iostat=ierror)
115 if( ierror /= 0 )
then
116 write(*,*)
'stop due to file opening error',trim(fname)
117 call hecmw_abort( hecmw_comm_get_comm())
119 iunit = iunits + fstrdynamic%dynamic_IW8
120 write(fname,
'(a,i0,a)') trim(header)//
'dyna_strain_',ing,
'.txt'
121 if(fstrdynamic%restart_nout < 0 )
then
122 open(iunit,file=fname, position =
'append', iostat=ierror)
124 open(iunit,file=fname, status =
'replace', iostat=ierror)
126 if( ierror /= 0 )
then
127 write(*,*)
'stop due to file opening error',trim(fname)
128 call hecmw_abort( hecmw_comm_get_comm())
131 iunit = iunits + fstrdynamic%dynamic_IW9
132 write(fname,
'(a,i0,a)') trim(header)//
'dyna_stress_',ing,
'.txt'
133 if(fstrdynamic%restart_nout < 0 )
then
134 open(iunit,file=fname, position =
'append', iostat=ierror)
136 open(iunit,file=fname, status =
'replace', iostat=ierror)
138 if( ierror /= 0 )
then
139 write(*,*)
'stop due to file opening error',trim(fname)
140 call hecmw_abort( hecmw_comm_get_comm())
148 fstrdynamic%DISP = 0.d0
149 fstrdynamic%VEL = 0.d0
150 fstrdynamic%ACC = 0.d0
151 fstrsolid%unode(:) =0.d0
152 fstrsolid%QFORCE(:) =0.d0
153 fstrdynamic%kineticEnergy=0.d0
154 fstrdynamic%strainEnergy=0.d0
155 fstrdynamic%totalEnergy=0.d0
156 call fstr_updatestate( hecmesh, fstrsolid, 0.d0 )
161 fstrdynamic%i_step = 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)
185 call dynamic_bc_init_vl(hecmesh, hecmat, fstrsolid, fstrdynamic)
186 call dynamic_bc_init_ac(hecmesh, hecmat, fstrsolid, fstrdynamic)
190 if(fstrdynamic%restart_nout < 0 )
then
191 if( fstrdynamic%idx_eqa == 1 )
then
192 call fstr_read_restart_dyna_nl(restrt_step_num,hecmesh,fstrsolid,fstrdynamic,fstrparam,&
193 infoctchange%contactNode_previous)
194 elseif(fstrdynamic%idx_eqa == 11)
then
195 if( .not.
associated( fstrsolid%contacts ) )
then
196 call fstr_read_restart_dyna_nl(restrt_step_num,hecmesh,fstrsolid,fstrdynamic,fstrparam)
198 call fstr_read_restart_dyna_nl(restrt_step_num,hecmesh,fstrsolid,fstrdynamic,fstrparam,&
199 infoctchange%contactNode_previous)
202 restrt_step_num = restrt_step_num + 1
203 fstrdynamic%restart_nout = - fstrdynamic%restart_nout
204 hecmat%Iarray(98) = 1
207 if(fstrdynamic%idx_resp == 1)
then
209 if(fstrdynamic%idx_eqa == 1)
then
211 ,fstrdynamic,fstrresult,fstrparam &
212 ,fstrcpl,heclagmat,restrt_step_num,infoctchange &
215 else if(fstrdynamic%idx_eqa == 11)
then
217 ,fstrdynamic,fstrresult,fstrparam,infoctchange &
218 ,fstrcpl, restrt_step_num )
221 else if(fstrdynamic%idx_resp == 2)
then
223 if( fstrparam%nlgeom )
then
224 if( hecmesh%my_rank .eq. 0 )
then
225 write(
imsg,*)
'stop: steady-state harmonic response analysis is not yet available !'
227 call hecmw_abort( hecmw_comm_get_comm())
230 if( hecmesh%my_rank .eq. 0 )
then
232 fstrresult, fstrparam, fstrcpl, fstrfreq, heclagmat, &
238 if(fstrdynamic%idx_resp == 1)
then
241 close(iunits + fstrdynamic%dynamic_IW4)
242 close(iunits + fstrdynamic%dynamic_IW5)
243 close(iunits + fstrdynamic%dynamic_IW6)
244 close(iunits + fstrdynamic%dynamic_IW7)
245 close(iunits + fstrdynamic%dynamic_IW8)
246 close(iunits + fstrdynamic%dynamic_IW9)
254 deallocate( fstreig%mass )