33
34
35
36 USE sensor_mod
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "param_c.inc"
45#include "com04_c.inc"
46#include "com08_c.inc"
47#include "units_c.inc"
48#include "comlock.inc"
49#include "task_c.inc"
50
51
52
53 INTEGER :: DIMFB,STABS
54 INTEGER :: TABS(STABS)
55 DOUBLE PRECISION ,DIMENSION(12,6,DIMFB) :: FBSAV6
56 my_real ,
DIMENSION(NTHVKI,*) :: fsav
57 TYPE (sensor_str_) ,TARGET :: sensor
58
59
60
61 INTEGER I,SECT_ID,IDIR,ICRIT,ISECT,IAD,IFLAG
62
63 my_real :: fmin,fmax,fx,fy,fz,ff,tstart,tmin,tdelay,infinity
64 parameter(infinity = 1.0e20)
65
66 IF (sensor%STATUS == 1) RETURN
67 ff = zero
68 fx = zero
69 fy = zero
70 fz = zero
71
72 tstart = sensor%TSTART
73 tmin = sensor%TMIN
74 tdelay = sensor%TDELAY
75
76 sect_id = sensor%IPARAM(1)
77 idir = sensor%IPARAM(2)
78 fmin = sensor%RPARAM(1)
79 fmax = sensor%RPARAM(2)
80 icrit = 0
81 iflag = 0
82
83 iad = ninter + nrwall + nrbody + sect_id
84 isect = tabs(sect_id+1) - tabs(sect_id)
85
86 IF (idir == 1) THEN
87 IF (stabs == 0) THEN
88 fx = fsav(1,iad)
89 fy = fsav(2,iad)
90 fz = fsav(3,iad)
91 ELSE
92 fx = fbsav6(1,1,isect)+fbsav6(1,2,isect)
93 . + fbsav6(1,3,isect)+fbsav6(1,4,isect)
94 . + fbsav6(1,5,isect)+fbsav6(1,6,isect)
95 fy = fbsav6(2,1,isect)+fbsav6(2,2,isect)
96 . + fbsav6(2,3,isect)+fbsav6(2,4,isect)
97 . + fbsav6(2,5,isect)+fbsav6(2,6,isect)
98 fz = fbsav6(3,1,isect)+fbsav6(3,2,isect)
99 . + fbsav6(3,3,isect)+fbsav6(3,4,isect)
100 . + fbsav6(3,5,isect)+fbsav6(3,6,isect)
101 ENDIF
102 ELSEIF (idir == 2) THEN
103 IF (stabs == 0) THEN
104 fx = fsav(4,iad)
105 fy = fsav(5,iad)
106 fz = fsav(6,iad)
107 ELSE
108 fx = fbsav6(4,1,isect)+fbsav6(4,2,isect)
109 . + fbsav6(4,3,isect)+fbsav6(4,4,isect)
110 . + fbsav6(4,5,isect)+fbsav6(4,6,isect)
111 fy = fbsav6(5,1,isect)+fbsav6(5,2,isect)
112 . + fbsav6(5,3,isect)+fbsav6(5,4,isect)
113 . + fbsav6(5,5,isect)+fbsav6(5,6,isect)
114 fz = fbsav6(6,1,isect)+fbsav6(6,2,isect)
115 . + fbsav6(6,3,isect)+fbsav6(6,4,isect)
116 . + fbsav6(6,5,isect)+fbsav6(6,6,isect)
117 ENDIF
118 ELSEIF (idir == 3) THEN
119 IF (stabs == 0) THEN
120 fx = fsav(34,iad)
121 fy = fsav(35,iad)
122 fz = fsav(36,iad)
123 ELSE
124 fx = fbsav6(10,1,isect)+fbsav6(10,2,isect)
125 . + fbsav6(10,3,isect)+fbsav6(10,4,isect)
126 . + fbsav6(10,5,isect)+fbsav6(10,6,isect)
127 fy = fbsav6(11,1,isect)+fbsav6(11,2,isect)
128 . + fbsav6(11,3,isect)+fbsav6(11,4,isect)
129 . + fbsav6(11,5,isect)+fbsav6(11,6,isect)
130 fz = fbsav6(12,1,isect)+fbsav6(12,2,isect)
131 . + fbsav6(12,3,isect)+fbsav6(12,4,isect)
132 . + fbsav6(12,5,isect)+fbsav6(12,6,isect)
133 ENDIF
134 ELSEIF (idir == 4) THEN
135 IF (stabs == 0) THEN
136 fx = fsav(31,iad)
137 fy = fsav(32,iad)
138 fz = fsav(33,iad)
139 ELSE
140 fx = fbsav6(7,1,isect)+fbsav6(7,2,isect)
141 . + fbsav6(7,3,isect)+fbsav6(7,4,isect)
142 . + fbsav6(7,5,isect)+fbsav6(7,6,isect)
143 fy = fbsav6(8,1,isect)+fbsav6(8,2,isect)
144 . + fbsav6(8,3,isect)+fbsav6(8,4,isect)
145 . + fbsav6(8,5,isect)+fbsav6(8,6,isect)
146 fz = fbsav6(9,1,isect)+fbsav6(9,2,isect)
147 . + fbsav6(9,3,isect)+fbsav6(9,4,isect)
148 . + fbsav6(9,5,isect)+fbsav6(9,6,isect)
149 ENDIF
150 ELSEIF (idir == 5) THEN
151 IF (stabs == 0) THEN
152 ff = fsav(1,iad) + fsav(4,iad)
153 ELSE
154 ff = fbsav6(1,1,isect)+fbsav6(1,2,isect)
155 . + fbsav6(1,3,isect)+fbsav6(1,4,isect)
156 . + fbsav6(1,5,isect)+fbsav6(1,6,isect)
157 . + fbsav6(4,1,isect)+fbsav6(4,2,isect)
158 . + fbsav6(4,3,isect)+fbsav6(4,4,isect)
159 . + fbsav6(4,5,isect)+fbsav6(4,6,isect)
160 ENDIF
161 ELSEIF (idir == 6) THEN
162 IF (stabs == 0) then
163 ff = fsav(2,iad) + fsav(5,iad)
164 ELSE ! parith/on
165 ff = fbsav6(2,1,isect)+fbsav6(2,2,isect)
166 . + fbsav6(2,3,isect)+fbsav6(2,4,isect)
167 . + fbsav6(2,5,isect)+fbsav6(2,6,isect)
168 . + fbsav6(5,1,isect)+fbsav6(5,2,isect)
169 . + fbsav6(5,3,isect)+fbsav6(5,4,isect)
170 . + fbsav6(5,5,isect)+fbsav6(5,6,isect)
171 ENDIF
172 ELSEIF (idir == 7) THEN
173 IF (stabs == 0) THEN
174 ff = fsav(3,iad) + fsav(6,iad)
175 ELSE
176 ff = fbsav6(3,1,isect)+fbsav6(3,2,isect)
177 . + fbsav6(3,3,isect)+fbsav6(3,4,isect)
178 . + fbsav6(3,5,isect)+fbsav6(3,6,isect)
179 . + fbsav6(6,1,isect)+fbsav6(6,2,isect)
180 . + fbsav6(6,3,isect)+fbsav6(6,4,isect)
181 . + fbsav6(6,5,isect)+fbsav6(6,6,isect)
182 ENDIF
183 ELSEIF (idir == 8) THEN
184 IF (stabs == 0) then
185 ff = fsav(31,iad)
186 ELSE
187 ff = fbsav6(7,1,isect)+fbsav6(7,2,isect)
188 . + fbsav6(7,3,isect)+fbsav6(7,4,isect)
189 . + fbsav6(7,5,isect)+fbsav6(7,6,isect)
190 ENDIF
191 ELSEIF (idir == 9) THEN
192 IF (stabs == 0) then
193 ff = fsav(32,iad)
194 ELSE
195 ff = fbsav6(8,1,isect)+fbsav6(8,2,isect)
196 . + fbsav6(8,3,isect)+fbsav6(8,4,isect)
197 . + fbsav6(8,5,isect)+fbsav6(8,6,isect)
198 ENDIF
199 ELSEIF (idir == 10) THEN
200 IF (stabs == 0) THEN
201 ff = fsav(33,iad)
202 ELSE
203 ff = fbsav6(9,1,isect)+fbsav6(9,2,isect)
204 . + fbsav6(9,3,isect)+fbsav6(9,4,isect)
205 . + fbsav6(9,5,isect)+fbsav6(9,6,isect)
206 ENDIF
207 ENDIF
208
209 IF (idir < 5) ff = sqrt(fx*fx + fy*fy + fz*fz)
210
211 IF (ff < fmin) THEN
212 icrit = 1
213 iflag = 1
214 ELSE IF (ff > fmax) THEN
215 icrit = 1
216 iflag = 2
217 END IF
218
219
220 IF (sensor%TCRIT + tmin > tt) THEN
221 IF (icrit == 0) THEN
222 sensor%TCRIT = infinity
223 ELSE IF (sensor%TCRIT == infinity) THEN
224 sensor%TCRIT = tt
225 END IF
226 END IF
227 IF (sensor%TCRIT < infinity) tstart = sensor%TCRIT + tmin + tdelay
228 IF (tstart <= tt) THEN
229 sensor%STATUS = 1
230 sensor%TSTART = tstart
231 END IF
232
233 IF (sensor%STATUS == 1 .and. ispmd == 0) THEN
234#include "lockon.inc"
235 WRITE (istdo,1100) sensor%SENS_ID,sensor%TSTART
236 WRITE (iout ,1100) sensor%SENS_ID,sensor%TSTART
237 IF (iflag == 1) THEN
238 WRITE (iout ,1300) fmin,ff
239 ELSE IF (iflag == 2) THEN
240 WRITE (iout ,1400) fmax,ff
241 END IF
242#include "lockoff.inc"
243 ENDIF
244
2451100 FORMAT(' SENSOR (SECTION) NUMBER ',i10,' ,ACTIVATED AT TIME ',1pe12.5)
2461300 FORMAT(' TARGET MIN FORCE = ',1pe12.5,/
247 . ' CURRENT FORCE AFTER TMIN and TDELAY = ',1pe12.5)
2481400 FORMAT(' TARGET MAX FORCE = ',1pe12.5,/
249 . ' CURRENT FORCE AFTER TMIN and TDELAY = ',1pe12.5)
250
251 RETURN