40
41
42
46 USE sensor_mod
49 USE format_mod , ONLY : lfield
50
51
52
53#include "implicit_f.inc"
54
55
56
57#include "com04_c.inc"
58#include "units_c.inc"
59
60
61
62 INTEGER ,INTENT(IN) :: SENS_ID
63 INTEGER ,DIMENSION(3,*) ,INTENT(IN) :: LACCELM
64 CHARACTER (len=nchartitle) TITR
65 TYPE (SENSOR_STR_) ,INTENT(INOUT) :: SENSOR_PTR
66 TYPE (SUBMODEL_DATA) ,DIMENSION(NSUBMOD) :: LSUBMODEL
67 TYPE (UNIT_TYPE_) ,INTENT(IN) ::UNITAB
68
69
70
71 INTEGER :: K,SENS_TYPE,INP_FLAG,ACC_ID,IACC,IDIR,
72 . NPOINT,NPARIS,NPARRS,NVAR
73 my_real :: tdel,period,hic_crit,def_gravity,gravity,tmin,
74 . fac_grav,time_unit
75 CHARACTER(LEN=NCHARKEY) :: DIR
76 LOGICAL :: IS_AVAILABLE
77 DATA def_gravity/9.80665/
78
79
80
81 is_available = .false.
82
83 sens_type = 16
84 inp_flag = 1
85 npoint = 200
86
87
88 CALL hm_get_floatv(
'Tdelay' ,tdel ,is_available,lsubmodel,unitab)
89
90 CALL hm_get_intv (
'IACC1' ,acc_id ,is_available,lsubmodel)
92
93 CALL hm_get_floatv(
'HIC_Period' ,period ,is_available,lsubmodel,unitab)
94 CALL hm_get_floatv(
'HIC_Value' ,hic_crit ,is_available,lsubmodel,unitab)
95 CALL hm_get_floatv(
'HIC_Gravity' ,gravity ,is_available,lsubmodel,unitab)
96 CALL hm_get_floatv(
'Tmin' ,tmin ,is_available,lsubmodel,unitab)
97
98
99
100 iacc = 0
101 IF (acc_id > 0) THEN
102 DO k =1,naccelm
103 IF (acc_id == laccelm(2,k))THEN
104 iacc = k
105 EXIT
106 ENDIF
107 ENDDO
108 END IF
109 IF (iacc == 0) THEN
110 CALL ancmsg(msgid=45, msgtype=msgerror, anmode=aninfo_blind_2,
111 . i1=sens_id,
112 . c1=titr,
113 . i2=iacc)
114 END IF
115
116 idir = 0
117 DO k = 1,lfield
118 IF (dir(k:k) == 'R' .or .dir(k:k) == 'r') THEN
119 idir = 1
120 dir(1:1) = 'R'
121 ELSE IF (dir(k:k) == 'X' .or .dir(k:k) == 'x') THEN
122 idir = 2
123 dir(1:1) = 'X'
124 ELSE IF (dir(k:k) == 'Y' .or .dir(k:k) == 'y') THEN
125 idir = 3
126 dir(1:1) = 'Y'
127 ELSE IF (dir(k:k) == 'Z' .or .dir(k:k) == 'z') THEN
128 idir = 4
129 dir(1:1) = 'Z'
130 END IF
131 IF (idir > 0) THEN
132 dir(1:1) = dir(k:k)
133 EXIT
134 END IF
135 ENDDO
136 IF (idir == 0) THEN
137 dir(1:1) = 'R'
138 idir = 1
139 END IF
140
141 IF (gravity == zero) THEN
142 fac_grav = unitab%FAC_T_WORK**2 / unitab%FAC_L_WORK
143 gravity = def_gravity * fac_grav
144 END IF
145 IF (hic_crit == zero) hic_crit = infinity
146 IF (period == zero) THEN
147 period = 0.036
148 period = period / unitab%FAC_T_WORK
149 END IF
150
151 time_unit = unitab%FAC_T_WORK
152
153 sensor_ptr%TYPE = sens_type
154 sensor_ptr%SENS_ID = sens_id
155 sensor_ptr%STATUS = 0
156 sensor_ptr%TSTART = infinity
157 sensor_ptr%TCRIT = infinity
158 sensor_ptr%TMIN = tmin
159 sensor_ptr%TDELAY = tdel
160 sensor_ptr%VALUE = zero
161
162 nparis = 4
163 nparrs = 4
165
166 sensor_ptr%NPARI = nparis
167 sensor_ptr%NPARR = nparrs
168 sensor_ptr%NVAR =
nvar
169
170 ALLOCATE (sensor_ptr%IPARAM(nparis))
171 ALLOCATE (sensor_ptr%RPARAM(nparrs))
172 ALLOCATE (sensor_ptr%VAR(
nvar))
173 sensor_ptr%VAR(:) = zero
174
175 sensor_ptr%IPARAM(1) = inp_flag
176 sensor_ptr%IPARAM(2) = iacc
177 sensor_ptr%IPARAM(3) = npoint
178 sensor_ptr%IPARAM(4) = idir
179
180 sensor_ptr%RPARAM(1) = period
181 sensor_ptr%RPARAM(2) = hic_crit
182 sensor_ptr%RPARAM(3) = gravity
183 sensor_ptr%RPARAM(4) = time_unit
184
185 WRITE (iout, 1000) sens_id,tdel
186 WRITE (iout, 2000) acc_id,dir(1:1),tdel,period,hic_crit,tmin,gravity
187
188 1000 FORMAT(
189 . 5x,' SENSOR TYPE 16: HIC '/,
190 . 5x,' ------------------- '/,
191 . 5x,'SENSOR ID. . . . . . . . . . . . . . . . .=',i10/
192 . 5x,'TIME DELAY BEFORE ACTIVATION . . . . . . .=',e12.4)
193 2000 FORMAT(
194 . 5x,'ACCELEROMETER ID . . . . . . . . . . . . =',i10/
195 . 5x,'DIRECTION. . . . . . . . . . . . . . . . =',a10/
196 . 5x,'TIME DELAY BEFORE ACTIVATION . . . . . . =',e12.4/
197 . 5x,'HIC PERIOD . . . . . . . . . . . . . . . =',e12.4/,
198 . 5x,'HIC CRITERION. . . . . . . . . . . . . . =',e12.4/,
199 . 5x,'HIC DURATION TO ACTIVATE . . . . . . . . =',e12.4/,
200 . 5x,'GRAVITY VALUE. . . . . . . . . . . . . . =',e12.4//)
201
202 RETURN
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_get_string(name, sval, size, is_available)
integer, parameter ncharkey
integer, parameter ncharfield
integer function nvar(text)
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)