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!|| h3d_mod ../engine/share/modules/h3d_mod.F
33!|| inoutfile_mod ../common_source/modules/inoutfile_mod.F
34!|| names_and_titles_mod ../common_source/modules/names_and_titles_mod.F
35!|| output_mod ../common_source/modules/output/output_mod.F90
36!|| sensor_mod ../common_source/modules/sensor_mod.F90
37!||====================================================================
38 SUBROUTINE manctr(OUTPUT,SENSORS ,H3D_DATA)
39C-----------------------------------------------
40C M o d u l e s
41C-----------------------------------------------
43 USE h3d_mod
45 USE sensor_mod
46 USE output_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(output_), INTENT(INOUT) :: OUTPUT
70 TYPE(h3d_database) :: H3D_DATA
71 TYPE (SENSORS_) ,INTENT(INOUT) :: SENSORS
72C-----------------------------------------------
73C L o c a l P a r a m e t e r s
74C-----------------------------------------------
75 INTEGER NKEY,I
76 parameter(nkey = 13)
77C-----------------------------------------------
78C L o c a l V a r i a b l e s
79C-----------------------------------------------
80 INTEGER MANIM0, MREST0, MSTOP0, MFILR, MCYCLE, LK2, IKEY, WMCHECK0,
81 . MSG_R2R,ICTLSTOP0, MH3D0,SENS_ID
82 my_real tmpman(50), tman
83 CHARACTER FILNAM*100, KEY2*80, FMT*80, KEY0(NKEY)*5,REC*1
84 CHARACTER(LEN=NCHARLINE100)::CARTE
85 INTEGER :: LEN_TMP_NAME
86 CHARACTER(len=2148) :: TMP_NAME
87C-----------------------------------------------
88C E x t e r n a l F u n c t i o n s
89C-----------------------------------------------
90C REAL
91C-----------------------------------------------
92 SAVE manim0,mrest0,mstop0,mfilr,key0,ictlstop0,mh3d0
93 DATA mfilr/0/
94 DATA manim0/0/
95 DATA mrest0/0/
96 DATA mstop0/0/
97 DATA mcycle/0/
98 DATA tman/0.0/
99 DATA wmcheck0/0/
100 DATA ictlstop0/0/
101 DATA mh3d0/0/
102 DATA key0/'TIME ','CYCLE','GFILE','PATRA','RFILE','STOP ',
103 . 'KILL ','INFO ','ANIM ','OUTP ','LFLUS','CHKPT',
104 . 'H3D '/
105C-----------------------------
106C INTERVENTION MANUELLE
107C-----------------------------
108 mdess=0
109 mrest=0
110 manim=0
111 mstop=0
112 wmcheck = 0
113 h3d_data%MH3D=0
114 mh3d0=0
115
116 msg_r2r = 0
117 IF ((irad2r==1).AND.(ncycle<2)) r2r_mfilr = 0
118C
119 IF(ale%SUB%IALESUB/=0 .AND. tt+dt2<=t1s+dt2s)RETURN
120C SOUS CYCLAGE ALE
121C-----------------------------
122C SENSOR
123C-----------------------------
124 IF (sensors%ANIM_ID > 0)THEN
125 IF (tt > sensors%SENSOR_TAB(sensors%ANIM_ID)%TSTART) THEN
126C ACTIVATION
127 sensors%ANIM_ID = -sensors%ANIM_ID
128 output%TANIMSENS = tt + sensors%ANIM_DT
129 manim=4
130 mdess=mdess+manim
131 ENDIF
132 ELSEIF (sensors%ANIM_ID < 0) THEN
133 IF (tt < sensors%SENSOR_TAB(-sensors%ANIM_ID)%TSTART) THEN
134C DEACTIVATION
135 sensors%ANIM_ID = -sensors%ANIM_ID
136 ELSEIF (tt > output%TANIMSENS) THEN
137C ACTIF
138 output%TANIMSENS = output%TANIMSENS + sensors%ANIM_DT
139 manim=4
140 mdess=mdess+manim
141 RETURN
142 ENDIF
143 ENDIF
144c
145 IF (sensors%NANIM > 0) THEN
146 DO i=1,sensors%NANIM
147 sens_id = sensors%ANIM(i)
148 IF (sensors%ANIM(i) > 0) THEN
149 IF (tt > sensors%SENSOR_TAB(sens_id)%TSTART) THEN ! ACTIVATION
150 sensors%ANIM(i) = -sens_id
151 manim=4
152 mdess=mdess+manim
153 ENDIF
154 ELSEIF (sens_id < 0) THEN
155 IF (tt < sensors%SENSOR_TAB(-sens_id)%TSTART) THEN ! DEACTIVATION
156 sensors%ANIM(i) = -sens_id
157 ENDIF
158 ENDIF
159 ENDDO
160 ENDIF
161c
162 IF(h3d_data%N_SENS_H3D>0)THEN
163 DO i=1,h3d_data%N_SENS_H3D
164 IF(h3d_data%LSENS_H3D(i)>0)THEN
165 IF (tt > sensors%SENSOR_TAB(h3d_data%LSENS_H3D(i))%TSTART) THEN
166C ACTIVATION
167 h3d_data%LSENS_H3D(i)=-h3d_data%LSENS_H3D(i)
168 h3d_data%MH3D=1
169 ENDIF
170 ELSEIF (h3d_data%LSENS_H3D(i)<0) THEN
171 IF (tt < sensors%SENSOR_TAB(-h3d_data%LSENS_H3D(i))%TSTART) THEN
172C DEACTIVATION
173 h3d_data%LSENS_H3D(i)=-h3d_data%LSENS_H3D(i)
174 ENDIF
175 ENDIF
176 ENDDO
177 ENDIF
178C-----------------------------
179C INTERVENTION MANUELLE
180C-----------------------------
181C
182 IF((ncycle/ncinp)*ncinp==ncycle)THEN
183 IF(ispmd==0)THEN
184 filnam=rootnam(1:rootlen)//'_'//chrun//'.ctl'
185 len_tmp_name = infile_name_len + len_trim(filnam)
186 tmp_name=infile_name(1:infile_name_len)//filnam(1:len_trim(filnam))
187 OPEN(unit=iusc3,file=tmp_name(1:len_tmp_name),
188 . status='OLD',err=999)
189 READ(iusc3,'(A)',err=990,END=990)carte
190 IF(carte(1:1)/='/')GOTO 990
191 mrest=0
192 manim=0
193 mstop=0
194 mrest0=0
195 manim0=0
196 mstop0=0
197 tman=0.
198 mcycle=0
199 ictlstop=0
200 ictlstop0=0
201 mh3d0 = 0
202C
203 5 CALL redkey2(key2,lk2,key0,nkey,carte,ikey)
204 GOTO (10,20,30,40,50,60,70,80,90,95,96,97,98)ikey
205 GOTO 100
206C TIME
207 10 IF(lk2>1.AND.lk2<10)THEN
208 WRITE(fmt,'(A,I1,A)')'(E',lk2,'.0)'
209 ELSEIF(lk2<100)THEN
210 WRITE(fmt,'(A,I2,A)')'(E',lk2,'.0)'
211 ELSE
212 GOTO 100
213 ENDIF
214 READ(key2,fmt,err=990,END=990)tman
215 GOTO 100
216C CYCLE
217 20 IF(lk2>1.AND.lk2<10)THEN
218 WRITE(fmt,'(A,I1,A)')'(I',lk2,')'
219 ELSEIF(lk2<100)THEN
220 WRITE(fmt,'(A,I2,A)')'(I',lk2,')'
221 ELSE
222 GOTO 100
223 ENDIF
224 READ(key2,fmt,err=990,END=990)mcycle
225C MCYCLE DESATIVE EN MULTIDOMAINES
226 IF (irad2r==1) THEN
227 msg_r2r = 1
228 mcycle = 0
229 ENDIF
230 GOTO 100
231C PLOT
232 30 manim0=manim0+1
233 GOTO 100
234C PATRAN
235 40 manim0=manim0+2
236 GOTO 100
237C RESTART
238 50 mrest0=1
239 GOTO 100
240C STOP
24160 mstop0=1
242 mrest0=1
243 ictlstop0 = 1
244 GOTO 100
245C KILL
246 70 mstop0=1
247 ictlstop0 = 1
248 GOTO 100
249C INFO
250 80 GOTO 100
251C ANIM PLOT
252 90 manim0=manim0+4
253 GOTO 100
254C OUTP PLOT
255 95 manim0=manim0+8
256 GOTO 100
257C L01 FLUSH
258 96 backspace(iout)
259 READ(iout,'(A)')rec
260 GOTO 100
261 97 wmcheck0 = 1
262 GOTO 100
263C H3D PLOT
264 98 mh3d0=1
265 GOTO 100
266 100 CONTINUE
267 READ(iusc3,'(A)',err=400,END=400)carte
268 GOTO 5
269C
270 400 mdess=1
271 rewind iusc3
272C
273 WRITE (iusc3,'(A)',err=990) ' RUN CONTROL FILE'
274 WRITE (iusc3,'(A,/)',err=990) ' ----------------'
275 IF(tman==0.0.AND.mcycle==0)THEN
276 IF (msg_r2r==1) THEN
277 WRITE (iusc3,'(a)',ERR=990)
278 . ' multidomains -> /cycle not allowed'
279 ENDIF
280 WRITE(CARTE,'(a)')' at current cycle'
281 ELSEIF(TMAN==0.0)THEN
282 WRITE(CARTE,'(a,i10)')' at cycle',MCYCLE
283 ELSEIF(MCYCLE==0)THEN
284 WRITE(CARTE,'(a,g14.7)')' at time ',TMAN
285 ELSE
286 WRITE(CARTE,'(a,g14.7,a,i10)')' IF time >=',TMAN,
287 . ' and IF cycle >=',MCYCLE
288 ENDIF
289.OR..OR. IF(MANIM0==1 MANIM0== 3
290.OR..OR. . MANIM0==5 MANIM0== 7
291.OR..OR. . MANIM0==9 MANIM0==11
292.OR. . MANIM0==13MANIM0==15)
293 . WRITE(IUSC3,'(/a,a)',ERR=990)' WRITE next plot file',CARTE
294.OR..OR. IF(MANIM0== 2MANIM0== 3
295.OR..OR. . MANIM0== 6MANIM0== 7
296.OR..OR. . MANIM0==10MANIM0==11
297.OR. . MANIM0==14MANIM0==15)
298 . WRITE(IUSC3,'(a,a)',ERR=990)' WRITE next patran files',CARTE
299.OR..OR. IF(MANIM0== 4MANIM0== 5
300.OR..OR. . MANIM0== 6MANIM0== 7
301.OR..OR. . MANIM0==12MANIM0==13
302.OR. . MANIM0==14MANIM0==15)
303 . WRITE(IUSC3,'(a,a)',ERR=990)' WRITE next animation files',
304 . CARTE
305.OR..OR. IF(MANIM0== 8MANIM0== 9
306.OR..OR. . MANIM0==10MANIM0==11
307.OR..OR. . MANIM0==12MANIM0==13
308.OR. . MANIM0==14MANIM0==15)
309 . WRITE(IUSC3,'(a,a)',ERR=990)' WRITE next output files',
310 . CARTE
311 IF(MREST0==1)
312 . WRITE(IUSC3,'(a,a)',ERR=990)' WRITE next restart file',CARTE
313 IF(MSTOP0==1)
314 . WRITE(IUSC3,'(a,a)',ERR=990)' run stop',CARTE
315 IF(MH3D0 == 1)
316 . WRITE(IUSC3,'(a,a)',ERR=990)' update h3d file', CARTE
317 MFILR=1
318 IF (IRAD2R==1) R2R_MFILR=1
319 GOTO 999
320 990 CONTINUE
321 CLOSE (IUSC3)
322 999 CONTINUE
323 ENDIF
324C
325 ENDIF
326C
327C---------------------------------
328C MULTI-DOMAIN TREATMENT
329C---------------------------------
330
331 IF (IRAD2R==1) THEN
332 IF (ISPMD==0) THEN
333C *** FLAG MSTOP treatment ***
334 MSTOP = R2R_MSTOP
335 R2R_MSTOP = MSTOP0
336 MSTOP0 = MSTOP
337 IF (R2R_MFILR == 1) THEN
338C *** storage of flags for sending rad2rad ***
339 TMAN_R2R = TMAN
340 R2R_CTR(1) = MREST0
341 R2R_CTR(2) = MANIM0
342 R2R_CTR(3) = WMCHECK0
343 ELSEIF (R2R_MFILR == 2) THEN
344C *** applying the flags received from rad2rad ***
345 MFILR = 1
346 R2R_MFILR = 0
347 TMAN = TMAN_R2R
348 MANIM0 = R2R_CTR(2)
349 WMCHECK0= R2R_CTR(3)
350 ENDIF
351 ENDIF
352 IF(NSPMD > 1) CALL SPMD_IBCAST(MFILR,MFILR,1,1,0,2)
353 ENDIF
354
355C---------------------------------
356C ECHANGE MULTIPROCS
357C---------------------------------
358.OR..OR..OR. IF((SENSORS%ANIM_ID /=0 SENSORS%NANIM /=0 H3D_DATA%N_SENS_H3D > 0)
359.OR..AND. . ((NCYCLE/NCINP)*NCINP==NCYCLE) (IRAD2R==1 MFILR==1)) THEN
360 IF (ISPMD==0) THEN
361 TMPMAN(1) = MDESS
362 TMPMAN(2) = MREST0
363 TMPMAN(3) = MREST
364 TMPMAN(4) = MSTOP0
365 TMPMAN(5) = MSTOP
366 TMPMAN(6) = MANIM0
367 TMPMAN(7) = MANIM
368 TMPMAN(8) = MCYCLE
369 TMPMAN(9) = MFILR
370 TMPMAN(10)= TMAN
371 TMPMAN(11)= WMCHECK0
372 TMPMAN(12) = ICTLSTOP0
373 TMPMAN(13) = MH3D0
374 TMPMAN(14) = H3D_DATA%MH3D
375 ENDIF
376 IF(NSPMD > 1)CALL SPMD_RBCAST(TMPMAN,TMPMAN,1,14,0,2)
377 IF (ISPMD/=0)THEN
378 MDESS = NINT(TMPMAN(1))
379 MREST0 = NINT(TMPMAN(2))
380 MREST = NINT(TMPMAN(3))
381 MSTOP0 = NINT(TMPMAN(4))
382 MSTOP = NINT(TMPMAN(5))
383 MANIM0 = NINT(TMPMAN(6))
384 MANIM = NINT(TMPMAN(7))
385 MCYCLE = NINT(TMPMAN(8))
386 MFILR = NINT(TMPMAN(9))
387 TMAN = TMPMAN(10)
388 WMCHECK0 = NINT(TMPMAN(11))
389 ICTLSTOP0 = NINT(TMPMAN(12))
390 MH3D0 = NINT(TMPMAN(13))
391 H3D_DATA%MH3D = NINT(TMPMAN(14))
392 ENDIF
393 ENDIF
394C---------------------------------
395
396 IF(MFILR==1)THEN
397.AND. IF(TT>=TMANNCYCLE>=MCYCLE)THEN
398 MFILR=0
399 MREST=MREST0
400 MANIM=MANIM0
401 MSTOP=MSTOP0
402 MDESS=MDESS+MANIM
403 WMCHECK = WMCHECK0
404 ICTLSTOP = ICTLSTOP0
405 H3D_DATA%MH3D=MH3D0
406 ENDIF
407 ENDIF
408C
409 RETURN
410 END
#define my_real
Definition cppsort.cpp:32
subroutine manctr(output, sensors, h3d_data)
Definition manctr.F:39
type(ale_) ale
Definition ale_mod.F:253
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