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

Go to the source code of this file.

Functions/Subroutines

subroutine ale51_antidiff2 (flux, ale_connect, alph, vol, ixq, flux_vois, n4_vois, itab, itrimat, segvar)

Function/Subroutine Documentation

◆ ale51_antidiff2()

subroutine ale51_antidiff2 ( flux,
type(t_ale_connectivity), intent(in) ale_connect,
alph,
vol,
integer, dimension(nixq,numelq) ixq,
flux_vois,
integer, dimension(numelq+nqvois,4) n4_vois,
integer, dimension(numnod) itab,
integer, intent(in) itrimat,
type(t_segvar), intent(in) segvar )

Definition at line 32 of file ale51_antidiff2.F.

35C-----------------------------------------------
36C D e c r i p t i o n
37C-----------------------------------------------
38C
39C ** Warning, this formulation (for volume fractions) using \eta_3 parameter from /UPWIND option is not conservative.
40C It was marked as OBSOLETE. Forget it and use MUSCL instead
41C
42C-----------------------------------------------
43C M o d u l e s
44C-----------------------------------------------
45 USE segvar_mod
47 USE ale_mod
48C-----------------------------------------------
49C I m p l i c i t T y p e s
50C-----------------------------------------------
51#include "implicit_f.inc"
52C-----------------------------------------------
53C C o m m o n B l o c k s
54C-----------------------------------------------
55#include "spmd_c.inc"
56#include "com04_c.inc"
57#include "com08_c.inc"
58#include "vect01_c.inc"
59C-----------------------------------------------
60C D u m m y A r g u m e n t s
61C-----------------------------------------------
62 INTEGER IXQ(NIXQ,NUMELQ),N4_VOIS(NUMELQ+NQVOIS,4),ITAB(NUMNOD)
63 INTEGER,INTENT(IN) :: ITRIMAT
64 my_real flux(4,*),alph(*),vol(*),flux_vois(numelq+nqvois,6)
65 TYPE(t_segvar),INTENT(IN) :: SEGVAR
66 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
67C-----------------------------------------------
68C L o c a l V a r i a b l e s
69C-----------------------------------------------
70 INTEGER I,II,K,JV(6),KV(6),IAD2,IAD3
72 . vol0,av0,uav0,alphi,ualphi,aaa,ff(6),udt,phi0
73C-----------------------------------------------
74C S o u r c e L i n e s
75C-----------------------------------------------
76 jv = -huge(jv(1))
77 kv = -huge(kv(1))
78 ff = -huge(ff(1))
79C-----------------------------------------------
80C WET SURFACE
81C-----------------------------------------------
82 IF(dt1 > zero)THEN
83 udt = one/dt1
84 ELSE
85 udt = zero
86 ENDIF
87C
88 DO i=lft,llt
89 ii = i + nft
90 iad2 = ale_connect%ee_connect%iad_connect(ii)
91 vol0 = vol(i)*udt
92 av0 = alph(ii) * vol0
93 uav0 = vol0 - av0
94 alphi = zero
95 ualphi = zero
96 phi0 = zero
97C-----------------------------------------------
98C adjacent face & total outgoing volume flux
99C-----------------------------------------------
100 DO k=1,4
101 IF(flux(k,ii) > zero)THEN
102 jv(k) = ale_connect%ee_connect%connected(iad2 + k - 1)
103 kv(k) = k
104 IF(jv(k) == 0)THEN
105 jv(k) = ii
106 ff(k) = alph(ii)*flux(k,ii)
107 ELSEIF(jv(k) < 0)THEN
108 !case <0 : ebcs (-IVOIS is then segment identifier)
109 ff(k) = segvar%PHASE_ALPHA(itrimat,-jv(k)) *flux(k,ii)
110 ELSEIF(jv(k) <= numelq)THEN
111 iad3 = ale_connect%ee_connect%iad_connect(jv(k))
112 IF(ale_connect%ee_connect%connected(iad3 + 1 - 1) == ii) kv(k) = 1
113 IF(ale_connect%ee_connect%connected(iad3 + 2 - 1) == ii) kv(k) = 2
114 IF(ale_connect%ee_connect%connected(iad3 + 3 - 1) == ii) kv(k) = 3
115 IF(ale_connect%ee_connect%connected(iad3 + 4 - 1) == ii) kv(k) = 4
116 ff(k) = alph(jv(k))*flux(k,ii)
117 ELSE
118 !spmd
119 ff(k) = alph(jv(k))*flux(k,ii)
120 ENDIF
121c outgoing volume flux (estimation)
122 alphi = alphi + ff(k)
123c initial outgoing flux
124 phi0 = phi0 + flux(k,ii)
125 ENDIF
126 ENDDO
127c outgoing rest
128 ualphi = phi0 - alphi
129C-----------------------------------------------
130C outgoing volume flux by face
131C-----------------------------------------------
132 IF(alphi > av0.AND.av0 > zero)THEN
133C-----------------------------------------------
134C outgoing volume flux > volume
135C-----------------------------------------------
136 aaa = av0 / alphi
137 DO k=1,4
138 IF(flux(k,ii) > zero)THEN
139 ff(k) = ff(k) * aaa
140 ENDIF
141 ENDDO
142 ELSEIF(ualphi > uav0.AND.uav0 > zero)THEN
143
144C-----------------------------------------------
145C outgoing rest > available volume
146C-----------------------------------------------
147 aaa = uav0/ualphi
148 DO k=1,4
149 IF(flux(k,ii) > zero)THEN
150 ff(k) = flux(k,ii) + (ff(k)-flux(k,ii))*aaa
151 ENDIF
152 ENDDO
153c ELSE
154 ENDIF
155C-----------------------------------------------
156C outgoing flux
157C-----------------------------------------------
158 DO k=1,4
159 IF(flux(k,ii) > zero)THEN
160 ff(k) = 0.5* (ff(k)*(1.-ale%UPWIND%UPWSM)
161 . + alph(ii)*flux(k,ii)*(1.+ale%UPWIND%UPWSM))
162 flux(k,ii) = ff(k)
163 IF(jv(k) < 0)THEN
164 !nothing to do
165 ELSEIF(jv(k) <= numelq)THEN
166 flux(kv(k),jv(k)) = -flux(k,ii)
167 ELSE
168 flux_vois(ii,k) = flux(k,ii)
169 n4_vois(ii,1) = itab(ixq(2,ii))
170 n4_vois(ii,2) = itab(ixq(3,ii))
171 n4_vois(ii,3) = itab(ixq(4,ii))
172 n4_vois(ii,4) = itab(ixq(5,ii))
173 ENDIF
174 ENDIF
175 ENDDO
176C-----------------------------------------------
177C incoming volume flux from EBCS
178C-----------------------------------------------
179 IF(nsegflu > 0)THEN
180 iad2 = ale_connect%ee_connect%iad_connect(ii)
181 DO k=1,4
182 IF(flux(k,ii) < zero .AND. ale_connect%ee_connect%connected(iad2 + k - 1) < 0)THEN
183 flux(k,ii) = segvar%PHASE_ALPHA(itrimat,-ale_connect%ee_connect%connected(iad2 + k - 1))*flux(k,ii)
184 ENDIF
185 ENDDO
186 ENDIF
187C-------------
188 enddo! next I
189C-----------------------------------------------
190 RETURN
#define my_real
Definition cppsort.cpp:32
type(ale_) ale
Definition ale_mod.F:249