From 28bdd26590b364dc8a29cc25bb5c616df802e6da Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Fri, 12 May 2023 08:30:07 -0600 Subject: [PATCH 01/30] turn on hb where CLUBB not active when running cam_dev physics --- src/physics/cam/clubb_intr.F90 | 62 +++++++-------- src/physics/cam/vertical_diffusion.F90 | 102 ++++++++++++++++++------- 2 files changed, 105 insertions(+), 59 deletions(-) diff --git a/src/physics/cam/clubb_intr.F90 b/src/physics/cam/clubb_intr.F90 index 8a9c35bfd2..6348634ef0 100644 --- a/src/physics/cam/clubb_intr.F90 +++ b/src/physics/cam/clubb_intr.F90 @@ -17,16 +17,17 @@ module clubb_intr ! ! !----------------------------------------------------------------------------------------------------- ! - use shr_kind_mod, only: r8=>shr_kind_r8 - use ppgrid, only: pver, pverp, pcols, begchunk, endchunk - use phys_control, only: phys_getopts - use physconst, only: cpair, gravit, rga, latvap, latice, zvir, rh2o, karman - use air_composition, only: rairv, cpairv + use shr_kind_mod, only: r8=>shr_kind_r8 + use ppgrid, only: pver, pverp, pcols, begchunk, endchunk + use phys_control, only: phys_getopts + use physconst, only: cpair, gravit, rga, latvap, latice, zvir, rh2o + use air_composition, only: rairv, cpairv + use cam_history_support, only: max_fieldname_len use spmd_utils, only: masterproc use constituents, only: pcnst, cnst_add use pbl_utils, only: calc_ustar, calc_obklen - use ref_pres, only: top_lev => trop_cloud_top_lev + use ref_pres, only: top_lev => trop_cloud_top_lev use zm_conv_intr, only: zmconv_microp #ifdef CLUBB_SGS use clubb_api_module, only: pdf_parameter, implicit_coefs_terms @@ -389,7 +390,8 @@ module clubb_intr qsatfac_idx, & ! subgrid cloud water saturation scaling factor ice_supersat_idx, & ! ice cloud fraction for SILHS rcm_idx, & ! Cloud water mixing ratio for SILHS - ztodt_idx ! physics timestep for SILHS + ztodt_idx,& ! physics timestep for SILHS + clubbtop_idx ! level index for CLUBB top ! Indices for microphysical covariance tendencies integer :: & @@ -466,8 +468,10 @@ subroutine clubb_register_cam( ) !------------------------------------------------ ! ! Add CLUBB fields to pbuf - use physics_buffer, only: pbuf_add_field, dtype_r8, dyn_time_lvls + use physics_buffer, only: pbuf_add_field, dtype_r8, dtype_i4, dyn_time_lvls, pbuf_get_index use subcol_utils, only: subcol_get_scheme + + integer :: err_idx, idx call phys_getopts( eddy_scheme_out = eddy_scheme, & deep_scheme_out = deep_scheme, & @@ -498,10 +502,15 @@ subroutine clubb_register_cam( ) call cnst_add(trim(cnst_names(9)),0._r8,0._r8,0._r8,ixvp2,longname='CLUBB 2nd moment v wind',cam_outfld=.false.) end if + call pbuf_add_field('clubbtop', 'physpkg', dtype_i4, (/pcols/), clubbtop_idx) + ! put pbuf_add calls here (see macrop_driver.F90 for sample) use indicies defined at top call pbuf_add_field('pblh', 'global', dtype_r8, (/pcols/), pblh_idx) call pbuf_add_field('tke', 'global', dtype_r8, (/pcols, pverp/), tke_idx) - call pbuf_add_field('kvh', 'global', dtype_r8, (/pcols, pverp/), kvh_idx) + idx = pbuf_get_index('kvh',errcode=err_idx) + if (err_idx == -1) then + call pbuf_add_field('kvh', 'global', dtype_r8, (/pcols, pverp/), kvh_idx) + end if call pbuf_add_field('tpert', 'global', dtype_r8, (/pcols/), tpert_idx) call pbuf_add_field('AST', 'global', dtype_r8, (/pcols,pver,dyn_time_lvls/), ast_idx) call pbuf_add_field('AIST', 'global', dtype_r8, (/pcols,pver,dyn_time_lvls/), aist_idx) @@ -1272,8 +1281,6 @@ subroutine clubb_ini_cam(pbuf2d) ! From CAM libraries use cam_history, only: addfld, add_default, horiz_only - use ref_pres, only: pref_mid - use hb_diff, only: init_hb_diff use rad_constituents, only: rad_cnst_get_info, rad_cnst_get_mode_num_idx, rad_cnst_get_mam_mmr_idx use cam_abortutils, only: endrun @@ -1337,8 +1344,6 @@ subroutine clubb_ini_cam(pbuf2d) integer :: err_code ! Code for when CLUBB fails integer :: i, j, k, l ! Indices - integer :: ntop_eddy ! Top interface level to which eddy vertical diffusion is applied ( = 1 ) - integer :: nbot_eddy ! Bottom interface level to which eddy vertical diffusion is applied ( = pver ) integer :: nmodes, nspec, m integer :: ixq, ixcldice, ixcldliq, ixnumliq, ixnumice integer :: lptr @@ -1643,17 +1648,6 @@ subroutine clubb_ini_cam(pbuf2d) write(iulog,'(a,i0,a)') " CLUBB configurable flags " call print_clubb_config_flags_api( iulog, clubb_config_flags ) ! Intent(in) end if - - ! ----------------------------------------------------------------- ! - ! Set-up HB diffusion. Only initialized to diagnose PBL depth ! - ! ----------------------------------------------------------------- ! - - ! Initialize eddy diffusivity module - - ntop_eddy = 1 ! if >1, must be <= nbot_molec - nbot_eddy = pver ! currently always pver - - call init_hb_diff( gravit, cpair, ntop_eddy, nbot_eddy, pref_mid, karman, eddy_scheme ) ! ----------------------------------------------------------------- ! ! Add output fields for the history files @@ -1957,6 +1951,7 @@ subroutine clubb_tend_cam( state, ptend_all, pbuf, hdtime, & physics_ptend_sum, physics_update, set_wet_to_dry use physics_buffer, only: pbuf_old_tim_idx, pbuf_get_field, physics_buffer_desc + use physics_buffer, only: pbuf_set_field use constituents, only: cnst_get_ind, cnst_type use camsrfexch, only: cam_in_t @@ -1965,7 +1960,7 @@ subroutine clubb_tend_cam( state, ptend_all, pbuf, hdtime, & use cam_logfile, only: iulog use tropopause, only: tropopause_findChemTrop use time_manager, only: get_nstep, is_first_restart_step - + use phys_control, only: cam_physpkg_is #ifdef CLUBB_SGS use hb_diff, only: pblintd use scamMOD, only: single_column,scm_clubb_iop_name @@ -3641,7 +3636,14 @@ subroutine clubb_tend_cam( state, ptend_all, pbuf, hdtime, & clubbtop(i) = clubbtop(i) + 1 end do end do - + ! + ! set pbuf field so that HB scheme only is applied above CLUBB top + ! + if (cam_physpkg_is("cam_dev")) then + call pbuf_set_field(pbuf, clubbtop_idx, clubbtop) + endif + + ! Compute integrals for static energy, kinetic energy, water vapor, and liquid water ! after CLUBB is called. This is for energy conservation purposes. se_a(:) = 0._r8 @@ -4305,7 +4307,7 @@ subroutine clubb_tend_cam( state, ptend_all, pbuf, hdtime, & temp1 = trim(stats_zt(1)%file%grid_avg_var(j)%name) sub = temp1 - if (len(temp1) > 16) sub = temp1(1:16) + if (len(temp1) > max_fieldname_len) sub = temp1(1:max_fieldname_len) call outfld(trim(sub), out_zt(:,:,j), pcols, lchnk ) enddo @@ -4314,7 +4316,7 @@ subroutine clubb_tend_cam( state, ptend_all, pbuf, hdtime, & temp1 = trim(stats_zm(1)%file%grid_avg_var(j)%name) sub = temp1 - if (len(temp1) > 16) sub = temp1(1:16) + if (len(temp1) > max_fieldname_len) sub = temp1(1:max_fieldname_len) call outfld(trim(sub),out_zm(:,:,j), pcols, lchnk) enddo @@ -5020,7 +5022,7 @@ subroutine stats_init_clubb( l_stats_in, stats_tsamp_in, stats_tout_in, & temp1 = trim(stats_zt%file%grid_avg_var(i)%name) sub = temp1 - if (len(temp1) > 16) sub = temp1(1:16) + if (len(temp1) > max_fieldname_len) sub = temp1(1:max_fieldname_len) call addfld(trim(sub),(/ 'ilev' /),& 'A',trim(stats_zt%file%grid_avg_var(i)%units),trim(stats_zt%file%grid_avg_var(i)%description)) @@ -5030,7 +5032,7 @@ subroutine stats_init_clubb( l_stats_in, stats_tsamp_in, stats_tout_in, & temp1 = trim(stats_zm%file%grid_avg_var(i)%name) sub = temp1 - if (len(temp1) > 16) sub = temp1(1:16) + if (len(temp1) > max_fieldname_len) sub = temp1(1:max_fieldname_len) call addfld(trim(sub),(/ 'ilev' /),& 'A',trim(stats_zm%file%grid_avg_var(i)%units),trim(stats_zm%file%grid_avg_var(i)%description)) diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index dd2cc721f3..e94a158a91 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -205,19 +205,21 @@ subroutine vd_register() ! Register physics buffer fields and constituents ! !------------------------------------------------ ! - use physics_buffer, only : pbuf_add_field, dtype_r8, dtype_i4 + use physics_buffer, only : pbuf_add_field, dtype_r8, dtype_i4, pbuf_get_index use trb_mtn_stress_cam, only : trb_mtn_stress_register use beljaars_drag_cam, only : beljaars_drag_register use eddy_diff_cam, only : eddy_diff_register + integer :: err_idx, idx + ! Add fields to physics buffer ! kvt is used by gw_drag. only needs physpkg scope. call pbuf_add_field('kvt', 'physpkg', dtype_r8, (/pcols,pverp/), kvt_idx) - - if (eddy_scheme /= 'CLUBB_SGS') then - call pbuf_add_field('kvh', 'global', dtype_r8, (/pcols, pverp/), kvh_idx) + idx = pbuf_get_index('kvh',errcode=err_idx) + if (err_idx == -1) then + call pbuf_add_field('kvh', 'global', dtype_r8, (/pcols, pverp/), kvh_idx) end if call pbuf_add_field('kvm', 'global', dtype_r8, (/pcols, pverp/), kvm_idx ) @@ -276,7 +278,7 @@ subroutine vertical_diffusion_init(pbuf2d) use trb_mtn_stress_cam,only : trb_mtn_stress_init use beljaars_drag_cam, only : beljaars_drag_init use upper_bc, only : ubc_init - use phys_control, only : waccmx_is, fv_am_correction + use phys_control, only : waccmx_is, fv_am_correction, cam_physpkg_is type(physics_buffer_desc), pointer :: pbuf2d(:,:) character(128) :: errstring ! Error status for init_vdiff @@ -284,7 +286,7 @@ subroutine vertical_diffusion_init(pbuf2d) integer :: nbot_eddy ! Bottom interface level to which eddy vertical diffusion is applied ( = pver ) integer :: k ! Vertical loop index - real(r8), parameter :: ntop_eddy_pres = 1.e-5_r8 ! Pressure below which eddy diffusion is not done in WACCM-X. (Pa) + real(r8), parameter :: ntop_eddy_pres = 1.e-7_r8 ! Pressure below which eddy diffusion is not done in WACCM-X. (Pa) integer :: im, l, m, nmodes, nspec @@ -401,6 +403,19 @@ subroutine vertical_diffusion_init(pbuf2d) call addfld('HB_ri', (/ 'lev' /), 'A', 'no', 'Richardson Number (HB Scheme), I' ) case ( 'CLUBB_SGS' ) do_pbl_diags = .true. + call init_hb_diff(gravit, cpair, ntop_eddy, nbot_eddy, pref_mid, & + karman, eddy_scheme) + ! + ! run HB scheme where CLUBB is not active when running cam_dev + ! else init_hb_diff is called just for diagnostic purposes + ! + if (cam_physpkg_is("cam_dev")) then + if( masterproc ) then + write(iulog,*) 'vertical_diffusion_init: ' + write(iulog,*) 'eddy_diffusivity scheme where CLUBB is not active: Holtslag and Boville' + end if + call addfld('HB_ri', (/ 'lev' /), 'A', 'no', 'Richardson Number (HB Scheme), I' ) + end if end select ! ------------------------------------------- ! @@ -649,6 +664,7 @@ subroutine vertical_diffusion_tend( & ! This is an interface routine for vertical diffusion ! !---------------------------------------------------- ! use physics_buffer, only : physics_buffer_desc, pbuf_get_field, pbuf_set_field + use physics_buffer, only : pbuf_get_index use physics_types, only : physics_state, physics_ptend, physics_ptend_init use physics_types, only : set_dry_to_wet, set_wet_to_dry @@ -839,6 +855,8 @@ subroutine vertical_diffusion_tend( & real(r8) :: tauy(pcols) real(r8) :: shflux(pcols) real(r8) :: cflux(pcols,pcnst) + integer :: clubbtop_idx + integer, pointer :: clubbtop(:) ! (pcols) logical :: lq(pcnst) @@ -979,6 +997,7 @@ subroutine vertical_diffusion_tend( & ! Modification : We may need to use 'taux' instead of 'tautotx' here, for ! consistency with the previous HB scheme. + call compute_hb_diff( lchnk , ncol , & th , state%t , state%q , state%zm , state%zi, & state%pmid, state%u , state%v , tautotx , tautoty , & @@ -992,29 +1011,54 @@ subroutine vertical_diffusion_tend( & case ( 'CLUBB_SGS' ) - ! CLUBB has only a bare-bones placeholder here. If using CLUBB, the - ! PBL diffusion will happen before coupling, so vertical_diffusion - ! is only handling other things, e.g. some boundary conditions, tms, - ! and molecular diffusion. - - call virtem(ncol, th(:ncol,pver),state%q(:ncol,pver,1), thvs(:ncol)) - - call calc_ustar( ncol, state%t(:ncol,pver), state%pmid(:ncol,pver), & - cam_in%wsx(:ncol), cam_in%wsy(:ncol), rrho(:ncol), ustar(:ncol)) - ! Use actual qflux, not lhf/latvap as was done previously - call calc_obklen( ncol, th(:ncol,pver), thvs(:ncol), cam_in%cflx(:ncol,1), & - cam_in%shf(:ncol), rrho(:ncol), ustar(:ncol), & - khfs(:ncol), kqfs(:ncol), kbfs(:ncol), obklen(:ncol)) - - ! These tendencies all applied elsewhere. - kvm = 0._r8 - kvh = 0._r8 - kvq = 0._r8 - - ! Not defined since PBL is not actually running here. - cgh = 0._r8 - cgs = 0._r8 - + ! + ! run HB scheme where CLUBB is not active when running cam_dev + ! + if (cam_physpkg_is("cam_dev")) then + call compute_hb_diff( lchnk , ncol , & + th , state%t , state%q , state%zm , state%zi, & + state%pmid, state%u , state%v , tautotx , tautoty , & + cam_in%shf, cam_in%cflx(:,1), obklen , ustar , pblh , & + kvm , kvh , kvq , cgh , cgs , & + tpert , qpert , cldn , cam_in%ocnfrac , tke , & + ri , & + eddy_scheme ) + clubbtop_idx = pbuf_get_index('clubbtop') + call pbuf_get_field(pbuf, clubbtop_idx, clubbtop) + + do i=1,ncol + do k=clubbtop(i),pverp + kvm(i,k) = 0.0_r8 + kvh(i,k) = 0.0_r8 + kvq(i,k) = 0.0_r8 + cgs(i,k) = 0.0_r8 + cgh(i,k) = 0.0_r8 + end do + end do + + call outfld( 'HB_ri', ri, pcols, lchnk ) + else + ! CLUBB has only a bare-bones placeholder here. If using CLUBB, the + ! PBL diffusion will happen before coupling, so vertical_diffusion + ! is only handling other things, e.g. some boundary conditions, tms, + ! and molecular diffusion. + + call virtem(ncol, th(:ncol,pver),state%q(:ncol,pver,1), thvs(:ncol)) + + call calc_ustar( ncol, state%t(:ncol,pver), state%pmid(:ncol,pver), & + cam_in%wsx(:ncol), cam_in%wsy(:ncol), rrho(:ncol), ustar(:ncol)) + ! Use actual qflux, not lhf/latvap as was done previously + call calc_obklen( ncol, th(:ncol,pver), thvs(:ncol), cam_in%cflx(:ncol,1), & + cam_in%shf(:ncol), rrho(:ncol), ustar(:ncol), & + khfs(:ncol), kqfs(:ncol), kbfs(:ncol), obklen(:ncol)) + ! These tendencies all applied elsewhere. + kvm = 0._r8 + kvh = 0._r8 + kvq = 0._r8 + ! Not defined since PBL is not actually running here. + cgh = 0._r8 + cgs = 0._r8 + end if end select call outfld( 'ustar', ustar(:), pcols, lchnk ) From 634d694199e8acedfc33fec58989e38d73d25267 Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Wed, 21 Jun 2023 10:07:32 -0600 Subject: [PATCH 02/30] only scale divergence damping if there is scaling to do --- src/dynamics/se/dycore/global_norms_mod.F90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/dynamics/se/dycore/global_norms_mod.F90 b/src/dynamics/se/dycore/global_norms_mod.F90 index 843fd88bc7..10fa4a96da 100644 --- a/src/dynamics/se/dycore/global_norms_mod.F90 +++ b/src/dynamics/se/dycore/global_norms_mod.F90 @@ -681,7 +681,9 @@ subroutine print_cfl(elem,hybrid,nets,nete,dtnu,ptop,pmid,& do k=1,nlev ! Vertical profile from FV dycore (see Lauritzen et al. 2012 DOI:10.1177/1094342011410088) scale1 = 0.5_r8*(1.0_r8+tanh(2.0_r8*log(pmid(sponge_del4_lev)/pmid(k)))) - nu_div_lev(k) = (1.0_r8-scale1)*nu_div+scale1*nu_div_max + if (sponge_del4_nu_div_fac.ne.1.0_r8) then + nu_div_lev(k) = (1.0_r8-scale1)*nu_div+scale1*nu_div_max + end if if (sponge_del4_nu_fac.ne.1.0_r8) then nu_lev(k) = (1.0_r8-scale1)*nu +scale1*nu_max nu_t_lev(k) = (1.0_r8-scale1)*nu_p +scale1*nu_max From 3b795d66cd163175f6fbc342570698bdf7974065 Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Wed, 21 Jun 2023 17:25:38 -0600 Subject: [PATCH 03/30] change to namelist (instead of keying off cam_dev in code) --- bld/build-namelist | 3 +++ bld/namelist_files/namelist_defaults_cam.xml | 3 ++- bld/namelist_files/namelist_definition.xml | 7 +++++++ src/physics/cam/clubb_intr.F90 | 21 +++++++++++--------- src/physics/cam/vertical_diffusion.F90 | 11 +++++----- 5 files changed, 30 insertions(+), 15 deletions(-) diff --git a/bld/build-namelist b/bld/build-namelist index 8e7ea8d2b2..168aac65a1 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -3316,6 +3316,9 @@ if ($clubb_sgs =~ /$TRUE/io) { add_default($nl, 'clubb_mf_L0'); add_default($nl, 'clubb_mf_ent0'); add_default($nl, 'clubb_mf_nup'); + + #Turn on HB scheme where CLUBB not active + add_default($nl, 'clubb_do_hb_above'); } # Force exit if running cam_dev and CLUBB is off diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index d69b278d90..516185a9e7 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -2072,7 +2072,8 @@ 1 2.0 60.0 - +.false. +.true. .true. 0.2 diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index 5698285ef2..a31770bf2d 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -4180,6 +4180,13 @@ Real: number of plumes in mass flux ensemble Default: 10 + +Logical: If True activate Holtslag and Boville PBL scheme where CLUBB is not active + (note that CLUBB top is dynamic in each column) +Default: none + + Date: Wed, 28 Jun 2023 16:30:44 -0600 Subject: [PATCH 04/30] new implementation only applying free atmosphere HB (not PBL part) Thanks for Thomas Toniazzo --- src/physics/cam/hb_diff.F90 | 99 ++++++++++++++++++++++++-- src/physics/cam/vertical_diffusion.F90 | 26 ++++--- 2 files changed, 107 insertions(+), 18 deletions(-) diff --git a/src/physics/cam/hb_diff.F90 b/src/physics/cam/hb_diff.F90 index f1b67d68a0..4b0147e4fd 100644 --- a/src/physics/cam/hb_diff.F90 +++ b/src/physics/cam/hb_diff.F90 @@ -35,6 +35,7 @@ module hb_diff ! Public interfaces public init_hb_diff public compute_hb_diff + public compute_hb_free_atm_diff public pblintd ! ! PBL limits @@ -139,8 +140,8 @@ subroutine compute_hb_diff(lchnk, ncol, & tpert ,qpert ,cldn ,ocnfrac ,tke , & ri , & eddy_scheme) - !----------------------------------------------------------------------- - ! + !----------------------------------------------------------------------- + ! ! Purpose: ! Interface routines for calcualtion and diatnostics of turbulence related ! coefficients @@ -196,8 +197,8 @@ subroutine compute_hb_diff(lchnk, ncol, & real(r8) :: rrho(pcols) ! 1./bottom level density real(r8) :: wstar(pcols) ! convective velocity scale [m/s] real(r8) :: kqfs(pcols) ! kinematic surf constituent flux (kg/m2/s) - real(r8) :: khfs(pcols) ! kinimatic surface heat flux - real(r8) :: kbfs(pcols) ! surface buoyancy flux + real(r8) :: khfs(pcols) ! kinimatic surface heat flux + real(r8) :: kbfs(pcols) ! surface buoyancy flux real(r8) :: kvf(pcols,pverp) ! free atmospheric eddy diffsvty [m2/s] real(r8) :: s2(pcols,pver) ! shear squared real(r8) :: n2(pcols,pver) ! brunt vaisaila frequency @@ -247,6 +248,96 @@ subroutine compute_hb_diff(lchnk, ncol, & return end subroutine compute_hb_diff + + subroutine compute_hb_free_atm_diff(lchnk, ncol, & + th ,t ,q ,z , & + pmid ,u ,v ,taux ,tauy , & + shflx ,qflx ,obklen ,ustar , & + kvm ,kvh ,kvq ,cgh ,cgs , & + ri ,eddy_scheme) + !----------------------------------------------------------------------- + ! + ! This is a version of compute_hb_diff that only computes free + ! atmosphere exchange (no PBL computations) + ! + ! Author: B. Stevens (rewrite August 2000) + ! Modified by Thomas Toniazzo and Peter H. Lauritzen (June 2023) + ! + !----------------------------------------------------------------------- + + use pbl_utils, only: virtem, calc_ustar, calc_obklen, austausch_atm + + !------------------------------Arguments-------------------------------- + ! + ! Input arguments + ! + integer, intent(in) :: lchnk ! chunk index (for debug only) + integer, intent(in) :: ncol ! number of atmospheric columns + + real(r8), intent(in) :: th(pcols,pver) ! potential temperature [K] + real(r8), intent(in) :: t(pcols,pver) ! temperature (used for density) + real(r8), intent(in) :: q(pcols,pver) ! specific humidity [kg/kg] + real(r8), intent(in) :: z(pcols,pver) ! height above surface [m] + real(r8), intent(in) :: u(pcols,pver) ! zonal velocity + real(r8), intent(in) :: v(pcols,pver) ! meridional velocity + real(r8), intent(in) :: taux(pcols) ! zonal stress [N/m2] + real(r8), intent(in) :: tauy(pcols) ! meridional stress [N/m2] + real(r8), intent(in) :: shflx(pcols) ! sensible heat flux + real(r8), intent(in) :: qflx(pcols) ! water vapor flux + real(r8), intent(in) :: pmid(pcols,pver) ! midpoint pressures + character(len=16), intent(in) :: eddy_scheme + ! + ! Output arguments + ! + real(r8), intent(out) :: kvm(pcols,pverp) ! eddy diffusivity for momentum [m2/s] + real(r8), intent(out) :: kvh(pcols,pverp) ! eddy diffusivity for heat [m2/s] + real(r8), intent(out) :: kvq(pcols,pverp) ! eddy diffusivity for constituents [m2/s] + real(r8), intent(out) :: cgh(pcols,pverp) ! counter-gradient term for heat [J/kg/m] + real(r8), intent(out) :: cgs(pcols,pverp) ! counter-gradient star (cg/flux) + real(r8), intent(out) :: ustar(pcols) ! surface friction velocity [m/s] + real(r8), intent(out) :: obklen(pcols) ! Obukhov length + real(r8), intent(out) :: ri(pcols,pver) ! richardson number: n2/s2 + ! + !---------------------------Local workspace----------------------------- + ! + real(r8) :: thv(pcols,pver) ! virtual temperature + real(r8) :: rrho(pcols) ! 1./bottom level density + real(r8) :: kqfs(pcols) ! kinematic surf constituent flux (kg/m2/s) + real(r8) :: khfs(pcols) ! kinimatic surface heat flux + real(r8) :: kbfs(pcols) ! surface buoyancy flux + real(r8) :: kvf(pcols,pverp) ! free atmospheric eddy diffsvty [m2/s] + real(r8) :: s2(pcols,pver) ! shear squared + real(r8) :: n2(pcols,pver) ! brunt vaisaila frequency + + ! virtual temperature + call virtem(ncol, (pver-ntop_turb+1), th(:ncol,ntop_turb:),q(:ncol,ntop_turb:), thv(:ncol,ntop_turb:)) + + ! Compute ustar, Obukhov length, and kinematic surface fluxes. + call calc_ustar(ncol, t(:ncol,pver),pmid(:ncol,pver),taux(:ncol),tauy(:ncol), & + rrho(:ncol),ustar(:ncol)) + call calc_obklen(ncol, th(:ncol,pver), thv(:ncol,pver), qflx(:ncol), & + shflx(:ncol), rrho(:ncol), ustar(:ncol), & + khfs(:ncol), kqfs(:ncol), kbfs(:ncol), & + obklen(:ncol)) + ! Calculate s2, n2, and Richardson number. + call trbintd(ncol , & + thv ,z ,u ,v , & + s2 ,n2 ,ri ) + ! + ! Get free atmosphere exchange coefficients + ! + call austausch_atm(pcols, ncol, pver, ntop_turb, nbot_turb, & + ml2, ri, s2, kvf) + + kvq(:ncol,:) = kvf(:ncol,:) + kvm(:ncol,:) = kvf(:ncol,:) + kvh(:ncol,:) = kvf(:ncol,:) + cgh(:ncol,:) = 0._r8 + cgs(:ncol,:) = 0._r8 + return + end subroutine compute_hb_free_atm_diff + + ! !=============================================================================== subroutine trbintd(ncol , & diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index c93c7be5b6..242a49409f 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -674,7 +674,7 @@ subroutine vertical_diffusion_tend( & use trb_mtn_stress_cam, only : trb_mtn_stress_tend use beljaars_drag_cam, only : beljaars_drag_tend use eddy_diff_cam, only : eddy_diff_tend - use hb_diff, only : compute_hb_diff + use hb_diff, only : compute_hb_diff, compute_hb_free_atm_diff use wv_saturation, only : qsat use molec_diff, only : compute_molec_diff, vd_lu_qdecomp use constituents, only : qmincg, qmin, cnst_type @@ -998,14 +998,14 @@ subroutine vertical_diffusion_tend( & ! consistency with the previous HB scheme. - call compute_hb_diff( lchnk , ncol , & - th , state%t , state%q , state%zm , state%zi, & - state%pmid, state%u , state%v , tautotx , tautoty , & - cam_in%shf, cam_in%cflx(:,1), obklen , ustar , pblh , & - kvm , kvh , kvq , cgh , cgs , & - tpert , qpert , cldn , cam_in%ocnfrac , tke , & + call compute_hb_diff( lchnk , ncol , & + th , state%t , state%q , state%zm , state%zi , & + state%pmid, state%u , state%v , tautotx , tautoty , & + cam_in%shf, cam_in%cflx(:,1), obklen , ustar , pblh , & + kvm , kvh , kvq , cgh , cgs , & + tpert , qpert , cldn , cam_in%ocnfrac , tke , & ri , & - eddy_scheme ) + eddy_scheme) call outfld( 'HB_ri', ri, pcols, lchnk ) @@ -1014,14 +1014,12 @@ subroutine vertical_diffusion_tend( & ! run HB scheme where CLUBB is not active when running cam_dev ! if (clubb_do_hb_above) then - call compute_hb_diff( lchnk , ncol , & - th , state%t , state%q , state%zm , state%zi, & + call compute_hb_free_atm_diff( lchnk , ncol , & + th , state%t , state%q , state%zm , & state%pmid, state%u , state%v , tautotx , tautoty , & - cam_in%shf, cam_in%cflx(:,1), obklen , ustar , pblh , & + cam_in%shf, cam_in%cflx(:,1), obklen , ustar , & kvm , kvh , kvq , cgh , cgs , & - tpert , qpert , cldn , cam_in%ocnfrac , tke , & - ri , & - eddy_scheme ) + ri , eddy_scheme) clubbtop_idx = pbuf_get_index('clubbtop') call pbuf_get_field(pbuf, clubbtop_idx, clubbtop) ! From e06b6128d6ed7c0ccbaa834712ea7fb9fa1c5ab1 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Wed, 5 Jul 2023 11:18:41 -0600 Subject: [PATCH 05/30] revert ntop_eddy_pres to prev -5 values and allow clubb_do_hb_above to be active for cam6 as well as cam_dev --- bld/namelist_files/namelist_defaults_cam.xml | 1 + src/physics/cam/vertical_diffusion.F90 | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index 448c70f87d..274f4ab265 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -2116,6 +2116,7 @@ 60.0 .false. .true. +.true. .true. 0.2 diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index 242a49409f..32e12e077a 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -286,7 +286,7 @@ subroutine vertical_diffusion_init(pbuf2d) integer :: nbot_eddy ! Bottom interface level to which eddy vertical diffusion is applied ( = pver ) integer :: k ! Vertical loop index - real(r8), parameter :: ntop_eddy_pres = 1.e-7_r8 ! Pressure below which eddy diffusion is not done in WACCM-X. (Pa) + real(r8), parameter :: ntop_eddy_pres = 1.e-5_r8 ! Pressure below which eddy diffusion is not done in WACCM-X. (Pa) integer :: im, l, m, nmodes, nspec From 7c64f41a2d8b8490369de69aa3790b7ba50b7454 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Wed, 5 Jul 2023 12:36:26 -0600 Subject: [PATCH 06/30] forgot to add that I updated to cam6_3_117 in last commit, this commit added changelog boilerplate for this PR and fixed comment in vertical_diffusion (adding this change to cam6 and cam_dev) --- doc/ChangeLog | 63 ++++++++++++++++++++++++++ src/physics/cam/vertical_diffusion.F90 | 9 ++-- 2 files changed, 66 insertions(+), 6 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 4131d5c1ba..9d194b26b8 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,4 +1,67 @@ +=============================================================== + +Tag name: cam6_3_xxx +Originator(s): pel, jet +Date: July 05, 2023 +One-line Summary: Option to turn on HB where CLUBB is not active +Github PR URL: https://github.com/ESCOMP/CAM/pull/### + +Purpose of changes (include the issue number and title text for each relevant GitHub issue): + - To address stability issues with non-FV dynamical cores we would like to turn on + Holtslag-Boville PBL scheme where CLUBB is not active. The issue for this PR is #846 + and it will also address issue #772 + +Describe any changes made to build system: NA + +Describe any changes made to the namelist: + - Introduced namelist variable clubb_do_hb_above. Default False unless using cam6 or cam_dev then + Holtslag-Boville PBL scheme will be used above CLUBB top) + +List any changes to the defaults for the boundary datasets: N/A + +Describe any substantial timing or memory changes: N/A + +Code reviewed by: + +List all files eliminated: N/A + +List all files added and what they do: N/A + +List all existing files that have been modified, and describe the changes: + +M bld/build-namelist + - Turn on HB scheme where CLUBB not active + +M bld/namelist_files/namelist_defaults_cam.xml +M bld/namelist_files/namelist_definition.xml + - add new namelist parameter for clubb_do_hb_above + +M src/dynamics/se/dycore/global_norms_mod.F90 +M src/physics/cam/clubb_intr.F90 + - set pbuf field so that HB scheme is only applied above CLUBB top + +M src/physics/cam/hb_diff.F9 +M src/physics/cam/vertical_diffusion.F90 + - add call to run HB scheme where CLUBB not active +If there were any failures reported from running test_driver.sh on any test +platform, and checkin with these failures has been OK'd by the gatekeeper, +then copy the lines from the td.*.status files for the failed tests to the +appropriate machine below. All failed tests must be justified. + +cheyenne/intel/aux_cam: all BFB except: + ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details: + - pre-existing failure + +izumi/nag/aux_cam: all BFB except: + DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details: + - pre-existing failure + +izumi/gnu/aux_cam: + +Summarize any changes to answers: climate changing for cam6/cam-dev runs using CLUBB + +=============================================================== =============================================================== Tag name: cam6_3_117 diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index 32e12e077a..6eb4de8ca1 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -210,16 +210,13 @@ subroutine vd_register() use beljaars_drag_cam, only : beljaars_drag_register use eddy_diff_cam, only : eddy_diff_register - integer :: err_idx, idx - ! Add fields to physics buffer ! kvt is used by gw_drag. only needs physpkg scope. call pbuf_add_field('kvt', 'physpkg', dtype_r8, (/pcols,pverp/), kvt_idx) - idx = pbuf_get_index('kvh',errcode=err_idx) - if (err_idx == -1) then - call pbuf_add_field('kvh', 'global', dtype_r8, (/pcols, pverp/), kvh_idx) + if (clubb_do_hb_above) then + call pbuf_add_field('kvh', 'global', dtype_r8, (/pcols, pverp/), kvh_idx) end if call pbuf_add_field('kvm', 'global', dtype_r8, (/pcols, pverp/), kvm_idx ) @@ -406,7 +403,7 @@ subroutine vertical_diffusion_init(pbuf2d) call init_hb_diff(gravit, cpair, ntop_eddy, nbot_eddy, pref_mid, & karman, eddy_scheme) ! - ! run HB scheme where CLUBB is not active when running cam_dev + ! run HB scheme where CLUBB is not active when running cam6 or cam_dev ! else init_hb_diff is called just for diagnostic purposes ! if (cam_physpkg_is("cam_dev")) then From 11e8dab08f93d7c572863c350fead50a27bab24a Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Wed, 5 Jul 2023 15:24:35 -0600 Subject: [PATCH 07/30] revert check for add kvh to pbuf, older code worked fine and seemed more straight forward, changed if check on cam6/cam_dev to use clubb_do_hb_above to allow namelist_defaults to handle what physics work with new clubb hb variable --- src/physics/cam/clubb_intr.F90 | 5 +---- src/physics/cam/vertical_diffusion.F90 | 6 ++++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/physics/cam/clubb_intr.F90 b/src/physics/cam/clubb_intr.F90 index 7f9e063720..0412d77f5d 100644 --- a/src/physics/cam/clubb_intr.F90 +++ b/src/physics/cam/clubb_intr.F90 @@ -508,10 +508,7 @@ subroutine clubb_register_cam( ) ! put pbuf_add calls here (see macrop_driver.F90 for sample) use indicies defined at top call pbuf_add_field('pblh', 'global', dtype_r8, (/pcols/), pblh_idx) call pbuf_add_field('tke', 'global', dtype_r8, (/pcols, pverp/), tke_idx) - idx = pbuf_get_index('kvh',errcode=err_idx) - if (err_idx == -1) then - call pbuf_add_field('kvh', 'global', dtype_r8, (/pcols, pverp/), kvh_idx) - end if + call pbuf_add_field('kvh', 'global', dtype_r8, (/pcols, pverp/), kvh_idx) call pbuf_add_field('tpert', 'global', dtype_r8, (/pcols/), tpert_idx) call pbuf_add_field('AST', 'global', dtype_r8, (/pcols,pver,dyn_time_lvls/), ast_idx) call pbuf_add_field('AIST', 'global', dtype_r8, (/pcols,pver,dyn_time_lvls/), aist_idx) diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index 6eb4de8ca1..f6e7a4acb0 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -215,7 +215,8 @@ subroutine vd_register() ! kvt is used by gw_drag. only needs physpkg scope. call pbuf_add_field('kvt', 'physpkg', dtype_r8, (/pcols,pverp/), kvt_idx) - if (clubb_do_hb_above) then + + if (eddy_scheme /= 'CLUBB_SGS') then call pbuf_add_field('kvh', 'global', dtype_r8, (/pcols, pverp/), kvh_idx) end if @@ -276,6 +277,7 @@ subroutine vertical_diffusion_init(pbuf2d) use beljaars_drag_cam, only : beljaars_drag_init use upper_bc, only : ubc_init use phys_control, only : waccmx_is, fv_am_correction, cam_physpkg_is + use clubb_intr, only : clubb_do_hb_above type(physics_buffer_desc), pointer :: pbuf2d(:,:) character(128) :: errstring ! Error status for init_vdiff @@ -406,7 +408,7 @@ subroutine vertical_diffusion_init(pbuf2d) ! run HB scheme where CLUBB is not active when running cam6 or cam_dev ! else init_hb_diff is called just for diagnostic purposes ! - if (cam_physpkg_is("cam_dev")) then + if (clubb_do_hb_above) then if( masterproc ) then write(iulog,*) 'vertical_diffusion_init: ' write(iulog,*) 'eddy_diffusivity scheme where CLUBB is not active: Holtslag and Boville' From 589df635640f938acf2ec41eca6545560965279c Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Tue, 11 Jul 2023 16:00:14 -0600 Subject: [PATCH 08/30] Until we figure out cam6 fw2000X failure only allow hb scheme to be active for cam_dev, backed off from using cam6-hb with this commit --- bld/namelist_files/namelist_defaults_cam.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index 274f4ab265..448c70f87d 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -2116,7 +2116,6 @@ 60.0 .false. .true. -.true. .true. 0.2 From d2be6f0e8db2e6f9debad7dff0470de8121c615a Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Tue, 11 Jul 2023 16:23:16 -0600 Subject: [PATCH 09/30] update ChangeLog with current test failures --- doc/ChangeLog | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 9d194b26b8..e1115d89d1 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -53,13 +53,76 @@ cheyenne/intel/aux_cam: all BFB except: ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) details: - pre-existing failure + ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp (Overall: NLFAIL) details: + ERP_D_Ln9_Vmct.f09_f09_mg17.QSC6.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_D_Ln9_Vmct.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_D_Ln9_Vnuopc.f09_f09_mg17.QSC6.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ld3_Vnuopc.f09_f09_mg17.FWHIST.cheyenne_intel.cam-reduced_hist1d (Overall: NLFAIL) details: + ERP_Ln9_P24x3_Vnuopc.f45_f45_mg37.QPWmaC6.cheyenne_intel.cam-outfrq9s_mee_fluxes (Overall: NLFAIL) details: + ERP_Ln9_Vmct.f09_f09_mg17.2000_CAM60_CLM50%SP_CICE5%PRES_DOCN%DOM_MOSART_SGLC_SWAV.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.ne30_ne30_mg17.FCnudged.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 (Overall: NLFAIL) details: + ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 (Overall: NLFAIL) details: + ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + ERS_Ln9_Vnuopc.f19_f19_mg17.FXSD.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9_Vmct.T42_T42.2000_CAM60%SCAM_CLM50%SP_CICE5%PRES_DOCN%DOM_SROF_SGLC_SWAV.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCts2nudged.cheyenne_intel.cam-outfrq9s_leapday (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCvbsxHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s_waccm_ma_mam4 (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC2000climo.cheyenne_intel.cam-outfrq3s_usecase (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc_P720x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s (Overall: NLFAIL) details: + SMS_Ld1_Vnuopc.f09_f09_mg17.FW2000climo.cheyenne_intel.cam-outfrq1d (Overall: NLFAIL) details: + SMS_Ld1_Vnuopc.ne30pg3_ne30pg3_mg17.FC2010climo.cheyenne_intel.cam-outfrq1d (Overall: NLFAIL) details: + SMS_Ld5_Vnuopc.f09_f09_mg17.PC6.cheyenne_intel.cam-cam6_port_f09 (Overall: NLFAIL) details: + SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m (Overall: NLFAIL) details: + SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging (Overall: NLFAIL) details: + SMS_Ln9_Vnuopc.f09_f09_mg17.FW1850.cheyenne_intel.cam-reduced_hist3s (Overall: NLFAIL) details: + SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs (Overall: NLFAIL) details: + SMS_Ln9_Vnuopc.f19_f19_mg17.FHIST.cheyenne_intel.cam-outfrq9s_nochem (Overall: NLFAIL) details: + - expected namelist failures from adding clubb_do_hb_above=.false. + + ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) details: + ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details: + - expected diff for cam_dev run using clubb_do_hb_above=.true. + izumi/nag/aux_cam: all BFB except: DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) details: - pre-existing failure + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details: + ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 (Overall: NLFAIL) details: + ERP_Ln9_Vmct.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.ne3pg3_ne3pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_ba (Overall: NLFAIL) details: + SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase (Overall: NLFAIL) details: + - expected namelist failures from adding clubb_do_hb_above=.false. izumi/gnu/aux_cam: + SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s (Overall: DIFF) details: + - expected diff for cam_dev run using clubb_do_hb_above=.true. -Summarize any changes to answers: climate changing for cam6/cam-dev runs using CLUBB +Summarize any changes to answers: climate changing for cam-dev runs using CLUBB =============================================================== =============================================================== From b8993783f1d8b2c5958210ebb5ef04c7f43c88ae Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Tue, 18 Jul 2023 14:47:42 -0600 Subject: [PATCH 10/30] remove duplicate timer calls for prim_advanc_exp --- src/dynamics/se/dycore/prim_advance_mod.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/dynamics/se/dycore/prim_advance_mod.F90 b/src/dynamics/se/dycore/prim_advance_mod.F90 index c9f1ac194b..16a190c53c 100644 --- a/src/dynamics/se/dycore/prim_advance_mod.F90 +++ b/src/dynamics/se/dycore/prim_advance_mod.F90 @@ -78,7 +78,7 @@ subroutine prim_advance_exp(elem, fvm, deriv, hvcoord, hybrid,dt, tl, nets, net real (kind=r8) :: qwater(np,np,nlev,thermodynamic_active_species_num,nets:nete) integer :: qidx(thermodynamic_active_species_num) real (kind=r8) :: kappa(np,np,nlev,nets:nete) - call t_startf('prim_advance_exp') + nm1 = tl%nm1 n0 = tl%n0 np1 = tl%np1 @@ -257,7 +257,6 @@ subroutine prim_advance_exp(elem, fvm, deriv, hvcoord, hybrid,dt, tl, nets, net call omp_set_nested(.false.) - call t_stopf('prim_advance_exp') end subroutine prim_advance_exp From c4603eeabe06601e935041dcfc5f1432bcbd2c60 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Wed, 9 Aug 2023 18:04:44 -0600 Subject: [PATCH 11/30] PR review mods --- doc/ChangeLog | 4 ++-- src/physics/cam/hb_diff.F90 | 3 +-- src/physics/cam/vertical_diffusion.F90 | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index e1115d89d1..6d22df6853 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -14,14 +14,14 @@ Purpose of changes (include the issue number and title text for each relevant Gi Describe any changes made to build system: NA Describe any changes made to the namelist: - - Introduced namelist variable clubb_do_hb_above. Default False unless using cam6 or cam_dev then + - Introduced namelist variable clubb_do_hb_above. Default False unless using cam_dev then Holtslag-Boville PBL scheme will be used above CLUBB top) List any changes to the defaults for the boundary datasets: N/A Describe any substantial timing or memory changes: N/A -Code reviewed by: +Code reviewed by: List all files eliminated: N/A diff --git a/src/physics/cam/hb_diff.F90 b/src/physics/cam/hb_diff.F90 index 4b0147e4fd..0b56d1932c 100644 --- a/src/physics/cam/hb_diff.F90 +++ b/src/physics/cam/hb_diff.F90 @@ -254,7 +254,7 @@ subroutine compute_hb_free_atm_diff(lchnk, ncol, & pmid ,u ,v ,taux ,tauy , & shflx ,qflx ,obklen ,ustar , & kvm ,kvh ,kvq ,cgh ,cgs , & - ri ,eddy_scheme) + ri ) !----------------------------------------------------------------------- ! ! This is a version of compute_hb_diff that only computes free @@ -285,7 +285,6 @@ subroutine compute_hb_free_atm_diff(lchnk, ncol, & real(r8), intent(in) :: shflx(pcols) ! sensible heat flux real(r8), intent(in) :: qflx(pcols) ! water vapor flux real(r8), intent(in) :: pmid(pcols,pver) ! midpoint pressures - character(len=16), intent(in) :: eddy_scheme ! ! Output arguments ! diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index f6e7a4acb0..ed78b64acd 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -405,7 +405,7 @@ subroutine vertical_diffusion_init(pbuf2d) call init_hb_diff(gravit, cpair, ntop_eddy, nbot_eddy, pref_mid, & karman, eddy_scheme) ! - ! run HB scheme where CLUBB is not active when running cam6 or cam_dev + ! run HB scheme where CLUBB is not active when running cam_dev ! else init_hb_diff is called just for diagnostic purposes ! if (clubb_do_hb_above) then @@ -1018,7 +1018,7 @@ subroutine vertical_diffusion_tend( & state%pmid, state%u , state%v , tautotx , tautoty , & cam_in%shf, cam_in%cflx(:,1), obklen , ustar , & kvm , kvh , kvq , cgh , cgs , & - ri , eddy_scheme) + ri ) clubbtop_idx = pbuf_get_index('clubbtop') call pbuf_get_field(pbuf, clubbtop_idx, clubbtop) ! From 9f1aad6b7361deea7f9d58d22ca593952fd8b183 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Thu, 10 Aug 2023 10:13:12 -0600 Subject: [PATCH 12/30] fix bug caught in PR - erroneous replacement of cam_dev with clubb_do_hb_above --- src/physics/cam/vertical_diffusion.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index ed78b64acd..8a6a1f2971 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -276,7 +276,7 @@ subroutine vertical_diffusion_init(pbuf2d) use trb_mtn_stress_cam,only : trb_mtn_stress_init use beljaars_drag_cam, only : beljaars_drag_init use upper_bc, only : ubc_init - use phys_control, only : waccmx_is, fv_am_correction, cam_physpkg_is + use phys_control, only : waccmx_is, fv_am_correction use clubb_intr, only : clubb_do_hb_above type(physics_buffer_desc), pointer :: pbuf2d(:,:) @@ -688,6 +688,7 @@ subroutine vertical_diffusion_tend( & use upper_bc, only : ubc_get_flxs use coords_1d, only : Coords1D use clubb_intr, only : clubb_do_hb_above + use phys_control, only : cam_physpkg_is ! --------------- ! ! Input Arguments ! @@ -1139,7 +1140,7 @@ subroutine vertical_diffusion_tend( & tauy = 0._r8 shflux = 0._r8 cflux(:,1) = 0._r8 - if (clubb_do_hb_above) then + if (cam_physpkg_is("cam_dev")) then ! surface fluxes applied in clubb emissions module cflux(:,2:) = 0._r8 else From 20bd7a989eeca3299188b493a80f45100218222d Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Tue, 15 Aug 2023 16:45:23 -0600 Subject: [PATCH 13/30] minor fixes --- src/physics/cam/hb_diff.F90 | 12 ++++-------- src/physics/cam/vertical_diffusion.F90 | 4 +--- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/physics/cam/hb_diff.F90 b/src/physics/cam/hb_diff.F90 index 0b56d1932c..a43cfe5883 100644 --- a/src/physics/cam/hb_diff.F90 +++ b/src/physics/cam/hb_diff.F90 @@ -245,14 +245,12 @@ subroutine compute_hb_diff(lchnk, ncol, & ! kvq(:ncol,:) = kvh(:ncol,:) - - return end subroutine compute_hb_diff - subroutine compute_hb_free_atm_diff(lchnk, ncol, & + subroutine compute_hb_free_atm_diff(ncol, & th ,t ,q ,z , & pmid ,u ,v ,taux ,tauy , & - shflx ,qflx ,obklen ,ustar , & + shflx ,qflx ,obklen ,ustar , & kvm ,kvh ,kvq ,cgh ,cgs , & ri ) !----------------------------------------------------------------------- @@ -271,7 +269,6 @@ subroutine compute_hb_free_atm_diff(lchnk, ncol, & ! ! Input arguments ! - integer, intent(in) :: lchnk ! chunk index (for debug only) integer, intent(in) :: ncol ! number of atmospheric columns real(r8), intent(in) :: th(pcols,pver) ! potential temperature [K] @@ -299,7 +296,7 @@ subroutine compute_hb_free_atm_diff(lchnk, ncol, & ! !---------------------------Local workspace----------------------------- ! - real(r8) :: thv(pcols,pver) ! virtual temperature + real(r8) :: thv(pcols,pver) ! virtual potential temperature real(r8) :: rrho(pcols) ! 1./bottom level density real(r8) :: kqfs(pcols) ! kinematic surf constituent flux (kg/m2/s) real(r8) :: khfs(pcols) ! kinimatic surface heat flux @@ -308,7 +305,7 @@ subroutine compute_hb_free_atm_diff(lchnk, ncol, & real(r8) :: s2(pcols,pver) ! shear squared real(r8) :: n2(pcols,pver) ! brunt vaisaila frequency - ! virtual temperature + ! virtual potential temperature call virtem(ncol, (pver-ntop_turb+1), th(:ncol,ntop_turb:),q(:ncol,ntop_turb:), thv(:ncol,ntop_turb:)) ! Compute ustar, Obukhov length, and kinematic surface fluxes. @@ -333,7 +330,6 @@ subroutine compute_hb_free_atm_diff(lchnk, ncol, & kvh(:ncol,:) = kvf(:ncol,:) cgh(:ncol,:) = 0._r8 cgs(:ncol,:) = 0._r8 - return end subroutine compute_hb_free_atm_diff diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index 8a6a1f2971..8252619de5 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -72,7 +72,6 @@ module vertical_diffusion use ref_pres, only : do_molec_diff, nbot_molec use phys_control, only : phys_getopts use time_manager, only : is_first_step - implicit none private save @@ -402,8 +401,7 @@ subroutine vertical_diffusion_init(pbuf2d) call addfld('HB_ri', (/ 'lev' /), 'A', 'no', 'Richardson Number (HB Scheme), I' ) case ( 'CLUBB_SGS' ) do_pbl_diags = .true. - call init_hb_diff(gravit, cpair, ntop_eddy, nbot_eddy, pref_mid, & - karman, eddy_scheme) + call init_hb_diff(gravit, cpair, ntop_eddy, nbot_eddy, pref_mid, karman, eddy_scheme) ! ! run HB scheme where CLUBB is not active when running cam_dev ! else init_hb_diff is called just for diagnostic purposes From 5ef18fca15ae9c3433a723ac78333e0c983a92b7 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Thu, 17 Aug 2023 23:23:07 -0600 Subject: [PATCH 14/30] mixup with getting some PR changes pushed --- bld/namelist_files/namelist_definition.xml | 2 +- src/physics/cam/hb_diff.F90 | 9 ++++----- src/physics/cam/vertical_diffusion.F90 | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index ed9931a5ea..b427173322 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -4298,7 +4298,7 @@ Default: 10 -Logical: If True activate Holtslag and Boville PBL scheme where CLUBB is not active +Logical: If True activate Holtslag and Boville vertical diffusion scheme where CLUBB is not active (note that CLUBB top is dynamic in each column) Default: none diff --git a/src/physics/cam/hb_diff.F90 b/src/physics/cam/hb_diff.F90 index a43cfe5883..ba97978e72 100644 --- a/src/physics/cam/hb_diff.F90 +++ b/src/physics/cam/hb_diff.F90 @@ -132,7 +132,7 @@ end subroutine init_hb_diff !=============================================================================== - subroutine compute_hb_diff(lchnk, ncol, & + subroutine compute_hb_diff(ncol , & th ,t ,q ,z ,zi , & pmid ,u ,v ,taux ,tauy , & shflx ,qflx ,obklen ,ustar ,pblh , & @@ -156,7 +156,6 @@ subroutine compute_hb_diff(lchnk, ncol, & ! ! Input arguments ! - integer, intent(in) :: lchnk ! chunk index (for debug only) integer, intent(in) :: ncol ! number of atmospheric columns real(r8), intent(in) :: th(pcols,pver) ! potential temperature [K] @@ -237,7 +236,7 @@ subroutine compute_hb_diff(lchnk, ncol, & ! ! Get pbl exchange coefficients ! - call austausch_pbl(lchnk, ncol, & + call austausch_pbl(ncol , & z ,kvf ,kqfs ,khfs ,kbfs , & obklen ,ustar ,wstar ,pblh ,kvm , & kvh ,cgh ,cgs ,tpert ,qpert , & @@ -330,6 +329,7 @@ subroutine compute_hb_free_atm_diff(ncol, & kvh(:ncol,:) = kvf(:ncol,:) cgh(:ncol,:) = 0._r8 cgs(:ncol,:) = 0._r8 + end subroutine compute_hb_free_atm_diff @@ -574,7 +574,7 @@ subroutine pblintd(ncol , & end subroutine pblintd ! !=============================================================================== - subroutine austausch_pbl(lchnk ,ncol , & + subroutine austausch_pbl(ncol , & z ,kvf ,kqfs ,khfs ,kbfs , & obklen ,ustar ,wstar ,pblh ,kvm , & kvh ,cgh ,cgs ,tpert ,qpert , & @@ -610,7 +610,6 @@ subroutine austausch_pbl(lchnk ,ncol , & ! ! Input arguments ! - integer, intent(in) :: lchnk ! local chunk index (for debug only) integer, intent(in) :: ncol ! number of atmospheric columns real(r8), intent(in) :: z(pcols,pver) ! height above surface [m] diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index 8252619de5..9e0fcedf88 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -996,7 +996,7 @@ subroutine vertical_diffusion_tend( & ! consistency with the previous HB scheme. - call compute_hb_diff( lchnk , ncol , & + call compute_hb_diff(ncol , & th , state%t , state%q , state%zm , state%zi , & state%pmid, state%u , state%v , tautotx , tautoty , & cam_in%shf, cam_in%cflx(:,1), obklen , ustar , pblh , & From 5dd75616ed15ead0a0ae9691af3e072df7da4791 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Mon, 21 Aug 2023 07:38:10 -0600 Subject: [PATCH 15/30] PR requested changes from Cheryl --- src/dynamics/se/dycore/global_norms_mod.F90 | 4 ++-- src/physics/cam/vertical_diffusion.F90 | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dynamics/se/dycore/global_norms_mod.F90 b/src/dynamics/se/dycore/global_norms_mod.F90 index 10fa4a96da..2b53ef95c7 100644 --- a/src/dynamics/se/dycore/global_norms_mod.F90 +++ b/src/dynamics/se/dycore/global_norms_mod.F90 @@ -681,10 +681,10 @@ subroutine print_cfl(elem,hybrid,nets,nete,dtnu,ptop,pmid,& do k=1,nlev ! Vertical profile from FV dycore (see Lauritzen et al. 2012 DOI:10.1177/1094342011410088) scale1 = 0.5_r8*(1.0_r8+tanh(2.0_r8*log(pmid(sponge_del4_lev)/pmid(k)))) - if (sponge_del4_nu_div_fac.ne.1.0_r8) then + if (sponge_del4_nu_div_fac /= 1.0_r8) then nu_div_lev(k) = (1.0_r8-scale1)*nu_div+scale1*nu_div_max end if - if (sponge_del4_nu_fac.ne.1.0_r8) then + if (sponge_del4_nu_fac /= 1.0_r8) then nu_lev(k) = (1.0_r8-scale1)*nu +scale1*nu_max nu_t_lev(k) = (1.0_r8-scale1)*nu_p +scale1*nu_max end if diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index 9e0fcedf88..7a630fd9d6 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -1012,7 +1012,7 @@ subroutine vertical_diffusion_tend( & ! run HB scheme where CLUBB is not active when running cam_dev ! if (clubb_do_hb_above) then - call compute_hb_free_atm_diff( lchnk , ncol , & + call compute_hb_free_atm_diff( ncol , & th , state%t , state%q , state%zm , & state%pmid, state%u , state%v , tautotx , tautoty , & cam_in%shf, cam_in%cflx(:,1), obklen , ustar , & From 10c0c80ad9b8ba265a617f8dd78b6f66fd4b5e1b Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Mon, 21 Aug 2023 16:40:26 -0600 Subject: [PATCH 16/30] fix serious bug for WACCM-x --- src/physics/cam/geopotential.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/physics/cam/geopotential.F90 b/src/physics/cam/geopotential.F90 index 93e99644ac..7672fc92e0 100644 --- a/src/physics/cam/geopotential.F90 +++ b/src/physics/cam/geopotential.F90 @@ -1,4 +1,3 @@ - module geopotential !--------------------------------------------------------------------------------- @@ -39,7 +38,8 @@ subroutine geopotential_t( & !----------------------------------------------------------------------- use ppgrid, only : pcols -use air_composition, only: thermodynamic_active_species_num,thermodynamic_active_species_idx +use air_composition, only: thermodynamic_active_species_num +use air_composition, only: thermodynamic_active_species_idx, dry_air_species_num !------------------------------Arguments-------------------------------- ! ! Input arguments @@ -126,7 +126,7 @@ subroutine geopotential_t( & ! Compute factor for converting wet to dry mixing ratio (eq.7) ! qfac = 1.0_r8 - do idx = 1,thermodynamic_active_species_num + do idx = dry_air_species_num + 1,thermodynamic_active_species_num do k = 1,pver do i = 1,ncol qfac(i,k) = qfac(i,k)-q(i,k,thermodynamic_active_species_idx(idx)) @@ -137,7 +137,7 @@ subroutine geopotential_t( & ! Compute sum of dry water mixing ratios sum_dry_mixing_ratio = 1.0_r8 - do idx = 1,thermodynamic_active_species_num + do idx = dry_air_species_num + 1,thermodynamic_active_species_num do k = 1,pver do i = 1,ncol sum_dry_mixing_ratio(i,k) = sum_dry_mixing_ratio(i,k)& From bbf69c3df78ee0e87ffdf1e2d72d47cac5abb58c Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Tue, 22 Aug 2023 15:21:20 -0600 Subject: [PATCH 17/30] PR related mods - HB now on for cam6 (previously just cam_dev), Changelog testing and description updates, rename clubb_do_hb_above to do_hb_above_clubb, hb control namelist variable moved to phys_control --- bld/build-namelist | 2 +- bld/namelist_files/namelist_defaults_cam.xml | 5 +- bld/namelist_files/namelist_definition.xml | 14 +- doc/ChangeLog | 155 ++++++++++--------- src/physics/cam/clubb_intr.F90 | 18 +-- src/physics/cam/phys_control.F90 | 15 +- src/physics/cam/vertical_diffusion.F90 | 22 +-- 7 files changed, 129 insertions(+), 102 deletions(-) diff --git a/bld/build-namelist b/bld/build-namelist index 00a3ee5597..4d429b8ad7 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -3358,7 +3358,7 @@ if ($clubb_sgs =~ /$TRUE/io) { add_default($nl, 'clubb_mf_nup'); #Turn on HB scheme where CLUBB not active - add_default($nl, 'clubb_do_hb_above'); + add_default($nl, 'do_hb_above_clubb'); } # Force exit if running cam_dev and CLUBB is off diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index 448c70f87d..a28ba9f936 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -2114,8 +2114,9 @@ 1 2.0 60.0 -.false. -.true. +.false. +.true. +.true. .true. 0.2 diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index b427173322..822bbc64d5 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -4296,13 +4296,6 @@ Real: number of plumes in mass flux ensemble Default: 10 - -Logical: If True activate Holtslag and Boville vertical diffusion scheme where CLUBB is not active - (note that CLUBB top is dynamic in each column) -Default: none - - + +Logical: If True activate Holtslag and Boville vertical diffusion scheme where CLUBB is not active + (note that CLUBB top is dynamic in each column) +Default: none + + 1) then if (microp_scheme /= "MG" .or. (macrop_scheme /= "park" .and. macrop_scheme /= "CLUBB_SGS")) then @@ -311,7 +320,7 @@ subroutine phys_getopts(deep_scheme_out, shallow_scheme_out, eddy_scheme_out, mi cam_chempkg_out, prog_modal_aero_out, macrop_scheme_out, & do_clubb_sgs_out, use_spcam_out, state_debug_checks_out, cld_macmic_num_steps_out, & offline_driver_out, convproc_do_aer_out, cam_snapshot_before_num_out, cam_snapshot_after_num_out,& - cam_take_snapshot_before_out, cam_take_snapshot_after_out, physics_grid_out) + cam_take_snapshot_before_out, cam_take_snapshot_after_out, physics_grid_out, do_hb_above_clubb_out) !----------------------------------------------------------------------- ! Purpose: Return runtime settings ! deep_scheme_out : deep convection scheme @@ -359,6 +368,7 @@ subroutine phys_getopts(deep_scheme_out, shallow_scheme_out, eddy_scheme_out, mi character(len=32), intent(out), optional :: cam_take_snapshot_before_out character(len=32), intent(out), optional :: cam_take_snapshot_after_out character(len=cl), intent(out), optional :: physics_grid_out + logical, intent(out), optional :: do_hb_above_clubb_out if ( present(deep_scheme_out ) ) deep_scheme_out = deep_scheme if ( present(shallow_scheme_out ) ) shallow_scheme_out = shallow_scheme @@ -398,6 +408,7 @@ subroutine phys_getopts(deep_scheme_out, shallow_scheme_out, eddy_scheme_out, mi if ( present(cam_take_snapshot_before_out) ) cam_take_snapshot_before_out = cam_take_snapshot_before if ( present(cam_take_snapshot_after_out ) ) cam_take_snapshot_after_out = cam_take_snapshot_after if ( present(physics_grid_out ) ) physics_grid_out = cam_physics_mesh + if ( present(do_hb_above_clubb_out ) ) do_hb_above_clubb_out = do_hb_above_clubb end subroutine phys_getopts diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index 7a630fd9d6..d7b3475cd1 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -128,6 +128,9 @@ module vertical_diffusion integer :: taubljx_idx = -1 integer :: taubljy_idx = -1 +! pbuf field for clubb top above which HB (Holtslag Boville) scheme may be enabled +integer :: clubbtop_idx = -1 + logical :: diff_cnsrv_mass_check ! do mass conservation check logical :: do_iss ! switch for implicit turbulent surface stress logical :: prog_modal_aero = .false. ! set true if prognostic modal aerosols are present @@ -204,7 +207,7 @@ subroutine vd_register() ! Register physics buffer fields and constituents ! !------------------------------------------------ ! - use physics_buffer, only : pbuf_add_field, dtype_r8, dtype_i4, pbuf_get_index + use physics_buffer, only : pbuf_add_field, dtype_r8, dtype_i4 use trb_mtn_stress_cam, only : trb_mtn_stress_register use beljaars_drag_cam, only : beljaars_drag_register use eddy_diff_cam, only : eddy_diff_register @@ -276,7 +279,7 @@ subroutine vertical_diffusion_init(pbuf2d) use beljaars_drag_cam, only : beljaars_drag_init use upper_bc, only : ubc_init use phys_control, only : waccmx_is, fv_am_correction - use clubb_intr, only : clubb_do_hb_above + use clubb_intr, only : do_hb_above_clubb type(physics_buffer_desc), pointer :: pbuf2d(:,:) character(128) :: errstring ! Error status for init_vdiff @@ -403,10 +406,10 @@ subroutine vertical_diffusion_init(pbuf2d) do_pbl_diags = .true. call init_hb_diff(gravit, cpair, ntop_eddy, nbot_eddy, pref_mid, karman, eddy_scheme) ! - ! run HB scheme where CLUBB is not active when running cam_dev + ! run HB scheme where CLUBB is not active when running cam_dev or cam6 physics ! else init_hb_diff is called just for diagnostic purposes ! - if (clubb_do_hb_above) then + if (do_hb_above_clubb) then if( masterproc ) then write(iulog,*) 'vertical_diffusion_init: ' write(iulog,*) 'eddy_diffusivity scheme where CLUBB is not active: Holtslag and Boville' @@ -611,6 +614,9 @@ subroutine vertical_diffusion_init(pbuf2d) kvh_idx = pbuf_get_index('kvh') end if + ! pbuf field denoting top of clubb + clubbtop_idx = pbuf_get_index('clubbtop') + ! Initialization of some pbuf fields if (is_first_step()) then ! Initialization of pbuf fields tke, kvh, kvm are done in phys_inidat @@ -661,7 +667,6 @@ subroutine vertical_diffusion_tend( & ! This is an interface routine for vertical diffusion ! !---------------------------------------------------- ! use physics_buffer, only : physics_buffer_desc, pbuf_get_field, pbuf_set_field - use physics_buffer, only : pbuf_get_index use physics_types, only : physics_state, physics_ptend, physics_ptend_init use physics_types, only : set_dry_to_wet, set_wet_to_dry @@ -685,7 +690,7 @@ subroutine vertical_diffusion_tend( & use upper_bc, only : ubc_get_vals, ubc_fixed_temp use upper_bc, only : ubc_get_flxs use coords_1d, only : Coords1D - use clubb_intr, only : clubb_do_hb_above + use clubb_intr, only : do_hb_above_clubb use phys_control, only : cam_physpkg_is ! --------------- ! @@ -853,7 +858,6 @@ subroutine vertical_diffusion_tend( & real(r8) :: tauy(pcols) real(r8) :: shflux(pcols) real(r8) :: cflux(pcols,pcnst) - integer :: clubbtop_idx integer, pointer :: clubbtop(:) ! (pcols) logical :: lq(pcnst) @@ -1011,14 +1015,14 @@ subroutine vertical_diffusion_tend( & ! ! run HB scheme where CLUBB is not active when running cam_dev ! - if (clubb_do_hb_above) then + if (do_hb_above_clubb) then call compute_hb_free_atm_diff( ncol , & th , state%t , state%q , state%zm , & state%pmid, state%u , state%v , tautotx , tautoty , & cam_in%shf, cam_in%cflx(:,1), obklen , ustar , & kvm , kvh , kvq , cgh , cgs , & ri ) - clubbtop_idx = pbuf_get_index('clubbtop') + call pbuf_get_field(pbuf, clubbtop_idx, clubbtop) ! ! zero out HB where CLUBB is active From 39b621f799c2afc0420b379cd0fe7eeea62d1f9f Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Tue, 22 Aug 2023 16:20:50 -0600 Subject: [PATCH 18/30] cleanup move of do_hb_clubb_above --- src/physics/cam/clubb_intr.F90 | 12 +++++------- src/physics/cam/phys_control.F90 | 2 +- src/physics/cam/vertical_diffusion.F90 | 5 +++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/physics/cam/clubb_intr.F90 b/src/physics/cam/clubb_intr.F90 index 2900404f2d..3443d73328 100644 --- a/src/physics/cam/clubb_intr.F90 +++ b/src/physics/cam/clubb_intr.F90 @@ -77,7 +77,6 @@ module clubb_intr logical, public :: do_cldcool logical :: clubb_do_icesuper - logical, public :: do_hb_above_clubb = .false. #ifdef CLUBB_SGS type(clubb_config_flags_type), public :: clubb_config_flags real(r8), dimension(nparams), public :: clubb_params ! Adjustable CLUBB parameters (C1, C2 ...) @@ -323,6 +322,7 @@ module clubb_intr logical :: clubb_do_liqsupersat = .false. logical :: clubb_do_energyfix = .true. logical :: history_budget + logical :: do_hb_above_clubb = .false. integer :: history_budget_histfile_num integer :: edsclr_dim ! Number of scalars to transport in CLUBB integer :: offset @@ -472,11 +472,11 @@ subroutine clubb_register_cam( ) use subcol_utils, only: subcol_get_scheme !----- Begin Code ----- - call phys_getopts( eddy_scheme_out = eddy_scheme, & deep_scheme_out = deep_scheme, & history_budget_out = history_budget, & - history_budget_histfile_num_out = history_budget_histfile_num ) + history_budget_histfile_num_out = history_budget_histfile_num, & + do_hb_above_clubb_out = do_hb_above_clubb) subcol_scheme = subcol_get_scheme() if (trim(subcol_scheme) == 'SILHS') then @@ -811,8 +811,7 @@ subroutine clubb_readnl(nlfile) clubb_skw_max_mag, & clubb_tridiag_solve_method, & clubb_up2_sfc_coef, & - clubb_wpxp_L_thresh, & - do_hb_above_clubb + clubb_wpxp_L_thresh !----- Begin Code ----- @@ -1128,8 +1127,6 @@ subroutine clubb_readnl(nlfile) if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: clubb_l_standard_term_ta") call mpi_bcast(clubb_l_partial_upwind_wp3, 1, mpi_logical, mstrid, mpicom, ierr) if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: clubb_l_partial_upwind_wp3") - call mpi_bcast(do_hb_above_clubb, 1, mpi_logical, mstrid, mpicom, ierr) - if (ierr /= 0) call endrun(sub//": FATAL: mpi_bcast: do_hb_above_clubb") ! Overwrite defaults if they are true if (clubb_history) l_stats = .true. @@ -1401,6 +1398,7 @@ subroutine clubb_ini_cam(pbuf2d) call phys_getopts(prog_modal_aero_out=prog_modal_aero, & history_amwg_out=history_amwg, & history_clubb_out=history_clubb) + do_hb_above_clubb_out=do_hb_above_clubb) ! Select variables to apply tendencies back to CAM diff --git a/src/physics/cam/phys_control.F90 b/src/physics/cam/phys_control.F90 index 7edbda37ba..6582db8b6d 100644 --- a/src/physics/cam/phys_control.F90 +++ b/src/physics/cam/phys_control.F90 @@ -72,7 +72,7 @@ module phys_control logical :: history_chemspecies_srf = .false. logical :: do_clubb_sgs -logical :: do_hb_above_clubb ! enable HB vertical mixing above clubb top +logical :: do_hb_above_clubb = .false. ! enable HB vertical mixing above clubb top ! Check validity of physics_state objects in physics_update. logical :: state_debug_checks = .false. diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index d7b3475cd1..f41cbd99b9 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -139,6 +139,7 @@ module vertical_diffusion logical :: do_pbl_diags = .false. logical :: waccmx_mode = .false. +logical :: do_hb_above_clubb = .false. contains @@ -279,7 +280,6 @@ subroutine vertical_diffusion_init(pbuf2d) use beljaars_drag_cam, only : beljaars_drag_init use upper_bc, only : ubc_init use phys_control, only : waccmx_is, fv_am_correction - use clubb_intr, only : do_hb_above_clubb type(physics_buffer_desc), pointer :: pbuf2d(:,:) character(128) :: errstring ! Error status for init_vdiff @@ -392,6 +392,8 @@ subroutine vertical_diffusion_init(pbuf2d) if (masterproc) write(iulog, fmt='(a,i3,5x,a,i3)') 'NTOP_EDDY =', ntop_eddy, 'NBOT_EDDY =', nbot_eddy + call phys_getopts(do_hb_above_clubb_out=do_hb_above_clubb) + select case ( eddy_scheme ) case ( 'diag_TKE', 'SPCAM_m2005' ) if( masterproc ) write(iulog,*) & @@ -690,7 +692,6 @@ subroutine vertical_diffusion_tend( & use upper_bc, only : ubc_get_vals, ubc_fixed_temp use upper_bc, only : ubc_get_flxs use coords_1d, only : Coords1D - use clubb_intr, only : do_hb_above_clubb use phys_control, only : cam_physpkg_is ! --------------- ! From 53eaa2decf59c9175e1901a39a0529b7c1dfe9f7 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Tue, 22 Aug 2023 16:38:46 -0600 Subject: [PATCH 19/30] fixed syntax error in PR mods and added physics_control as changed file to ChangeLog --- doc/ChangeLog | 3 +++ src/physics/cam/clubb_intr.F90 | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 8bd6befa20..ef5f8a1285 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -48,6 +48,9 @@ M src/physics/cam/vertical_diffusion.F90 M src/physics/cam/geopotential.F90 - bug fix for converting wet to dry mixing ratio +M src/physics/cam/phys_control.F90 + - do_hb_above_clubb defined here and provided via getopts. + M src/dynamics/se/dycore/prim_advance_mod.F90 - remove duplicate timing call diff --git a/src/physics/cam/clubb_intr.F90 b/src/physics/cam/clubb_intr.F90 index 3443d73328..bb38481e39 100644 --- a/src/physics/cam/clubb_intr.F90 +++ b/src/physics/cam/clubb_intr.F90 @@ -1397,7 +1397,7 @@ subroutine clubb_ini_cam(pbuf2d) call phys_getopts(prog_modal_aero_out=prog_modal_aero, & history_amwg_out=history_amwg, & - history_clubb_out=history_clubb) + history_clubb_out=history_clubb, & do_hb_above_clubb_out=do_hb_above_clubb) ! Select variables to apply tendencies back to CAM From 1025b12dfac45399b6504179c6b410ff44224135 Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Wed, 30 Aug 2023 13:24:48 -0600 Subject: [PATCH 20/30] fix bug for species dependent air (WACCM-x) --- src/dynamics/mpas/dp_coupling.F90 | 24 ++++++++++++------------ src/dynamics/se/dp_coupling.F90 | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/dynamics/mpas/dp_coupling.F90 b/src/dynamics/mpas/dp_coupling.F90 index 792a7d54b0..9366c6fac3 100644 --- a/src/dynamics/mpas/dp_coupling.F90 +++ b/src/dynamics/mpas/dp_coupling.F90 @@ -10,7 +10,7 @@ module dp_coupling use constituents, only: pcnst, cnst_type use physconst, only: gravit, cappa, rh2o, zvir use air_composition,only: cpairv, rairv - +use air_composition,only: dry_air_species_num use spmd_dyn, only: local_dp_map, block_buf_nrecs, chunk_buf_nrecs use spmd_utils, only: mpicom, iam, masterproc @@ -243,7 +243,7 @@ subroutine p_d_coupling(phys_state, phys_tend, dyn_in) allocate( t_tend(pver,nCellsSolve), stat=ierr) if( ierr /= 0 ) call endrun(subname//':failed to allocate t_tend array') - allocate( q_tend(thermodynamic_active_species_num,pver,nCellsSolve), stat=ierr) + allocate( q_tend(thermodynamic_active_species_num-dry_air_species_num,pver,nCellsSolve), stat=ierr) if( ierr /= 0 ) call endrun(subname//':failed to allocate q_tend array') nullify(tend_physics) @@ -285,7 +285,7 @@ subroutine p_d_coupling(phys_state, phys_tend, dyn_in) ! ! compute tendencies for thermodynamic active species ! - do m=1,thermodynamic_active_species_num + do m=dry_air_species_num + 1,thermodynamic_active_species_num idx_phys = thermodynamic_active_species_idx(m) idx_dycore = thermodynamic_active_species_idx_dycore(m) if (idx_dycore==index_qv) index_qv_phys = m @@ -388,7 +388,7 @@ subroutine derived_phys(phys_state, phys_tend, pbuf2d) ! To be consistent with total energy formula in physic's check_energy module only ! include water vapor in moist pdel. factor(:ncol,k) = 1.0_r8 - do m_cnst=1,thermodynamic_active_species_num + do m_cnst=dry_air_species_num + 1,thermodynamic_active_species_num m = thermodynamic_active_species_idx(m_cnst) ! at this point all q's are dry factor(:ncol,k) = factor(:ncol,k)+phys_state(lchnk)%q(:ncol,k,m) @@ -600,7 +600,7 @@ subroutine derived_tend(nCellsSolve, nCells, t_tend, u_tend, v_tend, q_tend, dyn ! ! Rnew and Rold are only needed for diagnostics purposes ! - do m=1,thermodynamic_active_species_num + do m=dry_air_species_num+1,thermodynamic_active_species_num idx_thermo(m) = m idx_dycore = thermodynamic_active_species_idx_dycore(m) do iCell = 1, nCellsSolve @@ -612,7 +612,7 @@ subroutine derived_tend(nCellsSolve, nCells, t_tend, u_tend, v_tend, q_tend, dyn call get_R(qktmp,idx_thermo,Rnew) Rnew = Rnew*cv/Rgas - do m=1,thermodynamic_active_species_num + do m=dry_air_species_num+1,thermodynamic_active_species_num idx_dycore = thermodynamic_active_species_idx_dycore(m) do iCell = 1, nCellsSolve do k = 1, pver @@ -673,7 +673,7 @@ subroutine derived_tend(nCellsSolve, nCells, t_tend, u_tend, v_tend, q_tend, dyn ! ! temporarily save thermodynamic active species (n+1) ! - do m=1,thermodynamic_active_species_num + do m=dry_air_species_num+1,thermodynamic_active_species_num idx_dycore = thermodynamic_active_species_idx_dycore(m) qk(m,:,: ) = tracers(idx_dycore,:,1:nCellsSolve) tracers(idx_dycore,:,1:nCellsSolve)= qk(m,:,: )-dtime*q_tend(m,:,1:nCellsSolve) @@ -685,7 +685,7 @@ subroutine derived_tend(nCellsSolve, nCells, t_tend, u_tend, v_tend, q_tend, dyn ux(:,1:nCellsSolve)+dtime*u_tend(:,1:nCellsSolve)/rho_zz(:,1:nCellsSolve), & uy(:,1:nCellsSolve)+dtime*v_tend(:,1:nCellsSolve)/rho_zz(:,1:nCellsSolve),'dAP') ! revert - do m=1,thermodynamic_active_species_num + do m=dry_air_species_num+1,thermodynamic_active_species_num idx_dycore = thermodynamic_active_species_idx_dycore(m) tracers(idx_dycore,:,1:nCellsSolve)= qk(m,:,: ) end do @@ -762,7 +762,7 @@ subroutine hydrostatic_pressure(nCells, nVertLevels, qsize, index_qv, zz, zgrid, do k = nVertLevels, 1, -1 rhodryk = zz(k,iCell)* rho_zz(k,iCell) !full CAM physics density rhok = 1.0_r8 - do idx=1,thermodynamic_active_species_num + do idx=dry_air_species_num+1,thermodynamic_active_species_num rhok = rhok+q(thermodynamic_active_species_idx_dycore(idx),k,iCell) end do rhok = rhok*rhodryk @@ -772,7 +772,7 @@ subroutine hydrostatic_pressure(nCells, nVertLevels, qsize, index_qv, zz, zgrid, k = nVertLevels sum_water = 1.0_r8 - do idx=1,thermodynamic_active_species_num + do idx=dry_air_species_num+1,thermodynamic_active_species_num sum_water = sum_water+q(thermodynamic_active_species_idx_dycore(idx),k,iCell) end do rhok = sum_water*zz(k,iCell) * rho_zz(k,iCell) @@ -790,7 +790,7 @@ subroutine hydrostatic_pressure(nCells, nVertLevels, qsize, index_qv, zz, zgrid, ! compute hydrostatic dry interface pressure so that (pintdry(k+1)-pintdry(k))/g is pseudo density ! sum_water = 1.0_r8 - do idx=1,thermodynamic_active_species_num + do idx=dry_air_species_num+1,thermodynamic_active_species_num sum_water = sum_water+q(thermodynamic_active_species_idx_dycore(idx),k,iCell) end do thetavk = theta_m(k,iCell)/sum_water!convert modified theta to virtual theta @@ -881,7 +881,7 @@ subroutine tot_energy_dyn(nCells, nVertLevels, qsize, index_qv, zz, zgrid, rho_z u(iCell,k) = ux(k,iCell) v(iCell,k) = uy(k,iCell) phis(iCell) = zgrid(1,iCell)*gravit - do idx=1,thermodynamic_active_species_num + do idx=dry_air_species_num+1,thermodynamic_active_species_num idx_tmp = thermodynamic_active_species_idx_dycore(idx) tracers(iCell,k,idx_tmp) = q(idx_tmp,k,iCell) end do diff --git a/src/dynamics/se/dp_coupling.F90 b/src/dynamics/se/dp_coupling.F90 index 7dae784315..056eb45f93 100644 --- a/src/dynamics/se/dp_coupling.F90 +++ b/src/dynamics/se/dp_coupling.F90 @@ -605,7 +605,7 @@ subroutine derived_phys_dry(phys_state, phys_tend, pbuf2d) ! wet pressure variables (should be removed from physics!) factor_array(:,:) = 1.0_r8 - do m_cnst=1,thermodynamic_active_species_num + do m_cnst=dry_air_species_num + 1,thermodynamic_active_species_num m = thermodynamic_active_species_idx(m_cnst) do k=1,nlev do i=1,ncol From 88ecf21b5870b5ba36c5f6660b7f9fb73a335880 Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Wed, 30 Aug 2023 17:17:03 -0600 Subject: [PATCH 21/30] code for changing PGF formulation in SE --- bld/build-namelist | 1 + bld/namelist_files/namelist_defaults_cam.xml | 2 + bld/namelist_files/namelist_definition.xml | 11 +++ src/dynamics/se/dycore/control_mod.F90 | 4 +- src/dynamics/se/dycore/prim_advance_mod.F90 | 84 +++++++++++--------- src/dynamics/se/dyn_comp.F90 | 8 +- 6 files changed, 68 insertions(+), 42 deletions(-) diff --git a/bld/build-namelist b/bld/build-namelist index 4d429b8ad7..9a3a99fd9e 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -3938,6 +3938,7 @@ if ($dyn =~ /se/) { se_kmin_jet se_kmax_jet se_molecular_diff + se_pgf_formulation ); my %opts; diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index a28ba9f936..2ba3436eb1 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -3010,6 +3010,8 @@ + 1 +2 2 .true. diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index 822bbc64d5..eec1b8cbd8 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -8096,6 +8096,17 @@ Normally equal to se_vert_num_threads. Default: Set by build-namelist. + + + 1: Exner version of pressure gradient force (PGF) + see Appendix A in https://agupubs.onlinelibrary.wiley.com/doi/epdf/10.1029/2022MS003192 + + 2: Traditional pressure gradient formulation (grad p) + + Default: Set by build-namelist. + + diff --git a/src/dynamics/se/dycore/control_mod.F90 b/src/dynamics/se/dycore/control_mod.F90 index 4c1127c45b..df8dd681de 100644 --- a/src/dynamics/se/dycore/control_mod.F90 +++ b/src/dynamics/se/dycore/control_mod.F90 @@ -124,5 +124,7 @@ module control_mod real(r8), public :: molecular_diff = -1.0_r8 integer, public :: vert_remap_uvTq_alg, vert_remap_tracer_alg - + + + integer, public :: pgf_formulation !PGF formulation - see prim_advance_mod.F90 end module control_mod diff --git a/src/dynamics/se/dycore/prim_advance_mod.F90 b/src/dynamics/se/dycore/prim_advance_mod.F90 index 16a190c53c..1d1eb916e8 100644 --- a/src/dynamics/se/dycore/prim_advance_mod.F90 +++ b/src/dynamics/se/dycore/prim_advance_mod.F90 @@ -975,6 +975,7 @@ subroutine compute_and_apply_rhs(np1,nm1,n0,dt2,elem,hvcoord,hybrid,& ! ! =================================== use dimensions_mod, only: np, nc, nlev, use_cslam + use control_mod, only: pgf_formulation use hybrid_mod, only: hybrid_t use element_mod, only: element_t use derivative_mod, only: derivative_t, divergence_sphere, gradient_sphere, vorticity_sphere @@ -1029,8 +1030,7 @@ subroutine compute_and_apply_rhs(np1,nm1,n0,dt2,elem,hvcoord,hybrid,& real (kind=r8) :: vtens1(np,np,nlev),vtens2(np,np,nlev),ttens(np,np,nlev) real (kind=r8) :: stashdp3d (np,np,nlev),tempdp3d(np,np), tempflux(nc,nc,4) real (kind=r8) :: ckk, term, T_v(np,np,nlev) - real (kind=r8), dimension(np,np,2) :: grad_exner - real (kind=r8), dimension(np,np,2) :: grad_exner_term + real (kind=r8), dimension(np,np,2) :: pgf_term real (kind=r8), dimension(np,np,2) :: grad_logexner real (kind=r8) :: T0,T1 real (kind=r8), dimension(np,np) :: theta_v @@ -1176,51 +1176,57 @@ subroutine compute_and_apply_rhs(np1,nm1,n0,dt2,elem,hvcoord,hybrid,& call gradient_sphere(Ephi(:,:),deriv,elem(ie)%Dinv,vtemp) density_inv(:,:) = R_dry(:,:,k)*T_v(:,:,k)/p_full(:,:,k) - if (dry_air_species_num==0) then - exner(:,:)=(p_full(:,:,k)/hvcoord%ps0)**kappa(:,:,k,ie) - theta_v(:,:)=T_v(:,:,k)/exner(:,:) - call gradient_sphere(exner(:,:),deriv,elem(ie)%Dinv,grad_exner) + if (pgf_formulation==1) then + ! pgf_term = grad_exner + if (dry_air_species_num==0) then + exner(:,:)=(p_full(:,:,k)/hvcoord%ps0)**kappa(:,:,k,ie) + theta_v(:,:)=T_v(:,:,k)/exner(:,:) + call gradient_sphere(exner(:,:),deriv,elem(ie)%Dinv,pgf_term) + + pgf_term(:,:,1) = cp_dry(:,:,k)*theta_v(:,:)*pgf_term(:,:,1) + pgf_term(:,:,2) = cp_dry(:,:,k)*theta_v(:,:)*pgf_term(:,:,2) + else + exner(:,:)=(p_full(:,:,k)/hvcoord%ps0)**kappa(:,:,k,ie) + theta_v(:,:)=T_v(:,:,k)/exner(:,:) + call gradient_sphere(exner(:,:),deriv,elem(ie)%Dinv,pgf_term) + + call gradient_sphere(kappa(:,:,k,ie),deriv,elem(ie)%Dinv,grad_kappa_term) + suml = exner(:,:)*LOG(p_full(:,:,k)/hvcoord%ps0) + grad_kappa_term(:,:,1)=-suml*grad_kappa_term(:,:,1) + grad_kappa_term(:,:,2)=-suml*grad_kappa_term(:,:,2) + + pgf_term(:,:,1) = cp_dry(:,:,k)*theta_v(:,:)*(pgf_term(:,:,1)+grad_kappa_term(:,:,1)) + pgf_term(:,:,2) = cp_dry(:,:,k)*theta_v(:,:)*(pgf_term(:,:,2)+grad_kappa_term(:,:,2)) + end if - grad_exner_term(:,:,1) = cp_dry(:,:,k)*theta_v(:,:)*grad_exner(:,:,1) - grad_exner_term(:,:,2) = cp_dry(:,:,k)*theta_v(:,:)*grad_exner(:,:,2) + ! balanced ref profile correction: + ! reference temperature profile (Simmons and Jiabin, 1991, QJRMS, Section 2a) + ! + ! Tref = T0+T1*Exner + ! T1 = .0065*Tref*Cp/g ! = ~191 + ! T0 = Tref-T1 ! = ~97 + ! + T1 = lapse_rate*Tref*cpair*rga + T0 = Tref-T1 + + if (hvcoord%hybm(k)>0) then + call gradient_sphere(log(exner(:,:)),deriv,elem(ie)%Dinv,grad_logexner) + pgf_term(:,:,1)=pgf_term(:,:,1) + & + cpair*T0*(grad_logexner(:,:,1)-pgf_term(:,:,1)/exner(:,:)) + pgf_term(:,:,2)=pgf_term(:,:,2) + & + cpair*T0*(grad_logexner(:,:,2)-pgf_term(:,:,2)/exner(:,:)) + end if else - exner(:,:)=(p_full(:,:,k)/hvcoord%ps0)**kappa(:,:,k,ie) - theta_v(:,:)=T_v(:,:,k)/exner(:,:) - call gradient_sphere(exner(:,:),deriv,elem(ie)%Dinv,grad_exner) - - call gradient_sphere(kappa(:,:,k,ie),deriv,elem(ie)%Dinv,grad_kappa_term) - suml = exner(:,:)*LOG(p_full(:,:,k)/hvcoord%ps0) - grad_kappa_term(:,:,1)=-suml*grad_kappa_term(:,:,1) - grad_kappa_term(:,:,2)=-suml*grad_kappa_term(:,:,2) - - grad_exner_term(:,:,1) = cp_dry(:,:,k)*theta_v(:,:)*(grad_exner(:,:,1)+grad_kappa_term(:,:,1)) - grad_exner_term(:,:,2) = cp_dry(:,:,k)*theta_v(:,:)*(grad_exner(:,:,2)+grad_kappa_term(:,:,2)) - end if - - ! balanced ref profile correction: - ! reference temperature profile (Simmons and Jiabin, 1991, QJRMS, Section 2a) - ! - ! Tref = T0+T1*Exner - ! T1 = .0065*Tref*Cp/g ! = ~191 - ! T0 = Tref-T1 ! = ~97 - ! - T1 = lapse_rate*Tref*cpair*rga - T0 = Tref-T1 - - if (hvcoord%hybm(k)>0) then - call gradient_sphere(log(exner(:,:)),deriv,elem(ie)%Dinv,grad_logexner) - grad_exner_term(:,:,1)=grad_exner_term(:,:,1) + & - cpair*T0*(grad_logexner(:,:,1)-grad_exner(:,:,1)/exner(:,:)) - grad_exner_term(:,:,2)=grad_exner_term(:,:,2) + & - cpair*T0*(grad_logexner(:,:,2)-grad_exner(:,:,2)/exner(:,:)) + pgf_term(i,j,1) = density_inv(i,j)*grad_p_full(i,j,1,k) + pgf_term(i,j,2) = density_inv(i,j)*grad_p_full(i,j,2,k) end if do j=1,np do i=1,np - glnps1 = grad_exner_term(i,j,1) - glnps2 = grad_exner_term(i,j,2) + glnps1 = pgf_term(i,j,1) + glnps2 = pgf_term(i,j,2) v1 = elem(ie)%state%v(i,j,1,k,n0) v2 = elem(ie)%state%v(i,j,2,k,n0) diff --git a/src/dynamics/se/dyn_comp.F90 b/src/dynamics/se/dyn_comp.F90 index 6504eb75cd..5bac429b93 100644 --- a/src/dynamics/se/dyn_comp.F90 +++ b/src/dynamics/se/dyn_comp.F90 @@ -110,7 +110,7 @@ subroutine dyn_readnl(NLFileName) use control_mod, only: topology, variable_nsplit use control_mod, only: fine_ne, hypervis_power, hypervis_scaling use control_mod, only: max_hypervis_courant, statediag_numtrac,refined_mesh - use control_mod, only: molecular_diff + use control_mod, only: molecular_diff, pgf_formulation use control_mod, only: sponge_del4_nu_div_fac, sponge_del4_nu_fac, sponge_del4_lev use dimensions_mod, only: ne, npart use dimensions_mod, only: large_Courant_incr @@ -167,6 +167,7 @@ subroutine dyn_readnl(NLFileName) integer :: se_kmin_jet integer :: se_kmax_jet real(r8) :: se_molecular_diff + integer :: se_pgf_formulation namelist /dyn_se_inparm/ & se_fine_ne, & ! For refined meshes @@ -211,7 +212,8 @@ subroutine dyn_readnl(NLFileName) se_fvm_supercycling_jet, & se_kmin_jet, & se_kmax_jet, & - se_molecular_diff + se_molecular_diff, & + se_pgf_formulation !-------------------------------------------------------------------------- @@ -285,6 +287,7 @@ subroutine dyn_readnl(NLFileName) call MPI_bcast(se_kmin_jet, 1, mpi_integer, masterprocid, mpicom, ierr) call MPI_bcast(se_kmax_jet, 1, mpi_integer, masterprocid, mpicom, ierr) call MPI_bcast(se_molecular_diff, 1, mpi_real8, masterprocid, mpicom, ierr) + call MPI_bcast(se_pgf_formulation, 1, mpi_integer, masterprocid, mpicom, ierr) if (se_npes <= 0) then call endrun('dyn_readnl: ERROR: se_npes must be > 0') @@ -352,6 +355,7 @@ subroutine dyn_readnl(NLFileName) kmax_jet = se_kmax_jet variable_nsplit = .false. molecular_diff = se_molecular_diff + pgf_formulation = se_pgf_formulation if (fv_nphys > 0) then ! Use finite volume physics grid and CSLAM for tracer advection From 9c8f088235a097f5faa3f401c71b6fd591172be9 Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Tue, 5 Sep 2023 14:56:52 -0600 Subject: [PATCH 22/30] fit bug in previous commit --- src/dynamics/se/dycore/prim_advance_mod.F90 | 83 ++++++++++----------- 1 file changed, 38 insertions(+), 45 deletions(-) diff --git a/src/dynamics/se/dycore/prim_advance_mod.F90 b/src/dynamics/se/dycore/prim_advance_mod.F90 index 1d1eb916e8..a1cb2f94f7 100644 --- a/src/dynamics/se/dycore/prim_advance_mod.F90 +++ b/src/dynamics/se/dycore/prim_advance_mod.F90 @@ -1031,7 +1031,7 @@ subroutine compute_and_apply_rhs(np1,nm1,n0,dt2,elem,hvcoord,hybrid,& real (kind=r8) :: stashdp3d (np,np,nlev),tempdp3d(np,np), tempflux(nc,nc,4) real (kind=r8) :: ckk, term, T_v(np,np,nlev) real (kind=r8), dimension(np,np,2) :: pgf_term - real (kind=r8), dimension(np,np,2) :: grad_logexner + real (kind=r8), dimension(np,np,2) :: grad_exner,grad_logexner real (kind=r8) :: T0,T1 real (kind=r8), dimension(np,np) :: theta_v @@ -1177,51 +1177,44 @@ subroutine compute_and_apply_rhs(np1,nm1,n0,dt2,elem,hvcoord,hybrid,& density_inv(:,:) = R_dry(:,:,k)*T_v(:,:,k)/p_full(:,:,k) if (pgf_formulation==1) then - ! pgf_term = grad_exner - if (dry_air_species_num==0) then - exner(:,:)=(p_full(:,:,k)/hvcoord%ps0)**kappa(:,:,k,ie) - theta_v(:,:)=T_v(:,:,k)/exner(:,:) - call gradient_sphere(exner(:,:),deriv,elem(ie)%Dinv,pgf_term) - - pgf_term(:,:,1) = cp_dry(:,:,k)*theta_v(:,:)*pgf_term(:,:,1) - pgf_term(:,:,2) = cp_dry(:,:,k)*theta_v(:,:)*pgf_term(:,:,2) - else - exner(:,:)=(p_full(:,:,k)/hvcoord%ps0)**kappa(:,:,k,ie) - theta_v(:,:)=T_v(:,:,k)/exner(:,:) - call gradient_sphere(exner(:,:),deriv,elem(ie)%Dinv,pgf_term) - - call gradient_sphere(kappa(:,:,k,ie),deriv,elem(ie)%Dinv,grad_kappa_term) - suml = exner(:,:)*LOG(p_full(:,:,k)/hvcoord%ps0) - grad_kappa_term(:,:,1)=-suml*grad_kappa_term(:,:,1) - grad_kappa_term(:,:,2)=-suml*grad_kappa_term(:,:,2) - - pgf_term(:,:,1) = cp_dry(:,:,k)*theta_v(:,:)*(pgf_term(:,:,1)+grad_kappa_term(:,:,1)) - pgf_term(:,:,2) = cp_dry(:,:,k)*theta_v(:,:)*(pgf_term(:,:,2)+grad_kappa_term(:,:,2)) - end if - - ! balanced ref profile correction: - ! reference temperature profile (Simmons and Jiabin, 1991, QJRMS, Section 2a) - ! - ! Tref = T0+T1*Exner - ! T1 = .0065*Tref*Cp/g ! = ~191 - ! T0 = Tref-T1 ! = ~97 - ! - T1 = lapse_rate*Tref*cpair*rga - T0 = Tref-T1 - - if (hvcoord%hybm(k)>0) then - call gradient_sphere(log(exner(:,:)),deriv,elem(ie)%Dinv,grad_logexner) - pgf_term(:,:,1)=pgf_term(:,:,1) + & - cpair*T0*(grad_logexner(:,:,1)-pgf_term(:,:,1)/exner(:,:)) - pgf_term(:,:,2)=pgf_term(:,:,2) + & - cpair*T0*(grad_logexner(:,:,2)-pgf_term(:,:,2)/exner(:,:)) - end if + if (dry_air_species_num==0) then + exner(:,:)=(p_full(:,:,k)/hvcoord%ps0)**kappa(:,:,k,ie) + theta_v(:,:)=T_v(:,:,k)/exner(:,:) + call gradient_sphere(exner(:,:),deriv,elem(ie)%Dinv,grad_exner) + pgf_term(:,:,1) = cp_dry(:,:,k)*theta_v(:,:)*grad_exner(:,:,1) + pgf_term(:,:,2) = cp_dry(:,:,k)*theta_v(:,:)*grad_exner(:,:,2) + else + exner(:,:)=(p_full(:,:,k)/hvcoord%ps0)**kappa(:,:,k,ie) + theta_v(:,:)=T_v(:,:,k)/exner(:,:) + call gradient_sphere(exner(:,:),deriv,elem(ie)%Dinv,grad_exner) + call gradient_sphere(kappa(:,:,k,ie),deriv,elem(ie)%Dinv,grad_kappa_term) + suml = exner(:,:)*LOG(p_full(:,:,k)/hvcoord%ps0) + grad_kappa_term(:,:,1)=-suml*grad_kappa_term(:,:,1) + grad_kappa_term(:,:,2)=-suml*grad_kappa_term(:,:,2) + pgf_term(:,:,1) = cp_dry(:,:,k)*theta_v(:,:)*(grad_exner(:,:,1)+grad_kappa_term(:,:,1)) + pgf_term(:,:,2) = cp_dry(:,:,k)*theta_v(:,:)*(grad_exner(:,:,2)+grad_kappa_term(:,:,2)) + end if + ! balanced ref profile correction: + ! reference temperature profile (Simmons and Jiabin, 1991, QJRMS, Section 2a) + ! + ! Tref = T0+T1*Exner + ! T1 = .0065*Tref*Cp/g ! = ~191 + ! T0 = Tref-T1 ! = ~97 + ! + T1 = lapse_rate*Tref*cpair*rga + T0 = Tref-T1 + if (hvcoord%hybm(k)>0) then + !only apply away from constant pressure levels + call gradient_sphere(log(exner(:,:)),deriv,elem(ie)%Dinv,grad_logexner) + pgf_term(:,:,1)=pgf_term(:,:,1) + & + cpair*T0*(grad_logexner(:,:,1)-grad_exner(:,:,1)/exner(:,:)) + pgf_term(:,:,2)=pgf_term(:,:,2) + & + cpair*T0*(grad_logexner(:,:,2)-grad_exner(:,:,2)/exner(:,:)) + end if else - pgf_term(i,j,1) = density_inv(i,j)*grad_p_full(i,j,1,k) - pgf_term(i,j,2) = density_inv(i,j)*grad_p_full(i,j,2,k) - end if - - + pgf_term(i,j,1) = density_inv(i,j)*grad_p_full(i,j,1,k) + pgf_term(i,j,2) = density_inv(i,j)*grad_p_full(i,j,2,k) + endif do j=1,np do i=1,np From 15cefdaee0c2dfc0d787a1988078613ef30f85e8 Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Tue, 5 Sep 2023 16:29:36 -0600 Subject: [PATCH 23/30] bug in WACCM-x formulation of pgf --- src/dynamics/se/dycore/prim_advance_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dynamics/se/dycore/prim_advance_mod.F90 b/src/dynamics/se/dycore/prim_advance_mod.F90 index a1cb2f94f7..095ff860b2 100644 --- a/src/dynamics/se/dycore/prim_advance_mod.F90 +++ b/src/dynamics/se/dycore/prim_advance_mod.F90 @@ -1212,8 +1212,8 @@ subroutine compute_and_apply_rhs(np1,nm1,n0,dt2,elem,hvcoord,hybrid,& cpair*T0*(grad_logexner(:,:,2)-grad_exner(:,:,2)/exner(:,:)) end if else - pgf_term(i,j,1) = density_inv(i,j)*grad_p_full(i,j,1,k) - pgf_term(i,j,2) = density_inv(i,j)*grad_p_full(i,j,2,k) + pgf_term(:,:,1) = density_inv(:,:)*grad_p_full(:,:,1,k) + pgf_term(:,:,2) = density_inv(:,:)*grad_p_full(:,:,2,k) endif do j=1,np From f2a301d97b3b51e494e76d1ba4fbb5b4f783987e Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Thu, 7 Sep 2023 08:55:36 -0600 Subject: [PATCH 24/30] Update src/dynamics/se/dycore/control_mod.F90 Set default for pgf_formulation Co-authored-by: Francis Vitt --- src/dynamics/se/dycore/control_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dynamics/se/dycore/control_mod.F90 b/src/dynamics/se/dycore/control_mod.F90 index df8dd681de..053f478c6a 100644 --- a/src/dynamics/se/dycore/control_mod.F90 +++ b/src/dynamics/se/dycore/control_mod.F90 @@ -126,5 +126,5 @@ module control_mod integer, public :: vert_remap_uvTq_alg, vert_remap_tracer_alg - integer, public :: pgf_formulation !PGF formulation - see prim_advance_mod.F90 + integer, public :: pgf_formulation = -1 !PGF formulation - see prim_advance_mod.F90 end module control_mod From 4a404258f78d187cedc68ac44f54eaa0d452cb95 Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Fri, 8 Sep 2023 16:06:02 -0600 Subject: [PATCH 25/30] code changes from code review --- bld/namelist_files/namelist_definition.xml | 2 +- src/dynamics/se/dycore/prim_advance_mod.F90 | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index eec1b8cbd8..c57cb64f1c 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -5120,7 +5120,7 @@ Default: set by build-namelist group="phys_ctl_nl" valid_values="" > Logical: If True activate Holtslag and Boville vertical diffusion scheme where CLUBB is not active (note that CLUBB top is dynamic in each column) -Default: none +Default: .false. diff --git a/src/dynamics/se/dycore/prim_advance_mod.F90 b/src/dynamics/se/dycore/prim_advance_mod.F90 index 095ff860b2..f9199bf7ce 100644 --- a/src/dynamics/se/dycore/prim_advance_mod.F90 +++ b/src/dynamics/se/dycore/prim_advance_mod.F90 @@ -1211,10 +1211,12 @@ subroutine compute_and_apply_rhs(np1,nm1,n0,dt2,elem,hvcoord,hybrid,& pgf_term(:,:,2)=pgf_term(:,:,2) + & cpair*T0*(grad_logexner(:,:,2)-grad_exner(:,:,2)/exner(:,:)) end if - else + elseif (pgf_formulation==2) then pgf_term(:,:,1) = density_inv(:,:)*grad_p_full(:,:,1,k) pgf_term(:,:,2) = density_inv(:,:)*grad_p_full(:,:,2,k) - endif + else + call endrun('ERROR: bad choice of pgf_formulation (must be 1 or 2)') + end if do j=1,np do i=1,np From 8baa7c3a1e86e387f0566d38539be9bace05639f Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Mon, 11 Sep 2023 07:15:43 -0600 Subject: [PATCH 26/30] Update src/physics/cam/vertical_diffusion.F90 Co-authored-by: Francis Vitt --- src/physics/cam/vertical_diffusion.F90 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/physics/cam/vertical_diffusion.F90 b/src/physics/cam/vertical_diffusion.F90 index f41cbd99b9..de47c75fb1 100644 --- a/src/physics/cam/vertical_diffusion.F90 +++ b/src/physics/cam/vertical_diffusion.F90 @@ -616,8 +616,10 @@ subroutine vertical_diffusion_init(pbuf2d) kvh_idx = pbuf_get_index('kvh') end if - ! pbuf field denoting top of clubb - clubbtop_idx = pbuf_get_index('clubbtop') + if (do_hb_above_clubb) then + ! pbuf field denoting top of clubb + clubbtop_idx = pbuf_get_index('clubbtop') + end if ! Initialization of some pbuf fields if (is_first_step()) then From c2d7b36caa7fc1862789f81958b628a236e83ee4 Mon Sep 17 00:00:00 2001 From: Peter Hjort Lauritzen Date: Mon, 11 Sep 2023 07:17:43 -0600 Subject: [PATCH 27/30] fix namelist definition --- bld/namelist_files/namelist_definition.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index c57cb64f1c..3b672d4570 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -5120,7 +5120,7 @@ Default: set by build-namelist group="phys_ctl_nl" valid_values="" > Logical: If True activate Holtslag and Boville vertical diffusion scheme where CLUBB is not active (note that CLUBB top is dynamic in each column) -Default: .false. +Default: Set by build-namelist. From 7f5c1152902b2e04004e2c960f05dd85152186a4 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Mon, 11 Sep 2023 11:36:48 -0600 Subject: [PATCH 28/30] updates to include spun up waccm IC file and allow default value of se_nsplit --- bld/namelist_files/namelist_defaults_cam.xml | 2 +- .../testdefs/testmods_dirs/cam/outfrq9s_wcm_ne30/user_nl_cam | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index 2ba3436eb1..88f72ccc16 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -264,7 +264,7 @@ atm/waccm/ic/wa3_ne5np4_1950_spinup.cam2.i.1960-01-01-00000_c150810.nc atm/waccm/ic/FW2000_ne30_L70_01-01-0001_c200602.nc atm/waccm/ic/FWsc2000climo_ne30pg3_L70_0002-01-01_c221103.nc -atm/waccm/ic/FW2000_ne30pg3_L70_01-01-0001_c200602.nc +atm/waccm/ic/FW2000.ne30pg3_ne30pg3_nlev70_c230906.nc atm/waccm/ic/FWsc2000_ne30pg3_L110_01-01-0001_c200521.nc atm/waccm/ic/FW2000_CONUS_30x8_L70_01-01-0001_c200602.nc diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_wcm_ne30/user_nl_cam b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_wcm_ne30/user_nl_cam index f695957589..41eded30db 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_wcm_ne30/user_nl_cam +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_wcm_ne30/user_nl_cam @@ -3,6 +3,5 @@ ndens=1,1,1,1,1,1,1,1,1 nhtfrq=9,9,9,9,9,9,9,9,9 inithist='ENDOFRUN' -se_nsplit = 30 state_debug_checks = .true. From 3f2dde032e56b4e0b4b90e90a4c252249976f981 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Mon, 11 Sep 2023 13:45:17 -0600 Subject: [PATCH 29/30] ChangeLog update --- doc/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/ChangeLog b/doc/ChangeLog index 607f6f4e72..e55c32ff30 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -64,6 +64,7 @@ M src/physics/cam/phys_control.F90 M src/dynamics/se/dycore/prim_advance_mod.F90 M src/dynamics/se/dyn_comp.F90 +M src/dynamics/se/dycore/control_mod.F90 - remove duplicate timing call - allow use of older pgf formulation to help with waccm regression errors From 54ba97d721cd330e76d9279bc3071197936cc449 Mon Sep 17 00:00:00 2001 From: John Truesdale Date: Tue, 12 Sep 2023 13:54:22 -0600 Subject: [PATCH 30/30] update ChangeLog with regression test results --- doc/ChangeLog | 166 +++++++++++++++++++++++++++++++------------------- 1 file changed, 102 insertions(+), 64 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index e55c32ff30..af188b509a 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -2,7 +2,7 @@ Tag name: cam6_3_127 Originator(s): pel, jet -Date: July 05, 2023 +Date: Sept 12, 2023 One-line Summary: Option to turn on HB where CLUBB is not active Github PR URL: https://github.com/ESCOMP/CAM/pull/849 @@ -17,9 +17,14 @@ Describe any changes made to build system: NA Describe any changes made to the namelist: - Introduced namelist variable do_hb_above_clubb. Default False unless using cam6 or cam_dev then Holtslag-Boville PBL scheme will be used above CLUBB top) + - new namelist variable se_pgf_formulation to allow use of older pgf calculation to help with waccm regression errors + Can have an interger value of 1 or 2. + 1: Exner version of pressure gradient force (PGF) + 2: Traditional pressure gradient formulation (grad p) List any changes to the defaults for the boundary datasets: N/A - New Boundary data for ERP and SMS WACCM runs - these runs require a spun up IC. + inputdata/atm/waccm/ic/FW2000.ne30pg3_ne30pg3_nlev70_c230906.nc Describe any substantial timing or memory changes: N/A @@ -74,79 +79,112 @@ then copy the lines from the td.*.status files for the failed tests to the appropriate machine below. All failed tests must be justified. cheyenne/intel/aux_cam: all BFB except: - ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: FAIL) + + ERP_Ln9_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq9s (Overall: FAIL) details: - pre-existing failure - SMS_Ld5_Vnuopc.f09_f09_mg17.PC6.cheyenne_intel.cam-cam6_port_f09 (Overall: NLFAIL) - - expected namelist failures from adding do_hb_above_clubb=.false. + ERC_D_Ln9_Vnuopc.ne16_ne16_mg17.FADIAB.cheyenne_intel.cam-terminator (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.ne16_ne16_mg17.QPC5HIST.cheyenne_intel.cam-outfrq3s_usecase (Overall: NLFAIL) details: + ERS_Ln9_Vnuopc.ne0TESTONLYne5x4_ne0TESTONLYne5x4_mg37.FADIAB.cheyenne_intel.cam-outfrq3s_refined (Overall: NLFAIL) details: + - expected NLFAIL due to new se_pgf_formulation namelist variable. - ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase (Overall: DIFF) - ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp (Overall: DIFF) - ERP_D_Ln9_Vmct.f09_f09_mg17.QSC6.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_D_Ln9_Vmct.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_D_Ln9_Vnuopc.f09_f09_mg17.QSC6.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_Ld3_Vnuopc.f09_f09_mg17.FWHIST.cheyenne_intel.cam-reduced_hist1d (Overall: DIFF) - ERP_Ln9_P24x3_Vnuopc.f45_f45_mg37.QPWmaC6.cheyenne_intel.cam-outfrq9s_mee_fluxes (Overall: DIFF) - ERP_Ln9_Vmct.f09_f09_mg17.2000_CAM60_CLM50%SP_CICE5%PRES_DOCN%DOM_MOSART_SGLC_SWAV.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) - ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) - ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERP_Ln9_Vnuopc.ne30_ne30_mg17.FCnudged.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev (Overall: DIFF) - ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 (Overall: DIFF) - ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 (Overall: DIFF) - ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - ERS_Ln9_Vnuopc.f19_f19_mg17.FXSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vmct.T42_T42.2000_CAM60%SCAM_CLM50%SP_CICE5%PRES_DOCN%DOM_SROF_SGLC_SWAV.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCts2nudged.cheyenne_intel.cam-outfrq9s_leapday (Overall: DIFF) - SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCvbsxHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s_waccm_ma_mam4 (Overall: DIFF) - SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie (Overall: DIFF) - SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC2000climo.cheyenne_intel.cam-outfrq3s_usecase (Overall: DIFF) - SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.QPX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vnuopc_P720x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s (Overall: DIFF) - SMS_Ld1_Vnuopc.f09_f09_mg17.FW2000climo.cheyenne_intel.cam-outfrq1d (Overall: DIFF) - SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d (Overall: DIFF) - SMS_Ld1_Vnuopc.ne30pg3_ne30pg3_mg17.FC2010climo.cheyenne_intel.cam-outfrq1d (Overall: DIFF) - SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m (Overall: DIFF) - SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging (Overall: DIFF) - SMS_Ln9_Vnuopc.f09_f09_mg17.FW1850.cheyenne_intel.cam-reduced_hist3s (Overall: DIFF) - SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs (Overall: DIFF) - SMS_Ln9_Vnuopc.f19_f19_mg17.FHIST.cheyenne_intel.cam-outfrq9s_nochem (Overall: DIFF) + SMS_Ld5_Vnuopc.f09_f09_mg17.PC6.cheyenne_intel.cam-cam6_port_f09 (Overall: NLFAIL) details: + - expected NLFAIL due to new do_hb_above_clubb namelist variable. + + ERC_D_Ln9_P144x1_Vnuopc.ne16pg3_ne16pg3_mg17.QPC6HIST.cheyenne_intel.cam-outfrq3s_ttrac_usecase (Overall: DIFF) details: + ERC_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq3s_cosp (Overall: DIFF) details: + ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_D_Ln9_Vnuopc.f09_f09_mg17.QSC6.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_D_Ln9_Vnuopc.f19_f19_mg17.QPC6.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_D_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.F2000dev.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_Ld3_Vnuopc.f09_f09_mg17.FWHIST.cheyenne_intel.cam-reduced_hist1d (Overall: DIFF) details: + ERP_Ln9_P24x3_Vnuopc.f45_f45_mg37.QPWmaC6.cheyenne_intel.cam-outfrq9s_mee_fluxes (Overall: DIFF) details: + ERP_Ln9_Vnuopc.C96_C96_mg17.F2000climo.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.F1850.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.F2000climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.F2000dev.cheyenne_intel.cam-outfrq9s_mg3 (Overall: DIFF) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_Ln9_Vnuopc.f09_f09_mg17.FHIST_BDRD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_Ln9_Vnuopc.f19_f19_mg17.FWsc1850.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_Ln9_Vnuopc.ne30_ne30_mg17.FCnudged.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERP_Ln9_Vnuopc.ne30pg3_ne30pg3_mg17.FW2000climo.cheyenne_intel.cam-outfrq9s_wcm_ne30 (Overall: DIFF) details: + ERS_Ld3_Vnuopc.f10_f10_mg37.F1850.cheyenne_intel.cam-outfrq1d_14dec_ghg_cam_dev (Overall: DIFF) details: + ERS_Ln9_P288x1_Vnuopc.mpasa120_mpasa120.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa120 (Overall: DIFF) details: + ERS_Ln9_P36x1_Vnuopc.mpasa480_mpasa480.F2000climo.cheyenne_intel.cam-outfrq9s_mpasa480 (Overall: DIFF) details: + ERS_Ln9_Vnuopc.f09_f09_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + ERS_Ln9_Vnuopc.f19_f19_mg17.FXSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FMTHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCts2nudged.cheyenne_intel.cam-outfrq9s_leapday (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.f09_f09_mg17.FCvbsxHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.f09_f09_mg17.FSD.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.f19_f19_mg17.FWma2000climo.cheyenne_intel.cam-outfrq9s_waccm_ma_mam4 (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.f19_f19_mg17.FXHIST.cheyenne_intel.cam-outfrq9s_amie (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.f19_f19_mg17.QPC2000climo.cheyenne_intel.cam-outfrq3s_usecase (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.FX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.ne16_ne16_mg17.QPX2000.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc_P720x1.ne0ARCTICne30x4_ne0ARCTICne30x4_mt12.FHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc_P720x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc_P720x1.ne30pg3_ne30pg3_mg17.FCLTHIST.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.T42_T42.FSCAM.cheyenne_intel.cam-outfrq9s (Overall: DIFF) details: + SMS_Ld1_Vnuopc.f09_f09_mg17.FW2000climo.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details: + SMS_Ld1_Vnuopc.f19_f19.F2000dev.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details: + SMS_Ld1_Vnuopc.ne30pg3_ne30pg3_mg17.FC2010climo.cheyenne_intel.cam-outfrq1d (Overall: DIFF) details: + SMS_Lh12_Vnuopc.f09_f09_mg17.FCSD_HCO.cheyenne_intel.cam-outfrq3h (Overall: DIFF) details: + SMS_Lm13_Vnuopc.f10_f10_mg37.F2000climo.cheyenne_intel.cam-outfrq1m (Overall: DIFF) details: + SMS_Ln9_Vnuopc.f09_f09_mg17.F2010climo.cheyenne_intel.cam-nudging (Overall: DIFF) details: + SMS_Ln9_Vnuopc.f09_f09_mg17.FW1850.cheyenne_intel.cam-reduced_hist3s (Overall: DIFF) details: + SMS_Ln9_Vnuopc.f19_f19.F2000climo.cheyenne_intel.cam-silhs (Overall: DIFF) details: + SMS_Ln9_Vnuopc.f19_f19_mg17.FHIST.cheyenne_intel.cam-outfrq9s_nochem (Overall: DIFF) details: - expected diff for cam_dev and cam6 run using do_hb_above_clubb=.true. + izumi/nag/aux_cam: all BFB except: DAE_Vnuopc.f45_f45_mg37.FHS94.izumi_nag.cam-dae (Overall: FAIL) - - pre-existing failure + - pre-existing failure - ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am (Overall: DIFF) - ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic (Overall: DIFF) - ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist (Overall: DIFF) - ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s (Overall: DIFF) - ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s (Overall: DIFF) - ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 (Overall: DIFF) - ERP_Ln9_Vmct.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: DIFF) - ERP_Ln9_Vnuopc.ne3pg3_ne3pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: DIFF) - ERP_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: DIFF) - PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: PEND) - SMS_D_Ln3_Vnuopc.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s (Overall: DIFF) - SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_ba (Overall: DIFF) - SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase (Overall: DIFF) - - expected diff for cam_dev/cam6 runs using do_hb_above_clubb=.true. + ERC_D_Ln9_Vnuopc.ne16_ne16_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-outfrq3s_ttrac (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.ne16pg3_ne16pg3_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase (Overall: NLFAIL) details: + ERI_D_Ln18_Vnuopc.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s_bwic (Overall: NLFAIL) details: + ERI_D_Ln18_Vnuopc.ne5pg3_ne5pg3_mg37.FADIAB.izumi_nag.cam-outfrq3s_bwic (Overall: NLFAIL) details: + ERS_Ln27_Vnuopc.ne5pg3_ne5pg3_mg37.FKESSLER.izumi_nag.cam-outfrq9s (Overall: NLFAIL) details: + ERS_Ln9_Vnuopc.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq9s (Overall: NLFAIL) details: + PEM_D_Ln9_Vnuopc.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details: + PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 (Overall: NLFAIL) details: + PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 (Overall: NLFAIL) details: + PLB_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 (Overall: NLFAIL) details: + SMS_D_Ln6_Vnuopc.ne5_ne5_mg37.QPWmaC4.izumi_nag.cam-outfrq3s_physgrid_tem (Overall: NLFAIL) details: + SMS_D_Ln9_P1x1_Vnuopc.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s (Overall: NLFAIL) details: + - expected NLFAIL due to new se_pgf_formulation namelist variable. + + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am (Overall: DIFF) details: + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_convmic (Overall: DIFF) details: + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist (Overall: DIFF) details: + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details: + ERC_D_Ln9_Vnuopc.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s (Overall: DIFF) details: + ERI_D_Ln18_Vnuopc.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 (Overall: DIFF) details: + ERP_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf (Overall: DIFF) details: + SMS_D_Ln3_Vnuopc.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s (Overall: DIFF) details: + SMS_D_Ln9_Vnuopc.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_ba (Overall: DIFF) details: + SMS_P48x1_D_Ln3_Vnuopc.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase (Overall: DIFF) details: + - expected diff for cam_dev/cam6 runs using do_hb_above_clubb=.true. izumi/gnu/aux_cam: all BFB except: + + ERC_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC4.izumi_gnu.cam-outfrq3s_nudging_ne5_L26 (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq3s_ba (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.ne5pg2_ne5pg2_mg37.FADIAB.izumi_gnu.cam-outfrq3s (Overall: NLFAIL) details: + ERC_D_Ln9_Vnuopc.ne5pg4_ne5pg4_mg37.FADIAB.izumi_gnu.cam-outfrq3s (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.ne5_ne5_mg37.FHS94.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details: + ERP_Ln9_Vnuopc.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq9s (Overall: NLFAIL) details: + PEM_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.FADIAB.izumi_gnu.cam-outfrq3s (Overall: NLFAIL) details: + PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0 (Overall: NLFAIL) details: + PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1 (Overall: NLFAIL) details: + PLB_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3 (Overall: NLFAIL) details: + SMS_D_Ln9_Vnuopc.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac (Overall: NLFAIL) details: + - expected NLFAIL due to new se_pgf_formulation namelist variable. + SMS_D_Ln9.f10_f10_mg37.2000_CAM%DEV%GHGMAM4_CLM50%SP_CICE%PRES_DOCN%DOM_MOSART_SGLC_SWAV_SESP.izumi_gnu.cam-outfrq9s (Overall: DIFF) - expected diff for cam_dev/cam6 runs using do_hb_above_clubb=.true.