OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ale51_antidiff3.F File Reference
#include "implicit_f.inc"
#include "mvsiz_p.inc"
#include "spmd_c.inc"
#include "com01_c.inc"
#include "com04_c.inc"
#include "com08_c.inc"
#include "vect01_c.inc"
#include "inter22.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine ale51_antidiff3 (flux, ale_connect, alph, vol, ixs, flux_vois, n4_vois, itab, nv46, itrimat, segvar)

Function/Subroutine Documentation

◆ ale51_antidiff3()

subroutine ale51_antidiff3 ( flux,
type(t_ale_connectivity), intent(in) ale_connect,
alph,
vol,
integer, dimension(nixs,numels) ixs,
flux_vois,
integer, dimension(numels+nsvois,8) n4_vois,
integer, dimension(numnod) itab,
integer nv46,
integer itrimat,
type(t_segvar), intent(in) segvar )

Definition at line 35 of file ale51_antidiff3.F.

38C-----------------------------------------------
39C D e c r i p t i o n
40C-----------------------------------------------
41C
42C ** Warning, this formulation (for volume fractions) using \eta_3 parameter from /UPWIND option is not conservative.
43C It was marked as obsolete. Forget it and use MUSCL instead
44C
45C-----------------------------------------------
46C M o d u l e s
47C-----------------------------------------------
49 USE i22tri_mod
50 USE segvar_mod
52 USE ale_mod
53 use element_mod , only : nixs
54C-----------------------------------------------
55C I m p l i c i t T y p e s
56C-----------------------------------------------
57#include "implicit_f.inc"
58C-----------------------------------------------
59C G l o b a l P a r a m e t e r s
60C-----------------------------------------------
61#include "mvsiz_p.inc"
62C-----------------------------------------------
63C C o m m o n B l o c k s
64C-----------------------------------------------
65#include "spmd_c.inc"
66#include "com01_c.inc"
67#include "com04_c.inc"
68#include "com08_c.inc"
69#include "vect01_c.inc"
70#include "inter22.inc"
71C-----------------------------------------------
72C D u m m y A r g u m e n t s
73C-----------------------------------------------
74 INTEGER IXS(NIXS,NUMELS),N4_VOIS(NUMELS+NSVOIS,8),ITAB(NUMNOD),NV46,ITRIMAT
75 my_real flux(nv46,*),alph(*),vol(*),flux_vois(numels+nsvois,nv46)
76 TYPE(t_segvar),INTENT(IN) :: SEGVAR
77 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
78C-----------------------------------------------
79C L o c a l V a r i a b l e s
80C-----------------------------------------------
81 INTEGER I,J,II,K,JV(NV46),KV(NV46),IFV,NIN, ib, ie,ISKIP(MVSIZ),IEV,IAD2, IAD3
82 my_real vol0,av0,uav0,alphi,ualphi,aaa,ff(nv46),udt,phi0,facev
83 my_real :: debug_tmp
84 LOGICAL :: debug_outp
85C-----------------------------------------------
86C S o u r c e L i n e s
87C-----------------------------------------------
88
89 !----------------------------------------------
90 ! WET SURFACE
91 !-----------------------------------------------
92 IF(dt1 > zero)THEN
93 udt = one/dt1
94 ELSE
95 udt = zero
96 ENDIF
97
98 !INTER22
99 nin = 1
100
101 !INTERFACE 22 ONLY - OUTPUT---------------!
102 debug_outp = .false.
103 if(int22>0)then
104 if(ibug22_antidiff /= 0)then
105 debug_outp = .false.
106 if(ibug22_antidiff > 0)then
107 do i=lft,llt
108 ie=i+nft
109 if(ixs(11,ie) == ibug22_antidiff)then
110 debug_outp=.true.
111 exit
112 endif
113 enddo
114 elseif(ibug22_antidiff==-1)then
115 debug_outp = .true.
116 endif
117 if(((itrimat /= ibug22_itrimat).and.(ibug22_itrimat /= -1)))debug_outp=.false.
118 endif
119 if(debug_outp)then
120 print *, " |----ale51_antidiff3.F-----|"
121 print *, " | THREAD INFORMATION |"
122 print *, " |--------------------------|"
123 print *, " NCYCLE =", ncycle
124 print *, " ITRIMAT =", itrimat
125 endif
126 endif
127
128 !INTER22 : skip bricks in cut cell buffer
129 nin = 1
130 iskip(1:mvsiz) = zero
131 IF(int22>0)THEN
132 DO i=lft,llt
133 ib=iiad22(nin,i+nft)
134 IF(ib /= 0)iskip(i)=1
135 ENDDO
136 ENDIF
137
138 DO i=lft,llt
139 IF(iskip(i)==1)cycle !unplug for cut cells.
140 ii = i + nft
141 iad2 = ale_connect%ee_connect%iad_connect(ii)
142 vol0 = vol(i)*udt
143 av0 = alph(ii) * vol0
144 uav0 = vol0 - av0
145 alphi = zero
146 ualphi = zero
147 phi0 = zero
148 !-----------------------------------------------
149 ! face number from adjacent elem
150 ! & total volume flux (outgoing)
151 !-----------------------------------------------
152 DO k=1,nv46
153 IF(flux(k,ii) > zero)THEN
154 jv(k) = ale_connect%ee_connect%connected(iad2 + k - 1)
155 kv(k) = k
156 IF(jv(k) == 0)THEN
157 jv(k) = ii
158 ff(k) = alph(ii)*flux(k,ii)
159 ELSEIF(jv(k) < 0)THEN
160 !case <0 : ebcs (-IVOIS is then segment identifier)
161 ff(k) = segvar%PHASE_ALPHA(itrimat,-jv(k)) * flux(k,ii)
162 ELSEIF(jv(k) <= numels)THEN
163 iad3 = ale_connect%ee_connect%iad_connect(jv(k))
164 DO j=1,nv46
165 IF(ale_connect%ee_connect%connected(iad3 + j - 1) == ii) kv(k) = j
166 ENDDO
167 ff(k) = alph(jv(k))*flux(k,ii)
168 ELSE
169 !spmd
170 ff(k) = alph(jv(k))*flux(k,ii)
171 ENDIF
172 !outgoing volume flux (estimation)
173 alphi = alphi + ff(k)
174 !outgoing volume flux (initial)
175 phi0 = phi0 + flux(k,ii)
176 ENDIF
177 ENDDO
178 !outgoing rest (estimation)
179 ualphi = phi0 - alphi
180 !-----------------------------------------------
181 ! outgoing volume flux (by face)
182 !-----------------------------------------------
183 IF(alphi > av0.AND.av0 > zero)THEN
184 !-----------------------------------------------
185 ! outgoing volume flux > volume
186 !-----------------------------------------------
187 aaa = av0 / alphi
188 DO k=1,nv46
189 IF(flux(k,ii) > zero)THEN
190 ff(k) = ff(k) * aaa
191 ENDIF
192 ENDDO
193 ELSEIF(ualphi > uav0.AND.uav0 > zero)THEN
194 !-----------------------------------------------
195 ! outgoing rest > available
196 !-----------------------------------------------
197 aaa = uav0/ualphi
198 DO k=1,nv46
199 IF(flux(k,ii) > zero)THEN
200 ff(k) = flux(k,ii) + (ff(k)-flux(k,ii))*aaa
201 ENDIF
202 ENDDO
203 ENDIF
204 !-----------------------------------------------
205 ! outgoing volume fluxes
206 !-----------------------------------------------
207 DO k=1,nv46
208 IF(flux(k,ii) > zero)THEN
209 ff(k) = half * ( ff(k)*(one-ale%UPWIND%UPWSM)+alph(ii)*flux(k,ii)*(one+ale%UPWIND%UPWSM) )
210
211 !INTERFACE 22 ONLY------------------------! (OBSOLETE)
212 if(int22>0)then
213 if(debug_outp)then
214 if(ibug22_antidiff == ixs(11,i+nft) .OR. ibug22_antidiff == -1)then
215 print *, " brique =", ixs(11,i+nft)
216 print *, " FACE =", k
217 write (*,fmt='(A,6E26.14)')" WAS Flux(J) =", flux(k,ii)
218 write (*,fmt='(A,6E26.14)')" IS Flux(J) =", ff(k)
219 print *, " ------------------------"
220 endif
221 endif
222 endif
223 !-----------------------------------------!
224
225
226 flux(k,ii) = ff(k)
227
228 IF(jv(k) < 0)THEN
229 ! do nothing
230 ELSEIF(jv(k) <= numels)THEN
231 IF(int22 == 0)THEN
232 debug_tmp = flux(kv(k),jv(k))
233 flux(kv(k),jv(k)) = -flux(k,ii)
234 ELSE
235 IF(iiad22(nin,jv(k))==0)THEN
236 !NOT IN CUT CELL BUFFER(INTER22)
237 debug_tmp = flux(kv(k),jv(k))
238 flux(kv(k),jv(k)) = -flux(k,ii)
239 ELSE
240 !IN CUT CELL BUFFER (INTER22)
241 nin = 1
242 ifv = kv(k)
243 !(icellv,iadjv) = (1,1) since it is supposed to be an uncut cell from cut cell buffer (TZINF ensures this)
244 debug_tmp = brick_list(nin,iiad22(nin,jv(k)))%POLY(1)%FACE(ifv)%Adjacent_UpwFLUX(1)
245 brick_list(nin,iiad22(nin,jv(k)))%POLY(1)%FACE(ifv)%Adjacent_UpwFLUX(1) = -flux(k,ii)
246 ENDIF
247 ENDIF
248 ELSE
249 flux_vois(ii,k) = flux(k,ii) !Sign is updated in AFLUX3TA after calling SPMD_I8VOIS
250 n4_vois(ii,1) = itab(ixs(2,ii))
251 n4_vois(ii,2) = itab(ixs(3,ii))
252 n4_vois(ii,3) = itab(ixs(4,ii))
253 n4_vois(ii,4) = itab(ixs(5,ii))
254 n4_vois(ii,5) = itab(ixs(6,ii))
255 n4_vois(ii,6) = itab(ixs(7,ii))
256 n4_vois(ii,7) = itab(ixs(8,ii))
257 n4_vois(ii,8) = itab(ixs(9,ii))
258 ENDIF
259
260 !INTERFACE 22 ONLY------------------------!
261 if(int22>0)then
262 if(debug_outp)then
263 if(ibug22_antidiff == ixs(11,i+nft) .OR. ibug22_antidiff == -1)then
264 iev = jv(k)
265 facev=kv(k)
266 print *, " => Setting adjacent flux consequently :"
267 print *, " brique.V=", ixs(11,iev)
268 print *, " FACE.V =", ifv
269 write (*,fmt='(A,6E26.14)')
270 . " WAS Flux(J) =", debug_tmp
271 write (*,fmt='(A,6E26.14)')
272 . " IS Flux(J) =", -flux(k,ii)
273 print *, " ---"
274 endif
275 endif
276 endif
277 !-----------------------------------------!
278
279 ENDIF
280 ENDDO
281C-----------------------------------------------
282C incoming volume flux from EBCS
283C-----------------------------------------------
284 IF(nsegflu > 0)THEN
285 iad2 = ale_connect%ee_connect%iad_connect(ii)
286 DO k=1,nv46
287 IF(flux(k,ii) < zero .AND. ale_connect%ee_connect%connected(iad2 + k - 1) < 0)THEN
288 flux(k,ii) = segvar%PHASE_ALPHA(itrimat,-ale_connect%ee_connect%connected(iad2 + k - 1))*flux(k,ii)
289 ENDIF
290 ENDDO
291 ENDIF
292
293C-------------
294 enddo!next I
295C-----------------------------------------------
296 RETURN
#define my_real
Definition cppsort.cpp:32
type(ale_) ale
Definition ale_mod.F:253
type(brick_entity), dimension(:,:), allocatable, target brick_list