155 T11, T12, T13, T21, T22, T23, T31, T32, T33, & ! (out)
158 ddens_, momx_, momy_, momz_, drhot_, dens_hyd, pres_hyd, &
160 dx, dy, dz, sx, sy, sz, lift, lmesh, elem, lmesh2d, elem2d, &
171 real(rp),
intent(out) :: t11(elem%np,lmesh%nea)
172 real(rp),
intent(out) :: t12(elem%np,lmesh%nea)
173 real(rp),
intent(out) :: t13(elem%np,lmesh%nea)
174 real(rp),
intent(out) :: t21(elem%np,lmesh%nea)
175 real(rp),
intent(out) :: t22(elem%np,lmesh%nea)
176 real(rp),
intent(out) :: t23(elem%np,lmesh%nea)
177 real(rp),
intent(out) :: t31(elem%np,lmesh%nea)
178 real(rp),
intent(out) :: t32(elem%np,lmesh%nea)
179 real(rp),
intent(out) :: t33(elem%np,lmesh%nea)
180 real(rp),
intent(out) :: df1(elem%np,lmesh%nea)
181 real(rp),
intent(out) :: df2(elem%np,lmesh%nea)
182 real(rp),
intent(out) :: df3(elem%np,lmesh%nea)
183 real(rp),
intent(out) :: tke(elem%np,lmesh%nea)
184 real(rp),
intent(out) :: nu(elem%np,lmesh%nea)
185 real(rp),
intent(out) :: kh(elem%np,lmesh%nea)
186 real(rp),
intent(in) :: ddens_(elem%np,lmesh%nea)
187 real(rp),
intent(in) :: momx_ (elem%np,lmesh%nea)
188 real(rp),
intent(in) :: momy_ (elem%np,lmesh%nea)
189 real(rp),
intent(in) :: momz_ (elem%np,lmesh%nea)
190 real(rp),
intent(in) :: drhot_(elem%np,lmesh%nea)
191 real(rp),
intent(in) :: dens_hyd(elem%np,lmesh%nea)
192 real(rp),
intent(in) :: pres_hyd(elem%np,lmesh%nea)
193 real(rp),
intent(in) :: pres(elem%np,lmesh%nea)
194 real(rp),
intent(in) :: pt(elem%np,lmesh%nea)
195 type(
sparsemat),
intent(in) :: dx, dy, dz
196 type(
sparsemat),
intent(in) :: sx, sy, sz
198 logical,
intent(in) :: is_bound(elem%nfptot,lmesh%ne)
200 real(rp) :: fx(elem%np), fy(elem%np), fz(elem%np), liftdelflx(elem%np)
201 real(rp) :: dens(elem%np), rdens(elem%np), rhot(elem%np), q(elem%np)
202 real(rp) :: ddensdxi(elem%np,3)
203 real(rp) :: dveldxi(elem%np,3,3)
204 real(rp) :: del_flux_rho (elem%nfptot,lmesh%ne,3)
205 real(rp) :: del_flux_mom (elem%nfptot,lmesh%ne,3,3)
206 real(rp) :: del_flux_rhot(elem%nfptot,lmesh%ne,3)
208 real(rp) :: s11(elem%np), s12(elem%np), s22(elem%np), s23(elem%np), s31(elem%np), s33(elem%np)
209 real(rp) :: skkovthree
210 real(rp) :: tkemultwoovthree
219 real(rp) :: lambda (elem%np,lmesh%ne)
220 real(rp) :: lambda_r(elem%np)
221 real(rp) :: e(elem%np)
222 real(rp) :: c1(elem%np)
228 call cal_del_flux_grad( del_flux_rho, del_flux_mom, del_flux_rhot, &
229 ddens_, momx_, momy_, momz_, drhot_, dens_hyd, pres_hyd, pt, &
230 lmesh%normal_fn(:,:,1), lmesh%normal_fn(:,:,2), lmesh%normal_fn(:,:,3), &
231 lmesh%vmapM, lmesh%vmapP, &
232 lmesh, elem, is_bound )
235 cs, filter_fac, lmesh, elem, lmesh2d, elem2d )
243 do ke=lmesh%NeS, lmesh%NeE
245 dens(:) = dens_hyd(:,ke) + ddens_(:,ke)
246 rdens(:) = 1.0_rp / dens(:)
247 rhot(:) = dens(:) * pt(:,ke)
251 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rho(:,ke,1), liftdelflx )
252 ddensdxi(:,1) = lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:)
255 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rho(:,ke,2), liftdelflx )
256 ddensdxi(:,2) = lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:)
259 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rho(:,ke,3), liftdelflx )
260 ddensdxi(:,3) = lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:)
263 q(:) = momx_(:,ke) * rdens(:)
266 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,1,1), liftdelflx )
267 dveldxi(:,1,1) = ( lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:) - q(:) * ddensdxi(:,1) ) * rdens(:)
270 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,2,1), liftdelflx )
271 dveldxi(:,2,1) = ( lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:) - q(:) * ddensdxi(:,2) ) * rdens(:)
274 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,3,1), liftdelflx )
275 dveldxi(:,3,1) = ( lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:) - q(:) * ddensdxi(:,3) ) * rdens(:)
278 q(:) = momy_(:,ke) * rdens(:)
281 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,1,2), liftdelflx )
282 dveldxi(:,1,2) = ( lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:) - q(:) * ddensdxi(:,1) ) * rdens(:)
285 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,2,2), liftdelflx )
286 dveldxi(:,2,2) = ( lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:) - q(:) * ddensdxi(:,2) ) * rdens(:)
289 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,3,2), liftdelflx )
290 dveldxi(:,3,2) = ( lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:) - q(:) * ddensdxi(:,3) ) * rdens(:)
293 q(:) = momz_(:,ke) * rdens(:)
296 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,1,3), liftdelflx )
297 dveldxi(:,1,3) = ( lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:) - q(:) * ddensdxi(:,1) ) * rdens(:)
300 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,2,3), liftdelflx )
301 dveldxi(:,2,3) = ( lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:) - q(:) * ddensdxi(:,2) ) * rdens(:)
304 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,3,3), liftdelflx )
305 dveldxi(:,3,3) = ( lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:) - q(:) * ddensdxi(:,3) ) * rdens(:)
308 q(:) = rhot(:) * rdens(:)
311 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rhot(:,ke,1), liftdelflx )
312 df1(:,ke) = ( lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:) - q(:) * ddensdxi(:,1) ) * rdens(:)
315 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rhot(:,ke,2), liftdelflx )
316 df2(:,ke) = ( lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:) - q(:) * ddensdxi(:,2) ) * rdens(:)
319 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rhot(:,ke,3), liftdelflx )
320 df3(:,ke) = ( lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:) - q(:) * ddensdxi(:,3) ) * rdens(:)
324 s11(:) = dveldxi(:,1,1)
325 s12(:) = 0.5_rp * ( dveldxi(:,1,2) + dveldxi(:,2,1) )
326 s22(:) = dveldxi(:,2,2)
327 s23(:) = 0.5_rp * ( dveldxi(:,2,3) + dveldxi(:,3,2) )
328 s31(:) = 0.5_rp * ( dveldxi(:,1,3) + dveldxi(:,3,1) )
329 s33(:) = dveldxi(:,3,3)
334 s2 = 2.0_rp * ( s11(p)**2 + s22(p)**2 + s33(p)**2 ) &
335 + 4.0_rp * ( s31(p)**2 + s12(p)**2 + s23(p)**2 )
337 ri = grav / pt(p,ke) * df3(p,ke) / max( s2, eps )
340 if (ri < 0.0_rp )
then
341 fm = sqrt( 1.0_rp - fmc * ri )
342 nu(p,ke) = lambda(p,ke)**2 * sqrt( s2 ) * fm
343 pr = fm / sqrt( 1.0_rp - fhb * ri ) * prn
344 else if ( ri < ric )
then
345 fm = ( 1.0_rp - ri * rric )**4
346 nu(p,ke) = lambda(p,ke)**2 * sqrt( s2 ) * fm
347 pr = prn / ( 1.0_rp - onemprnovric * ri )
356 kh(p,ke) = max( min( nu(p,ke) / pr, nu_max ), eps )
357 nu(p,ke) = max( min( nu(p,ke), nu_max ), eps )
358 pr = nu(p,ke) / kh(p,ke)
359 lambda_r(p) = lambda(p,ke) * sqrt( fm / sqrt( 1.0_rp - ri/pr ) )
369 e(:) = nu(:,ke)**3 / ( lambda_r(:)**4 + eps )
374 tke(:,ke) = ( e(:) * lambda_r(:) / c1(:) )**twooverthree
379 tkemultwoovthree = twooverthree * tke(p,ke) * tke_fac
380 skkovthree = ( s11(p) + s22(p) + s33(p) ) * oneoverthree
381 coef = 2.0_rp * nu(p,ke)
383 t11(p,ke) = dens(p) * ( coef * ( s11(p) - skkovthree ) - tkemultwoovthree )
384 t12(p,ke) = dens(p) * coef * s12(p)
385 t13(p,ke) = dens(p) * coef * s31(p)
387 t21(p,ke) = dens(p) * coef * s12(p)
388 t22(p,ke) = dens(p) * ( coef * ( s22(p) - skkovthree ) - tkemultwoovthree )
389 t23(p,ke) = dens(p) * coef * s23(p)
391 t31(p,ke) = dens(p) * coef * s31(p)
392 t32(p,ke) = dens(p) * coef * s23(p)
393 t33(p,ke) = dens(p) * ( coef * ( s33(p) - skkovthree ) - tkemultwoovthree )
396 df1(:,ke) = kh(:,ke) * df1(:,ke)
397 df2(:,ke) = kh(:,ke) * df2(:,ke)
398 df3(:,ke) = kh(:,ke) * df3(:,ke)