34 . IPARG, ITASK, IXS, IXQ, IXTG, MULTI_FVM, GRAVITY, WFEXT)
41 use element_mod ,
only : nixs,nixq,nixtg
45#include "implicit_f.inc"
56 INTEGER,
INTENT(IN) :: NG
57 TYPE(elbuf_struct_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
58 INTEGER,
INTENT(IN) :: IPARG(NPARG, *)
59 INTEGER,
INTENT(IN) :: ITASK
60 INTEGER,
INTENT(IN),
TARGET :: IXS(NIXS, *), IXQ(NIXQ, *), IXTG(NIXTG, *)
61 TYPE(multi_fvm_struct),
INTENT(INOUT) :: MULTI_FVM
62 my_real,
INTENT(IN) :: gravity(4, *)
63 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT
67 TYPE(g_bufel_),
POINTER :: GBUF
68 INTEGER :: II, I, J, ITY, NEL, NFT, ISOLNOD
69 INTEGER :: NODEID, NVERTEX
70 my_real :: vel2, vol, sumflux(5)
71 my_real :: vii(5), gravii(3), pres, vx, vy, vz, wext
72 INTEGER :: NB_FACE, NB_NODE, NODE_LIST(8)
73 INTEGER,
DIMENSION(:, :),
POINTER :: IX
74 DOUBLE PRECISION :: WFEXTT
78 gbuf =>elbuf_tab(ng)%GBUF
82 isolnod = iparg(28, ng)
85 ix =>ixs(1:nixs, 1 + nft : nel + nft)
86 IF (isolnod == 8)
THEN
99 IF (multi_fvm%SYM /= 0)
THEN
109 ix => ixq(1:nixq, 1 + nft : nel + nft)
110 ELSEIF (ity == 7)
THEN
117 ix => ixtg(1:nixtg, 1 + nft : nel + nft)
125 vx = gbuf%MOM(ii + 0 * nel)
126 vy = gbuf%MOM(ii + 1 * nel)
127 vz = gbuf%MOM(ii + 2 * nel)
129 vel2 = vx * vx + vy * vy + vz * vz
131 vii(1) = gbuf%RHO(ii)
135 vii(5) = gbuf%EINT(ii) + half * vii(1) * vel2
140 IF (multi_fvm%SYM == 0 .AND. isolnod /= 4)
THEN
141 sumflux(1:5) = multi_fvm%FLUXES(1:5, 1, i) + multi_fvm%FLUXES(1:5, 2, i) +
142 . multi_fvm%FLUXES(1:5, 3, i) + multi_fvm%FLUXES(1:5, 4, i) +
143 . multi_fvm%FLUXES(1:5, 5, i) + multi_fvm%FLUXES(1:5, 6, i)
144 ELSEIF (isolnod == 4)
THEN
145 sumflux(1:5) = multi_fvm%FLUXES(1:5, 5, i) + multi_fvm%FLUXES(1:5, 6, i) +
146 . multi_fvm%FLUXES(1:5, 2, i) + multi_fvm%FLUXES(1:5, 4, i)
149 sumflux(1:5) = multi_fvm%FLUXES(1:5, 1, i) + multi_fvm%FLUXES(1:5, 2, i) +
150 . multi_fvm%FLUXES(1:5, 3, i)
153 sumflux(1:5) = sumflux(1:5) + multi_fvm%FLUXES(1:5, 4, i)
157 vii(1:5) = vol * vii(1:5) - timestep * sumflux(1:5)
159 IF (multi_fvm%SYM == 1)
THEN
160 pres = multi_fvm%PRES(i)
161 vii(3) = vii(3) + timestep * gbuf%AREA(ii) * pres
168 nodeid = ix(node_list(j), ii)
169 IF(gravity(4, nodeid) == zero) cycle
170 nvertex = nvertex + 1
171 gravii(1) = gravii(1) + gravity(1, nodeid)
172 gravii(2) = gravii(2) + gravity(2, nodeid)
173 gravii(3) = gravii(3) + gravity(3, nodeid)
175 IF (nvertex > 0)
THEN
176 gravii(1:3) = gravii(1:3) / nvertex
178 vii(2:4) = vii(2:4) + timestep * gbuf%RHO(ii) * vol * gravii(1:3)
179 wext = timestep * gbuf%RHO(ii) * vol * (
180 . gravii(1) * multi_fvm%VEL(1, i) +
181 . gravii(2) * multi_fvm%VEL(2, i) +
182 . gravii(3) * multi_fvm%VEL(3, i))
183 vii(5) = vii(5) + wext
184 wfextt = wfextt + wext
186 multi_fvm%RHO(i) = vii(1)
188 multi_fvm%VEL(1, i) = vii(2)
189 multi_fvm%VEL(2, i) = vii(3)
190 multi_fvm%VEL(3, i) = vii(4)
192 multi_fvm%EINT(i) = vii(5)