From 415e68db8f1e164f0548fb728e7f4abb4bba6237 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Thu, 11 Aug 2022 00:21:36 -0600 Subject: [PATCH 01/25] initial work for land coupling --- physics/GFS_MP_generic_post.F90 | 6 +++--- physics/GFS_MP_generic_post.meta | 7 +++++++ physics/GFS_stochastics.F90 | 14 ++++++++++---- physics/GFS_stochastics.meta | 7 +++++++ physics/GFS_surface_generic_post.F90 | 13 +++++++++---- physics/GFS_surface_generic_post.meta | 7 +++++++ 6 files changed, 43 insertions(+), 11 deletions(-) diff --git a/physics/GFS_MP_generic_post.F90 b/physics/GFS_MP_generic_post.F90 index 0940ab7b6..92795de62 100644 --- a/physics/GFS_MP_generic_post.F90 +++ b/physics/GFS_MP_generic_post.F90 @@ -20,7 +20,7 @@ module GFS_MP_generic_post !> @{ subroutine GFS_MP_generic_post_run( & im, levs, kdt, nrcm, nncl, ntcw, ntrac, imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_nssl, & - imp_physics_mg, imp_physics_fer_hires, cal_pre, cplflx, cplchm, progsigma, con_g, rainmin, dtf, frain, rainc, & + imp_physics_mg, imp_physics_fer_hires, cal_pre, cplflx, cplchm, cpllnd, progsigma, con_g, rainmin, dtf, frain, rainc, & rain1, rann, xlat, xlon, gt0, gq0, prsl, prsi, phii, tsfc, ice, snow, graupel, save_t, save_q, rain0, ice0, snow0,& graupel0, del, rain, domr_diag, domzr_diag, domip_diag, doms_diag, tprcp, srflag, sr, cnvprcp, totprcp, totice, & totsnw, totgrp, cnvprcpb, totprcpb, toticeb, totsnwb, totgrpb, rain_cpl, rainc_cpl, snow_cpl, pwat, & @@ -37,7 +37,7 @@ subroutine GFS_MP_generic_post_run( integer, intent(in) :: im, levs, kdt, nrcm, nncl, ntcw, ntrac, num_dfi_radar, index_of_process_dfi_radar integer, intent(in) :: imp_physics, imp_physics_gfdl, imp_physics_thompson, imp_physics_mg, imp_physics_fer_hires integer, intent(in) :: imp_physics_nssl - logical, intent(in) :: cal_pre, lssav, ldiag3d, qdiag3d, cplflx, cplchm, progsigma + logical, intent(in) :: cal_pre, lssav, ldiag3d, qdiag3d, cplflx, cplchm, cpllnd, progsigma integer, intent(in) :: index_of_temperature,index_of_process_mp integer :: dfi_radar_max_intervals @@ -363,7 +363,7 @@ subroutine GFS_MP_generic_post_run( enddo endif - if (cplflx .or. cplchm) then + if (cplflx .or. cplchm .or. cpllnd) then do i = 1, im dsnow_cpl(i)= max(zero, rain(i) * srflag(i)) drain_cpl(i)= max(zero, rain(i) - dsnow_cpl(i)) diff --git a/physics/GFS_MP_generic_post.meta b/physics/GFS_MP_generic_post.meta index 7ba09363a..5216b7157 100644 --- a/physics/GFS_MP_generic_post.meta +++ b/physics/GFS_MP_generic_post.meta @@ -128,6 +128,13 @@ dimensions = () type = logical intent = in +[cpllnd] + standard_name = flag_for_land_coupling + long_name = flag controlling cpllnd collection (default off) + units = flag + dimensions = () + type = logical + intent = in [progsigma] standard_name = do_prognostic_updraft_area_fraction long_name = flag for prognostic sigma in cumulus scheme diff --git a/physics/GFS_stochastics.F90 b/physics/GFS_stochastics.F90 index 30ca67cd5..daf68ca86 100644 --- a/physics/GFS_stochastics.F90 +++ b/physics/GFS_stochastics.F90 @@ -69,7 +69,7 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc gu0, gv0, gt0, gq0_wv, dtdtnp, & gq0_cw, gq0_rw, gq0_sw, gq0_iw, gq0_gl, & rain, rainc, tprcp, totprcp, cnvprcp, & - totprcpb, cnvprcpb, cplflx, & + totprcpb, cnvprcpb, cplflx, cpllnd, & rain_cpl, snow_cpl, drain_cpl, dsnow_cpl, & ntcw,ntrw,ntsw,ntiw,ntgl, & errmsg, errflg) @@ -130,8 +130,10 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc real(kind_phys), dimension(:), intent(inout) :: totprcpb real(kind_phys), dimension(:), intent(inout) :: cnvprcpb logical, intent(in) :: cplflx - ! rain_cpl, snow_cpl only allocated if cplflx == .true. or cplchm == .true. + logical, intent(in) :: cpllnd + ! rain_cpl only allocated if cplflx == .true. or cplchm == .true. or cpllnd == .true. real(kind_phys), dimension(:), intent(inout) :: rain_cpl + ! snow_cpl only allocated if cplflx == .true. or cplchm == .true. real(kind_phys), dimension(:), intent(inout) :: snow_cpl ! drain_cpl, dsnow_cpl only allocated if cplflx == .true. or cplchm == .true. real(kind_phys), dimension(:), intent(in) :: drain_cpl @@ -242,8 +244,10 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc totprcpb(:) = totprcpb(:) + (sppt_wts(:,15) - 1 )*rain(:) cnvprcpb(:) = cnvprcpb(:) + (sppt_wts(:,15) - 1 )*rainc(:) - if (cplflx) then + if (cplflx .or. cpllnd) then rain_cpl(:) = rain_cpl(:) + (sppt_wts(:,15) - 1.0)*drain_cpl(:) + endif + if (cplflx) then snow_cpl(:) = snow_cpl(:) + (sppt_wts(:,15) - 1.0)*dsnow_cpl(:) endif !zero out radiative heating tendency for next physics step @@ -344,8 +348,10 @@ subroutine GFS_stochastics_run (im, km, kdt, delt, do_sppt, pert_mp, use_zmtnblc totprcpb(:) = totprcpb(:) + (ca(:,15) - 1 )*rain(:) cnvprcpb(:) = cnvprcpb(:) + (ca(:,15) - 1 )*rainc(:) - if (cplflx) then + if (cplflx .or. cpllnd) then rain_cpl(:) = rain_cpl(:) + (ca(:,15) - 1.0)*drain_cpl(:) + endif + if (cplflx) then snow_cpl(:) = snow_cpl(:) + (ca(:,15) - 1.0)*dsnow_cpl(:) endif !zero out radiative heating tendency for next physics step diff --git a/physics/GFS_stochastics.meta b/physics/GFS_stochastics.meta index bf1c3fb25..796f4ddf7 100644 --- a/physics/GFS_stochastics.meta +++ b/physics/GFS_stochastics.meta @@ -419,6 +419,13 @@ dimensions = () type = logical intent = in +[cpllnd] + standard_name = flag_for_land_coupling + long_name = flag controlling cpllnd collection (default off) + units = flag + dimensions = () + type = logical + intent = in [rain_cpl] standard_name = cumulative_lwe_thickness_of_precipitation_amount_for_coupling long_name = total rain precipitation diff --git a/physics/GFS_surface_generic_post.F90 b/physics/GFS_surface_generic_post.F90 index eba164c78..9522e422d 100644 --- a/physics/GFS_surface_generic_post.F90 +++ b/physics/GFS_surface_generic_post.F90 @@ -41,7 +41,7 @@ end subroutine GFS_surface_generic_post_init !> \section arg_table_GFS_surface_generic_post_run Argument Table !! \htmlinclude GFS_surface_generic_post_run.html !! - subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, lssav, dry, icy, wet, & + subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpllnd, lssav, dry, icy, wet, & lsm, lsm_noahmp, dtf, ep1d, gflx, tgrs_1, qgrs_1, ugrs_1, vgrs_1, & adjsfcdlw, adjsfcdsw, adjnirbmd, adjnirdfd, adjvisbmd, adjvisdfd, adjsfculw, adjsfculw_wat, adjnirbmu, adjnirdfu, & adjvisbmu, adjvisdfu, t2m, q2m, u10m, v10m, tsfc, tsfc_wat, pgr, xcosz, evbs, evcw, trans, sbsno, snowc, snohf, pah, pahi, & @@ -55,7 +55,7 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, lss implicit none integer, intent(in) :: im - logical, intent(in) :: cplflx, cplaqm, cplchm, cplwav, lssav + logical, intent(in) :: cplflx, cplaqm, cplchm, cplwav, cpllnd, lssav logical, dimension(:), intent(in) :: dry, icy, wet integer, intent(in) :: lsm, lsm_noahmp real(kind=kind_phys), intent(in) :: dtf @@ -124,12 +124,17 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, lss enddo endif + if (cplflx .or. cpllnd) then + do i=1,im + dlwsfc_cpl (i) = dlwsfc_cpl(i) + adjsfcdlw(i)*dtf + dswsfc_cpl (i) = dswsfc_cpl(i) + adjsfcdsw(i)*dtf + enddo + endif + if (cplflx) then do i=1,im dlwsfci_cpl (i) = adjsfcdlw(i) dswsfci_cpl (i) = adjsfcdsw(i) - dlwsfc_cpl (i) = dlwsfc_cpl(i) + adjsfcdlw(i)*dtf - dswsfc_cpl (i) = dswsfc_cpl(i) + adjsfcdsw(i)*dtf dnirbmi_cpl (i) = adjnirbmd(i) dnirdfi_cpl (i) = adjnirdfd(i) dvisbmi_cpl (i) = adjvisbmd(i) diff --git a/physics/GFS_surface_generic_post.meta b/physics/GFS_surface_generic_post.meta index 033ec1cbf..aeb5c9754 100644 --- a/physics/GFS_surface_generic_post.meta +++ b/physics/GFS_surface_generic_post.meta @@ -105,6 +105,13 @@ dimensions = () type = logical intent = in +[cpllnd] + standard_name = flag_for_land_coupling + long_name = flag controlling cpllnd collection (default off) + units = flag + dimensions = () + type = logical + intent = in [lssav] standard_name = flag_for_diagnostics long_name = logical flag for storing diagnostics From 58d6ad65f484de4460525aae3e2e7bb6b4ea42c8 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Thu, 18 Aug 2022 16:24:48 -0600 Subject: [PATCH 02/25] fix surface pressure issue for land coupling --- physics/GFS_surface_generic_post.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/GFS_surface_generic_post.F90 b/physics/GFS_surface_generic_post.F90 index 9522e422d..ee4f3da12 100644 --- a/physics/GFS_surface_generic_post.F90 +++ b/physics/GFS_surface_generic_post.F90 @@ -128,6 +128,7 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl do i=1,im dlwsfc_cpl (i) = dlwsfc_cpl(i) + adjsfcdlw(i)*dtf dswsfc_cpl (i) = dswsfc_cpl(i) + adjsfcdsw(i)*dtf + psurfi_cpl (i) = pgr(i) enddo endif @@ -150,7 +151,6 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl nlwsfc_cpl (i) = nlwsfc_cpl(i) + nlwsfci_cpl(i)*dtf t2mi_cpl (i) = t2m(i) q2mi_cpl (i) = q2m(i) - psurfi_cpl (i) = pgr(i) enddo ! --- estimate mean albedo for ocean point without ice cover and apply From 732c0672669646f37b53cd6693c3877b4337cdd0 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Thu, 1 Sep 2022 14:12:24 -0600 Subject: [PATCH 03/25] make precip and skin temperature available for land coupling --- physics/GFS_MP_generic_post.F90 | 2 +- physics/GFS_surface_generic_post.F90 | 4 +- physics/noahmpdrv.F90 | 100 ++++++++++++++++++++++++++- physics/noahmpdrv.meta | 15 ++++ physics/sfc_diff.f | 26 ++++++- physics/sfc_diff.meta | 15 ++++ 6 files changed, 157 insertions(+), 5 deletions(-) diff --git a/physics/GFS_MP_generic_post.F90 b/physics/GFS_MP_generic_post.F90 index 92795de62..f99a810c6 100644 --- a/physics/GFS_MP_generic_post.F90 +++ b/physics/GFS_MP_generic_post.F90 @@ -372,7 +372,7 @@ subroutine GFS_MP_generic_post_run( enddo endif - if (cplchm) then + if (cplchm .or. cpllnd) then do i = 1, im rainc_cpl(i) = rainc_cpl(i) + rainc(i) enddo diff --git a/physics/GFS_surface_generic_post.F90 b/physics/GFS_surface_generic_post.F90 index ee4f3da12..f6398eb54 100644 --- a/physics/GFS_surface_generic_post.F90 +++ b/physics/GFS_surface_generic_post.F90 @@ -118,7 +118,7 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl enddo endif - if (cplflx .or. cplchm) then + if (cplflx .or. cplchm .or. cpllnd) then do i=1,im tsfci_cpl(i) = tsfc(i) enddo @@ -152,10 +152,12 @@ subroutine GFS_surface_generic_post_run (im, cplflx, cplaqm, cplchm, cplwav, cpl t2mi_cpl (i) = t2m(i) q2mi_cpl (i) = q2m(i) enddo + endif ! --- estimate mean albedo for ocean point without ice cover and apply ! them to net SW heat fluxes + if (cplflx .or. cpllnd) then do i=1,im ! if (Sfcprop%landfrac(i) < one) then ! Not 100% land if (wet(i)) then ! some open water diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index a4f5b5226..074c8665e 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -166,7 +166,7 @@ subroutine noahmpdrv_run & sncovr1, qsurf, gflux, drain, evap, hflx, ep, runoff, & cmm, chh, evbs, evcw, sbsno, pah, ecan, etran, edir, snowc,& stm, snohf,smcwlt2, smcref2, wet1, t2mmp, q2mp,zvfun, & - errmsg, errflg) + errmsg, errflg, naux2d, aux2d) use machine , only : kind_phys use funcphys, only : fpvs @@ -367,6 +367,8 @@ subroutine noahmpdrv_run & real(kind=kind_phys), dimension(:) , intent(out) :: zvfun ! character(len=*) , intent(out) :: errmsg integer , intent(out) :: errflg + integer, intent(in) :: naux2d + real(kind_phys), intent(inout) :: aux2d(:,:) ! ! --- some new options, hard code for now @@ -605,6 +607,8 @@ subroutine noahmpdrv_run & errmsg = '' errflg = 0 + + do i = 1, im if (flag_iter(i) .and. dry(i)) then @@ -677,7 +681,7 @@ subroutine noahmpdrv_run & co2_air = co2_table * air_pressure_forcing o2_air = o2_table * air_pressure_forcing foliage_nitrogen = 1.0 - + ! ! --- noah-mp inout variables ! @@ -1154,6 +1158,98 @@ subroutine noahmpdrv_run & end do ! im loop + !aux2d(:,1) = ps !weasd + !aux2d(:,2) = u1 !snwdph + !aux2d(:,3) = v1 !tskin + !aux2d(:,4) = t1 !tprcp + !aux2d(:,5) = q1 !srflag + !aux2d(:,6) = soiltyp !canopy + !aux2d(:,7) = vegtype !tsurf + !aux2d(:,8) = sigmaf !zorl + !aux2d(:,9) = dlwflx !rb1 + !aux2d(:,10) = dswsfc !fm1 + !aux2d(:,11) = snet !fh1 + !aux2d(:,12) = tg3 !ustar1 + !aux2d(:,13) = cm !stress1 + !aux2d(:,14) = ch !hflx + !aux2d(:,15) = prsl1 !evap + !aux2d(:,16) = prslk1 !qsurf + !aux2d(:,17) = prslki !cmm + !aux2d(:,18) = prsik1 !chh + !aux2d(:,19) = hflx !zf !t2mmp + !aux2d(:,20) = evap !wind !q2mp + + !aux2d(:,1) = zf + !aux2d(:,2) = pblh + !aux2d(:,3) = snwdph + !aux2d(:,4) = wind + !aux2d(:,5) = slopetyp + !aux2d(:,6) = shdmin + !aux2d(:,7) = shdmax + !aux2d(:,8) = snoalb + !aux2d(:,9) = sfalb + !aux2d(:,10) =xlatin + !aux2d(:,11) =xcoszin + !aux2d(:,12) =garea + !aux2d(:,13) =rainn_mp + !aux2d(:,14) =rainc_mp + !aux2d(:,15) =snow_mp + !aux2d(:,16) =graupel_mp + !aux2d(:,17) =ice_mp + !aux2d(:,18) =weasd + !aux2d(:,19) = hflx + !aux2d(:,20) = evap + + !aux2d(:,1) = tskin + !aux2d(:,2) = tprcp + !aux2d(:,3) = srflag + !aux2d(:,4) = canopy + !aux2d(:,5) = trans + !aux2d(:,6) = tsurf + !aux2d(:,7) = zorl + !aux2d(:,8) = rb1 + !aux2d(:,9) = fm1 + !aux2d(:,10) =fh1 + !aux2d(:,11) =ustar1 + !aux2d(:,12) =stress1 + !aux2d(:,13) =rainn_mp + !aux2d(:,14) =rainc_mp + !aux2d(:,15) =snow_mp + !aux2d(:,16) =graupel_mp + !aux2d(:,17) =ice_mp + !aux2d(:,18) =fm101 + !aux2d(:,19) = hflx + !aux2d(:,20) = evap + + !aux2d(:,13) = rb1 + !aux2d(:,14) = fm1 + !aux2d(:,15) = fh1 + !aux2d(:,16) = fm101 + !aux2d(:,17) = fh21 + !aux2d(:,18) = tsurf + !aux2d(:,19) = tskin + !aux2d(:,20) = stress1 + + aux2d(:,1) = ps + aux2d(:,2) = u1 + aux2d(:,3) = v1 + aux2d(:,4) = t1 + aux2d(:,5) = q1 + aux2d(:,6) = tsurf + aux2d(:,7) = tskin + aux2d(:,8) = rb1 + aux2d(:,9) = fm1 + aux2d(:,10)= fh1 + aux2d(:,11)= ustar1 + aux2d(:,12)= stress1 + aux2d(:,13)= fm101 + aux2d(:,14)= fh21 + aux2d(:,15)= cm + aux2d(:,16)= ch + aux2d(:,17)= prsl1 + aux2d(:,18)= prslk1 + aux2d(:,19) = hflx + aux2d(:,20) = evap return end subroutine noahmpdrv_run diff --git a/physics/noahmpdrv.meta b/physics/noahmpdrv.meta index 9ad9092ec..c53daed8f 100644 --- a/physics/noahmpdrv.meta +++ b/physics/noahmpdrv.meta @@ -1329,3 +1329,18 @@ dimensions = () type = integer intent = out +[naux2d] + standard_name = number_of_xy_dimensioned_auxiliary_arrays + long_name = number of 2d auxiliary arrays to output (for debugging) + units = count + dimensions = () + type = integer + intent = in +[aux2d] + standard_name = auxiliary_2d_arrays + long_name = auxiliary 2d arrays to output (for debugging) + units = none + dimensions = (horizontal_loop_extent,number_of_xy_dimensioned_auxiliary_arrays) + type = real + kind = kind_phys + intent = out diff --git a/physics/sfc_diff.f b/physics/sfc_diff.f index 59c6d2d60..128894725 100644 --- a/physics/sfc_diff.f +++ b/physics/sfc_diff.f @@ -85,7 +85,7 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) & fh2_wat, fh2_lnd, fh2_ice, & !intent(inout) & ztmax_wat, ztmax_lnd, ztmax_ice, & !intent(inout) & zvfun, & !intent(out) - & errmsg, errflg) !intent(out) + & errmsg, errflg,naux2d, aux2d) !intent(out) ! implicit none ! @@ -127,6 +127,8 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) ! character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg + integer, intent(in) :: naux2d + real(kind_phys), intent(inout) :: aux2d(:,:) ! ! locals ! @@ -167,6 +169,16 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) errmsg = '' errflg = 0 + !aux2d(:,1) = ps + !aux2d(:,2) = t1 + !aux2d(:,3) = q1 + !aux2d(:,4) = z1 + !aux2d(:,5) = wind + !aux2d(:,6) = prsl1 + !aux2d(:,7) = prslki + !aux2d(:,8) = prsik1 + !aux2d(:,9) = prslk1 + ! initialize variables. all units are supposedly m.k.s. unless specified ! ps is in pascals, wind is wind speed, ! surface roughness length is converted to m from cm @@ -446,6 +458,18 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) endif ! end of if(flagiter) loop enddo + !aux2d(:,10) = tskin_lnd + !aux2d(:,11) = tsurf_lnd + !aux2d(:,12) = z0rl_lnd + !aux2d(:,13) = ustar_lnd + !aux2d(:,14) = cm_lnd + !aux2d(:,15) = ch_lnd + !aux2d(:,16) = rb_lnd + !aux2d(:,17) = stress_lnd + !aux2d(:,18) = fm_lnd + !aux2d(:,19) = fh_lnd + !aux2d(:,20) = fm10_lnd + return end subroutine sfc_diff_run !> @} diff --git a/physics/sfc_diff.meta b/physics/sfc_diff.meta index a2e1fe9f7..8e2c0153b 100644 --- a/physics/sfc_diff.meta +++ b/physics/sfc_diff.meta @@ -580,3 +580,18 @@ dimensions = () type = integer intent = out +[naux2d] + standard_name = number_of_xy_dimensioned_auxiliary_arrays + long_name = number of 2d auxiliary arrays to output (for debugging) + units = count + dimensions = () + type = integer + intent = in +[aux2d] + standard_name = auxiliary_2d_arrays + long_name = auxiliary 2d arrays to output (for debugging) + units = none + dimensions = (horizontal_loop_extent,number_of_xy_dimensioned_auxiliary_arrays) + type = real + kind = kind_phys + intent = out From 7fdb2173907a126baa71993235caa165370bb3d3 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Tue, 13 Sep 2022 15:35:51 -0600 Subject: [PATCH 04/25] remove aux mods for debug --- physics/noahmpdrv.F90 | 4 +--- physics/noahmpdrv.meta | 15 --------------- physics/sfc_diff.f | 4 +--- physics/sfc_diff.meta | 15 --------------- 4 files changed, 2 insertions(+), 36 deletions(-) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index 074c8665e..9f1bc43dd 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -166,7 +166,7 @@ subroutine noahmpdrv_run & sncovr1, qsurf, gflux, drain, evap, hflx, ep, runoff, & cmm, chh, evbs, evcw, sbsno, pah, ecan, etran, edir, snowc,& stm, snohf,smcwlt2, smcref2, wet1, t2mmp, q2mp,zvfun, & - errmsg, errflg, naux2d, aux2d) + errmsg, errflg) use machine , only : kind_phys use funcphys, only : fpvs @@ -367,8 +367,6 @@ subroutine noahmpdrv_run & real(kind=kind_phys), dimension(:) , intent(out) :: zvfun ! character(len=*) , intent(out) :: errmsg integer , intent(out) :: errflg - integer, intent(in) :: naux2d - real(kind_phys), intent(inout) :: aux2d(:,:) ! ! --- some new options, hard code for now diff --git a/physics/noahmpdrv.meta b/physics/noahmpdrv.meta index c53daed8f..9ad9092ec 100644 --- a/physics/noahmpdrv.meta +++ b/physics/noahmpdrv.meta @@ -1329,18 +1329,3 @@ dimensions = () type = integer intent = out -[naux2d] - standard_name = number_of_xy_dimensioned_auxiliary_arrays - long_name = number of 2d auxiliary arrays to output (for debugging) - units = count - dimensions = () - type = integer - intent = in -[aux2d] - standard_name = auxiliary_2d_arrays - long_name = auxiliary 2d arrays to output (for debugging) - units = none - dimensions = (horizontal_loop_extent,number_of_xy_dimensioned_auxiliary_arrays) - type = real - kind = kind_phys - intent = out diff --git a/physics/sfc_diff.f b/physics/sfc_diff.f index 128894725..473fbf5f1 100644 --- a/physics/sfc_diff.f +++ b/physics/sfc_diff.f @@ -85,7 +85,7 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) & fh2_wat, fh2_lnd, fh2_ice, & !intent(inout) & ztmax_wat, ztmax_lnd, ztmax_ice, & !intent(inout) & zvfun, & !intent(out) - & errmsg, errflg,naux2d, aux2d) !intent(out) + & errmsg, errflg) !intent(out) ! implicit none ! @@ -127,8 +127,6 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) ! character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg - integer, intent(in) :: naux2d - real(kind_phys), intent(inout) :: aux2d(:,:) ! ! locals ! diff --git a/physics/sfc_diff.meta b/physics/sfc_diff.meta index 8e2c0153b..a2e1fe9f7 100644 --- a/physics/sfc_diff.meta +++ b/physics/sfc_diff.meta @@ -580,18 +580,3 @@ dimensions = () type = integer intent = out -[naux2d] - standard_name = number_of_xy_dimensioned_auxiliary_arrays - long_name = number of 2d auxiliary arrays to output (for debugging) - units = count - dimensions = () - type = integer - intent = in -[aux2d] - standard_name = auxiliary_2d_arrays - long_name = auxiliary 2d arrays to output (for debugging) - units = none - dimensions = (horizontal_loop_extent,number_of_xy_dimensioned_auxiliary_arrays) - type = real - kind = kind_phys - intent = out From 988215b012a8e49d65257f89758e23c13d261963 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Tue, 13 Sep 2022 16:01:06 -0600 Subject: [PATCH 05/25] remove more debug code --- physics/noahmpdrv.F90 | 92 ------------------------------------------- 1 file changed, 92 deletions(-) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index 9f1bc43dd..a8b7f59d3 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -1156,98 +1156,6 @@ subroutine noahmpdrv_run & end do ! im loop - !aux2d(:,1) = ps !weasd - !aux2d(:,2) = u1 !snwdph - !aux2d(:,3) = v1 !tskin - !aux2d(:,4) = t1 !tprcp - !aux2d(:,5) = q1 !srflag - !aux2d(:,6) = soiltyp !canopy - !aux2d(:,7) = vegtype !tsurf - !aux2d(:,8) = sigmaf !zorl - !aux2d(:,9) = dlwflx !rb1 - !aux2d(:,10) = dswsfc !fm1 - !aux2d(:,11) = snet !fh1 - !aux2d(:,12) = tg3 !ustar1 - !aux2d(:,13) = cm !stress1 - !aux2d(:,14) = ch !hflx - !aux2d(:,15) = prsl1 !evap - !aux2d(:,16) = prslk1 !qsurf - !aux2d(:,17) = prslki !cmm - !aux2d(:,18) = prsik1 !chh - !aux2d(:,19) = hflx !zf !t2mmp - !aux2d(:,20) = evap !wind !q2mp - - !aux2d(:,1) = zf - !aux2d(:,2) = pblh - !aux2d(:,3) = snwdph - !aux2d(:,4) = wind - !aux2d(:,5) = slopetyp - !aux2d(:,6) = shdmin - !aux2d(:,7) = shdmax - !aux2d(:,8) = snoalb - !aux2d(:,9) = sfalb - !aux2d(:,10) =xlatin - !aux2d(:,11) =xcoszin - !aux2d(:,12) =garea - !aux2d(:,13) =rainn_mp - !aux2d(:,14) =rainc_mp - !aux2d(:,15) =snow_mp - !aux2d(:,16) =graupel_mp - !aux2d(:,17) =ice_mp - !aux2d(:,18) =weasd - !aux2d(:,19) = hflx - !aux2d(:,20) = evap - - !aux2d(:,1) = tskin - !aux2d(:,2) = tprcp - !aux2d(:,3) = srflag - !aux2d(:,4) = canopy - !aux2d(:,5) = trans - !aux2d(:,6) = tsurf - !aux2d(:,7) = zorl - !aux2d(:,8) = rb1 - !aux2d(:,9) = fm1 - !aux2d(:,10) =fh1 - !aux2d(:,11) =ustar1 - !aux2d(:,12) =stress1 - !aux2d(:,13) =rainn_mp - !aux2d(:,14) =rainc_mp - !aux2d(:,15) =snow_mp - !aux2d(:,16) =graupel_mp - !aux2d(:,17) =ice_mp - !aux2d(:,18) =fm101 - !aux2d(:,19) = hflx - !aux2d(:,20) = evap - - !aux2d(:,13) = rb1 - !aux2d(:,14) = fm1 - !aux2d(:,15) = fh1 - !aux2d(:,16) = fm101 - !aux2d(:,17) = fh21 - !aux2d(:,18) = tsurf - !aux2d(:,19) = tskin - !aux2d(:,20) = stress1 - - aux2d(:,1) = ps - aux2d(:,2) = u1 - aux2d(:,3) = v1 - aux2d(:,4) = t1 - aux2d(:,5) = q1 - aux2d(:,6) = tsurf - aux2d(:,7) = tskin - aux2d(:,8) = rb1 - aux2d(:,9) = fm1 - aux2d(:,10)= fh1 - aux2d(:,11)= ustar1 - aux2d(:,12)= stress1 - aux2d(:,13)= fm101 - aux2d(:,14)= fh21 - aux2d(:,15)= cm - aux2d(:,16)= ch - aux2d(:,17)= prsl1 - aux2d(:,18)= prslk1 - aux2d(:,19) = hflx - aux2d(:,20) = evap return end subroutine noahmpdrv_run From 6e4d811a380605a473c208923c5114820e81dbbe Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Wed, 14 Sep 2022 14:28:56 -0600 Subject: [PATCH 06/25] more cleaning of debug code --- physics/noahmpdrv.F90 | 3 --- physics/sfc_diff.f | 22 ---------------------- 2 files changed, 25 deletions(-) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index a8b7f59d3..27ed6bc20 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -605,8 +605,6 @@ subroutine noahmpdrv_run & errmsg = '' errflg = 0 - - do i = 1, im if (flag_iter(i) .and. dry(i)) then @@ -679,7 +677,6 @@ subroutine noahmpdrv_run & co2_air = co2_table * air_pressure_forcing o2_air = o2_table * air_pressure_forcing foliage_nitrogen = 1.0 - ! ! --- noah-mp inout variables ! diff --git a/physics/sfc_diff.f b/physics/sfc_diff.f index 473fbf5f1..59c6d2d60 100644 --- a/physics/sfc_diff.f +++ b/physics/sfc_diff.f @@ -167,16 +167,6 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) errmsg = '' errflg = 0 - !aux2d(:,1) = ps - !aux2d(:,2) = t1 - !aux2d(:,3) = q1 - !aux2d(:,4) = z1 - !aux2d(:,5) = wind - !aux2d(:,6) = prsl1 - !aux2d(:,7) = prslki - !aux2d(:,8) = prsik1 - !aux2d(:,9) = prslk1 - ! initialize variables. all units are supposedly m.k.s. unless specified ! ps is in pascals, wind is wind speed, ! surface roughness length is converted to m from cm @@ -456,18 +446,6 @@ subroutine sfc_diff_run (im,rvrdm1,eps,epsm1,grav, & !intent(in) endif ! end of if(flagiter) loop enddo - !aux2d(:,10) = tskin_lnd - !aux2d(:,11) = tsurf_lnd - !aux2d(:,12) = z0rl_lnd - !aux2d(:,13) = ustar_lnd - !aux2d(:,14) = cm_lnd - !aux2d(:,15) = ch_lnd - !aux2d(:,16) = rb_lnd - !aux2d(:,17) = stress_lnd - !aux2d(:,18) = fm_lnd - !aux2d(:,19) = fh_lnd - !aux2d(:,20) = fm10_lnd - return end subroutine sfc_diff_run !> @} From b401836280ecfe42f58bc8407d8c50d92464d552 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Wed, 14 Sep 2022 14:30:54 -0600 Subject: [PATCH 07/25] more cleaning --- physics/noahmpdrv.F90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index 27ed6bc20..3a9d6b618 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -166,7 +166,7 @@ subroutine noahmpdrv_run & sncovr1, qsurf, gflux, drain, evap, hflx, ep, runoff, & cmm, chh, evbs, evcw, sbsno, pah, ecan, etran, edir, snowc,& stm, snohf,smcwlt2, smcref2, wet1, t2mmp, q2mp,zvfun, & - errmsg, errflg) + errmsg, errflg) use machine , only : kind_phys use funcphys, only : fpvs @@ -677,6 +677,7 @@ subroutine noahmpdrv_run & co2_air = co2_table * air_pressure_forcing o2_air = o2_table * air_pressure_forcing foliage_nitrogen = 1.0 + ! ! --- noah-mp inout variables ! From 0f59f0b1051e1b7315c98fcf26e038cab4fd58a3 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Wed, 14 Sep 2022 14:31:53 -0600 Subject: [PATCH 08/25] more cleaning --- physics/noahmpdrv.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index 3a9d6b618..a4f5b5226 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -677,7 +677,7 @@ subroutine noahmpdrv_run & co2_air = co2_table * air_pressure_forcing o2_air = o2_table * air_pressure_forcing foliage_nitrogen = 1.0 - + ! ! --- noah-mp inout variables ! From 0f3b7de8f0eed446bef9ee9dd58bc45f35def8f6 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Wed, 12 Oct 2022 14:59:48 -0600 Subject: [PATCH 09/25] Initialize SciDoc for SRW v2.1.0 --- physics/GFS_MP_generic_post.F90 | 2 +- physics/docs/ccppsrw_doxyfile | 555 +++++ physics/docs/pdftxt/MYNN_EDMF.txt | 41 +- physics/docs/pdftxt/RRFS_SGSCLOUD.txt | 13 +- physics/docs/pdftxt/SRW_all_shemes_list.txt | 99 + physics/docs/pdftxt/SRW_mainpage.txt | 34 + physics/docs/pdftxt/suite_input.nml.txt | 9 + physics/module_bl_mynn.F90 | 7 +- physics/module_sf_noahmp_glacier.f90 | 7 +- physics/module_sf_noahmplsm.f90 | 2428 ++++++++++--------- physics/noahmpdrv.F90 | 2 - physics/progsigma_calc.f90 | 14 +- physics/radiation_aerosols.f | 6 +- physics/radlw_main.F90 | 10 - physics/radsw_main.F90 | 11 - physics/samfdeepcnv.f | 6 +- 16 files changed, 1980 insertions(+), 1264 deletions(-) create mode 100644 physics/docs/ccppsrw_doxyfile create mode 100644 physics/docs/pdftxt/SRW_all_shemes_list.txt create mode 100644 physics/docs/pdftxt/SRW_mainpage.txt diff --git a/physics/GFS_MP_generic_post.F90 b/physics/GFS_MP_generic_post.F90 index 5a5ece528..2f28b9ff8 100644 --- a/physics/GFS_MP_generic_post.F90 +++ b/physics/GFS_MP_generic_post.F90 @@ -249,7 +249,7 @@ subroutine GFS_MP_generic_post_run( ! Conversion factor from mm per day to m per physics timestep tem = dtp * con_p001 / con_day -!> - For GFDL and Thompson MP scheme, determine convective snow by surface temperature; +!> - For GFDL, Thompson and NSSL MP schemes, determine convective snow by surface temperature; !! and determine explicit rain/snow by snow/ice/graupel coming out directly from MP !! and convective rainfall from the cumulus scheme if the surface temperature is below !! \f$0^oC\f$. diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile new file mode 100644 index 000000000..c89757714 --- /dev/null +++ b/physics/docs/ccppsrw_doxyfile @@ -0,0 +1,555 @@ +# Doxyfile 1.9.3 + +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "UFSLAM CCPP SciDoc" +PROJECT_NUMBER = "UFS-SRW v2.1.0" +PROJECT_BRIEF = "Common Community Physics Package Developed at DTC" +PROJECT_LOGO = img/dtc_logo.png +OUTPUT_DIRECTORY = doc +CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = NO +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +JAVADOC_BANNER = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +PYTHON_DOCSTRING = YES +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = YES +TAB_SIZE = 4 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = YES +OPTIMIZE_OUTPUT_VHDL = NO +OPTIMIZE_OUTPUT_SLICE = NO +EXTENSION_MAPPING = .f=FortranFree \ + .F=FortranFree \ + .F90=FortranFree \ + .f90=FortranFree +MARKDOWN_SUPPORT = YES +TOC_INCLUDE_HEADINGS = 5 +AUTOLINK_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = YES +GROUP_NESTED_COMPOUNDS = NO +SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO +TYPEDEF_HIDES_STRUCT = YES +LOOKUP_CACHE_SIZE = 0 +NUM_PROC_THREADS = 1 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_PRIV_VIRTUAL = NO +EXTRACT_PACKAGE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = YES +EXTRACT_ANON_NSPACES = YES +RESOLVE_UNNAMED_PARAMS = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = YES +CASE_SENSE_NAMES = NO +HIDE_SCOPE_NAMES = NO +HIDE_COMPOUND_REFERENCE= NO +SHOW_HEADERFILE = YES +SHOW_INCLUDE_FILES = NO +SHOW_GROUPED_MEMB_INC = NO +FORCE_LOCAL_INCLUDES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = NO +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = YES +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = NO +SHOW_FILES = NO +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = ccpp_dox_layout.xml +CITE_BIB_FILES = library.bib + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = NO +WARN_IF_DOC_ERROR = YES +WARN_IF_INCOMPLETE_DOC = YES +WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO +WARN_FORMAT = +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +INPUT = pdftxt/SRW_mainpage.txt \ + pdftxt/SRW_all_shemes_list.txt \ + pdftxt/GFS_v16_suite.txt \ + pdftxt/HRRR_suite.txt \ + pdftxt/RE6/FV3_HRRR_input.nml \ + pdftxt/RRFS_v1beta_suite.txt \ + pdftxt/WoFS_v0_suite.txt \ + pdftxt/RRFS_SGSCLOUD.txt \ + pdftxt/GFS_RRTMG.txt \ + pdftxt/GFS_SFCLYR.txt \ + pdftxt/MYNN_SFCLAYER.txt \ + pdftxt/GFS_NSST.txt \ + pdftxt/GFS_OCEAN.txt \ + pdftxt/GFS_NOAH.txt \ + pdftxt/GFS_SFCSICE.txt \ + pdftxt/GFS_SATMEDMFVDIFQ.txt \ + pdftxt/GFS_NOAHMP.txt \ + pdftxt/GFS_UGWPv0.txt \ + pdftxt/GFS_drag_suite.txt \ + pdftxt/GFS_GWDPS.txt \ + pdftxt/GFS_OZPHYS.txt \ + pdftxt/GFS_H2OPHYS.txt \ + pdftxt/GFS_SAMFdeep.txt \ + pdftxt/GFS_SAMFshal.txt \ + pdftxt/GFDL_cloud.txt \ + pdftxt/NSSLMICRO.txt \ + pdftxt/MYNN_EDMF.txt \ + pdftxt/CU_GF_deep.txt \ + pdftxt/RUCLSM.txt \ + pdftxt/THOMPSON.txt \ + pdftxt/suite_input.nml.txt \ + pdftxt/GFS_SPP.txt \ + ../fv_sat_adj.F90 \ + ../GFS_time_vary_pre.fv3.F90 \ + ../GFS_rad_time_vary.fv3.F90 \ + ../GFS_phys_time_vary.fv3.F90 \ + ../get_prs_fv3.F90 \ + ../get_phi_fv3.F90 \ + ../ozne_def.f \ + ../ozinterp.f90 \ + ../h2o_def.f \ + ../h2ointerp.f90 \ + ../aerclm_def.F \ + ../aerinterp.F90 \ + ../iccn_def.F \ + ../iccninterp.F90 \ + ../sfcsub.F \ + ../gcycle.F90 \ + ../GFS_suite_interstitial_1.F90 \ + ../GFS_suite_interstitial_2.F90 \ + ../GFS_suite_interstitial_3.F90 \ + ../GFS_suite_interstitial_4.F90 \ + ../GFS_suite_interstitial_5.F90 \ + ../GFS_suite_interstitial_phys_reset.F90 \ + ../GFS_suite_interstitial_rad_reset.F90 \ + ../GFS_suite_stateout_reset.F90 \ + ../GFS_suite_stateout_update.F90 \ + ../GFS_surface_composites_inter.F90 \ + ../GFS_surface_composites_pre.F90 \ + ../GFS_surface_composites_post.F90 \ + ../GFS_surface_loop_control_part1.F90 \ + ../GFS_surface_loop_control_part2.F90 \ + ../GFS_radiation_surface.F90 \ + ../GFS_rrtmg_pre.F90 \ + ../GFS_rrtmg_post.F90 \ + ../GFS_rrtmg_setup.F90 \ + ../rad_sw_pre.F90 \ + ../sgscloud_radpre.F90 \ + ../sgscloud_radpost.F90 \ + ../radsw_main.F90 \ + ../rrtmg_sw_post.F90 \ + ../rrtmg_lw_pre.F90 \ + ../radlw_main.F90 \ + ../rrtmg_lw_post.F90 \ + ../radiation_aerosols.f \ + ../radiation_astronomy.f \ + ../radiation_clouds.f \ + ../radiation_cloud_overlap.F90 \ + ../radiation_gases.f \ + ../radiation_surface.f \ + ../radlw_param.f \ + ../radlw_datatb.f \ + ../radsw_param.f \ + ../radsw_datatb.f \ + ../GFS_cloud_diagnostics.F90 \ + ../dcyc2t3.f \ + ../sfc_diff.f \ + ../sfc_diag.f \ + ../sfc_diag_post.F90 \ + ../sfc_nst.f \ + ../sfc_nst_pre.f \ + ../sfc_nst_post.f \ + ../sfc_ocean.F \ + ../module_nst_model.f90 \ + ../module_nst_parameters.f90 \ + ../module_nst_water_prop.f90 \ + ../lsm_noah.f \ + ../sflx.f \ + ../namelist_soilveg.f \ + ../set_soilveg.f \ + ../noahmpdrv.F90 \ + ../module_sf_noahmplsm.f90 \ + ../module_sf_noahmp_glacier.f90 \ + ../noahmp_tables.f90 \ + ../GFS_surface_generic_pre.F90 \ + ../GFS_surface_generic_post.F90 \ + ../surface_perturbation.F90 \ + ../GFS_DCNV_generic_pre.F90 \ + ../GFS_DCNV_generic_post.F90 \ + ../GFS_SCNV_generic_pre.F90 \ + ../GFS_SCNV_generic_post.F90 \ + ../sfc_sice.f \ + ../satmedmfvdifq.F \ + ../mfpbltq.f \ + ../mfscuq.f \ + ../tridi.f \ + ../GFS_GWD_generic_pre.F90 \ + ../GFS_GWD_generic_post.F90 \ + ../unified_ugwp.F90 \ + ../drag_suite.F90 \ + ../cires_tauamf_data.F90 \ + ../cires_orowam2017.f \ + ../cires_ugwp.F90 \ + ../cires_ugwp_initialize.F90 \ + ../cires_ugwp_module.F90 \ + ../cires_ugwp_post.F90 \ + ../cires_ugwp_triggers.F90 \ + ../cires_ugwp_module.F90 \ + ../gwdps.f \ + ../ugwp_driver_v0.F \ + ../ozphys_2015.f \ + ../h2ophys.f \ + ../samfdeepcnv.f \ + ../samfshalcnv.f \ + ../progsigma_calc.f90 \ + ../cnvc90.f \ + ../module_bfmicrophysics.f \ + ../gfdl_cloud_microphys.F90 \ + ../module_gfdl_cloud_microphys.F90 \ + ../GFS_MP_generic_pre.F90 \ + ../GFS_MP_generic_post.F90 \ + ../GFS_PBL_generic_common.F90 \ + ../GFS_PBL_generic_pre.F90 \ + ../GFS_PBL_generic_post.F90 \ + ../calpreciptype.f90 \ + ../GFS_stochastics.F90 \ + ../cu_gf_driver.F90 \ + ../cu_gf_driver_pre.F90 \ + ../cu_gf_deep.F90 \ + ../cu_gf_sh.F90 \ + ../cu_gf_driver_post.F90 \ + ../mynnedmf_wrapper.F90 \ + ../module_bl_mynn.F90 \ + ../mynnsfc_wrapper.F90 \ + ../module_sf_mynn.F90 \ + ../lsm_ruc.F90 \ + ../module_sf_ruclsm.F90 \ + ../namelist_soilveg_ruc.F90 \ + ../set_soilveg_ruc.F90 \ + ../module_soil_pre.F90 \ + ../mp_thompson_pre.F90 \ + ../module_mp_thompson_make_number_concentrations.F90 \ + ../mp_thompson.F90 \ + ../module_mp_thompson.F90 \ + ../module_mp_radar.F90 \ + ../mp_thompson_post.F90 \ + ../mp_nssl.F90 \ + ../module_mp_nssl_2mom.F90 \ + ../funcphys.f90 \ + ../physparam.f \ + ../physcons.F90 \ + ../radcons.f90 \ + ../mersenne_twister.f \ + ../maximum_hourly_diagnostics.F90 \ + ../phys_tend.F90 + +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.f \ + *.F \ + *.F90 \ + *.f90 \ + *.nml \ + *.txt +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = pdftxt/RE6 \ + doc/html +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = img +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO +VERBATIM_HEADERS = YES +CLANG_ASSISTED_PARSING = NO +CLANG_ADD_INC_PATHS = YES +CLANG_OPTIONS = +CLANG_DATABASE_PATH = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +ALPHABETICAL_INDEX = NO +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = _doxygen/header.html +HTML_FOOTER = _doxygen/footer.html +HTML_STYLESHEET = +HTML_EXTRA_STYLESHEET = _doxygen/doxygen-awesome.css \ + _doxygen/doxygen-awesome-sidebar-only.css \ + _doxygen/doxygen-awesome-sidebar-only-darkmode-toggle.css \ + _doxygen/doxygen-awesome-ccpp.css +HTML_EXTRA_FILES = _doxygen/doxygen-awesome-darkmode-toggle.js \ + _doxygen/doxygen-awesome-ccpp.js +HTML_COLORSTYLE_HUE = 209 +HTML_COLORSTYLE_SAT = 255 +HTML_COLORSTYLE_GAMMA = 113 +HTML_TIMESTAMP = NO +HTML_DYNAMIC_MENUS = YES +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_FEEDURL = +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project +DISABLE_INDEX = YES +GENERATE_TREEVIEW = YES +FULL_SIDEBAR = NO +ENUM_VALUES_PER_LINE = 4 +TREEVIEW_WIDTH = 335 +EXT_LINKS_IN_WINDOW = NO +OBFUSCATE_EMAILS = YES +HTML_FORMULA_FORMAT = SVG +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +FORMULA_MACROFILE = +USE_MATHJAX = YES +MATHJAX_VERSION = MathJax_2 +MATHJAX_FORMAT = HTML-CSS +#MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2 +MATHJAX_RELPATH = https://cdn.jsdelivr.net/npm/mathjax@2 +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +GENERATE_LATEX = YES +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +LATEX_MAKEINDEX_CMD = makeindex +COMPACT_LATEX = YES +PAPER_TYPE = a4 +EXTRA_PACKAGES = amsmath +LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = YES +LATEX_BIB_STYLE = plainnat +LATEX_TIMESTAMP = NO +LATEX_EMOJI_DIRECTORY = + +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- + +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- + +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_SUBDIR = +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- + +GENERATE_XML = NO +XML_OUTPUT = xml +XML_PROGRAMLISTING = YES +XML_NS_MEMB_FILE_SCOPE = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook + +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +ENABLE_PREPROCESSING = NO +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = CCPP \ + MULTI_GASES \ + 0 +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- + +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +DIA_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Source Sans Pro +DOT_FONTSIZE = +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = YES +UML_LIMIT_NUM_FIELDS = 10 +DOT_UML_DETAILS = NO +DOT_WRAP_THRESHOLD = 17 +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = NO +CALL_GRAPH = YES +CALLER_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DIR_GRAPH_MAX_DEPTH = 1 +DOT_IMAGE_FORMAT = SVG +INTERACTIVE_SVG = NO +DOT_PATH = /Users/man.zhang/homebrew/bin/dot +DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_CFG_FILE = +PLANTUML_INCLUDE_PATH = +DOT_GRAPH_MAX_NODES = 1000 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = YES +DOT_MULTI_TARGETS = YES +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/physics/docs/pdftxt/MYNN_EDMF.txt b/physics/docs/pdftxt/MYNN_EDMF.txt index bdd29a99c..f301a3d4e 100644 --- a/physics/docs/pdftxt/MYNN_EDMF.txt +++ b/physics/docs/pdftxt/MYNN_EDMF.txt @@ -28,35 +28,46 @@ model components (i.e., radiation). A description of the changes to the MYNN sch \cite https://doi.org/10.25923/n9wm-be49. \section intra_mynnpbl Intraphysics Communication -- Cloud-Radiation Interaction -\sa \ref SGSCLOUD_page +- \ref SGSCLOUD_page The SGS clouds produced by the MYNN-EDMF scheme are coupled to the longwave and shortwave radiation schemes if the namelist parameter \p icloud_bl is set to 1. In this case, the SGS cloud fraction, \p CLDFRA_BL, and the SGS -cloud-mixing ratio, \b QC_BL, are added to the microphysics arrays within the radiation driver (mynnrad_pre_run()). +cloud-mixing ratio, \p QC_BL, are added to the microphysics arrays within the radiation driver (mynnrad_pre_run()). The following two steps are performed: -(1) the cloud fraction of the resolved-scale clouds are computed, using Xu and Randal (1996) \cite xu_and_randall_1996 -by default; +(1) Use either Xu and Randall (1996) \cite xu_and_randall_1996 or Chaboureau and Bechtold (2005) cloud fraction for +the convection scheme subgrid clouds, chosen by the switch \p conv_cf_opt = 0: CB2005, 1: XR1996. +Note that the MYNN-EDMF PBL scheme subgrid clouds input into this scheme are +already partitioned into qc and qi and already have assigned cloud fractions, but now qi is further partitioned into +qi and qsnow. -(2) if the resolved-scale cloud liquid (\f$q_c\f$) or ice ( \f$q_i\f$), is less than \f$10^{-6}kg kg^{-1}\f$ and -\f$10^{-8}kg kg^{-1}\f$, respectively, and there exists a nonzero SGS cloud fraction, then the SGS components are + +(2) if the resolved-scale cloud liquid (\f$q_c\f$) is less than \f$10^{-6}kg kg^{-1}\f$ +, and there exists a nonzero SGS cloud fraction, then the SGS components are added to their respective resolved-scale components by a temperature weighting, according to linear approximation -of Hobbs et al.(1974) \cite HOBBS_1974 : +of Hobbs et al.(1974) \cite HOBBS_1974 . Then the frozen species are crudely split into 50% ice and 50% snow below +~700 mb and decrease snow to zero by ~300mb.: +\f[ + W_{snow}=min(0.5,max((P-30000,0.0)/140000.0) +\f] + \f[ - W_{ice}=1-min(1,max(0,(T-254)/15)) - W_{h2o}=1-W_{ice} + W_{ice}=1.0-W_{snow} \f] -Then we sort the SGS cloud water and liquid as : +Then we sort the SGS cloud water, liquid, and snow as : + +\f$q_c\f$=QC_BL*CLDFRA_BL + +\f$q_i\f$=QI_BL*\f$W_{ice}\f$*CLDFRA_BL -\f$q_c\f$=QC_BL*\f$W_{h2o}\f$*CLDFRA_BL +\f$q_s\f$=QI_BL*\f$W_{snow}\f$*CLDFRA_BL -\f$q_i\f$=QC_BL*\f$W_{ice}\f$*CLDFRA_BL +if Grell-Freitas scheme is used, convective clouds will be also added into SGS cloud water, liquid and snow. -This allows us to only use one 3-D array for both SGS cloud water and ice. The updated \f$q_{c}\f$,\f$q_{i}\f$, and +This allows us to only use one 3-D array for both SGS cloud water,ice and snow. The updated \f$q_{c}\f$,\f$q_{i}\f$, \f$q_{s}\f$and \p CLDFRA are then used as input into the radiation schemes. After exiting the radiation schemes, the original -values of \f$q_c, q_i\f$ and \p CLDFRA are restored, so the SGS clouds do not impact the resolved-scale moisture budget. +values of \f$q_c, q_i, q_s\f$ and \p CLDFRA are restored, so the SGS clouds do not impact the resolved-scale moisture budget. The MYNN-EDMF CCPP-compliant interface: diff --git a/physics/docs/pdftxt/RRFS_SGSCLOUD.txt b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt index a8c1f11e7..572c2476b 100644 --- a/physics/docs/pdftxt/RRFS_SGSCLOUD.txt +++ b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt @@ -1,18 +1,21 @@ /** -\page SGSCLOUD_page Subgrid-scale Cloud Interstitial +\page SGSCLOUD_page RRFS Subgrid-scale Cloud Interstitial \section rrfs_sgscloud_descrip Description This interstitial module adds the subgrid-scale cloud information to the resolved-scale (microphysics) clouds. This procedure is required when using microphysics schemes that only produce clouds in fully saturated grid cells, like the Thompson microphysics scheme, and when using boundary layer and convection schemes that produce subgrid-scale cloud information (mixing ratio and cloud fraction). This allows the subgrid-scale cloud information to be assembled into the rest of the cloud information prior to calling the radiation schemes. \section intra_rrfssgs Intraphysics Communication -- sgscloud_radpre_run(): \ref arg_table_sgscloud_radpre_run -- sgscloud_radpost_run():\ref arg_table_sgscloud_radpost_run +- sgscloud_radpre_run: \ref arg_table_sgscloud_radpre_run +- sgscloud_radpost_run:\ref arg_table_sgscloud_radpost_run \section gen_rrfssgs SGSCLOUD Pre-radiation Interstitial General Algorithm The order of procedures is outlined below: -\n 1) Back up the original qc and qi in "save arrays" qc_save and qi_save. -\n 2) Partition the condensate from the convection scheme into liquid and ice. +\n - Back up the original qc, qi, and qs in "save arrays" qc_save, qi_save and qs_save. +\n - Add MYNN boundary layer clouds \p cldfra_bl as qc, qi and qs +\n - Add Grell-Freitas deep convection clouds. Partition the condensate from the convection scheme into liquid, ice and snow. + +\todo need update \n 3) Use Xu and Randall (1996) \cite xu_and_randall_1996 cloud fraction for the convection scheme subgrid clouds. Note that the MYNN-EDMF PBL scheme subgrid clouds input into this scheme are already partitioned into qc and qi and already have assigned cloud fractions. diff --git a/physics/docs/pdftxt/SRW_all_shemes_list.txt b/physics/docs/pdftxt/SRW_all_shemes_list.txt new file mode 100644 index 000000000..7c31e473a --- /dev/null +++ b/physics/docs/pdftxt/SRW_all_shemes_list.txt @@ -0,0 +1,99 @@ +/** +\page allscheme_page Overview of Schemes and Suites + +\section allscheme_overview Physical Parameterizations + +In the CCPP, each parameterization is in its own modern Fortran module (see rules for a scheme to be considered CCPP-compliant at + CCPP-Compliant Physics Parameterizations ), +which facilitates model development and code maintenance. While some individual parameterization can be invoked for the SCM, most host models will assemble the parameterizations in suites. + + +\b Radiation + - \subpage GFS_RRTMG + +\b PBL \b and \b Turbulence + - \subpage GFS_SATMEDMFVDIFQ + - \subpage MYNNEDMF with \subpage SGSCLOUD_page + +\b Land \b Surface \b Model + - \subpage GFS_NOAH + - \subpage RUCLSM + - \subpage NoahMP + +\b Cumulus \b Parameterizations + - \subpage GFS_SAMFdeep + - \ref ca_page + - \subpage GFS_SAMFshal + - \subpage CU_GF + +\b Microphysics + - \subpage GFDL_cloud + - \subpage THOMPSON + - \subpage NSSLMICRO_page + +\b Ozone \b Photochemical \b Production \b and \b Loss + - \subpage GFS_OZPHYS + +\b Water \b Vapor \b Photochemical \b Production \b and \b Loss + - \subpage GFS_H2OPHYS + +\b Gravity \b Wave \b Drag + - \subpage GFS_UGWP_v0 + - \subpage GFS_drag_suite + +\b Surface \b Layer + - \subpage GFS_SFCLYR + - \subpage SFC_MYNNSFL + +\b Simplified \b Ocean \b and \b Sea \b Ice \b Representation + - \subpage GFS_NSST + - \subpage GFS_OCEAN + - \subpage GFS_SFCSICE + +\b Others + - \ref ca_page + - \subpage GFS_SPP + +The input information for the parameterizations includes the values of the gridbox mean prognostic variables (wind components, temperature, +specific humidity, cloud fraction, water contents for cloud liquid, cloud ice, rain, snow, graupel, and ozone concentration), the provisional + dynamical tendencies for the same variables and various surface fields, both fixed and variable. + +The time integration of the physics suites is based on the following: +- The tendencies from the different physical processes are computed by the parameterizations or derived in separate interstitial routines. +- The first part of the suite, comprised of the parameterizations for radiation, surface layer, surface (land, ocean, and sea ice), and boundary layer + is computed using a hybrid of parallel and sequential splitting described in Donahue and Caldwell (2018) +\cite donahue_and_caldwell_2018, a method in which the various parameterizations use the same model state as input but are impacted by the preceding +parameterizations. The tendencies from the various parameterizations are then added together and used to update the model state. +- The surface parameterizations (land, ocean and sea ice) are invoked twice in a subcycling loop, with the first time to create a guess, and the second time to +produce the tendencies. +- The second part of the physics suite, comprised of the parameterizations of gravity wave physics, ozone, stratospheric water vapor, deep and shallow convection (if using), + and microphysics, is computed using sequential splitting in the order listed above, in which the model state is updated between calls +to the parameterization. +- If the in-core saturation adjustment is used (\p do_sat_adj=.true.), it is invoked at shorter timesteps along with the dynamical solver. + +\section allsuite_overview Physics Suites + +There are two publicly supported host models that use CCPP v6: the UFS Weather Model and the CCPP Single Column Model (SCM). +The UFS Weather Model is included in the UFS Short Range Weather Application (SRW App) v2. +The forcing datasets included in the CCPP SCM v6.0.0 public release were created by averaging observations and large-eddy simulations over areas that are +too coarse to resolve convection. Therefore, best results will be obtained with the CCPP SCM v6.0 when using suites that include parameterized +convection. + +Table 1. Physics suites and primary schemes supported in SRW v2.1.0 +\tableofcontents +| Physics suites | GFS_v16 | HRRR | RRFS_v1beta | WoFS_v0 | +|------------------|--------------------|--------------------------------|--------------------|---------------| +|\b Host | SCM \n SRWv2 | SCM \n SRWv2 | SCM \n SRWv2 | SCM \n SRWv2 | +|\b Deep \b Cu | \ref GFS_SAMFdeep | \a off | \a off | \a off | +|\b Shallow \b Cu | \ref GFS_SAMFshal | \ref MYNNEDMF | \ref MYNNEDMF | \ref MYNNEDMF | +|\b Microphysics | \ref GFDL_cloud | \ref THOMPSON | \ref THOMPSON | \ref NSSLMICRO_page | +|\b PBL/TURB | \ref GFS_SATMEDMFVDIFQ | \ref MYNNEDMF | \ref MYNNEDMF | \ref MYNNEDMF | +|\b Radiation | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | \ref GFS_RRTMG | +|\b Surface \b Layer | \ref GFS_SFCLYR | \ref SFC_MYNNSFL | \ref SFC_MYNNSFL | \ref SFC_MYNNSFL | +|\b LSM | \ref GFS_NOAH | \ref RUCLSM | \ref NoahMP | \ref GFS_NOAH | +|\b Gravity \b Wave \b Drag| \ref GFS_UGWP_v0 | \ref GFS_drag_suite | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | +|\b Sea \b Ice | \ref GFS_SFCSICE | \ref RUCLSM | \ref GFS_SFCSICE | \ref GFS_SFCSICE | +\tableofcontents + + +*/ diff --git a/physics/docs/pdftxt/SRW_mainpage.txt b/physics/docs/pdftxt/SRW_mainpage.txt new file mode 100644 index 000000000..9cfa81ebe --- /dev/null +++ b/physics/docs/pdftxt/SRW_mainpage.txt @@ -0,0 +1,34 @@ +/** +\mainpage Introduction + +Welcome to the scientific documentation for the physical parameterizations available in the +Unified Forecast System (UFS) +Short-Range Weather (SRW) Application version 2.1.0 (available through https://github.com/ufs-community/ufs-srweather-app/) and the suites that can be configured using them. The SRW app targets predictions of atmospheric behavior on a +limited spatial domain and on time scales from less than an hour out to several days. + + +The CCPP parameterizations are aggregated in suites by the host models. In this release, the UFS Short-Range Weather Application 2.1.0 +supports suites: +- \ref GFS_v16_page +- \ref HRRR_suite_page +- \ref RRFS_v1beta_page +- \ref WoFS_v0_page + +## Acknowledgements + +CCPP team would like to express our deepest gratitude for UFS physics developers' contribution to the +development of CCPP-Physics. +\n We would also like to give special thanks to: + +- \b NOAA \b Global \b Systems \b Laboratory: Hannah Barnes, Jeff Beck, Georg Grell, Joseph Olson, Tanya Smirnova, Michael Toy +- \b NOAA \b National \b Severe \b Storms \b Laboratory: Ted Mansell +- \b NOAA \b Environmental \b Modeling \b Center: Jongil Han, Qingfu Liu, Ruiyu Sun +- \b Joint \b Center \b for \b Satellite \b Data \b Assimilation: Greg Thompson + +as a whole for their support and contribution for this CCPP scientific documentation (SciDoc). + + +\b CCPP \b SciDoc \b Team: Man Zhang, Ligia Bernardet, Dustin Swales, Grant Firl +\n Developmental Testbed Center + +*/ diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index 714ba7d2f..17f33d815 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -283,6 +283,14 @@ show some variables in the namelist that must match the SDF.
  • 1: activate subgrid cloud coupling to radiation (highly suggested) 1 +bl_mynn_closure mynnedmf_wrapper flag to determine closure level of MYNN \n +
      +
    • <=2.5: only prognose tke +
    • 2.5 < and < 3.0: prognose tke and q'2 +
    • >= 3.0, prognose tke, q'2, T'2, and T'q' +
    + 2.6 + num_dfi_radar cu_gf_driver number of timespans with radar-prescried temperature tendencies 0 fh_dfi_radar cu_gf_driver begin+end of timespans to receive radar-prescribed temperature tendencies -2e10 do_cap_suppress cu_gf_driver enable convection suppression in GF scheme if fh_dfi_radar is specified .true. @@ -544,6 +552,7 @@ show some variables in the namelist that must match the SDF.
    • 1: m-o
    • 2: original Noah (Chen et al. 1997 \cite chen_et_al_1997) +
    • 4: MYNN surface layer scheme
    1 iopt_frz \ref noahmpdrv options for supercooled liquid water (or ice fraction) \n diff --git a/physics/module_bl_mynn.F90 b/physics/module_bl_mynn.F90 index 6408ca5b4..096939455 100644 --- a/physics/module_bl_mynn.F90 +++ b/physics/module_bl_mynn.F90 @@ -5162,6 +5162,8 @@ SUBROUTINE mynn_tendencies(kts,kte,i, & END SUBROUTINE mynn_tendencies ! ================================================================== +!>\ingroup gsd_mynn_edmf +!!ensure non-negative moist species. SUBROUTINE moisture_check(kte, delt, dp, exner, & qv, qc, qi, th, & dqv, dqc, dqi, dth ) @@ -5249,6 +5251,8 @@ END SUBROUTINE moisture_check ! ================================================================== +!>\ingroup gsd_mynn_edmf +!! SUBROUTINE mynn_mix_chem(kts,kte,i, & delt,dz,pblh, & nchem, kdvel, ndvel, & @@ -7614,7 +7618,8 @@ FUNCTION phih(zet) END FUNCTION phih ! ================================================================== -!> +!>\ingroup gsd_mynn_edmf +!! SUBROUTINE topdown_cloudrad(kts,kte,dz1,zw,xland,kpbl,PBLH, & &sqc,sqi,sqw,thl,th1,ex1,p1,rho1,thetav, & &cldfra_bl1D,rthraten, & diff --git a/physics/module_sf_noahmp_glacier.f90 b/physics/module_sf_noahmp_glacier.f90 index 1c144c993..08fdd92ce 100644 --- a/physics/module_sf_noahmp_glacier.f90 +++ b/physics/module_sf_noahmp_glacier.f90 @@ -417,7 +417,7 @@ end subroutine atm_glacier ! ================================================================================================== ! -------------------------------------------------------------------------------------------------- !>\ingroup NoahMP_LSM -!! This subroutine +!! Compute energy budget (momentum & energy fluxes and phase changes). subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair , & !in eair ,sfcprs ,qair ,sfctmp ,lwdn ,uu , & !in vv ,solad ,solai ,cosz ,zref , & !in @@ -507,7 +507,7 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair #endif ! outputs - integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !< phase change index [1-melt; 2-freeze] + integer, dimension(-nsnow+1:nsoil) , intent(out) :: imelt !< phase change index [1-melt; 2-freeze] real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snicev !< partial volume ice [m3/m3] real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: snliqv !< partial volume liq. water [m3/m3] real (kind=kind_phys) , dimension(-nsnow+1: 0), intent(out) :: epore !< effective porosity [m3/m3] @@ -650,6 +650,7 @@ subroutine energy_glacier (nsnow ,nsoil ,isnow ,dt ,qsnow ,rhoair end subroutine energy_glacier ! ================================================================================================== !>\ingroup NoahMP_LSM +!! calculate thermal properties of soil, snow, lake, and frozen soil. subroutine thermoprop_glacier (nsoil ,nsnow ,isnow ,dzsnso , & !in dt ,snowh ,snice ,snliq , & !in df ,hcpct ,snicev ,snliqv ,epore , & !out @@ -782,6 +783,7 @@ subroutine csnow_glacier (isnow ,nsnow ,nsoil ,snice ,snliq ,dzsnso , end subroutine csnow_glacier !=================================================================================================== !>\ingroup NoahMP_LSM +!! Compute solar radiation: absorbed & reflected by the ground. subroutine radiation_glacier (dt ,tg ,sneqvo ,sneqv ,cosz , & !in qsnow ,solad ,solai , & !in albold ,tauss , & !inout @@ -3446,6 +3448,7 @@ end subroutine error_glacier ! ================================================================================================== !>\ingroup NoahMP_LSM +!! subroutine noahmp_options_glacier(iopt_alb ,iopt_snf ,iopt_tbot, iopt_stc, iopt_gla,& iopt_sfc, iopt_trs) diff --git a/physics/module_sf_noahmplsm.f90 b/physics/module_sf_noahmplsm.f90 index 652db602d..f25566e6b 100644 --- a/physics/module_sf_noahmplsm.f90 +++ b/physics/module_sf_noahmplsm.f90 @@ -404,6 +404,7 @@ module module_sf_noahmplsm !== begin noahmp_sflx ============================================================================== !>\ingroup NoahMP_LSM +!! subroutine noahmp_sflx (parameters, & iloc , jloc , lat , yearlen , julian , cosz , & ! in : time/space-related dt , dx , dz8w , nsoil , zsoil , nsnow , & ! in : model configuration @@ -460,9 +461,9 @@ subroutine noahmp_sflx (parameters, & integer , intent(in) :: nsoil !< no. of soil layers integer , intent(in) :: iloc !< grid index integer , intent(in) :: jloc !< grid index - real (kind=kind_phys) , intent(in) :: ep_1 - real (kind=kind_phys) , intent(in) :: ep_2 - real (kind=kind_phys) , intent(in) :: cp + real (kind=kind_phys) , intent(in) :: ep_1 !< + real (kind=kind_phys) , intent(in) :: ep_2 !< + real (kind=kind_phys) , intent(in) :: cp !< real (kind=kind_phys) , intent(in) :: dt !< time step [sec] real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< layer-bottom depth from soil surf (m) real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) lowest model layer @@ -473,13 +474,13 @@ subroutine noahmp_sflx (parameters, & real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) - logical , intent(in) :: thsfc_loc - real (kind=kind_phys) , intent(in) :: prslkix ! in exner function - real (kind=kind_phys) , intent(in) :: prsik1x ! in exner function - real (kind=kind_phys) , intent(in) :: prslk1x ! in exner function - real (kind=kind_phys) , intent(in) :: garea1 ! in exner function + logical , intent(in) :: thsfc_loc !< + real (kind=kind_phys) , intent(in) :: prslkix !< in exner function + real (kind=kind_phys) , intent(in) :: prsik1x !< in exner function + real (kind=kind_phys) , intent(in) :: prslk1x !< in exner function + real (kind=kind_phys) , intent(in) :: garea1 !< in exner function - real (kind=kind_phys) , intent(in) :: pblhx ! pbl height + real (kind=kind_phys) , intent(in) :: pblhx !< pbl height integer , intent(in) :: iz0tlnd !< z0t option integer , intent(in) :: itime !< integer , intent(in) :: psi_opt !< @@ -955,35 +956,35 @@ subroutine atm (parameters,sfcprs ,sfctmp ,q2 , ! inputs type (noahmp_parameters), intent(in) :: parameters - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys) , intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) - real (kind=kind_phys) , intent(in) :: prcpconv ! convective precipitation entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpnonc ! non-convective precipitation entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpshcv ! shallow convective precip entering [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpsnow ! snow entering land model [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcpgrpl ! graupel entering land model [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: prcphail ! hail entering land model [mm/s] ! mb/an : v3.7 - real (kind=kind_phys) , intent(in) :: soldn !downward shortwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle [0-1] + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys) , intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) + real (kind=kind_phys) , intent(in) :: prcpconv !< convective precipitation entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpnonc !< non-convective precipitation entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpshcv !< shallow convective precip entering [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpsnow !< snow entering land model [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcpgrpl !< graupel entering land model [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: prcphail !< hail entering land model [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(in) :: soldn !< downward shortwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle [0-1] ! outputs - real (kind=kind_phys) , intent(out) :: thair !potential temperature (k) - real (kind=kind_phys) , intent(out) :: qair !specific humidity (kg/kg) (q2/(1+q2)) - real (kind=kind_phys) , intent(out) :: eair !vapor pressure air (pa) - real (kind=kind_phys) , intent(out) :: rhoair !density air (kg/m3) - real (kind=kind_phys) , intent(out) :: qprecc !convective precipitation (mm/s) - real (kind=kind_phys) , intent(out) :: qprecl !large-scale precipitation (mm/s) - real (kind=kind_phys), dimension( 1: 2), intent(out) :: solad !incoming direct solar radiation (w/m2) - real (kind=kind_phys), dimension( 1: 2), intent(out) :: solai !incoming diffuse solar radiation (w/m2) - real (kind=kind_phys) , intent(out) :: swdown !downward solar filtered by sun angle [w/m2] - real (kind=kind_phys) , intent(out) :: bdfall !!bulk density of snowfall (kg/m3) ajn - real (kind=kind_phys) , intent(out) :: rain !rainfall (mm/s) ajn - real (kind=kind_phys) , intent(out) :: snow !liquid equivalent snowfall (mm/s) ajn - real (kind=kind_phys) , intent(out) :: fp !fraction of area receiving precipitation ajn - real (kind=kind_phys) , intent(out) :: fpice !fraction of ice ajn - real (kind=kind_phys) , intent(out) :: prcp !total precipitation [mm/s] ! mb/an : v3.7 + real (kind=kind_phys) , intent(out) :: thair !< potential temperature (k) + real (kind=kind_phys) , intent(out) :: qair !< specific humidity (kg/kg) (q2/(1+q2)) + real (kind=kind_phys) , intent(out) :: eair !< vapor pressure air (pa) + real (kind=kind_phys) , intent(out) :: rhoair !< density air (kg/m3) + real (kind=kind_phys) , intent(out) :: qprecc !< convective precipitation (mm/s) + real (kind=kind_phys) , intent(out) :: qprecl !< large-scale precipitation (mm/s) + real (kind=kind_phys), dimension( 1: 2), intent(out) :: solad !< incoming direct solar radiation (w/m2) + real (kind=kind_phys), dimension( 1: 2), intent(out) :: solai !< incoming diffuse solar radiation (w/m2) + real (kind=kind_phys) , intent(out) :: swdown !< downward solar filtered by sun angle [w/m2] + real (kind=kind_phys) , intent(out) :: bdfall !< bulk density of snowfall (kg/m3) ajn + real (kind=kind_phys) , intent(out) :: rain !< rainfall (mm/s) ajn + real (kind=kind_phys) , intent(out) :: snow !< liquid equivalent snowfall (mm/s) ajn + real (kind=kind_phys) , intent(out) :: fp !< fraction of area receiving precipitation ajn + real (kind=kind_phys) , intent(out) :: fpice !< fraction of ice ajn + real (kind=kind_phys) , intent(out) :: prcp !< total precipitation [mm/s] ! mb/an : v3.7 !locals @@ -1100,23 +1101,23 @@ subroutine phenology (parameters,vegtyp ,croptype, snowh , tv , lat , yea implicit none ! -------------------------------------------------------------------------------------------------- ! inputs - type (noahmp_parameters), intent(in) :: parameters - integer , intent(in ) :: vegtyp !vegetation type - integer , intent(in ) :: croptype !vegetation type - real (kind=kind_phys) , intent(in ) :: snowh !snow height [m] - real (kind=kind_phys) , intent(in ) :: tv !vegetation temperature (k) - real (kind=kind_phys) , intent(in ) :: lat !latitude (radians) - integer , intent(in ) :: yearlen!number of days in the particular year - real (kind=kind_phys) , intent(in ) :: julian !julian day of year (fractional) ( 0 <= julian < yearlen ) - real (kind=kind_phys) , intent(in ) :: troot !root-zone averaged temperature (k) - real (kind=kind_phys) , intent(inout) :: lai !lai, unadjusted for burying by snow - real (kind=kind_phys) , intent(inout) :: sai !sai, unadjusted for burying by snow + type (noahmp_parameters), intent(in) :: parameters !< + integer , intent(in ) :: vegtyp !< vegetation type + integer , intent(in ) :: croptype !< vegetation type + real (kind=kind_phys) , intent(in ) :: snowh !< snow height [m] + real (kind=kind_phys) , intent(in ) :: tv !< vegetation temperature (k) + real (kind=kind_phys) , intent(in ) :: lat !< latitude (radians) + integer , intent(in ) :: yearlen !< number of days in the particular year + real (kind=kind_phys) , intent(in ) :: julian !< julian day of year (fractional) ( 0 <= julian < yearlen ) + real (kind=kind_phys) , intent(in ) :: troot !< root-zone averaged temperature (k) + real (kind=kind_phys) , intent(inout) :: lai !< lai, unadjusted for burying by snow + real (kind=kind_phys) , intent(inout) :: sai !< sai, unadjusted for burying by snow ! outputs - real (kind=kind_phys) , intent(out ) :: elai !leaf area index, after burying by snow - real (kind=kind_phys) , intent(out ) :: esai !stem area index, after burying by snow - real (kind=kind_phys) , intent(out ) :: igs !growing season index (0=off, 1=on) - integer , intent(in ) :: pgs !plant growing stage + real (kind=kind_phys) , intent(out ) :: elai !< leaf area index, after burying by snow + real (kind=kind_phys) , intent(out ) :: esai !< stem area index, after burying by snow + real (kind=kind_phys) , intent(out ) :: igs !< growing season index (0=off, 1=on) + integer , intent(in ) :: pgs !< plant growing stage ! locals @@ -1223,43 +1224,43 @@ subroutine precip_heat (parameters,iloc ,jloc ,vegtyp ,dt ,uu ,vv ! ------------------------ input/output variables -------------------- ! input type (noahmp_parameters), intent(in) :: parameters - integer,intent(in) :: iloc !grid index - integer,intent(in) :: jloc !grid index - integer,intent(in) :: vegtyp !vegetation type - integer,intent(in) :: ist !surface type 1-soil; 2-lake - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: uu !u-direction wind speed [m/s] - real (kind=kind_phys), intent(in) :: vv !v-direction wind speed [m/s] - real (kind=kind_phys), intent(in) :: elai !leaf area index, after burying by snow - real (kind=kind_phys), intent(in) :: esai !stem area index, after burying by snow - real (kind=kind_phys), intent(in) :: fveg !greeness vegetation fraction (-) - real (kind=kind_phys), intent(in) :: bdfall !bulk density of snowfall (kg/m3) - real (kind=kind_phys), intent(in) :: rain !rainfall (mm/s) - real (kind=kind_phys), intent(in) :: snow !snowfall (mm/s) - real (kind=kind_phys), intent(in) :: fp !fraction of the gridcell that receives precipitation - real (kind=kind_phys), intent(in) :: tv !vegetation temperature (k) - real (kind=kind_phys), intent(in) :: sfctmp !model-level temperature (k) - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) + integer,intent(in) :: iloc !< grid index + integer,intent(in) :: jloc !< grid index + integer,intent(in) :: vegtyp !< vegetation type + integer,intent(in) :: ist !< surface type 1-soil; 2-lake + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: uu !< u-direction wind speed [m/s] + real (kind=kind_phys), intent(in) :: vv !< v-direction wind speed [m/s] + real (kind=kind_phys), intent(in) :: elai !< leaf area index, after burying by snow + real (kind=kind_phys), intent(in) :: esai !< stem area index, after burying by snow + real (kind=kind_phys), intent(in) :: fveg !< greeness vegetation fraction (-) + real (kind=kind_phys), intent(in) :: bdfall !< bulk density of snowfall (kg/m3) + real (kind=kind_phys), intent(in) :: rain !< rainfall (mm/s) + real (kind=kind_phys), intent(in) :: snow !< snowfall (mm/s) + real (kind=kind_phys), intent(in) :: fp !< fraction of the gridcell that receives precipitation + real (kind=kind_phys), intent(in) :: tv !< vegetation temperature (k) + real (kind=kind_phys), intent(in) :: sfctmp !< model-level temperature (k) + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) ! input & output - real (kind=kind_phys), intent(inout) :: canliq !intercepted liquid water (mm) - real (kind=kind_phys), intent(inout) :: canice !intercepted ice mass (mm) + real (kind=kind_phys), intent(inout) :: canliq !< intercepted liquid water (mm) + real (kind=kind_phys), intent(inout) :: canice !< intercepted ice mass (mm) ! output - real (kind=kind_phys), intent(out) :: qintr !interception rate for rain (mm/s) - real (kind=kind_phys), intent(out) :: qdripr !drip rate for rain (mm/s) - real (kind=kind_phys), intent(out) :: qthror !throughfall for rain (mm/s) - real (kind=kind_phys), intent(out) :: qints !interception (loading) rate for snowfall (mm/s) - real (kind=kind_phys), intent(out) :: qdrips !drip (unloading) rate for intercepted snow (mm/s) - real (kind=kind_phys), intent(out) :: qthros !throughfall of snowfall (mm/s) - real (kind=kind_phys), intent(out) :: pahv !precipitation advected heat - vegetation net (w/m2) - real (kind=kind_phys), intent(out) :: pahg !precipitation advected heat - under canopy net (w/m2) - real (kind=kind_phys), intent(out) :: pahb !precipitation advected heat - bare ground net (w/m2) - real (kind=kind_phys), intent(out) :: qrain !rain at ground srf (mm/s) [+] - real (kind=kind_phys), intent(out) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(out) :: snowhin !snow depth increasing rate (m/s) - real (kind=kind_phys), intent(out) :: fwet !wetted or snowed fraction of the canopy (-) - real (kind=kind_phys), intent(out) :: cmc !intercepted water (mm) + real (kind=kind_phys), intent(out) :: qintr !< interception rate for rain (mm/s) + real (kind=kind_phys), intent(out) :: qdripr !< drip rate for rain (mm/s) + real (kind=kind_phys), intent(out) :: qthror !< throughfall for rain (mm/s) + real (kind=kind_phys), intent(out) :: qints !< interception (loading) rate for snowfall (mm/s) + real (kind=kind_phys), intent(out) :: qdrips !< drip (unloading) rate for intercepted snow (mm/s) + real (kind=kind_phys), intent(out) :: qthros !< throughfall of snowfall (mm/s) + real (kind=kind_phys), intent(out) :: pahv !< precipitation advected heat - vegetation net (w/m2) + real (kind=kind_phys), intent(out) :: pahg !< precipitation advected heat - under canopy net (w/m2) + real (kind=kind_phys), intent(out) :: pahb !< precipitation advected heat - bare ground net (w/m2) + real (kind=kind_phys), intent(out) :: qrain !< rain at ground srf (mm/s) [+] + real (kind=kind_phys), intent(out) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(out) :: snowhin !< snow depth increasing rate (m/s) + real (kind=kind_phys), intent(out) :: fwet !< wetted or snowed fraction of the canopy (-) + real (kind=kind_phys), intent(out) :: cmc !< intercepted water (mm) ! -------------------------------------------------------------------- ! ------------------------ local variables --------------------------- @@ -1456,47 +1457,47 @@ subroutine error (parameters,swdown ,fsa ,fsr ,fira ,fsh ,fcev , & ! -------------------------------------------------------------------------------------------------- ! inputs type (noahmp_parameters), intent(in) :: parameters - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !number of soil layers - integer , intent(in) :: ist !surface type 1->soil; 2->lake - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - real (kind=kind_phys) , intent(in) :: swdown !downward solar filtered by sun angle [w/m2] - real (kind=kind_phys) , intent(in) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys) , intent(in) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys) , intent(in) :: fira !total net longwave rad (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fsh !total sensible heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fcev !canopy evaporation heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fgev !ground evaporation heat (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: fctr !transpiration heat flux (w/m2) [+ to atm] - real (kind=kind_phys) , intent(in) :: ssoil !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys) , intent(in) :: fveg - real (kind=kind_phys) , intent(in) :: sav - real (kind=kind_phys) , intent(in) :: sag - real (kind=kind_phys) , intent(in) :: fsrv - real (kind=kind_phys) , intent(in) :: fsrg - real (kind=kind_phys) , intent(in) :: zwt - - real (kind=kind_phys) , intent(in) :: prcp !precipitation rate (kg m-2 s-1) - real (kind=kind_phys) , intent(in) :: ecan !evaporation of intercepted water (mm/s) - real (kind=kind_phys) , intent(in) :: etran !transpiration rate (mm/s) - real (kind=kind_phys) , intent(in) :: edir !soil surface evaporation rate[mm/s] - real (kind=kind_phys) , intent(in) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys) , intent(in) :: runsub !baseflow (saturation excess) [mm/s] - real (kind=kind_phys) , intent(in) :: canliq !intercepted liquid water (mm) - real (kind=kind_phys) , intent(in) :: canice !intercepted ice mass (mm) - real (kind=kind_phys) , intent(in) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smc !soil moisture (ice + liq.) [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys) , intent(in) :: wa !water storage in aquifer [mm] - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: beg_wb !water storage at begin of a timesetp [mm] - real (kind=kind_phys) , intent(out) :: errwat !error in water balance [mm/timestep] - real (kind=kind_phys), intent(in) :: pah !precipitation advected heat - total (w/m2) - real (kind=kind_phys), intent(in) :: pahv !precipitation advected heat - total (w/m2) - real (kind=kind_phys), intent(in) :: pahg !precipitation advected heat - total (w/m2) - real (kind=kind_phys), intent(in) :: pahb !precipitation advected heat - total (w/m2) - real (kind=kind_phys), intent(in) :: canhs !canopy heat storage change (w/m2) C.He added based on GY Niu's communication + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< number of soil layers + integer , intent(in) :: ist !< surface type 1->soil; 2->lake + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + real (kind=kind_phys) , intent(in) :: swdown !< downward solar filtered by sun angle [w/m2] + real (kind=kind_phys) , intent(in) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys) , intent(in) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys) , intent(in) :: fira !< total net longwave rad (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fsh !< total sensible heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fcev !< canopy evaporation heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fgev !< ground evaporation heat (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: fctr !< transpiration heat flux (w/m2) [+ to atm] + real (kind=kind_phys) , intent(in) :: ssoil !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys) , intent(in) :: fveg !< + real (kind=kind_phys) , intent(in) :: sav !< + real (kind=kind_phys) , intent(in) :: sag !< + real (kind=kind_phys) , intent(in) :: fsrv !< + real (kind=kind_phys) , intent(in) :: fsrg !< + real (kind=kind_phys) , intent(in) :: zwt !< + + real (kind=kind_phys) , intent(in) :: prcp !< precipitation rate (kg m-2 s-1) + real (kind=kind_phys) , intent(in) :: ecan !< evaporation of intercepted water (mm/s) + real (kind=kind_phys) , intent(in) :: etran !< transpiration rate (mm/s) + real (kind=kind_phys) , intent(in) :: edir !< soil surface evaporation rate[mm/s] + real (kind=kind_phys) , intent(in) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys) , intent(in) :: runsub !< baseflow (saturation excess) [mm/s] + real (kind=kind_phys) , intent(in) :: canliq !< intercepted liquid water (mm) + real (kind=kind_phys) , intent(in) :: canice !< intercepted ice mass (mm) + real (kind=kind_phys) , intent(in) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smc !< soil moisture (ice + liq.) [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys) , intent(in) :: wa !< water storage in aquifer [mm] + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: beg_wb !< water storage at begin of a timesetp [mm] + real (kind=kind_phys) , intent(out) :: errwat !< error in water balance [mm/timestep] + real (kind=kind_phys), intent(in) :: pah !< precipitation advected heat - total (w/m2) + real (kind=kind_phys), intent(in) :: pahv !< precipitation advected heat - total (w/m2) + real (kind=kind_phys), intent(in) :: pahg !< precipitation advected heat - total (w/m2) + real (kind=kind_phys), intent(in) :: pahb !< precipitation advected heat - total (w/m2) + real (kind=kind_phys), intent(in) :: canhs !< canopy heat storage change (w/m2) C.He added based on GY Niu's communication #ifdef CCPP character(len=*) , intent(inout) :: errmsg @@ -1716,157 +1717,157 @@ subroutine energy (parameters,ice ,vegtyp ,ist ,nsnow ,nsoil , & !in ! -------------------------------------------------------------------------------------------------- ! inputs type (noahmp_parameters), intent(in) :: parameters - integer , intent(in) :: iloc - integer , intent(in) :: jloc - integer , intent(in) :: ice !ice (ice = 1) - integer , intent(in) :: vegtyp !vegetation physiology type - integer , intent(in) :: ist !surface type: 1->soil; 2->lake - integer , intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: nsoil !number of soil layers - integer , intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys) , intent(in) :: dt !time step [sec] - real (kind=kind_phys) , intent(in) :: qsnow !snowfall on the ground (mm/s) - real (kind=kind_phys) , intent(in) :: rhoair !density air (kg/m3) - real (kind=kind_phys) , intent(in) :: eair !vapor pressure air (pa) - real (kind=kind_phys) , intent(in) :: sfcprs !pressure (pa) - - logical , intent(in) :: thsfc_loc - real (kind=kind_phys) , intent(in) :: prslkix ! in exner function - real (kind=kind_phys) , intent(in) :: prsik1x ! in exner function - real (kind=kind_phys) , intent(in) :: prslk1x ! in exner function - real (kind=kind_phys) , intent(in) :: garea1 - - real (kind=kind_phys) , intent(in) :: pblhx ! pbl height - real (kind=kind_phys) , intent(in) :: ep_1 - real (kind=kind_phys) , intent(in) :: ep_2 - real (kind=kind_phys) , intent(in) :: cp - integer , intent(in) :: iz0tlnd - integer , intent(in) :: itime - integer , intent(in) :: psi_opt - - real (kind=kind_phys) , intent(in) :: qair !specific humidity (kg/kg) - real (kind=kind_phys) , intent(in) :: sfctmp !air temperature (k) - real (kind=kind_phys) , intent(in) :: thair !potential temperature (k) - real (kind=kind_phys) , intent(in) :: lwdn !downward longwave radiation (w/m2) - real (kind=kind_phys) , intent(in) :: uu !wind speed in e-w dir (m/s) - real (kind=kind_phys) , intent(in) :: vv !wind speed in n-s dir (m/s) - real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solad !incoming direct solar rad. (w/m2) - real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solai !incoming diffuse solar rad. (w/m2) - real (kind=kind_phys) , intent(in) :: cosz !cosine solar zenith angle (0-1) - real (kind=kind_phys) , intent(in) :: elai !lai adjusted for burying by snow - real (kind=kind_phys) , intent(in) :: esai !lai adjusted for burying by snow - real (kind=kind_phys) , intent(in) :: fwet !fraction of canopy that is wet [-] - real (kind=kind_phys) , intent(in) :: fveg !greeness vegetation fraction (-) + integer , intent(in) :: iloc !< + integer , intent(in) :: jloc !< + integer , intent(in) :: ice !< ice (ice = 1) + integer , intent(in) :: vegtyp !< vegetation physiology type + integer , intent(in) :: ist !< surface type: 1->soil; 2->lake + integer , intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: nsoil !< number of soil layers + integer , intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys) , intent(in) :: dt !< time step [sec] + real (kind=kind_phys) , intent(in) :: qsnow !< snowfall on the ground (mm/s) + real (kind=kind_phys) , intent(in) :: rhoair !< density air (kg/m3) + real (kind=kind_phys) , intent(in) :: eair !< vapor pressure air (pa) + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure (pa) + + logical , intent(in) :: thsfc_loc !< + real (kind=kind_phys) , intent(in) :: prslkix !< in exner function + real (kind=kind_phys) , intent(in) :: prsik1x !< in exner function + real (kind=kind_phys) , intent(in) :: prslk1x !< in exner function + real (kind=kind_phys) , intent(in) :: garea1 !< + + real (kind=kind_phys) , intent(in) :: pblhx !< pbl height + real (kind=kind_phys) , intent(in) :: ep_1 !< + real (kind=kind_phys) , intent(in) :: ep_2 !< + real (kind=kind_phys) , intent(in) :: cp !< + integer , intent(in) :: iz0tlnd !< + integer , intent(in) :: itime !< + integer , intent(in) :: psi_opt !< + + real (kind=kind_phys) , intent(in) :: qair !< specific humidity (kg/kg) + real (kind=kind_phys) , intent(in) :: sfctmp !< air temperature (k) + real (kind=kind_phys) , intent(in) :: thair !< potential temperature (k) + real (kind=kind_phys) , intent(in) :: lwdn !< downward longwave radiation (w/m2) + real (kind=kind_phys) , intent(in) :: uu !< wind speed in e-w dir (m/s) + real (kind=kind_phys) , intent(in) :: vv !< wind speed in n-s dir (m/s) + real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solad !< incoming direct solar rad. (w/m2) + real (kind=kind_phys) , dimension( 1: 2), intent(in) :: solai !< incoming diffuse solar rad. (w/m2) + real (kind=kind_phys) , intent(in) :: cosz !< cosine solar zenith angle (0-1) + real (kind=kind_phys) , intent(in) :: elai !< lai adjusted for burying by snow + real (kind=kind_phys) , intent(in) :: esai !< lai adjusted for burying by snow + real (kind=kind_phys) , intent(in) :: fwet !< fraction of canopy that is wet [-] + real (kind=kind_phys) , intent(in) :: fveg !\ingroup NoahMP_LSM +!! Calculate solar radiation: absorbed & reflected by the ground and canopy. subroutine radiation (parameters,vegtyp ,ist ,ice ,nsoil , & !in sneqvo ,sneqv ,dt ,cosz ,snowh , & !in tg ,tv ,fsno ,qsnow ,fwet , & !in @@ -2716,52 +2718,52 @@ subroutine radiation (parameters,vegtyp ,ist ,ice ,nsoil , & !in ! -------------------------------------------------------------------------------------------------- ! input type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc - integer, intent(in) :: jloc - integer, intent(in) :: vegtyp !vegetation type - integer, intent(in) :: ist !surface type - integer, intent(in) :: ice !ice (ice = 1) - integer, intent(in) :: nsoil !number of soil layers - - real (kind=kind_phys), intent(in) :: dt !time step [s] - real (kind=kind_phys), intent(in) :: qsnow !snowfall (mm/s) - real (kind=kind_phys), intent(in) :: sneqvo !snow mass at last time step(mm) - real (kind=kind_phys), intent(in) :: sneqv !snow mass (mm) - real (kind=kind_phys), intent(in) :: snowh !snow height (mm) - real (kind=kind_phys), intent(in) :: cosz !cosine solar zenith angle (0-1) - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: tv !vegetation temperature (k) - real (kind=kind_phys), intent(in) :: elai !lai, one-sided, adjusted for burying by snow - real (kind=kind_phys), intent(in) :: esai !sai, one-sided, adjusted for burying by snow - real (kind=kind_phys), intent(in) :: fwet !fraction of canopy that is wet - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: smc !volumetric soil water [m3/m3] - real (kind=kind_phys), dimension(1:2) , intent(in) :: solad !incoming direct solar radiation (w/m2) - real (kind=kind_phys), dimension(1:2) , intent(in) :: solai !incoming diffuse solar radiation (w/m2) - real (kind=kind_phys), intent(in) :: fsno !snow cover fraction (-) - real (kind=kind_phys), intent(in) :: fveg !green vegetation fraction [0.0-1.0] + integer, intent(in) :: iloc !< + integer, intent(in) :: jloc !< + integer, intent(in) :: vegtyp !< vegetation type + integer, intent(in) :: ist !< surface type + integer, intent(in) :: ice !< ice (ice = 1) + integer, intent(in) :: nsoil !< number of soil layers + + real (kind=kind_phys), intent(in) :: dt !< time step [s] + real (kind=kind_phys), intent(in) :: qsnow !< snowfall (mm/s) + real (kind=kind_phys), intent(in) :: sneqvo !< snow mass at last time step(mm) + real (kind=kind_phys), intent(in) :: sneqv !< snow mass (mm) + real (kind=kind_phys), intent(in) :: snowh !< snow height (mm) + real (kind=kind_phys), intent(in) :: cosz !< cosine solar zenith angle (0-1) + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: tv !< vegetation temperature (k) + real (kind=kind_phys), intent(in) :: elai !< lai, one-sided, adjusted for burying by snow + real (kind=kind_phys), intent(in) :: esai !< sai, one-sided, adjusted for burying by snow + real (kind=kind_phys), intent(in) :: fwet !< fraction of canopy that is wet + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: smc !< volumetric soil water [m3/m3] + real (kind=kind_phys), dimension(1:2) , intent(in) :: solad !< incoming direct solar radiation (w/m2) + real (kind=kind_phys), dimension(1:2) , intent(in) :: solai !< incoming diffuse solar radiation (w/m2) + real (kind=kind_phys), intent(in) :: fsno !< snow cover fraction (-) + real (kind=kind_phys), intent(in) :: fveg !< green vegetation fraction [0.0-1.0] ! inout - real (kind=kind_phys), intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys), intent(inout) :: tauss !non-dimensional snow age. + real (kind=kind_phys), intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys), intent(inout) :: tauss !< non-dimensional snow age. ! output - real (kind=kind_phys), intent(out) :: fsun !sunlit fraction of canopy (-) - real (kind=kind_phys), intent(out) :: laisun !sunlit leaf area (-) - real (kind=kind_phys), intent(out) :: laisha !shaded leaf area (-) - real (kind=kind_phys), intent(out) :: parsun !average absorbed par for sunlit leaves (w/m2) - real (kind=kind_phys), intent(out) :: parsha !average absorbed par for shaded leaves (w/m2) - real (kind=kind_phys), intent(out) :: sav !solar radiation absorbed by vegetation (w/m2) - real (kind=kind_phys), intent(out) :: sag !solar radiation absorbed by ground (w/m2) - real (kind=kind_phys), intent(out) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys), intent(out) :: fsr !total reflected solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: fsun !< sunlit fraction of canopy (-) + real (kind=kind_phys), intent(out) :: laisun !< sunlit leaf area (-) + real (kind=kind_phys), intent(out) :: laisha !< shaded leaf area (-) + real (kind=kind_phys), intent(out) :: parsun !< average absorbed par for sunlit leaves (w/m2) + real (kind=kind_phys), intent(out) :: parsha !< average absorbed par for shaded leaves (w/m2) + real (kind=kind_phys), intent(out) :: sav !< solar radiation absorbed by vegetation (w/m2) + real (kind=kind_phys), intent(out) :: sag !< solar radiation absorbed by ground (w/m2) + real (kind=kind_phys), intent(out) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: fsr !< total reflected solar radiation (w/m2) !jref:start - real (kind=kind_phys), intent(out) :: fsrv !veg. reflected solar radiation (w/m2) - real (kind=kind_phys), intent(out) :: fsrg !ground reflected solar radiation (w/m2) - real (kind=kind_phys), intent(out) :: bgap - real (kind=kind_phys), intent(out) :: wgap - real (kind=kind_phys), dimension(1:2), intent(out) :: albsnd !snow albedo (direct) - real (kind=kind_phys), dimension(1:2), intent(out) :: albsni !snow albedo (diffuse) + real (kind=kind_phys), intent(out) :: fsrv !< veg. reflected solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: fsrg !< ground reflected solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: bgap !< + real (kind=kind_phys), intent(out) :: wgap !< + real (kind=kind_phys), dimension(1:2), intent(out) :: albsnd !< snow albedo (direct) + real (kind=kind_phys), dimension(1:2), intent(out) :: albsni !< snow albedo (diffuse) !jref:end ! local @@ -2851,44 +2853,44 @@ subroutine albedo (parameters,vegtyp ,ist ,ice ,nsoil , & !in implicit none ! -------------------------------------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc - integer, intent(in) :: jloc - integer, intent(in) :: nsoil !number of soil layers - integer, intent(in) :: vegtyp !vegetation type - integer, intent(in) :: ist !surface type - integer, intent(in) :: ice !ice (ice = 1) - - real (kind=kind_phys), intent(in) :: dt !time step [sec] - real (kind=kind_phys), intent(in) :: qsnow !snowfall - real (kind=kind_phys), intent(in) :: cosz !cosine solar zenith angle for next time step - real (kind=kind_phys), intent(in) :: snowh !snow height (mm) - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: tv !vegetation temperature (k) - real (kind=kind_phys), intent(in) :: elai !lai, one-sided, adjusted for burying by snow - real (kind=kind_phys), intent(in) :: esai !sai, one-sided, adjusted for burying by snow - real (kind=kind_phys), intent(in) :: fsno !fraction of grid covered by snow - real (kind=kind_phys), intent(in) :: fwet !fraction of canopy that is wet - real (kind=kind_phys), intent(in) :: sneqvo !snow mass at last time step(mm) - real (kind=kind_phys), intent(in) :: sneqv !snow mass (mm) - real (kind=kind_phys), intent(in) :: fveg !green vegetation fraction [0.0-1.0] - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: smc !volumetric soil water (m3/m3) + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< + integer, intent(in) :: jloc !< + integer, intent(in) :: nsoil !< number of soil layers + integer, intent(in) :: vegtyp !< vegetation type + integer, intent(in) :: ist !< surface type + integer, intent(in) :: ice !< ice (ice = 1) + + real (kind=kind_phys), intent(in) :: dt !< time step [sec] + real (kind=kind_phys), intent(in) :: qsnow !< snowfall + real (kind=kind_phys), intent(in) :: cosz !< cosine solar zenith angle for next time step + real (kind=kind_phys), intent(in) :: snowh !< snow height (mm) + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: tv !< vegetation temperature (k) + real (kind=kind_phys), intent(in) :: elai !< lai, one-sided, adjusted for burying by snow + real (kind=kind_phys), intent(in) :: esai !< sai, one-sided, adjusted for burying by snow + real (kind=kind_phys), intent(in) :: fsno !< fraction of grid covered by snow + real (kind=kind_phys), intent(in) :: fwet !< fraction of canopy that is wet + real (kind=kind_phys), intent(in) :: sneqvo !< snow mass at last time step(mm) + real (kind=kind_phys), intent(in) :: sneqv !< snow mass (mm) + real (kind=kind_phys), intent(in) :: fveg !< green vegetation fraction [0.0-1.0] + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: smc !< volumetric soil water (m3/m3) ! inout - real (kind=kind_phys), intent(inout) :: albold !snow albedo at last time step (class type) - real (kind=kind_phys), intent(inout) :: tauss !non-dimensional snow age + real (kind=kind_phys), intent(inout) :: albold !< snow albedo at last time step (class type) + real (kind=kind_phys), intent(inout) :: tauss !< non-dimensional snow age ! output - real (kind=kind_phys), dimension(1: 2), intent(out) :: albgrd !ground albedo (direct) - real (kind=kind_phys), dimension(1: 2), intent(out) :: albgri !ground albedo (diffuse) - real (kind=kind_phys), dimension(1: 2), intent(out) :: albd !surface albedo (direct) - real (kind=kind_phys), dimension(1: 2), intent(out) :: albi !surface albedo (diffuse) - real (kind=kind_phys), dimension(1: 2), intent(out) :: fabd !flux abs by veg (per unit direct flux) - real (kind=kind_phys), dimension(1: 2), intent(out) :: fabi !flux abs by veg (per unit diffuse flux) - real (kind=kind_phys), dimension(1: 2), intent(out) :: ftdd !down direct flux below veg (per unit dir flux) - real (kind=kind_phys), dimension(1: 2), intent(out) :: ftid !down diffuse flux below veg (per unit dir flux) - real (kind=kind_phys), dimension(1: 2), intent(out) :: ftii !down diffuse flux below veg (per unit dif flux) - real (kind=kind_phys), intent(out) :: fsun !sunlit fraction of canopy (-) + real (kind=kind_phys), dimension(1: 2), intent(out) :: albgrd !< ground albedo (direct) + real (kind=kind_phys), dimension(1: 2), intent(out) :: albgri !< ground albedo (diffuse) + real (kind=kind_phys), dimension(1: 2), intent(out) :: albd !< surface albedo (direct) + real (kind=kind_phys), dimension(1: 2), intent(out) :: albi !< surface albedo (diffuse) + real (kind=kind_phys), dimension(1: 2), intent(out) :: fabd !< flux abs by veg (per unit direct flux) + real (kind=kind_phys), dimension(1: 2), intent(out) :: fabi !< flux abs by veg (per unit diffuse flux) + real (kind=kind_phys), dimension(1: 2), intent(out) :: ftdd !< down direct flux below veg (per unit dir flux) + real (kind=kind_phys), dimension(1: 2), intent(out) :: ftid !< down diffuse flux below veg (per unit dir flux) + real (kind=kind_phys), dimension(1: 2), intent(out) :: ftii !< down diffuse flux below veg (per unit dif flux) + real (kind=kind_phys), intent(out) :: fsun !< sunlit fraction of canopy (-) !jref:start real (kind=kind_phys), dimension(1: 2), intent(out) :: frevd real (kind=kind_phys), dimension(1: 2), intent(out) :: frevi @@ -3021,6 +3023,7 @@ end subroutine albedo !== begin surrad =================================================================================== !>\ingroup NoahMP_LSM +!! surface raditiation subroutine surrad (parameters,mpe ,fsun ,fsha ,elai ,vai , & !in laisun ,laisha ,solad ,solai ,fabd , & !in fabi ,ftdd ,ftid ,ftii ,albgrd , & !in @@ -3035,45 +3038,45 @@ subroutine surrad (parameters,mpe ,fsun ,fsha ,elai ,vai , & !i ! -------------------------------------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc - integer, intent(in) :: jloc - real (kind=kind_phys), intent(in) :: mpe !prevents underflow errors if division by zero - - real (kind=kind_phys), intent(in) :: fsun !sunlit fraction of canopy - real (kind=kind_phys), intent(in) :: fsha !shaded fraction of canopy - real (kind=kind_phys), intent(in) :: elai !leaf area, one-sided - real (kind=kind_phys), intent(in) :: vai !leaf + stem area, one-sided - real (kind=kind_phys), intent(in) :: laisun !sunlit leaf area index, one-sided - real (kind=kind_phys), intent(in) :: laisha !shaded leaf area index, one-sided - - real (kind=kind_phys), dimension(1:2), intent(in) :: solad !incoming direct solar radiation (w/m2) - real (kind=kind_phys), dimension(1:2), intent(in) :: solai !incoming diffuse solar radiation (w/m2) - real (kind=kind_phys), dimension(1:2), intent(in) :: fabd !flux abs by veg (per unit incoming direct flux) - real (kind=kind_phys), dimension(1:2), intent(in) :: fabi !flux abs by veg (per unit incoming diffuse flux) - real (kind=kind_phys), dimension(1:2), intent(in) :: ftdd !down dir flux below veg (per incoming dir flux) - real (kind=kind_phys), dimension(1:2), intent(in) :: ftid !down dif flux below veg (per incoming dir flux) - real (kind=kind_phys), dimension(1:2), intent(in) :: ftii !down dif flux below veg (per incoming dif flux) - real (kind=kind_phys), dimension(1:2), intent(in) :: albgrd !ground albedo (direct) - real (kind=kind_phys), dimension(1:2), intent(in) :: albgri !ground albedo (diffuse) - real (kind=kind_phys), dimension(1:2), intent(in) :: albd !overall surface albedo (direct) - real (kind=kind_phys), dimension(1:2), intent(in) :: albi !overall surface albedo (diffuse) - - real (kind=kind_phys), dimension(1:2), intent(in) :: frevd !overall surface albedo veg (direct) - real (kind=kind_phys), dimension(1:2), intent(in) :: frevi !overall surface albedo veg (diffuse) - real (kind=kind_phys), dimension(1:2), intent(in) :: fregd !overall surface albedo grd (direct) - real (kind=kind_phys), dimension(1:2), intent(in) :: fregi !overall surface albedo grd (diffuse) + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< + integer, intent(in) :: jloc !< + real (kind=kind_phys), intent(in) :: mpe !< prevents underflow errors if division by zero + + real (kind=kind_phys), intent(in) :: fsun !< sunlit fraction of canopy + real (kind=kind_phys), intent(in) :: fsha !< shaded fraction of canopy + real (kind=kind_phys), intent(in) :: elai !< leaf area, one-sided + real (kind=kind_phys), intent(in) :: vai !< leaf + stem area, one-sided + real (kind=kind_phys), intent(in) :: laisun !< sunlit leaf area index, one-sided + real (kind=kind_phys), intent(in) :: laisha !< shaded leaf area index, one-sided + + real (kind=kind_phys), dimension(1:2), intent(in) :: solad !< incoming direct solar radiation (w/m2) + real (kind=kind_phys), dimension(1:2), intent(in) :: solai !< incoming diffuse solar radiation (w/m2) + real (kind=kind_phys), dimension(1:2), intent(in) :: fabd !< flux abs by veg (per unit incoming direct flux) + real (kind=kind_phys), dimension(1:2), intent(in) :: fabi !< flux abs by veg (per unit incoming diffuse flux) + real (kind=kind_phys), dimension(1:2), intent(in) :: ftdd !< down dir flux below veg (per incoming dir flux) + real (kind=kind_phys), dimension(1:2), intent(in) :: ftid !< down dif flux below veg (per incoming dir flux) + real (kind=kind_phys), dimension(1:2), intent(in) :: ftii !< down dif flux below veg (per incoming dif flux) + real (kind=kind_phys), dimension(1:2), intent(in) :: albgrd !< ground albedo (direct) + real (kind=kind_phys), dimension(1:2), intent(in) :: albgri !< ground albedo (diffuse) + real (kind=kind_phys), dimension(1:2), intent(in) :: albd !< overall surface albedo (direct) + real (kind=kind_phys), dimension(1:2), intent(in) :: albi !< overall surface albedo (diffuse) + + real (kind=kind_phys), dimension(1:2), intent(in) :: frevd !< overall surface albedo veg (direct) + real (kind=kind_phys), dimension(1:2), intent(in) :: frevi !< overall surface albedo veg (diffuse) + real (kind=kind_phys), dimension(1:2), intent(in) :: fregd !< overall surface albedo grd (direct) + real (kind=kind_phys), dimension(1:2), intent(in) :: fregi !< overall surface albedo grd (diffuse) ! output - real (kind=kind_phys), intent(out) :: parsun !average absorbed par for sunlit leaves (w/m2) - real (kind=kind_phys), intent(out) :: parsha !average absorbed par for shaded leaves (w/m2) - real (kind=kind_phys), intent(out) :: sav !solar radiation absorbed by vegetation (w/m2) - real (kind=kind_phys), intent(out) :: sag !solar radiation absorbed by ground (w/m2) - real (kind=kind_phys), intent(out) :: fsa !total absorbed solar radiation (w/m2) - real (kind=kind_phys), intent(out) :: fsr !total reflected solar radiation (w/m2) - real (kind=kind_phys), intent(out) :: fsrv !reflected solar radiation by vegetation - real (kind=kind_phys), intent(out) :: fsrg !reflected solar radiation by ground + real (kind=kind_phys), intent(out) :: parsun !< average absorbed par for sunlit leaves (w/m2) + real (kind=kind_phys), intent(out) :: parsha !< average absorbed par for shaded leaves (w/m2) + real (kind=kind_phys), intent(out) :: sav !< solar radiation absorbed by vegetation (w/m2) + real (kind=kind_phys), intent(out) :: sag !< solar radiation absorbed by ground (w/m2) + real (kind=kind_phys), intent(out) :: fsa !< total absorbed solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: fsr !< total reflected solar radiation (w/m2) + real (kind=kind_phys), intent(out) :: fsrv !< reflected solar radiation by vegetation + real (kind=kind_phys), intent(out) :: fsrg !< reflected solar radiation by ground ! ------------------------ local variables ---------------------------------------------------- integer :: ib !waveband number (1=vis, 2=nir) @@ -3147,6 +3150,7 @@ end subroutine surrad !== begin snow_age ================================================================================= !>\ingroup NoahMP_LSM +!! subroutine snow_age (parameters,dt,tg,sneqvo,sneqv,tauss,fage) ! ---------------------------------------------------------------------- implicit none @@ -3154,17 +3158,17 @@ subroutine snow_age (parameters,dt,tg,sneqvo,sneqv,tauss,fage) ! from bats ! ------------------------ input/output variables -------------------------------------------------- !input - type (noahmp_parameters), intent(in) :: parameters - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: sneqvo !snow mass at last time step(mm) - real (kind=kind_phys), intent(in) :: sneqv !snow water per unit ground area (mm) + type (noahmp_parameters), intent(in) :: parameters !< + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: sneqvo !< snow mass at last time step(mm) + real (kind=kind_phys), intent(in) :: sneqv !< snow water per unit ground area (mm) !output - real (kind=kind_phys), intent(out) :: fage !snow age + real (kind=kind_phys), intent(out) :: fage !< snow age !input/output - real (kind=kind_phys), intent(inout) :: tauss !non-dimensional snow age + real (kind=kind_phys), intent(inout) :: tauss !< non-dimensional snow age !local real (kind=kind_phys) :: tage !total aging effects real (kind=kind_phys) :: age1 !effects of grain growth due to vapor diffusion @@ -3200,23 +3204,24 @@ end subroutine snow_age !== begin snowalb_bats ============================================================================= !>\ingroup NoahMP_LSM +!! bats snow surface albedo subroutine snowalb_bats (parameters,nband,fsno,cosz,fage,albsnd,albsni) ! -------------------------------------------------------------------------------------------------- implicit none ! -------------------------------------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer,intent(in) :: nband !number of waveband classes + type (noahmp_parameters), intent(in) :: parameters !< + integer,intent(in) :: nband !< number of waveband classes - real (kind=kind_phys),intent(in) :: cosz !cosine solar zenith angle - real (kind=kind_phys),intent(in) :: fsno !snow cover fraction (-) - real (kind=kind_phys),intent(in) :: fage !snow age correction + real (kind=kind_phys),intent(in) :: cosz !< cosine solar zenith angle + real (kind=kind_phys),intent(in) :: fsno !< snow cover fraction (-) + real (kind=kind_phys),intent(in) :: fage !< snow age correction ! output - real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !snow albedo for direct(1=vis, 2=nir) - real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !snow albedo for diffuse + real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !< snow albedo for direct(1=vis, 2=nir) + real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !< snow albedo for diffuse ! --------------------------------------------------------------------------------------------- ! ------------------------ local variables ---------------------------------------------------- @@ -3256,6 +3261,7 @@ end subroutine snowalb_bats !== begin snowalb_class ============================================================================ !>\ingroup NoahMP_LSM +!! class snow surface albedo subroutine snowalb_class (parameters,nband,qsnow,dt,alb,albold,albsnd,albsni,iloc,jloc) ! ---------------------------------------------------------------------- implicit none @@ -3263,21 +3269,21 @@ subroutine snowalb_class (parameters,nband,qsnow,dt,alb,albold,albsnd,albsni,ilo ! input type (noahmp_parameters), intent(in) :: parameters - integer,intent(in) :: iloc !grid index - integer,intent(in) :: jloc !grid index - integer,intent(in) :: nband !number of waveband classes + integer,intent(in) :: iloc !< grid index + integer,intent(in) :: jloc !< grid index + integer,intent(in) :: nband !< number of waveband classes - real (kind=kind_phys),intent(in) :: qsnow !snowfall (mm/s) - real (kind=kind_phys),intent(in) :: dt !time step (sec) - real (kind=kind_phys),intent(in) :: albold !snow albedo at last time step + real (kind=kind_phys),intent(in) :: qsnow !< snowfall (mm/s) + real (kind=kind_phys),intent(in) :: dt !< time step (sec) + real (kind=kind_phys),intent(in) :: albold !< snow albedo at last time step ! in & out - real (kind=kind_phys), intent(inout) :: alb ! + real (kind=kind_phys), intent(inout) :: alb !< ! output - real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !snow albedo for direct(1=vis, 2=nir) - real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !snow albedo for diffuse + real (kind=kind_phys), dimension(1:2),intent(out) :: albsnd !< snow albedo for direct(1=vis, 2=nir) + real (kind=kind_phys), dimension(1:2),intent(out) :: albsni !< snow albedo for diffuse ! --------------------------------------------------------------------------------------------- ! ------------------------ local variables ---------------------------------------------------- @@ -3310,6 +3316,7 @@ end subroutine snowalb_class !== begin groundalb ================================================================================ !>\ingroup NoahMP_LSM +!! ground surface albedo subroutine groundalb (parameters,nsoil ,nband ,ice ,ist , & !in fsno ,smc ,albsnd ,albsni ,cosz , & !in tg ,iloc ,jloc , & !in @@ -3319,24 +3326,24 @@ subroutine groundalb (parameters,nsoil ,nband ,ice ,ist , & !in ! -------------------------------------------------------------------------------------------------- !input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: nsoil !number of soil layers - integer, intent(in) :: nband !number of solar radiation waveband classes - integer, intent(in) :: ice !value of ist for land ice - integer, intent(in) :: ist !surface type - real (kind=kind_phys), intent(in) :: fsno !fraction of surface covered with snow (-) - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), intent(in) :: cosz !cosine solar zenith angle (0-1) - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: smc !volumetric soil water content (m3/m3) - real (kind=kind_phys), dimension(1: 2), intent(in) :: albsnd !direct beam snow albedo (vis, nir) - real (kind=kind_phys), dimension(1: 2), intent(in) :: albsni !diffuse snow albedo (vis, nir) + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: nsoil !< number of soil layers + integer, intent(in) :: nband !< number of solar radiation waveband classes + integer, intent(in) :: ice !< value of ist for land ice + integer, intent(in) :: ist !< surface type + real (kind=kind_phys), intent(in) :: fsno !< fraction of surface covered with snow (-) + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(in) :: cosz !< cosine solar zenith angle (0-1) + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: smc !< volumetric soil water content (m3/m3) + real (kind=kind_phys), dimension(1: 2), intent(in) :: albsnd !< direct beam snow albedo (vis, nir) + real (kind=kind_phys), dimension(1: 2), intent(in) :: albsni !< diffuse snow albedo (vis, nir) !output - real (kind=kind_phys), dimension(1: 2), intent(out) :: albgrd !ground albedo (direct beam: vis, nir) - real (kind=kind_phys), dimension(1: 2), intent(out) :: albgri !ground albedo (diffuse: vis, nir) + real (kind=kind_phys), dimension(1: 2), intent(out) :: albgrd !< ground albedo (direct beam: vis, nir) + real (kind=kind_phys), dimension(1: 2), intent(out) :: albgri !< ground albedo (diffuse: vis, nir) !local @@ -3397,34 +3404,34 @@ subroutine twostream (parameters,ib ,ic ,vegtyp ,cosz ,vai , & ! ! -------------------------------------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: ist !surface type - integer, intent(in) :: ib !waveband number - integer, intent(in) :: ic !0=unit incoming direct; 1=unit incoming diffuse - integer, intent(in) :: vegtyp !vegetation type - - real (kind=kind_phys), intent(in) :: cosz !cosine of direct zenith angle (0-1) - real (kind=kind_phys), intent(in) :: vai !one-sided leaf+stem area index (m2/m2) - real (kind=kind_phys), intent(in) :: fwet !fraction of lai, sai that is wetted (-) - real (kind=kind_phys), intent(in) :: t !surface temperature (k) - - real (kind=kind_phys), dimension(1:2), intent(in) :: albgrd !direct albedo of underlying surface (-) - real (kind=kind_phys), dimension(1:2), intent(in) :: albgri !diffuse albedo of underlying surface (-) - real (kind=kind_phys), dimension(1:2), intent(in) :: rho !leaf+stem reflectance - real (kind=kind_phys), dimension(1:2), intent(in) :: tau !leaf+stem transmittance - real (kind=kind_phys), intent(in) :: fveg !green vegetation fraction [0.0-1.0] + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: ist !< surface type + integer, intent(in) :: ib !< waveband number + integer, intent(in) :: ic !< 0=unit incoming direct; 1=unit incoming diffuse + integer, intent(in) :: vegtyp !< vegetation type + + real (kind=kind_phys), intent(in) :: cosz !< cosine of direct zenith angle (0-1) + real (kind=kind_phys), intent(in) :: vai !< one-sided leaf+stem area index (m2/m2) + real (kind=kind_phys), intent(in) :: fwet !< fraction of lai, sai that is wetted (-) + real (kind=kind_phys), intent(in) :: t !< surface temperature (k) + + real (kind=kind_phys), dimension(1:2), intent(in) :: albgrd !< direct albedo of underlying surface (-) + real (kind=kind_phys), dimension(1:2), intent(in) :: albgri !< diffuse albedo of underlying surface (-) + real (kind=kind_phys), dimension(1:2), intent(in) :: rho !< leaf+stem reflectance + real (kind=kind_phys), dimension(1:2), intent(in) :: tau !< leaf+stem transmittance + real (kind=kind_phys), intent(in) :: fveg !< green vegetation fraction [0.0-1.0] ! output - real (kind=kind_phys), dimension(1:2), intent(out) :: fab !flux abs by veg layer (per unit incoming flux) - real (kind=kind_phys), dimension(1:2), intent(out) :: fre !flux refl above veg layer (per unit incoming flux) - real (kind=kind_phys), dimension(1:2), intent(out) :: ftd !down dir flux below veg layer (per unit in flux) - real (kind=kind_phys), dimension(1:2), intent(out) :: fti !down dif flux below veg layer (per unit in flux) - real (kind=kind_phys), intent(out) :: gdir !projected leaf+stem area in solar direction - real (kind=kind_phys), dimension(1:2), intent(out) :: frev !flux reflected by veg layer (per unit incoming flux) - real (kind=kind_phys), dimension(1:2), intent(out) :: freg !flux reflected by ground (per unit incoming flux) + real (kind=kind_phys), dimension(1:2), intent(out) :: fab !< flux abs by veg layer (per unit incoming flux) + real (kind=kind_phys), dimension(1:2), intent(out) :: fre !< flux refl above veg layer (per unit incoming flux) + real (kind=kind_phys), dimension(1:2), intent(out) :: ftd !< down dir flux below veg layer (per unit in flux) + real (kind=kind_phys), dimension(1:2), intent(out) :: fti !< down dif flux below veg layer (per unit in flux) + real (kind=kind_phys), intent(out) :: gdir !< projected leaf+stem area in solar direction + real (kind=kind_phys), dimension(1:2), intent(out) :: frev !< flux reflected by veg layer (per unit incoming flux) + real (kind=kind_phys), dimension(1:2), intent(out) :: freg !< flux reflected by ground (per unit incoming flux) ! local real (kind=kind_phys) :: omega !fraction of intercepted radiation that is scattered @@ -3670,89 +3677,89 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & ! -------------------------------------------------------------------------------------------------- ! input type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - logical, intent(in) :: veg !true if vegetated surface - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !number of soil layers - integer, intent(in) :: isnow !actual no. of snow layers - integer, intent(in) :: vegtyp !vegetation physiology type - real (kind=kind_phys), intent(in) :: fveg !greeness vegetation fraction (-) - real (kind=kind_phys), intent(in) :: sav !solar rad absorbed by veg (w/m2) - real (kind=kind_phys), intent(in) :: sag !solar rad absorbed by ground (w/m2) - real (kind=kind_phys), intent(in) :: lwdn !atmospheric longwave radiation (w/m2) - real (kind=kind_phys), intent(in) :: ur !wind speed at height zlvl (m/s) - real (kind=kind_phys), intent(in) :: uu !wind speed in eastward dir (m/s) - real (kind=kind_phys), intent(in) :: vv !wind speed in northward dir (m/s) - real (kind=kind_phys), intent(in) :: sfctmp !air temperature at reference height (k) - real (kind=kind_phys), intent(in) :: thair !potential temp at reference height (k) - real (kind=kind_phys), intent(in) :: eair !vapor pressure air at zlvl (pa) - real (kind=kind_phys), intent(in) :: qair !specific humidity at zlvl (kg/kg) - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m**3) - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: fsno !snow fraction - - real (kind=kind_phys) , intent(in) :: pblhx ! pbl height - real (kind=kind_phys) , intent(in) :: ep_1 - real (kind=kind_phys) , intent(in) :: ep_2 - real (kind=kind_phys) , intent(in) :: cp - integer , intent(in) :: iz0tlnd - integer , intent(in) :: itime - integer , intent(in) :: psi_opt - - - real (kind=kind_phys), intent(in) :: snowh !actual snow depth [m] - real (kind=kind_phys), intent(in) :: fwet !wetted fraction of canopy - real (kind=kind_phys), intent(in) :: cwp !canopy wind parameter - - real (kind=kind_phys), intent(in) :: vai !total leaf area index + stem area index - real (kind=kind_phys), intent(in) :: laisun !sunlit leaf area index, one-sided (m2/m2) - real (kind=kind_phys), intent(in) :: laisha !shaded leaf area index, one-sided (m2/m2) - real (kind=kind_phys), intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), intent(in) :: zpd !zero plane displacement (m) - real (kind=kind_phys), intent(in) :: z0m !roughness length, momentum (m) - real (kind=kind_phys), intent(in) :: z0mg !roughness length, momentum, ground (m) - real (kind=kind_phys), intent(in) :: emv !vegetation emissivity - real (kind=kind_phys), intent(in) :: emg !ground emissivity - - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !soil/snow temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity of snow/soil (w/m/k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !thinkness of snow/soil layers (m) - real (kind=kind_phys), intent(in) :: canliq !intercepted liquid water (mm) - real (kind=kind_phys), intent(in) :: canice !intercepted ice mass (mm) - real (kind=kind_phys), intent(in) :: rsurf !ground surface resistance (s/m) -! real (kind=kind_phys), intent(in) :: gamma !psychrometric constant (pa/k) -! real (kind=kind_phys), intent(in) :: lathea !latent heat of vaporization/subli (j/kg) - real (kind=kind_phys), intent(in) :: gammav !psychrometric constant (pa/k) - real (kind=kind_phys), intent(in) :: latheav !latent heat of vaporization/subli (j/kg) - real (kind=kind_phys), intent(in) :: gammag !psychrometric constant (pa/k) - real (kind=kind_phys), intent(in) :: latheag !latent heat of vaporization/subli (j/kg) - real (kind=kind_phys), intent(in) :: parsun !par absorbed per unit sunlit lai (w/m2) - real (kind=kind_phys), intent(in) :: parsha !par absorbed per unit shaded lai (w/m2) - real (kind=kind_phys), intent(in) :: foln !foliage nitrogen (%) - real (kind=kind_phys), intent(in) :: co2air !atmospheric co2 concentration (pa) - real (kind=kind_phys), intent(in) :: o2air !atmospheric o2 concentration (pa) - real (kind=kind_phys), intent(in) :: igs !growing season index (0=off, 1=on) - real (kind=kind_phys), intent(in) :: sfcprs !pressure (pa) - real (kind=kind_phys), intent(in) :: btran !soil water transpiration factor (0 to 1) - real (kind=kind_phys), intent(in) :: rhsur !raltive humidity in surface soil/snow air space (-) - - real (kind=kind_phys) , intent(in) :: qc !cloud water mixing ratio - real (kind=kind_phys) , intent(in) :: psfc !pressure at lowest model layer - real (kind=kind_phys) , intent(in) :: dx !grid spacing - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) - real (kind=kind_phys) , intent(in) :: dz8w !thickness of lowest layer - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer - real (kind=kind_phys), intent(in) :: pahv !precipitation advected heat - canopy net in (w/m2) - real (kind=kind_phys), intent(in) :: pahg !precipitation advected heat - ground net in (w/m2) + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + logical, intent(in) :: veg !< true if vegetated surface + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< number of soil layers + integer, intent(in) :: isnow !< actual no. of snow layers + integer, intent(in) :: vegtyp !< vegetation physiology type + real (kind=kind_phys), intent(in) :: fveg !< greeness vegetation fraction (-) + real (kind=kind_phys), intent(in) :: sav !< solar rad absorbed by veg (w/m2) + real (kind=kind_phys), intent(in) :: sag !< solar rad absorbed by ground (w/m2) + real (kind=kind_phys), intent(in) :: lwdn !< atmospheric longwave radiation (w/m2) + real (kind=kind_phys), intent(in) :: ur !< wind speed at height zlvl (m/s) + real (kind=kind_phys), intent(in) :: uu !< wind speed in eastward dir (m/s) + real (kind=kind_phys), intent(in) :: vv !< wind speed in northward dir (m/s) + real (kind=kind_phys), intent(in) :: sfctmp !< air temperature at reference height (k) + real (kind=kind_phys), intent(in) :: thair !< potential temp at reference height (k) + real (kind=kind_phys), intent(in) :: eair !< vapor pressure air at zlvl (pa) + real (kind=kind_phys), intent(in) :: qair !< specific humidity at zlvl (kg/kg) + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m**3) + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: fsno !< snow fraction + + real (kind=kind_phys) , intent(in) :: pblhx !< pbl height + real (kind=kind_phys) , intent(in) :: ep_1 !< + real (kind=kind_phys) , intent(in) :: ep_2 !< + real (kind=kind_phys) , intent(in) :: cp !< + integer , intent(in) :: iz0tlnd !< + integer , intent(in) :: itime !< + integer , intent(in) :: psi_opt !< + + + real (kind=kind_phys), intent(in) :: snowh !< actual snow depth [m] + real (kind=kind_phys), intent(in) :: fwet !< wetted fraction of canopy + real (kind=kind_phys), intent(in) :: cwp !< canopy wind parameter + + real (kind=kind_phys), intent(in) :: vai !< total leaf area index + stem area index + real (kind=kind_phys), intent(in) :: laisun !< sunlit leaf area index, one-sided (m2/m2) + real (kind=kind_phys), intent(in) :: laisha !< shaded leaf area index, one-sided (m2/m2) + real (kind=kind_phys), intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), intent(in) :: zpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in) :: z0m !< roughness length, momentum (m) + real (kind=kind_phys), intent(in) :: z0mg !< roughness length, momentum, ground (m) + real (kind=kind_phys), intent(in) :: emv !< vegetation emissivity + real (kind=kind_phys), intent(in) :: emg !< ground emissivity + + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< soil/snow temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity of snow/soil (w/m/k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< thinkness of snow/soil layers (m) + real (kind=kind_phys), intent(in) :: canliq !< intercepted liquid water (mm) + real (kind=kind_phys), intent(in) :: canice !< intercepted ice mass (mm) + real (kind=kind_phys), intent(in) :: rsurf !< ground surface resistance (s/m) +! real (kind=kind_phys), intent(in) :: gamma !< psychrometric constant (pa/k) +! real (kind=kind_phys), intent(in) :: lathea !< latent heat of vaporization/subli (j/kg) + real (kind=kind_phys), intent(in) :: gammav !< psychrometric constant (pa/k) + real (kind=kind_phys), intent(in) :: latheav !< latent heat of vaporization/subli (j/kg) + real (kind=kind_phys), intent(in) :: gammag !< psychrometric constant (pa/k) + real (kind=kind_phys), intent(in) :: latheag !< latent heat of vaporization/subli (j/kg) + real (kind=kind_phys), intent(in) :: parsun !< par absorbed per unit sunlit lai (w/m2) + real (kind=kind_phys), intent(in) :: parsha !< par absorbed per unit shaded lai (w/m2) + real (kind=kind_phys), intent(in) :: foln !< foliage nitrogen (%) + real (kind=kind_phys), intent(in) :: co2air !< atmospheric co2 concentration (pa) + real (kind=kind_phys), intent(in) :: o2air !< atmospheric o2 concentration (pa) + real (kind=kind_phys), intent(in) :: igs !< growing season index (0=off, 1=on) + real (kind=kind_phys), intent(in) :: sfcprs !< pressure (pa) + real (kind=kind_phys), intent(in) :: btran !< soil water transpiration factor (0 to 1) + real (kind=kind_phys), intent(in) :: rhsur !< raltive humidity in surface soil/snow air space (-) + + real (kind=kind_phys) , intent(in) :: qc !< cloud water mixing ratio + real (kind=kind_phys) , intent(in) :: psfc !< pressure at lowest model layer + real (kind=kind_phys) , intent(in) :: dx !< grid spacing + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) + real (kind=kind_phys) , intent(in) :: dz8w !< thickness of lowest layer + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer + real (kind=kind_phys), intent(in) :: pahv !< precipitation advected heat - canopy net in (w/m2) + real (kind=kind_phys), intent(in) :: pahg !< precipitation advected heat - ground net in (w/m2) ! input/output - real (kind=kind_phys), intent(inout) :: eah !canopy air vapor pressure (pa) - real (kind=kind_phys), intent(inout) :: tah !canopy air temperature (k) - real (kind=kind_phys), intent(inout) :: tv !vegetation temperature (k) - real (kind=kind_phys), intent(inout) :: tg !ground temperature (k) - real (kind=kind_phys), intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys), intent(inout) :: ch !sensible heat exchange coefficient + real (kind=kind_phys), intent(inout) :: eah !< canopy air vapor pressure (pa) + real (kind=kind_phys), intent(inout) :: tah !< canopy air temperature (k) + real (kind=kind_phys), intent(inout) :: tv !< vegetation temperature (k) + real (kind=kind_phys), intent(inout) :: tg !< ground temperature (k) + real (kind=kind_phys), intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys), intent(inout) :: ch !< sensible heat exchange coefficient #ifdef CCPP character(len=*), intent(inout) :: errmsg @@ -3761,27 +3768,27 @@ subroutine vege_flux(parameters,nsnow ,nsoil ,isnow ,vegtyp ,veg , & ! output ! -fsa + fira + fsh + (fcev + fctr + fgev) + fcst + ssoil + canhs = 0 - real (kind=kind_phys), intent(out) :: tauxv !wind stress: e-w (n/m2) - real (kind=kind_phys), intent(out) :: tauyv !wind stress: n-s (n/m2) - real (kind=kind_phys), intent(out) :: irc !net longwave radiation (w/m2) [+= to atm] - real (kind=kind_phys), intent(out) :: shc !sensible heat flux (w/m2) [+= to atm] - real (kind=kind_phys), intent(out) :: evc !evaporation heat flux (w/m2) [+= to atm] - real (kind=kind_phys), intent(out) :: irg !net longwave radiation (w/m2) [+= to atm] - real (kind=kind_phys), intent(out) :: shg !sensible heat flux (w/m2) [+= to atm] - real (kind=kind_phys), intent(out) :: evg !evaporation heat flux (w/m2) [+= to atm] - real (kind=kind_phys), intent(out) :: tr !transpiration heat flux (w/m2)[+= to atm] - real (kind=kind_phys), intent(out) :: gh !ground heat (w/m2) [+ = to soil] - real (kind=kind_phys), intent(out) :: t2mv !2 m height air temperature (k) - real (kind=kind_phys), intent(out) :: psnsun !sunlit leaf photosynthesis (umolco2/m2/s) - real (kind=kind_phys), intent(out) :: psnsha !shaded leaf photosynthesis (umolco2/m2/s) - real (kind=kind_phys), intent(out) :: chleaf !leaf exchange coefficient - real (kind=kind_phys), intent(out) :: chuc !under canopy exchange coefficient - real (kind=kind_phys), intent(out) :: canhs !canopy heat storage change (w/m2) - real (kind=kind_phys), intent(out) :: q2v - real (kind=kind_phys) :: cah !sensible heat conductance, canopy air to zlvl air (m/s) - real (kind=kind_phys) :: u10v !10 m wind speed in eastward dir (m/s) - real (kind=kind_phys) :: v10v !10 m wind speed in eastward dir (m/s) - real (kind=kind_phys) :: wspd + real (kind=kind_phys), intent(out) :: tauxv !< wind stress: e-w (n/m2) + real (kind=kind_phys), intent(out) :: tauyv !< wind stress: n-s (n/m2) + real (kind=kind_phys), intent(out) :: irc !< net longwave radiation (w/m2) [+= to atm] + real (kind=kind_phys), intent(out) :: shc !< sensible heat flux (w/m2) [+= to atm] + real (kind=kind_phys), intent(out) :: evc !< evaporation heat flux (w/m2) [+= to atm] + real (kind=kind_phys), intent(out) :: irg !< net longwave radiation (w/m2) [+= to atm] + real (kind=kind_phys), intent(out) :: shg !< sensible heat flux (w/m2) [+= to atm] + real (kind=kind_phys), intent(out) :: evg !< evaporation heat flux (w/m2) [+= to atm] + real (kind=kind_phys), intent(out) :: tr !< transpiration heat flux (w/m2)[+= to atm] + real (kind=kind_phys), intent(out) :: gh !< ground heat (w/m2) [+ = to soil] + real (kind=kind_phys), intent(out) :: t2mv !< 2 m height air temperature (k) + real (kind=kind_phys), intent(out) :: psnsun !< sunlit leaf photosynthesis (umolco2/m2/s) + real (kind=kind_phys), intent(out) :: psnsha !< shaded leaf photosynthesis (umolco2/m2/s) + real (kind=kind_phys), intent(out) :: chleaf !< leaf exchange coefficient + real (kind=kind_phys), intent(out) :: chuc !< under canopy exchange coefficient + real (kind=kind_phys), intent(out) :: canhs !< canopy heat storage change (w/m2) + real (kind=kind_phys), intent(out) :: q2v !< + real (kind=kind_phys) :: cah !< sensible heat conductance, canopy air to zlvl air (m/s) + real (kind=kind_phys) :: u10v !< 10 m wind speed in eastward dir (m/s) + real (kind=kind_phys) :: v10v !< 10 m wind speed in eastward dir (m/s) + real (kind=kind_phys) :: wspd !< ! ------------------------ local variables ---------------------------------------------------- real (kind=kind_phys) :: gdx !grid dx @@ -4347,61 +4354,61 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & implicit none ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer , intent(in) :: iloc !grid index - integer , intent(in) :: jloc !grid index - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !number of soil layers - integer, intent(in) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: sag !solar radiation absorbed by ground (w/m2) - real (kind=kind_phys), intent(in) :: lwdn !atmospheric longwave radiation (w/m2) - real (kind=kind_phys), intent(in) :: ur !wind speed at height zlvl (m/s) - real (kind=kind_phys), intent(in) :: uu !wind speed in eastward dir (m/s) - real (kind=kind_phys), intent(in) :: vv !wind speed in northward dir (m/s) - real (kind=kind_phys), intent(in) :: sfctmp !air temperature at reference height (k) - real (kind=kind_phys), intent(in) :: thair !potential temperature at height zlvl (k) - real (kind=kind_phys), intent(in) :: qair !specific humidity at height zlvl (kg/kg) - real (kind=kind_phys), intent(in) :: eair !vapor pressure air at height (pa) - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m3) - real (kind=kind_phys), intent(in) :: snowh !actual snow depth [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !thickness of snow/soil layers (m) - real (kind=kind_phys), intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), intent(in) :: zpd !zero plane displacement (m) - real (kind=kind_phys), intent(in) :: z0m !roughness length, momentum, ground (m) - real (kind=kind_phys), intent(in) :: emg !ground emissivity - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !soil/snow temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity of snow/soil (w/m/k) - real (kind=kind_phys), intent(in) :: rsurf !ground surface resistance (s/m) - real (kind=kind_phys), intent(in) :: lathea !latent heat of vaporization/subli (j/kg) - real (kind=kind_phys), intent(in) :: gamma !psychrometric constant (pa/k) - real (kind=kind_phys), intent(in) :: rhsur !raltive humidity in surface soil/snow air space (-) - real (kind=kind_phys), intent(in) :: fsno !snow fraction - - real (kind=kind_phys), intent(in) :: pblhx !pbl height (m) - real (kind=kind_phys), intent(in) :: ep_1 - real (kind=kind_phys), intent(in) :: ep_2 - real (kind=kind_phys), intent(in) :: cp - integer, intent(in) :: iz0tlnd - integer, intent(in) :: itime - integer, intent(in) :: psi_opt + type (noahmp_parameters), intent(in) :: parameters !< + integer , intent(in) :: iloc !< grid index + integer , intent(in) :: jloc !< grid index + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< number of soil layers + integer, intent(in) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: sag !< solar radiation absorbed by ground (w/m2) + real (kind=kind_phys), intent(in) :: lwdn !< atmospheric longwave radiation (w/m2) + real (kind=kind_phys), intent(in) :: ur !< wind speed at height zlvl (m/s) + real (kind=kind_phys), intent(in) :: uu !< wind speed in eastward dir (m/s) + real (kind=kind_phys), intent(in) :: vv !< wind speed in northward dir (m/s) + real (kind=kind_phys), intent(in) :: sfctmp !< air temperature at reference height (k) + real (kind=kind_phys), intent(in) :: thair !< potential temperature at height zlvl (k) + real (kind=kind_phys), intent(in) :: qair !< specific humidity at height zlvl (kg/kg) + real (kind=kind_phys), intent(in) :: eair !< vapor pressure air at height (pa) + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m3) + real (kind=kind_phys), intent(in) :: snowh !< actual snow depth [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< thickness of snow/soil layers (m) + real (kind=kind_phys), intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), intent(in) :: zpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in) :: z0m !< roughness length, momentum, ground (m) + real (kind=kind_phys), intent(in) :: emg !< ground emissivity + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< soil/snow temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity of snow/soil (w/m/k) + real (kind=kind_phys), intent(in) :: rsurf !< ground surface resistance (s/m) + real (kind=kind_phys), intent(in) :: lathea !< latent heat of vaporization/subli (j/kg) + real (kind=kind_phys), intent(in) :: gamma !< psychrometric constant (pa/k) + real (kind=kind_phys), intent(in) :: rhsur !< raltive humidity in surface soil/snow air space (-) + real (kind=kind_phys), intent(in) :: fsno !< snow fraction + + real (kind=kind_phys), intent(in) :: pblhx !< pbl height (m) + real (kind=kind_phys), intent(in) :: ep_1 !< + real (kind=kind_phys), intent(in) :: ep_2 !< + real (kind=kind_phys), intent(in) :: cp !< + integer, intent(in) :: iz0tlnd !< + integer, intent(in) :: itime !< + integer, intent(in) :: psi_opt !< !jref:start; in - real (kind=kind_phys) , intent(in) :: qc !cloud water mixing ratio - real (kind=kind_phys) , intent(inout) :: qsfc !mixing ratio at lowest model layer - real (kind=kind_phys) , intent(in) :: psfc !pressure at lowest model layer - real (kind=kind_phys) , intent(in) :: sfcprs !pressure at lowest model layer - real (kind=kind_phys) , intent(in) :: dx !horisontal grid spacing - real (kind=kind_phys) , intent(in) :: q2 !mixing ratio (kg/kg) - real (kind=kind_phys) , intent(in) :: dz8w !thickness of lowest layer + real (kind=kind_phys) , intent(in) :: qc !< cloud water mixing ratio + real (kind=kind_phys) , intent(inout) :: qsfc !< mixing ratio at lowest model layer + real (kind=kind_phys) , intent(in) :: psfc !< pressure at lowest model layer + real (kind=kind_phys) , intent(in) :: sfcprs !< pressure at lowest model layer + real (kind=kind_phys) , intent(in) :: dx !< horisontal grid spacing + real (kind=kind_phys) , intent(in) :: q2 !< mixing ratio (kg/kg) + real (kind=kind_phys) , intent(in) :: dz8w !< thickness of lowest layer !jref:end - real (kind=kind_phys), intent(in) :: pahb !precipitation advected heat - ground net in (w/m2) + real (kind=kind_phys), intent(in) :: pahb !< precipitation advected heat - ground net in (w/m2) ! input/output - real (kind=kind_phys), intent(inout) :: tgb !ground temperature (k) - real (kind=kind_phys), intent(inout) :: cm !momentum drag coefficient - real (kind=kind_phys), intent(inout) :: ch !sensible heat exchange coefficient + real (kind=kind_phys), intent(inout) :: tgb !< ground temperature (k) + real (kind=kind_phys), intent(inout) :: cm !< momentum drag coefficient + real (kind=kind_phys), intent(inout) :: ch !< sensible heat exchange coefficient #ifdef CCPP character(len=*), intent(inout) :: errmsg integer, intent(inout) :: errflg @@ -4410,15 +4417,15 @@ subroutine bare_flux (parameters,nsnow ,nsoil ,isnow ,dt ,sag , & ! output ! -sab + irb[tg] + shb[tg] + evb[tg] + ghb[tg] = 0 - real (kind=kind_phys), intent(out) :: tauxb !wind stress: e-w (n/m2) - real (kind=kind_phys), intent(out) :: tauyb !wind stress: n-s (n/m2) - real (kind=kind_phys), intent(out) :: irb !net longwave rad (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: shb !sensible heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: evb !latent heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(out) :: ghb !ground heat flux (w/m2) [+ to soil] - real (kind=kind_phys), intent(out) :: t2mb !2 m height air temperature (k) + real (kind=kind_phys), intent(out) :: tauxb !< wind stress: e-w (n/m2) + real (kind=kind_phys), intent(out) :: tauyb !< wind stress: n-s (n/m2) + real (kind=kind_phys), intent(out) :: irb !< net longwave rad (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: shb !< sensible heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: evb !< latent heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(out) :: ghb !< ground heat flux (w/m2) [+ to soil] + real (kind=kind_phys), intent(out) :: t2mb !< 2 m height air temperature (k) !jref:start - real (kind=kind_phys), intent(out) :: q2b !bare ground heat conductance + real (kind=kind_phys), intent(out) :: q2b !< bare ground heat conductance real (kind=kind_phys) :: ehb !bare ground heat conductance real (kind=kind_phys) :: u10b !10 m wind speed in eastward dir (m/s) real (kind=kind_phys) :: v10b !10 m wind speed in eastward dir (m/s) @@ -4790,37 +4797,37 @@ subroutine ragrb(parameters,iter ,vai ,rhoair ,hg ,tah , & !in ! -------------------------------------------------------------------------------------------------- ! inputs - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: iter !iteration index - integer, intent(in) :: vegtyp !vegetation physiology type - real (kind=kind_phys), intent(in) :: vai !total lai + stem area index, one sided - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m3) - real (kind=kind_phys), intent(in) :: hg !ground sensible heat flux (w/m2) - real (kind=kind_phys), intent(in) :: tv !vegetation temperature (k) - real (kind=kind_phys), intent(in) :: tah !air temperature at height z0h+zpd (k) - real (kind=kind_phys), intent(in) :: zpd !zero plane displacement (m) - real (kind=kind_phys), intent(in) :: z0mg !roughness length, momentum, ground (m) - real (kind=kind_phys), intent(in) :: hcan !canopy height (m) [note: hcan >= z0mg] - real (kind=kind_phys), intent(in) :: uc !wind speed at top of canopy (m/s) - real (kind=kind_phys), intent(in) :: z0h !roughness length, sensible heat (m) - real (kind=kind_phys), intent(in) :: z0hg !roughness length, sensible heat, ground (m) - real (kind=kind_phys), intent(in) :: fv !friction velocity (m/s) - real (kind=kind_phys), intent(in) :: cwp !canopy wind parameter - real (kind=kind_phys), intent(in) :: mpe !prevents overflow error if division by zero + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: iter !< iteration index + integer, intent(in) :: vegtyp !< vegetation physiology type + real (kind=kind_phys), intent(in) :: vai !< total lai + stem area index, one sided + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m3) + real (kind=kind_phys), intent(in) :: hg !< ground sensible heat flux (w/m2) + real (kind=kind_phys), intent(in) :: tv !< vegetation temperature (k) + real (kind=kind_phys), intent(in) :: tah !< air temperature at height z0h+zpd (k) + real (kind=kind_phys), intent(in) :: zpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in) :: z0mg !< roughness length, momentum, ground (m) + real (kind=kind_phys), intent(in) :: hcan !< canopy height (m) [note: hcan >= z0mg] + real (kind=kind_phys), intent(in) :: uc !< wind speed at top of canopy (m/s) + real (kind=kind_phys), intent(in) :: z0h !< roughness length, sensible heat (m) + real (kind=kind_phys), intent(in) :: z0hg !< roughness length, sensible heat, ground (m) + real (kind=kind_phys), intent(in) :: fv !< friction velocity (m/s) + real (kind=kind_phys), intent(in) :: cwp !< canopy wind parameter + real (kind=kind_phys), intent(in) :: mpe !< prevents overflow error if division by zero ! in & out - real (kind=kind_phys), intent(inout) :: mozg !monin-obukhov stability parameter - real (kind=kind_phys), intent(inout) :: fhg !stability correction - real (kind=kind_phys), intent(inout) :: fhgh !stability correction, canopy + real (kind=kind_phys), intent(inout) :: mozg !< monin-obukhov stability parameter + real (kind=kind_phys), intent(inout) :: fhg !< stability correction + real (kind=kind_phys), intent(inout) :: fhgh !< stability correction, canopy ! outputs - real (kind=kind_phys) :: ramg !aerodynamic resistance for momentum (s/m) - real (kind=kind_phys) :: rahg !aerodynamic resistance for sensible heat (s/m) - real (kind=kind_phys) :: rawg !aerodynamic resistance for water vapor (s/m) - real (kind=kind_phys) :: rb !bulk leaf boundary layer resistance (s/m) + real (kind=kind_phys) :: ramg !< aerodynamic resistance for momentum (s/m) + real (kind=kind_phys) :: rahg !< aerodynamic resistance for sensible heat (s/m) + real (kind=kind_phys) :: rawg !< aerodynamic resistance for water vapor (s/m) + real (kind=kind_phys) :: rb !< bulk leaf boundary layer resistance (s/m) real (kind=kind_phys) :: kh !turbulent transfer coefficient, sensible heat, (m2/s) @@ -4905,28 +4912,28 @@ subroutine sfcdif1(parameters,iter ,sfctmp ,rhoair ,h ,qair , & !in ! ------------------------------------------------------------------------------------------------- ! inputs - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: iter !iteration index - real (kind=kind_phys), intent(in) :: sfctmp !temperature at reference height (k) - real (kind=kind_phys), intent(in) :: rhoair !density air (kg/m**3) - real (kind=kind_phys), intent(in) :: h !sensible heat flux (w/m2) [+ to atm] - real (kind=kind_phys), intent(in) :: qair !specific humidity at reference height (kg/kg) - real (kind=kind_phys), intent(in) :: zlvl !reference height (m) - real (kind=kind_phys), intent(in) :: zpd !zero plane displacement (m) - real (kind=kind_phys), intent(in) :: z0h !roughness length, sensible heat, ground (m) - real (kind=kind_phys), intent(in) :: z0m !roughness length, momentum, ground (m) - real (kind=kind_phys), intent(in) :: ur !wind speed (m/s) - real (kind=kind_phys), intent(in) :: mpe !prevents overflow error if division by zero + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: iter !< iteration index + real (kind=kind_phys), intent(in) :: sfctmp !< temperature at reference height (k) + real (kind=kind_phys), intent(in) :: rhoair !< density air (kg/m**3) + real (kind=kind_phys), intent(in) :: h !< sensible heat flux (w/m2) [+ to atm] + real (kind=kind_phys), intent(in) :: qair !< specific humidity at reference height (kg/kg) + real (kind=kind_phys), intent(in) :: zlvl !< reference height (m) + real (kind=kind_phys), intent(in) :: zpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in) :: z0h !< roughness length, sensible heat, ground (m) + real (kind=kind_phys), intent(in) :: z0m !< roughness length, momentum, ground (m) + real (kind=kind_phys), intent(in) :: ur !< wind speed (m/s) + real (kind=kind_phys), intent(in) :: mpe !< prevents overflow error if division by zero ! in & out - integer, intent(inout) :: mozsgn !number of times moz changes sign - real (kind=kind_phys), intent(inout) :: moz !monin-obukhov stability (z/l) - real (kind=kind_phys), intent(inout) :: fm !momentum stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fh !sen heat stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fm2 !sen heat stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fh2 !sen heat stability correction, weighted by prior iters + integer, intent(inout) :: mozsgn !< number of times moz changes sign + real (kind=kind_phys), intent(inout) :: moz !< monin-obukhov stability (z/l) + real (kind=kind_phys), intent(inout) :: fm !< momentum stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fh !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fm2 !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fh2 !< sen heat stability correction, weighted by prior iters #ifdef CCPP character(len=*), intent(inout) :: errmsg integer, intent(inout) :: errflg @@ -4934,10 +4941,10 @@ subroutine sfcdif1(parameters,iter ,sfctmp ,rhoair ,h ,qair , & !in ! outputs - real (kind=kind_phys), intent(out) :: cm !drag coefficient for momentum - real (kind=kind_phys), intent(out) :: ch !drag coefficient for heat - real (kind=kind_phys), intent(out) :: fv !friction velocity (m/s) - real (kind=kind_phys), intent(out) :: ch2 !drag coefficient for heat + real (kind=kind_phys), intent(out) :: cm !< drag coefficient for momentum + real (kind=kind_phys), intent(out) :: ch !< drag coefficient for heat + real (kind=kind_phys), intent(out) :: fv !< friction velocity (m/s) + real (kind=kind_phys), intent(out) :: ch2 !< drag coefficient for heat ! locals real (kind=kind_phys) :: mol !monin-obukhov length (m) @@ -5291,33 +5298,33 @@ subroutine sfcdif3(parameters,iloc ,jloc ,iter ,sfctmp ,qair ,ur ! ------------------------------------------------------------------------------------------------- ! inputs - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in ) :: iloc ! grid index - integer, intent(in ) :: jloc ! grid index - integer, intent(in ) :: iter ! iteration index - real (kind=kind_phys), intent(in ) :: sfctmp ! temperature at reference height [K] - real (kind=kind_phys), intent(in ) :: qair ! specific humidity at reference height [kg/kg] - real (kind=kind_phys), intent(in ) :: ur ! wind speed [m/s] - real (kind=kind_phys), intent(in ) :: zlvl ! reference height [m] - real (kind=kind_phys), intent(in ) :: tgb ! ground temperature [K] - logical, intent(in ) :: thsfc_loc ! flag for using sfc-based theta - real (kind=kind_phys), intent(in ) :: prslkix ! in exner function - real (kind=kind_phys), intent(in ) :: prsik1x ! in exner function - real (kind=kind_phys), intent(in ) :: prslk1x ! in exner function - real (kind=kind_phys), intent(in ) :: z0m ! roughness length, momentum, ground [m] - real (kind=kind_phys), intent(in ) :: z0h ! roughness length, sensible heat, ground [m] - real (kind=kind_phys), intent(in ) :: zpd ! zero plane displacement [m] - real (kind=kind_phys), intent(in ) :: snowh ! snow depth [m] - real (kind=kind_phys), intent(in ) :: fveg ! fractional vegetation cover - real (kind=kind_phys), intent(in ) :: garea1 ! grid area [km2] - real (kind=kind_phys), intent(inout) :: ustarx ! friction velocity [m/s] - real (kind=kind_phys), intent(inout) :: fm ! momentum stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fh ! sen heat stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fm2 ! sen heat stability correction, weighted by prior iters - real (kind=kind_phys), intent(inout) :: fh2 ! sen heat stability correction, weighted by prior iters - real (kind=kind_phys), intent( out) :: fv ! friction velocity (m/s) - real (kind=kind_phys), intent( out) :: cm ! drag coefficient for momentum - real (kind=kind_phys), intent( out) :: ch ! drag coefficient for heat + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in ) :: iloc !< grid index + integer, intent(in ) :: jloc !< grid index + integer, intent(in ) :: iter !< iteration index + real (kind=kind_phys), intent(in ) :: sfctmp !< temperature at reference height [K] + real (kind=kind_phys), intent(in ) :: qair !< specific humidity at reference height [kg/kg] + real (kind=kind_phys), intent(in ) :: ur !< wind speed [m/s] + real (kind=kind_phys), intent(in ) :: zlvl !< reference height [m] + real (kind=kind_phys), intent(in ) :: tgb !< ground temperature [K] + logical, intent(in ) :: thsfc_loc !< flag for using sfc-based theta + real (kind=kind_phys), intent(in ) :: prslkix !< in exner function + real (kind=kind_phys), intent(in ) :: prsik1x !< in exner function + real (kind=kind_phys), intent(in ) :: prslk1x !< in exner function + real (kind=kind_phys), intent(in ) :: z0m !< roughness length, momentum, ground [m] + real (kind=kind_phys), intent(in ) :: z0h !< roughness length, sensible heat, ground [m] + real (kind=kind_phys), intent(in ) :: zpd !< zero plane displacement [m] + real (kind=kind_phys), intent(in ) :: snowh !< snow depth [m] + real (kind=kind_phys), intent(in ) :: fveg !< fractional vegetation cover + real (kind=kind_phys), intent(in ) :: garea1 !< grid area [km2] + real (kind=kind_phys), intent(inout) :: ustarx !< friction velocity [m/s] + real (kind=kind_phys), intent(inout) :: fm !< momentum stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fh !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fm2 !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent(inout) :: fh2 !< sen heat stability correction, weighted by prior iters + real (kind=kind_phys), intent( out) :: fv !< friction velocity (m/s) + real (kind=kind_phys), intent( out) :: cm !< drag coefficient for momentum + real (kind=kind_phys), intent( out) :: ch !< drag coefficient for heat real (kind=kind_phys) :: snwd ! snow depth [mm] real (kind=kind_phys) :: zlvlb ! reference height - zpd [m] @@ -5379,25 +5386,25 @@ subroutine thermalz0(parameters,fveg,z0m,z0mg,zlvl,zpd,ezpd,ustarx, & ! ! ------------------------------------------------------------------------------------------------- ! inputs - type (noahmp_parameters), intent(in) :: parameters - integer , intent(in ) :: vegtyp ! vegetation type - integer , intent(in ) :: icom ! 0=bared 1=vege 2=composition - real (kind=kind_phys), intent(in ) :: fveg ! green vegetation fraction [0.0-1.0] - real (kind=kind_phys), intent(in ) :: z0m ! z0 momentum (m) - real (kind=kind_phys), intent(in ) :: z0mg ! z0 momentum, ground (m) - real (kind=kind_phys), intent(in ) :: zlvl ! reference height [m] - real (kind=kind_phys), intent(in ) :: zpd ! zero plane displacement (m) - real (kind=kind_phys), intent(in ) :: ezpd ! zero plane displacement (m) - real (kind=kind_phys), intent(in ) :: ustarx ! friction velocity (m/s) - real (kind=kind_phys), intent(in ) :: vaie ! reference height [m] - real (kind=kind_phys), intent(in ) :: ur ! wind speed [m/s] - real (kind=kind_phys), intent(inout) :: csigmaf0 ! - real (kind=kind_phys), intent(inout) :: csigmaf1 ! - real (kind=kind_phys), intent(in ) :: aone ! - real (kind=kind_phys), intent(in ) :: cdmnv ! - real (kind=kind_phys), intent(in ) :: cdmng ! - real (kind=kind_phys), intent(out ) :: z0mt ! composited z0 momentum (m) - real (kind=kind_phys), intent(out ) :: z0ht ! composited z0 momentum (m) + type (noahmp_parameters), intent(in) :: parameters !< + integer , intent(in ) :: vegtyp !< vegetation type + integer , intent(in ) :: icom !< 0=bared 1=vege 2=composition + real (kind=kind_phys), intent(in ) :: fveg !< green vegetation fraction [0.0-1.0] + real (kind=kind_phys), intent(in ) :: z0m !< z0 momentum (m) + real (kind=kind_phys), intent(in ) :: z0mg !< z0 momentum, ground (m) + real (kind=kind_phys), intent(in ) :: zlvl !< reference height [m] + real (kind=kind_phys), intent(in ) :: zpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in ) :: ezpd !< zero plane displacement (m) + real (kind=kind_phys), intent(in ) :: ustarx !< friction velocity (m/s) + real (kind=kind_phys), intent(in ) :: vaie !< reference height [m] + real (kind=kind_phys), intent(in ) :: ur !< wind speed [m/s] + real (kind=kind_phys), intent(inout) :: csigmaf0 !< + real (kind=kind_phys), intent(inout) :: csigmaf1 !< + real (kind=kind_phys), intent(in ) :: aone !< + real (kind=kind_phys), intent(in ) :: cdmnv !< + real (kind=kind_phys), intent(in ) :: cdmng !< + real (kind=kind_phys), intent(out ) :: z0mt !< composited z0 momentum (m) + real (kind=kind_phys), intent(out ) :: z0ht !< composited z0 momentum (m) ! local real (kind=kind_phys) :: czil1 ! canopy based czil @@ -5523,14 +5530,14 @@ subroutine esat(t, esw, esi, desw, desi) !--------------------------------------------------------------------------------------------------- ! in - real (kind=kind_phys), intent(in) :: t !temperature + real (kind=kind_phys), intent(in) :: t !< temperature !out - real (kind=kind_phys), intent(out) :: esw !saturation vapor pressure over water (pa) - real (kind=kind_phys), intent(out) :: esi !saturation vapor pressure over ice (pa) - real (kind=kind_phys), intent(out) :: desw !d(esat)/dt over water (pa/k) - real (kind=kind_phys), intent(out) :: desi !d(esat)/dt over ice (pa/k) + real (kind=kind_phys), intent(out) :: esw !< saturation vapor pressure over water (pa) + real (kind=kind_phys), intent(out) :: esi !< saturation vapor pressure over ice (pa) + real (kind=kind_phys), intent(out) :: desw !< d(esat)/dt over water (pa/k) + real (kind=kind_phys), intent(out) :: desi !< d(esat)/dt over ice (pa/k) ! local @@ -5569,6 +5576,7 @@ end subroutine esat !== begin stomata ================================================================================== !>\ingroup NoahMP_LSM +!! subroutine stomata (parameters,vegtyp ,mpe ,apar ,foln ,iloc , jloc, & !in tv ,ei ,ea ,sfctmp ,sfcprs , & !in o2 ,co2 ,igs ,btran ,rb , & !in @@ -5577,29 +5585,29 @@ subroutine stomata (parameters,vegtyp ,mpe ,apar ,foln ,iloc , jlo implicit none ! -------------------------------------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer,intent(in) :: iloc !grid index - integer,intent(in) :: jloc !grid index - integer,intent(in) :: vegtyp !vegetation physiology type - - real (kind=kind_phys), intent(in) :: igs !growing season index (0=off, 1=on) - real (kind=kind_phys), intent(in) :: mpe !prevents division by zero errors - - real (kind=kind_phys), intent(in) :: tv !foliage temperature (k) - real (kind=kind_phys), intent(in) :: ei !vapor pressure inside leaf (sat vapor press at tv) (pa) - real (kind=kind_phys), intent(in) :: ea !vapor pressure of canopy air (pa) - real (kind=kind_phys), intent(in) :: apar !par absorbed per unit lai (w/m2) - real (kind=kind_phys), intent(in) :: o2 !atmospheric o2 concentration (pa) - real (kind=kind_phys), intent(in) :: co2 !atmospheric co2 concentration (pa) - real (kind=kind_phys), intent(in) :: sfcprs !air pressure at reference height (pa) - real (kind=kind_phys), intent(in) :: sfctmp !air temperature at reference height (k) - real (kind=kind_phys), intent(in) :: btran !soil water transpiration factor (0 to 1) - real (kind=kind_phys), intent(in) :: foln !foliage nitrogen concentration (%) - real (kind=kind_phys), intent(in) :: rb !boundary layer resistance (s/m) + type (noahmp_parameters), intent(in) :: parameters !< + integer,intent(in) :: iloc !< grid index + integer,intent(in) :: jloc !< grid index + integer,intent(in) :: vegtyp !< vegetation physiology type + + real (kind=kind_phys), intent(in) :: igs !< growing season index (0=off, 1=on) + real (kind=kind_phys), intent(in) :: mpe !< prevents division by zero errors + + real (kind=kind_phys), intent(in) :: tv !< foliage temperature (k) + real (kind=kind_phys), intent(in) :: ei !< vapor pressure inside leaf (sat vapor press at tv) (pa) + real (kind=kind_phys), intent(in) :: ea !< vapor pressure of canopy air (pa) + real (kind=kind_phys), intent(in) :: apar !< par absorbed per unit lai (w/m2) + real (kind=kind_phys), intent(in) :: o2 !< atmospheric o2 concentration (pa) + real (kind=kind_phys), intent(in) :: co2 !< atmospheric co2 concentration (pa) + real (kind=kind_phys), intent(in) :: sfcprs !< air pressure at reference height (pa) + real (kind=kind_phys), intent(in) :: sfctmp !< air temperature at reference height (k) + real (kind=kind_phys), intent(in) :: btran !< soil water transpiration factor (0 to 1) + real (kind=kind_phys), intent(in) :: foln !< foliage nitrogen concentration (%) + real (kind=kind_phys), intent(in) :: rb !< boundary layer resistance (s/m) ! output - real (kind=kind_phys), intent(out) :: rs !leaf stomatal resistance (s/m) - real (kind=kind_phys), intent(out) :: psn !foliage photosynthesis (umol co2 /m2/ s) [always +] + real (kind=kind_phys), intent(out) :: rs !< leaf stomatal resistance (s/m) + real (kind=kind_phys), intent(out) :: psn !< foliage photosynthesis (umol co2 /m2/ s) [always +] ! in&out real (kind=kind_phys) :: rlb !boundary layer resistance (s m2 / umol) @@ -5726,19 +5734,19 @@ subroutine canres (parameters,par ,sfctmp,rcsoil ,eah ,sfcprs , & !in ! -------------------------------------------------------------------------------------------------- ! inputs - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - real (kind=kind_phys), intent(in) :: par !par absorbed per unit sunlit lai (w/m2) - real (kind=kind_phys), intent(in) :: sfctmp !canopy air temperature - real (kind=kind_phys), intent(in) :: sfcprs !surface pressure (pa) - real (kind=kind_phys), intent(in) :: eah !water vapor pressure (pa) - real (kind=kind_phys), intent(in) :: rcsoil !soil moisture stress factor + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + real (kind=kind_phys), intent(in) :: par !< par absorbed per unit sunlit lai (w/m2) + real (kind=kind_phys), intent(in) :: sfctmp !< canopy air temperature + real (kind=kind_phys), intent(in) :: sfcprs !< surface pressure (pa) + real (kind=kind_phys), intent(in) :: eah !< water vapor pressure (pa) + real (kind=kind_phys), intent(in) :: rcsoil !< soil moisture stress factor !outputs - real (kind=kind_phys), intent(out) :: rc !canopy resistance per unit lai - real (kind=kind_phys), intent(out) :: psn !foliage photosynthesis (umolco2/m2/s) + real (kind=kind_phys), intent(out) :: rc !< canopy resistance per unit lai + real (kind=kind_phys), intent(out) :: psn !< foliage photosynthesis (umolco2/m2/s) !local @@ -5792,6 +5800,7 @@ end subroutine canres !== begin calhum =================================================================================== !>\ingroup NoahMP_LSM +!! subroutine calhum(parameters,sfctmp, sfcprs, q2sat, dqsdt2) implicit none @@ -5846,29 +5855,29 @@ subroutine tsnosoi (parameters,ice ,nsoil ,nsnow ,isnow ,ist , & ! ! -------------------------------------------------------------------------------------------------- !input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc - integer, intent(in) :: jloc - integer, intent(in) :: ice ! - integer, intent(in) :: nsoil !no of soil layers (4) - integer, intent(in) :: nsnow !maximum no of snow layers (3) - integer, intent(in) :: isnow !actual no of snow layers - integer, intent(in) :: ist !surface type - - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: tbot ! - real (kind=kind_phys), intent(in) :: ssoil !ground heat flux (w/m2) - real (kind=kind_phys), intent(in) :: sag !solar rad. absorbed by ground (w/m2) - real (kind=kind_phys), intent(in) :: snowh !snow depth (m) - real (kind=kind_phys), intent(in) :: tg !ground temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !layer-bot. depth from snow surf.(m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer thickness (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !heat capacity (j/m3/k) + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< + integer, intent(in) :: jloc !< + integer, intent(in) :: ice !< + integer, intent(in) :: nsoil !< no of soil layers (4) + integer, intent(in) :: nsnow !< maximum no of snow layers (3) + integer, intent(in) :: isnow !< actual no of snow layers + integer, intent(in) :: ist !< surface type + + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: tbot !< + real (kind=kind_phys), intent(in) :: ssoil !< ground heat flux (w/m2) + real (kind=kind_phys), intent(in) :: sag !< solar rad. absorbed by ground (w/m2) + real (kind=kind_phys), intent(in) :: snowh !< snow depth (m) + real (kind=kind_phys), intent(in) :: tg !< ground temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< layer-bot. depth from snow surf.(m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer thickness (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !< heat capacity (j/m3/k) !input and output - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< #ifdef CCPP character(len=*) , intent(inout) :: errmsg integer , intent(inout) :: errflg @@ -5982,28 +5991,28 @@ subroutine hrt (parameters,nsnow ,nsoil ,isnow ,zsnso , & ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: nsoil !no of soil layers (4) - integer, intent(in) :: nsnow !maximum no of snow layers (3) - integer, intent(in) :: isnow !actual no of snow layers - real (kind=kind_phys), intent(in) :: tbot !bottom soil temp. at zbot (k) - real (kind=kind_phys), intent(in) :: zbot !depth of lower boundary condition (m) - !from soil surface not snow surface - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), intent(in) :: ssoil !ground heat flux (w/m2) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !depth of layer-bottom of snow/soil (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !snow/soil temperature (k) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !thermal conductivity [w/m/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !heat capacity [j/m3/k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: phi !light through water (w/m2) + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: nsoil !< no of soil layers (4) + integer, intent(in) :: nsnow !< maximum no of snow layers (3) + integer, intent(in) :: isnow !, actual no of snow layers + real (kind=kind_phys), intent(in) :: tbot !< bottom soil temp. at zbot (k) + real (kind=kind_phys), intent(in) :: zbot !< depth of lower boundary condition (m) + !! from soil surface not snow surface + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), intent(in) :: ssoil !< ground heat flux (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: zsnso !< depth of layer-bottom of snow/soil (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< snow/soil temperature (k) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: df !< thermal conductivity [w/m/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !< heat capacity [j/m3/k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: phi !< light through water (w/m2) ! output - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: rhsts !right-hand side of the matrix - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ai !left-hand side coefficient - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: bi !left-hand side coefficient - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ci !left-hand side coefficient - real (kind=kind_phys), intent(out) :: botflx !energy influx from soil bottom (w/m2) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: rhsts !< right-hand side of the matrix + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ai !< left-hand side coefficient + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: bi !< left-hand side coefficient + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(out) :: ci !< left-hand side coefficient + real (kind=kind_phys), intent(out) :: botflx !< energy influx from soil bottom (w/m2) ! local @@ -6129,6 +6138,7 @@ end subroutine hstep !== begin rosr12 =================================================================================== !>\ingroup NoahMP_LSM +!! solve the tri-diagonal matrix equation subroutine rosr12 (p,a,b,c,d,delta,ntop,nsoil,nsnow) ! ---------------------------------------------------------------------- ! subroutine rosr12 @@ -6208,32 +6218,32 @@ subroutine phasechange (parameters,nsnow ,nsoil ,isnow ,dt ,fact , ! ---------------------------------------------------------------------- ! inputs - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: nsnow !maximum no. of snow layers [=3] - integer, intent(in) :: nsoil !no. of soil layers [=4] - integer, intent(in) :: isnow !actual no. of snow layers [<=3] - integer, intent(in) :: ist !surface type: 1->soil; 2->lake - real (kind=kind_phys), intent(in) :: dt !land model time step (sec) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: fact !temporary - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer thickness [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !heat capacity (j/m3/k) + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: nsnow !< maximum no. of snow layers [=3] + integer, intent(in) :: nsoil !< no. of soil layers [=4] + integer, intent(in) :: isnow !< actual no. of snow layers [<=3] + integer, intent(in) :: ist !< surface type: 1->soil; 2->lake + real (kind=kind_phys), intent(in) :: dt !< land model time step (sec) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: fact !< temporary + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer thickness [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: hcpct !< heat capacity (j/m3/k) ! outputs integer, dimension(-nsnow+1:nsoil), intent(out) :: imelt !phase change index - real (kind=kind_phys), intent(out) :: qmelt !snowmelt rate [mm/s] - real (kind=kind_phys), intent(out) :: ponding!snowmelt when snow has no layer [mm] + real (kind=kind_phys), intent(out) :: qmelt !< snowmelt rate [mm/s] + real (kind=kind_phys), intent(out) :: ponding!< snowmelt when snow has no layer [mm] ! inputs and outputs - real (kind=kind_phys), intent(inout) :: sneqv - real (kind=kind_phys), intent(inout) :: snowh - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow/soil layer temperature [k] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid water [m3/m3] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !total soil water [m3/m3] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snliq !snow layer liquid water [mm] + real (kind=kind_phys), intent(inout) :: sneqv !< + real (kind=kind_phys), intent(inout) :: snowh !< + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow/soil layer temperature [k] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid water [m3/m3] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: smc !< total soil water [m3/m3] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(inout) :: snliq !< snow layer liquid water [mm] #ifdef CCPP character(len=*) , intent(inout) :: errmsg integer , intent(inout) :: errflg @@ -6581,6 +6591,7 @@ end subroutine frh2o !== begin water ==================================================================================== !>\ingroup NoahMP_LSM +!! compute water budgets (water storages, et components, and runoff) subroutine water (parameters,vegtyp ,nsnow ,nsoil ,imelt ,dt ,uu , & !in vv ,fcev ,fctr ,qprecc ,qprecl ,elai , & !in esai ,sfctmp ,qvap ,qdew ,zsoil ,btrani , & !in @@ -6601,83 +6612,83 @@ subroutine water (parameters,vegtyp ,nsnow ,nsoil ,imelt ,dt ,uu , & implicit none ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: vegtyp !vegetation type - integer, intent(in) :: nsnow !maximum no. of snow layers - integer , intent(in) :: ist !surface type 1-soil; 2-lake - integer, intent(in) :: nsoil !no. of soil layers - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [1-melt; 2-freeze] - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: uu !u-direction wind speed [m/s] - real (kind=kind_phys), intent(in) :: vv !v-direction wind speed [m/s] - real (kind=kind_phys), intent(in) :: fcev !canopy evaporation (w/m2) [+ to atm ] - real (kind=kind_phys), intent(in) :: fctr !transpiration (w/m2) [+ to atm] - real (kind=kind_phys), intent(in) :: qprecc !convective precipitation (mm/s) - real (kind=kind_phys), intent(in) :: qprecl !large-scale precipitation (mm/s) - real (kind=kind_phys), intent(in) :: elai !leaf area index, after burying by snow - real (kind=kind_phys), intent(in) :: esai !stem area index, after burying by snow - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys), intent(in) :: qvap !soil surface evaporation rate[mm/s] - real (kind=kind_phys), intent(in) :: qdew !soil surface dew rate[mm/s] - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !depth of layer-bottom from soil surface - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: btrani !soil water stress factor (0 to 1) - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold !ice fraction at last timestep -! real (kind=kind_phys) , intent(in) :: ponding ![mm] - real (kind=kind_phys) , intent(in) :: tg !ground temperature (k) - real (kind=kind_phys) , intent(in) :: fveg !greeness vegetation fraction (-) - real (kind=kind_phys) , intent(in) :: bdfall !bulk density of snowfall (kg/m3) ! mb/an: v3.7 - real (kind=kind_phys) , intent(in) :: fp !fraction of the gridcell that receives precipitation ! mb/an: v3.7 - real (kind=kind_phys) , intent(in) :: rain !rainfall (mm/s) ! mb/an: v3.7 - real (kind=kind_phys) , intent(in) :: snow !snowfall (mm/s) ! mb/an: v3.7 - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: smceq !equilibrium soil water content [m3/m3] (used in m-m&f groundwater dynamics) - real (kind=kind_phys) , intent(in) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys) , intent(in) :: qrain !rain at ground srf (mm) [+] - real (kind=kind_phys) , intent(in) :: snowhin !snow depth increasing rate (m/s) + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: vegtyp !< vegetation type + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer , intent(in) :: ist !< surface type 1-soil; 2-lake + integer, intent(in) :: nsoil !< no. of soil layers + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [1-melt; 2-freeze] + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: uu !< u-direction wind speed [m/s] + real (kind=kind_phys), intent(in) :: vv !< v-direction wind speed [m/s] + real (kind=kind_phys), intent(in) :: fcev !\ingroup NoahMP_LSM +!! subroutine snowwater (parameters,nsnow ,nsoil ,imelt ,dt ,zsoil , & !in sfctmp ,snowhin,qsnow ,qsnfro ,qsnsub , & !in qrain ,ficeold,iloc ,jloc , & !in @@ -6957,39 +6969,39 @@ subroutine snowwater (parameters,nsnow ,nsoil ,imelt ,dt ,zsoil , & !in implicit none ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [0-no melt;1-melt] - real (kind=kind_phys), intent(in) :: dt !time step (s) - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !depth of layer-bottom from soil surface - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] - real (kind=kind_phys), intent(in) :: snowhin!snow depth increasing rate (m/s) - real (kind=kind_phys), intent(in) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(in) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys), intent(in) :: qsnsub !snow surface sublimation rate[mm/s] - real (kind=kind_phys), intent(in) :: qrain !snow surface rain rate[mm/s] - real (kind=kind_phys), dimension(-nsnow+1:0) , intent(in) :: ficeold!ice fraction at last timestep + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [0-no melt;1-melt] + real (kind=kind_phys), intent(in) :: dt !< time step (s) + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< depth of layer-bottom from soil surface + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] + real (kind=kind_phys), intent(in) :: snowhin!< snow depth increasing rate (m/s) + real (kind=kind_phys), intent(in) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(in) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys), intent(in) :: qsnsub !< snow surface sublimation rate[mm/s] + real (kind=kind_phys), intent(in) :: qrain !< snow surface rain rate[mm/s] + real (kind=kind_phys), dimension(-nsnow+1:0) , intent(in) :: ficeold!< ice fraction at last timestep ! input & output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !depth of snow/soil layer-bottom - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !snow/soil layer thickness [m] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< depth of snow/soil layer-bottom + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow/soil layer thickness [m] ! output - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] - real (kind=kind_phys), intent(out) :: snoflow!glacier flow [mm] - real (kind=kind_phys), intent(out) :: ponding1 - real (kind=kind_phys), intent(out) :: ponding2 + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: snoflow!< glacier flow [mm] + real (kind=kind_phys), intent(out) :: ponding1 !< + real (kind=kind_phys), intent(out) :: ponding2 !< ! local integer :: iz,i @@ -7097,25 +7109,25 @@ subroutine snowfall (parameters,nsoil ,nsnow ,dt ,qsnow ,snowhin , & !in ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: nsoil !no. of soil layers - integer, intent(in) :: nsnow !maximum no. of snow layers - real (kind=kind_phys), intent(in) :: dt !main time step (s) - real (kind=kind_phys), intent(in) :: qsnow !snow at ground srf (mm/s) [+] - real (kind=kind_phys), intent(in) :: snowhin!snow depth increasing rate (m/s) - real (kind=kind_phys), intent(in) :: sfctmp !surface air temperature [k] + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: nsoil !< no. of soil layers + integer, intent(in) :: nsnow !< maximum no. of snow layers + real (kind=kind_phys), intent(in) :: dt !< main time step (s) + real (kind=kind_phys), intent(in) :: qsnow !< snow at ground srf (mm/s) [+] + real (kind=kind_phys), intent(in) :: snowhin!< snow depth increasing rate (m/s) + real (kind=kind_phys), intent(in) :: sfctmp !< surface air temperature [k] ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), intent(inout) :: snowh !snow depth [m] - real (kind=kind_phys), intent(inout) :: sneqv !swow water equivalent [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !thickness of snow/soil layers (m) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), intent(inout) :: snowh !< snow depth [m] + real (kind=kind_phys), intent(inout) :: sneqv !< swow water equivalent [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< thickness of snow/soil layers (m) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] ! local @@ -7156,6 +7168,7 @@ end subroutine snowfall !== begin combine ================================================================================== !>\ingroup NoahMP_LSM +!! subroutine combine (parameters,nsnow ,nsoil ,iloc ,jloc , & !in isnow ,sh2o ,stc ,snice ,snliq , & !inout dzsnso ,sice ,snowh ,sneqv , & !inout @@ -7165,25 +7178,25 @@ subroutine combine (parameters,nsnow ,nsoil ,iloc ,jloc , & !in ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc - integer, intent(in) :: jloc - integer, intent(in) :: nsnow !maximum no. of snow layers - integer, intent(in) :: nsoil !no. of soil layers + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< + integer, intent(in) :: jloc !< + integer, intent(in) :: nsnow !< maximum no. of snow layers + integer, intent(in) :: nsoil !< no. of soil layers ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!snow layer depth [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water equivalent [m] - real (kind=kind_phys), intent(inout) :: snowh !snow depth [m] - real (kind=kind_phys), intent(out) :: ponding1 - real (kind=kind_phys), intent(out) :: ponding2 + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!< snow layer depth [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water equivalent [m] + real (kind=kind_phys), intent(inout) :: snowh !< snow depth [m] + real (kind=kind_phys), intent(out) :: ponding1 !< + real (kind=kind_phys), intent(out) :: ponding2 !< ! local variables: @@ -7345,6 +7358,7 @@ end subroutine combine !== begin divide =================================================================================== !>\ingroup NoahMP_LSM +!! subroutine divide (parameters,nsnow ,nsoil , & !in isnow ,stc ,snice ,snliq ,dzsnso ) !inout ! ---------------------------------------------------------------------- @@ -7352,17 +7366,17 @@ subroutine divide (parameters,nsnow ,nsoil , & !in ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: nsnow !maximum no. of snow layers [ =3] - integer, intent(in) :: nsoil !no. of soil layers [ =4] + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: nsnow !< maximum no. of snow layers [ =3] + integer, intent(in) :: nsoil !< no. of soil layers [ =4] ! input and output - integer , intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!snow layer depth [m] + integer , intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso!< snow layer depth [m] ! local variables: @@ -7474,6 +7488,7 @@ end subroutine divide !== begin combo ==================================================================================== !>\ingroup NoahMP_LSM +!! subroutine combo(parameters,dz, wliq, wice, t, dz2, wliq2, wice2, t2) ! ---------------------------------------------------------------------- implicit none @@ -7482,15 +7497,15 @@ subroutine combo(parameters,dz, wliq, wice, t, dz2, wliq2, wice2, t2) ! ----------------------------------------------------------------------s ! input - type (noahmp_parameters), intent(in) :: parameters - real (kind=kind_phys), intent(in) :: dz2 !nodal thickness of 2 elements being combined [m] - real (kind=kind_phys), intent(in) :: wliq2 !liquid water of element 2 [kg/m2] - real (kind=kind_phys), intent(in) :: wice2 !ice of element 2 [kg/m2] - real (kind=kind_phys), intent(in) :: t2 !nodal temperature of element 2 [k] - real (kind=kind_phys), intent(inout) :: dz !nodal thickness of 1 elements being combined [m] - real (kind=kind_phys), intent(inout) :: wliq !liquid water of element 1 - real (kind=kind_phys), intent(inout) :: wice !ice of element 1 [kg/m2] - real (kind=kind_phys), intent(inout) :: t !node temperature of element 1 [k] + type (noahmp_parameters), intent(in) :: parameters !< + real (kind=kind_phys), intent(in) :: dz2 !< nodal thickness of 2 elements being combined [m] + real (kind=kind_phys), intent(in) :: wliq2 !< liquid water of element 2 [kg/m2] + real (kind=kind_phys), intent(in) :: wice2 !< ice of element 2 [kg/m2] + real (kind=kind_phys), intent(in) :: t2 !< nodal temperature of element 2 [k] + real (kind=kind_phys), intent(inout) :: dz !< nodal thickness of 1 elements being combined [m] + real (kind=kind_phys), intent(inout) :: wliq !< liquid water of element 1 + real (kind=kind_phys), intent(inout) :: wice !< ice of element 1 [kg/m2] + real (kind=kind_phys), intent(inout) :: t !< node temperature of element 1 [k] ! local @@ -7529,6 +7544,7 @@ end subroutine combo !== begin compact ================================================================================== !>\ingroup NoahMP_LSM +!! subroutine compact (parameters,nsnow ,nsoil ,dt ,stc ,snice , & !in snliq ,zsoil ,imelt ,ficeold,iloc , jloc , & !in isnow ,dzsnso ,zsnso ) !inout @@ -7536,23 +7552,23 @@ subroutine compact (parameters,nsnow ,nsoil ,dt ,stc ,snice , & !in implicit none ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: nsoil !no. of soil layers [ =4] - integer, intent(in) :: nsnow !maximum no. of snow layers [ =3] - integer, dimension(-nsnow+1:0) , intent(in) :: imelt !melting state index [0-no melt;1-melt] - real (kind=kind_phys), intent(in) :: dt !time step (sec) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !snow layer temperature [k] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !depth of layer-bottom from soil srf - real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!ice fraction at last timestep + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: nsoil !< no. of soil layers [ =4] + integer, intent(in) :: nsnow !< maximum no. of snow layers [ =3] + integer, dimension(-nsnow+1:0) , intent(in) :: imelt !< melting state index [0-no melt;1-melt] + real (kind=kind_phys), intent(in) :: dt !< time step (sec) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: stc !< snow layer temperature [k] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(in) :: zsoil !< depth of layer-bottom from soil srf + real (kind=kind_phys), dimension(-nsnow+1: 0), intent(in) :: ficeold!< ice fraction at last timestep ! input and output - integer, intent(inout) :: isnow ! actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso ! snow layer thickness [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso ! depth of snow/soil layer-bottom + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow layer thickness [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: zsnso !< depth of snow/soil layer-bottom ! local real (kind=kind_phys), parameter :: c2 = 21.e-3 ![m3/kg] ! default 21.e-3 @@ -7651,31 +7667,31 @@ subroutine snowh2o (parameters,nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: nsnow !maximum no. of snow layers[=3] - integer, intent(in) :: nsoil !no. of soil layers[=4] - real (kind=kind_phys), intent(in) :: dt !time step - real (kind=kind_phys), intent(in) :: qsnfro !snow surface frost rate[mm/s] - real (kind=kind_phys), intent(in) :: qsnsub !snow surface sublimation rate[mm/s] - real (kind=kind_phys), intent(in) :: qrain !snow surface rain rate[mm/s] + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: nsnow !< maximum no. of snow layers[=3] + integer, intent(in) :: nsoil !< no. of soil layers[=4] + real (kind=kind_phys), intent(in) :: dt !< time step + real (kind=kind_phys), intent(in) :: qsnfro !< snow surface frost rate[mm/s] + real (kind=kind_phys), intent(in) :: qsnsub !< snow surface sublimation rate[mm/s] + real (kind=kind_phys), intent(in) :: qrain !< snow surface rain rate[mm/s] ! output - real (kind=kind_phys), intent(out) :: qsnbot !melting water out of snow bottom [mm/s] + real (kind=kind_phys), intent(out) :: qsnbot !< melting water out of snow bottom [mm/s] ! input and output - integer, intent(inout) :: isnow !actual no. of snow layers - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso ! snow layer depth [m] - real (kind=kind_phys), intent(inout) :: snowh !snow height [m] - real (kind=kind_phys), intent(inout) :: sneqv !snow water eqv. [mm] - real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snice !snow layer ice [mm] - real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snliq !snow layer liquid water [mm] - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !soil liquid moisture (m3/m3) - real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !soil ice moisture (m3/m3) - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !snow layer temperature [k] + integer, intent(inout) :: isnow !< actual no. of snow layers + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: dzsnso !< snow layer depth [m] + real (kind=kind_phys), intent(inout) :: snowh !< snow height [m] + real (kind=kind_phys), intent(inout) :: sneqv !< snow water eqv. [mm] + real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snice !< snow layer ice [mm] + real (kind=kind_phys), dimension(-nsnow+1:0), intent(inout) :: snliq !< snow layer liquid water [mm] + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sh2o !< soil liquid moisture (m3/m3) + real (kind=kind_phys), dimension( 1:nsoil), intent(inout) :: sice !< soil ice moisture (m3/m3) + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(inout) :: stc !< snow layer temperature [k] ! local variables: @@ -7802,34 +7818,34 @@ subroutine soilwater (parameters,nsoil ,nsnow ,dt ,zsoil ,dzsnso , & !in implicit none ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: iloc !grid index - integer, intent(in) :: jloc !grid index - integer, intent(in) :: nsoil !no. of soil layers - integer, intent(in) :: nsnow !maximum no. of snow layers - real (kind=kind_phys), intent(in) :: dt !time step (sec) - real (kind=kind_phys), intent(in) :: qinsur !water input on soil surface [mm/s] - real (kind=kind_phys), intent(in) :: qseva !evap from soil surface [mm/s] - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: zsoil !depth of soil layer-bottom [m] - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: etrani !evapotranspiration from soil layers [mm/s] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer depth [m] - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: sice !soil ice content [m3/m3] + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: iloc !< grid index + integer, intent(in) :: jloc !< grid index + integer, intent(in) :: nsoil !< no. of soil layers + integer, intent(in) :: nsnow !< maximum no. of snow layers + real (kind=kind_phys), intent(in) :: dt !< time step (sec) + real (kind=kind_phys), intent(in) :: qinsur !< water input on soil surface [mm/s] + real (kind=kind_phys), intent(in) :: qseva !< evap from soil surface [mm/s] + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: zsoil !< depth of soil layer-bottom [m] + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: etrani !< evapotranspiration from soil layers [mm/s] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer depth [m] + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: sice !< soil ice content [m3/m3] integer, intent(in) :: vegtyp ! input & output - real (kind=kind_phys), dimension(1:nsoil), intent(inout) :: sh2o !soil liquid water content [m3/m3] - real (kind=kind_phys), dimension(1:nsoil), intent(inout) :: smc !total soil water content [m3/m3] - real (kind=kind_phys), intent(inout) :: zwt !water table depth [m] - real (kind=kind_phys), intent(inout) :: smcwtd !soil moisture between bottom of the soil and the water table [m3/m3] - real (kind=kind_phys) , intent(inout) :: deeprech + real (kind=kind_phys), dimension(1:nsoil), intent(inout) :: sh2o !< soil liquid water content [m3/m3] + real (kind=kind_phys), dimension(1:nsoil), intent(inout) :: smc !< total soil water content [m3/m3] + real (kind=kind_phys), intent(inout) :: zwt !< water table depth [m] + real (kind=kind_phys), intent(inout) :: smcwtd !< soil moisture between bottom of the soil and the water table [m3/m3] + real (kind=kind_phys) , intent(inout) :: deeprech !< ! output - real (kind=kind_phys), intent(out) :: qdrain !soil-bottom free drainage [mm/s] - real (kind=kind_phys), intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys), intent(out) :: runsub !subsurface runoff [mm/s] - real (kind=kind_phys), intent(out) :: fcrmax !maximum of fcr (-) - real (kind=kind_phys), dimension(1:nsoil), intent(out) :: wcnd !hydraulic conductivity (m/s) + real (kind=kind_phys), intent(out) :: qdrain !< soil-bottom free drainage [mm/s] + real (kind=kind_phys), intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys), intent(out) :: runsub !< subsurface runoff [mm/s] + real (kind=kind_phys), intent(out) :: fcrmax !< maximum of fcr (-) + real (kind=kind_phys), dimension(1:nsoil), intent(out) :: wcnd !< hydraulic conductivity (m/s) ! local integer :: k,iz !do-loop index @@ -8071,16 +8087,16 @@ subroutine zwteq (parameters,nsoil ,nsnow ,zsoil ,dzsnso ,sh2o ,zwt) ! ---------------------------------------------------------------------- ! input - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: nsoil !no. of soil layers - integer, intent(in) :: nsnow !maximum no. of snow layers - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: zsoil !depth of soil layer-bottom [m] - real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !snow/soil layer depth [m] - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: sh2o !soil liquid water content [m3/m3] + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: nsoil !< no. of soil layers + integer, intent(in) :: nsnow !< maximum no. of snow layers + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: zsoil !< depth of soil layer-bottom [m] + real (kind=kind_phys), dimension(-nsnow+1:nsoil), intent(in) :: dzsnso !< snow/soil layer depth [m] + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: sh2o !< soil liquid water content [m3/m3] ! output - real (kind=kind_phys), intent(out) :: zwt !water table depth [m] + real (kind=kind_phys), intent(out) :: zwt !< water table depth [m] ! locals @@ -8130,18 +8146,18 @@ subroutine infil (parameters,nsoil ,dt ,zsoil ,sh2o ,sice , & !in implicit none ! -------------------------------------------------------------------------------- ! inputs - type (noahmp_parameters), intent(in) :: parameters - integer, intent(in) :: nsoil !no. of soil layers - real (kind=kind_phys), intent(in) :: dt !time step (sec) - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: zsoil !depth of soil layer-bottom [m] - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: sh2o !soil liquid water content [m3/m3] - real (kind=kind_phys), dimension(1:nsoil), intent(in) :: sice !soil ice content [m3/m3] - real (kind=kind_phys), intent(in) :: qinsur !water input on soil surface [mm/s] - real (kind=kind_phys), intent(in) :: sicemax!maximum soil ice content (m3/m3) + type (noahmp_parameters), intent(in) :: parameters !< + integer, intent(in) :: nsoil !< no. of soil layers + real (kind=kind_phys), intent(in) :: dt !< time step (sec) + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: zsoil !< depth of soil layer-bottom [m] + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: sh2o !< soil liquid water content [m3/m3] + real (kind=kind_phys), dimension(1:nsoil), intent(in) :: sice !< soil ice content [m3/m3] + real (kind=kind_phys), intent(in) :: qinsur !< water input on soil surface [mm/s] + real (kind=kind_phys), intent(in) :: sicemax!< maximum soil ice content (m3/m3) ! outputs - real (kind=kind_phys), intent(out) :: runsrf !surface runoff [mm/s] - real (kind=kind_phys), intent(out) :: pddum !infiltration rate at surface + real (kind=kind_phys), intent(out) :: runsrf !< surface runoff [mm/s] + real (kind=kind_phys), intent(out) :: pddum !< infiltration rate at surface ! locals integer :: ialp1, j, jj, k @@ -8575,6 +8591,7 @@ end subroutine wdfcnd2 !== begin groundwater ============================================================================== !>\ingroup NoahMP_LSM +!! subroutine groundwater(parameters,nsnow ,nsoil ,dt ,sice ,zsoil , & !in stc ,wcnd ,fcrmax ,iloc ,jloc , & !in sh2o ,zwt ,wa ,wt , & !inout @@ -8912,6 +8929,7 @@ end subroutine shallowwatertable !== begin carbon =================================================================================== !>\ingroup NoahMP_LSM +!! subroutine carbon (parameters,nsnow ,nsoil ,vegtyp ,dt ,zsoil , & !in dzsnso ,stc ,smc ,tv ,tg ,psn , & !in foln ,btran ,apar ,fveg ,igs , & !in @@ -9703,6 +9721,7 @@ end subroutine co2flux_crop !== begin growing_gdd ============================================================================== !>\ingroup NoahMP_LSM +!! subroutine growing_gdd (parameters, & !in t2m , dt, julian, & !in gdd , & !inout @@ -9712,19 +9731,19 @@ subroutine growing_gdd (parameters, & !in ! input type (noahmp_parameters), intent(in) :: parameters - real (kind=kind_phys) , intent(in) :: t2m !air temperature - real (kind=kind_phys) , intent(in) :: dt !time step (s) - real (kind=kind_phys) , intent(in) :: julian !julian day of year (fractional) ( 0 <= julian < yearlen ) + real (kind=kind_phys) , intent(in) :: t2m !< air temperature + real (kind=kind_phys) , intent(in) :: dt !< time step (s) + real (kind=kind_phys) , intent(in) :: julian !< julian day of year (fractional) ( 0 <= julian < yearlen ) ! input and output - real (kind=kind_phys) , intent(inout) :: gdd !growing degress days + real (kind=kind_phys) , intent(inout) :: gdd !< growing degress days ! output - integer , intent(out) :: ipa !planting index index(0=off, 1=on) - integer , intent(out) :: iha !havestindex(0=on,1=off) - integer , intent(out) :: pgs !plant growth stage(1=s1,2=s2,3=s3) + integer , intent(out) :: ipa !< planting index index(0=off, 1=on) + integer , intent(out) :: iha !< havestindex(0=on,1=off) + integer , intent(out) :: pgs !< plant growth stage(1=s1,2=s2,3=s3) !local @@ -9800,6 +9819,7 @@ end subroutine growing_gdd !== begin psn_crop ================================================================================= !>\ingroup NoahMP_LSM +!! subroutine psn_crop ( parameters, & !in soldn, xlai,t2m, & !in psncrop ) !out @@ -9808,10 +9828,10 @@ subroutine psn_crop ( parameters, & !in ! input type (noahmp_parameters), intent(in) :: parameters - real (kind=kind_phys) , intent(in) :: soldn ! downward solar radiation - real (kind=kind_phys) , intent(in) :: xlai ! lai - real (kind=kind_phys) , intent(in) :: t2m ! air temp - real (kind=kind_phys) , intent(out) :: psncrop ! + real (kind=kind_phys) , intent(in) :: soldn !< downward solar radiation + real (kind=kind_phys) , intent(in) :: xlai !< lai + real (kind=kind_phys) , intent(in) :: t2m !< air temp + real (kind=kind_phys) , intent(out) :: psncrop !< !local @@ -9980,31 +10000,32 @@ end subroutine psn_crop !== begin noahmp_options =========================================================================== !>\ingroup NoahMP_LSM +!! subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc ,iopt_frz , & iopt_inf ,iopt_rad ,iopt_alb ,iopt_snf ,iopt_tbot, iopt_stc, & iopt_rsf , iopt_soil, iopt_pedo, iopt_crop ,iopt_trs ) implicit none - integer, intent(in) :: idveg !dynamic vegetation (1 -> off ; 2 -> on) with opt_crs = 1 - integer, intent(in) :: iopt_crs !canopy stomatal resistance (1-> ball-berry; 2->jarvis) - integer, intent(in) :: iopt_btr !soil moisture factor for stomatal resistance (1-> noah; 2-> clm; 3-> ssib) - integer, intent(in) :: iopt_run !runoff and groundwater (1->simgm; 2->simtop; 3->schaake96; 4->bats) - integer, intent(in) :: iopt_sfc !surface layer drag coeff (ch & cm) (1->m-o; 2->chen97) - integer, intent(in) :: iopt_frz !supercooled liquid water (1-> ny06; 2->koren99) - integer, intent(in) :: iopt_inf !frozen soil permeability (1-> ny06; 2->koren99) - integer, intent(in) :: iopt_rad !radiation transfer (1->gap=f(3d,cosz); 2->gap=0; 3->gap=1-fveg) - integer, intent(in) :: iopt_alb !snow surface albedo (1->bats; 2->class) - integer, intent(in) :: iopt_snf !rainfall & snowfall (1-jordan91; 2->bats; 3->noah) - integer, intent(in) :: iopt_tbot !lower boundary of soil temperature (1->zero-flux; 2->noah) - - integer, intent(in) :: iopt_stc !snow/soil temperature time scheme (only layer 1) - ! 1 -> semi-implicit; 2 -> full implicit (original noah) - integer, intent(in) :: iopt_rsf !surface resistance (1->sakaguchi/zeng; 2->seller; 3->mod sellers; 4->1+snow) - integer, intent(in) :: iopt_soil !soil parameters set-up option - integer, intent(in) :: iopt_pedo !pedo-transfer function (1->saxton and rawls) - integer, intent(in) :: iopt_crop !crop model option (0->none; 1->liu et al.) - integer, intent(in) :: iopt_trs !thermal roughness scheme option (1->z0h=z0; 2->rb reversed) + integer, intent(in) :: idveg !< dynamic vegetation (1 -> off ; 2 -> on) with opt_crs = 1 + integer, intent(in) :: iopt_crs !< canopy stomatal resistance (1-> ball-berry; 2->jarvis) + integer, intent(in) :: iopt_btr !< soil moisture factor for stomatal resistance (1-> noah; 2-> clm; 3-> ssib) + integer, intent(in) :: iopt_run !< runoff and groundwater (1->simgm; 2->simtop; 3->schaake96; 4->bats) + integer, intent(in) :: iopt_sfc !< surface layer drag coeff (ch & cm) (1->m-o; 2->chen97) + integer, intent(in) :: iopt_frz !< supercooled liquid water (1-> ny06; 2->koren99) + integer, intent(in) :: iopt_inf !< frozen soil permeability (1-> ny06; 2->koren99) + integer, intent(in) :: iopt_rad !< radiation transfer (1->gap=f(3d,cosz); 2->gap=0; 3->gap=1-fveg) + integer, intent(in) :: iopt_alb !< snow surface albedo (1->bats; 2->class) + integer, intent(in) :: iopt_snf !< rainfall & snowfall (1-jordan91; 2->bats; 3->noah) + integer, intent(in) :: iopt_tbot !< lower boundary of soil temperature (1->zero-flux; 2->noah) + + integer, intent(in) :: iopt_stc !< snow/soil temperature time scheme (only layer 1) + !! 1 -> semi-implicit; 2 -> full implicit (original noah) + integer, intent(in) :: iopt_rsf !< surface resistance (1->sakaguchi/zeng; 2->seller; 3->mod sellers; 4->1+snow) + integer, intent(in) :: iopt_soil !< soil parameters set-up option + integer, intent(in) :: iopt_pedo !< pedo-transfer function (1->saxton and rawls) + integer, intent(in) :: iopt_crop !< crop model option (0->none; 1->liu et al.) + integer, intent(in) :: iopt_trs !< thermal roughness scheme option (1->z0h=z0; 2->rb reversed) ! ------------------------------------------------------------------------------------------------- @@ -10029,6 +10050,8 @@ subroutine noahmp_options(idveg ,iopt_crs ,iopt_btr ,iopt_run ,iopt_sfc end subroutine noahmp_options +!>\ingroup NoahMP_LSM +!! subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & p1d ,psfcpa,pblhx ,dx ,znt , & ep_1, ep_2, cp, & @@ -10036,55 +10059,55 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & tsk ,qx ,zlvl ,iz0tlnd,qsfc , & hfx ,qfx ,cm ,chs ,chs2 , & cqs2 , & - rmolx ,ust , rbx, fmx, fhx,stressx,& + rmolx ,ust , rbx, fmx, fhx,stressx,& fm10x, fh2x, wspdx,flhcx,flqcx) -!------------------------------------------------------------------- - implicit none -!------------------------------------------------------------------- - -! input +!------------------------------------------------------------------- + implicit none +!------------------------------------------------------------------- + +! input - integer,intent(in ) :: iloc - integer,intent(in ) :: jloc + integer,intent(in ) :: iloc + integer,intent(in ) :: jloc integer, intent(in) :: itime integer, intent(in) :: psi_opt - integer, intent(in) :: isice ! for the glacier/snowh > 0.1m - - real(kind=kind_phys), intent(in ) :: pblhx ! planetary boundary layer height - real(kind=kind_phys), intent(in ) :: tsk ! skin temperature - real(kind=kind_phys), intent(in ) :: psfcpa ! pressure in pascal - real(kind=kind_phys), intent(in ) :: p1d !lowest model layer pressure (pa) - real(kind=kind_phys), intent(in ) :: t1d !lowest model layer temperature - real(kind=kind_phys), intent(in ) :: qx !water vapor specific humidity (kg/kg) from input - real(kind=kind_phys), intent(in ) :: zlvl ! thickness of lowest full level layer - real(kind=kind_phys), intent(in ) :: hfx ! sensible heat flux - real(kind=kind_phys), intent(in ) :: qfx ! moisture flux - real(kind=kind_phys), intent(in ) :: dx ! horisontal grid spacing - real(kind=kind_phys), intent(in ) :: ux ! u and v winds - real(kind=kind_phys), intent(in ) :: vx - real(kind=kind_phys), intent(in ) :: znt ! z0m in m or inout - real(kind=kind_phys), intent(in ) :: snwh ! in mm + integer, intent(in) :: isice !< for the glacier/snowh > 0.1m + + real(kind=kind_phys), intent(in ) :: pblhx !< planetary boundary layer height + real(kind=kind_phys), intent(in ) :: tsk !< skin temperature + real(kind=kind_phys), intent(in ) :: psfcpa !< pressure in pascal + real(kind=kind_phys), intent(in ) :: p1d !< lowest model layer pressure (pa) + real(kind=kind_phys), intent(in ) :: t1d !< lowest model layer temperature + real(kind=kind_phys), intent(in ) :: qx !< water vapor specific humidity (kg/kg) from input + real(kind=kind_phys), intent(in ) :: zlvl !< thickness of lowest full level layer + real(kind=kind_phys), intent(in ) :: hfx !< sensible heat flux + real(kind=kind_phys), intent(in ) :: qfx !< moisture flux + real(kind=kind_phys), intent(in ) :: dx !< horisontal grid spacing + real(kind=kind_phys), intent(in ) :: ux !< u and v winds + real(kind=kind_phys), intent(in ) :: vx !< + real(kind=kind_phys), intent(in ) :: znt !< z0m in m or inout + real(kind=kind_phys), intent(in ) :: snwh !< in mm real(kind=kind_phys), intent(in ) :: ep_1 real(kind=kind_phys), intent(in ) :: ep_2 real(kind=kind_phys), intent(in ) :: cp -! optional vars +! optional vars - integer,optional,intent(in ) :: iz0tlnd + integer,optional,intent(in ) :: iz0tlnd real(kind=kind_phys), intent(inout) :: qsfc - real(kind=kind_phys), intent(inout) :: ust - real(kind=kind_phys), intent(inout) :: chs - real(kind=kind_phys), intent(inout) :: chs2 - real(kind=kind_phys), intent(inout) :: cqs2 - real(kind=kind_phys), intent(inout) :: cm + real(kind=kind_phys), intent(inout) :: ust + real(kind=kind_phys), intent(inout) :: chs + real(kind=kind_phys), intent(inout) :: chs2 + real(kind=kind_phys), intent(inout) :: cqs2 + real(kind=kind_phys), intent(inout) :: cm - real(kind=kind_phys), intent(inout) :: rmolx + real(kind=kind_phys), intent(inout) :: rmolx real(kind=kind_phys), intent(inout) :: rbx real(kind=kind_phys), intent(inout) :: fmx real(kind=kind_phys), intent(inout) :: fhx @@ -10094,57 +10117,57 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & real(kind=kind_phys), intent(inout) :: wspdx real(kind=kind_phys), intent(inout) :: flhcx - real(kind=kind_phys), intent(inout) :: flqcx + real(kind=kind_phys), intent(inout) :: flqcx real(kind=kind_phys) :: zolx real(kind=kind_phys) :: molx - -! diagnostics out -! real, intent(out) :: u10 -! real, intent(out) :: v10 -! real, intent(out) :: th2 -! real, intent(out) :: t2 -! real, intent(out) :: q2 -! real, intent(out) :: qsfc - - -! local - - real(kind=kind_phys) :: za ! height of full-sigma level - real(kind=kind_phys) :: thvx ! virtual potential temperature - real(kind=kind_phys) :: zqkl ! height of upper half level - real(kind=kind_phys) :: zqklp1 ! height of lower half level (surface) - real(kind=kind_phys) :: thx ! potential temperature - real(kind=kind_phys) :: psih ! similarity function for heat - real(kind=kind_phys) :: psih2 ! similarity function for heat 2m - real(kind=kind_phys) :: psih10 ! similarity function for heat 10m - real(kind=kind_phys) :: psim ! similarity function for momentum - real(kind=kind_phys) :: psim2 ! similarity function for momentum 2m - real(kind=kind_phys) :: psim10 ! similarity function for momentum 10m - - real(kind=kind_phys) :: gz1oz0 ! log(za/z0) - real(kind=kind_phys) :: gz2oz0 ! log(z2/z0) - real(kind=kind_phys) :: gz10oz0 ! log(z10/z0) - - real(kind=kind_phys) :: rhox ! density - real(kind=kind_phys) :: govrth ! g/theta for stability l - real(kind=kind_phys) :: tgdsa ! tsk - real(kind=kind_phys) :: tvir ! temporal variable src4 -> tvir - real(kind=kind_phys) :: thgb ! potential temperature ground - real(kind=kind_phys) :: psfcx ! surface pressure - real(kind=kind_phys) :: cpm - real(kind=kind_phys) :: qgh - - integer :: n,i,k,kk,l,nzol,nk,nzol2,nzol10 + +! diagnostics out +! real, intent(out) :: u10 +! real, intent(out) :: v10 +! real, intent(out) :: th2 +! real, intent(out) :: t2 +! real, intent(out) :: q2 +! real, intent(out) :: qsfc + + +! local + + real(kind=kind_phys) :: za ! height of full-sigma level + real(kind=kind_phys) :: thvx ! virtual potential temperature + real(kind=kind_phys) :: zqkl ! height of upper half level + real(kind=kind_phys) :: zqklp1 ! height of lower half level (surface) + real(kind=kind_phys) :: thx ! potential temperature + real(kind=kind_phys) :: psih ! similarity function for heat + real(kind=kind_phys) :: psih2 ! similarity function for heat 2m + real(kind=kind_phys) :: psih10 ! similarity function for heat 10m + real(kind=kind_phys) :: psim ! similarity function for momentum + real(kind=kind_phys) :: psim2 ! similarity function for momentum 2m + real(kind=kind_phys) :: psim10 ! similarity function for momentum 10m + + real(kind=kind_phys) :: gz1oz0 ! log(za/z0) + real(kind=kind_phys) :: gz2oz0 ! log(z2/z0) + real(kind=kind_phys) :: gz10oz0 ! log(z10/z0) + + real(kind=kind_phys) :: rhox ! density + real(kind=kind_phys) :: govrth ! g/theta for stability l + real(kind=kind_phys) :: tgdsa ! tsk + real(kind=kind_phys) :: tvir ! temporal variable src4 -> tvir + real(kind=kind_phys) :: thgb ! potential temperature ground + real(kind=kind_phys) :: psfcx ! surface pressure + real(kind=kind_phys) :: cpm + real(kind=kind_phys) :: qgh + + integer :: n,i,k,kk,l,nzol,nk,nzol2,nzol10 real(kind=kind_phys) :: zolzt, zolz0, zolza real(kind=kind_phys) :: gz1ozt,gz2ozt,gz10ozt - - real(kind=kind_phys) :: pl,thcon,tvcon,e1 - real(kind=kind_phys) :: zl,tskv,dthvdz,dthvm,vconv,rzol,rzol2,rzol10,zol2,zol10 - real(kind=kind_phys) :: dtg,psix,dtthx,psix10,psit,psit2,psiq,psiq2,psiq10 - real(kind=kind_phys) :: fluxc,vsgd,z0q,visc,restar,czil,restar2 + + real(kind=kind_phys) :: pl,thcon,tvcon,e1 + real(kind=kind_phys) :: zl,tskv,dthvdz,dthvm,vconv,rzol,rzol2,rzol10,zol2,zol10 + real(kind=kind_phys) :: dtg,psix,dtthx,psix10,psit,psit2,psiq,psiq2,psiq10 + real(kind=kind_phys) :: fluxc,vsgd,z0q,visc,restar,czil,restar2 real(kind=kind_phys) :: dqg real(kind=kind_phys) :: tabs @@ -10156,12 +10179,12 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & real(kind=kind_phys) :: qstar real(kind=kind_phys) :: ep2 real(kind=kind_phys) :: ep_3 -!------------------------------------------------------------------- +!------------------------------------------------------------------- - psfcx=psfcpa/1000. ! to kPa for saturation check + psfcx=psfcpa/1000. ! to kPa for saturation check ep2=ep_2 ep_3=1.-ep_2 - + if (itime == 1) then !init SP, MR if (isice == 0) then tabs = 0.5*(tsk + t1d) @@ -10227,24 +10250,24 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & endif endif !done INIT if itime=1 -! convert (tah or tgb = tsk) temperature to potential temperature. - tgdsa = tsk +! convert (tah or tgb = tsk) temperature to potential temperature. + tgdsa = tsk thgb = tsk*(p1000mb/psfcpa)**(rair/cpair) !psfcpa is pa ! store virtual, virtual potential and potential temperature - pl = p1d/1000. - thx = t1d*(p1000mb*0.001/pl)**(rair/cpair) + pl = p1d/1000. + thx = t1d*(p1000mb*0.001/pl)**(rair/cpair) t1dc = t1d - 273.15 - thvx = thx*(1.+ep_1*qx) !qx is SH from input + thvx = thx*(1.+ep_1*qx) !qx is SH from input tvir = t1d*(1.+ep_1*qx) - rhox=psfcx*1000./(rair*tvir) - govrth=grav/thx + rhox=psfcx*1000./(rair*tvir) + govrth=grav/thx za = zlvl - - !za=0.5*dz8w + + !za=0.5*dz8w ! directly from input; check units @@ -10279,21 +10302,21 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & ! cpm=cp*(1.+0.84*qx) ! qx is SH cpm=cp*(1.+0.84*qx/(1.0-qx) ) - wspdx=sqrt(ux*ux+vx*vx) + wspdx=sqrt(ux*ux+vx*vx) - tskv=thgb*(1.+ep_1*qsfc) !avg with tsurf not used - dthvdz=(thvx-tskv) + tskv=thgb*(1.+ep_1*qsfc) !avg with tsurf not used + dthvdz=(thvx-tskv) - fluxc = max(hfx/rhox/cp + ep_1*tskv*qfx/rhox,0.) !hfx + qfx are fluxes units: wm^-2 and kg m^-2 s^-1 -! vconv = vconvc*(g/tgdsa*pblh*fluxc)**.33 + fluxc = max(hfx/rhox/cp + ep_1*tskv*qfx/rhox,0.) !hfx + qfx are fluxes units: wm^-2 and kg m^-2 s^-1 +! vconv = vconvc*(g/tgdsa*pblh*fluxc)**.33 vconv = vconvc*(grav/tgdsa*min(1.5*pblhx,4000.0)*fluxc)**.33 !wstar -! vsgd = 0.32 * (max(dx/5000.-1.,0.))**.33 +! vsgd = 0.32 * (max(dx/5000.-1.,0.))**.33 - vsgd = min(0.32 * (max(dx/5000.-1.,0.))**.33,0.5) - wspdx=sqrt(wspdx*wspdx+vconv*vconv+vsgd*vsgd) - wspdx=max(wspdx,0.1) !0.1 is wmin - rbx=govrth*za*dthvdz/(wspdx*wspdx) !buld rich # + vsgd = min(0.32 * (max(dx/5000.-1.,0.))**.33,0.5) + wspdx=sqrt(wspdx*wspdx+vconv*vconv+vsgd*vsgd) + wspdx=max(wspdx,0.1) !0.1 is wmin + rbx=govrth*za*dthvdz/(wspdx*wspdx) !buld rich # if (itime == 1) then rbx=max(rbx,-2.0) @@ -10304,7 +10327,7 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & endif -! visc=(1.32+0.009*(t1d-273.15))*1.e-5 +! visc=(1.32+0.009*(t1d-273.15))*1.e-5 ! kinematic viscosity @@ -10314,7 +10337,7 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & !compute roughness reynolds number (restar) using default znt !the GFS option has been removed - restar=max(ust*znt/visc,0.1) + restar=max(ust*znt/visc,0.1) ! get zt, zq based on the input ! the GFS roughness option and spp_pbl have been removed @@ -10548,6 +10571,8 @@ subroutine sfcdif4(iloc ,jloc ,ux ,vx ,t1d , & end subroutine sfcdif4 +!>\ingroup NoahMP_LSM +!! subroutine zilitinkevich_1995(z_0,zt,zq,restar,ustar,vkc,& & landsea,iz0tlnd2,spp_pbl,rstoch) @@ -10612,6 +10637,7 @@ subroutine zilitinkevich_1995(z_0,zt,zq,restar,ustar,vkc,& end subroutine zilitinkevich_1995 +>\ingroup NoahMP_LSM !!data. the formula for land uses a constant ratio (z_0/7.4) taken !!from garratt (1992). subroutine garratt_1992(zt,zq,z_0,ren,landsea) @@ -10809,13 +10835,15 @@ subroutine li_etal_2010(zl, rib, zaz0, z0zt) end subroutine li_etal_2010 !------------------------------------------------------------------- +!>\ingroup NoahMP_LSM +!! real*8 function zolri(ri,za,z0,zt,zol1,psi_opt) - ! this iterative algorithm was taken from the revised surface layer - ! scheme in wrf-arw, written by pedro jimenez and jimy dudhia and - ! summarized in jimenez et al. (2012, mwr). this function was adapted - ! to input the thermal roughness length, zt, (as well as z0) and use initial - ! estimate of z/l. + !> this iterative algorithm was taken from the revised surface layer + !! scheme in wrf-arw, written by pedro jimenez and jimy dudhia and + !! summarized in jimenez et al. (2012, mwr). this function was adapted + !! to input the thermal roughness length, zt, (as well as z0) and use initial + !! estimate of z/l. implicit none real (kind=kind_phys), intent(in) :: ri,za,z0,zt,zol1 @@ -10995,6 +11023,8 @@ real*8 function zolrib(ri,za,z0,zt,logz0,logzt,zol1,psi_opt) end function !==================================================================== +!>\ingroup NoahMP_LSM +!! subroutine psi_init(psi_opt,errmsg,errflg) integer :: n,psi_opt diff --git a/physics/noahmpdrv.F90 b/physics/noahmpdrv.F90 index d5b1c0485..598a11b31 100644 --- a/physics/noahmpdrv.F90 +++ b/physics/noahmpdrv.F90 @@ -128,8 +128,6 @@ end subroutine noahmpdrv_init !! - Call penman() to calculate potential evaporation. !! - Calculate the surface specific humidity and convert surface sensible and latent heat fluxes in W m-2 from their kinematic values. !! - If a "guess" run, restore the land-related prognostic fields. -! ! -!----------------------------------- subroutine noahmpdrv_run & !................................... ! --- inputs: diff --git a/physics/progsigma_calc.f90 b/physics/progsigma_calc.f90 index 49a5e2a4f..fbc0225d9 100644 --- a/physics/progsigma_calc.f90 +++ b/physics/progsigma_calc.f90 @@ -4,15 +4,12 @@ !! saSAS deep and shallow convection, based on a moisture budget !! as described in Bengtsson et al. 2022. -!>\ingroup samfdeepcnv +!>\ingroup SAMFdeep SAMF_shal !! This subroutine computes a prognostic updraft area fraction !! used in the closure computations in the samfdeepcnv.f scheme -!>\ingroup samfshalcnv !! This subroutine computes a prognostic updraft area fracftion !! used in the closure computations in the samfshalcnv. scheme -!!\section progsigma General Algorithm -!> @{ - +!!\section gen_progsigma progsigma_calc General Algorithm subroutine progsigma_calc (im,km,flag_init,flag_restart, & del,tmf,qmicro,dbyo1,zdqca,omega_u,zeta,hvap, & delt,prevsq,q,kbcon1,ktcon,cnvflg,sigmain,sigmaout, & @@ -218,11 +215,4 @@ subroutine progsigma_calc (im,km,flag_init,flag_restart, & endif enddo - - end subroutine progsigma_calc -!> @} -!! @} - - - diff --git a/physics/radiation_aerosols.f b/physics/radiation_aerosols.f index 93ca3b1a0..3d5131ae6 100644 --- a/physics/radiation_aerosols.f +++ b/physics/radiation_aerosols.f @@ -560,7 +560,7 @@ subroutine aer_init & lalwflg= (mod(iaerflg/10,10) > 0) ! control flag for lw tropospheric aerosol lavoflg= (mod(iaerflg/100,10) >0) ! control flag for stratospheric volcanic aeros -!> -# Call wrt_aerlog() to write aerosol parameter configuration to output logs. +!> -# Call wrt_aerlog to write aerosol parameter configuration to output logs. if ( me == 0 ) then @@ -613,7 +613,7 @@ subroutine aer_init & if ( iaerflg /= 100 ) then -!> -# Call set_spectrum() to set up spectral one wavenumber solar/IR +!> -# Call set_spectrum to set up spectral one wavenumber solar/IR !! fluxes. call set_spectrum @@ -648,7 +648,7 @@ subroutine aer_init & endif ! end if_iaerflg_block -!> -# Call set_volcaer() to invoke stratospheric volcanic aerosol +!> -# Call set_volcaer to invoke stratospheric volcanic aerosol !! initialization. if ( lavoflg ) then diff --git a/physics/radlw_main.F90 b/physics/radlw_main.F90 index 84f0425a5..38e4b30b0 100644 --- a/physics/radlw_main.F90 +++ b/physics/radlw_main.F90 @@ -1518,7 +1518,6 @@ end subroutine rlwinit !> \brief This subroutine computes the cloud optical depth(s) for each cloudy !! layer and g-point interval. !!\param cfrac layer cloud fraction -!!\n --- for ilwcliq > 0 (prognostic cloud scheme) - - - !!\param cliqp layer in-cloud liq water path (\f$g/m^2\f$) !!\param reliq mean eff radius for liq cloud (micron) !!\param cicep layer in-cloud ice water path (\f$g/m^2\f$) @@ -1527,15 +1526,6 @@ end subroutine rlwinit !!\param cdat2 effective radius for rain drop (micron) !!\param cdat3 layer snow flake water path(\f$g/m^2\f$) !!\param cdat4 mean effective radius for snow flake(micron) -!!\n --- for ilwcliq = 0 (diagnostic cloud scheme) - - - -!!\param cliqp not used -!!\param cicep not used -!!\param reliq not used -!!\param reice not used -!!\param cdat1 layer cloud optical depth -!!\param cdat2 layer cloud single scattering albedo -!!\param cdat3 layer cloud asymmetry factor -!!\param cdat4 optional use !!\param nlay number of layer number !!\param nlp1 number of veritcal levels !!\param ipseed permutation seed for generating random numbers (isubclw>0) diff --git a/physics/radsw_main.F90 b/physics/radsw_main.F90 index f7db82cd6..ae2f21e18 100644 --- a/physics/radsw_main.F90 +++ b/physics/radsw_main.F90 @@ -1560,7 +1560,6 @@ end subroutine rswinit !> This subroutine computes the cloud optical properties for each !! cloudy layer and g-point interval. !!\param cfrac layer cloud fraction -!!\n for physparam::iswcliq > 0 (prognostic cloud scheme) - - - !!\param cliqp layer in-cloud liq water path (\f$g/m^2\f$) !!\param reliq mean eff radius for liq cloud (micron) !!\param cicep layer in-cloud ice water path (\f$g/m^2\f$) @@ -1569,15 +1568,6 @@ end subroutine rswinit !!\param cdat2 effective radius for rain drop (micron) !!\param cdat3 layer snow flake water path(\f$g/m^2\f$) !!\param cdat4 mean eff radius for snow flake(micron) -!!\n for physparam::iswcliq = 0 (diagnostic cloud scheme) - - - -!!\param cliqp not used -!!\param cicep not used -!!\param reliq not used -!!\param reice not used -!!\param cdat1 layer cloud optical depth -!!\param cdat2 layer cloud single scattering albedo -!!\param cdat3 layer cloud asymmetry factor -!!\param cdat4 optional use !!\param cf1 effective total cloud cover at surface !!\param nlay vertical layer number !!\param ipseed permutation seed for generating random numbers @@ -1593,7 +1583,6 @@ end subroutine rswinit !!\param cldfrc cloud fraction of grid mean value !!\param cldfmc cloud fraction for each sub-column !!\section General_cldprop cldprop General Algorithm -!----------------------------------- subroutine cldprop & & ( cfrac,cliqp,reliq,cicep,reice,cdat1,cdat2,cdat3,cdat4, & ! --- inputs & cf1, nlay, ipseed, dz, delgth, alpha, & diff --git a/physics/samfdeepcnv.f b/physics/samfdeepcnv.f index 2552ac622..549454d2c 100644 --- a/physics/samfdeepcnv.f +++ b/physics/samfdeepcnv.f @@ -1778,7 +1778,7 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & enddo c -!> - Calculate the mean updraft velocity within the cloud (wc),cast in pressure coordinates. +!> - For progsigma = T, calculate the mean updraft velocity within the cloud (omegac),cast in pressure coordinates. if(progsigma)then do i = 1, im omegac(i) = 0. @@ -1808,7 +1808,7 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & endif enddo -!> - Calculate the xi term in Bengtsson et al. 2022 (equation 8) +!> - For progsigma = T, calculate the xi term in Bengtsson et al. 2022 \cite bengtsson_etal_2022 (equation 8) do k = 2, km1 do i = 1, im if (cnvflg(i)) then @@ -2880,7 +2880,7 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & endif enddo -!> - From Bengtsson et al. (2022) Prognostic closure scheme, equation 8, compute updraft area fraction based on a moisture budget +!> - From Bengtsson et al. (2022) \cite bengtsson_etal_2022 prognostic closure scheme, equation 8, call progsigma_calc() to compute updraft area fraction based on a moisture budget if(progsigma)then call progsigma_calc(im,km,first_time_step,restart, & del,tmf,qmicro,dbyo1,zdqca,omega_u,zeta,hvap,delt, From e40aafcabd27b627b25c3a90e9651f533c7ffa03 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 13 Oct 2022 13:45:52 -0600 Subject: [PATCH 10/25] scidoc updates --- physics/docs/ccppsrw_doxyfile | 5 +- physics/docs/library.bib | 18 +++- physics/docs/pdftxt/suite_input.nml.txt | 4 + physics/progsigma_calc.f90 | 5 +- physics/radiation_clouds.f | 30 +++--- physics/radiation_gases.f | 3 +- physics/radiation_surface.f | 121 ++++++++++++++---------- physics/radlw_main.F90 | 1 + physics/samfdeepcnv.f | 4 +- 9 files changed, 120 insertions(+), 71 deletions(-) diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile index c89757714..f2a5708f7 100644 --- a/physics/docs/ccppsrw_doxyfile +++ b/physics/docs/ccppsrw_doxyfile @@ -1,8 +1,8 @@ # Doxyfile 1.9.3 DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = "UFSLAM CCPP SciDoc" -PROJECT_NUMBER = "UFS-SRW v2.1.0" +PROJECT_NAME = "UFS-SRW CCPP SciDoc" +PROJECT_NUMBER = "v2.1.0" PROJECT_BRIEF = "Common Community Physics Package Developed at DTC" PROJECT_LOGO = img/dtc_logo.png OUTPUT_DIRECTORY = doc @@ -132,6 +132,7 @@ INPUT = pdftxt/SRW_mainpage.txt \ pdftxt/GFS_SATMEDMFVDIFQ.txt \ pdftxt/GFS_NOAHMP.txt \ pdftxt/GFS_UGWPv0.txt \ + pdftxt/GFS_unified_ugwp.txt \ pdftxt/GFS_drag_suite.txt \ pdftxt/GFS_GWDPS.txt \ pdftxt/GFS_OZPHYS.txt \ diff --git a/physics/docs/library.bib b/physics/docs/library.bib index c04666a0b..03087fe9b 100644 --- a/physics/docs/library.bib +++ b/physics/docs/library.bib @@ -1,13 +1,27 @@ %% This BibTeX bibliography file was created using BibDesk. %% https://bibdesk.sourceforge.io/ -%% Created for Man Zhang at 2022-05-13 16:18:03 -0600 +%% Created for Man Zhang at 2022-10-13 10:16:22 -0600 %% Saved with string encoding Unicode (UTF-8) +@article{Bengtsson_2022, + author = {Lisa Bengtsson and Luc Gerard and Jongil Han and Maria Gehne and Wei Li and Juliana Dias}, + date-added = {2022-10-13 10:15:44 -0600}, + date-modified = {2022-10-13 10:15:44 -0600}, + doi = {10.1175/mwr-d-22-0114.1}, + journal = {Monthly Weather Review}, + month = {sep}, + publisher = {American Meteorological Society}, + title = {A prognostic-stochastic and scale-adaptive cumulus convection closure for improved tropical variability and convective gray-zone representation in {NOAA}'s Unified Forecast System ({UFS}).}, + url = {https://doi.org/10.1175%2Fmwr-d-22-0114.1}, + year = 2022, + bdsk-url-1 = {https://doi.org/10.1175%2Fmwr-d-22-0114.1}, + bdsk-url-2 = {https://doi.org/10.1175/mwr-d-22-0114.1}} + @conference{beck_et_al_2022, author = {Beck, J. and J. Wolff and L. Carson and W. Li and M. Harrold and W. Mayfield and K. Y. Wong and J. Berner and P. Pegion and C. R. Alexander and J. R. Carley}, booktitle = {12th Conference on Transition of Research to Operations}, @@ -3651,8 +3665,6 @@ @article{tsiringakis_et_al_2017 year = {2017}, bdsk-url-1 = {https://doi.org/10.1002/qj.3021}} - - @comment{BibDesk Static Groups{ diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index 17f33d815..3a9ed39ab 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -636,6 +636,10 @@ show some variables in the namelist that must match the SDF. lheatstrg gfs_surface_generic_post flag for canopy heat storage parameterization .false. z0fac gfs_surface_generic_post surface roughness fraction factor 0.3 e0fac gfs_surface_generic_post latent heat flux fraction factor relative to sensible heat flux,e.g., e0fac=0.5 indicates that canopy heat storage for latent heat flux is 50% of that for sensible heat flux 0.5 +isftcflx mynnsfc_wrapper flag for thermal roughness lengths over water in MYNN-SFCLAY 0 +iz0tlnd mynnsfc_wrapper flag for thermal roughness lengths over land in MYNN-SFCLAY 0 +sfclay_compute_flux mynnsfc_wrapper flag for computing surface scalar fluxes in MYNN-SFCLAY .false. +sfclay_compute_diag mynnsfc_wrapper flag for computing surface diagnostics in MYNN-SFCLAY .false. diff --git a/physics/progsigma_calc.f90 b/physics/progsigma_calc.f90 index 3fd0c47a5..a007f1c81 100644 --- a/physics/progsigma_calc.f90 +++ b/physics/progsigma_calc.f90 @@ -2,9 +2,10 @@ !! This file contains the subroutine that calculates the prognostic !! updraft area fraction that is used for closure computations in !! saSAS deep and shallow convection, based on a moisture budget -!! as described in Bengtsson et al. 2022. +!! as described in Bengtsson et al. 2022 \cite Bengtsson_2022. -!>\ingroup SAMFdeep SAMF_shal +!>\ingroup SAMFdeep +!>\ingroup SAMF_shal !! This subroutine computes a prognostic updraft area fraction !! used in the closure computations in the samfdeepcnv.f scheme !! This subroutine computes a prognostic updraft area fracftion diff --git a/physics/radiation_clouds.f b/physics/radiation_clouds.f index edfa94439..3c28630e9 100644 --- a/physics/radiation_clouds.f +++ b/physics/radiation_clouds.f @@ -2911,19 +2911,25 @@ end subroutine progclduni !! output. The three cloud domain boundaries are defined by ptopc. The !! cloud overlapping method is defined by control flag 'iovr', which is !! also used by LW and SW radiation programs. -!> \param plyr (IX,NLAY), model layer mean pressure in mb (100Pa) -!> \param ptop1 (IX,4), pressure limits of cloud domain interfaces +!! \param plyr (IX,NLAY), model layer mean pressure in mb (100Pa) +!! \param ptop1 (IX,4), pressure limits of cloud domain interfaces !! (sfc,low,mid,high) in mb (100Pa) -!> \param cldtot (IX,NLAY), total or stratiform cloud profile in fraction -!> \param cldcnv (IX,NLAY), convective cloud (for diagnostic scheme only) -!> \param dz (IX,NLAY), layer thickness (km) -!> \param de_lgth (IX), clouds decorrelation length (km) -!> \param alpha (IX,NLAY), alpha decorrelation parameter -!> \param IX horizontal dimension -!> \param NLAY vertical layer dimensions -!> \param clds (IX,5), fraction of clouds for low, mid, hi, tot, bl -!> \param mtop (IX,3),vertical indices for low, mid, hi cloud tops -!> \param mbot (IX,3),vertical indices for low, mid, hi cloud bases +!! \param cldtot (IX,NLAY), total or stratiform cloud profile in fraction +!! \param cldcnv (IX,NLAY), convective cloud (for diagnostic scheme only) +!! \param dz (IX,NLAY), layer thickness (km) +!! \param de_lgth (IX), clouds decorrelation length (km) +!! \param alpha (IX,NLAY), alpha decorrelation parameter +!! \param IX horizontal dimension +!! \param NLAY vertical layer dimensions +!! \param iovr_rand flag for random cloud overlap method +!! \param iovr_maxrand flag for maximum-random cloud overlap method +!! \param iovr_max flag for maximum cloud overlap method +!! \param iovr_dcorr flag for decorrelation-length cloud overlap method +!! \param iovr_exp flag for exponential cloud overlap method +!! \param iovr_exprand flag for exponential-random cloud overlap method +!! \param clds (IX,5), fraction of clouds for low, mid, hi, tot, bl +!! \param mtop (IX,3),vertical indices for low, mid, hi cloud tops +!! \param mbot (IX,3),vertical indices for low, mid, hi cloud bases !! !>\section detail Detailed Algorithm subroutine gethml & diff --git a/physics/radiation_gases.f b/physics/radiation_gases.f index 0b8184e41..c958fc243 100644 --- a/physics/radiation_gases.f +++ b/physics/radiation_gases.f @@ -905,7 +905,8 @@ end subroutine gas_update !! or -pi -> +pi arrangements !!\param xlat (IMAX), grid latitude in radians, default range to !! pi/2 -> -pi/2, otherwise see in-line comment -!!\param IMAX, LMAX horizontal/vertical dimensions for output data +!!\param IMAX horizontal dimension for output data +!!\param LMAX vertical dimension for output data !!\param gasdat (IMAX,LMAX,NF_VGAS) - gases volume mixing ratioes !!\n (:,:,1) - co2 !!\n (:,:,2) - n2o diff --git a/physics/radiation_surface.f b/physics/radiation_surface.f index 664e7d453..d8a559cb9 100644 --- a/physics/radiation_surface.f +++ b/physics/radiation_surface.f @@ -104,9 +104,6 @@ !! emissivity for LW radiation. module module_radiation_surface ! -!! \section arg_table_module_radiation_surface -!! \htmlinclude module_radiation_surface.html -!! use physparam, only : ialbflg, iemsflg, semis_file, & & kind_phys use physcons, only : con_t0c, con_ttp, con_pi, con_tice @@ -142,7 +139,6 @@ module module_radiation_surface !> This subroutine is the initialization program for surface radiation !! related quantities (albedo, emissivity, etc.) -!!\param me print control flag !>\section gen_sfc_init sfc_init General Algorithm !----------------------------------- subroutine sfc_init & @@ -224,9 +220,6 @@ subroutine sfc_init & endif ! end if_ialbflg_block !> - Initialization of surface emissivity section -!! \n physparam::iemsflg -!! - = 1: input SFC emissivity type map from "semis_file" -!! - = 2: input SFC emissivity from land model iemslw = mod(iemsflg, 10) ! emissivity control @@ -299,33 +292,45 @@ end subroutine sfc_init !! vis-nir, direct-diffused) according to control flag ialbflg. !! \n 1) climatological surface albedo scheme (\cite briegleb_1992) !! \n 2) MODIS retrieval based scheme from Boston univ. -!!\param slmsk (IMAX), sea(0),land(1),ice(2) mask on fcst model grid -!!\param snodi (IMAX), snow depth water equivalent in mm over ice -!!\param sncovr (IMAX), snow cover over land -!!\param snoalb (IMAX), maximum snow albedo over land (for deep snow) -!!\param zorlf (IMAX), surface roughness in cm -!!\param coszf (IMAX), cosin of solar zenith angle -!!\param tsknf (IMAX), ground surface temperature in K -!!\param tairf (IMAX), lowest model layer air temperature in K -!!\param hprif (IMAX), topographic sdv in m -!!\n --- for ialbflg=0 climtological albedo scheme --- -!!\param alvsf (IMAX), 60 degree vis albedo with strong cosz dependency -!!\param alnsf (IMAX), 60 degree nir albedo with strong cosz dependency -!!\param alvwf (IMAX), 60 degree vis albedo with weak cosz dependency -!!\param alnwf (IMAX), 60 degree nir albedo with weak cosz dependency -!!\n --- for ialbflg=1 MODIS based land albedo scheme --- -!!\param alvsf (IMAX), visible black sky albedo at zenith 60 degree -!!\param alnsf (IMAX), near-ir black sky albedo at zenith 60 degree -!!\param alvwf (IMAX), visible white sky albedo -!!\param alnwf (IMAX), near-ir white sky albedo -!!\param facsf (IMAX), fractional coverage with strong cosz dependency -!!\param facwf (IMAX), fractional coverage with weak cosz dependency -!!\param fice (IMAX), sea-ice fraction -!!\param tisfc (IMAX), sea-ice surface temperature -!!\param IMAX array horizontal dimension -!!\param albppert (IMAX), a probability value in the interval [0,1] -!!\param pertalb (5), magnitude of perturbation of surface albedo -!!\param sfcalb (IMAX,NF_ALBD), mean sfc albedo +!!\param slmsk sea(0),land(1),ice(2) mask on fcst model grid +!!\param lsm flag for land surface model +!!\param lsm_noahmp flag for NOAH MP land surface model +!!\param lsm_ruc flag for RUC land surface model +!!\param use_cice_alb flag for using uce albedos from CICE when coupled +!!\param snodi snow depth water equivalent in mm over ice +!!\param sncovr snow cover over land +!!\param snoalb maximum snow albedo over land (for deep snow) +!!\param zorlf surface roughness in cm +!!\param coszf cosin of solar zenith angle +!!\param tsknf ground surface temperature in K +!!\param tairf lowest model layer air temperature in K +!!\param hprif topographic sdv in m +!!\param frac_grid flag for fractional landmask +!!\param lakefrac fraction of horizontal grid area occupied by lake +!!\param alvsf visible black sky albedo at zenith 60 degree +!!\param alnsf near-ir black sky albedo at zenith 60 degree +!!\param alvwf visible white sky albedo +!!\param alnwf near-ir white sky albedo +!!\param facsf fractional coverage with strong cosz dependency +!!\param facwf fractional coverage with weak cosz dependency +!!\param fice sea-ice fraction +!!\param tisfc sea-ice surface temperature +!!\param lsmalbdvis direct surface albedo visible band over land +!!\param lsmalbdnir direct surface albedo NIR band over land +!!\param lsmalbivis diffuse surface albedo visible band over land +!!\param lsmalbinir diffuse surface albedo NIR band over land +!!\param icealbdvis direct surface albedo visible band over ice +!!\param icealbdnir direct surface albedo NIR band over ice +!!\param icealbivis diffuse surface albedo visible band over ice +!!\param icealbinir diffuse surface albedo NIR band over ice +!!\param IMAX array horizontal dimension +!!\param albppert a probability value in the interval [0,1] +!!\param pertalb (5), magnitude of perturbation of surface albedo +!!\param fracl land fraction for emissivity and albedo calculation +!!\param fraco ocean fraction for emissivity of albedo calculation +!!\param fraci ice fraction for emissivity of albedo calculation +!!\param icy flag for ice surfce +!!\param sfcalb mean sfc albedo !!\n ( :, 1) - near ir direct beam albedo !!\n ( :, 2) - near ir diffused albedo !!\n ( :, 3) - uv+vis direct beam albedo @@ -447,7 +452,7 @@ subroutine setalb & ! !===> ... begin here ! -!> - Use modis based albedo for land area: +!> - if ialbflg = 1, use MODIS based albedo for land area: if ( ialbflg == 1 ) then do i = 1, IMAX @@ -536,7 +541,7 @@ subroutine setalb & flnd = flnd0 * fsno1 ! snow-free fraction fsno = f_one - flnd ! snow-covered fraction - !> - use Fanglin's zenith angle treatment. + ! - use Fanglin's zenith angle treatment. if (coszf(i) > 0.0001) then rfcs = 1.775/(1.0+1.55*coszf(i)) else @@ -576,7 +581,7 @@ subroutine setalb & enddo ! end_do_i_loop -!> -# use land model output for land area: Noah MP, RUC (land and ice). +!> - if ialbflg = 2, use land model output for land area: Noah MP, RUC (land and ice). elseif ( ialbflg == 2 ) then do i = 1, IMAX @@ -707,18 +712,36 @@ end subroutine setalb !----------------------------------- !> This subroutine computes surface emissivity for LW radiation. -!!\param xlon (IMAX), longitude in radiance, ok for both 0->2pi -!! or -pi -> +pi ranges -!!\param xlat (IMAX), latitude in radiance, default to pi/2 -> -!! -pi/2 range, otherwise see in-line comment -!!\param snodl (IMAX), snow depth water equivalent in mm land -!!\param snodi (IMAX), snow depth water equivalent in mm ice -!!\param sncovr (IMAX), snow cover over land -!!\param zorlf (IMAX), surface roughness in cm -!!\param tsknf (IMAX), ground surface temperature in K -!!\param tairf (IMAX), lowest model layer air temperature in K -!!\param hprif (IMAX), topographic standard deviation in m -!!\param IMAX array horizontal dimension +!!\todo document all augu. +!!\param lsm flag for land surface model +!!\param lsm_noahmp flag for NOAH MP land surface model +!!\param lsm_ruc flag for RUC land surface model +!!\param frac_grid flag for fractional grid +!!\param cplice flag for controlling cplice collection +!!\param use_flake flag for indicating lake points using flake model +!!\param lakefrac fraction of horizontal grid area occupied by lake +!!\param xlon longitude in radiance, ok for both 0->2pi +!! or -pi -> +pi ranges +!!\param xlat latitude in radiance, default to pi/2 -> +!! -pi/2 range, otherwise see in-line comment +!!\param slmsk landmask: sea/land/ice =0/1/2 +!!\param snodl snow depth water equivalent in mm land +!!\param snodi snow depth water equivalent in mm ice +!!\param sncovr snow cover over land +!!\param sncovr_ice surface snow area fraction over ice +!!\param zorlf surface roughness in cm +!!\param tsknf ground surface temperature in K +!!\param tairf lowest model layer air temperature in K +!!\param hprif topographic standard deviation in m +!!\param semis_lnd surface LW emissivity in fraction over land +!!\param semis_ice surface LW emissivity in fraction over ice +!!\param semis_wat surface LW emissivity in fraction over water +!!\param IMAX array horizontal dimension +!!\param fracl land fraction for emissivity and albedo calculation +!!\param fraco ocean fraction for emissivity of albedo calculation +!!\param fraci ice fraction for emissivity of albedo calculation +!!\param icy flag for ice surfce +!!\param semisbase baseline surface LW emissivity in fraction !!\param sfcemis (IMAX), surface emissivity !>\section general_setemis setemis General Algorithm !----------------------------------- diff --git a/physics/radlw_main.F90 b/physics/radlw_main.F90 index 38e4b30b0..04609382d 100644 --- a/physics/radlw_main.F90 +++ b/physics/radlw_main.F90 @@ -1531,6 +1531,7 @@ end subroutine rlwinit !!\param ipseed permutation seed for generating random numbers (isubclw>0) !!\param dz layer thickness (km) !!\param de_lgth layer cloud decorrelation length (km) +!!\param iovr cloud overlapping control flag !!\param alpha EXP/ER cloud overlap decorrelation parameter !!\param cldfmc cloud fraction for each sub-column !!\param taucld cloud optical depth for bands (non-mcica) diff --git a/physics/samfdeepcnv.f b/physics/samfdeepcnv.f index c72a7f9cc..4ba887353 100644 --- a/physics/samfdeepcnv.f +++ b/physics/samfdeepcnv.f @@ -1809,7 +1809,7 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & endif enddo -!> - For progsigma = T, calculate the xi term in Bengtsson et al. 2022 \cite bengtsson_etal_2022 (equation 8) +!> - For progsigma = T, calculate the xi term in Bengtsson et al. 2022 \cite Bengtsson_2022 (equation 8) do k = 2, km1 do i = 1, im if (cnvflg(i)) then @@ -2881,7 +2881,7 @@ subroutine samfdeepcnv_run (im,km,first_time_step,restart, & endif enddo -!> - From Bengtsson et al. (2022) \cite bengtsson_etal_2022 prognostic closure scheme, equation 8, call progsigma_calc() to compute updraft area fraction based on a moisture budget +!> - From Bengtsson et al. (2022) \cite Bengtsson_2022 prognostic closure scheme, equation 8, call progsigma_calc() to compute updraft area fraction based on a moisture budget if(progsigma)then flag_shallow = .false. call progsigma_calc(im,km,first_time_step,restart,flag_shallow, From 5140bf5eff65ab46717efae62c82cb8b9118b5cf Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 13 Oct 2022 15:01:39 -0600 Subject: [PATCH 11/25] scidoc updates --- physics/GFS_rrtmg_pre.F90 | 7 +- physics/GFS_rrtmg_setup.F90 | 2 +- physics/bl_mynn_common.f90 | 60 ++++++++--------- physics/docs/pdftxt/SRW_all_shemes_list.txt | 10 +-- physics/docs/pdftxt/SRW_mainpage.txt | 5 +- physics/module_mp_nssl_2mom.F90 | 2 +- physics/progsigma_calc.f90 | 4 +- physics/radiation_clouds.f | 72 +++++++++------------ physics/radiation_surface.f | 1 - 9 files changed, 71 insertions(+), 92 deletions(-) diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index b442866d9..3ebeabbe5 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -609,11 +609,10 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & endif ! end_if_ivflip -!> - Call module_radiation_aerosols::setaer(),to setup aerosols -!! property profile for radiation. !check print *,' in grrad : calling setaer ' +!> - Initialize mass mixing ratio of aerosols from gocart or Merra-2 if (ntchm>0 .and. iaermdl==2) then do k=1,levs do i=1,im @@ -637,6 +636,8 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & endif +!> - Call module_radiation_aerosols::setaer(),to setup aerosols +!! property profile for radiation. call setaer (plvl, plyr, prslk1, tvly, rhly, slmsk, & ! --- inputs tracer1, aer_nm, xlon, xlat, IM, LMK, LMP,& lsswr,lslwr, & @@ -654,7 +655,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & enddo enddo - !> Aerosol direct feedback effect by smoke and dust + !> - Add aerosol direct feedback effect by smoke and dust if(aero_dir_fdb) then ! add smoke/dust extinctions do k = 1, LMK do i = 1, IM diff --git a/physics/GFS_rrtmg_setup.F90 b/physics/GFS_rrtmg_setup.F90 index 100da8452..86d8fab7b 100644 --- a/physics/GFS_rrtmg_setup.F90 +++ b/physics/GFS_rrtmg_setup.F90 @@ -325,7 +325,7 @@ end subroutine GFS_rrtmg_setup_finalize ! Private functions - +!>Initialization of radiation calculations. subroutine radinit( si, NLAY, imp_physics, me, ltp, lextop ) !................................... diff --git a/physics/bl_mynn_common.f90 b/physics/bl_mynn_common.f90 index 7923bbf8b..ef52c14f3 100644 --- a/physics/bl_mynn_common.f90 +++ b/physics/bl_mynn_common.f90 @@ -22,22 +22,22 @@ module bl_mynn_common save ! To be specified from dycore - real(kind=kind_phys):: cp != 7.*r_d/2. (J/kg/K) - real(kind=kind_phys):: cpv != 4.*r_v (J/kg/K) Spec heat H2O gas - real(kind=kind_phys):: cice != 2106. (J/kg/K) Spec heat H2O ice - real(kind=kind_phys):: cliq != 4190. (J/kg/K) Spec heat H2O liq - real(kind=kind_phys):: p608 != R_v/R_d-1. - real(kind=kind_phys):: ep_2 != R_d/R_v - real(kind=kind_phys):: grav != accel due to gravity - real(kind=kind_phys):: karman != von Karman constant - real(kind=kind_phys):: t0c != temperature of water at freezing, 273.15 K - real(kind=kind_phys):: rcp != r_d/cp - real(kind=kind_phys):: r_d != 287. (J/kg/K) gas const dry air - real(kind=kind_phys):: r_v != 461.6 (J/kg/K) gas const water - real(kind=kind_phys):: xlf != 0.35E6 (J/kg) fusion at 0 C - real(kind=kind_phys):: xlv != 2.50E6 (J/kg) vaporization at 0 C - real(kind=kind_phys):: xls != 2.85E6 (J/kg) sublimation - real(kind=kind_phys):: rvovrd != r_v/r_d != 1.608 + real(kind=kind_phys):: cp !<= 7.*r_d/2. (J/kg/K) + real(kind=kind_phys):: cpv !<= 4.*r_v (J/kg/K) Spec heat H2O gas + real(kind=kind_phys):: cice !<= 2106. (J/kg/K) Spec heat H2O ice + real(kind=kind_phys):: cliq !<= 4190. (J/kg/K) Spec heat H2O liq + real(kind=kind_phys):: p608 !<= R_v/R_d-1. + real(kind=kind_phys):: ep_2 !<= R_d/R_v + real(kind=kind_phys):: grav !<= accel due to gravity + real(kind=kind_phys):: karman !<= von Karman constant + real(kind=kind_phys):: t0c !<= temperature of water at freezing, 273.15 K + real(kind=kind_phys):: rcp !<= r_d/cp + real(kind=kind_phys):: r_d !<= 287. (J/kg/K) gas const dry air + real(kind=kind_phys):: r_v !<= 461.6 (J/kg/K) gas const water + real(kind=kind_phys):: xlf !<= 0.35E6 (J/kg) fusion at 0 C + real(kind=kind_phys):: xlv !<= 2.50E6 (J/kg) vaporization at 0 C + real(kind=kind_phys):: xls !<= 2.85E6 (J/kg) sublimation + real(kind=kind_phys):: rvovrd !<= r_v/r_d != 1.608 ! Specified locally real(kind=kind_phys),parameter:: zero = 0.0 @@ -46,22 +46,22 @@ module bl_mynn_common real(kind=kind_phys),parameter:: two = 2.0 real(kind=kind_phys),parameter:: onethird = 1./3. real(kind=kind_phys),parameter:: twothirds = 2./3. - real(kind=kind_phys),parameter:: tref = 300.0 ! reference temperature (K) - real(kind=kind_phys),parameter:: TKmin = 253.0 ! for total water conversion, Tripoli and Cotton (1981) + real(kind=kind_phys),parameter:: tref = 300.0 !< reference temperature (K) + real(kind=kind_phys),parameter:: TKmin = 253.0 !< for total water conversion, Tripoli and Cotton (1981) real(kind=kind_phys),parameter:: p1000mb=100000.0 - real(kind=kind_phys),parameter:: svp1 = 0.6112 !(kPa) - real(kind=kind_phys),parameter:: svp2 = 17.67 !(dimensionless) - real(kind=kind_phys),parameter:: svp3 = 29.65 !(K) - real(kind=kind_phys),parameter:: tice = 240.0 !-33 (C), temp at saturation w.r.t. ice + real(kind=kind_phys),parameter:: svp1 = 0.6112 !<(kPa) + real(kind=kind_phys),parameter:: svp2 = 17.67 !<(dimensionless) + real(kind=kind_phys),parameter:: svp3 = 29.65 !<(K) + real(kind=kind_phys),parameter:: tice = 240.0 !<-33 (C), temp at saturation w.r.t. ice ! To be derived in the init routine - real(kind=kind_phys):: ep_3 != 1.-ep_2 != 0.378 - real(kind=kind_phys):: gtr != grav/tref - real(kind=kind_phys):: rk != cp/r_d - real(kind=kind_phys):: tv0 != p608*tref - real(kind=kind_phys):: tv1 != (1.+p608)*tref - real(kind=kind_phys):: xlscp != (xlv+xlf)/cp - real(kind=kind_phys):: xlvcp != xlv/cp - real(kind=kind_phys):: g_inv != 1./grav + real(kind=kind_phys):: ep_3 !<= 1.-ep_2 != 0.378 + real(kind=kind_phys):: gtr !<= grav/tref + real(kind=kind_phys):: rk !<= cp/r_d + real(kind=kind_phys):: tv0 !<= p608*tref + real(kind=kind_phys):: tv1 !<= (1.+p608)*tref + real(kind=kind_phys):: xlscp !<= (xlv+xlf)/cp + real(kind=kind_phys):: xlvcp !<= xlv/cp + real(kind=kind_phys):: g_inv !<= 1./grav end module bl_mynn_common diff --git a/physics/docs/pdftxt/SRW_all_shemes_list.txt b/physics/docs/pdftxt/SRW_all_shemes_list.txt index 7c31e473a..70f788994 100644 --- a/physics/docs/pdftxt/SRW_all_shemes_list.txt +++ b/physics/docs/pdftxt/SRW_all_shemes_list.txt @@ -3,9 +3,7 @@ \section allscheme_overview Physical Parameterizations -In the CCPP, each parameterization is in its own modern Fortran module (see rules for a scheme to be considered CCPP-compliant at - CCPP-Compliant Physics Parameterizations ), -which facilitates model development and code maintenance. While some individual parameterization can be invoked for the SCM, most host models will assemble the parameterizations in suites. +The UFS SRW App. assembles the parameterizations in suites. \b Radiation @@ -73,11 +71,7 @@ to the parameterization. \section allsuite_overview Physics Suites -There are two publicly supported host models that use CCPP v6: the UFS Weather Model and the CCPP Single Column Model (SCM). -The UFS Weather Model is included in the UFS Short Range Weather Application (SRW App) v2. -The forcing datasets included in the CCPP SCM v6.0.0 public release were created by averaging observations and large-eddy simulations over areas that are -too coarse to resolve convection. Therefore, best results will be obtained with the CCPP SCM v6.0 when using suites that include parameterized -convection. +The UFS Short Range Weather Application (SRW App) v2.1.0 supports four physicsphysics suites. Table 1. Physics suites and primary schemes supported in SRW v2.1.0 \tableofcontents diff --git a/physics/docs/pdftxt/SRW_mainpage.txt b/physics/docs/pdftxt/SRW_mainpage.txt index 9cfa81ebe..efef650a7 100644 --- a/physics/docs/pdftxt/SRW_mainpage.txt +++ b/physics/docs/pdftxt/SRW_mainpage.txt @@ -17,12 +17,9 @@ supports suites: ## Acknowledgements CCPP team would like to express our deepest gratitude for UFS physics developers' contribution to the -development of CCPP-Physics. -\n We would also like to give special thanks to: +development of CCPP-Physics. In this release, we would also like to give special thanks to: - \b NOAA \b Global \b Systems \b Laboratory: Hannah Barnes, Jeff Beck, Georg Grell, Joseph Olson, Tanya Smirnova, Michael Toy -- \b NOAA \b National \b Severe \b Storms \b Laboratory: Ted Mansell -- \b NOAA \b Environmental \b Modeling \b Center: Jongil Han, Qingfu Liu, Ruiyu Sun - \b Joint \b Center \b for \b Satellite \b Data \b Assimilation: Greg Thompson as a whole for their support and contribution for this CCPP scientific documentation (SciDoc). diff --git a/physics/module_mp_nssl_2mom.F90 b/physics/module_mp_nssl_2mom.F90 index ac56b9456..6b184c35f 100644 --- a/physics/module_mp_nssl_2mom.F90 +++ b/physics/module_mp_nssl_2mom.F90 @@ -1,4 +1,4 @@ -!!> \file module_mp_nssl_2mom.F90 +!> \file module_mp_nssl_2mom.F90 !--------------------------------------------------------------------- ! code snapshot: "Feb 24 2022" at "14:27:57" diff --git a/physics/progsigma_calc.f90 b/physics/progsigma_calc.f90 index a007f1c81..73bf52cab 100644 --- a/physics/progsigma_calc.f90 +++ b/physics/progsigma_calc.f90 @@ -4,9 +4,7 @@ !! saSAS deep and shallow convection, based on a moisture budget !! as described in Bengtsson et al. 2022 \cite Bengtsson_2022. -!>\ingroup SAMFdeep -!>\ingroup SAMF_shal -!! This subroutine computes a prognostic updraft area fraction +!> This subroutine computes a prognostic updraft area fraction !! used in the closure computations in the samfdeepcnv.f scheme !! This subroutine computes a prognostic updraft area fracftion !! used in the closure computations in the samfshalcnv. scheme diff --git a/physics/radiation_clouds.f b/physics/radiation_clouds.f index 3c28630e9..71ffef750 100644 --- a/physics/radiation_clouds.f +++ b/physics/radiation_clouds.f @@ -144,8 +144,7 @@ !> \defgroup module_radiation_clouds Radiation Clouds Module !! This module computes cloud related quantities for radiation !! computations. -!>@{ -!! +!> @{ !! Knowledge of cloud properties and their vertical structure is !! important for meteorological studies due to their impact on both the !! Earth's radiation budget and adiabatic heating within the atmosphere. @@ -166,9 +165,6 @@ !!\n ISUBC=0: grid averaged quantities, without sub-grid cloud approximation !!\n ISUBC=1: with McICA sub-grid approximation (use prescribed permutation seeds) !!\n ISUBC=2: with McICA sub-grid approximation (use random permutation seeds) -!! -!!\version NCEP-Radiation_clouds v5.1 Nov 2012 -!! !> This module computes cloud related quantities for radiation computations. module module_radiation_clouds @@ -2319,19 +2315,17 @@ subroutine progcld_thompson_wsm6 & !............................................ end subroutine progcld_thompson_wsm6 !............................................ -!mz - -! This subroutine added by G. Thompson specifically to account for -! explicit (microphysics-produced) cloud liquid water, cloud ice, and -! snow with 100% cloud fraction. Also, a parameterization for cloud -! fraction less than 1.0 but greater than 0.0 follows Mocko and Cotton -! (1996) from Sundqvist et al. (1989) with cloud fraction increasing -! as RH increases above a critical value. In locations with non-zero -! (but less than 1.0) cloud fraction, there MUST be a value assigned -! to cloud liquid water and ice or else there is zero impact in the -! RRTMG radiation scheme. +!> This subroutine added by G. Thompson specifically to account for +!! explicit (microphysics-produced) cloud liquid water, cloud ice, and +!! snow with 100% cloud fraction. Also, a parameterization for cloud +!! fraction less than 1.0 but greater than 0.0 follows Mocko and Cotton +!! (1996) from Sundqvist et al. (1989) with cloud fraction increasing +!! as RH increases above a critical value. In locations with non-zero +!! (but less than 1.0) cloud fraction, there MUST be a value assigned +!! to cloud liquid water and ice or else there is zero impact in the +!! RRTMG radiation scheme. subroutine progcld_thompson & & ( plyr,plvl,tlyr,qlyr,qstl,rhly,clw, & ! --- inputs: & xlat,xlon,slmsk,dz,delp, & @@ -3350,21 +3344,16 @@ subroutine gethml & end subroutine gethml !----------------------------------- -!+---+-----------------------------------------------------------------+ -!..Cloud fraction scheme by G. Thompson (NCAR-RAL), not intended for -!.. combining with any cumulus or shallow cumulus parameterization -!.. scheme cloud fractions. This is intended as a stand-alone for -!.. cloud fraction and is relatively good at getting widespread stratus -!.. and stratoCu without caring whether any deep/shallow Cu param schemes -!.. is making sub-grid-spacing clouds/precip. Under the hood, this -!.. scheme follows Mocko and Cotton (1995) in application of the -!.. Sundqvist et al (1989) scheme but using a grid-scale dependent -!.. RH threshold, one each for land v. ocean points based on -!.. experiences with HWRF testing. -!+---+-----------------------------------------------------------------+ -! -!+---+-----------------------------------------------------------------+ - +!> Cloud fraction scheme by G. Thompson (NCAR-RAL), not intended for +!! combining with any cumulus or shallow cumulus parameterization +!! scheme cloud fractions. This is intended as a stand-alone for +!! cloud fraction and is relatively good at getting widespread stratus +!! and stratoCu without caring whether any deep/shallow Cu param schemes +!! is making sub-grid-spacing clouds/precip. Under the hood, this +!! scheme follows Mocko and Cotton (1995) in application of the +!! Sundqvist et al (1989) scheme but using a grid-scale dependent +!! RH threshold, one each for land v. ocean points based on +!! experiences with HWRF testing. SUBROUTINE cal_cldfra3(CLDFRA, qv, qc, qi, qs, dz, & & p, t, XLAND, gridkm, & & modify_qvapor, max_relh, & @@ -3503,11 +3492,9 @@ SUBROUTINE cal_cldfra3(CLDFRA, qv, qc, qi, qs, dz, & END SUBROUTINE cal_cldfra3 -!+---+-----------------------------------------------------------------+ -!..From cloud fraction array, find clouds of multi-level depth and compute -!.. a reasonable value of LWP or IWP that might be contained in that depth, -!.. unless existing LWC/IWC is already there. - +!>From cloud fraction array, find clouds of multi-level depth and compute +!! a reasonable value of LWP or IWP that might be contained in that depth, +!! unless existing LWC/IWC is already there. SUBROUTINE find_cloudLayers(qvs1d, cfr1d, T1d, P1d, Dz1d, entrmnt,& & debugfl, qc1d, qi1d, qs1d, kts,kte) ! @@ -3665,6 +3652,7 @@ END SUBROUTINE find_cloudLayers !+---+-----------------------------------------------------------------+ +!> SUBROUTINE adjust_cloudIce(cfr,qi,qs,qvs,T,dz,entr, k1,k2,kts,kte) ! IMPLICIT NONE @@ -3706,6 +3694,7 @@ END SUBROUTINE adjust_cloudIce !+---+-----------------------------------------------------------------+ +!> SUBROUTINE adjust_cloudH2O(cfr, qc, qvs,T,dz,entr, k1,k2,kts,kte) ! IMPLICIT NONE @@ -3748,9 +3737,8 @@ END SUBROUTINE adjust_cloudH2O !+---+-----------------------------------------------------------------+ -!..Do not alter any grid-explicitly resolved hydrometeors, rather only -!.. the supposed amounts due to the cloud fraction scheme. - +!> Do not alter any grid-explicitly resolved hydrometeors, rather only +!! the supposed amounts due to the cloud fraction scheme. SUBROUTINE adjust_cloudFinal(cfr, qc, qi, Rho,dz, kts,kte) ! IMPLICIT NONE @@ -3790,6 +3778,7 @@ SUBROUTINE adjust_cloudFinal(cfr, qc, qi, Rho,dz, kts,kte) END SUBROUTINE adjust_cloudFinal +!> This subroutine computes the Xu-Randall cloud fraction scheme. subroutine cloud_fraction_XuRandall & & ( IX, NLAY, plyr, clwf, rhly, qstl, & ! --- inputs & cldtot ) & ! --- outputs @@ -3836,6 +3825,7 @@ subroutine cloud_fraction_XuRandall & end subroutine cloud_fraction_XuRandall +!> subroutine cloud_fraction_mass_flx_1 & & ( IX, NLAY, lmfdeep2, xrc3, plyr, clwf, rhly, qstl, & ! --- inputs & cldtot ) & ! --- outputs @@ -3885,6 +3875,7 @@ subroutine cloud_fraction_mass_flx_1 & end subroutine cloud_fraction_mass_flx_1 +!> subroutine cloud_fraction_mass_flx_2 & & ( IX, NLAY, lmfdeep2, xrc3, plyr, clwf, rhly, qstl, & ! --- inputs & cldtot ) & ! --- outputs @@ -3940,5 +3931,4 @@ subroutine cloud_fraction_mass_flx_2 & end subroutine cloud_fraction_mass_flx_2 !........................................! end module module_radiation_clouds -!> @} -!========================================! +!>@} diff --git a/physics/radiation_surface.f b/physics/radiation_surface.f index d8a559cb9..0a601f9a7 100644 --- a/physics/radiation_surface.f +++ b/physics/radiation_surface.f @@ -712,7 +712,6 @@ end subroutine setalb !----------------------------------- !> This subroutine computes surface emissivity for LW radiation. -!!\todo document all augu. !!\param lsm flag for land surface model !!\param lsm_noahmp flag for NOAH MP land surface model !!\param lsm_ruc flag for RUC land surface model From 635e2d018ee80341a8ac5a1123ab46cb1e012749 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 13 Oct 2022 16:34:50 -0600 Subject: [PATCH 12/25] scidoc fix --- physics/docs/ccppsrw_doxyfile | 2 +- physics/docs/library.bib | 68 ++++++++++++------------- physics/docs/pdftxt/MYNN_EDMF.txt | 2 +- physics/docs/pdftxt/RRFS_SGSCLOUD.txt | 15 ++---- physics/docs/pdftxt/suite_input.nml.txt | 1 + 5 files changed, 40 insertions(+), 48 deletions(-) diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile index f2a5708f7..8616f791f 100644 --- a/physics/docs/ccppsrw_doxyfile +++ b/physics/docs/ccppsrw_doxyfile @@ -132,7 +132,6 @@ INPUT = pdftxt/SRW_mainpage.txt \ pdftxt/GFS_SATMEDMFVDIFQ.txt \ pdftxt/GFS_NOAHMP.txt \ pdftxt/GFS_UGWPv0.txt \ - pdftxt/GFS_unified_ugwp.txt \ pdftxt/GFS_drag_suite.txt \ pdftxt/GFS_GWDPS.txt \ pdftxt/GFS_OZPHYS.txt \ @@ -268,6 +267,7 @@ INPUT = pdftxt/SRW_mainpage.txt \ ../cu_gf_driver_post.F90 \ ../mynnedmf_wrapper.F90 \ ../module_bl_mynn.F90 \ + ../bl_mynn_common.f90 \ ../mynnsfc_wrapper.F90 \ ../module_sf_mynn.F90 \ ../lsm_ruc.F90 \ diff --git a/physics/docs/library.bib b/physics/docs/library.bib index 03087fe9b..b6109b12c 100644 --- a/physics/docs/library.bib +++ b/physics/docs/library.bib @@ -1,13 +1,45 @@ %% This BibTeX bibliography file was created using BibDesk. %% https://bibdesk.sourceforge.io/ -%% Created for Man Zhang at 2022-10-13 10:16:22 -0600 +%% Created for Man Zhang at 2022-10-13 16:15:17 -0600 %% Saved with string encoding Unicode (UTF-8) +@article{Chaboureau_2005, + author = {Jean-Pierre Chaboureau}, + date-added = {2022-10-13 16:14:54 -0600}, + date-modified = {2022-10-13 16:14:54 -0600}, + doi = {10.1029/2004jd005645}, + journal = {Journal of Geophysical Research}, + number = {D17}, + publisher = {American Geophysical Union ({AGU})}, + title = {Statistical representation of clouds in a regional model and the impact on the diurnal cycle of convection during Tropical Convection, Cirrus and Nitrogen Oxides ({TROCCINOX})}, + url = {https://doi.org/10.1029%2F2004jd005645}, + volume = {110}, + year = 2005, + bdsk-url-1 = {https://doi.org/10.1029%2F2004jd005645}, + bdsk-url-2 = {https://doi.org/10.1029/2004jd005645}} + +@article{Chaboureau_2002, + author = {Jean-Pierre Chaboureau and Peter Bechtold}, + date-added = {2022-10-13 16:11:43 -0600}, + date-modified = {2022-10-13 16:11:43 -0600}, + doi = {10.1175/1520-0469(2002)059<2362:ascpdf>2.0.co;2}, + journal = {Journal of the Atmospheric Sciences}, + month = {aug}, + number = {15}, + pages = {2362--2372}, + publisher = {American Meteorological Society}, + title = {A Simple Cloud Parameterization Derived from Cloud Resolving Model Data: Diagnostic and Prognostic Applications}, + url = {https://doi.org/10.1175%2F1520-0469%282002%29059%3C2362%3Aascpdf%3E2.0.co%3B2}, + volume = {59}, + year = 2002, + bdsk-url-1 = {https://doi.org/10.1175%2F1520-0469%282002%29059%3C2362%3Aascpdf%3E2.0.co%3B2}, + bdsk-url-2 = {https://doi.org/10.1175/1520-0469(2002)059%3C2362:ascpdf%3E2.0.co;2}} + @article{Bengtsson_2022, author = {Lisa Bengtsson and Luc Gerard and Jongil Han and Maria Gehne and Wei Li and Juliana Dias}, date-added = {2022-10-13 10:15:44 -0600}, @@ -1251,40 +1283,6 @@ @article{NAKANISHI_2009 year = {2009}, bdsk-url-1 = {http://dx.doi.org/10.2151/jmsj.87.895}} -@article{Chaboureau_2005, - author = {Chaboureau, J.-P. and P. Bechtold}, - date-added = {2019-04-21 16:19:12 -0600}, - date-modified = {2022-05-06 09:01:51 -0600}, - doi = {10.1029/2004jd005645}, - issn = {0148-0227}, - journal = {Journal of Geophysical Research}, - number = {D17}, - publisher = {American Geophysical Union (AGU)}, - title = {Statistical representation of clouds in a regional model and the impact on the diurnal cycle of convection during Tropical Convection, Cirrus and Nitrogen Oxides ({TROCCINOX})}, - url = {http://dx.doi.org/10.1029/2004JD005645}, - volume = {110}, - year = {2005}, - bdsk-url-1 = {http://dx.doi.org/10.1029/2004JD005645}, - bdsk-url-2 = {http://dx.doi.org/10.1029/2004jd005645}} - -@article{Chaboureau_2002, - author = {Chaboureau, J.-P. and Bechtold, P.}, - date-added = {2019-04-21 16:17:45 -0600}, - date-modified = {2019-04-21 16:17:45 -0600}, - doi = {10.1175/1520-0469(2002)059<2362:ascpdf>2.0.co;2}, - issn = {1520-0469}, - journal = {Journal of the Atmospheric Sciences}, - month = {Aug}, - number = {15}, - pages = {2362--2372}, - publisher = {American Meteorological Society}, - title = {A Simple Cloud Parameterization Derived from Cloud Resolving Model Data: Diagnostic and Prognostic Applications}, - url = {http://dx.doi.org/10.1175/1520-0469(2002)059<2362:ASCPDF>2.0.CO;2}, - volume = {59}, - year = {2002}, - bdsk-url-1 = {http://dx.doi.org/10.1175/1520-0469(2002)059%3C2362:ASCPDF%3E2.0.CO;2}, - bdsk-url-2 = {http://dx.doi.org/10.1175/1520-0469(2002)059%3C2362:ascpdf%3E2.0.co;2}} - @article{Kuwano_Yoshida_2010, author = {Kuwano-Yoshida, A. and Enomoto, T. and Ohfuchi, W.}, date-added = {2019-04-21 16:12:47 -0600}, diff --git a/physics/docs/pdftxt/MYNN_EDMF.txt b/physics/docs/pdftxt/MYNN_EDMF.txt index f301a3d4e..974b2929e 100644 --- a/physics/docs/pdftxt/MYNN_EDMF.txt +++ b/physics/docs/pdftxt/MYNN_EDMF.txt @@ -35,7 +35,7 @@ if the namelist parameter \p icloud_bl is set to 1. In this case, the SGS cloud cloud-mixing ratio, \p QC_BL, are added to the microphysics arrays within the radiation driver (mynnrad_pre_run()). The following two steps are performed: -(1) Use either Xu and Randall (1996) \cite xu_and_randall_1996 or Chaboureau and Bechtold (2005) cloud fraction for +(1) Use either Xu and Randall (1996) \cite xu_and_randall_1996 or Chaboureau and Bechtold (2005) \cite Chaboureau_2005 cloud fraction for the convection scheme subgrid clouds, chosen by the switch \p conv_cf_opt = 0: CB2005, 1: XR1996. Note that the MYNN-EDMF PBL scheme subgrid clouds input into this scheme are already partitioned into qc and qi and already have assigned cloud fractions, but now qi is further partitioned into diff --git a/physics/docs/pdftxt/RRFS_SGSCLOUD.txt b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt index 572c2476b..c317d5006 100644 --- a/physics/docs/pdftxt/RRFS_SGSCLOUD.txt +++ b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt @@ -12,18 +12,11 @@ This interstitial module adds the subgrid-scale cloud information to the resolve The order of procedures is outlined below: \n - Back up the original qc, qi, and qs in "save arrays" qc_save, qi_save and qs_save. -\n - Add MYNN boundary layer clouds \p cldfra_bl as qc, qi and qs +\n - Add MYNN boundary layer clouds cldfra_bl as qc, qi and qs \n - Add Grell-Freitas deep convection clouds. Partition the condensate from the convection scheme into liquid, ice and snow. - -\todo need update -\n 3) Use Xu and Randall (1996) \cite xu_and_randall_1996 -cloud fraction for the convection scheme subgrid clouds. Note that the MYNN-EDMF PBL scheme subgrid clouds input into -this scheme are already partitioned into qc and qi and already have assigned cloud fractions. -\n 4) Add the subgrid cloud mixing ratio and cloud fraction to the original (resolved-scale) qc, qi and cloud fraction coming from the microphysics scheme. Note this information is only added to grid cells when resolved-scale clouds are below a very small threshold value. -\n 5) Recompute the diagnostic high, mid, low, total and boundary layer clouds to be consistent with the clouds seen by the radiation scheme. - -To provide a cloud fraction at t=0 (before the boundary layer or convection schemes are called), Xu and Randall (1996) \cite xu_and_randall_1996 cloud fraction is used. After the radiation schemes are called, sgscloud_radpost_run() is called to restore the original qc and qi from qc_save and qi_save. - +\n - Calculate effective radius cloud water, ice and snow +\n - Calculate Chaboureau-Bechtold (CB) convective component based on both Chaboureau and Bechtold (2002 \cite Chaboureau_2002 and 2005 \cite Chaboureau_2005) +\n - Leverage CB stratus clouds from MYNN in saturated condtions into cloud fraction. */ diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index 3a9ed39ab..ee7b4ef51 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -206,6 +206,7 @@ show some variables in the namelist that must match the SDF. trans_trac gfs_suite_interstitial flag for convective transport of tracers .false. cal_pre gfs_phys_time_vary or gfs_MP_generic flag for calling precipitation type algorithm .false. shcnvcw \ref samfshalcnv flag for shallow convective cloud .false. +progsigma \ref samfshalcnv, \ref samfdeepcnv flag for prognostic updraft area fraction closure in saSAS .false. \b Parameters \b related \b to \b PBL \b scheme \b options do_mynnedmf mynnedmf_wrapper flag to activate MYNN-EDMF scheme .false. dspheat \ref satmedmfvdifq flag for using TKE dissipative heating to temperature tendency in hybrid EDMF and TKE-EDMF schemes .false. From 5acf29c74add8c95dee79e53d28f2cc468edfb6c Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Fri, 14 Oct 2022 12:08:07 -0600 Subject: [PATCH 13/25] scidoc updates from Ligia --- physics/GFS_rrtmg_pre.F90 | 4 ++-- physics/docs/ccppsrw_doxyfile | 4 ++-- physics/docs/pdftxt/GFS_v16_suite.txt | 5 +---- physics/docs/pdftxt/HRRR_suite.txt | 1 - physics/docs/pdftxt/MYNN_EDMF.txt | 10 +++++----- physics/docs/pdftxt/RRFS_SGSCLOUD.txt | 2 +- physics/docs/pdftxt/SRW_all_shemes_list.txt | 8 ++------ physics/docs/pdftxt/SRW_mainpage.txt | 5 +---- physics/docs/pdftxt/suite_input.nml.txt | 6 +++--- 9 files changed, 17 insertions(+), 28 deletions(-) diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index 3ebeabbe5..bf0bd96f8 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -612,7 +612,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & !check print *,' in grrad : calling setaer ' -!> - Initialize mass mixing ratio of aerosols from gocart or Merra-2 +!> - Initialize mass mixing ratio of aerosols from NASA GOCART or NASA MERRA-2 if (ntchm>0 .and. iaermdl==2) then do k=1,levs do i=1,im @@ -636,7 +636,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & endif -!> - Call module_radiation_aerosols::setaer(),to setup aerosols +!> - Call module_radiation_aerosols::setaer() to setup aerosols !! property profile for radiation. call setaer (plvl, plyr, prslk1, tvly, rhly, slmsk, & ! --- inputs tracer1, aer_nm, xlon, xlat, IM, LMK, LMP,& diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile index 8616f791f..210b10a7f 100644 --- a/physics/docs/ccppsrw_doxyfile +++ b/physics/docs/ccppsrw_doxyfile @@ -1,8 +1,8 @@ # Doxyfile 1.9.3 DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = "UFS-SRW CCPP SciDoc" -PROJECT_NUMBER = "v2.1.0" +PROJECT_NAME = "CCPP SciDoc for UFS-SRW v2.1.0" +PROJECT_NUMBER = "CCPP SciDoc for UFS-SRW v2.1.0" PROJECT_BRIEF = "Common Community Physics Package Developed at DTC" PROJECT_LOGO = img/dtc_logo.png OUTPUT_DIRECTORY = doc diff --git a/physics/docs/pdftxt/GFS_v16_suite.txt b/physics/docs/pdftxt/GFS_v16_suite.txt index 38098838d..f49d5120b 100644 --- a/physics/docs/pdftxt/GFS_v16_suite.txt +++ b/physics/docs/pdftxt/GFS_v16_suite.txt @@ -4,10 +4,7 @@ \section gfsv16_suite_overview Overview Version 16 of the Global Forecast System (GFS) was implemented operationally by the NOAA -National Centers for Environmental Prediction (NCEP) in 2021. This suite is available for -use with the UFS SRW App and with the CCPP SCM. - -The GFS_v16 suite uses the parameterizations in the following order: +National Centers for Environmental Prediction (NCEP) in 2021. The GFS_v16 suite uses the parameterizations in the following order: - \ref GFS_RRTMG - \ref GFS_SFCLYR - \ref GFS_NSST diff --git a/physics/docs/pdftxt/HRRR_suite.txt b/physics/docs/pdftxt/HRRR_suite.txt index 46ec264a0..5d7768f63 100644 --- a/physics/docs/pdftxt/HRRR_suite.txt +++ b/physics/docs/pdftxt/HRRR_suite.txt @@ -5,7 +5,6 @@ The HRRR suite contains the parameterizations used in the NOAA operational High-Resolution Rapid Refresh (HRRR) model, which runs at 3-km resolution. -This suite is available for use with the UFS SRW App and with the CCPP SCM. This suite is most applicable for runs at 3-km resolution since it does not parameterize deep convection. diff --git a/physics/docs/pdftxt/MYNN_EDMF.txt b/physics/docs/pdftxt/MYNN_EDMF.txt index 974b2929e..f3c34274f 100644 --- a/physics/docs/pdftxt/MYNN_EDMF.txt +++ b/physics/docs/pdftxt/MYNN_EDMF.txt @@ -45,8 +45,8 @@ qi and qsnow. (2) if the resolved-scale cloud liquid (\f$q_c\f$) is less than \f$10^{-6}kg kg^{-1}\f$ , and there exists a nonzero SGS cloud fraction, then the SGS components are added to their respective resolved-scale components by a temperature weighting, according to linear approximation -of Hobbs et al.(1974) \cite HOBBS_1974 . Then the frozen species are crudely split into 50% ice and 50% snow below -~700 mb and decrease snow to zero by ~300mb.: +of Hobbs et al.(1974) \cite HOBBS_1974 . Next the frozen species are crudely split into 50% ice and 50% snow below approximately +700 hPa. The percentage of snow decreases with altitude and tapers off at approximately 300 hPa: \f[ W_{snow}=min(0.5,max((P-30000,0.0)/140000.0) \f] @@ -55,7 +55,7 @@ of Hobbs et al.(1974) \cite HOBBS_1974 . Then the frozen species are crudely spl W_{ice}=1.0-W_{snow} \f] -Then we sort the SGS cloud water, liquid, and snow as : +Next the SGS cloud water, liquid, and snow are sorted as: \f$q_c\f$=QC_BL*CLDFRA_BL @@ -63,9 +63,9 @@ Then we sort the SGS cloud water, liquid, and snow as : \f$q_s\f$=QI_BL*\f$W_{snow}\f$*CLDFRA_BL -if Grell-Freitas scheme is used, convective clouds will be also added into SGS cloud water, liquid and snow. +if the Grell-Freitas scheme is used, convective clouds are also added into SGS cloud water, liquid and snow. -This allows us to only use one 3-D array for both SGS cloud water,ice and snow. The updated \f$q_{c}\f$,\f$q_{i}\f$, \f$q_{s}\f$and +This allows using a single 3-D array for both SGS cloud water,ice and snow. The updated \f$q_{c}\f$,\f$q_{i}\f$, \f$q_{s}\f$and \p CLDFRA are then used as input into the radiation schemes. After exiting the radiation schemes, the original values of \f$q_c, q_i, q_s\f$ and \p CLDFRA are restored, so the SGS clouds do not impact the resolved-scale moisture budget. diff --git a/physics/docs/pdftxt/RRFS_SGSCLOUD.txt b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt index c317d5006..f6d7fa5c1 100644 --- a/physics/docs/pdftxt/RRFS_SGSCLOUD.txt +++ b/physics/docs/pdftxt/RRFS_SGSCLOUD.txt @@ -1,5 +1,5 @@ /** -\page SGSCLOUD_page RRFS Subgrid-scale Cloud Interstitial +\page SGSCLOUD_page Subgrid-scale Cloud Interstitial \section rrfs_sgscloud_descrip Description This interstitial module adds the subgrid-scale cloud information to the resolved-scale (microphysics) clouds. This procedure is required when using microphysics schemes that only produce clouds in fully saturated grid cells, like the Thompson microphysics scheme, and when using boundary layer and convection schemes that produce subgrid-scale cloud information (mixing ratio and cloud fraction). This allows the subgrid-scale cloud information to be assembled into the rest of the cloud information prior to calling the radiation schemes. diff --git a/physics/docs/pdftxt/SRW_all_shemes_list.txt b/physics/docs/pdftxt/SRW_all_shemes_list.txt index 70f788994..3a520a4d2 100644 --- a/physics/docs/pdftxt/SRW_all_shemes_list.txt +++ b/physics/docs/pdftxt/SRW_all_shemes_list.txt @@ -1,10 +1,9 @@ /** \page allscheme_page Overview of Schemes and Suites -\section allscheme_overview Physical Parameterizations - -The UFS SRW App. assembles the parameterizations in suites. +\section allscheme_overview Physical Parameterizations and Suites +The UFS-SRW App. assembles the parameterizations in suites. \b Radiation - \subpage GFS_RRTMG @@ -49,7 +48,6 @@ The UFS SRW App. assembles the parameterizations in suites. - \subpage GFS_SFCSICE \b Others - - \ref ca_page - \subpage GFS_SPP The input information for the parameterizations includes the values of the gridbox mean prognostic variables (wind components, temperature, @@ -69,7 +67,6 @@ produce the tendencies. to the parameterization. - If the in-core saturation adjustment is used (\p do_sat_adj=.true.), it is invoked at shorter timesteps along with the dynamical solver. -\section allsuite_overview Physics Suites The UFS Short Range Weather Application (SRW App) v2.1.0 supports four physicsphysics suites. @@ -77,7 +74,6 @@ Table 1. Physics suites and primary schemes supported in SRW v2.1.0 \tableofcontents | Physics suites | GFS_v16 | HRRR | RRFS_v1beta | WoFS_v0 | |------------------|--------------------|--------------------------------|--------------------|---------------| -|\b Host | SCM \n SRWv2 | SCM \n SRWv2 | SCM \n SRWv2 | SCM \n SRWv2 | |\b Deep \b Cu | \ref GFS_SAMFdeep | \a off | \a off | \a off | |\b Shallow \b Cu | \ref GFS_SAMFshal | \ref MYNNEDMF | \ref MYNNEDMF | \ref MYNNEDMF | |\b Microphysics | \ref GFDL_cloud | \ref THOMPSON | \ref THOMPSON | \ref NSSLMICRO_page | diff --git a/physics/docs/pdftxt/SRW_mainpage.txt b/physics/docs/pdftxt/SRW_mainpage.txt index efef650a7..623ecb117 100644 --- a/physics/docs/pdftxt/SRW_mainpage.txt +++ b/physics/docs/pdftxt/SRW_mainpage.txt @@ -1,12 +1,9 @@ /** \mainpage Introduction -Welcome to the scientific documentation for the physical parameterizations available in the -Unified Forecast System (UFS) -Short-Range Weather (SRW) Application version 2.1.0 (available through https://github.com/ufs-community/ufs-srweather-app/) and the suites that can be configured using them. The SRW app targets predictions of atmospheric behavior on a +Welcome to the scientific documentation for the physical parameterizations available in the Unified Forecast System (UFS) Short-Range Weather (SRW) Application version 2.1.0 (available through https://github.com/ufs-community/ufs-srweather-app/) and the suites that can be configured using them. The SRW app targets predictions of atmospheric behavior on a limited spatial domain and on time scales from less than an hour out to several days. - The CCPP parameterizations are aggregated in suites by the host models. In this release, the UFS Short-Range Weather Application 2.1.0 supports suites: - \ref GFS_v16_page diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index ee7b4ef51..ff3ade172 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -1,7 +1,7 @@ /** \page CCPPsuite_nml_desp Supported Namelist Options -The SCM and the UFS Atmosphere, the atmospheric component of the UFS Weather Model, +The UFS Atmosphere, the atmospheric component of the UFS Weather Model, access runtime configurations from file \c input.nml. This file contains various namelists records that control aspects of the I/O, dynamics, physics etc. Most physics-related options are in records \b &gfs_physics_nml. Some schemes have their own namelist records as described below. @@ -133,8 +133,8 @@ show some variables in the namelist that must match the SDF.
    • d:tropospheric aerosol model scheme flag \n =0 or none, opac-climatology aerosol scheme \n - =1 use gocart climatology aerosol scheme \n - =2 use gocart prognostic aerosol scheme \n + =1 use NASA GOCART climatology aerosol scheme \n + =2 use NASA GOCART prognostic aerosol scheme \n =5 opac-clim new spectral mapping
    • a:=0 use background stratospheric aerosol \n =1 include stratospheric volcanic aerosol From 2dfd3c48fcdb68f8493f781dc46d64ad1ae44159 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Fri, 14 Oct 2022 12:15:57 -0600 Subject: [PATCH 14/25] minor fix --- physics/docs/ccppsrw_doxyfile | 4 ++-- physics/docs/pdftxt/SRW_mainpage.txt | 13 ------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile index 210b10a7f..ed101496e 100644 --- a/physics/docs/ccppsrw_doxyfile +++ b/physics/docs/ccppsrw_doxyfile @@ -1,8 +1,8 @@ # Doxyfile 1.9.3 DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = "CCPP SciDoc for UFS-SRW v2.1.0" -PROJECT_NUMBER = "CCPP SciDoc for UFS-SRW v2.1.0" +PROJECT_NAME = "SRW v2.1.0" +PROJECT_NUMBER = "SRW v2.1.0" PROJECT_BRIEF = "Common Community Physics Package Developed at DTC" PROJECT_LOGO = img/dtc_logo.png OUTPUT_DIRECTORY = doc diff --git a/physics/docs/pdftxt/SRW_mainpage.txt b/physics/docs/pdftxt/SRW_mainpage.txt index 623ecb117..154b1b0eb 100644 --- a/physics/docs/pdftxt/SRW_mainpage.txt +++ b/physics/docs/pdftxt/SRW_mainpage.txt @@ -11,18 +11,5 @@ supports suites: - \ref RRFS_v1beta_page - \ref WoFS_v0_page -## Acknowledgements - -CCPP team would like to express our deepest gratitude for UFS physics developers' contribution to the -development of CCPP-Physics. In this release, we would also like to give special thanks to: - -- \b NOAA \b Global \b Systems \b Laboratory: Hannah Barnes, Jeff Beck, Georg Grell, Joseph Olson, Tanya Smirnova, Michael Toy -- \b Joint \b Center \b for \b Satellite \b Data \b Assimilation: Greg Thompson - -as a whole for their support and contribution for this CCPP scientific documentation (SciDoc). - - -\b CCPP \b SciDoc \b Team: Man Zhang, Ligia Bernardet, Dustin Swales, Grant Firl -\n Developmental Testbed Center */ From 6b27221dbfb9ffad54581acfba3375380a8e3837 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Fri, 14 Oct 2022 16:03:31 -0600 Subject: [PATCH 15/25] scidoc fix --- physics/docs/ccppsrw_doxyfile | 2 +- physics/docs/pdftxt/RRFS_v1beta_suite.txt | 7 +++---- physics/docs/pdftxt/SRW_all_shemes_list.txt | 1 - physics/docs/pdftxt/WoFS_v0_suite.txt | 5 ++--- physics/module_bl_mynn.F90 | 2 +- physics/progsigma_calc.f90 | 2 ++ physics/samfshalcnv.f | 8 ++++---- 7 files changed, 13 insertions(+), 14 deletions(-) diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile index ed101496e..9c7ac3a06 100644 --- a/physics/docs/ccppsrw_doxyfile +++ b/physics/docs/ccppsrw_doxyfile @@ -1,7 +1,7 @@ # Doxyfile 1.9.3 DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = "SRW v2.1.0" +PROJECT_NAME = "CCPP Scidoc for SRW v2.1.0" PROJECT_NUMBER = "SRW v2.1.0" PROJECT_BRIEF = "Common Community Physics Package Developed at DTC" PROJECT_LOGO = img/dtc_logo.png diff --git a/physics/docs/pdftxt/RRFS_v1beta_suite.txt b/physics/docs/pdftxt/RRFS_v1beta_suite.txt index df84d10d0..2731e227e 100644 --- a/physics/docs/pdftxt/RRFS_v1beta_suite.txt +++ b/physics/docs/pdftxt/RRFS_v1beta_suite.txt @@ -4,10 +4,9 @@ \section RRFS_v1beta_suite_overview Overview The RRFS_v1beta suite is the primary suite target for the upcoming operational implementation of - the Rapid Refresh Forecast System (RRFS), which is used in the UFS SRW App. -This suite is most applicable for runs at 3-km resolution since it does not parameterize -deep convection. This suite is available for use with the UFS SRW App and with the -CCPP SCM. +the Rapid Refresh Forecast System (RRFS), which is used in the UFS SRW App. This suite is most +applicable for runs at 3-km resolution since it does not parameterize +deep convection. The RRFS_v1beta suite uses the parameterizations in the following order: - \ref SGSCLOUD_page diff --git a/physics/docs/pdftxt/SRW_all_shemes_list.txt b/physics/docs/pdftxt/SRW_all_shemes_list.txt index 3a520a4d2..bb320008e 100644 --- a/physics/docs/pdftxt/SRW_all_shemes_list.txt +++ b/physics/docs/pdftxt/SRW_all_shemes_list.txt @@ -19,7 +19,6 @@ The UFS-SRW App. assembles the parameterizations in suites. \b Cumulus \b Parameterizations - \subpage GFS_SAMFdeep - - \ref ca_page - \subpage GFS_SAMFshal - \subpage CU_GF diff --git a/physics/docs/pdftxt/WoFS_v0_suite.txt b/physics/docs/pdftxt/WoFS_v0_suite.txt index 1fee972f2..8259ab770 100644 --- a/physics/docs/pdftxt/WoFS_v0_suite.txt +++ b/physics/docs/pdftxt/WoFS_v0_suite.txt @@ -4,9 +4,8 @@ \section wofs_v0_suite_overview Overview The WoFS_v0 suite is targeted for use in the upcoming operational implementation -of the NOAA's Warn-on-Forecast System (WoFS). This suite is available for use with the UFS SRW App and with -the CCPP SCM. This suite is most applicable for runs at 3-km resolution since it does not parameterize -deep convection. +of the NOAA's Warn-on-Forecast System (WoFS). This suite is most applicable for +runs at 3-km resolution since it does not parameterize deep convection. The WoFS suite uses the parameterizations in the following order: - \ref SGSCLOUD_page diff --git a/physics/module_bl_mynn.F90 b/physics/module_bl_mynn.F90 index 096939455..d8833841f 100644 --- a/physics/module_bl_mynn.F90 +++ b/physics/module_bl_mynn.F90 @@ -7619,7 +7619,7 @@ FUNCTION phih(zet) END FUNCTION phih ! ================================================================== !>\ingroup gsd_mynn_edmf -!! +!! Calculate the buoyancy production of TKE from cloud-top cooling. SUBROUTINE topdown_cloudrad(kts,kte,dz1,zw,xland,kpbl,PBLH, & &sqc,sqi,sqw,thl,th1,ex1,p1,rho1,thetav, & &cldfra_bl1D,rthraten, & diff --git a/physics/progsigma_calc.f90 b/physics/progsigma_calc.f90 index 73bf52cab..0b37c30c9 100644 --- a/physics/progsigma_calc.f90 +++ b/physics/progsigma_calc.f90 @@ -4,6 +4,8 @@ !! saSAS deep and shallow convection, based on a moisture budget !! as described in Bengtsson et al. 2022 \cite Bengtsson_2022. +!>\ingroup SAMFdeep +!>\ingroup SAMF_shal !> This subroutine computes a prognostic updraft area fraction !! used in the closure computations in the samfdeepcnv.f scheme !! This subroutine computes a prognostic updraft area fracftion diff --git a/physics/samfshalcnv.f b/physics/samfshalcnv.f index 2031c0ae9..1b648c109 100644 --- a/physics/samfshalcnv.f +++ b/physics/samfshalcnv.f @@ -1517,7 +1517,7 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & endif enddo c -!> - Calculate the mean updraft velocity in pressure coordinates within the cloud (wc). +!> - For progsigma =T, calculate the mean updraft velocity in pressure coordinates within the cloud (wc). if(progsigma)then do i = 1, im omegac(i) = 0. @@ -1546,8 +1546,8 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & if (omegac(i) > val) cnvflg(i)=.false. endif enddo -c -c Compute zeta for prog closure + +!> - For progsigma = T, calculate the xi term in Bengtsson et al. 2022 \cite Bengtsson_2022 (equation 8) do k = 2, km1 do i = 1, im if (cnvflg(i)) then @@ -1927,7 +1927,7 @@ subroutine samfshalcnv_run(im,km,itc,ntc,cliq,cp,cvap, & c compute cloud base mass flux as a function of the mean c updraft velcoity c -c Prognostic closure +!> - From Bengtsson et al. (2022) \cite Bengtsson_2022 prognostic closure scheme, equation 8, call progsigma_calc() to compute updraft area fraction based on a moisture budget if(progsigma)then flag_shallow = .true. call progsigma_calc(im,km,first_time_step,restart,flag_shallow, From 91cbedceba3c13dbbc6affd4ae13660dea4c9e96 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Fri, 21 Oct 2022 13:00:30 -0600 Subject: [PATCH 16/25] address some review comments --- physics/bl_mynn_common.f90 | 2 + physics/docs/ccppsrw_doxyfile | 3 +- physics/docs/pdftxt/GFS_v16_suite.txt | 4 +- physics/docs/pdftxt/HRRR_suite.txt | 2 +- physics/docs/pdftxt/MYNN_EDMF.txt | 2 - physics/docs/pdftxt/RAP_suite.txt | 2 +- .../docs/pdftxt/RE210/FV3_GFS_v16_input.nml | 339 ++++++++++++++++++ physics/docs/pdftxt/RE210/FV3_HRRR_input.nml | 300 ++++++++++++++++ .../pdftxt/RE210/FV3_RRFS_v1beta_input.nml | 295 +++++++++++++++ .../docs/pdftxt/RE210/FV3_WoFS_v0_input.nml | 301 ++++++++++++++++ .../pdftxt/RE210/SCM_GFS_v17_p8_input.nml | 154 ++++++++ physics/docs/pdftxt/RE210/SCM_RAP_input.nml | 135 +++++++ .../docs/pdftxt/RE210/suite_FV3_GFS_v16.xml | 94 +++++ physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml | 81 +++++ .../pdftxt/RE210/suite_FV3_RRFS_v1beta.xml | 84 +++++ .../docs/pdftxt/RE210/suite_FV3_WoFS_v0.xml | 80 +++++ .../pdftxt/RE210/suite_SCM_GFS_v17_p8.xml | 90 +++++ physics/docs/pdftxt/RE210/suite_SCM_RAP.xml | 85 +++++ physics/docs/pdftxt/RE6/FV3_GFS_v16_input.nml | 1 - physics/docs/pdftxt/RE6/FV3_HRRR_input.nml | 1 - .../docs/pdftxt/RE6/FV3_RRFS_v1beta_input.nml | 1 - physics/docs/pdftxt/RE6/FV3_WoFS_v0_input.nml | 1 - physics/docs/pdftxt/suite_input.nml.txt | 2 +- physics/mfpbltq.f | 2 +- physics/mfscuq.f | 3 +- physics/module_bl_mynn.F90 | 48 +-- physics/mynnedmf_wrapper.F90 | 4 +- physics/tridi.f | 12 +- 28 files changed, 2080 insertions(+), 48 deletions(-) create mode 100644 physics/docs/pdftxt/RE210/FV3_GFS_v16_input.nml create mode 100644 physics/docs/pdftxt/RE210/FV3_HRRR_input.nml create mode 100644 physics/docs/pdftxt/RE210/FV3_RRFS_v1beta_input.nml create mode 100644 physics/docs/pdftxt/RE210/FV3_WoFS_v0_input.nml create mode 100644 physics/docs/pdftxt/RE210/SCM_GFS_v17_p8_input.nml create mode 100644 physics/docs/pdftxt/RE210/SCM_RAP_input.nml create mode 100644 physics/docs/pdftxt/RE210/suite_FV3_GFS_v16.xml create mode 100644 physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml create mode 100644 physics/docs/pdftxt/RE210/suite_FV3_RRFS_v1beta.xml create mode 100644 physics/docs/pdftxt/RE210/suite_FV3_WoFS_v0.xml create mode 100644 physics/docs/pdftxt/RE210/suite_SCM_GFS_v17_p8.xml create mode 100644 physics/docs/pdftxt/RE210/suite_SCM_RAP.xml diff --git a/physics/bl_mynn_common.f90 b/physics/bl_mynn_common.f90 index ef52c14f3..7c82cf6d5 100644 --- a/physics/bl_mynn_common.f90 +++ b/physics/bl_mynn_common.f90 @@ -5,6 +5,8 @@ !! memory. This module is then used again in the MYNN-EDMF. All !! MYNN-specific constants are declared globally in the main !! module (module_bl_mynn) further below: + +!>\ingroup gp_mynnedmf module bl_mynn_common !------------------------------------------ diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile index 9c7ac3a06..dde621942 100644 --- a/physics/docs/ccppsrw_doxyfile +++ b/physics/docs/ccppsrw_doxyfile @@ -118,7 +118,6 @@ INPUT = pdftxt/SRW_mainpage.txt \ pdftxt/SRW_all_shemes_list.txt \ pdftxt/GFS_v16_suite.txt \ pdftxt/HRRR_suite.txt \ - pdftxt/RE6/FV3_HRRR_input.nml \ pdftxt/RRFS_v1beta_suite.txt \ pdftxt/WoFS_v0_suite.txt \ pdftxt/RRFS_SGSCLOUD.txt \ @@ -303,7 +302,7 @@ EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = -EXAMPLE_PATH = pdftxt/RE6 \ +EXAMPLE_PATH = pdftxt/RE210 \ doc/html EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO diff --git a/physics/docs/pdftxt/GFS_v16_suite.txt b/physics/docs/pdftxt/GFS_v16_suite.txt index f49d5120b..11e997bf1 100644 --- a/physics/docs/pdftxt/GFS_v16_suite.txt +++ b/physics/docs/pdftxt/GFS_v16_suite.txt @@ -25,9 +25,9 @@ National Centers for Environmental Prediction (NCEP) in 2021. The GFS_v16 suite \section gfs16_nml_opt_des Namelist \ref GFDL_cloud namelist options -\snippet RE6/FV3_GFS_v16_input.nml GFDL_CLOUD_MP_NML +\snippet RE210/FV3_GFS_v16_input.nml GFDL_CLOUD_MP_NML Other namelist options -\snippet RE6/FV3_GFS_v16_input.nml GFS_PHYSICS_NML +\snippet RE210/FV3_GFS_v16_input.nml GFS_PHYSICS_NML - nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2\f$ - \f$^1\f$ NSST is on and coupled with spin up off diff --git a/physics/docs/pdftxt/HRRR_suite.txt b/physics/docs/pdftxt/HRRR_suite.txt index 5d7768f63..c08f50211 100644 --- a/physics/docs/pdftxt/HRRR_suite.txt +++ b/physics/docs/pdftxt/HRRR_suite.txt @@ -28,6 +28,6 @@ The HRRR suite uses the parameterizations in the following order: \include suite_FV3_HRRR.xml \section hrrr_nml_option Namelist -\snippet RE6/FV3_HRRR_input.nml GFS_PHYSICS_NML +\snippet RE210/FV3_HRRR_input.nml GFS_PHYSICS_NML */ diff --git a/physics/docs/pdftxt/MYNN_EDMF.txt b/physics/docs/pdftxt/MYNN_EDMF.txt index f3c34274f..c9fd04c53 100644 --- a/physics/docs/pdftxt/MYNN_EDMF.txt +++ b/physics/docs/pdftxt/MYNN_EDMF.txt @@ -63,8 +63,6 @@ Next the SGS cloud water, liquid, and snow are sorted as: \f$q_s\f$=QI_BL*\f$W_{snow}\f$*CLDFRA_BL -if the Grell-Freitas scheme is used, convective clouds are also added into SGS cloud water, liquid and snow. - This allows using a single 3-D array for both SGS cloud water,ice and snow. The updated \f$q_{c}\f$,\f$q_{i}\f$, \f$q_{s}\f$and \p CLDFRA are then used as input into the radiation schemes. After exiting the radiation schemes, the original values of \f$q_c, q_i, q_s\f$ and \p CLDFRA are restored, so the SGS clouds do not impact the resolved-scale moisture budget. diff --git a/physics/docs/pdftxt/RAP_suite.txt b/physics/docs/pdftxt/RAP_suite.txt index 7aeb6393b..3b16315e7 100644 --- a/physics/docs/pdftxt/RAP_suite.txt +++ b/physics/docs/pdftxt/RAP_suite.txt @@ -26,6 +26,6 @@ The RAP suite uses the parameterizations in the following order: \include suite_SCM_RAP.xml \section RAP_nml_option Namelist -\snippet RE6/SCM_RAP_input.nml GFS_PHYSICS_NML +\snippet RE210/SCM_RAP_input.nml GFS_PHYSICS_NML */ diff --git a/physics/docs/pdftxt/RE210/FV3_GFS_v16_input.nml b/physics/docs/pdftxt/RE210/FV3_GFS_v16_input.nml new file mode 100644 index 000000000..186275dbf --- /dev/null +++ b/physics/docs/pdftxt/RE210/FV3_GFS_v16_input.nml @@ -0,0 +1,339 @@ +&amip_interp_nml + data_set = 'reynolds_oi' + date_out_of_range = 'climo' + interp_oi_sst = .true. + no_anom_sst = .false. + use_ncep_ice = .false. + use_ncep_sst = .true. +/ + +&atmos_model_nml + blocksize = 40 + ccpp_suite = 'FV3_GFS_v16' + chksum_debug = .false. + dycore_only = .false. +/ + +&cires_ugwp_nml + knob_ugwp_azdir = 2, 4, 4, 4 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_effac = 1, 1, 1, 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_solver = 2 + knob_ugwp_source = 1, 1, 0, 0 + knob_ugwp_stoch = 0, 0, 0, 0 + knob_ugwp_version = 0 + knob_ugwp_wvspec = 1, 25, 25, 25 + launch_level = 27 +/ + +&diag_manager_nml + prepend_date = .false. +/ + +&external_ic_nml + checker_tr = .false. + filtered_terrain = .true. + gfs_dwinds = .true. + levp = 65 + nt_checker = 0 +/ + +&fms_io_nml + checksum_required = .false. + max_files_r = 100 + max_files_w = 100 +/ + +&fms_nml + clock_grain = 'ROUTINE' + domains_stack_size = 3000000 + print_memory_usage = .false. +/ + +&fv_core_nml + a_imp = 1.0 + adjust_dry_mass = .false. + agrid_vel_rst = .false. + bc_update_interval = 6 + beta = 0.0 + consv_am = .false. + consv_te = 0.0 + d2_bg = 0.0 + d2_bg_k1 = 0.2 + d2_bg_k2 = 0.0 + d4_bg = 0.12 + d_con = 1.0 + d_ext = 0.0 + dddmp = 0.1 + delt_max = 0.008 + dnats = 1 + do_sat_adj = .true. + do_schmidt = .true. + do_vort_damp = .true. + dwind_2d = .false. + dz_min = 2 + external_eta = .true. + external_ic = .true. + fill = .true. + full_zs_filter = .false. + fv_debug = .false. + fv_sg_adj = 450 + gfs_phil = .false. + hord_dp = -5 + hord_mt = 5 + hord_tm = 5 + hord_tr = 10 + hord_vt = 5 + hydrostatic = .false. + io_layout = 1, 1 + k_split = 6 + ke_bg = 0.0 + kord_mt = 9 + kord_tm = -9 + kord_tr = 9 + kord_wz = 9 + layout = 5, 2 + make_nh = .false. + mountain = .false. + n_split = 6 + n_sponge = 10 + n_zs_filter = 0 + na_init = 0 + ncep_ic = .false. + nggps_ic = .true. + no_dycore = .false. + nord = 3 + npx = 203 + npy = 117 + npz = 64 + nrows_blend = 10 + ntiles = 1 + nudge_dz = .false. + nudge_qv = .true. + nwat = 6 + p_fac = 0.1 + phys_hydrostatic = .false. + print_freq = 6 + psm_bc = 1 + range_warn = .false. + read_increment = .false. + regional = .true. + regional_bcs_from_gsi = .false. + res_latlon_dynamics = '' + reset_eta = .false. + rf_cutoff = 750.0 + stretch_fac = 0.999 + target_lat = 38.5 + target_lon = -97.5 + tau = 10.0 + use_hydro_pressure = .false. + vtdm4 = 0.02 + warm_start = .false. + write_restart_with_bcs = .false. + z_tracer = .true. +/ + +&fv_grid_nml + grid_file = 'INPUT/grid_spec.nc' +/ + +!> [GFDL_CLOUD_MP_NML] +&gfdl_cloud_microphysics_nml + c_cracw = 0.8 + c_paut = 0.5 + c_pgacs = 0.01 + c_psaci = 0.05 + ccn_l = 300.0 + ccn_o = 100.0 + const_vg = .false. + const_vi = .false. + const_vr = .false. + const_vs = .false. + de_ice = .false. + do_qa = .true. + do_sedi_heat = .false. + dw_land = 0.16 + dw_ocean = 0.1 + fast_sat_adj = .true. + fix_negative = .true. + icloud_f = 1 + mono_prof = .true. + mp_time = 150.0 + prog_ccn = .false. + qi0_crt = 8e-05 + qi_lim = 1.0 + ql_gen = 0.001 + ql_mlt = 0.001 + qs0_crt = 0.001 + rad_graupel = .true. + rad_rain = .true. + rad_snow = .true. + reiflag = 2 + rh_inc = 0.3 + rh_inr = 0.3 + rh_ins = 0.3 + rthresh = 1e-05 + sedi_transport = .true. + tau_g2v = 900.0 + tau_i2s = 1000.0 + tau_l2v = 225.0 + tau_v2l = 150.0 + use_ccn = .true. + use_ppm = .false. + vg_max = 12.0 + vi_max = 1.0 + vr_max = 12.0 + vs_max = 2.0 + z_slope_ice = .true. + z_slope_liq = .true. +/ +!! [GFDL_CLOUD_MP_NML] + +!> [GFS_PHYSICS_NML] +&gfs_physics_nml + cal_pre = .false. + cdmbgwd = 4.0, 0.15, 1.0, 1.0 + cnvcld = .true. + cnvgwd = .true. + debug = .false. + do_shum = .false. + do_skeb = .false. + do_spp = .false. + do_sppt = .false. + do_tofd = .true. + do_ugwp = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0 + fhlwr = 3600.0 + fhswr = 3600.0 + fhzero = 1.0 + h2o_phys = .true. + hybedmf = .false. + iaer = 5111 + ialb = 1 + iau_inc_files = '' + icliq_sw = 2 + ico2 = 2 + iems = 1 + imfdeepcnv = 2 + imfshalcnv = 2 + imp_physics = 11 + iopt_alb = 2 + iopt_btr = 1 + iopt_crs = 1 + iopt_dveg = 1 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + iovr = 3 + isatmedmf = 1 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + ldiag_ugwp = .false. + lgfdlmprad = .true. + lheatstrg = .true. + lndp_type = 0 + lsm = 1 + lsoil = 4 + lwhtr = .true. + n_var_lndp = 0 + n_var_spp = 0 + nsradar_reset = 3600 + nst_anl = .true. + nstf_name = 2, 1, 0, 0, 0 + oz_phys = .false. + oz_phys_2015 = .true. + pdfcld = .false. + prautco = 0.00015, 0.00015 + pre_rad = .false. + print_diff_pgr = .false. + prslrd0 = 0.0 + psautco = 0.0008, 0.0005 + random_clds = .false. + redrag = .true. + satmedmf = .true. + shal_cnv = .true. + swhtr = .true. + trans_trac = .true. + use_ufo = .true. +/ +!! [GFS_PHYSICS_NML] + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&mpp_io_nml + deflate_level = 1 + shuffle = 1 +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy + shum = -999.0 + shum_lscale = 150000 + shum_tau = 21600 + shumint = 3600 + skeb = -999.0 + skeb_lscale = 150000 + skeb_tau = 21600 + skeb_vdof = 10 + skebint = 3600 + sppt = -999.0 + sppt_lscale = 150000 + sppt_tau = 21600 + spptint = 3600 + use_zmtnblck = .false. +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../fix_am/global_glacier.2x2.grb' + fnmskh = '../fix_am/seaice_newland.grb' + fnmxic = '../fix_am/global_maxice.2x2.grb' + fnsmcc = '../fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../fix_am/RTGSST.1982.2012.monthly.clim.grb' + fnzorc = 'igbp' + fsicl = 99999 + fsics = 99999 + fslpl = 99999 + fsmcl = 99999, 99999, 99999 + fsnol = 99999 + fsnos = 99999 + fsotl = 99999 + ftsfl = 99999 + ftsfs = 90 + fvetl = 99999 + fvmnl = 99999 + fvmxl = 99999 + landice = .true. + ldebug = .false. +/ + +&surf_map_nml +/ diff --git a/physics/docs/pdftxt/RE210/FV3_HRRR_input.nml b/physics/docs/pdftxt/RE210/FV3_HRRR_input.nml new file mode 100644 index 000000000..81116b447 --- /dev/null +++ b/physics/docs/pdftxt/RE210/FV3_HRRR_input.nml @@ -0,0 +1,300 @@ +&amip_interp_nml + data_set = 'reynolds_oi' + date_out_of_range = 'climo' + interp_oi_sst = .true. + no_anom_sst = .false. + use_ncep_ice = .false. + use_ncep_sst = .true. +/ + +&atmos_model_nml + blocksize = 40 + ccpp_suite = 'FV3_HRRR' + chksum_debug = .false. + dycore_only = .false. +/ + +&cires_ugwp_nml + knob_ugwp_azdir = 2, 4, 4, 4 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_effac = 1, 1, 1, 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_solver = 2 + knob_ugwp_source = 1, 1, 0, 0 + knob_ugwp_stoch = 0, 0, 0, 0 + knob_ugwp_version = 0 + knob_ugwp_wvspec = 1, 25, 25, 25 + launch_level = 25 +/ + +&diag_manager_nml + prepend_date = .false. +/ + +&external_ic_nml + checker_tr = .false. + filtered_terrain = .true. + gfs_dwinds = .true. + levp = 65 + nt_checker = 0 +/ + +&fms_io_nml + checksum_required = .false. + max_files_r = 100 + max_files_w = 100 +/ + +&fms_nml + clock_grain = 'ROUTINE' + domains_stack_size = 3000000 + print_memory_usage = .false. +/ + +&fv_core_nml + a_imp = 1.0 + adjust_dry_mass = .false. + bc_update_interval = 6 + beta = 0.0 + consv_am = .false. + consv_te = 0.0 + d2_bg = 0.0 + d2_bg_k1 = 0.2 + d2_bg_k2 = 0.04 + d4_bg = 0.12 + d_con = 1.0 + d_ext = 0.0 + dddmp = 0.1 + delt_max = 0.008 + dnats = 0 + do_sat_adj = .false. + do_schmidt = .true. + do_vort_damp = .true. + dwind_2d = .false. + dz_min = 2 + external_eta = .true. + external_ic = .true. + fill = .true. + full_zs_filter = .false. + fv_debug = .false. + fv_sg_adj = 300 + gfs_phil = .false. + hord_dp = -5 + hord_mt = 5 + hord_tm = 5 + hord_tr = 10 + hord_vt = 5 + hydrostatic = .false. + io_layout = 1, 1 + k_split = 2 + ke_bg = 0.0 + kord_mt = 9 + kord_tm = -9 + kord_tr = 9 + kord_wz = 9 + layout = 5, 2 + make_nh = .true. + mountain = .false. + n_split = 5 + n_sponge = 24 + n_zs_filter = 0 + na_init = 1 + ncep_ic = .false. + nggps_ic = .true. + no_dycore = .false. + nord = 3 + nord_tr = 2 + npx = 203 + npy = 117 + npz = 64 + nrows_blend = 10 + ntiles = 1 + nudge_qv = .false. + nwat = 6 + p_fac = 0.1 + phys_hydrostatic = .false. + print_freq = 6 + psm_bc = 1 + range_warn = .true. + read_increment = .false. + regional = .true. + regional_bcs_from_gsi = .false. + res_latlon_dynamics = 'fv3_increment.nc' + reset_eta = .false. + rf_cutoff = 2000.0 + stretch_fac = 0.999 + target_lat = 38.5 + target_lon = -97.5 + tau = 5.0 + use_hydro_pressure = .false. + vtdm4 = 0.02 + warm_start = .false. + write_restart_with_bcs = .false. + z_tracer = .true. +/ + +&fv_grid_nml + grid_file = 'INPUT/grid_spec.nc' +/ + +!> [GFS_PHYSICS_NML] +&gfs_physics_nml + bl_mynn_edmf = 1 + bl_mynn_edmf_mom = 1 + bl_mynn_tkeadvect = .true. + cal_pre = .false. + cdmbgwd = 3.5, 1.0 + cnvcld = .false. + cnvgwd = .false. + cplflx = .false. + debug = .false. + do_deep = .false. + do_gsl_drag_ls_bl = .true. + do_gsl_drag_ss = .true. + do_gsl_drag_tofd = .true. + do_mynnedmf = .true. + do_mynnsfclay = .true. + do_shum = .false. + do_skeb = .false. + do_spp = .false. + do_sppt = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0 + fhlwr = 1200.0 + fhswr = 1200.0 + fhzero = 1.0 + gwd_opt = 3 + h2o_phys = .true. + hybedmf = .false. + iaer = 5111 + ialb = 1 + iau_delthrs = 6 + iau_inc_files = '' + iaufhrs = 30 + icliq_sw = 2 + icloud_bl = 1 + ico2 = 2 + iems = 1 + imfdeepcnv = -1 + imfshalcnv = -1 + imp_physics = 8 + iopt_alb = 2 + iopt_btr = 1 + iopt_crs = 1 + iopt_dveg = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + iovr = 3 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + kice = 9 + ldiag3d = .false. + lheatstrg = .false. + lndp_type = 0 + lradar = .true. + lsm = 3 + lsoil = 4 + lsoil_lsm = 9 + ltaerosol = .true. + lwhtr = .true. + n_var_lndp = 0 + n_var_spp = 0 + nsradar_reset = 3600 + nst_anl = .true. + nstf_name = 2, 1, 0, 0, 0 + oz_phys = .false. + oz_phys_2015 = .true. + pdfcld = .false. + pre_rad = .false. + print_diff_pgr = .false. + prslrd0 = 0.0 + random_clds = .false. + redrag = .true. + satmedmf = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ +!! [GFS_PHYSICS_NML] + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy + shum = -999.0 + shum_lscale = 150000 + shum_tau = 21600 + shumint = 3600 + skeb = -999.0 + skeb_lscale = 150000 + skeb_tau = 21600 + skeb_vdof = 10 + skebint = 3600 + sppt = -999.0 + sppt_lscale = 150000 + sppt_tau = 21600 + spptint = 3600 + use_zmtnblck = .false. +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../fix_am/global_glacier.2x2.grb' + fnmskh = '../fix_am/seaice_newland.grb' + fnmxic = '../fix_am/global_maxice.2x2.grb' + fnsmcc = '../fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../fix_am/RTGSST.1982.2012.monthly.clim.grb' + fnzorc = 'igbp' + fsicl = 99999 + fsics = 99999 + fslpl = 99999 + fsmcl = 99999, 99999, 99999 + fsnol = 99999 + fsnos = 99999 + fsotl = 99999 + ftsfl = 99999 + ftsfs = 90 + fvetl = 99999 + fvmnl = 99999 + fvmxl = 99999 + ldebug = .true. +/ + +&surf_map_nml + cd2 = -1 + cd4 = 0.12 + max_slope = 0.4 + n_del2_strong = 0 + n_del2_weak = 2 + n_del4 = 1 + peak_fac = 1.0 + zero_ocean = .false. +/ diff --git a/physics/docs/pdftxt/RE210/FV3_RRFS_v1beta_input.nml b/physics/docs/pdftxt/RE210/FV3_RRFS_v1beta_input.nml new file mode 100644 index 000000000..2e5a2eda1 --- /dev/null +++ b/physics/docs/pdftxt/RE210/FV3_RRFS_v1beta_input.nml @@ -0,0 +1,295 @@ +&amip_interp_nml + data_set = 'reynolds_oi' + date_out_of_range = 'climo' + interp_oi_sst = .true. + no_anom_sst = .false. + use_ncep_ice = .false. + use_ncep_sst = .true. +/ + +&atmos_model_nml + blocksize = 40 + ccpp_suite = 'FV3_RRFS_v1beta' + chksum_debug = .false. + dycore_only = .false. +/ + +!> [CIRES_UGWP_NML] +&cires_ugwp_nml + knob_ugwp_azdir = 2, 4, 4, 4 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_effac = 1, 1, 1, 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_solver = 2 + knob_ugwp_source = 1, 1, 0, 0 + knob_ugwp_stoch = 0, 0, 0, 0 + knob_ugwp_version = 0 + knob_ugwp_wvspec = 1, 25, 25, 25 + launch_level = 25 +/ +!! [CIRES_UGWP_NML] + +&diag_manager_nml + prepend_date = .false. +/ + +&external_ic_nml + checker_tr = .false. + filtered_terrain = .true. + gfs_dwinds = .true. + levp = 65 + nt_checker = 0 +/ + +&fms_io_nml + checksum_required = .false. + max_files_r = 100 + max_files_w = 100 +/ + +&fms_nml + clock_grain = 'ROUTINE' + domains_stack_size = 3000000 + print_memory_usage = .false. +/ + +&fv_core_nml + a_imp = 1.0 + adjust_dry_mass = .false. + bc_update_interval = 6 + beta = 0.0 + consv_am = .false. + consv_te = 0.0 + d2_bg = 0.0 + d2_bg_k1 = 0.2 + d2_bg_k2 = 0.04 + d4_bg = 0.12 + d_con = 1.0 + d_ext = 0.0 + dddmp = 0.1 + delt_max = 0.008 + dnats = 0 + do_sat_adj = .false. + do_schmidt = .true. + do_vort_damp = .true. + dwind_2d = .false. + dz_min = 2 + external_eta = .true. + external_ic = .true. + fill = .true. + full_zs_filter = .false. + fv_debug = .false. + fv_sg_adj = 300 + gfs_phil = .false. + hord_dp = 6 + hord_mt = 6 + hord_tm = 6 + hord_tr = 10 + hord_vt = 6 + hydrostatic = .false. + io_layout = 1, 1 + k_split = 2 + ke_bg = 0.0 + kord_mt = 9 + kord_tm = -9 + kord_tr = 9 + kord_wz = 9 + layout = 5, 2 + make_nh = .true. + mountain = .false. + n_split = 5 + n_sponge = 24 + n_zs_filter = 0 + na_init = 1 + ncep_ic = .false. + nggps_ic = .true. + no_dycore = .false. + nord = 3 + npx = 203 + npy = 117 + npz = 64 + nrows_blend = 10 + ntiles = 1 + nudge_qv = .false. + nwat = 6 + p_fac = 0.1 + phys_hydrostatic = .false. + print_freq = 6 + psm_bc = 1 + range_warn = .true. + read_increment = .false. + regional = .true. + regional_bcs_from_gsi = .false. + res_latlon_dynamics = 'fv3_increment.nc' + reset_eta = .false. + rf_cutoff = 2000.0 + stretch_fac = 0.999 + target_lat = 38.5 + target_lon = -97.5 + tau = 5.0 + use_hydro_pressure = .false. + vtdm4 = 0.02 + warm_start = .false. + write_restart_with_bcs = .false. + z_tracer = .true. +/ + +&fv_grid_nml + grid_file = 'INPUT/grid_spec.nc' +/ + +!> [GFS_PHYSICS_NML] +&gfs_physics_nml + bl_mynn_edmf = 1 + bl_mynn_edmf_mom = 1 + bl_mynn_tkeadvect= .true. + cal_pre = .false. + cdmbgwd = 3.5, 0.25 + cnvcld = .false. + cnvgwd = .false. + cplflx = .false. + debug = .false. + do_deep = .false. + do_mynnedmf = .true. + do_mynnsfclay = .true. + do_shum = .false. + do_skeb = .false. + do_spp = .false. + do_sppt = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0 + fhlwr = 1200.0 + fhswr = 1200.0 + fhzero = 1.0 + h2o_phys = .true. + hybedmf = .false. + iaer = 111 + ialb = 1 + iau_delthrs = 6 + iau_inc_files = '' + iaufhrs = 30 + icloud_bl = 1 + ico2 = 2 + iems = 1 + imfdeepcnv = -1 + imfshalcnv = -1 + imp_physics = 8 + iopt_alb = 2 + iopt_btr = 1 + iopt_crs = 1 + iopt_dveg = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_trs = 2 + iopt_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + lheatstrg = .false. + lndp_type = 0 + lradar = .true. + lsm = 2 + lsoil = 4 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + n_var_lndp = 0 + n_var_spp = 0 + nsradar_reset = 3600 + nst_anl = .true. + nstf_name = 2, 1, 0, 0, 0 + oz_phys = .false. + oz_phys_2015 = .true. + pdfcld = .false. + pre_rad = .false. + print_diff_pgr = .false. + prslrd0 = 0.0 + random_clds = .false. + redrag = .true. + satmedmf = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + !! [GFS_PHYSICS_NML] + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy + shum = -999.0 + shum_lscale = 150000 + shum_tau = 21600 + shumint = 3600 + skeb = -999.0 + skeb_lscale = 150000 + skeb_tau = 21600 + skeb_vdof = 10 + skebint = 3600 + sppt = -999.0 + sppt_lscale = 150000 + sppt_tau = 21600 + spptint = 3600 + use_zmtnblck = .false. +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../fix_am/global_glacier.2x2.grb' + fnmskh = '../fix_am/seaice_newland.grb' + fnmxic = '../fix_am/global_maxice.2x2.grb' + fnsmcc = '../fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../fix_am/RTGSST.1982.2012.monthly.clim.grb' + fnzorc = 'igbp' + fsicl = 99999 + fsics = 99999 + fslpl = 99999 + fsmcl = 99999, 99999, 99999 + fsnol = 99999 + fsnos = 99999 + fsotl = 99999 + ftsfl = 99999 + ftsfs = 90 + fvetl = 99999 + fvmnl = 99999 + fvmxl = 99999 + ldebug = .true. +/ + +&surf_map_nml + cd2 = -1 + cd4 = 0.12 + max_slope = 0.4 + n_del2_strong = 0 + n_del2_weak = 2 + n_del4 = 1 + peak_fac = 1.0 + zero_ocean = .false. +/ diff --git a/physics/docs/pdftxt/RE210/FV3_WoFS_v0_input.nml b/physics/docs/pdftxt/RE210/FV3_WoFS_v0_input.nml new file mode 100644 index 000000000..9d6124872 --- /dev/null +++ b/physics/docs/pdftxt/RE210/FV3_WoFS_v0_input.nml @@ -0,0 +1,301 @@ +&amip_interp_nml + data_set = 'reynolds_oi' + date_out_of_range = 'climo' + interp_oi_sst = .true. + no_anom_sst = .false. + use_ncep_ice = .false. + use_ncep_sst = .true. +/ + +&atmos_model_nml + blocksize = 40 + ccpp_suite = 'FV3_RRFS_v1nssl' + chksum_debug = .false. + dycore_only = .false. +/ + +!> [CIRES_UGWP_NML] +&cires_ugwp_nml + knob_ugwp_azdir = 2, 4, 4, 4 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_effac = 1, 1, 1, 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_solver = 2 + knob_ugwp_source = 1, 1, 0, 0 + knob_ugwp_stoch = 0, 0, 0, 0 + knob_ugwp_version = 0 + knob_ugwp_wvspec = 1, 25, 25, 25 + launch_level = 25 +/ +!! [CIRES_UGWP_NML] + +&diag_manager_nml + prepend_date = .false. +/ + +&external_ic_nml + checker_tr = .false. + filtered_terrain = .true. + gfs_dwinds = .true. + levp = 65 + nt_checker = 0 +/ + +&fms_io_nml + checksum_required = .false. + max_files_r = 100 + max_files_w = 100 +/ + +&fms_nml + clock_grain = 'ROUTINE' + domains_stack_size = 3000000 + print_memory_usage = .false. +/ + +&fv_core_nml + a_imp = 1.0 + adjust_dry_mass = .false. + bc_update_interval = 6 + beta = 0.0 + consv_am = .false. + consv_te = 0.0 + d2_bg = 0.0 + d2_bg_k1 = 0.2 + d2_bg_k2 = 0.04 + d4_bg = 0.12 + d_con = 1.0 + d_ext = 0.0 + dddmp = 0.1 + delt_max = 0.008 + dnats = 0 + do_sat_adj = .false. + do_schmidt = .true. + do_vort_damp = .true. + dwind_2d = .false. + dz_min = 2 + external_eta = .true. + external_ic = .true. + fill = .true. + full_zs_filter = .false. + fv_debug = .false. + fv_sg_adj = 300 + gfs_phil = .false. + hord_dp = 6 + hord_mt = 6 + hord_tm = 6 + hord_tr = 10 + hord_vt = 6 + hydrostatic = .false. + io_layout = 1, 1 + k_split = 2 + ke_bg = 0.0 + kord_mt = 9 + kord_tm = -9 + kord_tr = 9 + kord_wz = 9 + layout = 5, 2 + make_nh = .true. + mountain = .false. + n_split = 5 + n_sponge = 24 + n_zs_filter = 0 + na_init = 1 + ncep_ic = .false. + nggps_ic = .true. + no_dycore = .false. + nord = 3 + npx = 203 + npy = 117 + npz = 64 + nrows_blend = 10 + ntiles = 1 + nudge_qv = .false. + nwat = 7 + p_fac = 0.1 + phys_hydrostatic = .false. + print_freq = 6 + psm_bc = 1 + range_warn = .true. + read_increment = .false. + regional = .true. + regional_bcs_from_gsi = .false. + res_latlon_dynamics = 'fv3_increment.nc' + reset_eta = .false. + rf_cutoff = 2000.0 + stretch_fac = 0.999 + target_lat = 38.5 + target_lon = -97.5 + tau = 5.0 + use_hydro_pressure = .false. + vtdm4 = 0.075 + warm_start = .false. + write_restart_with_bcs = .false. + z_tracer = .true. +/ + +&fv_diagnostics_nml + do_hailcast = .true. +/ + +&fv_grid_nml + grid_file = 'INPUT/grid_spec.nc' +/ + +!> [GFS_PHYSICS_NML] +&gfs_physics_nml + bl_mynn_edmf = 1 + bl_mynn_edmf_mom = 1 + bl_mynn_tkeadvect = .true. + cal_pre = .false. + cdmbgwd = 3.5, 0.25 + cnvcld = .false. + cnvgwd = .false. + cplflx = .false. + debug = .false. + do_deep = .false. + do_mynnedmf = .true. + do_mynnsfclay = .true. + do_shum = .false. + do_skeb = .false. + do_spp = .false. + do_sppt = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0 + fhlwr = 1200.0 + fhswr = 1200.0 + fhzero = 1.0 + h2o_phys = .true. + hybedmf = .false. + iaer = 111 + ialb = 1 + iau_delthrs = 6 + iau_inc_files = '' + iaufhrs = 30 + icloud_bl = 1 + ico2 = 2 + iems = 1 + imfdeepcnv = -1 + imfshalcnv = -1 + imp_physics = 17 + iopt_alb = 2 + iopt_btr = 1 + iopt_crs = 1 + iopt_dveg = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + lheatstrg = .false. + lndp_type = 0 + lradar = .true. + lsm = 1 + lsoil = 4 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + n_var_lndp = 0 + n_var_spp = 0 + nsradar_reset = 3600 + nssl_cccn = 600000000.0 + nssl_ccn_on = .true. + nssl_hail_on = .true. + nst_anl = .true. + nstf_name = 2, 1, 0, 0, 0 + oz_phys = .false. + oz_phys_2015 = .true. + pdfcld = .false. + pre_rad = .false. + print_diff_pgr = .false. + prslrd0 = 0.0 + random_clds = .false. + redrag = .true. + satmedmf = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ +!! [GFS_PHYSICS_NML] + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy + shum = -999.0 + shum_lscale = 150000 + shum_tau = 21600 + shumint = 3600 + skeb = -999.0 + skeb_lscale = 150000 + skeb_tau = 21600 + skeb_vdof = 10 + skebint = 3600 + sppt = -999.0 + sppt_lscale = 150000 + sppt_tau = 21600 + spptint = 3600 + use_zmtnblck = .false. +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../fix_am/global_glacier.2x2.grb' + fnmskh = '../fix_am/seaice_newland.grb' + fnmxic = '../fix_am/global_maxice.2x2.grb' + fnsmcc = '../fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../fix_am/RTGSST.1982.2012.monthly.clim.grb' + fnzorc = 'igbp' + fsicl = 99999 + fsics = 99999 + fslpl = 99999 + fsmcl = 99999, 99999, 99999 + fsnol = 99999 + fsnos = 99999 + fsotl = 99999 + ftsfl = 99999 + ftsfs = 90 + fvetl = 99999 + fvmnl = 99999 + fvmxl = 99999 + ldebug = .true. +/ + +&surf_map_nml + cd2 = -1 + cd4 = 0.12 + max_slope = 0.4 + n_del2_strong = 0 + n_del2_weak = 2 + n_del4 = 1 + peak_fac = 1.0 + zero_ocean = .false. +/ diff --git a/physics/docs/pdftxt/RE210/SCM_GFS_v17_p8_input.nml b/physics/docs/pdftxt/RE210/SCM_GFS_v17_p8_input.nml new file mode 100644 index 000000000..51329b207 --- /dev/null +++ b/physics/docs/pdftxt/RE210/SCM_GFS_v17_p8_input.nml @@ -0,0 +1,154 @@ +!> [GFS_PHYSICS_NML] +&gfs_physics_nml + fhzero = 6 + h2o_phys = .true. + ldiag3d = .true. + qdiag3d = .true. + print_diff_pgr = .false. + fhcyc = 24 + use_ufo = .true. + pre_rad = .false. + imp_physics = 8 + iovr = 3 + ltaerosol = .false. + lradar = .false. + ttendlim = -999 + dt_inner = 300.0 + sedi_semi = .true. + decfl = 10 + oz_phys = .false. + oz_phys_2015 = .true. + lsoil_lsm = 4 + do_mynnedmf = .false. + do_mynnsfclay = .false. + icloud_bl = 1 + bl_mynn_edmf = 1 + bl_mynn_tkeadvect = .true. + bl_mynn_edmf_mom = 1 + do_ugwp = .false. + do_tofd = .false. + gwd_opt = 2 + do_ugwp_v0 = .true. + do_ugwp_v1 = .false. + do_ugwp_v0_orog_only = .false. + do_ugwp_v0_nst_only = .false. + do_gsl_drag_ls_bl = .false. + do_gsl_drag_ss = .true. + do_gsl_drag_tofd = .true. + do_ugwp_v1_orog_only = .false. + min_lakeice = 0.15 + min_seaice = 0.15 + use_cice_alb = .false. + pdfcld = .false. + fhswr = 1200. + fhlwr = 1200. + ialb = 2 + iems = 2 + iaer = 5111 + icliq_sw = 2 + ico2 = 2 + isubc_sw = 2 + isubc_lw = 2 + isol = 2 + lwhtr = .true. + swhtr = .true. + cnvgwd = .true. + shal_cnv = .true. + cal_pre = .false. + redrag = .true. + dspheat = .true. + hybedmf = .false. + satmedmf = .true. + isatmedmf = 1 + lheatstrg = .true. + lseaspray = .true. + random_clds = .false. + trans_trac = .true. + cnvcld = .true. + imfshalcnv = 2 + imfdeepcnv = 2 + ras = .false. + cdmbgwd = 0.14,1.8,1.0,1.0 + prslrd0 = 0. + ivegsrc = 1 + isot = 1 + lsoil = 4 + lsm = 2 + iopt_dveg = 4 + iopt_crs = 2 + iopt_btr = 1 + iopt_run = 1 + iopt_sfc = 3 + iopt_trs = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 3 + iopt_alb = 1 + iopt_snf = 4 + iopt_tbot = 2 + iopt_stc = 3 + debug = .false. + nstf_name = 2,1,0,0,0 + nst_anl = .true. + psautco = 0.0008,0.0005 + prautco = 0.00015,0.00015 + lgfdlmprad = .false. + effr_in = .true. + ldiag_ugwp = .false. + fscav_aero = "'*:0.0'" + do_sppt = .false. + do_shum = .false. + do_skeb = .false. + do_RRTMGP = .false. + doGP_cldoptics_LUT = .true. + doGP_lwscat = .true. + active_gases = 'h2o_co2_o3_n2o_ch4_o2' + ngases = 6 + rrtmgp_root = '../../ccpp/physics/physics/rte-rrtmgp/' + lw_file_gas = 'rrtmgp/data/rrtmgp-data-lw-g128-210809.nc' + lw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-lw.nc' + sw_file_gas = 'rrtmgp/data/rrtmgp-data-sw-g112-210809.nc' + sw_file_clouds = 'extensions/cloud_optics/rrtmgp-cloud-optics-coeffs-sw.nc' + rrtmgp_nGptsSW = 112 + rrtmgp_nGptsLW = 128 + rrtmgp_nBandsLW = 16 + rrtmgp_nBandsSW = 14 + frac_grid = .true. + cplchm = .false. + cplflx = .false. + cplice = .false. + cplwav = .false. + cplwav2atm = .false. + do_ca = .false. + ca_global = .false. + ca_sgs = .false. + nca = 1 + ncells = 5 + nlives = 12 + nseed = 1 + nfracseed = 0.5 + nthresh = 18 + ca_trigger = .true. + nspinup = 1 + iseed_ca = 12345 + lndp_type = 0 + n_var_lndp = 0 +/ +!! [GFS_PHYSICS_NML] + +!> [CIRES_UGWP_NML] +&cires_ugwp_nml + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + launch_level = 54 +/ +!! [CIRES_UGWP_NML] diff --git a/physics/docs/pdftxt/RE210/SCM_RAP_input.nml b/physics/docs/pdftxt/RE210/SCM_RAP_input.nml new file mode 100644 index 000000000..43ee70065 --- /dev/null +++ b/physics/docs/pdftxt/RE210/SCM_RAP_input.nml @@ -0,0 +1,135 @@ +!> [GFS_PHYSICS_NML] +&gfs_physics_nml + fhzero = 6 + h2o_phys = .true. + ldiag3d = .true. + qdiag3d = .true. + print_diff_pgr = .false. + fhcyc = 24 + use_ufo = .true. + pre_rad = .false. + imp_physics = 8 + ltaerosol = .true. + lradar = .true. + sedi_semi = .true. + decfl = 10 + nssl_cccn = 0.6e9 + nssl_alphah = 0.0 + nssl_alphahl = 1.0 + nssl_hail_on = .false. + nssl_ccn_on = .true. + nssl_invertccn = .true. + dt_inner = 60 + ttendlim = -999 + pdfcld = .false. + fhswr = 1200. + fhlwr = 1200. + ialb = 2 + iems = 2 + iaer = 5111 + icliq_sw = 1 + iovr = 1 + icloud = 0 + ico2 = 2 + isubc_sw = 2 + isubc_lw = 2 + isol = 2 + lwhtr = .true. + swhtr = .true. + cnvgwd = .true. + do_deep = .true. + shal_cnv = .true. + cal_pre = .false. + redrag = .true. + dspheat = .true. + hybedmf = .false. + satmedmf = .false. + isatmedmf = 0 + do_mynnedmf = .true. + lheatstrg = .false. + lseaspray = .false. + random_clds = .false. + trans_trac = .true. + cnvcld = .true. + imfshalcnv = 3 + imfdeepcnv = 3 + ras = .false. + cdmbgwd = 0.14,1.8,1.0,1.0 + do_mynnsfclay = .true. + prslrd0 = 0. + ivegsrc = 1 + isot = 1 + lsm = 3 + lsoil = 4 + lsoil_lsm = 9 + kice = 9 + iopt_dveg = 4 + iopt_crs = 2 + iopt_btr = 1 + iopt_run = 1 + iopt_sfc = 3 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 3 + iopt_alb = 1 + iopt_snf = 4 + iopt_tbot = 2 + iopt_stc = 3 + iopt_trs = 2 + debug = .false. + oz_phys = .false. + oz_phys_2015 = .true. + nstf_name = 2,0,0,0,0 + nst_anl = .true. + lkm = 0 + psautco = 0.0008,0.0005 + prautco = 0.00015,0.00015 + lgfdlmprad = .true. + cplchm = .false. + cplwav = .false. + cplwav2atm = .false. + effr_in = .true. + ldiag_ugwp = .false. + do_ugwp = .false. + do_tofd = .false. + gwd_opt = 3 + ldiag_ugwp = .false. + do_ugwp_v0 = .false. + do_ugwp_v0_orog_only = .false. + do_gsl_drag_ls_bl = .true. + do_gsl_drag_ss = .true. + do_gsl_drag_tofd = .true. + do_ugwp_v1 = .false. + do_ugwp_v1_orog_only = .false. + do_sppt = .false. + do_shum = .false. + do_skeb = .false. + lndp_type = 0 + n_var_lndp = 0 + fscav_aero = "'*:0.0'" + icloud_bl = 1 + bl_mynn_tkeadvect = .true. + bl_mynn_edmf = 1 + bl_mynn_edmf_mom = 1 + do_RRTMGP = .false. + doGP_cldoptics_LUT = .false. + doGP_lwscat = .false. +/ +!! [GFS_PHYSICS_NML] + +!> [CIRES_UGWP_NML] +&cires_ugwp_nml + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + launch_level = 54 +/ +!! [CIRES_UGWP_NML] diff --git a/physics/docs/pdftxt/RE210/suite_FV3_GFS_v16.xml b/physics/docs/pdftxt/RE210/suite_FV3_GFS_v16.xml new file mode 100644 index 000000000..122b937e1 --- /dev/null +++ b/physics/docs/pdftxt/RE210/suite_FV3_GFS_v16.xml @@ -0,0 +1,94 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + phys_tend + + + + + GFS_stochastics + + + + diff --git a/physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml b/physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml new file mode 100644 index 000000000..445f3a37b --- /dev/null +++ b/physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml @@ -0,0 +1,81 @@ + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_ruc + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + drag_suite + GFS_GWD_generic_post + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_suite_interstitial_4 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + phys_tend + + + + + GFS_stochastics + + + + diff --git a/physics/docs/pdftxt/RE210/suite_FV3_RRFS_v1beta.xml b/physics/docs/pdftxt/RE210/suite_FV3_RRFS_v1beta.xml new file mode 100644 index 000000000..97228c0a6 --- /dev/null +++ b/physics/docs/pdftxt/RE210/suite_FV3_RRFS_v1beta.xml @@ -0,0 +1,84 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_suite_interstitial_4 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + phys_tend + + + + + GFS_stochastics + + + + diff --git a/physics/docs/pdftxt/RE210/suite_FV3_WoFS_v0.xml b/physics/docs/pdftxt/RE210/suite_FV3_WoFS_v0.xml new file mode 100644 index 000000000..1a34ba1a1 --- /dev/null +++ b/physics/docs/pdftxt/RE210/suite_FV3_WoFS_v0.xml @@ -0,0 +1,80 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_MP_generic_pre + mp_nssl + GFS_MP_generic_post + maximum_hourly_diagnostics + phys_tend + + + + + GFS_stochastics + + + + diff --git a/physics/docs/pdftxt/RE210/suite_SCM_GFS_v17_p8.xml b/physics/docs/pdftxt/RE210/suite_SCM_GFS_v17_p8.xml new file mode 100644 index 000000000..9a5997667 --- /dev/null +++ b/physics/docs/pdftxt/RE210/suite_SCM_GFS_v17_p8.xml @@ -0,0 +1,90 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + noahmpdrv + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post + GFS_GWD_generic_pre + unified_ugwp + unified_ugwp_post + GFS_GWD_generic_post + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + + + mp_thompson + + + mp_thompson_post + GFS_MP_generic_post + maximum_hourly_diagnostics + phys_tend + + + + diff --git a/physics/docs/pdftxt/RE210/suite_SCM_RAP.xml b/physics/docs/pdftxt/RE210/suite_SCM_RAP.xml new file mode 100644 index 000000000..246c82e91 --- /dev/null +++ b/physics/docs/pdftxt/RE210/suite_SCM_RAP.xml @@ -0,0 +1,85 @@ + + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + sgscloud_radpre + GFS_rrtmg_pre + GFS_radiation_surface + rad_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + sgscloud_radpost + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + mynnsfc_wrapper + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_ruc + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + mynnedmf_wrapper + GFS_GWD_generic_pre + drag_suite + GFS_GWD_generic_post + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + cu_gf_driver_pre + cu_gf_driver + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_thompson_pre + mp_thompson + mp_thompson_post + GFS_MP_generic_post + cu_gf_driver_post + maximum_hourly_diagnostics + phys_tend + + + + diff --git a/physics/docs/pdftxt/RE6/FV3_GFS_v16_input.nml b/physics/docs/pdftxt/RE6/FV3_GFS_v16_input.nml index 941a512aa..186275dbf 100644 --- a/physics/docs/pdftxt/RE6/FV3_GFS_v16_input.nml +++ b/physics/docs/pdftxt/RE6/FV3_GFS_v16_input.nml @@ -245,7 +245,6 @@ ldiag_ugwp = .false. lgfdlmprad = .true. lheatstrg = .true. - lndp_each_step = .true. lndp_type = 0 lsm = 1 lsoil = 4 diff --git a/physics/docs/pdftxt/RE6/FV3_HRRR_input.nml b/physics/docs/pdftxt/RE6/FV3_HRRR_input.nml index a9558a8de..81116b447 100644 --- a/physics/docs/pdftxt/RE6/FV3_HRRR_input.nml +++ b/physics/docs/pdftxt/RE6/FV3_HRRR_input.nml @@ -202,7 +202,6 @@ kice = 9 ldiag3d = .false. lheatstrg = .false. - lndp_each_step = .true. lndp_type = 0 lradar = .true. lsm = 3 diff --git a/physics/docs/pdftxt/RE6/FV3_RRFS_v1beta_input.nml b/physics/docs/pdftxt/RE6/FV3_RRFS_v1beta_input.nml index 1ff750f4c..71b21b257 100644 --- a/physics/docs/pdftxt/RE6/FV3_RRFS_v1beta_input.nml +++ b/physics/docs/pdftxt/RE6/FV3_RRFS_v1beta_input.nml @@ -196,7 +196,6 @@ ivegsrc = 1 ldiag3d = .false. lheatstrg = .false. - lndp_each_step = .true. lndp_type = 0 lradar = .true. lsm = 2 diff --git a/physics/docs/pdftxt/RE6/FV3_WoFS_v0_input.nml b/physics/docs/pdftxt/RE6/FV3_WoFS_v0_input.nml index cfe497ebb..9d6124872 100644 --- a/physics/docs/pdftxt/RE6/FV3_WoFS_v0_input.nml +++ b/physics/docs/pdftxt/RE6/FV3_WoFS_v0_input.nml @@ -200,7 +200,6 @@ ivegsrc = 1 ldiag3d = .false. lheatstrg = .false. - lndp_each_step = .true. lndp_type = 0 lradar = .true. lsm = 1 diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index ff3ade172..f37383f24 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -605,7 +605,7 @@ show some variables in the namelist that must match the SDF. iopt_trs \ref noahmpdrv options for thermal roughness scheme:\n
      • 1: z0h=z0m -
      • 2: czil +
      • 2: canopy based czil
      • 3: ec
      • 4: kb inversed
      diff --git a/physics/mfpbltq.f b/physics/mfpbltq.f index 4555af268..fb775e2e1 100644 --- a/physics/mfpbltq.f +++ b/physics/mfpbltq.f @@ -4,7 +4,7 @@ !! for use in the TKE-EDMF PBL scheme (updated version). module mfpbltq_mod contains -!>\ingroup satmedmfvdifq +!>\ingroup module_satmedmfvdifq !! This subroutine computes mass flux and updraft parcel properties for !! thermals driven by surface heating. !!\section mfpbltq_gen GFS mfpblt General Algorithm diff --git a/physics/mfscuq.f b/physics/mfscuq.f index ca4819956..cafa61b55 100644 --- a/physics/mfscuq.f +++ b/physics/mfscuq.f @@ -3,7 +3,8 @@ !! parameterization for stratocumulus-top-driven turbulence (updated version). module mfscuq_mod contains -!>\ingroup satmedmfvdifq + +!>\ingroup module_satmedmfvdifq !! This subroutine computes mass flux and downdraft parcel properties !! for stratocumulus-top-driven turbulence. !! \section mfscuq GFS mfscu General Algorithm diff --git a/physics/module_bl_mynn.F90 b/physics/module_bl_mynn.F90 index d8833841f..ffb4b5696 100644 --- a/physics/module_bl_mynn.F90 +++ b/physics/module_bl_mynn.F90 @@ -373,7 +373,7 @@ MODULE module_bl_mynn CONTAINS ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine is the GSD MYNN-EDNF PBL driver routine,which !! encompassed the majority of the subroutines that comprise the !! procedures that ultimately solve for tendencies of @@ -1607,7 +1607,7 @@ END SUBROUTINE mynn_bl_driver ! !------------------------------------------------------------------- -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine initializes the mixing length, TKE, \f$\theta^{'2}\f$, !! \f$q^{'2}\f$, and \f$\theta^{'}q^{'}\f$. !!\section gen_mym_ini GSD MYNN-EDMF mym_initialize General Algorithm @@ -1795,7 +1795,7 @@ END SUBROUTINE mym_initialize ! These are defined on the walls of the grid boxes. ! -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine calculates the level 2, non-dimensional wind shear !! \f$G_M\f$ and vertical temperature gradient \f$G_H\f$ as well as !! the level 2 stability funcitons \f$S_h\f$ and \f$S_m\f$. @@ -1951,7 +1951,7 @@ END SUBROUTINE mym_level2 ! NOTE: the mixing lengths are meant to be calculated at the full- ! sigmal levels (or interfaces beween the model layers). ! -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine calculates the mixing lengths. SUBROUTINE mym_length ( & & kts,kte, & @@ -2363,7 +2363,7 @@ SUBROUTINE mym_length ( & END SUBROUTINE mym_length ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine was taken from the BouLac scheme in WRF-ARW and modified for !! integration into the MYNN PBL scheme. WHILE loops were added to reduce the !! computational expense. This subroutine computes the length scales up and down @@ -2526,7 +2526,7 @@ SUBROUTINE boulac_length0(k,kts,kte,zw,dz,qtke,theta,lb1,lb2) END SUBROUTINE boulac_length0 ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine was taken from the BouLac scheme in WRF-ARW !! and modified for integration into the MYNN PBL scheme. !! WHILE loops were added to reduce the computational expense. @@ -2717,7 +2717,7 @@ END SUBROUTINE boulac_length ! # dtl, dqw, dtv, gm and gh are allowed to share storage units with ! dfm, dfh, dfq, tcd and qcd, respectively, for saving memory. ! -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine calculates the vertical diffusivity coefficients and the !! production terms for the turbulent quantities. !>\section gen_mym_turbulence GSD mym_turbulence General Algorithm @@ -3313,7 +3313,7 @@ END SUBROUTINE mym_turbulence ! scheme (program). ! !------------------------------------------------------------------- -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine predicts the turbulent quantities at the next step. SUBROUTINE mym_predict (kts,kte, & & closure, & @@ -3716,7 +3716,7 @@ END SUBROUTINE mym_predict ! Set these values to those adopted by you. ! !------------------------------------------------------------------- -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine calculates the nonconvective component of the !! subgrid cloud fraction and mixing ratio as well as the functions used to !! calculate the buoyancy flux. Different cloud PDFs can be selected by @@ -4143,7 +4143,7 @@ SUBROUTINE mym_condensation (kts,kte, & END SUBROUTINE mym_condensation ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine solves for tendencies of U, V, \f$\theta\f$, qv, !! qc, and qi SUBROUTINE mynn_tendencies(kts,kte,i, & @@ -5162,7 +5162,7 @@ SUBROUTINE mynn_tendencies(kts,kte,i, & END SUBROUTINE mynn_tendencies ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !!ensure non-negative moist species. SUBROUTINE moisture_check(kte, delt, dp, exner, & qv, qc, qi, th, & @@ -5251,7 +5251,7 @@ END SUBROUTINE moisture_check ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! SUBROUTINE mynn_mix_chem(kts,kte,i, & delt,dz,pblh, & @@ -5383,7 +5383,7 @@ SUBROUTINE mynn_mix_chem(kts,kte,i, & END SUBROUTINE mynn_mix_chem ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf SUBROUTINE retrieve_exchange_coeffs(kts,kte,& &dfm,dfh,dz,K_m,K_h) @@ -5411,7 +5411,7 @@ SUBROUTINE retrieve_exchange_coeffs(kts,kte,& END SUBROUTINE retrieve_exchange_coeffs ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf SUBROUTINE tridiag(n,a,b,c,d) !! to solve system of linear eqs on tridiagonal matrix n times n @@ -5447,7 +5447,7 @@ SUBROUTINE tridiag(n,a,b,c,d) END SUBROUTINE tridiag ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf subroutine tridiag2(n,a,b,c,d,x) implicit none ! a - sub-diagonal (means it is the diagonal below the main diagonal) @@ -5482,7 +5482,7 @@ subroutine tridiag2(n,a,b,c,d,x) end subroutine tridiag2 ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf subroutine tridiag3(kte,a,b,c,d,x) !ccccccccccccccccccccccccccccccc @@ -5525,7 +5525,7 @@ end subroutine tridiag3 ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! SUBROUTINE mynn_bl_init_driver( & &RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, & @@ -5582,7 +5582,7 @@ SUBROUTINE mynn_bl_init_driver( & END SUBROUTINE mynn_bl_init_driver ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine calculates hybrid diagnotic boundary-layer height (PBLH). !! !! NOTES ON THE PBLH FORMULATION: The 1.5-theta-increase method defines @@ -5744,7 +5744,7 @@ SUBROUTINE GET_PBLH(KTS,KTE,zi,thetav1D,qke1D,zw1D,dz1D,landsea,kzi) END SUBROUTINE GET_PBLH !> @} -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This subroutine is the Dynamic Multi-Plume (DMP) Mass-Flux Scheme. !! !! dmp_mf() calculates the nonlocal turbulent transport from the dynamic @@ -6883,7 +6883,7 @@ SUBROUTINE DMP_mf( & END SUBROUTINE DMP_MF !================================================================= -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! zero or one condensation for edmf: calculates THV and QC subroutine condensation_edmf(QT,THL,P,zagl,THV,QC) ! @@ -7415,7 +7415,7 @@ SUBROUTINE SCALE_AWARE(dx,PBL1,Psig_bl,Psig_shcu) END SUBROUTINE SCALE_AWARE ! ===================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! \author JAYMES- added 22 Apr 2015 !! This function calculates saturation vapor pressure. Separate ice and liquid functions !! are used (identical to those in module_mp_thompson.F, v3.6). Then, the @@ -7449,7 +7449,7 @@ END FUNCTION esat_blend ! ==================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This function extends function "esat" and returns a "blended" !! saturation mixing ratio. !!\author JAYMES @@ -7491,7 +7491,7 @@ END FUNCTION qsat_blend ! =================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! This function interpolates the latent heats of vaporization and sublimation into !! a single, temperature-dependent, "blended" value, following !! Chaboureau and Bechtold (2002) \cite Chaboureau_2002, Appendix. @@ -7618,7 +7618,7 @@ FUNCTION phih(zet) END FUNCTION phih ! ================================================================== -!>\ingroup gsd_mynn_edmf +!>\ingroup gp_mynnedmf !! Calculate the buoyancy production of TKE from cloud-top cooling. SUBROUTINE topdown_cloudrad(kts,kte,dz1,zw,xland,kpbl,PBLH, & &sqc,sqi,sqw,thl,th1,ex1,p1,rho1,thetav, & diff --git a/physics/mynnedmf_wrapper.F90 b/physics/mynnedmf_wrapper.F90 index 9ad6f4aa3..08a28f2bd 100644 --- a/physics/mynnedmf_wrapper.F90 +++ b/physics/mynnedmf_wrapper.F90 @@ -2,7 +2,6 @@ !! This file contains all of the code related to running the MYNN !! eddy-diffusivity mass-flux scheme. -!>\ingroup gsd_mynn_edmf !> The following references best describe the code within !! Olson et al. (2019, NOAA Technical Memorandum) !! Nakanishi and Niino (2009) \cite NAKANISHI_2009 @@ -91,7 +90,8 @@ subroutine mynnedmf_wrapper_init ( & end subroutine mynnedmf_wrapper_init -! \brief This scheme (1) performs pre-mynnedmf work, (2) runs the mynnedmf, and (3) performs post-mynnedmf work +!>\defgroup gp_mynnedmf MYNN-EDMF PBL and Shallow Convection Module +!> This scheme (1) performs pre-mynnedmf work, (2) runs the mynnedmf, and (3) performs post-mynnedmf work !> \section arg_table_mynnedmf_wrapper_run Argument Table !! \htmlinclude mynnedmf_wrapper_run.html !! diff --git a/physics/tridi.f b/physics/tridi.f index 98b154950..13898ad43 100644 --- a/physics/tridi.f +++ b/physics/tridi.f @@ -2,7 +2,8 @@ !! These subroutines are originally internal subroutines in moninedmf.f module tridi_mod contains -!>\ingroup HEDMF + +!>\ingroup module_satmedmfvdifq !!\brief Routine to solve the tridiagonal system to calculate !!temperature and moisture at \f$ t + \Delta t \f$; part of two-part !!process to calculate time tendencies due to vertical diffusion. @@ -43,8 +44,7 @@ subroutine tridi1(l,n,cl,cm,cu,r1,au,a1) end subroutine tridi1 !----------------------------------------------------------------------- -!>\ingroup satmedmf -!>\ingroup satmedmfvdifq +!>\ingroup module_satmedmfvdifq !> This subroutine .. subroutine tridi2(l,n,cl,cm,cu,r1,r2,au,a1,a2) ! @@ -87,8 +87,7 @@ subroutine tridi2(l,n,cl,cm,cu,r1,r2,au,a1,a2) end subroutine tridi2 !----------------------------------------------------------------------- -!>\ingroup satmedmf -!>\ingroup satmedmfvdifq +!>\ingroup module_satmedmfvdifq !> Routine to solve the tridiagonal system to calculate u- and !! v-momentum at \f$ t + \Delta t \f$; part of two-part process to !! calculate time tendencies due to vertical diffusion. @@ -159,8 +158,7 @@ subroutine tridin(l,n,nt,cl,cm,cu,r1,r2,au,a1,a2) end subroutine tridin !----------------------------------------------------------------------- -!>\ingroup satmedmf -!>\ingroup satmedmfvdifq +!>\ingroup module_satmedmfvdifq !! This subroutine solves tridiagonal problem for TKE. subroutine tridit(l,n,nt,cl,cm,cu,rt,au,at) !----------------------------------------------------------------------- From 18986fab642073e17ff2abcb03a62ce38bd22b8b Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Mon, 24 Oct 2022 10:07:39 -0600 Subject: [PATCH 17/25] update HRRR suite SDF --- physics/docs/ccppsrw_doxyfile | 2 +- physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile index dde621942..09ebccf86 100644 --- a/physics/docs/ccppsrw_doxyfile +++ b/physics/docs/ccppsrw_doxyfile @@ -540,7 +540,7 @@ DIRECTORY_GRAPH = YES DIR_GRAPH_MAX_DEPTH = 1 DOT_IMAGE_FORMAT = SVG INTERACTIVE_SVG = NO -DOT_PATH = /Users/man.zhang/homebrew/bin/dot +DOT_PATH = DOTFILE_DIRS = MSCFILE_DIRS = DIAFILE_DIRS = diff --git a/physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml b/physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml index 445f3a37b..a4c5b7dbc 100644 --- a/physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml +++ b/physics/docs/pdftxt/RE210/suite_FV3_HRRR.xml @@ -1,4 +1,5 @@ + @@ -41,10 +42,8 @@ mynnsfc_wrapper GFS_surface_loop_control_part1 - sfc_nst_pre - sfc_nst - sfc_nst_post lsm_ruc + flake_driver GFS_surface_loop_control_part2 From 66ad417d92a929f6882eb1a25892d07a0af80560 Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Mon, 24 Oct 2022 17:03:33 -0600 Subject: [PATCH 18/25] minor bug fix --- physics/module_sf_noahmplsm.f90 | 2 +- physics/radiation_surface.meta | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/module_sf_noahmplsm.f90 b/physics/module_sf_noahmplsm.f90 index f25566e6b..15a91db7d 100644 --- a/physics/module_sf_noahmplsm.f90 +++ b/physics/module_sf_noahmplsm.f90 @@ -10637,7 +10637,7 @@ subroutine zilitinkevich_1995(z_0,zt,zq,restar,ustar,vkc,& end subroutine zilitinkevich_1995 ->\ingroup NoahMP_LSM +!>\ingroup NoahMP_LSM !!data. the formula for land uses a constant ratio (z_0/7.4) taken !!from garratt (1992). subroutine garratt_1992(zt,zq,z_0,ren,landsea) diff --git a/physics/radiation_surface.meta b/physics/radiation_surface.meta index 668a2bd21..bb23886a0 100644 --- a/physics/radiation_surface.meta +++ b/physics/radiation_surface.meta @@ -10,6 +10,6 @@ [nf_albd] standard_name = number_of_components_for_surface_albedo long_name = number of IR/VIS/UV compinents for surface albedo - units = none + units = count dimensions = () type = integer From b2baf9739a7738862f755dd0b16a992ba7e5db76 Mon Sep 17 00:00:00 2001 From: "Man.Zhang" Date: Tue, 25 Oct 2022 10:12:44 -0600 Subject: [PATCH 19/25] Define nf_albd on the host model --- physics/GFS_radiation_surface.F90 | 8 ++++---- physics/GFS_radiation_surface.meta | 7 +++++++ physics/radiation_surface.f | 5 ++--- physics/radiation_surface.meta | 15 --------------- 4 files changed, 13 insertions(+), 22 deletions(-) delete mode 100644 physics/radiation_surface.meta diff --git a/physics/GFS_radiation_surface.F90 b/physics/GFS_radiation_surface.F90 index ec7795c10..6a23cb264 100644 --- a/physics/GFS_radiation_surface.F90 +++ b/physics/GFS_radiation_surface.F90 @@ -50,7 +50,7 @@ end subroutine GFS_radiation_surface_init !! \htmlinclude GFS_radiation_surface_run.html !! subroutine GFS_radiation_surface_run ( & - im, frac_grid, lslwr, lsswr, lsm, lsm_noahmp, lsm_ruc, & + im, nf_albd, frac_grid, lslwr, lsswr, lsm, lsm_noahmp, lsm_ruc, & xlat, xlon, slmsk, lndp_type, n_var_lndp, sfc_alb_pert, & lndp_var_list, lndp_prt_list, landfrac, snodl, snodi, sncovr, & sncovr_ice, fice, zorl, hprime, tsfg, tsfa, tisfc, coszen, & @@ -62,12 +62,12 @@ subroutine GFS_radiation_surface_run ( & semisbase, semis, sfcalb, sfc_alb_dif, errmsg, errflg) use module_radiation_surface, only: f_zero, f_one, & - epsln, NF_ALBD, & + epsln, & setemis, setalb implicit none - integer, intent(in) :: im + integer, intent(in) :: im, nf_albd logical, intent(in) :: frac_grid, lslwr, lsswr, use_cice_alb, cplice integer, intent(in) :: lsm, lsm_noahmp, lsm_ruc, lndp_type, n_var_lndp real(kind=kind_phys), intent(in) :: min_seaice, min_lakeice @@ -184,7 +184,7 @@ subroutine GFS_radiation_surface_run ( & alvsf, alnsf, alvwf, alnwf, facsf, facwf, fice, tisfc, & albdvis_lnd, albdnir_lnd, albivis_lnd, albinir_lnd, & albdvis_ice, albdnir_ice, albivis_ice, albinir_ice, & - IM, sfc_alb_pert, lndp_alb, fracl, fraco, fraci, icy, & ! --- inputs + im, nf_albd, sfc_alb_pert, lndp_alb, fracl, fraco, fraci, icy, & ! --- inputs sfcalb ) ! --- outputs !> -# Approximate mean surface albedo from vis- and nir- diffuse values. diff --git a/physics/GFS_radiation_surface.meta b/physics/GFS_radiation_surface.meta index 3fd851a40..771cd5f4d 100644 --- a/physics/GFS_radiation_surface.meta +++ b/physics/GFS_radiation_surface.meta @@ -55,6 +55,13 @@ dimensions = () type = integer intent = in +[nf_albd] + standard_name = number_of_components_for_surface_albedo + long_name = number of IR/VIS/UV compinents for surface albedo + units = count + dimensions = () + type = integer + intent = in [frac_grid] standard_name = flag_for_fractional_landmask long_name = flag for fractional grid diff --git a/physics/radiation_surface.f b/physics/radiation_surface.f index 0a601f9a7..2fea84b5f 100644 --- a/physics/radiation_surface.f +++ b/physics/radiation_surface.f @@ -120,7 +120,6 @@ module module_radiation_surface ! & VTAGSFC='NCEP-Radiation_surface v5.0 Aug 2012 ' ! --- constant parameters - integer, parameter, public :: NF_ALBD = 4 ! number of surface albedo components integer, parameter, public :: IMXEMS = 360 ! number of longtitude points in global emis-type map integer, parameter, public :: JMXEMS = 180 ! number of latitude points in global emis-type map real (kind=kind_phys), parameter :: f_zero = 0.0 @@ -344,7 +343,7 @@ subroutine setalb & & alvsf,alnsf,alvwf,alnwf,facsf,facwf,fice,tisfc, & & lsmalbdvis, lsmalbdnir, lsmalbivis, lsmalbinir, & & icealbdvis, icealbdnir, icealbivis, icealbinir, & - & IMAX, albPpert, pertalb, fracl, fraco, fraci, icy, & + & IMAX, NF_ALBD, albPpert, pertalb, fracl, fraco, fraci, icy,& & sfcalb & ! --- outputs: & ) @@ -410,7 +409,7 @@ subroutine setalb & implicit none ! --- inputs - integer, intent(in) :: IMAX + integer, intent(in) :: IMAX, NF_ALBD integer, intent(in) :: lsm, lsm_noahmp, lsm_ruc logical, intent(in) :: use_cice_alb, frac_grid diff --git a/physics/radiation_surface.meta b/physics/radiation_surface.meta deleted file mode 100644 index bb23886a0..000000000 --- a/physics/radiation_surface.meta +++ /dev/null @@ -1,15 +0,0 @@ -[ccpp-table-properties] - name = module_radiation_surface - type = module - dependencies = namelist_soilveg_ruc.F90,set_soilveg_ruc.F90 - -######################################################################## -[ccpp-arg-table] - name = module_radiation_surface - type = module -[nf_albd] - standard_name = number_of_components_for_surface_albedo - long_name = number of IR/VIS/UV compinents for surface albedo - units = count - dimensions = () - type = integer From 818d0729852d70368b79d79678f7cbd7d6fa6e53 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Tue, 25 Oct 2022 10:37:28 -0600 Subject: [PATCH 20/25] address review comments --- physics/bl_mynn_common.f90 | 1 + 1 file changed, 1 insertion(+) diff --git a/physics/bl_mynn_common.f90 b/physics/bl_mynn_common.f90 index 7c82cf6d5..3e02f94b0 100644 --- a/physics/bl_mynn_common.f90 +++ b/physics/bl_mynn_common.f90 @@ -7,6 +7,7 @@ !! module (module_bl_mynn) further below: !>\ingroup gp_mynnedmf +!! Define Model-specific constants/parameters module bl_mynn_common !------------------------------------------ From 1cb95b664ae67e1a476f34cde3971f798df705ce Mon Sep 17 00:00:00 2001 From: "Chunxi.Zhang-NOAA" Date: Wed, 26 Oct 2022 16:12:46 +0000 Subject: [PATCH 21/25] Adjust GFS diagnostic AOD output to the exact 550nm --- physics/radiation_aerosols.f | 72 ++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 11 deletions(-) diff --git a/physics/radiation_aerosols.f b/physics/radiation_aerosols.f index 93ca3b1a0..ea68718d6 100644 --- a/physics/radiation_aerosols.f +++ b/physics/radiation_aerosols.f @@ -405,7 +405,7 @@ module module_radiation_aerosols ! ! ssarhi_grt(KCM1,NSWLWBD) - single scattering albedo for sw+lw band ! asyrhi_grt(KCM1,NSWLWBD) - asymmetry parameter for sw+lw band real (kind=kind_phys),allocatable,save,dimension(:,:) :: & - & extrhi_grt, scarhi_grt, ssarhi_grt, asyrhi_grt + & extrhi_grt, extrhi_grt_550, scarhi_grt, ssarhi_grt, asyrhi_grt ! !> \name relative humidity dependent aerosol optical properties: !! species : ss001, ss002, ss003, ss004, ss005, so4, @@ -417,7 +417,7 @@ module module_radiation_aerosols ! !> extinction coefficient real (kind=kind_phys),allocatable,save,dimension(:,:,:) :: & - & extrhd_grt, scarhd_grt, ssarhd_grt, asyrhd_grt + & extrhd_grt, extrhd_grt_550, scarhd_grt, ssarhd_grt, asyrhd_grt !> gocart species integer, parameter :: num_gc = 5 @@ -453,6 +453,7 @@ module module_radiation_aerosols ! real (kind=kind_phys), parameter :: wvn550 = 1.0e4/0.55 !> the sw spectral band covering wvn550 (comp in aer_init) integer, save :: nv_aod = 1 + integer :: i550,id550 ! --- public interfaces @@ -3488,10 +3489,12 @@ subroutine gocart_aerinit & if ( .not. allocated( extrhi_grt ) ) then allocate ( extrhi_grt ( kcm1,nswlwbd) ) + allocate ( extrhi_grt_550 ( kcm1,1) ) allocate ( scarhi_grt ( kcm1,nswlwbd) ) allocate ( ssarhi_grt ( kcm1,nswlwbd) ) allocate ( asyrhi_grt ( kcm1,nswlwbd) ) allocate ( extrhd_grt (krhlev,kcm2,nswlwbd) ) + allocate ( extrhd_grt_550 (krhlev,kcm2,1) ) allocate ( scarhd_grt (krhlev,kcm2,nswlwbd) ) allocate ( ssarhd_grt (krhlev,kcm2,nswlwbd) ) allocate ( asyrhd_grt (krhlev,kcm2,nswlwbd) ) @@ -3834,6 +3837,9 @@ subroutine rd_gocart_luts do i = 1, kaerbndi ! convert from m to micron j = kaerbndi -i + 1 ! flip i-index wavelength_du(j) = 1.e6 * lambda_du(i) + if (int(wavelength_du(j)*100) == 55) then + id550=j + endif enddo do k = 1, iradius do i = 1, kaerbndi @@ -3898,6 +3904,9 @@ subroutine rd_gocart_luts do i = 1, kaerbndd ! convert from m to micron j = kaerbndd -i + 1 ! flip i-index wavelength(j) = 1.e6 * lambda(i) + if (int(wavelength(j)*100) == 55) then + i550=j + endif enddo do k = 1, iradius ik = ibeg + k - 1 @@ -4016,6 +4025,9 @@ subroutine optavg_gocart refb = sumreft * rsolbd extrhi_grt(nc,nb) = sumk * rsolbd + if (nb==nv_aod) then + extrhi_grt_550(nc,1) = rhidext0_grt(id550,nc) + endif scarhi_grt(nc,nb) = sums * rsolbd asyrhi_grt(nc,nb) = sumokg / (sumok + 1.0e-10) ssarhi_grt(nc,nb) = 4.0*refb & @@ -4048,6 +4060,9 @@ subroutine optavg_gocart refb = sumreft * rsolbd extrhd_grt(nh,nc,nb) = sumk * rsolbd + if (nb==nv_aod) then + extrhd_grt_550(nh,nc,1) = rhdpext0_grt(i550,nh,nc) + endif scarhd_grt(nh,nc,nb) = sums * rsolbd asyrhd_grt(nh,nc,nb) = sumokg / (sumok + 1.0e-10) ssarhd_grt(nh,nc,nb) = 4.0*refb & @@ -4253,7 +4268,8 @@ subroutine aer_property_gocart & ! --- locals: real (kind=kind_phys), dimension(nlay,nswlwbd):: tauae,ssaae,asyae - real (kind=kind_phys), dimension(nspc) :: spcodp + real (kind=kind_phys), dimension(nlay,1):: tauae_550 + real (kind=kind_phys), dimension(nlay,nspc) :: spcodp real (kind=kind_phys),dimension(nlay,kcm) :: aerms real (kind=kind_phys),dimension(nlay) :: dz1, rh1 @@ -4269,6 +4285,9 @@ subroutine aer_property_gocart & do m = 1, NSWLWBD do k = 1, NLAY tauae(k,m) = f_zero + if (m==nv_aod) then + tauae_550(k,1) = f_zero + endif ssaae(k,m) = f_one asyae(k,m) = f_zero enddo @@ -4281,8 +4300,10 @@ subroutine aer_property_gocart & enddo enddo + do k = 1, NLAY do m = 1, nspc - spcodp(m) = f_zero + spcodp(k,m) = f_zero + enddo enddo do k = 1, NLAY @@ -4320,11 +4341,13 @@ subroutine aer_property_gocart & ! --- update diagnostic aod arrays do k = 1, NLAY - aerodp(i,1) = aerodp(i,1) + tauae(k,nv_aod) - enddo + !aerodp(i,1) = aerodp(i,1) + tauae(k,nv_aod) + aerodp(i,1) = aerodp(i,1) + tauae_550(k,1) do m = 1, NSPC - aerodp(i,m+1) = spcodp(m) + !aerodp(i,m+1) = spcodp(m) + aerodp(i,m+1) = aerodp(i,m+1)+spcodp(k,m) + enddo enddo endif ! end if_larsw_block @@ -4390,9 +4413,10 @@ subroutine aeropt ! --- locals: real (kind=kind_phys) :: drh0, drh1, rdrh - real (kind=kind_phys) :: cm, ext01, sca01, asy01, ssa01 - real (kind=kind_phys) :: ext1, asy1, ssa1, sca1 + real (kind=kind_phys) :: cm, ext01, ext01_550, sca01,asy01,ssa01 + real (kind=kind_phys) :: ext1, ext1_550, asy1, ssa1,sca1,tau_550 real (kind=kind_phys) :: sum_tau,sum_asy,sum_ssa,tau,asy,ssa + real (kind=kind_phys) :: sum_tau_550 integer :: ih1, ih2, nbin, ib, ntrc, ktrc ! --- linear interp coeffs for rh-dep species @@ -4416,6 +4440,10 @@ subroutine aeropt do ib = 1, nswlwbd sum_tau = f_zero + if (ib == nv_aod ) then + sum_tau_550 = f_zero + ext1_550 = f_zero + endif sum_ssa = f_zero sum_asy = f_zero @@ -4429,6 +4457,9 @@ subroutine aeropt do m = 1, kcm1 cm = max(aerms(k,m),0.0) * dz1(k) ext1 = ext1 + cm*extrhi_grt(m,ib) + if (ib == nv_aod) then + ext1_550 = ext1_550 + cm*extrhi_grt_550(m,1) + endif sca1 = sca1 + cm*scarhi_grt(m,ib) ssa1 = ssa1 + cm*extrhi_grt(m,ib) * ssarhi_grt(m,ib) asy1 = asy1 + cm*scarhi_grt(m,ib) * asyrhi_grt(m,ib) @@ -4439,7 +4470,10 @@ subroutine aeropt ! --- update aod from individual species if ( ib==nv_aod ) then - spcodp(1) = spcodp(1) + tau + tau_550 = ext1_550 +! ! spcodp(1) = spcodp(1) + tau + spcodp(k,1) = tau_550 + sum_tau_550 = sum_tau_550 + tau_550 endif ! --- update sum_tau, sum_ssa, sum_asy sum_tau = sum_tau + tau @@ -4449,6 +4483,9 @@ subroutine aeropt ! --- determine tau, ssa, asy for non-dust aerosols do ntrc = 2, nspc ext1 = f_zero + if ( ib==nv_aod ) then + ext1_550 = f_zero + endif asy1 = f_zero sca1 = f_zero ssa1 = f_zero @@ -4459,6 +4496,10 @@ subroutine aeropt cm = max(aerms(k,m1),0.0) * dz1(k) ext01 = extrhd_grt(ih1,m,ib) + & & rdrh * (extrhd_grt(ih2,m,ib)-extrhd_grt(ih1,m,ib)) + if ( ib==nv_aod ) then + ext01_550 = extrhd_grt_550(ih1,m,1) + & + & rdrh * (extrhd_grt_550(ih2,m,1)-extrhd_grt_550(ih1,m,1)) + endif sca01 = scarhd_grt(ih1,m,ib) + & & rdrh * (scarhd_grt(ih2,m,ib)-scarhd_grt(ih1,m,ib)) ssa01 = ssarhd_grt(ih1,m,ib) + & @@ -4466,6 +4507,9 @@ subroutine aeropt asy01 = asyrhd_grt(ih1,m,ib) + & & rdrh * (asyrhd_grt(ih2,m,ib)-asyrhd_grt(ih1,m,ib)) ext1 = ext1 + cm*ext01 + if ( ib==nv_aod ) then + ext1_550 = ext1_550 + cm*ext01_550 + endif sca1 = sca1 + cm*sca01 ssa1 = ssa1 + cm*ext01 * ssa01 asy1 = asy1 + cm*sca01 * asy01 @@ -4475,7 +4519,10 @@ subroutine aeropt if (sca1 > f_zero) asy=min(f_one, asy1/sca1) ! --- update aod from individual species if ( ib==nv_aod ) then - spcodp(ktrc) = spcodp(ktrc) + tau + tau_550 = ext1_550 + ! spcodp(ktrc) = spcodp(ktrc) + tau + spcodp(k,ktrc) = tau_550 + sum_tau_550 = sum_tau_550 + tau_550 endif ! --- update sum_tau, sum_ssa, sum_asy sum_tau = sum_tau + tau @@ -4485,6 +4532,9 @@ subroutine aeropt ! --- determine total tau, ssa, asy for aerosol mixture tauae(k,ib) = sum_tau + if ( ib==nv_aod ) then + tauae_550(k,1) = sum_tau_550 + endif if (sum_tau > f_zero) ssaae(k,ib) = sum_ssa / sum_tau if (sum_ssa > f_zero) asyae(k,ib) = sum_asy / sum_ssa From e14df8ce60c149bd6639b4f953006fa777c5f310 Mon Sep 17 00:00:00 2001 From: "Chunxi.Zhang-NOAA" Date: Tue, 1 Nov 2022 19:26:32 +0000 Subject: [PATCH 22/25] Modify the Thompson and RRTMG(P) schemes to improve radiative fluxes and cloud cover --- physics/GFS_rrtmg_pre.F90 | 14 ++++-- physics/GFS_rrtmgp_cloud_mp.F90 | 20 +++++--- physics/module_mp_thompson.F90 | 88 +++++++++++++++++++++++++-------- physics/mp_thompson.F90 | 12 +++-- physics/mp_thompson.meta | 7 +++ 5 files changed, 106 insertions(+), 35 deletions(-) diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index bf0bd96f8..968f46078 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -73,7 +73,8 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & use surface_perturbation, only: cdfnor,ppfbet ! For Thompson MP - use module_mp_thompson, only: calc_effectRad, Nt_c, & + use module_mp_thompson, only: calc_effectRad, & + Nt_c_l, Nt_c_o, & re_qc_min, re_qc_max, & re_qi_min, re_qi_max, & re_qs_min, re_qs_max @@ -245,6 +246,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & real (kind=kind_phys) :: alpha0,beta0,m,s,cldtmp,tmp_wt,cdfz real (kind=kind_phys) :: max_relh integer :: iflag + integer :: islmsk integer :: ids, ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & @@ -748,7 +750,12 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & qc_mp (i,k) = tracer1(i,k,ntcw)/(1.-qvs) qi_mp (i,k) = tracer1(i,k,ntiw)/(1.-qvs) qs_mp (i,k) = tracer1(i,k,ntsw)/(1.-qvs) - nc_mp (i,k) = nt_c*orho(i,k) + !nc_mp (i,k) = nt_c*orho(i,k) + if(slmsk(i) == 0.) then + nc_mp (i,k) = Nt_c_o*orho(i,k) + else + nc_mp (i,k) = Nt_c_l*orho(i,k) + endif ni_mp (i,k) = tracer1(i,k,ntinc)/(1.-qvs) enddo enddo @@ -877,13 +884,14 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & end do !> - Call Thompson's subroutine calc_effectRad() to compute effective radii do i=1,im + islmsk = nint(slmsk(i)) ! Effective radii [m] are now intent(out), bounds applied in calc_effectRad !tgs: progclduni has different limits for ice radii (10.0-150.0) than ! calc_effectRad (4.99-125.0 for WRFv3.8.1; 2.49-125.0 for WRFv4+) ! it will raise the low limit from 5 to 10, but the high limit will remain 125. call calc_effectRad (tlyr(i,:), plyr(i,:)*100., qv_mp(i,:), qc_mp(i,:), & nc_mp(i,:), qi_mp(i,:), ni_mp(i,:), qs_mp(i,:), & - effrl(i,:), effri(i,:), effrs(i,:), 1, lm ) + effrl(i,:), effri(i,:), effrs(i,:), islmsk, 1, lm ) ! Scale Thompson's effective radii from meter to micron do k=1,lm effrl(i,k) = MAX(re_qc_min, MIN(effrl(i,k), re_qc_max))*1.e6 diff --git a/physics/GFS_rrtmgp_cloud_mp.F90 b/physics/GFS_rrtmgp_cloud_mp.F90 index 2acf8b4da..d8fa5230a 100644 --- a/physics/GFS_rrtmgp_cloud_mp.F90 +++ b/physics/GFS_rrtmgp_cloud_mp.F90 @@ -12,8 +12,8 @@ module GFS_rrtmgp_cloud_mp use rrtmgp_lw_cloud_optics, only: & radliq_lwr => radliq_lwrLW, radliq_upr => radliq_uprLW,& radice_lwr => radice_lwrLW, radice_upr => radice_uprLW - use module_mp_thompson, only: calc_effectRad, Nt_c, re_qc_min, re_qc_max, re_qi_min, & - re_qi_max, re_qs_min, re_qs_max + use module_mp_thompson, only: calc_effectRad, Nt_c_l, Nt_c_o, re_qc_min, re_qc_max, & + re_qi_min, re_qi_max, re_qs_min, re_qs_max use module_mp_thompson_make_number_concentrations, only: make_IceNumber, & make_DropletNumber, make_RainNumber @@ -254,7 +254,7 @@ subroutine GFS_rrtmgp_cloud_mp_run(nCol, nLev, nTracers, ncnd, i_cldliq, i_cldic ! Update particle size using modified mixing-ratios from Thompson. call cmp_reff_Thompson(nLev, nCol, i_cldliq, i_cldice, i_cldsnow, i_cldice_nc, & i_cldliq_nc, i_twa, q_lay, p_lay, t_lay, tracer, con_eps, con_rd, ltaerosol,& - mraerosol, effrin_cldliq, effrin_cldice, effrin_cldsnow) + mraerosol, lsmask, effrin_cldliq, effrin_cldice, effrin_cldsnow) cld_reliq = effrin_cldliq cld_reice = effrin_cldice cld_resnow = effrin_cldsnow @@ -820,7 +820,7 @@ function cld_frac_XuRandall(p_lay, qs_lay, relhum, cld_mr, alpha) !! \section cmp_reff_Thompson_gen General Algorithm subroutine cmp_reff_Thompson(nLev, nCol, i_cldliq, i_cldice, i_cldsnow, i_cldice_nc, & i_cldliq_nc, i_twa, q_lay, p_lay, t_lay, tracer, con_eps, con_rd, ltaerosol, & - mraerosol, effrin_cldliq, effrin_cldice, effrin_cldsnow) + mraerosol, lsmask, effrin_cldliq, effrin_cldice, effrin_cldsnow) implicit none ! Inputs @@ -830,6 +830,7 @@ subroutine cmp_reff_Thompson(nLev, nCol, i_cldliq, i_cldice, i_cldsnow, i_cldice real(kind_phys), intent(in) :: con_eps,con_rd real(kind_phys), dimension(:,:),intent(in) :: q_lay, p_lay, t_lay real(kind_phys), dimension(:,:,:),intent(in) :: tracer + real(kind_phys), dimension(:), intent(in) :: lsmask ! Outputs real(kind_phys), dimension(:,:), intent(inout) :: effrin_cldliq, effrin_cldice, & @@ -840,6 +841,7 @@ subroutine cmp_reff_Thompson(nLev, nCol, i_cldliq, i_cldice, i_cldsnow, i_cldice real(kind_phys) :: rho, orho real(kind_phys),dimension(nCol,nLev) :: qv_mp, qc_mp, qi_mp, qs_mp, ni_mp, nc_mp, & nwfa, re_cloud, re_ice, re_snow + integer :: ilsmask ! Prepare cloud mixing-ratios and number concentrations for calc_effectRa do iLay = 1, nLev @@ -863,7 +865,11 @@ subroutine cmp_reff_Thompson(nLev, nCol, i_cldliq, i_cldice, i_cldsnow, i_cldice nc_mp(iCol,iLay) = make_DropletNumber(qc_mp(iCol,iLay)*rho, nwfa(iCol,iLay)*rho) * orho endif else - nc_mp(iCol,iLay) = nt_c*orho + if (nint(lsmask(iCol)) == 0) then !land + nc_mp(iCol,iLay) = nt_c_o*orho + else + nc_mp(iCol,iLay) = nt_c_l*orho + endif endif if (qi_mp(iCol,iLay) > 1.e-12 .and. ni_mp(iCol,iLay) < 100.) then ni_mp(iCol,iLay) = make_IceNumber(qi_mp(iCol,iLay)*rho, t_lay(iCol,iLay)) * orho @@ -873,9 +879,11 @@ subroutine cmp_reff_Thompson(nLev, nCol, i_cldliq, i_cldice, i_cldsnow, i_cldice ! Compute effective radii for liquid/ice/snow. do iCol=1,nCol + ilsmask = nint(lsmask(iCol)) call calc_effectRad (t_lay(iCol,:), p_lay(iCol,:), qv_mp(iCol,:), qc_mp(iCol,:), & nc_mp(iCol,:), qi_mp(iCol,:), ni_mp(iCol,:), qs_mp(iCol,:), & - re_cloud(iCol,:), re_ice(iCol,:), re_snow(iCol,:), 1, nLev ) + re_cloud(iCol,:), re_ice(iCol,:), re_snow(iCol,:), ilsmask, & + 1, nLev ) do iLay = 1, nLev re_cloud(iCol,iLay) = MAX(re_qc_min, MIN(re_cloud(iCol,iLay), re_qc_max)) re_ice(iCol,iLay) = MAX(re_qi_min, MIN(re_ice(iCol,iLay), re_qi_max)) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index fc5a0a2fb..9388ad425 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -92,7 +92,9 @@ MODULE module_mp_thompson !.. scheme. In 2-moment cloud water, Nt_c represents a maximum of !.. droplet concentration and nu_c is also variable depending on local !.. droplet number concentration. - REAL, PARAMETER :: Nt_c = 100.E6 + !REAL, PARAMETER :: Nt_c = 100.E6 + REAL, PARAMETER :: Nt_c_o = 50.E6 + REAL, PARAMETER :: Nt_c_l = 100.E6 REAL, PARAMETER, PRIVATE:: Nt_c_max = 1999.E6 !..Declaration of constants for assumed CCN/IN aerosols when none in @@ -108,7 +110,8 @@ MODULE module_mp_thompson REAL, PARAMETER, PRIVATE:: mu_r = 0.0 REAL, PARAMETER, PRIVATE:: mu_g = 0.0 REAL, PARAMETER, PRIVATE:: mu_i = 0.0 - REAL, PRIVATE:: mu_c + !REAL, PRIVATE:: mu_c + REAL, PRIVATE:: mu_c_o, mu_c_l !..Sum of two gamma distrib for snow (Field et al. 2005). !.. N(D) = M2**4/M3**3 * [Kap0*exp(-M2*Lam0*D/M3) @@ -150,7 +153,7 @@ MODULE module_mp_thompson REAL, PARAMETER, PRIVATE:: fv_s = 100.0 REAL, PARAMETER, PRIVATE:: av_g = 442.0 REAL, PARAMETER, PRIVATE:: bv_g = 0.89 - REAL, PARAMETER, PRIVATE:: av_i = 1493.9 + !REAL, PARAMETER, PRIVATE:: av_i = 1493.9 REAL, PARAMETER, PRIVATE:: bv_i = 1.0 REAL, PARAMETER, PRIVATE:: av_c = 0.316946E8 REAL, PARAMETER, PRIVATE:: bv_c = 2.0 @@ -534,7 +537,9 @@ SUBROUTINE thompson_init(is_aerosol_aware_in, & !.. disp=SQRT((mu+2)/(mu+1) - 1) so mu varies from 15 for Maritime !.. to 2 for really dirty air. This not used in 2-moment cloud water !.. scheme and nu_c used instead and varies from 2 to 15 (integer-only). - mu_c = MIN(15., (1000.E6/Nt_c + 2.)) + !mu_c = MIN(15., (1000.E6/Nt_c + 2.)) + mu_c_l = MIN(15., (1000.E6/Nt_c_l + 2.)) + mu_c_o = MIN(15., (1000.E6/Nt_c_o + 2.)) !> - Compute Schmidt number to one-third used numerous times Sc3 = Sc**(1./3.) @@ -889,7 +894,7 @@ SUBROUTINE thompson_init(is_aerosol_aware_in, & if (mpirank==mpiroot) write (*,*)'creating microphysics lookup tables ... ' if (mpirank==mpiroot) write (*,'(a, f5.2, a, f5.2, a, f5.2, a, f5.2)') & - ' using: mu_c=',mu_c,' mu_i=',mu_i,' mu_r=',mu_r,' mu_g=',mu_g + ' using: mu_c_o=',mu_c_o,' mu_i=',mu_i,' mu_r=',mu_r,' mu_g=',mu_g !> - Call table_ccnact() to read a static file containing CCN activation of aerosols. The !! data were created from a parcel model by Feingold & Heymsfield with @@ -982,7 +987,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & nwfa, nifa, nwfa2d, nifa2d, & tt, th, pii, & p, w, dz, dt_in, dt_inner, & - sedi_semi, decfl, & + sedi_semi, decfl, lsm, & RAINNC, RAINNCV, & SNOWNC, SNOWNCV, & ICENC, ICENCV, & @@ -1037,6 +1042,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT):: & nc, nwfa, nifa REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(IN):: nwfa2d, nifa2d + INTEGER, DIMENSION(ims:ime, jms:jme), INTENT(IN):: lsm REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT):: & re_cloud, re_ice, re_snow REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT):: pfils, pflls @@ -1117,6 +1123,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & REAL, DIMENSION(its:ite, jts:jte):: pcp_ra, pcp_sn, pcp_gr, pcp_ic REAL:: dt, pptrain, pptsnow, pptgraul, pptice REAL:: qc_max, qr_max, qs_max, qi_max, qg_max, ni_max, nr_max + INTEGER:: lsml REAL:: rand1, rand2, rand3, rand_pert_max INTEGER:: i, j, k, m INTEGER:: imax_qc,imax_qr,imax_qi,imax_qs,imax_qg,imax_ni,imax_nr @@ -1419,8 +1426,14 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & nifa1d(k) = nifa(i,k,j) enddo else + lsml = lsm(i,j) do k = kts, kte - nc1d(k) = Nt_c/rho(k) + !nc1d(k) = Nt_c/rho(k) + if(lsml == 0) then + nc1d(k) = Nt_c_o/rho(k) + else + nc1d(k) = Nt_c_l/rho(k) + endif nwfa1d(k) = 11.1E6 nifa1d(k) = naIN1*0.01 enddo @@ -1429,7 +1442,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & !> - Call mp_thompson() call mp_thompson(qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & nr1d, nc1d, nwfa1d, nifa1d, t1d, p1d, w1d, dz1d, & - pptrain, pptsnow, pptgraul, pptice, & + lsml, pptrain, pptsnow, pptgraul, pptice, & #if ( WRF_CHEM == 1 ) rainprod1d, evapprod1d, & #endif @@ -1698,7 +1711,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & enddo !> - Call calc_effectrad() call calc_effectRad (t1d, p1d, qv1d, qc1d, nc1d, qi1d, ni1d, qs1d, & - re_qc1d, re_qi1d, re_qs1d, kts, kte) + re_qc1d, re_qi1d, re_qs1d, lsml, kts, kte) do k = kts, kte re_cloud(i,k,j) = MAX(re_qc_min, MIN(re_qc1d(k), re_qc_max)) re_ice(i,k,j) = MAX(re_qi_min, MIN(re_qi1d(k), re_qi_max)) @@ -1841,7 +1854,7 @@ END SUBROUTINE thompson_finalize !> @{ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & nr1d, nc1d, nwfa1d, nifa1d, t1d, p1d, w1d, dzq, & - pptrain, pptsnow, pptgraul, pptice, & + lsml, pptrain, pptsnow, pptgraul, pptice, & #if ( WRF_CHEM == 1 ) rainprod, evapprod, & #endif @@ -1879,6 +1892,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & REAL, DIMENSION(kts:kte), INTENT(IN):: p1d, w1d, dzq REAL, INTENT(INOUT):: pptrain, pptsnow, pptgraul, pptice REAL, INTENT(IN):: dt + INTEGER, INTENT(IN):: lsml REAL, INTENT(IN):: rand1, rand2, rand3 ! Extended diagnostics, most arrays only allocated if ext_diag is true LOGICAL, INTENT(IN) :: ext_diag @@ -1982,6 +1996,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & REAL:: Ef_ra, Ef_sa, Ef_ga REAL:: dtsave, odts, odt, odzq, hgt_agl, SR REAL:: xslw1, ygra1, zans1, eva_factor + REAL:: av_i INTEGER:: i, k, k2, n, nn, nstep, k_0, kbot, IT, iexfrq INTEGER, DIMENSION(5):: ksed1 INTEGER:: nir, nis, nig, nii, nic, niin @@ -2006,6 +2021,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & odt = 1./dt odts = 1./dtsave iexfrq = 1 + av_i = av_s * D0s ** (bv_s - bv_i) !+---+-----------------------------------------------------------------+ !> - Initialize Source/sink terms. First 2 chars: "pr" represents source/sink of @@ -2210,7 +2226,14 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & endif nc(k) = MIN( DBLE(Nt_c_max), ccg(1,nu_c)*ocg2(nu_c)*rc(k) & / am_r*lamc**bm_r) - if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) nc(k) = Nt_c + !if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) nc(k) = Nt_c + if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) then + if (lsml == 0) then + nc(k) = Nt_c_o + else + nc(k) = Nt_c_l + endif + endif else qc1d(k) = 0.0 nc1d(k) = 0.0 @@ -2234,7 +2257,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & if (xDi.lt. 5.E-6) then lami = cie(2)/5.E-6 ni(k) = MIN(4999.D3, cig(1)*oig2*ri(k)/am_i*lami**bm_i) - elseif (xDi.gt. 300.E-6) then + elseif (xDi.gt. D0s + 100.E-6) then lami = cie(2)/300.E-6 ni(k) = cig(1)*oig2*ri(k)/am_i*lami**bm_i endif @@ -2919,13 +2942,13 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & !> - Deposition nucleation of dust/mineral from DeMott et al (2010) !! we may need to relax the temperature and ssati constraints. - if ( (ssati(k).ge. 0.25) .or. (ssatw(k).gt. eps & + if ( (ssati(k).ge. 0.15) .or. (ssatw(k).gt. eps & .and. temp(k).lt.253.15) ) then if (dustyIce .AND. (is_aerosol_aware .or. merra2_aerosol_aware)) then xnc = iceDeMott(tempc,qv(k),qvs(k),qvsi(k),rho(k),nifa(k)) xnc = xnc*(1.0 + 50.*rand3) else - xnc = MIN(250.E3, TNO*EXP(ATO*(T_0-temp(k)))) + xnc = MIN(1000.E3, TNO*EXP(ATO*(T_0-temp(k)))) endif xni = ni(k) + (pni_rfz(k)+pni_wfz(k))*dtsave pni_inu(k) = 0.5*(xnc-xni + abs(xnc-xni))*odts @@ -3273,7 +3296,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & lami = cie(2)/5.E-6 xni = MIN(4999.D3, cig(1)*oig2*xri/am_i*lami**bm_i) niten(k) = (xni-ni1d(k)*rho(k))*odts*orho - elseif (xDi.gt. 300.E-6) then + elseif (xDi.gt. D0s + 100.E-6) then lami = cie(2)/300.E-6 xni = cig(1)*oig2*xri/am_i*lami**bm_i niten(k) = (xni-ni1d(k)*rho(k))*odts*orho @@ -3389,7 +3412,13 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & if ((qc1d(k) + qcten(k)*DT) .gt. R1) then rc(k) = (qc1d(k) + qcten(k)*DT)*rho(k) nc(k) = MAX(2., MIN((nc1d(k)+ncten(k)*DT)*rho(k), Nt_c_max)) - if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) nc(k) = Nt_c + if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) then + if(lsml == 0) then + nc(k) = Nt_c_o + else + nc(k) = Nt_c_l + endif + endif L_qc(k) = .true. else rc(k) = R1 @@ -3560,7 +3589,11 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & if (is_aerosol_aware .or. merra2_aerosol_aware) then xnc = MAX(2., activ_ncloud(temp(k), w1d(k)+rand3, nwfa(k))) else - xnc = Nt_c + if(lsml == 0) then + xnc = Nt_c_o + else + xnc = Nt_c_l + endif endif pnc_wcd(k) = 0.5*(xnc-nc(k) + abs(xnc-nc(k)))*odts*orho @@ -3630,7 +3663,13 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & rc(k) = MAX(R1, (qc1d(k) + DT*qcten(k))*rho(k)) if (rc(k).eq.R1) L_qc(k) = .false. nc(k) = MAX(2., MIN((nc1d(k)+ncten(k)*DT)*rho(k), Nt_c_max)) - if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) nc(k) = Nt_c + if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) then + if(lsml == 0) then + nc(k) = Nt_c_o + else + nc(k) = Nt_c_l + endif + endif qv(k) = MAX(1.E-10, qv1d(k) + DT*qvten(k)) temp(k) = t1d(k) + DT*tten(k) rho(k) = 0.622*pres(k)/(R*temp(k)*(qv(k)+0.622)) @@ -4235,7 +4274,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & xDi = (bm_i + mu_i + 1.) * ilami if (xDi.lt. 5.E-6) then lami = cie(2)/5.E-6 - elseif (xDi.gt. 300.E-6) then + elseif (xDi.gt. D0s + 100.E-6) then lami = cie(2)/300.E-6 endif ni1d(k) = MIN(cig(1)*oig2*qi1d(k)/am_i*lami**bm_i, & @@ -5749,7 +5788,7 @@ END FUNCTION delta_p !! distribution, not the second part, which is the larger sizes. subroutine calc_effectRad (t1d, p1d, qv1d, qc1d, nc1d, qi1d, ni1d, qs1d, & - & re_qc1d, re_qi1d, re_qs1d, kts, kte) + & re_qc1d, re_qi1d, re_qs1d, lsml, kts, kte) IMPLICIT NONE @@ -5766,6 +5805,7 @@ subroutine calc_effectRad (t1d, p1d, qv1d, qc1d, nc1d, qi1d, ni1d, qs1d, & DOUBLE PRECISION:: lamc, lami LOGICAL:: has_qc, has_qi, has_qs INTEGER:: inu_c + INTEGER:: lsml real, dimension(15), parameter:: g_ratio = (/24,60,120,210,336, & & 504,720,990,1320,1716,2184,2730,3360,4080,4896/) @@ -5781,7 +5821,13 @@ subroutine calc_effectRad (t1d, p1d, qv1d, qc1d, nc1d, qi1d, ni1d, qs1d, & rho(k) = 0.622*p1d(k)/(R*t1d(k)*(qv1d(k)+0.622)) rc(k) = MAX(R1, qc1d(k)*rho(k)) nc(k) = MAX(2., MIN(nc1d(k)*rho(k), Nt_c_max)) - if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) nc(k) = Nt_c + if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) then + if( lsml == 0) then + nc(k) = Nt_c_o + else + nc(k) = Nt_c_l + endif + endif if (rc(k).gt.R1 .and. nc(k).gt.R2) has_qc = .true. ri(k) = MAX(R1, qi1d(k)*rho(k)) ni(k) = MAX(R2, ni1d(k)*rho(k)) diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 index ffe1a03d6..727098a05 100644 --- a/physics/mp_thompson.F90 +++ b/physics/mp_thompson.F90 @@ -9,7 +9,7 @@ module mp_thompson use machine, only : kind_phys use module_mp_thompson, only : thompson_init, mp_gt_driver, thompson_finalize, calc_effectRad - use module_mp_thompson, only : naIN0, naIN1, naCCN0, naCCN1, eps, Nt_c + use module_mp_thompson, only : naIN0, naIN1, naCCN0, naCCN1, eps, Nt_c_l, Nt_c_o use module_mp_thompson, only : re_qc_min, re_qc_max, re_qi_min, re_qi_max, re_qs_min, re_qs_max use module_mp_thompson_make_number_concentrations, only: make_IceNumber, make_DropletNumber, make_RainNumber @@ -284,7 +284,7 @@ subroutine mp_thompson_init(ncol, nlev, con_g, con_rd, con_eps, & ! Constant droplet concentration for single moment cloud water as in ! module_mp_thompson.F90, only needed for effective radii calculation - nc_local = Nt_c/rho + nc_local = Nt_c_l/rho end if @@ -322,7 +322,8 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & merra2_aerosol_aware, nc, nwfa, nifa,& nwfa2d, nifa2d, aero_ind_fdb, & tgrs, prsl, phii, omega, & - sedi_semi, decfl, dtp, dt_inner, & + sedi_semi, decfl, islmsk, dtp, & + dt_inner, & first_time_step, istep, nsteps, & prcp, rain, graupel, ice, snow, sr, & refl_10cm, reset_dBZ, do_radar_ref, & @@ -370,6 +371,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & real(kind_phys), intent(in ) :: prsl(:,:) real(kind_phys), intent(in ) :: phii(:,:) real(kind_phys), intent(in ) :: omega(:,:) + integer, intent(in ) :: islmsk(:) real(kind_phys), intent(in ) :: dtp logical, intent(in ) :: first_time_step integer, intent(in ) :: istep, nsteps @@ -687,7 +689,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & nc=nc, nwfa=nwfa, nifa=nifa, nwfa2d=nwfa2d, nifa2d=nifa2d, & tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtstep, dt_inner=dt_inner, & - sedi_semi=sedi_semi, decfl=decfl, & + sedi_semi=sedi_semi, decfl=decfl, lsm=islmsk, & rainnc=rain_mp, rainncv=delta_rain_mp, & snownc=snow_mp, snowncv=delta_snow_mp, & icenc=ice_mp, icencv=delta_ice_mp, & @@ -727,7 +729,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & else call mp_gt_driver(qv=qv, qc=qc, qr=qr, qi=qi, qs=qs, qg=qg, ni=ni, nr=nr, & tt=tgrs, p=prsl, w=w, dz=dz, dt_in=dtstep, dt_inner=dt_inner, & - sedi_semi=sedi_semi, decfl=decfl, & + sedi_semi=sedi_semi, decfl=decfl, lsm=islmsk, & rainnc=rain_mp, rainncv=delta_rain_mp, & snownc=snow_mp, snowncv=delta_snow_mp, & icenc=ice_mp, icencv=delta_ice_mp, & diff --git a/physics/mp_thompson.meta b/physics/mp_thompson.meta index 93a3ae7de..1f459bb88 100644 --- a/physics/mp_thompson.meta +++ b/physics/mp_thompson.meta @@ -510,6 +510,13 @@ dimensions = () type = integer intent = in +[islmsk] + standard_name = sea_land_ice_mask + long_name = sea/land/ice mask (=0/1/2) + units = flag + dimensions = (horizontal_loop_extent) + type = integer + intent = in [dtp] standard_name = timestep_for_physics long_name = physics timestep From bc2828a7a528cf38cf6f1c93f3730d781bf021ea Mon Sep 17 00:00:00 2001 From: "Chunxi.Zhang-NOAA" Date: Fri, 4 Nov 2022 17:22:12 +0000 Subject: [PATCH 23/25] Modify a few lines of code in radiation_aerosols.f to make them properly indented --- physics/radiation_aerosols.f | 55 ++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/physics/radiation_aerosols.f b/physics/radiation_aerosols.f index ea68718d6..9311b9596 100644 --- a/physics/radiation_aerosols.f +++ b/physics/radiation_aerosols.f @@ -4026,7 +4026,7 @@ subroutine optavg_gocart extrhi_grt(nc,nb) = sumk * rsolbd if (nb==nv_aod) then - extrhi_grt_550(nc,1) = rhidext0_grt(id550,nc) + extrhi_grt_550(nc,1) = rhidext0_grt(id550,nc) endif scarhi_grt(nc,nb) = sums * rsolbd asyrhi_grt(nc,nb) = sumokg / (sumok + 1.0e-10) @@ -4061,7 +4061,7 @@ subroutine optavg_gocart extrhd_grt(nh,nc,nb) = sumk * rsolbd if (nb==nv_aod) then - extrhd_grt_550(nh,nc,1) = rhdpext0_grt(i550,nh,nc) + extrhd_grt_550(nh,nc,1) = rhdpext0_grt(i550,nh,nc) endif scarhd_grt(nh,nc,nb) = sums * rsolbd asyrhd_grt(nh,nc,nb) = sumokg / (sumok + 1.0e-10) @@ -4286,7 +4286,7 @@ subroutine aer_property_gocart & do k = 1, NLAY tauae(k,m) = f_zero if (m==nv_aod) then - tauae_550(k,1) = f_zero + tauae_550(k,1) = f_zero endif ssaae(k,m) = f_one asyae(k,m) = f_zero @@ -4295,15 +4295,15 @@ subroutine aer_property_gocart & ! --- set floor value for aerms (kg/m3) do k = 1, NLAY - do m = 1, kcm - aerms(k,m) = 1.e-15 - enddo + do m = 1, kcm + aerms(k,m) = 1.e-15 + enddo enddo do k = 1, NLAY - do m = 1, nspc - spcodp(k,m) = f_zero - enddo + do m = 1, nspc + spcodp(k,m) = f_zero + enddo enddo do k = 1, NLAY @@ -4341,13 +4341,10 @@ subroutine aer_property_gocart & ! --- update diagnostic aod arrays do k = 1, NLAY - !aerodp(i,1) = aerodp(i,1) + tauae(k,nv_aod) - aerodp(i,1) = aerodp(i,1) + tauae_550(k,1) - - do m = 1, NSPC - !aerodp(i,m+1) = spcodp(m) - aerodp(i,m+1) = aerodp(i,m+1)+spcodp(k,m) - enddo + aerodp(i,1) = aerodp(i,1) + tauae_550(k,1) + do m = 1, NSPC + aerodp(i,m+1) = aerodp(i,m+1)+spcodp(k,m) + enddo enddo endif ! end if_larsw_block @@ -4441,8 +4438,8 @@ subroutine aeropt sum_tau = f_zero if (ib == nv_aod ) then - sum_tau_550 = f_zero - ext1_550 = f_zero + sum_tau_550 = f_zero + ext1_550 = f_zero endif sum_ssa = f_zero sum_asy = f_zero @@ -4458,7 +4455,7 @@ subroutine aeropt cm = max(aerms(k,m),0.0) * dz1(k) ext1 = ext1 + cm*extrhi_grt(m,ib) if (ib == nv_aod) then - ext1_550 = ext1_550 + cm*extrhi_grt_550(m,1) + ext1_550 = ext1_550 + cm*extrhi_grt_550(m,1) endif sca1 = sca1 + cm*scarhi_grt(m,ib) ssa1 = ssa1 + cm*extrhi_grt(m,ib) * ssarhi_grt(m,ib) @@ -4471,9 +4468,8 @@ subroutine aeropt ! --- update aod from individual species if ( ib==nv_aod ) then tau_550 = ext1_550 -! ! spcodp(1) = spcodp(1) + tau spcodp(k,1) = tau_550 - sum_tau_550 = sum_tau_550 + tau_550 + sum_tau_550 = sum_tau_550 + tau_550 endif ! --- update sum_tau, sum_ssa, sum_asy sum_tau = sum_tau + tau @@ -4484,7 +4480,7 @@ subroutine aeropt do ntrc = 2, nspc ext1 = f_zero if ( ib==nv_aod ) then - ext1_550 = f_zero + ext1_550 = f_zero endif asy1 = f_zero sca1 = f_zero @@ -4497,8 +4493,8 @@ subroutine aeropt ext01 = extrhd_grt(ih1,m,ib) + & & rdrh * (extrhd_grt(ih2,m,ib)-extrhd_grt(ih1,m,ib)) if ( ib==nv_aod ) then - ext01_550 = extrhd_grt_550(ih1,m,1) + & - & rdrh * (extrhd_grt_550(ih2,m,1)-extrhd_grt_550(ih1,m,1)) + ext01_550 = extrhd_grt_550(ih1,m,1) + & + & rdrh * (extrhd_grt_550(ih2,m,1)-extrhd_grt_550(ih1,m,1)) endif sca01 = scarhd_grt(ih1,m,ib) + & & rdrh * (scarhd_grt(ih2,m,ib)-scarhd_grt(ih1,m,ib)) @@ -4508,7 +4504,7 @@ subroutine aeropt & rdrh * (asyrhd_grt(ih2,m,ib)-asyrhd_grt(ih1,m,ib)) ext1 = ext1 + cm*ext01 if ( ib==nv_aod ) then - ext1_550 = ext1_550 + cm*ext01_550 + ext1_550 = ext1_550 + cm*ext01_550 endif sca1 = sca1 + cm*sca01 ssa1 = ssa1 + cm*ext01 * ssa01 @@ -4519,10 +4515,9 @@ subroutine aeropt if (sca1 > f_zero) asy=min(f_one, asy1/sca1) ! --- update aod from individual species if ( ib==nv_aod ) then - tau_550 = ext1_550 - ! spcodp(ktrc) = spcodp(ktrc) + tau - spcodp(k,ktrc) = tau_550 - sum_tau_550 = sum_tau_550 + tau_550 + tau_550 = ext1_550 + spcodp(k,ktrc) = tau_550 + sum_tau_550 = sum_tau_550 + tau_550 endif ! --- update sum_tau, sum_ssa, sum_asy sum_tau = sum_tau + tau @@ -4533,7 +4528,7 @@ subroutine aeropt ! --- determine total tau, ssa, asy for aerosol mixture tauae(k,ib) = sum_tau if ( ib==nv_aod ) then - tauae_550(k,1) = sum_tau_550 + tauae_550(k,1) = sum_tau_550 endif if (sum_tau > f_zero) ssaae(k,ib) = sum_ssa / sum_tau if (sum_ssa > f_zero) asyae(k,ib) = sum_asy / sum_ssa From 729b6e6a79390c0b3babdd02802b2eba3ecaa9bf Mon Sep 17 00:00:00 2001 From: "Chunxi.Zhang-NOAA" Date: Fri, 4 Nov 2022 21:22:23 +0000 Subject: [PATCH 24/25] Remove the lines that are commented out in GFS_rrtmg_pre.F90 and module_mp_thompson.F90 --- physics/GFS_rrtmg_pre.F90 | 3 +-- physics/module_mp_thompson.F90 | 7 +------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index 968f46078..a27058057 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -750,8 +750,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & qc_mp (i,k) = tracer1(i,k,ntcw)/(1.-qvs) qi_mp (i,k) = tracer1(i,k,ntiw)/(1.-qvs) qs_mp (i,k) = tracer1(i,k,ntsw)/(1.-qvs) - !nc_mp (i,k) = nt_c*orho(i,k) - if(slmsk(i) == 0.) then + if(nint(slmsk(i)) == 0) then nc_mp (i,k) = Nt_c_o*orho(i,k) else nc_mp (i,k) = Nt_c_l*orho(i,k) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index 9388ad425..8390d8875 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -92,7 +92,6 @@ MODULE module_mp_thompson !.. scheme. In 2-moment cloud water, Nt_c represents a maximum of !.. droplet concentration and nu_c is also variable depending on local !.. droplet number concentration. - !REAL, PARAMETER :: Nt_c = 100.E6 REAL, PARAMETER :: Nt_c_o = 50.E6 REAL, PARAMETER :: Nt_c_l = 100.E6 REAL, PARAMETER, PRIVATE:: Nt_c_max = 1999.E6 @@ -110,7 +109,6 @@ MODULE module_mp_thompson REAL, PARAMETER, PRIVATE:: mu_r = 0.0 REAL, PARAMETER, PRIVATE:: mu_g = 0.0 REAL, PARAMETER, PRIVATE:: mu_i = 0.0 - !REAL, PRIVATE:: mu_c REAL, PRIVATE:: mu_c_o, mu_c_l !..Sum of two gamma distrib for snow (Field et al. 2005). @@ -153,7 +151,6 @@ MODULE module_mp_thompson REAL, PARAMETER, PRIVATE:: fv_s = 100.0 REAL, PARAMETER, PRIVATE:: av_g = 442.0 REAL, PARAMETER, PRIVATE:: bv_g = 0.89 - !REAL, PARAMETER, PRIVATE:: av_i = 1493.9 REAL, PARAMETER, PRIVATE:: bv_i = 1.0 REAL, PARAMETER, PRIVATE:: av_c = 0.316946E8 REAL, PARAMETER, PRIVATE:: bv_c = 2.0 @@ -537,7 +534,6 @@ SUBROUTINE thompson_init(is_aerosol_aware_in, & !.. disp=SQRT((mu+2)/(mu+1) - 1) so mu varies from 15 for Maritime !.. to 2 for really dirty air. This not used in 2-moment cloud water !.. scheme and nu_c used instead and varies from 2 to 15 (integer-only). - !mu_c = MIN(15., (1000.E6/Nt_c + 2.)) mu_c_l = MIN(15., (1000.E6/Nt_c_l + 2.)) mu_c_o = MIN(15., (1000.E6/Nt_c_o + 2.)) @@ -1428,7 +1424,6 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & else lsml = lsm(i,j) do k = kts, kte - !nc1d(k) = Nt_c/rho(k) if(lsml == 0) then nc1d(k) = Nt_c_o/rho(k) else @@ -2021,6 +2016,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & odt = 1./dt odts = 1./dtsave iexfrq = 1 +! transition of terminal velocity from cloud ice to snow av_i = av_s * D0s ** (bv_s - bv_i) !+---+-----------------------------------------------------------------+ @@ -2226,7 +2222,6 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & endif nc(k) = MIN( DBLE(Nt_c_max), ccg(1,nu_c)*ocg2(nu_c)*rc(k) & / am_r*lamc**bm_r) - !if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) nc(k) = Nt_c if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) then if (lsml == 0) then nc(k) = Nt_c_o From e947b0850d26a43c76e3b9d5767afff68cbce159 Mon Sep 17 00:00:00 2001 From: "Chunxi.Zhang-NOAA" Date: Mon, 7 Nov 2022 15:51:31 +0000 Subject: [PATCH 25/25] Make changes to the Thompson scheme to address reviewer comments --- physics/GFS_rrtmg_pre.F90 | 6 ++--- physics/GFS_rrtmgp_cloud_mp.F90 | 6 ++--- physics/module_mp_thompson.F90 | 45 +++++++++++++++++---------------- 3 files changed, 29 insertions(+), 28 deletions(-) diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index a27058057..d05f02dae 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -750,10 +750,10 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, lextop, ltp, & qc_mp (i,k) = tracer1(i,k,ntcw)/(1.-qvs) qi_mp (i,k) = tracer1(i,k,ntiw)/(1.-qvs) qs_mp (i,k) = tracer1(i,k,ntsw)/(1.-qvs) - if(nint(slmsk(i)) == 0) then - nc_mp (i,k) = Nt_c_o*orho(i,k) - else + if(nint(slmsk(i)) == 1) then nc_mp (i,k) = Nt_c_l*orho(i,k) + else + nc_mp (i,k) = Nt_c_o*orho(i,k) endif ni_mp (i,k) = tracer1(i,k,ntinc)/(1.-qvs) enddo diff --git a/physics/GFS_rrtmgp_cloud_mp.F90 b/physics/GFS_rrtmgp_cloud_mp.F90 index d8fa5230a..546379a98 100644 --- a/physics/GFS_rrtmgp_cloud_mp.F90 +++ b/physics/GFS_rrtmgp_cloud_mp.F90 @@ -865,10 +865,10 @@ subroutine cmp_reff_Thompson(nLev, nCol, i_cldliq, i_cldice, i_cldsnow, i_cldice nc_mp(iCol,iLay) = make_DropletNumber(qc_mp(iCol,iLay)*rho, nwfa(iCol,iLay)*rho) * orho endif else - if (nint(lsmask(iCol)) == 0) then !land - nc_mp(iCol,iLay) = nt_c_o*orho - else + if (nint(lsmask(iCol)) == 1) then !land nc_mp(iCol,iLay) = nt_c_l*orho + else + nc_mp(iCol,iLay) = nt_c_o*orho endif endif if (qi_mp(iCol,iLay) > 1.e-12 .and. ni_mp(iCol,iLay) < 100.) then diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index 8390d8875..70c48feba 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -92,6 +92,7 @@ MODULE module_mp_thompson !.. scheme. In 2-moment cloud water, Nt_c represents a maximum of !.. droplet concentration and nu_c is also variable depending on local !.. droplet number concentration. + !REAL, PARAMETER :: Nt_c = 100.E6 REAL, PARAMETER :: Nt_c_o = 50.E6 REAL, PARAMETER :: Nt_c_l = 100.E6 REAL, PARAMETER, PRIVATE:: Nt_c_max = 1999.E6 @@ -1424,10 +1425,10 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & else lsml = lsm(i,j) do k = kts, kte - if(lsml == 0) then - nc1d(k) = Nt_c_o/rho(k) - else + if(lsml == 1) then nc1d(k) = Nt_c_l/rho(k) + else + nc1d(k) = Nt_c_o/rho(k) endif nwfa1d(k) = 11.1E6 nifa1d(k) = naIN1*0.01 @@ -2016,7 +2017,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & odt = 1./dt odts = 1./dtsave iexfrq = 1 -! transition of terminal velocity from cloud ice to snow +! Transition value of coefficient matching at crossover from cloud ice to snow av_i = av_s * D0s ** (bv_s - bv_i) !+---+-----------------------------------------------------------------+ @@ -2223,10 +2224,10 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & nc(k) = MIN( DBLE(Nt_c_max), ccg(1,nu_c)*ocg2(nu_c)*rc(k) & / am_r*lamc**bm_r) if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) then - if (lsml == 0) then - nc(k) = Nt_c_o - else + if (lsml == 1) then nc(k) = Nt_c_l + else + nc(k) = Nt_c_o endif endif else @@ -2252,7 +2253,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & if (xDi.lt. 5.E-6) then lami = cie(2)/5.E-6 ni(k) = MIN(4999.D3, cig(1)*oig2*ri(k)/am_i*lami**bm_i) - elseif (xDi.gt. D0s + 100.E-6) then + elseif (xDi.gt. 300.E-6) then lami = cie(2)/300.E-6 ni(k) = cig(1)*oig2*ri(k)/am_i*lami**bm_i endif @@ -3291,7 +3292,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & lami = cie(2)/5.E-6 xni = MIN(4999.D3, cig(1)*oig2*xri/am_i*lami**bm_i) niten(k) = (xni-ni1d(k)*rho(k))*odts*orho - elseif (xDi.gt. D0s + 100.E-6) then + elseif (xDi.gt. 300.E-6) then lami = cie(2)/300.E-6 xni = cig(1)*oig2*xri/am_i*lami**bm_i niten(k) = (xni-ni1d(k)*rho(k))*odts*orho @@ -3408,10 +3409,10 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & rc(k) = (qc1d(k) + qcten(k)*DT)*rho(k) nc(k) = MAX(2., MIN((nc1d(k)+ncten(k)*DT)*rho(k), Nt_c_max)) if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) then - if(lsml == 0) then - nc(k) = Nt_c_o - else + if(lsml == 1) then nc(k) = Nt_c_l + else + nc(k) = Nt_c_o endif endif L_qc(k) = .true. @@ -3584,10 +3585,10 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & if (is_aerosol_aware .or. merra2_aerosol_aware) then xnc = MAX(2., activ_ncloud(temp(k), w1d(k)+rand3, nwfa(k))) else - if(lsml == 0) then - xnc = Nt_c_o - else + if(lsml == 1) then xnc = Nt_c_l + else + xnc = Nt_c_o endif endif pnc_wcd(k) = 0.5*(xnc-nc(k) + abs(xnc-nc(k)))*odts*orho @@ -3659,10 +3660,10 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & if (rc(k).eq.R1) L_qc(k) = .false. nc(k) = MAX(2., MIN((nc1d(k)+ncten(k)*DT)*rho(k), Nt_c_max)) if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) then - if(lsml == 0) then - nc(k) = Nt_c_o - else + if(lsml == 1) then nc(k) = Nt_c_l + else + nc(k) = Nt_c_o endif endif qv(k) = MAX(1.E-10, qv1d(k) + DT*qvten(k)) @@ -4269,7 +4270,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & xDi = (bm_i + mu_i + 1.) * ilami if (xDi.lt. 5.E-6) then lami = cie(2)/5.E-6 - elseif (xDi.gt. D0s + 100.E-6) then + elseif (xDi.gt. 300.E-6) then lami = cie(2)/300.E-6 endif ni1d(k) = MIN(cig(1)*oig2*qi1d(k)/am_i*lami**bm_i, & @@ -5817,10 +5818,10 @@ subroutine calc_effectRad (t1d, p1d, qv1d, qc1d, nc1d, qi1d, ni1d, qs1d, & rc(k) = MAX(R1, qc1d(k)*rho(k)) nc(k) = MAX(2., MIN(nc1d(k)*rho(k), Nt_c_max)) if (.NOT. (is_aerosol_aware .or. merra2_aerosol_aware)) then - if( lsml == 0) then - nc(k) = Nt_c_o - else + if( lsml == 1) then nc(k) = Nt_c_l + else + nc(k) = Nt_c_o endif endif if (rc(k).gt.R1 .and. nc(k).gt.R2) has_qc = .true.