49 . NG, ELBUF_TAB, IPARG, ITASK,
51 . PM, IPM, MULTI_FVM, ALE_CONNECTIVITY, WGRID, XGRID, ITAB, NBMAT, CURRENT_TIME, BUFMAT,
52 . ID_GLOBAL_VOIS,FACE_VOIS,NPF,TF,ISPMD,MATPARAM)
74 USE matparam_def_mod,
ONLY : matparam_struct_
76 USE multi_muscl_compute_pressure_mod ,
ONLY : multi_muscl_compute_pressure
77 use element_mod ,
only : nixs,nixq,nixtg
81#include "implicit_f.inc"
93 COMMON /tablesizf/ stf,snpc
98 TYPE(matparam_struct_),
DIMENSION(NUMMAT),
INTENT(IN) :: MATPARAM
99 INTEGER,
INTENT(IN) :: NG, ISPMD
100 TYPE(ELBUF_STRUCT_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
101 INTEGER,
INTENT(IN) :: IPARG(NPARG, NGROUP)
102 INTEGER,
INTENT(IN) :: ITASK
103 INTEGER,
INTENT(IN) :: IXS(NIXS, *), IXQ(NIXQ, *), IXTG(NIXTG, *)
104 INTEGER,
INTENT(IN) :: IPM(NPROPMI, NUMMAT)
105 my_real,
INTENT(IN) :: pm(npropm, nummat)
106 TYPE(multi_fvm_struct),
INTENT(INOUT) :: MULTI_FVM
108 INTEGER,
INTENT(IN) :: ID_GLOBAL_VOIS(*),FACE_VOIS(*)
109 my_real,
INTENT(IN) :: wgrid(3, *), xgrid(3, *), current_time
110 INTEGER,
INTENT(IN) :: ITAB(*), NBMAT
111 my_real,
INTENT(INOUT) :: BUFMAT(*)
113 INTEGER,
INTENT(IN) :: NPF(SNPC)
114 my_real,
INTENT(IN) :: tf(stf)
118 INTEGER :: II, JJ, KFACE, I, J, KFACE2, KK, ID_OUT, IARRAY(2)
119 INTEGER :: ITY, NFT, NEL
121 INTEGER :: KFACE3,I_OLD,J_OLD,KFACE_OLD,KFACE2_OLD
122 INTEGER :: ID_GLOBAL_VOIS_1,ID_GLOBAL_VOIS_2
123 INTEGER,
DIMENSION(MVSIZ) :: GLOBAL_ID_CURRENT_ELM
125 INTEGER :: NB_FACE, ELEMID, NUMEL_SPMD
126 INTEGER :: LOCAL_MATID(NBMAT), MATLAW(NBMAT),IDX(6), NVAREOS(NBMAT),NVARTMP_EOS(NBMAT)
127 my_real :: fii(5), normal_velii, normal_veljj, vii(5), velii2, veljj2, surf
128 my_real :: sl, sr, sstar, pstar
129 my_real :: sspii(1), sspjj(1), rhoii(1), rhojj(1), pii(1), pjj(1), nx, ny, nz, normalw
130 my_real :: vxii, vyii, vzii
131 my_real :: vxjj, vyjj, vzjj, vx, vy, vz, normvel, ssp, rho, p
132 my_real :: machii, machjj, pstar2, theta, alphaii
133 my_real :: sub_rhoii, sub_rhoeintii,alphastar, sub_rhostar, sub_estar, sub_pii, wfac(3)
134 my_real :: xf(3), xk(3), xl(3)
135 my_real :: eintii(1), eintjj(1)
136 my_real :: phase_rhoii(nbmat), phase_presii(nbmat), phase_eintii(nbmat)
137 my_real :: phase_sspii(nbmat), phase_alphaii(nbmat)
138 my_real :: phase_rhojj(nbmat), phase_presjj(nbmat), phase_eintjj(nbmat)
139 my_real :: phase_sspjj(nbmat), phase_alphajj(nbmat), cumul_alpha, pshift
141 TYPE(lbuf_ptr) :: LBUFS(NBMAT)
142 TYPE(ebuf_ptr) :: EBUFS(NBMAT)
143 TYPE(g_bufel_),
POINTER :: GBUF
144 TYPE(buf_eos_),
POINTER :: EBUF
150 gbuf => elbuf_tab(ng)%GBUF
155 pshift = multi_fvm%PRES_SHIFT
164 lbufs(imat)%LBUF => elbuf_tab(ng)%BUFLY(imat)%LBUF(1, 1, 1)
165 ebufs(imat)%EBUF => elbuf_tab(ng)%BUFLY(imat)%EOS(1, 1, 1)
166 nvareos(imat) = elbuf_tab(ng)%BUFLY(imat)%NVAR_EOS
167 nvartmp_eos(imat) = elbuf_tab(ng)%BUFLY(imat)%NVARTMP_EOS
172 NULLIFY( lbufs(imat)%LBUF, ebufs(imat)%EBUF )
173 ebuf => elbuf_tab(ng)%BUFLY(1)%EOS(1,1,1)
174 nvareos(1) = elbuf_tab(ng)%BUFLY(1)%NVAR_EOS
175 nvartmp_eos(1) = elbuf_tab(ng)%BUFLY(1)%NVARTMP_EOS
179 SELECT CASE (multi_fvm%SYM)
185 local_matid(imat) = matparam(ixs(1, 1 + nft))%MULTIMAT%MID(imat)
189 global_id_current_elm(ii) = ixs(nixs,i)
197 local_matid(imat) = matparam(ixq(1, 1 + nft))%MULTIMAT%MID(imat)
201 global_id_current_elm(ii) = ixq(nixq,i)
203 ELSEIF (ity == 7)
THEN
208 local_matid(imat) = matparam(ixtg(1, 1 + nft))%MULTIMAT%MID(imat)
212 global_id_current_elm(ii) = ixtg(nixtg,i)
222 iad = ale_connectivity%ee_connect%iad_connect(i)
223 nb_face = ale_connectivity%ee_connect%iad_connect(i+1) -
224 . ale_connectivity%ee_connect%iad_connect(i)
227 DO kface3 = 1, nb_face
228 jj = ale_connectivity%ee_connect%connected(iad + kface3 - 1)
231 nx = multi_fvm%FACE_DATA%NORMAL(1, kface3, i_old)
232 ny = multi_fvm%FACE_DATA%NORMAL(2, kface3, i_old)
233 nz = multi_fvm%FACE_DATA%NORMAL(3, kface3, i_old)
234 surf = multi_fvm%FACE_DATA%SURF(kface3, i_old)
235 wfac(1:3) = multi_fvm%FACE_DATA%WFAC(1:3, kface3, i_old)
237 id_global_vois_1 = global_id_current_elm(ii)
238 id_global_vois_2 = id_global_vois( nb_face * (i_old - 1) + kface3 )
241 IF (j_old <= numel_spmd)
THEN
242 kface2_old = multi_fvm%FVM_CONNECTIVITY%KVOIS(nb_face * (i_old - 1) + kface3)
244 kface2_old = face_vois( nb_face * (i_old - 1) + kface3 )
248! -----------------------------------------------
249 IF (j_old > 0 .AND. i_old < j_old)
THEN
252 IF(id_global_vois_1<id_global_vois_2)
THEN
270 normalw = wfac(1) * nx + wfac(2) * ny + wfac(3) * nz
278 xk(1:3) = multi_fvm%ELEM_DATA%CENTROID(1:3, i)
279 xl(1:3) = multi_fvm%ELEM_DATA%CENTROID(1:3, j)
280 xf(1:3) = multi_fvm%FACE_DATA%CENTROID(1:3, kface, i)
283 vxii = multi_fvm%VEL(1, i)
284 vyii = multi_fvm%VEL(2, i)
285 vzii = multi_fvm%VEL(3, i)
287 IF (multi_fvm%MUSCL == 1)
THEN
288 vxii = vxii + multi_fvm%GRAD_U(1, i) * (xf(1) - xk(1))
289 . + multi_fvm%GRAD_U(2, i) * (xf(2) - xk(2))
290 . + multi_fvm%GRAD_U(3, i) * (xf(3) - xk(3))
291 vyii = vyii + multi_fvm%GRAD_V(1, i) * (xf(1) - xk(1))
292 . + multi_fvm%GRAD_V(2, i) * (xf(2) - xk(2))
293 . + multi_fvm%GRAD_V(3, i) * (xf(3) - xk(3))
295 . + multi_fvm%GRAD_W(2, i) * (xf(2) - xk(2))
296 . + multi_fvm%GRAD_W(3, i) * (xf(3) - xk(3))
300 velii2 = vxii * vxii + vyii * vyii + vzii * vzii
302 normal_velii = vxii * nx + vyii * ny + vzii * nz
304 IF (multi_fvm%NBMAT == 1)
THEN
306 rhoii(1) = multi_fvm%RHO(i)
307 eintii(1) = multi_fvm%EINT(i)
309 IF (multi_fvm%MUSCL == 1)
THEN
310 rhoii(1) = rhoii(1) + multi_fvm%GRAD_RHO(1, i) * (xf(1) - xk(1))
311 . + multi_fvm%GRAD_RHO(2, i) * (xf(2) - xk(2))
312 . + multi_fvm%GRAD_RHO(3, i) * (xf(3) - xk(3))
313 eintii(1) = eintii(1) + multi_fvm%GRAD_PRES(1, i) * (xf(1) - xk(1))
314 . + multi_fvm%GRAD_PRES(2, i) * (xf(2) - xk(2))
315 . + multi_fvm%GRAD_PRES(3, i) * (xf(3) - xk(3))
318 CALL multi_muscl_compute_pressure(matlaw(1), local_matid(1), pm, ipm, npropm, npropmi,
319 . eintii(1), rhoii(1), pii(1), sspii(1),
320 . multi_fvm%BFRAC(1, i), gbuf%TB(ii:), gbuf%DELTAX(ii:), current_time,
321 . bufmat, gbuf%OFF(ii:), gbuf%SIG(ii+idx(1):ii+idx(6)), snpc, stf, npf, tf, ebuf%VAR, nvareos(1),
322 . matparam(local_matid(1)) ,nvartmp_eos(1), ebuf%VARTMP,nummat,gbuf%ABURN(ii:))
333 phase_alphaii(imat) = multi_fvm%PHASE_ALPHA(imat, i)
334 . + multi_fvm%PHASE_GRAD_ALPHA(1, imat, i) * (xf(1) - xk(1))
335 . + multi_fvm%PHASE_GRAD_ALPHA(2, imat, i) * (xf(2) - xk(2))
336 . + multi_fvm%PHASE_GRAD_ALPHA(3, imat, i) * (xf(3) - xk(3))
337 phase_alphaii(imat) =
max(phase_alphaii(imat), zero)
338 cumul_alpha = cumul_alpha + phase_alphaii(imat)
342 phase_alphaii(imat) = phase_alphaii(imat) / cumul_alpha
343 phase_rhoii(imat) = multi_fvm%PHASE_RHO(imat, i)
344 phase_eintii(imat) = multi_fvm%PHASE_EINT(imat, i)
345 IF (multi_fvm%MUSCL == 1)
THEN
346 phase_rhoii(imat) = phase_rhoii(imat)
347 . + multi_fvm%PHASE_GRAD_RHO(1, imat, i) * (xf(1) - xk(1))
348 . + multi_fvm%PHASE_GRAD_RHO(2, imat, i) * (xf(2) - xk(2))
349 . + multi_fvm%PHASE_GRAD_RHO(3, imat, i) * (xf(3) - xk(3))
350 phase_eintii(imat) = phase_eintii(imat)
351 . + multi_fvm%PHASE_GRAD_PRES(1, imat, i) * (xf(1) - xk(1))
352 . + multi_fvm%PHASE_GRAD_PRES(2, imat, i) * (xf(2) - xk(2))
353 . + multi_fvm%PHASE_GRAD_PRES(3, imat, i) * (xf(3) - xk(3))
356 rhoii(1) = rhoii(1) + phase_alphaii(imat) * phase_rhoii(imat)
357 matlaw(imat) = ipm(2, local_matid(imat))
358 IF (phase_alphaii(imat) > zero)
THEN
359 nvareos = elbuf_tab(ng)%BUFLY(imat)%NVAR_EOS
360 CALL multi_muscl_compute_pressure(matlaw(imat), local_matid(imat), pm, ipm, npropm, npropmi,
361 . phase_eintii(imat), phase_rhoii(imat), phase_presii(imat), phase_sspii(imat),
362 . multi_fvm%BFRAC(imat, i), gbuf%TB(ii:), gbuf%DELTAX(ii:), current_time,
363 . bufmat, lbufs(imat)%LBUF%OFF(ii:),lbufs(imat)%LBUF%SIG(ii+idx(1):ii+idx(6)), snpc,stf,npf,tf,
364 . ebufs(imat)%EBUF%VAR,nvareos(imat), matparam(local_matid(imat)),
365 . nvartmp_eos(imat),ebufs(imat)%EBUF%VARTMP,nummat,gbuf%ABURN(ii:))
367 pii(1) = pii(1) + phase_alphaii(imat) * phase_presii
368 eintii(1) = eintii(1) + phase_alphaii(imat) * phase_eintii(imat)
369 sspii(1) = sspii(1) + phase_alphaii(imat) * phase_rhoii(imat) *
max(em20, phase_sspii(imat))
372 IF (sspii(1) / rhoii(1) > zero)
THEN
373 sspii(1) = sqrt(sspii(1) / rhoii(1))
375 sspii(1) = multi_fvm%SOUND_SPEED(i)
380 vxjj = multi_fvm%VEL(1, j)
381 vyjj = multi_fvm%VEL(2, j)
382 vzjj = multi_fvm%VEL(3, j)
383 IF (multi_fvm%MUSCL == 1)
THEN
385 . + multi_fvm%GRAD_U(1, j) * (xf(1) - xl(1))
386 . + multi_fvm%GRAD_U(2, j) * (xf(2) - xl(2))
387 . + multi_fvm%GRAD_U(3, j) * (xf(3) - xl(3))
389 . + multi_fvm%GRAD_V(1, j) * (xf(1) - xl(1))
390 . + multi_fvm%GRAD_V(2, j) * (xf(2) - xl(2))
391 . + multi_fvm%GRAD_V(3, j) * (xf(3) - xl(3))
393 . + multi_fvm%GRAD_W(1, j) * (xf(1) - xl(1))
394 . + multi_fvm%GRAD_W(2, j) * (xf(2) - xl(2))
395 . + multi_fvm%GRAD_W(3, j) * (xf(3) - xl(3))
398 normal_veljj = vxjj * nx
399 veljj2 = vxjj * vxjj + vyjj * vyjj + vzjj * vzjj
402 IF (multi_fvm%NBMAT == 1)
THEN
404 rhojj(1) = multi_fvm%RHO(j)
405 eintjj(1) = multi_fvm%EINT(j)
406 IF (multi_fvm%MUSCL == 1)
THEN
408 . + multi_fvm%GRAD_RHO(1, j) * (xf(1) - xl(1))
409 . + multi_fvm%GRAD_RHO(2, j) * (xf(2) - xl(2))
410 . + multi_fvm%GRAD_RHO(3, j) * (xf(3) - xl(3))
411 eintjj(1) = eintjj(1)
412 . + multi_fvm%GRAD_PRES(1, j) * (xf(1) - xl(1))
413 . + multi_fvm%GRAD_PRES(2, j) * (xf(2) - xl(2))
414 . + multi_fvm%GRAD_PRES(3, j) * (xf(3) - xl(3))
416 matlaw(1) = ipm(2, local_matid(1))
417 nvareos = elbuf_tab(ng)%BUFLY(1)%NVAR_EOS
418 CALL multi_muscl_compute_pressure(matlaw(1), local_matid(1), pm, ipm, npropm, npropmi,
419 . eintjj(1), rhojj(1), pjj(1), sspjj(1),
420 . multi_fvm%BFRAC(1, j), gbuf%TB(ii:), gbuf%DELTAX(ii:), current_time,
421 . bufmat, gbuf%OFF(ii:),gbuf%SIG(ii+idx(1):ii+idx(6)), snpc,stf,npf,tf
422 . matparam(local_matid(1)),
423 . nvartmp_eos(1),ebuf%VARTMP,nummat,gbuf%ABURN(ii:))
424 sspjj(1) = sqrt(sspjj(1))
432 phase_alphajj(imat) = multi_fvm%PHASE_ALPHA(imat, j)
433 . + multi_fvm%PHASE_GRAD_ALPHA
434 . + multi_fvm%PHASE_GRAD_ALPHA(2, imat, j) * (xf(2) - xl(2))
435 . + multi_fvm%PHASE_GRAD_ALPHA(3, imat, j) * (xf(3) - xl(3))
436 phase_alphajj(imat) =
max(phase_alphajj(imat), zero)
437 cumul_alpha = cumul_alpha + phase_alphajj(imat)
441 phase_alphajj(imat) = phase_alphajj(imat) / cumul_alpha
442 phase_rhojj(imat) = multi_fvm%PHASE_RHO(imat, j)
443 phase_eintjj(imat) = multi_fvm%PHASE_EINT(imat, j)
444 IF (multi_fvm%MUSCL == 1)
THEN
445 phase_rhojj(imat) = phase_rhojj(imat)
446 . + multi_fvm%PHASE_GRAD_RHO(1, imat, j) * (xf(1) - xl(1))
447 . + multi_fvm%PHASE_GRAD_RHO(2, imat, j) * (xf(2) - xl(2))
448 . + multi_fvm%PHASE_GRAD_RHO(3, imat, j) * (xf(3) - xl(3))
449 phase_eintjj(imat) = phase_eintjj(imat)
450 . + multi_fvm%PHASE_GRAD_PRES(1, imat, j
451 . + multi_fvm%PHASE_GRAD_PRES(2, imat, j) * (xf(2) - xl(2))
452 . + multi_fvm%PHASE_GRAD_PRES(3, imat, j) * (xf(3) - xl(3))
455 rhojj(1) = rhojj(1) + phase_alphajj(imat) * phase_rhojj(imat)
456 matlaw(imat) = ipm(2, local_matid(imat))
457 IF (phase_alphajj(imat) > zero)
THEN
459 CALL multi_muscl_compute_pressure(matlaw(imat), local_matid(imat), pm, ipm, npropm, npropmi,
460 . phase_eintjj(imat), phase_rhojj(imat), phase_presjj(imat), phase_sspjj(imat),
461 . multi_fvm%BFRAC(imat, j), gbuf%TB(ii:), gbuf%DELTAX(ii:), current_time,
462 . bufmat, lbufs(imat)%LBUF%OFF(ii:),lbufs(imat)%LBUF%SIG(ii+idx(1):ii+idx(6)),snpc,stf,npf,tf,
463 . ebufs(imat)%EBUF%VAR,nvareos(imat), matparam(local_matid(imat)),
464 . nvartmp_eos(imat),ebufs(imat)%EBUF%VARTMP,nummat,gbuf%ABURN(ii:))
466 pjj(1) = pjj(1) + phase_alphajj(imat) * phase_presjj(imat)
467 eintjj = eintjj + phase_alphajj(imat) * phase_eintjj(imat)
468 sspjj(1) = sspjj(1) + phase_alphajj(imat) * phase_rhojj(imat) *
max(em20, phase_sspjj(imat))
471 IF (sspjj(1) / rhojj(1) > zero)
THEN
472 sspjj(1) = sqrt(sspjj(1) / rhojj(1))
474 sspjj(1) = multi_fvm%SOUND_SPEED(j)
478 machii = abs(normal_velii) / sspii(1)
479 machjj = abs(normal_veljj) / sspjj(1)
482 sl =
min(normal_velii - sspii(1), normal_veljj - sspjj(1))
483 sr =
max(normal_velii + sspii(1), normal_veljj + sspjj(1))
486 sstar = pjj(1) - pii(1) + rhoii(1) * normal_velii * (sl - normal_velii) -
487 . rhojj(1) * normal_veljj * (sr - normal_veljj)
488 sstar = sstar / (rhoii(1) * (sl - normal_velii) -
489 . rhojj(1) * (sr - normal_veljj))
492 pstar2 = pii(1) + rhoii(1) * (sstar - normal_velii) * (sl - normal_velii)
493 IF (
min(machii, machjj) < em01)
THEN
494 theta =
min(machii, machjj)
498 pstar = (one - theta) * half * (pii(1) + pjj(1)) + theta * pstar2
499 IF (multi_fvm%LOWMACH_OPT)
THEN
504 pp(5) = sstar * (pstar + pshift)
510 pp(5) = sstar * (pstar2 + pshift)
513 IF (sl > normalw)
THEN
515 vii(2) = rhoii(1) * vxii
516 vii(3) = rhoii(1) * vyii
517 vii(4) = rhoii(1) * vzii
518 vii(5) = eintii(1) + half * rhoii(1) * velii2
520 fii(1) = vii(1) * normal_velii
521 fii(2) = vii(2) * normal_velii + pii(1) * nx
522 fii(3) = vii(3) * normal_velii + pii(1) * ny
523 fii(4) = vii(4) * normal_velii + pii(1) * nz
524 fii(5) = (vii(5) + pii(1) + pshift) * normal_velii
528 multi_fvm%FLUXES(1:5, kface_old, i_old) = direction * (fii(1:5) - normalw * vii(1:5)) * surf
529 multi_fvm%FLUXES(6, kface_old
534 alphaii = phase_alphaii(imat)
535 sub_rhoii = phase_rhoii(imat)
536 sub_rhoeintii = phase_eintii(imat)
537 sub_viistar(1) = alphaii
538 sub_viistar(2) = alphaii * sub_rhoii
539 sub_viistar(3) = alphaii * sub_rhoeintii
540 sub_fiistar(1:3) = sub_viistar(1:3) * normal_velii
541 multi_fvm%SUBVOL_FLUXES(imat, kface_old, i_old) = direction *
542 . (sub_fiistar(1) - normalw * sub_viistar(1)) * surf
543 multi_fvm%SUBMASS_FLUXES(imat, kface_old, i_old) = direction *
544 . (sub_fiistar(2) - normalw * sub_viistar(2)) * surf
545 multi_fvm%SUBENER_FLUXES(imat, kface_old, i_old) = direction *
546 . (sub_fiistar(3) - normalw * sub_viistar(3)) * surf
550 ELSEIF (sl <= normalw .AND. normalw <= sstar)
THEN
552 vii(2) = rhoii(1) * vxii
553 vii(3) = rhoii(1) * vyii
554 vii(4) = rhoii(1) * vzii
555 vii(5) = eintii(1) + half * rhoii(1) * velii2
557 fii(1) = vii(1) * normal_velii
558 fii(2) = vii(2) * normal_velii + pii(1) * nx
559 fii(3) = vii(3) * normal_velii + pii(1) * ny
560 fii(4) = vii(4) * normal_velii + pii(1) * nz
561 fii(5) = (vii(5) + pii(1) + pshift) * normal_velii
565 viistar(1:5) = fii(1:5) - (sl) * vii(1:5) - pp(1:5)
566 viistar(1:5) = viistar(1:5) / (sstar - sl)
567 fiistar(1:5) = viistar(1:5) * sstar + pp(1:5)
568 multi_fvm%FLUXES(1:5, kface_old, i_old) = direction *
569 . (fiistar(1:5) - normalw * viistar(1:5)) * surf
570 multi_fvm%FLUXES(6, kface_old, i_old) = direction * sstar * surf
575 matlaw(imat) = ipm(2, local_matid(imat))
576 alphastar = phase_alphaii(imat)
577 sub_rhostar = phase_rhoii(imat) * (normal_velii - sl) / (sstar - sl)
578 IF (alphastar > zero)
THEN
579 sub_rhoii = phase_rhoii(imat)
580 sub_rhoeintii = phase_eintii(imat)
581 sub_pii = phase_presii(imat)
582 sub_estar = phase_eintii(imat) / phase_rhoii(imat) -
583 . phase_presii(imat) * (one / sub_rhostar - one / phase_rhoii(imat))
585 IF (sub_estar < zero)
THEN
591 sub_viistar(1) = alphastar
592 sub_viistar(2) = alphastar * sub_rhostar
593 sub_viistar(3) = alphastar * sub_rhostar * sub_estar
595 sub_fiistar(1:3) = sub_viistar(1:3) * sstar
596 multi_fvm%SUBVOL_FLUXES(imat, kface_old, i_old) = direction *
597 . (sub_fiistar(1) - normalw * sub_viistar(1)) * surf
598 multi_fvm%SUBMASS_FLUXES(imat, kface_old
599 . (sub_fiistar(2) - normalw * sub_viistar(2)) * surf
600 multi_fvm%SUBENER_FLUXES
601 . (sub_fiistar(3) - normalw * sub_viistar(3)) * surf
605 ELSE IF (sstar < normalw .AND. normalw <= sr)
THEN
607 vii(2) = rhojj(1) * vxjj
608 vii(3) = rhojj(1) * vyjj
609 vii(4) = rhojj(1) * vzjj
610 vii(5) = eintjj(1) + half * rhojj(1) * veljj2
611! normal physical flux current element
612 fii(1) = vii(1) * normal_veljj
613 fii(2) = vii(2) * normal_veljj + pjj(1) * nx
614 fii(3) = vii(3) * normal_veljj + pjj(1) * ny
615 fii(4) = vii(4) * normal_veljj + pjj(1) * nz
616 fii(5) = (vii(5) + pjj(1) + pshift) * normal_veljj
620 viistar(1:5) = fii(1:5) - (sr) * vii(1:5) - pp(1:5)
621 viistar(1:5) = viistar(1:5) / (sstar - sr)
622 fiistar(1:5) = viistar(1:5) * sstar + pp(1:5)
623 multi_fvm%FLUXES(1:5, kface_old, i_old) = direction *
624 . (fiistar(1:5) - normalw * viistar(1:5)) * surf
625 multi_fvm%FLUXES(6, kface_old, i_old) = direction * sstar * surf
630 matlaw(imat) = ipm(2, local_matid(imat))
631 alphastar = phase_alphajj(imat)
632 sub_rhostar = phase_rhojj(imat) * (normal_veljj - sr) / (sstar - sr)
633 IF (alphastar > zero)
THEN
634 sub_rhoii = phase_rhojj(imat)
635 sub_rhoeintii = phase_eintjj(imat)
636 sub_pii = phase_presjj(imat)
637 sub_estar = phase_eintjj(imat) / phase_rhojj(imat) -
638 . phase_presjj(imat) * (one / sub_rhostar - one / phase_rhojj(imat))
639 IF (sub_estar < zero)
THEN
646 sub_viistar(1) = phase_alphajj(imat)
647 sub_viistar(2) = phase_alphajj(imat) * sub_rhostar
648 sub_viistar(3) = phase_alphajj(imat) * sub_rhostar * sub_estar
649 sub_fiistar(1:3) = sub_viistar(1:3) * sstar
650 multi_fvm%SUBVOL_FLUXES(imat, kface_old, i_old) = direction *
651 . (sub_fiistar(1) - normalw * sub_viistar(1)) * surf
652 multi_fvm%SUBMASS_FLUXES(imat, kface_old, i_old) = direction *
653 . (sub_fiistar(2) - normalw * sub_viistar(2)) * surf
654 multi_fvm%SUBENER_FLUXES(imat, kface_old, i_old) = direction *
655 . (sub_fiistar(3) - normalw * sub_viistar(3)) * surf
658 ELSE IF (sr < normalw)
THEN
660 vii(2) = rhojj(1) * vxjj
661 vii(3) = rhojj(1) * vyjj
662 vii(4) = rhojj(1) * vzjj
663 vii(5) = eintjj(1) + half * rhojj(1) * veljj2
665 fii(1) = vii(1) * normal_veljj
666 fii(2) = vii(2) * normal_veljj + pjj(1) * nx
667 fii(3) = vii(3) * normal_veljj + pjj(1) * ny
668 fii(4) = vii(4) * normal_veljj + pjj(1) * nz
669 fii(5) = (vii(5) + pjj(1) + pshift) * normal_veljj
673 multi_fvm%FLUXES(1:5, kface_old, i_old) = direction * (fii(1:5) - normalw * vii(1:5)) * surf
674 multi_fvm%FLUXES(6, kface_old, i_old) = direction * normal_veljj * surf
679 alphaii = phase_alphajj(imat)
680 sub_rhoii = phase_rhojj(imat)
681 sub_rhoeintii = phase_eintjj(imat)
682 sub_viistar(1) = alphaii
683 sub_viistar(2) = alphaii * sub_rhoii
684 sub_viistar(3) = alphaii * sub_rhoeintii
685 sub_fiistar(1:3) = sub_viistar(1:3) * normal_veljj
686 multi_fvm%SUBVOL_FLUXES(imat, kface_old, i_old) = direction *
687 . (sub_fiistar(1) - normalw * sub_viistar(1)) * surf
688 multi_fvm%SUBMASS_FLUXES(imat, kface_old, i_old) = direction *
689 . (sub_fiistar(2) - normalw * sub_viistar(2)) * surf
690 multi_fvm%SUBENER_FLUXES(imat, kface_old, i_old) = direction *
691 . (sub_fiistar(3) - normalw * sub_viistar(3)) * surf
698 iarray(1:2)=(/iout,istdo/)
701 WRITE(id_out,*)
" **error : MUSCL FLUXES CALCULATION"
702 WRITE(id_out,*)
" potential instability with elem id = ", global_id_current_elm(ii)
703 WRITE(id_out,*)
" face id = ", kface3
704 WRITE(id_out,*)
" sound speed = ", sspii(1)
705 WRITE(id_out
" adjacent sound speed = ", sspjj(1)
706 WRITE(id_out,*)
" normal velocity = ", normal_velii
707 WRITE(id_out,*)
" adjacent normal velocity = ", normal_veljj
709 WRITE(id_out,*)
" recommendations :"
710 WRITE(id_out,*)
" -1- check EoS parameters and unit system"
711 WRITE(id_out,*)
" -2- check boundary conditions (type, parameters, and proximity from important gradients);"
713 . " -3- update beta parameters in
"
718#include "lockoff.inc
"
723 IF (J_OLD <= NUMEL_SPMD) THEN
724! KFACE2_OLD = MULTI_FVM%FVM_CONNECTIVITY%KVOIS(NB_FACE * (I_OLD - 1) + KFACE3)
725 MULTI_FVM%FLUXES(1:6, KFACE2_OLD, J_OLD) = -MULTI_FVM%FLUXES(1:6, KFACE_OLD, I_OLD)
728 MULTI_FVM%SUBVOL_FLUXES(IMAT, KFACE2_OLD, J_OLD) = -MULTI_FVM%SUBVOL_FLUXES(IMAT, KFACE_OLD, I_OLD)
729 MULTI_FVM%SUBMASS_FLUXES(IMAT, KFACE2_OLD, J_OLD) = -MULTI_FVM%SUBMASS_FLUXES(IMAT, KFACE_OLD, I_OLD)
730 MULTI_FVM%SUBENER_FLUXES(IMAT, KFACE2_OLD, J_OLD) = -MULTI_FVM%SUBENER_FLUXES(IMAT, KFACE_OLD, I_OLD)
734! -----------------------------------------------
735 ELSE IF (J_OLD <= 0) THEN
737 VX = MULTI_FVM%VEL(1, ELEMID)
738 VY = MULTI_FVM%VEL(2, ELEMID)
739 VZ = MULTI_FVM%VEL(3, ELEMID)
740 NORMVEL = VX * NX + VY * NY + VZ * NZ
741 NORMALW = WFAC(1) * NX + WFAC(2) * NY + WFAC(3) * NZ
742 SSP = MULTI_FVM%SOUND_SPEED(ELEMID)
743 RHO = MULTI_FVM%RHO(ELEMID)
745 SL = MIN(NORMVEL - SSP, TWO * NORMALW - NORMVEL - SSP)
746 SR = MAX(NORMVEL + SSP, TWO * NORMALW - NORMVEL + SSP)
751 P = MULTI_FVM%PRES(ELEMID)
752 PSTAR = P + RHO * (SSTAR - NORMVEL) * (SL - NORMVEL)
758 PP(5) = SSTAR * (PSTAR + PSHIFT)
759 MULTI_FVM%FLUXES(1:5, KFACE3, ELEMID) = SURF * PP(1:5)
760 MULTI_FVM%FLUXES(6, KFACE3, ELEMID) = SURF * NORMALW
765 MULTI_FVM%SUBVOL_FLUXES(IMAT, KFACE3, I_OLD) = ZERO
766 MULTI_FVM%SUBMASS_FLUXES(IMAT, KFACE3, I_OLD) = ZERO
767 MULTI_FVM%SUBENER_FLUXES(IMAT, KFACE3, I_OLD) = ZERO
771! -----------------------------------------------