OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ale51_upwind3_int22.F File Reference
#include "implicit_f.inc"
#include "mvsiz_p.inc"
#include "com01_c.inc"
#include "vect01_c.inc"
#include "param_c.inc"
#include "inter22.inc"
#include "task_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine ale51_upwind3_int22 (pm, ixs, itrimat, iflg, iparg, elbuf_tab, itask)

Function/Subroutine Documentation

◆ ale51_upwind3_int22()

subroutine ale51_upwind3_int22 ( pm,
integer, dimension(nixs,*) ixs,
integer, intent(in) itrimat,
integer, intent(in) iflg,
integer, dimension(nparg,*) iparg,
type(elbuf_struct_), dimension(ngroup), target elbuf_tab,
integer itask )

Definition at line 38 of file ale51_upwind3_int22.F.

41C-----------------------------------------------
42C D e s c r i p t i o n
43C-----------------------------------------------
44C 'alefvm' is related to a collocated scheme (built from FVM and based on Godunov scheme)
45C which was temporarily introduced for experimental option /INTER/TYPE22 (FSI coupling with cut cell method)
46C This cut cell method is not completed, abandoned, and is not an official option.
47C There is no other use for this scheme which is automatically enabled when /INTER/TYPE22 is defined (INT22>0 => IALEFVM=1).
48C
49C This subroutines computes from direct fluxes :
50C -1- FLUXES
51C -2- QMV(7:12) : QMV*DT = OUTGOING VOLUME (DT*FLUX(i,i) is INCOMING ONE), FLU1 IS SUM OF QMV
52C -3- DDVOL : D/DV . D/DT . VOL = DV/DT
53C
54C-----------------------------------------------
55C M o d u l e s
56C-----------------------------------------------
58 USE i22tri_mod
59 USE elbufdef_mod
60 USE multimat_param_mod , ONLY : m51_n0phas, m51_nvphas
61 use element_mod , only : nixs
62C-----------------------------------------------
63C I m p l i c i t T y p e s
64C-----------------------------------------------
65#include "implicit_f.inc"
66C-----------------------------------------------
67C G l o b a l P a r a m e t e r s
68C-----------------------------------------------
69#include "mvsiz_p.inc"
70C-----------------------------------------------
71C C o m m o n B l o c k s
72C-----------------------------------------------
73#include "com01_c.inc"
74#include "vect01_c.inc"
75#include "param_c.inc"
76#include "inter22.inc"
77#include "task_c.inc"
78C-----------------------------------------------
79C D u m m y A r g u m e n t s
80C-----------------------------------------------
81 INTEGER,INTENT(IN) :: ITRIMAT,IFLG
82 INTEGER IXS(NIXS,*), IPARG(NPARG,*),ITASK
83 my_real :: pm(npropm,*)
84 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
85C-----------------------------------------------
86C L o c a l V a r i a b l e s
87C-----------------------------------------------
88 INTEGER :: J,K,ISILENT, MLW, MAT
89 my_real :: reduc
90 INTEGER :: NBF,NBL, MCELL,ICELLv
91 INTEGER :: NUM, NADJ, IADJ, JV, NG
92
93 INTEGER :: IB,IBv, NIN, ICELL,NCELL,IDLOC
94 INTEGER :: IE,IDV,ADD, IE_M
95 my_real :: cellflux(6,9,nb),upwl(6)
96
97 my_real, DIMENSION(:), POINTER :: uvar,pddvol
98 my_real :: ddvol
99
100 LOGICAL :: debug_outp
101C-----------------------------------------------
102C P r e - C o n d i t i o n s
103C-----------------------------------------------
104 IF(trimat==0)RETURN
105 IF(int22==0)RETURN
106C-----------------------------------------------
107C S o u r c e L i n e s
108C-----------------------------------------------
109
110 !=================
111 ! INITIALIZATIONS
112 !=================
113 nin = 1
114 nbf = 1+itask*nb/nthread
115 nbl = (itask+1)*nb/nthread
116 nbl = min(nbl,nb)
117
118
119 !INTERFACE 22 ONLY - OUTPUT---------------!
120 debug_outp = .false.
121 if(ibug22_upwind/=0)then
122 if(ibug22_upwind>0)then
123 do ib=nbf,nbl
124 ie = brick_list(nin,ib)%id
125 mlw = brick_list(nin,ib)%mlw
126 if(ixs(11,ie)==ibug22_upwind)debug_outp=.true.
127 if(mlw/=51)debug_outp=.false.
128 enddo
129 elseif(ibug22_upwind==-1)then
130 debug_outp = .true.
131 endif
132 if(((itrimat/=ibug22_itrimat).and.(ibug22_itrimat/=-1)))debug_outp=.false.
133 endif
134 if(debug_outp)then
135 print *, " |----ale51_upwind3_int22.F-----|"
136 print *, " | THREAD INFORMATION |"
137 print *, " |------------------------------|"
138 print *, " NCYCLE =", ncycle
139 print *, " ITRIMAT=", itrimat
140 endif
141
142 !======================================================!
143 ! STEP B : NON CONFORM MESH !
144 ! USE CONSISTENT FLUX !
145 !======================================================!
146 DO ib=nbf,nbl
147 ie = brick_list(nin,ib)%ID
148 mlw = brick_list(nin,ib)%MLW
149 ncell = brick_list(nin,ib)%NBCUT
150 mcell = brick_list(nin,ib)%MainID
151 icell = 0
152 idloc = brick_list(nin,ib)%IDLOC
153 IF(mlw/=51)cycle
154 DO WHILE (icell<=ncell) ! loop on polyhedron {1:NCELL} U {9}
155 icell = icell +1
156 IF (icell>ncell .AND. ncell/=0)icell=9
157 !======================================================!
158 ! MULTIMATERIAL UPWIND TREATMENT !
159 !======================================================!
160 ie_m = brick_list(nin,ib)%POLY(icell)%WhereIsMain(3)
161 mat = ixs(1,ie_m)
162 upwl(1:6) = pm(16,mat)
163 reduc = pm(92,mat)
164 ddvol = zero
165 brick_list(nin,ib)%POLY(icell)%Adjacent_FLU1 = zero
166 DO j=1,6
167 nadj = brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
168 DO iadj = 1,nadj
169 idv = brick_list(nin,ib)%Adjacent_Brick(j,1)
170 ibv = brick_list(nin,ib)%Adjacent_Brick(j,4)
171 jv = brick_list(nin,ib)%Adjacent_Brick(j,5)
172 icellv = brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_Cell(iadj)
173 cellflux(j,icell,ib) = brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_UpwFLUX(iadj)
174 IF(idv==0)THEN
175 cellflux(j,icell,ib)=cellflux(j,icell,ib)*reduc
176 ELSEIF(idv>0)THEN
177 ng = brick_list(nin,ib)%NG
178 isilent = iparg(64,ng)
179 IF(isilent==1)THEN
180 upwl(j)=one
181 cellflux(j,icell,ib)=cellflux(j,icell,ib)*pm(92,ixs(1,idv))
182 ENDIF
183 ENDIF
184 brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_upwFLUX(iadj) = cellflux(j,icell,ib)-upwl(j)*abs(cellflux(j,icell,ib))
185 brick_list(nin,ib)%POLY(icell)%Adjacent_FLU1 =
186 . brick_list(nin,ib)%POLY(icell)%Adjacent_FLU1 + cellflux(j,icell,ib)+upwl(j)*abs(cellflux(j,icell,ib))
187 IF(iflg==10)THEN
188 ddvol = ddvol + cellflux(j,icell,ib)
189C DDVOL = DDVOL + cellFLUX(J,ICELL,IB)+UPWL(J)*ABS(cellFLUX(J,ICELL,IB))
190C DDVOL = DDVOL + cellFLUX(J,ICELL,IB)-UPWL(J)*ABS(cellFLUX(J,ICELL,IB))
191 !DDVOL*DT IS SUM FOR INCOMING AND OUTCOMING VOLUMES. 2 * Sum(Nadj(j),j=1..6)
192 ENDIF
193 enddo!next IADJ
194 enddo!next J
195
196 brick_list(nin,ib)%POLY(icell)%DDVOL_upw = ddvol !HALF*DDVOL
197
198 !INTERFACE 22 ONLY - OUTPUT---------------!
199!#!include "lockon.inc"
200 if(debug_outp)then
201 if(ibug22_upwind==ixs(11,ie) .OR. ibug22_upwind==-1)then
202 print *, " brique =", ixs(11,ie)
203 print *, " icell =", icell
204 write (*,fmt='(A,1E26.14)') " Flu1 =", brick_list(nin,ib)%POLY(icell)%Adjacent_FLU1
205 DO j=1,6
206 nadj = brick_list(nin,ib)%POLY(icell)%FACE(j)%NAdjCell
207 DO iadj = 1,nadj
208 print *, " FACE =", j
209 write (*,fmt='(A,6E26.14)') " Flux(IAD:NADJ) =", brick_list(nin,ib)%POLY(icell)%FACE(j)%Adjacent_upwFLUX(iadj)
210 ENDDO
211 ENDDO
212 print *, " ------------------------"
213!#!include "lockoff.inc"
214 endif
215 endif
216
217
218 !======================================================!
219 enddo!next ICELL
220 enddo!next IB
221
222 !==============!
223 CALL my_barrier
224 !==============!
225
226 !---------------------------------------------------------!
227 ! SECND CELLS STACK !
228 !---------------------------------------------------------!
229 !STACK Secnd cells values from ones connected to current main cell
230 nin = 1
231 DO ib=nbf,nbl
232 ng = brick_list(nin,ib)%NG
233 ie = brick_list(nin,ib)%ID
234 idloc = brick_list(nin,ib)%IDLOC
235 mlw = brick_list(nin,ib)%MLW
236 num = brick_list(nin,ib)%SecndList%Num
237 mcell = brick_list(nin,ib)%mainID
238 IF(mlw/=51)cycle
239 ddvol = zero
240 DO k=1,num
241 ibv = brick_list(nin,ib)%SecndList%IBV(k)
242 icellv = brick_list(nin,ib)%SecndList%ICELLv(k)
243 ddvol = ddvol + brick_list(nin,ibv)%POLY(icellv)%DDVOL_upw
244 ENDDO
245 ddvol = ddvol + brick_list(nin,ib)%POLY(mcell)%DDVOL_upw
246 !updating law51 material buffer with computed stacked value
247 IF(itrimat>0)THEN
248 lft = 1
249 llt = iparg(2,ng)
250 uvar => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR
251 add = (m51_n0phas + (itrimat-1)*m51_nvphas+12)*llt
252 pddvol => uvar(add+1:add+llt)
253 pddvol(idloc) = ddvol !*Half: already apply 1/2 factor
254 if(ixs(11,ie)==26354)then
255 print *, "itrimat, ddvoli", itrimat, ddvol
256 endif
257 ELSE
258 brick_list(nin,ib)%POLY(mcell)%DDVOL_upw = ddvol
259 ENDIF
260 enddo!next IB
261
262
263 RETURN
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
type(brick_entity), dimension(:,:), allocatable, target brick_list
subroutine my_barrier
Definition machine.F:31