39
40
41
45 USE sensor_mod
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "com01_c.inc"
56#include "com04_c.inc"
57#include "com06_c.inc"
58#include "com08_c.inc"
59#include "units_c.inc"
60#include "scr06_c.inc"
61#include "scr07_c.inc"
62#include "scr14_c.inc"
63#include "chara_c.inc"
64#include "task_c.inc"
65#include "rad2r_c.inc"
66
67
68
69 TYPE(H3D_DATABASE) :: H3D_DATA
70 TYPE (SENSORS_) ,INTENT(INOUT) :: SENSORS
71
72
73
74 INTEGER NKEY,I
75 parameter(nkey = 13)
76
77
78
79 INTEGER J,MANIM0, MREST0, MSTOP0, MFILR, MCYCLE, LK2, IKEY, WMCHECK0,
80 . MSG_R2R, R2R_MSTOP_LOC,ICTLSTOP0, MH3D0,SENS_ID
81 my_real tmpman(50), tman,tman_loc
82 CHARACTER FILNAM*100, KEY2*80, FMT*80, KEY0(NKEY)*5,REC*1
83 CHARACTER(LEN=NCHARLINE100)::CARTE
84 INTEGER :: LEN_TMP_NAME
85 CHARACTER(len=2148) :: TMP_NAME
86
87
88
89
90
91 SAVE manim0,mrest0,mstop0,mfilr,key0,ictlstop0,mh3d0
92 DATA mfilr/0/
93 DATA manim0/0/
94 DATA mrest0/0/
95 DATA mstop0/0/
96 DATA mcycle/0/
97 DATA tman/0.0/
98 DATA wmcheck0/0/
99 DATA ictlstop0/0/
100 DATA mh3d0/0/
101 DATA key0/'TIME ','CYCLE','GFILE','PATRA','RFILE','STOP ',
102 . 'KILL ','INFO ','ANIM ','OUTP ','LFLUS','CHKPT',
103 . 'H3D '/
104
105
106
107 mdess=0
108 mrest=0
109 manim=0
110 mstop=0
111 wmcheck = 0
112 h3d_data%MH3D=0
113 mh3d0=0
114
115 msg_r2r = 0
116 IF ((irad2r==1).AND.(ncycle<2)) r2r_mfilr = 0
117
118 IF(
ale%SUB%IALESUB/=0 .AND. tt+dt2<=t1s
RETURN
119
120
121
122
123 IF (sensors%ANIM_ID > 0)THEN
124 IF (tt > sensors%SENSOR_TAB(sensors%ANIM_IDTHEN
125
126 sensors%ANIM_ID = -sensors%ANIM_ID
127 tanimsens = tt + sensors%ANIM_DT
128 manim=4
129 mdess=mdess+manim
130 ENDIF
131 ELSEIF (sensors%ANIM_ID < 0) THEN
132 IF (tt < sensors%SENSOR_TAB(-sensors%ANIM_ID)%TSTART) THEN
133
134 sensors%ANIM_ID = -sensors%ANIM_ID
135 ELSEIF (tt > tanimsens) THEN
136
137 tanimsens = tanimsens + sensors%ANIM_DT
138 manim=4
139 mdess=mdess+manim
140 RETURN
141 ENDIF
142 ENDIF
143
144 IF (sensors%NANIM > 0) THEN
145 DO i=1,sensors%NANIM
146 sens_id = sensors%ANIM(i)
147 IF (sensors%ANIM(i) > 0) THEN
148 IF (tt > sensors%SENSOR_TAB(sens_id)%TSTART) THEN
149 sensors%ANIM(i) = -sens_id
150 manim=4
151 mdess=mdess+manim
152 ENDIF
153 ELSEIF (sens_id < 0) THEN
154 IF (tt < sensors%SENSOR_TAB(-sens_id)%TSTART) THEN
155 sensors%ANIM(i) = -sens_id
156 ENDIF
157 ENDIF
158 ENDDO
159 ENDIF
160
161 IF(h3d_data%N_SENS_H3D>0)THEN
162 DO i=1,h3d_data%N_SENS_H3D
163 IF(h3d_data%LSENS_H3D(i)>0)THEN
164 IF (tt > sensors%SENSOR_TAB(h3d_data%LSENS_H3D(i))%TSTARTTHEN
165
166 h3d_data%LSENS_H3D(i)=-h3d_data%LSENS_H3D(i)
167 h3d_data%MH3D=1
168 ENDIF
169 ELSEIF (h3d_data%LSENS_H3D(i)<0) THEN
170 IF (tt < sensors%SENSOR_TAB(-h3d_data%LSENS_H3D(i))%TSTART) THEN
171
172 h3d_data%LSENS_H3D(i)=-h3d_data%LSENS_H3D(i)
173 ENDIF
174 ENDIF
175 ENDDO
176 ENDIF
177
178
179
180
181 IF((ncycle/ncinp)*ncinp==ncycle)THEN
182 IF(ispmd==0)THEN
183 filnam=rootnam(1:rootlen)//'_'//chrun//'.ctl'
186 OPEN(unit=iusc3,file=tmp_name(1:len_tmp_name),
187 . status='OLD',err=999)
188 READ(iusc3,'(A)',err=990,END=990)carte
189 IF(carte(1:1)/='/')GOTO 990
190 mrest=0
191 manim=0
192 mstop=0
193 mrest0=0
194 manim0=0
195 mstop0=0
196 tman=0.
197 mcycle=0
198 ictlstop=0
199 ictlstop0=0
200 mh3d0 = 0
201
202 5
CALL redkey2(key2,lk2,key0,nkey,carte,ikey)
203 GOTO (10,20,30,40,50,60,70,80,90,95,96,97,98)ikey
204 GOTO 100
205
206 10 IF(lk2>1.AND.lk2<10)THEN
207 WRITE(fmt,'(A,I1,A)')'(E',lk2,'.0)'
208 ELSEIF(lk2<100)THEN
209 WRITE(fmt,'(A,I2,A)')'(E',lk2,'.0)'
210 ELSE
211 GOTO 100
212 ENDIF
213 READ(key2,fmt,err=990,END=990)tman
214 GOTO 100
215
216 20 IF(lk2>1.AND.lk2<10)THEN
217 WRITE(fmt,'(A,I1,A)')'(I',lk2,')'
218 ELSEIF(lk2<100)THEN
219 WRITE(fmt,'(A,I2,A)')'(I',lk2,')'
220 ELSE
221 GOTO 100
222 ENDIF
223 READ(key2,fmt,err=990,END=990)mcycle
224
225 IF (irad2r==1) THEN
226 msg_r2r = 1
227 mcycle = 0
228 ENDIF
229 GOTO 100
230
231 30 manim0=manim0+1
232 GOTO 100
233
234 40 manim0=manim0+2
235 GOTO 100
236
237 50 mrest0=1
238 GOTO 100
239
24060 mstop0=1
241 mrest0=1
242 ictlstop0 = 1
243 GOTO 100
244
245 70 mstop0=1
246 ictlstop0 = 1
247 GOTO 100
248
249 80 GOTO 100
250
251 90 manim0=manim0+4
252 GOTO 100
253
254 95 manim0=manim0+8
255 GOTO 100
256
257 96 backspace(iout)
258 READ(iout,'(A)')rec
259 GOTO 100
260 97 wmcheck0 = 1
261 GOTO 100
262
263 98 mh3d0=1
264 GOTO 100
265 100 CONTINUE
266 READ(iusc3,'(A)',err=400,END=400)carte
267 GOTO 5
268
269 400 mdess=1
270 rewind iusc3
271
272 WRITE (iusc3,'(A)',err=990) ' RUN CONTROL FILE'
273 WRITE (iusc3,'(A,/)',err=990) ' ----------------'
274 IF(tman==0.0.AND.mcycle==0)THEN
275 IF (msg_r2r==1) THEN
276 WRITE (iusc3,'(A)',err=990)
277 . ' MULTIDOMAINS -> /CYCLE NOT ALLOWED'
278 ENDIF
279 WRITE(carte,'(A)')' AT CURRENT CYCLE'
280 ELSEIF(tman==0.0)THEN
281 WRITE(carte,'(A,I10)')' AT CYCLE',mcycle
282 ELSEIF(mcycle==0)THEN
283 WRITE(carte,'(A,G14.7)')' AT TIME ',tman
284 ELSE
285 WRITE(carte,'(A,G14.7,A,I10)')' IF TIME >=',tman,
286 . ' AND IF CYCLE >=',mcycle
287 ENDIF
288 IF(manim0==1 .OR.manim0== 3.OR.
289 . manim0==5 .OR.manim0== 7.OR.
290 . manim0==9 .OR.manim0==11.OR.
291 . manim0==13.OR.manim0==15)
292 . WRITE(iusc3,'(/A,A)',err=990)' WRITE NEXT PLOT FILE',carte
293 IF(manim0== 2.OR.manim0== 3.OR.
294 . manim0== 6.OR.manim0== 7.OR.
295 . manim0==10.OR.manim0==11.OR.
296 . manim0==14.OR.manim0==15)
297 . WRITE(iusc3,'(A,A)',err=990)' WRITE NEXT PATRAN FILES',carte
298 IF(manim0== 4.OR.manim0== 5.OR.
299 . manim0== 6.OR.manim0== 7.OR.
300 . manim0==12.OR.manim0==13.OR.
301 . manim0==14.OR.manim0==15)
302 . WRITE(iusc3,'(A,A)',err=990)' WRITE NEXT ANIMATION FILES',
303 . carte
304 IF(manim0== 8.OR.manim0== 9.OR.
305 . manim0==10.OR.manim0==11.OR.
306 . manim0==12.OR.manim0==13.OR.
307 . manim0==14.OR.manim0==15)
308 . WRITE(iusc3,'(A,A)',err=990)' WRITE NEXT OUTPUT FILES',
309 . carte
310 IF(mrest0==1)
311 . WRITE(iusc3,'(A,A)',err=990)' WRITE NEXT RESTART FILE',carte
312 IF(mstop0==1)
313 . WRITE(iusc3,'(A,A)',err=990)' RUN STOP',carte
314 IF(mh3d0 == 1)
315 . WRITE(iusc3,'(A,A)',err=990)' UPDATE H3D FILE', carte
316 mfilr=1
317 IF (irad2r==1) r2r_mfilr=1
318 GOTO 999
319 990 CONTINUE
320 CLOSE (iusc3)
321 999 CONTINUE
322 ENDIF
323
324 ENDIF
325
326
327
328
329
330 IF (irad2r==1) THEN
331 IF (ispmd==0) THEN
332
333 mstop = r2r_mstop
334 r2r_mstop = mstop0
335 mstop0 = mstop
336 IF (r2r_mfilr == 1) THEN
337
338 tman_r2r = tman
339 r2r_ctr(1) = mrest0
340 r2r_ctr(2) = manim0
341 r2r_ctr(3) = wmcheck0
342 ELSEIF (r2r_mfilr == 2) THEN
343
344 mfilr = 1
345 r2r_mfilr = 0
346 tman = tman_r2r
347 manim0 = r2r_ctr(2)
348 wmcheck0= r2r_ctr(3)
349 ENDIF
350 ENDIF
351 IF(nspmd > 1)
CALL spmd_ibcast(mfilr,mfilr,1,1,0,2)
352 ENDIF
353
354
355
356
357 IF((sensors%ANIM_ID /=0 .OR. sensors%NANIM /=0 .OR. h3d_data%N_SENS_H3D > 0) .OR.
358 . ((ncycle/ncinp)*ncinp==ncycle) .OR. (irad2r==1 .AND. mfilr==1)) THEN
359 IF (ispmd==0) THEN
360 tmpman(1) = mdess
361 tmpman(2) = mrest0
362 tmpman(3) = mrest
363 tmpman(4) = mstop0
364 tmpman(5) = mstop
365 tmpman(6) = manim0
366 tmpman(7) = manim
367 tmpman(8) = mcycle
368 tmpman(9) = mfilr
369 tmpman(10)= tman
370 tmpman(11)= wmcheck0
371 tmpman(12) = ictlstop0
372 tmpman(13) = mh3d0
373 tmpman(14) = h3d_data%MH3D
374 ENDIF
375 IF(nspmd > 1)
CALL spmd_rbcast(tmpman,tmpman,1,14,0,2)
376 IF (ispmd/=0)THEN
377 mdess = nint(tmpman(1))
378 mrest0 = nint(tmpman(2))
379 mrest = nint(tmpman(3))
380 mstop0 = nint(tmpman(4))
381 mstop = nint(tmpman(5))
382 manim0 = nint(tmpman(6))
383 manim = nint(tmpman(7))
384 mcycle = nint(tmpman(8))
385 mfilr = nint(tmpman(9))
386 tman = tmpman(10)
387 wmcheck0 = nint(tmpman(11))
388 ictlstop0 = nint(tmpman(12))
389 mh3d0 = nint(tmpman(13))
390 h3d_data%MH3D = nint(tmpman(14))
391 ENDIF
392 ENDIF
393
394
395 IF(mfilr==1)THEN
396 IF(tt>=tman.AND.ncycle>=mcycle)THEN
397 mfilr=0
398 mrest=mrest0
399 manim=manim0
400 mstop=mstop0
401 mdess=mdess+manim
402 wmcheck = wmcheck0
403 ictlstop = ictlstop0
404 h3d_data%MH3D=mh3d0
405 ENDIF
406 ENDIF
407
408 RETURN
character(len=infile_char_len) infile_name
integer, parameter ncharline100
subroutine redkey2(key2, lk2, key0, nkey, carte, ikey)
subroutine spmd_ibcast(tabi, tabr, n1, n2, from, add)
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)