18 subroutine table_dyn(hecMESH, fstrSOLID, fstrDYNAMIC, ig0, f_t, flag_u)
19 type(hecmwst_local_mesh) :: hecMESH
23 integer(kind=kint) :: i, ig0
24 integer(kind=kint) :: jj_n_amp, jj1, jj2
25 integer(kind=kint) :: s1, s2, flag_u
26 real(kind=kreal) :: t_1, t_2, t_t, f_1, f_2, f_t
30 t_1 = 0.0d0; t_2 = 0.0d0; t_t = 0.0d0; f_1 = 0.0d0; f_2 = 0.0d0; f_t = 0.0d0
32 if( flag_u .eq. 1 )
then
33 jj_n_amp = fstrsolid%BOUNDARY_ngrp_amp(ig0)
34 else if( flag_u .eq. 2 )
then
35 jj_n_amp = fstrsolid%VELOCITY_ngrp_amp(ig0)
36 else if( flag_u .eq. 3 )
then
37 jj_n_amp = fstrsolid%ACCELERATION_ngrp_amp(ig0)
38 else if( flag_u .eq. 0 )
then
39 jj_n_amp = fstrsolid%CLOAD_ngrp_amp(ig0)
40 else if( flag_u .eq. 10 )
then
41 jj_n_amp = fstrsolid%DLOAD_ngrp_amp(ig0)
44 if( jj_n_amp == 0 )
then
48 jj1 = hecmesh%amp%amp_index(jj_n_amp - 1)
49 jj2 = hecmesh%amp%amp_index(jj_n_amp)
52 if( fstrdynamic%idx_eqa == 1 )
then
53 t_t = fstrdynamic%t_curr
55 else if( fstrdynamic%idx_eqa == 11 )
then
58 t_t = fstrdynamic%t_curr - fstrdynamic%t_delta
60 t_t = fstrdynamic%t_curr - fstrdynamic%t_delta
62 t_t = fstrdynamic%t_curr - fstrdynamic%t_delta
64 t_t = fstrdynamic%t_curr - fstrdynamic%t_delta
66 t_t = fstrdynamic%t_curr - fstrdynamic%t_delta
70 if( fstrdynamic%i_step == 0 )
then
71 t_t = fstrdynamic%t_delta*fstrdynamic%i_step
77 if(t_t .gt. hecmesh%amp%amp_table(jj2))
then
78 f_t = hecmesh%amp%amp_val(jj2)
79 else if(t_t .le. hecmesh%amp%amp_table(jj2))
then
81 if(t_t .le. hecmesh%amp%amp_table(i))
then
88 t_2 = hecmesh%amp%amp_table(s2)
89 t_1 = hecmesh%amp%amp_table(s1)
90 f_2 = hecmesh%amp%amp_val(s2)
91 f_1 = hecmesh%amp%amp_val(s1)
92 if( t_2-t_1 .lt. 1.0e-20)
then
93 if( hecmesh%my_rank.eq.0)
then
94 write(
imsg,*)
'stop due to t_2-t_1 <= 0'
96 call hecmw_abort( hecmw_comm_get_comm())
98 f_t = ((t_2*f_1 - t_1*f_2) + (f_2 - f_1)*t_t) / (t_2 - t_1)