33
34
35
37 USE sensor_mod
38
39
40
41#include "implicit_f.inc"
42#include "comlock.inc"
43
44
45
46#include "units_c.inc"
47#include "com08_c.inc"
48#include "task_c.inc"
49
50
51
52 TYPE (SENSOR_STR_) :: SENSOR
53
54
55
56 INTEGER NPT,NPH,IADFX,IADFY,IADMX,IADMY,ICRIT
57 my_real ::
for,mom,dt,time,nijmax,nic,
alpha,beta,cfc,tmin,tdelay,
58 . wd,wa,wa2,wa3,a0,a1,a2,b1,b2,x0,x1,x2,y1,y2,yf,ym
59
60
61
62
63
64
65
66
67
68
69
70
71 IF (sensor%STATUS == 1) RETURN
72 IF (sensor%VAR(3) == zero) RETURN
73
74 tmin = sensor%TMIN
75 tdelay = sensor%TDELAY
76 nijmax = sensor%RPARAM(1)
77 alpha = sensor%RPARAM(6)
78 cfc = sensor%RPARAM(7)
79 time = tt
80 icrit = 0
81
82
83 dt = dt2
85 beta = half * dt * wd
86 wa = tan(beta)
87 wa2 = wa**2
88 wa3 = one + sqr2*wa + wa2
89 a0 = wa2 / wa3
90 a1 = a0 * two
91 a2 = a0
92 b1 = -two*(wa2 - one) / wa3
93 b2 = (-one + sqr2*wa - wa2) / wa3
94
95
97 mom = sensor%VAR(2)
98
99 npt = 5
100 nph = 3
101 iadfx = 5
102 iadfy = iadfx + npt
103 iadmx = iadfy + npt
104 iadmy = iadmx + npt
105
106
107
109 x1 = sensor%VAR(iadfx+5)
110 x2 = sensor%VAR(iadfx+4)
111 y1 = sensor%VAR(iadfy+5)
112 y2 = sensor%VAR(iadfy+4)
113
114 yf = a0*x0 + a1*x1 + a2*x2 + b1*y1 + b2*y2
115
116 sensor%VAR(iadfx+1) = sensor%VAR(iadfx+2)
117 sensor%VAR(iadfx+2) = sensor%VAR(iadfx+3)
118 sensor%VAR(iadfx+3) = sensor%VAR(iadfx+4)
119 sensor%VAR(iadfx+4) = sensor%VAR(iadfx+5)
120 sensor%VAR(iadfx+5) =
for
121
122 sensor%VAR(iadfy+1) = sensor%VAR(iadfy+2)
123 sensor%VAR(iadfy+2) = sensor%VAR(iadfy+3)
124 sensor%VAR(iadfy+3) = sensor%VAR(iadfy+4)
125 sensor%VAR(iadfy+4) = sensor%VAR(iadfy+5)
126 sensor%VAR(iadfy+5
127
128
129
130 x0 = sensor%VAR(iadfx+nph)
131 x1 = sensor%VAR(iadfx+nph+1)
132 x2 = sensor%VAR(iadfx+nph+2)
133 y1 = sensor%VAR(iadfy+nph+1)
134 y2 = sensor%VAR(iadfy+nph+2)
135
136 for = a0*x0 + a1*x1 + a2*x2 + b1*y1 + b2*y2
137
138
139 x0 = mom
140 x1 = sensor%VAR(iadmx+5)
141 x2 = sensor%VAR(iadmx+4)
142 y1 = sensor%VAR(iadmy+5)
143 y2 = sensor%VAR(iadmy+4)
144
145 ym = a0*x0 + a1*x1 + a2*x2 + b1*y1 + b2*y2
146
147 sensor%VAR(iadmx+1) = sensor%VAR(iadmx+2)
148 sensor%VAR(iadmx+2) = sensor%VAR(iadmx+3)
149 sensor%VAR(iadmx+3) = sensor%VAR(iadmx+4)
150 sensor%VAR(iadmx+4) = sensor%VAR(iadmx+5)
151 sensor%VAR(iadmx+5) = mom
152
153 sensor%VAR(iadmy+1) = sensor%VAR(iadmy+2)
154 sensor%VAR(iadmy+2) = sensor%VAR(iadmy+3)
155 sensor%VAR(iadmy+3) = sensor%VAR(iadmy+4)
156 sensor%VAR(iadmy+4) = sensor%VAR(iadmy+5)
157 sensor%VAR(iadmy+5) = ym
158
159
160
161 x0 = sensor%VAR(iadmx+nph)
162 x1 = sensor%VAR(iadmx+nph+1)
163 x2 = sensor%VAR(iadmx+nph+2)
164 y1 = sensor%VAR(iadmy+nph+1)
165 y2 = sensor%VAR(iadmy+nph+2)
166 mom = a0*x0 + a1*x1 + a2*x2 + b1*y1 + b2*y2
167
169 IF (nic >= nijmax) icrit = 1
170
171
172
173 IF (sensor%TCRIT + tmin > tt) THEN
174 IF (icrit == 0) THEN
175 sensor%TCRIT = infinity
176 ELSE IF (sensor%TCRIT == infinity) THEN
177 sensor%TCRIT =
min(sensor%TCRIT, tt)
178 END IF
179 ELSE IF (sensor%TSTART == infinity) THEN
180 sensor%TSTART = sensor%TCRIT + tmin + tdelay
181 END IF
182 IF (sensor%TSTART <= tt) THEN
183 sensor%STATUS = 1
184 END IF
185
186 IF (sensor%STATUS == 1 .and. ispmd == 0) THEN
187#include "lockon.inc"
188 WRITE (istdo,1100 ) sensor%SENS_ID,sensor%TSTART,nic
189 WRITE (iout ,1100 ) sensor%SENS_ID,sensor%TSTART,nic
190 WRITE (iout ,1200) nijmax,nic
191#include "lockoff.inc"
192 ENDIF
193
1941100 FORMAT(' SENSOR (RBODY) NUMBER ',i10,' ,ACTIVATED AT TIME ',1pe12.5)
1951200 FORMAT(' TARGET NIC VALUE = ',1pe12.5,/
196 . ' CURRENT NIC VALUE AFTER TMIN and TDELAY = ',1pe12.5)
197
198 RETURN
for(i8=*sizetab-1;i8 >=0;i8--)