subroutine da_analysis_stats (grid, stats_unit, stats_unit2) 2,46
!------------------------------------------------------------------------
! Purpose: Calculate min, max, mean and RMS of input 1d field.
!------------------------------------------------------------------------
#if (WRF_CHEM == 1)
use module_state_description, only : num_chem, PARAM_FIRST_SCALAR &
,p_chem_ic_p25, p_chem_ic_sulf &
,p_chem_ic_bc1, p_chem_ic_bc2, p_chem_ic_oc1, p_chem_ic_oc2 &
,p_chem_ic_dust_1, p_chem_ic_dust_2, p_chem_ic_seas_1, p_chem_ic_seas_2 &
,p_chem_ic_bc_a01, p_chem_ic_bc_a02, p_chem_ic_bc_a03 &
,p_chem_ic_oc_a01, p_chem_ic_oc_a02, p_chem_ic_oc_a03 &
,p_chem_ic_so4_a01, p_chem_ic_so4_a02, p_chem_ic_so4_a03 &
,p_chem_ic_no3_a01, p_chem_ic_no3_a02, p_chem_ic_no3_a03 &
,p_chem_ic_nh4_a01, p_chem_ic_nh4_a02, p_chem_ic_nh4_a03 &
,p_chem_ic_cl_a01, p_chem_ic_cl_a02, p_chem_ic_cl_a03 &
,p_chem_ic_na_a01, p_chem_ic_na_a02, p_chem_ic_na_a03 &
,p_chem_ic_oin_a01, p_chem_ic_oin_a02, p_chem_ic_oin_a03
#endif
implicit none
type (domain), intent (in) :: grid
integer, intent (in) :: stats_unit ! Output unit for stats.
integer, optional, intent (in) :: stats_unit2 ! Output unit for chem stats.
integer :: i, j, k
integer :: ij_g, ijk_g ! ij, ijk for global domain.
integer :: kdim ! k range
real :: um, vm, tm, pm, qm , qcwm, qrnm ! On local domain.
real :: qcim, qsnm, qgrm
real :: rij_g, rijk_g ! On global domain.
type (maxmin_field_type) :: max_u(kts:kte), max_v(kts:kte), &
max_t(kts:kte), max_p(kts:kte), &
max_q(kts:kte), &
min_u(kts:kte), min_v(kts:kte), &
min_t(kts:kte), min_p(kts:kte), &
min_q(kts:kte)
type (maxmin_field_type) :: max_qcw(kts:kte), max_qrn(kts:kte), &
max_qci(kts:kte), max_qsn(kts:kte), &
max_qgr(kts:kte), &
min_qcw(kts:kte), min_qrn(kts:kte), &
min_qci(kts:kte), min_qsn(kts:kte), &
min_qgr(kts:kte)
#if (WRF_CHEM == 1)
type (maxmin_field_type) :: max_chem(kts:kte,num_chem), min_chem(kts:kte,num_chem)
real :: chemm(num_chem), chemv(kts:kte,num_chem)
integer :: ic
#endif
real :: uv(kts:kte), vv(kts:kte), &
tv(kts:kte), pv(kts:kte), &
qv(kts:kte)
real :: qcwv(kts:kte), qrnv(kts:kte), &
qciv(kts:kte), qsnv(kts:kte), &
qgrv(kts:kte)
call da_trace_entry
("da_analysis_stats")
kdim = kte-kts+1
ij_g = mix * mjy
ijk_g = ij_g * mkz
rij_g = 1.0/real(ij_g)
rijk_g = 1.0/real(ijk_g)
if (rootproc) then
write(unit=stats_unit, fmt='(/a/)') ' Minimum of gridded analysis increments'
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(6a/)') &
' Lvl ', &
'u i j ', &
'v i j ', &
't i j ', &
'p i j ', &
'q i j'
case ( 1 )
write(unit=stats_unit, fmt='(8a/)') &
' Lvl ', &
'u i j ', &
'v i j ', &
't i j ', &
'p i j ', &
'q i j ', &
'qcw i j ', &
'qrn i j'
case ( 2, 3 )
write(unit=stats_unit, fmt='(11a/)') &
' Lvl ', &
'u i j ', &
'v i j ', &
't i j ', &
'p i j ', &
'q i j ', &
'qcw i j ', &
'qrn i j ', &
'qci i j ', &
'qsn i j ', &
'qgr i j'
end select
#if (WRF_CHEM == 1)
write(unit=stats_unit2, fmt='(/a/)') ' Minimum of gridded analysis increments'
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(11a/)') &
' Lvl ', &
'p25 i j ', &
'sulf i j ', &
'bc1 i j ', &
'bc2 i j ', &
'oc1 i j ', &
'oc2 i j ', &
'dust_1 i j ', &
'dust_2 i j ', &
'seas_1 i j ', &
'seas_2 i j'
end select
#endif
end if
call da_maxmin_in_field
(grid%xa%u(its:ite,jts:jte,kts:kte), max_u, min_u)
call da_proc_maxmin_combine
(kdim, max_u, min_u)
call da_maxmin_in_field
(grid%xa%v(its:ite,jts:jte,kts:kte), max_v, min_v)
call da_proc_maxmin_combine
(kdim, max_v, min_v)
call da_maxmin_in_field
(grid%xa%t(its:ite,jts:jte,kts:kte), max_t, min_t)
call da_proc_maxmin_combine
(kdim, max_t, min_t)
call da_maxmin_in_field
(grid%xa%p(its:ite,jts:jte,kts:kte), max_p, min_p)
call da_proc_maxmin_combine
(kdim, max_p, min_p)
call da_maxmin_in_field
(grid%xa%q(its:ite,jts:jte,kts:kte), max_q, min_q)
call da_proc_maxmin_combine
(kdim, max_q, min_q)
if ( cloud_cv_options >= 1 ) then
call da_maxmin_in_field
(grid%xa%qcw(its:ite,jts:jte,kts:kte), max_qcw, min_qcw)
call da_proc_maxmin_combine
(kdim, max_qcw, min_qcw)
call da_maxmin_in_field
(grid%xa%qrn(its:ite,jts:jte,kts:kte), max_qrn, min_qrn)
call da_proc_maxmin_combine
(kdim, max_qrn, min_qrn)
end if
if ( cloud_cv_options >= 2 ) then
call da_maxmin_in_field
(grid%xa%qci(its:ite,jts:jte,kts:kte), max_qci, min_qci)
call da_proc_maxmin_combine
(kdim, max_qci, min_qci)
call da_maxmin_in_field
(grid%xa%qsn(its:ite,jts:jte,kts:kte), max_qsn, min_qsn)
call da_proc_maxmin_combine
(kdim, max_qsn, min_qsn)
call da_maxmin_in_field
(grid%xa%qgr(its:ite,jts:jte,kts:kte), max_qgr, min_qgr)
call da_proc_maxmin_combine
(kdim, max_qgr, min_qgr)
end if
#if (WRF_CHEM == 1)
if ( chem_cv_options >= 10 ) then
do ic=PARAM_FIRST_SCALAR, num_chem
call da_maxmin_in_field
(grid%xachem%chem_ic(its:ite,jts:jte,kts:kte, ic), max_chem(:,ic), min_chem(:,ic))
call da_proc_maxmin_combine
(kdim, max_chem(:,ic), min_chem(:,ic))
end do
end if
#endif
um = 999999.0
vm = 999999.0
tm = 999999.0
pm = 999999.0
qm = 999999.0
qcwm = 999999.0
qrnm = 999999.0
qcim = 999999.0
qsnm = 999999.0
qgrm = 999999.0
#if (WRF_CHEM == 1)
chemm = 999999.0
#endif
do k = kts, kte
if (rootproc) then
if ( abs(min_q(k)%value) < 1.e-30 ) min_q(k)%value = 0.0
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(i4,4(f12.4,2i5),e12.4,2i5)') k, &
min_u(k), min_v(k), min_t(k), min_p(k), min_q(k)
case ( 1 )
write(unit=stats_unit, fmt='(i4,4(f12.4,2i5),3(e12.4,2i5))') k, &
min_u(k), min_v(k), min_t(k), min_p(k), min_q(k), &
min_qcw(k), min_qrn(k)
case ( 2, 3 )
write(unit=stats_unit, fmt='(i4,4(f12.4,2i5),6(e12.4,2i5))') k, &
min_u(k), min_v(k), min_t(k), min_p(k), min_q(k), &
min_qcw(k), min_qrn(k), min_qci(k), min_qsn(k), min_qgr(k)
end select
#if (WRF_CHEM == 1)
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(i4,4(f12.4,2i5),6(e12.4,2i5))') k, &
min_chem(k, p_chem_ic_p25), min_chem(k, p_chem_ic_sulf), &
min_chem(k, p_chem_ic_bc1), min_chem(k, p_chem_ic_bc2), min_chem(k, p_chem_ic_oc1), min_chem(k, p_chem_ic_oc2), &
min_chem(k, p_chem_ic_dust_1), min_chem(k, p_chem_ic_dust_2), min_chem(k, p_chem_ic_seas_1), min_chem(k, p_chem_ic_seas_1)
case ( 20 )
write(unit=stats_unit2, fmt='(i4,24(f12.4,2i5)))') k, &
min_chem(k, p_chem_ic_bc_a01), min_chem(k, p_chem_ic_bc_a02), min_chem(k, p_chem_ic_bc_a03), &
min_chem(k, p_chem_ic_oc_a01), min_chem(k, p_chem_ic_oc_a02), min_chem(k, p_chem_ic_oc_a03), &
min_chem(k, p_chem_ic_so4_a01), min_chem(k, p_chem_ic_so4_a02), min_chem(k, p_chem_ic_so4_a03), &
min_chem(k, p_chem_ic_no3_a01), min_chem(k, p_chem_ic_no3_a02), min_chem(k, p_chem_ic_no3_a03), &
min_chem(k, p_chem_ic_nh4_a01), min_chem(k, p_chem_ic_nh4_a02), min_chem(k, p_chem_ic_nh4_a03), &
min_chem(k, p_chem_ic_cl_a01), min_chem(k, p_chem_ic_cl_a02), min_chem(k, p_chem_ic_cl_a03), &
min_chem(k, p_chem_ic_na_a01), min_chem(k, p_chem_ic_na_a02), min_chem(k, p_chem_ic_na_a03), &
min_chem(k, p_chem_ic_oin_a01), min_chem(k, p_chem_ic_oin_a02), min_chem(k, p_chem_ic_oin_a03)
end select
#endif
end if ! rootproc
um=minval(min_u(:)%value)
vm=minval(min_v(:)%value)
tm=minval(min_t(:)%value)
pm=minval(min_p(:)%value)
qm=minval(min_q(:)%value)
if ( cloud_cv_options >= 1 ) then
qcwm=minval(min_qcw(:)%value)
qrnm=minval(min_qrn(:)%value)
end if
if ( cloud_cv_options >= 2 ) then
qcim=minval(min_qci(:)%value)
qsnm=minval(min_qsn(:)%value)
qgrm=minval(min_qgr(:)%value)
end if
end do
#if (WRF_CHEM == 1)
do ic=PARAM_FIRST_SCALAR, num_chem
chemm(ic)=minval(min_chem(:,ic)%value)
end do
#endif
if (rootproc) then
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(a,4(f12.4,10x),e12.4)') ' ALL', &
um, vm, tm, pm, qm
case ( 1 )
write(unit=stats_unit, fmt='(a,4(f12.4,10x),3(e12.4,10x))') ' ALL', &
um, vm, tm, pm, qm, qcwm, qrnm
case ( 2, 3 )
write(unit=stats_unit, fmt='(a,4(f12.4,10x),6(e12.4,10x))') ' ALL', &
um, vm, tm, pm, qm, qcwm, qrnm, qcim, qsnm, qgrm
end select
#if (WRF_CHEM == 1)
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(a,4(f12.4,10x),6(e12.4,10x))') ' ALL', &
chemm(p_chem_ic_p25), chemm(p_chem_ic_sulf), chemm(p_chem_ic_bc1), chemm(p_chem_ic_bc2), chemm(p_chem_ic_oc1), &
chemm(p_chem_ic_oc2), chemm(p_chem_ic_dust_1), chemm(p_chem_ic_dust_2), chemm(p_chem_ic_seas_1), chemm(p_chem_ic_seas_2)
case ( 20 )
write(unit=stats_unit2, fmt='(a,24(f12.4,10x))') ' ALL', &
chemm(p_chem_ic_bc_a01), chemm(p_chem_ic_bc_a02), chemm(p_chem_ic_bc_a03), &
chemm(p_chem_ic_oc_a01), chemm(p_chem_ic_oc_a02), chemm(p_chem_ic_oc_a03), &
chemm(p_chem_ic_so4_a01), chemm(p_chem_ic_so4_a02), chemm(p_chem_ic_so4_a03), &
chemm(p_chem_ic_no3_a01), chemm(p_chem_ic_no3_a02), chemm(p_chem_ic_no3_a03), &
chemm(p_chem_ic_nh4_a01), chemm(p_chem_ic_nh4_a02), chemm(p_chem_ic_nh4_a03), &
chemm(p_chem_ic_cl_a01), chemm(p_chem_ic_cl_a02), chemm(p_chem_ic_cl_a03), &
chemm(p_chem_ic_na_a01), chemm(p_chem_ic_na_a02), chemm(p_chem_ic_na_a03), &
chemm(p_chem_ic_oin_a01), chemm(p_chem_ic_oin_a02), chemm(p_chem_ic_oin_a03)
end select
#endif
write(unit=stats_unit, fmt='(/a/)') &
' Maximum of gridded analysis increments'
#if (WRF_CHEM == 1)
write(unit=stats_unit2, fmt='(/a/)') ' Maximum of gridded analysis increments'
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(11a/)') &
' Lvl ', &
'p25 i j ', &
'sulf i j ', &
'bc1 i j ', &
'bc2 i j ', &
'oc1 i j ', &
'oc2 i j ', &
'dust_1 i j ', &
'dust_2 i j ', &
'seas_1 i j ', &
'seas_2 i j'
end select
#endif
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(6a/)') &
' Lvl ', &
'u i j ', &
'v i j ', &
't i j ', &
'p i j ', &
'q i j'
case ( 1 )
write(unit=stats_unit, fmt='(8a/)') &
' Lvl ', &
'u i j ', &
'v i j ', &
't i j ', &
'p i j ', &
'q i j ', &
'qcw i j ', &
'qrn i j'
case ( 2, 3 )
write(unit=stats_unit, fmt='(11a/)') &
' Lvl ', &
'u i j ', &
'v i j ', &
't i j ', &
'p i j ', &
'q i j ', &
'qcw i j ', &
'qrn i j ', &
'qci i j ', &
'qsn i j ', &
'qgr i j'
end select
end if !rootproc
do k = kts, kte
if (rootproc) then
if ( abs(max_q(k)%value) < 1.e-30 ) max_q(k)%value = 0.0
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(i4,4(f12.4,2i5),e12.4,2i5)') k, &
max_u(k), max_v(k), max_t(k), max_p(k), max_q(k)
case ( 1 )
write(unit=stats_unit, fmt='(i4,4(f12.4,2i5),3(e12.4,2i5))') k, &
max_u(k), max_v(k), max_t(k), max_p(k), max_q(k), &
max_qcw(k), max_qrn(k)
case ( 2, 3 )
write(unit=stats_unit, fmt='(i4,4(f12.4,2i5),6(e12.4,2i5))') k, &
max_u(k), max_v(k), max_t(k), max_p(k), max_q(k), &
max_qcw(k), max_qrn(k), max_qci(k), max_qsn(k), max_qgr(k)
end select
#if (WRF_CHEM == 1)
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(i4,4(f12.4,2i5),6(e12.4,2i5))') k, &
max_chem(k, p_chem_ic_p25), max_chem(k, p_chem_ic_sulf), &
max_chem(k, p_chem_ic_bc1), max_chem(k, p_chem_ic_bc2), max_chem(k, p_chem_ic_oc1), max_chem(k, p_chem_ic_oc2), &
max_chem(k, p_chem_ic_dust_1), max_chem(k, p_chem_ic_dust_2), max_chem(k, p_chem_ic_seas_1), max_chem(k, p_chem_ic_seas_1)
case ( 20 )
write(unit=stats_unit2, fmt='(i4,24(f12.4,2i5))') k, &
max_chem(k, p_chem_ic_bc_a01), max_chem(k, p_chem_ic_bc_a02), max_chem(k, p_chem_ic_bc_a03), &
max_chem(k, p_chem_ic_oc_a01), max_chem(k, p_chem_ic_oc_a02), max_chem(k, p_chem_ic_oc_a03), &
max_chem(k, p_chem_ic_so4_a01), max_chem(k, p_chem_ic_so4_a02), max_chem(k, p_chem_ic_so4_a03), &
max_chem(k, p_chem_ic_no3_a01), max_chem(k, p_chem_ic_no3_a02), max_chem(k, p_chem_ic_no3_a03), &
max_chem(k, p_chem_ic_nh4_a01), max_chem(k, p_chem_ic_nh4_a02), max_chem(k, p_chem_ic_nh4_a03), &
max_chem(k, p_chem_ic_cl_a01), max_chem(k, p_chem_ic_cl_a02), max_chem(k, p_chem_ic_cl_a03), &
max_chem(k, p_chem_ic_na_a01), max_chem(k, p_chem_ic_na_a02), max_chem(k, p_chem_ic_na_a03), &
max_chem(k, p_chem_ic_oin_a01), max_chem(k, p_chem_ic_oin_a02), max_chem(k, p_chem_ic_oin_a03)
end select
#endif
end if
um=maxval(max_u(:)%value)
vm=maxval(max_v(:)%value)
tm=maxval(max_t(:)%value)
pm=maxval(max_p(:)%value)
qm=maxval(max_q(:)%value)
if ( cloud_cv_options >= 1 ) then
qcwm=maxval(max_qcw(:)%value)
qrnm=maxval(max_qrn(:)%value)
end if
if ( cloud_cv_options >= 2 ) then
qcim=maxval(max_qci(:)%value)
qsnm=maxval(max_qsn(:)%value)
qgrm=maxval(max_qgr(:)%value)
end if
end do
#if (WRF_CHEM == 1)
do ic=PARAM_FIRST_SCALAR, num_chem
chemm(ic)=maxval(max_chem(:,ic)%value)
end do
#endif
if (rootproc) then
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(a,4(f12.4,10x),e12.4)') ' ALL', &
um, vm, tm, pm, qm
case ( 1 )
write(unit=stats_unit, fmt='(a,4(f12.4,10x),3(e12.4,10x))') ' ALL', &
um, vm, tm, pm, qm, qcwm, qrnm
case ( 2, 3 )
write(unit=stats_unit, fmt='(a,4(f12.4,10x),6(e12.4,10x))') ' ALL', &
um, vm, tm, pm, qm, qcwm, qrnm, qcim, qsnm, qgrm
end select
#if (WRF_CHEM == 1)
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(a,4(f12.4,10x),6(e12.4,10x))') ' ALL', &
chemm(p_chem_ic_p25), chemm(p_chem_ic_sulf), chemm(p_chem_ic_bc1), chemm(p_chem_ic_bc2), chemm(p_chem_ic_oc1), &
chemm(p_chem_ic_oc2), chemm(p_chem_ic_dust_1), chemm(p_chem_ic_dust_2), chemm(p_chem_ic_seas_1), chemm(p_chem_ic_seas_2)
case ( 20 )
write(unit=stats_unit2, fmt='(a,24(f12.4,10x))') ' ALL', &
chemm(p_chem_ic_bc_a01), chemm(p_chem_ic_bc_a02), chemm(p_chem_ic_bc_a03), &
chemm(p_chem_ic_oc_a01), chemm(p_chem_ic_oc_a02), chemm(p_chem_ic_oc_a03), &
chemm(p_chem_ic_so4_a01), chemm(p_chem_ic_so4_a02), chemm(p_chem_ic_so4_a03), &
chemm(p_chem_ic_no3_a01), chemm(p_chem_ic_no3_a02), chemm(p_chem_ic_no3_a03), &
chemm(p_chem_ic_nh4_a01), chemm(p_chem_ic_nh4_a02), chemm(p_chem_ic_nh4_a03), &
chemm(p_chem_ic_cl_a01), chemm(p_chem_ic_cl_a02), chemm(p_chem_ic_cl_a03), &
chemm(p_chem_ic_na_a01), chemm(p_chem_ic_na_a02), chemm(p_chem_ic_na_a03), &
chemm(p_chem_ic_oin_a01), chemm(p_chem_ic_oin_a02), chemm(p_chem_ic_oin_a03)
end select
#endif
write(unit=stats_unit, fmt='(/a/)') ' Mean of gridded analysis increments'
#if (WRF_CHEM == 1)
write(unit=stats_unit2, fmt='(/a/)') ' Mean of gridded analysis increments'
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(a/)') &
' Lvl p25 sulf bc1 bc2 oc1 oc2 dust_1 dust_2 seas_1 seas_2'
end select
#endif
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(a/)') &
' Lvl u v t p q'
case ( 1 )
write(unit=stats_unit, fmt='(a/)') &
' Lvl u v t p q qcw qrn'
case ( 2, 3 )
write(unit=stats_unit, fmt='(a/)') &
' Lvl u v t p q qcw qrn qci qsn qgr'
end select
end if !rootproc
um = 0.0
vm = 0.0
tm = 0.0
pm = 0.0
qm = 0.0
#if (WRF_CHEM == 1)
chemm = 0.0
if ( chem_cv_options >= 10 ) then
do ic=PARAM_FIRST_SCALAR, num_chem
do k = kts, kte
chemv(k,ic) = sum(grid%xachem%chem_ic(its:ite,jts:jte,k,ic))
end do
call da_proc_sum_real
(chemv(:,ic))
end do
end if
#endif
do k = kts, kte
uv(k) = sum(grid%xa%u(its:ite,jts:jte,k))
vv(k) = sum(grid%xa%v(its:ite,jts:jte,k))
tv(k) = sum(grid%xa%t(its:ite,jts:jte,k))
pv(k) = sum(grid%xa%p(its:ite,jts:jte,k))
qv(k) = sum(grid%xa%q(its:ite,jts:jte,k))
end do
call da_proc_sum_real
(uv)
call da_proc_sum_real
(vv)
call da_proc_sum_real
(tv)
call da_proc_sum_real
(pv)
call da_proc_sum_real
(qv)
if ( cloud_cv_options >= 1 ) then
qcwm = 0.0
qrnm = 0.0
do k = kts, kte
qcwv(k) = sum(grid%xa%qcw(its:ite,jts:jte,k))
qrnv(k) = sum(grid%xa%qrn(its:ite,jts:jte,k))
end do
call da_proc_sum_real
(qcwv)
call da_proc_sum_real
(qrnv)
end if
if ( cloud_cv_options >= 2 ) then
qcim = 0.0
qsnm = 0.0
qgrm = 0.0
do k = kts, kte
qciv(k) = sum(grid%xa%qci(its:ite,jts:jte,k))
qsnv(k) = sum(grid%xa%qsn(its:ite,jts:jte,k))
qgrv(k) = sum(grid%xa%qgr(its:ite,jts:jte,k))
end do
call da_proc_sum_real
(qciv)
call da_proc_sum_real
(qsnv)
call da_proc_sum_real
(qgrv)
end if
if (rootproc) then
do k = kts, kte
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(i4,4f12.4,e12.4)') k, &
uv(k)*rij_g, vv(k)*rij_g, tv(k)*rij_g, &
pv(k)*rij_g, qv(k)*rij_g
case ( 1 )
write(unit=stats_unit, fmt='(i4,4f12.4,3e12.4)') k, &
uv(k)*rij_g, vv(k)*rij_g, tv(k)*rij_g, &
pv(k)*rij_g, qv(k)*rij_g, &
qcwv(k)*rij_g, qrnv(k)*rij_g
case ( 2, 3 )
write(unit=stats_unit, fmt='(i4,4f12.4,6e12.4)') k, &
uv(k)*rij_g, vv(k)*rij_g, tv(k)*rij_g, &
pv(k)*rij_g, qv(k)*rij_g, &
qcwv(k)*rij_g, qrnv(k)*rij_g, qciv(k)*rij_g, &
qsnv(k)*rij_g, qgrv(k)*rij_g
end select
#if (WRF_CHEM == 1)
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(i4,10e14.4)') k, &
chemv(k, p_chem_ic_p25)*rij_g, chemv(k, p_chem_ic_sulf)*rij_g, &
chemv(k, p_chem_ic_bc1)*rij_g, chemv(k, p_chem_ic_bc2)*rij_g, chemv(k, p_chem_ic_oc1)*rij_g, chemv(k, p_chem_ic_oc2)*rij_g, &
chemv(k, p_chem_ic_dust_1)*rij_g, chemv(k, p_chem_ic_dust_2)*rij_g, chemv(k, p_chem_ic_seas_2)*rij_g, chemv(k, p_chem_ic_seas_2)*rij_g
case ( 20 )
write(unit=stats_unit2, fmt='(i4,24e14.4)') k, &
chemv(k, p_chem_ic_bc_a01)*rij_g, chemv(k, p_chem_ic_bc_a02)*rij_g, chemv(k, p_chem_ic_bc_a03)*rij_g, &
chemv(k, p_chem_ic_oc_a01)*rij_g, chemv(k, p_chem_ic_oc_a02)*rij_g, chemv(k, p_chem_ic_oc_a03)*rij_g, &
chemv(k, p_chem_ic_so4_a01)*rij_g, chemv(k, p_chem_ic_so4_a02)*rij_g, chemv(k, p_chem_ic_so4_a03)*rij_g, &
chemv(k, p_chem_ic_no3_a01)*rij_g, chemv(k, p_chem_ic_no3_a02)*rij_g, chemv(k, p_chem_ic_no3_a03)*rij_g, &
chemv(k, p_chem_ic_nh4_a01)*rij_g, chemv(k, p_chem_ic_nh4_a02)*rij_g, chemv(k, p_chem_ic_nh4_a03)*rij_g, &
chemv(k, p_chem_ic_cl_a01)*rij_g, chemv(k, p_chem_ic_cl_a02)*rij_g, chemv(k, p_chem_ic_cl_a03)*rij_g, &
chemv(k, p_chem_ic_na_a01)*rij_g, chemv(k, p_chem_ic_na_a02)*rij_g, chemv(k, p_chem_ic_na_a03)*rij_g, &
chemv(k, p_chem_ic_oin_a01)*rij_g, chemv(k, p_chem_ic_oin_a02)*rij_g, chemv(k, p_chem_ic_oin_a03)*rij_g
end select
do ic=PARAM_FIRST_SCALAR, num_chem
chemm(ic)=chemm(ic)+chemv(k,ic)
end do
#endif
um=um+uv(k)
vm=vm+vv(k)
tm=tm+tv(k)
pm=pm+pv(k)
qm=qm+qv(k)
if ( cloud_cv_options >= 1 ) then
qcwm = qcwm + qcwv(k)
qrnm = qrnm + qrnv(k)
end if
if ( cloud_cv_options >= 2 ) then
qcim = qcim + qciv(k)
qsnm = qsnm + qsnv(k)
qgrm = qgrm + qgrv(k)
end if
end do !k loop
end if !rootproc
if (rootproc) then
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(a,4f12.4,e12.4)') ' ALL', &
um*rijk_g, vm*rijk_g, tm*rijk_g, pm*rijk_g, qm*rijk_g
case ( 1 )
write(unit=stats_unit, fmt='(a,4f12.4,3e12.4)') ' ALL', &
um*rijk_g, vm*rijk_g, tm*rijk_g, pm*rijk_g, qm*rijk_g, &
qcwm*rijk_g, qrnm*rijk_g
case ( 2, 3 )
write(unit=stats_unit, fmt='(a,4f12.4,6e12.4)') ' ALL', &
um*rijk_g, vm*rijk_g, tm*rijk_g, pm*rijk_g, qm*rijk_g, &
qcwm*rijk_g, qrnm*rijk_g, qcim*rijk_g, qsnm*rijk_g, qgrm*rijk_g
end select
#if (WRF_CHEM == 1)
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(a,10e14.4)') ' ALL', &
chemv(k, p_chem_ic_p25)*rijk_g, chemv(k, p_chem_ic_sulf)*rijk_g, &
chemv(k, p_chem_ic_bc1)*rijk_g, chemv(k, p_chem_ic_bc2)*rijk_g, chemv(k, p_chem_ic_oc1)*rijk_g, chemv(k, p_chem_ic_oc2)*rijk_g, &
chemv(k, p_chem_ic_dust_1)*rijk_g, chemv(k, p_chem_ic_dust_2)*rijk_g, chemv(k, p_chem_ic_seas_2)*rijk_g, chemv(k, p_chem_ic_seas_2)*rijk_g
case ( 20 )
write(unit=stats_unit2, fmt='(a,24e14.4)') ' ALL', &
chemv(k, p_chem_ic_bc_a01)*rijk_g, chemv(k, p_chem_ic_bc_a02)*rijk_g, chemv(k, p_chem_ic_bc_a03)*rijk_g, &
chemv(k, p_chem_ic_oc_a01)*rijk_g, chemv(k, p_chem_ic_oc_a02)*rijk_g, chemv(k, p_chem_ic_oc_a03)*rijk_g, &
chemv(k, p_chem_ic_so4_a01)*rijk_g, chemv(k, p_chem_ic_so4_a02)*rijk_g, chemv(k, p_chem_ic_so4_a03)*rijk_g, &
chemv(k, p_chem_ic_no3_a01)*rijk_g, chemv(k, p_chem_ic_no3_a02)*rijk_g, chemv(k, p_chem_ic_no3_a03)*rijk_g, &
chemv(k, p_chem_ic_nh4_a01)*rijk_g, chemv(k, p_chem_ic_nh4_a02)*rijk_g, chemv(k, p_chem_ic_nh4_a03)*rijk_g, &
chemv(k, p_chem_ic_cl_a01)*rijk_g, chemv(k, p_chem_ic_cl_a02)*rijk_g, chemv(k, p_chem_ic_cl_a03)*rijk_g, &
chemv(k, p_chem_ic_na_a01)*rijk_g, chemv(k, p_chem_ic_na_a02)*rijk_g, chemv(k, p_chem_ic_na_a03)*rijk_g, &
chemv(k, p_chem_ic_oin_a01)*rijk_g, chemv(k, p_chem_ic_oin_a02)*rijk_g, chemv(k, p_chem_ic_oin_a03)*rijk_g
end select
#endif
write(unit=stats_unit, fmt='(/a/)') ' RMSE of gridded analysis increments'
#if (WRF_CHEM == 1)
write(unit=stats_unit2, fmt='(/a/)') ' RMSE of gridded analysis increments'
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(a/)') &
' Lvl p25 sulf bc1 bc2 oc1 oc2 dust_1 dust_2 seas_1 seas_2'
end select
#endif
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(a/)') &
' Lvl u v t p q'
case ( 1 )
write(unit=stats_unit, fmt='(a/)') &
' Lvl u v t p q qcw qrn'
case ( 2, 3 )
write(unit=stats_unit, fmt='(a/)') &
' Lvl u v t p q qcw qrn qci qsn qgr'
end select
end if !rootproc
um = 0.0
vm = 0.0
tm = 0.0
pm = 0.0
qm = 0.0
uv = 0.0
vv = 0.0
tv = 0.0
pv = 0.0
qv = 0.0
#if (WRF_CHEM == 1)
chemm = 0.0
chemv = 0.0
#endif
qcwv = 0.0
qrnv = 0.0
qciv = 0.0
qsnv = 0.0
qgrv = 0.0
qcwm = 0.0
qrnm = 0.0
qcim = 0.0
qsnm = 0.0
qgrm = 0.0
do k = kts, kte
do j=jts,jte
do i=its,ite
uv(k) = uv(k) + grid%xa%u(i,j,k) * grid%xa%u(i,j,k)
vv(k) = vv(k) + grid%xa%v(i,j,k) * grid%xa%v(i,j,k)
tv(k) = tv(k) + grid%xa%t(i,j,k) * grid%xa%t(i,j,k)
pv(k) = pv(k) + grid%xa%p(i,j,k) * grid%xa%p(i,j,k)
qv(k) = qv(k) + grid%xa%q(i,j,k) * grid%xa%q(i,j,k)
end do
end do
end do
call da_proc_sum_real
(uv)
call da_proc_sum_real
(vv)
call da_proc_sum_real
(tv)
call da_proc_sum_real
(pv)
call da_proc_sum_real
(qv)
#if (WRF_CHEM == 1)
do ic=PARAM_FIRST_SCALAR, num_chem
do k = kts, kte
do j=jts,jte
do i=its,ite
chemv(k,ic) = chemv(k,ic) + grid%xachem%chem_ic(i,j,k,ic) * grid%xachem%chem_ic(i,j,k,ic)
end do
end do
call da_proc_sum_real
(chemv(:,ic))
end do
end do
#endif
if ( cloud_cv_options >= 1 ) then
do k = kts, kte
do j=jts,jte
do i=its,ite
qcwv(k) = qcwv(k) + grid%xa%qcw(i,j,k) * grid%xa%qcw(i,j,k)
qrnv(k) = qrnv(k) + grid%xa%qrn(i,j,k) * grid%xa%qrn(i,j,k)
end do
end do
end do
call da_proc_sum_real
(qcwv)
call da_proc_sum_real
(qrnv)
end if
if ( cloud_cv_options >= 2 ) then
do k = kts, kte
do j=jts,jte
do i=its,ite
qciv(k) = qciv(k) + grid%xa%qci(i,j,k) * grid%xa%qci(i,j,k)
qsnv(k) = qsnv(k) + grid%xa%qsn(i,j,k) * grid%xa%qsn(i,j,k)
qgrv(k) = qgrv(k) + grid%xa%qgr(i,j,k) * grid%xa%qgr(i,j,k)
end do
end do
end do
call da_proc_sum_real
(qciv)
call da_proc_sum_real
(qsnv)
call da_proc_sum_real
(qgrv)
end if
if (rootproc) then
do k = kts, kte
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(i4,4f12.4,e12.4)') k, &
sqrt(uv(k)*rij_g), &
sqrt(vv(k)*rij_g), &
sqrt(tv(k)*rij_g), &
sqrt(pv(k)*rij_g), &
sqrt(qv(k)*rij_g)
case ( 1 )
write(unit=stats_unit, fmt='(i4,4f12.4,3e12.4)') k, &
sqrt(uv(k)*rij_g), &
sqrt(vv(k)*rij_g), &
sqrt(tv(k)*rij_g), &
sqrt(pv(k)*rij_g), &
sqrt(qv(k)*rij_g), &
sqrt(qcwv(k)*rij_g), &
sqrt(qrnv(k)*rij_g)
case ( 2, 3 )
write(unit=stats_unit, fmt='(i4,4f12.4,6e12.4)') k, &
sqrt(uv(k)*rij_g), &
sqrt(vv(k)*rij_g), &
sqrt(tv(k)*rij_g), &
sqrt(pv(k)*rij_g), &
sqrt(qv(k)*rij_g), &
sqrt(qcwv(k)*rij_g), &
sqrt(qrnv(k)*rij_g), &
sqrt(qciv(k)*rij_g), &
sqrt(qsnv(k)*rij_g), &
sqrt(qgrv(k)*rij_g)
end select
#if (WRF_CHEM == 1)
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(i4,10e14.4)') k, &
sqrt(chemv(k, p_chem_ic_p25)*rij_g), &
sqrt(chemv(k, p_chem_ic_sulf)*rij_g), &
sqrt(chemv(k, p_chem_ic_bc1)*rij_g), &
sqrt(chemv(k, p_chem_ic_bc2)*rij_g), &
sqrt(chemv(k, p_chem_ic_oc1)*rij_g), &
sqrt(chemv(k, p_chem_ic_oc2)*rij_g), &
sqrt(chemv(k, p_chem_ic_dust_1)*rij_g), &
sqrt(chemv(k, p_chem_ic_dust_2)*rij_g), &
sqrt(chemv(k, p_chem_ic_seas_1)*rij_g), &
sqrt(chemv(k, p_chem_ic_seas_2)*rij_g)
case ( 20 )
write(unit=stats_unit2, fmt='(i4,24e14.4)') k, &
sqrt(chemv(k, p_chem_ic_bc_a01)*rij_g), sqrt(chemv(k, p_chem_ic_bc_a02)*rij_g), sqrt(chemv(k, p_chem_ic_bc_a03)*rij_g), &
sqrt(chemv(k, p_chem_ic_oc_a01)*rij_g), sqrt(chemv(k, p_chem_ic_oc_a02)*rij_g), sqrt(chemv(k, p_chem_ic_oc_a03)*rij_g), &
sqrt(chemv(k, p_chem_ic_so4_a01)*rij_g), sqrt(chemv(k, p_chem_ic_so4_a02)*rij_g), sqrt(chemv(k, p_chem_ic_so4_a03)*rij_g), &
sqrt(chemv(k, p_chem_ic_no3_a01)*rij_g), sqrt(chemv(k, p_chem_ic_no3_a02)*rij_g), sqrt(chemv(k, p_chem_ic_no3_a03)*rij_g), &
sqrt(chemv(k, p_chem_ic_nh4_a01)*rij_g), sqrt(chemv(k, p_chem_ic_nh4_a02)*rij_g), sqrt(chemv(k, p_chem_ic_nh4_a03)*rij_g), &
sqrt(chemv(k, p_chem_ic_cl_a01)*rij_g), sqrt(chemv(k, p_chem_ic_cl_a02)*rij_g), sqrt(chemv(k, p_chem_ic_cl_a03)*rij_g), &
sqrt(chemv(k, p_chem_ic_na_a01)*rij_g), sqrt(chemv(k, p_chem_ic_na_a02)*rij_g), sqrt(chemv(k, p_chem_ic_na_a03)*rij_g), &
sqrt(chemv(k, p_chem_ic_oin_a01)*rij_g), sqrt(chemv(k, p_chem_ic_oin_a02)*rij_g), sqrt(chemv(k, p_chem_ic_oin_a03)*rij_g)
end select
do ic=PARAM_FIRST_SCALAR, num_chem
chemm(ic)=chemm(ic)+chemv(k,ic)
end do
#endif
um=um+uv(k)
vm=vm+vv(k)
tm=tm+tv(k)
pm=pm+pv(k)
qm=qm+qv(k)
if ( cloud_cv_options >= 1 ) then
qcwm=qcwm+qcwv(k)
qrnm=qrnm+qrnv(k)
end if
if ( cloud_cv_options >= 2 ) then
qcim=qcim+qciv(k)
qsnm=qsnm+qsnv(k)
end if
end do !k loop
end if !rootproc
if (rootproc) then
select case ( cloud_cv_options )
case ( 0 )
write(unit=stats_unit, fmt='(a,4f12.4,e12.4)') ' ALL', &
sqrt(um*rijk_g), sqrt(vm*rijk_g), sqrt(tm*rijk_g), &
sqrt(pm*rijk_g), sqrt(qm*rijk_g)
case ( 1 )
write(unit=stats_unit, fmt='(a,4f12.4,3e12.4)') ' ALL', &
sqrt(um*rijk_g), sqrt(vm*rijk_g), sqrt(tm*rijk_g), &
sqrt(pm*rijk_g), sqrt(qm*rijk_g), &
sqrt(qcwm*rijk_g), sqrt(qrnm*rijk_g)
case ( 2, 3 )
write(unit=stats_unit, fmt='(a,4f12.4,6e12.4)') ' ALL', &
sqrt(um*rijk_g), sqrt(vm*rijk_g), sqrt(tm*rijk_g), &
sqrt(pm*rijk_g), sqrt(qm*rijk_g), &
sqrt(qcwm*rijk_g), sqrt(qrnm*rijk_g), sqrt(qcim*rijk_g), &
sqrt(qsnm*rijk_g), sqrt(qgrm*rijk_g)
end select
#if (WRF_CHEM == 1)
select case ( chem_cv_options )
case ( 10 )
write(unit=stats_unit2, fmt='(a,10e14.4)') ' ALL', &
sqrt(chemm(p_chem_ic_p25)*rijk_g), sqrt(chemm(p_chem_ic_sulf)*rijk_g), &
sqrt(chemm(p_chem_ic_bc1)*rijk_g), sqrt(chemm(p_chem_ic_bc2)*rijk_g), sqrt(chemm(p_chem_ic_oc1)*rijk_g), sqrt(chemm(p_chem_ic_oc2)*rijk_g), &
sqrt(chemm(p_chem_ic_dust_1)*rijk_g), sqrt(chemm(p_chem_ic_dust_2)*rijk_g), &
sqrt(chemm(p_chem_ic_seas_1)*rijk_g), sqrt(chemm(p_chem_ic_seas_2)*rijk_g)
case ( 20 )
write(unit=stats_unit2, fmt='(a,24e14.4)') ' ALL', &
sqrt(chemm(p_chem_ic_bc_a01)*rijk_g), sqrt(chemm(p_chem_ic_bc_a02)*rijk_g), sqrt(chemm(p_chem_ic_bc_a03)*rijk_g), &
sqrt(chemm(p_chem_ic_oc_a01)*rijk_g), sqrt(chemm(p_chem_ic_oc_a02)*rijk_g), sqrt(chemm(p_chem_ic_oc_a03)*rijk_g), &
sqrt(chemm(p_chem_ic_so4_a01)*rijk_g), sqrt(chemm(p_chem_ic_so4_a02)*rijk_g), sqrt(chemm(p_chem_ic_so4_a03)*rijk_g), &
sqrt(chemm(p_chem_ic_no3_a01)*rijk_g), sqrt(chemm(p_chem_ic_no3_a02)*rijk_g), sqrt(chemm(p_chem_ic_no3_a03)*rijk_g), &
sqrt(chemm(p_chem_ic_nh4_a01)*rijk_g), sqrt(chemm(p_chem_ic_nh4_a02)*rijk_g), sqrt(chemm(p_chem_ic_nh4_a03)*rijk_g), &
sqrt(chemm(p_chem_ic_cl_a01)*rijk_g), sqrt(chemm(p_chem_ic_cl_a02)*rijk_g), sqrt(chemm(p_chem_ic_cl_a03)*rijk_g), &
sqrt(chemm(p_chem_ic_na_a01)*rijk_g), sqrt(chemm(p_chem_ic_na_a02)*rijk_g), sqrt(chemm(p_chem_ic_na_a03)*rijk_g), &
sqrt(chemm(p_chem_ic_oin_a01)*rijk_g), sqrt(chemm(p_chem_ic_oin_a02)*rijk_g), sqrt(chemm(p_chem_ic_oin_a03)*rijk_g)
end select
#endif
end if
call da_trace_exit
("da_analysis_stats")
contains
#include "da_maxmin_in_field.inc"
end subroutine da_analysis_stats