OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
monvol0.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!|| monvol0 ../engine/source/airbag/monvol0.F
25!||--- called by ------------------------------------------------------
26!|| resol ../engine/source/engine/resol.F
27!||--- calls -----------------------------------------------------
28!|| airbaga ../engine/source/airbag/airbag1.F
29!|| airbaga1 ../engine/source/airbag/airbaga1.F
30!|| airbagb ../engine/source/airbag/airbag2.F
31!|| airbagb1 ../engine/source/airbag/airbagb1.F
32!|| get_volume_area ../engine/source/airbag/get_volume_area.F90
33!|| spmd_mv_ca ../engine/source/mpi/airbags/spmd_mv_ca.F
34!|| volout ../engine/source/airbag/volout.F
35!|| volp_lfluid ../engine/source/airbag/volp_lfluid.F
36!|| volpfv ../engine/source/airbag/volpfv.F
37!|| volpre ../engine/source/airbag/volpres.F
38!|| volprep ../engine/source/airbag/volpresp.F
39!|| volpvga ../engine/source/airbag/volpvg.f
40!|| volpvgb ../engine/source/airbag/volpvg.F
41!||--- uses -----------------------------------------------------
42!|| elbufdef_mod ../common_source/modules/mat_elem/elbufdef_mod.F90
43!|| get_volume_area_mod ../engine/source/airbag/get_volume_area.F90
44!|| groupdef_mod ../common_source/modules/groupdef_mod.F
45!|| h3d_mod ../engine/share/modules/h3d_mod.F
46!|| monvol_struct_mod ../engine/share/modules/monvol_struct_mod.F
47!|| output_mod ../common_source/modules/output/output_mod.F90
48!|| python_funct_mod ../common_source/modules/python_mod.f90
49!|| sensor_mod ../common_source/modules/sensor_mod.F90
50!||====================================================================
51 SUBROUTINE monvol0(MONVOL ,VOLMON ,X ,A ,
52 2 NPC ,TF ,V ,NORMAL ,
53 3 FSAV ,NSENSOR ,SENSOR_TAB,IGRSURF,
54 4 FR_MV ,IADMV ,SICONTACT,SPORO,
55 5 FSKY ,ICONTACT,PORO ,IPARG ,
56 6 ELBUF_TAB,GEO ,IGEO ,
57 7 PM ,IPM ,IPART ,IPARTC ,
58 8 IPARTTG ,IGROUPC ,IGROUPTG,FEXT ,
59 9 FLAG ,H3D_DATA ,T_MONVOL,frontier_global_mv,
60 A OUTPUT, PYTHON)
61C-----------------------------------------------
62C M o d u l e s
63C-----------------------------------------------
64 USE python_funct_mod, only : python_
65 USE elbufdef_mod
66 USE h3d_mod
67 USE groupdef_mod
69 USE sensor_mod
70 use get_volume_area_mod , only : get_volume_area
71 use output_mod , only : output_
72C-----------------------------------------------
73C I m p l i c i t T y p e s
74C-----------------------------------------------
75#include "implicit_f.inc"
76C-----------------------------------------------
77C C o m m o n B l o c k s
78C-----------------------------------------------
79#include "param_c.inc"
80#include "com01_c.inc"
81#include "com04_c.inc"
82#include "parit_c.inc"
83#include "task_c.inc"
84C-----------------------------------------------
85C D u m m y A r g u m e n t s
86C-----------------------------------------------
87 INTEGER ,INTENT(IN) :: NSENSOR
88 INTEGER, INTENT(in) :: SICONTACT !< dimension if icontact
89 INTEGER, INTENT(in) :: SPORO !< dimension if poro
90 INTEGER NPC(*),MONVOL(*),FR_MV(NSPMD+2,NVOLU),IADMV(4,*),ICONTACT(SICONTACT),IPARG(NPARG,*),
91 . IGEO(NPROPGI,*),IPART(*),IPARTC(*), IPARTTG(*),IPM(NPROPMI,*),IGROUPC(*), IGROUPTG(*)
92 INTEGER FLAG ! 1 => Monvol, 2 => FVMBAG type 6 8
93 INTEGER, DIMENSION(NSPMD+2), INTENT(in) :: FRONTIER_GLOBAL_MV !< global mpi frontier
94 my_real X(3,*), A(3,*), TF(*), V(3,*), NORMAL(3,*), PORO(*),
95 . VOLMON(*),FSAV(NTHVKI,*),FSKY(*),GEO(NPROPG,*),PM(NPROPM,*),FEXT(*)
96 TYPE(elbuf_struct_), DIMENSION(NGROUP) :: ELBUF_TAB
97 TYPE(h3d_database) :: H3D_DATA
98 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
99 TYPE(monvol_struct_), DIMENSION(NVOLU), INTENT(INOUT) :: T_MONVOL
100 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR), INTENT(IN) :: SENSOR_TAB
101 TYPE(output_),INTENT(INOUT) :: OUTPUT
102 TYPE(python_), INTENT(IN) :: PYTHON
103C-----------------------------------------------
104C N(3,*) NORMALE STOCKEE DANS WA
105C PORO(*) STOCKE DANS WA
106C-----------------------------------------------
107C L o c a l V a r i a b l e s
108C-----------------------------------------------
109 INTEGER I,ITYP,NCA,NN,IS,K1,K2,K6,KK1,KK2,PMAIN,KIBJET,KRBJET,KIBHOL,KRBHOL,NJET,IADJET,RADJET,NVENT,IADHOL,RADHOL
110 my_real, dimension(nvolu) :: vol
111 integer :: uid
112
113C
114 K1 = 1
115 kk1= 1
116 DO i=1,nvolu
117 ityp=monvol(k1+1)
118 IF(ityp==4.OR.ityp==5.OR.ityp==7.OR.ityp==9)THEN
119 volmon(kk1+31-1)=volmon(kk1+12-1)
120 ENDIF
121 k1 = k1 + nimv
122 kk1 = kk1 + nrvolu
123 ENDDO
124 ! ----------
125 ! compute the airbag's volume & area
126 if(flag==1) then
127 call get_volume_area(ispmd,nspmd,numelc,numeltg,
128 . nvolu,nsurf,intbag,sporo,
129 . numnod,sicontact,nimv,nrvolu,
130 . monvol,volmon,vol,x,
131 . normal,icontact,poro,fr_mv,
132 . frontier_global_mv, t_monvol,igrsurf )
133 endif
134 ! ----------
135
136 k1 = 1
137 k6 = 1
138 kk1 = 1
139 k2 = 1 + nimv*nvolu
140 kk2 = 1 + nrvolu * nvolu
141 kibjet = k2 + licbag
142 kibhol = kibjet + libagjet
143 krbjet = kk2 + lrcbag
144 krbhol = krbjet + lrbagjet
145
146 DO i=1,nvolu
147 uid = monvol(k1)
148 ityp = monvol(k1+1)
149 nca = monvol(k1+2)
150 is = monvol(k1+3)
151 nn = igrsurf(is)%NSEG
152
153 njet = monvol(k1 + 7)
154 iadjet= kibjet+monvol(k1+ 8)
155 radjet= krbjet+monvol(k1+ 9)
156 nvent = monvol(k1 +10)
157 iadhol= kibhol+monvol(k1+11)
158 radhol= krbhol+monvol(k1+12)
159 IF(fr_mv(ispmd+1,i)/=0 .OR. fr_mv(nspmd+2,i)==ispmd+1) THEN
160 pmain = fr_mv(nspmd+2,i)
161 ELSE
162C saut partie airbag si proc non concerne
163 GO TO 100
164 ENDIF
165 IF(ityp == 6 .OR. ityp == 8) GO TO 100
166C
167
168 IF(flag == 1 .AND. (ityp == 6 .OR. ityp == 8)) GOTO 100
169 IF(flag == 2 .AND. .NOT.(ityp == 6 .OR. ityp == 8)) GOTO 100
170
171 IF(ityp==1)THEN
172C=======================================================================
173C VOLUME OUTPUT
174C=======================================================================
175 CALL volout(volmon(kk1),vol(i),fsav(1,i),pmain)
176 ELSEIF(ityp==2)THEN
177C=======================================================================
178C VOLUME P=F(V)
179C=======================================================================
180 CALL volpfv(monvol(k1),volmon(kk1),vol(i),fsav(1,i),npc,
181 2 tf ,pmain , output%TH%WFEXT, python, nfunct)
182 ELSEIF(ityp==3)THEN
183C=======================================================================
184C GAS PARFAIT
185C=======================================================================
186 CALL volpvga(monvol(k1),volmon(kk1),vol(i),fsav(1,i),nvent ,
187 2 monvol(iadhol) ,volmon(radhol),pmain, output%TH%WFEXT )
188 ELSEIF(ityp==4.OR.ityp==5)THEN
189C=======================================================================
190C AIRBAGS
191C=======================================================================
192 CALL airbaga(monvol(k1),njet ,monvol(iadjet),nvent ,monvol(iadhol),
193 2 monvol(k2),volmon(kk1),volmon(radjet),volmon(radhol),volmon(kk2),
194 3 volmon ,npc ,tf ,nsensor ,sensor_tab ,
195 4 vol(i) ,pmain ,output%TH%WFEXT, python)
196 ELSEIF(ityp==7.OR.ityp==9)THEN
197C=======================================================================
198C AIRBAGS1 (NOUVEAUX INJECTEURS)
199C=======================================================================
200 CALL airbaga1(monvol(k1),njet ,monvol(iadjet),nvent ,monvol(iadhol),
201 2 monvol(k2),volmon(kk1),volmon(radjet),volmon(radhol),volmon(kk2),
202 3 volmon ,npc ,tf ,nsensor ,sensor_tab ,
203 4 vol(i) ,pmain ,geo ,igeo ,pm, output%TH%WFEXT,python)
204 ELSEIF(ityp==10)THEN
205C=======================================================================
206C LINEAIRE FLUIDE
207C=======================================================================
208 CALL volp_lfluid(monvol(k1),volmon(kk1),vol(i),fsav(1,i),npc,
209 2 tf ,pmain, output ,python,nfunct)
210 ENDIF
211C=======================================================================
212 IF(ityp/=1)THEN
213 IF (iparit==0) THEN
214 CALL volpre(monvol(k1),volmon(kk1),njet ,monvol(iadjet),volmon(radjet),
215 2 nsensor ,sensor_tab ,x ,v ,a ,
216 3 t_monvol(i)%normal ,npc ,tf ,nn ,igrsurf(is)%NODES,
217 4 fext ,h3d_data,igrsurf(is)%ELTYP,igrsurf(is)%ELEM, output%TH%WFEXT,python)
218 ELSE
219 CALL volprep(monvol(k1),volmon(kk1),njet ,monvol(iadjet),volmon(radjet),
220 2 nsensor ,sensor_tab ,x ,v ,a ,
221 3 t_monvol(i)%normal ,npc ,tf ,nn ,igrsurf(is)%NODES,
222 4 iadmv(1,k6),fsky ,fsky ,fext, h3d_data ,
223 5 igrsurf(is)%ELTYP,igrsurf(is)%ELEM,
224 5 t_monvol(i)%OMP_OUTPUT%NODE_NUMBER,t_monvol(i)%OMP_OUTPUT%TOTAL_CONTRIBUTION_NUMBER,
225 6 t_monvol(i)%OMP_OUTPUT%CONTRIBUTION_INDEX,t_monvol(i)%OMP_OUTPUT%CONTRIBUTION_NUMBER,
226 7 t_monvol(i)%OMP_OUTPUT%NODE_ID,t_monvol(i)%OMP_OUTPUT%CONTRIBUTION,output%TH%WFEXT,python)
227 ENDIF
228 ENDIF
229 t_monvol(i)%UID = uid ! store the uid of the monitored volume
230 t_monvol(i)%volume = vol(i)
231 t_monvol(i)%pressure = volmon(kk1+12-1)
232 t_monvol(i)%temperature = volmon(kk1+13-1)
233 t_monvol(i)%area = volmon(kk1+18-1)
234
235 100 CONTINUE
236c CALL SPMD_BARRIER()
237 k1 = k1 + nimv
238 kk1= kk1 + nrvolu
239 k2 = k2 + nicbag*nca
240 kk2= kk2 + nrcbag*nca
241 k6 = k6 + nn
242
243 ENDDO
244C
245C=======================================================================
246 k1 = 1
247 k2 = 1 + nimv * nvolu
248 kk1 = 1
249 kk2 = 1 + nrvolu * nvolu
250 DO i=1,nvolu
251 ityp = monvol(k1+1)
252 is = monvol(k1+3)
253 nca = monvol(k1+2)
254 nn = igrsurf(is)%NSEG
255 njet = monvol(k1+7)
256 iadjet=kibjet+monvol(k1+ 8)
257 radjet=krbjet+monvol(k1+ 9)
258 nvent =monvol(k1 +10)
259 iadhol=kibhol+monvol(k1+11)
260 radhol=krbhol+monvol(k1+12)
261 IF(fr_mv(ispmd+1,i)==0.AND.nca==0) THEN
262 GO TO 200
263 ENDIF
264 IF(flag == 1 .AND. (ityp == 6 .OR. ityp == 8)) GOTO 200
265 IF(flag == 2 .AND. .NOT.(ityp == 6 .OR. ityp == 8)) GOTO 200
266
267C=======================================================================
268C PERFECT GAS
269C=======================================================================
270 IF(ityp==3)THEN
271 CALL volpvgb(
272 1 monvol(k1) ,volmon(kk1) ,vol(i) ,fsav(1,i) ,nvent ,
273 2 monvol(iadhol),volmon(radhol),normal,nn ,igrsurf,
274 3 iparg ,elbuf_tab,fr_mv(1,i), igroupc, igrouptg)
275C=======================================================================
276C AIRBAGS
277C=======================================================================
278 ELSEIF(ityp==4.OR.ityp==5.OR.ityp==7.OR.ityp==9)THEN
279 IF(nca>0.AND.nspmd>1) THEN
280 CALL spmd_mv_ca(
281 1 fr_mv ,i ,nca,volmon(kk1),volmon,
282 2 monvol(k2),njet ,monvol ,volmon(krbjet),1,ityp,100 )
283 IF(fr_mv(ispmd+1,i)==0) GOTO 150
284 END IF
285C=======================================================================
286C AIRBAGS /AIRBAG1 /COMMU1
287C=======================================================================
288 IF (ityp==7.OR.ityp==9) THEN
289 CALL airbagb1(monvol(k1),monvol(k2),njet ,monvol(iadjet),nvent,
290 2 monvol(iadhol),volmon(kk1),volmon ,volmon(kk2),volmon(radjet),
291 3 volmon(radhol),fsav(1,i) ,normal ,nn ,
292 4 igrsurf ,poro ,monvol ,volmon(krbjet),
293 5 fr_mv(1,i) ,iparg ,ipart ,ipartc ,iparttg,
294 6 ipm ,pm ,elbuf_tab,igroupc ,igrouptg,
295 7 igeo ,geo )
296 ELSE
297C=======================================================================
298C AIRBAGS /AIRBAG /COMMU
299C=======================================================================
300 CALL airbagb(monvol(k1),monvol(k2),njet ,monvol(iadjet),nvent,
301 2 monvol(iadhol),volmon(kk1),volmon ,volmon(kk2),volmon(radjet),
302 3 volmon(radhol),fsav(1,i) ,normal ,nn ,
303 4 igrsurf ,poro ,monvol ,volmon(krbjet),
304 5 fr_mv(1,i))
305 END IF
306C
307 150 CONTINUE
308 IF(nca>0.AND.nspmd>1) THEN
309 CALL spmd_mv_ca(
310 1 fr_mv ,i ,nca,volmon(kk1),volmon,
311 2 monvol(k2),njet ,monvol ,volmon(krbjet),2,ityp,100)
312 END IF
313 ENDIF
314 200 CONTINUE
315 k1 = k1 + nimv
316 k2 = k2 + nicbag * nca
317 kk1 = kk1 + nrvolu
318 kk2 = kk2 + nrcbag * nca
319 ENDDO
320 RETURN
321 END
subroutine airbaga(ivolu, njet, ibagjet, nvent, ibaghol, icbag, rvolu, rbagjet, rbaghol, rcbag, rvoluv, npc, tf, nsensor, sensor_tab, vol, pmain, wfext, python)
Definition airbag1.F:36
subroutine airbagb(ivolu, icbag, njet, ibagjet, nvent, ibaghol, rvolu, rvoluv, rcbag, rbagjet, rbaghol, fsav, normal, nn, igrsurf, poro, ivoluv, rbagvjet, fr_mv)
Definition airbag2.F:40
subroutine airbaga1(ivolu, njet, ibagjet, nvent, ibaghol, icbag, rvolu, rbagjet, rbaghol, rcbag, rvoluv, npc, tf, nsensor, sensor_tab, vol, pmain, geo, igeo, pm, wfext, python)
Definition airbaga1.F:37
subroutine airbagb1(ivolu, icbag, njet, ibagjet, nvent, ibaghol, rvolu, rvoluv, rcbag, rbagjet, rbaghol, fsav, normal, nn, igrsurf, poro, ivoluv, rbagvjet, fr_mv, iparg, ipart, ipartc, iparttg, ipm, pm, elbuf_tab, igroupc, igrouptg, igeo, geo)
Definition airbagb1.F:46
subroutine monvol0(monvol, volmon, x, a, npc, tf, v, normal, fsav, nsensor, sensor_tab, igrsurf, fr_mv, iadmv, sicontact, sporo, fsky, icontact, poro, iparg, elbuf_tab, geo, igeo, pm, ipm, ipart, ipartc, iparttg, igroupc, igrouptg, fext, flag, h3d_data, t_monvol, frontier_global_mv, output, python)
Definition monvol0.F:61
subroutine spmd_mv_ca(fr_mv, iv, nav, rvolu, rvoluv, icbag, njet, ivoluv, rbagvjet, iflag, ityp, ngases)
Definition spmd_mv_ca.F:35
subroutine volout(rvolu, vol, fsav, pmain)
Definition volout.F:29
subroutine volp_lfluid(ivolu, rvolu, vol, fsav, npc, tf, pmain, output, python, nfunct)
Definition volp_lfluid.F:33
subroutine volpfv(ivolu, rvolu, vol, fsav, npc, tf, pmain, wfext, python, nfunct)
Definition volpfv.F:33
subroutine volpre(ivolu, rvolu, njet, ibagjet, rbagjet, nsensor, sensor_tab, x, v, a, normal, npc, tf, nn, surf_nodes, fext, h3d_data, surf_eltyp, surf_elem, wfext, python)
Definition volpres.F:37
subroutine volprep(ivolu, rvolu, njet, ibagjet, rbagjet, nsensor, sensor_tab, x, v, a, normal, npc, tf, nn, surf_nodes, iadmv, fsky, fskyv, fext, h3d_data, surf_eltyp, surf_elem, node_number, total_contribution_number, contribution_index, contribution_number, node_id, contribution, wfext, python)
Definition volpresp.F:40
subroutine volpvga(ivolu, rvolu, vol, fsav, nvent, ibaghol, rbaghol, pmain, wfext)
Definition volpvg.F:31
subroutine volpvgb(ivolu, rvolu, vol, fsav, nvent, ibaghol, rbaghol, normal, nn, igrsurf, iparg, elbuf_tab, fr_mv, igroupc, igrouptg)
Definition volpvg.F:208