173 T11, T12, T13, T21, T22, T23, T31, T32, T33, & ! (out)
176 ddens_, momx_, momy_, momz_, drhot_, dens_hyd, pres_hyd, &
178 dx, dy, dz, sx, sy, sz, lift, lmesh, elem, lmesh2d, elem2d, &
192 real(rp),
intent(out) :: t11(elem%np,lmesh%nea)
193 real(rp),
intent(out) :: t12(elem%np,lmesh%nea)
194 real(rp),
intent(out) :: t13(elem%np,lmesh%nea)
195 real(rp),
intent(out) :: t21(elem%np,lmesh%nea)
196 real(rp),
intent(out) :: t22(elem%np,lmesh%nea)
197 real(rp),
intent(out) :: t23(elem%np,lmesh%nea)
198 real(rp),
intent(out) :: t31(elem%np,lmesh%nea)
199 real(rp),
intent(out) :: t32(elem%np,lmesh%nea)
200 real(rp),
intent(out) :: t33(elem%np,lmesh%nea)
201 real(rp),
intent(out) :: df1(elem%np,lmesh%nea)
202 real(rp),
intent(out) :: df2(elem%np,lmesh%nea)
203 real(rp),
intent(out) :: df3(elem%np,lmesh%nea)
204 real(rp),
intent(out) :: tke(elem%np,lmesh%nea)
205 real(rp),
intent(out) :: nu(elem%np,lmesh%nea)
206 real(rp),
intent(out) :: kh(elem%np,lmesh%nea)
207 real(rp),
intent(in) :: ddens_(elem%np,lmesh%nea)
208 real(rp),
intent(in) :: momx_ (elem%np,lmesh%nea)
209 real(rp),
intent(in) :: momy_ (elem%np,lmesh%nea)
210 real(rp),
intent(in) :: momz_ (elem%np,lmesh%nea)
211 real(rp),
intent(in) :: drhot_(elem%np,lmesh%nea)
212 real(rp),
intent(in) :: dens_hyd(elem%np,lmesh%nea)
213 real(rp),
intent(in) :: pres_hyd(elem%np,lmesh%nea)
214 real(rp),
intent(in) :: pres(elem%np,lmesh%nea)
215 real(rp),
intent(in) :: pt(elem%np,lmesh%nea)
216 type(
sparsemat),
intent(in) :: dx, dy, dz
217 type(
sparsemat),
intent(in) :: sx, sy, sz
219 logical,
intent(in) :: is_bound(elem%nfptot,lmesh%ne)
221 real(rp) :: fx(elem%np), fy(elem%np), fz(elem%np), liftdelflx(elem%np)
222 real(rp) :: dens(elem%np), rdens(elem%np), rhot(elem%np), q(elem%np)
223 real(rp) :: ddensdxi(elem%np,3)
224 real(rp) :: dqdxi_(elem%np,2)
225 real(rp) :: dveldxi(elem%np,3,3)
226 real(rp) :: del_flux_rho (elem%nfptot,lmesh%ne,3)
227 real(rp) :: del_flux_mom (elem%nfptot,lmesh%ne,3,3)
228 real(rp) :: del_flux_rhot(elem%nfptot,lmesh%ne,3)
236 real(rp) :: lambda (elem%np,lmesh%ne)
237 real(rp) :: lambda_r(elem%np)
238 real(rp) :: e(elem%np)
239 real(rp) :: c1(elem%np)
241 real(rp) :: g11(elem%np), g12(elem%np), g22(elem%np), g33(elem%np)
242 real(rp) :: x2d(elem2d%np,lmesh2d%ne), y2d(elem2d%np,lmesh2d%ne)
243 real(rp) :: x(elem%np), y(elem%np), rdel2(elem%np)
245 real(rp) :: s11(elem%np), s12(elem%np), s22(elem%np), s23(elem%np), s31(elem%np), s33(elem%np)
246 real(rp) :: divovthree(elem%np), tkemultwoovthree(elem%np)
248 real(rp) :: sabs_tmp(elem%np)
249 real(rp) :: sij(elem%np,3,3)
250 real(rp) :: g_ij(elem%np,3,3)
252 real(rp) :: rgam2(elem%np)
253 real(rp) :: r(elem%np)
260 call cal_del_flux_grad( del_flux_rho, del_flux_mom, del_flux_rhot, &
261 ddens_, momx_, momy_, momz_, drhot_, dens_hyd, pres_hyd, pt, &
262 lmesh%normal_fn(:,:,1), lmesh%normal_fn(:,:,2), lmesh%normal_fn(:,:,3), &
263 lmesh%vmapM, lmesh%vmapP, &
264 lmesh, elem, is_bound )
267 cs, filter_fac, lmesh, elem, lmesh2d, elem2d )
278 do ke2d = lmesh2d%NeS, lmesh2d%NeE
279 x2d(:,ke2d) = tan(lmesh2d%pos_en(:,ke2d,1))
280 y2d(:,ke2d) = tan(lmesh2d%pos_en(:,ke2d,2))
285 do ke=lmesh%NeS, lmesh%NeE
287 ke2d = lmesh%EMap3Dto2D(ke)
289 r(:) = rplanet * lmesh%gam(:,ke)
290 rgam2(:) = 1.0_rp / lmesh%gam(:,ke)**2
291 g11(:) = lmesh%GIJ(elem%IndexH2Dto3D,ke2d,1,1) * rgam2(:)
292 g12(:) = lmesh%GIJ(elem%IndexH2Dto3D,ke2d,1,2) * rgam2(:)
293 g22(:) = lmesh%GIJ(elem%IndexH2Dto3D,ke2d,2,2) * rgam2(:)
297 g_ij(:,1,1) = lmesh%G_ij(elem%IndexH2Dto3D,ke2d,1,1) / rgam2(:)
298 g_ij(:,2,1) = lmesh%G_ij(elem%IndexH2Dto3D,ke2d,2,1) / rgam2(:)
299 g_ij(:,1,2) = g_ij(:,2,1)
300 g_ij(:,2,2) = lmesh%G_ij(elem%IndexH2Dto3D,ke2d,2,2) / rgam2(:)
303 x(:) = x2d(elem%IndexH2Dto3D,ke2d)
304 y(:) = y2d(elem%IndexH2Dto3D,ke2d)
305 rdel2(:) = 1.0_rp / ( 1.0_rp + x(:)**2 + y(:)**2 )
307 dens(:) = dens_hyd(:,ke) + ddens_(:,ke)
308 rdens(:) = 1.0_rp / dens(:)
309 rhot(:) = dens(:) * pt(:,ke)
313 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rho(:,ke,1), liftdelflx )
314 ddensdxi(:,1) = lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:)
317 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rho(:,ke,2), liftdelflx )
318 ddensdxi(:,2) = lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:)
321 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rho(:,ke,3), liftdelflx )
322 ddensdxi(:,3) = lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:)
325 q(:) = momx_(:,ke) * rdens(:)
328 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,1,1), liftdelflx )
329 dqdxi_(:,1) = ( lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:) - q(:) * ddensdxi(:,1) &
330 + rdel2(:) * y(:) * &
331 ( 2.0_rp * x(:) * y(:) * momx_(:,ke) - ( 1.0_rp + y(:)**2 ) * momy_(:,ke) ) &
332 + shapro_coef * momz_(:,ke) / r(:) &
336 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,2,1), liftdelflx )
337 dqdxi_(:,2) = ( lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:) - q(:) * ddensdxi(:,2) &
338 + rdel2(:) * y(:) * &
339 ( - ( 1.0_rp + y(:)**2 ) * momy_(:,ke) ) &
343 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,3,1), liftdelflx )
344 dveldxi(:,3,1) = ( lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:) - q(:) * ddensdxi(:,3) &
345 + shapro_coef * momx_(:,ke) / r(:) &
349 divovthree(:) = dqdxi_(:,1)
350 dveldxi(:,1,1) = g11(:) * dqdxi_(:,1) + g12(:) * dqdxi_(:,2)
351 dveldxi(:,2,1) = g12(:) * dqdxi_(:,1) + g22(:) * dqdxi_(:,2)
354 q(:) = momy_(:,ke) * rdens(:)
357 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,1,2), liftdelflx )
358 dqdxi_(:,1) = ( lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:) - q(:) * ddensdxi(:,1) &
359 + rdel2(:) * x(:) * &
360 ( - ( 1.0_rp + x(:)**2 ) * momy_(:,ke) ) &
364 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,2,2), liftdelflx )
365 dqdxi_(:,2) = ( lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:) - q(:) * ddensdxi(:,2) &
366 + rdel2(:) * x(:) * &
367 ( - ( 1.0_rp + x(:)**2 ) * momx_(:,ke) + 2.0_rp * x(:) * y(:) * momy_(:,ke) ) &
368 + shapro_coef * momz_(:,ke) / r(:) &
372 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,3,2), liftdelflx )
373 dveldxi(:,3,2) = ( lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:) - q(:) * ddensdxi(:,3) &
374 + shapro_coef * momy_(:,ke) / r(:) &
376 divovthree(:) = divovthree(:) + dqdxi_(:,2)
377 dveldxi(:,1,2) = g11(:) * dqdxi_(:,1) + g12(:) * dqdxi_(:,2)
378 dveldxi(:,2,2) = g12(:) * dqdxi_(:,1) + g22(:) * dqdxi_(:,2)
381 q(:) = momz_(:,ke) * rdens(:)
384 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) *del_flux_mom(:,ke,1,3), liftdelflx )
385 dqdxi_(:,1) = ( lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:) - q(:) * ddensdxi(:,1) &
386 + shapro_coef * r(:) * rdel2(:)**2 * ( 1.0_rp + x(:)**2 ) * ( 1.0_rp + y(:)**2 ) &
387 * ( - ( 1.0_rp + x(:)**2 ) * momx_(:,ke) + x(:) * y(:) * momy_(:,ke) ) &
392 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,2,3), liftdelflx )
393 dqdxi_(:,2) = ( lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:) - q(:) * ddensdxi(:,2) &
394 + shapro_coef * r(:) * rdel2(:)**2 * ( 1.0_rp + x(:)**2 ) * ( 1.0_rp + y(:)**2 ) &
395 * ( x(:) * y(:) * momx_(:,ke) - ( 1.0_rp + y(:)**2 ) * momy_(:,ke) ) &
399 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,3,3), liftdelflx )
400 dveldxi(:,3,3) = ( lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:) - q(:) * ddensdxi(:,3) ) * rdens(:)
403 divovthree(:) = divovthree(:) + dveldxi(:,3,3)
404 dveldxi(:,1,3) = g11(:) * dqdxi_(:,1) + g12(:) * dqdxi_(:,2)
405 dveldxi(:,2,3) = g12(:) * dqdxi_(:,1) + g22(:) * dqdxi_(:,2)
408 q(:) = rhot(:) * rdens(:)
411 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rhot(:,ke,1), liftdelflx )
412 dqdxi_(:,1) = ( lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:) - q(:) * ddensdxi(:,1) ) * rdens(:)
415 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rhot(:,ke,2), liftdelflx )
416 dqdxi_(:,2) = ( lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:) - q(:) * ddensdxi(:,2) ) * rdens(:)
419 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rhot(:,ke,3), liftdelflx )
420 df3(:,ke) = ( lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:) - q(:) * ddensdxi(:,3) ) * rdens(:)
422 df1(:,ke) = g11(:) * dqdxi_(:,1) + g12(:) * dqdxi_(:,2)
423 df2(:,ke) = g12(:) * dqdxi_(:,1) + g22(:) * dqdxi_(:,2)
426 s11(:) = dveldxi(:,1,1)
427 s12(:) = 0.5_rp * ( dveldxi(:,1,2) + dveldxi(:,2,1) )
428 s22(:) = dveldxi(:,2,2)
429 s23(:) = 0.5_rp * ( dveldxi(:,2,3) + dveldxi(:,3,2) )
430 s31(:) = 0.5_rp * ( dveldxi(:,1,3) + dveldxi(:,3,1) )
431 s33(:) = dveldxi(:,3,3)
446 sabs_tmp(:) = sabs_tmp(:) &
448 g_ij(:,i,1) * ( g_ij(:,j,1) * sij(:,1,1) + g_ij(:,j,2) * sij(:,1,2) + g_ij(:,j,3) * sij(:,1,3) ) &
449 + g_ij(:,i,2) * ( g_ij(:,j,1) * sij(:,2,1) + g_ij(:,j,2) * sij(:,2,2) + g_ij(:,j,3) * sij(:,2,3) ) &
450 + g_ij(:,i,3) * ( g_ij(:,j,1) * sij(:,3,1) + g_ij(:,j,2) * sij(:,3,2) + g_ij(:,j,3) * sij(:,3,3) ) )
457 s2 = 2.0_rp * sabs_tmp(p)
459 ri = grav / pt(p,ke) * df3(p,ke) / max( s2, eps )
462 if (ri < 0.0_rp )
then
463 fm = sqrt( 1.0_rp - fmc * ri )
464 nu(p,ke) = lambda(p,ke)**2 * sqrt( s2 ) * fm
465 pr = fm / sqrt( 1.0_rp - fhb * ri ) * prn
466 else if ( ri < ric )
then
467 fm = ( 1.0_rp - ri * rric )**4
468 nu(p,ke) = lambda(p,ke)**2 * sqrt( s2 ) * fm
469 pr = prn / ( 1.0_rp - onemprnovric * ri )
478 kh(p,ke) = max( min( nu(p,ke) / pr, nu_max ), eps )
479 nu(p,ke) = max( min( nu(p,ke), nu_max ), eps )
480 pr = nu(p,ke) / kh(p,ke)
481 lambda_r(p) = lambda(p,ke) * sqrt( fm / sqrt( 1.0_rp - ri/pr ) )
489 e(:) = nu(:,ke)**3 / ( lambda_r(:)**4 + eps )
494 tke(:,ke) = ( e(:) * lambda_r(:) / c1(:) )**twooverthree
500 divovthree(:) = divovthree(:) * oneoverthree
501 tkemultwoovthree(:) = twooverthree * tke(:,ke) * tke_fac
503 t11(p,ke) = dens(p) * ( 2.0_rp * nu(p,ke) * ( s11(p) - g11(p) * divovthree(p) ) - g11(p) * tkemultwoovthree(p) )
504 t12(p,ke) = dens(p) * ( 2.0_rp * nu(p,ke) * ( s12(p) - g12(p) * divovthree(p) ) - g12(p) * tkemultwoovthree(p) )
505 t13(p,ke) = dens(p) * 2.0_rp * nu(p,ke) * s31(p)
508 t21(p,ke) = dens(p) * ( 2.0_rp * nu(p,ke) * ( s12(p) - g12(p) * divovthree(p) ) - g12(p) * tkemultwoovthree(p) )
509 t22(p,ke) = dens(p) * ( 2.0_rp * nu(p,ke) * ( s22(p) - g22(p) * divovthree(p) ) - g22(p) * tkemultwoovthree(p) )
510 t23(p,ke) = dens(p) * 2.0_rp * nu(p,ke) * s23(p)
513 t31(p,ke) = dens(p) * 2.0_rp * nu(p,ke) * s31(p)
514 t32(p,ke) = dens(p) * 2.0_rp * nu(p,ke) * s23(p)
515 t33(p,ke) = dens(p) * ( 2.0_rp * nu(p,ke) * ( s33(p) - g33(p) * divovthree(p) ) - g33(p) * tkemultwoovthree(p) )
518 df1(:,ke) = kh(:,ke) * df1(:,ke)
519 df2(:,ke) = kh(:,ke) * df2(:,ke)
520 df3(:,ke) = kh(:,ke) * df3(:,ke)
531 DFQ1, DFQ2, DFQ3, & ! (out)
533 kh, qtrc, ddens, dens_hyd, &
534 dx, dy, dz, sx, sy, sz, lift, lmesh, elem, lmesh2d, elem2d, &
535 is_bound, cal_grad_dens )
543 real(rp),
intent(out) :: dfq1(elem%np,lmesh%nea)
544 real(rp),
intent(out) :: dfq2(elem%np,lmesh%nea)
545 real(rp),
intent(out) :: dfq3(elem%np,lmesh%nea)
546 real(rp),
intent(inout) :: drdx(elem%np,lmesh%nea)
547 real(rp),
intent(inout) :: drdy(elem%np,lmesh%nea)
548 real(rp),
intent(inout) :: drdz(elem%np,lmesh%nea)
549 real(rp),
intent(in) :: kh(elem%np,lmesh%nea)
550 real(rp),
intent(in) :: qtrc(elem%np,lmesh%nea)
551 real(rp),
intent(in) :: ddens(elem%np,lmesh%nea)
552 real(rp),
intent(in) :: dens_hyd(elem%np,lmesh%nea)
553 type(
sparsemat),
intent(in) :: dx, dy, dz
554 type(
sparsemat),
intent(in) :: sx, sy, sz
556 logical,
intent(in) :: is_bound(elem%nfptot,lmesh%ne)
557 logical,
intent(in) :: cal_grad_dens
559 real(rp) :: g11(elem%np), g12(elem%np), g22(elem%np)
560 real(rp) :: fx(elem%np), fy(elem%np), fz(elem%np), liftdelflx(elem%np)
561 real(rp) :: dqdxi_(elem%np,2)
562 real(rp) :: del_flux(elem%nfptot,lmesh%ne,3)
563 real(rp) :: del_flux_rho (elem%nfptot,lmesh%ne,3)
565 real(rp) :: dens(elem%np), rdens(elem%np)
566 real(rp) :: rhoxqtrc(elem%np)
572 call cal_del_flux_grad_qtrc( del_flux, del_flux_rho, &
573 qtrc, ddens, dens_hyd, &
574 lmesh%normal_fn(:,:,1), lmesh%normal_fn(:,:,2), lmesh%normal_fn(:,:,3), &
575 lmesh%vmapM, lmesh%vmapP, &
576 lmesh, elem, is_bound, cal_grad_dens )
583 if ( cal_grad_dens )
then
585 do ke=lmesh%NeS, lmesh%NeE
586 dens(:) = dens_hyd(:,ke) + ddens(:,ke)
589 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rho(:,ke,1), liftdelflx )
590 drdx(:,ke) = lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:)
593 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rho(:,ke,2), liftdelflx )
594 drdy(:,ke) = lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:)
597 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rho(:,ke,3), liftdelflx )
598 drdz(:,ke) = lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:)
604 do ke=lmesh%NeS, lmesh%NeE
605 ke2d = lmesh%EMap3Dto2D(ke)
606 g11(:) = lmesh%GIJ(elem%IndexH2Dto3D,ke2d,1,1)
607 g12(:) = lmesh%GIJ(elem%IndexH2Dto3D,ke2d,1,2)
608 g22(:) = lmesh%GIJ(elem%IndexH2Dto3D,ke2d,2,2)
610 dens(:) = dens_hyd(:,ke) + ddens(:,ke)
611 rdens(:) = 1.0_rp / dens(:)
612 rhoxqtrc(:) = dens(:) * qtrc(:,ke)
616 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux(:,ke,1), liftdelflx )
617 dqdxi_(:,1) = ( lmesh%Escale(:,ke,1,1) * fx(:) + liftdelflx(:) - qtrc(:,ke) * drdx(:,ke) ) * rdens(:)
620 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux(:,ke,2), liftdelflx )
621 dqdxi_(:,2) = ( lmesh%Escale(:,ke,2,2) * fy(:) + liftdelflx(:) - qtrc(:,ke) * drdy(:,ke) ) * rdens(:)
624 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux(:,ke,3), liftdelflx )
625 dfq3(:,ke) = kh(:,ke) * ( lmesh%Escale(:,ke,3,3) * fz(:) + liftdelflx(:) - qtrc(:,ke) * drdz(:,ke) ) * rdens(:)
627 dfq1(:,ke) = kh(:,ke) * ( g11(:) * dqdxi_(:,1) + g12(:) * dqdxi_(:,2) )
628 dfq2(:,ke) = kh(:,ke) * ( g12(:) * dqdxi_(:,1) + g22(:) * dqdxi_(:,2) )
796 MOMX_t, MOMY_t, MOMZ_t, RHOT_t, & ! (out)
797 t11, t12, t13, t21, t22, t23, t31, t32, t33, &
800 ddens_, momx_, momy_, momz_, drhot_, &
801 dens_hyd, pres_hyd, pres_, pt_, &
802 dx, dy, dz, sx, sy, sz, lift, lmesh, elem, lmesh2d, elem2d, &
811 real(rp),
intent(out) :: momx_t(elem%np,lmesh%nea)
812 real(rp),
intent(out) :: momy_t(elem%np,lmesh%nea)
813 real(rp),
intent(out) :: momz_t(elem%np,lmesh%nea)
814 real(rp),
intent(out) :: rhot_t(elem%np,lmesh%nea)
815 real(rp),
intent(in) :: t11(elem%np,lmesh%nea)
816 real(rp),
intent(in) :: t12(elem%np,lmesh%nea)
817 real(rp),
intent(in) :: t13(elem%np,lmesh%nea)
818 real(rp),
intent(in) :: t21(elem%np,lmesh%nea)
819 real(rp),
intent(in) :: t22(elem%np,lmesh%nea)
820 real(rp),
intent(in) :: t23(elem%np,lmesh%nea)
821 real(rp),
intent(in) :: t31(elem%np,lmesh%nea)
822 real(rp),
intent(in) :: t32(elem%np,lmesh%nea)
823 real(rp),
intent(in) :: t33(elem%np,lmesh%nea)
824 real(rp),
intent(in) :: df1(elem%np,lmesh%nea)
825 real(rp),
intent(in) :: df2(elem%np,lmesh%nea)
826 real(rp),
intent(in) :: df3(elem%np,lmesh%nea)
827 real(rp),
intent(in) :: nu (elem%np,lmesh%nea)
828 real(rp),
intent(in) :: kh (elem%np,lmesh%nea)
829 real(rp),
intent(in) :: ddens_(elem%np,lmesh%nea)
830 real(rp),
intent(in) :: momx_ (elem%np,lmesh%nea)
831 real(rp),
intent(in) :: momy_ (elem%np,lmesh%nea)
832 real(rp),
intent(in) :: momz_ (elem%np,lmesh%nea)
833 real(rp),
intent(in) :: drhot_(elem%np,lmesh%nea)
834 real(rp),
intent(in) :: dens_hyd(elem%np,lmesh%nea)
835 real(rp),
intent(in) :: pres_hyd(elem%np,lmesh%nea)
836 real(rp),
intent(in) :: pres_(elem%np,lmesh%nea)
837 real(rp),
intent(in) :: pt_ (elem%np,lmesh%nea)
838 type(
sparsemat),
intent(in) :: dx, dy, dz
839 type(
sparsemat),
intent(in) :: sx, sy, sz
841 logical,
intent(in) :: is_bound(elem%nfptot,lmesh%ne)
845 real(rp) :: x2d(elem2d%np,lmesh2d%ne), y2d(elem2d%np,lmesh2d%ne)
846 real(rp) :: x(elem%np), y(elem%np), twoovdel2(elem%np)
847 real(rp) :: r(elem%np)
849 real(rp) :: fx(elem%np), fy(elem%np), fz(elem%np), liftdelflx(elem%np)
850 real(rp) :: gsqrtdens(elem%np), rhot(elem%np)
851 real(rp) :: del_flux_mom(elem%nfptot,lmesh%ne,3)
852 real(rp) :: del_flux_rhot(elem%nfptot,lmesh%ne)
855 call cal_del_flux( del_flux_mom, del_flux_rhot, &
856 t11, t12, t13, t21, t22, t23, t31, t32, t33, &
859 ddens_, momx_, momy_, momz_, drhot_, dens_hyd, pres_hyd, &
861 lmesh%normal_fn(:,:,1), lmesh%normal_fn(:,:,2), lmesh%normal_fn(:,:,3), &
862 lmesh%vmapM, lmesh%vmapP, &
863 lmesh, elem, is_bound )
870 do ke2d = lmesh2d%NeS, lmesh2d%NeE
871 x2d(:,ke2d) = tan(lmesh2d%pos_en(:,ke2d,1))
872 y2d(:,ke2d) = tan(lmesh2d%pos_en(:,ke2d,2))
876 do ke=lmesh%NeS, lmesh%NeE
877 ke2d = lmesh%EMap3Dto2D(ke)
878 x(:) = x2d(elem%IndexH2Dto3D,ke2d)
879 y(:) = y2d(elem%IndexH2Dto3D,ke2d)
880 twoovdel2(:) = 2.0_rp / ( 1.0_rp + x(:)**2 + y(:)**2 )
881 r(:) = rplanet * lmesh%gam(:,ke)
883 gsqrtdens(:) = lmesh%Gsqrt(:,ke) * ( dens_hyd(:,ke) + ddens_(:,ke) )
889 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,1), liftdelflx )
891 momx_t(:,ke) = ( lmesh%Escale(:,ke,1,1) * fx(:) &
892 + lmesh%Escale(:,ke,2,2) * fy(:) &
893 + lmesh%Escale(:,ke,3,3) * fz(:) &
894 + liftdelflx(:) ) / lmesh%Gsqrt(:,ke) &
895 + twoovdel2(:) * y(:) * &
896 ( x(:) * y(:) * t11(:,ke) - ( 1.0_rp + y(:)**2 ) * t12(:,ke) ) &
897 + shapro_coef * 2.0_rp * t13(:,ke) / r(:)
903 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,2), liftdelflx )
905 momy_t(:,ke) = ( lmesh%Escale(:,ke,1,1) * fx(:) &
906 + lmesh%Escale(:,ke,2,2) * fy(:) &
907 + lmesh%Escale(:,ke,3,3) * fz(:) &
908 + liftdelflx(:) ) / lmesh%Gsqrt(:,ke) &
909 + twoovdel2(:) * x(:) * &
910 ( - ( 1.0_rp + x(:)**2 ) * t21(:,ke) + x(:) * y(:) * t22(:,ke) ) &
911 + shapro_coef * 2.0_rp * t23(:,ke) / r(:)
917 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_mom(:,ke,3), liftdelflx )
919 momz_t(:,ke) = ( lmesh%Escale(:,ke,1,1) * fx(:) &
920 + lmesh%Escale(:,ke,2,2) * fy(:) &
921 + lmesh%Escale(:,ke,3,3) * fz(:) &
922 + liftdelflx(:) ) / lmesh%Gsqrt(:,ke) &
923 + shapro_coef * 0.25_rp * r(:) * twoovdel2(:)**2 * ( 1.0_rp * x(:)**2 ) * ( 1.0_rp * y(:)**2 ) &
924 * ( - ( 1.0_rp + x(:)**2 ) * t11(:,ke) + 2.0_rp * x(:) * y(:) * t12(:,ke) &
925 - ( 1.0_rp + y(:)**2 ) * t22(:,ke) )
931 call sparsemat_matmul( lift, lmesh%Fscale(:,ke) * del_flux_rhot(:,ke), liftdelflx )
933 rhot_t(:,ke) = ( lmesh%Escale(:,ke,1,1) * fx(:) &
934 + lmesh%Escale(:,ke,2,2) * fy(:) &
935 + lmesh%Escale(:,ke,3,3) * fz(:) &
936 + liftdelflx(:) ) / lmesh%Gsqrt(:,ke)