48 . LISTE,NOD,IRECT,IELEM,IFACE,
49 . LA,EBCS,IPARG,ELBUF_TAB,MULTI_FVM,IXQ,IXS,IXTG,
50 . ELEM_ADRESS,FSKY,FSAVSURF,OUTPUT,DT1,TIME)
54 USE ebcs_mod ,
ONLY : t_ebcs_nrf
55 USE elbufdef_mod ,
ONLY : elbuf_struct_, l_bufel_, g_bufel_, buf_mat_
56 USE multi_fvm_mod ,
ONLY : multi_fvm_struct
60 USE multimat_param_mod ,
ONLY : m51_n0phas, m51_nvphas
61 USE output_mod ,
ONLY : output_
62 use element_mod ,
only : nixs,nixq,nixtg
66#include "implicit_f.inc"
78 INTEGER,
INTENT(IN) :: NSEG,NOD,ISEG(NSEG),LISTE(NOD),IRECT(4,NSEG),IELEM(NSEG),IFACE(NSEG)
79 INTEGER,
INTENT(IN) :: IXQ(NIXQ,NUMELQ),IXS(NIXS,NUMELS),IXTG(NIXTG,NUMELTG)
80 my_real,
INTENT(INOUT) :: A(3,NUMNOD)
81 my_real v(3,numnod),w(3,numnod),x(3,numnod),la(3,nod)
82 TYPE(t_ebcs_nrf),
INTENT(INOUT) :: EBCS
83 INTEGER :: IPARG(NPARG,NGROUP)
84 TYPE(elbuf_struct_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
85 TYPE(multi_fvm_struct),
INTENT(IN) :: MULTI_FVM
86 TYPE(
t_segvar),
INTENT(INOUT) :: SEGVAR
87 INTEGER,
DIMENSION(4,NSEG),
INTENT(IN) :
88 my_real,
DIMENSION(8,LSKY),
INTENT(INOUT) :: fsky
89 my_real,
INTENT(IN) :: dt1
90 my_real,
INTENT(IN) :: time
91 TYPE(),
INTENT(INOUT) :: OUTPUT
95 TYPE(g_bufel_),
POINTER :: GBUF
96 TYPE(L_BUFEL_) ,
POINTER :: LBUF
97 INTEGER :: II,IS,KK,KSEG,NN(4)
98INTEGER :: ICF_2d(2,4), ICF_3d(4,6), JJ, ISUBMAT, IPOS, NBMAT, MTN
99 my_real :: orient,rho,roc,fac1,fac2,vol,mass
100 . x13,y13,z13,x24,y24,z24,
101 .
alpha, beta, v0(3,nod),
102 . xn, yn, zn, tmp(3), vold, vnew, pold, pvois,
103 . dp0,mach,pp,ssp,rhoc2,
104 . tcar_p, tcar_vf, surf, eint,phase_alpha(21),phase_rho(21), phase_eint(21)
105 my_real :: de_in, de_out, dm_in, dm_out
106 my_real :: roou, enou, fluxo, fluxi
109 TYPE(buf_mat_) ,
POINTER :: MBUF
113 DATA icf_2d /1,2,2,3,3,4,4,1/
114 DATA icf_3d /1,4,3,2,3,4,8,7,5,6,7,8,1,2,6,5,2,3,7,6,1,5,8,4/
119 tcar_vf = ebcs%TCAR_VF
120 surf_id = ebcs%SURF_ID
128 beta = dt1/
max(dt1,tcar_vf)
129 IF(tcar_vf>=ep20)beta=zero
139 v0(1,ii)=v(1,num)-w(1,num)
140 v0(2,ii)=v(2,num)-w(2,num)
141 v0(3,ii)=v(3,num)-w(3,num)
143 ELSEIF(ieuler == 1)
THEN
162 orient=float(iseg(is)/kseg)
167 ix(1)=ixs(icf_3d(1,jj)+1,ielem(is))
168 ix(2)=ixs(icf_3d(2,jj)+1,ielem(is))
169 ix(3)=ixs(icf_3d(3,jj)+1,ielem(is))
170 ix(4)=ixs(icf_3d(4,jj)+1,ielem(is))
171 x13=x(1,ix(3))-x(1,ix(1))
172 y13=x(2,ix(3))-x(2,ix(1))
173 z13=x(3,ix(3))-x(3,ix(1))
174 x24=x(1,ix(4))-x(1,ix(2))
175 y24=x(2,ix(4))-x(2,ix(2))
176 z24=x(3,ix(4))-x(3,ix(2))
180 fac2=one/sqrt(xn**2+yn**2+zn**2) * orient
186 IF(ix(4) == ix(3))
THEN ; npt=3;fac1=third; else; npt=4;fac1=fourth;
ENDIF
192 ix(1) = ixtg(icf_2d(1,jj)+1,ielem(is))
193 ix(2) = ixtg(icf_2d(2,jj)+1,ielem(is))
195 ix(1) = ixq(icf_2d(1,jj)+1,ielem(is))
196 ix(2) = ixq(icf_2d(2,jj)+1,ielem(is))
199 yn = -(-x(3,ix(2))+x(3,ix(1)))
200 zn = (-x(2,ix(2))+x(2,ix(1)))
201 fac2 = one/sqrt(yn*yn+zn*zn)*orient
202 IF(n2d==1)ym = half*(x(2,ix(1))+x(2,ix(2)))
220 tmp(1) = tmp(1) + v0(1,nn(kk))
221 tmp(2) = tmp(2) + v0(2,nn(kk))
222 tmp(3) = tmp(3) + v0(3,nn(kk))
225 vnew = fac1 * (tmp(1)*xn + tmp(2)*yn + tmp(3)*zn)
226 IF(time == zero)
THEN
227 IF(
ale%GRID%NWALE == 7)
THEN
247 IF(kty /= 2 .AND. kty /= 7)cycle
249 IF (ivoi <= klt+mft)
THEN
255 gbuf => elbuf_tab(ngrp)%GBUF
256 lbuf => elbuf_tab(ngrp)%BUFLY(1)%LBUF(1,1,1)
264 pvois = -third*(gbuf%SIG(idx(1)+iloc+1) + gbuf%SIG(idx(2)+iloc+1) + gbuf%SIG(idx(3)+iloc+1))
266 IF(time == zero)pold=pvois+dp0
269 rho = gbuf%RHO(iloc+1)
276 IF(multi_fvm%IS_USED)
THEN
277 ssp = multi_fvm%SOUND_SPEED(ivoi)
279 ssp = lbuf%SSP(iloc+1)
283 eint = gbuf%EINT(iloc+1)
287 mbuf => elbuf_tab(ngrp)%BUFLY(1)%MAT(1,1,1)
290 kk = (m51_n0phas + (isubmat-1)*m51_nvphas +ipos-1) * klt + iloc+1
291 phase_alpha(isubmat) = mbuf%VAR(kk)
293 kk = (m51_n0phas + (isubmat-1)*m51_nvphas +ipos-1) * klt + iloc+1
294 phase_rho(isubmat) = mbuf%VAR(kk)
296 kk = (m51_n0phas + (isubmat-1)*m51_nvphas +ipos-1) * klt + iloc+1
297 phase_eint(isubmat) = mbuf%VAR(kk)
299 ELSEIF(mtn == 151)
THEN
300 DO isubmat=1,multi_fvm%NBMAT
301 phase_alpha(isubmat) = multi_fvm%PHASE_ALPHA(isubmat,iloc+1+klt)
302 phase_rho(isubmat) = multi_fvm%PHASE_RHO(isubmat,iloc+1+klt)
303 phase_eint(isubmat) = multi_fvm%PHASE_EINT(isubmat,iloc+1+klt)
310 segvar%EINT(kseg)=eint
311 IF(segvar%has_phase_alpha)segvar%PHASE_ALPHA(1:4,kseg)=phase_alpha(1:4)
312 IF(segvar%has_phase_rho)segvar%PHASE_RHO(1:4,kseg)=phase_rho(1:4)
313 IF(segvar%has_phase_eint)segvar%PHASE_EINT(1:4,kseg)=phase_eint(1:4)
316 roou = segvar%RHO(kseg)
317 enou = segvar%EINT(kseg)
318 fluxo=vnew*surf*dt1*ym
319 fluxi=
min(fluxo,zero)
320 fluxo=
max(fluxo,zero)
321 dm_out=dm_out-fluxo*rho
322 dm_in=dm_in-fluxi*rho
323 de_out=de_out-fluxo*eint
324 de_in=de_in-fluxi*eint
327 IF(ssp /= zero)mach = abs(vnew / ssp)
329 IF(mach >= one .AND. vnew > zero)
THEN
336 pp = one/(one+
alpha)*(pold+roc*(vnew-vold))+
alpha*(pvois+dp0)/(
alpha + one)
341 IF(segvar%nbmat > 0)
THEN
346 ! (1-beta) vf_current + beta vf_0
347 phase_alpha(isubmat)=(one-beta)*phase_alpha(isubmat)
348 . + beta*mbuf%VAR((m51_n0phas+(isubmat-1)*m51_nvphas +23-1)* klt+iloc+1)
350 ELSEIF(mtn == 151)
THEN
354 segvar%PHASE_ALPHA(1:4,kseg) = phase_alpha(1:4)
359 la(1,nn(kk)) = la(1,nn(kk)) - pp*surf*xn*fac1
360 la(2,nn(kk)) = la(2,nn(kk)) - pp*surf*yn*fac1
361 la(3,nn(kk)) = la(3,nn(kk)) - pp*surf*zn*fac1
364 !/th/surf(massflow,
velocity, pressure)
365 fsavsurf(2,surf_id) = fsavsurf(2,surf_id) + rho*surf*vnew
366 fsavsurf(3,surf_id) = fsavsurf(3,surf_id) + surf*vnew
367 fsavsurf(4,surf_id) = fsavsurf(4,surf_id) + surf*pp
368 fsavsurf(6,surf_id) = fsavsurf(6,surf_id) + rho*surf*vnew*dt1
374 adress = elem_adress(kk,is)
375 fsky(1,adress) = -pp*surf*xn*fac1
376 fsky(2,adress) = -pp*surf*yn*fac1
377 fsky(3,adress) = -pp*surf*zn*fac1
378 fsky(4:8,adress) = zero
389 a(1,num)=a(1,num)+la(1,ii)
390 a(2,num)=a(2,num)+la(2,ii)
391 a(3,num)=a(3,num)+la(3,ii)
397 output%DATA%INOUT%DM_IN = output%DATA%INOUT%DM_IN + dm_in
398 output%DATA%INOUT%DM_OUT = output%DATA%INOUT%DM_OUT + dm_out
399 output%DATA%INOUT%DE_IN = output%DATA%INOUT%DE_IN + de_in
400 output%DATA%INOUT%DE_OUT = output%DATA%INOUT%DE_OUT + de_out
subroutine ebcs_main(igrsurf, segvar, volmon, a, v, w, x, fsav, fv, ms, stifn, iparg, elbuf_tab, ebcs_tab, multi_fvm, ixq, ixs, ixtg, fsky, fsavsurf, time, dt1, nsensor, sensor_tab, python, npc, tf, snpc, stf, output, matparam, pm, bufmat)