OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
freanim.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!|| freanim ../engine/source/output/anim/reader/freanim.F
25!||--- called by ------------------------------------------------------
26!|| freform ../engine/source/input/freform.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../engine/source/output/message/message.F
29!|| anim_dcod_key_0 ../engine/source/output/anim/reader/anim_dcod_key_0.F
30!|| anim_reset_index_all ../engine/source/output/anim/reader/anim_reset_index_all.F
31!|| anim_set2zero_struct ../engine/source/output/anim/reader/anim_set2zero_struct.F
32!|| arret ../engine/source/system/arret.F
33!|| fredec_8key_i ../engine/source/input/fredec_8key_i.F
34!|| wriusc2 ../engine/source/input/wriusc2.F
35!||--- uses -----------------------------------------------------
36!|| message_mod ../engine/share/message_module/message_mod.F
37!|| names_and_titles_mod ../common_source/modules/names_and_titles_mod.F
38!|| output_mod ../common_source/modules/output/output_mod.F90
39!|| sensor_mod ../common_source/modules/sensor_mod.F90
40!|| stack_mod ../engine/share/modules/stack_mod.F
41!||====================================================================
42 SUBROUTINE freanim(OUTPUT,IKAD,KEY0,KANIM,SENSORS)
43C-----------------------------------------------
44C M o d u l e s
45C-----------------------------------------------
47 USE message_mod
48 USE stack_mod
49 USE output_mod
50 USE sensor_mod
51C-----------------------------------------------
52C I m p l i c i t T y p e s
53C-----------------------------------------------
54#include "implicit_f.inc"
55C-----------------------------------------------
56C C o m m o n B l o c k s
57C-----------------------------------------------
58#include "units_c.inc"
59#include "com01_c.inc"
60#include "warn_c.inc"
61#include "scr06_c.inc"
62#include "scr14_c.inc"
63#include "scrcut_c.inc"
64C-----------------------------------------------
65C D u m m y A r g u m e n t s
66C-----------------------------------------------
67 type(output_), intent(inout) :: OUTPUT
68 INTEGER IKAD(0:*),KANIM
69 CHARACTER KEY0(*)*5
70 TYPE (SENSORS_), INTENT(INOUT) :: SENSORS
71C-----------------------------------------------
72C E x t e r n a l F u n c t i o n s
73C-----------------------------------------------
74 INTEGER NVAR
75C-----------------------------------------------
76C L o c a l V a r i a b l e s
77C-----------------------------------------------
78 INTEGER I, NBC, K, IKEY, N1, N2, N3, ITYP,J,NTITLE, IXITKEY
79 CHARACTER TITLE*72, TITLE2*80
80 CHARACTER(LEN=LINE120)::LINE
81 CHARACTER(LEN=NCHARLINE100)::CARTE
82 CHARACTER(LEN=NCHARKEY)::KEY2
83 CHARACTER(LEN=NCHARKEY)::KEY3
84 CHARACTER(LEN=NCHARKEY)::KEY4
85 CHARACTER(LEN=NCHARKEY)::KEY5
86 CHARACTER(LEN=NCHARKEY)::KEY6
87 CHARACTER(LEN=NCHARKEY)::KEY7
88 CHARACTER(LEN=NCHARKEY)::KEY8
89
90 my_real x0,y0,z0,vnx,vny,vnz,v0
91C-----------------------------------------------
92 ikey = kanim
93 animcont = 0
94 output%nb_anim_frame = 0
95 output%DTANIM_FCT_ID = 0
96C-----------------------------------------------
97C Set all indexes and some other variables for ANIM to zero
98C-----------------------------------------------
99 CALL anim_set2zero_struct(output,sensors)
100C-----------------------------------------------
101C Loop over /ANIM cards
102C-----------------------------------------------
103 ixitkey=0
104 IF(ikad(ikey)/=ikad(ikey+1))THEN
105 k=0
106 1160 READ(iusc1,rec=ikad(ikey)+k,fmt='(A)')line
107 CALL fredec_8key_i(line,key2,key3,key4,key5,key6,key7,key8,nbc)
108
109 k=k+1
110
111 IF(nbc/=0)THEN
112C----------------------------
113C THE FOLLOWING OPTIONS USE AN ADDITIONAL CARD
114C----------------------------
115 IF(key2(1:5)=='DT ')THEN
116 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
117 READ(iusc2,*,err=310,END=320)OUTPUT%TANIM0,output%DTANIM0,output%TANIM_STOP0,output%nb_anim_frame,output%dtanim_fct_id
118 GOTO 320
119 310 READ(iusc2,*,err=320,END=320)OUTPUT%tanim0
120 320 CONTINUE
121!
122c DO I=1,NBC
123c READ(IUSC1,REC=IKAD(IKEY)+K+I-1,FMT='(A)',ERR=9990)CARTE
124c CALL WRIUSC2(IKAD(IKEY)+K+I-1,1,KEY0(IKEY))
125c READ(IUSC2,*,ERR=9990,END=9990) TIME_I,NB_FRAME_I,TILTLE_I
126c NFRAME=NFRAME+1
127c TIME_ANIM_TAB( NFRAME) = TIME_I
128c NB_FRAME_ANIM_TAB(NFRAME)=NB_FRAME_I
129c TITLE_ANIM_TAB(NFRAME)=TILTLE_I
130c ENDDO
131
132
133 IF (output%DTANIM0 <= zero.AND.output%DTANIM_FCT_ID == 0.AND.output%nb_anim_frame==0) THEN
134 CALL ancmsg(msgid=293,anmode=aninfo,c1='ANIM',c2='ANIM')
135 CALL arret(0)
136 ENDIF
137
138 IF (output%TANIM_STOP0 < zero) THEN
139 CALL ancmsg(msgid=304,anmode=aninfo,c1='ANIM',c2='ANIM')
140 CALL arret(0)
141 ELSEIF (output%TANIM_STOP0 == zero)THEN
142 output%TANIM_STOP0 = ep20
143 ELSE
144 output%TANIM_STOP0 = max(output%TANIM_STOP0, max(zero,output%TANIM0))
145 ENDIF
146!
147 ELSEIF(key2(1:5)=='SENSO')THEN
148 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
149 READ(iusc2,*,err=9990) sensors%ANIM_ID,sensors%ANIM_DT
150!
151 ELSEIF(key2(1:5)=='LSENS')THEN
152 DO i=1,nbc
153 READ(iusc1,rec=ikad(ikey)+k+i-1,fmt='(A)',err=9990)carte
154 CALL wriusc2(ikad(ikey)+k+i-1,1,key0(ikey))
155 READ(iusc2,*,err=9990,END=9990) (SENSORS%ANIM_TMP(J+SENSORS%NANIM),J=1,NVAR(CARTE))
156 DO j=1,nvar(carte)
157 sensors%NANIM = sensors%NANIM + 1
158 ENDDO
159 ENDDO
160!
161 ELSEIF(key2(1:5)=='TITLE')THEN
162 DO i=1,nbc
163 READ(iusc1,rec=ikad(ikey)+k+i-1,fmt='(A)',err=9990)carte
164 CALL wriusc2(ikad(ikey)+k+i-1,1,key0(ikey))
165 READ(iusc2,*,err=9990,END=9990) NTITLE,title2
166 nltitle=nltitle+1
167 ntitletab(nltitle)=ntitle
168 titletab(nltitle)=title2
169 ENDDO
170 ELSEIF(key2(1:3)=='CUT')THEN
171 ncuts=ncuts+1
172 READ(key3(1:4),'(I4)')ityp
173 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
174 READ(iusc2,'(A)',err=9990,END=9990)title
175 WRITE(iin,'(I8,A)')ityp,title
176 k=k+1
177 CALL wriusc2(ikad(ikey)+k,1,key0(ikey))
178 IF(ityp<3)THEN
179 READ(iusc2,*,err=9990,END=9990)X0,Y0,Z0,VNX,VNY,VNZ,v0
180 WRITE(iin,'(7E16.9)')x0,y0,z0,vnx,vny,vnz,v0
181 ELSE
182 READ(iusc2,*,err=9990,END=9990)N1,N2,n3
183 WRITE(iin,'(3I8)')n1,n2,n3
184 ENDIF
185 k=k-1
186 END IF
187 ELSE ! IF(NBC/=0)THEN
188C----------------------------
189C THE FOLLOWING OPTIONS DONT USE ANY ADDITIONAL CARD
190C----------------------------
191 CALL anim_dcod_key_0(output,key2,key3,key4,key5,key6,ierr,ixitkey)
192 IF(ixitkey/=0) GOTO 9990
193 ENDIF
194 k=k+nbc
195 IF(ikad(ikey)+k/=ikad(ikey+1))GO TO 1160
196 ENDIF
197C-----------------------------------------------
198C This routine is resetting indexes in cas of /STRESS/ALL, /STRAIN/ALL, etc
199C The correct indexes wrt integration points or layers of all actual elements
200C will be rebuilt after reading the restart file.
201C-----------------------------------------------
203C-----------------------------------------------
204 nv_ani = 0
205 nt_ani = 0
206 ne_ani = 0
207 nn_ani = 0
208 nct_ani = 0
209 nce_ani = 0
210 nst_ani = 0
211 nse_ani = 0
212 nft_ani = 0
213 nfe_ani = 0
214 DO i = 1,mx_ani
215 nv_ani = nv_ani + anim_v(i)
216 nt_ani = nt_ani + anim_t(i)
217 ne_ani = ne_ani + anim_e(i)
218 nn_ani = nn_ani + anim_n(i)
219 nst_ani = nst_ani + anim_st(i)
220 nse_ani = nse_ani + anim_se(i)
221 nct_ani = nct_ani + anim_ct(i)
222 nce_ani = nce_ani + anim_ce(i)
223 nft_ani = nft_ani + anim_ft(i)
224 nfe_ani = nfe_ani + anim_fe(i)
225 ENDDO
226 IF(anim_v(12)==1)nv_ani=nv_ani+1
227 IF(anim_v(4)==1.AND.animcont == 0) nv_ani=nv_ani-1
228 IF(anim_v(27)==1)nv_ani=nv_ani+1
229C-----------------------------------------------
230C Anim cut not worn in SPMD
231 IF (ncuts>0.AND.nspmd>1) THEN
232 CALL ancmsg(msgid=191,anmode=aninfo)
233 ierr=ierr+1
234 ENDIF
235 IF(anim_vers<40) THEN
236 CALL ancmsg(msgid=192,anmode=aninfo)
237 ierr=ierr+1
238 ENDIF
239 IF (anim_vers>=50) THEN
240 CALL ancmsg(msgid=193,anmode=aninfo)
241 ierr=ierr+1
242 ENDIF
243 RETURN
244C-----------------------------------------------
245 9990 CONTINUE
246 CALL ancmsg(msgid=73,anmode=aninfo,c1=key0(ikey),c2=line(1:35))
247 CALL arret(0)
248 END
subroutine anim_dcod_key_0(output, key2, key3, key4, key5, key6, jerr, ixitkey)
subroutine anim_reset_index_all()
subroutine anim_set2zero_struct(output, sensors)
#define my_real
Definition cppsort.cpp:32
subroutine freanim(output, ikad, key0, kanim, sensors)
Definition freanim.F:43
subroutine fredec_8key_i(cart, key2, key3, key4, key5, key6, key7, key8, nbc)
#define max(a, b)
Definition macros.h:21
integer, parameter ncharline100
integer, parameter ncharkey
integer function nvar(text)
Definition nvar.F:32
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:895
subroutine arret(nn)
Definition arret.F:86
subroutine wriusc2(irec, nbc, key0)
Definition wriusc2.F:60