@@ -243,6 +243,12 @@ subroutine ctem_diags_calc(phys_state)
243243 real (r8 ), target :: w_phys(pver,pcols,begchunk:endchunk)
244244 real (r8 ), target :: t_phys(pver,pcols,begchunk:endchunk)
245245 real (r8 ), target :: p_phys(pver,pcols,begchunk:endchunk)
246+
247+ real (r8 ), target :: uv_phys(pver,pcols,begchunk:endchunk)
248+ real (r8 ), target :: uw_phys(pver,pcols,begchunk:endchunk)
249+ real (r8 ), target :: vt_phys(pver,pcols,begchunk:endchunk)
250+ real (r8 ), target :: wt_phys(pver,pcols,begchunk:endchunk)
251+
246252 real (r8 ) :: ps_phys(pcols,begchunk:endchunk)
247253
248254 real (r8 ), target :: u_lonlat(beglon:endlon,beglat:endlat,pver)
@@ -258,16 +264,28 @@ subroutine ctem_diags_calc(phys_state)
258264 real (r8 ) :: wi_lonlat(beglon:endlon,beglat:endlat,pver)
259265 real (r8 ) :: ti_lonlat(beglon:endlon,beglat:endlat,pver)
260266
267+ real (r8 ), target :: uv_lonlat(beglon:endlon,beglat:endlat,pver)
268+ real (r8 ), target :: uw_lonlat(beglon:endlon,beglat:endlat,pver)
269+ real (r8 ), target :: vt_lonlat(beglon:endlon,beglat:endlat,pver)
270+ real (r8 ), target :: wt_lonlat(beglon:endlon,beglat:endlat,pver)
271+
272+ real (r8 ) :: uvi_lonlat(beglon:endlon,beglat:endlat,pver)
273+ real (r8 ) :: uwi_lonlat(beglon:endlon,beglat:endlat,pver)
274+ real (r8 ) :: vti_lonlat(beglon:endlon,beglat:endlat,pver)
275+ real (r8 ) :: wti_lonlat(beglon:endlon,beglat:endlat,pver)
276+
277+
261278 real (r8 ) :: u_zm(beglat:endlat,pver)
262279 real (r8 ) :: v_zm(beglat:endlat,pver)
263280 real (r8 ) :: w_zm(beglat:endlat,pver)
264281 real (r8 ) :: t_zm(beglat:endlat,pver)
265- real (r8 ) :: ps_zm(beglat:endlat)
266282
267- real (r8 ) :: ud_lonlat(beglon:endlon,beglat:endlat,pver)
268- real (r8 ) :: vd_lonlat(beglon:endlon,beglat:endlat,pver)
269- real (r8 ) :: wd_lonlat(beglon:endlon,beglat:endlat,pver)
270- real (r8 ) :: td_lonlat(beglon:endlon,beglat:endlat,pver)
283+ real (r8 ) :: uv_zm(beglat:endlat,pver)
284+ real (r8 ) :: uw_zm(beglat:endlat,pver)
285+ real (r8 ) :: vt_zm(beglat:endlat,pver)
286+ real (r8 ) :: wt_zm(beglat:endlat,pver)
287+
288+ real (r8 ) :: ps_zm(beglat:endlat)
271289
272290 real (r8 ) :: vtp(beglon:endlon,beglat:endlat,pver)
273291 real (r8 ) :: wtp(beglon:endlon,beglat:endlat,pver)
@@ -316,8 +334,14 @@ subroutine ctem_diags_calc(phys_state)
316334 ! mid point press
317335 p_phys(:,i,lchnk) = phys_state(lchnk)% pmid(i,:)
318336
337+ ! surface pressure
319338 ps_phys(i,lchnk) = phys_state(lchnk)% ps(i)
320339
340+ uv_phys(:,i,lchnk) = u_phys(:,i,lchnk)* v_phys(:,i,lchnk)
341+ uw_phys(:,i,lchnk) = u_phys(:,i,lchnk)* w_phys(:,i,lchnk)
342+ vt_phys(:,i,lchnk) = v_phys(:,i,lchnk)* t_phys(:,i,lchnk)
343+ wt_phys(:,i,lchnk) = w_phys(:,i,lchnk)* t_phys(:,i,lchnk)
344+
321345 end do
322346 end do
323347
@@ -332,12 +356,20 @@ subroutine ctem_diags_calc(phys_state)
332356 physflds(3 )% fld = > w_phys
333357 physflds(4 )% fld = > t_phys
334358 physflds(5 )% fld = > p_phys
359+ physflds(6 )% fld = > uv_phys
360+ physflds(7 )% fld = > uw_phys
361+ physflds(8 )% fld = > vt_phys
362+ physflds(9 )% fld = > wt_phys
335363
336364 lonlatflds(1 )% fld = > u_lonlat
337365 lonlatflds(2 )% fld = > v_lonlat
338366 lonlatflds(3 )% fld = > w_lonlat
339367 lonlatflds(4 )% fld = > t_lonlat
340368 lonlatflds(5 )% fld = > p_lonlat
369+ lonlatflds(6 )% fld = > uv_lonlat
370+ lonlatflds(7 )% fld = > uw_lonlat
371+ lonlatflds(8 )% fld = > vt_lonlat
372+ lonlatflds(9 )% fld = > wt_lonlat
341373
342374 call esmf_phys2lonlat_regrid(physflds, lonlatflds)
343375
@@ -378,6 +410,18 @@ subroutine ctem_diags_calc(phys_state)
378410 call lininterp( t_lonlat(i,j,:), p_lonlat(i,j,:), pver, &
379411 ti_lonlat(i,j,:), pref_mid(:), pver )
380412
413+ call lininterp( uv_lonlat(i,j,:), p_lonlat(i,j,:), pver, &
414+ uvi_lonlat(i,j,:), pref_mid(:), pver )
415+
416+ call lininterp( uw_lonlat(i,j,:), p_lonlat(i,j,:), pver, &
417+ uwi_lonlat(i,j,:), pref_mid(:), pver )
418+
419+ call lininterp( vt_lonlat(i,j,:), p_lonlat(i,j,:), pver, &
420+ vti_lonlat(i,j,:), pref_mid(:), pver )
421+
422+ call lininterp( wt_lonlat(i,j,:), p_lonlat(i,j,:), pver, &
423+ wti_lonlat(i,j,:), pref_mid(:), pver )
424+
381425 end do
382426 end do
383427
@@ -394,32 +438,33 @@ subroutine ctem_diags_calc(phys_state)
394438 call esmf_zonal_mean_masked(wi_lonlat, wght, wsums, w_zm)
395439 call esmf_zonal_mean_masked(ti_lonlat, wght, wsums, t_zm)
396440
441+ call esmf_zonal_mean_masked(uvi_lonlat, wght, wsums, uv_zm)
442+ call esmf_zonal_mean_masked(uwi_lonlat, wght, wsums, uw_zm)
443+ call esmf_zonal_mean_masked(vti_lonlat, wght, wsums, vt_zm)
444+ call esmf_zonal_mean_masked(wti_lonlat, wght, wsums, wt_zm)
445+
397446 call t_stopf(' ctem_diags_calc-zonal_mean-uvwt' )
398447
399448 call t_startf(' ctem_diags_calc-calc_dev_flx' )
400449
401- ! Calculate zonal deviations and fluxes
450+ ! Calculate fluxes
402451 do k = 1 ,pver
403452 do j = beglat,endlat
404453 do i = beglon,endlon
405454 if (wght(i,j,k)>0._r8 ) then
406- ud_lonlat(i,j,k) = ui_lonlat(i,j,k) - u_zm(j,k)
407- vd_lonlat(i,j,k) = vi_lonlat(i,j,k) - v_zm(j,k)
408- wd_lonlat(i,j,k) = wi_lonlat(i,j,k) - w_zm(j,k)
409- td_lonlat (i,j,k) = ti_lonlat(i, j,k) - t_zm( j,k)
410- vtp (i,j,k) = vd_lonlat(i, j,k) * td_lonlat(i, j,k)
411- wtp (i,j,k) = wd_lonlat(i, j,k) * td_lonlat(i, j,k)
412- uwp (i,j,k) = ud_lonlat(i, j,k) * wd_lonlat(i, j,k)
413- uvp(i,j,k) = ud_lonlat(i,j,k) * vd_lonlat(i,j,k)
455+
456+ ! u'v' = (uv)zm - uzm*vzm
457+
458+ uvp (i,j,k) = uv_zm( j,k) - (u_zm( j,k) * v_zm(j,k) )
459+ uwp (i,j,k) = uw_zm( j,k) - (u_zm(j,k) * w_zm( j,k) )
460+ vtp (i,j,k) = vt_zm( j,k) - (v_zm(j,k) * t_zm( j,k) )
461+ wtp (i,j,k) = wt_zm( j,k) - (w_zm(j,k) * t_zm( j,k) )
462+
414463 else
415- ud_lonlat(i,j,k) = fillvalue
416- vd_lonlat(i,j,k) = fillvalue
417- wd_lonlat(i,j,k) = fillvalue
418- td_lonlat(i,j,k) = fillvalue
464+ uvp(i,j,k) = fillvalue
465+ uwp(i,j,k) = fillvalue
419466 vtp(i,j,k) = fillvalue
420467 wtp(i,j,k) = fillvalue
421- uwp(i,j,k) = fillvalue
422- uvp(i,j,k) = fillvalue
423468 end if
424469 end do
425470 end do
0 commit comments