34 . PM, IPM, MULTI_FVM, WGRID, XGRID,
42 use element_mod ,
only : nixs,nixq,nixtg
46#include "implicit_f.inc"
62 TYPE(elbuf_struct_),
TARGET,
DIMENSION(NGROUP) :: ELBUF_TAB
63 INTEGER,
INTENT(IN) :: IPARG(NPARG, *)
64 INTEGER,
INTENT(IN) :: ITASK
65 INTEGER,
INTENT(IN) :: IXS(NIXS, *), IXQ(NIXQ, *), IXTG(NIXTG, *)
66 INTEGER,
INTENT(IN) :: IPM(NPROPMI, *)
67 my_real,
INTENT(IN) :: pm(npropm, *)
68 TYPE(multi_fvm_struct),
INTENT(INOUT) :: MULTI_FVM
69 my_real,
INTENT(IN) :: wgrid(*), xgrid(3, *)
70 INTEGER,
INTENT(OUT) :: ITYPTST, NELTST
74 TYPE(g_bufel_),
POINTER :: GBUF
75 INTEGER :: NG, NEL, II, JJ, KFACE, I, J, NB_FACE, NFT, ITY
77 INTEGER :: NBMAT, IMAT
78 INTEGER :: NODE1, NODE2, NODE3, NODE4,
79 . node5, node6, node7, node8
80 my_real :: w1(3), w2(3), w3(3), w4(3),
81 . w5(3), w6(3), w7(3), w8(3)
82 my_real :: x1(3), x2(3), x3(3), x4(3),
83 . x5(3), x6(3), x7(3), x8(3)
85 my_real :: lambdaii, lambdaf, normuii, normujj
86 my_real :: fii(5), fjj(5), normal_vel, normal_vel2, vii(5), vjj(5), vel2
88 INTEGER :: ISOLNOD, MATLAW
89 LOGICAL :: l_FOUND_LOWER
96 DO ng = itask + 1, ngroup, nthread
98 IF (matlaw == 151)
THEN
102 isolnod = iparg(28, ng)
103 gbuf => elbuf_tab(ng)%GBUF
105 gbuf%DELTAX(1:nel) = zero
110 ELSEIF (ity == 7)
THEN
119 DO kface = 1, nb_face
120 nx = multi_fvm%FACE_DATA%NORMAL(1, kface, i)
121 ny = multi_fvm%FACE_DATA%NORMAL(2, kface, i)
122 nz = multi_fvm%FACE_DATA%NORMAL(3, kface, i)
123 wfac(1:3) = multi_fvm%FACE_DATA%WFAC(1:3, kface, i)
124 surf = multi_fvm%FACE_DATA%SURF(kface, i)
126 normal_vel2 = (multi_fvm%VEL(1, i) - wfac(1)) * nx +
127 . (multi_fvm%VEL(2, i) - wfac(2)) * ny +
128 . (multi_fvm%VEL(3, i) - wfac(3)) * nz
130 . surf / gbuf%VOL(ii) * (multi_fvm%SOUND_SPEED(i) + abs(normal_vel2)) / dtfac1(102))
131 gbuf%DELTAX(ii) =
max(gbuf%DELTAX(ii), surf / gbuf%VOL(ii))
133 gbuf%DELTAX(ii) = one / gbuf%DELTAX(ii)
138 l_found_lower=.false.
140 IF(
dtel(ii)>zero)gbuf%DT(ii) = one/
dtel(ii)
141 IF (
dtel(ii) > dt2t)
THEN
145 IF (multi_fvm%SYM == 0)
THEN
146 neltst = ixs(nixs, ii + nft)
151 ELSEIF (ity == 7)
THEN
153 neltst = ixtg(nixtg, ii + nft)
159 !check
IF lower than dtmin
160 IF(l_found_lower .AND. dt2t/=zero)
THEN
161 IF(one/dt2t<dtmin1(102))
THEN
164 WRITE(iout,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR ALE/EULER CELL',neltst
165 WRITE(istdo,*)
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR ALE/EULER CELL',neltst
166#include "lockoff.inc"
171 ENDDO ! ng = itask + 1, ngroup, nthread
175 IF (dt2t > zero)
THEN
subroutine dtel(ssp, pm, geo, pid, mat, rho0, vis, deltax, aire, vol, dtx)
subroutine multi_compute_dt(dt2t, elbuf_tab, iparg, itask, ixs, ixq, ixtg, pm, ipm, multi_fvm, wgrid, xgrid, neltst, ityptst)