From b62597bccf740ddd240188b767e05ce3a9233783 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 1 Aug 2024 14:06:53 -0600 Subject: [PATCH] address review and fix bugs --- physics/CONV/progsigma_calc.f90 | 2 - .../GFS_phys_time_vary.scm.F90 | 2 +- .../UFS_SCM_NEPTUNE/iccninterp.F90 | 3 + physics/MP/Morrison_Gettelman/micro_mg3_0.F90 | 17 +- physics/MP/calpreciptype.f90 | 13 +- .../RRTMGP/rrtmgp_aerosol_optics.F90 | 64 ++++---- physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 | 132 ++++++++-------- physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 | 148 +++++++++--------- physics/docs/ccpp_doxyfile | 8 +- physics/docs/library.bib | 41 ++++- physics/docs/pdftxt/GFS_RRTMGP.txt | 2 +- physics/docs/pdftxt/GFS_v16_RRTMGP_suite.txt | 17 +- .../docs/pdftxt/GFS_v17_p8_ugwpv1_suite.txt | 4 +- physics/docs/pdftxt/HRRR_gf_suite.txt | 8 +- .../pdftxt/{GFS_NOAHMP.txt => NOAHMP_LSM.txt} | 2 +- .../pdftxt/{GFS_NOAH.txt => NOAH_LSM.txt} | 2 +- .../pdftxt/{GFS_UGWPv0.txt => UGWPv0.txt} | 2 +- physics/docs/pdftxt/ccppv7_phy_updates.txt | 2 +- 18 files changed, 242 insertions(+), 227 deletions(-) rename physics/docs/pdftxt/{GFS_NOAHMP.txt => NOAHMP_LSM.txt} (96%) rename physics/docs/pdftxt/{GFS_NOAH.txt => NOAH_LSM.txt} (98%) rename physics/docs/pdftxt/{GFS_UGWPv0.txt => UGWPv0.txt} (99%) diff --git a/physics/CONV/progsigma_calc.f90 b/physics/CONV/progsigma_calc.f90 index 76e01987c..73f084d01 100644 --- a/physics/CONV/progsigma_calc.f90 +++ b/physics/CONV/progsigma_calc.f90 @@ -11,8 +11,6 @@ module progsigma contains -!>\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/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.scm.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.scm.F90 index 9006d96b3..a09bf367f 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.scm.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/GFS_phys_time_vary.scm.F90 @@ -232,7 +232,7 @@ subroutine GFS_phys_time_vary_init ( ntrcaer = size(aer_nm, dim=3) endif -!> - Call read_cidata() to read IN and CCN data +!> - Call iccninterp::read_cidata() to read IN and CCN data if (iccn == 1) then call read_cidata (me,master) ! No consistency check needed for in/ccn data, all values are diff --git a/physics/Interstitials/UFS_SCM_NEPTUNE/iccninterp.F90 b/physics/Interstitials/UFS_SCM_NEPTUNE/iccninterp.F90 index dd752d9b8..b90b6fca7 100644 --- a/physics/Interstitials/UFS_SCM_NEPTUNE/iccninterp.F90 +++ b/physics/Interstitials/UFS_SCM_NEPTUNE/iccninterp.F90 @@ -15,6 +15,7 @@ module iccninterp contains +!> SUBROUTINE read_cidata (me, master) use machine, only: kind_phys use iccn_def @@ -65,6 +66,7 @@ END SUBROUTINE read_cidata ! !********************************************************************** ! +!> SUBROUTINE setindxci(npts,dlat,jindx1,jindx2,ddy,dlon, & iindx1,iindx2,ddx) ! @@ -126,6 +128,7 @@ END SUBROUTINE setindxci !********************************************************************** !********************************************************************** ! +!> SUBROUTINE ciinterpol(me,npts,IDATE,FHOUR,jindx1,jindx2,ddy, & iindx1,iindx2,ddx,lev, prsl, ciplout,ccnout) ! diff --git a/physics/MP/Morrison_Gettelman/micro_mg3_0.F90 b/physics/MP/Morrison_Gettelman/micro_mg3_0.F90 index 6e650e915..a28de2d74 100644 --- a/physics/MP/Morrison_Gettelman/micro_mg3_0.F90 +++ b/physics/MP/Morrison_Gettelman/micro_mg3_0.F90 @@ -2,11 +2,9 @@ !! This file contains Morrison-Gettelman MP version 3.0 - !! Update of MG microphysics with prognostic hail OR graupel. -!>\ingroup mg2mg3 -!>\defgroup mg3_mp Morrison-Gettelman MP version 3.0 -!!--------------------------------------------------------------------------------- -!! Purpose: -!! MG microphysics version 3.0 - Update of MG microphysics with +!--------------------------------------------------------------------------------- +! Purpose: +!> MG microphysics version 3.0 - Update of MG microphysics with !! prognostic hail OR graupel. !! !! \authors Andrew Gettelman, Hugh Morrison @@ -247,8 +245,7 @@ module micro_mg3_0 contains !=============================================================================== -!>\ingroup mg3_mp -!! This subroutine initializes the microphysics +!> This subroutine initializes the microphysics !! and needs to be called once at start of simulation. !!\author Andrew Gettelman, Dec 2005 subroutine micro_mg_init( & @@ -432,8 +429,7 @@ end subroutine micro_mg_init !=============================================================================== !microphysics routine for each timestep goes here... -!>\ingroup mg3_mp -!! This subroutine calculates the MG3 microphysical processes. +!> This subroutine calculates the MG3 microphysical processes. !>\authors Hugh Morrison, Andrew Gettelman, NCAR, Peter Caldwell, LLNL !! e-mail: morrison@ucar.edu, andrew@ucar.edu !!\section mg3_micro_mg_tend MG3 micro_mg_tend General Algorithm @@ -4483,8 +4479,7 @@ end subroutine micro_mg_tend !OUTPUT CALCULATIONS !======================================================================== -!>\ingroup mg3_mp -!! This subroutine calculates effective radii for rain and cloud. +!> This subroutine calculates effective radii for rain and cloud. subroutine calc_rercld(lamr, n0r, lamc, pgam, qric, qcic, ncic, rercld, mgncol,nlev) integer, intent(in) :: mgncol, nlev ! horizontal and vertical dimension real(r8), dimension(mgncol,nlev), intent(in) :: lamr ! rain size parameter (slope) diff --git a/physics/MP/calpreciptype.f90 b/physics/MP/calpreciptype.f90 index 2166e1b5c..f2d995946 100644 --- a/physics/MP/calpreciptype.f90 +++ b/physics/MP/calpreciptype.f90 @@ -3,8 +3,7 @@ module calpreciptype_mod contains -!>\ingroup gfs_calpreciptype -!! Foure algorithms are called to calculate dominant precipitation type, and the +!> Foure algorithms are called to calculate dominant precipitation type, and the !!tallies are sumed in calwxt_dominant(). !! !>\section gen_calp GFS calpreciptype General Algorithm @@ -215,10 +214,8 @@ subroutine calpreciptype(kdt,nrcm,im,ix,lm,lp1,randomno, & deallocate (twet,rh,td) return end -! -!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& -!>\ingroup gfs_calpreciptype -!! This subroutine computes precipitation type using a decision tree approach that uses + +!> This subroutine computes precipitation type using a decision tree approach that uses !! variables such as integrated wet bulb temperatue below freezing and lowest layer !! temperature (Baldwin et al. 1994 \cite baldwin_et_al_1994) subroutine calwxt(lm,lp1,t,q,pmid,pint, & @@ -472,7 +469,6 @@ subroutine calwxt(lm,lp1,t,q,pmid,pint, & ! ! code adapted for wrf post 24 august 2005 g manikin !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -!>\ingroup gfs_calpreciptype !> This subroutine is written and provided by Jim Ramer at NOAA/ESRL !!(Ramer (1993) \cite ramer_1993). subroutine calwxt_ramer(lm,lp1,t,q,pmid,rh,td,pint,ptyp) @@ -875,7 +871,6 @@ function xmytw(t,td,p) ! and layer lmh = bottom ! !$$$ -!>\ingroup gfs_calpreciptype !>this routine computes precipitation type using a decision tree !! approach that uses the so-called "energy method" of Bourgouin(2000) !! \cite bourgouin_2000. @@ -1044,7 +1039,6 @@ subroutine calwxt_bourg(lm,lp1,rn,g,t,q,pmid,pint,zint,ptype) return end ! -!>\ingroup gfs_calpreciptype !> This subroutine computes precipitation type using a decision tree !! approach that uses variables such as integrated wet bulb temperature !! below freezing and lowest layer temperature (Baldwin et al.1994 @@ -1307,7 +1301,6 @@ subroutine calwxt_revised(lm,lp1,t,q,pmid,pint, & return end ! -!>\ingroup gfs_calpreciptype !> This subroutine takes the precipitation type solutions from !! different algorithms and sums them up to give a dominant type. !! diff --git a/physics/Radiation/RRTMGP/rrtmgp_aerosol_optics.F90 b/physics/Radiation/RRTMGP/rrtmgp_aerosol_optics.F90 index 23f943572..311b33bbd 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_aerosol_optics.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_aerosol_optics.F90 @@ -25,54 +25,54 @@ subroutine rrtmgp_aerosol_optics_run(doSWrad, doLWrad, nCol, nLev, nDay, idxday, ! Inputs logical, intent(in) :: & - doSWrad, & !< Logical flag for shortwave radiation call - doLWrad, & !< Logical flag for longwave radiation call - top_at_1 !< Logical flag for vertical grid direcetion + doSWrad, & ! Logical flag for shortwave radiation call + doLWrad, & ! Logical flag for longwave radiation call + top_at_1 ! Logical flag for vertical grid direcetion integer, intent(in) :: & - nCol, & !< Number of horizontal grid points - nDay, & !< Number of daylit points - nLev, & !< Number of vertical layers - iaermdl, & !< Aerosol model scheme flag - iaerflg !< Aerosol effects to include + nCol, & ! Number of horizontal grid points + nDay, & ! Number of daylit points + nLev, & ! Number of vertical layers + iaermdl, & ! Aerosol model scheme flag + iaerflg ! Aerosol effects to include integer,intent(in),dimension(:) :: & - idxday !< Indices for daylit points. + idxday ! Indices for daylit points. real(kind_phys),intent(in) :: & - con_pi, & !< Physical constant (pi) - con_rd, & !< Physical constant (gas constant for dry-air) - con_g !< Physical constant (gravitational constant) + con_pi, & ! Physical constant (pi) + con_rd, & ! Physical constant (gas constant for dry-air) + con_g ! Physical constant (gravitational constant) real(kind_phys), dimension(:), intent(in) :: & - lon, & !< Longitude - lat, & !< Latitude - lsmask !< Land/sea/sea-ice mask + lon, & ! Longitude + lat, & ! Latitude + lsmask ! Land/sea/sea-ice mask real(kind_phys), dimension(:,:),intent(in), optional :: & - p_lay, & !< Pressure @ layer-centers (Pa) - tv_lay, & !< Virtual-temperature @ layer-centers (K) - relhum !< Relative-humidity @ layer-centers + p_lay, & ! Pressure @ layer-centers (Pa) + tv_lay, & ! Virtual-temperature @ layer-centers (K) + relhum ! Relative-humidity @ layer-centers real(kind_phys), dimension(:,:),intent(in) :: & - p_lk !< Exner function @ layer-centers (1) + p_lk ! Exner function @ layer-centers (1) real(kind_phys), dimension(:, :,:),intent(in) :: & - tracer !< trace gas concentrations + tracer ! trace gas concentrations real(kind_phys), dimension(:, :,:),intent(in) :: & - aerfld !< aerosol input concentrations + aerfld ! aerosol input concentrations real(kind_phys), dimension(:,:),intent(in), optional :: & - p_lev !< Pressure @ layer-interfaces (Pa) + p_lev ! Pressure @ layer-interfaces (Pa) real (kind=kind_phys), dimension(:,:), intent(out) :: & - ext550 !< 3d optical extinction for total aerosol species + ext550 ! 3d optical extinction for total aerosol species ! Outputs real(kind_phys), dimension(:,:), intent(out) :: & - aerodp !< Vertical integrated optical depth for various aerosol species + aerodp ! Vertical integrated optical depth for various aerosol species real(kind_phys), dimension(:,:,:), intent(out) :: & - aerlw_tau, & !< Longwave aerosol optical depth - aerlw_ssa, & !< Longwave aerosol single scattering albedo - aerlw_g, & !< Longwave aerosol asymmetry parameter - aersw_tau, & !< Shortwave aerosol optical depth - aersw_ssa, & !< Shortwave aerosol single scattering albedo - aersw_g !< Shortwave aerosol asymmetry parameter + aerlw_tau, & ! Longwave aerosol optical depth + aerlw_ssa, & ! Longwave aerosol single scattering albedo + aerlw_g, & ! Longwave aerosol asymmetry parameter + aersw_tau, & ! Shortwave aerosol optical depth + aersw_ssa, & ! Shortwave aerosol single scattering albedo + aersw_g ! Shortwave aerosol asymmetry parameter integer, intent(out) :: & - errflg !< CCPP error flag + errflg ! CCPP error flag character(len=*), intent(out) :: & - errmsg !< CCPP error message + errmsg ! CCPP error message ! Local variables real(kind_phys), dimension(nCol, nLev, lw_gas_props%get_nband(), 3) :: & diff --git a/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 b/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 index e2bcf032e..81c959e64 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_lw_main.F90 @@ -95,85 +95,85 @@ subroutine rrtmgp_lw_main_run(doLWrad, doLWclrsky, top_at_1, doGP_lwscat, ! Inputs logical, intent(in) :: & - doLWrad, & !< Flag to perform longwave calculation - doLWclrsky, & !< Flag to compute clear-sky fluxes - top_at_1, & !< Flag for vertical ordering convention - use_LW_jacobian, & !< Flag to compute Jacobian of longwave surface flux - doGP_sgs_pbl, & !< Flag to include sgs PBL clouds - doGP_sgs_cnv, & !< Flag to include sgs convective clouds - doGP_lwscat !< Flag to include scattering in clouds + doLWrad, & ! Flag to perform longwave calculation + doLWclrsky, & ! Flag to compute clear-sky fluxes + top_at_1, & ! Flag for vertical ordering convention + use_LW_jacobian, & ! Flag to compute Jacobian of longwave surface flux + doGP_sgs_pbl, & ! Flag to include sgs PBL clouds + doGP_sgs_cnv, & ! Flag to include sgs convective clouds + doGP_lwscat ! Flag to include scattering in clouds integer,intent(in) :: & - nCol, & !< Number of horizontal points - nLay, & !< Number of vertical grid points. - nGases, & !< Number of active gases - rrtmgp_phys_blksz, & !< Number of horizontal points to process at once. - nGauss_angles, & !< Number of gaussian quadrature angles used - iovr, & !< Choice of cloud-overlap method - iovr_convcld, & !< Choice of convective cloud-overlap - iovr_max, & !< Flag for maximum cloud overlap method - iovr_maxrand, & !< Flag for maximum-random cloud overlap method - iovr_rand, & !< Flag for random cloud overlap method - iovr_dcorr, & !< Flag for decorrelation-length cloud overlap method - iovr_exp, & !< Flag for exponential cloud overlap method - iovr_exprand, & !< Flag for exponential-random cloud overlap method - isubc_lw !< Flag for cloud-seeding (rng) for cloud-sampling + nCol, & ! Number of horizontal points + nLay, & ! Number of vertical grid points. + nGases, & ! Number of active gases + rrtmgp_phys_blksz, & ! Number of horizontal points to process at once. + nGauss_angles, & ! Number of gaussian quadrature angles used + iovr, & ! Choice of cloud-overlap method + iovr_convcld, & ! Choice of convective cloud-overlap + iovr_max, & ! Flag for maximum cloud overlap method + iovr_maxrand, & ! Flag for maximum-random cloud overlap method + iovr_rand, & ! Flag for random cloud overlap method + iovr_dcorr, & ! Flag for decorrelation-length cloud overlap method + iovr_exp, & ! Flag for exponential cloud overlap method + iovr_exprand, & ! Flag for exponential-random cloud overlap method + isubc_lw ! Flag for cloud-seeding (rng) for cloud-sampling integer,intent(in),dimension(:), optional :: & - icseed_lw !< Seed for random number generation for longwave radiation + icseed_lw ! Seed for random number generation for longwave radiation real(kind_phys), dimension(:), intent(in) :: & - semis, & !< Surface-emissivity (1) - tsfg !< Skin temperature (K) + semis, & ! Surface-emissivity (1) + tsfg ! Skin temperature (K) real(kind_phys), dimension(:,:), intent(in), optional :: & - p_lay, & !< Pressure @ model layer-centers (Pa) - t_lay, & !< Temperature (K) - p_lev, & !< Pressure @ model layer-interfaces (Pa) - t_lev, & !< Temperature @ model levels (K) - vmr_o2, & !< Molar-mixing ratio oxygen - vmr_h2o, & !< Molar-mixing ratio water vapor - vmr_o3, & !< Molar-mixing ratio ozone - vmr_ch4, & !< Molar-mixing ratio methane - vmr_n2o, & !< Molar-mixing ratio nitrous oxide - vmr_co2 !< Molar-mixing ratio carbon dioxide + p_lay, & ! Pressure @ model layer-centers (Pa) + t_lay, & ! Temperature (K) + p_lev, & ! Pressure @ model layer-interfaces (Pa) + t_lev, & ! Temperature @ model levels (K) + vmr_o2, & ! Molar-mixing ratio oxygen + vmr_h2o, & ! Molar-mixing ratio water vapor + vmr_o3, & ! Molar-mixing ratio ozone + vmr_ch4, & ! Molar-mixing ratio methane + vmr_n2o, & ! Molar-mixing ratio nitrous oxide + vmr_co2 ! Molar-mixing ratio carbon dioxide real(kind_phys), dimension(:,:), intent(in) :: & - cld_frac, & !< Cloud-fraction for stratiform clouds - cld_lwp, & !< Water path for stratiform liquid cloud-particles - cld_reliq, & !< Effective radius for stratiform liquid cloud-particles - cld_iwp, & !< Water path for stratiform ice cloud-particles - cld_reice, & !< Effective radius for stratiform ice cloud-particles - cld_swp, & !< Water path for snow hydrometeors - cld_resnow, & !< Effective radius for snow hydrometeors - cld_rwp, & !< Water path for rain hydrometeors - cld_rerain !< Effective radius for rain hydrometeors + cld_frac, & ! Cloud-fraction for stratiform clouds + cld_lwp, & ! Water path for stratiform liquid cloud-particles + cld_reliq, & ! Effective radius for stratiform liquid cloud-particles + cld_iwp, & ! Water path for stratiform ice cloud-particles + cld_reice, & ! Effective radius for stratiform ice cloud-particles + cld_swp, & ! Water path for snow hydrometeors + cld_resnow, & ! Effective radius for snow hydrometeors + cld_rwp, & ! Water path for rain hydrometeors + cld_rerain ! Effective radius for rain hydrometeors real(kind_phys), dimension(:,:), intent(in), optional :: & - precip_frac, & !< Precipitation fraction (not active, currently precipitation optics uses cloud-fraction) - cld_cnv_lwp, & !< Water path for convective liquid cloud-particles - cld_cnv_reliq, & !< Effective radius for convective liquid cloud-particles - cld_cnv_iwp, & !< Water path for convective ice cloud-particles - cld_cnv_reice, & !< Effective radius for convective ice cloud-particles - cld_pbl_lwp, & !< Water path for PBL liquid cloud-particles - cld_pbl_reliq, & !< Effective radius for PBL liquid cloud-particles - cld_pbl_iwp, & !< Water path for PBL ice cloud-particles - cld_pbl_reice, & !< Effective radius for PBL ice cloud-particles - cloud_overlap_param !< Cloud overlap parameter + precip_frac, & ! Precipitation fraction (not active, currently precipitation optics uses cloud-fraction) + cld_cnv_lwp, & ! Water path for convective liquid cloud-particles + cld_cnv_reliq, & ! Effective radius for convective liquid cloud-particles + cld_cnv_iwp, & ! Water path for convective ice cloud-particles + cld_cnv_reice, & ! Effective radius for convective ice cloud-particles + cld_pbl_lwp, & ! Water path for PBL liquid cloud-particles + cld_pbl_reliq, & ! Effective radius for PBL liquid cloud-particles + cld_pbl_iwp, & ! Water path for PBL ice cloud-particles + cld_pbl_reice, & ! Effective radius for PBL ice cloud-particles + cloud_overlap_param ! Cloud overlap parameter real(kind_phys), dimension(:,:,:), intent(in) :: & - aerlw_tau, & !< Aerosol optical depth - aerlw_ssa, & !< Aerosol single scattering albedo - aerlw_g !< Aerosol asymmetry paramter + aerlw_tau, & ! Aerosol optical depth + aerlw_ssa, & ! Aerosol single scattering albedo + aerlw_g ! Aerosol asymmetry paramter character(len=*), dimension(:), intent(in), optional :: & - active_gases_array !< List of active gases from namelist as array + active_gases_array ! List of active gases from namelist as array ! Outputs real(kind_phys), dimension(:,:), intent(inout), optional :: & - fluxlwUP_jac, & !< Jacobian of upwelling LW surface radiation (W/m2/K) - fluxlwUP_allsky, & !< All-sky flux (W/m2) - fluxlwDOWN_allsky, & !< All-sky flux (W/m2) - fluxlwUP_clrsky, & !< Clear-sky flux (W/m2) - fluxlwDOWN_clrsky, & !< All-sky flux (W/m2) - fluxlwUP_radtime, & !< Copy of fluxes (Used for coupling) - fluxlwDOWN_radtime !< + fluxlwUP_jac, & ! Jacobian of upwelling LW surface radiation (W/m2/K) + fluxlwUP_allsky, & ! All-sky flux (W/m2) + fluxlwDOWN_allsky, & ! All-sky flux (W/m2) + fluxlwUP_clrsky, & ! Clear-sky flux (W/m2) + fluxlwDOWN_clrsky, & ! All-sky flux (W/m2) + fluxlwUP_radtime, & ! Copy of fluxes (Used for coupling) + fluxlwDOWN_radtime ! character(len=*), intent(out) :: & - errmsg !< CCPP error message + errmsg ! CCPP error message integer, intent(out) :: & - errflg !< CCPP error flag + errflg ! CCPP error flag ! Local variables type(ty_fluxes_byband) :: flux_allsky, flux_clrsky diff --git a/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 b/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 index 28ed9e41c..c9fd3bbda 100644 --- a/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 +++ b/physics/Radiation/RRTMGP/rrtmgp_sw_main.F90 @@ -93,98 +93,98 @@ subroutine rrtmgp_sw_main_run(doSWrad, doSWclrsky, top_at_1, doGP_sgs_cnv, doGP_ ! Inputs logical, intent(in) :: & - doSWrad, & !< Flag to perform shortwave calculation - doSWclrsky, & !< Flag to compute clear-sky fluxes - top_at_1, & !< Flag for vertical ordering convention - doGP_sgs_pbl, & !< Flag to include sgs PBL clouds - doGP_sgs_cnv !< Flag to include sgs convective clouds + doSWrad, & ! Flag to perform shortwave calculation + doSWclrsky, & ! Flag to compute clear-sky fluxes + top_at_1, & ! Flag for vertical ordering convention + doGP_sgs_pbl, & ! Flag to include sgs PBL clouds + doGP_sgs_cnv ! Flag to include sgs convective clouds integer,intent(in) :: & - nCol, & !< Number of horizontal points - nDay, & !< Number of daytime points - nLay, & !< Number of vertical grid points. - nGases, & !< Number of active gases - rrtmgp_phys_blksz, & !< Number of horizontal points to process at once. - iovr, & !< Choice of cloud-overlap method - iovr_convcld, & !< Choice of convective cloud-overlap - iovr_max, & !< Flag for maximum cloud overlap method - iovr_maxrand, & !< Flag for maximum-random cloud overlap method - iovr_rand, & !< Flag for random cloud overlap method - iovr_dcorr, & !< Flag for decorrelation-length cloud overlap method - iovr_exp, & !< Flag for exponential cloud overlap method - iovr_exprand, & !< Flag for exponential-random cloud overlap method - isubc_sw, & !< + nCol, & ! Number of horizontal points + nDay, & ! Number of daytime points + nLay, & ! Number of vertical grid points. + nGases, & ! Number of active gases + rrtmgp_phys_blksz, & ! Number of horizontal points to process at once. + iovr, & ! Choice of cloud-overlap method + iovr_convcld, & ! Choice of convective cloud-overlap + iovr_max, & ! Flag for maximum cloud overlap method + iovr_maxrand, & ! Flag for maximum-random cloud overlap method + iovr_rand, & ! Flag for random cloud overlap method + iovr_dcorr, & ! Flag for decorrelation-length cloud overlap method + iovr_exp, & ! Flag for exponential cloud overlap method + iovr_exprand, & ! Flag for exponential-random cloud overlap method + isubc_sw, & ! iSFC integer,intent(in),dimension(:) :: & - idx !< Index array for daytime points + idx ! Index array for daytime points integer,intent(in),dimension(:), optional :: & - icseed_sw !< Seed for random number generation for shortwave radiation + icseed_sw ! Seed for random number generation for shortwave radiation real(kind_phys), dimension(:), intent(in) :: & - sfc_alb_nir_dir, & !< Surface albedo (direct) - sfc_alb_nir_dif, & !< Surface albedo (diffuse) - sfc_alb_uvvis_dir, & !< Surface albedo (direct) - sfc_alb_uvvis_dif, & !< Surface albedo (diffuse) - coszen !< Cosize of SZA + sfc_alb_nir_dir, & ! Surface albedo (direct) + sfc_alb_nir_dif, & ! Surface albedo (diffuse) + sfc_alb_uvvis_dir, & ! Surface albedo (direct) + sfc_alb_uvvis_dif, & ! Surface albedo (diffuse) + coszen ! Cosize of SZA real(kind_phys), dimension(:,:), intent(in), optional :: & - p_lay, & !< Pressure @ model layer-centers (Pa) - t_lay, & !< Temperature (K) - p_lev, & !< Pressure @ model layer-interfaces (Pa) - t_lev, & !< Temperature @ model levels (K) - vmr_o2, & !< Molar-mixing ratio oxygen - vmr_h2o, & !< Molar-mixing ratio water vapor - vmr_o3, & !< Molar-mixing ratio ozone - vmr_ch4, & !< Molar-mixing ratio methane - vmr_n2o, & !< Molar-mixing ratio nitrous oxide - vmr_co2 !< Molar-mixing ratio carbon dioxide + p_lay, & ! Pressure @ model layer-centers (Pa) + t_lay, & ! Temperature (K) + p_lev, & ! Pressure @ model layer-interfaces (Pa) + t_lev, & ! Temperature @ model levels (K) + vmr_o2, & ! Molar-mixing ratio oxygen + vmr_h2o, & ! Molar-mixing ratio water vapor + vmr_o3, & ! Molar-mixing ratio ozone + vmr_ch4, & ! Molar-mixing ratio methane + vmr_n2o, & ! Molar-mixing ratio nitrous oxide + vmr_co2 ! Molar-mixing ratio carbon dioxide real(kind_phys), dimension(:,:), intent(in) :: & - cld_frac, & !< Cloud-fraction for stratiform clouds - cld_lwp, & !< Water path for stratiform liquid cloud-particles - cld_reliq, & !< Effective radius for stratiform liquid cloud-particles - cld_iwp, & !< Water path for stratiform ice cloud-particles - cld_reice, & !< Effective radius for stratiform ice cloud-particles - cld_swp, & !< Water path for snow hydrometeors - cld_resnow, & !< Effective radius for snow hydrometeors - cld_rwp, & !< Water path for rain hydrometeors - cld_rerain !< Effective radius for rain hydrometeors + cld_frac, & ! Cloud-fraction for stratiform clouds + cld_lwp, & ! Water path for stratiform liquid cloud-particles + cld_reliq, & ! Effective radius for stratiform liquid cloud-particles + cld_iwp, & ! Water path for stratiform ice cloud-particles + cld_reice, & ! Effective radius for stratiform ice cloud-particles + cld_swp, & ! Water path for snow hydrometeors + cld_resnow, & ! Effective radius for snow hydrometeors + cld_rwp, & ! Water path for rain hydrometeors + cld_rerain ! Effective radius for rain hydrometeors real(kind_phys), dimension(:,:), intent(in), optional :: & - precip_frac, & !< Precipitation fraction - cld_cnv_lwp, & !< Water path for convective liquid cloud-particles - cld_cnv_reliq, & !< Effective radius for convective liquid cloud-particles - cld_cnv_iwp, & !< Water path for convective ice cloud-particles - cld_cnv_reice, & !< Effective radius for convective ice cloud-particles - cld_pbl_lwp, & !< Water path for PBL liquid cloud-particles - cld_pbl_reliq, & !< Effective radius for PBL liquid cloud-particles - cld_pbl_iwp, & !< Water path for PBL ice cloud-particles - cld_pbl_reice, & !< Effective radius for PBL ice cloud-particles - cloud_overlap_param !< + precip_frac, & ! Precipitation fraction + cld_cnv_lwp, & ! Water path for convective liquid cloud-particles + cld_cnv_reliq, & ! Effective radius for convective liquid cloud-particles + cld_cnv_iwp, & ! Water path for convective ice cloud-particles + cld_cnv_reice, & ! Effective radius for convective ice cloud-particles + cld_pbl_lwp, & ! Water path for PBL liquid cloud-particles + cld_pbl_reliq, & ! Effective radius for PBL liquid cloud-particles + cld_pbl_iwp, & ! Water path for PBL ice cloud-particles + cld_pbl_reice, & ! Effective radius for PBL ice cloud-particles + cloud_overlap_param ! real(kind_phys), dimension(:,:,:), intent(in) :: & - aersw_tau, & !< Aerosol optical depth - aersw_ssa, & !< Aerosol single scattering albedo - aersw_g !< Aerosol asymmetry paramter + aersw_tau, & ! Aerosol optical depth + aersw_ssa, & ! Aerosol single scattering albedo + aersw_g ! Aerosol asymmetry paramter character(len=*), dimension(:), intent(in), optional :: & - active_gases_array !< List of active gases from namelist as array + active_gases_array ! List of active gases from namelist as array real(kind_phys), intent(in) :: & - solcon !< Solar constant + solcon ! Solar constant ! Outputs character(len=*), intent(out) :: & - errmsg !< CCPP error message + errmsg ! CCPP error message integer, intent(out) :: & - errflg !< CCPP error flag + errflg ! CCPP error flag real(kind_phys), dimension(:,:), intent(inout) :: & - cldtausw !< Approx 10.mu band layer cloud optical depth + cldtausw ! Approx 10.mu band layer cloud optical depth real(kind_phys), dimension(:,:), intent(inout), optional :: & - fluxswUP_allsky, & !< RRTMGP upward all-sky flux profiles (W/m2) - fluxswDOWN_allsky, & !< RRTMGP downward all-sky flux profiles (W/m2) - fluxswUP_clrsky, & !< RRTMGP upward clear-sky flux profiles (W/m2) - fluxswDOWN_clrsky !< RRTMGP downward clear-sky flux profiles (W/m2) + fluxswUP_allsky, & ! RRTMGP upward all-sky flux profiles (W/m2) + fluxswDOWN_allsky, & ! RRTMGP downward all-sky flux profiles (W/m2) + fluxswUP_clrsky, & ! RRTMGP upward clear-sky flux profiles (W/m2) + fluxswDOWN_clrsky ! RRTMGP downward clear-sky flux profiles (W/m2) type(cmpfsw_type), dimension(:), intent(inout) :: & - scmpsw !< 2D surface fluxes, components: - !< uvbfc - total sky downward uv-b flux (W/m2) - !< uvbf0 - clear sky downward uv-b flux (W/m2) - !< nirbm - downward nir direct beam flux (W/m2) - !< nirdf - downward nir diffused flux (W/m2) - !< visbm - downward uv+vis direct beam flux (W/m2) - !< visdf - downward uv+vis diffused flux (W/m2) + scmpsw ! 2D surface fluxes, components: + ! uvbfc - total sky downward uv-b flux (W/m2) + ! uvbf0 - clear sky downward uv-b flux (W/m2) + ! nirbm - downward nir direct beam flux (W/m2) + ! nirdf - downward nir diffused flux (W/m2) + ! visbm - downward uv+vis direct beam flux (W/m2) + ! visdf - downward uv+vis diffused flux (W/m2) ! Local variables type(cmpfsw_type), dimension(rrtmgp_phys_blksz) :: scmpsw_clrsky, scmpsw_allsky diff --git a/physics/docs/ccpp_doxyfile b/physics/docs/ccpp_doxyfile index 136ae55d8..6e1d11cd7 100644 --- a/physics/docs/ccpp_doxyfile +++ b/physics/docs/ccpp_doxyfile @@ -957,11 +957,11 @@ INPUT = pdftxt/mainpage.txt \ pdftxt/MYNN_SFCLAYER.txt \ pdftxt/GFS_NSST.txt \ pdftxt/GFS_OCEAN.txt \ - pdftxt/GFS_NOAH.txt \ + pdftxt/NOAH_LSM.txt \ pdftxt/GFS_SFCSICE.txt \ pdftxt/GFS_SATMEDMFVDIFQ.txt \ - pdftxt/GFS_NOAHMP.txt \ - pdftxt/GFS_UGWPv0.txt \ + pdftxt/NOAHMP_LSM.txt \ + pdftxt/UGWPv0.txt \ pdftxt/GFS_ugwpv1.txt \ pdftxt/GFS_UGWPV1_ORO.txt \ pdftxt/GFS_GWDPS.txt \ @@ -1047,7 +1047,7 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = +EXCLUDE = ../Radiation/RRTMGP/rte-rrtmgp # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded diff --git a/physics/docs/library.bib b/physics/docs/library.bib index 0bab22b02..d331d6398 100644 --- a/physics/docs/library.bib +++ b/physics/docs/library.bib @@ -1,13 +1,48 @@ %% This BibTeX bibliography file was created using BibDesk. %% https://bibdesk.sourceforge.io/ -%% Created for Man Zhang at 2024-07-29 15:49:56 -0600 +%% Created for Man Zhang at 2024-08-01 13:16:14 -0600 %% Saved with string encoding Unicode (UTF-8) +@article{Dowell_2022, + author = {Dowell, David C. and Alexander, Curtis R. and James, Eric P. and Weygandt, Stephen S. and Benjamin, Stanley G. and Manikin, Geoffrey S. and Blake, Benjamin T. and Brown, John M. and Olson, Joseph B. and Hu, Ming and Smirnova, Tatiana G. and Ladwig, Terra and Kenyon, Jaymes S. and Ahmadov, Ravan and Turner, David D. and Duda, Jeffrey D. and Alcott, Trevor I.}, + date-added = {2024-08-01 13:13:04 -0600}, + date-modified = {2024-08-01 13:16:11 -0600}, + doi = {10.1175/waf-d-21-0151.1}, + issn = {1520-0434}, + journal = {Weather and Forecasting}, + month = aug, + number = {8}, + pages = {1371-1395}, + publisher = {American Meteorological Society}, + title = {The High-Resolution Rapid Refresh (HRRR): An Hourly Updating Convection-Allowing Forecast Model. Part I: Motivation and System Description}, + url = {http://dx.doi.org/10.1175/WAF-D-21-0151.1}, + volume = {37}, + year = {2022}, + bdsk-url-1 = {http://dx.doi.org/10.1175/WAF-D-21-0151.1}} + +@article{pincus_et_al_2019, + abstract = {Abstract This paper describes the initial implementation of a new toolbox that seeks to balance accuracy, efficiency, and flexibility in radiation calculations for dynamical models. The toolbox consists of two related code bases: Radiative Transfer for Energetics (RTE), which computes fluxes given a radiative transfer problem defined in terms of optical properties, boundary conditions, and source functions; and RRTM for General circulation model applications---Parallel (RRTMGP), which combines data and algorithms to map a physical description of the gaseous atmosphere into such a radiative transfer problem. The toolbox is an implementation of well-established ideas, including the use of a k-distribution to represent the spectral variation of absorption by gases and the use of two-stream, plane-parallel methods for solving the radiative transfer equation. The focus is instead on accuracy, by basing the k-distribution on state-of-the-art spectroscopy and on the sometimes-conflicting goals of flexibility and efficiency. Flexibility is facilitated by making extensive use of computational objects encompassing code and data, the latter provisioned at runtime and potentially tailored to specific problems. The computational objects provide robust access to a set of high-efficiency computational kernels that can be adapted to new computational environments. Accuracy is obtained by careful choice of algorithms and through tuning and validation of the k-distribution against benchmark calculations. Flexibility with respect to the host model implies user responsibility for maps between clouds and aerosols and the radiative transfer problem, although comprehensive examples are provided for clouds.}, + author = {Pincus, Robert and Mlawer, Eli J. and Delamere, Jennifer S.}, + date-added = {2024-07-30 16:26:37 -0600}, + date-modified = {2024-07-30 16:27:28 -0600}, + doi = {https://doi.org/10.1029/2019MS001621}, + eprint = {https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2019MS001621}, + journal = {Journal of Advances in Modeling Earth Systems}, + keywords = {radiation, atmospheric model, parameterization}, + number = {10}, + pages = {3074-3089}, + title = {Balancing Accuracy, Efficiency, and Flexibility in Radiation Calculations for Dynamical Models}, + url = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2019MS001621}, + volume = {11}, + year = {2019}, + bdsk-url-1 = {https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2019MS001621}, + bdsk-url-2 = {https://doi.org/10.1029/2019MS001621}} + @article{kim_et_al_2003, author = {Y-J. Kim, S.D. Eckermann and H-Y. Chun}, date-added = {2024-07-29 15:36:07 -0600}, @@ -348,10 +383,6 @@ @article{Lawrence_2019 bdsk-url-1 = {https://doi.org/10.1029%2F2018ms001583}, bdsk-url-2 = {https://doi.org/10.1029/2018ms001583}} -@article{cite-key, - date-added = {2023-05-24 11:18:09 -0600}, - date-modified = {2023-05-24 11:18:09 -0600}} - @article{gmd-15-6659-2022, author = {Benjamin, S. G. and Smirnova, T. G. and James, E. P. and Anderson, E. J. and Fujisaki-Manome, A. and Kelley, J. G. W. and Mann, G. E. and Gronewold, A. D. and Chu, P. and Kelley, S. G. T.}, date-added = {2023-05-24 10:51:47 -0600}, diff --git a/physics/docs/pdftxt/GFS_RRTMGP.txt b/physics/docs/pdftxt/GFS_RRTMGP.txt index 6a0862dac..f4ab8679c 100644 --- a/physics/docs/pdftxt/GFS_RRTMGP.txt +++ b/physics/docs/pdftxt/GFS_RRTMGP.txt @@ -1,5 +1,5 @@ /** -\page GFS_RRTMGP_page RRTMGP Shortwave/Longwave Radiation Scheme +\page GFS_RRTMGP_page RTE+RRTMGP Shortwave/Longwave Radiation Scheme \section des_rte_rrtmgp Description diff --git a/physics/docs/pdftxt/GFS_v16_RRTMGP_suite.txt b/physics/docs/pdftxt/GFS_v16_RRTMGP_suite.txt index 8b11cfc9c..68b36264e 100644 --- a/physics/docs/pdftxt/GFS_v16_RRTMGP_suite.txt +++ b/physics/docs/pdftxt/GFS_v16_RRTMGP_suite.txt @@ -3,8 +3,8 @@ \section gfsv_16HR3_GP_suite_overview Overview -This is an experimental version 16 of the Global Forecast System (GFS) with RRTMGP, which replaces RRTMG -in operational GFS v16 physics suite. +This is an experimental version of the Global Forecast System (GFS) in which the RRTMG radiation parameterization used +operationally is replaced with the RTE-RRTMGP parameterization for research and development. \section sdf_gfsv16GP Suite Definition File \include suite_SCM_GFS_v16_RRTMGP.xml @@ -12,7 +12,7 @@ in operational GFS v16 physics suite. \section gfs16GP_nml_opt_des Namelist - General physics options \snippet input_GFS_v16_RRTMGP.nml GFS_PHYSICS_NML -- \ref GFS_UNIFIED_UGWP related options +- \ref GFS_UGWP_v0_UGWP related options \snippet input_GFS_v16_RRTMGP.nml CIRES_UGWP_NML - nstf_name = \f$[2,0,0,0,0]^1 [2,1,0,0,0]^2\f$ @@ -28,15 +28,4 @@ in operational GFS v16 physics suite. - \b C1152: cdmbgwd="4.0,0.10,1.0,1.0" - \b C3072: cdmbgwd="4.0,0.05,1.0,1.0" -- Grid-spacing dependency of \p knob_ugwp_tauamp - - \b C48: knob_ugwp_tauamp=6.0e-3 - - \b C96: knob_ugwp_tauamp=3.0e-3 - - \b C192: knob_ugwp_tauamp=1.5e-3 - - \b C384: knob_ugwp_tauamp=0.8e-3 - - \b C768: knob_ugwp_tauamp=0.5e-3 - - \b C1152: knob_ugwp_tauamp=0.35e-3 - - \b C3072: knob_ugwp_tauamp=0.13e-3 - -- Grid-spacing dependency of \p xr_cnvcld - - \b C48 and \b C96: xr_cnvcld =.false. */ diff --git a/physics/docs/pdftxt/GFS_v17_p8_ugwpv1_suite.txt b/physics/docs/pdftxt/GFS_v17_p8_ugwpv1_suite.txt index f0324701f..9b150360a 100644 --- a/physics/docs/pdftxt/GFS_v17_p8_ugwpv1_suite.txt +++ b/physics/docs/pdftxt/GFS_v17_p8_ugwpv1_suite.txt @@ -4,8 +4,8 @@ \section gfsv_17_suite_overview Overview -The GFS_v17_p8_ugwpv1 suite is a prototype of -the GFS_v17 suite, and is expected to evolve before the implementation. It is available for use +The GFS_v17_p8_ugwpv1 suite is a prototype for +the GFS v17, and is expected to evolve before the operational implementation. It is supported for use with the CCPP SCM. The primary differences between the GFS_v16 and GFS_v17 suites are: - \b Microphysics: The replacement of \ref GFDL_cloud with \ref THOMPSON - PBL and Convection updates diff --git a/physics/docs/pdftxt/HRRR_gf_suite.txt b/physics/docs/pdftxt/HRRR_gf_suite.txt index 32a008fb4..96ac44869 100644 --- a/physics/docs/pdftxt/HRRR_gf_suite.txt +++ b/physics/docs/pdftxt/HRRR_gf_suite.txt @@ -4,7 +4,13 @@ \section RRFS_v1_suite_overview Overview The HRRR_gf suite is one of the candidates for the future operational implementation of -the Rapid Refresh Forecast System (RRFS), which can be configured using the UFS SRW App. +the Rapid Refresh Forecast System (RRFS). Simplified configurations of RRFS can be configured using +the UFS SRW App. This suite is similar to the one used by the NOAA operational HRRR v4 (Dowell et al. 2022 \cite Dowell_2022), with the addition of the Grell-Freitas +convective parameterization. + +While the parameterization for smoke and dust representation is used RRFS prototype tests and is included in the +HRRR_gf Suite Definition File, is not active in the CCPP Single Column Model since the smoke and dust tracers are initialized +with new zero values. The HRRR_gf suite uses the parameterizations in the following order: - \ref SGSCLOUD_page diff --git a/physics/docs/pdftxt/GFS_NOAHMP.txt b/physics/docs/pdftxt/NOAHMP_LSM.txt similarity index 96% rename from physics/docs/pdftxt/GFS_NOAHMP.txt rename to physics/docs/pdftxt/NOAHMP_LSM.txt index 537d27527..d5a17fc44 100644 --- a/physics/docs/pdftxt/GFS_NOAHMP.txt +++ b/physics/docs/pdftxt/NOAHMP_LSM.txt @@ -1,5 +1,5 @@ /** -\page NoahMP GFS NoahMP Land Surface Model +\page NoahMP NoahMP Land Surface Model \section des_noahmp Description This implementation of the NoahMP Land Surface Model (LSM) is adapted from the version implemented in WRF v3.7 with additions by NOAA EMC staff to work with the UFS Atmosphere model. Authoritative documentation of the NoahMP scheme can be accessed at the following links: diff --git a/physics/docs/pdftxt/GFS_NOAH.txt b/physics/docs/pdftxt/NOAH_LSM.txt similarity index 98% rename from physics/docs/pdftxt/GFS_NOAH.txt rename to physics/docs/pdftxt/NOAH_LSM.txt index 74dc42127..7a9be7d5a 100644 --- a/physics/docs/pdftxt/GFS_NOAH.txt +++ b/physics/docs/pdftxt/NOAH_LSM.txt @@ -1,5 +1,5 @@ /** -\page GFS_NOAH GFS Noah Land Surface Model +\page GFS_NOAH Noah Land Surface Model \section des_noah Description Land-atmosphere interactions are a main driver of Earth's surface water and energy budgets. The importance of the land surface is diff --git a/physics/docs/pdftxt/GFS_UGWPv0.txt b/physics/docs/pdftxt/UGWPv0.txt similarity index 99% rename from physics/docs/pdftxt/GFS_UGWPv0.txt rename to physics/docs/pdftxt/UGWPv0.txt index e3e3d4295..7e84e9c85 100644 --- a/physics/docs/pdftxt/GFS_UGWPv0.txt +++ b/physics/docs/pdftxt/UGWPv0.txt @@ -1,5 +1,5 @@ /** -\page GFS_UGWP_v0 GFS Unified Gravity Wave Physics (GWP) Scheme - Version 0 +\page GFS_UGWP_v0 Unified Gravity Wave Physics (GWP) Scheme - Version 0 \section des_UGWP Description Gravity waves (GWs) are generated by a variety of sources in the atmosphere diff --git a/physics/docs/pdftxt/ccppv7_phy_updates.txt b/physics/docs/pdftxt/ccppv7_phy_updates.txt index eecf94ed8..84745f1fd 100644 --- a/physics/docs/pdftxt/ccppv7_phy_updates.txt +++ b/physics/docs/pdftxt/ccppv7_phy_updates.txt @@ -7,7 +7,7 @@ This page provides an overview of the major updates in CCPP Physics v7.0.0. - New supported suites: GFS_v17_p8_ugwpv1, GFS_v16_RRTMGP, and HRRR_gf suites - New \ref CLM_LAKE_page in HRRR_gf suite - New \ref GFS_ugwpv1_gsldrag in GFS_v17_p8_ugwpv1 suite combines the \ref GFS_drag_suite with the version 1 UGWP non-stationary gravity wave drag (NGW) scheme of Yudin et al. (2020)\cite yudin_et_al_2020 -- New \ref GFS_RRTMGP_page in GFS_v16_RRTMGP suite +- New \ref GFS_RRTMGP_page (Pincus et al. 2019 \cite pincus_et_al_2019) in GFS_v16_RRTMGP suite - New RRFS smoke/dust scheme in HRRR_gf suite GFS_v17_p8, HRRR, RRFS_v1beta, RAP suites in CCPP v6.0.0 are no longer supported.