21 ,fstrDYNAMIC,fstrRESULT,fstrPARAM &
22 ,fstrCPL,fstrFREQ, hecLagMAT &
26 type(hecmwst_local_mesh) :: hecMESH
27 type(hecmwst_matrix) :: hecMAT
30 type(hecmwst_result_data) :: fstrRESULT
35 type(hecmwst_matrix_lagrange) :: hecLagMAT
36 type(fstr_info_contactchange) :: infoCTChange
37 type(hecmwst_matrix) :: 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) :: restart_step_num, restart_substep_num, restart_step_count, ndof
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 restart_substep_num = 1
162 restart_step_count = 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, fstrdynamic%t_curr)
186 call dynamic_bc_init_vl(hecmesh, hecmat, fstrsolid, fstrdynamic, fstrdynamic%t_curr)
187 call dynamic_bc_init_ac(hecmesh, hecmat, fstrsolid, fstrdynamic, fstrdynamic%t_curr)
191 if(fstrdynamic%restart_nout < 0 )
then
192 if( fstrdynamic%idx_eqa == 1 )
then
193 call fstr_read_restart_dyna_nl(restart_step_num,restart_substep_num,hecmesh,fstrsolid,fstrdynamic,fstrparam,&
194 infoctchange%contactNode_previous,restart_step_count)
195 elseif(fstrdynamic%idx_eqa == 11)
then
196 call fstr_read_restart_dyna_nl(restart_step_num,restart_substep_num,hecmesh,fstrsolid,fstrdynamic,fstrparam,&
197 infoctchange%contactNode_previous,restart_step_count)
199 fstrdynamic%restart_nout = - fstrdynamic%restart_nout
200 hecmat%Iarray(98) = 1
205 if(fstrdynamic%idx_resp == 1)
then
207 if(fstrdynamic%idx_eqa == 1)
then
209 ,fstrdynamic,fstrresult,fstrparam &
210 ,fstrcpl,heclagmat,restart_step_num,restart_substep_num,infoctchange &
211 ,conmat,restart_step_count )
213 else if(fstrdynamic%idx_eqa == 11)
then
215 ,fstrdynamic,fstrresult,fstrparam,infoctchange &
216 ,fstrcpl, restart_substep_num, restart_step_count )
219 else if(fstrdynamic%idx_resp == 2)
then
221 if( fstrparam%nlgeom )
then
222 if( hecmesh%my_rank .eq. 0 )
then
223 write(
imsg,*)
'stop: steady-state harmonic response analysis is not yet available !'
225 call hecmw_abort( hecmw_comm_get_comm())
228 if( hecmesh%my_rank .eq. 0 )
then
230 fstrresult, fstrparam, fstrcpl, fstrfreq, heclagmat, &
236 if(fstrdynamic%idx_resp == 1)
then
239 close(iunits + fstrdynamic%dynamic_IW4)
240 close(iunits + fstrdynamic%dynamic_IW5)
241 close(iunits + fstrdynamic%dynamic_IW6)
242 close(iunits + fstrdynamic%dynamic_IW7)
243 close(iunits + fstrdynamic%dynamic_IW8)
244 close(iunits + fstrdynamic%dynamic_IW9)
252 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, restrt_step_count)
This module contains subroutines for nonlinear implicit dynamic analysis.
subroutine fstr_solve_nlgeom_dynamic_implicit_contactslag(hecMESH, hecMAT, fstrSOLID, fstrEIG, fstrDYNAMIC, fstrRESULT, 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 method....
subroutine fstr_solve_frequency_analysis(hecMESH, hecMAT, fstrSOLID, fstrEIG, fstrDYNAMIC, fstrRESULT, fstrPARAM, fstrCPL, fstrFREQ, hecLagMAT, restart_step_num)
This module contains subroutines controlling dynamic calculation.
subroutine fstr_solve_dynamic(hecMESH, hecMAT, fstrSOLID, fstrEIG, fstrDYNAMIC, fstrRESULT, 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...
subroutine fstr_dynamic_alloc(hecMESH, fstrDYNAMIC)
Initial setting of dynamic calculation.
subroutine fstr_dynamic_finalize(fstrDYNAMIC)
Finalizer of fstr_solid.
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)