57
58
59
60 USE python_funct_mod
61 USE sensor_python_mod
63 USE sensor_mod
65
66
67
68#include "implicit_f.inc"
69#include "comlock.inc"
70
71
72
73#include "param_c.inc"
74#include "com04_c.inc"
75#include "userlib.inc"
76
77
78
79 INTEGER ,INTENT(IN) :: NSENSOR
80 INTEGER ,DIMENSION(NPARI,NINTER) ,INTENT(IN) :: IPARI
81 INTEGER ,DIMENSION(*) ,INTENT(IN) :: NPRW
82 my_real ,
DIMENSION(3,NUMNOD) ,
INTENT(IN) :: x,v,a
83 my_real ,
DIMENSION(12,NSENSOR) ,
INTENT(INOUT) :: xsens
84 my_real ,
DIMENSION(LLACCELM,*) ,
INTENT(IN) :: acc
85 my_real ,
DIMENSION(NTHVKI,*) ,
INTENT(IN) :: fsav
86 my_real ,
DIMENSION(LLGAUGE,*) ,
INTENT(IN) :: gauge
87 my_real ,
DIMENSION(2,*) ,
INTENT(IN) :: partsav2
88 my_real ,
INTENT(IN) :: time,timestep
89 TYPE (SUBSET_) ,DIMENSION(NSUBS) ,INTENT(IN) :: SUBSET
90 TYPE(SURF_) ,DIMENSION(NSURF) ,INTENT(IN) :: IGRSURF
91 TYPE(GROUP_) ,DIMENSION(NGRNOD) ,INTENT(IN) :: IGRNOD
92 TYPE (SENSORS_) ,INTENT(INOUT) :: SENSORS
93 TYPE(PYTHON_), INTENT(INOUT) :: PYTHON
94
95
96
97 INTEGER TYP,ISENS,SENS_ID,SIZE,STABS,SFSAV
98 CHARACTER(LEN=256) :: OPTION
99 LOGICAL :: ANY_PYTHON_SENSOR
100 INTEGER, DIMENSION(:), ALLOCATABLE :: UIDS
101 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: RESULTS
102 INTEGER, DIMENSION(:), ALLOCATABLE :: STATUSES
103 INTEGER, DIMENSION(:), ALLOCATABLE :: TYPES
104
105
106
107
108
109 any_python_sensor = .false.
110 stabs = sensors%STABSEN
111 sfsav = sensors%SFSAV
112
113
114
115
116
117
118 DO isens = 1,nsensor
119 sensors%SENSOR_TAB(isens)%RESULTS(sensor_result_size) = zero
120 typ = sensors%SENSOR_TAB(isens)%TYPE
121
122
123
124 IF (typ == 0) THEN
125
126 CALL sensor_time(sensors%SENSOR_TAB(isens) ,time ,timestep)
127
128
129
130
131 ELSEIF (typ == 1) THEN
132
133 CALL sensor_acc(sensors%SENSOR_TAB(isens) ,acc)
134
135
136
137
138 ELSEIF (typ == 2) THEN
139
140 CALL sensor_dist(sensors%SENSOR_TAB(isens) ,x ,xsens(1,isens))
141
142
143
144
145 ELSEIF (typ == 6)THEN
147 . ipari ,sfsav ,stabs ,sensors%TABSENSOR ,sensors%FSAV)
148
149
150
151
152 ELSEIF(typ == 7)THEN
153
155 . nprw ,sfsav ,stabs ,sensors%TABSENSOR ,sensors%FSAV)
156
157
158
159
160 ELSEIF(typ == 9)THEN
161
163
164
165
166
167 ELSEIF (typ == 10) THEN
168
170
171
172
173
174 ELSEIF (typ == 11) THEN
175
176 CALL sensor_rbody(sensors%SENSOR_TAB(isens),sfsav ,stabs ,sensors%TABSENSOR,sensors%FSAV)
177
178
179
180
181
182 ELSEIF (typ == 12) THEN
183
185 . sfsav ,stabs ,sensors%TABSENSOR ,fsav ,sensors%FSAV )
186
187
188
189
190 ELSEIF (typ == 13)THEN
191
192 CALL sensor_work(sensors%SENSOR_TAB(isens),x ,xsens(1,isens) ,
193 . sfsav ,stabs ,sensors%TABSENSOR ,sensors%FSAV )
194
195
196
197
198 ELSEIF (typ == 14) THEN
199
200 CALL sensor_energy(sensors%SENSOR_TAB(isens),isens ,subset,partsav2,
201 * sensors%NSENSOR,sensors%SENSOR_STRUCT )
202
203
204
205
206 ELSEIF (typ == 15) THEN
207
209
210
211
212
213 ELSEIF (typ == 16) THEN
214
215 CALL sensor_hic(sensors%SENSOR_TAB(isens) ,a ,acc )
216
217
218
219
220 ELSEIF (typ == 17) THEN
221
222 CALL sensor_temp(sensors%SENSOR_TAB(isens) ,isens ,igrnod)
223
224
225 ELSEIF (typ == 19) THEN
226
227
228
230
231
232 ELSEIF (typ == 29) THEN
233
234
235
236 sens_id = sensors%SENSOR_TAB(isens)%SENS_ID
237
238 IF (userl_avail==1) THEN
239 CALL eng_userlib_user_sens(typ,sens_id)
240 ELSE
241
242
243 option='USER SENSOR 29'
244 size=len_trim(option)
245 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
247
248 ENDIF
249
250 ELSEIF (typ == 30) THEN
251
252
253
254 sens_id = sensors%SENSOR_TAB(isens)%SENS_ID
255
256 IF (userl_avail==1) THEN
257 CALL eng_userlib_user_sens(typ,sens_id)
258 ELSE
259
260
261 option='USER SENSOR 30'
262 size=len_trim(option)
263 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
265
266 ENDIF
267
268 ELSEIF (typ == 31) THEN
269
270
271 sens_id = sensors%SENSOR_TAB(isens)%SENS_ID
272
273 IF (userl_avail==1) THEN
274 CALL eng_userlib_user_sens(typ,sens_id)
275 ELSE
276
277
278 option='USER SENSOR 31'
279 size=len_trim(option)
280 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
282
283 ENDIF
284 ELSEIF (typ == sensor_type_python) THEN
285
286 any_python_sensor = .true.
287 ENDIF
288
289 END DO
290
291
292
293
294 IF(python%NB_FUNCTS > 0) THEN
295 ALLOCATE(uids(nsensor))
296 ALLOCATE(results(sensor_result_size,nsensor))
297 ALLOCATE(statuses(nsensor))
298 ALLOCATE(types(nsensor))
299 DO isens = 1,nsensor
300 typ = sensors%SENSOR_TAB(isens)%TYPE
301 types(isens) = typ
302 uids(isens) = sensors%SENSOR_TAB(isens)%SENS_ID
303 statuses(isens) = sensors%SENSOR_TAB(isens)%STATUS
304 results(1:sensor_result_size,isens) = sensors%SENSOR_TAB(isens)%RESULTS(1:sensor_result_size)
305 END DO
306 CALL python_update_sensors(types,uids,statuses,results,nsensor)
307 DEALLOCATE(types)
308 DEALLOCATE(uids)
309 DEALLOCATE(results)
310 DEALLOCATE(statuses)
311 ENDIF
312 IF (any_python_sensor) THEN
313 DO isens = 1,nsensor
314 typ = sensors%SENSOR_TAB(isens)%TYPE
315 IF (typ == sensor_type_python) THEN
316 CALL sensor_python(sensors%SENSOR_TAB(isens))
317 ENDIF
318 END DO
319 ENDIF
320
321
322 IF (stabs > 0) sensors%FSAV(1:12,1:6,1:sfsav) = zero
323
324
325 RETURN
subroutine sensor_acc(sensor, acc)
subroutine sensor_dist(sensor, x, xsens)
subroutine sensor_dist_surf(sensor, x, igrsurf)
subroutine sensor_energy(sensor, isens, subset, partsav2, nsensor, sensor_struct)
subroutine sensor_gauge(sensor, gauge)
subroutine sensor_hic(sensor, accn, accel)
subroutine sensor_nic(sensor)
subroutine sensor_rbody(sensor, dimfb, stabs, tabs, fbsav6)
subroutine sensor_rwall(sensor, nprw, dimfb, stabs, tabs, fbsav6)
subroutine sensor_section(sensor, dimfb, stabs, tabs, fsav, fbsav6)
subroutine sensor_temp(sensor, isens, igrnod)
subroutine sensor_time(sensor, time, timestep)
subroutine sensor_vel(sensor, v)
subroutine sensor_work(sensor, x, xsens, dimfb, stabs, tabs, fbsav6)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)