41#include "implicit_f.inc"
54 my_real,
DIMENSION(LLACCELM,*) :: accel
55 TYPE () ,
TARGET :: SENSOR
59 INTEGER I,J,,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
66 my_real ,
DIMENSION(:) ,
POINTER :: value_table
77 IF (sensor%STATUS == 1)
RETURN
80 tdelay = sensor%TDELAY
81 isensor_type = sensor%IPARAM(1)
82 iacc = sensor%IPARAM(2)
83 npoint = sensor%IPARAM(3)
84 idir = sensor%IPARAM(4)
86 hic_period = sensor%RPARAM(1)
87 hic_crit = sensor%RPARAM(2)
88 gravity = sensor%RPARAM(3)
89 time_unit = sensor%RPARAM(4)
93 value_table(1:npoint) => sensor%VAR(nvar+1:nvar+npoint)
95 IF (isensor_type == 1)
THEN
96 acc_x = accel(20,iacc)
97 acc_y = accel(21,iacc)
98 acc_z = accel(22,iacc)
106 acc = sqrt(acc_x**2 + acc_y**2 + acc_z**2)
107 ELSEIF (idir == 2)
THEN
109 ELSEIF (idir == 3)
THEN
118 time_prec = sensor%VAR(1)
119 acc_prec = sensor%VAR(2)
120 xindx = sensor%VAR(3)
121 hic_prec = sensor%VAR(4)
125 time_interval = hic_period / npoint
126 test_time = time_prec + time_interval
130 IF (time > test_time)
THEN
131 delta_t = time - time_prec
133 current_value = (acc_prec + accg*dt12) / delta_t
135 IF (indx == npoint)
THEN
138 value_table(i) = value_table(i+1)
143 value_table(indx) = current_value
153 integral = integral + value_table(j)*delta_t
155 increment = indx + 1 - i
156 period_tmp = delta_t * increment
157 hic_tmp = period_tmp * ((integral/period_tmp)**beta)
158 hic_tmp = hic_tmp * time_unit
159 IF (hic_tmp > hic)
THEN
161 opt_period = period_tmp
162 t1 =
max(time - opt_period, zero)
171 IF (hic >= hic_prec)
THEN
177 IF (sensor%TCRIT + tmin > tt)
THEN
179 sensor%TCRIT = infinity
180 ELSE IF (sensor%TCRIT == infinity)
THEN
181 sensor%TCRIT =
min(sensor%TCRIT, tt)
183 ELSE IF (sensor%TSTART == infinity)
THEN
184 sensor%TSTART = sensor%TCRIT + tmin + tdelay
187 IF (sensor%TSTART <= tt)
THEN
193 sensor%VAR(2) = sensor%VAR(2) + accg*dt12
196 IF (sensor%STATUS == 1 .and. ispmd == 0)
THEN
198 WRITE (istdo,1100 ) sensor%SENS_ID,sensor%TSTART
199 WRITE (iout ,1100 ) sensor%SENS_ID,sensor%TSTART
200 WRITE (iout ,1200) hic, hic_period
201 WRITE (iout ,1300) t1, t2
202#include "lockoff.inc"
2051100
FORMAT(
' SENSOR NUMBER ',i10,
' ,ACTIVATED AT TIME ',1pe12.5)
2061200
FORMAT(
' HIC = ',1pe12.5,
' ,HIC PERIOD = ',1pe12.5)
2071300
FORMAT(
' TIME T1 = ',1pe12.5,
' ,TIME T2 = ',1pe12.5)