OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
manctr.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| manctr ../engine/source/input/manctr.F
25!||--- called by ------------------------------------------------------
26!|| resol ../engine/source/engine/resol.F
27!||--- calls -----------------------------------------------------
28!|| spmd_ibcast ../engine/source/mpi/generic/spmd_ibcast.F
29!|| spmd_rbcast ../engine/source/mpi/generic/spmd_rbcast.F
30!||--- uses -----------------------------------------------------
31!|| ale_mod ../common_source/modules/ale/ale_mod.F
32!|| anim_mod ../common_source/modules/output/anim_mod.F
33!|| h3d_mod ../engine/share/modules/h3d_mod.F
34!|| inoutfile_mod ../common_source/modules/inoutfile_mod.F
35!|| names_and_titles_mod ../common_source/modules/names_and_titles_mod.F
36!|| sensor_mod ../common_source/modules/sensor_mod.f90
37!||====================================================================
38 SUBROUTINE manctr(SENSORS ,H3D_DATA)
39C-----------------------------------------------
40C M o d u l e s
41C-----------------------------------------------
43 USE h3d_mod
45 USE sensor_mod
46 USE anim_mod
47 USE ale_mod
48C-----------------------------------------------
49C I m p l i c i t T y p e s
50C-----------------------------------------------
51#include "implicit_f.inc"
52C-----------------------------------------------
53C C o m m o n B l o c k s
54C-----------------------------------------------
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"
66C-----------------------------------------------
67C D u m m y A r g u m e n t s
68C-----------------------------------------------
69 TYPE(h3d_database) :: H3D_DATA
70 TYPE (SENSORS_) ,INTENT(INOUT) :: SENSORS
71C-----------------------------------------------
72C L o c a l P a r a m e t e r s
73C-----------------------------------------------
74 INTEGER NKEY,I
75 parameter(nkey = 13)
76C-----------------------------------------------
77C L o c a l V a r i a b l e s
78C-----------------------------------------------
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
86C-----------------------------------------------
87C E x t e r n a l F u n c t i o n s
88C-----------------------------------------------
89C REAL
90C-----------------------------------------------
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 '/
104C-----------------------------
105C INTERVENTION MANUELLE
106C-----------------------------
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
117C
118 IF(ale%SUB%IALESUB/=0 .AND. tt+dt2<=t1s+dt2s)RETURN
119C SOUS CYCLAGE ALE
120C-----------------------------
121C SENSOR
122C-----------------------------
123 IF (sensors%ANIM_ID > 0)THEN
124 IF (tt > sensors%SENSOR_TAB(sensors%ANIM_ID)%TSTART) THEN
125C ACTIVATION
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
133C DEACTIVATION
134 sensors%ANIM_ID = -sensors%ANIM_ID
135 ELSEIF (tt > tanimsens) THEN
136C ACTIF
137 tanimsens = tanimsens + sensors%ANIM_DT
138 manim=4
139 mdess=mdess+manim
140 RETURN
141 ENDIF
142 ENDIF
143c
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 ! ACTIVATION
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 ! DEACTIVATION
155 sensors%ANIM(i) = -sens_id
156 ENDIF
157 ENDIF
158 ENDDO
159 ENDIF
160c
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))%TSTART) THEN
165C ACTIVATION
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
171C DEACTIVATION
172 h3d_data%LSENS_H3D(i)=-h3d_data%LSENS_H3D(i)
173 ENDIF
174 ENDIF
175 ENDDO
176 ENDIF
177C-----------------------------
178C INTERVENTION MANUELLE
179C-----------------------------
180C
181 IF((ncycle/ncinp)*ncinp==ncycle)THEN
182 IF(ispmd==0)THEN
183 filnam=rootnam(1:rootlen)//'_'//chrun//'.ctl'
184 len_tmp_name = infile_name_len + len_trim(filnam)
185 tmp_name=infile_name(1:infile_name_len)//filnam(1:len_trim(filnam))
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
201C
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
205C TIME
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
215C CYCLE
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
224C MCYCLE DESATIVE EN MULTIDOMAINES
225 IF (IRAD2R==1) THEN
226 MSG_R2R = 1
227 MCYCLE = 0
228 ENDIF
229 GOTO 100
230C PLOT
231 30 MANIM0=MANIM0+1
232 GOTO 100
233C PATRAN
234 40 MANIM0=MANIM0+2
235 GOTO 100
236C RESTART
237 50 MREST0=1
238 GOTO 100
239C STOP
24060 MSTOP0=1
241 MREST0=1
242 ICTLSTOP0 = 1
243 GOTO 100
244C KILL
245 70 MSTOP0=1
246 ICTLSTOP0 = 1
247 GOTO 100
248C INFO
249 80 GOTO 100
250C ANIM PLOT
251 90 MANIM0=MANIM0+4
252 GOTO 100
253C OUTP PLOT
254 95 MANIM0=MANIM0+8
255 GOTO 100
256C L01 FLUSH
257 96 BACKSPACE(IOUT)
258 READ(IOUT,'(a)')REC
259 GOTO 100
260 97 WMCHECK0 = 1
261 GOTO 100
262C H3D PLOT
263 98 MH3D0=1
264 GOTO 100
265 100 CONTINUE
266 READ(IUSC3,'(a)',ERR=400,END=400)CARTE
267 GOTO 5
268C
269 400 MDESS=1
270 REWIND IUSC3
271C
272 WRITE (IUSC3,'(a)',ERR=990) ' run control file'
273 WRITE (IUSC3,'(a,/)',ERR=990) ' ----------------'
274.AND. IF(TMAN==0.0MCYCLE==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.OR..OR. IF(MANIM0==1 MANIM0== 3
289.OR..OR. . MANIM0==5 MANIM0== 7
290.OR..OR. . MANIM0==9 MANIM0==11
291.OR. . MANIM0==13MANIM0==15)
292 . WRITE(IUSC3,'(/a,a)',ERR=990)' WRITE next plot file',CARTE
293.OR..OR. IF(MANIM0== 2MANIM0== 3
294.OR..OR. . MANIM0== 6MANIM0== 7
295.OR..OR. . MANIM0==10MANIM0==11
296.OR. . MANIM0==14MANIM0==15)
297 . WRITE(IUSC3,'(a,a)',ERR=990)' WRITE next patran files',CARTE
298.OR..OR. IF(MANIM0== 4MANIM0== 5
299.OR..OR. . MANIM0== 6MANIM0== 7
300.OR..OR. . MANIM0==12MANIM0==13
301.OR. . MANIM0==14MANIM0==15)
302 . WRITE(IUSC3,'(a,a)',ERR=990)' WRITE next animation files',
303 . CARTE
304.OR..OR. IF(MANIM0== 8MANIM0== 9
305.OR..OR. . MANIM0==10MANIM0==11
306.OR..OR. . MANIM0==12MANIM0==13
307.OR. . MANIM0==14MANIM0==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
323C
324 ENDIF
325C
326C---------------------------------
327C TRAITEMENT MULTIDOMAINES
328C---------------------------------
329
330 IF (IRAD2R==1) THEN
331 IF (ISPMD==0) THEN
332C *** traitement flag mstop ***
333 MSTOP = R2R_MSTOP
334 R2R_MSTOP = MSTOP0
335 MSTOP0 = MSTOP
336 IF (R2R_MFILR == 1) THEN
337C *** stockage des flags pour envoi rad2rad ***
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
343C *** on applique les flags recus de rad2rad ***
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
354C---------------------------------
355C ECHANGE MULTIPROCS
356C---------------------------------
357.OR..OR..OR. IF((SENSORS%ANIM_ID /=0 SENSORS%NANIM /=0 H3D_DATA%N_SENS_H3D > 0)
358.OR..AND. . ((NCYCLE/NCINP)*NCINP==NCYCLE) (IRAD2R==1 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
393C---------------------------------
394
395 IF(MFILR==1)THEN
396.AND. IF(TT>=TMANNCYCLE>=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
407C
408 RETURN
409 END
#define my_real
Definition cppsort.cpp:32
subroutine manctr(sensors, h3d_data)
Definition manctr.F:39
type(ale_) ale
Definition ale_mod.F:249
integer infile_name_len
character(len=infile_char_len) infile_name
integer, parameter ncharline100
subroutine redkey2(key2, lk2, key0, nkey, carte, ikey)
Definition redkey2.F:29