33
34
35
36 USE sensor_mod
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "com01_c.inc"
45#include "com04_c.inc"
46#include "com08_c.inc"
47#include "units_c.inc"
48#include "comlock.inc"
49#include "task_c.inc"
50
51
52
53 INTEGER :: DIMFB,STABS
54 INTEGER ,DIMENSION(STABS) :: TABS
55 my_real,
DIMENSION(3,NUMNOD) :: x
57 TYPE (SENSOR_STR_) ,INTENT(INOUT) ,TARGET :: SENSOR
58 DOUBLE PRECISION ,DIMENSION(12,6,DIMFB) ,INTENT(IN) :: FBSAV6
59
60
61
62 INTEGER :: N1,N2,ICRIT,SECT_ID,INT_ID,SUB_ID,RWAL_ID,RBOD_ID,
63 . IN,ISECT,INTER,IRWAL,IRBOD
64 my_real :: dx,dy,dz,dd,fx,fy,fz,work,wmax,tmin,tdelay,
65 . infinity
66 parameter(infinity = 1.0e20)
67
68 IF (sensor%STATUS == 1) RETURN
69
70 tmin = sensor%TMIN
71 tdelay = sensor%TDELAY
72
73 n1 = sensor%IPARAM(1)
74 n2 = sensor%IPARAM(2)
75 sect_id = sensor%IPARAM(3)
76 int_id = sensor%IPARAM(4)
77 sub_id = sensor%IPARAM(5)
78 rwal_id = sensor%IPARAM(6)
79 rbod_id = sensor%IPARAM(7)
80
81 wmax = sensor%RPARAM(1)
82 fx = zero
83 fy = zero
84 fz = zero
85 icrit = 0
86
87 IF (nspmd == 1) THEN
88 xsens(1) = x(1,n1)
89 xsens(2) = x(2,n1)
90 xsens(3) = x(3,n1)
91 IF (n2 > 0) THEN
92 xsens(4) = x(1,n2)
93 xsens(5) = x(2,n2)
94 xsens(6) = x(3,n2)
95 ELSE
96 xsens(4) = zero
97 xsens(5) = zero
98 xsens(6) = zero
99 ENDIF
100 IF (tt == zero) THEN
101 xsens(7) = xsens(1)
102 xsens(8) = xsens(2)
103 xsens(9) = xsens(3)
104 xsens(10) = xsens(4)
105 xsens(11) = xsens(5)
106 xsens(12) = xsens(6)
107 ENDIF
108 ENDIF
109
110 dx = (xsens(1) - xsens(7)) - (xsens(4) - xsens(10))
111 dy = (xsens(2) - xsens(8)) - (xsens(5) - xsens(11))
112 dz = (xsens(3) - xsens(9)) - (xsens(6) - xsens(12))
113
114 xsens(7) = xsens(1)
115 xsens(8) = xsens(2)
116 xsens(9) = xsens(3)
117 xsens(10) = xsens(4)
118 xsens(11) = xsens(5)
119 xsens(12) = xsens(6)
120
121
122
123
124 in = sect_id
125 IF (in > 0) THEN
126 isect = tabs(in+1) - tabs(in)
127 fx = fx + fbsav6(10,1,isect) + fbsav6(10,2,isect)
128 . + fbsav6(10,3,isect) + fbsav6(10,4,isect)
129 . + fbsav6(10,5,isect) + fbsav6(10,6,isect)
130 fy = fy + fbsav6(11,1,isect) + fbsav6(11,2,isect)
131 . + fbsav6(11,3,isect) + fbsav6(11,4,isect)
132 . + fbsav6(11,5,isect) + fbsav6(11,6,isect)
133 fz = fz + fbsav6(12,1,isect) + fbsav6(12,2,isect)
134 . + fbsav6(12,3,isect) + fbsav6(12,4,isect)
135 . + fbsav6(12,5,isect) + fbsav6(12,6,isect)
136 sensor%VAR(1) = sensor%VAR(1) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
137 ENDIF
138
139
140
141 in = int_id
142 inter = in
143 IF (in > ninter) inter = sub_id
144 IF (inter > 0) THEN
145 inter = tabs(nsect+in+1) - tabs(nsect+in)
146 fx = fx + fbsav6(1,1,inter) + fbsav6(1,2,inter)
147 . + fbsav6(1,3,inter) + fbsav6(1,4,inter)
148 . + fbsav6(1,5,inter) + fbsav6(1,6,inter)
149 fy = fy + fbsav6(2,1,inter) + fbsav6(2,2,inter)
150 . + fbsav6(2,3,inter) + fbsav6(2,4,inter)
151 . + fbsav6(2,5,inter) + fbsav6(2,6,inter)
152 fz = fz + fbsav6(3,1,inter) + fbsav6(3,2,inter)
153 . + fbsav6(3,3,inter) + fbsav6(3,4,inter)
154 . + fbsav6(3,5,inter) + fbsav6(3,6,inter)
155 sensor%VAR(2) = sensor%VAR(2) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
156 ENDIF
157
158
159
160 in = rwal_id
161 IF (in > 0) THEN
162 irwal = tabs(in+nsect+ninter+nintsub+1)
163 . - tabs(in+nsect+ninter+nintsub)
164 fx = fx + fbsav6(1,1,irwal) + fbsav6(1,2,irwal)
165 . + fbsav6(1,3,irwal) + fbsav6(1,4,irwal)
166 . + fbsav6(1,5,irwal) + fbsav6(1,6,irwal)
167 fy = fy + fbsav6(2,1,irwal) + fbsav6(2,2,irwal)
168 . + fbsav6(2,3,irwal) + fbsav6(2,4,irwal)
169 . + fbsav6(2,5,irwal) + fbsav6(2,6,irwal)
170 fz = fz + fbsav6(3,1,irwal) + fbsav6(3,2,irwal)
171 . + fbsav6(3,3,irwal) + fbsav6(3,4,irwal)
172 . + fbsav6(3,5,irwal) + fbsav6(3,6,irwal)
173 sensor%VAR(3) = sensor%VAR(3) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
174 ENDIF
175
176
177
178 in = rbod_id
179 IF (in > 0) THEN
180 irbod = tabs(in+nsect+ninter+nintsub+nrwall+1)
181 . - tabs(in+nsect+ninter+nintsub+nrwall)
182 fx = fx + fbsav6(1,1,irbod) + fbsav6(1,2,irbod)
183 . + fbsav6(1,3,irbod) + fbsav6(1,4,irbod)
184 . + fbsav6(1,5,irbod) + fbsav6(1,6,irbod)
185 fy = fy + fbsav6(2,1,irbod) + fbsav6(2,2,irbod)
186 . + fbsav6(2,3,irbod) + fbsav6(2,4,irbod)
187 . + fbsav6(2,5,irbod) + fbsav6(2,6,irbod)
188 fz = fz + fbsav6(3,1,irbod) + fbsav6(3,2,irbod)
189 . + fbsav6(3,3,irbod) + fbsav6(3,4,irbod)
190 . + fbsav6(3,5,irbod) + fbsav6(3,6,irbod)
191 sensor%VAR(4) = sensor%VAR(4) + abs(fx*dx) + abs(fy*dy) + abs(fz*dz)
192 ENDIF
193
194 work = sensor%VAR(1) + sensor%VAR(2) + sensor%VAR(3) + sensor%VAR(4)
195 IF (work > wmax) icrit = 1
196
197
198
199 IF (sensor%TCRIT + tmin > tt) THEN
200 IF (icrit == 0) THEN
201 sensor%TCRIT = infinity
202 ELSE IF (sensor%TCRIT == infinity) THEN
203 sensor%TCRIT =
min(sensor%TCRIT, tt)
204 END IF
205 END IF
206 IF (sensor%TSTART == infinity .and. sensor%TCRIT < infinity) THEN
207 sensor%TSTART = sensor%TCRIT + tmin + tdelay
208 END IF
209 IF (sensor%TSTART <= tt) THEN
210 sensor%STATUS = 1
211 END IF
212
213 IF (sensor%STATUS == 1 .and. ispmd == 0) THEN
214#include "lockon.inc"
215 WRITE (istdo,1100) sensor%SENS_ID,sensor%TSTART
216 WRITE (iout ,1100) sensor%SENS_ID,sensor%TSTART
217 WRITE (iout ,1200) wmax,work
218#include "lockoff.inc"
219 ENDIF
220
2211100 FORMAT(' SENSOR WORK NUMBER ',i10,' ,ACTIVATED AT TIME ',1pe12.5)
2221200 FORMAT(' TARGET WORK = ',1pe12.5,/
223 . ' CURRENT WORK AFTER TMIN AND TDELAY = ',1pe12.5)
224
225 RETURN