diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 869dff658c..9e7202afed 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -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" diff --git a/Registry/registry.solar_fields b/Registry/registry.solar_fields index 6cd55e6ba6..2855d4642b 100644 --- a/Registry/registry.solar_fields +++ b/Registry/registry.solar_fields @@ -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 diff --git a/phys/module_diag_solar.F b/phys/module_diag_solar.F index 919e5bab14..4461aefa54 100644 --- a/phys/module_diag_solar.F +++ b/phys/module_diag_solar.F @@ -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, & @@ -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, & @@ -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 ) @@ -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) !!! @@ -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) @@ -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) !!! @@ -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) @@ -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 diff --git a/phys/module_diagnostics_driver.F b/phys/module_diagnostics_driver.F index 5b10eac981..9b45e20d70 100644 --- a/phys/module_diagnostics_driver.F +++ b/phys/module_diagnostics_driver.F @@ -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, & @@ -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, & diff --git a/phys/module_radiation_driver.F b/phys/module_radiation_driver.F index b8a6b06820..e98d80f3f2 100644 --- a/phys/module_radiation_driver.F +++ b/phys/module_radiation_driver.F @@ -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 diff --git a/run/README.tslist b/run/README.tslist index e65e46ad7c..1e912e6f5c 100644 --- a/run/README.tslist +++ b/run/README.tslist @@ -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: diff --git a/share/wrf_timeseries.F b/share/wrf_timeseries.F index c40e38a7f6..226a070284 100644 --- a/share/wrf_timeseries.F +++ b/share/wrf_timeseries.F @@ -351,6 +351,7 @@ SUBROUTINE calc_ts( grid ) INTEGER :: i, k, mm, n, ix, iy, rc REAL :: earth_u, earth_v, & output_t, output_q, clw, xtime_minutes + REAL, PARAMETER :: MISSING = -999.0 REAL, ALLOCATABLE, DIMENSION(:) :: p8w REAL, ALLOCATABLE, DIMENSION(:) :: earth_u_profile, earth_v_profile TYPE (grid_config_rec_type) :: config_flags @@ -516,6 +517,37 @@ SUBROUTINE calc_ts( grid ) grid%ts_ctopht_tot(n,i) = grid%ctopht_tot(ix,iy) grid%ts_clrnidx(n,i) = grid%clrnidx(ix,iy) grid%ts_sza(n,i) = grid%sza(ix,iy) + grid%ts_swdown(n,i) = grid%swdown(ix,iy) + grid%ts_swddni(n,i) = grid%swddni(ix,iy) + grid%ts_swddif(n,i) = grid%swddif(ix,iy) + ! Calc extra solar variables if FARMS or RRTMG/RRTMG FAST + if ( config_flags%swint_opt == 2 .or. & + config_flags%ra_sw_physics == RRTMG_SWSCHEME .or. & + config_flags%ra_sw_physics == RRTMG_SWSCHEME_FAST ) then + grid%ts_swdownc(n,i) = grid%swdownc(ix,iy) + grid%ts_swddnic(n,i) = grid%swddnic(ix,iy) + if ( config_flags%swint_opt == 2 ) then ! FARMS + grid%ts_swdown2(n,i) = grid%swdown2(ix,iy) + grid%ts_swddni2(n,i) = grid%swddni2(ix,iy) + grid%ts_swddif2(n,i) = grid%swddif2(ix,iy) + grid%ts_swdownc2(n,i) = grid%swdownc2(ix,iy) + grid%ts_swddnic2(n,i) = grid%swddnic2(ix,iy) + else + grid%ts_swdown2(n,i) = MISSING + grid%ts_swddni2(n,i) = MISSING + grid%ts_swddif2(n,i) = MISSING + grid%ts_swdownc2(n,i) = MISSING + grid%ts_swddnic2(n,i) = MISSING + end if + else + grid%ts_swdownc(n,i) = MISSING + grid%ts_swddnic(n,i) = MISSING + grid%ts_swdown2(n,i) = MISSING + grid%ts_swddni2(n,i) = MISSING + grid%ts_swddif2(n,i) = MISSING + grid%ts_swdownc2(n,i) = MISSING + grid%ts_swddnic2(n,i) = MISSING + end if END IF #else grid%ts_tsk(n,i) = grid%nmm_tsk(ix,iy) @@ -580,6 +612,16 @@ SUBROUTINE calc_ts( grid ) grid%ts_ctopht_tot(n,i) = 1.E30 grid%ts_clrnidx(n,i) = 1.E30 grid%ts_sza(n,i) = 1.E30 + grid%ts_swdown(n,i) = 1.E30 + grid%ts_swddni(n,i) = 1.E30 + grid%ts_swddif(n,i) = 1.E30 + grid%ts_swdownc(n,i) = 1.E30 + grid%ts_swddnic(n,i) = 1.E30 + grid%ts_swdown2(n,i) = 1.E30 + grid%ts_swddni2(n,i) = 1.E30 + grid%ts_swddif2(n,i) = 1.E30 + grid%ts_swdownc2(n,i) = 1.E30 + grid%ts_swddnic2(n,i) = 1.E30 END IF #endif grid%ts_tsk(n,i) = 1.E30 @@ -787,6 +829,36 @@ SUBROUTINE write_ts( grid ) ts_buf(:,:) = grid%ts_sza(:,:) CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_sza(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swdown(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swdown(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swddni(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swddni(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swddif(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swddif(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swdownc(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swdownc(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swddnic(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swddnic(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swdown2(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swdown2(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swddni2(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swddni2(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swddif2(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swddif2(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swdownc2(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swdownc2(:,:),grid%ts_buf_size*grid%max_ts_locs) + + ts_buf(:,:) = grid%ts_swddnic2(:,:) + CALL wrf_dm_min_reals(ts_buf(:,:),grid%ts_swddnic2(:,:),grid%ts_buf_size*grid%max_ts_locs) END IF #endif @@ -836,7 +908,7 @@ SUBROUTINE write_ts( grid ) grid%ts_clw(n,i) ELSE !!! WRF-Solar diagnostics - WRITE(UNIT=iunit,FMT='(i2,f13.6,i5,i5,i5,1x,39(f13.5,1x))') & + WRITE(UNIT=iunit,FMT='(i2,f13.6,i5,i5,i5,1x,49(f13.5,1x))') & grid%id, grid%ts_hour(n,i), & grid%id_tsloc(i), ix, iy, & grid%ts_t(n,i), & @@ -877,7 +949,17 @@ SUBROUTINE write_ts( grid ) grid%ts_cbaseht_tot(n,i), & grid%ts_ctopht_tot(n,i), & grid%ts_clrnidx(n,i), & - grid%ts_sza(n,i) + grid%ts_sza(n,i), & + grid%ts_swdown(n,i), & + grid%ts_swddni(n,i), & + grid%ts_swddif(n,i), & + grid%ts_swdownc(n,i), & + grid%ts_swddnic(n,i), & + grid%ts_swdown2(n,i), & + grid%ts_swddni2(n,i), & + grid%ts_swddif2(n,i), & + grid%ts_swdownc2(n,i), & + grid%ts_swddnic2(n,i) END IF #else WRITE(UNIT=iunit,FMT='(i2,f13.6,i5,i5,i5,1x,7(f13.5,1x))') &