diff --git a/schemes/cloud_fraction/compute_cloud_fraction_namelist.xml b/schemes/cloud_fraction/compute_cloud_fraction_namelist.xml index 18c511bd..f91074fe 100644 --- a/schemes/cloud_fraction/compute_cloud_fraction_namelist.xml +++ b/schemes/cloud_fraction/compute_cloud_fraction_namelist.xml @@ -133,6 +133,7 @@ 0.900D0 0.8975D0 0.8975D0 + 0.910D0 diff --git a/schemes/gravity_wave_drag/gw_common_namelist.xml b/schemes/gravity_wave_drag/gw_common_namelist.xml index 167d9543..1cc191ab 100644 --- a/schemes/gravity_wave_drag/gw_common_namelist.xml +++ b/schemes/gravity_wave_drag/gw_common_namelist.xml @@ -32,6 +32,7 @@ 2.5D0 + 0.D0 @@ -47,6 +48,7 @@ 10 + 0 @@ -63,6 +65,7 @@ 2.0D0 + 0.D0 @@ -94,6 +97,7 @@ .true. + .false. diff --git a/schemes/radiation_utils/prescribe_radiative_gas_concentrations.F90 b/schemes/radiation_utils/prescribe_radiative_gas_concentrations.F90 new file mode 100644 index 00000000..3fe7411a --- /dev/null +++ b/schemes/radiation_utils/prescribe_radiative_gas_concentrations.F90 @@ -0,0 +1,184 @@ +!------------------------------------------------------------------------------- +! This module uses namelist variable to set prescribed concentrations +! for radiatively-active gases. + +! Eventually this module should be replaced with a more comprehensive atmospheric +! composition/chemistry system, but is fine to use for now when running low-top, +! non-exoplanet CAM-SIMA configurations with minimal chemistry. +!------------------------------------------------------------------------------- +module prescribe_radiative_gas_concentrations + + implicit none + + private + public :: prescribe_radiative_gas_concentrations_init + + +!------------------------------------------------------------------------------- +contains +!------------------------------------------------------------------------------- + +!> \section arg_table_prescribe_radiative_gas_concentrations_init Argument Table +!! \htmlinclude prescribe_radiative_gas_concentrations_init.html +!! + subroutine prescribe_radiative_gas_concentrations_init(ch4_vmr, co2_vmr, cfc11_vmr, & + cfc12_vmr, n2o_vmr, const_array, & + errmsg, errcode) + + ! Use statements + use ccpp_constituent_prop_mod, only: int_unassigned + use ccpp_scheme_utils, only: ccpp_constituent_index + use ccpp_kinds, only: kind_phys + + ! Use statement from RRTMGP, + ! which should hopefully be replaced once + ! molar masses for these species are included + ! in the constituents properties themselves: + use radiation_utils, only: get_molar_mass_ratio + + + ! Input arguments + real(kind_phys), intent(in) :: ch4_vmr + real(kind_phys), intent(in) :: co2_vmr + real(kind_phys), intent(in) :: cfc11_vmr + real(kind_phys), intent(in) :: cfc12_vmr + real(kind_phys), intent(in) :: n2o_vmr + + ! Input/output arguments + real(kind_phys), intent(inout) :: const_array(:,:,:) ! Constituents array + + ! Output arguments + character(len=512), intent(out) :: errmsg + integer, intent(out) :: errcode + + ! Local variables + integer :: const_idx !Constituents object index + real(kind_phys) :: dry_air_to_const_molar_mass_ratio !Ratio of dry air molar mass to constituent molar mass + + !+++++++++++++++++++++++++++++++++++ + ! Convert number/mole fraction into + ! mass mixing ratio w.r.t dry air + !+++++++++++++++++++++++++++++++++++ + + !---- + ! CH4: + !---- + + ! Check if CH4 is present in constituents object: + call ccpp_constituent_index('CH4', const_idx, errcode, errmsg) + if (errcode /= 0) then + return + else if (const_idx /= int_unassigned) then + + ! Get ratio of molar mass of dry air / constituent molar mass + call get_molar_mass_ratio('CH4', dry_air_to_const_molar_mass_ratio, errmsg, errcode) + if (errcode /= 0) then + return + end if + + ! Convert namelist-provided number/mole fraction to + ! mass mixing ratio w.r.t. dry air, and set constituents + ! array to new coonverted value: + const_array(:,:,const_idx) = ch4_vmr*dry_air_to_const_molar_mass_ratio + + end if + + !---- + ! CO2: + !---- + + ! Check if CO2 is present in constituents object: + call ccpp_constituent_index('CO2', const_idx, errcode, errmsg) + if (errcode /= 0) then + return + else if (const_idx /= int_unassigned) then + + ! Get ratio of molar mass of dry air / constituent molar mass + call get_molar_mass_ratio('CO2', dry_air_to_const_molar_mass_ratio, errmsg, errcode) + if (errcode /= 0) then + return + end if + + ! Convert namelist-provided number/mole fraction to + ! mass mixing ratio w.r.t. dry air, and set constituents + ! array to new coonverted value: + const_array(:,:,const_idx) = co2_vmr*dry_air_to_const_molar_mass_ratio + + end if + + !------ + ! CFC11: + !------ + + ! Check if CFC-11 is present in constituents object: + call ccpp_constituent_index('CFC11', const_idx, errcode, errmsg) + if (errcode /= 0) then + return + else if (const_idx /= int_unassigned) then + + ! Get ratio of molar mass of dry air / constituent molar mass + call get_molar_mass_ratio('CFC11', dry_air_to_const_molar_mass_ratio, errmsg, errcode) + if (errcode /= 0) then + return + end if + + ! Convert namelist-provided number/mole fraction to + ! mass mixing ratio w.r.t. dry air, and set constituents + ! array to new coonverted value: + const_array(:,:,const_idx) = cfc11_vmr*dry_air_to_const_molar_mass_ratio + + end if + + !------ + ! CFC12: + !------ + + ! Check if CFC-12 is present in constituents object: + call ccpp_constituent_index('CFC12', const_idx, errcode, errmsg) + if (errcode /= 0) then + return + else if (const_idx /= int_unassigned) then + + ! Get ratio of molar mass of dry air / constituent molar mass + call get_molar_mass_ratio('CFC12', dry_air_to_const_molar_mass_ratio, errmsg, errcode) + if (errcode /= 0) then + return + end if + + ! Convert namelist-provided number/mole fraction to + ! mass mixing ratio w.r.t. dry air, and set constituents + ! array to new coonverted value: + const_array(:,:,const_idx) = cfc12_vmr*dry_air_to_const_molar_mass_ratio + + end if + + !---- + ! N2O: + !---- + + ! Check if N2O is present in constituents object: + call ccpp_constituent_index('N2O', const_idx, errcode, errmsg) + if (errcode /= 0) then + return + else if (const_idx /= int_unassigned) then + + ! Get ratio of molar mass of dry air / constituent molar mass + call get_molar_mass_ratio('N2O', dry_air_to_const_molar_mass_ratio, errmsg, errcode) + if (errcode /= 0) then + return + end if + + ! Convert namelist-provided number/mole fraction to + ! mass mixing ratio w.r.t. dry air, and set constituents + ! array to new coonverted value: + const_array(:,:,const_idx) = n2o_vmr*dry_air_to_const_molar_mass_ratio + + end if + + ! Set error variables + errmsg = '' + errcode = 0 + + end subroutine prescribe_radiative_gas_concentrations_init + +end module prescribe_radiative_gas_concentrations \ No newline at end of file diff --git a/schemes/radiation_utils/prescribe_radiative_gas_concentrations.meta b/schemes/radiation_utils/prescribe_radiative_gas_concentrations.meta new file mode 100644 index 00000000..55be49a4 --- /dev/null +++ b/schemes/radiation_utils/prescribe_radiative_gas_concentrations.meta @@ -0,0 +1,56 @@ +[ccpp-table-properties] + name = prescribe_radiative_gas_concentrations + type = scheme + dependencies = ../rrtmgp/utils/radiation_utils.F90 + +[ccpp-arg-table] + name = prescribe_radiative_gas_concentrations_init + type = scheme +[ ch4_vmr ] + standard_name = prescribed_volume_mixing_ratio_of_ch4 + units = mol mol-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ co2_vmr ] + standard_name = prescribed_volume_mixing_ratio_of_co2 + units = mol mol-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ cfc11_vmr ] + standard_name = prescribed_volume_mixing_ratio_of_cfc11 + units = mol mol-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ cfc12_vmr ] + standard_name = prescribed_volume_mixing_ratio_of_cfc12 + units = mol mol-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ n2o_vmr ] + standard_name = prescribed_volume_mixing_ratio_of_n2o + units = mol mol-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ const_array ] + standard_name = ccpp_constituents + units = none + type = real | kind = kind_phys + dimensions = (horizontal_dimension,vertical_layer_dimension,number_of_ccpp_constituents) + intent = inout +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errcode ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out diff --git a/schemes/radiation_utils/prescribe_radiative_gas_concentrations_namelist.xml b/schemes/radiation_utils/prescribe_radiative_gas_concentrations_namelist.xml new file mode 100644 index 00000000..7134e532 --- /dev/null +++ b/schemes/radiation_utils/prescribe_radiative_gas_concentrations_namelist.xml @@ -0,0 +1,157 @@ + + + + + + + + + real + kind_phys + ghg_cam + chem_surfvals + prescribed_volume_mixing_ratio_of_ch4 + mol mol-1 + + CH4 volume mixing ratio. This is used as the time invariant value + of CH4 if no time varying values are specified. + + + 1760.0e-9 + 1650.0e-9 + + + + real + kind_phys + ghg_cam + chem_surfvals + prescribed_volume_mixing_ratio_of_co2 + mol mol-1 + + CO2 volume mixing ratio. This is used as the time invariant value + of CO2 if no time varying values are specified. + + + 367.0e-6 + 348.0e-6 + + + + real + kind_phys + ghg_cam + chem_surfvals + prescribed_volume_mixing_ratio_of_cfc11 + mol mol-1 + + CFC-11 volume mixing ratio. This is used as the time invariant value + of CFC-11 if no time varying values are specified. + + + 653.45e-12 + + + + real + kind_phys + ghg_cam + chem_surfvals + prescribed_volume_mixing_ratio_of_cfc12 + mol mol-1 + + CFC-12 volume mixing ratio. This is used as the time invariant value + of CFC-12 if no time varying values are specified. + + + 535.0e-12 + + + + real + kind_phys + ghg_cam + chem_surfvals + prescribed_volume_mixing_ratio_of_n2o + mol mol-1 + + N2O volume mixing ratio. This is used as the time invariant value + of N2O if no time varying values are specified. + + + 316.0e-9 + 306.0e-9 + + + + diff --git a/schemes/radiation_utils/solar_irradiance_data_namelist.xml b/schemes/radiation_utils/solar_irradiance_data_namelist.xml index f1bfce2c..680eaeef 100644 --- a/schemes/radiation_utils/solar_irradiance_data_namelist.xml +++ b/schemes/radiation_utils/solar_irradiance_data_namelist.xml @@ -82,10 +82,13 @@ filename_of_solar_irradiance_data none - The filename of the solar irradiance data. + The filename of the solar irradiance data. If the file + path is set to "NONE" then it is assumed that a + constant solar irradiance is being used. ${DIN_LOC_ROOT}/atm/cam/solar/SolarForcingCMIP7piControl_c20250103.nc + NONE @@ -112,6 +115,7 @@ .true. + .false. @@ -152,6 +156,7 @@ -9999D0 + 1365.0 diff --git a/schemes/rasch_kristjansson/prognostic_cloud_water.F90 b/schemes/rasch_kristjansson/prognostic_cloud_water.F90 index d2f4d117..b239b42d 100644 --- a/schemes/rasch_kristjansson/prognostic_cloud_water.F90 +++ b/schemes/rasch_kristjansson/prognostic_cloud_water.F90 @@ -513,9 +513,13 @@ subroutine prognostic_cloud_water_run( & ! The cloud microphysics is highly nonlinear and coupled with qme ! Both rain processes and qme are calculated iteratively. qme_iter_loop: do l = 1, iter + + ! Adjust relative humidity above the tropopause in higher + ! latitude regions: + call relhum_min_adj(ncol, pver, tropLev, dlat, rhu00, rhu_adj) + qme_update_loop: do i = 1, ncol ! calculation of qme has 4 scenarios - call relhum_min_adj(ncol, pver, tropLev, dlat, rhu00, rhu_adj) if(relhum(i) > rhu_adj(i,k)) then ! 1. whole grid saturation diff --git a/schemes/rrtmgp/rrtmgp_constituents_namelist.xml b/schemes/rrtmgp/rrtmgp_constituents_namelist.xml index 670c2c82..8720ed53 100644 --- a/schemes/rrtmgp/rrtmgp_constituents_namelist.xml +++ b/schemes/rrtmgp/rrtmgp_constituents_namelist.xml @@ -86,7 +86,24 @@ calculation in RRTMGP (H2O not included because it is assumed to be advected if present). - 'N:O2:O2', 'A:CO2:CO2', 'N:ozone:O3', 'A:N2O:N2O', 'A:CH4:CH4', 'N:CFC11STAR:CFC11', 'A:CFC12:CFC12' + + 'N:O2:O2', + 'A:CO2:CO2', + 'N:ozone:O3', + 'A:N2O:N2O', + 'A:CH4:CH4', + 'N:CFC11STAR:CFC11', + 'A:CFC12:CFC12' + + + 'N:O2:O2', + 'N:CO2:CO2', + 'N:ozone:O3', + 'N:N2O:N2O', + 'N:CH4:CH4', + 'N:CFC11:CFC11', + 'N:CFC12:CFC12' + diff --git a/schemes/utilities/set_surface_coupling_vars.F90 b/schemes/utilities/set_surface_coupling_vars.F90 new file mode 100644 index 00000000..6e2eed6f --- /dev/null +++ b/schemes/utilities/set_surface_coupling_vars.F90 @@ -0,0 +1,201 @@ +!----------------------------------------------------------------------- +! Module to handle data that is exchanged between the atmosphere +! model and the surface models (land, sea-ice, ocean, etc.). + +! Please note that currently this is a SIMA-specific module, +! but could be made more host model-independent in the future. +!----------------------------------------------------------------------- +module set_surface_coupling_vars + + implicit none + private + + ! Public interfaces + public :: set_surface_coupling_vars_run + +!=============================================================================== +CONTAINS +!=============================================================================== + +!> \section arg_table_set_surface_coupling_vars_run Argument Table +!! \htmlinclude set_surface_coupling_vars_run.html +!! +subroutine set_surface_coupling_vars_run(ncol, pver, ncnst, gravit, rair, phis, & + surf_pres, air_temp, inv_ps_exner, zm, & + rho, uwnd, vwnd, air_pres, cnst_array, & + prec_dp, snow_dp, prec_sh, snow_sh, & + prec_str, snow_str, air_temp_bot, & + pot_temp_bot, zm_bot, rho_bot, & + uwnd_bot, vwnd_bot, air_pres_bot, & + topo_height, sea_lev_pres, cnst_bot, & + conv_prec, conv_snow, strat_prec, & + strat_snow, errmsg, errcode) + + ! Set surface variables needed for atmosphere-surface coupling. + + ! Use statements + use ccpp_kinds, only: kind_phys + + ! Input arguments + integer, intent(in) :: ncol + integer, intent(in) :: pver + integer, intent(in) :: ncnst + + real(kind_phys), intent(in) :: gravit ! Gravitational acceleration [m s-2] + real(kind_phys), intent(in) :: rair ! Dry air gas constant [J kg-1 K-1] + real(kind_phys), intent(in) :: phis(:) ! Surface geopotential [m2 s-2] + real(kind_phys), intent(in) :: surf_pres(:) ! Surface pressure [Pa] + real(kind_phys), intent(in) :: air_temp(:,:) ! Air temperature [K] + real(kind_phys), intent(in) :: inv_ps_exner(:,:) ! Inverse Exner function w.r.t. surface pressure [1] + real(kind_phys), intent(in) :: zm(:,:) ! Geopotential height wrt surface [m] + real(kind_phys), intent(in) :: rho(:,:) ! Dry air density [kg m-3] + real(kind_phys), intent(in) :: uwnd(:,:) ! Eastward wind [m s-1] + real(kind_phys), intent(in) :: vwnd(:,:) ! Northward wind [m s-1] + real(kind_phys), intent(in) :: air_pres(:,:) ! Air pressure [Pa] + real(kind_phys), intent(in) :: cnst_array(:,:,:) ! CCPP constituents array [none] + + real(kind_phys), intent(in) :: prec_dp(:) ! LWE deep convective precipitation (all phases) [m s-1] + real(kind_phys), intent(in) :: snow_dp(:) ! LWE deep convective frozen precipitation (e.g. snow) [m s-1] + real(kind_phys), intent(in) :: prec_sh(:) ! LWE shallow convective precipitation (all phases) [m s-1] + real(kind_phys), intent(in) :: snow_sh(:) ! LWE shallow convective frozen precipitation (all phases) [m s-1] + real(kind_phys), intent(in) :: prec_str(:) ! LWE stratiform precipitation (all phases) [m s-1] + real(kind_phys), intent(in) :: snow_str(:) ! LWE stratiform frozen precipitation (e.g. snow) [m s-1] + + ! Output arguments + real(kind_phys), intent(out) :: air_temp_bot(:) ! Air temperature at bottom of atmosphere for coupling [K] + real(kind_phys), intent(out) :: pot_temp_bot(:) ! Potential air temprature at bottom of atmosphere for coupling [K] + real(kind_phys), intent(out) :: zm_bot(:) ! Geopotential height wrt surface at bottom of atmosphere for coupling [m] + real(kind_phys), intent(out) :: rho_bot(:) ! Dry air density at bottom of atmosphere for coupling [kg m-3] + real(kind_phys), intent(out) :: uwnd_bot(:) ! Eastward wind at bottom of atmosphere for coupling [m s-1] + real(kind_phys), intent(out) :: vwnd_bot(:) ! Northward wind at bottom of atmosphere for coupling [m s-1] + real(kind_phys), intent(out) :: air_pres_bot(:) ! Air pressure at bottom of atmosphere for coupling [Pa] + real(kind_phys), intent(out) :: topo_height(:) ! Geopotential height of surface topography [m] + real(kind_phys), intent(out) :: sea_lev_pres(:) ! Sea Level Pressure [Pa] + real(kind_phys), intent(out) :: cnst_bot(:,:) ! Constituent mixing ratios at bottom of atmosphere for coupling [kg kg-1] + + real(kind_phys), intent(out) :: conv_prec(:) ! LWE Convective precipitation (all phases) [m s-1] + real(kind_phys), intent(out) :: conv_snow(:) ! LWE Frozen convective precipitation (e.g. snow) [m s-1] + real(kind_phys), intent(out) :: strat_prec(:) ! LWE Stratiform (large-scale) precipitation (all phases) [m s-1] + real(kind_phys), intent(out) :: strat_snow(:) ! LWE Frozen stratiform (large-scale)precipitation (e.g. snow) [m s-1] + + character(len=512), intent(out) :: errmsg ! CCPP error message + integer, intent(out) :: errcode ! CCPP error code + + ! Local variables + + integer :: i ! column index + integer :: m ! constituent index + + !----------------------------------------------------------------------- + + errmsg = '' + errcode = 0 + + ! Copy over atmospheric 3-D variables to surface fields: + do i=1,ncol + air_temp_bot(i) = air_temp(i,pver) + pot_temp_bot(i) = air_temp(i,pver) * inv_ps_exner(i,pver) + zm_bot(i) = zm(i,pver) + rho_bot(i) = rho(i,pver) + uwnd_bot(i) = uwnd(i,pver) + vwnd_bot(i) = vwnd(i,pver) + air_pres_bot(i) = air_pres(i,pver) + topo_height(i) = phis(i)/gravit + end do + + ! Calculate Sea Level Pressure (PSL): + call calc_sea_level_pressure(ncol, gravit, rair, air_pres_bot, phis, & + surf_pres, air_temp_bot, sea_lev_pres) + + ! Set surface constituent values: + do m = 1, ncnst + do i = 1, ncol + cnst_bot(i,m) = cnst_array(i,pver,m) + end do + end do + + ! + ! Precipation and snow rates from shallow convection, deep convection and stratiform processes. + ! Compute total convective and stratiform precipitation and snow rates + ! + do i=1,ncol + conv_prec(i) = prec_dp(i) + prec_sh(i) + conv_snow(i) = snow_dp(i) + snow_sh(i) + + strat_prec(i) = prec_str(i) !Might be better to have microphysics set these directly + strat_snow(i) = snow_str(i) + end do + +end subroutine set_surface_coupling_vars_run + +!*************************************************** +! private subroutine to calculate sea level pressure +!*************************************************** + +subroutine calc_sea_level_pressure(ncol, gravit, rair, pbot, phis, ps, tbot, psl) + +!----------------------------------------------------------------------- +! +! Compute sea level pressure. +! +! Uses ECMWF formulation Algorithm: See section 3.1.b in NCAR NT-396 "Vertical +! Interpolation and Truncation of Model-Coordinate Data +! +!----------------------------------------------------------------------- + + ! Use statements + use ccpp_kinds, only: kind_phys + + !-----------------------------Arguments--------------------------------- + integer , intent(in) :: ncol ! longitude dimension + + real(kind_phys), intent(in) :: gravit ! Gravitational acceleration [m s-2] + real(kind_phys), intent(in) :: rair ! gas constant for dry air [J kg-1 K-1] + real(kind_phys), intent(in) :: pbot(:) ! Bottom layer atmospheric pressure [Pa] + real(kind_phys), intent(in) :: phis(:) ! Surface geopotential [m2 s-2] + real(kind_phys), intent(in) :: ps(:) ! Surface air pressure [Pa] + real(kind_phys), intent(in) :: Tbot(:) ! Bottom layer Atmospheric temperature [K] + + real(kind_phys), intent(out):: psl(:) ! Sea level pressures [Pa] + + !-----------------------------Parameters-------------------------------- + real(kind_phys), parameter :: xlapse = 6.5e-3_kind_phys ! Temperature lapse rate [K m-1] + + !-----------------------------Local Variables--------------------------- + integer :: i ! Loop index + real(kind_phys) :: alpha ! Temperature lapse rate in terms of pressure ratio (unitless) + real(kind_phys) :: Tstar ! Computed surface temperature + real(kind_phys) :: TT0 ! Computed temperature at sea-level + real(kind_phys) :: alph ! Power to raise P/Ps to get rate of increase of T with pressure + real(kind_phys) :: beta ! alpha*phis/(R*T) term used in approximation of PSL + !----------------------------------------------------------------------- + + alpha = rair*xlapse/gravit + do i=1,ncol + if ( abs(phis(i)/gravit) < 1.e-4_kind_phys )then + psl(i)=ps(i) + else + Tstar=Tbot(i)*(1._kind_phys+alpha*(ps(i)/pbot(i)-1._kind_phys)) ! pg 7 eq 5 + + TT0=Tstar + xlapse*phis(i)/gravit ! pg 8 eq 13 + + if ( Tstar<=290.5_kind_phys .and. TT0>290.5_kind_phys ) then ! pg 8 eq 14.1 + alph=rair/phis(i)*(290.5_kind_phys-Tstar) + else if (Tstar>290.5_kind_phys .and. TT0>290.5_kind_phys) then ! pg 8 eq 14.2 + alph=0._kind_phys + Tstar= 0.5_kind_phys * (290.5_kind_phys + Tstar) + else + alph=alpha + if (Tstar<255._kind_phys) then + Tstar= 0.5_kind_phys * (255._kind_phys + Tstar) ! pg 8 eq 14.3 + end if + end if + + beta = phis(i)/(rair*Tstar) + psl(i)=ps(i)*exp( beta*(1._kind_phys-alph*beta/2._kind_phys+((alph*beta)**2)/3._kind_phys)) + end if + end do + +end subroutine calc_sea_level_pressure + +end module set_surface_coupling_vars diff --git a/schemes/utilities/set_surface_coupling_vars.meta b/schemes/utilities/set_surface_coupling_vars.meta new file mode 100644 index 00000000..73f32544 --- /dev/null +++ b/schemes/utilities/set_surface_coupling_vars.meta @@ -0,0 +1,240 @@ +[ccpp-table-properties] + name = set_surface_coupling_vars + type = scheme + +[ccpp-arg-table] + name = set_surface_coupling_vars_run + type = scheme + +#---------------- +#Input Arguments +#---------------- + +[ ncol ] + standard_name = horizontal_loop_extent + units = count + type = integer + dimensions = () + intent = in +[ pver ] + standard_name = vertical_layer_dimension + units = count + type = integer + dimensions = () + intent = in +[ ncnst ] + standard_name = number_of_ccpp_constituents + units = count + type = integer + dimensions = () + intent = in +[ gravit ] + standard_name = standard_gravitational_acceleration + units = m s-2 + type = real | kind = kind_phys + dimensions = () + intent = in +[ rair ] + standard_name = gas_constant_of_dry_air + units = J kg-1 K-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ phis ] + standard_name = surface_geopotential + type = real | kind = kind_phys + units = m2 s-2 + dimensions = (horizontal_loop_extent) + intent = in +[ surf_pres ] + standard_name = surface_air_pressure + type = real | kind = kind_phys + units = Pa + dimensions = (horizontal_loop_extent) + intent = in +[ air_temp ] + standard_name = air_temperature + type = real | kind = kind_phys + units = K + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ inv_ps_exner ] + standard_name = reciprocal_of_dimensionless_exner_function_wrt_surface_air_pressure + units = 1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ zm ] + standard_name = geopotential_height_wrt_surface + type = real | kind = kind_phys + units = m + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ rho ] + standard_name = dry_air_density + units = kg m-3 + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + type = real | kind = kind_phys + intent = in +[ uwnd ] + standard_name = eastward_wind + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ vwnd ] + standard_name = northward_wind + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ air_pres ] + standard_name = air_pressure + units = Pa + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ cnst_array ] + standard_name = ccpp_constituents + units = none + dimensions = (horizontal_loop_extent, vertical_layer_dimension, number_of_ccpp_constituents) + type = real | kind = kind_phys + intent = in +[ prec_dp ] + standard_name = lwe_precipitation_rate_at_surface_due_to_deep_convection + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ snow_dp ] + standard_name = lwe_frozen_precipitation_rate_at_surface_due_to_deep_convection + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ prec_sh ] + standard_name = lwe_precipitation_rate_at_surface_due_to_shallow_convection + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ snow_sh ] + standard_name = lwe_frozen_precipitation_rate_at_surface_due_to_shallow_convection + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ prec_str ] + standard_name = lwe_large_scale_precipitation_rate_at_surface + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ snow_str ] + standard_name = lwe_snow_and_cloud_ice_precipitation_rate_at_surface_due_to_microphysics + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in + +#---------------- +#Output Arguments +#---------------- + +[ air_temp_bot ] + standard_name = air_temperature_at_bottom_layer_to_coupler + units = K + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ pot_temp_bot ] + standard_name = potential_temperature_wrt_surface_pressure_at_bottom_layer_to_coupler + units = K + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ zm_bot ] + standard_name = geopotential_height_wrt_surface_at_bottom_layer_to_coupler + units = m + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ rho_bot ] + standard_name = dry_air_density_at_bottom_layer_to_coupler + units = kg m-3 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ uwnd_bot ] + standard_name = eastward_wind_at_bottom_layer_to_coupler + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ vwnd_bot ] + standard_name = northward_wind_at_bottom_layer_to_coupler + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ air_pres_bot ] + standard_name = air_pressure_at_bottom_layer_to_coupler + units = Pa + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ topo_height ] + standard_name = surface_topographic_height_to_coupler + units = m + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ sea_lev_pres ] + standard_name = air_pressure_at_sea_level_to_coupler + units = Pa + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ cnst_bot ] + standard_name = constituent_mixing_ratio_at_bottom_layer_to_coupler + units = kg kg-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, number_of_ccpp_constituents) + intent = out +[ conv_prec ] + standard_name = lwe_convective_precipitation_rate_at_surface_to_coupler + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ conv_snow ] + standard_name = lwe_convective_snowfall_rate_at_surface_to_coupler + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ strat_prec ] + standard_name = lwe_large_scale_precipitation_rate_at_surface_to_coupler + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ strat_snow ] + standard_name = lwe_large_scale_snowfall_rate_at_surface_to_coupler + units = m s-1 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = out +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=512 + dimensions = () + intent = out +[ errcode ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out + diff --git a/schemes/vertical_diffusion/vertical_diffusion_sponge_layer.meta b/schemes/vertical_diffusion/vertical_diffusion_sponge_layer.meta index d091f95c..9ee426cf 100644 --- a/schemes/vertical_diffusion/vertical_diffusion_sponge_layer.meta +++ b/schemes/vertical_diffusion/vertical_diffusion_sponge_layer.meta @@ -23,6 +23,12 @@ dimensions = () type = real | kind = kind_phys intent = in +[ diff_sponge_fac ] + standard_name = scale_factor_for_sponge_layer_vertical_diffusion + units = 1 + dimensions = () + type = real | kind = kind_phys + intent = in [ errmsg ] standard_name = ccpp_error_message units = none @@ -51,6 +57,12 @@ dimensions = () type = integer intent = in +[ diff_sponge_fac ] + standard_name = scale_factor_for_sponge_layer_vertical_diffusion + units = 1 + dimensions = () + type = real | kind = kind_phys + intent = in [ kvm ] standard_name = eddy_momentum_diffusivity_at_interfaces units = m2 s-1 diff --git a/schemes/zhang_mcfarlane/zm_conv_options_namelist.xml b/schemes/zhang_mcfarlane/zm_conv_options_namelist.xml index 001fde77..2ed47487 100644 --- a/schemes/zhang_mcfarlane/zm_conv_options_namelist.xml +++ b/schemes/zhang_mcfarlane/zm_conv_options_namelist.xml @@ -14,6 +14,7 @@ Autoconversion coefficient over land in ZM deep convection scheme. 0.0075D0 + 0.0035D0 @@ -27,6 +28,7 @@ Autoconversion coefficient over ocean in ZM deep convection scheme. 0.0300D0 + 0.0035D0 @@ -66,6 +68,8 @@ Tunable evaporation efficiency for land in ZM deep convection scheme. 1.0E-5 + 3.0E-6 + 3.0E-6 diff --git a/suites/suite_cam4.xml b/suites/suite_cam4.xml index 3a3f41c5..de4f1484 100644 --- a/suites/suite_cam4.xml +++ b/suites/suite_cam4.xml @@ -7,15 +7,15 @@ Shallow convection Hack Macrophysics RK Microphysics RK - Radiation RRTMGP (commented out) + Radiation RRTMGP Chemistry None (not implemented) Vertical Diffusion HB Gravity Wave Drag Orographic --> - - initialize_constituents + to_be_ccppized_temporary + prescribe_radiative_gas_concentrations zm_conv_options @@ -215,16 +215,16 @@ sima_state_diagnostics - + rrtmgp_cloud_diagnostics - + rrtmgp_lw_mcica_subcol_gen - + - + rrtmgp_diagnostics - + apply_heating_rate + geopotential_temp @@ -269,6 +269,12 @@ tropopause_find tropopause_diagnostics + + + calc_dry_air_ideal_gas_density + set_surface_coupling_vars + @@ -359,6 +365,7 @@ + gravity_wave_drag_common @@ -394,6 +401,7 @@ + check_energy_save_teout diff --git a/suites/suite_cam7.xml b/suites/suite_cam7.xml index b39cebe4..e7508b7f 100644 --- a/suites/suite_cam7.xml +++ b/suites/suite_cam7.xml @@ -5,7 +5,6 @@ - initialize_constituents to_be_ccppized_temporary @@ -75,6 +74,13 @@ check_energy_scaling check_energy_chng + + + + +