32
33
34
35 USE my_alloc_mod
38
39
40
41
42
43#include "implicit_f.inc"
44
45
46
47 INTEGER ITAB(*)
49 . ms(numnod),in(numnod),stifn(numnod),stifr(numnod),totmas
50
51
52
53#include "com04_c.inc"
54#include "units_c.inc"
55#include "scr18_c.inc"
56
57
58
59 INTEGER I,N,COMPT,K,NVAL
60 INTEGER :: IERROR
61 INTEGER, DIMENSION(:), ALLOCATABLE :: PERM
62 my_real,
DIMENSION(:),
ALLOCATABLE,
TARGET ::
63 . dt
64 my_real,
DIMENSION(:),
POINTER ::
65 . tmp
66 my_real dtsca,target_dt_tab(20),per_adm_tab(20),target_dt_tab2(20),summ,sumk
67
68
69
70
71
72
73 ALLOCATE(dt(2*numnod))
74 CALL my_alloc(perm,numnod)
75 mass0_start = totmas
76 dtsca = zep9
77
78 tmp => dt(numnod+1:numnod*2)
79
80 DO i=1,numnod
81 IF((ms(i)/=zero).AND.(stifn(i)>em20))THEN
82 dt(i)=ms(i)/stifn(i)
83 ELSE
84 dt(i)=ep30
85
86 ENDIF
87 ENDDO
88
89
90
91 summ = zero
92 sumk = zero
93
94 DO i=1,numnod
95 tmp(i)=i
96 perm(i) = i
97 IF (dt(i) < ep30) THEN
98 summ = summ + ms(i)
99 sumk = sumk + stifn(i)
100 ENDIF
101 ENDDO
102
103 CALL myqsort(numnod,dt,perm,ierror)
104 tmp(1:numnod) = perm(1:numnod)
105
106 DEALLOCATE( perm )
107
108 nval = 20
109 DO i=1,20
110 per_adm_tab(i) = 0.005*i
111 ENDDO
112
113
114
115 dtsca = zep9
116 CALL find_dt_target(ms,stifn,target_dt_tab,per_adm_tab,dt,tmp,dtsca,totmas,nval,numnod)
117
118
119
120 dtsca = zep67
121 CALL find_dt_target(ms,stifn,target_dt_tab2,per_adm_tab,dt,tmp,dtsca,totmas,nval,numnod)
122
123
124
125 IF (dt(1) < ep20) THEN
126
127
128
129 WRITE(iout,2001)
130 WRITE(iout,2002)
131 CALL plot_curve(target_dt_tab, per_adm_tab, 20, input_size_x=60, input_size_y=24,
132 . input_txt_x="TARGET TIME STEP",input_txt_y="DM/M - at first cycle - scaling factor = 0.9",input_symbol="*")
133
134 WRITE(iout,3000) ' DM/M at first cycle ','Target time step - scaling factor = 0.9',
135 . 'Target time step - scaling factor = 0.67'
136 WRITE(iout,3000) ' -------------------------------------','---------------------------------------',
137 . '---------------------------------------'
138
139 DO i=1,5
140 k = 2*i
141 WRITE(iout,3001) per_adm_tab(k),target_dt_tab(k),target_dt_tab2(k)
142 ENDDO
143
144 WRITE(iout,4001)
145 WRITE(iout,4002)
146
147 ENDIF
148
149
150 DEALLOCATE( dt)
151
152
153 2001 FORMAT(//,' INITIAL ADDED MASS ESTIMATION for /DT/NODA/CST')
154 2002 FORMAT( ' ----------------------------------------------',//)
155
156 3000 FORMAT(2x,a,2x,'|',2x,a,2x,'|',2x,a)
157 3001 FORMAT(17x,1pg9.3,17x,'|',17x,1pg9.3,17x,'|',17x,1pg9.3)
158
159 4001 FORMAT(//,' WARNING : These added mass estimations are valid at first cycle only.')
160 4002 FORMAT(' Because of element deformation or contacts the added mass can increase during the run',//)
161
162
163 RETURN
subroutine find_dt_target(ms, stifn, target_dt_tab, per_adm_tab, dt, tmp, dtsca, totmas, nval, nnod)
subroutine myqsort(n, a, perm, error)