OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
fvbag0.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!|| fvbag0 ../engine/source/airbag/fvbag0.F
25!||--- called by ------------------------------------------------------
26!|| resol ../engine/source/engine/resol.F
27!||--- calls -----------------------------------------------------
28!|| fv_up_switch ../engine/source/airbag/fv_up_switch.F
29!|| fvbag1 ../engine/source/airbag/fvbag1.F
30!|| fvbag2 ../engine/source/airbag/fvbag2.F
31!||--- uses -----------------------------------------------------
32!|| elbufdef_mod ../common_source/modules/mat_elem/elbufdef_mod.F90
33!|| fvbag_mod ../engine/share/modules/fvbag_mod.f
34!|| fvmbag_meshcontrol_mod ../common_source/modules/airbag/fvmbag_meshcontrol_mod.F
35!|| h3d_mod ../engine/share/modules/h3d_mod.F
36!|| output_mod ../common_source/modules/output/output_mod.F90
37!|| python_funct_mod ../common_source/modules/python_mod.F90
38!|| sensor_mod ../common_source/modules/sensor_mod.F90
39!||====================================================================
40 SUBROUTINE fvbag0(OUTPUT,MONVOL, VOLMON , X , SENSOR_TAB, V ,
41 . A , NPC , TF , NSENSOR ,
42 . FSAV , IFVMESH , ICONTACT , LGAUGE ,
43 . GAUGE , IGEO , GEO , PM , IPM,
44 . IPARG , IGROUPTG, IGROUPC , ELBUF_TAB , FEXT,
45 . FLAG , H3D_DATA, ITAB ,WEIGHT ,WFEXT, PYTHON)
46C-----------------------------------------------
47C D e s c r i p t i o n
48C-----------------------------------------------
49C This subroutine is called to manage FVMBAGS (numerical scheme + polyhedra mesh
50C
51C FVBAG0 called two times from RESOL
52C FLAG = 1 : Gather information on PMAIN + Computations
53C FLAG = 2 : Scatter information from PMAIN (inc. switch to UP)
54C-----------------------------------------------
55C M o d u l e s
56C-----------------------------------------------
57 USE output_mod, only : output_
58 USE fvbag_mod
59 USE elbufdef_mod
61 USE h3d_mod
62 USE sensor_mod
63 USE python_funct_mod, only : python_
64C-----------------------------------------------
65C I m p l i c i t T y p e s
66C-----------------------------------------------
67#include "implicit_f.inc"
68C-----------------------------------------------
69C C o m m o n B l o c k s
70C-----------------------------------------------
71#include "com01_c.inc"
72#include "com04_c.inc"
73#include "com08_c.inc"
74#include "param_c.inc"
75#include "scr18_c.inc"
76#include "tabsiz_c.inc"
77C-----------------------------------------------
78C D u m m y A r g u m e n t s
79C-----------------------------------------------
80 type(output_), intent(inout) :: output
81 INTEGER,INTENT(IN) :: NSENSOR
82 INTEGER, INTENT(IN) :: FLAG ! 1: gather + computations
83 ! 2: scatter
84 INTEGER MONVOL(SMONVOL), NPC(SNPC),IFVMESH,ICONTACT(*), LGAUGE(3,NBGAUGE), IGEO(NPROPGI,NUMGEO)
85 INTEGER IPM(NPROPMI,NUMMAT), IPARG(NPARG,NGROUP)
86 INTEGER IGROUPTG(NUMELTG), IGROUPC(NUMELC)
87 my_real volmon(svolmon), x(3,numnod),v(3,numnod), a(3,numnod),
88 . tf(stf), fsav(nthvki,sfsav/nthvki), gauge(llgauge,nbgauge), geo(npropg,numgeo),
89 . pm(npropm,nummat), fext(3*numnod)
90 TYPE(elbuf_struct_), DIMENSION(NGROUP) :: ELBUF_TAB
91 TYPE(h3d_database) :: H3D_DATA
92 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
93 INTEGER,INTENT(IN) :: ITAB(NUMNOD), WEIGHT(NUMNOD)
94 DOUBLE PRECISION,INTENT(INOUT) :: WFEXT
95 TYPE(python_) :: PYTHON
96C-----------------------------------------------
97C L o c a l V a r i a b l e s
98C-----------------------------------------------
99 INTEGER N, ITYP, NNFV, NTRFV, NPOLH, IFV, INFO, IDONE
100 INTEGER NJET, IADJET, RADJET, NVENT, IADHOL, RADHOL
101 INTEGER K1, K2, KIBJET, KIBHOL, KIBALE
102 INTEGER KK1, KK2, KRBJET, KRBHOL, KRBALE
103 INTEGER NNS, NTG, NBA, NTGA, NNA, NNI, NTGI, NNT, NTGT
104 INTEGER KI1, KI2, KI3, KI4, KI5
105 INTEGER KR1, KR2, KR3, KR4, KR5, KR6, KR7, KR8, KR9
106 INTEGER KIA1, KIA2, KIA3, KIA4, KIA5, KIA6, KIA7, KIA8
107 INTEGER KRA1, KRA2, KRA3, KRA4, KRA5, KRA6, KRA7, KRA8
108 INTEGER NSKIP, IEQUI
109 my_real cfl_coef
110C-----------------------------------------------
111C D e s c r i p t i o n
112C-----------------------------------------------
113c GAUGE(3,*)
114c 1: -Isolid -(NUMELS_G+1) if SPH gauge
115c 2: GaugeId
116c 3: +Node or -Shell
117c
118c => GAUGE(LLGAUGE,*), LLGAUGE = 37
119c 1: Dist (distance from Shell) Dist (distance from Shell)
120c 2: XG XG
121c 3: YG YG
122c 4: ZG ZG
123c 5: Alpha (Solid penetration ratio) not yet used
124c 6: XSAV (SPH sorting)
125c 7: YSAV (SPH sorting)
126c 8: ZSAV (SPH sorting)
127c 9: FF (sph only)
128c 10: Intantaneous Pressure
129c 11: intantaneous PA
130c 12: intantaneous Rho
131c 13: intantaneous E
132c 14: ! Butterworth !
133c 15: ! Butterworth !
134c 16: ! Butterworth !
135c 17: ! Butterworth !
136c 18: ! Butterworth !
137c 19: ! Butterworth !
138c 20: ! Butterworth !
139c 21: ! Butterworth !
140c 22: ! Butterworth !
141c 23: ! Butterworth !
142c 24: ! Butterworth !
143c 25: ! Butterworth !
144c 26: ! Butterworth !
145c 27: ! Butterworth !
146c 28: ! Butterworth !
147c 29: ! Butterworth !
148c 30: Pressure filtered Pressure
149c 31: PA filtered PA
150c 32: Rho filtered Rho
151c 33: E filtered E
152c 34: ! Butterworth !
153c 35: ! Butterworth !
154c 36: ! Butterworth !
155c 37: ! Butterworth !
156C-----------------------------------------------
157C S o u r c e L i n e s
158C-----------------------------------------------
159 k1=1
160 k2=1+nimv*nvolu
161 kibjet=k2+licbag
162 kibhol=kibjet+libagjet
163 kibale=kibhol+libaghol
164 kk1=1
165 kk2=1+nrvolu*nvolu
166 krbjet=kk2+lrcbag
167 krbhol=krbjet+lrbagjet
168 krbale=krbhol+lrbaghol
169 ifv=0
170 ifvmesh=0
171C
172 DO n=1,nvolu
173 ityp=monvol(k1-1+2)
174 IF (ityp == 6.OR.ityp == 8) THEN
175 ifv = monvol(k1 -1 +45)
176C
177 iequi=monvol(k1-1+15)
178 IF(tt < volmon(kk1-1+49).AND.iequi >= 1) THEN
179 monvol(k1-1+39)=0
180 nskip=mod(ncycle,iequi)
181 ELSE
182 monvol(k1-1+39)=1
183 nskip=0
184 ENDIF
185 IF(nskip >= 1 .AND. kmesh(ifv) > 1) GO TO 100
186C
187 idone=monvol(k1-1+57)
188 IF(idone == 1) GO TO 100
189 info=0
190C
191 njet=monvol(k1+7)
192 iadjet=kibjet+monvol(k1+8)
193 radjet=krbjet+monvol(k1+9)
194 nvent=monvol(k1+10)
195 iadhol=kibhol+monvol(k1+11)
196 radhol=krbhol+monvol(k1+12)
197C
198 nns=monvol(k1-1+32)
199 ntg=monvol(k1-1+33)
200 nni=monvol(k1-1+68)
201 ntgi=monvol(k1-1+69)
202 nnt=nns+nni
203 ntgt=ntg+ntgi
204 ki1=kibale+monvol(k1-1+31)
205 ki2=ki1+nnt
206 ki3=ki2+3*ntgt
207 ki4=ki3+ntgt
208 ki5=ki4+ntgt
209 kr1=krbale+monvol(k1-1+34)
210 kr2=kr1+nnt
211 kr3=kr2+nnt
212 kr4=kr3+nnt
213 kr5=kr4+3*nnt
214 kr6=kr5+ntgt
215 kr7=kr6+ntgt
216 kr8=kr7+ntgt
217 kr9=kr8+ntgt
218C
219 nnfv= monvol(k1-1+46)
220 ntrfv=monvol(k1-1+47)
221 npolh=monvol(k1-1+49)
222C
223 nba= monvol(k1-1+62)
224 ntga=monvol(k1-1+63)
225 nna= monvol(k1-1+64)
226C
227 kia1=ki4 +2*ntgt
228 kia2=kia1+2*nba
229 kia3=kia2+12*nba
230 kia4=kia3+2*ntgt
231 kia5=kia4+nna
232 kia6=kia5+3*ntga
233 kia7=kia6+ntga
234 kia8=kia7+8*nba
235C
236 kra1=min(svolmon, kr9 +nnt)
237 kra2=kra1+nna
238 kra3=kra2+nna
239 kra4=kra3+nna
240 kra5=kra4+3*nna
241 kra6=kra5+3*nna
242 kra7=kra6+3*nna
243 kra8=kra7+ntgi
244
245 IF (ityp == 8) THEN
246 cfl_coef = fvdata(ifv)%CFL_COEF
247 ELSE
248 cfl_coef = dtfac1(52)
249 ENDIF
250 IF(flag == 1 .AND. nskip < 1) THEN
251 IF (monvol(k1+74-1) >= 0) THEN
252 CALL fvbag1(output,
253 1 nns ,ntg ,monvol(ki1) , monvol(ki2) ,njet ,
254 2 monvol(iadjet) ,volmon(radjet) ,nvent,monvol(iadhol), volmon(radhol) ,
255 3 volmon(kr1) ,volmon(kr2) ,volmon(kr3) , volmon(kr4) ,volmon(kr9) ,
256 4 x ,v ,a , nsensor ,sensor_tab ,
257 5 fsav(1,n) ,npc ,tf , monvol(k1) ,volmon(kk1) ,
258 6 fvdata(ifv)%MPOLH ,fvdata(ifv)%QPOLH ,fvdata(ifv)%EPOLH , fvdata(ifv)%CENTROID_POLH,
259 7 fvdata(ifv)%PPOLH ,fvdata(ifv)%RPOLH ,fvdata(ifv)%GPOLH , fvdata(ifv)%SSPPOLH ,
260 8 npolh ,fvdata(ifv)%IFVNOD ,fvdata(ifv)%RFVNOD , fvdata(ifv)%IFVTRI ,
261 9 fvdata(ifv)%IFVPOLY ,fvdata(ifv)%IFVTADR,fvdata(ifv)%IFVPOLH ,
262 a fvdata(ifv)%IFVPADR ,info ,nnfv , ntrfv , ifv ,
263 b fvdata(ifv)%NPOLH_ANIM,fvdata(ifv)%DLH ,fvdata(ifv)%CPAPOLH ,
264 c fvdata(ifv)%CPBPOLH ,fvdata(ifv)%CPCPOLH,fvdata(ifv)%RMWPOLH ,
265 d monvol(ki3) ,volmon(kr5) ,icontact , fvdata(ifv)%IDPOLH ,
266 e volmon(kr6) ,volmon(kr7) ,monvol(kia4) , monvol(kia5) , monvol(kia6) ,
267 f volmon(kra1) ,volmon(kra2) ,volmon(kra3) , volmon(kra4) , monvol(kia7) ,
268 g nna ,ntga ,fvdata(ifv)%IBPOLH , fvdata(ifv)%DTPOLH , nnt ,
269 h ntgt ,volmon(kra5) ,volmon(kra6) , monvol(kia8) , volmon(kra7) ,
270 i lgauge ,gauge ,ityp , igeo,volmon(kra8) ,
271 j geo ,pm ,ipm , fvdata(ifv)%TPOLH , volmon(kr8) ,
272 k fvdata(ifv)%CPDPOLH ,fvdata(ifv)%CPEPOLH,fvdata(ifv)%CPFPOLH ,
273 l monvol(ki4) ,iparg ,monvol(ki5) ,
274 m igrouptg ,igroupc ,elbuf_tab , fext , cfl_coef ,
275 n fvdata(ifv)%PDISP_OLD ,fvdata(ifv)%PDISP ,h3d_data , itab , wfext, python)
276 ELSE
277 CALL fv_up_switch(output,
278 1 nns ,ntg, monvol(ki2) ,njet , fvdata(ifv)%NPOLY , fvdata(ifv)%LENH ,nba,
279 2 monvol(iadjet) ,volmon(radjet) ,nvent,monvol(iadhol), volmon(radhol),
280 3 volmon(kr1) ,volmon(kr2) ,volmon(kr3) , volmon(kr4) , volmon(kr9) ,
281 4 x ,v ,a , nsensor , sensor_tab ,
282 5 fsav(1,n) ,npc ,tf , monvol(k1) , volmon(kk1) ,
283 6 fvdata(ifv)%MPOLH ,fvdata(ifv)%QPOLH ,fvdata(ifv)%EPOLH ,
284 7 fvdata(ifv)%PPOLH ,fvdata(ifv)%RPOLH ,fvdata(ifv)%GPOLH ,
285 8 npolh ,fvdata(ifv)%IFVNOD ,fvdata(ifv)%RFVNOD , fvdata(ifv)%IFVTRI ,
286 9 fvdata(ifv)%IFVPOLY ,fvdata(ifv)%IFVTADR,fvdata(ifv)%IFVPOLH ,
287 a fvdata(ifv)%IFVPADR ,info ,nnfv , ntrfv , ifv ,
288 b fvdata(ifv)%NPOLH_ANIM,fvdata(ifv)%DLH ,fvdata(ifv)%CPAPOLH ,
289 c fvdata(ifv)%CPBPOLH ,fvdata(ifv)%CPCPOLH,fvdata(ifv)%RMWPOLH ,
290 d monvol(ki3) ,volmon(kr5) ,icontact , fvdata(ifv)%IDPOLH ,
291 e volmon(kr6) ,volmon(kr7) ,monvol(kia4) , monvol(kia5),monvol(kia6),
292 f volmon(kra1) ,volmon(kra2) ,volmon(kra3) , volmon(kra4),monvol(kia7),
293 g nna ,ntga ,fvdata(ifv)%IBPOLH , fvdata(ifv)%DTPOLH , nnt,
294 h ntgt ,volmon(kra5) ,volmon(kra6) , monvol(kia8),volmon(kra7),
295 i ityp ,igeo,volmon(kra8) ,
296 j geo ,pm ,ipm , fvdata(ifv)%TPOLH , volmon(kr8),
297 k fvdata(ifv)%CPDPOLH ,fvdata(ifv)%CPEPOLH,fvdata(ifv)%CPFPOLH ,
298 l monvol(ki4) ,iparg ,monvol(ki5) ,
299 m igrouptg ,igroupc ,elbuf_tab, cfl_coef ,
300 n fvdata(ifv)%PDISP_OLD ,fvdata(ifv)%PDISP ,wfext, python)
301 ENDIF
302 ELSEIF (flag == 2) THEN
303 CALL fvbag2(ifv , ityp , nna , nvent , njet ,
304 . monvol(k1), monvol(iadhol), volmon(radhol),
305 . x , volmon(kk1) , volmon(kra5) , monvol(kia8), volmon(radjet),
306 . a , lgauge , gauge , nnt , fext ,
307 . nskip , h3d_data , weight)
308
309C---+----1----+----2----+----3----+----4----+----5----+----6----+----7--
310 monvol(k1-1+57)=1
311 ENDIF
312 ENDIF
313 100 k1=k1+nimv
314 kk1=kk1+nrvolu
315 ENDDO
316C
317 RETURN
318 END
#define my_real
Definition cppsort.cpp:32
subroutine fv_up_switch(output, nn, nel, elem, njet, npoly, lenh, nba, ibagjet, rbagjet, nvent, ibaghol, rbaghol, p, rho, tk, u, sspk, x, v, a, nsensor, sensor_tab, fsav, npc, tf, ivolu, rvolu, mpolh, qpolh, epolh, ppolh, rpolh, gpolh, npolh, ifvnod, rfvnod, ifvtri, ifvpoly, ifvtadr, ifvpolh, ifvpadr, info, nns, nntr, ifv, npolha, dlh, cpapolh, cpbpolh, cpcpolh, rmwpolh, itagel, elsini, icontact, idpolh, elfmass, elfvel, ibufa, elema, tagela, pa, rhoa, tka, ua, brna, nna, ntga, ibpolh, dtpolh, nnt, nelt, xxxa, vvva, ncona, porosity, ityp, igeo, sspka, geo, pm, ipm, tpolh, elfehpy, cpdpolh, cpepolh, cpfpolh, eltg, iparg, mattg, igrouptg, igroupc, elbuf_tab, cfl_coef, pdisp_old, pdisp, wfext, python)
subroutine fvbag0(output, monvol, volmon, x, sensor_tab, v, a, npc, tf, nsensor, fsav, ifvmesh, icontact, lgauge, gauge, igeo, geo, pm, ipm, iparg, igrouptg, igroupc, elbuf_tab, fext, flag, h3d_data, itab, weight, wfext, python)
Definition fvbag0.F:46
subroutine fvbag1(output, nn, nel, ibuf, elem, njet, ibagjet, rbagjet, nvent, ibaghol, rbaghol, p, rho, tk, u, sspk, x, v, a, nsensor, sensor_tab, fsav, npc, tf, ivolu, rvolu, mpolh, qpolh, epolh, centroid_polh, ppolh, rpolh, gpolh, ssppolh, npolh, ifvnod, rfvnod, ifvtri, ifvpoly, ifvtadr, ifvpolh, ifvpadr, info, nns, nntr, ifv, npolha, dlh, cpapolh, cpbpolh, cpcpolh, rmwpolh, itagel, elsini, icontact, idpolh, elfmass, elfvel, ibufa, elema, tagela, pa, rhoa, tka, ua, brna, nna, ntga, ibpolh, dtpolh, nnt, nelt, xxxa, vvva, ncona, porosity, lgauge, gauge, ityp, igeo, sspka, geo, pm, ipm, tpolh, elfehpy, cpdpolh, cpepolh, cpfpolh, eltg, iparg, mattg, igrouptg, igroupc, elbuf_tab, fext, cfl_coef, pdisp_old, pdisp, h3d_data, itab, wfext, python)
Definition fvbag1.F:74
subroutine fvbag2(ifv, ityp, nna, nvent, njet, ivolu, ibaghol, rbaghol, x, rvolu, xxxa, ncona, rbagjet, a, lgauge, gauge, nnt, fext, nskip, h3d_data, weight)
Definition fvbag2.F:41
#define min(a, b)
Definition macros.h:20
type(fvbag_data), dimension(:), allocatable fvdata
Definition fvbag_mod.F:128
integer, dimension(:), allocatable kmesh