153 rdry => const_rdry, &
154 cvdry => const_cvdry, &
155 cpdry => const_cpdry, &
158 grav => const_grav, &
200 real(RP),
intent(out) :: DENS_RK(KA,IA,JA)
201 real(RP),
intent(out) :: MOMZ_RK(KA,IA,JA)
202 real(RP),
intent(out) :: MOMX_RK(KA,IA,JA)
203 real(RP),
intent(out) :: MOMY_RK(KA,IA,JA)
204 real(RP),
intent(out) :: RHOT_RK(KA,IA,JA)
206 real(RP),
intent(out) :: PROG_RK(KA,IA,JA,VA)
208 real(RP),
intent(inout) :: mflx_hi(KA,IA,JA,3)
209 real(RP),
intent(out) :: tflx_hi(KA,IA,JA,3)
211 real(RP),
intent(in),
target :: DENS0(KA,IA,JA)
212 real(RP),
intent(in),
target :: MOMZ0(KA,IA,JA)
213 real(RP),
intent(in),
target :: MOMX0(KA,IA,JA)
214 real(RP),
intent(in),
target :: MOMY0(KA,IA,JA)
215 real(RP),
intent(in),
target :: RHOT0(KA,IA,JA)
217 real(RP),
intent(in) :: DENS(KA,IA,JA)
218 real(RP),
intent(in) :: MOMZ(KA,IA,JA)
219 real(RP),
intent(in) :: MOMX(KA,IA,JA)
220 real(RP),
intent(in) :: MOMY(KA,IA,JA)
221 real(RP),
intent(in) :: RHOT(KA,IA,JA)
223 real(RP),
intent(in) :: DENS_t(KA,IA,JA)
224 real(RP),
intent(in) :: MOMZ_t(KA,IA,JA)
225 real(RP),
intent(in) :: MOMX_t(KA,IA,JA)
226 real(RP),
intent(in) :: MOMY_t(KA,IA,JA)
227 real(RP),
intent(in) :: RHOT_t(KA,IA,JA)
229 real(RP),
intent(in) :: PROG0(KA,IA,JA,VA)
230 real(RP),
intent(in) :: PROG (KA,IA,JA,VA)
232 real(RP),
intent(in) :: DPRES0(KA,IA,JA)
233 real(RP),
intent(in) :: RT2P(KA,IA,JA)
234 real(RP),
intent(in) :: CORIOLI(1,IA,JA)
235 real(RP),
intent(in) :: num_diff(KA,IA,JA,5,3)
236 real(RP),
intent(in) :: wdamp_coef(KA)
237 real(RP),
intent(in) :: divdmp_coef
238 real(RP),
intent(in) :: DDIV(KA,IA,JA)
240 logical,
intent(in) :: FLAG_FCT_MOMENTUM
241 logical,
intent(in) :: FLAG_FCT_T
242 logical,
intent(in) :: FLAG_FCT_ALONG_STREAM
244 real(RP),
intent(in) :: CDZ(KA)
245 real(RP),
intent(in) :: FDZ(KA-1)
246 real(RP),
intent(in) :: FDX(IA-1)
247 real(RP),
intent(in) :: FDY(JA-1)
248 real(RP),
intent(in) :: RCDZ(KA)
249 real(RP),
intent(in) :: RCDX(IA)
250 real(RP),
intent(in) :: RCDY(JA)
251 real(RP),
intent(in) :: RFDZ(KA-1)
252 real(RP),
intent(in) :: RFDX(IA-1)
253 real(RP),
intent(in) :: RFDY(JA-1)
255 real(RP),
intent(in) :: PHI (KA,IA,JA)
256 real(RP),
intent(in) :: GSQRT (KA,IA,JA,7)
257 real(RP),
intent(in) :: J13G (KA,IA,JA,7)
258 real(RP),
intent(in) :: J23G (KA,IA,JA,7)
259 real(RP),
intent(in) :: J33G
260 real(RP),
intent(in) :: MAPF (IA,JA,2,4)
261 real(RP),
intent(in) :: REF_dens(KA,IA,JA)
262 real(RP),
intent(in) :: REF_rhot(KA,IA,JA)
264 logical,
intent(in) :: BND_W
265 logical,
intent(in) :: BND_E
266 logical,
intent(in) :: BND_S
267 logical,
intent(in) :: BND_N
269 real(RP),
intent(in) :: dtrk
270 logical,
intent(in) :: last
274 real(RP) :: POTT(KA,IA,JA)
275 real(RP) :: DPRES(KA,IA,JA)
277 real(RP) :: qflx_hi (KA,IA,JA,3)
278 real(RP) :: qflx_J13(KA,IA,JA)
279 real(RP) :: qflx_J23(KA,IA,JA)
288 real(RP) :: advch_t(KA,IA,JA,5)
289 real(RP) :: advcv_t(KA,IA,JA,5)
290 real(RP) :: wdmp_t(KA,IA,JA)
291 real(RP) :: ddiv_t(KA,IA,JA,3)
292 real(RP) :: pg_t(KA,IA,JA,3)
293 real(RP) :: cf_t(KA,IA,JA,2)
298 real(RP) :: A(KA,IA,JA)
300 real(RP) :: Sr(KA,IA,JA)
301 real(RP) :: Sw(KA,IA,JA)
302 real(RP) :: St(KA,IA,JA)
303 real(RP) :: PT(KA,IA,JA)
304 real(RP) :: C(KMAX-1,IA,JA)
306 real(RP) :: F1(KA,IA,JA)
307 real(RP) :: F2(KA,IA,JA)
308 real(RP) :: F3(KA,IA,JA)
310 integer :: IIS, IIE, JJS, JJE
320 qflx_hi(:,:,:,:) = undef
321 qflx_j13(:,:,:) = undef
322 qflx_j23(:,:,:) = undef
325 #if defined DEBUG || defined QUICKDEBUG 326 dens_rk( 1:
ks-1,:,:) = undef
327 dens_rk(
ke+1:
ka ,:,:) = undef
328 momz_rk( 1:
ks-1,:,:) = undef
329 momz_rk(
ke+1:
ka ,:,:) = undef
330 momx_rk( 1:
ks-1,:,:) = undef
331 momx_rk(
ke+1:
ka ,:,:) = undef
332 momy_rk( 1:
ks-1,:,:) = undef
333 momy_rk(
ke+1:
ka ,:,:) = undef
334 rhot_rk( 1:
ks-1,:,:) = undef
335 rhot_rk(
ke+1:
ka ,:,:) = undef
336 prog_rk( 1:
ks-1,:,:,:) = undef
337 prog_rk(
ke+1:
ka ,:,:,:) = undef
350 if ( bnd_w ) ifs_off = 0
351 if ( bnd_s ) jfs_off = 0
359 profile_start(
"hevi_pres")
366 call check( __line__, dpres0(k,i,j) )
367 call check( __line__, rt2p(k,i,j) )
368 call check( __line__, rhot(k,i,j) )
369 call check( __line__, ref_rhot(k,i,j) )
371 dpres(k,i,j) = dpres0(k,i,j) + rt2p(k,i,j) * ( rhot(k,i,j) - ref_rhot(k,i,j) )
373 dpres(
ks-1,i,j) = dpres0(
ks-1,i,j) - dens(
ks,i,j) * ( phi(
ks-1,i,j) - phi(
ks+1,i,j) )
374 dpres(
ke+1,i,j) = dpres0(
ke+1,i,j) - dens(
ke,i,j) * ( phi(
ke+1,i,j) - phi(
ke-1,i,j) )
377 profile_stop(
"hevi_pres")
381 profile_start(
"hevi_mflx_z")
387 mflx_hi(
ks-1,i,j,
zdir) = 0.0_rp
390 call check( __line__, momx(k+1,i ,j) )
391 call check( __line__, momx(k+1,i-1,j) )
392 call check( __line__, momx(k ,i ,j) )
393 call check( __line__, momx(k ,i+1,j) )
394 call check( __line__, momy(k+1,i,j) )
395 call check( __line__, momy(k+1,i,j-1) )
396 call check( __line__, momy(k ,i,j) )
397 call check( __line__, momy(k ,i,j-1) )
399 mflx_hi(k,i,j,
zdir) = j13g(k,i,j,
i_xyw) * 0.25_rp / mapf(i,j,2,
i_xy) &
400 * ( momx(k+1,i,j)+momx(k+1,i-1,j) &
401 + momx(k ,i,j)+momx(k ,i-1,j) ) &
402 + j23g(k,i,j,
i_xyw) * 0.25_rp / mapf(i,j,1,
i_xy) &
403 * ( momy(k+1,i,j)+momy(k+1,i,j-1) &
404 + momy(k ,i,j)+momy(k ,i,j-1) ) &
405 + gsqrt(k,i,j,
i_xyw) / ( mapf(i,j,1,
i_xy)*mapf(i,j,2,
i_xy) ) * num_diff(k,i,j,
i_dens,
zdir)
407 mflx_hi(
ke ,i,j,
zdir) = 0.0_rp
411 k = iundef; i = iundef; j = iundef
413 profile_stop(
"hevi_mflx_z")
415 profile_start(
"hevi_mflx_x")
416 iss = max(iis-1,
is-ifs_off)
425 call check( __line__, gsqrt(k,i,j,
i_uyz) )
426 call check( __line__, momx(k,i,j) )
427 call check( __line__, num_diff(k,i,j,
i_dens,
xdir) )
429 mflx_hi(k,i,j,
xdir) = gsqrt(k,i,j,
i_uyz) / mapf(i,j,2,
i_uy) &
430 * ( momx(k,i,j) + num_diff(k,i,j,
i_dens,
xdir) )
435 k = iundef; i = iundef; j = iundef
437 profile_stop(
"hevi_mflx_x")
442 do j = max(jjs-1,
js-jfs_off), min(jje,
jeh)
446 call check( __line__, gsqrt(k,i,j,
i_xvz) )
447 call check( __line__, momy(k,i,j) )
448 call check( __line__, num_diff(k,i,j,
i_dens,
ydir) )
450 mflx_hi(k,i,j,
ydir) = gsqrt(k,i,j,
i_xvz) / mapf(i,j,1,
i_xv) &
451 * ( momy(k,i,j) + num_diff(k,i,j,
i_dens,
ydir) )
456 k = iundef; i = iundef; j = iundef
460 profile_start(
"hevi_sr")
473 call check( __line__, dens0(k,i,j) )
474 call check( __line__, mflx_hi(k ,i ,j ,
xdir) )
475 call check( __line__, mflx_hi(k ,i-1,j ,
xdir) )
476 call check( __line__, mflx_hi(k ,i ,j ,
ydir) )
477 call check( __line__, mflx_hi(k ,i ,j-1,
ydir) )
478 call check( __line__, dens_t(k,i,j) )
480 advcv = - ( mflx_hi(k,i,j,
zdir)-mflx_hi(k-1,i ,j,
zdir) ) * rcdz(k)
481 advch = - ( ( mflx_hi(k,i,j,
xdir)-mflx_hi(k ,i-1,j,
xdir) ) * rcdx(i) &
482 + ( mflx_hi(k,i,j,
ydir)-mflx_hi(k ,i, j-1,
ydir) ) * rcdy(j) ) &
483 * mapf(i,j,1,
i_xy) * mapf(i,j,2,
i_xy)
484 sr(k,i,j) = ( advcv + advch ) / gsqrt(k,i,j,
i_xyz) + dens_t(k,i,j)
495 k = iundef; i = iundef; j = iundef
497 profile_stop(
"hevi_sr")
503 profile_start(
"hevi_momz_qflxhi_z")
506 gsqrt(:,:,:,
i_xyz), j33g, &
510 profile_stop(
"hevi_momz_qflxhi_z")
512 profile_start(
"hevi_momz_qflxj")
515 gsqrt(:,:,:,
i_xyz), j13g(:,:,:,
i_xyz), mapf(:,:,:,
i_xy), &
520 gsqrt(:,:,:,
i_xyz), j23g(:,:,:,
i_xyz), mapf(:,:,:,
i_xy), &
523 profile_stop(
"hevi_momz_qflxj")
526 profile_start(
"hevi_momz_qflxhi_x")
533 profile_stop(
"hevi_momz_qflxhi_x")
536 profile_start(
"hevi_momz_qflxhi_y")
543 profile_stop(
"hevi_momz_qflxhi_y")
546 profile_start(
"hevi_sw")
560 call check( __line__, qflx_hi(k ,i ,j ,
zdir) )
561 call check( __line__, qflx_hi(k-1,i ,j ,
zdir) )
562 call check( __line__, qflx_j13(k ,i ,j) )
563 call check( __line__, qflx_j13(k-1,i ,j) )
564 call check( __line__, qflx_j23(k ,i ,j) )
565 call check( __line__, qflx_j23(k-1,i ,j) )
566 call check( __line__, qflx_hi(k ,i ,j ,
xdir) )
567 call check( __line__, qflx_hi(k ,i-1,j ,
xdir) )
568 call check( __line__, qflx_hi(k ,i ,j ,
ydir) )
569 call check( __line__, qflx_hi(k ,i ,j-1,
ydir) )
570 call check( __line__, ddiv(k ,i,j) )
571 call check( __line__, ddiv(k+1,i,j) )
572 call check( __line__, momz0(k,i,j) )
573 call check( __line__, momz_t(k,i,j) )
575 advcv = - ( qflx_hi(k,i,j,
zdir) - qflx_hi(k-1,i ,j ,
zdir) &
576 + qflx_j13(k,i,j) - qflx_j13(k-1,i ,j ) &
577 + qflx_j23(k,i,j) - qflx_j23(k-1,i ,j ) ) * rfdz(k)
578 advch = - ( ( qflx_hi(k,i,j,
xdir) - qflx_hi(k,i-1,j ,
xdir) ) * rcdx(i) &
579 + ( qflx_hi(k,i,j,
ydir) - qflx_hi(k,i ,j-1,
ydir) ) * rcdy(j) ) &
580 * mapf(i,j,1,
i_xy) * mapf(i,j,2,
i_xy)
581 wdmp = - wdamp_coef(k) * momz0(k,i,j)
582 div = divdmp_coef / dtrk * ( ddiv(k+1,i,j)-ddiv(k,i,j) ) * fdz(k)
583 sw(k,i,j) = ( advcv + advch ) / gsqrt(k,i,j,
i_xyw) &
584 + wdmp + div + momz_t(k,i,j)
590 ddiv_t(k,i,j,1) = div
596 profile_stop(
"hevi_sw")
598 k = iundef; i = iundef; j = iundef
610 call check( __line__, rhot(k,i,j) )
611 call check( __line__, dens(k,i,j) )
613 pott(k,i,j) = rhot(k,i,j) / dens(k,i,j)
618 k = iundef; i = iundef; j = iundef
623 mflx_hi(:,:,:,
zdir), pott, gsqrt(:,:,:,
i_xyw), &
630 mflx_hi(:,:,:,
xdir), pott, gsqrt(:,:,:,
i_uyz), &
637 mflx_hi(:,:,:,
ydir), pott, gsqrt(:,:,:,
i_xvz), &
643 profile_start(
"hevi_st")
656 call check( __line__, tflx_hi(k ,i ,j ,
zdir) )
657 call check( __line__, tflx_hi(k-1,i ,j ,
zdir) )
658 call check( __line__, tflx_hi(k ,i ,j ,
xdir) )
659 call check( __line__, tflx_hi(k ,i-1,j ,
xdir) )
660 call check( __line__, tflx_hi(k ,i ,j ,
ydir) )
661 call check( __line__, tflx_hi(k ,i ,j-1,
ydir) )
662 call check( __line__, rhot_t(k,i,j) )
664 advcv = - ( tflx_hi(k,i,j,
zdir) - tflx_hi(k-1,i ,j ,
zdir) ) * rcdz(k)
665 advch = - ( ( tflx_hi(k,i,j,
xdir) - tflx_hi(k ,i-1,j ,
xdir) ) * rcdx(i) &
666 + ( tflx_hi(k,i,j,
ydir) - tflx_hi(k ,i ,j-1,
ydir) ) * rcdy(j) ) &
667 * mapf(i,j,1,
i_xy) * mapf(i,j,2,
i_xy)
668 st(k,i,j) = ( advcv + advch ) / gsqrt(k,i,j,
i_xyz) + rhot_t(k,i,j)
679 k = iundef; i = iundef; j = iundef
681 profile_stop(
"hevi_st")
685 profile_start(
"hevi_solver")
712 momz(:,i,j), pott(:,i,j), gsqrt(:,i,j,
i_xyz), &
716 a(k,i,j) = dtrk**2 * j33g * rcdz(k) * rt2p(k,i,j) * j33g / gsqrt(k,i,j,
i_xyz)
718 b = grav * dtrk**2 * j33g / ( cdz(
ks+1) + cdz(
ks) )
719 f1(
ks,i,j) = - ( pt(
ks+1,i,j) * rfdz(
ks) * a(
ks+1,i,j) + b ) / gsqrt(
ks,i,j,
i_xyw)
720 f2(
ks,i,j) = 1.0_rp + ( pt(
ks ,i,j) * rfdz(
ks) * ( a(
ks+1,i,j)+a(
ks,i,j) ) ) / gsqrt(
ks,i,j,
i_xyw)
722 b = grav * dtrk**2 * j33g / ( cdz(k+1) + cdz(k) )
723 f1(k,i,j) = - ( pt(k+1,i,j) * rfdz(k) * a(k+1,i,j) + b ) / gsqrt(k,i,j,
i_xyw)
724 f2(k,i,j) = 1.0_rp + ( pt(k ,i,j) * rfdz(k) * ( a(k+1,i,j)+a(k,i,j) ) ) / gsqrt(k,i,j,
i_xyw)
725 f3(k,i,j) = - ( pt(k-1,i,j) * rfdz(k) * a(k,i,j) - b ) / gsqrt(k,i,j,
i_xyw)
727 b = grav * dtrk**2 * j33g / ( cdz(
ke) + cdz(
ke-1) )
728 f2(
ke-1,i,j) = 1.0_rp + ( pt(
ke-1,i,j) * rfdz(
ke-1) * ( a(
ke,i,j)+a(
ke-1,i,j) ) ) / gsqrt(
ke-1,i,j,
i_xyw)
729 f3(
ke-1,i,j) = - ( pt(
ke-2,i,j) * rfdz(
ke-1) * a(
ke-1,i,j) - b ) / gsqrt(
ke-1,i,j,
i_xyw)
731 pg = - ( dpres(k+1,i,j) + rt2p(k+1,i,j)*dtrk*st(k+1,i,j) &
732 - dpres(k ,i,j) - rt2p(k ,i,j)*dtrk*st(k ,i,j) ) &
733 * rfdz(k) * j33g / gsqrt(k,i,j,
i_xyw) &
735 * ( f2h(k,1,
i_xyz) * ( dens(k+1,i,j) - ref_dens(k+1,i,j) + sr(k+1,i,j) * dtrk ) &
736 + f2h(k,2,
i_xyz) * ( dens(k ,i,j) - ref_dens(k ,i,j) + sr(k ,i,j) * dtrk ) )
737 c(k-
ks+1,i,j) = momz(k,i,j) + dtrk * ( pg + sw(k,i,j) )
739 if ( lhist ) pg_t(k,i,j,1) = pg
745 f1(:,i,j), f2(:,i,j), f3(:,i,j) )
748 #ifdef DEBUG_HEVI2HEVE 750 c(k-
ks+1,i,j) = momz(k,i,j)
751 mflx_hi(k,i,j,
zdir) = mflx_hi(k,i,j,
zdir) &
752 + j33g * momz(k,i,j) / ( mapf(i,j,1,
i_xy) * mapf(i,j,2,
i_xy) )
753 momz_rk(k,i,j) = momz0(k,i,j) &
755 - j33g * ( dpres(k+1,i,j)-dpres(k,i,j) ) * rfdz(k) / gsqrt(k,i,j,
i_xyw) &
756 - grav * ( f2h(k,2,
i_xyz)*(dens(k,i,j)-ref_dens(k,i,j))+f2h(k,1,
i_xyz)*(dens(k+1,i,j)-ref_dens(k+1,i,j)) ) &
760 mflx_hi(k,i,j,
zdir) = mflx_hi(k,i,j,
zdir) &
761 + j33g * c(k-
ks+1,i,j) / ( mapf(i,j,1,
i_xy) * mapf(i,j,2,
i_xy) )
763 momz_rk(k,i,j) = momz0(k,i,j) &
764 + ( c(k-
ks+1,i,j) - momz(k,i,j) )
767 momz_rk(
ks-1,i,j) = 0.0_rp
768 momz_rk(
ke ,i,j) = 0.0_rp
771 advcv = - c(1,i,j) * j33g * rcdz(
ks) / gsqrt(
ks,i,j,
i_xyz)
772 dens_rk(
ks,i,j) = dens0(
ks,i,j) + dtrk * ( advcv + sr(
ks,i,j) )
774 if ( lhist ) advcv_t(
ks,i,j,
i_dens) = advcv
776 advcv = - c(1,i,j)*pt(
ks,i,j) * j33g * rcdz(
ks) / gsqrt(
ks,i,j,
i_xyz)
777 rhot_rk(
ks,i,j) = rhot0(
ks,i,j) + dtrk * ( advcv + st(
ks,i,j) )
779 if ( lhist ) advcv_t(
ks,i,j,
i_rhot) = advcv
782 advcv = - ( c(k-
ks+1,i,j) - c(k-
ks,i,j) ) &
783 * j33g * rcdz(k) / gsqrt(k,i,j,
i_xyz)
784 dens_rk(k,i,j) = dens0(k,i,j) + dtrk * ( advcv + sr(k,i,j) )
786 if ( lhist ) advcv_t(k,i,j,
i_dens) = advcv
788 advcv = - ( c(k-
ks+1,i,j)*pt(k,i,j) - c(k-
ks,i,j)*pt(k-1,i,j) ) &
789 * j33g * rcdz(k) / gsqrt(k,i,j,
i_xyz)
790 rhot_rk(k,i,j) = rhot0(k,i,j) + dtrk * ( advcv + st(k,i,j) )
792 if ( lhist ) advcv_t(k,i,j,
i_rhot) = advcv
796 dens_rk(
ke,i,j) = dens0(
ke,i,j) + dtrk * ( advcv + sr(
ke,i,j) )
798 if ( lhist ) advcv_t(
ke,i,j,
i_dens) = advcv
800 advcv = c(
ke-
ks,i,j) * pt(
ke-1,i,j) * j33g * rcdz(
ke) / gsqrt(
ke,i,j,
i_xyz)
801 rhot_rk(
ke,i,j) = rhot0(
ke,i,j) + dtrk * ( advcv + st(
ke,i,j) )
803 if ( lhist ) advcv_t(
ke,i,j,
i_rhot) = advcv
807 call check_equation( &
809 dens(:,i,j), momz(:,i,j), rhot(:,i,j), dpres(:,i,j), &
811 sr(:,i,j), sw(:,i,j), st(:,i,j), &
812 j33g, gsqrt(:,i,j,:), &
820 k = iundef; i = iundef; j = iundef
823 profile_stop(
"hevi_solver")
828 profile_start(
"hevi_momx")
832 gsqrt(:,:,:,
i_uyw), j33g, &
838 gsqrt(:,:,:,
i_uyz), j13g(:,:,:,
i_uyw), mapf(:,:,:,
i_uy), &
843 gsqrt(:,:,:,
i_uyz), j23g(:,:,:,
i_uyw), mapf(:,:,:,
i_uy), &
881 call check( __line__, qflx_hi(k ,i ,j ,
zdir) )
882 call check( __line__, qflx_hi(k-1,i ,j ,
zdir) )
883 call check( __line__, qflx_hi(k ,i ,j ,
xdir) )
884 call check( __line__, qflx_hi(k ,i-1,j ,
xdir) )
885 call check( __line__, qflx_hi(k ,i ,j ,
ydir) )
886 call check( __line__, qflx_hi(k ,i ,j-1,
ydir) )
887 call check( __line__, dpres(k,i+1,j) )
888 call check( __line__, dpres(k,i ,j) )
889 call check( __line__, corioli(1,i ,j) )
890 call check( __line__, corioli(1,i+1,j) )
891 call check( __line__, momy(k,i ,j ) )
892 call check( __line__, momy(k,i+1,j ) )
893 call check( __line__, momy(k,i ,j-1) )
894 call check( __line__, momy(k,i+1,j-1) )
895 call check( __line__, ddiv(k,i+1,j) )
896 call check( __line__, ddiv(k,i ,j) )
897 call check( __line__, momx0(k,i,j) )
899 advcv = - ( qflx_hi(k,i,j,
zdir) - qflx_hi(k-1,i ,j ,
zdir) &
900 + qflx_j13(k,i,j) - qflx_j13(k-1,i ,j ) &
901 + qflx_j23(k,i,j) - qflx_j23(k-1,i ,j ) ) * rcdz(k)
902 advch = - ( ( qflx_hi(k,i,j,
xdir) - qflx_hi(k ,i-1,j ,
xdir) ) * rfdx(i) &
903 + ( qflx_hi(k,i,j,
ydir) - qflx_hi(k ,i ,j-1,
ydir) ) * rcdy(j) ) &
904 * mapf(i,j,1,
i_uy) * mapf(i,j,2,
i_uy)
905 pg = ( ( gsqrt(k,i+1,j,
i_xyz) * dpres(k,i+1,j) &
906 - gsqrt(k,i ,j,
i_xyz) * dpres(k,i ,j) &
908 + ( j13g(k ,i,j,
i_uyw) &
909 * 0.5_rp * ( f2h(k,1,
i_uyz) * ( dpres(k+1,i+1,j)+dpres(k+1,i,j) ) &
910 + f2h(k,2,
i_uyz) * ( dpres(k ,i+1,j)+dpres(k ,i,j) ) ) &
911 - j13g(k-1,i,j,
i_uyw) &
912 * 0.5_rp * ( f2h(k,1,
i_uyz) * ( dpres(k ,i+1,j)+dpres(k ,i,j) ) &
913 + f2h(k,2,
i_uyz) * ( dpres(k-1,i+1,j)+dpres(k-1,i,j) ) ) &
916 cf = 0.125_rp * ( corioli(1,i+1,j )+corioli(1,i,j ) ) &
917 * ( momy(k,i+1,j )+momy(k,i,j ) &
918 + momy(k,i+1,j-1)+momy(k,i,j-1) ) &
919 + 0.25_rp * mapf(i,j,1,
i_uy) * mapf(i,j,2,
i_uy) &
920 * ( momy(k,i,j) + momy(k,i,j-1) + momy(k,i+1,j) + momy(k,i+1,j-1) ) &
921 * ( ( momy(k,i,j) + momy(k,i,j-1) + momy(k,i+1,j) + momy(k,i+1,j-1) ) * 0.25_rp &
922 * ( 1.0_rp/mapf(i+1,j,2,
i_xy) - 1.0_rp/mapf(i,j,2,
i_xy) ) * rfdx(i) &
924 * ( 1.0_rp/mapf(i,j,1,
i_uv) - 1.0_rp/mapf(i,j-1,1,
i_uv) ) * rcdy(j) ) &
925 * 2.0_rp / ( dens(k,i+1,j) + dens(k,i,j) )
926 div = divdmp_coef / dtrk * ( ddiv(k,i+1,j)/mapf(i+1,j,2,
i_xy) - ddiv(k,i,j)/mapf(i,j,1,
i_xy) ) &
927 * mapf(i,j,1,
i_uy) * mapf(i,j,2,
i_uy) * fdx(i)
928 momx_rk(k,i,j) = momx0(k,i,j) &
929 + dtrk * ( ( advcv + advch - pg ) / gsqrt(k,i,j,
i_uyz) + cf + div + momx_t(k,i,j) )
934 pg_t(k,i,j,2) = - pg / gsqrt(k,i,j,
i_uyz)
936 ddiv_t(k,i,j,2) = div
942 profile_stop(
"hevi_momx")
944 k = iundef; i = iundef; j = iundef
948 profile_start(
"hevi_momy")
952 gsqrt(:,:,:,
i_xvw), j33g, &
958 gsqrt(:,:,:,
i_xvz), j13g(:,:,:,
i_xvw), mapf(:,:,:,
i_xv), &
963 gsqrt(:,:,:,
i_xvz), j23g(:,:,:,
i_xvw), mapf(:,:,:,
i_xv), &
996 do j = jjs, min(jje,
jeh)
1000 call check( __line__, qflx_hi(k ,i ,j ,
zdir) )
1001 call check( __line__, qflx_hi(k-1,i ,j ,
zdir) )
1002 call check( __line__, qflx_hi(k ,i ,j ,
xdir) )
1003 call check( __line__, qflx_hi(k ,i-1,j ,
xdir) )
1004 call check( __line__, qflx_hi(k ,i ,j ,
ydir) )
1005 call check( __line__, qflx_hi(k ,i ,j-1,
ydir) )
1006 call check( __line__, dpres(k,i,j ) )
1007 call check( __line__, dpres(k,i,j+1) )
1008 call check( __line__, corioli(1,i,j ) )
1009 call check( __line__, corioli(1,i,j+1) )
1010 call check( __line__, momx(k,i ,j ) )
1011 call check( __line__, momx(k,i ,j+1) )
1012 call check( __line__, momx(k,i-1,j ) )
1013 call check( __line__, momx(k,i-1,j+1) )
1014 call check( __line__, ddiv(k,i,j+1) )
1015 call check( __line__, ddiv(k,i,j ) )
1016 call check( __line__, momy_t(k,i,j) )
1017 call check( __line__, momy0(k,i,j) )
1019 advcv = - ( qflx_hi(k,i,j,
zdir) - qflx_hi(k-1,i ,j ,
zdir) &
1020 + qflx_j13(k,i,j) - qflx_j13(k-1,i ,j ) &
1021 + qflx_j23(k,i,j) - qflx_j23(k-1,i ,j ) ) * rcdz(k)
1022 advch = - ( ( qflx_hi(k,i,j,
xdir) - qflx_hi(k ,i-1,j ,
xdir) ) * rcdx(i) &
1023 + ( qflx_hi(k,i,j,
ydir) - qflx_hi(k ,i ,j-1,
ydir) ) * rfdy(j) ) &
1024 * mapf(i,j,1,
i_xv) * mapf(i,j,2,
i_xv)
1025 pg = ( ( gsqrt(k,i,j+1,
i_xyz) * dpres(k,i,j+1) &
1026 - gsqrt(k,i,j ,
i_xyz) * dpres(k,i,j ) &
1028 + ( j23g(k ,i,j,
i_xvw) &
1029 * 0.5_rp * ( f2h(k ,1,
i_xvz) * ( dpres(k+1,i,j+1)+dpres(k+1,i,j) ) &
1030 + f2h(k ,2,
i_xvz) * ( dpres(k ,i,j+1)+dpres(k ,i,j) ) ) &
1031 - j23g(k-1,i,j,
i_xvw) &
1032 * 0.5_rp * ( f2h(k-1,1,
i_xvz) * ( dpres(k ,i,j+1)+dpres(k ,i,j) ) &
1033 + f2h(k-1,2,
i_xvz) * ( dpres(k-1,i,j+1)+dpres(k-1,i,j) ) ) &
1036 cf = - 0.125_rp * ( corioli(1,i ,j+1)+corioli(1,i ,j) ) &
1037 * ( momx(k,i ,j+1)+momx(k,i ,j) &
1038 + momx(k,i-1,j+1)+momx(k,i-1,j) ) &
1039 - 0.25_rp * mapf(i,j,1,
i_xv) * mapf(i,j,2,
i_xv) &
1040 * ( momx(k,i,j) + momx(k,i-1,j) + momx(k,i,j+1) + momx(k,i-1,j+1) ) &
1042 * ( 1.0_rp/mapf(i,j,2,
i_uv) - 1.0_rp/mapf(i-1,j,2,
i_uv) ) * rcdx(i) &
1043 - 0.25_rp * ( momx(k,i,j)+momx(k,i-1,j)+momx(k,i,j+1)+momx(k,i-1,j+1) ) &
1044 * ( 1.0_rp/mapf(i,j+1,1,
i_xy) - 1.0_rp/mapf(i,j,1,
i_xy) ) * rfdy(j) ) &
1045 * 2.0_rp / ( dens(k,i,j+1) + dens(k,i,j) )
1046 div = divdmp_coef / dtrk * ( ddiv(k,i,j+1)/mapf(i,j+1,1,
i_xy) - ddiv(k,i,j)/mapf(i,j,1,
i_xy) ) &
1047 * mapf(i,j,1,
i_xv) * mapf(i,j,2,
i_xv) * fdy(j)
1048 momy_rk(k,i,j) = momy0(k,i,j) &
1049 + dtrk * ( ( advcv + advch - pg ) / gsqrt(k,i,j,
i_xvz) + cf + div + momy_t(k,i,j) )
1052 advcv_t(k,i,j,
i_momy) = advcv / gsqrt(k,i,j,
i_xvz)
1053 advch_t(k,i,j,
i_momy) = advch / gsqrt(k,i,j,
i_xvz)
1054 pg_t(k,i,j,3) = - pg / gsqrt(k,i,j,
i_xvz)
1056 ddiv_t(k,i,j,3) = div
1062 profile_stop(
"hevi_momy")
1064 k = iundef; i = iundef; j = iundef
1076 call hist_in(advcv_t(:,:,:,
i_dens),
'DENS_t_advcv',
'tendency of density (vert. advection)',
'kg/m3/s' )
1077 call hist_in(advcv_t(:,:,:,
i_momz),
'MOMZ_t_advcv',
'tendency of momentum z (vert. advection)',
'kg/m2/s2', zdim=
'half')
1078 call hist_in(advcv_t(:,:,:,
i_momx),
'MOMX_t_advcv',
'tendency of momentum x (vert. advection)',
'kg/m2/s2', xdim=
'half')
1079 call hist_in(advcv_t(:,:,:,
i_momy),
'MOMY_t_advcv',
'tendency of momentum y (vert. advection)',
'kg/m2/s2', ydim=
'half')
1080 call hist_in(advcv_t(:,:,:,
i_rhot),
'RHOT_t_advcv',
'tendency of rho*theta (vert. advection)',
'K kg/m3/s' )
1082 call hist_in(advch_t(:,:,:,
i_dens),
'DENS_t_advch',
'tendency of density (horiz. advection)',
'kg/m3/s' )
1083 call hist_in(advch_t(:,:,:,
i_momz),
'MOMZ_t_advch',
'tendency of momentum z (horiz. advection)',
'kg/m2/s2', zdim=
'half')
1084 call hist_in(advch_t(:,:,:,
i_momx),
'MOMX_t_advch',
'tendency of momentum x (horiz. advection)',
'kg/m2/s2', xdim=
'half')
1085 call hist_in(advch_t(:,:,:,
i_momy),
'MOMY_t_advch',
'tendency of momentum y (horiz. advection)',
'kg/m2/s2', ydim=
'half')
1086 call hist_in(advch_t(:,:,:,
i_rhot),
'RHOT_t_advch',
'tendency of rho*theta (horiz. advection)',
'K kg/m3/s' )
1088 call hist_in(pg_t(:,:,:,1),
'MOMZ_t_pg',
'tendency of momentum z (pressure gradient)',
'kg/m2/s2', zdim=
'half')
1089 call hist_in(pg_t(:,:,:,2),
'MOMX_t_pg',
'tendency of momentum x (pressure gradient)',
'kg/m2/s2', xdim=
'half')
1090 call hist_in(pg_t(:,:,:,3),
'MOMY_t_pg',
'tendency of momentum y (pressure gradient)',
'kg/m2/s2', ydim=
'half')
1092 call hist_in(wdmp_t(:,:,:),
'MOMZ_t_wdamp',
'tendency of momentum z (Rayleigh damping)',
'kg/m2/s2', zdim=
'half')
1094 call hist_in(ddiv_t(:,:,:,1),
'MOMZ_t_ddiv',
'tendency of momentum z (divergence damping)',
'kg/m2/s2', zdim=
'half')
1095 call hist_in(ddiv_t(:,:,:,2),
'MOMX_t_ddiv',
'tendency of momentum x (divergence damping)',
'kg/m2/s2', xdim=
'half')
1096 call hist_in(ddiv_t(:,:,:,3),
'MOMY_t_ddiv',
'tendency of momentum y (divergence damping)',
'kg/m2/s2', ydim=
'half')
1098 call hist_in(cf_t(:,:,:,1),
'MOMX_t_cf',
'tendency of momentum x (coliolis force)',
'kg/m2/s2', xdim=
'half')
1099 call hist_in(cf_t(:,:,:,2),
'MOMY_t_cf',
'tendency of momentum y (coliolis force)',
'kg/m2/s2', ydim=
'half')
integer, parameter, public i_rhot
integer, public is
start point of inner domain: x, local
integer, public je
end point of inner domain: y, local
procedure(flux_mom), pointer, public atmos_dyn_fvm_fluxx_xvz
procedure(flux_j), pointer, public atmos_dyn_fvm_fluxj23_uyz
integer, public iblock
block size for cache blocking: x
integer, parameter, public i_momx
integer, parameter, public zdir
integer, parameter, public i_momz
procedure(flux_j), pointer, public atmos_dyn_fvm_fluxj23_xyw
procedure(flux_phi), pointer, public atmos_dyn_fvm_fluxx_xyz
integer, parameter, public ydir
integer, public ke
end point of inner domain: z, local
procedure(flux_j), pointer, public atmos_dyn_fvm_fluxj13_xyw
integer, parameter, public xdir
integer, parameter, public i_dens
integer, parameter, public i_momy
procedure(flux_mom), pointer, public atmos_dyn_fvm_fluxx_xyw
procedure(flux_mom), pointer, public atmos_dyn_fvm_fluxy_xyw
procedure(flux_z), pointer, public atmos_dyn_fvm_fluxz_xvz
integer, public ka
of whole cells: z, local, with HALO
integer, public jblock
block size for cache blocking: y
integer, public jhalo
of halo cells: y
integer, public js
start point of inner domain: y, local
module Atmosphere / Dynamics common
procedure(valuew), pointer, public atmos_dyn_fvm_flux_valuew_z
integer, public ks
start point of inner domain: z, local
procedure(flux_j), pointer, public atmos_dyn_fvm_fluxj13_xvz
integer, public jeh
end point of inner domain: y, local (half level)
integer, public ieh
end point of inner domain: x, local (half level)
integer, public ie
end point of inner domain: x, local
procedure(flux_z), pointer, public atmos_dyn_fvm_fluxz_uyz
module scale_atmos_dyn_fvm_flux
subroutine, public atmos_dyn_fct(qflx_anti, phi_in, DENS0, DENS, qflx_hi, qflx_lo, mflx_hi, rdz, rdx, rdy, GSQRT, MAPF, dt, flag_vect)
Flux Correction Transport Limiter.
procedure(flux_j), pointer, public atmos_dyn_fvm_fluxj13_uyz
procedure(flux_j), pointer, public atmos_dyn_fvm_fluxj23_xvz
procedure(flux_phi), pointer, public atmos_dyn_fvm_fluxz_xyz
procedure(flux_mom), pointer, public atmos_dyn_fvm_fluxx_uyz
procedure(flux_phi), pointer, public atmos_dyn_fvm_fluxy_xyz
procedure(flux_mom), pointer, public atmos_dyn_fvm_fluxy_uyz
procedure(flux_wz), pointer, public atmos_dyn_fvm_fluxz_xyw
integer, public ihalo
of halo cells: x
procedure(flux_mom), pointer, public atmos_dyn_fvm_fluxy_xvz