41#include "implicit_f.inc"
54 my_real,
DIMENSION(LLACCELM,*) :: accel
55 TYPE (SENSOR_STR_) ,
TARGET :: SENSOR
59 INTEGER I,J,IPOINT,IDIR,IACC,ISENSOR_TYPE,NPOINT,INDX,NVAR,ICRIT
61 my_real :: time_unit,time,xindx, integral,increment,time_interval
62 my_real :: hic_period,hic_crit,hic,hic_prec,hic_tmp
63 my_real :: time_prec,test_time,delta_t,beta
64 my_real :: acc_x,acc_y,acc_z,acc,accg,acc_prec,current_value,gravity
65 my_real :: period_tmp,opt_period,t1,t2,tmin,tdelay,infinity
66 my_real ,
DIMENSION(:) ,
POINTER :: value_table
69 parameter(infinity = 1.0e20)
78 IF (sensor%STATUS == 1)
RETURN
81 tdelay = sensor%TDELAY
82 isensor_type = sensor%IPARAM(1)
83 iacc = sensor%IPARAM(2)
84 npoint = sensor%IPARAM(3)
85 idir = sensor%IPARAM(4)
87 hic_period = sensor%RPARAM(1)
88 hic_crit = sensor%RPARAM(2)
89 gravity = sensor%RPARAM(3)
90 time_unit = sensor%RPARAM(4)
94 value_table(1:npoint) => sensor%VAR(nvar+1:nvar+npoint)
96 IF (isensor_type == 1)
THEN
97 acc_x = accel(20,iacc)
98 acc_y = accel(21,iacc)
99 acc_z = accel(22,iacc)
107 acc = sqrt(acc_x**2 + acc_y**2 + acc_z**2)
108 ELSEIF (idir == 2)
THEN
110 ELSEIF (idir == 3)
THEN
119 time_prec = sensor%VAR(1)
120 acc_prec = sensor%VAR(2)
121 xindx = sensor%VAR(3)
122 hic_prec = sensor%VAR(4)
126 time_interval = hic_period / npoint
127 test_time = time_prec + time_interval
131 IF (time > test_time)
THEN
132 delta_t = time - time_prec
134 current_value = (acc_prec + accg*dt12) / delta_t
136 IF (indx == npoint)
THEN
139 value_table(i) = value_table(i+1)
144 value_table(indx) = current_value
154 integral = integral + value_table(j)*delta_t
156 increment = indx + 1 - i
157 period_tmp = delta_t * increment
158 hic_tmp = period_tmp * ((integral/period_tmp)**beta)
159 hic_tmp = hic_tmp * time_unit
160 IF (hic_tmp > hic)
THEN
162 opt_period = period_tmp
163 t1 =
max(time - opt_period, zero)
172 IF (hic >= hic_prec)
THEN
178 IF (sensor%TCRIT + tmin
THEN
180 sensor%TCRIT = infinity
181 ELSE IF (sensor%TCRIT == infinity)
THEN
182 sensor%TCRIT =
min(sensor%TCRIT, tt)
184 ELSE IF (sensor%TSTART == infinity)
THEN
185 sensor%TSTART = sensor%TCRIT + tmin + tdelay
188 IF (sensor%TSTART <= tt
THEN
194 sensor%VAR(2) = sensor%VAR(2) + accg*dt12
197 IF (sensor%STATUS == 1 .and. ispmd == 0)
THEN
199 WRITE (istdo,1100 ) sensor%SENS_ID,sensor%TSTART
200 WRITE (iout ,1100 ) sensor%SENS_ID,sensor%TSTART
201 WRITE (iout ,1200) hic, hic_period
202 WRITE (iout ,1300) t1, t2
203#include "lockoff.inc"
2061100
FORMAT(
' SENSOR NUMBER ',i10,
' ,ACTIVATED AT TIME ',1pe12.5)
2071200
FORMAT(
' HIC = ',1pe12.5,
' ,HIC PERIOD = ',1pe12.5)
2081300
FORMAT(
' TIME T1 = ' 1pe12.5,
' ,TIME T2 = ',1pe12.5)