32 * NSENSOR ,SENSOR_STRUCT)
48#include "implicit_f.inc"
61 INTEGER ,
INTENT(IN) :: NSENSOR
62 INTEGER ,
INTENT(IN) :: ISENS
63 my_real ,
INTENT(IN) :: partsav2(2,*)
64 TYPE (SUBSET_) ,
DIMENSION(NSUBS) ,
INTENT(IN) :: SUBSET
65 TYPE (SENSOR_STR_) ,
INTENT(INOUT) :: SENSOR
66 TYPE (SENSOR_TYPE),
DIMENSION(NSENSOR),
INTENT(INOUT) :: SENSOR_STRUCT
70 INTEGER :: J,IPART,ISUBS,NBR_GROUP,NP,ITSK,IFLAG,ICONST,
71 . ni,nk,icrit,icrit1,icrit2,iselect
72 my_real :: tmin,tdelay,tstart,iemin,tcrit,
73 . eint,ekin,iemax,kemin,kemax,ietol,ietime,ketol,ketime,
74 . avg_ei,avg_ek,alphai,alphak
87 IF (sensor%STATUS == 1)
RETURN
91 ipart = sensor%IPARAM(1)
92 isubs = sensor%IPARAM(2)
93 iconst = sensor%IPARAM(3)
94 iselect= sensor%IPARAM(4)
96 tdelay = sensor%TDELAY
99 tstart = sensor%TSTART
100 iemin = sensor%RPARAM(1)
101 iemax = sensor%RPARAM(2)
102 kemin = sensor%RPARAM(3)
103 kemax = sensor%RPARAM(4)
104 ietol = sensor%RPARAM(5)
105 ketol = sensor%RPARAM(6)
106 ietime = sensor%RPARAM(7)
107 ketime = sensor%RPARAM(8)
119 IF (iselect == 2)
THEN
121 ekin = sensor%VAR(10)
126 nbr_group = sensor_struct(isens)%NUM_GROUP_PART
128 sensor_struct(isens)%FBSAV6_SENS(1,1:6,1) =
129 . sensor_struct(isens)%FBSAV6_SENS(1,1:6,1) +
130 . sensor_struct(isens)%FBSAV6_SENS(1,1:6,itsk)
131 sensor_struct(isens)%FBSAV6_SENS(2,1:6,1) =
132 . sensor_struct(isens)%FBSAV6_SENS(2,1:6,1) +
133 . sensor_struct(isens)%FBSAV6_SENS(2,1:6,itsk)
137 sensor_struct(isens)%FBSAV6_SENS(1,1,1) =
138 . sensor_struct(isens)%FBSAV6_SENS(1,1,1) + sensor_struct(isens)%FBSAV6_SENS(1,j,1)
139 sensor_struct(isens)%FBSAV6_SENS(2,1,1) =
140 . sensor_struct(isens)%FBSAV6_SENS(2,1,1) + sensor_struct(isens)%FBSAV6_SENS(2,j,1)
142 eint = sensor_struct(isens)%FBSAV6_SENS(1,1,1)
143 ekin = sensor_struct(isens)%FBSAV6_SENS(2,1,1)
147 sensor_struct(isens)%FBSAV6_SENS(1,j,itsk) = zero
148 sensor_struct(isens)%FBSAV6_SENS(2,j,itsk) = zero
155 eint = partsav2(1,ipart)
156 ekin = partsav2(2,ipart)
157 ELSEIF (isubs > 0)
THEN
158 np = subset(isubs)%NTPART
160 ipart= subset(isubs)%TPART(j)
161 eint = eint + partsav2(1,ipart)
162 ekin = ekin + partsav2(2,ipart)
170 IF (eint < iemin)
THEN
173 ELSE IF (eint > iemax)
THEN
176 ELSE IF (ekin < kemin)
THEN
179 ELSE IF (ekin > kemax)
THEN
183 sensor%RESULTS(1) = eint
184 sensor%RESULTS(2) = ekin
186 IF (sensor%TCRIT + tmin > tt)
THEN
188 sensor%TCRIT = infinity
189 ELSE IF (sensor%TCRIT == infinity)
THEN
190 sensor%TCRIT =
min(sensor%TCRIT, tt)
192 ELSE IF (sensor%TSTART == infinity)
THEN
193 sensor%TSTART = sensor%TCRIT + tmin + tdelay
195 IF (sensor%TSTART <= tt)
THEN
199 IF (sensor%STATUS == 1 .and. ispmd == 0)
THEN
201 WRITE (istdo,1000 ) sensor%SENS_ID,sensor%TSTART
202 WRITE (iout ,1000 ) sensor%SENS_ID,sensor%TSTART
204 WRITE (iout ,1100) iemin,eint
205 ELSE IF (iflag == 2)
THEN
206 WRITE (iout ,1200) iemax,eint
207 ELSE IF (iflag == 3)
THEN
208 WRITE (iout ,1300) kemin,ekin
209 ELSE IF (iflag == 4)
THEN
210 WRITE (iout ,1400) kemax,ekin
212#include "lockoff.inc"
217 IF (iconst == 1)
THEN
219 ni = nint(ietime / dt2) + 1
220 nk = nint(ketime / dt2) + 1
221 sensor%VAR(1) = infinity
222 sensor%VAR(2) = infinity
223 sensor%VAR(3) = infinity
224 sensor%VAR(4) = infinity
225 sensor%VAR(7) =
max(zero ,
min(one ,two / ni))
226 sensor%VAR(8) =
max(zero ,
min(one ,two / nk))
229 IF (eint > zero .and. ietol > zero)
THEN
230 alphai = sensor%VAR(7)
231 avg_ei = alphai*eint + (one - alphai) * sensor%VAR(5)
232 sensor%VAR(5) = avg_ei
237 IF (eint > zero .and. eint < avg_ei + ietol .and. eint > avg_ei - ietol) icrit1 = 1
239 IF (sensor%VAR(1) > tt)
THEN
240 IF (icrit1 == 0)
THEN
241 sensor%VAR(1) = infinity
242 ELSE IF (sensor%VAR(1) == infinity)
THEN
243 sensor%VAR(1) = tt + ietime
245 ELSE IF (sensor%VAR(2) == infinity)
THEN
246 sensor%VAR(2) = sensor%VAR(1) + tdelay
248 IF (sensor%VAR(2) <= tt)
THEN
250 sensor%TSTART = sensor%VAR(2)
253 IF (sensor%VAR(2) <= tt .and. ispmd == 0)
THEN
255 WRITE (istdo,1000 ) sensor%SENS_ID,tt
256 WRITE (iout ,1000 ) sensor%SENS_ID,tt
257 WRITE (iout ,2100) eint,avg_ei
258#include "lockoff.inc"
264 IF (ekin > zero .and. ketol > zero)
THEN
265 alphak = sensor%VAR(8)
266 avg_ek = alphak*ekin + (one - alphak) * sensor%VAR(6)
267 sensor%VAR(6) = avg_ek
270 IF (ekin > zero .and. ekin < avg_ek + ketol .and. ekin > avg_ek - ketol)
THEN
274 IF (sensor%VAR(3) > tt)
THEN
275 IF (icrit2 == 0)
THEN
276 sensor%VAR(3) = infinity
277 ELSE IF (sensor%VAR(3) == infinity)
THEN
278 sensor%VAR(3) = tt + ketime
280 ELSE IF (sensor%VAR(4) == infinity)
THEN
281 sensor%VAR(4) = sensor%VAR(3) + tdelay
283 IF (sensor%VAR(4) <= tt)
THEN
285 sensor%TSTART = sensor%VAR(4)
288 IF (sensor%VAR(4) <= tt .and. ispmd == 0)
THEN
290 WRITE (istdo,1000 ) sensor%SENS_ID,tt
291 WRITE (iout ,1000 ) sensor%SENS_ID,tt
292 WRITE (iout ,2200) ekin,avg_ek
293#include "lockoff.inc"
2981000
FORMAT(
' ENERGY SENSOR NUMBER ',i10,
' ACTIVATED AT TIME ',1pe12.5)
2991100
FORMAT(
' TARGET MIN INTERNAL ENERGY = ',1pe12.5,/
300 .
' CURRENT INTERNAL ENERGY AFTER TMIN and TDELAY = ',1pe12.5)
3011200
FORMAT(
' TARGET MAX INTERNAL ENERGY = ',1pe12.5,/
302 .
' CURRENT INTERNAL ENERGY AFTER TMIN and TDELAY = ',1pe12.5)
3031300
FORMAT(
' TARGET MIN KINETIC ENERGY = ',1pe12.5,/
304 .
' CURRENT KINETIC ENERGY AFTER TMIN and TDELAY = ',1pe12.5)
3051400
FORMAT(
' TARGET MAX KINETIC ENERGY = ',1pe12.5,/
306 .
' CURRENT KINETIC ENERGY AFTER TMIN and TDELAY = ',1pe12.5)
3072100
FORMAT(
' CONSTANT INT ENERGY = ',1pe12.5,
', MEAN = ',1pe12.5)
3082200
FORMAT(
' CONSTANT KIN ENERGY = ',1pe12.5,
', MEAN = ',1pe12.5)