Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Registry/Registry.EM_COMMON
Original file line number Diff line number Diff line change
Expand Up @@ -3063,7 +3063,7 @@ package icedepth_one seaice_thickness_opt==1 - state:icedept
#Time series options for text output
package notseries process_time_series==0 - -
package tseries process_time_series==1 - state:ts_hour,ts_u,ts_v,ts_q,ts_t,ts_psfc,ts_glw,ts_gsw,ts_hfx,ts_lh,ts_tsk,ts_tslb,ts_clw,ts_rainc,ts_rainnc,ts_u_profile,ts_v_profile,ts_gph_profile,ts_th_profile,ts_p_profile,ts_w_profile
package tseries_add_solar process_time_series==2 - state:ts_hour,ts_u,ts_v,ts_q,ts_t,ts_psfc,ts_glw,ts_gsw,ts_hfx,ts_lh,ts_tsk,ts_tslb,ts_clw,ts_rainc,ts_rainnc,ts_u_profile,ts_v_profile,ts_gph_profile,ts_th_profile,ts_cldfrac2d,ts_wvp,ts_lwp,ts_iwp,ts_swp,ts_lwp_tot,ts_iwp_tot,ts_swp_tot,ts_re_qc,ts_re_qi,ts_re_qs,ts_re_qc_tot,ts_re_qi_tot,ts_re_qs_tot,ts_tau_qc,ts_tau_qi,ts_tau_qs,ts_tau_qc_tot,ts_tau_qi_tot,ts_tau_qs_tot,ts_cbaseht,ts_ctopht,ts_cbaseht_tot,ts_ctopht_tot,ts_clrnidx,ts_p_profile,ts_w_profile
package tseries_add_solar process_time_series==2 - state:ts_hour,ts_u,ts_v,ts_q,ts_t,ts_psfc,ts_glw,ts_gsw,ts_hfx,ts_lh,ts_tsk,ts_tslb,ts_clw,ts_rainc,ts_rainnc,ts_u_profile,ts_v_profile,ts_gph_profile,ts_th_profile,ts_cldfrac2d,ts_wvp,ts_lwp,ts_iwp,ts_swp,ts_lwp_tot,ts_iwp_tot,ts_swp_tot,ts_re_qc,ts_re_qi,ts_re_qs,ts_re_qc_tot,ts_re_qi_tot,ts_re_qs_tot,ts_tau_qc,ts_tau_qi,ts_tau_qs,ts_tau_qc_tot,ts_tau_qi_tot,ts_tau_qs_tot,ts_cbaseht,ts_ctopht,ts_cbaseht_tot,ts_ctopht_tot,ts_clrnidx,ts_p_profile,ts_w_profile,ts_swdown,ts_swddni,ts_swddif,ts_swdownc,ts_swddnic,ts_swdown2,ts_swddni2,ts_swddif2,ts_swdownc2,ts_swddnic2

# WRF-HAILCAST
state real HAILCAST_DHAIL1 ij misc 1 - r "HAILCAST_DHAIL1" "WRF-HAILCAST Hail Diameter, 1st rank order" "mm"
Expand Down
10 changes: 10 additions & 0 deletions Registry/registry.solar_fields
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,16 @@ state real ts_cbaseht_tot ?! misc - - - "TS_C
state real ts_ctopht_tot ?! misc - - - "TS_CTOPHT_TOT" "CLOUD TOP HEIGHT RES + UNRES"
state real ts_clrnidx ?! misc - - - "TS_CLRNIDX" "CLEARNESS INDEX"
state real ts_sza ?! misc - - - "TS_SZA" "SOLAR ZENITH ANGLE"
state real ts_swdown ?! misc - - - "TS_SWDOWN" "DOWNWARD SHORT WAVE FLUX AT GROUND SURFACE"
state real ts_swddni ?! misc - - - "TS_SWDDNI" "SHORTWAVE SURFACE DOWNWARD DIRECT NORMAL IRRADIANCE"
state real ts_swddif ?! misc - - - "TS_SWDDIF" "SHORTWAVE SURFACE DOWNWARD DIFFUSE IRRADIANCE"
state real ts_swdownc ?! misc - - - "TS_SWDOWNC" "DOWNWARD CLEAR-SKY SHORTWAVE FLUX AT GROUND SURFACE"
state real ts_swddnic ?! misc - - - "TS_SWDDNIC" "CLEAR-SKY SHORTWAVE SURFACE DOWNWARD DIRECT NORMAL IRRADIANCE"
state real ts_swdown2 ?! misc - - - "TS_SWDOWN2" "DOWNWARD SHORT WAVE FLUX AT GROUND SURFACE FROM FARMS"
state real ts_swddni2 ?! misc - - - "TS_SWDDNI2" "SHORTWAVE SURFACE DOWNWARD DIRECT NORMAL IRRADIANCE FROM FARMS"
state real ts_swddif2 ?! misc - - - "TS_SWDDIF2" "SHORTWAVE SURFACE DOWNWARD DIFFUSE IRRADIANCE FROM FARMS"
state real ts_swdownc2 ?! misc - - - "TS_SWDOWNC2" "DOWNWARD CLEAR-SKY SHORTWAVE FLUX AT GROUND SURFACE FROM FARMS"
state real ts_swddnic2 ?! misc - - - "TS_SWDDNIC2" "CLEAR-SKY SHORTWAVE SURFACE DOWNWARD DIRECT NORMAL IRRADIANCE FROM FARMS"

# Package declarations

Expand Down
188 changes: 118 additions & 70 deletions phys/module_diag_solar.F
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ MODULE module_diag_solar
! !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

SUBROUTINE solar_diag (rho, dz8w, ph, phb, cldfrac3d, coszen, swdnb, swdnt, qv, qc, qi, qs, &
SUBROUTINE solar_diag (rho, dz8w, ph, phb, cldfrac3d, coszen, swdnb, swdnt, &
param_first_scalar, p_qc, p_qi, p_qs, qv, qc, qi, qs, &
qc_tot, qi_tot, has_reqc, has_reqi, has_reqs, f_qv, f_qc, f_qi, f_qs, &
re_cloud, re_ice, re_snow, clrnidx, sza, cldfrac2d, wvp2d, lwp2d, iwp2d, swp2d, &
wp2d_sum, lwp2d_tot, iwp2d_tot, wp2d_tot_sum, re_cloud_path, re_ice_path, re_snow_path, &
Expand All @@ -45,7 +46,7 @@ SUBROUTINE solar_diag (rho, dz8w, ph, phb, cldfrac3d, coszen, swdnb, swdnt, qv,
REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN) :: coszen, swdnb, swdnt
REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN) :: ph, phb, cldfrac3d, qv, qc, qi, qs, qc_tot, qi_tot, &
re_cloud, re_ice, re_snow, rho, dz8w
INTEGER, INTENT(IN) :: has_reqc, has_reqi, has_reqs
INTEGER, INTENT(IN) :: param_first_scalar, p_qc, p_qi, p_qs, has_reqc, has_reqi, has_reqs
LOGICAL, INTENT(IN) :: f_qv, f_qc, f_qi, f_qs
REAL, DIMENSION(ims:ime, jms:jme), INTENT(OUT) :: clrnidx, sza, cldfrac2d, wvp2d, lwp2d, iwp2d, swp2d, wp2d_sum, &
lwp2d_tot, iwp2d_tot, wp2d_tot_sum, re_cloud_path, re_ice_path, re_snow_path, re_cloud_path_tot, re_ice_path_tot, &
Expand Down Expand Up @@ -101,9 +102,9 @@ SUBROUTINE solar_diag (rho, dz8w, ph, phb, cldfrac3d, coszen, swdnb, swdnt, qv,
end if

!!! LIQUID WATER
if (f_qc) then
if (f_qc .and. p_qc > param_first_scalar) then
!!! RESOLVED !!!
! Calc liquid water pth
! Calc liquid water path
q_aux = integrate_1var (rhodz, qc(i, :, j), kms, kme, kts, kte)
lwp = q_aux
lwp2d(i, j) = SIGN( MAX( lwp, 0.0 ), 1.0 )
Expand All @@ -124,9 +125,6 @@ SUBROUTINE solar_diag (rho, dz8w, ph, phb, cldfrac3d, coszen, swdnb, swdnt, qv,
else
tau_qc(i, j) = 0.0
end if
else
re_cloud_path(i, j) = MISSING
tau_qc(i, j) = MISSING
end if

!!! TOTAL (RESOLVED + UNRESOLVED) !!!
Expand All @@ -151,14 +149,18 @@ SUBROUTINE solar_diag (rho, dz8w, ph, phb, cldfrac3d, coszen, swdnb, swdnt, qv,
else
tau_qc_tot(i, j) = 0.0
end if
else
re_cloud_path_tot(i, j) = MISSING
tau_qc_tot(i, j) = MISSING
end if
else
lwp2d(i, j) = MISSING
re_cloud_path(i, j) = MISSING
tau_qc(i, j) = MISSING
lwp2d_tot(i, j) = MISSING
re_cloud_path_tot(i, j) = MISSING
tau_qc_tot(i, j) = MISSING
end if

!!! ICE
if (f_qi) then
if (f_qi .and. p_qi > param_first_scalar) then
!!! RESOLVED !!!
! Calc ice water path
q_aux = integrate_1var (rhodz, qi(i, :, j), kms, kme, kts, kte)
Expand Down Expand Up @@ -186,9 +188,6 @@ SUBROUTINE solar_diag (rho, dz8w, ph, phb, cldfrac3d, coszen, swdnb, swdnt, qv,
else
tau_qi(i, j) = 0.0
end if
else
re_ice_path(i, j) = MISSING
tau_qi(i, j) = MISSING
end if

!!! TOTAL (RESOLVED + UNRESOLVED) !!!
Expand Down Expand Up @@ -218,14 +217,18 @@ SUBROUTINE solar_diag (rho, dz8w, ph, phb, cldfrac3d, coszen, swdnb, swdnt, qv,
else
tau_qi_tot(i, j) = 0.0
end if
else
re_ice_path_tot(i, j) = MISSING
tau_qi_tot(i, j) = MISSING
end if
else
iwp2d(i, j) = MISSING
re_ice_path(i, j) = MISSING
tau_qi(i, j) = MISSING
iwp2d_tot(i, j) = MISSING
re_ice_path_tot(i, j) = MISSING
tau_qi_tot(i, j) = MISSING
end if

!!! SNOW
if (f_qs) then
if (f_qs .and. p_qs > param_first_scalar) then
!!! RESOLVED !!!
! Calc effective radius snow
q_aux = integrate_1var (rhodz, qs(i, :, j), kms, kme, kts, kte)
Expand All @@ -252,78 +255,123 @@ SUBROUTINE solar_diag (rho, dz8w, ph, phb, cldfrac3d, coszen, swdnb, swdnt, qv,
else
tau_qs(i, j) = 0.0
end if
else
re_snow_path(i, j) = MISSING
tau_qs(i, j) = MISSING
end if
else
swp2d(i, j) = MISSING
re_snow_path(i, j) = MISSING
tau_qs(i, j) = MISSING
end if

if (f_qc .or. f_qi .or. f_qs) then
if ( (f_qc .or. f_qi .or. f_qs) .and. &
(p_qc > param_first_scalar .or. &
p_qi > param_first_scalar .or. &
p_qs > param_first_scalar) ) then
!!! RESOLVED !!!
! Sum water paths (cloud liquid + ice + snow)
wp2d_sum(i, j) = lwp2d(i, j) + iwp2d(i, j) + swp2d(i, j)
wp2d_sum(i, j) = MAX( lwp2d(i, j), 0.0 ) + MAX( iwp2d(i, j), 0.0 ) + MAX( swp2d(i, j), 0.0 )

!!! CLOUD BASE & TOP HEIGHTS
! Cloud base first
k = kts
wc = qc(i, k, j) + qi(i, k, j) + qs(i, k, j)
do while ( (wc < WC_MIN) .and. (k < kte) )
k = k + 1
wc = qc(i, k, j) + qi(i, k, j) + qs(i, k, j)
end do

if (k == kte) then
cbase(i, j) = MISSING
else
cbase(i, j) = ( (ph(i, k, j) + phb(i, k, j)) + (ph(i, k + 1, j) + phb(i, k + 1, j)) ) / (2.0 * G)
end if

! Cloud top second
k = kte
wc = qc(i, k, j) + qi(i, k, j) + qs(i, k, j)
do while ( (wc < WC_MIN) .and. (k > kts) )
k = k - 1
wc = qc(i, k, j) + qi(i, k, j) + qs(i, k, j)
end do
if (wp2d_sum(i, j) > Q_MIN) then
k = kts
wc = 0.0
if (f_qc .and. p_qc > param_first_scalar) wc = wc + qc(i, k, j)
if (f_qi .and. p_qi > param_first_scalar) wc = wc + qi(i, k, j)
if (f_qs .and. p_qs > param_first_scalar) wc = wc + qs(i, k, j)
do while ( (wc < WC_MIN) .and. (k < kte) )
k = k + 1
wc = 0.0
if (f_qc .and. p_qc > param_first_scalar) wc = wc + qc(i, k, j)
if (f_qi .and. p_qi > param_first_scalar) wc = wc + qi(i, k, j)
if (f_qs .and. p_qs > param_first_scalar) wc = wc + qs(i, k, j)
end do

if (k == kte) then
cbase(i, j) = MISSING
else
cbase(i, j) = ( (ph(i, k, j) + phb(i, k, j)) + (ph(i, k + 1, j) + phb(i, k + 1, j)) ) / (2.0 * G)
end if

if (k == kts) then
ctop(i, j) = MISSING
! Cloud top second
k = kte
wc = 0.0
if (f_qc .and. p_qc > param_first_scalar) wc = wc + qc(i, k, j)
if (f_qi .and. p_qi > param_first_scalar) wc = wc + qi(i, k, j)
if (f_qs .and. p_qs > param_first_scalar) wc = wc + qs(i, k, j)
do while ( (wc < WC_MIN) .and. (k > kts) )
k = k - 1
wc = 0.0
if (f_qc .and. p_qc > param_first_scalar) wc = wc + qc(i, k, j)
if (f_qi .and. p_qi > param_first_scalar) wc = wc + qi(i, k, j)
if (f_qs .and. p_qs > param_first_scalar) wc = wc + qs(i, k, j)
end do

if (k == kts) then
ctop(i, j) = MISSING
else
ctop(i, j) = ( (ph(i, k, j) + phb(i, k, j)) + (ph(i, k + 1, j) + phb(i, k + 1, j)) ) / (2.0 * G)
end if
else
ctop(i, j) = ( (ph(i, k, j) + phb(i, k, j)) + (ph(i, k + 1, j) + phb(i, k + 1, j)) ) / (2.0 * G)
cbase(i, j) = MISSING
ctop(i, j) = MISSING
end if

!!! TOTAL (RESOLVED + UNRESOLVED) !!!
! Sum water paths (cloud liquid + ice + snow)
! Note that snow is from resolved only
wp2d_tot_sum(i, j) = lwp2d_tot(i, j) + iwp2d_tot(i, j) + swp2d(i, j)
wp2d_tot_sum(i, j) = MAX( lwp2d_tot(i, j), 0.0 ) + MAX( iwp2d_tot(i, j), 0.0 ) + MAX( swp2d(i, j), 0.0 )

! Cloud base first
k = kts
wc = qc_tot(i, k, j) + qi_tot(i, k, j) + qs(i, k, j)
do while ( (wc < WC_MIN) .and. (k < kte) )
k = k + 1
wc = qc_tot(i, k, j) + qi_tot(i, k, j) + qs(i, k, j)
end do

if (k == kte) then
cbase_tot(i, j) = MISSING
else
cbase_tot(i, j) = ( (ph(i, k, j) + phb(i, k, j)) + (ph(i, k + 1, j) + phb(i, k + 1, j)) ) / (2.0 * G)
end if

! Cloud top second
k = kte
wc = qc_tot(i, k, j) + qi_tot(i, k, j) + qs(i, k, j)
do while ( (wc < WC_MIN) .and. (k > kts) )
k = k - 1
wc = qc_tot(i, k, j) + qi_tot(i, k, j) + qs(i, k, j)
end do
if (wp2d_tot_sum(i, j) > Q_MIN) then
k = kts
wc = 0.0
if (f_qc .and. p_qc > param_first_scalar) wc = wc + qc_tot(i, k, j)
if (f_qi .and. p_qi > param_first_scalar) wc = wc + qi_tot(i, k, j)
if (f_qs .and. p_qs > param_first_scalar) wc = wc + qs(i, k, j)
do while ( (wc < WC_MIN) .and. (k < kte) )
k = k + 1
wc = 0.0
if (f_qc .and. p_qc > param_first_scalar) wc = wc + qc_tot(i, k, j)
if (f_qi .and. p_qi > param_first_scalar) wc = wc + qi_tot(i, k, j)
if (f_qs .and. p_qs > param_first_scalar) wc = wc + qs(i, k, j)
end do

if (k == kte) then
cbase_tot(i, j) = MISSING
else
cbase_tot(i, j) = ( (ph(i, k, j) + phb(i, k, j)) + (ph(i, k + 1, j) + phb(i, k + 1, j)) ) / (2.0 * G)
end if

if (k == kts) then
ctop_tot(i, j) = MISSING
! Cloud top second
k = kte
wc = 0.0
if (f_qc .and. p_qc > param_first_scalar) wc = wc + qc_tot(i, k, j)
if (f_qi .and. p_qi > param_first_scalar) wc = wc + qi_tot(i, k, j)
if (f_qs .and. p_qs > param_first_scalar) wc = wc + qs(i, k, j)
do while ( (wc < WC_MIN) .and. (k > kts) )
k = k - 1
wc = 0.0
if (f_qc .and. p_qc > param_first_scalar) wc = wc + qc_tot(i, k, j)
if (f_qi .and. p_qi > param_first_scalar) wc = wc + qi_tot(i, k, j)
if (f_qs .and. p_qs > param_first_scalar) wc = wc + qs(i, k, j)
end do

if (k == kts) then
ctop_tot(i, j) = MISSING
else
ctop_tot(i, j) = ( (ph(i, k, j) + phb(i, k, j)) + (ph(i, k + 1, j) + phb(i, k + 1, j)) ) / (2.0 * G)
end if
else
ctop_tot(i, j) = ( (ph(i, k, j) + phb(i, k, j)) + (ph(i, k + 1, j) + phb(i, k + 1, j)) ) / (2.0 * G)
cbase_tot(i, j) = MISSING
ctop_tot(i, j) = MISSING
end if
else
wp2d_sum(i, j) = MISSING
cbase(i, j) = MISSING
ctop(i, j) = MISSING
wp2d_tot_sum(i, j) = MISSING
cbase_tot(i, j) = MISSING
ctop_tot(i, j) = MISSING
end if

ENDDO
Expand Down
4 changes: 3 additions & 1 deletion phys/module_diagnostics_driver.F
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ SUBROUTINE diagnostics_driver ( grid, config_flags, &
SKIP_PRESS_DIAGS, SKIP_Z_DIAGS, &
DO_TRAD_FIELDS, &
DO_SOLAR_OUTPUT, &
PARAM_FIRST_SCALAR, &
P_QG, P_QH, P_QV, P_QC, P_QI, P_QS, &
P_QNG, P_QH, P_QNH, P_QR, P_QNR, &
F_QV, F_QC, F_QI, F_QS, &
Expand Down Expand Up @@ -1084,7 +1085,8 @@ SUBROUTINE diagnostics_driver ( grid, config_flags, &
CALL solar_diag ( &
rho=grid%rho, dz8w=dz8w, ph=grid%ph_2, phb=grid%phb, &
cldfrac3d=grid%cldfra, coszen=grid%coszen, swdnb=grid%swdnb, &
swdnt=grid%swdnt, qv=moist(ims,kms,jms,P_QV), &
swdnt=grid%swdnt, param_first_scalar=param_first_scalar, &
p_qc=p_qc, p_qi=p_qi, p_qs=p_qs, qv=moist(ims,kms,jms,P_QV), &
qc=moist(ims,kms,jms,P_QC), qi=moist(ims,kms,jms,P_QI), &
qs=moist(ims,kms,jms,P_QS), qc_tot=grid%qc_tot, &
qi_tot=grid%qi_tot, &
Expand Down
1 change: 1 addition & 0 deletions phys/module_radiation_driver.F
Original file line number Diff line number Diff line change
Expand Up @@ -3247,6 +3247,7 @@ SUBROUTINE calc_coszen(ims,ime,jms,jme,its,ite,jts,jte, &
xxlat=xlat(i,j)*degrad
coszen(i,j)=sin(xxlat)*sin(declin) &
+cos(xxlat)*cos(declin) *cos(hrang(i,j))
coszen(i, j) = min (max (coszen(i, j), -1.0), 1.0)
enddo
enddo
END SUBROUTINE calc_coszen
Expand Down
10 changes: 10 additions & 0 deletions run/README.tslist
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,16 @@ cbaseht_tot: CLOUD BASE HEIGHT RES + UNRES (m)
ctopht_tot: CLOUD TOP HEIGHT RES + UNRES (m)
clrnidx: CLEARNESS INDEX ()
sza: SOLAR ZENITH ANGLE (deg)
swdown: DOWNWARD SHORT WAVE FLUX AT GROUND SURFACE (W m-2)
swddni: SHORTWAVE SURFACE DOWNWARD DIRECT NORMAL IRRADIANCE (W m-2)
swddif: SHORTWAVE SURFACE DOWNWARD DIFFUSE IRRADIANCE (W m-2)
swdownc: DOWNWARD CLEAR-SKY SHORTWAVE FLUX AT GROUND SURFACE (W m-2)
swddnic: CLEAR-SKY SHORTWAVE SURFACE DOWNWARD DIRECT NORMAL IRRADIANCE (W m-2)
swdown2: DOWNWARD SHORT WAVE FLUX AT GROUND SURFACE FROM FARMS (W m-2)
swddni2: SHORTWAVE SURFACE DOWNWARD DIRECT NORMAL IRRADIANCE FROM FARMS (W m-2)
swddif2: SHORTWAVE SURFACE DOWNWARD DIFFUSE IRRADIANCE FROM FARMS (W m-2)
swdownc2: DOWNWARD CLEAR-SKY SHORTWAVE FLUX AT GROUND SURFACE FROM FARMS (W m-2)
swddnic2: CLEAR-SKY SHORTWAVE SURFACE DOWNWARD DIRECT NORMAL IRRADIANCE FROM FARMS (W m-2)


Format of the files of vertical profile:
Expand Down
Loading