From f020a3a2ab44048bb9725639d1924a50c97a089c Mon Sep 17 00:00:00 2001 From: Greg Thompson Date: Thu, 27 Apr 2023 07:37:58 -0600 Subject: [PATCH 01/44] bug fix for rain evaporation due to inconsistent usage of air density on multiple lines --- physics/module_mp_thompson.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index b828c9ab0..3844498d1 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -3716,13 +3716,13 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & lamr = 1./ilamr(k) !> - Rapidly eliminate near zero values when low humidity (<95%) if (qv(k)/qvs(k) .lt. 0.95 .AND. rr(k)*orho.le.1.E-8) then - prv_rev(k) = rr(k)*orho*odts + prv_rev(k) = rr(k)*odts else prv_rev(k) = t1_evap*diffu(k)*(-ssatw(k))*N0_r(k)*rvs & * (t1_qr_ev*ilamr(k)**cre(10) & + t2_qr_ev*vsc2(k)*rhof2(k)*((lamr+0.5*fv_r)**(-cre(11)))) - rate_max = MIN((rr(k)*orho*odts), (qvs(k)-qv(k))*odts) - prv_rev(k) = MIN(DBLE(rate_max), prv_rev(k)*orho) + rate_max = MIN((rr(k)*odts), (qvs(k)-qv(k))*rho(k)*odts) + prv_rev(k) = MIN(DBLE(rate_max*orho), prv_rev(k)*orho) !..TEST: G. Thompson 10 May 2013 !> - Reduce the rain evaporation in same places as melting graupel occurs. From c7f6d31bec5957c11e49662ebe8a36cf39c63de4 Mon Sep 17 00:00:00 2001 From: Greg Thompson Date: Thu, 4 May 2023 10:23:44 -0600 Subject: [PATCH 02/44] three small fixes: max ice size bin made smaller (since snow min size was increased prev); make fewer explicit rain drop breakup from collisions with graupel when T above 0C; fix so snow/graupel only sublimate when not melting --- physics/module_mp_thompson.F90 | 44 ++++++++++++++++------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index b828c9ab0..38ee79dfa 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -708,9 +708,9 @@ SUBROUTINE thompson_init(is_aerosol_aware_in, & dtc(n) = (Dc(n) - Dc(n-1)) enddo -!> - Create bins of cloud ice (from min diameter up to 5x min snow size) +!> - Create bins of cloud ice (from min diameter up to 2x min snow size) xDx(1) = D0i*1.0d0 - xDx(nbi+1) = 5.0d0*D0s + xDx(nbi+1) = 2.0d0*D0s do n = 2, nbi xDx(n) = DEXP(DFLOAT(n-1)/DFLOAT(nbi) & *DLOG(xDx(nbi+1)/xDx(1)) +DLOG(xDx(1))) @@ -2822,7 +2822,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & prr_rcg(k) = MIN(DBLE(rg(k)*odts), prr_rcg(k)) prg_rcg(k) = -prr_rcg(k) !> - Put in explicit drop break-up due to collisions. - pnr_rcg(k) = -5.*tnr_gacr(idx_g1,idx_g,idx_r1,idx_r) ! RAIN2M + pnr_rcg(k) = -1.5*tnr_gacr(idx_g1,idx_g,idx_r1,idx_r) ! RAIN2M endif endif endif @@ -3053,16 +3053,14 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & if (prr_sml(k) .gt. 0.) then prr_sml(k) = prr_sml(k) + 4218.*olfus*tempc & * (prr_rcs(k)+prs_scw(k)) - endif - prr_sml(k) = MIN(DBLE(rs(k)*odts), MAX(0.D0, prr_sml(k))) - pnr_sml(k) = smo0(k)/rs(k)*prr_sml(k) * 10.0**(-0.25*tempc) ! RAIN2M - pnr_sml(k) = MIN(DBLE(smo0(k)*odts), pnr_sml(k)) - - if (ssati(k).lt. 0.) then - prs_sde(k) = C_cube*t1_subl*diffu(k)*ssati(k)*rvs & - * (t1_qs_sd*smo1(k) & - + t2_qs_sd*rhof2(k)*vsc2(k)*smof(k)) - prs_sde(k) = MAX(DBLE(-rs(k)*odts), prs_sde(k)) + prr_sml(k) = MIN(DBLE(rs(k)*odts), prr_sml(k)) + pnr_sml(k) = smo0(k)/rs(k)*prr_sml(k) * 10.0**(-0.25*tempc) ! RAIN2M + pnr_sml(k) = MIN(DBLE(smo0(k)*odts), pnr_sml(k)) + elseif (ssati(k).lt. 0.) then + prs_sde(k) = C_cube*t1_subl*diffu(k)*ssati(k)*rvs & + * (t1_qs_sd*smo1(k) & + + t2_qs_sd*rhof2(k)*vsc2(k)*smof(k)) + prs_sde(k) = MAX(DBLE(-rs(k)*odts), prs_sde(k)) endif endif @@ -3070,17 +3068,15 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & prr_gml(k) = (tempc*tcond(k)-lvap0*diffu(k)*delQvs(k)) & * N0_g(k)*(t1_qg_me*ilamg(k)**cge(10) & + t2_qg_me*rhof2(k)*vsc2(k)*ilamg(k)**cge(11)) -!-GT prr_gml(k) = prr_gml(k) + 4218.*olfus*tempc & -!-GT * (prr_rcg(k)+prg_gcw(k)) - prr_gml(k) = MIN(DBLE(rg(k)*odts), MAX(0.D0, prr_gml(k))) - pnr_gml(k) = N0_g(k)*cgg(2)*ilamg(k)**cge(2) / rg(k) & ! RAIN2M - * prr_gml(k) * 10.0**(-0.5*tempc) - - if (ssati(k).lt. 0.) then - prg_gde(k) = C_cube*t1_subl*diffu(k)*ssati(k)*rvs & - * N0_g(k) * (t1_qg_sd*ilamg(k)**cge(10) & - + t2_qg_sd*vsc2(k)*rhof2(k)*ilamg(k)**cge(11)) - prg_gde(k) = MAX(DBLE(-rg(k)*odts), prg_gde(k)) + if (prr_gml(k) .gt. 0.) then + prr_gml(k) = MIN(DBLE(rg(k)*odts), prr_gml(k)) + pnr_gml(k) = N0_g(k)*cgg(2)*ilamg(k)**cge(2) / rg(k) & ! RAIN2M + * prr_gml(k) * 10.0**(-0.5*tempc) + elseif (ssati(k).lt. 0.) then + prg_gde(k) = C_cube*t1_subl*diffu(k)*ssati(k)*rvs & + * N0_g(k) * (t1_qg_sd*ilamg(k)**cge(10) & + + t2_qg_sd*vsc2(k)*rhof2(k)*ilamg(k)**cge(11)) + prg_gde(k) = MAX(DBLE(-rg(k)*odts), prg_gde(k)) endif endif From 3682e476db2e1899f58f1ae4ace8996438ba6a3f Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Wed, 14 Jun 2023 13:23:10 -0600 Subject: [PATCH 03/44] Rollback changes to rain evaporation --- physics/module_mp_thompson.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index 9ef110b63..38ee79dfa 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -3712,13 +3712,13 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & lamr = 1./ilamr(k) !> - Rapidly eliminate near zero values when low humidity (<95%) if (qv(k)/qvs(k) .lt. 0.95 .AND. rr(k)*orho.le.1.E-8) then - prv_rev(k) = rr(k)*odts + prv_rev(k) = rr(k)*orho*odts else prv_rev(k) = t1_evap*diffu(k)*(-ssatw(k))*N0_r(k)*rvs & * (t1_qr_ev*ilamr(k)**cre(10) & + t2_qr_ev*vsc2(k)*rhof2(k)*((lamr+0.5*fv_r)**(-cre(11)))) - rate_max = MIN((rr(k)*odts), (qvs(k)-qv(k))*rho(k)*odts) - prv_rev(k) = MIN(DBLE(rate_max*orho), prv_rev(k)*orho) + rate_max = MIN((rr(k)*orho*odts), (qvs(k)-qv(k))*odts) + prv_rev(k) = MIN(DBLE(rate_max), prv_rev(k)*orho) !..TEST: G. Thompson 10 May 2013 !> - Reduce the rain evaporation in same places as melting graupel occurs. From 0c01b39356ede6fb4c653a4d76fc7c6fa50c18b3 Mon Sep 17 00:00:00 2001 From: Greg Thompson Date: Wed, 5 Jul 2023 13:24:02 -0600 Subject: [PATCH 04/44] bug fix the snow and graupel melting terms set to zero when sublimation happens instead of melting --- physics/module_mp_thompson.F90 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index 59f2f8a65..41cdb7e94 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -3057,6 +3057,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & pnr_sml(k) = smo0(k)/rs(k)*prr_sml(k) * 10.0**(-0.25*tempc) ! RAIN2M pnr_sml(k) = MIN(DBLE(smo0(k)*odts), pnr_sml(k)) elseif (ssati(k).lt. 0.) then + prr_sml(k) = 0.0 prs_sde(k) = C_cube*t1_subl*diffu(k)*ssati(k)*rvs & * (t1_qs_sd*smo1(k) & + t2_qs_sd*rhof2(k)*vsc2(k)*smof(k)) @@ -3073,6 +3074,7 @@ subroutine mp_thompson (qv1d, qc1d, qi1d, qr1d, qs1d, qg1d, ni1d, & pnr_gml(k) = N0_g(k)*cgg(2)*ilamg(k)**cge(2) / rg(k) & ! RAIN2M * prr_gml(k) * 10.0**(-0.5*tempc) elseif (ssati(k).lt. 0.) then + prr_gml(k) = 0.0 prg_gde(k) = C_cube*t1_subl*diffu(k)*ssati(k)*rvs & * N0_g(k) * (t1_qg_sd*ilamg(k)**cge(10) & + t2_qg_sd*vsc2(k)*rhof2(k)*ilamg(k)**cge(11)) From 2b6a7a4e9bce9f33c122f8df14521a2d985e3985 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 8 Jun 2023 09:21:49 -0600 Subject: [PATCH 05/44] Initiate SRW v3.0.0 SciDoc --- physics/clm_lake.f90 | 1128 ++++++++--------- physics/docs/ccppsrw3_doxyfile | 557 ++++++++ physics/docs/library.bib | 160 ++- physics/docs/pdftxt/CLM_LAKE.txt | 59 + physics/docs/pdftxt/CU_GF_deep.txt | 32 +- physics/docs/pdftxt/GFS_NOAHMP.txt | 18 +- physics/docs/pdftxt/GFS_UGWPv0.txt | 46 + physics/docs/pdftxt/GFS_v16_suite.txt | 4 +- physics/docs/pdftxt/HRRR_suite.txt | 2 +- physics/docs/pdftxt/NoahMP.txt | 41 - physics/docs/pdftxt/RAP_suite.txt | 2 +- .../docs/pdftxt/RE300/FV3_GFS_v16_input.nml | 335 +++++ physics/docs/pdftxt/RE300/FV3_HRRR_input.nml | 293 +++++ physics/docs/pdftxt/RE300/FV3_RAP_input.nml | 300 +++++ .../pdftxt/RE300/FV3_RRFS_v1beta_input.nml | 285 +++++ .../docs/pdftxt/RE300/FV3_WoFS_v0_input.nml | 291 +++++ .../namelists/input.nml.develop.FV3_GFS_v16 | 330 +++++ .../namelists/input.nml.develop.FV3_HRRR | 293 +++++ .../RE300/namelists/input.nml.develop.FV3_RAP | 300 +++++ .../input.nml.develop.FV3_RRFS_v1beta | 285 +++++ .../namelists/input.nml.develop.FV3_WoFS_v0 | 291 +++++ .../RE300/namelists/input.nml.v21.FV3_GFS_v16 | 336 +++++ .../RE300/namelists/input.nml.v21.FV3_HRRR | 299 +++++ .../namelists/input.nml.v21.FV3_RRFS_v1beta | 291 +++++ .../RE300/namelists/input.nml.v21.FV3_WoFS_v0 | 297 +++++ .../docs/pdftxt/RE300/suite_FV3_GFS_v16.xml | 94 ++ physics/docs/pdftxt/RE300/suite_FV3_HRRR.xml | 82 ++ physics/docs/pdftxt/RE300/suite_FV3_RAP.xml | 90 ++ .../pdftxt/RE300/suite_FV3_RRFS_v1beta.xml | 84 ++ .../docs/pdftxt/RE300/suite_FV3_WoFS_v0.xml | 80 ++ physics/docs/pdftxt/RUCLSM.txt | 93 +- physics/docs/pdftxt/SRW_all_shemes_list.txt | 3 + physics/docs/pdftxt/SRW_mainpage.txt | 5 +- physics/docs/pdftxt/THOMPSON.txt | 9 + 34 files changed, 6132 insertions(+), 683 deletions(-) create mode 100644 physics/docs/ccppsrw3_doxyfile create mode 100644 physics/docs/pdftxt/CLM_LAKE.txt delete mode 100644 physics/docs/pdftxt/NoahMP.txt create mode 100644 physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml create mode 100644 physics/docs/pdftxt/RE300/FV3_HRRR_input.nml create mode 100644 physics/docs/pdftxt/RE300/FV3_RAP_input.nml create mode 100644 physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml create mode 100644 physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml create mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_GFS_v16 create mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_HRRR create mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RAP create mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RRFS_v1beta create mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_WoFS_v0 create mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_GFS_v16 create mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_HRRR create mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_RRFS_v1beta create mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_WoFS_v0 create mode 100644 physics/docs/pdftxt/RE300/suite_FV3_GFS_v16.xml create mode 100644 physics/docs/pdftxt/RE300/suite_FV3_HRRR.xml create mode 100644 physics/docs/pdftxt/RE300/suite_FV3_RAP.xml create mode 100644 physics/docs/pdftxt/RE300/suite_FV3_RRFS_v1beta.xml create mode 100644 physics/docs/pdftxt/RE300/suite_FV3_WoFS_v0.xml diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index 4fc4112ce..1728d28b5 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -1,4 +1,4 @@ -!> \file clm_lake.F90 +!> \file clm_lake.f90 !! Contains code related to the CLM lake model !! !! This lake scheme was taken from module_sf_lake in WRF 4.3.1, and @@ -7,7 +7,7 @@ !! The original documentation said: !! !! The lake scheme was retrieved from the Community Land Model version 4.5 -!! (Oleson et al. 2013) with some modifications by Gu et al. (2013). It is a +!! (Oleson et al. (2013) \cite Oleson2013) with some modifications by Gu et al. (2015) \cite Gu2015. It is a !! one-dimensional mass and energy balance scheme with 20-25 model layers, !! including up to 5 snow layers on the lake ice, 10 water layers, and 10 soil !! layers on the lake bottom. The lake scheme is used with actual lake points and @@ -15,15 +15,8 @@ !! lake points and lake depth in WRF (lake_min_elev and lakedepth_default). !! The lake scheme is independent of a land surface scheme and therefore !! can be used with any land surface scheme embedded in WRF. The lake scheme -!! developments and evaluations were included in Subin et al. (2012) and Gu et al. (2013) -!! -!! Subin et al. 2012: Improved lake model for climate simulations, J. Adv. Model. -!! -!! Earth Syst., 4, M02001. DOI:10.1029/2011MS000072; -!! -!! Gu et al. 2013: Calibration and validation of lake surface temperature simulations -!! -!! with the coupled WRF-Lake model. Climatic Change, 1-13, 10.1007/s10584-013-0978-y. +!! developments and evaluations were included in Subin et al. (2012) \cite Subin_2012 +!! and Gu et al. (2015) \cite Gu2015 . MODULE clm_lake @@ -46,26 +39,26 @@ MODULE clm_lake logical, parameter :: PERGRO = .false. logical, parameter :: USE_ETALAKE = .false. - real(kind_lake), parameter :: ETALAKE = 1.1925*50**(-0.424) ! Set this to your desired value if USE_ETALAKE=.true. + real(kind_lake), parameter :: ETALAKE = 1.1925*50**(-0.424) !< Set this to your desired value if USE_ETALAKE=.true. ! Level counts must be consistent with model (GFS_typedefs.F90) - integer, parameter :: nlevsoil = 10 ! number of soil layers - integer, parameter :: nlevlake = 10 ! number of lake layers - integer, parameter :: nlevsnow = 5 ! maximum number of snow layers - real(kind_lake), parameter :: scalez = 0.025_kind_lake ! Soil layer thickness discretization (m) + integer, parameter :: nlevsoil = 10 !< number of soil layers + integer, parameter :: nlevlake = 10 !< number of lake layers + integer, parameter :: nlevsnow = 5 !< maximum number of snow layers + real(kind_lake), parameter :: scalez = 0.025_kind_lake !< Soil layer thickness discretization (m) - integer,parameter :: lbp = 1 ! pft-index bounds + integer,parameter :: lbp = 1 !< pft-index bounds integer,parameter :: ubp = 1 - integer,parameter :: lbc = 1 ! column-index bounds + integer,parameter :: lbc = 1 !< column-index bounds integer,parameter :: ubc = 1 - integer,parameter :: num_shlakec = 1 ! number of columns in lake filter - integer,parameter :: filter_shlakec(1) = 1 ! lake filter (columns) - integer,parameter :: num_shlakep = 1 ! number of pfts in lake filter - integer,parameter :: filter_shlakep(1) = 1 ! lake filter (pfts) + integer,parameter :: num_shlakec = 1 !< number of columns in lake filter + integer,parameter :: filter_shlakec(1) = 1 !< lake filter (columns) + integer,parameter :: num_shlakep = 1 !< number of pfts in lake filter + integer,parameter :: filter_shlakep(1) = 1 !< lake filter (pfts) integer,parameter :: pcolumn(1) = 1 integer,parameter :: pgridcell(1) = 1 - integer,parameter :: cgridcell(1) = 1 ! gridcell index of column - integer,parameter :: clandunit(1) = 1 ! landunit index of column + integer,parameter :: cgridcell(1) = 1 !< gridcell index of column + integer,parameter :: clandunit(1) = 1 !< landunit index of column integer,parameter :: begg = 1 integer,parameter :: endg = 1 @@ -80,44 +73,44 @@ MODULE clm_lake logical,parameter :: lakpoi(1) = .true. !Initialize physical constants not available from model: - real(kind_lake), parameter :: tcrit = 2.5 !critical temperature to determine rain or snow - real(kind_lake), parameter :: tkwat = 0.6 !thermal conductivity of water [W/m/k] - real(kind_lake), parameter :: tkice = 2.290 !thermal conductivity of ice [W/m/k] - real(kind_lake), parameter :: tkairc = 0.023 !thermal conductivity of air [W/m/k] - real(kind_lake), parameter :: snow_bd = 250 !constant snow bulk density (only used in special case here) [kg/m^3] + real(kind_lake), parameter :: tcrit = 2.5 !< critical temperature to determine rain or snow + real(kind_lake), parameter :: tkwat = 0.6 !< thermal conductivity of water [W/m/k] + real(kind_lake), parameter :: tkice = 2.290 !< thermal conductivity of ice [W/m/k] + real(kind_lake), parameter :: tkairc = 0.023 !< thermal conductivity of air [W/m/k] + real(kind_lake), parameter :: snow_bd = 250 !< constant snow bulk density (only used in special case here) [kg/m^3] ! Constants that are copied from model values by clm_lake_init: - real(kind_lake) :: pi !ratio of the circumference of a circle to its diameter - real(kind_lake) :: vkc !von Karman constant [-] - real(kind_lake) :: grav !gravity constant [m/s2] - real(kind_lake) :: sb !stefan-boltzmann constant [W/m2/K4] - real(kind_lake) :: tfrz !freezing temperature [K] - real(kind_lake) :: denh2o !density of liquid water [kg/m3] - real(kind_lake) :: denice !density of ice [kg/m3] - real(kind_lake) :: cpice !Specific heat of ice [J/kg-K] - real(kind_lake) :: cpliq !Specific heat of water [J/kg-K] - real(kind_lake) :: hfus !Latent heat of fusion for ice [J/kg] - real(kind_lake) :: hvap !Latent heat of evap for water [J/kg] - real(kind_lake) :: hsub !Latent heat of sublimation [J/kg] - real(kind_lake) :: invhvap !1/hvap [kg/J] - real(kind_lake) :: invhsub !1/hsub [kg/J] - real(kind_lake) :: rair !gas constant for dry air [J/kg/K] - real(kind_lake) :: cpair !specific heat of dry air [J/kg/K] - real(kind_lake) :: con_eps !ratio of gas constants of air and water vapor [unitless] - real(kind_lake) :: one_minus_con_eps !1 - con_eps [unitless] - real(kind_lake) :: con_fvirt !1/con_eps - 1 [unitless] + real(kind_lake) :: pi !< ratio of the circumference of a circle to its diameter + real(kind_lake) :: vkc !< von Karman constant [-] + real(kind_lake) :: grav !< gravity constant [m/s2] + real(kind_lake) :: sb !< stefan-boltzmann constant [W/m2/K4] + real(kind_lake) :: tfrz !< freezing temperature [K] + real(kind_lake) :: denh2o !< density of liquid water [kg/m3] + real(kind_lake) :: denice !< density of ice [kg/m3] + real(kind_lake) :: cpice !< Specific heat of ice [J/kg-K] + real(kind_lake) :: cpliq !< Specific heat of water [J/kg-K] + real(kind_lake) :: hfus !< Latent heat of fusion for ice [J/kg] + real(kind_lake) :: hvap !< Latent heat of evap for water [J/kg] + real(kind_lake) :: hsub !< Latent heat of sublimation [J/kg] + real(kind_lake) :: invhvap !< 1/hvap [kg/J] + real(kind_lake) :: invhsub !< 1/hsub [kg/J] + real(kind_lake) :: rair !< gas constant for dry air [J/kg/K] + real(kind_lake) :: cpair !< specific heat of dry air [J/kg/K] + real(kind_lake) :: con_eps !< ratio of gas constants of air and water vapor [unitless] + real(kind_lake) :: one_minus_con_eps !< 1 - con_eps [unitless] + real(kind_lake) :: con_fvirt !< 1/con_eps - 1 [unitless] - real(kind_lake), public, parameter :: spval = 1.e36 !special value for missing data (ocean) - real(kind_lake), parameter :: depth_c = 50. !below the level t_lake3d will be 277.0 !mchen - real(kind_lake), parameter :: zero_h2o = 1e-12 !lower mixing ratio is is treated as zero + real(kind_lake), public, parameter :: spval = 1.e36 !< special value for missing data (ocean) + real(kind_lake), parameter :: depth_c = 50. !< below the level t_lake3d will be 277.0 !mchen + real(kind_lake), parameter :: zero_h2o = 1e-12 !< lower mixing ratio is is treated as zero ! These are tunable constants - real(kind_lake), parameter :: wimp = 0.05 !Water impermeable if porosity less than wimp - real(kind_lake), parameter :: ssi = 0.033 !Irreducible water saturation of snow - real(kind_lake), parameter :: cnfac = 0.5 !Crank Nicholson factor between 0 and 1 + real(kind_lake), parameter :: wimp = 0.05 !< Water impermeable if porosity less than wimp + real(kind_lake), parameter :: ssi = 0.033 !< Irreducible water saturation of snow + real(kind_lake), parameter :: cnfac = 0.5 !< Crank Nicholson factor between 0 and 1 ! Initialize water type constants - integer,parameter :: istsoil = 1 !soil "water" type + integer,parameter :: istsoil = 1 !tgs - 7nov19 - salinity effect on freezing point (Tanya, Stan, Trevor). + !! The Great Salt Lake (GSL), Utah lat/long (39.5-42.0,-111.5- -117.7). + !! The GSL's salinity is 270 ppt above ~41.22 N with freezing point of -24 C, + !! and 150 ppt south of ~41.22 N with freezing point -10 C (info from Trevor Alcott). + !! The fresh-water Willard Bay should be excluded from the box around the Great Salt + !! Lake: lat/long 41.3539, -112.102, HRRR i,j = 494,667 (info from Stan and Trevor). + !! + !! 1jun2020: reset the GSL freezing point to be -5 C, + !! and add a check (after call to LakeMain) to keep the lake ice free for the whole year. if ((xlon_d.gt.-117.7 .and. xlon_d.lt.-111.5) .and. & ! excludes Willard Bay .not. (xlon_d.gt.-112.104 .and. xlon_d.lt.-112.100))then @@ -800,69 +793,69 @@ SUBROUTINE LakeMain(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, & !I integer, intent(inout) :: errflg character(*), intent(inout) :: errmsg - real(kind_lake),intent(in) :: dtime ! timestep - real(kind_lake),intent(in) :: xlat_d, xlon_d ! grid location for debugging - real(kind_lake),intent(in) :: forc_t(1) ! atmospheric temperature (Kelvin) - real(kind_lake),intent(in) :: forc_pbot(1) ! atm bottom level pressure (Pa) - real(kind_lake),intent(in) :: forc_psrf(1) ! atmospheric surface pressure (Pa) - real(kind_lake),intent(in) :: forc_hgt(1) ! atmospheric reference height (m) - real(kind_lake),intent(in) :: forc_hgt_q(1) ! observational height of humidity [m] - real(kind_lake),intent(in) :: forc_hgt_t(1) ! observational height of temperature [m] - real(kind_lake),intent(in) :: forc_hgt_u(1) ! observational height of wind [m] - real(kind_lake),intent(in) :: forc_q(1) ! atmospheric specific humidity (kg/kg) - real(kind_lake),intent(in) :: forc_u(1) ! atmospheric wind speed in east direction (m/s) - real(kind_lake),intent(in) :: forc_v(1) ! atmospheric wind speed in north direction (m/s) + real(kind_lake),intent(in) :: dtime !< timestep + real(kind_lake),intent(in) :: xlat_d, xlon_d !< grid location for debugging + real(kind_lake),intent(in) :: forc_t(1) !< atmospheric temperature (Kelvin) + real(kind_lake),intent(in) :: forc_pbot(1) !< atm bottom level pressure (Pa) + real(kind_lake),intent(in) :: forc_psrf(1) !< atmospheric surface pressure (Pa) + real(kind_lake),intent(in) :: forc_hgt(1) !< atmospheric reference height (m) + real(kind_lake),intent(in) :: forc_hgt_q(1) !< observational height of humidity [m] + real(kind_lake),intent(in) :: forc_hgt_t(1) !< observational height of temperature [m] + real(kind_lake),intent(in) :: forc_hgt_u(1) !< observational height of wind [m] + real(kind_lake),intent(in) :: forc_q(1) !< atmospheric specific humidity (kg/kg) + real(kind_lake),intent(in) :: forc_u(1) !< atmospheric wind speed in east direction (m/s) + real(kind_lake),intent(in) :: forc_v(1) !< atmospheric wind speed in north direction (m/s) ! real(kind_lake),intent(in) :: forc_rho(1) ! density (kg/m**3) - real(kind_lake),intent(in) :: forc_lwrad(1) ! downward infrared (longwave) radiation (W/m**2) - real(kind_lake),intent(in) :: prec(1) ! snow or rain rate [mm/s] - real(kind_lake),intent(in) :: sabg(1) ! solar radiation absorbed by ground (W/m**2) - real(kind_lake),intent(in) :: lat(1) ! latitude (radians) - real(kind_lake),intent(in) :: z_lake(1,nlevlake) ! layer depth for lake (m) - real(kind_lake),intent(in) :: dz_lake(1,nlevlake) ! layer thickness for lake (m) - real(kind_lake),intent(out) :: ustar_out(1) ! friction velocity [m/s] - real(kind_lake), intent(in) :: lakedepth(1) ! column lake depth (m) + real(kind_lake),intent(in) :: forc_lwrad(1) !< downward infrared (longwave) radiation (W/m**2) + real(kind_lake),intent(in) :: prec(1) !< snow or rain rate [mm/s] + real(kind_lake),intent(in) :: sabg(1) !< solar radiation absorbed by ground (W/m**2) + real(kind_lake),intent(in) :: lat(1) !< latitude (radians) + real(kind_lake),intent(in) :: z_lake(1,nlevlake) !< layer depth for lake (m) + real(kind_lake),intent(in) :: dz_lake(1,nlevlake) !< layer thickness for lake (m) + real(kind_lake),intent(out) :: ustar_out(1) !< friction velocity [m/s] + real(kind_lake), intent(in) :: lakedepth(1) !< column lake depth (m) !!!!!!!!!!!!!!!!tep(in),hydro(in) ! real(kind_lake), intent(in) :: watsat(1,1:nlevsoil) ! volumetric soil water at saturation (porosity) !!!!!!!!!!!!!!!!hydro - logical , intent(in) :: do_capsnow(1) ! true => do snow capping - real(kind_lake), intent(in) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity) - real(kind_lake), intent(in) :: tksatu(1,nlevsoil) ! thermal conductivity, saturated soil [W/m-K] - real(kind_lake), intent(in) :: tkmg(1,nlevsoil) ! thermal conductivity, soil minerals [W/m-K] - real(kind_lake), intent(in) :: tkdry(1,nlevsoil) ! thermal conductivity, dry soil (W/m/Kelvin) - real(kind_lake), intent(in) :: csol(1,nlevsoil) ! heat capacity, soil solids (J/m**3/Kelvin) + logical , intent(in) :: do_capsnow(1) !< true => do snow capping + real(kind_lake), intent(in) :: watsat(1,nlevsoil) !< volumetric soil water at saturation (porosity) + real(kind_lake), intent(in) :: tksatu(1,nlevsoil) !< thermal conductivity, saturated soil [W/m-K] + real(kind_lake), intent(in) :: tkmg(1,nlevsoil) !< thermal conductivity, soil minerals [W/m-K] + real(kind_lake), intent(in) :: tkdry(1,nlevsoil) !< thermal conductivity, dry soil (W/m/Kelvin) + real(kind_lake), intent(in) :: csol(1,nlevsoil) !< heat capacity, soil solids (J/m**3/Kelvin) !in&out - real(kind_lake),intent(inout) :: h2osoi_vol(1,-nlevsnow+1:nlevsoil) ! volumetric soil water (0<=h2osoi_vol<=watsat)[m3/m3] - real(kind_lake),intent(inout) :: t_grnd(1) ! ground temperature (Kelvin) - real(kind_lake),intent(inout) :: h2osno(1) ! snow water (mm H2O) - real(kind_lake),intent(inout) :: snowdp(1) ! snow height (m) - real(kind_lake),intent(inout) :: z(1,-nlevsnow+1:nlevsoil) ! layer depth for snow & soil (m) - real(kind_lake),intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) ! layer thickness for soil or snow (m) - real(kind_lake),intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! soil (or snow) temperature (Kelvin) - real(kind_lake),intent(inout) :: t_lake(1,nlevlake) ! lake temperature (Kelvin) - integer ,intent(inout) :: snl(1) ! number of snow layers - real(kind_lake),intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2) - real(kind_lake),intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2) - real(kind_lake),intent(inout) :: savedtke1(1) ! top level eddy conductivity from previous timestep (W/m.K) - real(kind_lake),intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) ! interface level below a "z" level (m) - real(kind_lake),intent(inout) :: lake_icefrac(1,nlevlake) ! mass fraction of lake layer that is frozen + real(kind_lake),intent(inout) :: h2osoi_vol(1,-nlevsnow+1:nlevsoil) !< volumetric soil water (0<=h2osoi_vol<=watsat)[m3/m3] + real(kind_lake),intent(inout) :: t_grnd(1) !< ground temperature (Kelvin) + real(kind_lake),intent(inout) :: h2osno(1) !< snow water (mm H2O) + real(kind_lake),intent(inout) :: snowdp(1) !< snow height (m) + real(kind_lake),intent(inout) :: z(1,-nlevsnow+1:nlevsoil) !< layer depth for snow & soil (m) + real(kind_lake),intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness for soil or snow (m) + real(kind_lake),intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil (or snow) temperature (Kelvin) + real(kind_lake),intent(inout) :: t_lake(1,nlevlake) !< lake temperature (Kelvin) + integer ,intent(inout) :: snl(1) !< number of snow layers + real(kind_lake),intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) + real(kind_lake),intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) + real(kind_lake),intent(inout) :: savedtke1(1) !< top level eddy conductivity from previous timestep (W/m.K) + real(kind_lake),intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m) + real(kind_lake),intent(inout) :: lake_icefrac(1,nlevlake) !< mass fraction of lake layer that is frozen !out: - real(kind_lake),intent(out) :: eflx_gnet(1) !net heat flux into ground (W/m**2) - real(kind_lake),intent(out) :: eflx_lwrad_net(1) ! net infrared (longwave) rad (W/m**2) [+ = to atm] - real(kind_lake),intent(out) :: eflx_sh_tot(1) ! total sensible heat flux (W/m**2) [+ to atm] - real(kind_lake),intent(out) :: eflx_lh_tot(1) ! total latent heat flux (W/m8*2) [+ to atm] - real(kind_lake),intent(out) :: t_ref2m(1) ! 2 m height surface air temperature (Kelvin) - real(kind_lake),intent(out) :: q_ref2m(1) ! 2 m height surface specific humidity (kg/kg) - real(kind_lake),intent(out) :: taux(1) ! wind (shear) stress: e-w (kg/m/s**2) - real(kind_lake),intent(out) :: tauy(1) ! wind (shear) stress: n-s (kg/m/s**2) - real(kind_lake),intent(out) :: ram1(1) ! aerodynamical resistance (s/m) - ! for calculation of decay of eddy diffusivity with depth - ! Change the type variable to pass back to WRF. - real(kind_lake),intent(out) :: z0mg(1) ! roughness length over ground, momentum (m( + real(kind_lake),intent(out) :: eflx_gnet(1) !< net heat flux into ground (W/m**2) + real(kind_lake),intent(out) :: eflx_lwrad_net(1) !< net infrared (longwave) rad (W/m**2) [+ = to atm] + real(kind_lake),intent(out) :: eflx_sh_tot(1) !< total sensible heat flux (W/m**2) [+ to atm] + real(kind_lake),intent(out) :: eflx_lh_tot(1) !< total latent heat flux (W/m8*2) [+ to atm] + real(kind_lake),intent(out) :: t_ref2m(1) !< 2 m height surface air temperature (Kelvin) + real(kind_lake),intent(out) :: q_ref2m(1) !< 2 m height surface specific humidity (kg/kg) + real(kind_lake),intent(out) :: taux(1) !< wind (shear) stress: e-w (kg/m/s**2) + real(kind_lake),intent(out) :: tauy(1) !< wind (shear) stress: n-s (kg/m/s**2) + real(kind_lake),intent(out) :: ram1(1) !< aerodynamical resistance (s/m) + !! for calculation of decay of eddy diffusivity with depth + !! Change the type variable to pass back to WRF. + real(kind_lake),intent(out) :: z0mg(1) !< roughness length over ground, momentum (m( !local output @@ -989,6 +982,13 @@ SUBROUTINE LakeMain(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, & !I END SUBROUTINE LakeMain + ! DESCRIPTION: + !> Calculates lake temperatures and surface fluxes for shallow lakes. + !! + !! Shallow lakes have variable depth, possible snow layers above, freezing & thawing of lake water, + !! and soil layers with active temperature and gas diffusion below. + !! + !! WARNING: This subroutine assumes lake columns have one and only one pft. SUBROUTINE ShalLakeFluxes(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, & !i forc_hgt_t,forc_hgt_u,forc_q, & forc_u,forc_v,forc_lwrad,forc_snow, & @@ -1001,18 +1001,10 @@ SUBROUTINE ShalLakeFluxes(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, eflx_lh_grnd,t_veg,t_ref2m,q_ref2m,taux,tauy, & ram1,ws,ks,eflx_gnet,z0mg,ustar_out,errmsg,errflg,xlat_d,xlon_d) !============================================================================== - ! DESCRIPTION: - ! Calculates lake temperatures and surface fluxes for shallow lakes. - ! - ! Shallow lakes have variable depth, possible snow layers above, freezing & thawing of lake water, - ! and soil layers with active temperature and gas diffusion below. - ! - ! WARNING: This subroutine assumes lake columns have one and only one pft. - ! ! REVISION HISTORY: - ! Created by Zack Subin, 2009 - ! Reedited by Hongping Gu, 2010 - ! Updated for CCPP by Sam Trahan, 2022 + ! - Created by Zack Subin, 2009 + ! - Reedited by Hongping Gu, 2010 + ! - Updated for CCPP by Sam Trahan, 2022 !============================================================================== ! implicit none @@ -1021,62 +1013,62 @@ SUBROUTINE ShalLakeFluxes(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, !in: - integer, intent(inout) :: errflg - character(len=*), intent(inout) :: errmsg - real(kind_lake),intent(in) :: xlat_d,xlon_d - real(kind_lake),intent(in) :: forc_t(1) ! atmospheric temperature (Kelvin) - real(kind_lake),intent(in) :: forc_pbot(1) ! atmospheric pressure (Pa) - real(kind_lake),intent(in) :: forc_psrf(1) ! atmospheric surface pressure (Pa) - real(kind_lake),intent(in) :: forc_hgt(1) ! atmospheric reference height (m) - real(kind_lake),intent(in) :: forc_hgt_q(1) ! observational height of humidity [m] - real(kind_lake),intent(in) :: forc_hgt_t(1) ! observational height of temperature [m] - real(kind_lake),intent(in) :: forc_hgt_u(1) ! observational height of wind [m] - real(kind_lake),intent(in) :: forc_q(1) ! atmospheric specific humidity (kg/kg) - real(kind_lake),intent(in) :: forc_u(1) ! atmospheric wind speed in east direction (m/s) - real(kind_lake),intent(in) :: forc_v(1) ! atmospheric wind speed in north direction (m/s) - real(kind_lake),intent(in) :: forc_lwrad(1) ! downward infrared (longwave) radiation (W/m**2) + integer, intent(inout) :: errflg !< + character(len=*), intent(inout) :: errmsg !< + real(kind_lake),intent(in) :: xlat_d,xlon_d !< + real(kind_lake),intent(in) :: forc_t(1) !< atmospheric temperature (Kelvin) + real(kind_lake),intent(in) :: forc_pbot(1) !< atmospheric pressure (Pa) + real(kind_lake),intent(in) :: forc_psrf(1) !< atmospheric surface pressure (Pa) + real(kind_lake),intent(in) :: forc_hgt(1) !< atmospheric reference height (m) + real(kind_lake),intent(in) :: forc_hgt_q(1) !< observational height of humidity [m] + real(kind_lake),intent(in) :: forc_hgt_t(1) !< observational height of temperature [m] + real(kind_lake),intent(in) :: forc_hgt_u(1) !< observational height of wind [m] + real(kind_lake),intent(in) :: forc_q(1) !< atmospheric specific humidity (kg/kg) + real(kind_lake),intent(in) :: forc_u(1) !< atmospheric wind speed in east direction (m/s) + real(kind_lake),intent(in) :: forc_v(1) !< atmospheric wind speed in north direction (m/s) + real(kind_lake),intent(in) :: forc_lwrad(1) !< downward infrared (longwave) radiation (W/m**2) ! real(kind_lake),intent(in) :: forc_rho(1) ! density (kg/m**3) - real(kind_lake),intent(in) :: forc_snow(1) ! snow rate [mm/s] - real(kind_lake),intent(in) :: forc_rain(1) ! rain rate [mm/s] - real(kind_lake),intent(in) :: h2osno(1) ! snow water (mm H2O) - real(kind_lake),intent(in) :: snowdp(1) ! snow height (m) - real(kind_lake),intent(in) :: sabg(1) ! solar radiation absorbed by ground (W/m**2) - real(kind_lake),intent(in) :: lat(1) ! latitude (radians) - real(kind_lake),intent(in) :: dz(1,-nlevsnow+1:nlevsoil) ! layer thickness for soil or snow (m) - real(kind_lake),intent(in) :: dz_lake(1,nlevlake) ! layer thickness for lake (m) - real(kind_lake),intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! soil (or snow) temperature (Kelvin) - real(kind_lake),intent(in) :: t_lake(1,nlevlake) ! lake temperature (Kelvin) - integer ,intent(in) :: snl(1) ! number of snow layers - real(kind_lake),intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2) - real(kind_lake),intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2) - real(kind_lake),intent(in) :: savedtke1(1) ! top level eddy conductivity from previous timestep (W/m.K) + real(kind_lake),intent(in) :: forc_snow(1) !< snow rate [mm/s] + real(kind_lake),intent(in) :: forc_rain(1) !< rain rate [mm/s] + real(kind_lake),intent(in) :: h2osno(1) !< snow water (mm H2O) + real(kind_lake),intent(in) :: snowdp(1) !< snow height (m) + real(kind_lake),intent(in) :: sabg(1) !< solar radiation absorbed by ground (W/m**2) + real(kind_lake),intent(in) :: lat(1) !< latitude (radians) + real(kind_lake),intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness for soil or snow (m) + real(kind_lake),intent(in) :: dz_lake(1,nlevlake) !< layer thickness for lake (m) + real(kind_lake),intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil (or snow) temperature (Kelvin) + real(kind_lake),intent(in) :: t_lake(1,nlevlake) !< lake temperature (Kelvin) + integer ,intent(in) :: snl(1) !< number of snow layers + real(kind_lake),intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) + real(kind_lake),intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) + real(kind_lake),intent(in) :: savedtke1(1) !< top level eddy conductivity from previous timestep (W/m.K) !inout: - real(kind_lake),intent(inout) :: t_grnd(1) ! ground temperature (Kelvin) + real(kind_lake),intent(inout) :: t_grnd(1) !< ground temperature (Kelvin) !out: - real(kind_lake),intent(out):: ustar_out(1) ! friction velocity [m/s] - real(kind_lake),intent(out):: qflx_prec_grnd(1) ! water onto ground including canopy runoff [kg/(m2 s)] - real(kind_lake),intent(out):: qflx_evap_soi(1) ! soil evaporation (mm H2O/s) (+ = to atm) - real(kind_lake),intent(out):: qflx_evap_tot(1) ! qflx_evap_soi + qflx_evap_veg + qflx_tran_veg - real(kind_lake),intent(out):: eflx_sh_grnd(1) ! sensible heat flux from ground (W/m**2) [+ to atm] - real(kind_lake),intent(out):: eflx_lwrad_out(1) ! emitted infrared (longwave) radiation (W/m**2) - real(kind_lake),intent(out):: eflx_lwrad_net(1) ! net infrared (longwave) rad (W/m**2) [+ = to atm] - real(kind_lake),intent(out):: eflx_soil_grnd(1) ! soil heat flux (W/m**2) [+ = into soil] - real(kind_lake),intent(out):: eflx_sh_tot(1) ! total sensible heat flux (W/m**2) [+ to atm] - real(kind_lake),intent(out):: eflx_lh_tot(1) ! total latent heat flux (W/m8*2) [+ to atm] - real(kind_lake),intent(out):: eflx_lh_grnd(1) ! ground evaporation heat flux (W/m**2) [+ to atm] - real(kind_lake),intent(out):: t_veg(1) ! vegetation temperature (Kelvin) - real(kind_lake),intent(out):: t_ref2m(1) ! 2 m height surface air temperature (Kelvin) - real(kind_lake),intent(out):: q_ref2m(1) ! 2 m height surface specific humidity (kg/kg) - real(kind_lake),intent(out):: taux(1) ! wind (shear) stress: e-w (kg/m/s**2) - real(kind_lake),intent(out):: tauy(1) ! wind (shear) stress: n-s (kg/m/s**2) - real(kind_lake),intent(out):: ram1(1) ! aerodynamical resistance (s/m) - real(kind_lake),intent(out):: ws(1) ! surface friction velocity (m/s) - real(kind_lake),intent(out):: ks(1) ! coefficient passed to ShalLakeTemperature - ! for calculation of decay of eddy diffusivity with depth - real(kind_lake),intent(out):: eflx_gnet(1) !net heat flux into ground (W/m**2) - ! Change the type variable to pass back to WRF. - real(kind_lake),intent(out):: z0mg(1) ! roughness length over ground, momentum (m( + real(kind_lake),intent(out):: ustar_out(1) !< friction velocity [m/s] + real(kind_lake),intent(out):: qflx_prec_grnd(1) !< water onto ground including canopy runoff [kg/(m2 s)] + real(kind_lake),intent(out):: qflx_evap_soi(1) !< soil evaporation (mm H2O/s) (+ = to atm) + real(kind_lake),intent(out):: qflx_evap_tot(1) !< qflx_evap_soi + qflx_evap_veg + qflx_tran_veg + real(kind_lake),intent(out):: eflx_sh_grnd(1) !< sensible heat flux from ground (W/m**2) [+ to atm] + real(kind_lake),intent(out):: eflx_lwrad_out(1) !< emitted infrared (longwave) radiation (W/m**2) + real(kind_lake),intent(out):: eflx_lwrad_net(1) !< net infrared (longwave) rad (W/m**2) [+ = to atm] + real(kind_lake),intent(out):: eflx_soil_grnd(1) !< soil heat flux (W/m**2) [+ = into soil] + real(kind_lake),intent(out):: eflx_sh_tot(1) !< total sensible heat flux (W/m**2) [+ to atm] + real(kind_lake),intent(out):: eflx_lh_tot(1) !< total latent heat flux (W/m8*2) [+ to atm] + real(kind_lake),intent(out):: eflx_lh_grnd(1) !< ground evaporation heat flux (W/m**2) [+ to atm] + real(kind_lake),intent(out):: t_veg(1) !< vegetation temperature (Kelvin) + real(kind_lake),intent(out):: t_ref2m(1) !< 2 m height surface air temperature (Kelvin) + real(kind_lake),intent(out):: q_ref2m(1) !< 2 m height surface specific humidity (kg/kg) + real(kind_lake),intent(out):: taux(1) !< wind (shear) stress: e-w (kg/m/s**2) + real(kind_lake),intent(out):: tauy(1) !< wind (shear) stress: n-s (kg/m/s**2) + real(kind_lake),intent(out):: ram1(1) !< aerodynamical resistance (s/m) + real(kind_lake),intent(out):: ws(1) !< surface friction velocity (m/s) + real(kind_lake),intent(out):: ks(1) !< coefficient passed to ShalLakeTemperature + !! for calculation of decay of eddy diffusivity with depth + real(kind_lake),intent(out):: eflx_gnet(1) !< net heat flux into ground (W/m**2) + !! Change the type variable to pass back to WRF. + real(kind_lake),intent(out):: z0mg(1) !< roughness length over ground, momentum (m( @@ -1566,22 +1558,22 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! watsat, tksatu, tkmg, tkdry, csol, dtime, & frac_iceold,qflx_snomelt,imelt,errmsg,errflg) !======================================================================================================= - ! !DESCRIPTION: - ! Calculates temperatures in the 20-25 layer column of (possible) snow, - ! lake water, and soil beneath lake. - ! Snow and soil temperatures are determined as in SoilTemperature, except - ! for appropriate boundary conditions at the top of the snow (the flux is fixed - ! to be the ground heat flux calculated in ShalLakeFluxes), the bottom of the snow - ! (adjacent to top lake layer), and the top of the soil (adjacent to the bottom - ! lake layer). Also, the soil is assumed to be always fully saturated (ShalLakeHydrology - ! will have to insure this). The whole column is solved simultaneously as one tridiagonal matrix. - ! Lake temperatures are determined from the Hostetler model as before, except now: - ! i) Lake water layers can freeze by any fraction and release latent heat; thermal - ! and mechanical properties are adjusted for ice fraction. - ! ii) Convective mixing (though not eddy diffusion) still occurs for frozen lakes. - ! iii) No sunlight is absorbed in the lake if there are snow layers. - ! iv) Light is allowed to reach the top soil layer (where it is assumed to be completely absorbed). - ! v) Lakes have variable depth, set ultimately in surface data set but now in initShalLakeMod. + ! DESCRIPTION: + !< Calculates temperatures in the 20-25 layer column of (possible) snow, + !! lake water, and soil beneath lake. + !! Snow and soil temperatures are determined as in SoilTemperature, except + !! for appropriate boundary conditions at the top of the snow (the flux is fixed + !! to be the ground heat flux calculated in ShalLakeFluxes), the bottom of the snow + !! (adjacent to top lake layer), and the top of the soil (adjacent to the bottom + !! lake layer). Also, the soil is assumed to be always fully saturated (ShalLakeHydrology + !! will have to insure this). The whole column is solved simultaneously as one tridiagonal matrix. + !! Lake temperatures are determined from the Hostetler model as before, except now: + !!\n i) Lake water layers can freeze by any fraction and release latent heat; thermal + !! and mechanical properties are adjusted for ice fraction. + !!\n ii) Convective mixing (though not eddy diffusion) still occurs for frozen lakes. + !!\n iii) No sunlight is absorbed in the lake if there are snow layers. + !!\n iv) Light is allowed to reach the top soil layer (where it is assumed to be completely absorbed). + !!\n v) Lakes have variable depth, set ultimately in surface data set but now in initShalLakeMod. ! ! Eddy + molecular diffusion: ! d ts d d ts 1 ds @@ -1652,49 +1644,49 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! implicit none !in: - integer, intent(inout) :: errflg - real(kind_lake), intent(in) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity) - real(kind_lake), intent(in) :: tksatu(1,nlevsoil) ! thermal conductivity, saturated soil [W/m-K] - real(kind_lake), intent(in) :: tkmg(1,nlevsoil) ! thermal conductivity, soil minerals [W/m-K] - real(kind_lake), intent(in) :: tkdry(1,nlevsoil) ! thermal conductivity, dry soil (W/m/Kelvin) - real(kind_lake), intent(in) :: csol(1,nlevsoil) ! heat capacity, soil solids (J/m**3/Kelvin) - character(*), intent(inout) :: errmsg - real(kind_lake), intent(in) :: t_grnd(1) ! ground temperature (Kelvin) - real(kind_lake), intent(inout) :: h2osno(1) ! snow water (mm H2O) - real(kind_lake), intent(in) :: sabg(1) ! solar radiation absorbed by ground (W/m**2) - real(kind_lake), intent(in) :: dz(1,-nlevsnow + 1:nlevsoil) ! layer thickness for snow & soil (m) - real(kind_lake), intent(in) :: dz_lake(1,nlevlake) ! layer thickness for lake (m) - real(kind_lake), intent(in) :: z(1,-nlevsnow+1:nlevsoil) ! layer depth for snow & soil (m) - real(kind_lake), intent(in) :: zi(1,-nlevsnow+0:nlevsoil) ! interface level below a "z" level (m) - ! the other z and dz variables - real(kind_lake), intent(in) :: z_lake(1,nlevlake) ! layer depth for lake (m) - real(kind_lake), intent(in) :: ws(1) ! surface friction velocity (m/s) - real(kind_lake), intent(in) :: ks(1) ! coefficient passed to ShalLakeTemperature - ! for calculation of decay of eddy diffusivity with depth - integer , intent(in) :: snl(1) ! negative of number of snow layers - real(kind_lake), intent(inout) :: eflx_gnet(1) ! net heat flux into ground (W/m**2) at the surface interface - real(kind_lake), intent(in) :: lakedepth(1) ! column lake depth (m) + integer, intent(inout) :: errflg !< + real(kind_lake), intent(in) :: watsat(1,nlevsoil) !< volumetric soil water at saturation (porosity) + real(kind_lake), intent(in) :: tksatu(1,nlevsoil) !< thermal conductivity, saturated soil [W/m-K] + real(kind_lake), intent(in) :: tkmg(1,nlevsoil) !< thermal conductivity, soil minerals [W/m-K] + real(kind_lake), intent(in) :: tkdry(1,nlevsoil) !< thermal conductivity, dry soil (W/m/Kelvin) + real(kind_lake), intent(in) :: csol(1,nlevsoil) !< heat capacity, soil solids (J/m**3/Kelvin) + character(*), intent(inout) :: errmsg !< + real(kind_lake), intent(in) :: t_grnd(1) !< ground temperature (Kelvin) + real(kind_lake), intent(inout) :: h2osno(1) !< snow water (mm H2O) + real(kind_lake), intent(in) :: sabg(1) !< solar radiation absorbed by ground (W/m**2) + real(kind_lake), intent(in) :: dz(1,-nlevsnow + 1:nlevsoil) !< layer thickness for snow & soil (m) + real(kind_lake), intent(in) :: dz_lake(1,nlevlake) !< layer thickness for lake (m) + real(kind_lake), intent(in) :: z(1,-nlevsnow+1:nlevsoil) !< layer depth for snow & soil (m) + real(kind_lake), intent(in) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m) + !! the other z and dz variables + real(kind_lake), intent(in) :: z_lake(1,nlevlake) !< layer depth for lake (m) + real(kind_lake), intent(in) :: ws(1) !< surface friction velocity (m/s) + real(kind_lake), intent(in) :: ks(1) !< coefficient passed to ShalLakeTemperature + !! for calculation of decay of eddy diffusivity with depth + integer , intent(in) :: snl(1) !< negative of number of snow layers + real(kind_lake), intent(inout) :: eflx_gnet(1) !< net heat flux into ground (W/m**2) at the surface interface + real(kind_lake), intent(in) :: lakedepth(1) !< column lake depth (m) ! real(kind_lake), intent(in) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity) - real(kind_lake), intent(inout) :: snowdp(1) !snow height (m) - real(kind_lake), intent(in) :: dtime !timestep + real(kind_lake), intent(inout) :: snowdp(1) !< snow height (m) + real(kind_lake), intent(in) :: dtime !< timestep !out: - real(kind_lake), intent(out) :: eflx_sh_grnd(1) ! sensible heat flux from ground (W/m**2) [+ to atm] - real(kind_lake), intent(out) :: eflx_sh_tot(1) ! total sensible heat flux (W/m**2) [+ to atm] - real(kind_lake), intent(out) :: eflx_soil_grnd(1) ! heat flux into snow / lake (W/m**2) [+ = into soil] - ! Here this includes the whole lake radiation absorbed. - !real(kind_lake), intent(out) :: qmelt(1) ! snow melt [mm/s] [temporary] + real(kind_lake), intent(out) :: eflx_sh_grnd(1) !< sensible heat flux from ground (W/m**2) [+ to atm] + real(kind_lake), intent(out) :: eflx_sh_tot(1) !< total sensible heat flux (W/m**2) [+ to atm] + real(kind_lake), intent(out) :: eflx_soil_grnd(1) !< heat flux into snow / lake (W/m**2) [+ = into soil] + !! Here this includes the whole lake radiation absorbed. + !real(kind_lake), intent(out) :: qmelt(1) !< snow melt [mm/s] [temporary] - real(kind_lake), intent(inout) :: t_lake(1,nlevlake) ! lake temperature (Kelvin) - real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! soil (or snow) temperature (Kelvin) - real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2) [for snow & soil layers] - real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2) [for snow & soil layers] - real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) ! mass fraction of lake layer that is frozen - real(kind_lake), intent(out) :: savedtke1(1) ! top level thermal conductivity (W/mK) - real(kind_lake), intent(out) :: frac_iceold(1,-nlevsnow+1:nlevsoil) ! fraction of ice relative to the tot water - real(kind_lake), intent(out) :: qflx_snomelt(1) !snow melt (mm H2O /s) - integer, intent(out) :: imelt(1,-nlevsnow+1:nlevsoil) !flag for melting (=1), freezing (=2), Not=0 (new) + real(kind_lake), intent(inout) :: t_lake(1,nlevlake) !< lake temperature (Kelvin) + real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil (or snow) temperature (Kelvin) + real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) [for snow & soil layers] + real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) [for snow & soil layers] + real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) !< mass fraction of lake layer that is frozen + real(kind_lake), intent(out) :: savedtke1(1) !< top level thermal conductivity (W/mK) + real(kind_lake), intent(out) :: frac_iceold(1,-nlevsnow+1:nlevsoil) !< fraction of ice relative to the tot water + real(kind_lake), intent(out) :: qflx_snomelt(1) !< snow melt (mm H2O /s) + integer, intent(out) :: imelt(1,-nlevsnow+1:nlevsoil) !< flag for melting (=1), freezing (=2), Not=0 (new) ! OTHER LOCAL VARIABLES: @@ -2540,52 +2532,48 @@ end subroutine ShalLakeTemperature ! ! ROUTINE: SoilThermProp_Lake ! - ! !INTERFACE: + ! INTERFACE: + ! DESCRIPTION: + !> Calculation of thermal conductivities and heat capacities of + !! snow/soil layers + !!\n (1) The volumetric heat capacity is calculated as a linear combination + !! in terms of the volumetric fraction of the constituent phases. + !! + !!\n (2) The thermal conductivity of soil is computed from the algorithm of + !! Johansen (as reported by Farouki 1981), and of snow is from the + !! formulation used in SNTHERM (Jordan 1991). + !! The thermal conductivities at the interfaces between two neighboring + !! layers (j, j+1) are derived from an assumption that the flux across + !! the interface is equal to that from the node j to the interface and the + !! flux from the interface to the node j+1. + !! + !! For lakes, the proper soil layers (not snow) should always be saturated. subroutine SoilThermProp_Lake (snl,dz,zi,z,t_soisno,h2osoi_liq,h2osoi_ice, & watsat, tksatu, tkmg, tkdry, csol, tk, cv, tktopsoillay,errmsg,errflg) - ! - ! !DESCRIPTION: - ! Calculation of thermal conductivities and heat capacities of - ! snow/soil layers - ! (1) The volumetric heat capacity is calculated as a linear combination - ! in terms of the volumetric fraction of the constituent phases. - ! - ! (2) The thermal conductivity of soil is computed from the algorithm of - ! Johansen (as reported by Farouki 1981), and of snow is from the - ! formulation used in SNTHERM (Jordan 1991). - ! The thermal conductivities at the interfaces between two neighboring - ! layers (j, j+1) are derived from an assumption that the flux across - ! the interface is equal to that from the node j to the interface and the - ! flux from the interface to the node j+1. - ! - ! For lakes, the proper soil layers (not snow) should always be saturated. - ! - ! !USES: - implicit none !in - integer, intent(inout) :: errflg - character(*), intent(inout) :: errmsg - integer , intent(in) :: snl(1) ! number of snow layers - ! real(kind_lake), intent(in) :: h2osno(1) ! snow water (mm H2O) - real(kind_lake), intent(in) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity) - real(kind_lake), intent(in) :: tksatu(1,nlevsoil) ! thermal conductivity, saturated soil [W/m-K] - real(kind_lake), intent(in) :: tkmg(1,nlevsoil) ! thermal conductivity, soil minerals [W/m-K] - real(kind_lake), intent(in) :: tkdry(1,nlevsoil) ! thermal conductivity, dry soil (W/m/Kelvin) - real(kind_lake), intent(in) :: csol(1,nlevsoil) ! heat capacity, soil solids (J/m**3/Kelvin) - real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) ! layer thickness (m) - real(kind_lake), intent(in) :: zi(1,-nlevsnow+0:nlevsoil) ! interface level below a "z" level (m) - real(kind_lake), intent(in) :: z(1,-nlevsnow+1:nlevsoil) ! layer depth (m) - real(kind_lake), intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! soil temperature (Kelvin) - real(kind_lake), intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2) - real(kind_lake), intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2) + integer, intent(inout) :: errflg + character(*), intent(inout) :: errmsg + integer , intent(in) :: snl(1) !< number of snow layers + ! real(kind_lake), intent(in) :: h2osno(1) !< snow water (mm H2O) + real(kind_lake), intent(in) :: watsat(1,nlevsoil) !< volumetric soil water at saturation (porosity) + real(kind_lake), intent(in) :: tksatu(1,nlevsoil) !< thermal conductivity, saturated soil [W/m-K] + real(kind_lake), intent(in) :: tkmg(1,nlevsoil) !< thermal conductivity, soil minerals [W/m-K] + real(kind_lake), intent(in) :: tkdry(1,nlevsoil) !< thermal conductivity, dry soil (W/m/Kelvin) + real(kind_lake), intent(in) :: csol(1,nlevsoil) !< heat capacity, soil solids (J/m**3/Kelvin) + real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness (m) + real(kind_lake), intent(in) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m) + real(kind_lake), intent(in) :: z(1,-nlevsnow+1:nlevsoil) !< layer depth (m) + real(kind_lake), intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin) + real(kind_lake), intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) + real(kind_lake), intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) !out - real(kind_lake), intent(out) :: cv(lbc:ubc,-nlevsnow+1:nlevsoil) ! heat capacity [J/(m2 K)] - real(kind_lake), intent(out) :: tk(lbc:ubc,-nlevsnow+1:nlevsoil) ! thermal conductivity [W/(m K)] - real(kind_lake), intent(out) :: tktopsoillay(lbc:ubc) ! thermal conductivity [W/(m K)] + real(kind_lake), intent(out) :: cv(lbc:ubc,-nlevsnow+1:nlevsoil) !< heat capacity [J/(m2 K)] + real(kind_lake), intent(out) :: tk(lbc:ubc,-nlevsnow+1:nlevsoil) !< thermal conductivity [W/(m K)] + real(kind_lake), intent(out) :: tktopsoillay(lbc:ubc) !< thermal conductivity [W/(m K)] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !CALLED FROM: ! subroutine ShalLakeTemperature in this module. @@ -2754,6 +2742,24 @@ end subroutine SoilThermProp_Lake ! ROUTINE: PhaseChange_Lake ! ! !INTERFACE: + + ! DESCRIPTION: + !> Calculation of the phase change within snow, soil, & lake layers: + !!\n (1) Check the conditions for which the phase change may take place, + !! i.e., the layer temperature is great than the freezing point + !! and the ice mass is not equal to zero (i.e. melting), + !! or the layer temperature is less than the freezing point + !! and the liquid water mass is greater than the allowable supercooled + !! (i.e. freezing). + !!\n (2) Assess the amount of phase change from the energy excess (or deficit) + !! after setting the layer temperature to freezing point, depending on + !! how much water or ice is available. + !!\n (3) Re-adjust the ice and liquid mass, and the layer temperature: either to + !! the freezing point if enough water or ice is available to fully compensate, + !! or to a remaining temperature. + !! + !! The specific heats are assumed constant. Potential cycling errors resulting from + !! this assumption will be trapped at the end of ShalLakeTemperature. subroutine PhaseChange_Lake (snl,h2osno,dz,dz_lake, & !i t_soisno,h2osoi_liq,h2osoi_ice, & !i&o lake_icefrac,t_lake, snowdp, & !i&o @@ -2761,28 +2767,12 @@ subroutine PhaseChange_Lake (snl,h2osno,dz,dz_lake, & !i cv, cv_lake, & !i&o lhabs) !o !============================================================================================= - ! !DESCRIPTION: - ! Calculation of the phase change within snow, soil, & lake layers: - ! (1) Check the conditions for which the phase change may take place, - ! i.e., the layer temperature is great than the freezing point - ! and the ice mass is not equal to zero (i.e. melting), - ! or the layer temperature is less than the freezing point - ! and the liquid water mass is greater than the allowable supercooled - ! (i.e. freezing). - ! (2) Assess the amount of phase change from the energy excess (or deficit) - ! after setting the layer temperature to freezing point, depending on - ! how much water or ice is available. - ! (3) Re-adjust the ice and liquid mass, and the layer temperature: either to - ! the freezing point if enough water or ice is available to fully compensate, - ! or to a remaining temperature. - ! The specific heats are assumed constant. Potential cycling errors resulting from - ! this assumption will be trapped at the end of ShalLakeTemperature. - ! !CALLED FROM: + !CALLED FROM: ! subroutine ShalLakeTemperature in this module ! - ! !REVISION HISTORY: - ! 04/2009 Zack Subin: Initial code - ! June 2022 Sam Trahan: Modified for CCPP + !REVISION HISTORY: + ! - 04/2009 Zack Subin: Initial code + ! - June 2022 Sam Trahan: Modified for CCPP !============================================================================================== ! !USES: ! @@ -2790,29 +2780,29 @@ subroutine PhaseChange_Lake (snl,h2osno,dz,dz_lake, & !i implicit none !in: - integer , intent(in) :: snl(1) !number of snow layers - real(kind_lake), intent(inout) :: h2osno(1) !snow water (mm H2O) - real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !layer thickness (m) - real(kind_lake), intent(in) :: dz_lake(1,nlevlake) !lake layer thickness (m) + integer , intent(in) :: snl(1) !< number of snow layers + real(kind_lake), intent(inout) :: h2osno(1) !< snow water (mm H2O) + real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness (m) + real(kind_lake), intent(in) :: dz_lake(1,nlevlake) !< lake layer thickness (m) ! Needed in case snow height is less than critical value. !inout: - real(kind_lake), intent(inout) :: snowdp(1) !snow height (m) - real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !soil temperature (Kelvin) - real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2) - real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2) - real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) ! mass fraction of lake layer that is frozen - real(kind_lake), intent(inout) :: t_lake(1,nlevlake) ! lake temperature (Kelvin) + real(kind_lake), intent(inout) :: snowdp(1) !< snow height (m) + real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin) + real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) + real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) + real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) !< mass fraction of lake layer that is frozen + real(kind_lake), intent(inout) :: t_lake(1,nlevlake) !< lake temperature (Kelvin) !out: - real(kind_lake), intent(out) :: qflx_snomelt(1) !snow melt (mm H2O /s) - real(kind_lake), intent(out) :: eflx_snomelt(1) !snow melt heat flux (W/m**2) - integer, intent(out) :: imelt(1,-nlevsnow+1:nlevsoil) !flag for melting (=1), freezing (=2), Not=0 (new) + real(kind_lake), intent(out) :: qflx_snomelt(1) !< snow melt (mm H2O /s) + real(kind_lake), intent(out) :: eflx_snomelt(1) !< snow melt heat flux (W/m**2) + integer, intent(out) :: imelt(1,-nlevsnow+1:nlevsoil) !< flag for melting (=1), freezing (=2), Not=0 (new) !What's the sign of this? Is it just output? - real(kind_lake), intent(inout) :: cv(lbc:ubc,-nlevsnow+1:nlevsoil) ! heat capacity [J/(m2 K)] - real(kind_lake), intent(inout) :: cv_lake (lbc:ubc,1:nlevlake) ! heat capacity [J/(m2 K)] - real(kind_lake), intent(out):: lhabs(lbc:ubc) ! total per-column latent heat abs. (J/m^2) + real(kind_lake), intent(inout) :: cv(lbc:ubc,-nlevsnow+1:nlevsoil) !< heat capacity [J/(m2 K)] + real(kind_lake), intent(inout) :: cv_lake (lbc:ubc,1:nlevlake) !< heat capacity [J/(m2 K)] + real(kind_lake), intent(out):: lhabs(lbc:ubc) !< total per-column latent heat abs. (J/m^2) ! OTHER LOCAL VARIABLES: @@ -2972,7 +2962,19 @@ subroutine PhaseChange_Lake (snl,h2osno,dz,dz_lake, & !i end subroutine PhaseChange_Lake - + ! DESCRIPTION: + !> Calculation of Shallow Lake Hydrology. Full hydrology of snow layers is + !! done. However, there is no infiltration, and the water budget is balanced with + !! qflx_qrgwl. Lake water mass is kept constant. The soil is simply maintained at + !! volumetric saturation if ice melting frees up pore space. Likewise, if the water + !! portion alone at some point exceeds pore capacity, it is reduced. This is consistent + !! with the possibility of initializing the soil layer with excess ice. The only + !! real error with that is that the thermal conductivity will ignore the excess ice + !! (and accompanying thickness change). + !! + !! If snow layers are present over an unfrozen lake, and the top layer of the lake + !! is capable of absorbing the latent heat without going below freezing, + !! the snow-water is runoff and the latent heat is subtracted from the lake. subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, & !i begwb,qflx_evap_tot,forc_t,do_capsnow, & t_grnd,qflx_evap_soi, & @@ -2991,19 +2993,6 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, & dtime,errmsg,errflg) !================================================================================== - ! !DESCRIPTION: - ! Calculation of Shallow Lake Hydrology. Full hydrology of snow layers is - ! done. However, there is no infiltration, and the water budget is balanced with - ! qflx_qrgwl. Lake water mass is kept constant. The soil is simply maintained at - ! volumetric saturation if ice melting frees up pore space. Likewise, if the water - ! portion alone at some point exceeds pore capacity, it is reduced. This is consistent - ! with the possibility of initializing the soil layer with excess ice. The only - ! real error with that is that the thermal conductivity will ignore the excess ice - ! (and accompanying thickness change). - ! - ! If snow layers are present over an unfrozen lake, and the top layer of the lake - ! is capable of absorbing the latent heat without going below freezing, - ! the snow-water is runoff and the latent heat is subtracted from the lake. ! ! WARNING: This subroutine assumes lake columns have one and only one pft. ! @@ -3034,79 +3023,79 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, & integer, intent(inout) :: errflg character(*), intent(inout) :: errmsg - real(kind_lake) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity) - real(kind_lake) :: tksatu(1,nlevsoil) ! thermal conductivity, saturated soil [W/m-K] - real(kind_lake) :: tkmg(1,nlevsoil) ! thermal conductivity, soil minerals [W/m-K] - real(kind_lake) :: tkdry(1,nlevsoil) ! thermal conductivity, dry soil (W/m/Kelvin) - real(kind_lake) :: csol(1,nlevsoil) ! heat capacity, soil solids (J/m**3/Kelvin) - - ! integer , intent(in) :: clandunit(1) ! column's landunit - ! integer , intent(in) :: ityplun(1) ! landunit type - real(kind_lake), intent(in) :: dtime ! timestep - real(kind_lake), intent(in) :: dz_lake(1,nlevlake) ! layer thickness for lake (m) - real(kind_lake), intent(in) :: forc_rain(1) ! rain rate [mm/s] - real(kind_lake), intent(in) :: forc_snow(1) ! snow rate [mm/s] - real(kind_lake), intent(in) :: qflx_evap_tot(1) ! qflx_evap_soi + qflx_evap_veg + qflx_tran_veg - real(kind_lake), intent(in) :: forc_t(1) ! atmospheric temperature (Kelvin) - - !real(kind_lake), intent(in),optional :: flfall(1) ! fraction of liquid water within falling precipitation (unused) - - logical , intent(in) :: do_capsnow(1) ! true => do snow capping - real(kind_lake), intent(in) :: t_grnd(1) ! ground temperature (Kelvin) - real(kind_lake), intent(in) :: qflx_evap_soi(1) ! soil evaporation (mm H2O/s) (+ = to atm) - real(kind_lake), intent(in) :: qflx_snomelt(1) !snow melt (mm H2O /s) - integer, intent(in) :: imelt(1,-nlevsnow+1:nlevsoil) !flag for melting (=1), freezing (=2), Not=0 + real(kind_lake) :: watsat(1,nlevsoil) !< volumetric soil water at saturation (porosity) + real(kind_lake) :: tksatu(1,nlevsoil) !< thermal conductivity, saturated soil [W/m-K] + real(kind_lake) :: tkmg(1,nlevsoil) !< thermal conductivity, soil minerals [W/m-K] + real(kind_lake) :: tkdry(1,nlevsoil) !< thermal conductivity, dry soil (W/m/Kelvin) + real(kind_lake) :: csol(1,nlevsoil) !< heat capacity, soil solids (J/m**3/Kelvin) + + ! integer , intent(in) :: clandunit(1) !< column's landunit + ! integer , intent(in) :: ityplun(1) !< landunit type + real(kind_lake), intent(in) :: dtime !< timestep + real(kind_lake), intent(in) :: dz_lake(1,nlevlake) !< layer thickness for lake (m) + real(kind_lake), intent(in) :: forc_rain(1) !< rain rate [mm/s] + real(kind_lake), intent(in) :: forc_snow(1) !< snow rate [mm/s] + real(kind_lake), intent(in) :: qflx_evap_tot(1) !< qflx_evap_soi + qflx_evap_veg + qflx_tran_veg + real(kind_lake), intent(in) :: forc_t(1) !< atmospheric temperature (Kelvin) + + !real(kind_lake), intent(in),optional :: flfall(1) !< fraction of liquid water within falling precipitation (unused) + + logical , intent(in) :: do_capsnow(1) !< true => do snow capping + real(kind_lake), intent(in) :: t_grnd(1) !< ground temperature (Kelvin) + real(kind_lake), intent(in) :: qflx_evap_soi(1) !< soil evaporation (mm H2O/s) (+ = to atm) + real(kind_lake), intent(in) :: qflx_snomelt(1) !< snow melt (mm H2O /s) + integer, intent(in) :: imelt(1,-nlevsnow+1:nlevsoil) !< flag for melting (=1), freezing (=2), Not=0 !inout: - real(kind_lake), intent(inout) :: begwb(1) ! water mass begining of the time step + real(kind_lake), intent(inout) :: begwb(1) !< water mass begining of the time step ! inout: - real(kind_lake), intent(inout) :: z(1,-nlevsnow+1:nlevsoil) ! layer depth (m) - real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) ! layer thickness depth (m) - real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) ! interface depth (m) - integer , intent(inout) :: snl(1) ! number of snow layers - real(kind_lake), intent(inout) :: h2osno(1) ! snow water (mm H2O) - real(kind_lake), intent(inout) :: snowdp(1) ! snow height (m) - real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) ! mass fraction of lake layer that is frozen - real(kind_lake), intent(inout) :: t_lake(1,nlevlake) ! lake temperature (Kelvin) - - real(kind_lake), intent(inout) :: frac_iceold(1,-nlevsnow+1:nlevsoil) ! fraction of ice relative to the tot water + real(kind_lake), intent(inout) :: z(1,-nlevsnow+1:nlevsoil) !< layer depth (m) + real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer thickness depth (m) + real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !< interface depth (m) + integer , intent(inout) :: snl(1) !< number of snow layers + real(kind_lake), intent(inout) :: h2osno(1) !< snow water (mm H2O) + real(kind_lake), intent(inout) :: snowdp(1) !< snow height (m) + real(kind_lake), intent(inout) :: lake_icefrac(1,nlevlake) !< mass fraction of lake layer that is frozen + real(kind_lake), intent(inout) :: t_lake(1,nlevlake) !< lake temperature (Kelvin) + + real(kind_lake), intent(inout) :: frac_iceold(1,-nlevsnow+1:nlevsoil) !< fraction of ice relative to the tot water ! out: - real(kind_lake), intent(out) :: endwb(1) ! water mass end of the time step - real(kind_lake), intent(out) :: snowage(1) ! non dimensional snow age [-] - real(kind_lake), intent(out) :: snowice(1) ! average snow ice lens - real(kind_lake), intent(out) :: snowliq(1) ! average snow liquid water - real(kind_lake), intent(out) :: t_snow(1) ! vertically averaged snow temperature - real(kind_lake), intent(out) :: t_soisno(1,-nlevsnow+1:nlevsoil) ! snow temperature (Kelvin) - real(kind_lake), intent(out) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) ! ice lens (kg/m2) - real(kind_lake), intent(out) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) ! liquid water (kg/m2) - real(kind_lake), intent(out) :: h2osoi_vol(1,-nlevsnow+1:nlevsoil) ! volumetric soil water (0<=h2osoi_vol<=watsat)[m3/m3] - real(kind_lake), intent(out) :: qflx_drain(1) ! sub-surface runoff (mm H2O /s) - real(kind_lake), intent(out) :: qflx_surf(1) ! surface runoff (mm H2O /s) - real(kind_lake), intent(out) :: qflx_infl(1) ! infiltration (mm H2O /s) - real(kind_lake), intent(out) :: qflx_qrgwl(1) ! qflx_surf at glaciers, wetlands, lakes - real(kind_lake), intent(out) :: qcharge(1) ! aquifer recharge rate (mm/s) - real(kind_lake), intent(out) :: qflx_prec_grnd(1) ! water onto ground including canopy runoff [kg/(m2 s)] - real(kind_lake), intent(out) :: qflx_snowcap(1) ! excess precipitation due to snow capping (mm H2O /s) [+] - real(kind_lake), intent(out) :: qflx_snowcap_col(1) ! excess precipitation due to snow capping (mm H2O /s) [+] - real(kind_lake), intent(out) :: qflx_snow_grnd_pft(1) ! snow on ground after interception (mm H2O/s) [+] - real(kind_lake), intent(out) :: qflx_snow_grnd_col(1) ! snow on ground after interception (mm H2O/s) [+] - real(kind_lake), intent(out) :: qflx_rain_grnd(1) ! rain on ground after interception (mm H2O/s) [+] - real(kind_lake), intent(out) :: qflx_evap_tot_col(1) !pft quantity averaged to the column (assuming one pft) - real(kind_lake) ,intent(out) :: soilalpha(1) !factor that reduces ground saturated specific humidity (-) - real(kind_lake), intent(out) :: zwt(1) !water table depth - real(kind_lake), intent(out) :: fcov(1) !fractional area with water table at surface - real(kind_lake), intent(out) :: rootr_column(1,1:nlevsoil) !effective fraction of roots in each soil layer - real(kind_lake), intent(out) :: qflx_evap_grnd(1) ! ground surface evaporation rate (mm H2O/s) [+] - real(kind_lake), intent(out) :: qflx_sub_snow(1) ! sublimation rate from snow pack (mm H2O /s) [+] - real(kind_lake), intent(out) :: qflx_dew_snow(1) ! surface dew added to snow pack (mm H2O /s) [+] - real(kind_lake), intent(out) :: qflx_dew_grnd(1) ! ground surface dew formation (mm H2O /s) [+] - real(kind_lake), intent(out) :: qflx_rain_grnd_col(1) !rain on ground after interception (mm H2O/s) [+] + real(kind_lake), intent(out) :: endwb(1) !< water mass end of the time step + real(kind_lake), intent(out) :: snowage(1) !< non dimensional snow age [-] + real(kind_lake), intent(out) :: snowice(1) !< average snow ice lens + real(kind_lake), intent(out) :: snowliq(1) !< average snow liquid water + real(kind_lake), intent(out) :: t_snow(1) !< vertically averaged snow temperature + real(kind_lake), intent(out) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< snow temperature (Kelvin) + real(kind_lake), intent(out) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) + real(kind_lake), intent(out) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) + real(kind_lake), intent(out) :: h2osoi_vol(1,-nlevsnow+1:nlevsoil) !< volumetric soil water (0<=h2osoi_vol<=watsat)[m3/m3] + real(kind_lake), intent(out) :: qflx_drain(1) !< sub-surface runoff (mm H2O /s) + real(kind_lake), intent(out) :: qflx_surf(1) !< surface runoff (mm H2O /s) + real(kind_lake), intent(out) :: qflx_infl(1) !< infiltration (mm H2O /s) + real(kind_lake), intent(out) :: qflx_qrgwl(1) !< qflx_surf at glaciers, wetlands, lakes + real(kind_lake), intent(out) :: qcharge(1) !< aquifer recharge rate (mm/s) + real(kind_lake), intent(out) :: qflx_prec_grnd(1) !< water onto ground including canopy runoff [kg/(m2 s)] + real(kind_lake), intent(out) :: qflx_snowcap(1) !< excess precipitation due to snow capping (mm H2O /s) [+] + real(kind_lake), intent(out) :: qflx_snowcap_col(1) !< excess precipitation due to snow capping (mm H2O /s) [+] + real(kind_lake), intent(out) :: qflx_snow_grnd_pft(1) !< snow on ground after interception (mm H2O/s) [+] + real(kind_lake), intent(out) :: qflx_snow_grnd_col(1) !< snow on ground after interception (mm H2O/s) [+] + real(kind_lake), intent(out) :: qflx_rain_grnd(1) !< rain on ground after interception (mm H2O/s) [+] + real(kind_lake), intent(out) :: qflx_evap_tot_col(1) !< pft quantity averaged to the column (assuming one pft) + real(kind_lake) ,intent(out) :: soilalpha(1) !< factor that reduces ground saturated specific humidity (-) + real(kind_lake), intent(out) :: zwt(1) !< water table depth + real(kind_lake), intent(out) :: fcov(1) !< fractional area with water table at surface + real(kind_lake), intent(out) :: rootr_column(1,1:nlevsoil) !< effective fraction of roots in each soil layer + real(kind_lake), intent(out) :: qflx_evap_grnd(1) !< ground surface evaporation rate (mm H2O/s) [+] + real(kind_lake), intent(out) :: qflx_sub_snow(1) !< sublimation rate from snow pack (mm H2O /s) [+] + real(kind_lake), intent(out) :: qflx_dew_snow(1) !< surface dew added to snow pack (mm H2O /s) [+] + real(kind_lake), intent(out) :: qflx_dew_grnd(1) !< ground surface dew formation (mm H2O /s) [+] + real(kind_lake), intent(out) :: qflx_rain_grnd_col(1) !< rain on ground after interception (mm H2O/s) [+] ! Block of biogeochem currently not used. real(kind_lake), pointer :: sucsat(:,:) ! minimum soil suction (mm) @@ -3644,25 +3633,25 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, & end subroutine ShalLakeHydrology +! DESCRIPTION: +!> Computes saturation mixing ratio and the change in saturation +!! mixing ratio with respect to temperature. subroutine QSat (T, p, es, esdT, qs, qsdT) ! - ! !DESCRIPTION: - ! Computes saturation mixing ratio and the change in saturation - ! mixing ratio with respect to temperature. ! Reference: Polynomial approximations from: ! Piotr J. Flatau, et al.,1992: Polynomial fits to saturation ! vapor pressure. Journal of Applied Meteorology, 31, 1507-1513. ! - ! !USES: + ! USES: ! - ! !ARGUMENTS: + ! ARGUMENTS: implicit none - real(kind_lake), intent(in) :: T ! temperature (K) - real(kind_lake), intent(in) :: p ! surface atmospheric pressure (pa) - real(kind_lake), intent(out) :: es ! vapor pressure (pa) - real(kind_lake), intent(out) :: esdT ! d(es)/d(T) - real(kind_lake), intent(out) :: qs ! humidity (kg/kg) - real(kind_lake), intent(out) :: qsdT ! d(qs)/d(T) + real(kind_lake), intent(in) :: T !< temperature (K) + real(kind_lake), intent(in) :: p !< surface atmospheric pressure (pa) + real(kind_lake), intent(out) :: es !< vapor pressure (pa) + real(kind_lake), intent(out) :: esdT !< d(es)/d(T) + real(kind_lake), intent(out) :: qs !< humidity (kg/kg) + real(kind_lake), intent(out) :: qsdT !< d(qs)/d(T) ! ! !CALLED FROM: ! subroutine Biogeophysics1 in module Biogeophysics1Mod @@ -3762,21 +3751,21 @@ end subroutine QSat subroutine Tridiagonal (lbc, ubc, lbj, ubj, jtop, numf, filter, & a, b, c, r, u) ! - ! !DESCRIPTION: - ! Tridiagonal matrix solution + ! DESCRIPTION: + !< Tridiagonal matrix solution ! - ! !ARGUMENTS: + ! ARGUMENTS: implicit none - integer , intent(in) :: lbc, ubc ! lbinning and ubing column indices - integer , intent(in) :: lbj, ubj ! lbinning and ubing level indices - integer , intent(in) :: jtop(lbc:ubc) ! top level for each column - integer , intent(in) :: numf ! filter dimension - integer , intent(in) :: filter(1:numf) ! filter - real(kind_lake), intent(in) :: a(lbc:ubc, lbj:ubj) ! "a" left off diagonal of tridiagonal matrix - real(kind_lake), intent(in) :: b(lbc:ubc, lbj:ubj) ! "b" diagonal column for tridiagonal matrix - real(kind_lake), intent(in) :: c(lbc:ubc, lbj:ubj) ! "c" right off diagonal tridiagonal matrix - real(kind_lake), intent(in) :: r(lbc:ubc, lbj:ubj) ! "r" forcing term of tridiagonal matrix - real(kind_lake), intent(inout) :: u(lbc:ubc, lbj:ubj) ! solution + integer , intent(in) :: lbc, ubc !< lbinning and ubing column indices + integer , intent(in) :: lbj, ubj !< lbinning and ubing level indices + integer , intent(in) :: jtop(lbc:ubc) !< top level for each column + integer , intent(in) :: numf !< filter dimension + integer , intent(in) :: filter(1:numf) !< filter + real(kind_lake), intent(in) :: a(lbc:ubc, lbj:ubj) !< "a" left off diagonal of tridiagonal matrix + real(kind_lake), intent(in) :: b(lbc:ubc, lbj:ubj) !< "b" diagonal column for tridiagonal matrix + real(kind_lake), intent(in) :: c(lbc:ubc, lbj:ubj) !< "c" right off diagonal tridiagonal matrix + real(kind_lake), intent(in) :: r(lbc:ubc, lbj:ubj) !< "r" forcing term of tridiagonal matrix + real(kind_lake), intent(inout) :: u(lbc:ubc, lbj:ubj) !< solution ! ! !CALLED FROM: ! subroutine BiogeophysicsLake in module BiogeophysicsLakeMod @@ -3841,6 +3830,17 @@ subroutine Tridiagonal (lbc, ubc, lbj, ubj, jtop, numf, filter, & end subroutine Tridiagonal + ! DESCRIPTION: + !> Evaluate the change of snow mass and the snow water onto soil. + !! Water flow within snow is computed by an explicit and non-physical + !! based scheme, which permits a part of liquid water over the holding + !! capacity (a tentative value is used, i.e. equal to 0.033*porosity) to + !! percolate into the underlying layer. Except for cases where the + !! porosity of one of the two neighboring layers is less than 0.05, zero + !! flow is assumed. The water flow out of the bottom of the snow pack will + !! participate as the input of the soil water and runoff. This subroutine + !! uses a filter for columns containing snow which must be constructed prior + !! to being called. subroutine SnowWater(lbc, ubc, num_snowc, filter_snowc, & !i num_nosnowc, filter_nosnowc, & !i snl,do_capsnow,qflx_snomelt,qflx_rain_grnd, & !i @@ -3849,18 +3849,6 @@ subroutine SnowWater(lbc, ubc, num_snowc, filter_snowc, & !i h2osoi_ice,h2osoi_liq, & !i&o qflx_top_soil) !o !=============================================================================== - ! !DESCRIPTION: - ! Evaluate the change of snow mass and the snow water onto soil. - ! Water flow within snow is computed by an explicit and non-physical - ! based scheme, which permits a part of liquid water over the holding - ! capacity (a tentative value is used, i.e. equal to 0.033*porosity) to - ! percolate into the underlying layer. Except for cases where the - ! porosity of one of the two neighboring layers is less than 0.05, zero - ! flow is assumed. The water flow out of the bottom of the snow pack will - ! participate as the input of the soil water and runoff. This subroutine - ! uses a filter for columns containing snow which must be constructed prior - ! to being called. - ! ! !REVISION HISTORY: ! 15 September 1999: Yongjiu Dai; Initial code ! 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision @@ -3873,32 +3861,32 @@ subroutine SnowWater(lbc, ubc, num_snowc, filter_snowc, & !i implicit none !in: - integer, intent(in) :: lbc, ubc ! column bounds - integer, intent(in) :: num_snowc ! number of snow points in column filter - integer, intent(in) :: filter_snowc(ubc-lbc+1) ! column filter for snow points - integer, intent(in) :: num_nosnowc ! number of non-snow points in column filter - integer, intent(in) :: filter_nosnowc(ubc-lbc+1) ! column filter for non-snow points - - integer , intent(in) :: snl(1) !number of snow layers - logical , intent(in) :: do_capsnow(1) !true => do snow capping - real(kind_lake), intent(in) :: dtime !timestep - real(kind_lake), intent(in) :: qflx_snomelt(1) !snow melt (mm H2O /s) - real(kind_lake), intent(in) :: qflx_rain_grnd(1) !rain on ground after interception (mm H2O/s) [+] - real(kind_lake), intent(in) :: qflx_sub_snow(1) !sublimation rate from snow pack (mm H2O /s) [+] - real(kind_lake), intent(in) :: qflx_evap_grnd(1) !ground surface evaporation rate (mm H2O/s) [+] - real(kind_lake), intent(in) :: qflx_dew_snow(1) !surface dew added to snow pack (mm H2O /s) [+] - real(kind_lake), intent(in) :: qflx_dew_grnd(1) !ground surface dew formation (mm H2O /s) [+] - real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !layer depth (m) + integer, intent(in) :: lbc, ubc !< column bounds + integer, intent(in) :: num_snowc !< number of snow points in column filter + integer, intent(in) :: filter_snowc(ubc-lbc+1) !< column filter for snow points + integer, intent(in) :: num_nosnowc !< number of non-snow points in column filter + integer, intent(in) :: filter_nosnowc(ubc-lbc+1) !< column filter for non-snow points + + integer , intent(in) :: snl(1) !< number of snow layers + logical , intent(in) :: do_capsnow(1) !< true => do snow capping + real(kind_lake), intent(in) :: dtime !< timestep + real(kind_lake), intent(in) :: qflx_snomelt(1) !< snow melt (mm H2O /s) + real(kind_lake), intent(in) :: qflx_rain_grnd(1) !< rain on ground after interception (mm H2O/s) [+] + real(kind_lake), intent(in) :: qflx_sub_snow(1) !< sublimation rate from snow pack (mm H2O /s) [+] + real(kind_lake), intent(in) :: qflx_evap_grnd(1) !< ground surface evaporation rate (mm H2O/s) [+] + real(kind_lake), intent(in) :: qflx_dew_snow(1) !< surface dew added to snow pack (mm H2O /s) [+] + real(kind_lake), intent(in) :: qflx_dew_grnd(1) !< ground surface dew formation (mm H2O /s) [+] + real(kind_lake), intent(in) :: dz(1,-nlevsnow+1:nlevsoil) !< layer depth (m) !inout: - real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2) - real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2) + real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) + real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) !out: - real(kind_lake), intent(out) :: qflx_top_soil(1) !net water input into soil from top (mm/s) + real(kind_lake), intent(out) :: qflx_top_soil(1) !< net water input into soil from top (mm/s) ! OTHER LOCAL VARIABLES: @@ -4006,6 +3994,13 @@ subroutine SnowWater(lbc, ubc, num_snowc, filter_snowc, & !i end subroutine SnowWater +!> Determine the change in snow layer thickness due to compaction and +!! settling. +!! Three metamorphisms of changing snow characteristics are implemented, +!! i.e., destructive, overburden, and melt. The treatments of the former +!! two are from SNTHERM.89 and SNTHERM.99 (1991, 1999). The contribution +!! due to melt metamorphism is simply taken as a ratio of snow ice +!! fraction after the melting versus before the melting. subroutine SnowCompaction(lbc, ubc, num_snowc, filter_snowc, &!i snl,imelt,frac_iceold,t_soisno, &!i h2osoi_ice,h2osoi_liq,dtime, &!i @@ -4013,15 +4008,6 @@ subroutine SnowCompaction(lbc, ubc, num_snowc, filter_snowc, &!i !================================================================================ - ! !DESCRIPTION: - ! Determine the change in snow layer thickness due to compaction and - ! settling. - ! Three metamorphisms of changing snow characteristics are implemented, - ! i.e., destructive, overburden, and melt. The treatments of the former - ! two are from SNTHERM.89 and SNTHERM.99 (1991, 1999). The contribution - ! due to melt metamorphism is simply taken as a ratio of snow ice - ! fraction after the melting versus before the melting. - ! ! CALLED FROM: ! subroutine Hydrology2 in module Hydrology2Mod ! @@ -4037,20 +4023,20 @@ subroutine SnowCompaction(lbc, ubc, num_snowc, filter_snowc, &!i implicit none !in: - integer, intent(in) :: lbc, ubc ! column bounds - integer, intent(in) :: num_snowc ! number of column snow points in column filter - integer, intent(in) :: filter_snowc(ubc-lbc+1) ! column filter for snow points - integer, intent(in) :: snl(1) !number of snow layers - integer, intent(in) :: imelt(1,-nlevsnow+1:nlevsoil) !flag for melting (=1), freezing (=2), Not=0 - real(kind_lake), intent(in) :: dtime - real(kind_lake), intent(in) :: frac_iceold(1,-nlevsnow+1:nlevsoil) !fraction of ice relative to the tot water - real(kind_lake), intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) !soil temperature (Kelvin) - real(kind_lake), intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2) - real(kind_lake), intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2) + integer, intent(in) :: lbc, ubc !< column bounds + integer, intent(in) :: num_snowc !< number of column snow points in column filter + integer, intent(in) :: filter_snowc(ubc-lbc+1) !< column filter for snow points + integer, intent(in) :: snl(1) !< number of snow layers + integer, intent(in) :: imelt(1,-nlevsnow+1:nlevsoil) !< flag for melting (=1), freezing (=2), Not=0 + real(kind_lake), intent(in) :: dtime !< + real(kind_lake), intent(in) :: frac_iceold(1,-nlevsnow+1:nlevsoil) !< fraction of ice relative to the tot water + real(kind_lake), intent(in) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin) + real(kind_lake), intent(in) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) + real(kind_lake), intent(in) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) !inout: - real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !layer depth (m) + real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer depth (m) ! OTHER LOCAL VARIABLES: @@ -4137,21 +4123,24 @@ subroutine SnowCompaction(lbc, ubc, num_snowc, filter_snowc, &!i end subroutine SnowCompaction +!> Combine snow layers that are less than a minimum thickness or mass +!! If the snow element thickness or mass is less than a prescribed minimum, +!! then it is combined with a neighboring element. subroutine CombineSnowLayers(lbc, ubc, & !i num_snowc, filter_snowc, & !i&o snl,h2osno,snowdp,dz,zi, & !i&o t_soisno,h2osoi_ice,h2osoi_liq, & !i&o z) !o !========================================================================== - ! !DESCRIPTION: + ! DESCRIPTION: ! Combine snow layers that are less than a minimum thickness or mass ! If the snow element thickness or mass is less than a prescribed minimum, ! then it is combined with a neighboring element. The subroutine ! clm\_combo.f90 then executes the combination of mass and energy. - ! !CALLED FROM: + ! CALLED FROM: ! subroutine Hydrology2 in module Hydrology2Mod ! - ! !REVISION HISTORY: + ! REVISION HISTORY: ! 15 September 1999: Yongjiu Dai; Initial code ! 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision ! 2/28/02, Peter Thornton: Migrated to new data structures. @@ -4162,25 +4151,25 @@ subroutine CombineSnowLayers(lbc, ubc, & !i ! !ARGUMENTS: implicit none !in: - integer, intent(in) :: lbc, ubc ! column bounds + integer, intent(in) :: lbc, ubc !< column bounds ! integer, intent(in) :: clandunit(1) !landunit index for each column ! integer, intent(in) :: ityplun(1) !landunit type !inout: - integer, intent(inout) :: num_snowc ! number of column snow points in column filter - integer, intent(inout) :: filter_snowc(ubc-lbc+1) ! column filter for snow points - integer , intent(inout) :: snl(1) !number of snow layers - real(kind_lake), intent(inout) :: h2osno(1) !snow water (mm H2O) - real(kind_lake), intent(inout) :: snowdp(1) !snow height (m) - real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !layer depth (m) - real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !interface level below a "z" level (m) - real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !soil temperature (Kelvin) - real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2) - real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2) + integer, intent(inout) :: num_snowc !< number of column snow points in column filter + integer, intent(inout) :: filter_snowc(ubc-lbc+1) !< column filter for snow points + integer , intent(inout) :: snl(1) !< number of snow layers + real(kind_lake), intent(inout) :: h2osno(1) !< snow water (mm H2O) + real(kind_lake), intent(inout) :: snowdp(1) !< snow height (m) + real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer depth (m) + real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m) + real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin) + real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) + real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) !out: - real(kind_lake), intent(out) :: z(1,-nlevsnow+1:nlevsoil) !layer thickness (m) + real(kind_lake), intent(out) :: z(1,-nlevsnow+1:nlevsoil) !< layer thickness (m) ! !EOP ! @@ -4359,6 +4348,8 @@ subroutine CombineSnowLayers(lbc, ubc, & !i end subroutine CombineSnowLayers +! DESCRIPTION: +!> Subdivides snow layers if they exceed their prescribed maximum thickness. subroutine DivideSnowLayers(lbc, ubc, & !i num_snowc, filter_snowc, & !i&o snl,dz,zi,t_soisno, & !i&o @@ -4367,8 +4358,6 @@ subroutine DivideSnowLayers(lbc, ubc, & !i !============================================================================ - ! !DESCRIPTION: - ! Subdivides snow layers if they exceed their prescribed maximum thickness. ! !CALLED FROM: ! subroutine Hydrology2 in module Hydrology2Mod ! @@ -4384,22 +4373,22 @@ subroutine DivideSnowLayers(lbc, ubc, & !i implicit none !in: - integer, intent(in) :: lbc, ubc ! column bounds + integer, intent(in) :: lbc, ubc !< column bounds !inout: - integer, intent(inout) :: num_snowc ! number of column snow points in column filter - integer, intent(inout) :: filter_snowc(ubc-lbc+1) ! column filter for snow points - integer , intent(inout) :: snl(1) !number of snow layers - real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !layer depth (m) - real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !interface level below a "z" level (m) - real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !soil temperature (Kelvin) - real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !ice lens (kg/m2) - real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !liquid water (kg/m2) + integer, intent(inout) :: num_snowc !< number of column snow points in column filter + integer, intent(inout) :: filter_snowc(ubc-lbc+1) !< column filter for snow points + integer , intent(inout) :: snl(1) !< number of snow layers + real(kind_lake), intent(inout) :: dz(1,-nlevsnow+1:nlevsoil) !< layer depth (m) + real(kind_lake), intent(inout) :: zi(1,-nlevsnow+0:nlevsoil) !< interface level below a "z" level (m) + real(kind_lake), intent(inout) :: t_soisno(1,-nlevsnow+1:nlevsoil) !< soil temperature (Kelvin) + real(kind_lake), intent(inout) :: h2osoi_ice(1,-nlevsnow+1:nlevsoil) !< ice lens (kg/m2) + real(kind_lake), intent(inout) :: h2osoi_liq(1,-nlevsnow+1:nlevsoil) !< liquid water (kg/m2) !out: - real(kind_lake), intent(out) :: z(1,-nlevsnow+1:nlevsoil) !layer thickness (m) + real(kind_lake), intent(out) :: z(1,-nlevsnow+1:nlevsoil) !< layer thickness (m) @@ -4587,11 +4576,13 @@ subroutine DivideSnowLayers(lbc, ubc, & !i end subroutine DivideSnowLayers +!> Combines two elements and returns the following combined +!! variables: dz, t, wliq, wice. subroutine Combo(dz, wliq, wice, t, dz2, wliq2, wice2, t2) ! - ! !DESCRIPTION: - ! Combines two elements and returns the following combined - ! variables: dz, t, wliq, wice. + ! DESCRIPTION: + !> Combines two elements and returns the following combined + !! variables: dz, t, wliq, wice. ! The combined temperature is based on the equation: ! the sum of the enthalpies of the two elements = ! that of the combined element. @@ -4600,14 +4591,14 @@ subroutine Combo(dz, wliq, wice, t, dz2, wliq2, wice2, t2) ! ! !ARGUMENTS: implicit none - real(kind_lake), intent(in) :: dz2 ! nodal thickness of 2 elements being combined [m] - real(kind_lake), intent(in) :: wliq2 ! liquid water of element 2 [kg/m2] - real(kind_lake), intent(in) :: wice2 ! ice of element 2 [kg/m2] - real(kind_lake), intent(in) :: t2 ! nodal temperature of element 2 [K] - real(kind_lake), intent(inout) :: dz ! nodal thickness of 1 elements being combined [m] - real(kind_lake), intent(inout) :: wliq ! liquid water of element 1 - real(kind_lake), intent(inout) :: wice ! ice of element 1 [kg/m2] - real(kind_lake), intent(inout) :: t ! nodel temperature of elment 1 [K] + real(kind_lake), intent(in) :: dz2 !< nodal thickness of 2 elements being combined [m] + real(kind_lake), intent(in) :: wliq2 !< liquid water of element 2 [kg/m2] + real(kind_lake), intent(in) :: wice2 !< ice of element 2 [kg/m2] + real(kind_lake), intent(in) :: t2 !< nodal temperature of element 2 [K] + real(kind_lake), intent(inout) :: dz !< nodal thickness of 1 elements being combined [m] + real(kind_lake), intent(inout) :: wliq !< liquid water of element 1 + real(kind_lake), intent(inout) :: wice !< ice of element 1 [kg/m2] + real(kind_lake), intent(inout) :: t !< nodel temperature of elment 1 [K] ! ! !CALLED FROM: ! subroutine CombineSnowLayers in this module @@ -4653,26 +4644,27 @@ subroutine Combo(dz, wliq, wice, t, dz2, wliq2, wice2, t2) end subroutine Combo +!> Constructs snow filter for use in vectorized loops for snow hydrology. subroutine BuildSnowFilter(lbc, ubc, num_nolakec, filter_nolakec,snl, & !i num_snowc, filter_snowc, & !o num_nosnowc, filter_nosnowc) !o ! - ! !DESCRIPTION: - ! Constructs snow filter for use in vectorized loops for snow hydrology. + ! DESCRIPTION: + !> Constructs snow filter for use in vectorized loops for snow hydrology. ! ! !USES: ! use clmtype ! ! !ARGUMENTS: implicit none - integer, intent(in) :: lbc, ubc ! column bounds - integer, intent(in) :: num_nolakec ! number of column non-lake points in column filter - integer, intent(in) :: filter_nolakec(ubc-lbc+1) ! column filter for non-lake points - integer, intent(in) :: snl(1) ! number of snow layers - integer, intent(out) :: num_snowc ! number of column snow points in column filter - integer, intent(out) :: filter_snowc(ubc-lbc+1) ! column filter for snow points - integer, intent(out) :: num_nosnowc ! number of column non-snow points in column filter - integer, intent(out) :: filter_nosnowc(ubc-lbc+1) ! column filter for non-snow points + integer, intent(in) :: lbc, ubc !< column bounds + integer, intent(in) :: num_nolakec !< number of column non-lake points in column filter + integer, intent(in) :: filter_nolakec(ubc-lbc+1) !< column filter for non-lake points + integer, intent(in) :: snl(1) !< number of snow layers + integer, intent(out) :: num_snowc !< number of column snow points in column filter + integer, intent(out) :: filter_snowc(ubc-lbc+1) !< column filter for snow points + integer, intent(out) :: num_nosnowc !< number of column non-snow points in column filter + integer, intent(out) :: filter_nosnowc(ubc-lbc+1) !< column filter for non-snow points ! ! !CALLED FROM: ! subroutine Hydrology2 in Hydrology2Mod @@ -4710,7 +4702,13 @@ subroutine BuildSnowFilter(lbc, ubc, num_nolakec, filter_nolakec,snl, & !i end subroutine BuildSnowFilter - + ! DESCRIPTION: + !> Calculation of the friction velocity, relation for potential + !! temperature and humidity profiles of surface boundary layer. + !! The scheme is based on the work of Zeng et al. (1998): + !! Intercomparison of bulk aerodynamic algorithms for the computation + !! of sea surface fluxes using TOGA CORE and TAO data. J. Climate, + !! Vol. 11, 2628-2644. subroutine FrictionVelocity(pgridcell,forc_hgt,forc_hgt_u, & !i forc_hgt_t,forc_hgt_q, & !i lbp, ubp, fn, filterp, & !i @@ -4721,15 +4719,7 @@ subroutine FrictionVelocity(pgridcell,forc_hgt,forc_hgt_u, & !i fm) !i&o !============================================================================= - ! !DESCRIPTION: - ! Calculation of the friction velocity, relation for potential - ! temperature and humidity profiles of surface boundary layer. - ! The scheme is based on the work of Zeng et al. (1998): - ! Intercomparison of bulk aerodynamic algorithms for the computation - ! of sea surface fluxes using TOGA CORE and TAO data. J. Climate, - ! Vol. 11, 2628-2644. - ! - ! !REVISION HISTORY: + ! REVISION HISTORY: ! 15 September 1999: Yongjiu Dai; Initial code ! 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision ! 12/19/01, Peter Thornton @@ -4746,35 +4736,35 @@ subroutine FrictionVelocity(pgridcell,forc_hgt,forc_hgt_u, & !i !in: - integer , intent(in) :: pgridcell(1) ! pft's gridcell index - real(kind_lake), intent(in) :: forc_hgt(1) ! atmospheric reference height (m) - real(kind_lake), intent(in) :: forc_hgt_u(1) ! observational height of wind [m] - real(kind_lake), intent(in) :: forc_hgt_t(1) ! observational height of temperature [m] - real(kind_lake), intent(in) :: forc_hgt_q(1) ! observational height of humidity [m] - integer , intent(in) :: lbp, ubp ! pft array bounds - integer , intent(in) :: fn ! number of filtered pft elements - integer , intent(in) :: filterp(fn) ! pft filter - real(kind_lake), intent(in) :: displa(lbp:ubp) ! displacement height (m) - real(kind_lake), intent(in) :: z0m(lbp:ubp) ! roughness length over vegetation, momentum [m] - real(kind_lake), intent(in) :: z0h(lbp:ubp) ! roughness length over vegetation, sensible heat [m] - real(kind_lake), intent(in) :: z0q(lbp:ubp) ! roughness length over vegetation, latent heat [m] - real(kind_lake), intent(in) :: obu(lbp:ubp) ! monin-obukhov length (m) - integer, intent(in) :: iter ! iteration number - real(kind_lake), intent(in) :: ur(lbp:ubp) ! wind speed at reference height [m/s] - real(kind_lake), intent(in) :: um(lbp:ubp) ! wind speed including the stablity effect [m/s] + integer , intent(in) :: pgridcell(1) !< pft's gridcell index + real(kind_lake), intent(in) :: forc_hgt(1) !< atmospheric reference height (m) + real(kind_lake), intent(in) :: forc_hgt_u(1) !< observational height of wind [m] + real(kind_lake), intent(in) :: forc_hgt_t(1) !< observational height of temperature [m] + real(kind_lake), intent(in) :: forc_hgt_q(1) !< observational height of humidity [m] + integer , intent(in) :: lbp, ubp !< pft array bounds + integer , intent(in) :: fn !< number of filtered pft elements + integer , intent(in) :: filterp(fn) !< pft filter + real(kind_lake), intent(in) :: displa(lbp:ubp) !< displacement height (m) + real(kind_lake), intent(in) :: z0m(lbp:ubp) !< roughness length over vegetation, momentum [m] + real(kind_lake), intent(in) :: z0h(lbp:ubp) !< roughness length over vegetation, sensible heat [m] + real(kind_lake), intent(in) :: z0q(lbp:ubp) !< roughness length over vegetation, latent heat [m] + real(kind_lake), intent(in) :: obu(lbp:ubp) !< monin-obukhov length (m) + integer, intent(in) :: iter !< iteration number + real(kind_lake), intent(in) :: ur(lbp:ubp) !< wind speed at reference height [m/s] + real(kind_lake), intent(in) :: um(lbp:ubp) !< wind speed including the stablity effect [m/s] !out: - real(kind_lake), intent(out) :: ustar(lbp:ubp) ! friction velocity [m/s] - real(kind_lake), intent(out) :: temp1(lbp:ubp) ! relation for potential temperature profile - real(kind_lake), intent(out) :: temp12m(lbp:ubp) ! relation for potential temperature profile applied at 2-m - real(kind_lake), intent(out) :: temp2(lbp:ubp) ! relation for specific humidity profile - real(kind_lake), intent(out) :: temp22m(lbp:ubp) ! relation for specific humidity profile applied at 2-m - real(kind_lake), intent(out) :: u10(1) ! 10-m wind (m/s) (for dust model) - real(kind_lake), intent(out) :: fv(1) ! friction velocity (m/s) (for dust model) + real(kind_lake), intent(out) :: ustar(lbp:ubp) !< friction velocity [m/s] + real(kind_lake), intent(out) :: temp1(lbp:ubp) !< relation for potential temperature profile + real(kind_lake), intent(out) :: temp12m(lbp:ubp) !< relation for potential temperature profile applied at 2-m + real(kind_lake), intent(out) :: temp2(lbp:ubp) !< relation for specific humidity profile + real(kind_lake), intent(out) :: temp22m(lbp:ubp) !< relation for specific humidity profile applied at 2-m + real(kind_lake), intent(out) :: u10(1) !< 10-m wind (m/s) (for dust model) + real(kind_lake), intent(out) :: fv(1) !< friction velocity (m/s) (for dust model) !inout: - real(kind_lake), intent(inout) :: fm(lbp:ubp) ! needed for DGVM only to diagnose 10m wind + real(kind_lake), intent(inout) :: fm(lbp:ubp) !< needed for DGVM only to diagnose 10m wind ! OTHER LOCAL VARIABLES: @@ -4990,8 +4980,8 @@ end subroutine FrictionVelocity ! !INTERFACE: real(kind_lake) function StabilityFunc1(zeta) ! - ! !DESCRIPTION: - ! Stability function for rib < 0. + ! DESCRIPTION: + !> Stability function for rib < 0. ! ! !USES: ! use shr_const_mod, only: SHR_CONST_PI @@ -4999,7 +4989,7 @@ real(kind_lake) function StabilityFunc1(zeta) ! ! !ARGUMENTS: implicit none - real(kind_lake), intent(in) :: zeta ! dimensionless height used in Monin-Obukhov theory + real(kind_lake), intent(in) :: zeta !< dimensionless height used in Monin-Obukhov theory ! ! !CALLED FROM: ! subroutine FrictionVelocity in this module @@ -5033,7 +5023,7 @@ end function StabilityFunc1 real(kind_lake) function StabilityFunc2(zeta) ! ! !DESCRIPTION: - ! Stability function for rib < 0. + !> Stability function for rib < 0. ! ! !USES: !Removed by Zack Subin, 7/9/08 @@ -5041,7 +5031,7 @@ real(kind_lake) function StabilityFunc2(zeta) ! ! !ARGUMENTS: implicit none - real(kind_lake), intent(in) :: zeta ! dimensionless height used in Monin-Obukhov theory + real(kind_lake), intent(in) :: zeta !< dimensionless height used in Monin-Obukhov theory ! ! !CALLED FROM: ! subroutine FrictionVelocity in this module @@ -5071,23 +5061,23 @@ end function StabilityFunc2 subroutine MoninObukIni (ur, thv, dthv, zldis, z0m, um, obu) ! ! !DESCRIPTION: - ! Initialization of the Monin-Obukhov length. - ! The scheme is based on the work of Zeng et al. (1998): - ! Intercomparison of bulk aerodynamic algorithms for the computation - ! of sea surface fluxes using TOGA CORE and TAO data. J. Climate, - ! Vol. 11, 2628-2644. + !> Initialization of the Monin-Obukhov length. + !! The scheme is based on the work of Zeng et al. (1998): + !! Intercomparison of bulk aerodynamic algorithms for the computation + !! of sea surface fluxes using TOGA CORE and TAO data. J. Climate, + !! Vol. 11, 2628-2644. ! ! !USES: ! ! !ARGUMENTS: implicit none - real(kind_lake), intent(in) :: ur ! wind speed at reference height [m/s] - real(kind_lake), intent(in) :: thv ! virtual potential temperature (kelvin) - real(kind_lake), intent(in) :: dthv ! diff of vir. poten. temp. between ref. height and surface - real(kind_lake), intent(in) :: zldis ! reference height "minus" zero displacement heght [m] - real(kind_lake), intent(in) :: z0m ! roughness length, momentum [m] - real(kind_lake), intent(out) :: um ! wind speed including the stability effect [m/s] - real(kind_lake), intent(out) :: obu ! monin-obukhov length (m) + real(kind_lake), intent(in) :: ur !< wind speed at reference height [m/s] + real(kind_lake), intent(in) :: thv !< virtual potential temperature (kelvin) + real(kind_lake), intent(in) :: dthv !< diff of vir. poten. temp. between ref. height and surface + real(kind_lake), intent(in) :: zldis !< reference height "minus" zero displacement heght [m] + real(kind_lake), intent(in) :: z0m !< roughness length, momentum [m] + real(kind_lake), intent(out) :: um !< wind speed including the stability effect [m/s] + real(kind_lake), intent(out) :: obu !< monin-obukhov length (m) ! ! !CALLED FROM: ! subroutine BareGroundFluxes in module BareGroundFluxesMod.F90 @@ -5256,12 +5246,12 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, sand3d, clay3d, tg3, clm_lakedepth, & km, me, master, errmsg, errflg) - ! Some fields in lakeini are not available during initialization, - ! so clm_lake_init cannot complete the initialization. What is not - ! in clm_lake_init, is initialized in lakeini on points where - ! use_lake_model(i)>0. The clm_lake_initialized(i) guards against - ! initializing a point twice. For that to work, - ! clm_lake_initialized must be a restart variable. + !> Some fields in lakeini are not available during initialization, + !! so clm_lake_init cannot complete the initialization. What is not + !! in clm_lake_init, is initialized in lakeini on points where + !! use_lake_model(i)>0. The clm_lake_initialized(i) guards against + !! initializing a point twice. For that to work, + !! clm_lake_initialized must be a restart variable. !============================================================================== ! This subroutine was first edited by Hongping Gu for coupling diff --git a/physics/docs/ccppsrw3_doxyfile b/physics/docs/ccppsrw3_doxyfile new file mode 100644 index 000000000..b1cc3138c --- /dev/null +++ b/physics/docs/ccppsrw3_doxyfile @@ -0,0 +1,557 @@ +# Doxyfile 1.9.3 + +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "CCPP SciDoc for UFS-SRW v3.0.0" +PROJECT_NUMBER = "SRW v3.0.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/RAP_suite.txt \ + 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/CLM_LAKE.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 \ + ../clm_lake.f90 \ + ../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 \ + ../bl_mynn_common.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 \ + ../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/RE300 \ + 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/library.bib b/physics/docs/library.bib index b6109b12c..7c01fbc65 100644 --- a/physics/docs/library.bib +++ b/physics/docs/library.bib @@ -1,13 +1,159 @@ %% This BibTeX bibliography file was created using BibDesk. %% https://bibdesk.sourceforge.io/ -%% Created for Man Zhang at 2022-10-13 16:15:17 -0600 +%% Created for Man Zhang at 2023-06-07 10:17:09 -0600 %% Saved with string encoding Unicode (UTF-8) +@article{Lin_2022, + author = {Jialin Lin and Taotao Qian and Peter Bechtold and Georg Grell and Guang J. Zhang and Ping Zhu and Saulo R. Freitas and Hannah Barnes and Jongil Han}, + date-added = {2023-06-07 10:16:46 -0600}, + date-modified = {2023-06-07 10:16:46 -0600}, + doi = {10.1080/07055900.2022.2082915}, + journal = {Atmosphere-Ocean}, + month = {jul}, + number = {3-4}, + pages = {422--476}, + publisher = {Informa {UK} Limited}, + title = {Atmospheric Convection}, + url = {https://doi.org/10.1080%2F07055900.2022.2082915}, + volume = {60}, + year = 2022, + bdsk-url-1 = {https://doi.org/10.1080%2F07055900.2022.2082915}, + bdsk-url-2 = {https://doi.org/10.1080/07055900.2022.2082915}} + +@techreport{He_2023, + author = {He, Cenlin and Valayamkunnath, Prasanth and Barlage, Michael and Chen, Fei and Gochis, David and Cabell, Ryan and Schneider, Tim and Rasmussen, Roy and Niu, Guo-Yue and Yang, Zong-Liang and Niyogi, Dev and Ek, Michael}, + date-added = {2023-06-06 12:37:33 -0600}, + date-modified = {2023-06-06 12:39:16 -0600}, + doi = {10.5065/EW8G-YR95}, + publisher = {NCAR/UCAR}, + title = {The Community Noah-MP Land Surface Modeling System Technical Description Version 5.0}, + url = {https://opensky.ucar.edu/islandora/object/technotes:599}, + year = {2023}, + bdsk-url-1 = {https://opensky.ucar.edu/islandora/object/technotes:599}, + bdsk-url-2 = {https://doi.org/10.5065/EW8G-YR95}} + +@article{Niu_2007, + author = {Guo-Yue Niu and Zong-Liang Yang}, + date-added = {2023-06-05 14:03:26 -0600}, + date-modified = {2023-06-05 14:03:26 -0600}, + doi = {10.1029/2007jd008674}, + journal = {Journal of Geophysical Research}, + month = {nov}, + number = {D21}, + publisher = {American Geophysical Union ({AGU})}, + title = {An observation-based formulation of snow cover fraction and its evaluation over large North American river basins}, + url = {https://doi.org/10.1029%2F2007jd008674}, + volume = {112}, + year = 2007, + bdsk-url-1 = {https://doi.org/10.1029%2F2007jd008674}, + bdsk-url-2 = {https://doi.org/10.1029/2007jd008674}} + +@techreport{Oleson2013, + author = {Oleson, Keith and Lawrence, David and Bonan, Gordon and Drewniak, Beth and Huang, Maoyi and Koven, Charles and Levis, Samuel and Li, Fang and Riley, William and Subin, Zachary and Swenson, Sean and Thornton, Peter and Bozbiyik, Anil and Fisher, Rosie and Heald, Colette and Kluzek, Erik and Lamarque, Jean-Francois and Lawrence, Peter and Leung, L and Lipscomb, William and Muszala, Stefan and Ricciuto, Daniel and Sacks, William and Sun, Ying and Tang, Jinyun and Yang, Zong-Liang}, + date-added = {2023-06-05 09:28:16 -0600}, + date-modified = {2023-06-05 09:30:30 -0600}, + doi = {10.5065/D6RR1W7M}, + keywords = {Land surface model, Climate model, Biogeochemistry, Biogeophysics}, + language = {en}, + publisher = {UCAR/NCAR}, + title = {Technical description of version 4.5 of the Community Land Model (CLM)}, + url = {http://opensky.ucar.edu/islandora/object/technotes:515}, + year = {2013}, + bdsk-url-1 = {http://opensky.ucar.edu/islandora/object/technotes:515}, + bdsk-url-2 = {https://doi.org/10.5065/D6RR1W7M}} + +@article{Kourzeneva_2012, + author = {Ekaterina Kourzeneva and Hermann Asensio and Eric Martin and Stephanie Faroux}, + date-added = {2023-05-30 11:29:07 -0600}, + date-modified = {2023-05-30 11:29:07 -0600}, + doi = {10.3402/tellusa.v64i0.15640}, + journal = {Tellus A: Dynamic Meteorology and Oceanography}, + month = {dec}, + number = {1}, + pages = {15640}, + publisher = {Stockholm University Press}, + title = {Global gridded dataset of lake coverage and lake depth for use in numerical weather prediction and climate modelling}, + url = {https://doi.org/10.3402%2Ftellusa.v64i0.15640}, + volume = {64}, + year = 2012, + bdsk-url-1 = {https://doi.org/10.3402%2Ftellusa.v64i0.15640}, + bdsk-url-2 = {https://doi.org/10.3402/tellusa.v64i0.15640}} + +@article{Gu2015, + abstract = {A one-dimensional (1-D) physically based lake model was coupled to the Weather Research and Forecasting (WRF) model version 3.2 developed by the National Center for Atmospheric Research to dynamically simulate physical processes of lakes and their effects on weather and climate at local and regional scales. Our study area is focused on the Great Lakes. This coupled model realistically reproduces the lake surface temperature (LST) at a buoy station in a shallow lake (Lake Erie) while generating strong LST biases ranging from −20 to 20 {\textdegree}C at a buoy station in a deep lake (Lake Superior). Through many sensitivity tests, we find that the biases in the deep lake LST simulations result from the drastic underestimation of heat transfer between the lower and upper parts of the lake through unrealistic eddy diffusion. Additional tests were made to calibrate the eddy diffusivity in WRF-Lake. It is found that when this parameter is multiplied by a factor ranging from 102 to 105 for various lake depths deeper than 15 m, the LST simulations for the deep lake buoy station show good agreement with observations, and the bias range reduces to {\textpm}4 {\textdegree}C. Essentially, the enlarged eddy diffusivity strengthens heat transfer within the lake columns in the deep lake, which is significantly underestimated in the lake model without calibration. Validation simulations with the calibrated eddy diffusivity were carried out for the whole of Lake Superior and Lake Erie. The LST simulations still have a substantial bias reduction when compared with those produced with the original eddy diffusivity, indicating that the calibrated parameter is representative. In addition, the improved 1-D lake model with WRF reasonably reproduces the remotely sensed LST geographic distribution.}, + author = {Gu, Hongping and Jin, Jiming and Wu, Yihua and Ek, Michael B. and Subin, Zachary M.}, + date-added = {2023-05-24 14:45:55 -0600}, + date-modified = {2023-05-24 14:45:55 -0600}, + day = {01}, + doi = {10.1007/s10584-013-0978-y}, + issn = {1573-1480}, + journal = {Climatic Change}, + month = {Apr}, + number = {3}, + pages = {471--483}, + title = {Calibration and validation of lake surface temperature simulations with the coupled WRF-lake model}, + url = {https://link.springer.com/content/pdf/10.1007/s10584-013-0978-y.pdf}, + volume = {129}, + year = {2015}, + bdsk-url-1 = {https://link.springer.com/content/pdf/10.1007/s10584-013-0978-y.pdf}, + bdsk-url-2 = {https://doi.org/10.1007/s10584-013-0978-y}} + +@article{Subin_2012, + author = {Zachary M. Subin and William J. Riley and Dmitrii Mironov}, + date-added = {2023-05-24 14:35:27 -0600}, + date-modified = {2023-05-24 14:35:27 -0600}, + doi = {10.1029/2011ms000072}, + journal = {Journal of Advances in Modeling Earth Systems}, + month = {feb}, + publisher = {American Geophysical Union ({AGU})}, + title = {An improved lake model for climate simulations: Model structure, evaluation, and sensitivity analyses in {CESM}1}, + url = {https://doi.org/10.1029%2F2011ms000072}, + volume = {4}, + year = 2012, + bdsk-url-1 = {https://doi.org/10.1029%2F2011ms000072}, + bdsk-url-2 = {https://doi.org/10.1029/2011ms000072}} + +@article{Lawrence_2019, + author = {David M. Lawrence and Rosie A. Fisher and Charles D. Koven and Keith W. Oleson and Sean C. Swenson and Gordon Bonan and Nathan Collier and Bardan Ghimire and Leo van Kampenhout and Daniel Kennedy and Erik Kluzek and Peter J. Lawrence and Fang Li and Hongyi Li and Danica Lombardozzi and William J. Riley and William J. Sacks and Mingjie Shi and Mariana Vertenstein and William R. Wieder and Chonggang Xu and Ashehad A. Ali and Andrew M. Badger and Gautam Bisht and Michiel van den Broeke and Michael A. Brunke and Sean P. Burns and Jonathan Buzan and Martyn Clark and Anthony Craig and Kyla Dahlin and Beth Drewniak and Joshua B. Fisher and Mark Flanner and Andrew M. Fox and Pierre Gentine and Forrest Hoffman and Gretchen Keppel-Aleks and Ryan Knox and Sanjiv Kumar and Jan Lenaerts and L. Ruby Leung and William H. Lipscomb and Yaqiong Lu and Ashutosh Pandey and Jon D. Pelletier and Justin Perket and James T. Randerson and Daniel M. Ricciuto and Benjamin M. Sanderson and Andrew Slater and Zachary M. Subin and Jinyun Tang and R. Quinn Thomas and Maria Val Martin and Xubin Zeng}, + date-added = {2023-05-24 14:34:12 -0600}, + date-modified = {2023-05-24 14:34:12 -0600}, + doi = {10.1029/2018ms001583}, + journal = {Journal of Advances in Modeling Earth Systems}, + month = {dec}, + number = {12}, + pages = {4245--4287}, + publisher = {American Geophysical Union ({AGU})}, + title = {The Community Land Model Version 5: Description of New Features, Benchmarking, and Impact of Forcing Uncertainty}, + url = {https://doi.org/10.1029%2F2018ms001583}, + volume = {11}, + year = 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}, + date-modified = {2023-05-24 10:51:47 -0600}, + doi = {10.5194/gmd-15-6659-2022}, + journal = {Geoscientific Model Development}, + number = {17}, + pages = {6659--6676}, + title = {Inland lake temperature initialization via coupled cycling with atmospheric data assimilation}, + url = {https://gmd.copernicus.org/articles/15/6659/2022/}, + volume = {15}, + year = {2022}, + bdsk-url-1 = {https://gmd.copernicus.org/articles/15/6659/2022/}, + bdsk-url-2 = {https://doi.org/10.5194/gmd-15-6659-2022}} + @article{Chaboureau_2005, author = {Jean-Pierre Chaboureau}, date-added = {2022-10-13 16:14:54 -0600}, @@ -3663,6 +3809,18 @@ @article{tsiringakis_et_al_2017 year = {2017}, bdsk-url-1 = {https://doi.org/10.1002/qj.3021}} +@article{sturm_1997, + author = {Sturm, Matthew and Holmgren, Jon and K{\"o}nig, Max and Morris, Kim}, + doi = {10.3189/S0022143000002781}, + journal = {Journal of Glaciology}, + number = {143}, + pages = {26--41}, + publisher = {Cambridge University Press}, + title = {The thermal conductivity of seasonal snow}, + volume = {43}, + year = {1997}, + bdsk-url-1 = {https://doi.org/10.3189/S0022143000002781}} + @comment{BibDesk Static Groups{ diff --git a/physics/docs/pdftxt/CLM_LAKE.txt b/physics/docs/pdftxt/CLM_LAKE.txt new file mode 100644 index 000000000..c091d2b17 --- /dev/null +++ b/physics/docs/pdftxt/CLM_LAKE.txt @@ -0,0 +1,59 @@ +/** +\page CLM_LAKE_model CLM Lake Model +\section des_clmlake Description + +CLM lake model is a multi-level one-dimensional lake model that has been implemented within the operational 3-km HRRR and +13-km RAP for small lakes (Benjamin et al. (2022) \cite gmd-15-6659-2022). It is the Community Land Model, version 4.5. +Subin et al. (2012) \cite Subin_2012 describe the 1-d CLM lake model as applied within the Community Earth System +Model (CESM) as a component of the overall CESM CLM (Lawrence et al. (2019) \cite Lawrence_2019). Gu et al. (2015) \cite Gu2015 +describe the introduction of the CLM lake model into the WRF model and inital experiments using its 1-d solution for both +lakes Superior (average depth of 147 m) and Erie (average depth of 19 m). + +The atmospheric inputs into the model are temperature, water vapor, horizontal wind components from the lowest atmospheric level +and short-wave and longwave radiative fluxes. The CLM lake model then provides latent heat and sensible heat fluxes back to the +atmosphere. It also computes 2-m temperature/moisture, skin temperature, lake temperature, ice fraction, ice thickness, snow water +equivalent and snow depth. The CLM lake model divides the vertical lake profile into 10 layers driven by wind-driven eddies. The +thickness of the top layer is fixed to 10-cm and the rest of the lake depth is divided evenly into the other 9 layers. Energy +transfer (heat and kinetic energy) occurs between lake layers via eddy and molecular diffusion as a function of the vertical +temperature gradient. The CLM lake model also uses a 10-layer soil model beneath the lake, a multi-layer ice formation model and +up to 5-layer snow-on-ice model. Multiple layers in lake model have the potential to better represent vertical mixing processes +in the lake. + +Testing of the CLM lake model within RAP/HRRR applications showed computational efficiency of the model with no change of even +0.1% in run time. The lake/snow variables have to be continuously transfered within the CLM lake model from one forecast to another, +constrained by the atmospheric data assimilation. The lake-cycling initialization in RAP/HRRR has been effective overall, owing to +accurate houly estimates of near-surface temperature, moisture and winds, and shortwave and longwave estimates provided to the 1-d CLM +lake model every time step (Benjamin et al. (2022) \cite gmd-15-6659-2022). Cycling technique showed improvements over initializing +lake temperatures from the SST analysis, problematic for small water bodies. The improvements are particularly eminent during transition +periods between cold and warm seasons, and in the regions with anomalies in weather conditions. The CLM lake model has the potential +to improve surface prediction in the vicinity of small lakes. + +The CLM lake model requires bathymetry for the lake points in the model domain. Grid points are assigned as lake points when the +fraction of lake coverage in the grid cell exceeds 50% and when this point is disconnected from oceans. The lake water mask is +therefore binary, set to either 1 or 0. This binary approach for models with higher horizontal resolution, for example, 3-km resolution in +the regional application of UFS (RRFS), is capable of capturing the effect of lakes on regional heat and moisture fluxes. + +Lake depths for the RRFS lake configuration (Fig.1) are assigned from a global dataset provided by Kourzeneva et al.(2012) \cite Kourzeneva_2012, +this dataset is referred to as GLOBv3 bathymetry in the UFS_UTL. + +\image html Lake_depths_RRFS3km.png "Figure 1: Lake depths for lakes in the 3-km RRFS domain." width=600 + +To cold-start the CLM lake model in RRFS: +- Use the CLM option in the input.nml +\n - lkm = 1 +\n - iopt_lake = 2 +- Lake temperature is initialized from interpolation between SST at the surface and \f$-4^oC\f$ at 50-m depth +\n - A special case is for the Great Salt Lake, the temperature is limited with +/- 3 K from the bi-weekly climatology +- Temperature for soil under the lake is initialized from bottom lake temperature at the top to the substrate soil temperature at the bottom of soil layer +- Lake ice at the top level is initialized from the GFS ice concentration + +The differences of surface variables from the RRFS 6-h forecast with/without CLM lake model are shown in Figure 2 for 2-m temperature and in Figure 3 for 2-m dewpoint. +\image html diff_t2m_lake_rrfs.png "Figure 2: Differences of 2-m temperature between the RRFS coupled to the CLM model and the RRFS without CLM." width=600 +\image html diff_td2m_lake_rrfs.png "Figure 3: Differences of 2-m dew point between the RRFS coupled to the CLM model and the RRFS without CLM." width=600 + + + +\section intra_clmlake Intraphysics Communication +- \ref arg_table_clm_lake_run + +*/ diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt index 92b8c3b7c..f30cb28dc 100644 --- a/physics/docs/pdftxt/CU_GF_deep.txt +++ b/physics/docs/pdftxt/CU_GF_deep.txt @@ -3,26 +3,22 @@ \section gfcu_descrip Description The Grell-Freitas (GF) scheme, as described in Grell and Freitas (2014) \cite grell_and_freitas_2014, -Freitas et al. (2018) \cite freitas_et_al_2018, Freitas et al. (2021) \cite freitas_et_al_2021, and Lin et al. (2022) -(under review) follows the mass flux approach published by Grell (1993) \cite grell_1993. +Freitas et al. (2018) \cite freitas_et_al_2018, Freitas et al. (2021) \cite freitas_et_al_2021, and Lin et al. (2022) \cite Lin_2022 +follows the mass flux approach published by Grell (1993) \cite grell_1993. Further developments by Grell and \f$D\acute{e}v\acute{e}nyi\f$ (2002) \cite Grell_2002 included implementing -stochastics through allowing parameter perturbations. In GF1 scale awareness, and the aerosol dependence through rain generation (following +stochastics through allowing parameter perturbations. In GF scale awareness, and the aerosol dependence through rain generation (following Berry (1968) \cite berry_1968 and evaporation formulations (following Jiang et al. (2010) \cite Jiang_2010 ), depending on the -cloud concentration nuclei at cloud base were added. FG included mixed phase physics impact, momentum transport (as in ECMWF), +cloud concentration nuclei at cloud base were added. GF included mixed phase physics impact, momentum transport, a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction -and transition from shallow, congestus and deep convection regimes. In order for this trimodal size spectrum to be -accurately represented, GF's deep and shallow convective schemes must be run together. -The vertical massflux distribution of shallow, congestus and +and transition from shallow, congestus and deep convection regimes. The vertical massflux distribution of shallow, congestus and deep convection regimes is characterized by Probability Density Functions (PDF's). The three PDF's are meant to represent the average statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived -from the PDF's. The deep convection considers scale awareness (Arakawa et al. (2011) \cite Arakawa_2011 ), the congestus type convection -as well as the shallow convection are not scale-aware. Aerosol dependence is implemented through dependence of rain generation and +from the PDF's. The deep and congestus convection considers scale awareness (Arakawa et al. (2011) \cite Arakawa_2011 ), the shallow convection is not scale-aware. Aerosol dependence is implemented through dependence of rain generation and evaporation formulations depending on the cloud concentration nuclei at cloud base (Berry 1968 \cite berry_1968, -Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Aerosol dependence is considered experimental and +Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Wet scavenging is considered to add a memory impact. Aerosol dependence is considered experimental and is turned off at this point. GF is able to transport tracers. -A paper describing the latest changes and modifications is in process and will be submitted to GMD. \section version_cugf_enh CCPP Physics Updates \version CCPP v6.0.0 @@ -42,6 +38,20 @@ transition as grid spacing decreases into a shallow convection scheme - Coupled to the grid scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated precipitating convective cloud and shallow convective clouds +\version UFS-SRW v3.0.0 +- The choices of closures for deep/mid/shallow convection are now namelist options +- Updates for aerosol-awareness + +\b The \b Implementation \b of \b GF \b in \b RRFS + +- Scale-awareness is turned off when explicit microphysics is not active anywhere in the column +- GF completely is turned off at grid points when MYNN produces shallow convection at that point +- Radar reflectivity considers mass flux PDF as well as whether scale-awareness is turned on at the grid point in equation. + +\b The \b implementation \b of \b GF \b in \b HAFS \b is \b undergoing. + + + \section intra_rough_gf Intraphysics Communication The GF scheme passes cloud hydrometeors to the grid-scale microphysics scheme (\ref THOMPSON ) through detrainment from each convective cloud layer containing convective cloud. The detrained condensate interacts with short- and longwave radiation by diff --git a/physics/docs/pdftxt/GFS_NOAHMP.txt b/physics/docs/pdftxt/GFS_NOAHMP.txt index bc2c58457..83e8c0650 100644 --- a/physics/docs/pdftxt/GFS_NOAHMP.txt +++ b/physics/docs/pdftxt/GFS_NOAHMP.txt @@ -4,21 +4,17 @@ 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: -[University of Texas at Austin NoahMP Documentation](http://www.jsg.utexas.edu/noah-mp "University of Texas at Austin NoahMP Documentation") +Technical documentation freely available at He et al. (2023) \cite He_2023. -[NCAR Research Application Laboratory NoahMP Documentation](https://ral.ucar.edu/solutions/products/noah-multiparameterization-land-surface-model-noah-mp-lsm "NCAR RAL NoahMP Documentation") +To cite the technical documentation: He, C., P. Valayamkunnath, M. Barlage, F. Chen, D. Gochis, R. Cabell, T. Schneider, R. Rasmussen, G.-Y. Niu, Z.-L. Yang, D. Niyogi, and M. Ek (2023): The Community Noah-MP Land Surface Modeling System Technical Description Version 5.0, (No. NCAR/TN-575+STR). doi:10.5065/ew8g-yr95 A primary reference for the NoahMP LSM is Niu et al. (2011) \cite niu_et_al_2011. -The CCPP interface to the NoahMP LSM is a driving software layer on top of the actual NoahMP LSM. During the run sequence, code organization is as follows: -+ \ref noahmpdrv_run() calls - + \ref transfer_mp_parameters() - + \ref noahmp_options() - + \ref noahmp_options_glacier() and noahmp_glacier() if over the ice vegetation type (glacier) - + \ref noahmp_sflx() if over other vegetation types - + \ref penman() - -Note that noahmp_glacer() and noahmp_sflx() are the actual NoahMP codes. +\section noahmp_update CCPP Physics Updates +\version UFS-SRW v3.0.0 +- As part of a larger-scale effort to unify how microphysics outputs (in particular snow) are used in the land models and outputs, an addition option for using the unified frozen precipitation fraction in NoahMP was added +- Diagnostic 2-meter temperature and humidity are based on vegetation and bare-ground tiles +- Bug fixes for GFS-based thermal roughness length scheme \section intra_noahmp Intraphysics Communication + \ref arg_table_noahmpdrv_run diff --git a/physics/docs/pdftxt/GFS_UGWPv0.txt b/physics/docs/pdftxt/GFS_UGWPv0.txt index f2b3b143a..1b3f0166f 100644 --- a/physics/docs/pdftxt/GFS_UGWPv0.txt +++ b/physics/docs/pdftxt/GFS_UGWPv0.txt @@ -108,6 +108,52 @@ and dynamical instability of waves described by the linear (Lindzen 1981 \cite lindzen_1981) and nonlinear (Weinstock 1984 \cite weinstock_1984; Hines 1997 \cite hines_1997) saturation theories. +\section ugwp_updates CCPP Physics Updates +\version UFS-SRW v3.0.0 + +We have added optional diagnostic outputs for the various tendencies supplied by the UGWP. They can be switched on by setting the two following input namelist variables equal to “.true.”: \p ldiag3d and \p ldiag_ugwp. + +The optional diagnostic outputs are: +- \b dws3dt_ogw: time-averaged wind speed tendency due to mesoscale gravity wave drag +- \b dws3dt_obl: time-averaged wind speed tendency due to blocking drag +- \b dws3dt_oss: time-averaged wind speed tendency due to small-scale gravity wave drag +- \b dws3dt_ofd: time-averaged wind speed tendency due to turbulent orographic form drag +- \b ldu3dt_ogw: time-averaged x wind tendency due to mesoscale orographic gravity wave drag +- \b ldu3dt_obl: time-averaged x wind tendency due to blocking drag +- \b ldu3dt_oss: time-averaged x wind tendency due to small scale gravity wave drag +- \b ldu3dt_ofd: time-averaged x wind tendency due to form drag +- \b ldu3dt_ngw: time-averaged u momentum tendency due to non-stationary gravity wave drag +- \b ldv3dt_ngw: time-averaged v momentum tendency due to non-stationary gravity wave drag +- \b ldt3dt_ngw: time-averaged temperature tendency due to non-stationary gravity wave drag +- \b dudt_ogw: instantaneous x wind tendency from mesoscale orographic gravity wave drag +- \b dvdt_ogw: instantaneous y wind tendency from mesoscale orographic gravity wave drag +- \b dudt_obl: instantaneous x wind tendency from blocking drag +- \b dvdt_obl: instantaneous y wind tendency from blocking drag +- \b dudt_oss: instantaneous x wind tendency from small scale GWD +- \b dvdt_oss: instantaneous y wind tendency from small scale GWD +- \b dudt_ofd: instantaneous x wind tendency from form drag +- \b dvdt_ofd: instantaneous y wind tendency from form drag +- \b du_ogwcol: instantaneous integrated x momentum flux from mesoscale orographic gravity wave drag +- \b dv_ogwcol: instantaneous integrated y momentum flux from mesoscale orographic gravity wave drag +- \b du_oblcol: instantaneous integrated x momentum flux from blocking drag +- \b dv_oblcol: instantaneous integrated y momentum flux from blocking drag +- \b du_osscol: instantaneous integrated x momentum flux from small scale gwd +- \b dv_osscol: instantaneous integrated y momentum flux from small scale gwd +- \b du_ofdcol: instantaneous integrated x momentum flux from form drag +- \b dv_ofdcol: instantaneous integrated y momentum flux from form drag +- \b du3_ogwcol: time-averaged surface x momentum flux from mesoscale orographic gravity wave drag +- \b dv3_ogwcol: time-averaged surface y momentum flux from mesoscale orographic gravity wave drag +- \b du3_oblcol: time-averaged surface x momentum flux from blocking drag +- \b dv3_oblcol: time-averaged surface y momentum flux from blocking drag +- \b du3_osscol: time-averaged surface x momentum flux from small scale gravity wave drag +- \b dv3_osscol: time-averaged surface y momentum flux from small scale gravity wave drag +- \b du3_ofdcol: time-averaged surface x momentum flux from form drag +- \b dv3_ofdcol: time-averaged surface y momentum flux from form drag + +Note that the relevant diag_table entries for these variables are included in: +ufs-weather-model/tests/parm/diag_table/diag_table_rap + + \section intra_UGWPv0 Intraphysics Communication - \ref arg_table_cires_ugwp_run diff --git a/physics/docs/pdftxt/GFS_v16_suite.txt b/physics/docs/pdftxt/GFS_v16_suite.txt index 11e997bf1..8966d6be8 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 RE210/FV3_GFS_v16_input.nml GFDL_CLOUD_MP_NML +\snippet RE300/FV3_GFS_v16_input.nml GFDL_CLOUD_MP_NML Other namelist options -\snippet RE210/FV3_GFS_v16_input.nml GFS_PHYSICS_NML +\snippet RE300/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 c08f50211..d8b529ada 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 RE210/FV3_HRRR_input.nml GFS_PHYSICS_NML +\snippet FV3_HRRR_input.nml GFS_PHYSICS_NML */ diff --git a/physics/docs/pdftxt/NoahMP.txt b/physics/docs/pdftxt/NoahMP.txt deleted file mode 100644 index f42aaaa00..000000000 --- a/physics/docs/pdftxt/NoahMP.txt +++ /dev/null @@ -1,41 +0,0 @@ -/** -\page NoahMP GFS 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: - -[University of Texas at Austin NoahMP Documentation](http://www.jsg.utexas.edu/noah-mp "University of Texas at Austin NoahMP Documentation") - -[NCAR Research Application Laboratory NoahMP Documentation](https://ral.ucar.edu/solutions/products/noah-multiparameterization-land-surface-model-noah-mp-lsm "NCAR RAL NoahMP Documentation") - -A primary reference for the NoahMP LSM is Niu et al. (2011) \cite niu_et_al_2011. - -The CCPP interface to the NoahMP LSM is a driving software layer on top of the actual NoahMP LSM. During the run sequence, code organization is as follows: -+ \ref noahmpdrv_run() calls - + \ref transfer_mp_parameters() - + \ref noahmp_options() - + \ref noahmp_options_glacier() and noahmp_glacier() if over the ice vegetation type (glacier) - + \ref noahmp_sflx() if over other vegetation types - + \ref penman() - -Note that noahmp_glacer() and noahmp_sflx() are the actual NoahMP codes. - -\section Default NoahMP LSM Options used in UFS atmosphere -+ Dynamic Vegetation (opt_dveg): 2 [On] -+ Canopy Stomatal Resistance (opt_crs): 1 [Ball-Berry] -+ Soil Moisture Factor for Stomatal Resistance (opt_btr): 1 [Noah soil moisture] -+ Runoff and Groundwater (opt_run): 1 [topmodel with groundwater (Niu et al. 2007 \cite niu_et_al_2007)] -+ Surface Layer Drag Coeff (opt_sfc): 1 [Monin-Obukhov] -+ Supercooled Liquid Water or Ice Fraction (opt_frz): 1 [no iteration (Niu and Yang, 2006 \cite niu_and_yang_2006)] -+ Frozen Soil Permeability (opt_inf): 1 [linear effects, more permeable (Niu and Yang, 2006, \cite niu_and_yang_2006)] -+ Radiation Transfer (opt_rad): 1 [modified two-stream (gap = f(solar angle, 3d structure ...)<1-fveg)] -+ Ground Snow Surface Albedo (opt_alb): 2 [class] -+ Partitioning Precipitation into Rainfall & Snowfall (opt_snf): 4 [use microphysics output] -+ Lower Boundary Condition of Soil Temperature (opt_tbot): 2 [tbot at zbot (8m) read from a file (original Noah)] -+ Snow/Soil Temperature Time Scheme (only layer 1) (opt_stc): 1 [semi-implicit; flux top boundary condition] - -\section intra_noahmp Intraphysics Communication - + GFS NoahMP LSM Driver (\ref arg_table_noahmpdrv_run) -\section gen_al_noahmp General Algorithm of Driver -+ \ref general_noahmpdrv -*/ diff --git a/physics/docs/pdftxt/RAP_suite.txt b/physics/docs/pdftxt/RAP_suite.txt index 3b16315e7..425bf40ff 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 RE210/SCM_RAP_input.nml GFS_PHYSICS_NML +\snippet SCM_RAP_input.nml GFS_PHYSICS_NML */ diff --git a/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml b/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml new file mode 100644 index 000000000..23ca37f9c --- /dev/null +++ b/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml @@ -0,0 +1,335 @@ +&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 + max_output_fields = 450 + 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 = 12000000 + 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.002 + dnats = 1 + do_sat_adj = .true. + do_schmidt = .true. + do_vort_damp = .true. + dwind_2d = .false. + dz_min = 6 + 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 = 220 + npy = 132 + 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_tofd = .true. + do_ugwp = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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 + iopt_trs = 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. + lsm = 1 + lsoil = 4 + lwhtr = .true. + nsfullradar_diag = 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. + sfclay_compute_flux = .false. + 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 +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&surf_map_nml +/ diff --git a/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml b/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml new file mode 100644 index 000000000..8a7d621f3 --- /dev/null +++ b/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml @@ -0,0 +1,293 @@ +&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 + max_output_fields = 450 + 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 = 12000000 + 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 = 220 + npy = 132 + 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 + 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. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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 + iopt_trs = 2 + iovr = 3 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + kice = 9 + ldiag3d = .false. + lheatstrg = .false. + lradar = .true. + lsm = 3 + lsoil = 4 + lsoil_lsm = 9 + ltaerosol = .true. + lwhtr = .true. + nsfullradar_diag = 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. + sfclay_compute_flux = .true. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/FV3_RAP_input.nml b/physics/docs/pdftxt/RE300/FV3_RAP_input.nml new file mode 100644 index 000000000..ef3f44fc5 --- /dev/null +++ b/physics/docs/pdftxt/RE300/FV3_RAP_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_RAP' + 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 + max_output_fields = 450 + 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 = 12000000 + 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 = 220 + npy = 132 + 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 + 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 = .true. + 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 = 3 + imfshalcnv = 3 + 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 + iopt_trs = 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 + nsfullradar_diag = 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. + sfclay_compute_flux = .false. + shal_cnv = .true. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/FV3_RRFS_v1beta_input.nml b/physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml new file mode 100644 index 000000000..97a0f1216 --- /dev/null +++ b/physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml @@ -0,0 +1,285 @@ +&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 + 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 + max_output_fields = 450 + 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 = 12000000 + 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 = 220 + npy = 132 + 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 + 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. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + iopt_trs = 2 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + lheatstrg = .false. + lradar = .true. + lsm = 2 + lsoil = 4 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + nsfullradar_diag = 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. + sfclay_compute_flux = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/FV3_WoFS_v0_input.nml b/physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml new file mode 100644 index 000000000..1236cde3b --- /dev/null +++ b/physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml @@ -0,0 +1,291 @@ +&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_WoFS_v0' + 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 + max_output_fields = 450 + 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 = 12000000 + 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 = 220 + npy = 132 + 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.02 + 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 + 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. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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. + lradar = .true. + lsm = 1 + lsoil = 4 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + nsfullradar_diag = 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. + sfclay_compute_flux = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/namelists/input.nml.develop.FV3_GFS_v16 b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_GFS_v16 new file mode 100644 index 000000000..6dac0ecaf --- /dev/null +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_GFS_v16 @@ -0,0 +1,330 @@ +&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 + max_output_fields = 450 + 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 = 12000000 + 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.002 + dnats = 1 + do_sat_adj = .true. + do_schmidt = .true. + do_vort_damp = .true. + dwind_2d = .false. + dz_min = 6 + 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 = 220 + npy = 132 + 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_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. +/ + +&gfs_physics_nml + cal_pre = .false. + cdmbgwd = 4.0, 0.15, 1.0, 1.0 + cnvcld = .true. + cnvgwd = .true. + debug = .false. + do_tofd = .true. + do_ugwp = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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 + iopt_trs = 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. + lsm = 1 + lsoil = 4 + lwhtr = .true. + nsfullradar_diag = 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. + sfclay_compute_flux = .false. + shal_cnv = .true. + swhtr = .true. + trans_trac = .true. + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&mpp_io_nml + deflate_level = 1 + shuffle = 1 +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&surf_map_nml +/ diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_HRRR b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_HRRR new file mode 100644 index 000000000..8a7d621f3 --- /dev/null +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_HRRR @@ -0,0 +1,293 @@ +&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 + max_output_fields = 450 + 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 = 12000000 + 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 = 220 + npy = 132 + 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 + 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. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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 + iopt_trs = 2 + iovr = 3 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + kice = 9 + ldiag3d = .false. + lheatstrg = .false. + lradar = .true. + lsm = 3 + lsoil = 4 + lsoil_lsm = 9 + ltaerosol = .true. + lwhtr = .true. + nsfullradar_diag = 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. + sfclay_compute_flux = .true. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/namelists/input.nml.develop.FV3_RAP b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RAP new file mode 100644 index 000000000..ef3f44fc5 --- /dev/null +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RAP @@ -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_RAP' + 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 + max_output_fields = 450 + 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 = 12000000 + 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 = 220 + npy = 132 + 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 + 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 = .true. + 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 = 3 + imfshalcnv = 3 + 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 + iopt_trs = 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 + nsfullradar_diag = 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. + sfclay_compute_flux = .false. + shal_cnv = .true. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/namelists/input.nml.develop.FV3_RRFS_v1beta b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RRFS_v1beta new file mode 100644 index 000000000..97a0f1216 --- /dev/null +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RRFS_v1beta @@ -0,0 +1,285 @@ +&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 + 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 + max_output_fields = 450 + 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 = 12000000 + 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 = 220 + npy = 132 + 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 + 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. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + iopt_trs = 2 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + lheatstrg = .false. + lradar = .true. + lsm = 2 + lsoil = 4 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + nsfullradar_diag = 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. + sfclay_compute_flux = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/namelists/input.nml.develop.FV3_WoFS_v0 b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_WoFS_v0 new file mode 100644 index 000000000..1236cde3b --- /dev/null +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_WoFS_v0 @@ -0,0 +1,291 @@ +&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_WoFS_v0' + 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 + max_output_fields = 450 + 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 = 12000000 + 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 = 220 + npy = 132 + 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.02 + 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 + 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. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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. + lradar = .true. + lsm = 1 + lsoil = 4 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + nsfullradar_diag = 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. + sfclay_compute_flux = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../../../scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/namelists/input.nml.v21.FV3_GFS_v16 b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_GFS_v16 new file mode 100644 index 000000000..6dc85900b --- /dev/null +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_GFS_v16 @@ -0,0 +1,336 @@ +&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 = 5000000 + 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 = 220 + npy = 132 + 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_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. +/ + +&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 + iopt_trs = 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. + sfclay_compute_flux = .false. + shal_cnv = .true. + swhtr = .true. + trans_trac = .true. + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&mpp_io_nml + deflate_level = 1 + shuffle = 1 +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&surf_map_nml +/ diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_HRRR b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_HRRR new file mode 100644 index 000000000..cd9408a4d --- /dev/null +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_HRRR @@ -0,0 +1,299 @@ +&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 = 5000000 + 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 = 220 + npy = 132 + 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 + 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 + iopt_trs = 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. + sfclay_compute_flux = .true. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/namelists/input.nml.v21.FV3_RRFS_v1beta b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_RRFS_v1beta new file mode 100644 index 000000000..97e775107 --- /dev/null +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_RRFS_v1beta @@ -0,0 +1,291 @@ +&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 + 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 = 5000000 + 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 = 220 + npy = 132 + 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 + 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_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + iopt_trs = 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. + sfclay_compute_flux = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/namelists/input.nml.v21.FV3_WoFS_v0 b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_WoFS_v0 new file mode 100644 index 000000000..94cc34d0f --- /dev/null +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_WoFS_v0 @@ -0,0 +1,297 @@ +&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_WoFS_v0' + 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 = 5000000 + 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 = 220 + npy = 132 + 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.02 + 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 + 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. + sfclay_compute_flux = .false. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&nam_sfcperts +/ + +&nam_sppperts +/ + +&nam_stochy +/ + +&namsfc + fabsl = 99999 + faisl = 99999 + faiss = 99999 + fnacna = '' + fnaisc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' + fnglac = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_glacier.2x2.grb' + fnmskh = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/seaice_newland.grb' + fnmxic = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_maxice.2x2.grb' + fnsmcc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_soilmgldas.t126.384.190.grb' + fnsnoa = '' + fnsnoc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_snoclim.1.875.grb' + fntsfa = '' + fntsfc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/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. +/ + +&namsfc_dict + fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' + fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' + fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' + fnslpc = '../fix_lam/C403.slope_type.tileX.nc' + fnsotc = '../fix_lam/C403.soil_type.tileX.nc' + fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' + fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' + fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' + fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' +/ + +&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/RE300/suite_FV3_GFS_v16.xml b/physics/docs/pdftxt/RE300/suite_FV3_GFS_v16.xml new file mode 100644 index 000000000..122b937e1 --- /dev/null +++ b/physics/docs/pdftxt/RE300/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/RE300/suite_FV3_HRRR.xml b/physics/docs/pdftxt/RE300/suite_FV3_HRRR.xml new file mode 100644 index 000000000..6ac35db14 --- /dev/null +++ b/physics/docs/pdftxt/RE300/suite_FV3_HRRR.xml @@ -0,0 +1,82 @@ + + + + + + + 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 + lsm_ruc + clm_lake + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + rrfs_smoke_wrapper + mynnedmf_wrapper + rrfs_smoke_postpbl + 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/RE300/suite_FV3_RAP.xml b/physics/docs/pdftxt/RE300/suite_FV3_RAP.xml new file mode 100644 index 000000000..f03c1a1e8 --- /dev/null +++ b/physics/docs/pdftxt/RE300/suite_FV3_RAP.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 + 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 + + + + + GFS_stochastics + + + + diff --git a/physics/docs/pdftxt/RE300/suite_FV3_RRFS_v1beta.xml b/physics/docs/pdftxt/RE300/suite_FV3_RRFS_v1beta.xml new file mode 100644 index 000000000..97228c0a6 --- /dev/null +++ b/physics/docs/pdftxt/RE300/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/RE300/suite_FV3_WoFS_v0.xml b/physics/docs/pdftxt/RE300/suite_FV3_WoFS_v0.xml new file mode 100644 index 000000000..1a34ba1a1 --- /dev/null +++ b/physics/docs/pdftxt/RE300/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/RUCLSM.txt b/physics/docs/pdftxt/RUCLSM.txt index 00b064e5f..461348aa4 100644 --- a/physics/docs/pdftxt/RUCLSM.txt +++ b/physics/docs/pdftxt/RUCLSM.txt @@ -9,11 +9,11 @@ as part of the RAP from 2012 through the present and as part of HRRR from 2014 t processes in the RUC LSM (Smirnova et al. 2016 \cite Smirnova_2016 ) have proven to be physically robust and capable of realistically representing the evolution of soil moisture, soil temperature, and snow in cycled models. Extension of the RAP domain to encompass all of North America and adjacent high-latitude ocean areas necessitated further development of the RUC LSM for application in the tundra permafrost regions and over Arctic -sea ice (Smirnova et al. 2000 \cite Smirnova_2000). Other modifications include refinements in the snow model and a more accurate specification of -albedo, roughness length, and other surface properties. These recent modifications in the RUC LSM are described and evaluated in +sea ice (Smirnova et al. 2000 \cite Smirnova_2000). Other modifications include refinements in the snow model (snow "mosaic" approach, improvements in computation of snow cover fraction and snow thermal conductivity) and a more accurate specification of +albedo, roughness length, and other surface properties. Some of these recent modifications in the RUC LSM are described and evaluated in Smirnova et al. 2016 \cite Smirnova_2016 . -The parameterizations in the RUC LSM describe complicated atmosphere–land surface interactions in an intentionally simplified fashion to avoid +The parameterizations in the RUC LSM describe complicated atmosphere–land surface interactions (Fig.1) in an intentionally simplified fashion to avoid excessive sensitivity to multiple uncertain surface parameters. Nevertheless, the RUC LSM, when coupled with the hourly-assimilating atmospheric model, demonstrated over years of ongoing cycling (Benjamin et al. 2004a,b \cite Benjamin_2004a \cite Benjamin_2004b ; Berbery et al. 1999 \cite Berbery_1999) that it can produce a realistic evolution of hydrologic and time-varying soil fields (i.e., soil moisture and temperature) that cannot be directly @@ -28,88 +28,93 @@ included in phase 2(d) of the Project for the Intercomparison of Land Surface Pr Luo et al. 2003 \cite Luo_2003 ). The RUC LSM was also tested during the Snow Models Intercomparison Project (SnowMIP, SnowMIP2, ESM-SnowMIP), with emphasis on snow parameterizations for both grassland and forest locations in different parts of the world (Etchevers et al. 2002, 2004 \cite Etchevers_2002 \cite Etchevers_2004; Essery et al. 2009 \cite Essery_2009 ; Rutter et al. 2009 \cite Rutter_2009 , -Krinner et al. 2018 \cite Krinner_2018 ). The analysis of RUC LSM performance over 10 reference sites in ESM-SnowMIP rated it on the 5th place +Krinner et al. 2018 \cite Krinner_2018 ). The analysis of RUC LSM performance over 10 reference sites in ESM-SnowMIP rated it on the 4th place among the 26 participating models. The results were published in Menard et al.(2021) \cite Menard_2021 and Essery et al. (2020) \cite essery_et_al_2020. RUC LSM received high rankings in ESM-SnowMIP experiement in terms of multi-year snow cover and surface temperature simulations -for several sites located in different parts of the world (Menard et al.2021 \cite Menard_2021). +for several sites located in different parts of the world (Fig.2, Menard et al.2021 \cite Menard_2021). -RUC LSM is used in several weather prediction models around the world (Austria, New Zealand, Switzerland, RAP/HRRR in US). Recent RUC LSM implementation in the high-resolution model in the Swiss Alps led to some small modifications and adjustments to the snow model. -These adjustments will be available in the next CCPP public release. +RUC LSM is used in several weather prediction models around the world (Austria, New Zealand, Switzerland, RAP/HRRR in US). Recent RUC LSM implementation in the 1km-resolution model over Europe revealed some issues in the snow-covered high terrain (Swiss Alps), and this led to some small modifications and adjustments to the snow model. +These adjustments are available in the current CCPP public release. - -Coupling of the RUC LSM to physically-based stochastic snow model (He et al.(2021) \cite he_et_al_2021) will be implemented in the next public release. +Coupling of the RUC LSM to physically-based stochastic snow model (He et al.(2021) \cite he_et_al_2021) is also available in the current public release. The sensitivity of surface fluxes and turbine-height winds to the RUC LSM parameters has been explored by Geng Xia, NREL. This study will determine the uncertainty range for the selected parameters in the RUC LSM and will be described in the journal paper. ## RUC LSM characteristics that differ from NOAH LSM: -\image html ruc_lsm_veg_soil.png "Figure 1. RUC LSM Vegetation and Soil Model (Courtesy of T.G. Smirnova) " width=900 +\image html ruc_lsm_veg_soil.png "Figure 1: RUC LSM Vegetation and Soil Model (Courtesy of T.G. Smirnova) " width=900 +\image html ruc_ranking.png "Figure 2: Model ranking as a function of normalized root mean square error of snow water equivalent and surface temperature (Courtesy of C. Menard)" width=900 - \b Implicit \b solution of energy and moisture budgets in the layer spanning the ground surface - \b 9 \b soil \b levels with high vertical resolution near surface -RUC LSM has more levels in oil than \ref GFS_NOAH model with higher resolution near the interface with the atmosphere +RUC LSM has more levels in soil than \ref GFS_NOAH model with higher resolution near the interface with the atmosphere - \b Prognostic \b soil moisture variable (\f$\theta-\theta_r\f$) The prognostic variables for soil moisture is volumetric soil moisture content minus residual value of soil moisture which is tied to soil particles and does not participate in moisture transport. - \b Frozen \b soil \b physics algorithm RUC LSM has a different approach to take into account freezing and thawing processes in soil. -- Treatment of \b mixed \b phase \b precipitation -It accounts for mixed phase precipitation provided by \ref THOMPSON used in RAP and HRRR. -- Simple treatment of \b sea \c ice which solves heat diffusion in sea ice and allows evolving snow cover on top of sea ice -- sub-grid-scale \b heterogeneity of surface parameters in RUC LSM +- Treatment of \b mixed \b phase \b precipitation accounts for mixed phase precipitation provided by \ref THOMPSON used in RAP and HRRR. +- Simple treatment of \b sea \b ice which solves heat diffusion in sea ice and allows evolving snow cover on top of sea ice +- Sub-grid-scale \b heterogeneity of surface parameters in RUC LSM (Fig.3). With the certain level of confidence in the skill of the model, the next requirement is to provide land static fields and surface -parameters with the best possible accuracy. RAP and HRRR use the same datasets as \ref GFS_NOAH. But instead of specifying surface -parameters for the dominant soil and land-use category in the grid box, RUC LSM takes into account the sub-grid scale heterogeneity +parameters with the best possible accuracy. RAP and HRRR use the same soil/vegetation calssifications as \ref GFS_NOAH. But in addition to +specifying surface +parameters for the dominant soil and land-use category in the grid box, RUC LSM has an option to take into account the sub-grid scale heterogeneity in the computation of such parameters as roughness length, emissivity, soil porosity, soil heat capacity and others. The difference in -roughness between the mosaic and dominant category presented on figure 2 is positive from contribution of the forests, which helped to -reduce high biases of surface wind speeds in these regions. Roughness lenghth has also seasonal variability in the cropland regions, -which again helped to improve the wind forecasts during the warm season. -\image html ruc_lsm_heterogeneity.png "Figure 2: sub-grid scale heterogeneity of surface parameters in RUC LSM (Courtesy of T.G. Smirnova)" width=900 +roughness between the mosaic and dominant category presented on Figure 3, is positive from contribution of the forests, which helped to +reduce high biases of surface wind speeds in these regions. In the cropland regions, roughness lenghth has also a seasonal variability depending on the growing phase of the plants. This again helped to improve the wind forecasts during the warm season. +Turning on sub-grid-scale heterogeneity option requries: \p mosaic_lu = 1 and \p mosaic_soil = 1 in the namelist, and fractions of soil and vegetation types in a grid cell. +\image html ruc_lsm_heterogeneity.png "Figure 3: sub-grid scale heterogeneity of surface parameters in RUC LSM (Courtesy of T.G. Smirnova)" width=900 -- New: simple irrigation in the cropland area +- New: simple irrigation in the cropland area with \p mosaic_lu = 1 - New: water/snow intercepted by canopy as function of vegetation fraction and leaf area index (LAI) ## RUC snow model characteristics: Snow forms additional two layers on top of soil in RUC LSM -- \b 2-layer \b snow model: when SWE < 1.6 cm - snow layer is combined with top soil layer -- Fractional snow cover (SWE < 3 cm): -- weighted average of snow-covered and snow-free areas to compute snow paramters (roughness, albedo) -- New: "mosaic" approach for patchy snow - - Seperate treatment of energy and moisture budgets for snow-covered and snow-free portions of the grid cell +- \b 2-layer \b snow model: when SWE < 1.6 cm - snow layer is combined with top soil layer; +- Fractional snow cover (SWE < 3 cm); +- Weighted average of snow-covered and snow-free areas to compute snow parameters (roughness, albedo); +- "Mosaic" approach for patchy snow (Fig.4): + - Separate treatment of energy and moisture budgets for snow-covered and snow-free portions of the grid cell - Aggregate solutions at the end of time step - - Reduced cold bias for areas with thin snow -\image html ruc_lsm_mosaic.png "Figure 3: recent development: mosaic approach for patchy snow (Courtesy of T.G. Smirnova) " width=900 -- Iterative snow melting algorithm -- Density of snow on the ground - a function of compaction parameter and snow depth and temperature -- Snow albedo - a function of temperature and snow fraction -- Snow interception by canopy - a function of vegetation fraction and LAI -- Density of falling snow/graupel/ice precipitation + - Outcome: reduced cold bias for areas with thin snow +\image html ruc_lsm_mosaic.png "Figure 4: 'Mosaic' approach for patchy snow (Courtesy of T.G. Smirnova) " width=900 + - New: additional options to compute snow cover fraction (\p isncovr_opt =2 and 3, Niu and Yang (2007) \cite Niu_2007). These options allowed to reduce overprediction of number of grid cells fully covered with snow which further reduced cold-biases over snow. Figure 5 demonstrates that option 3 of snow cover fraction computation (\p isncovr_opt = 3) in the UFS-based regional model matches better the satellite data for the test case on 6 February 2022. +- New: added an option to use of a new formulation of snow thermal conductivity (\p isncond_opt = 2, Sturm et al. (1997) \cite sturm_1997); +\image html sncov_rrfs_ruc.png "Figure 5: Snow cover fraction from MODIS (a,b), Regional UFS-based system (RRFS) original (c), and modified with isncover_opt=3 (d), 6 February 2022. (Courtesy of T.G. Smirnova)" width=900 +- Iterative snow melting algorithm; +- Density of snow on the ground - a function of compaction parameter and snow depth and temperature; +- Snow albedo - a function of temperature and snow fraction; +- Snow interception by canopy - a function of vegetation fraction and leaf area index (LAI); +- Density of falling snow/graupel/ice precipitation (Fig.6) - The density of falling snow/graupel/ice is computed inside RUC LSM using empirical temperature-dependent equations; - Averaged density of frozen precipitation is defined from weighted contribution of each hydrometeor species: \f[ \rho_{fr}=\rho_{sn}*\alpha_{sn}+\rho_{gr}*\alpha_{gr}+\rho_{ice}*\alpha_{ice} + \f] +Where subscripts sn, gr, ice - snow, graupel and ice precipitation, respectively. - The depth of new snow is defined from its liquid equivalent and \f$\rho_{fr}\f$ -\image html ruc_lsm_frozen_precip.png "Figure 4: HRRR 23-h forecasts of snow accumulation, valid 08 UTC, 29 Dec 2015 (Courtesy of T.G. Smirnova)" width=900 +\image html ruc_lsm_frozen_precip.png "Figure 6: HRRR 23-h forecasts of snow accumulation, valid 08 UTC, 29 Dec 2015 (Courtesy of T.G. Smirnova)" width=900 -snow accumulation with variable density is provided as an additional product in the model guidance. Figure 4 shows one example of this product +Snow accumulation with variable density is provided as an additional product in the model guidance. Figure 6 shows one example of this product from the 23-h HRRR forecast for snowstorm on 29 Dec 2015. This product is in the middle panel. The panel on the left uses traditional 10:1 ratio, -and the right panel is oberved snow accumulation. We can see that the new product in the middle here has a better, further north location of maximum -snow accumulation, and high ammounts of snow in the product with 10:1 ratio are trimmed in central and southern Iowa where both observed and model +and the right panel is observed snow accumulation. We can see that the new product in the middle here has a better, further north location of maximum +snow accumulation, and high amounts of snow in the product with 10:1 ratio are trimmed in central and southern Iowa where both observed and model precipitation had a high content of sleet. There is even larger improvement in the Chicago area, where observed and model precipitation were almost totally sleet. \section v6_updates_ruc Physics Updates -\version CCPP V6.0.0 +\version UFS-SRW v3.0.0 - Initialization of land and ice emissivity with consideration of partial snow cover - Initialization of land and ice albedo with consideration of partial snow cover - Initialization of water vapor mixing ratio over land and ice +- Initialization of fractions of soil and vegetation types in a grid cell - Changes in the computation of a flag for sea ice: it is set to true only if \p flag_cice = .false. (uncoupled sea ice model) - Introduced separate variables for sea ice, for example: \p showfallac is replaced with \p snowfallac_ice -- Added accomodation of fractional surface grid (land and ice fractions are possible within the grid cell) -- Introduced solar angle dependence of albedo for snow-free land -- Introduced a SPP option for stochastic perturbations for emissivity, albedo and vegetation fraction -- Bug fix in hydraulic conductivity +- Added accommodation of fractional surface grid (land and ice fractions are possible within the grid cell) +- Solar angle dependence of albedo for snow-free land +- SPP option for stochastic perturbations for emissivity, albedo and vegetation fraction - Based on RRFS testing, the coefficient in the soil resistance formulation (Sakaguchi and Zeng (2009) \cite sakaguchi_and_zeng_2009) -was increased from 0.5 to 0.7 to increase soil resistance to evaporation +was increased from 0.7 to 1.0 to increase soil resistance to evaporation \section intra_ruclsm Intraphysics Communication diff --git a/physics/docs/pdftxt/SRW_all_shemes_list.txt b/physics/docs/pdftxt/SRW_all_shemes_list.txt index bb320008e..db9683579 100644 --- a/physics/docs/pdftxt/SRW_all_shemes_list.txt +++ b/physics/docs/pdftxt/SRW_all_shemes_list.txt @@ -46,6 +46,9 @@ The UFS-SRW App. assembles the parameterizations in suites. - \subpage GFS_OCEAN - \subpage GFS_SFCSICE +\b CLM \b Lake \b Model + - \subpage CLM_LAKE_model + \b Others - \subpage GFS_SPP diff --git a/physics/docs/pdftxt/SRW_mainpage.txt b/physics/docs/pdftxt/SRW_mainpage.txt index 154b1b0eb..59b551d55 100644 --- a/physics/docs/pdftxt/SRW_mainpage.txt +++ b/physics/docs/pdftxt/SRW_mainpage.txt @@ -1,15 +1,16 @@ /** \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 3.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 +The CCPP parameterizations are aggregated in suites by the host models. In this release, the UFS Short-Range Weather Application 3.0 supports suites: - \ref GFS_v16_page - \ref HRRR_suite_page - \ref RRFS_v1beta_page - \ref WoFS_v0_page +- \ref rap_suite_page */ diff --git a/physics/docs/pdftxt/THOMPSON.txt b/physics/docs/pdftxt/THOMPSON.txt index 60a873de9..fed003ebd 100644 --- a/physics/docs/pdftxt/THOMPSON.txt +++ b/physics/docs/pdftxt/THOMPSON.txt @@ -84,6 +84,15 @@ increases numerical stability by applying the subtime step only to sedimentation Two namelist variables control the usage of the semi-Lagrangian sedimentation, \p sedi_semi and \p decfl. \p sedi_semi is set to ‘true’ to activate the method. Decfl is a parameter that needs to avoid deformation of the arriving grids, currently, "10". +\version SRW v3.0.0 + +- The ice generation supersaturation requirement for nonaerosol option is reduced from 0.25 to 0.15. The purpose is to generate more ice in +the upper level and reduce the OLR bias. + +- For the non-aerosol option of the scheme, the cloud number concentration is divided into two parts (over land and others). The number +concentration over the ocean is reduced to a smaller numer (50/L) from its default (100/L). The purpose is to reduce the bias in surface +downward shortwave radiative flux off the coastal regional including the Southeast Pacific. + \section intra_thompson Intraphysics Communication - \ref arg_table_mp_thompson_run From 7ec1eb82fc1f3caccb37e52102840efdfa52c814 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Fri, 9 Jun 2023 11:32:06 -0600 Subject: [PATCH 06/44] Some format and file size adjustments --- physics/docs/pdftxt/HRRR_suite.txt | 1 + physics/docs/pdftxt/RAP_suite.txt | 4 +- .../docs/pdftxt/RE300/FV3_GFS_v16_input.nml | 152 +++++++-------- physics/docs/pdftxt/RE300/FV3_HRRR_input.nml | 164 ++++++++-------- physics/docs/pdftxt/RE300/FV3_RAP_input.nml | 174 ++++++++--------- .../pdftxt/RE300/FV3_RRFS_v1beta_input.nml | 172 ++++++++--------- .../docs/pdftxt/RE300/FV3_WoFS_v0_input.nml | 176 +++++++++--------- physics/docs/pdftxt/SRW_all_shemes_list.txt | 30 ++- physics/docs/pdftxt/SRW_mainpage.txt | 4 +- 9 files changed, 444 insertions(+), 433 deletions(-) diff --git a/physics/docs/pdftxt/HRRR_suite.txt b/physics/docs/pdftxt/HRRR_suite.txt index d8b529ada..33a1eb0b8 100644 --- a/physics/docs/pdftxt/HRRR_suite.txt +++ b/physics/docs/pdftxt/HRRR_suite.txt @@ -17,6 +17,7 @@ The HRRR suite uses the parameterizations in the following order: - \ref SFC_MYNNSFL - \ref GFS_NSST - \ref RUCLSM + - \ref CLM_LAKE_model - \ref MYNNEDMF - \ref GFS_drag_suite - \ref GFS_OZPHYS diff --git a/physics/docs/pdftxt/RAP_suite.txt b/physics/docs/pdftxt/RAP_suite.txt index 425bf40ff..0371050b0 100644 --- a/physics/docs/pdftxt/RAP_suite.txt +++ b/physics/docs/pdftxt/RAP_suite.txt @@ -23,9 +23,9 @@ The RAP suite uses the parameterizations in the following order: - \ref THOMPSON \section sdf_gsdsuite Suite Definition File -\include suite_SCM_RAP.xml +\include suite_FV3_RAP.xml \section RAP_nml_option Namelist -\snippet SCM_RAP_input.nml GFS_PHYSICS_NML +\snippet FV3_RAP_input.nml GFS_PHYSICS_NML */ diff --git a/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml b/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml index 23ca37f9c..6fd84ec22 100644 --- a/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml +++ b/physics/docs/pdftxt/RE300/FV3_GFS_v16_input.nml @@ -179,93 +179,93 @@ 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. + 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_tofd = .true. - do_ugwp = .false. - dspheat = .true. - effr_in = .true. - fhcyc = 0.0 - fhlwr = 3600.0 - fhswr = 3600.0 - fhzero = 1.0 - h2o_phys = .true. - hybedmf = .false. - iaer = 5111 - ialb = 1 + cal_pre = .false. + cdmbgwd = 4.0, 0.15, 1.0, 1.0 + cnvcld = .true. + cnvgwd = .true. + debug = .false. + do_tofd = .true. + do_ugwp = .false. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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 - iopt_trs = 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. - lsm = 1 - lsoil = 4 - lwhtr = .true. + 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 + iopt_trs = 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. + lsm = 1 + lsoil = 4 + lwhtr = .true. nsfullradar_diag = 3600 - nst_anl = .true. - nstf_name = 2, 1, 0, 0, 0 - oz_phys = .false. + 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. + 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. + prslrd0 = 0.0 + psautco = 0.0008, 0.0005 + random_clds = .false. + redrag = .true. + satmedmf = .true. sfclay_compute_flux = .false. - shal_cnv = .true. - swhtr = .true. - trans_trac = .true. - use_ufo = .true. + shal_cnv = .true. + swhtr = .true. + trans_trac = .true. + use_ufo = .true. / !! [GFS_PHYSICS_NML] diff --git a/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml b/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml index 8a7d621f3..9a89b9a1f 100644 --- a/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml +++ b/physics/docs/pdftxt/RE300/FV3_HRRR_input.nml @@ -140,90 +140,92 @@ 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. - dspheat = .true. - effr_in = .true. - fhcyc = 0.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 - iopt_trs = 2 - iovr = 3 - isol = 2 - isot = 1 - isubc_lw = 2 - isubc_sw = 2 - ivegsrc = 1 - kice = 9 - ldiag3d = .false. - lheatstrg = .false. - lradar = .true. - lsm = 3 - lsoil = 4 - lsoil_lsm = 9 - ltaerosol = .true. - lwhtr = .true. - nsfullradar_diag = 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. + 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. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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 + iopt_trs = 2 + iovr = 3 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + kice = 9 + ldiag3d = .false. + lheatstrg = .false. + lradar = .true. + lsm = 3 + lsoil = 4 + lsoil_lsm = 9 + ltaerosol = .true. + lwhtr = .true. + nsfullradar_diag = 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. sfclay_compute_flux = .true. - shal_cnv = .false. - swhtr = .true. - trans_trac = .true. - ttendlim = -999 - use_ufo = .true. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. / +!![GFS_PHYSICS_NML] &interpolator_nml interp_method = 'conserve_great_circle' diff --git a/physics/docs/pdftxt/RE300/FV3_RAP_input.nml b/physics/docs/pdftxt/RE300/FV3_RAP_input.nml index ef3f44fc5..aa80cac21 100644 --- a/physics/docs/pdftxt/RE300/FV3_RAP_input.nml +++ b/physics/docs/pdftxt/RE300/FV3_RAP_input.nml @@ -140,97 +140,99 @@ grid_file = 'INPUT/grid_spec.nc' / +!>[GFS_PHYSICS_NML] &gfs_physics_nml - bl_mynn_edmf = 1 - bl_mynn_edmf_mom = 1 + 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 = .true. + cal_pre = .false. + cdmbgwd = 3.5, 1.0 + cnvcld = .false. + cnvgwd = .false. + cplflx = .false. + debug = .false. + do_deep = .true. 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 = 3 - imfshalcnv = 3 - 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 - iopt_trs = 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 - nsfullradar_diag = 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. + 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 = 3 + imfshalcnv = 3 + 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 + iopt_trs = 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 + nsfullradar_diag = 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. sfclay_compute_flux = .false. - shal_cnv = .true. - swhtr = .true. - trans_trac = .true. - ttendlim = -999 - use_ufo = .true. + shal_cnv = .true. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. / +!![GFS_PHYSICS_NML] &interpolator_nml interp_method = 'conserve_great_circle' diff --git a/physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml b/physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml index 97a0f1216..aff1b47a5 100644 --- a/physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml +++ b/physics/docs/pdftxt/RE300/FV3_RRFS_v1beta_input.nml @@ -14,20 +14,22 @@ 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_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 + knob_ugwp_wvspec = 1, 25, 25, 25 + launch_level = 25 / +!![CIRES_UGWP_NML] &diag_manager_nml max_output_fields = 450 @@ -139,83 +141,85 @@ grid_file = 'INPUT/grid_spec.nc' / +!>[GFS_PHYSICS_NML] &gfs_physics_nml - bl_mynn_edmf = 1 - bl_mynn_edmf_mom = 1 + 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. - dspheat = .true. - effr_in = .true. - fhcyc = 0.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_snf = 4 - iopt_stc = 1 - iopt_tbot = 2 - iopt_trs = 2 - isol = 2 - isot = 1 - isubc_lw = 2 - isubc_sw = 2 - ivegsrc = 1 - ldiag3d = .false. - lheatstrg = .false. - lradar = .true. - lsm = 2 - lsoil = 4 - lsoil_lsm = 4 - ltaerosol = .true. - lwhtr = .true. - nsfullradar_diag = 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. + 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. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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_snf = 4 + iopt_stc = 1 + iopt_tbot = 2 + iopt_trs = 2 + isol = 2 + isot = 1 + isubc_lw = 2 + isubc_sw = 2 + ivegsrc = 1 + ldiag3d = .false. + lheatstrg = .false. + lradar = .true. + lsm = 2 + lsoil = 4 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + nsfullradar_diag = 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. sfclay_compute_flux = .false. - shal_cnv = .false. - swhtr = .true. - trans_trac = .true. - ttendlim = -999 - use_ufo = .true. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. / +!![GFS_PHYSICS_NML] &interpolator_nml interp_method = 'conserve_great_circle' diff --git a/physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml b/physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml index 1236cde3b..70206c335 100644 --- a/physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml +++ b/physics/docs/pdftxt/RE300/FV3_WoFS_v0_input.nml @@ -14,20 +14,22 @@ 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_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 + knob_ugwp_wvspec = 1, 25, 25, 25 + launch_level = 25 / +!![CIRES_UGWP_NML] &diag_manager_nml max_output_fields = 450 @@ -143,85 +145,87 @@ grid_file = 'INPUT/grid_spec.nc' / +!>[GFS_PHYSICS_NML] &gfs_physics_nml - bl_mynn_edmf = 1 - bl_mynn_edmf_mom = 1 + 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. - dspheat = .true. - effr_in = .true. - fhcyc = 0.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. - lradar = .true. - lsm = 1 - lsoil = 4 - lsoil_lsm = 4 - ltaerosol = .true. - lwhtr = .true. - nsfullradar_diag = 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. + 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. + dspheat = .true. + effr_in = .true. + fhcyc = 0.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. + lradar = .true. + lsm = 1 + lsoil = 4 + lsoil_lsm = 4 + ltaerosol = .true. + lwhtr = .true. + nsfullradar_diag = 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. sfclay_compute_flux = .false. - shal_cnv = .false. - swhtr = .true. - trans_trac = .true. - ttendlim = -999 - use_ufo = .true. + shal_cnv = .false. + swhtr = .true. + trans_trac = .true. + ttendlim = -999 + use_ufo = .true. / +!![GFS_PHYSICS_NML] &interpolator_nml interp_method = 'conserve_great_circle' diff --git a/physics/docs/pdftxt/SRW_all_shemes_list.txt b/physics/docs/pdftxt/SRW_all_shemes_list.txt index db9683579..16a1727e6 100644 --- a/physics/docs/pdftxt/SRW_all_shemes_list.txt +++ b/physics/docs/pdftxt/SRW_all_shemes_list.txt @@ -16,6 +16,7 @@ The UFS-SRW App. assembles the parameterizations in suites. - \subpage GFS_NOAH - \subpage RUCLSM - \subpage NoahMP + - \subpage CLM_LAKE_model \b Cumulus \b Parameterizations - \subpage GFS_SAMFdeep @@ -46,9 +47,6 @@ The UFS-SRW App. assembles the parameterizations in suites. - \subpage GFS_OCEAN - \subpage GFS_SFCSICE -\b CLM \b Lake \b Model - - \subpage CLM_LAKE_model - \b Others - \subpage GFS_SPP @@ -70,21 +68,21 @@ 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. -The UFS Short Range Weather Application (SRW App) v2.1.0 supports four physicsphysics suites. +The UFS Short Range Weather Application (SRW App) v3.0.0 supports four physicsphysics suites. -Table 1. Physics suites and primary schemes supported in SRW v2.1.0 +Table 1. Physics suites and primary schemes supported in SRW v3.0.0 \tableofcontents -| Physics suites | GFS_v16 | HRRR | RRFS_v1beta | WoFS_v0 | -|------------------|--------------------|--------------------------------|--------------------|---------------| -|\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 | +| Physics suites | GFS_v16 | HRRR | RRFS_v1beta | WoFS_v0 | RAP | +|--------------------|--------------------|--------------------------------|--------------------|---------------|---------------| +|\b Deep \b Cu | \ref GFS_SAMFdeep | \a off | \a off | \a off | \ref CU_GF | +|\b Shallow \b Cu | \ref GFS_SAMFshal | \ref MYNNEDMF | \ref MYNNEDMF | \ref MYNNEDMF | \ref CU_GF | +|\b Microphysics | \ref GFDL_cloud | \ref THOMPSON | \ref THOMPSON | \ref NSSLMICRO_page | \ref THOMPSON| +|\b PBL/TURB | \ref GFS_SATMEDMFVDIFQ | \ref MYNNEDMF | \ref MYNNEDMF | \ref MYNNEDMF | \ref MYNNEDMF | +|\b Radiation | \ref GFS_RRTMG | \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 | \ref SFC_MYNNSFL | +|\b LSM | \ref GFS_NOAH | \ref RUCLSM and \ref CLM_LAKE_model | \ref NoahMP | \ref GFS_NOAH | \ref RUCLSM | +|\b Gravity \b Wave \b Drag| \ref GFS_UGWP_v0 | \ref GFS_drag_suite | \ref GFS_UGWP_v0 | \ref GFS_UGWP_v0 | \ref GFS_drag_suite | +|\b Ice and \b Snow | \ref GFS_SFCSICE | \ref RUCLSM | \ref GFS_SFCSICE | \ref GFS_SFCSICE | \ref RUCLSM | \tableofcontents diff --git a/physics/docs/pdftxt/SRW_mainpage.txt b/physics/docs/pdftxt/SRW_mainpage.txt index 59b551d55..8b3791c07 100644 --- a/physics/docs/pdftxt/SRW_mainpage.txt +++ b/physics/docs/pdftxt/SRW_mainpage.txt @@ -1,10 +1,10 @@ /** \mainpage Introduction -Welcome to the scientific documentation for the physical parameterizations available in the Unified Forecast System (UFS) Short-Range Weather (SRW) Application version 3.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 3.0.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 3.0 +The CCPP parameterizations are aggregated in suites by the host models. In this release, the UFS Short-Range Weather Application 3.0.0 supports suites: - \ref GFS_v16_page - \ref HRRR_suite_page From c901390c8e758f63d1e2122d917579230d1def6d Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 15 Jun 2023 11:43:23 -0600 Subject: [PATCH 07/44] address some review comments --- physics/docs/pdftxt/CLM_LAKE.txt | 8 +++--- physics/docs/pdftxt/CU_GF_deep.txt | 17 ++++++------- physics/docs/pdftxt/GFS_NOAHMP.txt | 6 ++--- physics/docs/pdftxt/GFS_SAMFdeep.txt | 3 +-- physics/docs/pdftxt/HRRR_suite.txt | 4 +-- physics/docs/pdftxt/RAP_suite.txt | 6 ++--- physics/docs/pdftxt/RRFS_v1beta_suite.txt | 4 +-- physics/docs/pdftxt/RUCLSM.txt | 9 ++++--- physics/docs/pdftxt/SRW_mainpage.txt | 10 +++++++- physics/docs/pdftxt/WoFS_v0_suite.txt | 5 ++-- physics/docs/pdftxt/suite_input.nml.txt | 30 ++++++++++++++++++----- 11 files changed, 63 insertions(+), 39 deletions(-) diff --git a/physics/docs/pdftxt/CLM_LAKE.txt b/physics/docs/pdftxt/CLM_LAKE.txt index c091d2b17..e0a8d9209 100644 --- a/physics/docs/pdftxt/CLM_LAKE.txt +++ b/physics/docs/pdftxt/CLM_LAKE.txt @@ -2,7 +2,7 @@ \page CLM_LAKE_model CLM Lake Model \section des_clmlake Description -CLM lake model is a multi-level one-dimensional lake model that has been implemented within the operational 3-km HRRR and +The Community Land Model (CLM) lake model is a multi-level one-dimensional lake model that has been implemented within the operational 3-km HRRR and 13-km RAP for small lakes (Benjamin et al. (2022) \cite gmd-15-6659-2022). It is the Community Land Model, version 4.5. Subin et al. (2012) \cite Subin_2012 describe the 1-d CLM lake model as applied within the Community Earth System Model (CESM) as a component of the overall CESM CLM (Lawrence et al. (2019) \cite Lawrence_2019). Gu et al. (2015) \cite Gu2015 @@ -31,14 +31,14 @@ to improve surface prediction in the vicinity of small lakes. The CLM lake model requires bathymetry for the lake points in the model domain. Grid points are assigned as lake points when the fraction of lake coverage in the grid cell exceeds 50% and when this point is disconnected from oceans. The lake water mask is therefore binary, set to either 1 or 0. This binary approach for models with higher horizontal resolution, for example, 3-km resolution in -the regional application of UFS (RRFS), is capable of capturing the effect of lakes on regional heat and moisture fluxes. +in the UFS SRW App, is capable of capturing the effect of lakes on regional heat and moisture fluxes. Lake depths for the RRFS lake configuration (Fig.1) are assigned from a global dataset provided by Kourzeneva et al.(2012) \cite Kourzeneva_2012, this dataset is referred to as GLOBv3 bathymetry in the UFS_UTL. \image html Lake_depths_RRFS3km.png "Figure 1: Lake depths for lakes in the 3-km RRFS domain." width=600 -To cold-start the CLM lake model in RRFS: +To cold-start the CLM lake model in the UFS SRW App: - Use the CLM option in the input.nml \n - lkm = 1 \n - iopt_lake = 2 @@ -47,7 +47,7 @@ To cold-start the CLM lake model in RRFS: - Temperature for soil under the lake is initialized from bottom lake temperature at the top to the substrate soil temperature at the bottom of soil layer - Lake ice at the top level is initialized from the GFS ice concentration -The differences of surface variables from the RRFS 6-h forecast with/without CLM lake model are shown in Figure 2 for 2-m temperature and in Figure 3 for 2-m dewpoint. +The differences of surface variables from the experimental RRFS 6-h forecast with/without CLM lake model are shown in Figure 2 for 2-m temperature and in Figure 3 for 2-m dewpoint. \image html diff_t2m_lake_rrfs.png "Figure 2: Differences of 2-m temperature between the RRFS coupled to the CLM model and the RRFS without CLM." width=600 \image html diff_td2m_lake_rrfs.png "Figure 3: Differences of 2-m dew point between the RRFS coupled to the CLM model and the RRFS without CLM." width=600 diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt index f30cb28dc..365ba9ae0 100644 --- a/physics/docs/pdftxt/CU_GF_deep.txt +++ b/physics/docs/pdftxt/CU_GF_deep.txt @@ -8,20 +8,18 @@ follows the mass flux approach published by Grell (1993) \cite grell_1993. Further developments by Grell and \f$D\acute{e}v\acute{e}nyi\f$ (2002) \cite Grell_2002 included implementing stochastics through allowing parameter perturbations. In GF scale awareness, and the aerosol dependence through rain generation (following Berry (1968) \cite berry_1968 and evaporation formulations (following Jiang et al. (2010) \cite Jiang_2010 ), depending on the -cloud concentration nuclei at cloud base were added. GF included mixed phase physics impact, momentum transport, +cloud concentration nuclei at cloud base were added. The GF scheme includes mixed phase physics impact, momentum transport, a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction -and transition from shallow, congestus and deep convection regimes. The vertical massflux distribution of shallow, congestus and -deep convection regimes is characterized by Probability Density Functions (PDF's). The three PDF's are meant to represent the average +and transition from shallow, congestus and deep convection regimes. The vertical mass flux distribution of shallow, congestus and +deep convection regimes is characterized by Probability Density Functions (PDFs). The three PDF's are meant to represent the average statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived -from the PDF's. The deep and congestus convection considers scale awareness (Arakawa et al. (2011) \cite Arakawa_2011 ), the shallow convection is not scale-aware. Aerosol dependence is implemented through dependence of rain generation and +from the PDF's. The deep and congestus convection considers scale awareness (Arakawa et al. (2011) \cite Arakawa_2011 ). However, the shallow convection is not scale-aware. Aerosol dependence is implemented through dependence of rain generation and evaporation formulations depending on the cloud concentration nuclei at cloud base (Berry 1968 \cite berry_1968, Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Wet scavenging is considered to add a memory impact. Aerosol dependence is considered experimental and is turned off at this point. GF is able to transport tracers. - -\section version_cugf_enh CCPP Physics Updates -\version CCPP v6.0.0 +\b CCPP \b v6.0.0 \b Updates: - GPU capabilities have been added - Cap suppressing (\p do_cap_suppress) based on radar data assimilation has been added. This is used only for the RAP suite @@ -38,9 +36,10 @@ transition as grid spacing decreases into a shallow convection scheme - Coupled to the grid scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated precipitating convective cloud and shallow convective clouds +\section version_cugf_enh CCPP Physics Updates + \version UFS-SRW v3.0.0 -- The choices of closures for deep/mid/shallow convection are now namelist options -- Updates for aerosol-awareness +- Updates for aerosol-awareness (experimental) \b The \b Implementation \b of \b GF \b in \b RRFS diff --git a/physics/docs/pdftxt/GFS_NOAHMP.txt b/physics/docs/pdftxt/GFS_NOAHMP.txt index 83e8c0650..386ae816c 100644 --- a/physics/docs/pdftxt/GFS_NOAHMP.txt +++ b/physics/docs/pdftxt/GFS_NOAHMP.txt @@ -4,11 +4,9 @@ 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: -Technical documentation freely available at He et al. (2023) \cite He_2023. +- Technical documentation freely available at He et al. (2023) \cite He_2023. -To cite the technical documentation: He, C., P. Valayamkunnath, M. Barlage, F. Chen, D. Gochis, R. Cabell, T. Schneider, R. Rasmussen, G.-Y. Niu, Z.-L. Yang, D. Niyogi, and M. Ek (2023): The Community Noah-MP Land Surface Modeling System Technical Description Version 5.0, (No. NCAR/TN-575+STR). doi:10.5065/ew8g-yr95 - -A primary reference for the NoahMP LSM is Niu et al. (2011) \cite niu_et_al_2011. +- A primary reference for the NoahMP LSM is Niu et al. (2011) \cite niu_et_al_2011. \section noahmp_update CCPP Physics Updates \version UFS-SRW v3.0.0 diff --git a/physics/docs/pdftxt/GFS_SAMFdeep.txt b/physics/docs/pdftxt/GFS_SAMFdeep.txt index 346637b3b..d41763c37 100644 --- a/physics/docs/pdftxt/GFS_SAMFdeep.txt +++ b/physics/docs/pdftxt/GFS_SAMFdeep.txt @@ -65,8 +65,7 @@ rain conversion rate, entrainment and detrainment rates, overshooting layers, and maximum allowable cloudbase mass flux (as of June 2018). -\section v6_enh CCPP Physics Updates -\version CCPP v6.0.0 +\b CCPP \b v6.0.0 \b Updates \subsection ca_page Cellular Automata Stochastic Convective Organization Scheme diff --git a/physics/docs/pdftxt/HRRR_suite.txt b/physics/docs/pdftxt/HRRR_suite.txt index 33a1eb0b8..93601b62b 100644 --- a/physics/docs/pdftxt/HRRR_suite.txt +++ b/physics/docs/pdftxt/HRRR_suite.txt @@ -3,10 +3,10 @@ \section HRRR_suite_overview Overview -The HRRR suite contains the parameterizations used in the NOAA operational +The HRRR suite contains the evolving parameterizations used in the NOAA operational High-Resolution Rapid Refresh (HRRR) model, which runs at 3-km resolution. This suite is most applicable for runs at 3-km resolution since it does not -parameterize deep convection. +parameterize deep convection. It is one of the primary suite candidates for RRFS v1 operational implementation. For additional information about the HRRR model, visit: https://rapidrefresh.noaa.gov/hrrr/. diff --git a/physics/docs/pdftxt/RAP_suite.txt b/physics/docs/pdftxt/RAP_suite.txt index 0371050b0..26b9d31f3 100644 --- a/physics/docs/pdftxt/RAP_suite.txt +++ b/physics/docs/pdftxt/RAP_suite.txt @@ -3,9 +3,9 @@ \section rap_suite_overview Overview -The RAP suite contains the parameterizations used in the NOAA operational Rapid Refresh (RAP) model -which runs at 13-km resolution. Currently, the RAP suite is supported in SCM only. For additional -information about the RAP model, visit: https://rapidrefresh.noaa.gov. +The RAP suite contains the evolving parameterizations used in the NOAA operational Rapid Refresh (RAP) model +which runs at 13-km resolution. For additional +information about the RAP model, visit: https://rapidrefresh.noaa.gov. It is one of the primary suite candidates for RRFS v1 operational implementation. The RAP suite uses the parameterizations in the following order: - \ref SGSCLOUD_page diff --git a/physics/docs/pdftxt/RRFS_v1beta_suite.txt b/physics/docs/pdftxt/RRFS_v1beta_suite.txt index 2731e227e..ae400b982 100644 --- a/physics/docs/pdftxt/RRFS_v1beta_suite.txt +++ b/physics/docs/pdftxt/RRFS_v1beta_suite.txt @@ -3,8 +3,8 @@ \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 +The RRFS_v1beta suite is one of candicates for the future operational implementation of +the Rapid Refresh Forecast System (RRFS), which can be configured using the UFS SRW App. This suite is most applicable for runs at 3-km resolution since it does not parameterize deep convection. diff --git a/physics/docs/pdftxt/RUCLSM.txt b/physics/docs/pdftxt/RUCLSM.txt index 461348aa4..7a39faf84 100644 --- a/physics/docs/pdftxt/RUCLSM.txt +++ b/physics/docs/pdftxt/RUCLSM.txt @@ -10,7 +10,7 @@ processes in the RUC LSM (Smirnova et al. 2016 \cite Smirnova_2016 ) have proven the evolution of soil moisture, soil temperature, and snow in cycled models. Extension of the RAP domain to encompass all of North America and adjacent high-latitude ocean areas necessitated further development of the RUC LSM for application in the tundra permafrost regions and over Arctic sea ice (Smirnova et al. 2000 \cite Smirnova_2000). Other modifications include refinements in the snow model (snow "mosaic" approach, improvements in computation of snow cover fraction and snow thermal conductivity) and a more accurate specification of -albedo, roughness length, and other surface properties. Some of these recent modifications in the RUC LSM are described and evaluated in +albedo, roughness length, and other surface properties. Some of these modifications in the RUC LSM are described and evaluated in Smirnova et al. 2016 \cite Smirnova_2016 . The parameterizations in the RUC LSM describe complicated atmosphere–land surface interactions (Fig.1) in an intentionally simplified fashion to avoid @@ -38,9 +38,10 @@ These adjustments are available in the current CCPP public release. Coupling of the RUC LSM to physically-based stochastic snow model (He et al.(2021) \cite he_et_al_2021) is also available in the current public release. -The sensitivity of surface fluxes and turbine-height winds to the RUC LSM parameters has been explored by Geng Xia, NREL. This study -will determine the uncertainty range for the selected parameters in the RUC LSM and will be described in the journal paper. -## RUC LSM characteristics that differ from NOAH LSM: +The sensitivity of surface fluxes and turbine-height winds to the RUC LSM parameters has been explored by Geng Xia, NREL +to determine the uncertainty range for the selected parameters in the RUC LSM. + +## RUC LSM characteristics that differ from Noah LSM: \image html ruc_lsm_veg_soil.png "Figure 1: RUC LSM Vegetation and Soil Model (Courtesy of T.G. Smirnova) " width=900 \image html ruc_ranking.png "Figure 2: Model ranking as a function of normalized root mean square error of snow water equivalent and surface temperature (Courtesy of C. Menard)" width=900 - \b Implicit \b solution of energy and moisture budgets in the layer spanning the ground surface diff --git a/physics/docs/pdftxt/SRW_mainpage.txt b/physics/docs/pdftxt/SRW_mainpage.txt index 8b3791c07..5e854034c 100644 --- a/physics/docs/pdftxt/SRW_mainpage.txt +++ b/physics/docs/pdftxt/SRW_mainpage.txt @@ -1,7 +1,7 @@ /** \mainpage Introduction -Welcome to the scientific documentation for the physical parameterizations available in the Unified Forecast System (UFS) Short-Range Weather (SRW) Application version 3.0.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 3.0.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 3.0.0 @@ -12,5 +12,13 @@ supports suites: - \ref WoFS_v0_page - \ref rap_suite_page +\attention Here all supported suites are a recent snapshot of + +the UFS fork for CCPP . In this regard, GFS_v16 Suite is +not the same code as in the operational GFS v16. First of all, the operational GFS_v16 does not use CCPP at all. +Secondly, most of physics schemes hosted in CCPP repository have marched ahead since GFS was updated to version 16.0 on 22 March 2021. +This implication should be also applied to all other suites: as such, RAP/HRRR suites in this release are +the evolving version of the RAP/HRRR physics in operations. + */ diff --git a/physics/docs/pdftxt/WoFS_v0_suite.txt b/physics/docs/pdftxt/WoFS_v0_suite.txt index 8259ab770..4561109fa 100644 --- a/physics/docs/pdftxt/WoFS_v0_suite.txt +++ b/physics/docs/pdftxt/WoFS_v0_suite.txt @@ -4,8 +4,9 @@ \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 most applicable for -runs at 3-km resolution since it does not parameterize deep convection. +of the NOAA's Warn-on-Forecast System (WoFS) and for the RRFS ensemble. +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/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index be3785b74..11d33db1c 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -50,9 +50,9 @@ show some variables in the namelist that must match the SDF. do_sfcperts gfs_rrtmg_pre flag for stochastic surface perturbations option .false. imp_physics choice of microphysics scheme choice of microphysics scheme: \n
    -
  • 11: GFDL microphysics scheme
  • 8: Thompson microphysics scheme
  • 10: Morrison-Gettelman microphysics scheme +
  • 11: GFDL microphysics scheme
  • 17: NSSL microphysics scheme with background CCN
  • 18: NSSL microphysics scheme with predicted CCN (compatibility)
@@ -258,7 +258,7 @@ show some variables in the namelist that must match the SDF.
  • true: activate TKE advection .false. -bl_mynn_tkebudget mynnedmf_wrapper flag to activate TKE budget 0 +tke_budget mynnedmf_wrapper flag to activating TKE budget 0 bl_mynn_cloudpdf mynnedmf_wrapper flag to determine which cloud PDF to use \n
    • 0: use Sommeria-Deardorff subgrid cloud PDF @@ -384,6 +384,9 @@ show some variables in the namelist that must match the SDF. t_sub gfdl_cloud_microphys temperature threshold for sublimation. Cloud ice, snow or graupel stops(starts) sublimation when temperature is lower(higher) then \p t_sub 184. mp_print gfdl_cloud_microphys \a .true. to turn on GFDL cloud microphysics debugging print out. (not supported in GFS physics) .false. ltaerosol mp_thompson flag for using aerosol climotology in Thompson MP scheme .false. +mraerosol flag for merra2 aerosol aware .false. +lradar flag for radar reflectivity .false. +nsfullradar_diag seconds between resetting radar reflectivity calculation .-999.0 ttendlim mp_thompson temperature tendency limiter per time step in K/s, set to < 0 to deactivate -999.0 ext_diag_thompson mp_thompson flag for extended diagnostic output from Thompson MP .false. thompson_ext_ndiag3d mp_thompson number of 3d arrays for extended diagnostic output from Thompson MP 37 @@ -394,9 +397,11 @@ show some variables in the namelist that must match the SDF. cnvcld see \a GFS_typedefs.F90 flag for convective cloud .false. lgfdlmprad gfs_rrtmg_pre flag for GFDL mp scheme and radiation consistency .false. nssl_cccn mp_nssl CCN concentration (m^-3) 0.6e9 -nssl_alphar mp_nssl rain PSD shape parameter 0.0 -nssl_alphah mp_nssl graupel PSD shape parameter 0.0 -nssl_alphahl mp_nssl hail PSD shape parameter 1.0 +nssl_alphah mp_nssl graupel shape parameter 0.0 +nssl_alphahl mp_nssl hail shape parameter 1.0 +nssl_alphar mp_nssl shape paramter for rain (imurain=1 only) 0.0 +nssl_ehw0_in mp_nssl constant or max assumed graupel-droplet collection efficiency 0.9 +nssl_ehlw0_in mp_nssl constant or max assumed hail-droplet collection efficiency 0.9 nssl_hail_on mp_nssl NSSL flag to activate the hail category .false. nssl_ccn_on mp_nssl NSSL flag to activate the CCN category .true. nssl_invertccn mp_nssl NSSL flag to treat CCN as activated or unactivated .true. @@ -508,15 +513,20 @@ show some variables in the namelist that must match the SDF.
    • 0: USGS
    • 1: IGBP(20 category): IGBP must be selected if NoahMP is used
    • 2: UMD (13 category) +
    • 3: NLCD40 (40 category, NOAH WRFv4 only) +
    • 4: USGS-RUC (28 category, NOAH WRFv4 only) +
    • 5: MODIS-RUC (21 category, NOAH WRFv4 only)
    2 +nvegcat isot lsm_noah, lsm_ruc, \ref noahmpdrv flag for soil type dataset choice:\n
    • 0: Zobler soil type (9 category)
    • 1: STATSGO soil type (19 category): STATSGO must be selected if NoahMP is used +
    • 2: STAS-RUC soil type (19 category, NOAH WRFv4 only
    0 - +exticeden lsm_noah,lsm_ruc flag for calculating frozen precip ice density outside of the LSM .false. iopt_dveg \ref noahmpdrv options for dynamic vegetation \n
    • 1: off (use table LAI; use FVEG = SHDFAC from input) @@ -613,7 +623,15 @@ show some variables in the namelist that must match the SDF.
    • 4: kb inversed
    2 +mosaic_lu +mosaic_soil +isncond_opt +isncovr_opt \b Parameters \b related \b to \b other \b surface \b scheme \b options +lkm +iopt_lake +lakedepth_threshold +lakefrac_threshold nstf_name(5) sfc_nst NSST related paramters:\n
    • nstf_name(1): 0=NSST off, 1= NSST on but uncoupled, 2= NSST on and coupled From 57f72fbc73b9704a23285867645b8927fedc87fb Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Wed, 5 Jul 2023 14:54:28 -0600 Subject: [PATCH 08/44] Scidoc updates --- physics/cu_gf_deep.F90 | 1 + physics/docs/library.bib | 19 +++++++- physics/docs/pdftxt/CU_GF_deep.txt | 28 +++-------- physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt | 33 ++++++++----- physics/docs/pdftxt/suite_input.nml.txt | 58 ++++++++++++++++------- physics/satmedmfvdifq.F | 12 +++-- 6 files changed, 92 insertions(+), 59 deletions(-) diff --git a/physics/cu_gf_deep.F90 b/physics/cu_gf_deep.F90 index 67dd9bd3f..1b30063bd 100644 --- a/physics/cu_gf_deep.F90 +++ b/physics/cu_gf_deep.F90 @@ -28,6 +28,7 @@ module cu_gf_deep integer, parameter :: autoconv=1 !2 integer, parameter :: aeroevap=1 !3 real(kind=kind_phys), parameter :: scav_factor = 0.5 + real(kind=kind_phys), parameter :: dx_thresh = 6500. !> still 16 ensembles for clousres integer, parameter:: maxens3=16 diff --git a/physics/docs/library.bib b/physics/docs/library.bib index 7c01fbc65..34bb54e8f 100644 --- a/physics/docs/library.bib +++ b/physics/docs/library.bib @@ -1,13 +1,30 @@ %% This BibTeX bibliography file was created using BibDesk. %% https://bibdesk.sourceforge.io/ -%% Created for Man Zhang at 2023-06-07 10:17:09 -0600 +%% Created for Man Zhang at 2023-06-28 14:13:48 -0600 %% Saved with string encoding Unicode (UTF-8) +@article{Chen_2022, + author = {Xiaomin Chen and George H. Bryan and Andrew Hazelton and Frank D. Marks and Pat Fitzpatrick}, + date-added = {2023-06-28 14:13:19 -0600}, + date-modified = {2023-06-28 14:13:19 -0600}, + doi = {10.1175/waf-d-21-0168.1}, + journal = {Weather and Forecasting}, + month = {jun}, + number = {6}, + pages = {935--951}, + publisher = {American Meteorological Society}, + title = {Evaluation and Improvement of a {TKE}-Based Eddy-Diffusivity Mass-Flux ({EDMF}) Planetary Boundary Layer Scheme in Hurricane Conditions}, + url = {https://doi.org/10.1175%2Fwaf-d-21-0168.1}, + volume = {37}, + year = 2022, + bdsk-url-1 = {https://doi.org/10.1175%2Fwaf-d-21-0168.1}, + bdsk-url-2 = {https://doi.org/10.1175/waf-d-21-0168.1}} + @article{Lin_2022, author = {Jialin Lin and Taotao Qian and Peter Bechtold and Georg Grell and Guang J. Zhang and Ping Zhu and Saulo R. Freitas and Hannah Barnes and Jongil Han}, date-added = {2023-06-07 10:16:46 -0600}, diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt index 365ba9ae0..1a02516f7 100644 --- a/physics/docs/pdftxt/CU_GF_deep.txt +++ b/physics/docs/pdftxt/CU_GF_deep.txt @@ -16,41 +16,25 @@ statistical mass flux characteristic of deep, congestus, and shallow (respective a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived from the PDF's. The deep and congestus convection considers scale awareness (Arakawa et al. (2011) \cite Arakawa_2011 ). However, the shallow convection is not scale-aware. Aerosol dependence is implemented through dependence of rain generation and evaporation formulations depending on the cloud concentration nuclei at cloud base (Berry 1968 \cite berry_1968, -Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Wet scavenging is considered to add a memory impact. Aerosol dependence is considered experimental and -is turned off at this point. GF is able to transport tracers. +Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Wet scavenging is considered to add a memory impact. Aerosol dependence is considered experimental and is turned off at this point. GF is able to transport tracers. +Recently, GPU capabilities and cap suppressing (\p do_cap_suppress) based on radar data assimilation have been added,and they are used only for the RAP suite. -\b CCPP \b v6.0.0 \b Updates: - -- GPU capabilities have been added -- Cap suppressing (\p do_cap_suppress) based on radar data assimilation has been added. This is used only for the RAP suite -- Some fixed parameters have been made scale-aware -- Updated coupling between radiation and convection has been implemented - -\b Operational \b Impacts \b in \b RAP/HRRR - - - Uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes - - Takes parameterization uncertainty into account by allowing parameters from multiple convective schemes which can be perturbed -internally or with temporal and spatial correlation patterns - - For higher resolutions (less than 10 km), in addition to scale awareness as in Arakawa et al. (2011) \cite Arakawa_2011 GF can -transition as grid spacing decreases into a shallow convection scheme - - Coupled to the grid scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated -precipitating convective cloud and shallow convective clouds +The impacts of GF scheme in operational RAP/HRRR include:(a)uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes; +(b)takes parameterization uncertainty into account by allowing parameters from multiple convective schemes which can be perturbed +internally or with temporal and spatial correlation patterns; (c)for higher resolutions (less than 10 km), in addition to scale awareness as in Arakawa et al. (2011) \cite Arakawa_2011 GF can transition as grid spacing decreases into a shallow convection scheme; (d)Coupled to the grid scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated precipitating convective cloud and shallow convective clouds. \section version_cugf_enh CCPP Physics Updates \version UFS-SRW v3.0.0 -- Updates for aerosol-awareness (experimental) \b The \b Implementation \b of \b GF \b in \b RRFS - +- Updates for aerosol-awareness (experimental) - Scale-awareness is turned off when explicit microphysics is not active anywhere in the column - GF completely is turned off at grid points when MYNN produces shallow convection at that point - Radar reflectivity considers mass flux PDF as well as whether scale-awareness is turned on at the grid point in equation. \b The \b implementation \b of \b GF \b in \b HAFS \b is \b undergoing. - - \section intra_rough_gf Intraphysics Communication The GF scheme passes cloud hydrometeors to the grid-scale microphysics scheme (\ref THOMPSON ) through detrainment from each convective cloud layer containing convective cloud. The detrained condensate interacts with short- and longwave radiation by diff --git a/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt b/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt index 4e00d7c3c..3ae1a0234 100644 --- a/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt +++ b/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt @@ -25,27 +25,34 @@ to take into account nonlocal transport by large eddies(mfpbltq.f) - A new mass-flux paramterization for stratocumulus-top-induced turbulence mixing has been introduced (mfscuq.f; previously, it was an eddy diffusion form) - For local turbulence mixing, a TKE closure model is used. - - -\section v6_pbl_enh CCPP Physics Updates -\version CCPP v6.0.0 - -- Wind shear effect in characteristic mixing length calculation is included, which +- Wind shear effect in characteristic mixing length calculation is included, which reduces the mixing length in a strong shear environment such as a hurricane. -- To better predict surface inversion as well as capping inversion near the PBL top, -background diffusivity in the inversion layers is reduced as a function of surface +- To better predict surface inversion as well as capping inversion near the PBL top, +background diffusivity in the inversion layers is reduced as a function of surface roughness and green vegetation fraction. -- To reduce the PBL overgrowth, the PBL updraft overshoot is not only limited by -bulk Richardson number-based-PBL depth, but the virtual potential temperature at -top of the surface layer rather than that at the model first layer is also used as -the near-surface virtual potential temperature in the bulk-Richardson number +- To reduce the PBL overgrowth, the PBL updraft overshoot is not only limited by +bulk Richardson number-based-PBL depth, but the virtual potential temperature at +top of the surface layer rather than that at the model first layer is also used as +the near-surface virtual potential temperature in the bulk-Richardson number computation. This helps to largely suppress the unrealistic widespread popcorn-like precipitation. - Updraft entrainment rates for moisture, hydrometeors, and tracers are increased by about 30%. -- A positive definite total variation diminishing (TVD) mass-flux transport scheme for moisture, hydrometeors, +- A positive definite total variation diminishing (TVD) mass-flux transport scheme for moisture, hydrometeors, and tracers and a method for removing negative tracer mixing ratio values have been implemented. \sa NCEP Office Note 505 \cite https://doi.org/10.25923/cybh-w893 and 506 \cite https://doi.org/10.25923/5051-3r70 + +\section v6_pbl_enh CCPP Physics Updates +\version UFS-SRW v3.0.0 +- To reduce the negative hurricane intensity biases, a parameterization for environmental wind shear effect +is included in the GFS TKE-EDMF PBL and cumulus schemes. In addition, the entrainment rates are enhanced +proportional to the sub-cloud or PBL mean TKE (turbulent kinetic energy) when TKE is larger than a threshold +value. + +- To enhance the underestimated CAPE forecasts in the GFS, the entrainment rate in the TKE-EDMF PBL scheme is +increased as a function of vegetation fraction and surface roughness length. + + \section intra_satmedmfvdifq Intraphysics Communication - \ref arg_table_satmedmfvdifq_run diff --git a/physics/docs/pdftxt/suite_input.nml.txt b/physics/docs/pdftxt/suite_input.nml.txt index 11d33db1c..e986fc322 100644 --- a/physics/docs/pdftxt/suite_input.nml.txt +++ b/physics/docs/pdftxt/suite_input.nml.txt @@ -222,10 +222,13 @@ show some variables in the namelist that must match the SDF. xkzm_h \ref satmedmfvdifq background vertical diffusion for heat and q 1.0d0 xkzm_m \ref satmedmfvdifq background vertical diffusion for momentum 1.0d0 xkzm_s \ref satmedmfvdifq sigma threshold for background mom. diffusion 1.0d0 -dspfac \ref satmedmfvdifq TKE dissipative heating factor 1.0 +dspfac \ref satmedmfvdifq TKE dissipative heating factor 1.0 bl_upfr \ref satmedmfvdifq updraft fraction in boundary layer mass flux scheme 0.13 bl_dnfr \ref satmedmfvdifq downdraft fraction in boundary layer mass flux scheme 0.1 -grav_settling mynnedmf_wrapper flag to activate gravitational settling of cloud droplets as described in Nakanishi (2000) \cite nakanishi_2000 0 +rlmx \ref satmedmfvdifq maximum allowed mixing length in boundary layer mass flux scheme 300. +elmx \ref satmedmfvdifq maximum allowed dissipation mixing length in boundary layer mass flux scheme 300. +sfc_rlm \ref satmedmfvdifq choice of near surface mixing lenghth in boundary layer mass flux scheme 0 +tc_pbl \ref satmedmfvdifq control for TC applications in the PBL scheme 0 bl_mynn_mixlength mynnedmf_wrapper flag for different version of mixing length formulation \n
      • 0: Original form from Nakanishi and Niino (2009) \cite NAKANISHI_2009 . NO scale-awareness is applied to the master mixing length, regardless of "scaleware" setting @@ -518,7 +521,6 @@ show some variables in the namelist that must match the SDF.
      • 5: MODIS-RUC (21 category, NOAH WRFv4 only)
      2 -nvegcat isot lsm_noah, lsm_ruc, \ref noahmpdrv flag for soil type dataset choice:\n
      • 0: Zobler soil type (9 category) @@ -616,22 +618,42 @@ show some variables in the namelist that must match the SDF.
      1 iopt_trs \ref noahmpdrv options for thermal roughness scheme:\n -
        -
      • 1: z0h=z0m -
      • 2: canopy based czil -
      • 3: ec -
      • 4: kb inversed -
      - 2 -mosaic_lu -mosaic_soil -isncond_opt -isncovr_opt +
        +
      • 1: z0h=z0m +
      • 2: canopy based czil +
      • 3: ec +
      • 4: kb inversed +
      + 2 +mosaic_lu \ref lsm_ruc control for use of fractional landuse in RUC land surface model +
        +
      • 1: use of fractional landuse in RUC LSM +
      + 0 +mosaic_soil \ref lsm_ruc control for use of fractional soil in RUC land surface model +
        +
      • 1: use of fractional soil in RUC LSM +
      + 0 +isncond_opt \ref lsm_ruc control for soil thermal conductivity option in RUC land surface model +
        +
      • 1: constant +
      • 2: Sturm et al.(1997) \cite sturm_1997 +
      + 1 +isncovr_opt \ref lsm_ruc control for snow cover fraction option in RUC land surface model +
        +
      • 1: original formulation using threshold snow depth to compute snow fraction +
      • 2: Niu-Yang(2007) \cite Niu_2007 +
      • 3: updated Niu-Yang similar to Noah MP +
      + 1 \b Parameters \b related \b to \b other \b surface \b scheme \b options -lkm -iopt_lake -lakedepth_threshold -lakefrac_threshold +lkm \ref clm_lake 0: no lake; 1: lake; 2: lake&nsst 0 +iopt_lake \ref clm_lake 1: flake; 2: CLM lake 2 +lakedepth_threshold \ref clm_lake lakedepth must be greater than this value to enable a lake model 1.0 +lakefrac_threshold \ref clm_lake lakefrac must be greater than this value to enable a lake model 0.0 +use_lake2m \ref clm_lake use 2m T&Q from CLM lake model .false. nstf_name(5) sfc_nst NSST related paramters:\n
      • nstf_name(1): 0=NSST off, 1= NSST on but uncoupled, 2= NSST on and coupled diff --git a/physics/satmedmfvdifq.F b/physics/satmedmfvdifq.F index 75925a5f3..73fc4aff8 100644 --- a/physics/satmedmfvdifq.F +++ b/physics/satmedmfvdifq.F @@ -22,7 +22,7 @@ module satmedmfvdifq !! and to reduce the negative wind speed bias in upper troposphere !! !! Incorporate the LES-based changes for TC simulation -!! (Chen et al.,2022, https://doi.org/10.1175/WAF-D-21-0168.1) +!! (Chen et al.,2022 \cite Chen_2022) !! with additional improvements on MF working with Cu schemes !! Xiaomin Chen, 5/2/2022 !! @@ -443,7 +443,9 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntrw, & endif enddo ! -! compute a function for green vegetation fraction and surface roughness +!> - Compute a function for green vegetation fraction and surface roughness. +!! Entrainment rate in updraft is a function of vegetation fraction and surface +!! roughness length ! do i = 1,im tem = (sigmaf(i) - vegflo) / (vegfup - vegflo) @@ -745,7 +747,7 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntrw, & endif enddo ! -! compute mean tke within pbl +!> - Compute mean tke within pbl ! do i = 1, im sumx(i) = 0. @@ -766,8 +768,8 @@ subroutine satmedmfvdifq_run(im,km,ntrac,ntcw,ntrw, & endif enddo ! -! compute wind shear term as a sink term for updraft and downdraft -! velocity +!> - Compute wind shear term as a sink term for updraft and downdraft +!! velocity ! kps = max(kmpbl, kmscu) do k = 2, kps From 8cd25865431326adcb0baba7cf692124abcea5d7 Mon Sep 17 00:00:00 2001 From: Man Zhang Date: Thu, 13 Jul 2023 10:45:18 -0600 Subject: [PATCH 09/44] narrative description for previous update --- physics/docs/pdftxt/GFS_SAMFdeep.txt | 2 -- physics/docs/pdftxt/THOMPSON.txt | 9 ++++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/physics/docs/pdftxt/GFS_SAMFdeep.txt b/physics/docs/pdftxt/GFS_SAMFdeep.txt index d41763c37..1112cb05c 100644 --- a/physics/docs/pdftxt/GFS_SAMFdeep.txt +++ b/physics/docs/pdftxt/GFS_SAMFdeep.txt @@ -65,8 +65,6 @@ rain conversion rate, entrainment and detrainment rates, overshooting layers, and maximum allowable cloudbase mass flux (as of June 2018). -\b CCPP \b v6.0.0 \b Updates - \subsection ca_page Cellular Automata Stochastic Convective Organization Scheme \b Scientific \b Background diff --git a/physics/docs/pdftxt/THOMPSON.txt b/physics/docs/pdftxt/THOMPSON.txt index fed003ebd..4ad481887 100644 --- a/physics/docs/pdftxt/THOMPSON.txt +++ b/physics/docs/pdftxt/THOMPSON.txt @@ -70,10 +70,8 @@ for the model to provide useful guidance for aircraft icing forecasts - Can account for cloud phase changes and provides a sound physical basis for diagnosing precipitation type reaching the ground -\section v6_enh_thompson CCPP Physics Updates -\version CCPP v6.0.0 -Three mechanisms are available improve the stability of the scheme for weather forecast applications: +Recently, three mechanisms have been implemented to improve the stability of the scheme for weather forecast applications: \a inner \a loop, \a subcycle, and \a semi-Lagrangian \a sedimentation \a of \a rain \a and \a graupel. The inner loop and the subcycle are similar in that the physics time step is subdivided and the scheme is activated more often than others in the physics suite. However, they differ in implementation. @@ -82,9 +80,10 @@ Conversely, the subcycle method is controlled by CCPP Framework through the "sub The two methods should be used exclusively. The Semi-Lagrangian sedimentation of rain and graupel (based on Juang and Hong 2010 \cite Henry_Juang_2010 ) increases numerical stability by applying the subtime step only to sedimentation computation. Two namelist variables control the usage of the semi-Lagrangian sedimentation, \p sedi_semi and \p decfl. -\p sedi_semi is set to ‘true’ to activate the method. Decfl is a parameter that needs to avoid deformation of the arriving grids, currently, "10". +\p sedi_semi is set to ‘true’ to activate the method. \p Decfl is a parameter that needs to avoid deformation of the arriving grids, currently, "10". -\version SRW v3.0.0 +\section v6_enh_thompson CCPP Physics Updates +\version UFS-SRW v3.0.0 - The ice generation supersaturation requirement for nonaerosol option is reduced from 0.25 to 0.15. The purpose is to generate more ice in the upper level and reduce the OLR bias. From 2a56d372655acc6bf0a7da4fa0ccff3beb6727cf Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Fri, 30 Jun 2023 13:39:16 -0600 Subject: [PATCH 10/44] Host large images remotely --- physics/docs/pdftxt/CLM_LAKE.txt | 6 +++--- physics/docs/pdftxt/RUCLSM.txt | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/physics/docs/pdftxt/CLM_LAKE.txt b/physics/docs/pdftxt/CLM_LAKE.txt index e0a8d9209..d78244cb2 100644 --- a/physics/docs/pdftxt/CLM_LAKE.txt +++ b/physics/docs/pdftxt/CLM_LAKE.txt @@ -36,7 +36,7 @@ in the UFS SRW App, is capable of capturing the effect of lakes on regional heat Lake depths for the RRFS lake configuration (Fig.1) are assigned from a global dataset provided by Kourzeneva et al.(2012) \cite Kourzeneva_2012, this dataset is referred to as GLOBv3 bathymetry in the UFS_UTL. -\image html Lake_depths_RRFS3km.png "Figure 1: Lake depths for lakes in the 3-km RRFS domain." width=600 +@image html https://user-images.githubusercontent.com/12705538/250180794-76af93a2-a7ba-4e9a-9478-5657198862b8.png "Figure 1: Lake depths for lakes in the 3-km RRFS domain." width=600 To cold-start the CLM lake model in the UFS SRW App: - Use the CLM option in the input.nml @@ -48,8 +48,8 @@ To cold-start the CLM lake model in the UFS SRW App: - Lake ice at the top level is initialized from the GFS ice concentration The differences of surface variables from the experimental RRFS 6-h forecast with/without CLM lake model are shown in Figure 2 for 2-m temperature and in Figure 3 for 2-m dewpoint. -\image html diff_t2m_lake_rrfs.png "Figure 2: Differences of 2-m temperature between the RRFS coupled to the CLM model and the RRFS without CLM." width=600 -\image html diff_td2m_lake_rrfs.png "Figure 3: Differences of 2-m dew point between the RRFS coupled to the CLM model and the RRFS without CLM." width=600 +@image html https://user-images.githubusercontent.com/12705538/250180790-63159300-33f6-4b34-9e9c-b65885213c30.png "Figure 2: Differences of 2-m temperature between the RRFS coupled to the CLM model and the RRFS without CLM." width=600 +@image html https://user-images.githubusercontent.com/12705538/250180787-8fc9a820-5f80-4f06-b50a-88b2d20ebc53.png "Figure 3: Differences of 2-m dew point between the RRFS coupled to the CLM model and the RRFS without CLM." width=600 diff --git a/physics/docs/pdftxt/RUCLSM.txt b/physics/docs/pdftxt/RUCLSM.txt index 7a39faf84..a836e7b93 100644 --- a/physics/docs/pdftxt/RUCLSM.txt +++ b/physics/docs/pdftxt/RUCLSM.txt @@ -43,7 +43,7 @@ to determine the uncertainty range for the selected parameters in the RUC LSM. ## RUC LSM characteristics that differ from Noah LSM: \image html ruc_lsm_veg_soil.png "Figure 1: RUC LSM Vegetation and Soil Model (Courtesy of T.G. Smirnova) " width=900 -\image html ruc_ranking.png "Figure 2: Model ranking as a function of normalized root mean square error of snow water equivalent and surface temperature (Courtesy of C. Menard)" width=900 +@image html https://user-images.githubusercontent.com/12705538/250180784-d50a3d4c-93db-4d8d-b12d-2c0ca22da5c3.png "Figure 2: Model ranking as a function of normalized root mean square error of snow water equivalent and surface temperature (Courtesy of C. Menard)" width=900 - \b Implicit \b solution of energy and moisture budgets in the layer spanning the ground surface - \b 9 \b soil \b levels with high vertical resolution near surface RUC LSM has more levels in soil than \ref GFS_NOAH model with higher resolution near the interface with the atmosphere @@ -80,7 +80,7 @@ Snow forms additional two layers on top of soil in RUC LSM \image html ruc_lsm_mosaic.png "Figure 4: 'Mosaic' approach for patchy snow (Courtesy of T.G. Smirnova) " width=900 - New: additional options to compute snow cover fraction (\p isncovr_opt =2 and 3, Niu and Yang (2007) \cite Niu_2007). These options allowed to reduce overprediction of number of grid cells fully covered with snow which further reduced cold-biases over snow. Figure 5 demonstrates that option 3 of snow cover fraction computation (\p isncovr_opt = 3) in the UFS-based regional model matches better the satellite data for the test case on 6 February 2022. - New: added an option to use of a new formulation of snow thermal conductivity (\p isncond_opt = 2, Sturm et al. (1997) \cite sturm_1997); -\image html sncov_rrfs_ruc.png "Figure 5: Snow cover fraction from MODIS (a,b), Regional UFS-based system (RRFS) original (c), and modified with isncover_opt=3 (d), 6 February 2022. (Courtesy of T.G. Smirnova)" width=900 +@image html https://user-images.githubusercontent.com/12705538/250180782-925303ec-7751-4d7e-be8f-b3f1323f35d4.png "Figure 5: Snow cover fraction from MODIS (a,b), Regional UFS-based system (RRFS) original (c), and modified with isncover_opt=3 (d), 6 February 2022. (Courtesy of T.G. Smirnova)" width=900 - Iterative snow melting algorithm; - Density of snow on the ground - a function of compaction parameter and snow depth and temperature; - Snow albedo - a function of temperature and snow fraction; From 9e35de10adecef6bdb21a53ea6d9e5350384c60c Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Mon, 24 Jul 2023 15:03:57 +0000 Subject: [PATCH 11/44] Changes to logging and initialization of the CLM Lake Model. 1. Use ice thickness hice(i) to find the level in the lake where ice is zero. 2. Do not allow lake temperature to be below freezing point if there is no ice. 3. If there is no snow or ice, do not allow surface lake temperature to be below freezing point. These changes fixed the problem with large errors in the energy budget at the beginning of the cold-start run with lakes. 4. Added flag to turn on debug print statements in the CLM lake model. --- physics/clm_lake.f90 | 295 ++++++++++++++++++++++++----------- physics/clm_lake.meta | 14 ++ physics/module_sf_ruclsm.F90 | 2 + 3 files changed, 223 insertions(+), 88 deletions(-) diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index 4fc4112ce..21843af58 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -42,6 +42,7 @@ MODULE clm_lake integer, parameter, public :: kind_lake = kind_dbl_prec logical :: LAKEDEBUG = .false. ! Enable lots of checks and debug prints and errors + logical :: DEBUG_PRINT = .false. ! Enable lots of checks and debug prints and errors logical, parameter :: PERGRO = .false. @@ -167,7 +168,7 @@ logical function limit_temperature_by_climatology(xlat_d,xlon_positive) .not. (xlon_d.gt.-112.104 .and. xlon_d.lt.-112.100))then if(xlat_d.gt.39.5 .and. xlat_d.lt.41.22) then - if(lakedebug) then + if(debug_print) then print *,'The Great Salt Lake south of 41.22 N, lat,lon',xlat_d,xlon_d endif limit_temperature_by_climatology = .true. @@ -175,7 +176,7 @@ logical function limit_temperature_by_climatology(xlat_d,xlon_positive) elseif(( xlat_d.ge.41.22 .and. xlat_d.lt.42.) .and. .not. & ! excludes Willard Bay (xlat_d.gt.41.352 .and. xlat_d.lt.41.354)) then - if(lakedebug) then + if(debug_print) then print *,'The Great Salt Lake north of 41.22 N xlat_d,xlon_d ',xlat_d,xlon_d endif !print *,'Ice fraction on the GSL ', i,j,lake_icefrac3d(i,:,j) @@ -200,30 +201,31 @@ subroutine is_salty(xlat_d,xlon_positive, cannot_freeze, salty) xlon_d = xlon_positive if(xlon_d>180) xlon_d = xlon_d - 360 + ! for the Great Salt Lake cannot_freeze = limit_temperature_by_climatology(xlat_d,xlon_d) salty = cannot_freeze - other_locations: if(include_all_salty_locations) then ! --- The Mono Lake in California, salinity is 75 ppt with freezing point at ! --- -4.2 C (Stan). The Mono Lake lat/long (37.9-38.2, -119.3 - 118.8) if (xlon_d.gt.-119.3.and. xlon_d.lt.-118.8) then if(xlat_d.gt.37.9 .and. xlat_d.lt.38.2) then salty = .true. - if(lakedebug) then + if(debug_print) then print *,'Salty Mono Lake, i,j',xlat_d,xlon_d endif endif ! xlat_d endif ! xlon_d + other_locations: if(include_all_salty_locations) then ! --- Caspian Sea and Dead Sea are salty too (Sam, Tanya) if ( xlat_d>36.5_kind_phys .and. xlat_d<47.1_kind_phys .and. xlon_d>46.8_kind_phys .and. xlon_d<55.0_kind_phys ) then - if(lakedebug) then + if(debug_print) then print *,'Salty Caspian Sea ',xlat_d,xlon_d endif salty = .true. end if if ( xlon_d>35.3 .and. xlon_d<35.6 .and. xlat_d>31.3 .and. xlat_d<31.8) then - if(lakedebug) then + if(debug_print) then print *,'Salty Dead Sea ',xlat_d,xlon_d endif salty = .true. @@ -239,7 +241,7 @@ end subroutine is_salty !! SUBROUTINE clm_lake_run( & ! Model time and metadata: - im, km, me, master, fhour, IDATE, kdt, & + flag_restart, im, km, me, master, fhour, IDATE, kdt, & ! Configuration and initialization: iopt_lake, iopt_lake_clm, min_lakeice, lakedepth_default, use_lakedepth, & @@ -280,6 +282,7 @@ SUBROUTINE clm_lake_run( & ! ! Model time and metadata: ! + LOGICAL , INTENT (IN) :: flag_restart INTEGER , INTENT (IN) :: im,km,me,master INTEGER, INTENT(IN) :: IDATE(4), kdt REAL(KIND_PHYS), INTENT(IN) :: fhour @@ -300,7 +303,7 @@ SUBROUTINE clm_lake_run( & ! REAL(KIND_PHYS), DIMENSION(:), INTENT(IN):: & tg3, pgr, zlvl, qvcurr, xlat_d, xlon_d, ch, cm, & - dlwsfci, dswsfci, oro_lakedepth, wind, rho0, tsfc, & + dlwsfci, dswsfci, oro_lakedepth, wind, rho0, & rainncprv, raincprv REAL(KIND_PHYS), DIMENSION(:,:), INTENT(in) :: gu0, gv0, prsi, gt0, phii LOGICAL, DIMENSION(:), INTENT(IN) :: flag_iter @@ -311,7 +314,7 @@ SUBROUTINE clm_lake_run( & ! REAL(KIND_PHYS), DIMENSION(:), INTENT(INOUT) :: & evap_wat, evap_ice, hflx_wat, hflx_ice, gflx_wat, gflx_ice, & - ep1d_water, ep1d_ice, tsurf_water, tsurf_ice, tsfc_wat, tisfc, & + ep1d_water, ep1d_ice, tsurf_water, tsurf_ice, tsfc_wat, tisfc, tsfc, & weasdi, snodi, hice, qss_water, qss_ice, & cmm_water, cmm_ice, chh_water, chh_ice, & uustar_water, uustar_ice, lake_t_snow, albedo, zorlw, & @@ -451,6 +454,7 @@ SUBROUTINE clm_lake_run( & dtime=dtp ! Initialize any uninitialized lake points. + if(.not.flag_restart) then call lakeini(kdt=kdt, ISLTYP=ISLTYP, gt0=gt0, snowd=snowd, weasd=weasd, & lakedepth_default=lakedepth_default, fhour=fhour, & oro_lakedepth=oro_lakedepth, savedtke12d=savedtke12d, snowdp2d=snowdp2d, & @@ -458,7 +462,7 @@ SUBROUTINE clm_lake_run( & lake_icefrac3d=lake_icefrac3d, z_lake3d=z_lake3d, dz_lake3d=dz_lake3d, & t_soisno3d=t_soisno3d, h2osoi_ice3d=h2osoi_ice3d, h2osoi_liq3d=h2osoi_liq3d, & h2osoi_vol3d=h2osoi_vol3d, z3d=z3d, dz3d=dz3d, zi3d=zi3d, watsat3d=watsat3d, & - csol3d=csol3d, tkmg3d=tkmg3d, fice=fice, min_lakeice=min_lakeice, & + csol3d=csol3d, tkmg3d=tkmg3d, fice=fice, hice=hice, min_lakeice=min_lakeice, & tsfc=tsfc, & use_lake_model=use_lake_model, use_lakedepth=use_lakedepth, tkdry3d=tkdry3d, & tksatu3d=tksatu3d, im=im, prsi=prsi, xlat_d=xlat_d, xlon_d=xlon_d, & @@ -480,6 +484,7 @@ SUBROUTINE clm_lake_run( & errflg=1 return endif + endif ! .not. restart lake_points=0 snow_points=0 @@ -498,14 +503,14 @@ SUBROUTINE clm_lake_run( & wght2 = day_of_month/month_length(month) if(wght2<0 .or. wght2>1) then - if(lakedebug) then + if(debug_print) then write(0,*) 'Warning: wght2 is not 0..1: ',wght2 endif wght2 = max(0.0_kind_lake,min(1.0_kind_lake,wght2)) endif wght1 = 1.0_kind_lake - wght2 - if(LAKEDEBUG .and. me==0) then + if(debug_print ) then print *,'month,num1,num2,wght1,wght2',month,num1,num2,wght1,wght2 endif @@ -516,13 +521,13 @@ SUBROUTINE clm_lake_run( & call is_salty(xlat_d(i),xlon_d(i),salty_flag,cannot_freeze_flag) if(salty_flag) then - salty(i) = 1 + salty(i) = 1 ! The Great Salt Lake and Mono Lake else salty(i) = 0 endif if(cannot_freeze_flag) then - cannot_freeze(i) = 1 + cannot_freeze(i) = 1 ! only the Great Salt Lake else cannot_freeze(i) = 0 endif @@ -570,13 +575,7 @@ SUBROUTINE clm_lake_run( & t_grnd(c) = t_grnd2d(i) do k = 1,nlevlake t_lake(c,k) = t_lake3d(i,k) - !-- If T of salty lakes is above the freezing point, keep them ice free - if(salty(i)==1 .and. t_lake(c,k) > tfrz .and. lake_icefrac3d(i,k) > 0.) then - lake_icefrac(c,k) = 0. - else - lake_icefrac(c,k) = lake_icefrac3d(i,k) - endif - !lake_icefrac(c,k) = lake_icefrac3d(i,k) + lake_icefrac(c,k) = lake_icefrac3d(i,k) z_lake(c,k) = z_lake3d(i,k) dz_lake(c,k) = dz_lake3d(i,k) enddo @@ -633,23 +632,29 @@ SUBROUTINE clm_lake_run( & do c = 1,column if(cannot_freeze(i) == 1) then - t_grnd(c) = max(274.5_kind_lake,t_grnd(c)) + ! The Great Salt Lake do k = 1,nlevlake - t_lake(c,k) = max(274.5_kind_lake,t_lake(c,k)) - lake_icefrac(c,k) = 0. + lake_icefrac(c,k) = 0._kind_lake enddo - endif - - if(salty(i)/=0) then - Tclim = tfrz + wght1*saltlk_T(num1) & - + wght2*saltlk_T(num2) - if(lakedebug) print *,'Tclim,tsfc,t_lake3d',i,Tclim,t_grnd(c),t_lake(c,:),t_soisno(c,:) - t_grnd(c) = min(Tclim+3.0_kind_lake,(max(t_grnd(c),Tclim-3.0_kind_lake))) - do k = 1,nlevlake - t_lake(c,k) = min(Tclim+3.0_kind_lake,(max(t_lake(c,k),Tclim-3.0_kind_lake))) - enddo - t_soisno(c,1) = min(Tclim+3.0_kind_lake,(max(t_soisno(c,1),Tclim-3.0_kind_lake))) - if(lakedebug) print *,'After Tclim,tsfc,t_lake3d',i,Tclim,t_grnd(c),t_lake(c,:),t_soisno(c,:) + ! bound lake temperture with the climatology + Tclim = tfrz + wght1*saltlk_T(num1) & + + wght2*saltlk_T(num2) + if(debug_print) print *,'GSL - Tclim,tsfc,t_lake3d',i,Tclim,t_grnd(c),t_lake(c,:),t_soisno(c,:) + t_grnd(c) = min(Tclim+3.0_kind_lake,(max(t_grnd(c),Tclim-3.0_kind_lake))) + do k = 1,nlevlake + t_lake(c,k) = min(Tclim+3.0_kind_lake,(max(t_lake(c,k),Tclim-3.0_kind_lake))) + enddo + t_soisno(c,1) = min(Tclim+3.0_kind_lake,(max(t_soisno(c,1),Tclim-3.0_kind_lake))) + if(debug_print) print *,'GSL - after Tclim,tsfc,t_lake3d',i,Tclim,t_grnd(c),t_lake(c,:),t_soisno(c,:) + elseif(salty(i) == 1) then + ! Mono Lake never freezes, its temperature is above freezing point = -4.2 C + t_grnd(c) = max(tfrz-4.2_kind_lake,t_grnd(c)) + do k = 1,nlevlake + lake_icefrac(c,k) = 0._kind_lake + t_lake(c,k) = max(tfrz-4.2_kind_lake,t_lake(c,k)) + enddo + t_soisno(c,1) = max(tfrz-4.2_kind_lake,t_soisno(c,1)) + if(debug_print) print *,'Mono - tsfc,t_lake3d',i,t_grnd(c),t_lake(c,:),t_soisno(c,:) endif savedtke12d(i) = savedtke1(c) @@ -689,7 +694,10 @@ SUBROUTINE clm_lake_run( & gflx_wat(I) = eflx_gnet(c) ![W/m/m] upward_heat_flux_in_soil_over_water ep1d_water(i) = eflx_lh_tot(c) ![W/m/m] surface_upward_potential_latent_heat_flux_over_water tsurf_water(I) = t_grnd(c) ![K] surface skin temperature after iteration over water + tsurf_ice(i) = t_grnd(i) ! surface_skin_temperature_after_iteration_over_ice tsfc_wat(i) = t_grnd(c) ![K] surface skin temperature over water + tisfc(i) = t_grnd(c) + tsfc(i) = t_grnd(c) lake_t2m(I) = t_ref2m(c) ![K] temperature_at_2m_from_clm_lake lake_q2m(I) = q_ref2m(c) ! [frac] specific_humidity_at_2m_from_clm_lake albedo(i) = ( 0.6 * lake_icefrac3d(i,1) ) + & ! mid_day_surface_albedo_over_lake @@ -716,7 +724,9 @@ SUBROUTINE clm_lake_run( & cmm_water(i) = cm(i)*wind(i) ! surface_drag_wind_speed_for_momentum_in_air_over_water ice_point: if(fice(i)>=min_lakeice) then + ! Icy lake ! Most ice variables are identical to water variables. + if(debug_print) print *,'Icy xlat_d(i),xlon_d(i),frac_ice,frac_grid ',xlat_d(i),xlon_d(i),frac_ice,frac_grid if(frac_ice .or. frac_grid) then evap_ice(i) = evap_wat(i) ! kinematic_surface_upward_latent_heat_flux_over_ice hflx_ice(i) = hflx_wat(i) ! kinematic_surface_upward_sensible_heat_flux_over_ice @@ -728,11 +738,13 @@ SUBROUTINE clm_lake_run( & ! uustar_ice(i) = uustar_water(i) ! surface_friction_velocity_over_ice endif - tsurf_ice(i) = tsurf_water(i) ! surface_skin_temperature_after_iteration_over_ice + tsurf_ice(i) = t_grnd(i) ! surface_skin_temperature_after_iteration_over_ice tisfc(i) = t_grnd(c) ! surface_skin_temperature_over_ice + tsfc(i) = t_grnd(c) ! surface_skin_temperature_over_ice weasdi(i) = h2osno(c) ! water_equivalent_accumulated_snow_depth_over_ice - snodi(i) = snowdp(c) ! surface_snow_thickness_water_equivalent_over_ice - tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice + snodi(i) = snowdp(c)*1.e3 ! surface_snow_thickness_water_equivalent_over_ice + weasd(i) = weasdi(i) + snowd(i) = snodi(c) ! surface_snow_thickness_water_equivalent_over_ice ! Ice points are icy: icy(i)=.true. ! flag_nonzero_sea_ice_surface_fraction @@ -754,8 +766,11 @@ SUBROUTINE clm_lake_run( & icy(i)=.false. weasdi(i) = 0 snodi(i) = 0 + weasd(i) = 0 + snowd(i) = 0 tisfc(i) = t_grnd(c) tsurf_ice(i) = tisfc(i) + tsfc(i) = t_grnd(c) hice(i) = 0 fice(i) = 0 endif ice_point @@ -774,7 +789,7 @@ SUBROUTINE clm_lake_run( & endif if_lake_is_here ENDDO lake_top_loop - if(LAKEDEBUG .and. lake_points>0 .and. (kdt<3 .or. mod(kdt,30)==3)) then + if(debug_print .and. lake_points>0 .and. (kdt<3 .or. mod(kdt,30)==3)) then 3082 format('lake points processed in timestep ',I0,' by rank ',I0,' = ',I0,' snow=',I0,' ice=',I0) print 3082,kdt,me,lake_points,snow_points,ice_points endif @@ -956,7 +971,7 @@ SUBROUTINE LakeMain(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, & !I t_lake,t_soisno,h2osoi_liq, & h2osoi_ice,savedtke1, & watsat, tksatu, tkmg, tkdry, csol, dtime, & - frac_iceold,qflx_snomelt,imelt,errmsg,errflg) + frac_iceold,qflx_snomelt,imelt,errmsg,errflg,xlat_d,xlon_d) if(errflg/=0) then return ! State is invalid now, so pass error to caller. endif @@ -1486,7 +1501,7 @@ SUBROUTINE ShalLakeFluxes(forc_t,forc_pbot,forc_psrf,forc_hgt,forc_hgt_q, qflx_evap_tot(p) = qflx_evap_soi(p) eflx_lh_tot(p) = htvp(c)*qflx_evap_soi(p) eflx_lh_grnd(p) = htvp(c)*qflx_evap_soi(p) - if(LAKEDEBUG) then + if(debug_print) then 1604 format('CLM_Lake ShalLakeFluxes: c=',I0,' sensible heat = ',F12.4,' latent heat =',F12.4, & ' ground temp = ', F12.4, ' h2osno = ', F12.4, ' at xlat_d=',F10.3,' xlon_d=',F10.3) print 1604, c, eflx_sh_tot(p), eflx_lh_tot(p), t_grnd(c), h2osno(c),xlat_d,xlon_d @@ -1564,7 +1579,7 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! t_lake,t_soisno,h2osoi_liq, & h2osoi_ice,savedtke1, & watsat, tksatu, tkmg, tkdry, csol, dtime, & - frac_iceold,qflx_snomelt,imelt,errmsg,errflg) + frac_iceold,qflx_snomelt,imelt,errmsg,errflg,xlat_d,xlon_d) !======================================================================================================= ! !DESCRIPTION: ! Calculates temperatures in the 20-25 layer column of (possible) snow, @@ -1652,6 +1667,7 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! implicit none !in: + real(kind_lake),intent(in) :: xlat_d,xlon_d integer, intent(inout) :: errflg real(kind_lake), intent(in) :: watsat(1,nlevsoil) ! volumetric soil water at saturation (porosity) real(kind_lake), intent(in) :: tksatu(1,nlevsoil) ! thermal conductivity, saturated soil [W/m-K] @@ -2015,6 +2031,15 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! + cfus*dz_lake(c,j)*(1._kind_lake-lake_icefrac(c,j)) !& ! + (cwat-cice_eff)*lake_icefrac(c)*tfrz*dz_lake(c,j) !enthalpy reconciliation term t_lake_bef(c,j) = t_lake(c,j) + if(debug_print) then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then + print *,' ocvts(c) at xlat_d,xlon_d',xlat_d,xlon_d + print *,'j,dz_lake(c,j) ', j,dz_lake(c,j) + print*,'cv_lake(c,j),lake_icefrac(c,j),t_lake(c,j),cfus,ocvts(c)', & + cv_lake(c,j),lake_icefrac(c,j),t_lake(c,j),cfus,ocvts(c) + endif + endif end do end do @@ -2030,6 +2055,15 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! ocvts(c) = ocvts(c) + cv(c,j)*(t_soisno(c,j)-tfrz) & + hfus*h2osoi_liq(c,j) !& ! + (cpliq-cpice)*h2osoi_ice(c,j)*tfrz !enthalpy reconciliation term + if(debug_print) then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then + print *,' ocvts(c) at xlat_d,xlon_d',xlat_d,xlon_d + print *,' j,jtop(c)',j,jtop(c),'h2osoi_liq(c,j) ',h2osoi_liq(c,j),'h2osoi_ice(c,j)',h2osoi_ice(c,j) + print *,' cv(c,j),t_soisno(c,j),hfus,ocvts(c)',c,j,cv(c,j),t_soisno(c,j),hfus,ocvts(c) + print *,' h2osno(c)',h2osno(c) + endif + endif if (j == 1 .and. h2osno(c) > 0._kind_lake .and. j == jtop(c)) then ocvts(c) = ocvts(c) - h2osno(c)*hfus end if @@ -2373,9 +2407,9 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! c = filter_shlakec(fc) if (rhow(c,j) > rhow(c,j+1) .or. & (lake_icefrac(c,j) < 1._kind_lake .and. lake_icefrac(c,j+1) > 0._kind_lake) ) then - if(LAKEDEBUG) then + if(debug_print) then if (i==1) then - print *, 'Convective Mixing in column ', c, '.' + print *, 'Convective Ice Mixing in column ', c, 'lake_icefrac(c,j) ',lake_icefrac(c,j),lake_icefrac(c,j+1) endif endif qav(c) = qav(c) + dz_lake(c,i)*(t_lake(c,i)-tfrz) * & @@ -2447,6 +2481,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! rhow(c,i) = (1._kind_lake - lake_icefrac(c,i)) * & 1000._kind_lake*( 1.0_kind_lake - 1.9549e-05_kind_lake*(abs(t_lake(c,i)-277._kind_lake))**1.68_kind_lake ) & + lake_icefrac(c,i)*denice + if (debug_print .and. lake_icefrac(c,j) > 0.)print *,'rhow(c,i),lake_icefrac(c,i),t_lake(c,i)', & + i,rhow(c,i),lake_icefrac(c,i),t_lake(c,i),denice end if end do end do @@ -2462,7 +2498,7 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! c = filter_shlakec(fc) cv_lake(c,j) = dz_lake(c,j) * (cwat*(1._kind_lake-lake_icefrac(c,j)) + cice_eff*lake_icefrac(c,j)) - if (LAKEDEBUG) then + if (debug_print .and. lake_icefrac(c,j) > 0.) then print *,'Lake Ice Fraction, c, level:', c, j, lake_icefrac(c,j) endif end do @@ -2485,6 +2521,15 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! + cfus*dz_lake(c,j)*(1._kind_lake-lake_icefrac(c,j)) !& ! + (cwat-cice_eff)*lake_icefrac(c)*tfrz*dz_lake(c,j) !enthalpy reconciliation term fin(c) = fin(c) + phi(c,j) + if(debug_print) then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then + print *,' ncvts(c) at xlat_d,xlon_d',xlat_d,xlon_d + print *,' new cv_lake(c,j),t_lake(c,j),cfus,lake_icefrac(c,j),ncvts(c),fin(c)', & + j,cv_lake(c,j),t_lake(c,j),cfus,lake_icefrac(c,j),ncvts(c),fin(c) + print *,' new dz_lake(c,j),fin(c),phi(c,j)',c,dz_lake(c,j),fin(c),phi(c,j) + endif + endif end do end do @@ -2499,6 +2544,15 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! ncvts(c) = ncvts(c) + cv(c,j)*(t_soisno(c,j)-tfrz) & + hfus*h2osoi_liq(c,j) !& ! + (cpliq-cpice)*h2osoi_ice(c,j)*tfrz !enthalpy reconciliation term + if(debug_print) then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then + print *,' ncvts(c) at xlat_d,xlon_d',xlat_d,xlon_d + print *,'new j,jtop(c)',j,jtop(c),'h2osoi_liq(c,j) ',h2osoi_liq(c,j),'h2osoi_ice(c,j)',h2osoi_ice(c,j) + print *,'new cv(c,j),t_soisno(c,j),hfus,ncvts(c)',c,j,cv(c,j),t_soisno(c,j),hfus,ncvts(c) + print *,'new h2osno(c)',h2osno(c) + endif + endif if (j == 1 .and. h2osno(c) > 0._kind_lake .and. j == jtop(c)) then ncvts(c) = ncvts(c) - h2osno(c)*hfus end if @@ -2514,21 +2568,44 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! p = filter_shlakep(fp) c = pcolumn(p) errsoi(c) = (ncvts(c)-ocvts(c)) / dtime - fin(c) - if( (LAKEDEBUG .and. abs(errsoi(c)) < 1._kind_lake) ) then -! .or. (.not.LAKEDEBUG .and. abs(errsoi(c)) < 10._kind_lake)) then + if(debug_print) then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then + print *,'xlat_d,xlon_d',xlat_d,xlon_d + print *,'errsoi(c),fin(c),ncvts(c),ocvts(c),dtime,lake_icefrac(c,:),h2osno(c)', & + errsoi(c),fin(c),ncvts(c),ocvts(c),dtime,lake_icefrac(c,:),h2osno(c) + endif + endif + if( .not.LAKEDEBUG ) then + if (abs(errsoi(c)) < 10._kind_lake) then + eflx_sh_tot(p) = eflx_sh_tot(p) - errsoi(c) + eflx_sh_grnd(p) = eflx_sh_grnd(p) - errsoi(c) + eflx_soil_grnd(p) = eflx_soil_grnd(p) + errsoi(c) + eflx_gnet(p) = eflx_gnet(p) + errsoi(c) + if(debug_print) then + if (abs(errsoi(c)) > 1.e-1_kind_lake) then + print *,'errsoi incorporated at xlat_d,xlon_d',xlat_d,xlon_d + print *,'errsoi incorporated into sensible heat in ShalLakeTemperature: c, (W/m^2):', c, errsoi(c) + end if + endif + errsoi(c) = 0._kind_lake + endif + elseif ( LAKEDEBUG) then + if (abs(errsoi(c)) < 1._kind_lake) then eflx_sh_tot(p) = eflx_sh_tot(p) - errsoi(c) eflx_sh_grnd(p) = eflx_sh_grnd(p) - errsoi(c) eflx_soil_grnd(p) = eflx_soil_grnd(p) + errsoi(c) eflx_gnet(p) = eflx_gnet(p) + errsoi(c) - ! if (abs(errsoi(c)) > 1.e-3_kind_lake) then if (abs(errsoi(c)) > 1.e-1_kind_lake) then print *,'errsoi incorporated into sensible heat in ShalLakeTemperature: c, (W/m^2):', c, errsoi(c) end if errsoi(c) = 0._kind_lake - else if(LAKEDEBUG) then + else print *,'Soil Energy Balance Error at column, ', c, 'G, fintotal, column E tendency = ', & - eflx_gnet(p), fin(c), (ncvts(c)-ocvts(c)) / dtime - end if + eflx_gnet(p), fin(c), (ncvts(c)-ocvts(c)) / dtime,'xlat_d,xlon_d',xlat_d,xlon_d + print *,'ncvts(c),ocvts(c),dtime,errsoi(c)',ncvts(c),ocvts(c),dtime,errsoi(c),'xlat_d,xlon_d',xlat_d,xlon_d + end if + end if ! LAKEDEBUG end do ! This loop assumes only one point per column. @@ -3483,7 +3560,7 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, & h2osno(c) = 0._kind_lake snl(c) = 0 ! The rest of the bookkeeping for the removed snow will be done below. - if (LAKEDEBUG) then + if (debug_print) then print *,'Snow layers removed above unfrozen lake for column, snowice:', & c, sumsnowice(c) endif @@ -3633,7 +3710,7 @@ subroutine ShalLakeHydrology(dz_lake,forc_rain,forc_snow, & ! Insure water balance using qflx_qrgwl qflx_qrgwl(c) = forc_rain(g) + forc_snow(g) - qflx_evap_tot(p) - (endwb(c)-begwb(c))/dtime - if (LAKEDEBUG) then + if (debug_print) then print *,'c, rain, snow, evap, endwb, begwb, qflx_qrgwl:', & c, forc_rain(g), forc_snow(g), qflx_evap_tot(p), endwb(c), begwb(c), qflx_qrgwl(c) endif @@ -5141,18 +5218,19 @@ end subroutine MoninObukIni !! subroutine clm_lake_init(con_pi,karman,con_g,con_sbc,con_t0c,rhowater,con_csol,con_cliq, & con_hfus,con_hvap,con_rd,con_cp,rholakeice,clm_lake_debug, & - con_eps_model,con_fvirt_model,errmsg,errflg) + clm_debug_print,con_eps_model,con_fvirt_model,errmsg,errflg) implicit none real(kind_phys), intent(in) :: con_pi,karman,con_g,con_sbc,con_t0c, & rhowater,con_csol,con_cliq, con_hfus,con_hvap,con_rd,con_cp, & rholakeice,con_eps_model,con_fvirt_model INTEGER, INTENT(OUT) :: errflg CHARACTER(*), INTENT(OUT) :: errmsg - logical, intent(in) :: clm_lake_debug + logical, intent(in) :: clm_lake_debug,clm_debug_print integer :: i, j LAKEDEBUG = clm_lake_debug - if(LAKEDEBUG) then + DEBUG_PRINT = clm_debug_print + if(debug_print) then write(0,*) 'clm_lake_init' endif @@ -5249,7 +5327,7 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, z_lake3d, dz_lake3d, t_soisno3d, h2osoi_ice3d, & h2osoi_liq3d, h2osoi_vol3d, z3d, dz3d, & zi3d, watsat3d, csol3d, tkmg3d, & - fice, min_lakeice, tsfc, & + fice, hice, min_lakeice, tsfc, & use_lake_model, use_lakedepth, & tkdry3d, tksatu3d, im, prsi, & xlat_d, xlon_d, clm_lake_initialized, & @@ -5276,7 +5354,7 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, INTEGER , INTENT (IN) :: im, me, master, km, kdt REAL(KIND_PHYS), INTENT(IN) :: min_lakeice, fhour - REAL(KIND_PHYS), DIMENSION(IM), INTENT(INOUT):: FICE + REAL(KIND_PHYS), DIMENSION(IM), INTENT(INOUT):: FICE, hice REAL(KIND_PHYS), DIMENSION(IM), INTENT(IN):: TG3, xlat_d, xlon_d REAL(KIND_PHYS), DIMENSION(IM), INTENT(IN):: tsfc REAL(KIND_PHYS), DIMENSION(IM) ,INTENT(INOUT) :: clm_lake_initialized @@ -5343,6 +5421,8 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, integer :: numb_lak ! for debug character*256 :: message real(kind_lake) :: ht + real(kind_lake) :: rhosn + real(kind_lake) :: depth logical :: climatology_limits @@ -5385,45 +5465,45 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, cycle endif - snowdp2d(i) = snowd(i)*1e-3 ! SNOW in kg/m^2 and snowdp in m - h2osno2d(i) = weasd(i) ! mm - snl2d(i) = defval do k = -nlevsnow+1,nlevsoil h2osoi_liq3d(i,k) = defval h2osoi_ice3d(i,k) = defval - t_soisno3d(i,k) = defval + h2osoi_vol3d(i,k) = defval + t_soisno3d(i,k) = defval z3d(i,k) = defval dz3d(i,k) = defval enddo do k = 1,nlevlake - t_lake3d(i,k) = defval + t_lake3d(i,k) = defval lake_icefrac3d(i,k) = defval z_lake3d(i,k) = defval dz_lake3d(i,k) = defval enddo - if(fice(i)>min_lakeice) then - lake_icefrac3d(i,1) = fice(i) - snowdp2d(i) = snowd(i)*1e-3 ! SNOW in kg/m^2 and snowdp in m - h2osno2d(i) = weasd(i) ! mm - else - fice(i) = 0. - snowd(i) = 0. - weasd(i) = 0. - snowdp2d(i) = 0. - h2osno2d(i) = 0. - endif + if (use_lake_model(i) == 1) then + ! for lake points only + z3d(i,:) = 0.0 + dz3d(i,:) = 0.0 + zi3d(i,:) = 0.0 + h2osoi_liq3d(i,:) = 0.0 + h2osoi_ice3d(i,:) = 0.0 + lake_icefrac3d(i,:) = 0.0 + h2osoi_vol3d(i,:) = 0.0 + snl2d(i) = 0.0 + + if(fice(i)>min_lakeice) then + lake_icefrac3d(i,1) = fice(i) + snowdp2d(i) = snowd(i)*1e-3 ! SNOW in kg/m^2 and snowdp in m + h2osno2d(i) = weasd(i) ! mm + else + fice(i) = 0. + snowd(i) = 0. + weasd(i) = 0. + snowdp2d(i) = 0. + h2osno2d(i) = 0. + endif - z3d(i,:) = 0.0 - dz3d(i,:) = 0.0 - zi3d(i,:) = 0.0 - h2osoi_liq3d(i,:) = 0.0 - h2osoi_ice3d(i,:) = 0.0 - lake_icefrac3d(i,:) = 0.0 - h2osoi_vol3d(i,:) = 0.0 - snl2d(i) = 0.0 - ! Soil hydraulic and thermal properties isl = ISLTYP(i) if (isl == 0 ) isl = 14 @@ -5559,19 +5639,45 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, return endif + if(lake_icefrac3d(i,1) > 0.) then + depth = 0. + do k=2,nlevlake + depth = depth + dz_lake3d(i,k) + if(hice(i) >= depth) then + lake_icefrac3d(i,k) = max(0.,lake_icefrac3d(i,1)+(0.-lake_icefrac3d(i,1))/z_lake3d(i,nlevlake)*depth) + else + lake_icefrac3d(i,k) = 0. + endif + end do + endif t_lake3d(i,1) = tsfc(i) t_grnd2d(i) = tsfc(i) + if (lake_icefrac3d(i,1) <= 0.) then + t_lake3d(i,1) = max(tfrz,tsfc(i)) + t_grnd2d(i) = max(tfrz,tsfc(i)) + endif do k = 2, nlevlake if(z_lake3d(i,k).le.depth_c) then - t_lake3d(i,k) = tsfc(i)+(277.0-tsfc(i))/depth_c*z_lake3d(i,k) + t_lake3d(i,k) = tsfc(i)+(277.2_kind_lake-tsfc(i))/depth_c*z_lake3d(i,k) else - t_lake3d(i,k) = 277.0 + t_lake3d(i,k) = 277.2_kind_lake end if + if (lake_icefrac3d(i,k) <= 0.) then + t_lake3d(i,k) = max(tfrz,t_lake3d(i,k)) + endif enddo ! initial t_soisno3d - t_soisno3d(i,1) = t_lake3d(i,nlevlake) + ! in snow + if(snowdp2d(i) > 0.) then + do k = snl2d(i)+1, 0 + t_soisno3d(i,k) =min(tfrz,tsfc(i)) + enddo + endif + + ! in soil + t_soisno3d(i,1) = t_lake3d(i,nlevlake) t_soisno3d(i,nlevsoil) = tg3(i) do k = 2, nlevsoil-1 t_soisno3d(i,k)=t_soisno3d(i,1)+(t_soisno3d(i,nlevsoil)-t_soisno3d(i,1))*dzsoi(k) @@ -5599,6 +5705,17 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, endif enddo + !tgs - in RAP and HRRR applications with cycled snow depth and snow + !water equivalent, the actual snow density could be computed. This is + !not used for now for consistency with the main Lake subroutine, where + !constant snow density (250.) is used. + if(h2osno2d(i).gt.0. .and. snowdp2d(i).gt.0.) then + rhosn = h2osno2d(i)/snowdp2d(i) + else + rhosn = snow_bd ! bdsno=250. + endif + + do k = -nlevsnow+1, 0 if (k > snl2d(i)) then h2osoi_ice3d(i,k) = dz3d(i,k)*snow_bd @@ -5607,10 +5724,12 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, end do clm_lake_initialized(i) = 1 + + endif !if ( use_lakedepth ) then ENDDO do_init - if(LAKEDEBUG .and. init_points>0) then + if(debug_print .and. init_points>0) then print *,'points initialized in clm_lake',init_points end if diff --git a/physics/clm_lake.meta b/physics/clm_lake.meta index bbaaded16..3de543078 100644 --- a/physics/clm_lake.meta +++ b/physics/clm_lake.meta @@ -7,6 +7,13 @@ [ccpp-arg-table] name = clm_lake_run type = scheme +[flag_restart] + standard_name = flag_for_restart + long_name = flag for restart (warmstart) or coldstart + units = flag + dimensions = () + type = logical + intent = in [im] standard_name = horizontal_loop_extent long_name = horizontal loop extent @@ -935,6 +942,13 @@ type = logical active = (control_for_lake_model_selection == 3) intent = in +[clm_debug_print] + standard_name = flag_for_printing_in_clm_lake_model + long_name = flag for printing in clm lake model + units = flag + dimensions = () + type = logical + intent = in [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/module_sf_ruclsm.F90 b/physics/module_sf_ruclsm.F90 index 6294bc068..160127e43 100644 --- a/physics/module_sf_ruclsm.F90 +++ b/physics/module_sf_ruclsm.F90 @@ -991,10 +991,12 @@ SUBROUTINE LSMRUC(xlat,xlon, & if(mosaic_lu == 1) then ! greenness factor: between 0 for min greenness and 1 for max greenness. factor = max(zero,min(one,(vegfra(i,j)-shdmin(i,j))/max(one,(shdmax(i,j)-shdmin(i,j))))) + if (debug_print ) then if (abs(xlat-testptlat).lt.0.1 .and. & abs(xlon-testptlon).lt.0.1)then print *,' lat,lon=',xlat,xlon,' factor=',factor endif + endif if((ivgtyp(i,j) == natural .or. ivgtyp(i,j) == crop) .and. factor > 0.75) then ! cropland or grassland, apply irrigation during the growing seaspon when fraction From 1fae3bc76e90a167e9929b28ec451586cdc42da4 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 27 Jul 2023 19:15:15 +0000 Subject: [PATCH 12/44] some missing changes from last commit --- physics/clm_lake.f90 | 51 +++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index 21843af58..c07773a57 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -454,7 +454,6 @@ SUBROUTINE clm_lake_run( & dtime=dtp ! Initialize any uninitialized lake points. - if(.not.flag_restart) then call lakeini(kdt=kdt, ISLTYP=ISLTYP, gt0=gt0, snowd=snowd, weasd=weasd, & lakedepth_default=lakedepth_default, fhour=fhour, & oro_lakedepth=oro_lakedepth, savedtke12d=savedtke12d, snowdp2d=snowdp2d, & @@ -484,7 +483,6 @@ SUBROUTINE clm_lake_run( & errflg=1 return endif - endif ! .not. restart lake_points=0 snow_points=0 @@ -2032,8 +2030,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! ! + (cwat-cice_eff)*lake_icefrac(c)*tfrz*dz_lake(c,j) !enthalpy reconciliation term t_lake_bef(c,j) = t_lake(c,j) if(debug_print) then - if (abs(xlat_d-52.1152).lt.0.1 .and. & - abs(xlon_d-260.405).lt.0.1)then + if (abs(xlat_d-51.393).lt.0.1 .and. & + abs(xlon_d-261.117).lt.0.1)then print *,' ocvts(c) at xlat_d,xlon_d',xlat_d,xlon_d print *,'j,dz_lake(c,j) ', j,dz_lake(c,j) print*,'cv_lake(c,j),lake_icefrac(c,j),t_lake(c,j),cfus,ocvts(c)', & @@ -2056,8 +2054,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! + hfus*h2osoi_liq(c,j) !& ! + (cpliq-cpice)*h2osoi_ice(c,j)*tfrz !enthalpy reconciliation term if(debug_print) then - if (abs(xlat_d-52.1152).lt.0.1 .and. & - abs(xlon_d-260.405).lt.0.1)then + if (abs(xlat_d-51.393).lt.0.1 .and. & + abs(xlon_d-261.117).lt.0.1)then print *,' ocvts(c) at xlat_d,xlon_d',xlat_d,xlon_d print *,' j,jtop(c)',j,jtop(c),'h2osoi_liq(c,j) ',h2osoi_liq(c,j),'h2osoi_ice(c,j)',h2osoi_ice(c,j) print *,' cv(c,j),t_soisno(c,j),hfus,ocvts(c)',c,j,cv(c,j),t_soisno(c,j),hfus,ocvts(c) @@ -2522,8 +2520,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! ! + (cwat-cice_eff)*lake_icefrac(c)*tfrz*dz_lake(c,j) !enthalpy reconciliation term fin(c) = fin(c) + phi(c,j) if(debug_print) then - if (abs(xlat_d-52.1152).lt.0.1 .and. & - abs(xlon_d-260.405).lt.0.1)then + if (abs(xlat_d-51.393).lt.0.1 .and. & + abs(xlon_d-261.117).lt.0.1)then print *,' ncvts(c) at xlat_d,xlon_d',xlat_d,xlon_d print *,' new cv_lake(c,j),t_lake(c,j),cfus,lake_icefrac(c,j),ncvts(c),fin(c)', & j,cv_lake(c,j),t_lake(c,j),cfus,lake_icefrac(c,j),ncvts(c),fin(c) @@ -2545,8 +2543,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! + hfus*h2osoi_liq(c,j) !& ! + (cpliq-cpice)*h2osoi_ice(c,j)*tfrz !enthalpy reconciliation term if(debug_print) then - if (abs(xlat_d-52.1152).lt.0.1 .and. & - abs(xlon_d-260.405).lt.0.1)then + if (abs(xlat_d-51.393).lt.0.1 .and. & + abs(xlon_d-261.117).lt.0.1)then print *,' ncvts(c) at xlat_d,xlon_d',xlat_d,xlon_d print *,'new j,jtop(c)',j,jtop(c),'h2osoi_liq(c,j) ',h2osoi_liq(c,j),'h2osoi_ice(c,j)',h2osoi_ice(c,j) print *,'new cv(c,j),t_soisno(c,j),hfus,ncvts(c)',c,j,cv(c,j),t_soisno(c,j),hfus,ncvts(c) @@ -2569,8 +2567,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! c = pcolumn(p) errsoi(c) = (ncvts(c)-ocvts(c)) / dtime - fin(c) if(debug_print) then - if (abs(xlat_d-52.1152).lt.0.1 .and. & - abs(xlon_d-260.405).lt.0.1)then + if (abs(xlat_d-51.393).lt.0.1 .and. & + abs(xlon_d-261.117).lt.0.1)then print *,'xlat_d,xlon_d',xlat_d,xlon_d print *,'errsoi(c),fin(c),ncvts(c),ocvts(c),dtime,lake_icefrac(c,:),h2osno(c)', & errsoi(c),fin(c),ncvts(c),ocvts(c),dtime,lake_icefrac(c,:),h2osno(c) @@ -2603,7 +2601,9 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! else print *,'Soil Energy Balance Error at column, ', c, 'G, fintotal, column E tendency = ', & eflx_gnet(p), fin(c), (ncvts(c)-ocvts(c)) / dtime,'xlat_d,xlon_d',xlat_d,xlon_d - print *,'ncvts(c),ocvts(c),dtime,errsoi(c)',ncvts(c),ocvts(c),dtime,errsoi(c),'xlat_d,xlon_d',xlat_d,xlon_d + print *,'errsoi(c),ncvts(c),ocvts(c)',errsoi(c),ncvts(c),ocvts(c),'xlat_d,xlon_d',xlat_d,xlon_d + print *,'lake_icefrac(c,:),h2osno(c)', lake_icefrac(c,:),h2osno(c) + print *,'t_lake(c,:),t_soisno(c,:)',t_lake(c,:),t_soisno(c,:) end if end if ! LAKEDEBUG end do @@ -5653,23 +5653,34 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, t_lake3d(i,1) = tsfc(i) t_grnd2d(i) = tsfc(i) + + ! initial lake temperature if (lake_icefrac3d(i,1) <= 0.) then - t_lake3d(i,1) = max(tfrz,tsfc(i)) - t_grnd2d(i) = max(tfrz,tsfc(i)) + ! no ice + t_lake3d(i,1) = max(tfrz,t_lake3d(i,1)) + t_grnd2d(i) = t_lake3d(i,1) + elseif (lake_icefrac3d(i,1) > 0. .and. lake_icefrac3d(i,1) < 1.) then + ! fractional ice + t_lake3d(i,1) = tfrz endif + do k = 2, nlevlake if(z_lake3d(i,k).le.depth_c) then - t_lake3d(i,k) = tsfc(i)+(277.2_kind_lake-tsfc(i))/depth_c*z_lake3d(i,k) + t_lake3d(i,k) = t_lake3d(i,1)+(277.2_kind_lake-t_lake3d(i,1))/depth_c*z_lake3d(i,k) + if (lake_icefrac3d(i,1) <= 0.) then + ! no ice + t_lake3d(i,k) = max(tfrz,t_lake3d(i,k)) + elseif (lake_icefrac3d(i,1) > 0. .and. lake_icefrac3d(i,1) < 1.) then + ! fractional ice + t_lake3d(i,k) = tfrz + endif else t_lake3d(i,k) = 277.2_kind_lake end if - if (lake_icefrac3d(i,k) <= 0.) then - t_lake3d(i,k) = max(tfrz,t_lake3d(i,k)) - endif enddo ! initial t_soisno3d - ! in snow + ! in snow on ice if(snowdp2d(i) > 0.) then do k = snl2d(i)+1, 0 t_soisno3d(i,k) =min(tfrz,tsfc(i)) From 180c43b9ccd6dc268d79fccfafcb83cf5b4917f6 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 27 Jul 2023 21:09:05 +0000 Subject: [PATCH 13/44] yet more changes missing in prior commits --- physics/clm_lake.f90 | 45 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index c07773a57..262bad4e6 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -2030,8 +2030,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! ! + (cwat-cice_eff)*lake_icefrac(c)*tfrz*dz_lake(c,j) !enthalpy reconciliation term t_lake_bef(c,j) = t_lake(c,j) if(debug_print) then - if (abs(xlat_d-51.393).lt.0.1 .and. & - abs(xlon_d-261.117).lt.0.1)then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then print *,' ocvts(c) at xlat_d,xlon_d',xlat_d,xlon_d print *,'j,dz_lake(c,j) ', j,dz_lake(c,j) print*,'cv_lake(c,j),lake_icefrac(c,j),t_lake(c,j),cfus,ocvts(c)', & @@ -2054,8 +2054,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! + hfus*h2osoi_liq(c,j) !& ! + (cpliq-cpice)*h2osoi_ice(c,j)*tfrz !enthalpy reconciliation term if(debug_print) then - if (abs(xlat_d-51.393).lt.0.1 .and. & - abs(xlon_d-261.117).lt.0.1)then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then print *,' ocvts(c) at xlat_d,xlon_d',xlat_d,xlon_d print *,' j,jtop(c)',j,jtop(c),'h2osoi_liq(c,j) ',h2osoi_liq(c,j),'h2osoi_ice(c,j)',h2osoi_ice(c,j) print *,' cv(c,j),t_soisno(c,j),hfus,ocvts(c)',c,j,cv(c,j),t_soisno(c,j),hfus,ocvts(c) @@ -2520,8 +2520,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! ! + (cwat-cice_eff)*lake_icefrac(c)*tfrz*dz_lake(c,j) !enthalpy reconciliation term fin(c) = fin(c) + phi(c,j) if(debug_print) then - if (abs(xlat_d-51.393).lt.0.1 .and. & - abs(xlon_d-261.117).lt.0.1)then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then print *,' ncvts(c) at xlat_d,xlon_d',xlat_d,xlon_d print *,' new cv_lake(c,j),t_lake(c,j),cfus,lake_icefrac(c,j),ncvts(c),fin(c)', & j,cv_lake(c,j),t_lake(c,j),cfus,lake_icefrac(c,j),ncvts(c),fin(c) @@ -2543,8 +2543,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! + hfus*h2osoi_liq(c,j) !& ! + (cpliq-cpice)*h2osoi_ice(c,j)*tfrz !enthalpy reconciliation term if(debug_print) then - if (abs(xlat_d-51.393).lt.0.1 .and. & - abs(xlon_d-261.117).lt.0.1)then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then print *,' ncvts(c) at xlat_d,xlon_d',xlat_d,xlon_d print *,'new j,jtop(c)',j,jtop(c),'h2osoi_liq(c,j) ',h2osoi_liq(c,j),'h2osoi_ice(c,j)',h2osoi_ice(c,j) print *,'new cv(c,j),t_soisno(c,j),hfus,ncvts(c)',c,j,cv(c,j),t_soisno(c,j),hfus,ncvts(c) @@ -2567,8 +2567,8 @@ SUBROUTINE ShalLakeTemperature(t_grnd,h2osno,sabg,dz,dz_lake,z,zi, & ! c = pcolumn(p) errsoi(c) = (ncvts(c)-ocvts(c)) / dtime - fin(c) if(debug_print) then - if (abs(xlat_d-51.393).lt.0.1 .and. & - abs(xlon_d-261.117).lt.0.1)then + if (abs(xlat_d-52.1152).lt.0.1 .and. & + abs(xlon_d-260.405).lt.0.1)then print *,'xlat_d,xlon_d',xlat_d,xlon_d print *,'errsoi(c),fin(c),ncvts(c),ocvts(c),dtime,lake_icefrac(c,:),h2osno(c)', & errsoi(c),fin(c),ncvts(c),ocvts(c),dtime,lake_icefrac(c,:),h2osno(c) @@ -5653,34 +5653,23 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, t_lake3d(i,1) = tsfc(i) t_grnd2d(i) = tsfc(i) - - ! initial lake temperature if (lake_icefrac3d(i,1) <= 0.) then - ! no ice - t_lake3d(i,1) = max(tfrz,t_lake3d(i,1)) - t_grnd2d(i) = t_lake3d(i,1) - elseif (lake_icefrac3d(i,1) > 0. .and. lake_icefrac3d(i,1) < 1.) then - ! fractional ice - t_lake3d(i,1) = tfrz + t_lake3d(i,1) = max(tfrz,tsfc(i)) + t_grnd2d(i) = max(tfrz,tsfc(i)) endif - do k = 2, nlevlake if(z_lake3d(i,k).le.depth_c) then - t_lake3d(i,k) = t_lake3d(i,1)+(277.2_kind_lake-t_lake3d(i,1))/depth_c*z_lake3d(i,k) - if (lake_icefrac3d(i,1) <= 0.) then - ! no ice - t_lake3d(i,k) = max(tfrz,t_lake3d(i,k)) - elseif (lake_icefrac3d(i,1) > 0. .and. lake_icefrac3d(i,1) < 1.) then - ! fractional ice - t_lake3d(i,k) = tfrz - endif + t_lake3d(i,k) = tsfc(i)+(277.2_kind_lake-tsfc(i))/depth_c*z_lake3d(i,k) else t_lake3d(i,k) = 277.2_kind_lake end if + if (lake_icefrac3d(i,k) <= 0.) then + t_lake3d(i,k) = max(tfrz,t_lake3d(i,k)) + endif enddo ! initial t_soisno3d - ! in snow on ice + ! in snow if(snowdp2d(i) > 0.) then do k = snl2d(i)+1, 0 t_soisno3d(i,k) =min(tfrz,tsfc(i)) From ace56af857fd760e29c50f67850f3620ed2bdda4 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Fri, 28 Jul 2023 03:12:46 +0000 Subject: [PATCH 14/44] t_grnd(i) should be t_grnd(c) --- physics/clm_lake.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index 262bad4e6..844c4ce71 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -692,7 +692,7 @@ SUBROUTINE clm_lake_run( & gflx_wat(I) = eflx_gnet(c) ![W/m/m] upward_heat_flux_in_soil_over_water ep1d_water(i) = eflx_lh_tot(c) ![W/m/m] surface_upward_potential_latent_heat_flux_over_water tsurf_water(I) = t_grnd(c) ![K] surface skin temperature after iteration over water - tsurf_ice(i) = t_grnd(i) ! surface_skin_temperature_after_iteration_over_ice + tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice tsfc_wat(i) = t_grnd(c) ![K] surface skin temperature over water tisfc(i) = t_grnd(c) tsfc(i) = t_grnd(c) From c0c253f9fcec4c871b954533d912b1f3ec28b420 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Fri, 28 Jul 2023 15:19:25 +0000 Subject: [PATCH 15/44] fix another typo --- physics/clm_lake.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index 844c4ce71..edd9e2bd5 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -736,7 +736,7 @@ SUBROUTINE clm_lake_run( & ! uustar_ice(i) = uustar_water(i) ! surface_friction_velocity_over_ice endif - tsurf_ice(i) = t_grnd(i) ! surface_skin_temperature_after_iteration_over_ice + tsurf_ice(i) = t_grnd(c) ! surface_skin_temperature_after_iteration_over_ice tisfc(i) = t_grnd(c) ! surface_skin_temperature_over_ice tsfc(i) = t_grnd(c) ! surface_skin_temperature_over_ice weasdi(i) = h2osno(c) ! water_equivalent_accumulated_snow_depth_over_ice From 102d664840f70a86cab380295ac518bbcb58cbe4 Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Mon, 31 Jul 2023 12:24:02 -0600 Subject: [PATCH 16/44] Some housekeeping: overwrite ccppsrw_doxyfile (no need to keep separate "v3" file), correct misspelled pages "shemes" --> "schemes" --- physics/docs/ccpp_doxyfile | 2 +- physics/docs/ccppsrw3_doxyfile | 557 ------------------ physics/docs/ccppsrw_doxyfile | 14 +- ...emes_list.txt => SRW_all_schemes_list.txt} | 0 ...l_shemes_list.txt => all_schemes_list.txt} | 0 5 files changed, 9 insertions(+), 564 deletions(-) delete mode 100644 physics/docs/ccppsrw3_doxyfile rename physics/docs/pdftxt/{SRW_all_shemes_list.txt => SRW_all_schemes_list.txt} (100%) rename physics/docs/pdftxt/{all_shemes_list.txt => all_schemes_list.txt} (100%) diff --git a/physics/docs/ccpp_doxyfile b/physics/docs/ccpp_doxyfile index 595ba2d85..9beb66ece 100644 --- a/physics/docs/ccpp_doxyfile +++ b/physics/docs/ccpp_doxyfile @@ -115,7 +115,7 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- INPUT = pdftxt/mainpage.txt \ - pdftxt/all_shemes_list.txt \ + pdftxt/all_schemes_list.txt \ pdftxt/GFS_v16_suite.txt \ pdftxt/GFS_v17_p8_suite.txt \ pdftxt/RAP_suite.txt \ diff --git a/physics/docs/ccppsrw3_doxyfile b/physics/docs/ccppsrw3_doxyfile deleted file mode 100644 index b1cc3138c..000000000 --- a/physics/docs/ccppsrw3_doxyfile +++ /dev/null @@ -1,557 +0,0 @@ -# Doxyfile 1.9.3 - -DOXYFILE_ENCODING = UTF-8 -PROJECT_NAME = "CCPP SciDoc for UFS-SRW v3.0.0" -PROJECT_NUMBER = "SRW v3.0.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/RAP_suite.txt \ - 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/CLM_LAKE.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 \ - ../clm_lake.f90 \ - ../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 \ - ../bl_mynn_common.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 \ - ../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/RE300 \ - 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/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile index 09ebccf86..5c9c797b5 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 SRW v2.1.0" -PROJECT_NUMBER = "SRW v2.1.0" +PROJECT_NAME = "CCPP SciDoc for UFS-SRW v3.0.0" +PROJECT_NUMBER = "SRW v3.0.0" PROJECT_BRIEF = "Common Community Physics Package Developed at DTC" PROJECT_LOGO = img/dtc_logo.png OUTPUT_DIRECTORY = doc @@ -115,9 +115,10 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- INPUT = pdftxt/SRW_mainpage.txt \ - pdftxt/SRW_all_shemes_list.txt \ + pdftxt/SRW_all_schemes_list.txt \ pdftxt/GFS_v16_suite.txt \ pdftxt/HRRR_suite.txt \ + pdftxt/RAP_suite.txt \ pdftxt/RRFS_v1beta_suite.txt \ pdftxt/WoFS_v0_suite.txt \ pdftxt/RRFS_SGSCLOUD.txt \ @@ -144,6 +145,7 @@ INPUT = pdftxt/SRW_mainpage.txt \ pdftxt/RUCLSM.txt \ pdftxt/THOMPSON.txt \ pdftxt/suite_input.nml.txt \ + pdftxt/CLM_LAKE.txt \ pdftxt/GFS_SPP.txt \ ../fv_sat_adj.F90 \ ../GFS_time_vary_pre.fv3.F90 \ @@ -206,6 +208,7 @@ INPUT = pdftxt/SRW_mainpage.txt \ ../sfc_nst_pre.f \ ../sfc_nst_post.f \ ../sfc_ocean.F \ + ../clm_lake.f90 \ ../module_nst_model.f90 \ ../module_nst_parameters.f90 \ ../module_nst_water_prop.f90 \ @@ -283,7 +286,6 @@ INPUT = pdftxt/SRW_mainpage.txt \ ../mp_nssl.F90 \ ../module_mp_nssl_2mom.F90 \ ../funcphys.f90 \ - ../physparam.f \ ../physcons.F90 \ ../radcons.f90 \ ../mersenne_twister.f \ @@ -302,7 +304,7 @@ EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = -EXAMPLE_PATH = pdftxt/RE210 \ +EXAMPLE_PATH = pdftxt/RE300 \ doc/html EXAMPLE_PATTERNS = EXAMPLE_RECURSIVE = NO @@ -540,7 +542,7 @@ DIRECTORY_GRAPH = YES DIR_GRAPH_MAX_DEPTH = 1 DOT_IMAGE_FORMAT = SVG INTERACTIVE_SVG = NO -DOT_PATH = +DOT_PATH = /Users/man.zhang/homebrew/bin/dot DOTFILE_DIRS = MSCFILE_DIRS = DIAFILE_DIRS = diff --git a/physics/docs/pdftxt/SRW_all_shemes_list.txt b/physics/docs/pdftxt/SRW_all_schemes_list.txt similarity index 100% rename from physics/docs/pdftxt/SRW_all_shemes_list.txt rename to physics/docs/pdftxt/SRW_all_schemes_list.txt diff --git a/physics/docs/pdftxt/all_shemes_list.txt b/physics/docs/pdftxt/all_schemes_list.txt similarity index 100% rename from physics/docs/pdftxt/all_shemes_list.txt rename to physics/docs/pdftxt/all_schemes_list.txt From 0154a658ba4752da9c00f1ab24b1a039787e3a7f Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Tue, 1 Aug 2023 10:20:26 -0600 Subject: [PATCH 17/44] Remove old namelists, remove "develop" from names --- ...elop.FV3_GFS_v16 => input.nml.FV3_GFS_v16} | 0 ...ml.develop.FV3_HRRR => input.nml.FV3_HRRR} | 0 ....nml.develop.FV3_RAP => input.nml.FV3_RAP} | 0 ..._RRFS_v1beta => input.nml.FV3_RRFS_v1beta} | 0 ...elop.FV3_WoFS_v0 => input.nml.FV3_WoFS_v0} | 0 .../RE300/namelists/input.nml.v21.FV3_GFS_v16 | 336 ------------------ .../RE300/namelists/input.nml.v21.FV3_HRRR | 299 ---------------- .../namelists/input.nml.v21.FV3_RRFS_v1beta | 291 --------------- .../RE300/namelists/input.nml.v21.FV3_WoFS_v0 | 297 ---------------- 9 files changed, 1223 deletions(-) rename physics/docs/pdftxt/RE300/namelists/{input.nml.develop.FV3_GFS_v16 => input.nml.FV3_GFS_v16} (100%) rename physics/docs/pdftxt/RE300/namelists/{input.nml.develop.FV3_HRRR => input.nml.FV3_HRRR} (100%) rename physics/docs/pdftxt/RE300/namelists/{input.nml.develop.FV3_RAP => input.nml.FV3_RAP} (100%) rename physics/docs/pdftxt/RE300/namelists/{input.nml.develop.FV3_RRFS_v1beta => input.nml.FV3_RRFS_v1beta} (100%) rename physics/docs/pdftxt/RE300/namelists/{input.nml.develop.FV3_WoFS_v0 => input.nml.FV3_WoFS_v0} (100%) delete mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_GFS_v16 delete mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_HRRR delete mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_RRFS_v1beta delete mode 100644 physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_WoFS_v0 diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_GFS_v16 b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_GFS_v16 similarity index 100% rename from physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_GFS_v16 rename to physics/docs/pdftxt/RE300/namelists/input.nml.FV3_GFS_v16 diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_HRRR b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_HRRR similarity index 100% rename from physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_HRRR rename to physics/docs/pdftxt/RE300/namelists/input.nml.FV3_HRRR diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RAP b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RAP similarity index 100% rename from physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RAP rename to physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RAP diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RRFS_v1beta b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RRFS_v1beta similarity index 100% rename from physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_RRFS_v1beta rename to physics/docs/pdftxt/RE300/namelists/input.nml.FV3_RRFS_v1beta diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_WoFS_v0 b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_WoFS_v0 similarity index 100% rename from physics/docs/pdftxt/RE300/namelists/input.nml.develop.FV3_WoFS_v0 rename to physics/docs/pdftxt/RE300/namelists/input.nml.FV3_WoFS_v0 diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_GFS_v16 b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_GFS_v16 deleted file mode 100644 index 6dc85900b..000000000 --- a/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_GFS_v16 +++ /dev/null @@ -1,336 +0,0 @@ -&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 = 5000000 - 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 = 220 - npy = 132 - 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_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. -/ - -&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 - iopt_trs = 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. - sfclay_compute_flux = .false. - shal_cnv = .true. - swhtr = .true. - trans_trac = .true. - use_ufo = .true. -/ - -&interpolator_nml - interp_method = 'conserve_great_circle' -/ - -&mpp_io_nml - deflate_level = 1 - shuffle = 1 -/ - -&nam_sfcperts -/ - -&nam_sppperts -/ - -&nam_stochy -/ - -&namsfc - fabsl = 99999 - faisl = 99999 - faiss = 99999 - fnacna = '' - fnaisc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' - fnglac = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_glacier.2x2.grb' - fnmskh = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/seaice_newland.grb' - fnmxic = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_maxice.2x2.grb' - fnsmcc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_soilmgldas.t126.384.190.grb' - fnsnoa = '' - fnsnoc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_snoclim.1.875.grb' - fntsfa = '' - fntsfc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/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. -/ - -&namsfc_dict - fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' - fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' - fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' - fnslpc = '../fix_lam/C403.slope_type.tileX.nc' - fnsotc = '../fix_lam/C403.soil_type.tileX.nc' - fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' - fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' - fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' - fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' - fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' -/ - -&surf_map_nml -/ diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_HRRR b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_HRRR deleted file mode 100644 index cd9408a4d..000000000 --- a/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_HRRR +++ /dev/null @@ -1,299 +0,0 @@ -&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 = 5000000 - 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 = 220 - npy = 132 - 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 - 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 - iopt_trs = 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. - sfclay_compute_flux = .true. - shal_cnv = .false. - swhtr = .true. - trans_trac = .true. - ttendlim = -999 - use_ufo = .true. -/ - -&interpolator_nml - interp_method = 'conserve_great_circle' -/ - -&nam_sfcperts -/ - -&nam_sppperts -/ - -&nam_stochy -/ - -&namsfc - fabsl = 99999 - faisl = 99999 - faiss = 99999 - fnacna = '' - fnaisc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' - fnglac = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_glacier.2x2.grb' - fnmskh = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/seaice_newland.grb' - fnmxic = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_maxice.2x2.grb' - fnsmcc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_soilmgldas.t126.384.190.grb' - fnsnoa = '' - fnsnoc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_snoclim.1.875.grb' - fntsfa = '' - fntsfc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/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. -/ - -&namsfc_dict - fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' - fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' - fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' - fnslpc = '../fix_lam/C403.slope_type.tileX.nc' - fnsotc = '../fix_lam/C403.soil_type.tileX.nc' - fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' - fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' - fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' - fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' - fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' -/ - -&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/RE300/namelists/input.nml.v21.FV3_RRFS_v1beta b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_RRFS_v1beta deleted file mode 100644 index 97e775107..000000000 --- a/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_RRFS_v1beta +++ /dev/null @@ -1,291 +0,0 @@ -&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 - 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 = 5000000 - 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 = 220 - npy = 132 - 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 - 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_snf = 4 - iopt_stc = 1 - iopt_tbot = 2 - iopt_trs = 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. - sfclay_compute_flux = .false. - shal_cnv = .false. - swhtr = .true. - trans_trac = .true. - ttendlim = -999 - use_ufo = .true. -/ - -&interpolator_nml - interp_method = 'conserve_great_circle' -/ - -&nam_sfcperts -/ - -&nam_sppperts -/ - -&nam_stochy -/ - -&namsfc - fabsl = 99999 - faisl = 99999 - faiss = 99999 - fnacna = '' - fnaisc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' - fnglac = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_glacier.2x2.grb' - fnmskh = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/seaice_newland.grb' - fnmxic = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_maxice.2x2.grb' - fnsmcc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_soilmgldas.t126.384.190.grb' - fnsnoa = '' - fnsnoc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_snoclim.1.875.grb' - fntsfa = '' - fntsfc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/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. -/ - -&namsfc_dict - fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' - fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' - fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' - fnslpc = '../fix_lam/C403.slope_type.tileX.nc' - fnsotc = '../fix_lam/C403.soil_type.tileX.nc' - fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' - fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' - fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' - fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' - fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' -/ - -&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/RE300/namelists/input.nml.v21.FV3_WoFS_v0 b/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_WoFS_v0 deleted file mode 100644 index 94cc34d0f..000000000 --- a/physics/docs/pdftxt/RE300/namelists/input.nml.v21.FV3_WoFS_v0 +++ /dev/null @@ -1,297 +0,0 @@ -&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_WoFS_v0' - 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 = 5000000 - 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 = 220 - npy = 132 - 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.02 - 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 - 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. - sfclay_compute_flux = .false. - shal_cnv = .false. - swhtr = .true. - trans_trac = .true. - ttendlim = -999 - use_ufo = .true. -/ - -&interpolator_nml - interp_method = 'conserve_great_circle' -/ - -&nam_sfcperts -/ - -&nam_sppperts -/ - -&nam_stochy -/ - -&namsfc - fabsl = 99999 - faisl = 99999 - faiss = 99999 - fnacna = '' - fnaisc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb' - fnglac = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_glacier.2x2.grb' - fnmskh = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/seaice_newland.grb' - fnmxic = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_maxice.2x2.grb' - fnsmcc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_soilmgldas.t126.384.190.grb' - fnsnoa = '' - fnsnoc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/fix_am/global_snoclim.1.875.grb' - fntsfa = '' - fntsfc = '../../../../../../../../../../det/UFS_SRW_App/v2p0/fix/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. -/ - -&namsfc_dict - fnabsc = '../fix_lam/C403.maximum_snow_albedo.tileX.nc' - fnalbc = '../fix_lam/C403.snowfree_albedo.tileX.nc' - fnalbc2 = '../fix_lam/C403.facsf.tileX.nc' - fnslpc = '../fix_lam/C403.slope_type.tileX.nc' - fnsotc = '../fix_lam/C403.soil_type.tileX.nc' - fntg3c = '../fix_lam/C403.substrate_temperature.tileX.nc' - fnvegc = '../fix_lam/C403.vegetation_greenness.tileX.nc' - fnvetc = '../fix_lam/C403.vegetation_type.tileX.nc' - fnvmnc = '../fix_lam/C403.vegetation_greenness.tileX.nc' - fnvmxc = '../fix_lam/C403.vegetation_greenness.tileX.nc' -/ - -&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. -/ From 8f447558d9638c713be4c5aa285d6d6e4f3f09d6 Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Tue, 1 Aug 2023 10:40:35 -0600 Subject: [PATCH 18/44] Incorporate changes to FV3_HRRR namelist suggested by Tanya --- .../pdftxt/RE300/namelists/input.nml.FV3_HRRR | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_HRRR b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_HRRR index 8a7d621f3..e30bd44c6 100644 --- a/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_HRRR +++ b/physics/docs/pdftxt/RE300/namelists/input.nml.FV3_HRRR @@ -65,7 +65,7 @@ d2_bg_k1 = 0.2 d2_bg_k2 = 0.04 d4_bg = 0.12 - d_con = 1.0 + d_con = 0.5 d_ext = 0.0 dddmp = 0.1 delt_max = 0.008 @@ -82,11 +82,11 @@ 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 + hord_dp = 6 + hord_mt = 6 + hord_tm = 6 + hord_tr = 8 + hord_vt = 6 hydrostatic = .false. io_layout = 1, 1 k_split = 2 @@ -99,14 +99,14 @@ make_nh = .true. mountain = .false. n_split = 5 - n_sponge = 24 + n_sponge = 9 n_zs_filter = 0 na_init = 1 ncep_ic = .false. nggps_ic = .true. no_dycore = .false. nord = 3 - nord_tr = 2 + nord_tr = 0 npx = 220 npy = 132 npz = 64 @@ -150,6 +150,7 @@ cnvgwd = .false. cplflx = .false. debug = .false. + diag_log = .true. do_deep = .false. do_gsl_drag_ls_bl = .true. do_gsl_drag_ss = .true. @@ -166,14 +167,14 @@ h2o_phys = .true. hybedmf = .false. iaer = 5111 - ialb = 1 + ialb = 2 iau_delthrs = 6 iau_inc_files = '' iaufhrs = 30 icliq_sw = 2 icloud_bl = 1 ico2 = 2 - iems = 1 + iems = 2 imfdeepcnv = -1 imfshalcnv = -1 imp_physics = 8 @@ -191,12 +192,15 @@ iopt_tbot = 2 iopt_trs = 2 iovr = 3 + isncond_opt = 2 + isncovr_opt = 3 isol = 2 isot = 1 isubc_lw = 2 isubc_sw = 2 ivegsrc = 1 kice = 9 + kice = 9 ldiag3d = .false. lheatstrg = .false. lradar = .true. @@ -205,9 +209,9 @@ lsoil_lsm = 9 ltaerosol = .true. lwhtr = .true. + mosaic_lu = 0 + mosaic_soil = 0 nsfullradar_diag = 3600 - nst_anl = .true. - nstf_name = 2, 1, 0, 0, 0 oz_phys = .false. oz_phys_2015 = .true. pdfcld = .false. @@ -220,6 +224,7 @@ sfclay_compute_flux = .true. shal_cnv = .false. swhtr = .true. + thsfc_loc = .false. trans_trac = .true. ttendlim = -999 use_ufo = .true. From aaa02d82af9309ea3df4880ad9d5eb9eb949b25d Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Tue, 1 Aug 2023 11:02:55 -0600 Subject: [PATCH 19/44] Address Ligia/Weiwei's comments --- physics/docs/pdftxt/CU_GF_deep.txt | 8 ++++---- physics/docs/pdftxt/RRFS_v1beta_suite.txt | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt index 1a02516f7..3b01a05a4 100644 --- a/physics/docs/pdftxt/CU_GF_deep.txt +++ b/physics/docs/pdftxt/CU_GF_deep.txt @@ -6,17 +6,17 @@ The Grell-Freitas (GF) scheme, as described in Grell and Freitas (2014) \cite gr Freitas et al. (2018) \cite freitas_et_al_2018, Freitas et al. (2021) \cite freitas_et_al_2021, and Lin et al. (2022) \cite Lin_2022 follows the mass flux approach published by Grell (1993) \cite grell_1993. Further developments by Grell and \f$D\acute{e}v\acute{e}nyi\f$ (2002) \cite Grell_2002 included implementing -stochastics through allowing parameter perturbations. In GF scale awareness, and the aerosol dependence through rain generation (following +stochastics through allowing parameter perturbations. The GF scheme takes into account aerosol dependence through rain generation (following Berry (1968) \cite berry_1968 and evaporation formulations (following Jiang et al. (2010) \cite Jiang_2010 ), depending on the cloud concentration nuclei at cloud base were added. The GF scheme includes mixed phase physics impact, momentum transport, a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction and transition from shallow, congestus and deep convection regimes. The vertical mass flux distribution of shallow, congestus and -deep convection regimes is characterized by Probability Density Functions (PDFs). The three PDF's are meant to represent the average +deep convection regimes is characterized by Probability Density Functions (PDFs). The three PDFs are meant to represent the average statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived -from the PDF's. The deep and congestus convection considers scale awareness (Arakawa et al. (2011) \cite Arakawa_2011 ). However, the shallow convection is not scale-aware. Aerosol dependence is implemented through dependence of rain generation and +from the PDFs. Aerosol dependence (considered experimental and not supported in this release) is implemented through dependence of rain generation and evaporation formulations depending on the cloud concentration nuclei at cloud base (Berry 1968 \cite berry_1968, -Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Wet scavenging is considered to add a memory impact. Aerosol dependence is considered experimental and is turned off at this point. GF is able to transport tracers. +Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Wet scavenging is considered to add a memory impact. GF is able to transport tracers. Recently, GPU capabilities and cap suppressing (\p do_cap_suppress) based on radar data assimilation have been added,and they are used only for the RAP suite. The impacts of GF scheme in operational RAP/HRRR include:(a)uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes; diff --git a/physics/docs/pdftxt/RRFS_v1beta_suite.txt b/physics/docs/pdftxt/RRFS_v1beta_suite.txt index ae400b982..b2e4ba676 100644 --- a/physics/docs/pdftxt/RRFS_v1beta_suite.txt +++ b/physics/docs/pdftxt/RRFS_v1beta_suite.txt @@ -3,7 +3,7 @@ \section RRFS_v1beta_suite_overview Overview -The RRFS_v1beta suite is one of candicates for the future operational implementation of +The RRFS_v1beta 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. This suite is most applicable for runs at 3-km resolution since it does not parameterize deep convection. From dbcd50fee66582d9b58fb03872b4ce34ab23531d Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Tue, 1 Aug 2023 15:08:15 -0600 Subject: [PATCH 20/44] Remove hard-coded path in doxyfile --- physics/docs/ccppsrw_doxyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/docs/ccppsrw_doxyfile b/physics/docs/ccppsrw_doxyfile index 5c9c797b5..a45fad88f 100644 --- a/physics/docs/ccppsrw_doxyfile +++ b/physics/docs/ccppsrw_doxyfile @@ -542,7 +542,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 = From 39dccc8e2ade0918f1823b6d7bdb5abb0d101898 Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Tue, 1 Aug 2023 16:06:29 -0600 Subject: [PATCH 21/44] Various formatting fixes, grammar and wording changes --- physics/clm_lake.f90 | 2 +- physics/docs/pdftxt/CLM_LAKE.txt | 16 ++++++++-------- physics/docs/pdftxt/CU_GF_deep.txt | 12 ++++++------ physics/docs/pdftxt/GFS_NOAHMP.txt | 2 +- physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt | 4 ++-- physics/docs/pdftxt/RUCLSM.txt | 6 +++--- physics/docs/pdftxt/WoFS_v0_suite.txt | 2 +- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index 1728d28b5..093fb407c 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -2746,7 +2746,7 @@ end subroutine SoilThermProp_Lake ! DESCRIPTION: !> Calculation of the phase change within snow, soil, & lake layers: !!\n (1) Check the conditions for which the phase change may take place, - !! i.e., the layer temperature is great than the freezing point + !! i.e., the layer temperature is greater than the freezing point !! and the ice mass is not equal to zero (i.e. melting), !! or the layer temperature is less than the freezing point !! and the liquid water mass is greater than the allowable supercooled diff --git a/physics/docs/pdftxt/CLM_LAKE.txt b/physics/docs/pdftxt/CLM_LAKE.txt index d78244cb2..e22b096ec 100644 --- a/physics/docs/pdftxt/CLM_LAKE.txt +++ b/physics/docs/pdftxt/CLM_LAKE.txt @@ -3,14 +3,14 @@ \section des_clmlake Description The Community Land Model (CLM) lake model is a multi-level one-dimensional lake model that has been implemented within the operational 3-km HRRR and -13-km RAP for small lakes (Benjamin et al. (2022) \cite gmd-15-6659-2022). It is the Community Land Model, version 4.5. +13-km RAP for small lakes (Benjamin et al. (2022) \cite gmd-15-6659-2022). This implementation is from the Community Land Model version 4.5 (Oleson et al. (2013) \cite Oleson2013). Subin et al. (2012) \cite Subin_2012 describe the 1-d CLM lake model as applied within the Community Earth System Model (CESM) as a component of the overall CESM CLM (Lawrence et al. (2019) \cite Lawrence_2019). Gu et al. (2015) \cite Gu2015 describe the introduction of the CLM lake model into the WRF model and inital experiments using its 1-d solution for both lakes Superior (average depth of 147 m) and Erie (average depth of 19 m). The atmospheric inputs into the model are temperature, water vapor, horizontal wind components from the lowest atmospheric level -and short-wave and longwave radiative fluxes. The CLM lake model then provides latent heat and sensible heat fluxes back to the +and shortwave and longwave radiative fluxes. The CLM lake model then provides latent heat and sensible heat fluxes back to the atmosphere. It also computes 2-m temperature/moisture, skin temperature, lake temperature, ice fraction, ice thickness, snow water equivalent and snow depth. The CLM lake model divides the vertical lake profile into 10 layers driven by wind-driven eddies. The thickness of the top layer is fixed to 10-cm and the rest of the lake depth is divided evenly into the other 9 layers. Energy @@ -23,22 +23,22 @@ Testing of the CLM lake model within RAP/HRRR applications showed computational 0.1% in run time. The lake/snow variables have to be continuously transfered within the CLM lake model from one forecast to another, constrained by the atmospheric data assimilation. The lake-cycling initialization in RAP/HRRR has been effective overall, owing to accurate houly estimates of near-surface temperature, moisture and winds, and shortwave and longwave estimates provided to the 1-d CLM -lake model every time step (Benjamin et al. (2022) \cite gmd-15-6659-2022). Cycling technique showed improvements over initializing -lake temperatures from the SST analysis, problematic for small water bodies. The improvements are particularly eminent during transition -periods between cold and warm seasons, and in the regions with anomalies in weather conditions. The CLM lake model has the potential +lake model every time step (Benjamin et al. (2022) \cite gmd-15-6659-2022). Cycling techniques showed improvements over initializing +lake temperatures from the SST analysis, which is problematic for small water bodies. The improvements are particularly eminent during transition +periods between cold and warm seasons, and in the regions with anomalous weather conditions. The CLM lake model has the potential to improve surface prediction in the vicinity of small lakes. The CLM lake model requires bathymetry for the lake points in the model domain. Grid points are assigned as lake points when the fraction of lake coverage in the grid cell exceeds 50% and when this point is disconnected from oceans. The lake water mask is -therefore binary, set to either 1 or 0. This binary approach for models with higher horizontal resolution, for example, 3-km resolution in -in the UFS SRW App, is capable of capturing the effect of lakes on regional heat and moisture fluxes. +therefore binary, set to either 1 or 0. This binary approach for models with higher horizontal resolution --- for example, 3-km resolution in +in the UFS SRW App --- is capable of capturing the effect of lakes on regional heat and moisture fluxes. Lake depths for the RRFS lake configuration (Fig.1) are assigned from a global dataset provided by Kourzeneva et al.(2012) \cite Kourzeneva_2012, this dataset is referred to as GLOBv3 bathymetry in the UFS_UTL. @image html https://user-images.githubusercontent.com/12705538/250180794-76af93a2-a7ba-4e9a-9478-5657198862b8.png "Figure 1: Lake depths for lakes in the 3-km RRFS domain." width=600 -To cold-start the CLM lake model in the UFS SRW App: +To cold-start the CLM lake model in the UFS weather model: - Use the CLM option in the input.nml \n - lkm = 1 \n - iopt_lake = 2 diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt index 3b01a05a4..4b504863d 100644 --- a/physics/docs/pdftxt/CU_GF_deep.txt +++ b/physics/docs/pdftxt/CU_GF_deep.txt @@ -17,23 +17,23 @@ a spectrum of plumes within the grid box. Forcing is different for each characte from the PDFs. Aerosol dependence (considered experimental and not supported in this release) is implemented through dependence of rain generation and evaporation formulations depending on the cloud concentration nuclei at cloud base (Berry 1968 \cite berry_1968, Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Wet scavenging is considered to add a memory impact. GF is able to transport tracers. -Recently, GPU capabilities and cap suppressing (\p do_cap_suppress) based on radar data assimilation have been added,and they are used only for the RAP suite. +Recently, GPU capabilities and cap suppressing (\p do_cap_suppress) based on radar data assimilation have been added, and they are used only for the RAP suite. -The impacts of GF scheme in operational RAP/HRRR include:(a)uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes; +The impacts of GF scheme in operational RAP/HRRR include: (a)uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes; (b)takes parameterization uncertainty into account by allowing parameters from multiple convective schemes which can be perturbed -internally or with temporal and spatial correlation patterns; (c)for higher resolutions (less than 10 km), in addition to scale awareness as in Arakawa et al. (2011) \cite Arakawa_2011 GF can transition as grid spacing decreases into a shallow convection scheme; (d)Coupled to the grid scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated precipitating convective cloud and shallow convective clouds. +internally or with temporal and spatial correlation patterns; (c)for higher resolutions (less than 10 km), in addition to scale awareness as in Arakawa et al. (2011) \cite Arakawa_2011 GF can transition as grid spacing decreases into a shallow convection scheme; (d)Coupled to the grid-scale precipitation and radiation schemes through passing of diagnosed cloud liquid and ice from simulated precipitating convective cloud and shallow convective clouds. \section version_cugf_enh CCPP Physics Updates \version UFS-SRW v3.0.0 -\b The \b Implementation \b of \b GF \b in \b RRFS +The Implementation of GF in RRFS prototypes - Updates for aerosol-awareness (experimental) - Scale-awareness is turned off when explicit microphysics is not active anywhere in the column -- GF completely is turned off at grid points when MYNN produces shallow convection at that point +- GF is completely turned off at grid points when MYNN produces shallow convection at that point - Radar reflectivity considers mass flux PDF as well as whether scale-awareness is turned on at the grid point in equation. -\b The \b implementation \b of \b GF \b in \b HAFS \b is \b undergoing. +The implementation of GF in HAFS is ongoing. \section intra_rough_gf Intraphysics Communication The GF scheme passes cloud hydrometeors to the grid-scale microphysics scheme (\ref THOMPSON ) through detrainment from each diff --git a/physics/docs/pdftxt/GFS_NOAHMP.txt b/physics/docs/pdftxt/GFS_NOAHMP.txt index 386ae816c..e48b7cafc 100644 --- a/physics/docs/pdftxt/GFS_NOAHMP.txt +++ b/physics/docs/pdftxt/GFS_NOAHMP.txt @@ -10,7 +10,7 @@ This implementation of the NoahMP Land Surface Model (LSM) is adapted from the v \section noahmp_update CCPP Physics Updates \version UFS-SRW v3.0.0 -- As part of a larger-scale effort to unify how microphysics outputs (in particular snow) are used in the land models and outputs, an addition option for using the unified frozen precipitation fraction in NoahMP was added +- As part of a larger-scale effort to unify how microphysics outputs (in particular snow) are used in the land models and outputs, an additional option for using the unified frozen precipitation fraction in NoahMP was added - Diagnostic 2-meter temperature and humidity are based on vegetation and bare-ground tiles - Bug fixes for GFS-based thermal roughness length scheme diff --git a/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt b/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt index 3ae1a0234..d5bc9489c 100644 --- a/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt +++ b/physics/docs/pdftxt/GFS_SATMEDMFVDIFQ.txt @@ -31,8 +31,8 @@ reduces the mixing length in a strong shear environment such as a hurricane. background diffusivity in the inversion layers is reduced as a function of surface roughness and green vegetation fraction. - To reduce the PBL overgrowth, the PBL updraft overshoot is not only limited by -bulk Richardson number-based-PBL depth, but the virtual potential temperature at -top of the surface layer rather than that at the model first layer is also used as +bulk Richardson number-based PBL depth, but the virtual potential temperature at +the top of the surface layer rather than that at the model first layer is also used as the near-surface virtual potential temperature in the bulk-Richardson number computation. This helps to largely suppress the unrealistic widespread popcorn-like precipitation. - Updraft entrainment rates for moisture, hydrometeors, and tracers are increased by about 30%. diff --git a/physics/docs/pdftxt/RUCLSM.txt b/physics/docs/pdftxt/RUCLSM.txt index a836e7b93..e8212df21 100644 --- a/physics/docs/pdftxt/RUCLSM.txt +++ b/physics/docs/pdftxt/RUCLSM.txt @@ -17,7 +17,7 @@ The parameterizations in the RUC LSM describe complicated atmosphere–land surf excessive sensitivity to multiple uncertain surface parameters. Nevertheless, the RUC LSM, when coupled with the hourly-assimilating atmospheric model, demonstrated over years of ongoing cycling (Benjamin et al. 2004a,b \cite Benjamin_2004a \cite Benjamin_2004b ; Berbery et al. 1999 \cite Berbery_1999) that it can produce a realistic evolution of hydrologic and time-varying soil fields (i.e., soil moisture and temperature) that cannot be directly -observed over large areas, as well as the evolution of snow cover on the ground surface. This result is possible only if the soil–vegetation–snow +observed over large areas, as well as the evolution of snow cover on the ground surface. This result is possible only if the soil–vegetation–snow component of the coupled model, constrained only by atmospheric boundary conditions and the specification of surface characteristics, has sufficient skill to avoid long-term drift. @@ -28,7 +28,7 @@ included in phase 2(d) of the Project for the Intercomparison of Land Surface Pr Luo et al. 2003 \cite Luo_2003 ). The RUC LSM was also tested during the Snow Models Intercomparison Project (SnowMIP, SnowMIP2, ESM-SnowMIP), with emphasis on snow parameterizations for both grassland and forest locations in different parts of the world (Etchevers et al. 2002, 2004 \cite Etchevers_2002 \cite Etchevers_2004; Essery et al. 2009 \cite Essery_2009 ; Rutter et al. 2009 \cite Rutter_2009 , -Krinner et al. 2018 \cite Krinner_2018 ). The analysis of RUC LSM performance over 10 reference sites in ESM-SnowMIP rated it on the 4th place +Krinner et al. 2018 \cite Krinner_2018 ). The analysis of RUC LSM performance over 10 reference sites in ESM-SnowMIP rated it 4th place among the 26 participating models. The results were published in Menard et al.(2021) \cite Menard_2021 and Essery et al. (2020) \cite essery_et_al_2020. RUC LSM received high rankings in ESM-SnowMIP experiement in terms of multi-year snow cover and surface temperature simulations for several sites located in different parts of the world (Fig.2, Menard et al.2021 \cite Menard_2021). @@ -61,7 +61,7 @@ specifying surface parameters for the dominant soil and land-use category in the grid box, RUC LSM has an option to take into account the sub-grid scale heterogeneity in the computation of such parameters as roughness length, emissivity, soil porosity, soil heat capacity and others. The difference in roughness between the mosaic and dominant category presented on Figure 3, is positive from contribution of the forests, which helped to -reduce high biases of surface wind speeds in these regions. In the cropland regions, roughness lenghth has also a seasonal variability depending on the growing phase of the plants. This again helped to improve the wind forecasts during the warm season. +reduce high biases of surface wind speeds in these regions. In cropland regions, roughness length also has a seasonal variability depending on the growing phase of the plants. This again helped to improve the wind forecasts during the warm season. Turning on sub-grid-scale heterogeneity option requries: \p mosaic_lu = 1 and \p mosaic_soil = 1 in the namelist, and fractions of soil and vegetation types in a grid cell. \image html ruc_lsm_heterogeneity.png "Figure 3: sub-grid scale heterogeneity of surface parameters in RUC LSM (Courtesy of T.G. Smirnova)" width=900 diff --git a/physics/docs/pdftxt/WoFS_v0_suite.txt b/physics/docs/pdftxt/WoFS_v0_suite.txt index 4561109fa..385ad7b7d 100644 --- a/physics/docs/pdftxt/WoFS_v0_suite.txt +++ b/physics/docs/pdftxt/WoFS_v0_suite.txt @@ -5,7 +5,7 @@ The WoFS_v0 suite is targeted for use in the upcoming operational implementation of the NOAA's Warn-on-Forecast System (WoFS) and for the RRFS ensemble. -This suite is most applicable for runs at 3-km resolution since it does +This suite is most applicable for runs at 3-km resolution and higher since it does not parameterize deep convection. The WoFS suite uses the parameterizations in the following order: From 6b12f193deb43fc42915b85a731564f716fcf03b Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Tue, 1 Aug 2023 16:16:15 -0600 Subject: [PATCH 22/44] Less ambiguous wording regarding resolution --- physics/docs/pdftxt/WoFS_v0_suite.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/docs/pdftxt/WoFS_v0_suite.txt b/physics/docs/pdftxt/WoFS_v0_suite.txt index 385ad7b7d..788c98323 100644 --- a/physics/docs/pdftxt/WoFS_v0_suite.txt +++ b/physics/docs/pdftxt/WoFS_v0_suite.txt @@ -5,7 +5,7 @@ The WoFS_v0 suite is targeted for use in the upcoming operational implementation of the NOAA's Warn-on-Forecast System (WoFS) and for the RRFS ensemble. -This suite is most applicable for runs at 3-km resolution and higher since it does +This suite is most applicable for runs at <=3-km resolution and higher since it does not parameterize deep convection. The WoFS suite uses the parameterizations in the following order: From 6884732dc149a496e53354079f2d931fb7b265f1 Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Tue, 1 Aug 2023 16:18:41 -0600 Subject: [PATCH 23/44] *actually* fix ambiguous wording --- physics/docs/pdftxt/WoFS_v0_suite.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/docs/pdftxt/WoFS_v0_suite.txt b/physics/docs/pdftxt/WoFS_v0_suite.txt index 788c98323..bf868a461 100644 --- a/physics/docs/pdftxt/WoFS_v0_suite.txt +++ b/physics/docs/pdftxt/WoFS_v0_suite.txt @@ -4,8 +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) and for the RRFS ensemble. -This suite is most applicable for runs at <=3-km resolution and higher since it does +of the NOAA's Warn-on-Forecast System (WoFS) and for the RRFS ensemble. +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: From 724c20ff7d71ed26899642a810e84b294482cc7f Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Thu, 3 Aug 2023 16:39:29 -0600 Subject: [PATCH 24/44] Weiwei's suggested changes --- physics/docs/pdftxt/CLM_LAKE.txt | 3 ++- physics/docs/pdftxt/CU_GF_deep.txt | 16 ++++------------ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/physics/docs/pdftxt/CLM_LAKE.txt b/physics/docs/pdftxt/CLM_LAKE.txt index e22b096ec..f80e55b25 100644 --- a/physics/docs/pdftxt/CLM_LAKE.txt +++ b/physics/docs/pdftxt/CLM_LAKE.txt @@ -38,7 +38,8 @@ this dataset is referred to as GLOBv3 bathymetry in the UFS_UTL. @image html https://user-images.githubusercontent.com/12705538/250180794-76af93a2-a7ba-4e9a-9478-5657198862b8.png "Figure 1: Lake depths for lakes in the 3-km RRFS domain." width=600 -To cold-start the CLM lake model in the UFS weather model: +To cold-start the CLM lake model in regional configurations of the UFS: + - Use the CLM option in the input.nml \n - lkm = 1 \n - iopt_lake = 2 diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt index 4b504863d..412dab5f0 100644 --- a/physics/docs/pdftxt/CU_GF_deep.txt +++ b/physics/docs/pdftxt/CU_GF_deep.txt @@ -6,18 +6,10 @@ The Grell-Freitas (GF) scheme, as described in Grell and Freitas (2014) \cite gr Freitas et al. (2018) \cite freitas_et_al_2018, Freitas et al. (2021) \cite freitas_et_al_2021, and Lin et al. (2022) \cite Lin_2022 follows the mass flux approach published by Grell (1993) \cite grell_1993. Further developments by Grell and \f$D\acute{e}v\acute{e}nyi\f$ (2002) \cite Grell_2002 included implementing -stochastics through allowing parameter perturbations. The GF scheme takes into account aerosol dependence through rain generation (following -Berry (1968) \cite berry_1968 and evaporation formulations (following Jiang et al. (2010) \cite Jiang_2010 ), depending on the -cloud concentration nuclei at cloud base were added. The GF scheme includes mixed phase physics impact, momentum transport, - a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction -and transition from shallow, congestus and deep convection regimes. The vertical mass flux distribution of shallow, congestus and -deep convection regimes is characterized by Probability Density Functions (PDFs). The three PDFs are meant to represent the average -statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents -a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived -from the PDFs. Aerosol dependence (considered experimental and not supported in this release) is implemented through dependence of rain generation and -evaporation formulations depending on the cloud concentration nuclei at cloud base (Berry 1968 \cite berry_1968, -Jiang et al.(2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010 ). Wet scavenging is considered to add a memory impact. GF is able to transport tracers. -Recently, GPU capabilities and cap suppressing (\p do_cap_suppress) based on radar data assimilation have been added, and they are used only for the RAP suite. +stochastics through allowing parameter perturbations. +The GF scheme includes mixed phase physics impact, momentum transport, a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction and transition from shallow, congestus and deep convection regimes. +The vertical mass flux distribution of shallow, congestus and deep convection regimes is characterized by Probability Density Functions (PDFs). The three PDFs are meant to represent the average statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived from the PDFs. +The GF scheme takes into account aerosol dependence (considered experimental and not supported in this release), which is implemented through rain generation (following Berry (1968) \cite berry_1968 and evaporation formulations depending on the cloud concentration nuclei at cloud base (Jiang et al. (2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010). Wet scavenging is considered to add a memory impact. GF is able to transport tracers. Recently, GPU capabilities and cap suppressing (\p do_cap_suppress) based on radar data assimilation have been added, and they are used only for the RAP suite. The impacts of GF scheme in operational RAP/HRRR include: (a)uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes; (b)takes parameterization uncertainty into account by allowing parameters from multiple convective schemes which can be perturbed From 816f607d78a4e89e79f405865f7dfceee3b225fd Mon Sep 17 00:00:00 2001 From: "Michael Kavulich, Jr" Date: Mon, 14 Aug 2023 11:01:43 -0600 Subject: [PATCH 25/44] More fixes from Weiwei --- physics/docs/pdftxt/CLM_LAKE.txt | 2 +- physics/docs/pdftxt/CU_GF_deep.txt | 2 +- physics/docs/pdftxt/SRW_all_schemes_list.txt | 2 +- physics/docs/pdftxt/SRW_mainpage.txt | 13 ++++++------- physics/docs/pdftxt/THOMPSON.txt | 4 ++-- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/physics/docs/pdftxt/CLM_LAKE.txt b/physics/docs/pdftxt/CLM_LAKE.txt index f80e55b25..498797511 100644 --- a/physics/docs/pdftxt/CLM_LAKE.txt +++ b/physics/docs/pdftxt/CLM_LAKE.txt @@ -22,7 +22,7 @@ in the lake. Testing of the CLM lake model within RAP/HRRR applications showed computational efficiency of the model with no change of even 0.1% in run time. The lake/snow variables have to be continuously transfered within the CLM lake model from one forecast to another, constrained by the atmospheric data assimilation. The lake-cycling initialization in RAP/HRRR has been effective overall, owing to -accurate houly estimates of near-surface temperature, moisture and winds, and shortwave and longwave estimates provided to the 1-d CLM +accurate hourly estimates of near-surface temperature, moisture and winds, and shortwave and longwave estimates provided to the 1-d CLM lake model every time step (Benjamin et al. (2022) \cite gmd-15-6659-2022). Cycling techniques showed improvements over initializing lake temperatures from the SST analysis, which is problematic for small water bodies. The improvements are particularly eminent during transition periods between cold and warm seasons, and in the regions with anomalous weather conditions. The CLM lake model has the potential diff --git a/physics/docs/pdftxt/CU_GF_deep.txt b/physics/docs/pdftxt/CU_GF_deep.txt index 412dab5f0..ca06666e5 100644 --- a/physics/docs/pdftxt/CU_GF_deep.txt +++ b/physics/docs/pdftxt/CU_GF_deep.txt @@ -9,7 +9,7 @@ Further developments by Grell and \f$D\acute{e}v\acute{e}nyi\f$ (2002) \cite Gre stochastics through allowing parameter perturbations. The GF scheme includes mixed phase physics impact, momentum transport, a diurnal cycle closure (Bechtold et al. (2014) \cite bechtold_et_al_2014 ), and a trimodal spectral size to simulate the interaction and transition from shallow, congestus and deep convection regimes. The vertical mass flux distribution of shallow, congestus and deep convection regimes is characterized by Probability Density Functions (PDFs). The three PDFs are meant to represent the average statistical mass flux characteristic of deep, congestus, and shallow (respectively) plumes in the grid area. Each PDF therefore represents a spectrum of plumes within the grid box. Forcing is different for each characteristic type. Entrainment and detrainment are derived from the PDFs. -The GF scheme takes into account aerosol dependence (considered experimental and not supported in this release), which is implemented through rain generation (following Berry (1968) \cite berry_1968 and evaporation formulations depending on the cloud concentration nuclei at cloud base (Jiang et al. (2010) \cite Jiang_2010, and Lee and Feingold (2010) \cite lee_and_feingold_2010). Wet scavenging is considered to add a memory impact. GF is able to transport tracers. Recently, GPU capabilities and cap suppressing (\p do_cap_suppress) based on radar data assimilation have been added, and they are used only for the RAP suite. +The GF scheme takes into account aerosol dependence (considered experimental and not supported in this release), which is implemented through rain generation (following Berry (1968) \cite berry_1968 and evaporation formulations depending on the cloud concentration nuclei at cloud base (Jiang et al. (2010) \cite Jiang_2010), and Lee and Feingold (2010) \cite lee_and_feingold_2010). Wet scavenging is considered to add a memory impact. GF is able to transport tracers. Recently, GPU capabilities and cap suppressing (\p do_cap_suppress) based on radar data assimilation have been added, and they are used only for the RAP suite. The impacts of GF scheme in operational RAP/HRRR include: (a)uses mass-flux schemes, which are more physically realistic than (sounding) adjustment schemes; (b)takes parameterization uncertainty into account by allowing parameters from multiple convective schemes which can be perturbed diff --git a/physics/docs/pdftxt/SRW_all_schemes_list.txt b/physics/docs/pdftxt/SRW_all_schemes_list.txt index 16a1727e6..d9ef65315 100644 --- a/physics/docs/pdftxt/SRW_all_schemes_list.txt +++ b/physics/docs/pdftxt/SRW_all_schemes_list.txt @@ -68,7 +68,7 @@ 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. -The UFS Short Range Weather Application (SRW App) v3.0.0 supports four physicsphysics suites. +The UFS Short Range Weather Application (SRW App) v3.0.0 supports four physics suites. Table 1. Physics suites and primary schemes supported in SRW v3.0.0 \tableofcontents diff --git a/physics/docs/pdftxt/SRW_mainpage.txt b/physics/docs/pdftxt/SRW_mainpage.txt index 5e854034c..1f756c3ff 100644 --- a/physics/docs/pdftxt/SRW_mainpage.txt +++ b/physics/docs/pdftxt/SRW_mainpage.txt @@ -12,13 +12,12 @@ supports suites: - \ref WoFS_v0_page - \ref rap_suite_page -\attention Here all supported suites are a recent snapshot of - -the UFS fork for CCPP . In this regard, GFS_v16 Suite is -not the same code as in the operational GFS v16. First of all, the operational GFS_v16 does not use CCPP at all. -Secondly, most of physics schemes hosted in CCPP repository have marched ahead since GFS was updated to version 16.0 on 22 March 2021. -This implication should be also applied to all other suites: as such, RAP/HRRR suites in this release are +\attention Important note:
        All supported suites are a recent snapshot of +the UFS fork for CCPP . In this regard, they may differ substantially from the suites used in operational models. For example, the GFS_v16 Suite is +not the same code as in the operational GFS v16. While the suite is nominally the same, using the same schemes as the operational version, most +of the individual physics schemes hosted in the CCPP repository have changed, including new development and bug fixes compared to the versions included +in GFS version 16.0, which was released on 22 March 2021. +This implication should be also applied to all other suites: RAP/HRRR suites in this release do not correspond directly to the the evolving version of the RAP/HRRR physics in operations. - */ diff --git a/physics/docs/pdftxt/THOMPSON.txt b/physics/docs/pdftxt/THOMPSON.txt index 4ad481887..914a95922 100644 --- a/physics/docs/pdftxt/THOMPSON.txt +++ b/physics/docs/pdftxt/THOMPSON.txt @@ -89,8 +89,8 @@ Two namelist variables control the usage of the semi-Lagrangian sedimentation, \ the upper level and reduce the OLR bias. - For the non-aerosol option of the scheme, the cloud number concentration is divided into two parts (over land and others). The number -concentration over the ocean is reduced to a smaller numer (50/L) from its default (100/L). The purpose is to reduce the bias in surface -downward shortwave radiative flux off the coastal regional including the Southeast Pacific. +concentration over the ocean is reduced to a smaller number (50/L) from its default (100/L). The purpose is to reduce the bias in surface +downward shortwave radiative flux off the coastal region including the Southeast Pacific. \section intra_thompson Intraphysics Communication - \ref arg_table_mp_thompson_run From 9c342a5f5841656629d85589fec5507657a561f7 Mon Sep 17 00:00:00 2001 From: "Timothy S. Sliwinski" Date: Tue, 15 Aug 2023 00:23:30 +0000 Subject: [PATCH 26/44] Adding OpenACC statements to accelerate MYNN surface scheme performance through GPU offloading Overview: --------- With very minimal changes to the original code of the scheme, the MYNN surface scheme has been enhanced with OpenACC statements which introduce the capability for offloading computational execution to OpenACC-supported accelerator devices (e.g. Nvidia GPUs). Since the scheme operates by looping multiple times over independent vertical columns, the overall computational strategy maps well to GPU hardware where multiple iterations of each loop can be run in parallel with SIMD methods. Data movement has been optimized to ensure data transfers from host memory to device memory are limited as data movement is a significant source of latency when performing offloading to accelerator devices. Performance increases on a GPU ranged from a 3.3x slowdown to a 41.9x speedup versus CPU execution (See the Performance section for more information). MYNN Scheme Code Changes: ------------------------- A few minor code changes were unavoidable due to certain limitations on what OpenACC is able to execute on the accelerator within kernel and parallel blocks. A complete list of these changes is below: 1. Adding preprocessor directives to disable multiple standard output statements, including those used for debug output. The challenges of these are different depending on the view from the host or accelerator. When run in parallel on the accelerator, these statements are not guaranteed to be presented to the user in-order. Also, in limited cases, these statements would have to output variables that were not transferred to the GPU because they were not necessary for computation, introducing additional transfer overhead to ensure they were present only for these output statements. Further, with hundreds of threads executing at once, the output could be quite large and unwieldy. That said, some of these statements could have been run on the host to alleviate the problems introduced by parallelization on the device. However, this would have necessitated device-to-host transfers of variables to ensure values being output were correct while introducing additional transfer overhead costs to performance. Disabling these for accelerators only seemed the best course of action. These are disabled based on the presence of the __OPENACC compile time variable to ensure these are only disabled when the code is compiled for accelerator usage and does not affect CPU execution. 2. Changing the CCPP errmsg variable declaration on line 349 of module_sf_mynn.F90 to be a fixed 200 length character array. Since this variable is set at times in the middle of accelerator kernel regions, it must be present on the accelerator. However, when defined with "len=*", it is an assumed-size array, which OpenACC does not support on the accelerator. Rather than disable this variable completely, changing it to a fixed length allows it to be transferred to/from the accelerator and used. This change is enforced by preprocessor directives based on the presence of the __OPENACC compile time variable and ensures this change only occurs when the code is compiled for accelerator usage, therefore it does not affect CPU execution. 3. Adding preprocessor directives to "move" return statement on line 1399 of module_sf_mynn.F90 out of the main i-loop and instead execute it at line 2006 if errflg is set to 1. This change is necessary as OpenACC accelerator code cannot execute branching such as this, so this conditional return statement can only be executed by the host. This change is enforced by preprocessor directives based on the presence of the __OPENACC compile time variable and ensures this change only occurs when the code is compiled for accelerator usage, therefore it does not affect CPU execution. 4. Commenting out the zLhux local variable in the zolri function over lines 3671 to 3724. The zLhux variable appears to have been used only to capture values of zolri over multiple iterations, but is never used or passed along after this collection is completed. Since this array would be an assumed-size array based on the value of nmax at runtime, it would have been unsupported by OpenACC. But, since it is unused, the choice was made to simply comment out the variable and all lines related to it, allow the remaining code of the function to executed on the accelerator. Performance: ------------ Performance testing was performed on a single Nvidia P100 GPU versus a single 10-core Haswell CPU on Hera. Since the MYNN Surface scheme is a serial code, parallelization on the 10-core Haswell was performed using simple data partitioning across the 10 cores using OpenMP threads such that each thread received a near equal amount of data. When data movement was fully optimized for the accelerator -- meaning all CCPP Physics input variables were pre-loaded on the GPU as they would be when the CCPP infrastructure fully supports accelerator offloading -- GPU performance speedups range between 11.8X and 41.8X over the 10-core Haswell when the number of vertical columns (i) was varied between 150k and 750k, respectively. Performance Timings (optimized data movement) Columns (i) \ Compute | CPU | GPU | GPU Speedup | --------------------------------------------------------------------------- 150,000 | 263 ms | 22 ms | 11.9x | --------------------------------------------------------------------------- 450,000 | 766 ms | 28 ms | 27.0x | --------------------------------------------------------------------------- 750,000 | 1314 ms | 31 ms | 41.9x | --------------------------------------------------------------------------- However, standalone performance -- meaning all CCPP Physics input variables were initially loaded onto the GPU only after being declared in the MYNN subroutine calls -- was slightly less performant than the 10-core Haswell due to the additional overhead incurred by the data transfers. In this case, the decreasing performance lag for the GPU behind the CPU as the number of columns increases is due to the GPU performing better with more data (i.e. higher computational throughput) than the CPU despite more data needing to be transferred to the device. Performance Timings (standalone) Columns (i) \ Compute | CPU | GPU | GPU Speedup | ------------------------------------------------------------------------------- 150,000 | 263 ms | 862 ms | -3.3x | ------------------------------------------------------------------------------- 450,000 | 766 ms | 1767 ms | -2.3x | ------------------------------------------------------------------------------- 750,000 | 1314 ms | 2776 ms | -2.1x | ------------------------------------------------------------------------------- With these results, it is clear that this scheme will perform at its best on accelerators once the CCPP infrastructure also supports OpenACC. Contact Information: -------------------- This enhancement was performed by Timothy Sliwinski at NOAA GSL. Questions regarding these changes should be directed to timothy.s.sliwinski@noaa.gov --- physics/module_sf_mynn.F90 | 331 ++++++++++++++++++++++++++++++++++-- physics/mynnsfc_wrapper.F90 | 31 ++++ 2 files changed, 351 insertions(+), 11 deletions(-) diff --git a/physics/module_sf_mynn.F90 b/physics/module_sf_mynn.F90 index c60247cf6..399b1ee83 100644 --- a/physics/module_sf_mynn.F90 +++ b/physics/module_sf_mynn.F90 @@ -106,6 +106,7 @@ MODULE module_sf_mynn REAL(kind_phys), DIMENSION(0:1000 ),SAVE :: psim_stab,psim_unstab, & psih_stab,psih_unstab +!$acc declare create(psim_stab, psim_unstab, psih_stab, psih_unstab) CONTAINS @@ -344,7 +345,12 @@ SUBROUTINE SFCLAY_mynn( & & qsfc_wat, qsfc_lnd, qsfc_ice ! CCPP error handling +#ifndef _OPENACC character(len=*), intent(inout) :: errmsg +#else +!Necessary since OpenACC does not support assumed-size arrays + character(len=200), intent(inout) :: errmsg +#endif integer, intent(inout) :: errflg !ADDITIONAL OUTPUT @@ -371,6 +377,20 @@ SUBROUTINE SFCLAY_mynn( & errflg = 0 errmsg = '' +!$acc enter data copyin( dz8w,U3D,V3D,QV3D,QC3D,P3D,T3D, & +!$acc pattern_spp_sfc, errmsg) + +!$acc enter data copyin( UST_WAT(:), UST_LND(:), UST_ICE(:), & +!$acc MOL(:), QFLX(:), HFLX(:), & +!$acc QSFC(:), QSFC_WAT(:), QSFC_LND(:), & +!$acc QSFC_ICE(:)) + +!$acc enter data create( dz8w1d(:), dz2w1d(:), U1D(:), & +!$acc V1D(:), U1D2(:), V1D2(:), & +!$acc QV1D(:), QC1D(:), P1D(:), & +!$acc T1D(:), rstoch1D(:), qstar(:)) + + IF (debug_code >= 1) THEN write(*,*)"======= printing of constants:" write(*,*)"cp=", cp," g=", grav @@ -382,6 +402,10 @@ SUBROUTINE SFCLAY_mynn( & itf=ite !MIN0(ite,ide-1) ktf=kte !MIN0(kte,kde-1) +!$acc parallel loop present(dz8w,U3D,V3D,QV3D,QC3D,P3D,T3D, & +!$acc pattern_spp_sfc,dz8w1d,dz2w1d,U1D, & +!$acc V1D,U1D2,V1D2,QV1D,QC1D,P1D,T1D, & +!$acc rstoch1D,qstar) DO i=its,ite dz8w1d(I) = dz8w(i,kts) dz2w1d(I) = dz8w(i,kts+1) @@ -403,6 +427,9 @@ SUBROUTINE SFCLAY_mynn( & ENDDO IF (itimestep==1 .AND. iter==1) THEN +!$acc parallel loop present(U1D,V1D,UST_WAT,UST_LND,UST_ICE,MOL, & +!$acc QFLX,HFLX,QV3D,QSFC,QSFC_WAT, & +!$acc QSFC_LND,QSFC_ICE) DO i=its,ite IF (.not. flag_restart) THEN !Everything here is used before calculated @@ -432,6 +459,9 @@ SUBROUTINE SFCLAY_mynn( & ENDDO ENDIF +!$acc exit data delete( dz8w,U3D,V3D,QV3D,QC3D,P3D,T3D, & +!$acc pattern_spp_sfc, QC1D) + CALL SFCLAY1D_mynn(flag_iter, & J,U1D,V1D,T1D,QV1D,P1D,dz8w1d, & U1D2,V1D2,dz2w1d, & @@ -471,6 +501,16 @@ SUBROUTINE SFCLAY_mynn( & its,ite, jts,jte, kts,kte, & errmsg, errflg ) +!$acc exit data copyout( UST_WAT(:), UST_LND(:), UST_ICE(:), & +!$acc MOL(:), QFLX(:), HFLX(:), & +!$acc QSFC(:), QSFC_WAT(:), QSFC_LND(:), & +!$acc QSFC_ICE(:), errmsg) + +!$acc exit data delete( dz8w1d(:), dz2w1d(:), U1D(:), & +!$acc V1D(:), U1D2(:), V1D2(:), & +!$acc QV1D(:), T1D(:), P1D(:), & +!$acc rstoch1D(:), qstar(:)) + END SUBROUTINE SFCLAY_MYNN !------------------------------------------------------------------- @@ -626,7 +666,12 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !JOE-end ! CCPP error handling +#ifndef _OPENACC character(len=*), intent(inout) :: errmsg +#else +! Necessary since OpenACC does not support assumed-size arrays + character(len=200), intent(inout) :: errmsg +#endif integer, intent(inout) :: errflg !---------------------------------------------------------------- @@ -679,6 +724,58 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & errflg = 0 errmsg = '' !------------------------------------------------------------------- +!$acc update device(psim_stab, psim_unstab, psih_stab, psih_unstab) + +!$acc enter data create( ZA, ZA2, THV1D, TH1D, TC1D, TV1D, & +!$acc RHO1D, QVSH, PSIH2, PSIM10, PSIH10, WSPDI, & +!$acc GOVRTH, PSFC, THCON, & +!$acc zratio_lnd, zratio_ice, zratio_wat, & +!$acc TSK_lnd, TSK_ice, TSK_wat, & +!$acc THSK_lnd, THSK_ice, THSK_wat, & +!$acc THVSK_lnd, THVSK_ice, THVSK_wat, & +!$acc GZ1OZ0_lnd, GZ1OZ0_ice, GZ1OZ0_wat, & +!$acc GZ1OZt_lnd, GZ1OZt_ice, GZ1OZt_wat, & +!$acc GZ2OZ0_lnd, GZ2OZ0_ice, GZ2OZ0_wat, & +!$acc GZ2OZt_lnd, GZ2OZt_ice, GZ2OZt_wat, & +!$acc GZ10OZ0_lnd, GZ10OZ0_ice, GZ10OZ0_wat, & +!$acc GZ10OZt_lnd, GZ10OZt_ice, GZ10OZt_wat, & +!$acc ZNTstoch_lnd, ZNTstoch_ice, ZNTstoch_wat, & +!$acc ZT_lnd, ZT_ice, ZT_wat, & +!$acc ZQ_lnd, ZQ_ice, ZQ_wat, & +!$acc PSIQ_lnd, PSIQ_ice, PSIQ_wat, & +!$acc PSIQ2_lnd, PSIQ2_ice, PSIQ2_wat, & +!$acc QSFCMR_lnd, QSFCMR_ice, QSFCMR_wat ) + +!$acc enter data copyin(flag_iter, dry, wet, icy, CPM, MAVAIL, & +!$acc QFX, FLHC, FLQC, CHS, CH, CHS2, CQS2, USTM, & +!$acc HFX, LH, wstar, qstar, PBLH, ZOL, MOL, RMOL, & +!$acc T2, TH2, Q2, QV1D, PSFCPA, & +!$acc WSPD, U10, V10, U1D, V1D, U1D2, V1D2, & +!$acc T1D, P1D, rstoch1D, sigmaf, & +!$acc shdmax, vegtype, z0pert, ztpert, dx, QGH, & +!$acc dz2w1d, dz8w1d, & +!$acc stress_wat, stress_lnd, stress_ice, & +!$acc rb_wat, rb_lnd, rb_ice, & +!$acc tskin_wat, tskin_lnd, tskin_ice, & +!$acc tsurf_wat, tsurf_lnd, tsurf_ice, & +!$acc psim, psih, & +!$acc UST_wat, UST_lnd, UST_ice, & +!$acc ZNT_wat, ZNT_lnd, ZNT_ice, & +!$acc QSFC, QSFC_lnd, QSFC_wat, QSFC_ice, & +!$acc QFLX, QFLX_lnd, QFLX_wat, QFLX_ice, & +!$acc HFLX, HFLX_lnd, HFLX_wat, HFLX_ice, & +!$acc PSIX_wat, PSIX_lnd, PSIX_ice, & +!$acc PSIX10_wat, PSIX10_lnd, PSIX10_ice, & +!$acc PSIT2_lnd, PSIT2_wat, PSIT2_ice, & +!$acc PSIT_lnd, PSIT_wat, PSIT_ice, & +!$acc ch_lnd, ch_wat, ch_ice, & +!$acc cm_lnd, cm_wat, cm_ice, & +!$acc snowh_lnd, errmsg) + +!$acc parallel loop present(PSFCPA, PSFC, QSFC, T1D, flag_iter, & +!$acc QSFC_wat, QSFCMR_wat, wet, TSK_wat, tskin_wat, & +!$acc QSFC_lnd, QSFCMR_lnd, dry, TSK_lnd, tskin_lnd, & +!$acc QSFC_ice, QSFCMR_ice, icy, TSK_ice, tskin_ice) DO I=its,ite ! PSFC ( in cmb) is used later in saturation checks @@ -700,7 +797,9 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF QSFC_wat(I)=EP2*E1/(PSFC(I)-ep3*E1) !specific humidity QSFCMR_wat(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio +#ifndef _OPENACC IF(QSFC_wat(I)>1..or.QSFC_wat(I)<0.) print *,' QSFC_wat(I)',itimestep,i,QSFC_wat(I),TSK_wat(i) +#endif ENDIF IF (dry(i)) THEN TSK_lnd(I) = tskin_lnd(i) @@ -720,7 +819,9 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & QSFC_lnd(I)=0.5*(QSFC_lnd(I) + QSFC(I)) QSFCMR_lnd(I)=QSFC_lnd(I)/(1.-QSFC_lnd(I)) !mixing ratio endif ! lsm +#ifndef _OPENACC IF(QSFC_lnd(I)>1..or.QSFC_lnd(I)<0.) print *,' QSFC_lnd(I)',itimestep,i,QSFC_lnd(I),Tskin_lnd(i),tsurf_lnd(i),qsfc(i) +#endif ENDIF IF (icy(i)) THEN TSK_ice(I) = tskin_ice(i) @@ -738,7 +839,9 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & QSFC_ice(I)=EP2*E1/(PSFC(I)-ep3*E1) !specific humidity QSFCMR_ice(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio endif ! lsm +#ifndef _OPENACC IF(QSFC_ice(I)>1..or.QSFC_ice(I)<0.) print *,' QSFC_ice(I)',itimestep,i,QSFC_ice(I),TSK_ice(i) +#endif ENDIF ELSE @@ -791,6 +894,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & endif ! flag_iter ENDDO +#ifndef _OPENACC IF (debug_code >= 1) THEN write(0,*)"ITIMESTEP=",ITIMESTEP," iter=",iter DO I=its,ite @@ -815,7 +919,12 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF ENDDO ENDIF +#endif +!$acc parallel loop present(PSFC, PSFCPA, QVSH, QV1D, THCON, flag_iter, & +!$acc dry, tskin_lnd, TSK_lnd, tsurf_lnd, THSK_lnd, THVSK_lnd, qsfc_lnd, & +!$acc icy, tskin_ice, TSK_ice, tsurf_ice, THSK_ice, THVSK_ice, qsfc_ice, & +!$acc wet, tskin_wat, TSK_wat, tsurf_wat, THSK_wat, THVSK_wat) DO I=its,ite ! PSFC ( in cmb) is used later in saturation checks PSFC(I)=PSFCPA(I)/1000. @@ -829,8 +938,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ! CONVERT SKIN TEMPERATURES TO POTENTIAL TEMPERATURE: THSK_lnd(I) = TSK_lnd(I)*THCON(I) !(K) THVSK_lnd(I) = THSK_lnd(I)*(1.+EP1*qsfc_lnd(I)) +#ifndef _OPENACC if(THVSK_lnd(I) < 170. .or. THVSK_lnd(I) > 360.) & print *,'THVSK_lnd(I)',itimestep,i,THVSK_lnd(I),THSK_lnd(i),tsurf_lnd(i),tskin_lnd(i),qsfc_lnd(i) +#endif endif if(icy(i)) then TSK_ice(I) = tskin_ice(i) @@ -838,8 +949,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ! CONVERT SKIN TEMPERATURES TO POTENTIAL TEMPERATURE: THSK_ice(I) = TSK_ice(I)*THCON(I) !(K) THVSK_ice(I) = THSK_ice(I)*(1.+EP1*qsfc_ice(I)) !(K) +#ifndef _OPENACC if(THVSK_ice(I) < 170. .or. THVSK_ice(I) > 360.) & print *,'THVSK_ice(I)',itimestep,i,THVSK_ice(I),THSK_ice(i),tsurf_ice(i),tskin_ice(i),qsfc_ice(i) +#endif endif if(wet(i)) then TSK_wat(I) = tskin_wat(i) @@ -847,24 +960,29 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ! CONVERT SKIN TEMPERATURES TO POTENTIAL TEMPERATURE: THSK_wat(I) = TSK_wat(I)*THCON(I) !(K) THVSK_wat(I) = THSK_wat(I)*(1.+EP1*QVSH(I)) !(K) +#ifndef _OPENACC if(THVSK_wat(I) < 170. .or. THVSK_wat(I) > 360.) & print *,'THVSK_wat(I)',i,THVSK_wat(I),THSK_wat(i),tsurf_wat(i),tskin_wat(i),qsfc_wat(i) +#endif endif endif ! flag_iter ENDDO +!$acc parallel loop present(TH1D, T1D, P1D, TC1D) DO I=its,ite ! CONVERT LOWEST LAYER TEMPERATURE TO POTENTIAL TEMPERATURE: TH1D(I)=T1D(I)*(100000./P1D(I))**ROVCP !(Theta, K) TC1D(I)=T1D(I)-273.15 !(T, Celsius) ENDDO +!$acc parallel loop present(THV1D, TH1D, QVSH, TV1D, T1D) DO I=its,ite ! CONVERT TO VIRTUAL TEMPERATURE THV1D(I)=TH1D(I)*(1.+EP1*QVSH(I)) !(K) TV1D(I)=T1D(I)*(1.+EP1*QVSH(I)) !(K) ENDDO +!$acc parallel loop present(RHO1D, P1D, TV1D, TH1D, ZA, ZA2, dz2w1d, dz8w1d, GOVRTH) DO I=its,ite RHO1D(I)=P1D(I)/(Rd*TV1D(I)) !now using value calculated in sfc driver ZA(I)=0.5*dz8w1d(I) !height of first half-sigma level @@ -873,11 +991,13 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDDO !tgs - should QFX and HFX be separate for land, ice and water? +!$acc parallel loop present(QFX, QFLX, RHO1D, HFX, HFLX) DO I=its,ite QFX(i)=QFLX(i)*RHO1D(I) HFX(i)=HFLX(i)*RHO1D(I)*cp ENDDO +#ifndef _OPENACC IF (debug_code ==2) THEN !write(*,*)"ITIMESTEP=",ITIMESTEP DO I=its,ite @@ -890,7 +1010,9 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & write(*,*)"RHO1D=", RHO1D(i)," GOVRTH=",GOVRTH(i) ENDDO ENDIF +#endif +!$acc parallel loop present(T1D,P1D,QGH,QV1D,CPM) DO I=its,ite ! QGH CHANGED TO USE LOWEST-LEVEL AIR TEMP ! Q2SAT = QGH IN LSM @@ -908,6 +1030,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & CPM(I)=CP*(1.+0.84*QV1D(I)) ENDDO +#ifndef _OPENACC IF (debug_code == 2) THEN write(*,*)"ITIMESTEP=",ITIMESTEP DO I=its,ite @@ -925,7 +1048,13 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & endif ENDDO ENDIF +#endif +!$acc parallel loop present(flag_iter,U1D,V1D,WSPD,wet,dry,icy, & +!$acc THV1D,THVSK_wat,THVSK_lnd,THVSK_ice, & +!$acc hfx,RHO1D,qfx,WSTAR,pblh,dx,GOVRTH,ZA, & +!$acc TSK_wat,TSK_lnd,TSK_ice, & +!$acc rb_wat,rb_lnd,rb_ice) DO I=its,ite if( flag_iter(i) ) then ! DH* 20200401 - note. A weird bug in Intel 18 on hera prevents using the @@ -1041,6 +1170,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & WSPD(I) = MAX(WSPD_ice,WSPD_wat) WSPD(I) = MAX(WSPD_lnd,WSPD(I)) +#ifndef _OPENACC IF (debug_code == 2) THEN write(*,*)"===== After rb calc in mynn sfc layer:" write(*,*)"ITIMESTEP=",ITIMESTEP @@ -1049,6 +1179,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & IF (wet(i))write(*,*)"rb_wat=", rb_wat(I)," DTHVDZ=",DTHVDZ IF (dry(i))write(*,*)"rb_lnd=", rb_lnd(I)," DTHVDZ=",DTHVDZ ENDIF +#endif ! IF PREVIOUSLY UNSTABLE, DO NOT LET INTO REGIMES 1 AND 2 (STABLE) !if (itimestep .GT. 1) THEN @@ -1067,6 +1198,29 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !-------------------------------------------------------------------- !-------------------------------------------------------------------- +!$acc parallel loop present(flag_iter, errmsg, & +!$acc wet, dry, icy, & +!$acc ZT_wat, ZT_lnd, ZT_ice, & +!$acc ZNT_wat, ZNT_lnd, ZNT_ice, & +!$acc ZNTstoch_wat, ZNTstoch_lnd, ZNTstoch_ice, & +!$acc UST_wat, UST_lnd, UST_ice, & +!$acc ZQ_wat, ZQ_lnd, ZQ_ice, & +!$acc snowh_lnd, & +!$acc THVSK_wat, THVSK_lnd, THVSK_ice, & +!$acc qsfc_wat, qsfc_lnd, qsfc_ice, & +!$acc GZ1OZ0_wat, GZ1OZt_wat, GZ2OZ0_wat, GZ2OZt_wat, GZ10OZ0_wat, GZ10OZt_wat, & +!$acc GZ1OZ0_lnd, GZ1OZt_lnd, GZ2OZ0_lnd, GZ2OZt_lnd, GZ10OZ0_lnd, GZ10OZt_lnd, & +!$acc GZ1OZ0_ice, GZ1OZt_ice, GZ2OZ0_ice, GZ2OZt_ice, GZ10OZ0_ice, GZ10OZt_ice, & +!$acc zratio_wat, zratio_lnd, zratio_ice, & +!$acc stress_wat, stress_lnd, stress_ice, & +!$acc rb_wat, rb_lnd, rb_ice, & +!$acc psim, psih, psim10, psih10, psih2, & +!$acc psix_wat, psix10_wat, psit_wat, psit2_wat, psiq_wat, psiq2_wat, & +!$acc psix_lnd, psix10_lnd, psit_lnd, psit2_lnd, psiq_lnd, psiq2_lnd, & +!$acc psix_ice, psix10_ice, psit_ice, psit2_ice, psiq_ice, psiq2_ice, & +!$acc WSPD, WSPDI, U1D, V1D, TC1D, THV1D, rstoch1D, USTM, ZA, ZOL, QVSH, & +!$acc shdmax, vegtype, z0pert, ztpert, mol, rmol, qstar, sigmaf) + DO I=its,ite if( flag_iter(i) ) then @@ -1082,10 +1236,12 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & if (sfc_z0_type >= 0) then ! Avoid calculation is using wave model ! CALCULATE z0 (znt) !-------------------------------------- +#ifndef _OPENACC IF (debug_code == 2) THEN write(*,*)"=============Input to ZNT over water:" write(*,*)"u*:",UST_wat(i)," wspd=",WSPD(i)," visc=",visc," za=",ZA(I) ENDIF +#endif IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN IF (COARE_OPT .EQ. 3.0) THEN @@ -1122,10 +1278,12 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZNTstoch_wat(I) = ZNT_wat(I) endif +#ifndef _OPENACC IF (debug_code > 1) THEN write(*,*)"==========Output ZNT over water:" write(*,*)"ZNT:",ZNTstoch_wat(i) ENDIF +#endif !COMPUTE ROUGHNESS REYNOLDS NUMBER (restar) USING NEW ZNT ! AHW: Garrattt formula: Calculate roughness Reynolds number @@ -1136,10 +1294,12 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !-------------------------------------- !CALCULATE z_t and z_q !-------------------------------------- +#ifndef _OPENACC IF (debug_code > 1) THEN write(*,*)"=============Input to ZT over water:" write(*,*)"u*:",UST_wat(i)," restar=",restar," visc=",visc ENDIF +#endif IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN @@ -1183,10 +1343,12 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & rstoch1D(i),spp_sfc) ENDIF ENDIF +#ifndef _OPENACC IF (debug_code > 1) THEN write(*,*)"=============Output ZT & ZQ over water:" write(*,*)"ZT:",ZT_wat(i)," ZQ:",ZQ_wat(i) ENDIF +#endif GZ1OZ0_wat(I)= LOG((ZA(I)+ZNTstoch_wat(I))/ZNTstoch_wat(I)) GZ1OZt_wat(I)= LOG((ZA(I)+ZNTstoch_wat(i))/ZT_wat(i)) @@ -1232,7 +1394,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ! or initialized to zero, but certainly not set correctly errmsg = 'Logic error: qstar is not set correctly when calling Yang_2008' errflg = 1 +#ifndef _OPENACC +! Necessary since OpenACC does not support branching in parallel code return +#endif CALL Yang_2008(ZNTSTOCH_lnd(i),ZT_lnd(i),ZQ_lnd(i),UST_lnd(i),MOL(I),& qstar(I),restar,visc) ELSEIF ( IZ0TLND .EQ. 3 ) THEN @@ -1249,6 +1414,8 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & UST_lnd(I),KARMAN,1.0_kind_phys,0,spp_sfc,rstoch1D(i)) ENDIF ENDIF + +#ifndef _OPENACC IF (ZNTstoch_lnd(i) < 1E-8 .OR. Zt_lnd(i) < 1E-10) THEN write(0,*)"===(land) capture bad input in mynn sfc layer, i=:",i write(0,*)" ZNT=", ZNTstoch_lnd(i)," ZT=",Zt_lnd(i) @@ -1257,7 +1424,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " ust=", ust_lnd(i)," snowh=", snowh_lnd(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx_lnd(i)," hflx=",hflx_lnd(i)," hpbl=",pblh(i) ENDIF - +#endif GZ1OZ0_lnd(I)= LOG((ZA(I)+ZNTstoch_lnd(I))/ZNTstoch_lnd(I)) GZ1OZt_lnd(I)= LOG((ZA(I)+ZNTstoch_lnd(i))/ZT_lnd(i)) @@ -1323,6 +1490,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),0.0_kind_phys) ZOL(I)=MIN(ZOL(I),20._kind_phys) +#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i @@ -1333,6 +1501,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF +#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) @@ -1390,6 +1559,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),-20.0_kind_phys) ZOL(I)=MIN(ZOL(I),0.0_kind_phys) +#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i @@ -1400,6 +1570,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF +#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) @@ -1460,6 +1631,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),0.0_kind_phys) ZOL(I)=MIN(ZOL(I),20._kind_phys) +#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_lnd(i) < 1E-8 .OR. Zt_lnd(i) < 1E-10) THEN write(0,*)"===(land) capture bad input in mynn sfc layer, i=:",i @@ -1470,6 +1642,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF +#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_lnd(I),ZA(I),ZNTstoch_lnd(I),ZT_lnd(I),ZOL(I),psi_opt) @@ -1526,6 +1699,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),-20.0_kind_phys) ZOL(I)=MIN(ZOL(I),0.0_kind_phys) +#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_lnd(i) < 1E-8 .OR. Zt_lnd(i) < 1E-10) THEN write(0,*)"===(land) capture bad input in mynn sfc layer, i=:",i @@ -1536,6 +1710,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF +#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_lnd(I),ZA(I),ZNTstoch_lnd(I),ZT_lnd(I),ZOL(I),psi_opt) @@ -1595,6 +1770,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),0.0_kind_phys) ZOL(I)=MIN(ZOL(I),20._kind_phys) +#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_ice(i) < 1E-8 .OR. Zt_ice(i) < 1E-10) THEN write(0,*)"===(ice) capture bad input in mynn sfc layer, i=:",i @@ -1605,6 +1781,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF +#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_ice(I),ZA(I),ZNTstoch_ice(I),ZT_ice(I),ZOL(I),psi_opt) @@ -1661,6 +1838,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),-20.0_kind_phys) ZOL(I)=MIN(ZOL(I),0.0_kind_phys) +#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_ice(i) < 1E-8 .OR. Zt_ice(i) < 1E-10) THEN write(0,*)"===(ice) capture bad input in mynn sfc layer, i=:",i @@ -1671,6 +1849,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF +#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_ice(I),ZA(I),ZNTstoch_ice(I),ZT_ice(I),ZOL(I),psi_opt) @@ -1821,6 +2000,14 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & endif ! flag_iter ENDDO ! end i-loop +#ifdef _OPENACC + ! Necessary since OpenACC does not support branching in parallel code + IF (errflg == 1) THEN + return + ENDIF +#endif + +#ifndef _OPENACC IF (debug_code == 2) THEN DO I=its,ite IF(wet(i))write(*,*)"==== AT END OF MAIN LOOP, i=",i, "(wet)" @@ -1841,10 +2028,29 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & write(*,*)"=============================================" ENDDO ! end i-loop ENDIF +#endif !---------------------------------------------------------- ! COMPUTE SURFACE HEAT AND MOISTURE FLUXES !---------------------------------------------------------- +!$acc parallel loop present(flag_iter, dry, wet, icy, & +!$acc QFX, HFX, FLHC, FLQC, LH, CHS, CH, CHS2, CQS2, & +!$acc RHO1D, MAVAIL, USTM, & +!$acc UST_lnd, UST_wat, UST_ice, & +!$acc PSIQ_lnd, PSIT_lnd, PSIX_lnd, & +!$acc PSIQ_wat, PSIT_wat, PSIX_wat, & +!$acc PSIQ_ice, PSIT_ice, PSIX_ice, & +!$acc PSIQ2_lnd, PSIT2_lnd, & +!$acc PSIQ2_wat, PSIT2_wat, & +!$acc PSIQ2_ice, PSIT2_ice, & +!$acc QSFC, QSFC_lnd, QSFC_wat, QSFC_ice, & +!$acc QFLX, QFLX_lnd, QFLX_wat, QFLX_ice, & +!$acc HFLX, HFLX_lnd, HFLX_wat, HFLX_ice, & +!$acc QSFCMR_lnd, QSFCMR_wat, QSFCMR_ice, & +!$acc QV1D, WSPD, WSPDI, CPM, TH1D, & +!$acc THSK_lnd, THSK_wat, THSK_ice, & +!$acc ch_lnd, ch_wat, ch_ice, & +!$acc cm_lnd, cm_wat, cm_ice) DO I=its,ite if( flag_iter(i) ) then @@ -2008,12 +2214,14 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF +#ifndef _OPENACC IF (debug_code > 1) THEN write(*,*)"QFX=",QFX(I),"FLQC=",FLQC(I) if(icy(i))write(*,*)"ice, MAVAIL:",MAVAIL(I)," u*=",UST_ice(I)," psiq=",PSIQ_ice(i) if(dry(i))write(*,*)"lnd, MAVAIL:",MAVAIL(I)," u*=",UST_lnd(I)," psiq=",PSIQ_lnd(i) if(wet(i))write(*,*)"ocn, MAVAIL:",MAVAIL(I)," u*=",UST_wat(I)," psiq=",PSIQ_wat(i) ENDIF +#endif ! The exchange coefficient for cloud water is assumed to be the ! same as that for heat. CH is multiplied by WSPD. @@ -2040,6 +2248,18 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDDO ! end i-loop IF (compute_diag) then + !$acc parallel loop present(flag_iter, dry, wet, icy, & + !$acc ZA, ZA2, T2, TH2, TH1D, Q2, QV1D, PSFCPA, & + !$acc THSK_lnd, THSK_wat, THSK_ice, & + !$acc QSFC_lnd, QSFC_wat, QSFC_ice, & + !$acc U10, V10, U1D, V1D, U1D2, V1D2, & + !$acc ZNTstoch_lnd, ZNTstoch_lnd, ZNTstoch_ice, & + !$acc PSIX_lnd, PSIX_wat, PSIX_ice, & + !$acc PSIX10_lnd, PSIX10_wat, PSIX10_ice, & + !$acc PSIT2_lnd, PSIT2_wat, PSIT2_ice, & + !$acc PSIT_lnd, PSIT_wat, PSIT_ice, & + !$acc PSIQ2_lnd, PSIQ2_wat, PSIQ2_ice, & + !$acc PSIQ_lnd, PSIQ_wat, PSIQ_ice) DO I=its,ite if( flag_iter(i) ) then !----------------------------------------------------- @@ -2154,6 +2374,16 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ! DEBUG - SUSPICIOUS VALUES !----------------------------------------------------- IF ( debug_code == 2) THEN + !$acc parallel loop present(dry, wet, icy, CPM, MAVAIL, & + !$acc HFX, LH, wstar, RHO1D, PBLH, ZOL, ZA, MOL, & + !$acc PSIM, PSIH, WSTAR, T1D, TH1D, THV1D, QVSH, & + !$acc UST_wat, UST_lnd, UST_ice, & + !$acc THSK_wat, THSK_lnd, THSK_ice, & + !$acc THVSK_wat, THVSK_lnd, THVSK_ice, & + !$acc ZNTstoch_wat, ZNTstoch_lnd, ZNTstoch_ice, & + !$acc ZT_wat, ZT_lnd, ZT_ice, & + !$acc QSFC_wat, QSFC_lnd, QSFC_ice, & + !$acc PSIX_wat, PSIX_lnd, PSIX_ice) DO I=its,ite yesno = 0 IF (compute_flux) THEN @@ -2258,6 +2488,54 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDDO ! end i-loop ENDIF ! end debug option +!$acc exit data copyout(CPM, FLHC, FLQC, CHS, CH, CHS2, CQS2,& +!$acc USTM, wstar, qstar, ZOL, MOL, RMOL, & +!$acc HFX, QFX, LH, QSFC, QFLX, HFLX, & +!$acc T2, TH2, Q2, WSPD, U10, V10, & +!$acc QGH, psim, psih, & +!$acc stress_wat, stress_lnd, stress_ice, & +!$acc rb_wat, rb_lnd, rb_ice, & +!$acc UST_wat, UST_lnd, UST_ice, & +!$acc ZNT_wat, ZNT_lnd, ZNT_ice, & +!$acc QSFC_lnd, QSFC_wat, QSFC_ice, & +!$acc QFLX_lnd, QFLX_wat, QFLX_ice, & +!$acc HFLX_lnd, HFLX_wat, HFLX_ice, & +!$acc PSIX_wat, PSIX_lnd, PSIX_ice, & +!$acc PSIX10_wat, PSIX10_lnd, PSIX10_ice, & +!$acc PSIT2_lnd, PSIT2_wat, PSIT2_ice, & +!$acc PSIT_lnd, PSIT_wat, PSIT_ice, & +!$acc ch_lnd, ch_wat, ch_ice, & +!$acc cm_lnd, cm_wat, cm_ice, & +!$acc errmsg) + +!$acc exit data delete( flag_iter, dry, wet, icy, dx, & +!$acc MAVAIL, PBLH, PSFCPA, z0pert, ztpert, & +!$acc QV1D, U1D, V1D, U1D2, V1D2, T1D, P1D, & +!$acc rstoch1D, sigmaf, shdmax, vegtype, & +!$acc dz2w1d, dz8w1d, snowh_lnd, & +!$acc tskin_wat, tskin_lnd, tskin_ice, & +!$acc tsurf_wat, tsurf_lnd, tsurf_ice) + +!$acc exit data delete( ZA, ZA2, THV1D, TH1D, TC1D, TV1D, & +!$acc RHO1D, QVSH, PSIH2, PSIM10, PSIH10, WSPDI, & +!$acc GOVRTH, PSFC, THCON, & +!$acc zratio_lnd, zratio_ice, zratio_wat, & +!$acc TSK_lnd, TSK_ice, TSK_wat, & +!$acc THSK_lnd, THSK_ice, THSK_wat, & +!$acc THVSK_lnd, THVSK_ice, THVSK_wat, & +!$acc GZ1OZ0_lnd, GZ1OZ0_ice, GZ1OZ0_wat, & +!$acc GZ1OZt_lnd, GZ1OZt_ice, GZ1OZt_wat, & +!$acc GZ2OZ0_lnd, GZ2OZ0_ice, GZ2OZ0_wat, & +!$acc GZ2OZt_lnd, GZ2OZt_ice, GZ2OZt_wat, & +!$acc GZ10OZ0_lnd, GZ10OZ0_ice, GZ10OZ0_wat, & +!$acc GZ10OZt_lnd, GZ10OZt_ice, GZ10OZt_wat, & +!$acc ZNTstoch_lnd, ZNTstoch_ice, ZNTstoch_wat, & +!$acc ZT_lnd, ZT_ice, ZT_wat, & +!$acc ZQ_lnd, ZQ_ice, ZQ_wat, & +!$acc PSIQ_lnd, PSIQ_ice, PSIQ_wat, & +!$acc PSIQ2_lnd, PSIQ2_ice, PSIQ2_wat, & +!$acc QSFCMR_lnd, QSFCMR_ice, QSFCMR_wat ) + END SUBROUTINE SFCLAY1D_mynn !------------------------------------------------------------------- !>\ingroup mynn_sfc @@ -2272,6 +2550,7 @@ END SUBROUTINE SFCLAY1D_mynn SUBROUTINE zilitinkevich_1995(Z_0,Zt,Zq,restar,ustar,KARMAN,& & landsea,IZ0TLND2,spp_sfc,rstoch) + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: Z_0,restar,ustar,KARMAN,landsea INTEGER, OPTIONAL, INTENT(IN) :: IZ0TLND2 @@ -2341,6 +2620,7 @@ SUBROUTINE davis_etal_2008(Z_0,ustar) !This is an update version from Davis et al. 2008, which !corrects a small-bias in Z_0 (AHW real-time 2012). + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: ustar REAL(kind_phys), INTENT(OUT) :: Z_0 @@ -2368,7 +2648,7 @@ END SUBROUTINE davis_etal_2008 !>This formulation for roughness length was designed account for. !!wave steepness. SUBROUTINE Taylor_Yelland_2001(Z_0,ustar,wsp10) - + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: ustar,wsp10 REAL(kind_phys), INTENT(OUT) :: Z_0 @@ -2396,7 +2676,7 @@ END SUBROUTINE Taylor_Yelland_2001 !! The Charnock parameter CZC is varied from .011 to .018. !! between 10-m wsp = 10 and 18.. SUBROUTINE charnock_1955(Z_0,ustar,wsp10,visc,zu) - + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: ustar, visc, wsp10, zu REAL(kind_phys), INTENT(OUT) :: Z_0 @@ -2421,7 +2701,7 @@ END SUBROUTINE charnock_1955 !!The Charnock parameter CZC is varied from about .005 to .028 !!between 10-m wind speeds of 6 and 19 m/s. SUBROUTINE edson_etal_2013(Z_0,ustar,wsp10,visc,zu) - + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: ustar, visc, wsp10, zu REAL(kind_phys), INTENT(OUT) :: Z_0 @@ -2450,7 +2730,7 @@ END SUBROUTINE edson_etal_2013 !!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) - + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: Ren, Z_0,landsea REAL(kind_phys), INTENT(OUT) :: Zt,Zq @@ -2486,7 +2766,7 @@ END SUBROUTINE garratt_1992 !! !!This is for use over water only. SUBROUTINE fairall_etal_2003(Zt,Zq,Ren,ustar,visc,rstoch,spp_sfc) - + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: Ren,ustar,visc,rstoch INTEGER, INTENT(IN) :: spp_sfc @@ -2530,7 +2810,7 @@ END SUBROUTINE fairall_etal_2003 !! The actual reference is unknown. This was passed along by Jim Edson (personal communication). !! This is for use over water only, preferably open ocean. SUBROUTINE fairall_etal_2014(Zt,Zq,Ren,ustar,visc,rstoch,spp_sfc) - + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: Ren,ustar,visc,rstoch INTEGER, INTENT(IN) :: spp_sfc @@ -2578,6 +2858,7 @@ END SUBROUTINE fairall_etal_2014 !!This should only be used over land! SUBROUTINE Yang_2008(Z_0,Zt,Zq,ustar,tstar,qst,Ren,visc) + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: Z_0, Ren, ustar, tstar, qst, visc REAL(kind_phys) :: ht, &! roughness height at critical Reynolds number @@ -2613,6 +2894,7 @@ END SUBROUTINE Yang_2008 !>\ingroup mynn_sfc SUBROUTINE GFS_z0_lnd(z0max,shdmax,z1,vegtype,ivegsrc,z0pert) + !$acc routine seq REAL(kind_phys), INTENT(OUT) :: z0max REAL(kind_phys), INTENT(IN) :: shdmax,z1,z0pert INTEGER, INTENT(IN) :: vegtype,ivegsrc @@ -2673,6 +2955,7 @@ END SUBROUTINE GFS_z0_lnd !>\ingroup mynn_sfc SUBROUTINE GFS_zt_lnd(ztmax,z0max,sigmaf,ztpert,ustar_lnd) + !$acc routine seq REAL(kind_phys), INTENT(OUT) :: ztmax REAL(kind_phys), INTENT(IN) :: z0max,sigmaf,ztpert,ustar_lnd REAL(kind_phys) :: czilc, tem1, tem2 @@ -2701,6 +2984,7 @@ END SUBROUTINE GFS_zt_lnd !>\ingroup mynn_sfc SUBROUTINE GFS_z0_wat(z0rl_wat,ustar_wat,WSPD,z1,sfc_z0_type,redrag) + !$acc routine seq REAL(kind_phys), INTENT(OUT) :: z0rl_wat REAL(kind_phys), INTENT(INOUT):: ustar_wat REAL(kind_phys), INTENT(IN) :: wspd,z1 @@ -2753,11 +3037,16 @@ END SUBROUTINE GFS_z0_wat !-------------------------------------------------------------------- !>\ingroup mynn_sfc SUBROUTINE GFS_zt_wat(ztmax,z0rl_wat,restar,WSPD,z1,sfc_z0_type,errmsg,errflg) - + !$acc routine seq real(kind_phys), INTENT(OUT) :: ztmax real(kind_phys), INTENT(IN) :: wspd,z1,z0rl_wat,restar INTEGER, INTENT(IN) :: sfc_z0_type +#ifndef _OPENACC character(len=*), intent(out) :: errmsg +#else +! Necessary since OpenACC does not support assumed-size arrays + character(len=200), intent(out) :: errmsg +#endif integer, intent(out) :: errflg real(kind_phys) :: z0,z0max,wind10m,rat,ustar_wat real(kind_phys), PARAMETER :: charnock = 0.014, z0s_max=.317e-2 @@ -2798,6 +3087,7 @@ SUBROUTINE GFS_zt_wat(ztmax,z0rl_wat,restar,WSPD,z1,sfc_z0_type,errmsg,errflg) errflg = 1 errmsg = 'ERROR(GFS_zt_wat): sfc_z0_type not valid.' return + endif END SUBROUTINE GFS_zt_wat @@ -2807,6 +3097,7 @@ END SUBROUTINE GFS_zt_wat !! Weiguo Wang, 2019-0425 SUBROUTINE znot_m_v6(uref, znotm) + !$acc routine seq use machine , only : kind_phys IMPLICIT NONE ! Calculate areodynamical roughness over water with input 10-m wind @@ -2856,6 +3147,7 @@ END SUBROUTINE znot_m_v6 !! SUBROUTINE znot_t_v6(uref, znott) + !$acc routine seq IMPLICIT NONE !> Calculate scalar roughness over water with input 10-m wind !! For low-to-moderate winds, try to match the Ck-U10 relationship from COARE algorithm @@ -2922,6 +3214,7 @@ END SUBROUTINE znot_t_v6 !! SUBROUTINE znot_m_v7(uref, znotm) + !$acc routine seq IMPLICIT NONE !> Calculate areodynamical roughness over water with input 10-m wind !! For low-to-moderate winds, try to match the Cd-U10 relationship from COARE V3.5 (Edson et al. 2013) @@ -2971,6 +3264,7 @@ END SUBROUTINE znot_m_v7 !! SUBROUTINE znot_t_v7(uref, znott) + !$acc routine seq IMPLICIT NONE !> Calculate scalar roughness over water with input 10-m wind !! For low-to-moderate winds, try to match the Ck-U10 relationship from COARE algorithm @@ -3040,6 +3334,7 @@ END SUBROUTINE znot_t_v7 !! This should only be used over snow/ice! SUBROUTINE Andreas_2002(Z_0,bvisc,ustar,Zt,Zq) + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(IN) :: Z_0, bvisc, ustar REAL(kind_phys), INTENT(OUT) :: Zt, Zq @@ -3313,6 +3608,7 @@ END SUBROUTINE PSI_CB2005 !! and Holtslag (1991) for stable conditions. SUBROUTINE Li_etal_2010(zL, Rib, zaz0, z0zt) + !$acc routine seq IMPLICIT NONE REAL(kind_phys), INTENT(OUT) :: zL REAL(kind_phys), INTENT(IN) :: Rib, zaz0, z0zt @@ -3471,6 +3767,7 @@ REAL(kind_phys) function zolri2(zol2,ri2,za,z0,zt,psi_opt) REAL(kind_phys) function zolrib(ri,za,z0,zt,logz0,logzt,zol1,psi_opt) + !$acc routine seq ! This iterative algorithm to compute z/L from bulk-Ri IMPLICIT NONE @@ -3480,7 +3777,7 @@ REAL(kind_phys) function zolrib(ri,za,z0,zt,logz0,logzt,zol1,psi_opt) REAL(kind_phys) :: zol20,zol3,zolt,zolold INTEGER :: n INTEGER, PARAMETER :: nmax = 20 - REAL(kind_phys), DIMENSION(nmax):: zLhux + !REAL(kind_phys), DIMENSION(nmax):: zLhux REAL(kind_phys) :: psit2,psix2 !print*,"+++++++INCOMING: z/L=",zol1," ri=",ri @@ -3522,7 +3819,7 @@ REAL(kind_phys) function zolrib(ri,za,z0,zt,logz0,logzt,zol1,psi_opt) endif !print*,"n=",n," psit2=",psit2," psix2=",psix2 zolrib=ri*psix2**2/psit2 - zLhux(n)=zolrib + !zLhux(n)=zolrib n=n+1 enddo @@ -3530,7 +3827,7 @@ REAL(kind_phys) function zolrib(ri,za,z0,zt,logz0,logzt,zol1,psi_opt) !print*,"iter FAIL, n=",n," Ri=",ri," z/L=",zolri !if convergence fails, use approximate values: CALL Li_etal_2010(zolrib, ri, za/z0, z0/zt) - zLhux(n)=zolrib + !zLhux(n)=zolrib !print*,"FAILED, n=",n," Ri=",ri," z0=",z0 !print*,"z/L=",zLhux(1:nmax) else @@ -3595,6 +3892,7 @@ END SUBROUTINE psi_init ! !>\ingroup mynn_sfc real(kind_phys) function psim_stable_full(zolf) + !$acc routine seq real(kind_phys) :: zolf !psim_stable_full=-6.1*log(zolf+(1+zolf**2.5)**(1./2.5)) @@ -3605,6 +3903,7 @@ real(kind_phys) function psim_stable_full(zolf) !>\ingroup mynn_sfc real(kind_phys) function psih_stable_full(zolf) + !$acc routine seq real(kind_phys) :: zolf !psih_stable_full=-5.3*log(zolf+(1+zolf**1.1)**(1./1.1)) @@ -3615,6 +3914,7 @@ real(kind_phys) function psih_stable_full(zolf) !>\ingroup mynn_sfc real(kind_phys) function psim_unstable_full(zolf) + !$acc routine seq real(kind_phys) :: zolf,x,ym,psimc,psimk x=(1.-16.*zolf)**.25 @@ -3633,6 +3933,7 @@ real(kind_phys) function psim_unstable_full(zolf) !>\ingroup mynn_sfc real(kind_phys) function psih_unstable_full(zolf) + !$acc routine seq real(kind_phys) :: zolf,y,yh,psihc,psihk y=(1.-16.*zolf)**.5 @@ -3654,6 +3955,7 @@ real(kind_phys) function psih_unstable_full(zolf) !>\ingroup mynn_sfc !! REAL(kind_phys) function psim_stable_full_gfs(zolf) + !$acc routine seq REAL(kind_phys) :: zolf REAL(kind_phys), PARAMETER :: alpha4 = 20. REAL(kind_phys) :: aa @@ -3667,6 +3969,7 @@ REAL(kind_phys) function psim_stable_full_gfs(zolf) !>\ingroup mynn_sfc !! real(kind_phys) function psih_stable_full_gfs(zolf) + !$acc routine seq real(kind_phys) :: zolf real(kind_phys), PARAMETER :: alpha4 = 20. real(kind_phys) :: bb @@ -3680,6 +3983,7 @@ real(kind_phys) function psih_stable_full_gfs(zolf) !>\ingroup mynn_sfc !! real(kind_phys) function psim_unstable_full_gfs(zolf) + !$acc routine seq real(kind_phys) :: zolf real(kind_phys) :: hl1,tem1 real(kind_phys), PARAMETER :: a0=-3.975, a1=12.32, & @@ -3700,6 +4004,7 @@ real(kind_phys) function psim_unstable_full_gfs(zolf) !>\ingroup mynn_sfc !! real(kind_phys) function psih_unstable_full_gfs(zolf) + !$acc routine seq real(kind_phys) :: zolf real(kind_phys) :: hl1,tem1 real(kind_phys), PARAMETER :: a0p=-7.941, a1p=24.75, & @@ -3720,6 +4025,7 @@ real(kind_phys) function psih_unstable_full_gfs(zolf) !>\ingroup mynn_sfc !! look-up table functions - or, if beyond -10 < z/L < 10, recalculate real(kind_phys) function psim_stable(zolf,psi_opt) + !$acc routine seq integer :: nzol,psi_opt real(kind_phys) :: rzol,zolf @@ -3740,6 +4046,7 @@ real(kind_phys) function psim_stable(zolf,psi_opt) !>\ingroup mynn_sfc real(kind_phys) function psih_stable(zolf,psi_opt) + !$acc routine seq integer :: nzol,psi_opt real(kind_phys) :: rzol,zolf @@ -3760,6 +4067,7 @@ real(kind_phys) function psih_stable(zolf,psi_opt) !>\ingroup mynn_sfc real(kind_phys) function psim_unstable(zolf,psi_opt) + !$acc routine seq integer :: nzol,psi_opt real(kind_phys) :: rzol,zolf @@ -3780,6 +4088,7 @@ real(kind_phys) function psim_unstable(zolf,psi_opt) !>\ingroup mynn_sfc real(kind_phys) function psih_unstable(zolf,psi_opt) + !$acc routine seq integer :: nzol,psi_opt real(kind_phys) :: rzol,zolf diff --git a/physics/mynnsfc_wrapper.F90 b/physics/mynnsfc_wrapper.F90 index 1a970c9f4..3c033e65e 100644 --- a/physics/mynnsfc_wrapper.F90 +++ b/physics/mynnsfc_wrapper.F90 @@ -191,6 +191,16 @@ SUBROUTINE mynnsfc_wrapper_run( & & IMS,IME,JMS,JME,KMS,KME, & & ITS,ITE,JTS,JTE,KTS,KTE +!$acc enter data create(hfx, znt, psim, psih, chs, & +!$acc mavail, xland, GZ1OZ0, cpm, qgh, & +!$acc qfx, snowh_wat) + +!$acc enter data create(dz, th, qv) + +!$acc enter data copyin(rmol, phii, t3d, exner, qvsh, slmsk, xland) + +!$acc enter data copyin(dry, wet, icy, znt_lnd, znt_wat, znt_ice, qsfc_lnd, qsfc_ice, qsfc_lnd_ruc, qsfc_ice_ruc) + ! Initialize CCPP error handling variables errmsg = '' errflg = 0 @@ -203,6 +213,7 @@ SUBROUTINE mynnsfc_wrapper_run( & ! write(0,*)"iter=",iter ! endif +!$acc kernels ! prep MYNN-only variables dz(:,:) = 0 th(:,:) = 0 @@ -210,6 +221,9 @@ SUBROUTINE mynnsfc_wrapper_run( & hfx(:) = 0 qfx(:) = 0 rmol(:) = 0 +!$acc end kernels + +!$acc parallel loop collapse(2) present(dz, phii, th, t3d, exner, qv, qvsh) do k=1,2 !levs do i=1,im dz(i,k)=(phii(i,k+1) - phii(i,k))*g_inv @@ -219,6 +233,7 @@ SUBROUTINE mynnsfc_wrapper_run( & enddo enddo +!$acc parallel loop present(slmsk, xland, qgh, mavail, cpm, snowh_wat) do i=1,im if (slmsk(i)==1. .or. slmsk(i)==2.)then !sea/land/ice mask (=0/1/2) in FV3 xland(i)=1.0 !but land/water = (1/2) in SFCLAY_mynn @@ -235,6 +250,7 @@ SUBROUTINE mynnsfc_wrapper_run( & snowh_wat(i) = 0.0 enddo +!$acc kernels ! cm -> m where (dry) znt_lnd=znt_lnd*0.01 where (wet) znt_wat=znt_wat*0.01 @@ -245,6 +261,7 @@ SUBROUTINE mynnsfc_wrapper_run( & where (dry) qsfc_lnd = qsfc_lnd_ruc/(1.+qsfc_lnd_ruc) ! spec. hum where (icy) qsfc_ice = qsfc_ice_ruc/(1.+qsfc_ice_ruc) ! spec. hum. end if +!$acc end kernels ! if (lprnt) then ! write(0,*)"CALLING SFCLAY_mynn; input:" @@ -274,6 +291,8 @@ SUBROUTINE mynnsfc_wrapper_run( & ! write(0,*)"PBLH=",pblh(1)," xland=",xland(1) ! endif +!$acc exit data delete(qsfc_lnd_ruc, qsfc_ice_ruc) +!$acc exit data delete(phii, qvsh, slmsk) CALL SFCLAY_mynn( & u3d=u,v3d=v,t3d=t3d,qv3d=qv,p3d=prsl,dz8w=dz, & @@ -318,6 +337,13 @@ SUBROUTINE mynnsfc_wrapper_run( & errmsg=errmsg, errflg=errflg ) if (errflg/=0) return +!$acc exit data delete(hfx, znt, psim, psih, chs, & +!$acc mavail, xland, GZ1OZ0, cpm, qgh, & +!$acc qfx, snowh_wat, t3d, exner) +!$acc exit data delete(dz, th, qv) +!$acc exit data copyout(rmol) +!$acc exit data copyout(qsfc_lnd, qsfc_ice) + !! POST MYNN SURFACE LAYER (INTERSTITIAL) WORK: !do i = 1, im ! !* Taken from sfc_nst.f @@ -336,10 +362,15 @@ SUBROUTINE mynnsfc_wrapper_run( & ! znt_ice(i)=znt_ice(i)*100. !enddo +!$acc kernels ! m -> cm where (dry) znt_lnd=znt_lnd*100. where (wet) znt_wat=znt_wat*100. where (icy) znt_ice=znt_ice*100. +!$acc end kernels + +!$acc exit data delete(dry, wet, icy) +!$acc exit data copyout(znt_lnd, znt_wat, znt_ice) ! if (lprnt) then ! write(0,*) From 62298180c7269038931db60549b4ed1a4e6a2b9e Mon Sep 17 00:00:00 2001 From: Jili Dong Date: Mon, 21 Aug 2023 19:19:51 +0000 Subject: [PATCH 27/44] add SPP support for G-F deep convection --- physics/cu_gf_deep.F90 | 7 +++---- physics/cu_gf_driver.F90 | 26 ++++++++++++++++++++------ physics/cu_gf_driver.meta | 15 +++++++++++++++ physics/module_mp_thompson.F90 | 2 +- physics/mp_thompson.F90 | 2 +- physics/mp_thompson.meta | 2 +- 6 files changed, 41 insertions(+), 13 deletions(-) diff --git a/physics/cu_gf_deep.F90 b/physics/cu_gf_deep.F90 index 67dd9bd3f..a4253906c 100644 --- a/physics/cu_gf_deep.F90 +++ b/physics/cu_gf_deep.F90 @@ -4707,11 +4707,10 @@ subroutine get_zu_zd_pdf_fim(kklev,p,rand_vmas,zubeg,ipr,xland,zuh2,draft,ierr,k if(draft == 1) then lev_start=min(.9,.1+csum*.013) kb_adj=max(kb,2) - tunning=max(p(kklev+1),.5*(p(kpbli)+p(kt))) - tunning=p(kklev) -! tunning=p(kklev+1) !p(kpbli+1) !p(kklev) !p(kt)+(p(kpbli)-p(kt))*lev_start -! tunning=.5*(p(kb_adj)+p(kt)) !p(kpbli+1) !p(kklev) !p(kt)+(p(kpbli)-p(kt))*lev_start +! trash is the depth of the cloud trash=-p(kt)+p(kb_adj) + tunning=p(kklev) + if(rand_vmas.ne.0.) tunning=p(kklev-1)+.1*rand_vmas*trash beta_deep=1.3 +(1.-trash/1200.) tunning =min(0.95, (tunning-p(kb_adj))/(p(kt)-p(kb_adj))) !=.6 tunning =max(0.02, tunning) diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index f82569b99..5e42fb777 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -67,6 +67,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& fhour,fh_dfi_radar,ix_dfi_radar,num_dfi_radar,cap_suppress, & dfi_radar_max_intervals,ldiag3d,qci_conv,do_cap_suppress, & maxupmf,maxMF,do_mynnedmf,ichoice_in,ichoicem_in,ichoice_s_in, & + spp_cu_deep,spp_wts_cu_deep, & errmsg,errflg) !------------------------------------------------------------- implicit none @@ -80,6 +81,10 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& integer :: ichoice=0 ! 0 2 5 13 8 integer :: ichoicem=13 ! 0 2 5 13 integer :: ichoice_s=3 ! 0 1 2 3 + integer, intent(in) :: spp_cu_deep ! flag for using SPP perturbations + real(kind_phys), dimension(:,:), intent(in) :: & + & spp_wts_cu_deep + real(kind=kind_phys) :: spp_wts_cu_deep_tmp logical, intent(in) :: do_cap_suppress real(kind=kind_phys), parameter :: aodc0=0.14 @@ -313,9 +318,18 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& ! these should be coming in from outside ! ! cactiv(:) = 0 - rand_mom(:) = 0. - rand_vmas(:) = 0. - rand_clos(:,:) = 0. + if (spp_cu_deep == 0) then + rand_mom(:) = 0. + rand_vmas(:) = 0. + rand_clos(:,:) = 0. + else + do i=1,im + spp_wts_cu_deep_tmp=min(max(-1.0, spp_wts_cu_deep(i,1)),1.0) + rand_mom(i) = spp_wts_cu_deep_tmp + rand_vmas(i) = spp_wts_cu_deep_tmp + rand_clos(i,:) = spp_wts_cu_deep_tmp + end do + end if !$acc end kernels ! its=1 @@ -630,7 +644,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& enddo !$acc end kernels if (dx(its)<6500.) then - ichoice=10 +! ichoice=10 imid_gf=0 endif ! @@ -734,7 +748,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& ,rand_mom & ! for stochastics mom, if temporal and spatial patterns exist ,rand_vmas & ! for stochastics vertmass, if temporal and spatial patterns exist ,rand_clos & ! for stochastics closures, if temporal and spatial patterns exist - ,0 & ! flag to what you want perturbed + ,spp_cu_deep & ! flag to what you want perturbed ! 1 = momentum transport ! 2 = normalized vertical mass flux profile ! 3 = closures @@ -816,7 +830,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& ,rand_mom & ! for stochastics mom, if temporal and spatial patterns exist ,rand_vmas & ! for stochastics vertmass, if temporal and spatial patterns exist ,rand_clos & ! for stochastics closures, if temporal and spatial patterns exist - ,0 & ! flag to what you want perturbed + ,spp_cu_deep & ! flag to what you want perturbed ! 1 = momentum transport ! 2 = normalized vertical mass flux profile ! 3 = closures diff --git a/physics/cu_gf_driver.meta b/physics/cu_gf_driver.meta index 8b1a46e2d..08e9de201 100644 --- a/physics/cu_gf_driver.meta +++ b/physics/cu_gf_driver.meta @@ -597,6 +597,21 @@ dimensions = () type = integer intent = in +[spp_wts_cu_deep] + standard_name = spp_weights_for_cu_deep_scheme + long_name = spp weights for cu deep scheme + units = 1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = in +[spp_cu_deep] + standard_name = control_for_deep_convection_spp_perturbations + long_name = control for deep convection spp perturbations + units = count + dimensions = () + type = integer + intent = in [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index 4d823d2f4..ca913c6e3 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -1046,7 +1046,7 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & INTEGER, INTENT(IN) :: rand_perturb_on, kme_stoch, n_var_spp REAL, DIMENSION(:,:), INTENT(IN) :: rand_pert REAL, DIMENSION(:), INTENT(IN) :: spp_prt_list, spp_stddev_cutoff - CHARACTER(len=3), DIMENSION(:), INTENT(IN) :: spp_var_list + CHARACTER(len=10), DIMENSION(:), INTENT(IN) :: spp_var_list INTEGER, INTENT(IN):: has_reqc, has_reqi, has_reqs #if ( WRF_CHEM == 1 ) REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT):: & diff --git a/physics/mp_thompson.F90 b/physics/mp_thompson.F90 index 6a95a706c..c456e87cd 100644 --- a/physics/mp_thompson.F90 +++ b/physics/mp_thompson.F90 @@ -409,7 +409,7 @@ subroutine mp_thompson_run(ncol, nlev, con_g, con_rd, & integer, intent(in) :: n_var_spp real(kind_phys), intent(in) :: spp_wts_mp(:,:) real(kind_phys), intent(in) :: spp_prt_list(:) - character(len=3), intent(in) :: spp_var_list(:) + character(len=10), intent(in) :: spp_var_list(:) real(kind_phys), intent(in) :: spp_stddev_cutoff(:) logical, intent (in) :: cplchm diff --git a/physics/mp_thompson.meta b/physics/mp_thompson.meta index 691698281..5918e4dd9 100644 --- a/physics/mp_thompson.meta +++ b/physics/mp_thompson.meta @@ -725,7 +725,7 @@ units = none dimensions = (number_of_perturbed_spp_schemes) type = character - kind = len=3 + kind = len=10 intent = in [cplchm] standard_name = flag_for_chemistry_coupling From 96f60024a50b5c9b1701b83cd0fa3ece5c94ba21 Mon Sep 17 00:00:00 2001 From: Jili Dong Date: Wed, 23 Aug 2023 15:36:30 +0000 Subject: [PATCH 28/44] minor change on explicitly delcaring data type --- physics/cu_gf_driver.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index 5e42fb777..3b700cc5a 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -324,7 +324,7 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& rand_clos(:,:) = 0. else do i=1,im - spp_wts_cu_deep_tmp=min(max(-1.0, spp_wts_cu_deep(i,1)),1.0) + spp_wts_cu_deep_tmp=min(max(-1.0_kind_phys, spp_wts_cu_deep(i,1)),1.0_kind_phys) rand_mom(i) = spp_wts_cu_deep_tmp rand_vmas(i) = spp_wts_cu_deep_tmp rand_clos(i,:) = spp_wts_cu_deep_tmp From 95e9ff2268ad03f3004da886634812c5f7bdf32c Mon Sep 17 00:00:00 2001 From: "Timothy S. Sliwinski" Date: Thu, 24 Aug 2023 16:10:55 +0000 Subject: [PATCH 29/44] Reworking how errmsg is treated in device code to remove some preprocessor variable substitutions through the use of new local variables. The changes in this commit affect 3 main areas of module_sf_mynn.F90: 1.) Subroutine SFCLAY_mynn 2.) Subroutine SFCLAY1D_mynn 3.) Subroutine GFS_zt_wat Each of these areas are described in more detail below. 1.) SFCLAY_mynn In the SFCLAY_mynn subroutine, it was possible to remove all #ifdef substitutions of errmsg(len=*) for errmsg(len=200) because errmsg is not used in any code regions of this subroutine that may be run on an accelerator device. Since this is the case, errmsg(len=*) is perfectly acceptable, and can be left alone. The OpenACC data statements within the subroutine were also updated to remove references to errmsg as well since, again, it was not necessary to have errmsg on the device for this subroutine. 2.) SFCLAY1D_mynn - Creation of device_errmsg and device_errflg and proper syncing with errmsg and errflg In the SFCLAY1D_mynn subroutine, it was also possible to remove all #ifdef substitutions by instead creating a new local variable called device_errmsg that is a copy of errmsg but with a fixed size of 512 such that it is acceptable for use on the device. This is necessary because at certain points in the subroutine, loops that are good to be offloaded to the device set errmsg under certain conditions. Since these areas cannot be isolated from the parent loop without a major rework of the loop, we must preserve a way for errmsg to be set on the device. Since device_errmsg is a fixed size, we can do that. However, this complicates the code a bit for error handling purposes as we now have errmsg and device_errmsg which must be synced properly to ensure error messages are returned to CCPP as expected. Therefore, we must keep track of when device_errmsg is set so we can know to sync device_errmsg with errmsg. This is done by making a new local variable called device_errflg to be device_errmsg's complement on the device as errflg is errmsg's complement on the host. When device_errflg is set to a nonzero integer, we then know that device_errmsg must be synced with errmsg. This is simple to do at the end of the subroutine after the device_errmsg on the device is copyout-ed by OpenACC, and a new IF-block has been added for this general case. - Special case of mid-loop return (line 1417), and the creation of device_special_errflg and device_special_errmsg However, there is a special case we must handle a bit differently. In the mid-loop return statement near line 1417, we also must perform this sync to ensure the proper errmsg is returned in the event this return is needed. Therefore, a similar IF-block has been created within the corresponding #ifdef near line 2027 to ensure errmsg has the proper value before the subroutine returns. However, since this block is in the middle of the entire code and only executed on the host, we must first perform an OpenACC sync operation to make sure the device_errmsg and the device_errflg on the host matches the device_errmsg and device_errflg on the host, otherwise the incorrect values could lead to the return statement not executing as expected. This special case seems simple, but an extra trap lay exposed. If device_errmsg and device_errflg is set on the device at any point now before this IF-block, then the return statement we moved out of the loop will now be executed for *ANY* error message, whether that was the intended course or not. Therefore, we need to ensure this special case is only triggered for this specific case. Unfortunately, there appears no other way than to create two additional variables (device_special_errmsg and device_special_errflg) to isolate this case from all other error cases. With these installed in place of just device_errmsg and device_errflg, this special return case is now properly handled. - Complete Ifdef/Ifndef removal not possible Overall, due to the nature of this special case, we have no choice but to leave the #ifdef and #ifndef preprocessor statements in place as they are the only things capable of moving this return statement out of the loop without additional invasive changes to how the code operates. 3.) GFS_zt_wat In the GFS_zt_wat subroutine, since this subroutine is called on the device from within the main I-loop of SFCLAY1D_mynn, we have no choice but to change all errmsg and errflg usage to device_errmsg or device_errflg, otherwise this subroutine and the entire parent loop could not be run on the device. Therefore, all errmsg and errflg lines have been commented out and new, comparable lines using device_errmsg and device_errflg added in their place. Additionally, the subroutine call variable list was updated. --- physics/module_sf_mynn.F90 | 99 ++++++++++++++++++++++++++------------ 1 file changed, 67 insertions(+), 32 deletions(-) diff --git a/physics/module_sf_mynn.F90 b/physics/module_sf_mynn.F90 index 399b1ee83..dd181c99c 100644 --- a/physics/module_sf_mynn.F90 +++ b/physics/module_sf_mynn.F90 @@ -345,12 +345,7 @@ SUBROUTINE SFCLAY_mynn( & & qsfc_wat, qsfc_lnd, qsfc_ice ! CCPP error handling -#ifndef _OPENACC character(len=*), intent(inout) :: errmsg -#else -!Necessary since OpenACC does not support assumed-size arrays - character(len=200), intent(inout) :: errmsg -#endif integer, intent(inout) :: errflg !ADDITIONAL OUTPUT @@ -378,7 +373,7 @@ SUBROUTINE SFCLAY_mynn( & errmsg = '' !$acc enter data copyin( dz8w,U3D,V3D,QV3D,QC3D,P3D,T3D, & -!$acc pattern_spp_sfc, errmsg) +!$acc pattern_spp_sfc) !$acc enter data copyin( UST_WAT(:), UST_LND(:), UST_ICE(:), & !$acc MOL(:), QFLX(:), HFLX(:), & @@ -504,7 +499,7 @@ SUBROUTINE SFCLAY_mynn( & !$acc exit data copyout( UST_WAT(:), UST_LND(:), UST_ICE(:), & !$acc MOL(:), QFLX(:), HFLX(:), & !$acc QSFC(:), QSFC_WAT(:), QSFC_LND(:), & -!$acc QSFC_ICE(:), errmsg) +!$acc QSFC_ICE(:)) !$acc exit data delete( dz8w1d(:), dz2w1d(:), U1D(:), & !$acc V1D(:), U1D2(:), V1D2(:), & @@ -666,14 +661,25 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !JOE-end ! CCPP error handling -#ifndef _OPENACC character(len=*), intent(inout) :: errmsg -#else -! Necessary since OpenACC does not support assumed-size arrays - character(len=200), intent(inout) :: errmsg -#endif integer, intent(inout) :: errflg +! Local fixed-size errmsg character array for error messages on accelerator +! devices distinct from the host (e.g. GPUs). Necessary since OpenACC does +! not support assumed-size (len=*) arrays like errmsg. Additional +! device_errflg integer to denote when device_errmsg needs to be synced +! with errmsg. + character(len=512) :: device_errmsg + integer :: device_errflg + +! Special versions of the fixed-size errmsg character array for error messages +! on the device and it's errflag counterpart. These are necessary to ensure +! the return statements at lines 1417 and 2030 are executed only for this +! special case, and not any and all error messages set on the device. + character(len=512) :: device_special_errmsg + integer :: device_special_errflg + + !---------------------------------------------------------------- ! LOCAL VARS !---------------------------------------------------------------- @@ -723,6 +729,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ! Initialize error-handling errflg = 0 errmsg = '' + device_errflg = errflg + device_errmsg = errmsg + device_special_errflg = errflg + device_special_errmsg = errmsg !------------------------------------------------------------------- !$acc update device(psim_stab, psim_unstab, psih_stab, psih_unstab) @@ -770,7 +780,9 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !$acc PSIT_lnd, PSIT_wat, PSIT_ice, & !$acc ch_lnd, ch_wat, ch_ice, & !$acc cm_lnd, cm_wat, cm_ice, & -!$acc snowh_lnd, errmsg) +!$acc snowh_lnd, & +!$acc device_errmsg, device_errflg, & +!$acc device_special_errmsg, device_special_errflg) !$acc parallel loop present(PSFCPA, PSFC, QSFC, T1D, flag_iter, & !$acc QSFC_wat, QSFCMR_wat, wet, TSK_wat, tskin_wat, & @@ -1198,7 +1210,9 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !-------------------------------------------------------------------- !-------------------------------------------------------------------- -!$acc parallel loop present(flag_iter, errmsg, & +!$acc parallel loop present(flag_iter, & +!$acc device_errmsg, device_errflg, & +!$acc device_special_errmsg, device_special_errflg, & !$acc wet, dry, icy, & !$acc ZT_wat, ZT_lnd, ZT_ice, & !$acc ZNT_wat, ZNT_lnd, ZNT_ice, & @@ -1330,7 +1344,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF ELSEIF ( ISFTCFLX .EQ. 4 ) THEN !GFS zt formulation - CALL GFS_zt_wat(ZT_wat(i),ZNTstoch_wat(i),restar,WSPD(i),ZA(i),sfc_z0_type,errmsg,errflg) + CALL GFS_zt_wat(ZT_wat(i),ZNTstoch_wat(i),restar,WSPD(i),ZA(i),sfc_z0_type,device_errmsg,device_errflg) ZQ_wat(i)=ZT_wat(i) ENDIF ELSE @@ -1392,10 +1406,14 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ELSEIF ( IZ0TLND .EQ. 2 ) THEN ! DH note - at this point, qstar is either not initialized ! or initialized to zero, but certainly not set correctly - errmsg = 'Logic error: qstar is not set correctly when calling Yang_2008' - errflg = 1 + device_special_errmsg = 'Logic error: qstar is not set correctly when calling Yang_2008' + device_special_errflg = 1 #ifndef _OPENACC ! Necessary since OpenACC does not support branching in parallel code +! Must sync errmsg and errflg with device_errmsg and device_errflg, respectively +! so that proper error message and error flag codes are returned. + errmsg = device_special_errmsg + errflg = device_special_errflg return #endif CALL Yang_2008(ZNTSTOCH_lnd(i),ZT_lnd(i),ZQ_lnd(i),UST_lnd(i),MOL(I),& @@ -2001,8 +2019,14 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDDO ! end i-loop #ifdef _OPENACC - ! Necessary since OpenACC does not support branching in parallel code - IF (errflg == 1) THEN +! Necessary since OpenACC does not support branching in parallel code. +! Must sync host errflg, errmsg to determine if return must be triggered +! and correct error message and error flag code returned. +! This code is being executed on the HOST side only, pulling data from DEVICE. +!$acc exit data copyout(device_special_errflg, device_special_errmsg) + IF (device_special_errflg /= 0) THEN + errflg = device_special_errflg + errmsg = device_special_errmsg return ENDIF #endif @@ -2506,7 +2530,13 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !$acc PSIT_lnd, PSIT_wat, PSIT_ice, & !$acc ch_lnd, ch_wat, ch_ice, & !$acc cm_lnd, cm_wat, cm_ice, & -!$acc errmsg) +!$acc device_errmsg, device_errflg) + +! Final sync of device and host error flags and messages +IF (device_errflg /= 0) THEN + errflg = device_errflg + errmsg = device_errmsg +ENDIF !$acc exit data delete( flag_iter, dry, wet, icy, dx, & !$acc MAVAIL, PBLH, PSFCPA, z0pert, ztpert, & @@ -3036,24 +3066,27 @@ SUBROUTINE GFS_z0_wat(z0rl_wat,ustar_wat,WSPD,z1,sfc_z0_type,redrag) END SUBROUTINE GFS_z0_wat !-------------------------------------------------------------------- !>\ingroup mynn_sfc - SUBROUTINE GFS_zt_wat(ztmax,z0rl_wat,restar,WSPD,z1,sfc_z0_type,errmsg,errflg) + SUBROUTINE GFS_zt_wat(ztmax,z0rl_wat,restar,WSPD,z1,sfc_z0_type,device_errmsg,device_errflg) !$acc routine seq real(kind_phys), INTENT(OUT) :: ztmax real(kind_phys), INTENT(IN) :: wspd,z1,z0rl_wat,restar INTEGER, INTENT(IN) :: sfc_z0_type -#ifndef _OPENACC - character(len=*), intent(out) :: errmsg -#else -! Necessary since OpenACC does not support assumed-size arrays - character(len=200), intent(out) :: errmsg -#endif - integer, intent(out) :: errflg + +! Using device_errmsg and device_errflg rather than the CCPP errmsg and errflg +! so that this subroutine can be run on an accelerator device with OpenACC. +! character(len=*), intent(out) :: errmsg +! integer, intent(out) :: errflg + character(len=512), intent(out) :: device_errmsg + integer, intent(out) :: device_errflg + real(kind_phys) :: z0,z0max,wind10m,rat,ustar_wat real(kind_phys), PARAMETER :: charnock = 0.014, z0s_max=.317e-2 ! Initialize error-handling - errflg = 0 - errmsg = '' +! errflg = 0 +! errmsg = '' + device_errflg = 0 + device_errmsg = '' ! z0 = 0.01 * z0rl_wat !Already converted to meters in the wrapper @@ -3084,8 +3117,10 @@ SUBROUTINE GFS_zt_wat(ztmax,z0rl_wat,restar,WSPD,z1,sfc_z0_type,errmsg,errflg) call znot_t_v7(wind10m, ztmax) ! 10-m wind,m/s, ztmax(m) else if (sfc_z0_type > 0) then write(0,*)'no option for sfc_z0_type=',sfc_z0_type - errflg = 1 - errmsg = 'ERROR(GFS_zt_wat): sfc_z0_type not valid.' +! errflg = 1 +! errmsg = 'ERROR(GFS_zt_wat): sfc_z0_type not valid.' + device_errflg = 1 + device_errmsg = 'ERROR(GFS_zt_wat): sfc_z0_type not valid.' return endif From 36a313e91bd7089a3069a72d1326d200e4bbcde0 Mon Sep 17 00:00:00 2001 From: "Timothy S. Sliwinski" Date: Mon, 28 Aug 2023 21:11:38 +0000 Subject: [PATCH 30/44] Removing preprocessor directives to re-enable print statements on GPU for debug and other conditions. Original problem: ----------------- Following feedback that debug information was still desirable for OpenACC device- executed code where possible, this change removes all preprocessor directives which were guarding against the compilation of statements which wrote to standard output. These directives were originally used because debug statements and other standard output had the potential to greatly reduce performance because of the need to copy over certain variables from the host to the device just for debug output purposes. Additionally, when statements were located within parallel-execution regions, the output was not guaranteed to be presented in any specific order and the additional IF-branches in the code also would have reduced performance as branching is not efficient when on SIMD architectures. Resolutions: ------------ However, with a bit of extra work, a few of these issues are alleviated to allow output to work again as requested. First, on the data optimization side of the problem, the impact of pulling in variables just for debugging was minimized by ensuring the data was pulled in and resident on the GPU for the entire subroutine execution. While this increases the memory footprint on the device which may have very limited memory, it reduces the data transfer related performance hit. Next, in the cases where debug output was not within parallel regions but still needing to be executed on the GPU to show the proper values at that state of the overall program execution, OpenACC serial regions were used. These allow the data to not have to be transferred off the GPU mid-execution of the program just to be shown as debug output and also partially solve the problem of out-of-order output. Since debug regions are guarded by IF blocks, these serial regions do not significantly impact performance when debug output is turned off (debug_code=0). However, slowdown is significant for any other debug-levels which should be acceptable for debugging situations. Performance Changes: -------------------- Overall, these changes accomplish the goal of re-enabling debugging output, but not completely without a cost. Overall runtime was slightly impacted on the GPU when tested with 150k and 750k vertical columns (the value of ite used in the i-loops) and debugging turned off (debug_code=0). For 150k columns, the GPU decreased in speed from the original baseline of 22ms to 30ms. For 750k columns, the GPU decreased in speed from the original baseline of 31ms to 70ms. The impact is greater for the larger number of columns due to the impact of the number of times the mid-loop IF branches are evaluated on the GPU. While these are slight declines in performance, these are still significant speedups over the CPU-only tests (8.7x and 18.7x speedups for 150k and 750k, respectively). Compilation Time Changes: ------------------------- One additional noted observation regarding performance is compilation time. When all debug output is disabled (debug_code=0), compilation time is approximately 90 seconds with the additional serial blocks, IF-branches, and so forth as each of these require more work from the OpenACC compiler to generate code for the GPU. This problem is compounded when the debug_code option is increase to either 1 (some debug output) or 2 (full debug output). At a value of 1, compilation time jumps up to approximately 12.5 minutes on the Hera GPU nodes. At a value of 2, compilation time increases further to approximately 18.5 minutes on the same GPU nodes. The explanation for this is the need for the OpenACC compiler to enable greater amounts of serial and branching code that (again) are less optimal on the GPU and so the compiler must do more work to try to optimize them as best it can. --- physics/module_sf_mynn.F90 | 112 ++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 63 deletions(-) diff --git a/physics/module_sf_mynn.F90 b/physics/module_sf_mynn.F90 index dd181c99c..eecc5493c 100644 --- a/physics/module_sf_mynn.F90 +++ b/physics/module_sf_mynn.F90 @@ -780,11 +780,11 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !$acc PSIT_lnd, PSIT_wat, PSIT_ice, & !$acc ch_lnd, ch_wat, ch_ice, & !$acc cm_lnd, cm_wat, cm_ice, & -!$acc snowh_lnd, & +!$acc snowh_lnd, snowh_wat, snowh_ice, & !$acc device_errmsg, device_errflg, & !$acc device_special_errmsg, device_special_errflg) -!$acc parallel loop present(PSFCPA, PSFC, QSFC, T1D, flag_iter, & +!$acc parallel loop present(PSFCPA, PSFC, QSFC, T1D, flag_iter, tsurf_lnd, & !$acc QSFC_wat, QSFCMR_wat, wet, TSK_wat, tskin_wat, & !$acc QSFC_lnd, QSFCMR_lnd, dry, TSK_lnd, tskin_lnd, & !$acc QSFC_ice, QSFCMR_ice, icy, TSK_ice, tskin_ice) @@ -809,9 +809,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF QSFC_wat(I)=EP2*E1/(PSFC(I)-ep3*E1) !specific humidity QSFCMR_wat(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio -#ifndef _OPENACC IF(QSFC_wat(I)>1..or.QSFC_wat(I)<0.) print *,' QSFC_wat(I)',itimestep,i,QSFC_wat(I),TSK_wat(i) -#endif ENDIF IF (dry(i)) THEN TSK_lnd(I) = tskin_lnd(i) @@ -831,9 +829,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & QSFC_lnd(I)=0.5*(QSFC_lnd(I) + QSFC(I)) QSFCMR_lnd(I)=QSFC_lnd(I)/(1.-QSFC_lnd(I)) !mixing ratio endif ! lsm -#ifndef _OPENACC IF(QSFC_lnd(I)>1..or.QSFC_lnd(I)<0.) print *,' QSFC_lnd(I)',itimestep,i,QSFC_lnd(I),Tskin_lnd(i),tsurf_lnd(i),qsfc(i) -#endif ENDIF IF (icy(i)) THEN TSK_ice(I) = tskin_ice(i) @@ -851,9 +847,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & QSFC_ice(I)=EP2*E1/(PSFC(I)-ep3*E1) !specific humidity QSFCMR_ice(I)=EP2*E1/(PSFC(I)-E1) !mixing ratio endif ! lsm -#ifndef _OPENACC IF(QSFC_ice(I)>1..or.QSFC_ice(I)<0.) print *,' QSFC_ice(I)',itimestep,i,QSFC_ice(I),TSK_ice(i) -#endif ENDIF ELSE @@ -906,7 +900,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & endif ! flag_iter ENDDO -#ifndef _OPENACC +!$acc serial present(pblh, PSFCPA, dz8w1d, qflx, hflx, & +!$acc dry, tskin_lnd, tsurf_lnd, qsfc_lnd, znt_lnd, ust_lnd, snowh_lnd, & +!$acc icy, tskin_ice, tsurf_ice, qsfc_ice, znt_ice, ust_ice, snowh_ice, & +!$acc wet, tskin_wat, tsurf_wat, qsfc_wat, znt_wat, ust_wat, snowh_wat) IF (debug_code >= 1) THEN write(0,*)"ITIMESTEP=",ITIMESTEP," iter=",iter DO I=its,ite @@ -931,12 +928,12 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF ENDDO ENDIF -#endif +!$acc end serial !$acc parallel loop present(PSFC, PSFCPA, QVSH, QV1D, THCON, flag_iter, & !$acc dry, tskin_lnd, TSK_lnd, tsurf_lnd, THSK_lnd, THVSK_lnd, qsfc_lnd, & !$acc icy, tskin_ice, TSK_ice, tsurf_ice, THSK_ice, THVSK_ice, qsfc_ice, & -!$acc wet, tskin_wat, TSK_wat, tsurf_wat, THSK_wat, THVSK_wat) +!$acc wet, tskin_wat, TSK_wat, tsurf_wat, THSK_wat, THVSK_wat, qsfc_wat) DO I=its,ite ! PSFC ( in cmb) is used later in saturation checks PSFC(I)=PSFCPA(I)/1000. @@ -950,10 +947,8 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ! CONVERT SKIN TEMPERATURES TO POTENTIAL TEMPERATURE: THSK_lnd(I) = TSK_lnd(I)*THCON(I) !(K) THVSK_lnd(I) = THSK_lnd(I)*(1.+EP1*qsfc_lnd(I)) -#ifndef _OPENACC if(THVSK_lnd(I) < 170. .or. THVSK_lnd(I) > 360.) & print *,'THVSK_lnd(I)',itimestep,i,THVSK_lnd(I),THSK_lnd(i),tsurf_lnd(i),tskin_lnd(i),qsfc_lnd(i) -#endif endif if(icy(i)) then TSK_ice(I) = tskin_ice(i) @@ -961,10 +956,8 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ! CONVERT SKIN TEMPERATURES TO POTENTIAL TEMPERATURE: THSK_ice(I) = TSK_ice(I)*THCON(I) !(K) THVSK_ice(I) = THSK_ice(I)*(1.+EP1*qsfc_ice(I)) !(K) -#ifndef _OPENACC if(THVSK_ice(I) < 170. .or. THVSK_ice(I) > 360.) & print *,'THVSK_ice(I)',itimestep,i,THVSK_ice(I),THSK_ice(i),tsurf_ice(i),tskin_ice(i),qsfc_ice(i) -#endif endif if(wet(i)) then TSK_wat(I) = tskin_wat(i) @@ -972,10 +965,8 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ! CONVERT SKIN TEMPERATURES TO POTENTIAL TEMPERATURE: THSK_wat(I) = TSK_wat(I)*THCON(I) !(K) THVSK_wat(I) = THSK_wat(I)*(1.+EP1*QVSH(I)) !(K) -#ifndef _OPENACC if(THVSK_wat(I) < 170. .or. THVSK_wat(I) > 360.) & print *,'THVSK_wat(I)',i,THVSK_wat(I),THSK_wat(i),tsurf_wat(i),tskin_wat(i),qsfc_wat(i) -#endif endif endif ! flag_iter ENDDO @@ -1009,7 +1000,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & HFX(i)=HFLX(i)*RHO1D(I)*cp ENDDO -#ifndef _OPENACC +!$acc serial present(THV1D, TV1D, RHO1D, GOVRTH, & +!$acc dry, tsk_lnd, thvsk_lnd, & +!$acc icy, tsk_ice, thvsk_ice, & +!$acc wet, tsk_wat, thvsk_wat) IF (debug_code ==2) THEN !write(*,*)"ITIMESTEP=",ITIMESTEP DO I=its,ite @@ -1022,7 +1016,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & write(*,*)"RHO1D=", RHO1D(i)," GOVRTH=",GOVRTH(i) ENDDO ENDIF -#endif +!$acc end serial !$acc parallel loop present(T1D,P1D,QGH,QV1D,CPM) DO I=its,ite @@ -1042,7 +1036,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & CPM(I)=CP*(1.+0.84*QV1D(I)) ENDDO -#ifndef _OPENACC +!$acc serial present(QGH, & +!$acc wet, QSFC_wat, QSFCMR_wat, & +!$acc dry, QSFC_lnd, QSFCMR_lnd, & +!$acc icy, QSFC_ice, QSFCMR_ice) IF (debug_code == 2) THEN write(*,*)"ITIMESTEP=",ITIMESTEP DO I=its,ite @@ -1060,7 +1057,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & endif ENDDO ENDIF -#endif +!$acc end serial !$acc parallel loop present(flag_iter,U1D,V1D,WSPD,wet,dry,icy, & !$acc THV1D,THVSK_wat,THVSK_lnd,THVSK_ice, & @@ -1182,7 +1179,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & WSPD(I) = MAX(WSPD_ice,WSPD_wat) WSPD(I) = MAX(WSPD_lnd,WSPD(I)) -#ifndef _OPENACC IF (debug_code == 2) THEN write(*,*)"===== After rb calc in mynn sfc layer:" write(*,*)"ITIMESTEP=",ITIMESTEP @@ -1191,7 +1187,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & IF (wet(i))write(*,*)"rb_wat=", rb_wat(I)," DTHVDZ=",DTHVDZ IF (dry(i))write(*,*)"rb_lnd=", rb_lnd(I)," DTHVDZ=",DTHVDZ ENDIF -#endif ! IF PREVIOUSLY UNSTABLE, DO NOT LET INTO REGIMES 1 AND 2 (STABLE) !if (itimestep .GT. 1) THEN @@ -1210,7 +1205,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !-------------------------------------------------------------------- !-------------------------------------------------------------------- -!$acc parallel loop present(flag_iter, & +!$acc parallel loop present(flag_iter, PSFCPA, dz8w1d, pblh, & !$acc device_errmsg, device_errflg, & !$acc device_special_errmsg, device_special_errflg, & !$acc wet, dry, icy, & @@ -1219,8 +1214,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !$acc ZNTstoch_wat, ZNTstoch_lnd, ZNTstoch_ice, & !$acc UST_wat, UST_lnd, UST_ice, & !$acc ZQ_wat, ZQ_lnd, ZQ_ice, & -!$acc snowh_lnd, & +!$acc snowh_wat, snowh_lnd, snowh_ice, & !$acc THVSK_wat, THVSK_lnd, THVSK_ice, & +!$acc tskin_wat, tskin_lnd, tskin_ice, & +!$acc tsurf_wat, tsurf_lnd, tsurf_ice, & !$acc qsfc_wat, qsfc_lnd, qsfc_ice, & !$acc GZ1OZ0_wat, GZ1OZt_wat, GZ2OZ0_wat, GZ2OZt_wat, GZ10OZ0_wat, GZ10OZt_wat, & !$acc GZ1OZ0_lnd, GZ1OZt_lnd, GZ2OZ0_lnd, GZ2OZt_lnd, GZ10OZ0_lnd, GZ10OZt_lnd, & @@ -1228,12 +1225,14 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !$acc zratio_wat, zratio_lnd, zratio_ice, & !$acc stress_wat, stress_lnd, stress_ice, & !$acc rb_wat, rb_lnd, rb_ice, & +!$acc qflx, qflx_lnd, & +!$acc hflx, hflx_lnd, & !$acc psim, psih, psim10, psih10, psih2, & !$acc psix_wat, psix10_wat, psit_wat, psit2_wat, psiq_wat, psiq2_wat, & !$acc psix_lnd, psix10_lnd, psit_lnd, psit2_lnd, psiq_lnd, psiq2_lnd, & !$acc psix_ice, psix10_ice, psit_ice, psit2_ice, psiq_ice, psiq2_ice, & !$acc WSPD, WSPDI, U1D, V1D, TC1D, THV1D, rstoch1D, USTM, ZA, ZOL, QVSH, & -!$acc shdmax, vegtype, z0pert, ztpert, mol, rmol, qstar, sigmaf) +!$acc shdmax, vegtype, z0pert, ztpert, mol, rmol, wstar, qstar, sigmaf) DO I=its,ite if( flag_iter(i) ) then @@ -1250,12 +1249,12 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & if (sfc_z0_type >= 0) then ! Avoid calculation is using wave model ! CALCULATE z0 (znt) !-------------------------------------- -#ifndef _OPENACC + IF (debug_code == 2) THEN write(*,*)"=============Input to ZNT over water:" write(*,*)"u*:",UST_wat(i)," wspd=",WSPD(i)," visc=",visc," za=",ZA(I) ENDIF -#endif + IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN IF (COARE_OPT .EQ. 3.0) THEN @@ -1292,12 +1291,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZNTstoch_wat(I) = ZNT_wat(I) endif -#ifndef _OPENACC IF (debug_code > 1) THEN write(*,*)"==========Output ZNT over water:" write(*,*)"ZNT:",ZNTstoch_wat(i) ENDIF -#endif !COMPUTE ROUGHNESS REYNOLDS NUMBER (restar) USING NEW ZNT ! AHW: Garrattt formula: Calculate roughness Reynolds number @@ -1308,12 +1305,10 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !-------------------------------------- !CALCULATE z_t and z_q !-------------------------------------- -#ifndef _OPENACC IF (debug_code > 1) THEN write(*,*)"=============Input to ZT over water:" write(*,*)"u*:",UST_wat(i)," restar=",restar," visc=",visc ENDIF -#endif IF ( PRESENT(ISFTCFLX) ) THEN IF ( ISFTCFLX .EQ. 0 ) THEN @@ -1357,12 +1352,11 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & rstoch1D(i),spp_sfc) ENDIF ENDIF -#ifndef _OPENACC + IF (debug_code > 1) THEN write(*,*)"=============Output ZT & ZQ over water:" write(*,*)"ZT:",ZT_wat(i)," ZQ:",ZQ_wat(i) ENDIF -#endif GZ1OZ0_wat(I)= LOG((ZA(I)+ZNTstoch_wat(I))/ZNTstoch_wat(I)) GZ1OZt_wat(I)= LOG((ZA(I)+ZNTstoch_wat(i))/ZT_wat(i)) @@ -1433,7 +1427,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF ENDIF -#ifndef _OPENACC IF (ZNTstoch_lnd(i) < 1E-8 .OR. Zt_lnd(i) < 1E-10) THEN write(0,*)"===(land) capture bad input in mynn sfc layer, i=:",i write(0,*)" ZNT=", ZNTstoch_lnd(i)," ZT=",Zt_lnd(i) @@ -1442,7 +1435,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " ust=", ust_lnd(i)," snowh=", snowh_lnd(i),"psfcpa=",PSFCPA(i), & " dz=",dz8w1d(i)," qflx=",qflx_lnd(i)," hflx=",hflx_lnd(i)," hpbl=",pblh(i) ENDIF -#endif GZ1OZ0_lnd(I)= LOG((ZA(I)+ZNTstoch_lnd(I))/ZNTstoch_lnd(I)) GZ1OZt_lnd(I)= LOG((ZA(I)+ZNTstoch_lnd(i))/ZT_lnd(i)) @@ -1508,7 +1500,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),0.0_kind_phys) ZOL(I)=MIN(ZOL(I),20._kind_phys) -#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i @@ -1519,7 +1510,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF -#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) @@ -1577,7 +1567,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),-20.0_kind_phys) ZOL(I)=MIN(ZOL(I),0.0_kind_phys) -#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_wat(i) < 1E-8 .OR. Zt_wat(i) < 1E-10) THEN write(0,*)"===(wet) capture bad input in mynn sfc layer, i=:",i @@ -1588,7 +1577,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF -#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_wat(I),ZA(I),ZNTstoch_wat(I),ZT_wat(I),ZOL(I),psi_opt) @@ -1649,7 +1637,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),0.0_kind_phys) ZOL(I)=MIN(ZOL(I),20._kind_phys) -#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_lnd(i) < 1E-8 .OR. Zt_lnd(i) < 1E-10) THEN write(0,*)"===(land) capture bad input in mynn sfc layer, i=:",i @@ -1660,7 +1647,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF -#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_lnd(I),ZA(I),ZNTstoch_lnd(I),ZT_lnd(I),ZOL(I),psi_opt) @@ -1717,7 +1703,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),-20.0_kind_phys) ZOL(I)=MIN(ZOL(I),0.0_kind_phys) -#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_lnd(i) < 1E-8 .OR. Zt_lnd(i) < 1E-10) THEN write(0,*)"===(land) capture bad input in mynn sfc layer, i=:",i @@ -1728,7 +1713,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF -#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_lnd(I),ZA(I),ZNTstoch_lnd(I),ZT_lnd(I),ZOL(I),psi_opt) @@ -1788,7 +1772,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),0.0_kind_phys) ZOL(I)=MIN(ZOL(I),20._kind_phys) -#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_ice(i) < 1E-8 .OR. Zt_ice(i) < 1E-10) THEN write(0,*)"===(ice) capture bad input in mynn sfc layer, i=:",i @@ -1799,7 +1782,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF -#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_ice(I),ZA(I),ZNTstoch_ice(I),ZT_ice(I),ZOL(I),psi_opt) @@ -1856,7 +1838,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ZOL(I)=MAX(ZOL(I),-20.0_kind_phys) ZOL(I)=MIN(ZOL(I),0.0_kind_phys) -#ifndef _OPENACC IF (debug_code >= 1) THEN IF (ZNTstoch_ice(i) < 1E-8 .OR. Zt_ice(i) < 1E-10) THEN write(0,*)"===(ice) capture bad input in mynn sfc layer, i=:",i @@ -1867,7 +1848,6 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & " dz=",dz8w1d(i)," qflx=",qflx(i)," hflx=",hflx(i)," hpbl=",pblh(i) ENDIF ENDIF -#endif !Use Pedros iterative function to find z/L !zol(I)=zolri(rb_ice(I),ZA(I),ZNTstoch_ice(I),ZT_ice(I),ZOL(I),psi_opt) @@ -2031,7 +2011,13 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF #endif -#ifndef _OPENACC +!$acc serial present(wet, dry, icy, & +!$acc PSIM, PSIH, CPM, RHO1D, ZOL, wspd, MOL, & +!$acc wstar, qstar, THV1D, HFX, MAVAIL, QVSH, & +!$acc THVSK_wat, THVSK_lnd, THVSK_ice, & +!$acc UST_wat, UST_lnd, UST_ice, & +!$acc ZNTstoch_wat, ZNTstoch_lnd, ZNTstoch_ice, & +!$acc zt_wat, zt_lnd, zt_ice) IF (debug_code == 2) THEN DO I=its,ite IF(wet(i))write(*,*)"==== AT END OF MAIN LOOP, i=",i, "(wet)" @@ -2052,7 +2038,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & write(*,*)"=============================================" ENDDO ! end i-loop ENDIF -#endif +!$acc end serial !---------------------------------------------------------- ! COMPUTE SURFACE HEAT AND MOISTURE FLUXES @@ -2238,14 +2224,12 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF -#ifndef _OPENACC IF (debug_code > 1) THEN write(*,*)"QFX=",QFX(I),"FLQC=",FLQC(I) if(icy(i))write(*,*)"ice, MAVAIL:",MAVAIL(I)," u*=",UST_ice(I)," psiq=",PSIQ_ice(i) if(dry(i))write(*,*)"lnd, MAVAIL:",MAVAIL(I)," u*=",UST_lnd(I)," psiq=",PSIQ_lnd(i) if(wet(i))write(*,*)"ocn, MAVAIL:",MAVAIL(I)," u*=",UST_wat(I)," psiq=",PSIQ_wat(i) ENDIF -#endif ! The exchange coefficient for cloud water is assumed to be the ! same as that for heat. CH is multiplied by WSPD. @@ -2397,17 +2381,17 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !----------------------------------------------------- ! DEBUG - SUSPICIOUS VALUES !----------------------------------------------------- +!$acc serial present(dry, wet, icy, CPM, MAVAIL, & +!$acc HFX, LH, wstar, RHO1D, PBLH, ZOL, ZA, MOL, & +!$acc PSIM, PSIH, WSTAR, T1D, TH1D, THV1D, QVSH, & +!$acc UST_wat, UST_lnd, UST_ice, & +!$acc THSK_wat, THSK_lnd, THSK_ice, & +!$acc THVSK_wat, THVSK_lnd, THVSK_ice, & +!$acc ZNTstoch_wat, ZNTstoch_lnd, ZNTstoch_ice, & +!$acc ZT_wat, ZT_lnd, ZT_ice, & +!$acc QSFC_wat, QSFC_lnd, QSFC_ice, & +!$acc PSIX_wat, PSIX_lnd, PSIX_ice) IF ( debug_code == 2) THEN - !$acc parallel loop present(dry, wet, icy, CPM, MAVAIL, & - !$acc HFX, LH, wstar, RHO1D, PBLH, ZOL, ZA, MOL, & - !$acc PSIM, PSIH, WSTAR, T1D, TH1D, THV1D, QVSH, & - !$acc UST_wat, UST_lnd, UST_ice, & - !$acc THSK_wat, THSK_lnd, THSK_ice, & - !$acc THVSK_wat, THVSK_lnd, THVSK_ice, & - !$acc ZNTstoch_wat, ZNTstoch_lnd, ZNTstoch_ice, & - !$acc ZT_wat, ZT_lnd, ZT_ice, & - !$acc QSFC_wat, QSFC_lnd, QSFC_ice, & - !$acc PSIX_wat, PSIX_lnd, PSIX_ice) DO I=its,ite yesno = 0 IF (compute_flux) THEN @@ -2511,6 +2495,7 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & ENDIF ENDDO ! end i-loop ENDIF ! end debug option +!$acc end serial !$acc exit data copyout(CPM, FLHC, FLQC, CHS, CH, CHS2, CQS2,& !$acc USTM, wstar, qstar, ZOL, MOL, RMOL, & @@ -2542,7 +2527,8 @@ SUBROUTINE SFCLAY1D_mynn(flag_iter, & !$acc MAVAIL, PBLH, PSFCPA, z0pert, ztpert, & !$acc QV1D, U1D, V1D, U1D2, V1D2, T1D, P1D, & !$acc rstoch1D, sigmaf, shdmax, vegtype, & -!$acc dz2w1d, dz8w1d, snowh_lnd, & +!$acc dz2w1d, dz8w1d, & +!$acc snowh_wat, snowh_lnd, snowh_ice, & !$acc tskin_wat, tskin_lnd, tskin_ice, & !$acc tsurf_wat, tsurf_lnd, tsurf_ice) From 315d3cc74f5d5edad379f9968c361f5f3c513725 Mon Sep 17 00:00:00 2001 From: Samuel Trahan Date: Wed, 6 Sep 2023 00:17:12 -0600 Subject: [PATCH 31/44] stop FV3_HRRR_c3 from crashing with gnu debug --- physics/cu_c3_deep.F90 | 298 ++++++++++++++++++++--------------------- physics/cu_c3_sh.F90 | 22 +-- 2 files changed, 160 insertions(+), 160 deletions(-) diff --git a/physics/cu_c3_deep.F90 b/physics/cu_c3_deep.F90 index c3a4b2c4e..7927f1cfb 100644 --- a/physics/cu_c3_deep.F90 +++ b/physics/cu_c3_deep.F90 @@ -159,12 +159,12 @@ subroutine cu_c3_deep_run( & nranflag,itf,ktf,its,ite, kts,kte,ipr,imid integer, intent (in ) :: & ichoice - real(kind=kind_phys), dimension (its:ite,4) & + real(kind=kind_phys), dimension (its:,:) & ,intent (in ) :: rand_clos - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: rand_mom,rand_vmas !$acc declare copyin(rand_clos,rand_mom,rand_vmas) - real(kind=kind_phys), intent(in), dimension (its:ite) :: ca_deep(:) + real(kind=kind_phys), intent(in), dimension (its:) :: ca_deep(:) integer, intent(in) :: do_capsuppress real(kind=kind_phys), intent(in), dimension(:) :: cap_suppress_j !$acc declare create(cap_suppress_j) @@ -177,28 +177,28 @@ subroutine cu_c3_deep_run( & ! outq = output q tendency (per s) ! outqc = output qc tendency (per s) ! pre = output precip - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (inout ) :: & cnvwt,outu,outv,outt,outq,outqc,cupclw - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (out ) :: & frh_out,rainevap - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & tmf, qmicro, sigmain, forceqv_spechum - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (inout ) :: & pre,xmb_out !$acc declare copy(cnvwt,outu,outv,outt,outq,outqc,cupclw,frh_out,pre,xmb_out) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & hfx,qfx,xmbm_in,xmbs_in !$acc declare copyin(hfx,qfx,xmbm_in,xmbs_in) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout ) :: & kbcon,ktop !$acc declare copy(kbcon,ktop) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & kpbl,tropics !$acc declare copyin(kpbl,tropics) @@ -207,26 +207,26 @@ subroutine cu_c3_deep_run( & ! omega (omeg), windspeed (us,vs), and a flag (ierr) to turn off ! convection for this call only and at that particular gridpoint ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & dhdt,rho,t,po,us,vs,tn,delp !$acc declare copyin(dhdt,rho,t,po,us,vs,tn) - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (inout ) :: & omeg !$acc declare copy(omeg) - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (inout) :: & q,qo,zuo,zdo,zdm !$acc declare sigmaout - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (out) :: & sigmaout - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & dx,z1,psur,xland !$acc declare copyin(dx,z1,psur,xland) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (inout ) :: & mconv,ccn !$acc declare copy(mconv,ccn) @@ -372,8 +372,8 @@ subroutine cu_c3_deep_run( & !$acc kzdown,kdet,k22,jmin,kstabi,kstabm,k22x,xland1, & !$acc ktopdby,kbconx,ierr2,ierr3,kbmax) - integer, dimension (its:ite), intent(inout) :: ierr - integer, dimension (its:ite), intent(in) :: csum + integer, dimension (its:), intent(inout) :: ierr + integer, dimension (its:), intent(in) :: csum logical, intent(in) :: do_ca, progsigma logical, intent(in) :: flag_init, flag_restart !$acc declare copy(ierr) copyin(csum) @@ -421,7 +421,7 @@ subroutine cu_c3_deep_run( & !$acc tn_bl, qo_bl, qeso_bl, heo_bl, heso_bl, & !$acc qeso_cup_bl,qo_cup_bl, heo_cup_bl,heso_cup_bl, & !$acc gammao_cup_bl,tn_cup_bl,hco_bl,dbyo_bl,xf_dicycle) - real(kind=kind_phys), intent(inout), dimension(its:ite,10) :: forcing + real(kind=kind_phys), intent(inout), dimension(its:,:) :: forcing !$acc declare copy(forcing) integer :: turn,pmin_lev(its:ite),start_level(its:ite),ktopkeep(its:ite) real(kind=kind_phys), dimension (its:ite,kts:kte) :: dtempdz @@ -2418,16 +2418,16 @@ subroutine rain_evap_below_cloudbase(itf,ktf, its,ite, kts,kte,ierr, & integer ,intent(in) :: itf,ktf, its,ite, kts,kte - integer, dimension(its:ite) ,intent(in) :: ierr,kbcon - real(kind=kind_phys), dimension(its:ite) ,intent(in) ::psur,xland,pwavo,edto,pwevo,xmb - real(kind=kind_phys), dimension(its:ite,kts:kte),intent(in) :: po_cup,qo_cup,qes_cup - real(kind=kind_phys), dimension(its:ite) ,intent(inout) :: pre - real(kind=kind_phys), dimension(its:ite,kts:kte),intent(inout) :: outt,outq !,outbuoy + integer, dimension(its:) ,intent(in) :: ierr,kbcon + real(kind=kind_phys), dimension(its:) ,intent(in) ::psur,xland,pwavo,edto,pwevo,xmb + real(kind=kind_phys), dimension(its:,kts:),intent(in) :: po_cup,qo_cup,qes_cup + real(kind=kind_phys), dimension(its:) ,intent(inout) :: pre + real(kind=kind_phys), dimension(its:,kts:),intent(inout) :: outt,outq !,outbuoy !$acc declare copyin(ierr,kbcon,psur,xland,pwavo,edto,pwevo,xmb,po_cup,qo_cup,qes_cup) !$acc declare copy(pre,outt,outq) - !real, dimension(its:ite) ,intent(out) :: tot_evap_bcb - !real, dimension(its:ite,kts:kte),intent(out) :: evap_bcb,net_prec_bcb + !real, dimension(its:) ,intent(out) :: tot_evap_bcb + !real, dimension(its:,kts:),intent(out) :: evap_bcb,net_prec_bcb !-- locals integer :: i,k @@ -2511,30 +2511,30 @@ subroutine cup_dd_edt(ierr,us,vs,z,ktop,kbcon,edt,p,pwav, & ! ! ierr error value, maybe modified in this routine ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & rho,us,vs,z,p,pw - real(kind=kind_phys), dimension (its:ite,1) & + real(kind=kind_phys), dimension (its:,: ) & ,intent (out ) :: & edtc - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (out ) :: & pefc - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (out ) :: & edt - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & pwav,pwev,psum2,psumh,edtmax,edtmin - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & ktop,kbcon,xland1 real(kind=kind_phys), intent (in ) :: & !HCB ccnclean - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (inout ) :: & ccn - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & ierr !$acc declare copyin(rho,us,vs,z,p,pw,pwav,pwev,psum2,psumh,edtmax,edtmin,ktop,kbcon) @@ -2671,7 +2671,7 @@ subroutine cup_dd_moisture(ierrc,zd,hcd,hes_cup,qcd,qes_cup, & ! pwev = total normalized integrated evaoprate (i2) ! entr= entrainment rate ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & zd,hes_cup,hcd,qes_cup,q_cup,z_cup, & dd_massentr,dd_massdetr,gamma_cup,q,he,p_cup @@ -2679,18 +2679,18 @@ subroutine cup_dd_moisture(ierrc,zd,hcd,hes_cup,qcd,qes_cup, & integer & ,intent (in ) :: & iloop - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & jmin !$acc declare copyin(jmin) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & ierr !$acc declare copy(ierr) - real(kind=kind_phys), dimension (its:ite,kts:kte)& + real(kind=kind_phys), dimension (its:,kts:)& ,intent (out ) :: & qcd,qrcd,pwd - real(kind=kind_phys), dimension (its:ite)& + real(kind=kind_phys), dimension (its:)& ,intent (out ) :: & pwev,bu !$acc declare copyout(qcd,qrcd,pwd,pwev,bu) @@ -2812,23 +2812,23 @@ subroutine cup_env(z,qes,he,hes,t,q,p,z1, & its,ite, kts,kte ! ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & p,t,q !$acc declare copyin(p,t,q) - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (out ) :: & hes,qes !$acc declare copyout(hes,qes) - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (inout) :: & he,z !$acc declare copy(he,z) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & psur,z1 !$acc declare copyin(psur,z1) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & ierr !$acc declare copy(ierr) @@ -2966,19 +2966,19 @@ subroutine cup_env_clev(t,qes,q,he,hes,z,p,qes_cup,q_cup, & itf,ktf, & its,ite, kts,kte ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & qes,q,he,hes,z,p,t !$acc declare copyin(qes,q,he,hes,z,p,t) - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (out ) :: & qes_cup,q_cup,he_cup,hes_cup,z_cup,p_cup,gamma_cup,t_cup !$acc declare copyout(qes_cup,q_cup,he_cup,hes_cup,z_cup,p_cup,gamma_cup,t_cup) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & psur,z1 !$acc declare copyin(psur,z1) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & ierr !$acc declare copy(ierr) @@ -3077,33 +3077,33 @@ subroutine cup_forcing_ens_3d(closure_n,xland,aa0,aa1,xaa0,mbdt,dtime,ierr,ierr2 ! k22 = updraft originating level ! ichoice = flag if only want one closure (usually set to zero!) ! - real(kind=kind_phys), dimension (its:ite,1:maxens3) & + real(kind=kind_phys), dimension (its:,1:) & ,intent (inout) :: & pr_ens - real(kind=kind_phys), dimension (its:ite,1:maxens3) & + real(kind=kind_phys), dimension (its:,1:) & ,intent (inout ) :: & xf_ens !$acc declare copy(pr_ens,xf_ens) - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & zd,zu,p_cup,zdm - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & omeg - real(kind=kind_phys), dimension (its:ite,1) & + real(kind=kind_phys), dimension (its:,:) & ,intent (in ) :: & xaa0 - real(kind=kind_phys), dimension (its:ite,4) & + real(kind=kind_phys), dimension (its:,:) & ,intent (in ) :: & rand_clos - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & aa1,edt,edtm,omegac,sigmab - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & mconv,axx !$acc declare copyin(zd,zu,p_cup,zdm,omeg,xaa0,rand_clos,aa1,edt,edtm,mconv,axx) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (inout) :: & aa0,closure_n !$acc declare copy(aa0,closure_n) @@ -3113,13 +3113,13 @@ subroutine cup_forcing_ens_3d(closure_n,xland,aa0,aa1,xaa0,mbdt,dtime,ierr,ierr2 real(kind=kind_phys) & ,intent (in ) :: & dtime - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout ) :: & k22,kbcon,ktop - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & xland - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & ierr,ierr2,ierr3 !$acc declare copy(k22,kbcon,ktop,ierr,ierr2,ierr3) copyin(xland) @@ -3129,10 +3129,10 @@ subroutine cup_forcing_ens_3d(closure_n,xland,aa0,aa1,xaa0,mbdt,dtime,ierr,ierr2 integer, intent(in) :: dicycle logical, intent (in) :: progsigma - real(kind=kind_phys), intent(in) , dimension (its:ite) :: aa1_bl,tau_ecmwf - real(kind=kind_phys), intent(inout), dimension (its:ite) :: xf_dicycle - real(kind=kind_phys), intent(out), dimension (its:ite) :: xf_progsigma - real(kind=kind_phys), intent(inout), dimension (its:ite,10) :: forcing + real(kind=kind_phys), intent(in) , dimension (its:) :: aa1_bl,tau_ecmwf + real(kind=kind_phys), intent(inout), dimension (its:) :: xf_dicycle + real(kind=kind_phys), intent(out), dimension (its:) :: xf_progsigma + real(kind=kind_phys), intent(inout), dimension (its:,:) :: forcing !$acc declare copyin(aa1_bl,tau_ecmwf) copy(xf_dicycle,forcing) !- local var real(kind=kind_phys) :: xff_dicycle @@ -3487,31 +3487,31 @@ subroutine cup_kbcon(ierrc,cap_inc,iloop_in,k22,kbcon,he_cup,hes_cup, & ! ! ierr error value, maybe modified in this routine ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & he_cup,hes_cup,p_cup !$acc declare copyin(he_cup,hes_cup,p_cup) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & entr_rate,ztexec,zqexec,cap_inc,cap_max !$acc declare copyin(entr_rate,ztexec,zqexec,cap_inc,cap_max) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (inout ) :: & hkb !,cap_max !$acc declare copy(hkb) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & kbmax !$acc declare copyin(kbmax) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & kbcon,k22,ierr !$acc declare copy(kbcon,k22,ierr) integer & ,intent (in ) :: & iloop_in - character*50 :: ierrc(its:ite) - real(kind=kind_phys), dimension (its:ite,kts:kte),intent (in) :: z_cup,heo + character*50 :: ierrc(its:) + real(kind=kind_phys), dimension (its:,kts:),intent (in) :: z_cup,heo !$acc declare copyin(z_cup,heo) integer, dimension (its:ite) :: iloop,start_level !$acc declare create(iloop,start_level) @@ -3645,18 +3645,18 @@ subroutine cup_maximi(array,ks,ke,maxx,ierr, & ! x output array with return values ! kt output array of levels ! ks,kend check-range - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & array !$acc declare copyin(array) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & ierr,ke !$acc declare copyin(ierr,ke) integer & ,intent (in ) :: & ks - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (out ) :: & maxx !$acc declare copyout(maxx) @@ -3708,15 +3708,15 @@ subroutine cup_minimi(array,ks,kend,kt,ierr, & ! x output array with return values ! kt output array of levels ! ks,kend check-range - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & array !$acc declare copyin(array) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & ierr,ks,kend !$acc declare copyin(ierr,ks,kend) - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (out ) :: & kt !$acc declare copyout(kt) @@ -3771,10 +3771,10 @@ subroutine cup_up_aa0(aa0,z,zu,dby,gamma_cup,t_cup, & ! z = heights of model levels ! ierr error value, maybe modified in this routine ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & z,zu,gamma_cup,t_cup,dby - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & kbcon,ktop !$acc declare copyin(z,zu,gamma_cup,t_cup,dby,kbcon,ktop) @@ -3783,11 +3783,11 @@ subroutine cup_up_aa0(aa0,z,zu,dby,gamma_cup,t_cup, & ! - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & ierr !$acc declare copy(ierr) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (out ) :: & aa0 !$acc declare copyout(aa0) @@ -3830,15 +3830,15 @@ subroutine neg_check(name,j,dt,q,outq,outt,outu,outv, & outqc,pret,its,ite,kts,kte,itf,ktf,ktop) integer, intent(in ) :: j,its,ite,kts,kte,itf,ktf - integer, dimension (its:ite ), intent(in ) :: ktop + integer, dimension (its: ), intent(in ) :: ktop - real(kind=kind_phys), dimension (its:ite,kts:kte ) , & + real(kind=kind_phys), dimension (its:,kts: ) , & intent(inout ) :: & outq,outt,outqc,outu,outv - real(kind=kind_phys), dimension (its:ite,kts:kte ) , & + real(kind=kind_phys), dimension (its:,kts: ) , & intent(inout ) :: & q - real(kind=kind_phys), dimension (its:ite ) , & + real(kind=kind_phys), dimension (its: ) , & intent(inout ) :: & pret !$acc declare copy(outq,outt,outqc,outu,outv,q,pret) @@ -3979,38 +3979,38 @@ subroutine cup_output_ens_3d(xff_mid,xf_ens,ierr,dellat,dellaq,dellaqc, & ! pw = pw -epsilon*pd (ensemble dependent) ! ierr error value, maybe modified in this routine ! - real(kind=kind_phys), dimension (its:ite,1:maxens3) & + real(kind=kind_phys), dimension (its:,:) & ,intent (inout) :: & xf_ens,pr_ens - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (inout ) :: & outtem,outq,outqc - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & zu,pwd,p_cup - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & sig,xmbm_in,xmbs_in,edt,sigmab,dx - real(kind=kind_phys), dimension (its:ite,2) & + real(kind=kind_phys), dimension (its:,:) & ,intent (in ) :: & xff_mid - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (inout ) :: & pre,xmb - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (inout ) :: & closure_n - real(kind=kind_phys), dimension (its:ite,kts:kte,1) & + real(kind=kind_phys), dimension (its:,kts:,:) & ,intent (in ) :: & dellat,dellaqc,dellaq,pw - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & ktop,xland1 - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & ierr,ierr2,ierr3 integer, intent(in) :: dicycle - real(kind=kind_phys), intent(in), dimension (its:ite) :: xf_dicycle, xf_progsigma + real(kind=kind_phys), intent(in), dimension (its:) :: xf_dicycle, xf_progsigma !$acc declare copyin(zu,pwd,p_cup,sig,xmbm_in,xmbs_in,edt,xff_mid,dellat,dellaqc,dellaq,pw,ktop,xland1,xf_dicycle) !$acc declare copy(xf_ens,pr_ens,outtem,outq,outqc,pre,xmb,closure_n,ierr,ierr2,ierr3) ! @@ -4248,15 +4248,15 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, & ! zu = normalized updraft mass flux ! gamma_cup = gamma on model cloud levels ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & p_cup,rho,q,zu,gamma_cup,qe_cup, & up_massentr,up_massdetr,dby,qes_cup,z_cup - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & zqexec,c0 ! entr= entrainment rate - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & kbcon,ktop,k22,xland1 !$acc declare copyin(p_cup,rho,q,zu,gamma_cup,qe_cup,up_massentr,up_massdetr,dby,qes_cup,z_cup,zqexec,c0,kbcon,ktop,k22,xland1) @@ -4268,7 +4268,7 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, & ! ierr error value, maybe modified in this routine - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & ierr !$acc declare copy(ierr) @@ -4281,11 +4281,11 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, & ! pwav = totan normalized integrated condensate (i1) ! c0 = conversion rate (cloud to rain) - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (out ) :: & qc,qrc,pw,clw_all !$acc declare copy(qc,qrc,pw,clw_all) - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (inout) :: & c1d !$acc declare copy(c1d) @@ -4295,11 +4295,11 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, & real(kind=kind_phys), dimension (its:ite) :: & pwavh !$acc declare create(pwavh) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (out ) :: & pwav,psum,psumh !$acc declare copyout(pwav,psum,psumh) - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & ccn !$acc declare copyin(ccn) @@ -4329,7 +4329,7 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, & is_deep = (name == 'deep') !$acc kernels - prop_b(kts:kte)=0 + prop_b(kts:)=0 !$acc end kernels iall=0 clwdet=0.1 !0.02 @@ -4646,11 +4646,11 @@ subroutine rates_up_pdf(rand_vmas,ipr,name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo implicit none character *(*), intent (in) :: name integer, intent(in) :: ipr,its,ite,itf,kts,kte,ktf - real(kind=kind_phys), dimension (its:ite,kts:kte),intent (inout) :: entr_rate_2d,zuo - real(kind=kind_phys), dimension (its:ite,kts:kte),intent (in) ::p_cup, heo,heso_cup,z_cup - real(kind=kind_phys), dimension (its:ite),intent (in) :: hkbo,rand_vmas - integer, dimension (its:ite),intent (in) :: kstabi,k22,kpbl,csum,xland,pmin_lev - integer, dimension (its:ite),intent (inout) :: kbcon,ierr,ktop,ktopdby + real(kind=kind_phys), dimension (its:,kts:),intent (inout) :: entr_rate_2d,zuo + real(kind=kind_phys), dimension (its:,kts:),intent (in) ::p_cup, heo,heso_cup,z_cup + real(kind=kind_phys), dimension (its:),intent (in) :: hkbo,rand_vmas + integer, dimension (its:),intent (in) :: kstabi,k22,kpbl,csum,xland,pmin_lev + integer, dimension (its:),intent (inout) :: kbcon,ierr,ktop,ktopdby !$acc declare copy(entr_rate_2d,zuo,kbcon,ierr,ktop,ktopdby) & !$acc copyin(p_cup, heo,heso_cup,z_cup,hkbo,rand_vmas,kstabi,k22,kpbl,csum,xland,pmin_lev) @@ -4737,7 +4737,7 @@ subroutine rates_up_pdf(rand_vmas,ipr,name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo ktop(i)= 0 else call get_zu_zd_pdf_fim(kklev,p_cup(i,:),rand_vmas(i),zubeg,ipr,xland(i),zuh2,1,ierr(i),k22(i), & - kfinalzu+1,zuo(i,kts:kte),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i)) + kfinalzu+1,zuo(i,kts:),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i)) endif endif ! end deep if ( is_mid ) then @@ -4748,7 +4748,7 @@ subroutine rates_up_pdf(rand_vmas,ipr,name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo kfinalzu=ktop(i) ktopdby(i)=ktop(i)+1 call get_zu_zd_pdf_fim(kklev,p_cup(i,:),rand_vmas(i),zubeg,ipr,xland(i),zuh2,3, & - ierr(i),k22(i),ktopdby(i)+1,zuo(i,kts:kte),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i)) + ierr(i),k22(i),ktopdby(i)+1,zuo(i,kts:),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i)) endif endif ! mid if ( is_shallow ) then @@ -4759,7 +4759,7 @@ subroutine rates_up_pdf(rand_vmas,ipr,name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo kfinalzu=ktop(i) ktopdby(i)=ktop(i)+1 call get_zu_zd_pdf_fim(kbcon(i),p_cup(i,:),rand_vmas(i),zubeg,ipr,xland(i),zuh2,2,ierr(i),k22(i), & - ktopdby(i)+1,zuo(i,kts:kte),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i)) + ktopdby(i)+1,zuo(i,kts:),kts,kte,ktf,beta_u,kbcon(i),csum(i),pmin_lev(i)) endif endif ! shal @@ -4782,8 +4782,8 @@ subroutine get_zu_zd_pdf_fim(kklev,p,rand_vmas,zubeg,ipr,xland,zuh2,draft,ierr,k real(kind=kind_phys), parameter :: beta_dd=4.0,g_beta_dd=6. integer, intent(in) ::ipr,xland,kb,kklev,kt,kts,kte,ktf,kpbli,csum,pmin_lev real(kind=kind_phys), intent(in) ::max_mass,zubeg - real(kind=kind_phys), intent(inout) :: zu(kts:kte) - real(kind=kind_phys), intent(in) :: p(kts:kte) + real(kind=kind_phys), intent(inout) :: zu(kts:) + real(kind=kind_phys), intent(in) :: p(kts:) real(kind=kind_phys) :: trash,beta_deep,zuh(kts:kte),zuh2(1:40) integer, intent(inout) :: ierr integer, intent(in) ::draft @@ -5057,20 +5057,20 @@ subroutine cup_up_aa1bl(aa0,t,tn,q,qo,dtime, & ! z = heights of model levels ! ierr error value, maybe modified in this routine ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & z_cup,zu,gamma_cup,t_cup,dby,t,tn,q,qo - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & kbcon,ktop real(kind=kind_phys), intent(in) :: dtime ! ! input and output ! - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout) :: & ierr - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (out ) :: & aa0 ! @@ -5107,14 +5107,14 @@ subroutine get_inversion_layers(ierr,p_cup,t_cup,z_cup,qo_cup,qeso_cup,k_inv_lay implicit none integer ,intent (in ) :: itf,ktf,its,ite,kts,kte - integer, dimension (its:ite) ,intent (in ) :: ierr,kstart,kend + integer, dimension (its:) ,intent (in ) :: ierr,kstart,kend !$acc declare copyin(ierr,kstart,kend) integer, dimension (its:ite) :: kend_p3 !$acc declare create(kend_p3) - real(kind=kind_phys), dimension (its:ite,kts:kte), intent (in ) :: p_cup,t_cup,z_cup,qo_cup,qeso_cup - real(kind=kind_phys), dimension (its:ite,kts:kte), intent (out) :: dtempdz - integer, dimension (its:ite,kts:kte), intent (out) :: k_inv_layers + real(kind=kind_phys), dimension (its:,kts:), intent (in ) :: p_cup,t_cup,z_cup,qo_cup,qeso_cup + real(kind=kind_phys), dimension (its:,kts:), intent (out) :: dtempdz + integer, dimension (its:,kts:), intent (out) :: k_inv_layers !$acc declare copyin(p_cup,t_cup,z_cup,qo_cup,qeso_cup) !$acc declare copyout(dtempdz,k_inv_layers) !-local vars @@ -5308,15 +5308,15 @@ subroutine get_lateral_massflux(itf,ktf, its,ite, kts,kte implicit none integer, intent (in) :: draft integer, intent(in):: itf,ktf, its,ite, kts,kte - integer, intent(in) , dimension(its:ite) :: ierr,ktop,kbcon,k22 + integer, intent(in) , dimension(its:) :: ierr,ktop,kbcon,k22 !$acc declare copyin(ierr,ktop,kbcon,k22) - !real(kind=kind_phys), intent(in), optional , dimension(its:ite):: lambau - real(kind=kind_phys), intent(inout), optional , dimension(its:ite):: lambau - real(kind=kind_phys), intent(in) , dimension(its:ite,kts:kte) :: zo_cup,zuo - real(kind=kind_phys), intent(inout), dimension(its:ite,kts:kte) :: cd,entr_rate_2d - real(kind=kind_phys), intent( out), dimension(its:ite,kts:kte) :: up_massentro, up_massdetro & + !real(kind=kind_phys), intent(in), optional , dimension(its:):: lambau + real(kind=kind_phys), intent(inout), optional , dimension(its:):: lambau + real(kind=kind_phys), intent(in) , dimension(its:,kts:) :: zo_cup,zuo + real(kind=kind_phys), intent(inout), dimension(its:,kts:) :: cd,entr_rate_2d + real(kind=kind_phys), intent( out), dimension(its:,kts:) :: up_massentro, up_massdetro & ,up_massentr, up_massdetr - real(kind=kind_phys), intent( out), dimension(its:ite,kts:kte), optional :: & + real(kind=kind_phys), intent( out), dimension(its:,kts:), optional :: & up_massentru,up_massdetru !$acc declare copy(lambau,cd,entr_rate_2d) copyin(zo_cup,zuo) copyout(up_massentro, up_massdetro,up_massentr, up_massdetr) !$acc declare copyout(up_massentro, up_massdetro,up_massentr, up_massdetr, up_massentru,up_massdetru) @@ -5437,10 +5437,10 @@ subroutine get_partition_liq_ice(ierr,tn,po_cup, p_liq_ice,melting_layer implicit none character *(*), intent (in) :: cumulus integer ,intent (in ) :: itf,ktf, its,ite, kts,kte - real(kind=kind_phys), intent (in ), dimension(its:ite,kts:kte) :: tn,po_cup - real(kind=kind_phys), intent (inout), dimension(its:ite,kts:kte) :: p_liq_ice,melting_layer + real(kind=kind_phys), intent (in ), dimension(its:,kts:) :: tn,po_cup + real(kind=kind_phys), intent (inout), dimension(its:,kts:) :: p_liq_ice,melting_layer !$acc declare copyin(tn,po_cup) copy(p_liq_ice,melting_layer) - integer , intent (in ), dimension(its:ite) :: ierr + integer , intent (in ), dimension(its:) :: ierr !$acc declare copyin(ierr) integer :: i,k real(kind=kind_phys) :: dp @@ -5539,11 +5539,11 @@ subroutine get_melting_profile(ierr,tn_cup,po_cup, p_liq_ice,melting_layer,qrco implicit none character *(*), intent (in) :: cumulus integer ,intent (in ) :: itf,ktf, its,ite, kts,kte - integer ,intent (in ), dimension(its:ite) :: ierr - real(kind=kind_phys) ,intent (in ), dimension(its:ite) :: edto - real(kind=kind_phys) ,intent (in ), dimension(its:ite,kts:kte) :: tn_cup,po_cup,qrco,pwo & + integer ,intent (in ), dimension(its:) :: ierr + real(kind=kind_phys) ,intent (in ), dimension(its:) :: edto + real(kind=kind_phys) ,intent (in ), dimension(its:,kts:) :: tn_cup,po_cup,qrco,pwo & ,pwdo,p_liq_ice,melting_layer - real(kind=kind_phys) ,intent (inout), dimension(its:ite,kts:kte) :: melting + real(kind=kind_phys) ,intent (inout), dimension(its:,kts:) :: melting !$acc declare copyin(ierr,edto,tn_cup,po_cup,qrco,pwo,pwdo,p_liq_ice,melting_layer,melting) integer :: i,k real(kind=kind_phys) :: dp @@ -5615,13 +5615,13 @@ subroutine get_cloud_top(name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo,heso_cup,z_c kstabi,k22,kbcon,its,ite,itf,kts,kte,ktf,zuo,kpbl,klcl,hcot) implicit none integer, intent(in) :: its,ite,itf,kts,kte,ktf - real(kind=kind_phys), dimension (its:ite,kts:kte),intent (inout) :: entr_rate_2d,zuo - real(kind=kind_phys), dimension (its:ite,kts:kte),intent (in) ::p_cup, heo,heso_cup,z_cup - real(kind=kind_phys), dimension (its:ite),intent (in) :: hkbo - integer, dimension (its:ite),intent (in) :: kstabi,k22,kbcon,kpbl,klcl - integer, dimension (its:ite),intent (inout) :: ierr,ktop + real(kind=kind_phys), dimension (its:,kts:),intent (inout) :: entr_rate_2d,zuo + real(kind=kind_phys), dimension (its:,kts:),intent (in) ::p_cup, heo,heso_cup,z_cup + real(kind=kind_phys), dimension (its:),intent (in) :: hkbo + integer, dimension (its:),intent (in) :: kstabi,k22,kbcon,kpbl,klcl + integer, dimension (its:),intent (inout) :: ierr,ktop !$acc declare copy(entr_rate_2d,zuo,ierr,ktop) copyin(p_cup, heo,heso_cup,z_cup,hkbo,kstabi,k22,kbcon,kpbl,klcl) - real(kind=kind_phys), dimension (its:ite,kts:kte) :: hcot + real(kind=kind_phys), dimension (its:,kts:) :: hcot !$acc declare create(hcot) character *(*), intent (in) :: name real(kind=kind_phys) :: dz,dh, dbythresh @@ -5644,7 +5644,7 @@ subroutine get_cloud_top(name,ktop,ierr,p_cup,entr_rate_2d,hkbo,heo,heso_cup,z_c kfinalzu=ktf-2 ktop(i)=kfinalzu if(ierr(i).eq.0)then - dby (kts:kte)=0.0 + dby (kts:)=0.0 start_level(i)=kbcon(i) !-- hcot below kbcon @@ -5704,16 +5704,16 @@ subroutine calculate_updraft_velocity(its,itf,ktf,ite,kts,kte,ierr,progsigma, implicit none logical, intent(in) :: progsigma integer, intent(in) :: itf,its,ktf,ite,kts,kte - integer, dimension (its:ite), intent(inout) :: ierr - real(kind=kind_phys), dimension (its:ite,kts:kte),intent (in) :: zo,entr_rate_2d, & + integer, dimension (its:), intent(inout) :: ierr + real(kind=kind_phys), dimension (its:,kts:),intent (in) :: zo,entr_rate_2d, & cd,po,qeso,to,qo,dbyo,clw_all,qlk,delp,zu - integer, dimension (its:ite),intent(in) :: k22,kbcon,ktcon + integer, dimension (its:),intent(in) :: k22,kbcon,ktcon real(kind=kind_phys), dimension (its:ite) :: sumx real(kind=kind_phys) ,intent (in) :: fv,rd,el2orc real(kind=kind_phys), dimension (its:ite,kts:kte) :: drag, buo, zi, del - real(kind=kind_phys), dimension (its:ite,kts:kte),intent (out) :: wu2,omega_u, & + real(kind=kind_phys), dimension (its:,kts:),intent (out) :: wu2,omega_u, & zeta,zdqca - real(kind=kind_phys), dimension (its:ite),intent(out) :: wc,omegac + real(kind=kind_phys), dimension (its:),intent(out) :: wc,omegac real(kind=kind_phys) :: rho,bb1,bb2,dz,dp,ptem,tem1,ptem1,tem,rfact,gamma,val integer :: i,k diff --git a/physics/cu_c3_sh.F90 b/physics/cu_c3_sh.F90 index 0ea0f28ae..2568a26e6 100644 --- a/physics/cu_c3_sh.F90 +++ b/physics/cu_c3_sh.F90 @@ -95,23 +95,23 @@ subroutine cu_c3_sh_run ( & ! outq = output q tendency (per s) ! outqc = output qc tendency (per s) ! pre = output precip - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (inout ) :: & cnvwt,outt,outq,outqc,cupclw,zuo,outu,outv !$acc declare copy(cnvwt,outt,outq,outqc,cupclw,zuo,outu,outv) - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & tmf, qmicro, sigmain, forceqv_spechum - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (out ) :: & xmb_out - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (inout ) :: & ierr - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (out ) :: & kbcon,ktop,k22 - integer, dimension (its:ite) & + integer, dimension (its:) & ,intent (in ) :: & kpbl,tropics !$acc declare copyout(xmb_out,kbcon,ktop,k22) copyin(kpbl,tropics) copy(ierr) @@ -119,13 +119,13 @@ subroutine cu_c3_sh_run ( & ! basic environmental input includes a flag (ierr) to turn off ! convection for this call only and at that particular gridpoint ! - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (in ) :: & t,po,tn,dhdt,rho,us,vs,delp - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (inout) :: & q,qo - real(kind=kind_phys), dimension (its:ite) & + real(kind=kind_phys), dimension (its:) & ,intent (in ) :: & xland,z1,psur,hfx,qfx,dx @@ -133,7 +133,7 @@ subroutine cu_c3_sh_run ( & ,intent (in ) :: & dtime,tcrit,fv,r_d !$acc declare sigmaout - real(kind=kind_phys), dimension (its:ite,kts:kte) & + real(kind=kind_phys), dimension (its:,kts:) & ,intent (out) :: & sigmaout @@ -245,7 +245,7 @@ subroutine cu_c3_sh_run ( & real(kind=kind_phys) buo_flux,pgeoh,dp,entup,detup,totmas real(kind=kind_phys) xff_shal(3),blqe,xkshal - character*50 :: ierrc(its:ite) + character*50 :: ierrc(its:) real(kind=kind_phys), dimension (its:ite,kts:kte) :: & up_massentr,up_massdetr,up_massentro,up_massdetro,up_massentru,up_massdetru !$acc declare create(up_massentr,up_massdetr,up_massentro,up_massdetro,up_massentru,up_massdetru) From ab84c01a110bbf13490fcf3243effe06cb26608d Mon Sep 17 00:00:00 2001 From: "Haiqin.Li" Date: Wed, 20 Sep 2023 01:29:56 +0000 Subject: [PATCH 32/44] "GF radar reflectivity, dust bug fix, and C3 updates" --- physics/GFS_rrtmg_pre.F90 | 2 +- physics/cu_c3_deep.F90 | 16 +++-- physics/cu_c3_driver.F90 | 4 +- physics/cu_c3_sh.F90 | 10 ++-- physics/cu_gf_driver_post.F90 | 11 ++-- physics/smoke_dust/dust_data_mod.F90 | 32 ++++------ physics/smoke_dust/dust_fengsha_mod.F90 | 70 +++++++++++++++++----- physics/smoke_dust/rrfs_smoke_wrapper.F90 | 22 ++++--- physics/smoke_dust/rrfs_smoke_wrapper.meta | 36 +++++++++-- 9 files changed, 138 insertions(+), 65 deletions(-) diff --git a/physics/GFS_rrtmg_pre.F90 b/physics/GFS_rrtmg_pre.F90 index 4f4de181a..fff4ae0b9 100644 --- a/physics/GFS_rrtmg_pre.F90 +++ b/physics/GFS_rrtmg_pre.F90 @@ -976,7 +976,7 @@ subroutine GFS_rrtmg_pre_run (im, levs, lm, lmk, lmp, n_var_lndp, lextop,& & imp_physics_mg, iovr, iovr_rand, iovr_maxrand, iovr_max, & & iovr_dcorr, iovr_exp, iovr_exprand, idcor, idcor_con, & & idcor_hogan, idcor_oreopoulos, lcrick, lcnorm, & - & imfdeepcnv, imfdeepcnv_gf, imfdeepcnv_gf, do_mynnedmf, & + & imfdeepcnv, imfdeepcnv_gf, imfdeepcnv_c3, do_mynnedmf, & & lgfdlmprad, & & uni_cld, lmfshal, lmfdeep2, cldcov, clouds1, & & effrl, effri, effrr, effrs, effr_in, & diff --git a/physics/cu_c3_deep.F90 b/physics/cu_c3_deep.F90 index c3a4b2c4e..d1b490c77 100644 --- a/physics/cu_c3_deep.F90 +++ b/physics/cu_c3_deep.F90 @@ -2078,9 +2078,9 @@ subroutine cu_c3_deep_run( & !> - Call rain_evap_below_cloudbase() to calculate evaporation below cloud base - call rain_evap_below_cloudbase(itf,ktf,its,ite, & - kts,kte,ierr,kbcon,xmb,psur,xland,qo_cup, & - po_cup,qes_cup,pwavo,edto,pwevo,pre,outt,outq) !,outbuoy) +! call rain_evap_below_cloudbase(itf,ktf,its,ite, & +! kts,kte,ierr,kbcon,xmb,psur,xland,qo_cup, & +! po_cup,qes_cup,pwavo,edto,pwevo,pre,outt,outq) !,outbuoy) k=1 !$acc kernels @@ -2137,7 +2137,7 @@ subroutine cu_c3_deep_run( & do k = ktop(i), 1, -1 rain = pwo(i,k) + edto(i) * pwdo(i,k) rn(i) = rn(i) + rain * xmb(i) * .001 * dtime - !if(po(i,k).gt.400.)then + if(k.gt.jmin(i))then if(flg(i))then q1=qo(i,k)+(outq(i,k))*dtime t1=tn(i,k)+(outt(i,k))*dtime @@ -2162,7 +2162,7 @@ subroutine cu_c3_deep_run( & pre(i)=max(pre(i),0.) delqev(i) = delqev(i) + .001*dp*qevap(i)/g endif - !endif ! 400mb + endif endif enddo ! pre(i)=1000.*rn(i)/dtime @@ -4429,7 +4429,7 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, & ! !now do the rest ! - kklev(i)=maxloc(zu(i,:),1) + kklev(i)=maxloc(zu(i,2:ktop(i)),1) !$acc loop seq do k=kbcon(i)+1,ktop(i) if(t(i,k) > 273.16) then @@ -4489,6 +4489,10 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, & endif if(k.gt.kbcon(i)+1)c1d(i,k)=clwdet*up_massdetr(i,k-1) if(k.gt.kbcon(i)+1)c1d_b(i,k)=clwdet*up_massdetr(i,k-1) + !if(is_deep.and.k.gt.kklev(i))then + c1d(i,k)=0.005 + c1d_b(i,k)=0.005 + !endif if(autoconv.eq.2) then ! diff --git a/physics/cu_c3_driver.F90 b/physics/cu_c3_driver.F90 index fd4d37b0b..270e01989 100644 --- a/physics/cu_c3_driver.F90 +++ b/physics/cu_c3_driver.F90 @@ -340,8 +340,8 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& ! !> - Set tuning constants for radiation coupling ! - tun_rad_shall(:)=.01 - tun_rad_mid(:)=.3 !.02 + tun_rad_shall(:)=.012 + tun_rad_mid(:)=.15 !.02 tun_rad_deep(:)=.3 !.065 edt(:)=0. edtm(:)=0. diff --git a/physics/cu_c3_sh.F90 b/physics/cu_c3_sh.F90 index 0ea0f28ae..d2b9a71b2 100644 --- a/physics/cu_c3_sh.F90 +++ b/physics/cu_c3_sh.F90 @@ -6,12 +6,12 @@ module cu_c3_sh use progsigma, only : progsigma_calc !real(kind=kind_phys), parameter:: c1_shal=0.0015! .0005 - real(kind=kind_phys), parameter:: c1_shal=0. !0.005! .0005 real(kind=kind_phys), parameter:: g =9.81 real(kind=kind_phys), parameter:: cp =1004. real(kind=kind_phys), parameter:: xlv=2.5e6 real(kind=kind_phys), parameter:: r_v=461. - real(kind=kind_phys), parameter:: c0_shal=.001 + real(kind=kind_phys) :: c0_shal=.004 + real(kind=kind_phys) :: c1_shal=0. !0.005! .0005 real(kind=kind_phys), parameter:: fluxtune=1.5 contains @@ -274,6 +274,8 @@ subroutine cu_c3_sh_run ( & ktopx(i)=0 if(xland(i).gt.1.5 .or. xland(i).lt.0.5)then xland1(i)=0 + c0_shal=.001 + c1_shal=.001 ! ierr(i)=100 endif pre(i)=0. @@ -669,11 +671,11 @@ subroutine cu_c3_sh_run ( & if(qco(i,k)>=trash ) then dz=z_cup(i,k)-z_cup(i,k-1) ! cloud liquid water - c1d(i,k)=.02*up_massdetr(i,k-1) + c1d(i,k)=c1_shal! 0. !.02*up_massdetr(i,k-1) qrco(i,k)= (qco(i,k)-trash)/(1.+(c0_shal+c1d(i,k))*dz) if(qrco(i,k).lt.0.)then ! hli new test 02/12/19 qrco(i,k)=0. - c1d(i,k)=0. + !c1d(i,k)=0. endif pwo(i,k)=c0_shal*dz*qrco(i,k)*zuo(i,k) clw_all(i,k)=qco(i,k)-trash !LB total cloud before rain and detrain diff --git a/physics/cu_gf_driver_post.F90 b/physics/cu_gf_driver_post.F90 index 56da0feba..8c5896164 100644 --- a/physics/cu_gf_driver_post.F90 +++ b/physics/cu_gf_driver_post.F90 @@ -66,20 +66,21 @@ subroutine cu_gf_driver_post_run (im, km, t, q, prevst, prevsq, cactiv, cactiv_m conv_act_m(i)=0.0 endif ! reflectivity parameterization for parameterized convection (reference:Unipost MDLFLD.f) - if(sqrt(garea(i)).lt.6500.)then + !if(sqrt(garea(i)).lt.6500.)then ze = 0.0 ze_conv = 0.0 dbz_sum = 0.0 - cuprate = raincv(i) * 3600.0 / dt ! cu precip rate (mm/h) - ze_conv = 300.0 * cuprate**1.4 - if (maxupmf(i).gt.0.05) then + cuprate = max(0.1,1.e3*raincv(i) * 3600.0 / dt) ! cu precip rate (mm/h) + if(cuprate .lt. 0.05) cuprate=0. + ze_conv = 300.0 * cuprate**1.5 + if (maxupmf(i).gt.0.1 .and. cuprate.gt.0.) then do k = 1, km ze = 10._kind_phys ** (0.1 * refl_10cm(i,k)) dbz_sum = max(dbzmin, 10.0 * log10(ze + ze_conv)) refl_10cm(i,k) = dbz_sum enddo endif - endif + !endif enddo !$acc end kernels diff --git a/physics/smoke_dust/dust_data_mod.F90 b/physics/smoke_dust/dust_data_mod.F90 index a710701f1..eb809378d 100755 --- a/physics/smoke_dust/dust_data_mod.F90 +++ b/physics/smoke_dust/dust_data_mod.F90 @@ -44,24 +44,10 @@ module dust_data_mod ! Never used: ! real(kind_phys), parameter :: fengsha_alpha = 0.3 ! real(kind_phys), parameter :: fengsha_gamma = 1.3 + ! -- FENGSHA threshold velocities based on Dale A. Gillette's data integer, parameter :: fengsha_maxstypes = 13 -! real(kind_phys), dimension(fengsha_maxstypes) :: dust_uthres = & -! (/ 0.065, & ! Sand - 1 -! 0.20, & ! Loamy Sand - 2 -! 0.52, & ! Sandy Loam - 3 -! 0.50, & ! Silt Loam - 4 -! 0.50, & ! Silt - 5 -! 0.60, & ! Loam - 6 -! 0.73, & ! Sandy Clay Loam - 7 -! 0.73, & ! Silty Clay Loam - 8 -! 0.80, & ! Clay Loam - 9 -! 0.95, & ! Sandy Clay - 10 -! 0.95, & ! Silty Clay - 11 -! 1.00, & ! Clay - 12 -! 9.999 /) ! Other - 13 -! dust_uthres = 0.065, 0.18, 0.27, 0.30, 0.35, 0.38, 0.35, 0.41, 0.41, -! 0.45,0.50,0.45,9999.0 + real(kind_phys), dimension(fengsha_maxstypes), parameter :: dust_uthres = & (/ 0.065, & ! Sand - 1 0.18, & ! Loamy Sand - 2 @@ -76,12 +62,16 @@ module dust_data_mod 0.50, & ! Silty Clay - 11 0.45, & ! Clay - 12 9999.0 /) ! Other - 13 - ! -- FENGSHA uses precalculated drag partition from ASCAT. See: Prigent et al. (2012,2015) - integer, parameter :: dust_calcdrag = 1 - real(kind_phys) :: dust_alpha = 2.2 + ! -- FENGSHA uses precalculated drag partition + integer, parameter :: dust_calcdrag = 1 + ! -- FENGSHA dust moisture parameterization 1:fecan - 2:shao + integer :: dust_moist_opt = 1 + + real(kind_phys) :: dust_alpha = 1.0 real(kind_phys) :: dust_gamma = 1.0 - + real(kind_phys) :: dust_moist_correction = 1.0 + real(kind_phys) :: dust_drylimit_factor = 1.0 ! -- sea salt parameters integer, dimension(nsalt), parameter :: spoint = (/ 1, 2, 2, 2, 2, 2, 3, 3, 3 /) ! 1 Clay, 2 Silt, 3 Sand @@ -93,7 +83,7 @@ module dust_data_mod (/ 1., 0.2, 0.2, 0.2, 0.2, 0.2, 0.333, 0.333, 0.333 /) - ! -- soil vagatation parameters + ! -- soil vegatation parameters integer, parameter :: max_soiltyp = 30 real(kind_phys), dimension(max_soiltyp), parameter :: & maxsmc = (/ 0.421, 0.464, 0.468, 0.434, 0.406, 0.465, & diff --git a/physics/smoke_dust/dust_fengsha_mod.F90 b/physics/smoke_dust/dust_fengsha_mod.F90 index 54a64239d..1e24c8947 100755 --- a/physics/smoke_dust/dust_fengsha_mod.F90 +++ b/physics/smoke_dust/dust_fengsha_mod.F90 @@ -61,6 +61,8 @@ subroutine gocart_dust_fengsha_driver(dt, & REAL(kind_phys), INTENT(IN) :: dt ! time step REAL(kind_phys), INTENT(IN) :: g ! gravity (m/s**2) + + ! Local variables integer :: nmx,i,j,k,imx,jmx,lmx integer :: ilwi @@ -75,6 +77,7 @@ subroutine gocart_dust_fengsha_driver(dt, & real(kind_phys), DIMENSION (num_emis_dust) :: distribution real(kind_phys), dimension (3) :: massfrac real(kind_phys) :: erodtot + real(kind_phys) :: moist_volumetric ! conversion values conver=1.e-9 @@ -174,10 +177,13 @@ subroutine gocart_dust_fengsha_driver(dt, & endif endif + ! soil moisture correction factor + moist_volumetric = dust_moist_correction * smois(i,2,j) + ! Call dust emission routine. call source_dust(imx,jmx, lmx, nmx, dt, tc, ustar, massfrac, & - erodtot, dxy, smois(i,1,j), airden, airmas, bems, g, dust_alpha, dust_gamma, & + erodtot, dxy, moist_volumetric, airden, airmas, bems, g, dust_alpha, dust_gamma, & R, uthr(i,j)) ! convert back to concentration @@ -457,10 +463,16 @@ subroutine DustEmissionFENGSHA(slc, clay, sand, silt, & ! Now compute size-dependent total emission flux ! ---------------------------------------------- - ! Fecan moisture correction - ! ------------------------- - h = moistureCorrectionFecan(slc, sand, clay, rhop) - + + if (dust_moist_opt .eq. 1) then + + ! Fecan moisture correction + ! ------------------------- + h = moistureCorrectionFecan(slc, sand, clay) + else + ! shao soil moisture correction + h = moistureCorrectionShao(slc) + end if ! Adjust threshold ! ---------------- u_thresh = uthrs * h @@ -478,7 +490,7 @@ subroutine DustEmissionFENGSHA(slc, clay, sand, silt, & end subroutine DustEmissionFENGSHA !----------------------------------------------------------------- - real function soilMoistureConvertVol2Grav(vsoil, sandfrac, rhop) + real function soilMoistureConvertVol2Grav(vsoil, sandfrac) ! !USES: implicit NONE @@ -486,7 +498,6 @@ real function soilMoistureConvertVol2Grav(vsoil, sandfrac, rhop) ! !INPUT PARAMETERS: REAL(kind_phys), intent(in) :: vsoil ! volumetric soil moisture fraction [1] REAL(kind_phys), intent(in) :: sandfrac ! fractional sand content [1] - REAL(kind_phys), intent(in) :: rhop ! dry dust density [kg m-3] ! !DESCRIPTION: Convert soil moisture fraction from volumetric to gravimetric. ! @@ -500,20 +511,21 @@ real function soilMoistureConvertVol2Grav(vsoil, sandfrac, rhop) ! !CONSTANTS: REAL(kind_phys), parameter :: rhow = 1000. ! density of water [kg m-3] - + REAL(kind_phys), parameter :: rhop = 1700. ! density of dry soil !EOP !------------------------------------------------------------------------- ! Begin... ! Saturated volumetric water content (sand-dependent) ! [m3 m-3] - vsat = 0.489 - 0.00126 * ( 100. * sandfrac ) + vsat = 0.489 - 0.126 * sandfrac + ! Gravimetric soil content - soilMoistureConvertVol2Grav = vsoil * rhow / (rhop * (1. - vsat)) + soilMoistureConvertVol2Grav = 100.0 * (vsoil * rhow / rhop / ( 1. - vsat)) end function soilMoistureConvertVol2Grav !---------------------------------------------------------------- - real function moistureCorrectionFecan(slc, sand, clay, rhop) + real function moistureCorrectionFecan(slc, sand, clay) ! !USES: implicit NONE @@ -522,7 +534,6 @@ real function moistureCorrectionFecan(slc, sand, clay, rhop) REAL(kind_phys), intent(in) :: slc ! liquid water content of top soil layer, volumetric fraction [1] REAL(kind_phys), intent(in) :: sand ! fractional sand content [1] REAL(kind_phys), intent(in) :: clay ! fractional clay content [1] - REAL(kind_phys), intent(in) :: rhop ! dry dust density [kg m-3] ! !DESCRIPTION: Compute correction factor to account for Fecal soil moisture ! @@ -540,15 +551,46 @@ real function moistureCorrectionFecan(slc, sand, clay, rhop) ! Begin... ! Convert soil moisture from volumetric to gravimetric - grvsoilm = soilMoistureConvertVol2Grav(slc, sand, 2650.) + grvsoilm = soilMoistureConvertVol2Grav(slc, sand) ! Compute fecan dry limit - drylimit = clay * (14.0 * clay + 17.0) + drylimit = dust_drylimit_factor * clay * (14.0 * clay + 17.0) ! Compute soil moisture correction moistureCorrectionFecan = sqrt(1.0 + 1.21 * max(0., grvsoilm - drylimit)**0.68) end function moistureCorrectionFecan +!---------------------------------------------------------------- + real function moistureCorrectionShao(slc) + +! !USES: + implicit NONE + +! !INPUT PARAMETERS: + REAL(kind_phys), intent(in) :: slc ! liquid water content of top soil layer, volumetric fraction [1] + +! !DESCRIPTION: Compute correction factor to account for Fecal soil moisture +! +! !REVISION HISTORY: +! +! 02Apr2020, B.Baker/NOAA - Original implementation +! 01Apr2020, R.Montuoro/NOAA - Adapted for GOCART process library + +! !Local Variables + real :: grvsoilm + real :: drylimit + +!EOP +!--------------------------------------------------------------- +! Begin... + + if (slc < 0.03) then + moistureCorrectionShao = exp(22.7 * slc) + else + moistureCorrectionShao = exp(95.3 * slc - 2.029) + end if + + end function moistureCorrectionShao !--------------------------------------------------------------- real function DustFluxV2HRatioMB95(clay, kvhmax) diff --git a/physics/smoke_dust/rrfs_smoke_wrapper.F90 b/physics/smoke_dust/rrfs_smoke_wrapper.F90 index 1f9ef6340..7b69fc9e3 100755 --- a/physics/smoke_dust/rrfs_smoke_wrapper.F90 +++ b/physics/smoke_dust/rrfs_smoke_wrapper.F90 @@ -12,7 +12,8 @@ module rrfs_smoke_wrapper num_moist, num_chem, num_emis_seas, num_emis_dust, & DUST_OPT_FENGSHA, p_qv, p_atm_shum, p_atm_cldq, & p_smoke, p_dust_1, p_coarse_pm, epsilc - use dust_data_mod, only : dust_alpha, dust_gamma + use dust_data_mod, only : dust_alpha, dust_gamma, dust_moist_opt, & + dust_moist_correction, dust_drylimit_factor use plume_data_mod, only : p_frp_std, p_frp_hr, num_frp_plume use seas_mod, only : gocart_seasalt_driver use dust_fengsha_mod, only : gocart_dust_fengsha_driver @@ -49,6 +50,7 @@ subroutine rrfs_smoke_wrapper_run(im, kte, kme, ktau, dt, garea, land, jdate, ebb_smoke_hr, frp_hr, frp_std_hr, & coef_bb, ebu_smoke,fhist, min_fplume, max_fplume, hwp, wetness, & smoke_ext, dust_ext, ndvel, ddvel_inout,rrfs_sd, & + dust_moist_opt_in, dust_moist_correction_in, dust_drylimit_factor_in, & dust_alpha_in, dust_gamma_in, fire_in, & seas_opt_in, dust_opt_in, drydep_opt_in, coarsepm_settling_in, & do_plumerise_in, plumerisefire_frq_in, addsmoke_flag_in, & @@ -91,12 +93,15 @@ subroutine rrfs_smoke_wrapper_run(im, kte, kme, ktau, dt, garea, land, jdate, real(kind_phys), dimension(:,:), intent(out) :: smoke_ext, dust_ext real(kind_phys), dimension(:,:), intent(inout) :: nwfa, nifa real(kind_phys), dimension(:,:), intent(inout) :: ddvel_inout - real (kind=kind_phys), dimension(:), intent(in) :: wetness - integer, intent(in ) :: imp_physics, imp_physics_thompson - real (kind=kind_phys), intent(in) :: dust_alpha_in, dust_gamma_in, wetdep_ls_alpha_in - integer, intent(in) :: seas_opt_in, dust_opt_in, drydep_opt_in, & - coarsepm_settling_in, plumerisefire_frq_in, & - addsmoke_flag_in, wetdep_ls_opt_in + real(kind_phys), dimension(:), intent(in) :: wetness + real(kind_phys), intent(in) :: dust_alpha_in, dust_gamma_in, wetdep_ls_alpha_in + real(kind_phys), intent(in) :: dust_moist_correction_in + real(kind_phys), intent(in) :: dust_drylimit_factor_in + integer, intent(in) :: dust_moist_opt_in + integer, intent(in) :: imp_physics, imp_physics_thompson + integer, intent(in) :: seas_opt_in, dust_opt_in, drydep_opt_in, & + coarsepm_settling_in, plumerisefire_frq_in, & + addsmoke_flag_in, wetdep_ls_opt_in logical, intent(in ) :: do_plumerise_in, rrfs_sd character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg @@ -314,6 +319,9 @@ subroutine rrfs_smoke_wrapper_run(im, kte, kme, ktau, dt, garea, land, jdate, ! Set at compile time in dust_data_mod: dust_alpha = dust_alpha_in dust_gamma = dust_gamma_in + dust_moist_opt = dust_moist_opt_in + dust_moist_correction = dust_moist_correction_in + dust_drylimit_factor = dust_drylimit_factor_in call gocart_dust_fengsha_driver(dt,chem,rho_phy,smois,p8w,ssm, & isltyp,vegfrac,snowh,xland,dxy,g,emis_dust,ust,znt, & clayf,sandf,rdrag,uthr, & diff --git a/physics/smoke_dust/rrfs_smoke_wrapper.meta b/physics/smoke_dust/rrfs_smoke_wrapper.meta index bf2fddd60..a0a641246 100755 --- a/physics/smoke_dust/rrfs_smoke_wrapper.meta +++ b/physics/smoke_dust/rrfs_smoke_wrapper.meta @@ -210,17 +210,17 @@ kind = kind_phys intent = in [nsoil] - standard_name = vertical_dimension_of_soil - long_name = soil vertical layer dimension + standard_name = vertical_dimension_of_soil_internal_to_land_surface_scheme + long_name = number of soil layers internal to land surface model units = count dimensions = () type = integer intent = in [smc] - standard_name = volume_fraction_of_condensed_water_in_soil - long_name = volumetric fraction of soil moisture + standard_name = volume_fraction_of_soil_moisture_for_land_surface_model + long_name = volumetric fraction of soil moisture for lsm units = frac - dimensions = (horizontal_loop_extent,vertical_dimension_of_soil) + dimensions = (horizontal_dimension,vertical_dimension_of_soil_internal_to_land_surface_scheme) type = real kind = kind_phys intent = inout @@ -612,6 +612,32 @@ dimensions = () type = logical intent = in +[dust_moist_opt_in] + standard_name = control_for_dust_soil_moisture_option + long_name = smoke dust moisture parameterization 1 - fecan 2 - shao + units = index + dimensions = () + type = integer + active = (do_smoke_coupling) + intent = in +[dust_moist_correction_in] + standard_name = dust_moist_correction_fengsha_dust_scheme + long_name = moisture correction term for fengsha dust emission + units = none + dimensions = () + type = real + kind = kind_phys + active = (do_smoke_coupling) + intent = in +[dust_drylimit_factor_in] + standard_name = dust_drylimit_factor_fengsha_dust_scheme + long_name = moisture correction term for drylimit in fengsha dust emission + units = none + dimensions = () + type = real + kind = kind_phys + active = (do_smoke_coupling) + intent = in [dust_alpha_in] standard_name = alpha_fengsha_dust_scheme long_name = alpha paramter for fengsha dust scheme From 5612a96edecac3fe931cdc3a8754dfd6e1532df0 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 21 Sep 2023 20:53:34 +0000 Subject: [PATCH 33/44] Fix race condition in GFS_phys_time_vary.fv3.F90 error detection --- physics/GFS_phys_time_vary.fv3.F90 | 67 +++++++++++++++++++++++------- physics/noahmp_tables.f90 | 18 ++++---- 2 files changed, 60 insertions(+), 25 deletions(-) diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index a10c10d1b..04348f6dc 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -61,6 +61,22 @@ module GFS_phys_time_vary contains + subroutine copy_error(myerrmsg, myerrflg, errmsg, errflg) + implicit none + character(*), intent(in) :: myerrmsg + integer, intent(in) :: myerrflg + character(*), intent(out) :: errmsg + integer, intent(inout) :: errflg + if(myerrflg == 0) return + if(errflg /= 0) return + !$OMP CRITICAL + if(errflg == 0) then + errmsg = myerrmsg + errflg = myerrflg + endif + !$OMP END CRITICAL + end subroutine copy_error + !> \section arg_table_GFS_phys_time_vary_init Argument Table !! \htmlinclude GFS_phys_time_vary_init.html !! @@ -192,6 +208,9 @@ subroutine GFS_phys_time_vary_init ( real(kind=kind_phys), dimension(:), allocatable :: dzsno real(kind=kind_phys), dimension(:), allocatable :: dzsnso + integer :: myerrflg + character(255) :: myerrmsg + ! Initialize CCPP error handling variables errmsg = '' errflg = 0 @@ -215,7 +234,7 @@ subroutine GFS_phys_time_vary_init ( !$OMP shared (do_ugwp_v1,jindx1_tau,jindx2_tau,ddy_j1tau,ddy_j2tau) & !$OMP shared (isot,ivegsrc,nlunit,sncovr,sncovr_ice,lsm,lsm_ruc) & !$OMP shared (min_seaice,fice,landfrac,vtype,weasd,snupx,salp_data) & -!$OMP private (ix,i,j,rsnow,vegtyp) +!$OMP private (ix,i,j,rsnow,vegtyp,myerrmsg,myerrflg) !$OMP sections @@ -227,16 +246,18 @@ subroutine GFS_phys_time_vary_init ( ! oz_coeff in GFS_typedefs.F90 match what is set by read_o3data ! in GFS_typedefs.F90: allocate (Tbd%ozpl (IM,levozp,oz_coeff)) if (size(ozpl, dim=2).ne.levozp) then - write(errmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", & + myerrflg = 1 + write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", & "levozp from read_o3data does not match value in GFS_typedefs.F90: ", & levozp, " /= ", size(ozpl, dim=2) - errflg = 1 + call copy_error(myerrmsg, myerrflg, errmsg, errflg) end if if (size(ozpl, dim=3).ne.oz_coeff) then - write(errmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", & + myerrflg = 1 + write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", & "oz_coeff from read_o3data does not match value in GFS_typedefs.F90: ", & oz_coeff, " /= ", size(ozpl, dim=3) - errflg = 1 + call copy_error(myerrmsg, myerrflg, errmsg, errflg) end if !$OMP section @@ -247,16 +268,18 @@ subroutine GFS_phys_time_vary_init ( ! h2o_coeff in GFS_typedefs.F90 match what is set by read_o3data ! in GFS_typedefs.F90: allocate (Tbd%h2opl (IM,levh2o,h2o_coeff)) if (size(h2opl, dim=2).ne.levh2o) then - write(errmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", & + write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", & "levh2o from read_h2odata does not match value in GFS_typedefs.F90: ", & levh2o, " /= ", size(h2opl, dim=2) - errflg = 1 + myerrflg = 1 + call copy_error(myerrmsg, myerrflg, errmsg, errflg) end if if (size(h2opl, dim=3).ne.h2o_coeff) then - write(errmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", & + write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", & "h2o_coeff from read_h2odata does not match value in GFS_typedefs.F90: ", & h2o_coeff, " /= ", size(h2opl, dim=3) - errflg = 1 + myerrflg = 1 + call copy_error(myerrmsg, myerrflg, errmsg, errflg) end if !$OMP section @@ -264,7 +287,9 @@ subroutine GFS_phys_time_vary_init ( !> added coupled gocart and radiation option to initializing aer_nm if (iaerclm) then ntrcaer = ntrcaerm - call read_aerdata (me,master,iflip,idate,errmsg,errflg) + myerrflg = 0 + call read_aerdata (me,master,iflip,idate,myerrmsg,myerrflg) + call copy_error(myerrmsg, myerrflg, errmsg, errflg) else if(iaermdl ==2 ) then do ix=1,ntrcaerm do j=1,levs @@ -289,16 +314,22 @@ subroutine GFS_phys_time_vary_init ( !$OMP section !> - Call tau_amf dats for ugwp_v1 if (do_ugwp_v1) then - call read_tau_amf(me, master, errmsg, errflg) + myerrflg = 0 + call read_tau_amf(me, master, myerrmsg, myerrflg) + call copy_error(myerrmsg, myerrflg, errmsg, errflg) endif !$OMP section !> - Initialize soil vegetation (needed for sncovr calculation further down) - call set_soilveg(me, isot, ivegsrc, nlunit, errmsg, errflg) + myerrflg = 0 + call set_soilveg(me, isot, ivegsrc, nlunit, myerrmsg, myerrflg) + call copy_error(myerrmsg, myerrflg, errmsg, errflg) !$OMP section !> - read in NoahMP table (needed for NoahMP init) - call read_mp_table_parameters(errmsg, errflg) + myerrflg = 0 + call read_mp_table_parameters(myerrmsg, myerrflg) + call copy_error(myerrmsg, myerrflg, errmsg, errflg) !$OMP end sections @@ -393,7 +424,9 @@ subroutine GFS_phys_time_vary_init ( if (errflg/=0) return if (iaerclm) then + ! This call is outside the OpenMP section, so it should access errmsg & errflg directly. call read_aerdataf (me, master, iflip, idate, fhour, errmsg, errflg) + ! If it is moved to an OpenMP section, it must use myerrmsg, myerrflg, and copy_error. if (errflg/=0) return end if @@ -479,7 +512,8 @@ subroutine GFS_phys_time_vary_init ( !$omp shared(dwsat_table,dksat_table,psisat_table,smoiseq) & !$OMP shared(smcwtdxy,deeprechxy,rechxy,errmsg,errflg) & !$OMP private(vegtyp,masslai,masssai,snd,dzsno,dzsnso,isnow) & -!$OMP private(soiltyp,bexp,smcmax,smcwlt,dwsat,dksat,psisat,ddz) +!$OMP private(soiltyp,bexp,smcmax,smcwlt,dwsat,dksat,psisat) & +!$OMP private(myerrmsg,myerrflg,ddz) do ix=1,im if (landfrac(ix) >= drythresh) then tvxy(ix) = tsfcl(ix) @@ -594,8 +628,9 @@ subroutine GFS_phys_time_vary_init ( dzsno(-1) = 0.20_kind_phys dzsno(0) = snd - 0.05_kind_phys - 0.20_kind_phys else - errmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization' - errflg = 1 + myerrmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization' + myerrflg = 1 + call copy_error(myerrmsg, myerrflg, errmsg, errflg) endif ! Now we have the snowxy field diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index 3b06d7f53..7b536a1d7 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -783,7 +783,7 @@ subroutine read_mp_table_parameters(errmsg, errflg) open(15, status='old', form='formatted', action='read', iostat=ierr) end if if ( ierr /= 0 ) then - errmsg = 'warning: cannot find file noahmptable.tb' + errmsg = 'warning: cannot find file noahmptable.tbl' errflg = 1 return ! write(*,'("warning: cannot find file noahmptable.tbl")') @@ -914,7 +914,7 @@ subroutine read_mp_table_parameters(errmsg, errflg) open(15, status='old', form='formatted', action='read', iostat=ierr) end if if ( ierr /= 0 ) then - errmsg = 'warning: cannot find file noahmptable.tb' + errmsg = 'warning: cannot find file noahmptable.tbl' errflg = 1 return ! write(*,'("warning: cannot find file noahmptable.tbl")') @@ -957,7 +957,7 @@ subroutine read_mp_table_parameters(errmsg, errflg) open(15, status='old', form='formatted', action='read', iostat=ierr) end if if ( ierr /= 0 ) then - errmsg = 'warning: cannot find file noahmptable.tb' + errmsg = 'warning: cannot find file noahmptable.tbl' errflg = 1 return ! write(*,'("warning: cannot find file noahmptable.tbl")') @@ -982,7 +982,7 @@ subroutine read_mp_table_parameters(errmsg, errflg) open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - errmsg = 'warning: cannot find file noahmptable.tb' + errmsg = 'warning: cannot find file noahmptable.tbl' errflg = 1 return ! write(*,'("warning: cannot find file noahmptable.tbl")') @@ -1011,7 +1011,7 @@ subroutine read_mp_table_parameters(errmsg, errflg) open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - errmsg = 'warning: cannot find file noahmptable.tb' + errmsg = 'warning: cannot find file noahmptable.tbl' errflg = 1 return ! write(*,'("warning: cannot find file noahmptable.tbl")') @@ -1069,7 +1069,7 @@ subroutine read_mp_table_parameters(errmsg, errflg) open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - errmsg = 'warning: cannot find file noahmptable.tb' + errmsg = 'warning: cannot find file noahmptable.tbl' errflg = 1 return ! write(*,'("warning: cannot find file noahmptable.tbl")') @@ -1096,7 +1096,7 @@ subroutine read_mp_table_parameters(errmsg, errflg) open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - errmsg = 'warning: cannot find file noahmptable.tb' + errmsg = 'warning: cannot find file noahmptable.tbl' errflg = 1 return ! write(*,'("warning: cannot find file noahmptable.tbl")') @@ -1249,7 +1249,7 @@ subroutine read_mp_table_parameters(errmsg, errflg) open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - errmsg = 'warning: cannot find file noahmptable.tb' + errmsg = 'warning: cannot find file noahmptable.tbl' errflg = 1 return ! write(*,'("warning: cannot find file noahmptable.tbl")') @@ -1278,7 +1278,7 @@ subroutine read_mp_table_parameters(errmsg, errflg) open(15, status='old', form='formatted', action='read', iostat=ierr) end if if (ierr /= 0) then - errmsg = 'warning: cannot find file noahmptable.tb' + errmsg = 'warning: cannot find file noahmptable.tbl' errflg = 1 return ! write(*,'("warning: cannot find file noahmptable.tbl")') From 3ec61d39e75bf9f83a1e232e762909964a687767 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 21 Sep 2023 22:23:47 +0000 Subject: [PATCH 34/44] detect empty errmsg in GFS_phys_time_vary.fv3.F90 --- physics/GFS_phys_time_vary.fv3.F90 | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index 04348f6dc..e6bf24186 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -67,14 +67,14 @@ subroutine copy_error(myerrmsg, myerrflg, errmsg, errflg) integer, intent(in) :: myerrflg character(*), intent(out) :: errmsg integer, intent(inout) :: errflg - if(myerrflg == 0) return - if(errflg /= 0) return - !$OMP CRITICAL - if(errflg == 0) then - errmsg = myerrmsg - errflg = myerrflg + if(myerrflg /= 0 .and. errflg == 0) then + !$OMP CRITICAL + if(errflg == 0) then + errmsg = myerrmsg + errflg = myerrflg + endif + !$OMP END CRITICAL endif - !$OMP END CRITICAL end subroutine copy_error !> \section arg_table_GFS_phys_time_vary_init Argument Table @@ -209,7 +209,7 @@ subroutine GFS_phys_time_vary_init ( real(kind=kind_phys), dimension(:), allocatable :: dzsnso integer :: myerrflg - character(255) :: myerrmsg + character(len=255) :: myerrmsg ! Initialize CCPP error handling variables errmsg = '' @@ -288,6 +288,7 @@ subroutine GFS_phys_time_vary_init ( if (iaerclm) then ntrcaer = ntrcaerm myerrflg = 0 + myerrmsg = 'read_aerdata failed without a message' call read_aerdata (me,master,iflip,idate,myerrmsg,myerrflg) call copy_error(myerrmsg, myerrflg, errmsg, errflg) else if(iaermdl ==2 ) then @@ -315,6 +316,7 @@ subroutine GFS_phys_time_vary_init ( !> - Call tau_amf dats for ugwp_v1 if (do_ugwp_v1) then myerrflg = 0 + myerrmsg = 'read_tau_amf failed without a message' call read_tau_amf(me, master, myerrmsg, myerrflg) call copy_error(myerrmsg, myerrflg, errmsg, errflg) endif @@ -322,12 +324,14 @@ subroutine GFS_phys_time_vary_init ( !$OMP section !> - Initialize soil vegetation (needed for sncovr calculation further down) myerrflg = 0 + myerrmsg = 'set_soilveg failed without a message' call set_soilveg(me, isot, ivegsrc, nlunit, myerrmsg, myerrflg) call copy_error(myerrmsg, myerrflg, errmsg, errflg) !$OMP section !> - read in NoahMP table (needed for NoahMP init) myerrflg = 0 + myerrmsg = 'read_mp_table_parameters failed without a message' call read_mp_table_parameters(myerrmsg, myerrflg) call copy_error(myerrmsg, myerrflg, errmsg, errflg) From 7912a1954983010f1f2ee5ce552139b8dda0b669 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 21 Sep 2023 22:24:02 +0000 Subject: [PATCH 35/44] Initialize err variables in set_soilveg.f --- physics/set_soilveg.f | 3 +++ 1 file changed, 3 insertions(+) diff --git a/physics/set_soilveg.f b/physics/set_soilveg.f index 37f2c2a73..35f4ace37 100644 --- a/physics/set_soilveg.f +++ b/physics/set_soilveg.f @@ -44,6 +44,9 @@ subroutine set_soilveg(me,isot,ivet,nlunit,errmsg,errflg) & DEFINED_SLOPE, FXEXP_DATA, NROOT_DATA, REFKDT_DATA, Z0_DATA, & CZIL_DATA, LAI_DATA, CSOIL_DATA + errmsg = '' + errflg = 0 + cmy end locals if(ivet.eq.2) then From 7332c8e7ac3d5eec9d48947ec9c1bbd035d9dfeb Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Thu, 21 Sep 2023 23:32:27 +0000 Subject: [PATCH 36/44] initialize errmsg & errflg in noahmp_tables.f90 --- physics/noahmp_tables.f90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/physics/noahmp_tables.f90 b/physics/noahmp_tables.f90 index 7b536a1d7..753c8ff24 100644 --- a/physics/noahmp_tables.f90 +++ b/physics/noahmp_tables.f90 @@ -484,6 +484,9 @@ subroutine read_mp_table_parameters(errmsg, errflg) sr2006_psi_e_a, sr2006_psi_e_b, sr2006_psi_e_c, sr2006_smcmax_a, & sr2006_smcmax_b + errmsg = '' + errflg = 0 + ! initialize our variables to bad values, so that if the namelist read fails, we come to a screeching halt as soon as we try to use anything. ! vegetation parameters isurban_table = -99999 From 374996ecc45f138ff48ed1812fee3dc59837c556 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Fri, 22 Sep 2023 13:42:46 +0000 Subject: [PATCH 37/44] only read h2odata, ozdata and noahmp table when they are needed --- physics/GFS_phys_time_vary.fv3.F90 | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/physics/GFS_phys_time_vary.fv3.F90 b/physics/GFS_phys_time_vary.fv3.F90 index e6bf24186..4100bdf6e 100644 --- a/physics/GFS_phys_time_vary.fv3.F90 +++ b/physics/GFS_phys_time_vary.fv3.F90 @@ -226,7 +226,7 @@ subroutine GFS_phys_time_vary_init ( !$OMP shared (xlat_d,xlon_d,imap,jmap,errmsg,errflg) & !$OMP shared (levozp,oz_coeff,oz_pres,ozpl) & !$OMP shared (levh2o,h2o_coeff,h2o_pres,h2opl) & -!$OMP shared (iamin, iamax, jamin, jamax) & +!$OMP shared (iamin, iamax, jamin, jamax, lsm_noahmp) & !$OMP shared (iaerclm,iaermdl,ntrcaer,aer_nm,iflip,iccn) & !$OMP shared (jindx1_o3,jindx2_o3,ddy_o3,jindx1_h,jindx2_h,ddy_h) & !$OMP shared (jindx1_aer,jindx2_aer,ddy_aer,iindx1_aer,iindx2_aer,ddx_aer) & @@ -240,6 +240,7 @@ subroutine GFS_phys_time_vary_init ( !$OMP section !> - Call read_o3data() to read ozone data + need_o3data: if(ntoz > 0) then call read_o3data (ntoz, me, master) ! Consistency check that the hardcoded values for levozp and @@ -259,9 +260,11 @@ subroutine GFS_phys_time_vary_init ( oz_coeff, " /= ", size(ozpl, dim=3) call copy_error(myerrmsg, myerrflg, errmsg, errflg) end if + endif need_o3data !$OMP section !> - Call read_h2odata() to read stratospheric water vapor data + need_h2odata: if(h2o_phys) then call read_h2odata (h2o_phys, me, master) ! Consistency check that the hardcoded values for levh2o and @@ -281,6 +284,7 @@ subroutine GFS_phys_time_vary_init ( myerrflg = 1 call copy_error(myerrmsg, myerrflg, errmsg, errflg) end if + endif need_h2odata !$OMP section !> - Call read_aerdata() to read aerosol climatology, Anning added coupled @@ -330,10 +334,12 @@ subroutine GFS_phys_time_vary_init ( !$OMP section !> - read in NoahMP table (needed for NoahMP init) - myerrflg = 0 - myerrmsg = 'read_mp_table_parameters failed without a message' - call read_mp_table_parameters(myerrmsg, myerrflg) - call copy_error(myerrmsg, myerrflg, errmsg, errflg) + if(lsm == lsm_noahmp) then + myerrflg = 0 + myerrmsg = 'read_mp_table_parameters failed without a message' + call read_mp_table_parameters(myerrmsg, myerrflg) + call copy_error(myerrmsg, myerrflg, errmsg, errflg) + endif !$OMP end sections From 5377c7c0ab39f275804749a50f31f0e03f7abab4 Mon Sep 17 00:00:00 2001 From: "anning.cheng" Date: Fri, 22 Sep 2023 10:08:02 -0400 Subject: [PATCH 38/44] passing nc back from microphysics --- physics/module_mp_thompson.F90 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/physics/module_mp_thompson.F90 b/physics/module_mp_thompson.F90 index ca913c6e3..271db11d0 100644 --- a/physics/module_mp_thompson.F90 +++ b/physics/module_mp_thompson.F90 @@ -1509,6 +1509,14 @@ SUBROUTINE mp_gt_driver(qv, qc, qr, qi, qs, qg, ni, nr, nc, & enddo endif + if (merra2_aerosol_aware) then + do k = kts, kte + nc(i,k,j) = nc1d(k) + nwfa(i,k,j) = nwfa1d(k) + nifa(i,k,j) = nifa1d(k) + enddo + endif + do k = kts, kte qv(i,k,j) = qv1d(k) qc(i,k,j) = qc1d(k) From cfd848540b64a55d5b2cc625683ca511889cfd6e Mon Sep 17 00:00:00 2001 From: "Haiqin.Li" Date: Sat, 23 Sep 2023 02:49:23 +0000 Subject: [PATCH 39/44] "to address the reviewer's comments" --- physics/cu_c3_deep.F90 | 2 -- physics/cu_c3_driver.F90 | 9 ++------- physics/cu_c3_driver_post.F90 | 9 ++++----- physics/cu_gf_driver.F90 | 5 ++--- physics/cu_gf_driver_post.F90 | 2 -- 5 files changed, 8 insertions(+), 19 deletions(-) diff --git a/physics/cu_c3_deep.F90 b/physics/cu_c3_deep.F90 index d1b490c77..b8a1dd838 100644 --- a/physics/cu_c3_deep.F90 +++ b/physics/cu_c3_deep.F90 @@ -4489,10 +4489,8 @@ subroutine cup_up_moisture(name,ierr,z_cup,qc,qrc,pw,pwav, & endif if(k.gt.kbcon(i)+1)c1d(i,k)=clwdet*up_massdetr(i,k-1) if(k.gt.kbcon(i)+1)c1d_b(i,k)=clwdet*up_massdetr(i,k-1) - !if(is_deep.and.k.gt.kklev(i))then c1d(i,k)=0.005 c1d_b(i,k)=0.005 - !endif if(autoconv.eq.2) then ! diff --git a/physics/cu_c3_driver.F90 b/physics/cu_c3_driver.F90 index 270e01989..cc2906ad5 100644 --- a/physics/cu_c3_driver.F90 +++ b/physics/cu_c3_driver.F90 @@ -644,7 +644,6 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& enddo !$acc end kernels if (dx(its)<6500.) then - ichoice=10 imid_gf=0 endif ! @@ -680,10 +679,6 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& do i=its,itf if(xmbs(i).gt.0.)then cutens(i)=1. - if (dx(i)<6500.) then - ierrm(i)=555 - ierr (i)=555 - endif endif enddo !$acc end kernels @@ -1041,8 +1036,8 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& gdc(i,16,10)=pret(i)*3600. maxupmf(i)=0. - if(forcing(i,6).gt.0.)then - maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing(i,6)) + if(forcing2(i,6).gt.0.)then + maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing2(i,6)) endif if(ktop(i).gt.2 .and.pret(i).gt.0.)dt_mf(i,ktop(i)-1)=ud_mf(i,ktop(i)) diff --git a/physics/cu_c3_driver_post.F90 b/physics/cu_c3_driver_post.F90 index 74957a6b2..528f3d466 100644 --- a/physics/cu_c3_driver_post.F90 +++ b/physics/cu_c3_driver_post.F90 @@ -66,20 +66,19 @@ subroutine cu_c3_driver_post_run (im, km, t, q, prevst, prevsq, cactiv, cactiv_m conv_act_m(i)=0.0 endif ! reflectivity parameterization for parameterized convection (reference:Unipost MDLFLD.f) - if(sqrt(garea(i)).lt.6500.)then ze = 0.0 ze_conv = 0.0 dbz_sum = 0.0 - cuprate = raincv(i) * 3600.0 / dt ! cu precip rate (mm/h) - ze_conv = 300.0 * cuprate**1.4 - if (maxupmf(i).gt.0.05) then + cuprate = max(0.1,1.e3*raincv(i) * 3600.0 / dt) ! cu precip rate (mm/h) + if(cuprate .lt. 0.05) cuprate=0. + ze_conv = 300.0 * cuprate**1.5 + if (maxupmf(i).gt.0.1 .and. cuprate.gt.0.) then do k = 1, km ze = 10._kind_phys ** (0.1 * refl_10cm(i,k)) dbz_sum = max(dbzmin, 10.0 * log10(ze + ze_conv)) refl_10cm(i,k) = dbz_sum enddo endif - endif enddo !$acc end kernels diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index 3b700cc5a..f3f5042fc 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -644,7 +644,6 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& enddo !$acc end kernels if (dx(its)<6500.) then -! ichoice=10 imid_gf=0 endif ! @@ -1015,8 +1014,8 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& gdc(i,16,10)=pret(i)*3600. maxupmf(i)=0. - if(forcing(i,6).gt.0.)then - maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing(i,6)) + if(forcing2(i,6).gt.0.)then + maxupmf(i)=maxval(xmb(i)*zu(i,kts:ktf)/forcing2(i,6)) endif if(ktop(i).gt.2 .and.pret(i).gt.0.)dt_mf(i,ktop(i)-1)=ud_mf(i,ktop(i)) diff --git a/physics/cu_gf_driver_post.F90 b/physics/cu_gf_driver_post.F90 index 8c5896164..59f43618c 100644 --- a/physics/cu_gf_driver_post.F90 +++ b/physics/cu_gf_driver_post.F90 @@ -66,7 +66,6 @@ subroutine cu_gf_driver_post_run (im, km, t, q, prevst, prevsq, cactiv, cactiv_m conv_act_m(i)=0.0 endif ! reflectivity parameterization for parameterized convection (reference:Unipost MDLFLD.f) - !if(sqrt(garea(i)).lt.6500.)then ze = 0.0 ze_conv = 0.0 dbz_sum = 0.0 @@ -80,7 +79,6 @@ subroutine cu_gf_driver_post_run (im, km, t, q, prevst, prevsq, cactiv, cactiv_m refl_10cm(i,k) = dbz_sum enddo endif - !endif enddo !$acc end kernels From dbd5f58b1f04f8d31a445ca477a1cc1169707303 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Wed, 27 Sep 2023 01:19:48 +0000 Subject: [PATCH 40/44] remove all constant 3D variables from clm lake --- physics/clm_lake.f90 | 202 ++++++++++++++++-------------------------- physics/clm_lake.meta | 78 ++-------------- 2 files changed, 86 insertions(+), 194 deletions(-) diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index 4fa6dacb6..c6fa56320 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -229,6 +229,31 @@ end subroutine is_salty !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + subroutine calculate_z_dz_lake(i,input_lakedepth,clm_lakedepth,z_lake,dz_lake) + implicit none + integer, intent(in) :: i + real(kind_phys), intent(inout) :: clm_lakedepth(:) ! lake depth used by clm + real(kind_phys), intent(in) :: input_lakedepth(:) ! lake depth before correction (m) + real(kind_lake) :: z_lake(nlevlake) ! layer depth for lake (m) + real(kind_lake) :: dz_lake(nlevlake) ! layer thickness for lake (m) + real(kind_lake) :: depthratio + + if (input_lakedepth(i) == spval) then + clm_lakedepth(i) = zlak(nlevlake) + 0.5_kind_lake*dzlak(nlevlake) + z_lake(1:nlevlake) = zlak(1:nlevlake) + dz_lake(1:nlevlake) = dzlak(1:nlevlake) + else + depthratio = input_lakedepth(i) / (zlak(nlevlake) + 0.5_kind_lake*dzlak(nlevlake)) + z_lake(1) = zlak(1) + dz_lake(1) = dzlak(1) + dz_lake(2:nlevlake) = dzlak(2:nlevlake)*depthratio + z_lake(2:nlevlake) = zlak(2:nlevlake)*depthratio + dz_lake(1)*(1._kind_lake - depthratio) + end if + + end subroutine calculate_z_dz_lake + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !> \section arg_table_clm_lake_run Argument Table !! \htmlinclude clm_lake_run.html !! @@ -258,8 +283,8 @@ SUBROUTINE clm_lake_run( & salty, savedtke12d, snowdp2d, h2osno2d, snl2d, t_grnd2d, t_lake3d, & lake_icefrac3d, t_soisno3d, h2osoi_ice3d, h2osoi_liq3d, h2osoi_vol3d, & - z3d, dz3d, zi3d, z_lake3d, dz_lake3d, watsat3d, csol3d, sand3d, clay3d, & - tkmg3d, tkdry3d, tksatu3d, clm_lakedepth, cannot_freeze, & + z3d, dz3d, zi3d, & + input_lakedepth, clm_lakedepth, cannot_freeze, & ! Error reporting: errflg, errmsg) @@ -336,14 +361,8 @@ SUBROUTINE clm_lake_run( & dz3d real(kind_phys), dimension( :,-nlevsnow+0: ) ,INTENT(inout) :: zi3d - REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: z_lake3d - REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: dz_lake3d - REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: watsat3d - REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: csol3d, sand3d, clay3d - REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: tkmg3d - REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: tkdry3d - REAL(KIND_PHYS), DIMENSION( :,: ),INTENT(INOUT) :: tksatu3d REAL(KIND_PHYS), DIMENSION( : ) ,INTENT(INOUT) :: clm_lakedepth + REAL(KIND_PHYS), DIMENSION( : ) ,INTENT(INOUT) :: input_lakedepth ! ! Error reporting: @@ -430,10 +449,10 @@ SUBROUTINE clm_lake_run( & character*255 :: message logical, parameter :: feedback_to_atmosphere = .true. ! FIXME: REMOVE - real(kind_lake) :: to_radians, lat_d, lon_d, qss + real(kind_lake) :: to_radians, lat_d, lon_d, qss, tkm, bd - integer :: month,num1,num2,day_of_month - real(kind_lake) :: wght1,wght2,Tclim + integer :: month,num1,num2,day_of_month,isl + real(kind_lake) :: wght1,wght2,Tclim,depthratio logical salty_flag, cannot_freeze_flag @@ -451,31 +470,19 @@ SUBROUTINE clm_lake_run( & lakedepth_default=lakedepth_default, fhour=fhour, & oro_lakedepth=oro_lakedepth, savedtke12d=savedtke12d, snowdp2d=snowdp2d, & h2osno2d=h2osno2d, snl2d=snl2d, t_grnd2d=t_grnd2d, t_lake3d=t_lake3d, & - lake_icefrac3d=lake_icefrac3d, z_lake3d=z_lake3d, dz_lake3d=dz_lake3d, & + lake_icefrac3d=lake_icefrac3d, & t_soisno3d=t_soisno3d, h2osoi_ice3d=h2osoi_ice3d, h2osoi_liq3d=h2osoi_liq3d, & - h2osoi_vol3d=h2osoi_vol3d, z3d=z3d, dz3d=dz3d, zi3d=zi3d, watsat3d=watsat3d, & - csol3d=csol3d, tkmg3d=tkmg3d, fice=fice, hice=hice, min_lakeice=min_lakeice, & + h2osoi_vol3d=h2osoi_vol3d, z3d=z3d, dz3d=dz3d, zi3d=zi3d, & + fice=fice, hice=hice, min_lakeice=min_lakeice, & tsfc=tsfc, & - use_lake_model=use_lake_model, use_lakedepth=use_lakedepth, tkdry3d=tkdry3d, & - tksatu3d=tksatu3d, im=im, prsi=prsi, xlat_d=xlat_d, xlon_d=xlon_d, & - clm_lake_initialized=clm_lake_initialized, sand3d=sand3d, clay3d=clay3d, & + use_lake_model=use_lake_model, use_lakedepth=use_lakedepth, & + im=im, prsi=prsi, xlat_d=xlat_d, xlon_d=xlon_d, & + clm_lake_initialized=clm_lake_initialized, input_lakedepth=input_lakedepth, & tg3=tg3, clm_lakedepth=clm_lakedepth, km=km, me=me, master=master, & errmsg=errmsg, errflg=errflg) if(errflg/=0) then return endif - if(any(clay3d>0 .and. clay3d<1)) then - write(message,*) 'Invalid clay3d. Abort.' - errmsg=trim(message) - errflg=1 - return - endif - if(any(dz_lake3d>0 .and. dz_lake3d<.1)) then - write(message,*) 'Invalid dz_lake3d. Abort.' - errmsg=trim(message) - errflg=1 - return - endif lake_points=0 snow_points=0 @@ -540,6 +547,13 @@ SUBROUTINE clm_lake_run( & lake_points = lake_points+1 + call calculate_z_dz_lake(i,input_lakedepth,clm_lakedepth,z_lake(1,:),dz_lake(1,:)) + + do c = 2,column + z_lake(c,:) = z_lake(1,:) + dz_lake(c,:) = z_lake(1,:) + enddo + do c = 1,column forc_t(c) = SFCTMP ! [K] @@ -567,8 +581,6 @@ SUBROUTINE clm_lake_run( & do k = 1,nlevlake t_lake(c,k) = t_lake3d(i,k) lake_icefrac(c,k) = lake_icefrac3d(i,k) - z_lake(c,k) = z_lake3d(i,k) - dz_lake(c,k) = dz_lake3d(i,k) enddo do k = -nlevsnow+1,nlevsoil t_soisno(c,k) = t_soisno3d(i,k) @@ -582,11 +594,18 @@ SUBROUTINE clm_lake_run( & zi(c,k) = zi3d(i,k) enddo do k = 1,nlevsoil - watsat(c,k) = watsat3d(i,k) - csol(c,k) = csol3d(i,k) - tkmg(c,k) = tkmg3d(i,k) - tkdry(c,k) = tkdry3d(i,k) - tksatu(c,k) = tksatu3d(i,k) + ! Soil hydraulic and thermal properties + isl = ISLTYP(i) + if (isl == 0 ) isl = 14 + if (isl == 14 ) isl = isl + 1 + + watsat(c,k) = 0.489_kind_lake - 0.00126_kind_lake*sand(isl) + csol(c,k) = (2.128_kind_lake*sand(isl)+2.385_kind_lake*clay(isl)) / (sand(isl)+clay(isl))*1.e6_kind_lake ! J/(m3 K) + tkm = (8.80_kind_lake*sand(isl)+2.92_kind_lake*clay(isl))/(sand(isl)+clay(isl)) ! W/(m K) + bd = (1._kind_lake-watsat(c,k))*2.7e3_kind_lake + tkmg(c,k) = tkm ** (1._kind_lake- watsat(c,k)) + tkdry(c,k) = (0.135_kind_lake*bd + 64.7_kind_lake) / (2.7e3_kind_lake - 0.947_kind_lake*bd) + tksatu(c,k) = tkmg(c,k)*0.57_kind_lake**watsat(c,k) enddo enddo @@ -747,7 +766,7 @@ SUBROUTINE clm_lake_run( & hice(I) = 0 ! sea_ice_thickness do k=1,nlevlake if(lake_icefrac3d(i,k)>0) then - hice(i) = hice(i) + dz_lake3d(i,k) + hice(i) = hice(i) + dz_lake(c,k) endif end do else ! Not an ice point @@ -5315,14 +5334,14 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, weasd, lakedepth_default, fhour, & oro_lakedepth, savedtke12d, snowdp2d, h2osno2d, & !o snl2d, t_grnd2d, t_lake3d, lake_icefrac3d, & - z_lake3d, dz_lake3d, t_soisno3d, h2osoi_ice3d, & + t_soisno3d, h2osoi_ice3d, & h2osoi_liq3d, h2osoi_vol3d, z3d, dz3d, & - zi3d, watsat3d, csol3d, tkmg3d, & + zi3d, & fice, hice, min_lakeice, tsfc, & use_lake_model, use_lakedepth, & - tkdry3d, tksatu3d, im, prsi, & + im, prsi, & xlat_d, xlon_d, clm_lake_initialized, & - sand3d, clay3d, tg3, clm_lakedepth, & + input_lakedepth, tg3, clm_lakedepth, & km, me, master, errmsg, errflg) !> Some fields in lakeini are not available during initialization, @@ -5360,6 +5379,7 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, real(kind_phys), intent(in) :: lakedepth_default real(kind_phys), dimension(IM),intent(inout) :: clm_lakedepth + real(kind_phys), dimension(IM),intent(inout) :: input_lakedepth real(kind_phys), dimension(IM),intent(in) :: oro_lakedepth real(kind_phys), dimension(IM),intent(out) :: savedtke12d real(kind_phys), dimension(IM),intent(out) :: snowdp2d, & @@ -5368,43 +5388,24 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, t_grnd2d real(kind_phys), dimension(IM,nlevlake),INTENT(out) :: t_lake3d, & - lake_icefrac3d, & - z_lake3d, & - dz_lake3d + lake_icefrac3d real(kind_phys), dimension(IM,-nlevsnow+1:nlevsoil ),INTENT(out) :: t_soisno3d, & h2osoi_ice3d, & h2osoi_liq3d, & h2osoi_vol3d, & z3d, & dz3d - real(kind_phys), dimension(IM,nlevsoil),INTENT(out) :: watsat3d, & - csol3d, & - tkmg3d, & - tkdry3d, & - tksatu3d - real(kind_phys), dimension(IM,nlevsoil),INTENT(inout) :: clay3d, & - sand3d real(kind_phys), dimension( IM,-nlevsnow+0:nlevsoil ),INTENT(out) :: zi3d !LOGICAL, DIMENSION( : ),intent(out) :: lake !REAL(KIND_PHYS), OPTIONAL, DIMENSION( : ), INTENT(IN) :: lake_depth ! no separate variable for this in CCPP - real(kind_lake), dimension( 1:im,1:nlevsoil ) :: bsw3d, & - bsw23d, & - psisat3d, & - vwcsat3d, & - watdry3d, & - watopt3d, & - hksat3d, & - sucsat3d integer :: n,i,j,k,ib,lev,bottom ! indices real(kind_lake),dimension(1:im ) :: bd2d ! bulk density of dry soil material [kg/m^3] real(kind_lake),dimension(1:im ) :: tkm2d ! mineral conductivity real(kind_lake),dimension(1:im ) :: xksat2d ! maximum hydraulic conductivity of soil [mm/s] real(kind_lake),dimension(1:im ) :: depthratio2d ! ratio of lake depth to standard deep lake depth - real(kind_lake),dimension(1:im ) :: clay2d ! temporary - real(kind_lake),dimension(1:im ) :: sand2d ! temporary logical,parameter :: arbinit = .false. real(kind_lake),parameter :: defval = -999.0 @@ -5413,16 +5414,19 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, character*256 :: message real(kind_lake) :: ht real(kind_lake) :: rhosn - real(kind_lake) :: depth + real(kind_lake) :: depth, lakedepth logical :: climatology_limits + real(kind_lake) :: z_lake(nlevlake) ! layer depth for lake (m) + real(kind_lake) :: dz_lake(nlevlake) ! layer thickness for lake (m) + integer, parameter :: xcheck=38 integer, parameter :: ycheck=92 integer :: used_lakedepth_default, init_points, month, julday integer :: mon, iday, num2, num1, juld, day2, day1, wght1, wght2 - real(kind_lake) :: Tclim + real(kind_lake) :: Tclim, watsat used_lakedepth_default=0 @@ -5456,6 +5460,8 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, cycle endif + input_lakedepth=clm_lakedepth + snl2d(i) = defval do k = -nlevsnow+1,nlevsoil h2osoi_liq3d(i,k) = defval @@ -5468,8 +5474,6 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, do k = 1,nlevlake t_lake3d(i,k) = defval lake_icefrac3d(i,k) = defval - z_lake3d(i,k) = defval - dz_lake3d(i,k) = defval enddo if (use_lake_model(i) == 1) then @@ -5499,60 +5503,9 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, isl = ISLTYP(i) if (isl == 0 ) isl = 14 if (isl == 14 ) isl = isl + 1 - do k = 1,nlevsoil - sand3d(i,k) = sand(isl) - clay3d(i,k) = clay(isl) - - ! Cannot continue if either of these checks fail. - if(clay3d(i,k)>0 .and. clay3d(i,k)<1) then - write(message,*) 'bad clay3d ',clay3d(i,k) - write(0,'(A)') trim(message) - errmsg = trim(message) - errflg = 1 - return - endif - if(sand3d(i,k)>0 .and. sand3d(i,k)<1) then - write(message,*) 'bad sand3d ',sand3d(i,k) - write(0,'(A)') trim(message) - errmsg = trim(message) - errflg = 1 - return - endif - enddo - do k = 1,nlevsoil - clay2d(i) = clay3d(i,k) - sand2d(i) = sand3d(i,k) - watsat3d(i,k) = 0.489_kind_lake - 0.00126_kind_lake*sand2d(i) - bd2d(i) = (1._kind_lake-watsat3d(i,k))*2.7e3_kind_lake - xksat2d(i) = 0.0070556_kind_lake *( 10._kind_lake**(-0.884_kind_lake+0.0153_kind_lake*sand2d(i)) ) ! mm/s - tkm2d(i) = (8.80_kind_lake*sand2d(i)+2.92_kind_lake*clay2d(i))/(sand2d(i)+clay2d(i)) ! W/(m K) - - bsw3d(i,k) = 2.91_kind_lake + 0.159_kind_lake*clay2d(i) - bsw23d(i,k) = -(3.10_kind_lake + 0.157_kind_lake*clay2d(i) - 0.003_kind_lake*sand2d(i)) - psisat3d(i,k) = -(exp((1.54_kind_lake - 0.0095_kind_lake*sand2d(i) + 0.0063_kind_lake*(100.0_kind_lake-sand2d(i) & - -clay2d(i)))*log(10.0_kind_lake))*9.8e-5_kind_lake) - vwcsat3d(i,k) = (50.5_kind_lake - 0.142_kind_lake*sand2d(i) - 0.037_kind_lake*clay2d(i))/100.0_kind_lake - hksat3d(i,k) = xksat2d(i) - sucsat3d(i,k) = 10._kind_lake * ( 10._kind_lake**(1.88_kind_lake-0.0131_kind_lake*sand2d(i)) ) - tkmg3d(i,k) = tkm2d(i) ** (1._kind_lake- watsat3d(i,k)) - tksatu3d(i,k) = tkmg3d(i,k)*0.57_kind_lake**watsat3d(i,k) - tkdry3d(i,k) = (0.135_kind_lake*bd2d(i) + 64.7_kind_lake) / (2.7e3_kind_lake - 0.947_kind_lake*bd2d(i)) - csol3d(i,k) = (2.128_kind_lake*sand2d(i)+2.385_kind_lake*clay2d(i)) / (sand2d(i)+clay2d(i))*1.e6_kind_lake ! J/(m3 K) - watdry3d(i,k) = watsat3d(i,k) * (316230._kind_lake/sucsat3d(i,k)) ** (-1._kind_lake/bsw3d(i,k)) - watopt3d(i,k) = watsat3d(i,k) * (158490._kind_lake/sucsat3d(i,k)) ** (-1._kind_lake/bsw3d(i,k)) - end do - if (clm_lakedepth(i) == spval) then - clm_lakedepth(i) = zlak(nlevlake) + 0.5_kind_lake*dzlak(nlevlake) - z_lake3d(i,1:nlevlake) = zlak(1:nlevlake) - dz_lake3d(i,1:nlevlake) = dzlak(1:nlevlake) - else - depthratio2d(i) = clm_lakedepth(i) / (zlak(nlevlake) + 0.5_kind_lake*dzlak(nlevlake)) - z_lake3d(i,1) = zlak(1) - dz_lake3d(i,1) = dzlak(1) - dz_lake3d(i,2:nlevlake) = dzlak(2:nlevlake)*depthratio2d(i) - z_lake3d(i,2:nlevlake) = zlak(2:nlevlake)*depthratio2d(i) + dz_lake3d(i,1)*(1._kind_lake - depthratio2d(i)) - end if + call calculate_z_dz_lake(i,input_lakedepth,clm_lakedepth,z_lake,dz_lake) + z3d(i,1:nlevsoil) = zsoi(1:nlevsoil) zi3d(i,0:nlevsoil) = zisoi(0:nlevsoil) dz3d(i,1:nlevsoil) = dzsoi(1:nlevsoil) @@ -5633,9 +5586,9 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, if(lake_icefrac3d(i,1) > 0.) then depth = 0. do k=2,nlevlake - depth = depth + dz_lake3d(i,k) + depth = depth + dz_lake(k) if(hice(i) >= depth) then - lake_icefrac3d(i,k) = max(0.,lake_icefrac3d(i,1)+(0.-lake_icefrac3d(i,1))/z_lake3d(i,nlevlake)*depth) + lake_icefrac3d(i,k) = max(0.,lake_icefrac3d(i,1)+(0.-lake_icefrac3d(i,1))/z_lake(nlevlake)*depth) else lake_icefrac3d(i,k) = 0. endif @@ -5649,8 +5602,8 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, t_grnd2d(i) = max(tfrz,tsfc(i)) endif do k = 2, nlevlake - if(z_lake3d(i,k).le.depth_c) then - t_lake3d(i,k) = tsfc(i)+(277.2_kind_lake-tsfc(i))/depth_c*z_lake3d(i,k) + if(z_lake(k).le.depth_c) then + t_lake3d(i,k) = tsfc(i)+(277.2_kind_lake-tsfc(i))/depth_c*z_lake(k) else t_lake3d(i,k) = 277.2_kind_lake end if @@ -5684,7 +5637,8 @@ SUBROUTINE lakeini(kdt, ISLTYP, gt0, snowd, do k = 1,nlevsoil h2osoi_vol3d(i,k) = 1.0_kind_lake - h2osoi_vol3d(i,k) = min(h2osoi_vol3d(i,k),watsat3d(i,k)) + watsat = 0.489_kind_lake - 0.00126_kind_lake*sand(isl) + h2osoi_vol3d(i,k) = min(h2osoi_vol3d(i,k),watsat) ! soil layers if (t_soisno3d(i,k) <= tfrz) then diff --git a/physics/clm_lake.meta b/physics/clm_lake.meta index 3de543078..11a44286a 100644 --- a/physics/clm_lake.meta +++ b/physics/clm_lake.meta @@ -289,6 +289,14 @@ type = real kind = kind_phys intent = in +[input_lakedepth] + standard_name = lake_depth_before_correction + long_name = lake depth_before_correction + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + intent = inout [wind] standard_name = wind_speed_at_lowest_model_layer long_name = wind speed at lowest model level @@ -716,76 +724,6 @@ type = real kind = kind_phys intent = inout -[z_lake3d] - standard_name = depth_of_lake_interface_layers - long_name = depth of lake interface layers - units = fraction - dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model) - type = real - kind = kind_phys - intent = inout -[dz_lake3d] - standard_name = thickness_of_lake_layers - long_name = thickness of lake layers - units = fraction - dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model) - type = real - kind = kind_phys - intent = inout -[watsat3d] - standard_name = saturated_volumetric_soil_water_in_lake_model - long_name = saturated volumetric soil water in lake model - units = m - dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model) - type = real - kind = kind_phys - intent = inout -[csol3d] - standard_name = soil_heat_capacity_in_lake_model - long_name = soil heat capacity in lake model - units = m - dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model) - type = real - kind = kind_phys - intent = inout -[sand3d] - standard_name = clm_lake_percent_sand - long_name = percent sand in clm lake model - units = percent - dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_clm_lake_model) - type = integer - intent = inout -[clay3d] - standard_name = clm_lake_percent_clay - long_name = percent clay in clm lake model - units = percent - dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_clm_lake_model) - type = integer - intent = inout -[tkmg3d] - standard_name = soil_mineral_thermal_conductivity_in_lake_model - long_name = soil mineral thermal conductivity in lake model - units = m - dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model) - type = real - kind = kind_phys - intent = inout -[tkdry3d] - standard_name = dry_soil_thermal_conductivity_in_lake_model - long_name = dry soil thermal conductivity in lake model - units = m - dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model) - type = real - kind = kind_phys - intent = inout -[tksatu3d] - standard_name = saturated_soil_thermal_conductivity_in_lake_model - long_name = saturated soil thermal conductivity in lake model - units = m - dimensions = (horizontal_loop_extent, lake_vertical_dimension_for_clm_lake_model) - type = real - kind = kind_phys - intent = inout [clm_lakedepth] standard_name = clm_lake_depth long_name = clm internal copy of lake depth with 10.0 replaced by default lake depth From 75ec62308ae51ea48b03ecd438b8a1eb71c8b929 Mon Sep 17 00:00:00 2001 From: "samuel.trahan" Date: Wed, 27 Sep 2023 14:40:02 +0000 Subject: [PATCH 41/44] calculate constants only once per i --- physics/clm_lake.f90 | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index c6fa56320..da4712810 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -554,6 +554,19 @@ SUBROUTINE clm_lake_run( & dz_lake(c,:) = z_lake(1,:) enddo + ! Soil hydraulic and thermal properties + isl = ISLTYP(i) + if (isl == 0 ) isl = 14 + if (isl == 14 ) isl = isl + 1 + + watsat = 0.489_kind_lake - 0.00126_kind_lake*sand(isl) + csol = (2.128_kind_lake*sand(isl)+2.385_kind_lake*clay(isl)) / (sand(isl)+clay(isl))*1.e6_kind_lake ! J/(m3 K) + tkm = (8.80_kind_lake*sand(isl)+2.92_kind_lake*clay(isl))/(sand(isl)+clay(isl)) ! W/(m K) + bd = (1._kind_lake-watsat(1,1))*2.7e3_kind_lake + tkmg = tkm ** (1._kind_lake- watsat(1,1)) + tkdry = (0.135_kind_lake*bd + 64.7_kind_lake) / (2.7e3_kind_lake - 0.947_kind_lake*bd) + tksatu = tkmg(1,1)*0.57_kind_lake**watsat(1,1) + do c = 1,column forc_t(c) = SFCTMP ! [K] @@ -593,21 +606,6 @@ SUBROUTINE clm_lake_run( & do k = -nlevsnow+0,nlevsoil zi(c,k) = zi3d(i,k) enddo - do k = 1,nlevsoil - ! Soil hydraulic and thermal properties - isl = ISLTYP(i) - if (isl == 0 ) isl = 14 - if (isl == 14 ) isl = isl + 1 - - watsat(c,k) = 0.489_kind_lake - 0.00126_kind_lake*sand(isl) - csol(c,k) = (2.128_kind_lake*sand(isl)+2.385_kind_lake*clay(isl)) / (sand(isl)+clay(isl))*1.e6_kind_lake ! J/(m3 K) - tkm = (8.80_kind_lake*sand(isl)+2.92_kind_lake*clay(isl))/(sand(isl)+clay(isl)) ! W/(m K) - bd = (1._kind_lake-watsat(c,k))*2.7e3_kind_lake - tkmg(c,k) = tkm ** (1._kind_lake- watsat(c,k)) - tkdry(c,k) = (0.135_kind_lake*bd + 64.7_kind_lake) / (2.7e3_kind_lake - 0.947_kind_lake*bd) - tksatu(c,k) = tkmg(c,k)*0.57_kind_lake**watsat(c,k) - enddo - enddo eflx_lwrad_net = -9999 From 7a8f6934f40390de915f4d8828d2119da9f99956 Mon Sep 17 00:00:00 2001 From: "Haiqin.Li" Date: Wed, 27 Sep 2023 18:56:22 +0000 Subject: [PATCH 42/44] "to address the reviewers' comments" --- physics/cu_c3_deep.F90 | 4 ---- physics/cu_c3_driver.F90 | 32 -------------------------------- physics/cu_c3_driver_post.F90 | 2 +- physics/cu_gf_driver.F90 | 32 -------------------------------- physics/cu_gf_driver_post.F90 | 2 +- 5 files changed, 2 insertions(+), 70 deletions(-) diff --git a/physics/cu_c3_deep.F90 b/physics/cu_c3_deep.F90 index b8a1dd838..e6d238b69 100644 --- a/physics/cu_c3_deep.F90 +++ b/physics/cu_c3_deep.F90 @@ -2078,10 +2078,6 @@ subroutine cu_c3_deep_run( & !> - Call rain_evap_below_cloudbase() to calculate evaporation below cloud base -! call rain_evap_below_cloudbase(itf,ktf,its,ite, & -! kts,kte,ierr,kbcon,xmb,psur,xland,qo_cup, & -! po_cup,qes_cup,pwavo,edto,pwevo,pre,outt,outq) !,outbuoy) - k=1 !$acc kernels do i=its,itf diff --git a/physics/cu_c3_driver.F90 b/physics/cu_c3_driver.F90 index cc2906ad5..8592e08f9 100644 --- a/physics/cu_c3_driver.F90 +++ b/physics/cu_c3_driver.F90 @@ -949,38 +949,6 @@ subroutine cu_c3_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& !gdc(i,k,8)=(outq(i,k))*86400.*xlv/cp gdc(i,k,8)=(outqm(i,k)+outqs(i,k)+outq(i,k))*86400.*xlv/cp gdc(i,k,9)=gdc(i,k,2)+gdc(i,k,3)+gdc(i,k,4) -! -!> - Calculate subsidence effect on clw -! -! dsubclw=0. -! dsubclwm=0. -! dsubclws=0. -! dp=100.*(p2d(i,k)-p2d(i,k+1)) -! if (clcw(i,k) .gt. -999.0 .and. clcw(i,k+1) .gt. -999.0 )then -! clwtot = cliw(i,k) + clcw(i,k) -! clwtot1= cliw(i,k+1) + clcw(i,k+1) -! dsubclw=((-edt(i)*zd(i,k+1)+zu(i,k+1))*clwtot1 & -! -(-edt(i)*zd(i,k) +zu(i,k)) *clwtot )*g/dp -! dsubclwm=((-edtm(i)*zdm(i,k+1)+zum(i,k+1))*clwtot1 & -! -(-edtm(i)*zdm(i,k) +zum(i,k)) *clwtot )*g/dp -! dsubclws=(zus(i,k+1)*clwtot1-zus(i,k)*clwtot)*g/dp -! dsubclw=dsubclw+(zu(i,k+1)*clwtot1-zu(i,k)*clwtot)*g/dp -! dsubclwm=dsubclwm+(zum(i,k+1)*clwtot1-zum(i,k)*clwtot)*g/dp -! dsubclws=dsubclws+(zus(i,k+1)*clwtot1-zus(i,k)*clwtot)*g/dp -! endif -! tem = dt*(outqcs(i,k)*cutens(i)+outqc(i,k)*cuten(i) & -! +outqcm(i,k)*cutenm(i) & -! +dsubclw*xmb(i)+dsubclws*xmbs(i)+dsubclwm*xmbm(i) & -! ) -! tem1 = max(0.0, min(1.0, (tcr-t(i,k))*tcrf)) -! if (clcw(i,k) .gt. -999.0) then -! cliw(i,k) = max(0.,cliw(i,k) + tem * tem1) ! ice -! clcw(i,k) = max(0.,clcw(i,k) + tem *(1.0-tem1)) ! water -! else -! cliw(i,k) = max(0.,cliw(i,k) + tem) -! endif -! -! enddo !> - FCT treats subsidence effect to cloud ice/water (begin) dp=100.*(p2d(i,k)-p2d(i,k+1)) diff --git a/physics/cu_c3_driver_post.F90 b/physics/cu_c3_driver_post.F90 index 528f3d466..d5d2dee3b 100644 --- a/physics/cu_c3_driver_post.F90 +++ b/physics/cu_c3_driver_post.F90 @@ -69,7 +69,7 @@ subroutine cu_c3_driver_post_run (im, km, t, q, prevst, prevsq, cactiv, cactiv_m ze = 0.0 ze_conv = 0.0 dbz_sum = 0.0 - cuprate = max(0.1,1.e3*raincv(i) * 3600.0 / dt) ! cu precip rate (mm/h) + cuprate = 1.e3*raincv(i) * 3600.0 / dt ! cu precip rate (mm/h) if(cuprate .lt. 0.05) cuprate=0. ze_conv = 300.0 * cuprate**1.5 if (maxupmf(i).gt.0.1 .and. cuprate.gt.0.) then diff --git a/physics/cu_gf_driver.F90 b/physics/cu_gf_driver.F90 index f3f5042fc..d85b7ac52 100644 --- a/physics/cu_gf_driver.F90 +++ b/physics/cu_gf_driver.F90 @@ -927,38 +927,6 @@ subroutine cu_gf_driver_run(ntracer,garea,im,km,dt,flag_init,flag_restart,& !gdc(i,k,8)=(outq(i,k))*86400.*xlv/cp gdc(i,k,8)=(outqm(i,k)+outqs(i,k)+outq(i,k))*86400.*xlv/cp gdc(i,k,9)=gdc(i,k,2)+gdc(i,k,3)+gdc(i,k,4) -! -!> - Calculate subsidence effect on clw -! -! dsubclw=0. -! dsubclwm=0. -! dsubclws=0. -! dp=100.*(p2d(i,k)-p2d(i,k+1)) -! if (clcw(i,k) .gt. -999.0 .and. clcw(i,k+1) .gt. -999.0 )then -! clwtot = cliw(i,k) + clcw(i,k) -! clwtot1= cliw(i,k+1) + clcw(i,k+1) -! dsubclw=((-edt(i)*zd(i,k+1)+zu(i,k+1))*clwtot1 & -! -(-edt(i)*zd(i,k) +zu(i,k)) *clwtot )*g/dp -! dsubclwm=((-edtm(i)*zdm(i,k+1)+zum(i,k+1))*clwtot1 & -! -(-edtm(i)*zdm(i,k) +zum(i,k)) *clwtot )*g/dp -! dsubclws=(zus(i,k+1)*clwtot1-zus(i,k)*clwtot)*g/dp -! dsubclw=dsubclw+(zu(i,k+1)*clwtot1-zu(i,k)*clwtot)*g/dp -! dsubclwm=dsubclwm+(zum(i,k+1)*clwtot1-zum(i,k)*clwtot)*g/dp -! dsubclws=dsubclws+(zus(i,k+1)*clwtot1-zus(i,k)*clwtot)*g/dp -! endif -! tem = dt*(outqcs(i,k)*cutens(i)+outqc(i,k)*cuten(i) & -! +outqcm(i,k)*cutenm(i) & -! +dsubclw*xmb(i)+dsubclws*xmbs(i)+dsubclwm*xmbm(i) & -! ) -! tem1 = max(0.0, min(1.0, (tcr-t(i,k))*tcrf)) -! if (clcw(i,k) .gt. -999.0) then -! cliw(i,k) = max(0.,cliw(i,k) + tem * tem1) ! ice -! clcw(i,k) = max(0.,clcw(i,k) + tem *(1.0-tem1)) ! water -! else -! cliw(i,k) = max(0.,cliw(i,k) + tem) -! endif -! -! enddo !> - FCT treats subsidence effect to cloud ice/water (begin) dp=100.*(p2d(i,k)-p2d(i,k+1)) diff --git a/physics/cu_gf_driver_post.F90 b/physics/cu_gf_driver_post.F90 index 59f43618c..5adf3ac42 100644 --- a/physics/cu_gf_driver_post.F90 +++ b/physics/cu_gf_driver_post.F90 @@ -69,7 +69,7 @@ subroutine cu_gf_driver_post_run (im, km, t, q, prevst, prevsq, cactiv, cactiv_m ze = 0.0 ze_conv = 0.0 dbz_sum = 0.0 - cuprate = max(0.1,1.e3*raincv(i) * 3600.0 / dt) ! cu precip rate (mm/h) + cuprate = 1.e3*raincv(i) * 3600.0 / dt ! cu precip rate (mm/h) if(cuprate .lt. 0.05) cuprate=0. ze_conv = 300.0 * cuprate**1.5 if (maxupmf(i).gt.0.1 .and. cuprate.gt.0.) then From a55ce5e69e85d93e6b28b303a92c9ad7087aad08 Mon Sep 17 00:00:00 2001 From: "Samuel Trahan (NOAA contractor)" <39415369+SamuelTrahanNOAA@users.noreply.github.com> Date: Thu, 28 Sep 2023 12:09:44 -0400 Subject: [PATCH 43/44] z => dz --- physics/clm_lake.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/clm_lake.f90 b/physics/clm_lake.f90 index da4712810..620f79a96 100644 --- a/physics/clm_lake.f90 +++ b/physics/clm_lake.f90 @@ -551,7 +551,7 @@ SUBROUTINE clm_lake_run( & do c = 2,column z_lake(c,:) = z_lake(1,:) - dz_lake(c,:) = z_lake(1,:) + dz_lake(c,:) = dz_lake(1,:) enddo ! Soil hydraulic and thermal properties From ab4d5f1206d5bb8a7550682612a84bf77e0bdbdc Mon Sep 17 00:00:00 2001 From: "Haiqin.Li" Date: Fri, 29 Sep 2023 02:49:39 +0000 Subject: [PATCH 44/44] "correct the dimension of soil moisture for dust emission" --- physics/smoke_dust/rrfs_smoke_wrapper.meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/physics/smoke_dust/rrfs_smoke_wrapper.meta b/physics/smoke_dust/rrfs_smoke_wrapper.meta index a0a641246..cddc20fbc 100755 --- a/physics/smoke_dust/rrfs_smoke_wrapper.meta +++ b/physics/smoke_dust/rrfs_smoke_wrapper.meta @@ -220,7 +220,7 @@ standard_name = volume_fraction_of_soil_moisture_for_land_surface_model long_name = volumetric fraction of soil moisture for lsm units = frac - dimensions = (horizontal_dimension,vertical_dimension_of_soil_internal_to_land_surface_scheme) + dimensions = (horizontal_loop_extent,vertical_dimension_of_soil_internal_to_land_surface_scheme) type = real kind = kind_phys intent = inout