54 . XSENS ,IPARI ,PARTSAV2 ,GAUGE ,FSAV ,
55 . X ,V ,A ,ACC ,NPRW ,
56 . SUBSET ,IGRSURF ,IGRNOD ,PYTHON)
68#include "implicit_f.inc"
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) ::
91 TYPE(
group_) ,
DIMENSION(NGRNOD) ,
INTENT(IN) :: IGRNOD
92 TYPE (SENSORS_) ,
INTENT(INOUT) :: SENSORS
93 TYPE(python_),
INTENT(INOUT) :: PYTHON
97 INTEGER TYP,ISENS,SENS_ID,SIZE,STABS,SFSAV
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 ::
109 any_python_sensor = .false.
110 stabs = sensors%STABSEN
111 sfsav = sensors%SFSAV
119 sensors%SENSOR_TAB(isens)%RESULTS(sensor_result_size) = zero
120 typ = sensors%SENSOR_TAB(isens)%TYPE
126 CALL sensor_time(sensors%SENSOR_TAB(isens) ,time ,timestep)
131 ELSEIF (typ == 1)
THEN
133 CALL sensor_acc(sensors%SENSOR_TAB(isens) ,acc)
138 ELSEIF (typ == 2)
THEN
140 CALL sensor_dist(sensors%SENSOR_TAB(isens) ,x ,xsens(1,isens))
145 ELSEIF (typ == 6)
THEN
147 . ipari ,sfsav ,stabs ,sensors%TABSENSOR ,sensors%FSAV)
155 . nprw ,sfsav ,stabs ,sensors%TABSENSOR ,sensors%FSAV)
167 ELSEIF (typ == 10)
THEN
174 ELSEIF (typ == 11)
THEN
176 CALL sensor_rbody(sensors%SENSOR_TAB(isens),sfsav ,stabs ,sensors%TABSENSOR,sensors%FSAV)
182 ELSEIF (typ == 12)
THEN
185 . sfsav ,stabs ,sensors%TABSENSOR ,fsav ,sensors%FSAV )
190 ELSEIF (typ == 13)
THEN
192 CALL sensor_work(sensors%SENSOR_TAB(isens),x ,xsens(1,isens) ,
193 . sfsav ,stabs ,sensors%TABSENSOR ,sensors%FSAV )
198 ELSEIF (typ == 14)
THEN
200 CALL sensor_energy(sensors%SENSOR_TAB(isens),isens ,subset,partsav2,
201 * sensors%NSENSOR,sensors%SENSOR_STRUCT )
206 ELSEIF (typ == 15)
THEN
213 ELSEIF (typ == 16)
THEN
215 CALL sensor_hic(sensors%SENSOR_TAB(isens) ,a ,acc )
220 ELSEIF (typ == 17)
THEN
222 CALL sensor_temp(sensors%SENSOR_TAB(isens) ,isens ,igrnod)
225 ELSEIF (typ == 19)
THEN
232 ELSEIF (typ == 29)
THEN
236 sens_id = sensors%SENSOR_TAB(isens)%SENS_ID
238 IF (userl_avail==1)
THEN
239 CALL eng_userlib_user_sens(typ,sens_id)
243 option=
'USER SENSOR 29'
244 size=len_trim(option)
245 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
250 ELSEIF (typ == 30)
THEN
254 sens_id = sensors%SENSOR_TAB(isens)%SENS_ID
256 IF (userl_avail==1)
THEN
257 CALL eng_userlib_user_sens(typ,sens_id)
261 option=
'USER SENSOR 30'
262 size=len_trim(option)
263 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
268 ELSEIF (typ == 31)
THEN
271 sens_id = sensors%SENSOR_TAB(isens)%SENS_ID
273 IF (userl_avail==1)
THEN
274 CALL eng_userlib_user_sens(typ,sens_id)
278 option=
'USER SENSOR 31'
279 size=len_trim(option)
280 CALL ancmsg(msgid=257,c1=option(1:size),anmode=aninfo)
284 ELSEIF (typ == sensor_type_python)
THEN
286 any_python_sensor = .true.
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))
300 typ = sensors%SENSOR_TAB(isens)%TYPE
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)
306 CALL python_update_sensors(types,uids,statuses,results,nsensor)
312 IF (any_python_sensor)
THEN
314 typ = sensors%SENSOR_TAB(isens)%TYPE
315 IF (typ == sensor_type_python)
THEN
316 CALL sensor_python(sensors%SENSOR_TAB(isens))
322 IF (stabs > 0) sensors%FSAV(1:12,1:6,1:sfsav) = zero
subroutine sensor_base(sensors, nsensor, time, timestep, xsens, ipari, partsav2, gauge, fsav, x, v, a, acc, nprw, subset, igrsurf, igrnod, python)
subroutine sensor_rbody(sensor, 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)