21 ,fstrDYNAMIC,fstrRESULT,fstrPARAM &
22 ,fstrCPL,fstrFREQ, fstrMAT &
26 type(hecmwst_local_mesh) :: hecMESH
27 type(hecmwst_matrix) :: hecMAT
30 type(hecmwst_result_data) :: fstrRESULT
36 type(fstr_info_contactchange) :: infoCTChange
37 type(hecmwst_matrix),
optional :: conMAT
38 integer(kind=kint) :: i, j, num_monit, ig, is, iE, ik, in, ing, iunitS, iunit, ierror, flag, limit
39 character(len=HECMW_FILENAME_LEN) :: fname, header
40 integer(kind=kint) :: restrt_step_num, ndof
41 integer(kind=kint) :: restrt_step(1)
45 if(dabs(fstrdynamic%t_delta) < 1.0e-20)
then
46 if( hecmesh%my_rank == 0 )
then
47 write(
imsg,*)
'stop due to fstrDYNAMIC%t_delta = 0'
49 call hecmw_abort( hecmw_comm_get_comm())
55 if(fstrdynamic%idx_resp == 1)
then
60 header = adjustl(
"MONITOR/")
63 ig = fstrdynamic%ngrp_monit
64 is = hecmesh%node_group%grp_index(ig-1)+1
65 ie = hecmesh%node_group%grp_index(ig)
67 in = hecmesh%node_group%grp_item(ik)
68 if (in > hecmesh%nn_internal) cycle
69 num_monit = num_monit+1
70 ing = hecmesh%global_node_id(in)
71 iunits = 10*(num_monit-1)
73 iunit = iunits + fstrdynamic%dynamic_IW4
74 write(fname,
'(a,i0,a)') trim(header)//
'dyna_disp_',ing,
'.txt'
75 if(fstrdynamic%restart_nout < 0 )
then
76 open(iunit,file=fname, position =
'append', iostat=ierror)
78 open(iunit,file=fname, status =
'replace', iostat=ierror)
80 if( ierror /= 0 )
then
81 write(*,*)
'stop due to file opening error:',trim(fname)
82 call hecmw_abort( hecmw_comm_get_comm())
85 iunit = iunits + fstrdynamic%dynamic_IW5
86 write(fname,
'(a,i0,a)') trim(header)//
'dyna_velo_',ing,
'.txt'
87 if(fstrdynamic%restart_nout < 0 )
then
88 open(iunit,file=fname, position =
'append', iostat=ierror)
90 open(iunit,file=fname, status =
'replace', iostat=ierror)
92 if( ierror /= 0 )
then
93 write(*,*)
'stop due to file opening error',trim(fname)
94 call hecmw_abort( hecmw_comm_get_comm())
97 iunit = iunits + fstrdynamic%dynamic_IW6
98 write(fname,
'(a,i0,a)') trim(header)//
'dyna_acce_',ing,
'.txt'
99 if(fstrdynamic%restart_nout < 0 )
then
100 open(iunit,file=fname, position =
'append', iostat=ierror)
102 open(iunit,file=fname, status =
'replace', iostat=ierror)
104 if( ierror /= 0 )
then
105 write(*,*)
'stop due to file opening error',trim(fname)
106 call hecmw_abort( hecmw_comm_get_comm())
109 iunit = iunits + fstrdynamic%dynamic_IW7
110 write(fname,
'(a,i0,a)') trim(header)//
'dyna_force_',ing,
'.txt'
111 if(fstrdynamic%restart_nout < 0 )
then
112 open(iunit,file=fname, position =
'append', iostat=ierror)
114 open(iunit,file=fname, status =
'replace', iostat=ierror)
116 if( ierror /= 0 )
then
117 write(*,*)
'stop due to file opening error',trim(fname)
118 call hecmw_abort( hecmw_comm_get_comm())
120 iunit = iunits + fstrdynamic%dynamic_IW8
121 write(fname,
'(a,i0,a)') trim(header)//
'dyna_strain_',ing,
'.txt'
122 if(fstrdynamic%restart_nout < 0 )
then
123 open(iunit,file=fname, position =
'append', iostat=ierror)
125 open(iunit,file=fname, status =
'replace', iostat=ierror)
127 if( ierror /= 0 )
then
128 write(*,*)
'stop due to file opening error',trim(fname)
129 call hecmw_abort( hecmw_comm_get_comm())
132 iunit = iunits + fstrdynamic%dynamic_IW9
133 write(fname,
'(a,i0,a)') trim(header)//
'dyna_stress_',ing,
'.txt'
134 if(fstrdynamic%restart_nout < 0 )
then
135 open(iunit,file=fname, position =
'append', iostat=ierror)
137 open(iunit,file=fname, status =
'replace', iostat=ierror)
139 if( ierror /= 0 )
then
140 write(*,*)
'stop due to file opening error',trim(fname)
141 call hecmw_abort( hecmw_comm_get_comm())
149 fstrdynamic%DISP = 0.d0
150 fstrdynamic%VEL = 0.d0
151 fstrdynamic%ACC = 0.d0
152 fstrsolid%unode(:) =0.d0
153 fstrsolid%QFORCE(:) =0.d0
154 fstrdynamic%kineticEnergy=0.d0
155 fstrdynamic%strainEnergy=0.d0
156 fstrdynamic%totalEnergy=0.d0
157 call fstr_updatestate( hecmesh, fstrsolid, 0.d0 )
162 fstrdynamic%i_step = 0
163 infoctchange%contactNode_previous = 0
169 do i= 1, hecmesh%n_node
172 fstrdynamic%VEL(ndof*i-(ndof-ing),1) =
g_initialcnd(j)%realval(i)
175 do i = 1, hecmesh%n_node
178 fstrdynamic%ACC(ndof*i-(ndof-ing),1) =
g_initialcnd(j)%realval(i)
184 if(fstrdynamic%restart_nout >= 0 )
then
185 call dynamic_bc_init (hecmesh, hecmat, fstrsolid, fstrdynamic)
186 call dynamic_bc_init_vl(hecmesh, hecmat, fstrsolid, fstrdynamic)
187 call dynamic_bc_init_ac(hecmesh, hecmat, fstrsolid, fstrdynamic)
191 if(fstrdynamic%restart_nout < 0 )
then
192 if( .not.
associated( fstrsolid%contacts ) )
then
193 call fstr_read_restart_dyna_nl(restrt_step_num,hecmesh,fstrsolid,fstrdynamic,fstrparam)
195 call fstr_read_restart_dyna_nl(restrt_step_num,hecmesh,fstrsolid,fstrdynamic,fstrparam,&
196 infoctchange%contactNode_previous)
198 restrt_step_num = restrt_step_num + 1
199 fstrdynamic%restart_nout = - fstrdynamic%restart_nout
200 hecmat%Iarray(98) = 1
203 if(fstrdynamic%idx_resp == 1)
then
205 if(fstrdynamic%idx_eqa == 1)
then
206 if(.not.
associated( fstrsolid%contacts ) )
then
208 ,fstrdynamic,fstrresult,fstrparam &
209 ,fstrcpl, restrt_step_num )
214 ,fstrdynamic,fstrresult,fstrparam &
215 ,fstrcpl,fstrmat,restrt_step_num,infoctchange &
219 ,fstrdynamic,fstrresult,fstrparam &
220 ,fstrcpl,fstrmat,restrt_step_num,infoctchange )
224 else if(fstrdynamic%idx_eqa == 11)
then
226 ,fstrdynamic,fstrresult,fstrparam,infoctchange &
227 ,fstrcpl, restrt_step_num )
230 else if(fstrdynamic%idx_resp == 2)
then
232 if( fstrparam%nlgeom )
then
233 if( hecmesh%my_rank .eq. 0 )
then
234 write(
imsg,*)
'stop: steady-state harmonic response analysis is not yet available !'
236 call hecmw_abort( hecmw_comm_get_comm())
239 if( hecmesh%my_rank .eq. 0 )
then
241 fstrresult, fstrparam, fstrcpl, fstrfreq, fstrmat, &
247 if(fstrdynamic%idx_resp == 1)
then
250 close(iunits + fstrdynamic%dynamic_IW4)
251 close(iunits + fstrdynamic%dynamic_IW5)
252 close(iunits + fstrdynamic%dynamic_IW6)
253 close(iunits + fstrdynamic%dynamic_IW7)
254 close(iunits + fstrdynamic%dynamic_IW8)
255 close(iunits + fstrdynamic%dynamic_IW9)
263 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, fstrresult, fstrparam, infoctchange, fstrcpl, restrt_step_num)
This module contains subroutines for nonlinear implicit dynamic analysis.
subroutine fstr_solve_dynamic_nlimplicit(cstep, hecmesh, hecmat, fstrsolid, fstreig, fstrdynamic, fstrresult, fstrparam, fstrcpl, restrt_step_num)
This subroutine provides function of nonlinear implicit dynamic analysis using the Newmark method.
subroutine fstr_solve_dynamic_nlimplicit_contactslag(cstep, hecmesh, hecmat, fstrsolid, fstreig, fstrdynamic, fstrresult, fstrparam, fstrcpl, fstrmat, restrt_step_num, infoctchange, conmat)
This subroutine provides function of nonlinear implicit dynamic analysis using the Newmark method....
subroutine fstr_solve_frequency_analysis(hecmesh, hecmat, fstrsolid, fstreig, fstrdynamic, fstrresult, fstrparam, fstrcpl, fstrfreq, fstrmat, restart_step_num)
This module contains subroutines controlling dynamic calculation.
subroutine fstr_solve_dynamic(hecmesh, hecmat, fstrsolid, fstreig, fstrdynamic, fstrresult, fstrparam, fstrcpl, fstrfreq, fstrmat, conmat)
Master subroutine for dynamic analysis.
This module provides functions to read in data from control file and do neccessary preparation for fo...
subroutine fstr_dynamic_finalize(fstrdynamic)
Finalizer of fstr_solid.
subroutine fstr_dynamic_alloc(hecmesh, fstrdynamic)
Initial setting of dynamic calculation.
This module defined coomon data and basic structures for analysis.
integer(kind=kint), parameter imsg
subroutine hecmat_finalize(hecmat)
integer(kind=kint), parameter kcaslagrange
contact analysis algorithm
type(tinitialcondition), dimension(:), pointer, save g_initialcnd
logical paracontactflag
PARALLEL CONTACT FLAG.
Data for coupling analysis.
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
Package of data used by Lanczos eigenvalue solver.
FSTR INNER CONTROL PARAMETERS (fstrPARAM)