From 610e7a969e4ae45a0162f1c02486b1e7f1e7c7f3 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Fri, 27 Jan 2023 16:52:20 -0700 Subject: [PATCH 01/20] implement soil erod switch modified: bld/namelist_files/namelist_definition.xml modified: src/chemistry/modal_aero/dust_model.F90 --- bld/namelist_files/namelist_definition.xml | 19 ++++-- src/chemistry/modal_aero/dust_model.F90 | 77 +++++++++++++++------- 2 files changed, 68 insertions(+), 28 deletions(-) diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index 6608541143..a67067a77b 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -3545,7 +3545,7 @@ Include effects of precip evaporation on turbulent moments Switch for CLUBB_ADV parameter that turns on advection of CLUBB pdf moments by -the dynamics core. Very experimental. +the dynamics core. Very experimental. @@ -3894,7 +3894,7 @@ xpyp only. -Flag to apply a locally calculated ustar to momentum surface fluxes in the +Flag to apply a locally calculated ustar to momentum surface fluxes in the clubb interface. @@ -3960,8 +3960,8 @@ Flag to turn on the clubb monotonic flux limiter for vm (meridional momemtum). -Flag to use an "upwind" discretization rather than a centered discretization -for the portion of the wp3 turbulent advection term for ADG1 that is linearized +Flag to use an "upwind" discretization rather than a centered discretization +for the portion of the wp3 turbulent advection term for ADG1 that is linearized in terms of wp3(t+1). (Requires ADG1 PDF and l_standard_term_ta=true). @@ -3988,7 +3988,7 @@ Flag to use smooth Heaviside 'Peskin' in computation of invrs_tau. -Use the standard discretization for the turbulent advection terms. Setting to +Use the standard discretization for the turbulent advection terms. Setting to .false. means that a_1 and a_3 are pulled outside of the derivative in advance_wp2_wp3_module.F90 and in advance_xp2_xpyp_module.F90. @@ -4070,7 +4070,7 @@ production) term. -Flag used to calculate convective velocity using a variable estimate of layer +Flag used to calculate convective velocity using a variable estimate of layer depth based on the depth over which wpthlp is positive near the ground when true @@ -6742,6 +6742,13 @@ Full pathname of boundary dataset for soil erodibility factors. Default: set by build-namelist. + +Switch to turn on/off soil erodibility for dust emissions in CAM. +Default: FALSE + + + List of full pathnames of surface emission datasets. diff --git a/src/chemistry/modal_aero/dust_model.F90 b/src/chemistry/modal_aero/dust_model.F90 index 923ab9e3db..9b95b9cd3d 100644 --- a/src/chemistry/modal_aero/dust_model.F90 +++ b/src/chemistry/modal_aero/dust_model.F90 @@ -6,6 +6,7 @@ module dust_model use spmd_utils, only: masterproc use cam_abortutils, only: endrun use modal_aero_data, only: ntot_amode, ndst=>nDust + use cam_logfile, only: iulog implicit none private @@ -30,8 +31,10 @@ module dust_model real(r8), allocatable :: dust_dmt_vwr(:) real(r8), allocatable :: dust_stk_crc(:) - real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions - character(len=cl) :: soil_erod_file = 'soil_erod_file' ! full pathname for soil erodibility dataset + real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions + character(len=cl) :: soil_erod_file = 'soil_erod_file' ! full pathname for soil erodibility dataset + + logical :: soil_erod_active = .true. logical :: dust_active = .false. @@ -44,7 +47,7 @@ subroutine dust_readnl(nlfile) use namelist_utils, only: find_group_name use units, only: getunit, freeunit - use mpishorthand + use spmd_utils, only: mpicom, masterprocid, mpi_character, mpi_logical, mpi_real8, mpi_success character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input @@ -52,7 +55,7 @@ subroutine dust_readnl(nlfile) integer :: unitn, ierr character(len=*), parameter :: subname = 'dust_readnl' - namelist /dust_nl/ dust_emis_fact, soil_erod_file + namelist /dust_nl/ dust_emis_fact, soil_erod_file, soil_erod_active !----------------------------------------------------------------------------- @@ -71,11 +74,25 @@ subroutine dust_readnl(nlfile) call freeunit(unitn) end if -#ifdef SPMD ! Broadcast namelist variables - call mpibcast(dust_emis_fact, 1, mpir8, 0, mpicom) - call mpibcast(soil_erod_file, len(soil_erod_file), mpichar, 0, mpicom) -#endif + call mpi_bcast(soil_erod_file, len(soil_erod_file), mpi_character, masterprocid, mpicom, ierr) + if (ierr/=mpi_success) then + call endrun(subname//' MPI_BCAST ERROR: soil_erod_file') + end if + call mpi_bcast(dust_emis_fact, 1, mpi_real8, masterprocid, mpicom, ierr) + if (ierr/=mpi_success) then + call endrun(subname//' MPI_BCAST ERROR: dust_emis_fact') + end if + call mpi_bcast(soil_erod_active, 1, mpi_logical, masterprocid, mpicom, ierr) + if (ierr/=mpi_success) then + call endrun(subname//' MPI_BCAST ERROR: soil_erod_active') + end if + + if (masterproc) then + write(iulog,*) subname,': soil_erod_active = ',soil_erod_active + write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file) + write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact + end if end subroutine dust_readnl @@ -131,7 +148,9 @@ subroutine dust_init() dust_active = any(dust_indices(:) > 0) if (.not.dust_active) return - call soil_erod_init( dust_emis_fact, soil_erod_file ) + if (soil_erod_active) then + call soil_erod_init( dust_emis_fact, soil_erod_file ) + end if call dust_set_params( dust_nbin, dust_dmt_grd, dust_dmt_vwr, dust_stk_crc ) @@ -158,29 +177,43 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) ! set dust emissions - col_loop: do i =1,ncol + if (soil_erod_active) then + col_loop: do i =1,ncol - soil_erod(i) = soil_erodibility( i, lchnk ) + soil_erod(i) = soil_erodibility( i, lchnk ) - if( soil_erod(i) .lt. soil_erod_threshold ) soil_erod(i) = 0._r8 + if( soil_erod(i) .lt. soil_erod_threshold ) soil_erod(i) = 0._r8 - ! rebin and adjust dust emissons.. - do m = 1,dust_nbin + ! rebin and adjust dust emissons + do m = 1,dust_nbin - idst = dust_indices(m) + idst = dust_indices(m) - cflx(i,idst) = sum( -dust_flux_in(i,:) ) & - * dust_emis_sclfctr(m)*soil_erod(i)/soil_erod_fact*1.15_r8 + cflx(i,idst) = sum( -dust_flux_in(i,:) ) & + * dust_emis_sclfctr(m)*soil_erod(i)/soil_erod_fact*1.15_r8 - x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) + x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) - inum = dust_indices(m+dust_nbin) + inum = dust_indices(m+dust_nbin) - cflx(i,inum) = cflx(i,idst)*x_mton + cflx(i,inum) = cflx(i,idst)*x_mton - enddo + enddo + + end do col_loop + else + ! rebin dust emissons + do i = 1,ncol + do m = 1,dust_nbin + idst = dust_indices(m) + cflx(i,idst) = sum( -dust_flux_in(i,:) ) * dust_emis_sclfctr(m) ! mass mixing ratio + x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) + inum = dust_indices(m+dust_nbin) + cflx(i,inum) = cflx(i,idst)*x_mton ! number mixing ratio + end do + end do + end if - end do col_loop end subroutine dust_emis From 531134107f91ffcb330b7326838b0f5766053126 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Tue, 31 Jan 2023 16:43:39 -0700 Subject: [PATCH 02/20] implement soil erod switch for bulk model modified: src/chemistry/bulk_aero/dust_model.F90 modified: src/chemistry/modal_aero/dust_model.F90 --- src/chemistry/bulk_aero/dust_model.F90 | 69 +++++++++++++++++-------- src/chemistry/modal_aero/dust_model.F90 | 5 +- 2 files changed, 49 insertions(+), 25 deletions(-) diff --git a/src/chemistry/bulk_aero/dust_model.F90 b/src/chemistry/bulk_aero/dust_model.F90 index 1a0ff4c5aa..8fd504de8d 100644 --- a/src/chemistry/bulk_aero/dust_model.F90 +++ b/src/chemistry/bulk_aero/dust_model.F90 @@ -1,10 +1,11 @@ !=============================================================================== ! Dust for Bulk Aerosol Model !=============================================================================== -module dust_model +module dust_model use shr_kind_mod, only: r8 => shr_kind_r8, cl => shr_kind_cl use spmd_utils, only: masterproc use cam_abortutils, only: endrun + use cam_logfile, only: iulog implicit none private @@ -36,6 +37,9 @@ module dust_model real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions character(len=cl) :: soil_erod_file = 'soil_erod_file' ! full pathname for soil erodibility dataset + + logical :: soil_erod_active = .true. + contains !============================================================================= @@ -44,8 +48,7 @@ module dust_model subroutine dust_readnl(nlfile) use namelist_utils, only: find_group_name - use units, only: getunit, freeunit - use mpishorthand + use spmd_utils, only: mpicom, masterprocid, mpi_character, mpi_logical, mpi_real8, mpi_success character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input @@ -53,14 +56,13 @@ subroutine dust_readnl(nlfile) integer :: unitn, ierr character(len=*), parameter :: subname = 'dust_readnl' - namelist /dust_nl/ dust_emis_fact, soil_erod_file + namelist /dust_nl/ dust_emis_fact, soil_erod_file, soil_erod_active !----------------------------------------------------------------------------- ! Read namelist if (masterproc) then - unitn = getunit() - open( unitn, file=trim(nlfile), status='old' ) + open( newunit=unitn, file=trim(nlfile), status='old' ) call find_group_name(unitn, 'dust_nl', status=ierr) if (ierr == 0) then read(unitn, dust_nl, iostat=ierr) @@ -69,14 +71,27 @@ subroutine dust_readnl(nlfile) end if end if close(unitn) - call freeunit(unitn) end if -#ifdef SPMD ! Broadcast namelist variables - call mpibcast(dust_emis_fact, 1, mpir8, 0, mpicom) - call mpibcast(soil_erod_file, len(soil_erod_file), mpichar, 0, mpicom) -#endif + call mpi_bcast(soil_erod_file, len(soil_erod_file), mpi_character, masterprocid, mpicom, ierr) + if (ierr/=mpi_success) then + call endrun(subname//' MPI_BCAST ERROR: soil_erod_file') + end if + call mpi_bcast(dust_emis_fact, 1, mpi_real8, masterprocid, mpicom, ierr) + if (ierr/=mpi_success) then + call endrun(subname//' MPI_BCAST ERROR: dust_emis_fact') + end if + call mpi_bcast(soil_erod_active, 1, mpi_logical, masterprocid, mpicom, ierr) + if (ierr/=mpi_success) then + call endrun(subname//' MPI_BCAST ERROR: soil_erod_active') + end if + + if (masterproc) then + write(iulog,*) subname,': soil_erod_active = ',soil_erod_active + write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file) + write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact + end if end subroutine dust_readnl @@ -95,7 +110,9 @@ subroutine dust_init() dust_active = any(dust_indices(:) > 0) if (.not.dust_active) return - call soil_erod_init( dust_emis_fact, soil_erod_file ) + if (soil_erod_active) then + call soil_erod_init( dust_emis_fact, soil_erod_file ) + endif call dust_set_params( dust_nbin, dust_dmt_grd, dust_dmt_vwr, dust_stk_crc ) @@ -120,20 +137,30 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) ! set dust emissions - col_loop: do i =1,ncol + if (soil_erod_active) then + col_loop: do i =1,ncol - soil_erod(i) = soil_erodibility( i, lchnk ) + soil_erod(i) = soil_erodibility( i, lchnk ) - ! adjust emissions based on soil erosion - do m = 1,dust_nbin + ! adjust emissions based on soil erosion + do m = 1,dust_nbin - idst = dust_indices(m) - cflx(i,idst) = -dust_flux_in(i,m) & - * dust_emis_sclfctr(m)*soil_erod(i)/soil_erod_fact*1.15_r8 + idst = dust_indices(m) + cflx(i,idst) = -dust_flux_in(i,m) & + * dust_emis_sclfctr(m)*soil_erod(i)/soil_erod_fact*1.15_r8 - enddo + enddo - end do col_loop + end do col_loop + else + ! rebin dust emissons + do i = 1,ncol + do m = 1,dust_nbin + idst = dust_indices(m) + cflx(i,idst) = -dust_flux_in(i,m) * dust_emis_sclfctr(m) + end do + end do + end if end subroutine dust_emis diff --git a/src/chemistry/modal_aero/dust_model.F90 b/src/chemistry/modal_aero/dust_model.F90 index 9b95b9cd3d..196fe9518c 100644 --- a/src/chemistry/modal_aero/dust_model.F90 +++ b/src/chemistry/modal_aero/dust_model.F90 @@ -46,7 +46,6 @@ module dust_model subroutine dust_readnl(nlfile) use namelist_utils, only: find_group_name - use units, only: getunit, freeunit use spmd_utils, only: mpicom, masterprocid, mpi_character, mpi_logical, mpi_real8, mpi_success character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input @@ -61,8 +60,7 @@ subroutine dust_readnl(nlfile) ! Read namelist if (masterproc) then - unitn = getunit() - open( unitn, file=trim(nlfile), status='old' ) + open( newunit=unitn, file=trim(nlfile), status='old' ) call find_group_name(unitn, 'dust_nl', status=ierr) if (ierr == 0) then read(unitn, dust_nl, iostat=ierr) @@ -71,7 +69,6 @@ subroutine dust_readnl(nlfile) end if end if close(unitn) - call freeunit(unitn) end if ! Broadcast namelist variables From 92b6bacbfb50ce286d4307296a924c936260cb7f Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Wed, 24 Jul 2024 13:16:37 -0600 Subject: [PATCH 03/20] use Erik's CTSM branch --- .gitmodules | 5 ++--- bld/namelist_files/namelist_definition.xml | 3 +-- components/clm | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.gitmodules b/.gitmodules index 9e80e983eb..ab666272a2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -178,8 +178,8 @@ fxDONOTUSEurl = https://github.com/NCAR/ParallelIO [submodule "clm"] path = components/clm -url = https://github.com/ESCOMP/CTSM -fxtag = ctsm5.2.009 +url = https://github.com/ekluzek/CTSM.git +fxtag = 8478b73 fxrequired = ToplevelRequired fxDONOTUSEurl = https://github.com/ESCOMP/CTSM @@ -189,4 +189,3 @@ url = https://github.com/ESCOMP/FMS_interface fxtag = fi_240516 fxrequired = ToplevelRequired fxDONOTUSEurl = https://github.com/ESCOMP/FMS_interface - diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index ec947d6114..339b1fc801 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -7156,10 +7156,9 @@ Default: set by build-namelist. Switch to turn on/off soil erodibility for dust emissions in CAM. -Default: FALSE +Default: TRUE - List of full pathnames of surface emission datasets. diff --git a/components/clm b/components/clm index e04b7e2ee9..8478b73066 160000 --- a/components/clm +++ b/components/clm @@ -1 +1 @@ -Subproject commit e04b7e2ee974aaef93117776a96fd7ce1e774b4d +Subproject commit 8478b730663ee4a6698b70804e95a1f029662aab From bfb188653f453ed94ea21a5f27cad2ab733f6959 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Thu, 25 Jul 2024 09:59:19 -0600 Subject: [PATCH 04/20] use shr_dust_emis_mod inquiry functions modified: src/chemistry/bulk_aero/dust_model.F90 modified: src/chemistry/modal_aero/dust_model.F90 modified: bld/namelist_files/namelist_definition.xml --- bld/namelist_files/namelist_definition.xml | 6 -- src/chemistry/bulk_aero/dust_model.F90 | 62 ++++++++++--------- src/chemistry/modal_aero/dust_model.F90 | 70 +++++++++------------- 3 files changed, 62 insertions(+), 76 deletions(-) diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index 339b1fc801..e0c4b46778 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -7153,12 +7153,6 @@ Full pathname of boundary dataset for soil erodibility factors. Default: set by build-namelist. - -Switch to turn on/off soil erodibility for dust emissions in CAM. -Default: TRUE - - List of full pathnames of surface emission datasets. diff --git a/src/chemistry/bulk_aero/dust_model.F90 b/src/chemistry/bulk_aero/dust_model.F90 index 8fd504de8d..d90e0884fd 100644 --- a/src/chemistry/bulk_aero/dust_model.F90 +++ b/src/chemistry/bulk_aero/dust_model.F90 @@ -6,6 +6,8 @@ module dust_model use spmd_utils, only: masterproc use cam_abortutils, only: endrun use cam_logfile, only: iulog + use shr_dust_emis_mod,only: is_dust_emis_zender, is_zender_soil_erod_from_atm + use cam_control_mod, only: aqua_planet implicit none private @@ -38,8 +40,6 @@ module dust_model real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions character(len=cl) :: soil_erod_file = 'soil_erod_file' ! full pathname for soil erodibility dataset - logical :: soil_erod_active = .true. - contains !============================================================================= @@ -48,7 +48,8 @@ module dust_model subroutine dust_readnl(nlfile) use namelist_utils, only: find_group_name - use spmd_utils, only: mpicom, masterprocid, mpi_character, mpi_logical, mpi_real8, mpi_success + use spmd_utils, only: mpicom, masterprocid, mpi_character, mpi_real8, mpi_success + use shr_dust_emis_mod, only: shr_dust_emis_readnl character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input @@ -56,9 +57,10 @@ subroutine dust_readnl(nlfile) integer :: unitn, ierr character(len=*), parameter :: subname = 'dust_readnl' - namelist /dust_nl/ dust_emis_fact, soil_erod_file, soil_erod_active + namelist /dust_nl/ dust_emis_fact, soil_erod_file !----------------------------------------------------------------------------- + if (aqua_planet) return ! Read namelist if (masterproc) then @@ -82,15 +84,14 @@ subroutine dust_readnl(nlfile) if (ierr/=mpi_success) then call endrun(subname//' MPI_BCAST ERROR: dust_emis_fact') end if - call mpi_bcast(soil_erod_active, 1, mpi_logical, masterprocid, mpicom, ierr) - if (ierr/=mpi_success) then - call endrun(subname//' MPI_BCAST ERROR: soil_erod_active') - end if + + call shr_dust_emis_readnl(mpicom, 'drv_flds_in') if (masterproc) then - write(iulog,*) subname,': soil_erod_active = ',soil_erod_active write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file) write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact + write(iulog,*) subname,': is_dust_emis_zender : ',is_dust_emis_zender() + write(iulog,*) subname,': is_zender_soil_erod_from_atm : ',is_zender_soil_erod_from_atm() end if end subroutine dust_readnl @@ -104,13 +105,15 @@ subroutine dust_init() integer :: n + if (aqua_planet) return + do n = 1, dust_nbin call cnst_get_ind(dust_names(n), dust_indices(n),abort=.false.) end do dust_active = any(dust_indices(:) > 0) if (.not.dust_active) return - if (soil_erod_active) then + if (is_zender_soil_erod_from_atm()) then call soil_erod_init( dust_emis_fact, soil_erod_file ) endif @@ -132,35 +135,36 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) ! local vars integer :: i, m, idst + real(r8) :: erodfctr(ncol) real(r8), parameter :: dust_emis_sclfctr(dust_nbin) & = (/ 0.011_r8/0.032456_r8, 0.087_r8/0.174216_r8, 0.277_r8/0.4085517_r8, 0.625_r8/0.384811_r8 /) - ! set dust emissions + if (.not.dust_active) return - if (soil_erod_active) then - col_loop: do i =1,ncol + ! set dust emissions + if (is_zender_soil_erod_from_atm()) then + do i =1,ncol + ! adjust emissions based on soil erosion soil_erod(i) = soil_erodibility( i, lchnk ) + erodfctr(i) = soil_erod(i)/soil_erod_fact*1.15_r8 + end do + else + erodfctr(:) = 1._r8 + end if - ! adjust emissions based on soil erosion - do m = 1,dust_nbin + ! rebin dust emissons - idst = dust_indices(m) - cflx(i,idst) = -dust_flux_in(i,m) & - * dust_emis_sclfctr(m)*soil_erod(i)/soil_erod_fact*1.15_r8 + do i =1,ncol - enddo + do m = 1,dust_nbin - end do col_loop - else - ! rebin dust emissons - do i = 1,ncol - do m = 1,dust_nbin - idst = dust_indices(m) - cflx(i,idst) = -dust_flux_in(i,m) * dust_emis_sclfctr(m) - end do - end do - end if + idst = dust_indices(m) + cflx(i,idst) = -dust_flux_in(i,m) * dust_emis_sclfctr(m) * erodfctr(i) + + enddo + + end do end subroutine dust_emis diff --git a/src/chemistry/modal_aero/dust_model.F90 b/src/chemistry/modal_aero/dust_model.F90 index 196fe9518c..98d6102afe 100644 --- a/src/chemistry/modal_aero/dust_model.F90 +++ b/src/chemistry/modal_aero/dust_model.F90 @@ -7,6 +7,8 @@ module dust_model use cam_abortutils, only: endrun use modal_aero_data, only: ntot_amode, ndst=>nDust use cam_logfile, only: iulog + use shr_dust_emis_mod,only: is_dust_emis_zender, is_zender_soil_erod_from_atm + use cam_control_mod, only: aqua_planet implicit none private @@ -31,11 +33,9 @@ module dust_model real(r8), allocatable :: dust_dmt_vwr(:) real(r8), allocatable :: dust_stk_crc(:) - real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions + real(r8) :: dust_emis_fact = -huge(1._r8) ! tuning parameter for dust emissions character(len=cl) :: soil_erod_file = 'soil_erod_file' ! full pathname for soil erodibility dataset - logical :: soil_erod_active = .true. - logical :: dust_active = .false. contains @@ -46,7 +46,8 @@ module dust_model subroutine dust_readnl(nlfile) use namelist_utils, only: find_group_name - use spmd_utils, only: mpicom, masterprocid, mpi_character, mpi_logical, mpi_real8, mpi_success + use spmd_utils, only: mpicom, masterprocid, mpi_character, mpi_real8, mpi_success + use shr_dust_emis_mod, only: shr_dust_emis_readnl character(len=*), intent(in) :: nlfile ! filepath for file containing namelist input @@ -54,9 +55,10 @@ subroutine dust_readnl(nlfile) integer :: unitn, ierr character(len=*), parameter :: subname = 'dust_readnl' - namelist /dust_nl/ dust_emis_fact, soil_erod_file, soil_erod_active + namelist /dust_nl/ dust_emis_fact, soil_erod_file !----------------------------------------------------------------------------- + if (aqua_planet) return ! Read namelist if (masterproc) then @@ -80,15 +82,14 @@ subroutine dust_readnl(nlfile) if (ierr/=mpi_success) then call endrun(subname//' MPI_BCAST ERROR: dust_emis_fact') end if - call mpi_bcast(soil_erod_active, 1, mpi_logical, masterprocid, mpicom, ierr) - if (ierr/=mpi_success) then - call endrun(subname//' MPI_BCAST ERROR: soil_erod_active') - end if + + call shr_dust_emis_readnl(mpicom, 'drv_flds_in') if (masterproc) then - write(iulog,*) subname,': soil_erod_active = ',soil_erod_active write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file) write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact + write(iulog,*) subname,': is_dust_emis_zender : ',is_dust_emis_zender() + write(iulog,*) subname,': is_zender_soil_erod_from_atm : ',is_zender_soil_erod_from_atm() end if end subroutine dust_readnl @@ -105,6 +106,8 @@ subroutine dust_init() character(len=32) :: spec_name integer, parameter :: mymodes(7) = (/ 2, 1, 3, 4, 5, 6, 7 /) ! tricky order ... + if (aqua_planet) return + dust_nbin = ndst dust_nnum = ndst @@ -145,7 +148,7 @@ subroutine dust_init() dust_active = any(dust_indices(:) > 0) if (.not.dust_active) return - if (soil_erod_active) then + if (is_zender_soil_erod_from_atm()) then call soil_erod_init( dust_emis_fact, soil_erod_file ) end if @@ -171,46 +174,31 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) integer :: i, m, idst, inum real(r8) :: x_mton real(r8),parameter :: soil_erod_threshold = 0.1_r8 + real(r8) :: erodfctr(ncol) ! set dust emissions - if (soil_erod_active) then + if (is_zender_soil_erod_from_atm()) then col_loop: do i =1,ncol - soil_erod(i) = soil_erodibility( i, lchnk ) - if( soil_erod(i) .lt. soil_erod_threshold ) soil_erod(i) = 0._r8 - - ! rebin and adjust dust emissons - do m = 1,dust_nbin - - idst = dust_indices(m) - - cflx(i,idst) = sum( -dust_flux_in(i,:) ) & - * dust_emis_sclfctr(m)*soil_erod(i)/soil_erod_fact*1.15_r8 - - x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) - - inum = dust_indices(m+dust_nbin) - - cflx(i,inum) = cflx(i,idst)*x_mton - - enddo - + erodfctr(i) = soil_erod(i)/soil_erod_fact*1.15_r8 end do col_loop else - ! rebin dust emissons - do i = 1,ncol - do m = 1,dust_nbin - idst = dust_indices(m) - cflx(i,idst) = sum( -dust_flux_in(i,:) ) * dust_emis_sclfctr(m) ! mass mixing ratio - x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) - inum = dust_indices(m+dust_nbin) - cflx(i,inum) = cflx(i,idst)*x_mton ! number mixing ratio - end do - end do + erodfctr(:) = 1._r8 end if + ! rebin dust emissons + + do i = 1,ncol + do m = 1,dust_nbin + idst = dust_indices(m) + cflx(i,idst) = sum( -dust_flux_in(i,:) ) * dust_emis_sclfctr(m) * erodfctr(i) ! mass mixing ratio + x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) + inum = dust_indices(m+dust_nbin) + cflx(i,inum) = cflx(i,idst)*x_mton ! number mixing ratio + end do + end do end subroutine dust_emis From 9cb0551fb906a518e332d350f0a62db57e9ddddb Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Thu, 25 Jul 2024 16:24:43 -0600 Subject: [PATCH 05/20] add checking for consistent settings; old atm/zender method b4b modified: src/chemistry/bulk_aero/dust_model.F90 modified: src/chemistry/modal_aero/dust_model.F90 --- src/chemistry/bulk_aero/dust_model.F90 | 57 +++++++++++++++------- src/chemistry/modal_aero/dust_model.F90 | 65 ++++++++++++++++--------- 2 files changed, 81 insertions(+), 41 deletions(-) diff --git a/src/chemistry/bulk_aero/dust_model.F90 b/src/chemistry/bulk_aero/dust_model.F90 index d90e0884fd..9ce27c178a 100644 --- a/src/chemistry/bulk_aero/dust_model.F90 +++ b/src/chemistry/bulk_aero/dust_model.F90 @@ -87,11 +87,19 @@ subroutine dust_readnl(nlfile) call shr_dust_emis_readnl(mpicom, 'drv_flds_in') + if ((soil_erod_file /= 'none') .and. (.not.is_zender_soil_erod_from_atm())) then + call endrun(subname//': should not specify soil_erod_file if Zender soil erosion is not in CAM') + end if + if (masterproc) then - write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file) - write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact - write(iulog,*) subname,': is_dust_emis_zender : ',is_dust_emis_zender() - write(iulog,*) subname,': is_zender_soil_erod_from_atm : ',is_zender_soil_erod_from_atm() + if (is_dust_emis_zender()) then + write(iulog,*) subname,': Zender_2003 dust emission method is being used.' + end if + if (is_zender_soil_erod_from_atm()) then + write(iulog,*) subname,': Zender soil erod file is handled in atm' + write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file) + write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact + end if end if end subroutine dust_readnl @@ -126,6 +134,7 @@ end subroutine dust_init subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) use soil_erod_mod, only : soil_erod_fact use soil_erod_mod, only : soil_erodibility + use cam_history_support, only : fillvalue ! args integer, intent(in) :: ncol, lchnk @@ -139,32 +148,46 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) real(r8), parameter :: dust_emis_sclfctr(dust_nbin) & = (/ 0.011_r8/0.032456_r8, 0.087_r8/0.174216_r8, 0.277_r8/0.4085517_r8, 0.625_r8/0.384811_r8 /) + soil_erod(:) = fillvalue + if (.not.dust_active) return ! set dust emissions if (is_zender_soil_erod_from_atm()) then - do i =1,ncol - ! adjust emissions based on soil erosion + + col_loop1: do i =1,ncol + soil_erod(i) = soil_erodibility( i, lchnk ) - erodfctr(i) = soil_erod(i)/soil_erod_fact*1.15_r8 - end do + + ! adjust emissions based on soil erosion + do m = 1,dust_nbin + + idst = dust_indices(m) + cflx(i,idst) = -dust_flux_in(i,m) & + * dust_emis_sclfctr(m)*soil_erod(i)/dust_emis_fact*1.15_r8 + + enddo + + end do col_loop1 + else - erodfctr(:) = 1._r8 - end if - ! rebin dust emissons + col_loop2: do i =1,ncol - do i =1,ncol + soil_erod(i) = soil_erodibility( i, lchnk ) - do m = 1,dust_nbin + ! adjust emissions based on soil erosion + do m = 1,dust_nbin - idst = dust_indices(m) - cflx(i,idst) = -dust_flux_in(i,m) * dust_emis_sclfctr(m) * erodfctr(i) + idst = dust_indices(m) + cflx(i,idst) = -dust_flux_in(i,m) * dust_emis_sclfctr(m) / dust_emis_fact - enddo + enddo - end do + end do col_loop2 + + end if end subroutine dust_emis diff --git a/src/chemistry/modal_aero/dust_model.F90 b/src/chemistry/modal_aero/dust_model.F90 index 98d6102afe..028dc809da 100644 --- a/src/chemistry/modal_aero/dust_model.F90 +++ b/src/chemistry/modal_aero/dust_model.F90 @@ -33,8 +33,8 @@ module dust_model real(r8), allocatable :: dust_dmt_vwr(:) real(r8), allocatable :: dust_stk_crc(:) - real(r8) :: dust_emis_fact = -huge(1._r8) ! tuning parameter for dust emissions - character(len=cl) :: soil_erod_file = 'soil_erod_file' ! full pathname for soil erodibility dataset + real(r8) :: dust_emis_fact = -huge(1._r8) ! tuning parameter for dust emissions + character(len=cl) :: soil_erod_file = 'none' ! full pathname for soil erodibility dataset logical :: dust_active = .false. @@ -85,11 +85,19 @@ subroutine dust_readnl(nlfile) call shr_dust_emis_readnl(mpicom, 'drv_flds_in') + if ((soil_erod_file /= 'none') .and. (.not.is_zender_soil_erod_from_atm())) then + call endrun(subname//': should not specify soil_erod_file if Zender soil erosion is not in CAM') + end if + if (masterproc) then - write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file) - write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact - write(iulog,*) subname,': is_dust_emis_zender : ',is_dust_emis_zender() - write(iulog,*) subname,': is_zender_soil_erod_from_atm : ',is_zender_soil_erod_from_atm() + if (is_dust_emis_zender()) then + write(iulog,*) subname,': Zender_2003 dust emission method is being used.' + end if + if (is_zender_soil_erod_from_atm()) then + write(iulog,*) subname,': Zender soil erod file is handled in atm' + write(iulog,*) subname,': soil_erod_file = ',trim(soil_erod_file) + write(iulog,*) subname,': dust_emis_fact = ',dust_emis_fact + end if end if end subroutine dust_readnl @@ -163,6 +171,7 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) use soil_erod_mod, only : soil_erodibility use mo_constants, only : dust_density use physconst, only : pi + use cam_history_support, only : fillvalue ! args integer, intent(in) :: ncol, lchnk @@ -174,31 +183,39 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) integer :: i, m, idst, inum real(r8) :: x_mton real(r8),parameter :: soil_erod_threshold = 0.1_r8 - real(r8) :: erodfctr(ncol) + + soil_erod(:) = fillvalue ! set dust emissions if (is_zender_soil_erod_from_atm()) then - col_loop: do i =1,ncol + col_loop1: do i = 1,ncol soil_erod(i) = soil_erodibility( i, lchnk ) if( soil_erod(i) .lt. soil_erod_threshold ) soil_erod(i) = 0._r8 - erodfctr(i) = soil_erod(i)/soil_erod_fact*1.15_r8 - end do col_loop - else - erodfctr(:) = 1._r8 - end if - ! rebin dust emissons - - do i = 1,ncol - do m = 1,dust_nbin - idst = dust_indices(m) - cflx(i,idst) = sum( -dust_flux_in(i,:) ) * dust_emis_sclfctr(m) * erodfctr(i) ! mass mixing ratio - x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) - inum = dust_indices(m+dust_nbin) - cflx(i,inum) = cflx(i,idst)*x_mton ! number mixing ratio - end do - end do + ! rebin and adjust dust emissons. + do m = 1,dust_nbin + idst = dust_indices(m) + cflx(i,idst) = sum( -dust_flux_in(i,:) ) & + * dust_emis_sclfctr(m)*soil_erod(i)/dust_emis_fact*1.15_r8 + x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) + inum = dust_indices(m+dust_nbin) + cflx(i,inum) = cflx(i,idst)*x_mton + enddo + enddo col_loop1 + else ! no scaling + col_loop2: do i = 1,ncol + ! rebin and adjust dust emissons. + do m = 1,dust_nbin + idst = dust_indices(m) + cflx(i,idst) = sum( -dust_flux_in(i,:) ) & + * dust_emis_sclfctr(m) / dust_emis_fact + x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) + inum = dust_indices(m+dust_nbin) + cflx(i,inum) = cflx(i,idst)*x_mton + enddo + enddo col_loop2 + end if end subroutine dust_emis From f7b9e5d3bfa487888d8b19382dc85bef3b35d47a Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Thu, 25 Jul 2024 17:23:40 -0600 Subject: [PATCH 06/20] define and set default namelist variables modified: bld/build-namelist modified: bld/namelist_files/namelist_defaults_cam.xml modified: bld/namelist_files/namelist_definition.xml --- bld/build-namelist | 7 ++++++- bld/namelist_files/namelist_defaults_cam.xml | 4 ++++ bld/namelist_files/namelist_definition.xml | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/bld/build-namelist b/bld/build-namelist index 7a5c8c1132..53fd874cd9 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -3728,6 +3728,11 @@ if ( length($nl->get_value('soil_erod_file'))>0 ) { } } } +if (!($simple_phys or $aqua_mode)) { + add_default($nl, 'dust_emis_method'); + add_default($nl, 'zender_soil_erod_source'); +} + if (chem_has_species($cfg, 'NO')) { # set scaling of lightning NOx production add_default($nl, 'lght_no_prd_factor' ); @@ -4410,7 +4415,7 @@ my %nl_group = (); foreach my $name (@nl_groups) { $nl_group{$name} = ''; } # Dry deposition, MEGAN VOC emis and ozone namelists -@comp_groups = qw(drydep_inparm megan_emis_nl fire_emis_nl carma_inparm ndep_inparm ozone_coupling_nl lightning_coupling_nl); +@comp_groups = qw(drydep_inparm megan_emis_nl fire_emis_nl carma_inparm ndep_inparm ozone_coupling_nl lightning_coupling_nl dust_emis_inparm); $outfile = "$opts{'dir'}/drv_flds_in"; $nl->write($outfile, 'groups'=>\@comp_groups); diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index 42b6500bec..35b02d86a0 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -2532,6 +2532,10 @@ 0.9D0 0.9D0 + +Zender_2003 +atm + 1.35D0 diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index e0c4b46778..8eb688d9cc 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -7698,6 +7698,21 @@ List of fluxes needed by the CARMA model, from CLM to CAM. Default: set by build-namelist. + +Which dust emission method is going to be used. +Either the Zender 2003 scheme or the Leung 2023 scheme. +Default: set by build-namelist. + + + +Option only applying for the Zender_2003 method for whether the soil erodibility +file is handled in the active LAND model or in the ATM model. +(only used when dust_emis_method is Zender_2003) +Default: set by build-namelist. + + Date: Fri, 26 Jul 2024 09:17:47 -0600 Subject: [PATCH 07/20] fix issue with aqua-planet modified: bld/build-namelist modified: src/chemistry/bulk_aero/dust_model.F90 modified: src/chemistry/modal_aero/dust_model.F90 --- bld/build-namelist | 7 +++---- src/chemistry/bulk_aero/dust_model.F90 | 8 -------- src/chemistry/modal_aero/dust_model.F90 | 7 ------- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/bld/build-namelist b/bld/build-namelist index 53fd874cd9..0b75af1644 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -3728,10 +3728,9 @@ if ( length($nl->get_value('soil_erod_file'))>0 ) { } } } -if (!($simple_phys or $aqua_mode)) { - add_default($nl, 'dust_emis_method'); - add_default($nl, 'zender_soil_erod_source'); -} +# Dust emissions scheme (all configurations for now) +add_default($nl, 'dust_emis_method'); +add_default($nl, 'zender_soil_erod_source'); if (chem_has_species($cfg, 'NO')) { # set scaling of lightning NOx production diff --git a/src/chemistry/bulk_aero/dust_model.F90 b/src/chemistry/bulk_aero/dust_model.F90 index 9ce27c178a..d4c96d8d4b 100644 --- a/src/chemistry/bulk_aero/dust_model.F90 +++ b/src/chemistry/bulk_aero/dust_model.F90 @@ -7,7 +7,6 @@ module dust_model use cam_abortutils, only: endrun use cam_logfile, only: iulog use shr_dust_emis_mod,only: is_dust_emis_zender, is_zender_soil_erod_from_atm - use cam_control_mod, only: aqua_planet implicit none private @@ -60,7 +59,6 @@ subroutine dust_readnl(nlfile) namelist /dust_nl/ dust_emis_fact, soil_erod_file !----------------------------------------------------------------------------- - if (aqua_planet) return ! Read namelist if (masterproc) then @@ -113,8 +111,6 @@ subroutine dust_init() integer :: n - if (aqua_planet) return - do n = 1, dust_nbin call cnst_get_ind(dust_names(n), dust_indices(n),abort=.false.) end do @@ -148,10 +144,6 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) real(r8), parameter :: dust_emis_sclfctr(dust_nbin) & = (/ 0.011_r8/0.032456_r8, 0.087_r8/0.174216_r8, 0.277_r8/0.4085517_r8, 0.625_r8/0.384811_r8 /) - soil_erod(:) = fillvalue - - if (.not.dust_active) return - ! set dust emissions if (is_zender_soil_erod_from_atm()) then diff --git a/src/chemistry/modal_aero/dust_model.F90 b/src/chemistry/modal_aero/dust_model.F90 index 028dc809da..b2632e9697 100644 --- a/src/chemistry/modal_aero/dust_model.F90 +++ b/src/chemistry/modal_aero/dust_model.F90 @@ -8,7 +8,6 @@ module dust_model use modal_aero_data, only: ntot_amode, ndst=>nDust use cam_logfile, only: iulog use shr_dust_emis_mod,only: is_dust_emis_zender, is_zender_soil_erod_from_atm - use cam_control_mod, only: aqua_planet implicit none private @@ -58,7 +57,6 @@ subroutine dust_readnl(nlfile) namelist /dust_nl/ dust_emis_fact, soil_erod_file !----------------------------------------------------------------------------- - if (aqua_planet) return ! Read namelist if (masterproc) then @@ -114,8 +112,6 @@ subroutine dust_init() character(len=32) :: spec_name integer, parameter :: mymodes(7) = (/ 2, 1, 3, 4, 5, 6, 7 /) ! tricky order ... - if (aqua_planet) return - dust_nbin = ndst dust_nnum = ndst @@ -171,7 +167,6 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) use soil_erod_mod, only : soil_erodibility use mo_constants, only : dust_density use physconst, only : pi - use cam_history_support, only : fillvalue ! args integer, intent(in) :: ncol, lchnk @@ -184,8 +179,6 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) real(r8) :: x_mton real(r8),parameter :: soil_erod_threshold = 0.1_r8 - soil_erod(:) = fillvalue - ! set dust emissions if (is_zender_soil_erod_from_atm()) then From 37fae81920e6526a4d46a4a670be240507db378a Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Mon, 5 Aug 2024 09:49:57 -0600 Subject: [PATCH 08/20] use new ctsm tag --- .gitmodules | 4 ++-- components/clm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index ab666272a2..a84635e260 100644 --- a/.gitmodules +++ b/.gitmodules @@ -178,8 +178,8 @@ fxDONOTUSEurl = https://github.com/NCAR/ParallelIO [submodule "clm"] path = components/clm -url = https://github.com/ekluzek/CTSM.git -fxtag = 8478b73 +url = https://github.com/ESCOMP/CTSM +fxtag = ctsm5.2.017 fxrequired = ToplevelRequired fxDONOTUSEurl = https://github.com/ESCOMP/CTSM diff --git a/components/clm b/components/clm index 8478b73066..e7626f85dd 160000 --- a/components/clm +++ b/components/clm @@ -1 +1 @@ -Subproject commit 8478b730663ee4a6698b70804e95a1f029662aab +Subproject commit e7626f85dd9a7bc8bcb3c19e2b5cb81ae193af76 From e393c668334d757b787f54dbc655ff1bcd4bc1f1 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Mon, 12 Aug 2024 15:13:38 -0600 Subject: [PATCH 09/20] use Leung_2023 for cam7 phys modified: .gitmodules modified: bld/build-namelist modified: bld/namelist_files/namelist_defaults_cam.xml modified: cime_config/config_compsets.xml --- .gitmodules | 2 +- bld/build-namelist | 50 +++++++++++++------- bld/namelist_files/namelist_defaults_cam.xml | 1 + cime_config/config_compsets.xml | 6 +++ components/clm | 2 +- 5 files changed, 43 insertions(+), 18 deletions(-) diff --git a/.gitmodules b/.gitmodules index a84635e260..c0e684ebae 100644 --- a/.gitmodules +++ b/.gitmodules @@ -179,7 +179,7 @@ fxDONOTUSEurl = https://github.com/NCAR/ParallelIO [submodule "clm"] path = components/clm url = https://github.com/ESCOMP/CTSM -fxtag = ctsm5.2.017 +fxtag = ctsm5.2.019 fxrequired = ToplevelRequired fxDONOTUSEurl = https://github.com/ESCOMP/CTSM diff --git a/bld/build-namelist b/bld/build-namelist index 0b75af1644..8b90b34f3c 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -569,6 +569,14 @@ if ($cfg->get('debug')) { my $prescribe_aerosols = $TRUE; if ($simple_phys) {$prescribe_aerosols = $FALSE;} +# Dust emissions scheme (all configurations for now) +add_default($nl, 'dust_emis_method'); +if ( $nl->get_value('dust_emis_method') =~ /Zender/ ) { + add_default($nl, 'zender_soil_erod_source'); +} +my $soil_erod_atm = $FALSE; +if ($nl->get_value('dust_emis_method') eq 'atm') {$soil_erod_atm = $TRUE;} + # Chemistry deposition lists if ( ($chem ne 'none') or ( $prog_species ) ){ my $chem_proc_src = $cfg->get('chem_proc_src'); @@ -1786,7 +1794,7 @@ if ( $prog_species ) { add_default($nl, 'ghg_chem', 'val'=>".true."); add_default($nl, 'bndtvg'); } - if ( $prog_species =~ /DST/ ) { + if ( $prog_species =~ /DST/ and $soil_erod_atm) { add_default($nl, 'soil_erod_file' ); } @@ -2076,9 +2084,11 @@ if ($chem =~ /geoschem/) { add_default($nl, 'flbc_cycle_yr', 'val'=>'2000'); } - my @files; # Datasets - @files = ( 'soil_erod_file', 'flbc_file' ); + my @files = ( 'flbc_file' ); + if ($soil_erod_atm) { + @files = ( @files, 'soil_erod_file' ); + } foreach my $file (@files) { add_default($nl, $file); } @@ -2117,12 +2127,15 @@ if ($chem =~ /trop_mozart/ or $chem =~ /trop_strat/ or $chem =~ /waccm_tsmlt/) { my @files; # Datasets if ($chem =~ /trop_strat/ or $chem =~ /waccm_tsmlt/) { - @files = ( 'soil_erod_file', 'flbc_file', + @files = ( 'flbc_file', 'xs_coef_file','xs_short_file','xs_long_file', 'rsf_file' ); } else { - @files = ( 'soil_erod_file', 'flbc_file', + @files = ( 'flbc_file', 'xs_coef_file','xs_short_file','xs_long_file', 'rsf_file', 'exo_coldens_file', 'sulf_file' ); } + if ($soil_erod_atm) { + @files = ( @files, 'soil_erod_file' ); + } foreach my $file (@files) { add_default($nl, $file); } @@ -2220,8 +2233,10 @@ if ($chem eq 'trop_mam3') { add_default($nl, 'flbc_list', 'val'=>"' '"); # Datasets - my @files = ('soil_erod_file', - 'xs_long_file', 'rsf_file', 'exo_coldens_file' ); + my @files = ('soil_erod_file', 'rsf_file', 'exo_coldens_file' ); + if ($soil_erod_atm) { + @files = ( @files, 'soil_erod_file' ); + } foreach my $file (@files) { add_default($nl, $file); } @@ -2725,8 +2740,10 @@ if (($chem eq 'trop_mam4') or ($chem eq 'waccm_sc_mam4') or ($chem eq 'ghg_mam4' add_default($nl, 'flbc_list', 'val'=>"' '"); # Datasets - my @files = ('soil_erod_file', - 'xs_long_file', 'rsf_file', 'exo_coldens_file' ); + my @files = ('xs_long_file', 'rsf_file', 'exo_coldens_file' ); + if ($soil_erod_atm) { + @files = ( @files, 'soil_erod_file' ); + } foreach my $file (@files) { add_default($nl, $file); } @@ -2814,8 +2831,10 @@ if ($chem eq 'trop_mam7') { add_default($nl, 'flbc_list', 'val'=>"' '"); # Datasets - my @files = ('soil_erod_file', - 'xs_long_file', 'rsf_file', 'exo_coldens_file' ); + my @files = ('xs_long_file', 'rsf_file', 'exo_coldens_file' ); + if ($soil_erod_atm) { + @files = ( @files, 'soil_erod_file' ); + } foreach my $file (@files) { add_default($nl, $file); } @@ -2874,8 +2893,10 @@ if ($chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/) { 'photon_file', 'electron_file', 'igrf_geomag_coefs_file', 'euvac_file', 'solar_parms_data_file', 'depvel_lnd_file', - 'xs_coef_file', 'xs_short_file','xs_long_file', 'rsf_file', - 'soil_erod_file' ); + 'xs_coef_file', 'xs_short_file','xs_long_file', 'rsf_file' ); + if ($soil_erod_atm) { + @files = ( @files, 'soil_erod_file' ); + } if (!$waccmx) { @files = (@files, 'tgcm_ubc_file', 'snoe_ubc_file' ); } @@ -3728,9 +3749,6 @@ if ( length($nl->get_value('soil_erod_file'))>0 ) { } } } -# Dust emissions scheme (all configurations for now) -add_default($nl, 'dust_emis_method'); -add_default($nl, 'zender_soil_erod_source'); if (chem_has_species($cfg, 'NO')) { # set scaling of lightning NOx production diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index 35b02d86a0..2a5fd3daf2 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -2534,6 +2534,7 @@ Zender_2003 +Leung_2023 atm diff --git a/cime_config/config_compsets.xml b/cime_config/config_compsets.xml index 002e8b184f..37645c359f 100644 --- a/cime_config/config_compsets.xml +++ b/cime_config/config_compsets.xml @@ -727,6 +727,12 @@ + + + FALSE + + + diff --git a/components/clm b/components/clm index e7626f85dd..289913e55b 160000 --- a/components/clm +++ b/components/clm @@ -1 +1 @@ -Subproject commit e7626f85dd9a7bc8bcb3c19e2b5cb81ae193af76 +Subproject commit 289913e55b07e99abeef3ee5688981ec6cc5ae28 From 712dead6653097b2e3812fb40d0540ea1d1d1790 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Thu, 22 Aug 2024 16:39:26 -0600 Subject: [PATCH 10/20] Use Erik's CTSM hash; fix issues in build-namelist modified: .gitmodules modified: bld/build-namelist --- .gitmodules | 4 ++-- bld/build-namelist | 20 ++++++++++---------- components/clm | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.gitmodules b/.gitmodules index c0e684ebae..47890082cc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -178,8 +178,8 @@ fxDONOTUSEurl = https://github.com/NCAR/ParallelIO [submodule "clm"] path = components/clm -url = https://github.com/ESCOMP/CTSM -fxtag = ctsm5.2.019 +url = https://github.com/ekluzek/CTSM +fxtag = 786252bb0 fxrequired = ToplevelRequired fxDONOTUSEurl = https://github.com/ESCOMP/CTSM diff --git a/bld/build-namelist b/bld/build-namelist index 8b90b34f3c..c1baae9043 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -569,13 +569,13 @@ if ($cfg->get('debug')) { my $prescribe_aerosols = $TRUE; if ($simple_phys) {$prescribe_aerosols = $FALSE;} -# Dust emissions scheme (all configurations for now) +# CTSM Dust emissions scheme +my $soil_erod_atm = $FALSE; add_default($nl, 'dust_emis_method'); if ( $nl->get_value('dust_emis_method') =~ /Zender/ ) { add_default($nl, 'zender_soil_erod_source'); + if ($nl->get_value('zender_soil_erod_source') =~ /atm/) {$soil_erod_atm = $TRUE;} } -my $soil_erod_atm = $FALSE; -if ($nl->get_value('dust_emis_method') eq 'atm') {$soil_erod_atm = $TRUE;} # Chemistry deposition lists if ( ($chem ne 'none') or ( $prog_species ) ){ @@ -1794,7 +1794,7 @@ if ( $prog_species ) { add_default($nl, 'ghg_chem', 'val'=>".true."); add_default($nl, 'bndtvg'); } - if ( $prog_species =~ /DST/ and $soil_erod_atm) { + if ( $prog_species =~ /DST/ and $soil_erod_atm =~ /$TRUE/io) { add_default($nl, 'soil_erod_file' ); } @@ -2086,7 +2086,7 @@ if ($chem =~ /geoschem/) { # Datasets my @files = ( 'flbc_file' ); - if ($soil_erod_atm) { + if ($soil_erod_atm =~ /$TRUE/io) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2133,7 +2133,7 @@ if ($chem =~ /trop_mozart/ or $chem =~ /trop_strat/ or $chem =~ /waccm_tsmlt/) { @files = ( 'flbc_file', 'xs_coef_file','xs_short_file','xs_long_file', 'rsf_file', 'exo_coldens_file', 'sulf_file' ); } - if ($soil_erod_atm) { + if ($soil_erod_atm =~ /$TRUE/io) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2234,7 +2234,7 @@ if ($chem eq 'trop_mam3') { # Datasets my @files = ('soil_erod_file', 'rsf_file', 'exo_coldens_file' ); - if ($soil_erod_atm) { + if ($soil_erod_atm =~ /$TRUE/io) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2741,7 +2741,7 @@ if (($chem eq 'trop_mam4') or ($chem eq 'waccm_sc_mam4') or ($chem eq 'ghg_mam4' # Datasets my @files = ('xs_long_file', 'rsf_file', 'exo_coldens_file' ); - if ($soil_erod_atm) { + if ($soil_erod_atm =~ /$TRUE/io) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2832,7 +2832,7 @@ if ($chem eq 'trop_mam7') { # Datasets my @files = ('xs_long_file', 'rsf_file', 'exo_coldens_file' ); - if ($soil_erod_atm) { + if ($soil_erod_atm =~ /$TRUE/io) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2894,7 +2894,7 @@ if ($chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/) { 'euvac_file', 'solar_parms_data_file', 'depvel_lnd_file', 'xs_coef_file', 'xs_short_file','xs_long_file', 'rsf_file' ); - if ($soil_erod_atm) { + if ($soil_erod_atm =~ /$TRUE/io) { @files = ( @files, 'soil_erod_file' ); } diff --git a/components/clm b/components/clm index 289913e55b..786252bb01 160000 --- a/components/clm +++ b/components/clm @@ -1 +1 @@ -Subproject commit 289913e55b07e99abeef3ee5688981ec6cc5ae28 +Subproject commit 786252bb012172e53ced93b40b9730d11f8d6efe From ba285ecfe48b1cea07af644ea5701292c9df436a Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Fri, 23 Aug 2024 11:15:11 -0600 Subject: [PATCH 11/20] fix issue in build-namelist modified: bld/build-namelist --- bld/build-namelist | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/bld/build-namelist b/bld/build-namelist index c1baae9043..f66419e68b 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -1794,7 +1794,7 @@ if ( $prog_species ) { add_default($nl, 'ghg_chem', 'val'=>".true."); add_default($nl, 'bndtvg'); } - if ( $prog_species =~ /DST/ and $soil_erod_atm =~ /$TRUE/io) { + if ( $prog_species =~ /DST/ and $soil_erod_atm =~ /$TRUE/) { add_default($nl, 'soil_erod_file' ); } @@ -2086,7 +2086,7 @@ if ($chem =~ /geoschem/) { # Datasets my @files = ( 'flbc_file' ); - if ($soil_erod_atm =~ /$TRUE/io) { + if ($soil_erod_atm =~ /$TRUE/) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2133,7 +2133,7 @@ if ($chem =~ /trop_mozart/ or $chem =~ /trop_strat/ or $chem =~ /waccm_tsmlt/) { @files = ( 'flbc_file', 'xs_coef_file','xs_short_file','xs_long_file', 'rsf_file', 'exo_coldens_file', 'sulf_file' ); } - if ($soil_erod_atm =~ /$TRUE/io) { + if ($soil_erod_atm =~ /$TRUE/) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2233,8 +2233,8 @@ if ($chem eq 'trop_mam3') { add_default($nl, 'flbc_list', 'val'=>"' '"); # Datasets - my @files = ('soil_erod_file', 'rsf_file', 'exo_coldens_file' ); - if ($soil_erod_atm =~ /$TRUE/io) { + my @files = ( 'xs_long_file', 'rsf_file', 'exo_coldens_file' ); + if ($soil_erod_atm =~ /$TRUE/) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2741,7 +2741,7 @@ if (($chem eq 'trop_mam4') or ($chem eq 'waccm_sc_mam4') or ($chem eq 'ghg_mam4' # Datasets my @files = ('xs_long_file', 'rsf_file', 'exo_coldens_file' ); - if ($soil_erod_atm =~ /$TRUE/io) { + if ($soil_erod_atm =~ /$TRUE/) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2832,7 +2832,7 @@ if ($chem eq 'trop_mam7') { # Datasets my @files = ('xs_long_file', 'rsf_file', 'exo_coldens_file' ); - if ($soil_erod_atm =~ /$TRUE/io) { + if ($soil_erod_atm =~ /$TRUE/) { @files = ( @files, 'soil_erod_file' ); } foreach my $file (@files) { @@ -2894,7 +2894,7 @@ if ($chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/) { 'euvac_file', 'solar_parms_data_file', 'depvel_lnd_file', 'xs_coef_file', 'xs_short_file','xs_long_file', 'rsf_file' ); - if ($soil_erod_atm =~ /$TRUE/io) { + if ($soil_erod_atm =~ /$TRUE/) { @files = ( @files, 'soil_erod_file' ); } @@ -3749,7 +3749,6 @@ if ( length($nl->get_value('soil_erod_file'))>0 ) { } } } - if (chem_has_species($cfg, 'NO')) { # set scaling of lightning NOx production add_default($nl, 'lght_no_prd_factor' ); From e6d302cb3049313f1d4d6c318f9c95051c4f642c Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Fri, 23 Aug 2024 13:22:27 -0600 Subject: [PATCH 12/20] fix bug in emis scaling when Leung is used modified: bld/build-namelist modified: src/chemistry/modal_aero/dust_model.F90 --- bld/build-namelist | 18 +++++++----------- src/chemistry/modal_aero/dust_model.F90 | 8 +++++--- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/bld/build-namelist b/bld/build-namelist index f66419e68b..c882ad412d 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -3734,19 +3734,15 @@ if ($cfg->get('microphys') eq 'rk') { } # Dust emissions tuning factor -# If dust is prognostic ==> supply the tuning factor -if ( length($nl->get_value('soil_erod_file'))>0 ) { - # check whether turbulent mountain stress parameterization is on - if ($nl->get_value('do_tms') =~ /$TRUE/io) { - add_default($nl, 'dust_emis_fact', 'tms'=>'1'); +# check whether turbulent mountain stress parameterization is on +if ($nl->get_value('do_tms') =~ /$TRUE/io) { + add_default($nl, 'dust_emis_fact', 'tms'=>'1'); +} else { + if ($chem =~ /trop_strat/ or $chem =~ /geoschem/ or $chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/ or $chem =~ /trop_mozart/) { + add_default($nl, 'dust_emis_fact', 'ver'=>'chem'); } else { - if ($chem =~ /trop_strat/ or $chem =~ /geoschem/ or $chem =~ /waccm_ma/ or $chem =~ /waccm_tsmlt/ or $chem =~ /trop_mozart/) { - add_default($nl, 'dust_emis_fact', 'ver'=>'chem'); - } - else { - add_default($nl, 'dust_emis_fact'); - } + add_default($nl, 'dust_emis_fact'); } } if (chem_has_species($cfg, 'NO')) { diff --git a/src/chemistry/modal_aero/dust_model.F90 b/src/chemistry/modal_aero/dust_model.F90 index b2632e9697..6213c47636 100644 --- a/src/chemistry/modal_aero/dust_model.F90 +++ b/src/chemistry/modal_aero/dust_model.F90 @@ -32,8 +32,8 @@ module dust_model real(r8), allocatable :: dust_dmt_vwr(:) real(r8), allocatable :: dust_stk_crc(:) - real(r8) :: dust_emis_fact = -huge(1._r8) ! tuning parameter for dust emissions - character(len=cl) :: soil_erod_file = 'none' ! full pathname for soil erodibility dataset + real(r8) :: dust_emis_fact = 0._r8 ! tuning parameter for dust emissions + character(len=cl) :: soil_erod_file = 'none' ! full pathname for soil erodibility dataset logical :: dust_active = .false. @@ -196,11 +196,13 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) cflx(i,inum) = cflx(i,idst)*x_mton enddo enddo col_loop1 - else ! no scaling + else ! Leung emissions + col_loop2: do i = 1,ncol ! rebin and adjust dust emissons. do m = 1,dust_nbin idst = dust_indices(m) + cflx(i,idst) = sum( -dust_flux_in(i,:) ) & * dust_emis_sclfctr(m) / dust_emis_fact x_mton = 6._r8 / (pi * dust_density * (dust_dmt_vwr(m)**3._r8)) From eb6518ac69f17927dd319df0b4bfbac162b14a02 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Thu, 29 Aug 2024 05:41:17 -0600 Subject: [PATCH 13/20] Default Zender for all configs; use tag ctsm5.2.027 modified: .gitmodules modified: bld/namelist_files/namelist_defaults_cam.xml modified: bld/namelist_files/namelist_definition.xml --- .gitmodules | 4 ++-- bld/namelist_files/namelist_defaults_cam.xml | 1 - bld/namelist_files/namelist_definition.xml | 4 ++-- components/clm | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.gitmodules b/.gitmodules index 47890082cc..0701d24be2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -178,8 +178,8 @@ fxDONOTUSEurl = https://github.com/NCAR/ParallelIO [submodule "clm"] path = components/clm -url = https://github.com/ekluzek/CTSM -fxtag = 786252bb0 +url = https://github.com/ESCOMP/CTSM +fxtag = ctsm5.2.027 fxrequired = ToplevelRequired fxDONOTUSEurl = https://github.com/ESCOMP/CTSM diff --git a/bld/namelist_files/namelist_defaults_cam.xml b/bld/namelist_files/namelist_defaults_cam.xml index 2a5fd3daf2..35b02d86a0 100644 --- a/bld/namelist_files/namelist_defaults_cam.xml +++ b/bld/namelist_files/namelist_defaults_cam.xml @@ -2534,7 +2534,6 @@ Zender_2003 -Leung_2023 atm diff --git a/bld/namelist_files/namelist_definition.xml b/bld/namelist_files/namelist_definition.xml index 8eb688d9cc..144fa0e51c 100644 --- a/bld/namelist_files/namelist_definition.xml +++ b/bld/namelist_files/namelist_definition.xml @@ -7702,7 +7702,7 @@ Default: set by build-namelist. group="dust_emis_inparm" valid_values="Zender_2003,Leung_2023" > Which dust emission method is going to be used. Either the Zender 2003 scheme or the Leung 2023 scheme. -Default: set by build-namelist. +Default: Zender_2003 diff --git a/components/clm b/components/clm index 786252bb01..0999a32f52 160000 --- a/components/clm +++ b/components/clm @@ -1 +1 @@ -Subproject commit 786252bb012172e53ced93b40b9730d11f8d6efe +Subproject commit 0999a32f520c995c3dfc94b9b96781d20ed0d6d5 From 95c159b22cd71dee367ac51eff47f918e13a96f5 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Thu, 29 Aug 2024 11:00:06 -0600 Subject: [PATCH 14/20] regression test Leung dust emis scheme modified: cime_config/testdefs/testlist_cam.xml new file: cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands new file: cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam new file: cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm --- cime_config/testdefs/testlist_cam.xml | 6 ++--- .../cam/outfrq9s_Leung_dust/shell_commands | 2 ++ .../cam/outfrq9s_Leung_dust/user_nl_cam | 9 +++++++ .../cam/outfrq9s_Leung_dust/user_nl_clm | 27 +++++++++++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands create mode 100644 cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam create mode 100644 cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm diff --git a/cime_config/testdefs/testlist_cam.xml b/cime_config/testdefs/testlist_cam.xml index 68a0ddbac3..e0cb981eea 100644 --- a/cime_config/testdefs/testlist_cam.xml +++ b/cime_config/testdefs/testlist_cam.xml @@ -16,7 +16,7 @@ - + / @@ -1514,7 +1514,7 @@ - + @@ -2263,7 +2263,7 @@ - + diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands new file mode 100644 index 0000000000..eb40ad83e0 --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands @@ -0,0 +1,2 @@ +./xmlchange ROF_NCPL=\$ATM_NCPL +./xmlchange GLC_NCPL=\$ATM_NCPL diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam new file mode 100644 index 0000000000..351fe92801 --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam @@ -0,0 +1,9 @@ +dust_emis_method = 'Leung_2023' + +fincl2 = 'dst_a1SF', 'dst_a2SF', 'dst_a3SF' + +mfilt=1,1,1,1,1,1 +ndens=1,1,1,1,1,1 +nhtfrq=9,9,9,9,9,9 +write_nstep0=.true. +inithist='ENDOFRUN' diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm new file mode 100644 index 0000000000..0d83b5367b --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm @@ -0,0 +1,27 @@ +!---------------------------------------------------------------------------------- +! Users should add all user specific namelist changes below in the form of +! namelist_var = new_namelist_value +! +! Include namelist variables for drv_flds_in ONLY if -megan and/or -drydep options +! are set in the CLM_NAMELIST_OPTS env variable. +! +! EXCEPTIONS: +! Set use_cndv by the compset you use and the CLM_BLDNML_OPTS -dynamic_vegetation setting +! Set use_vichydro by the compset you use and the CLM_BLDNML_OPTS -vichydro setting +! Set use_cn by the compset you use and CLM_BLDNML_OPTS -bgc setting +! Set use_crop by the compset you use and CLM_BLDNML_OPTS -crop setting +! Set spinup_state by the CLM_BLDNML_OPTS -bgc_spinup setting +! Set irrigate by the CLM_BLDNML_OPTS -irrig setting +! Set dtime with L_NCPL option +! Set fatmlndfrc with LND_DOMAIN_PATH/LND_DOMAIN_FILE options +! Set finidat with RUN_REFCASE/RUN_REFDATE/RUN_REFTOD options for hybrid or branch cases +! (includes $inst_string for multi-ensemble cases) +! Set glc_grid with CISM_GRID option +! Set glc_smb with GLC_SMB option +! Set maxpatch_glcmec with GLC_NEC option +! Set glc_do_dynglacier with GLC_TWO_WAY_COUPLING env variable +!---------------------------------------------------------------------------------- +hist_nhtfrq = 9 +hist_mfilt = 1 +hist_ndens = 1 + From caa1bd34fb15a9ac13d9bfb1e4543e9863c6b5f0 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Thu, 29 Aug 2024 11:09:48 -0600 Subject: [PATCH 15/20] correct typo in testlist_cam --- cime_config/testdefs/testlist_cam.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cime_config/testdefs/testlist_cam.xml b/cime_config/testdefs/testlist_cam.xml index e0cb981eea..9fcbec71cd 100644 --- a/cime_config/testdefs/testlist_cam.xml +++ b/cime_config/testdefs/testlist_cam.xml @@ -16,7 +16,7 @@ - / + From 28e02f175077b8262a1bf8115630faa695bc72ec Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Tue, 3 Sep 2024 09:58:34 -0600 Subject: [PATCH 16/20] Increase time for HEMCO test modified: cime_config/testdefs/testlist_cam.xml --- cime_config/testdefs/testlist_cam.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cime_config/testdefs/testlist_cam.xml b/cime_config/testdefs/testlist_cam.xml index 9fcbec71cd..2865df7aae 100644 --- a/cime_config/testdefs/testlist_cam.xml +++ b/cime_config/testdefs/testlist_cam.xml @@ -2023,7 +2023,7 @@ - + From 1ea1baac843a6538ba3d61995986f772000a3d74 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Tue, 3 Sep 2024 10:56:40 -0600 Subject: [PATCH 17/20] Remove soil_erod setting when Leung is used in buld dust; ChangeLog draft modified: doc/ChangeLog modified: src/chemistry/bulk_aero/dust_model.F90 --- doc/ChangeLog | 91 ++++++++++++++++++++++++++ src/chemistry/bulk_aero/dust_model.F90 | 10 ++- 2 files changed, 95 insertions(+), 6 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 547c184bb2..8379020742 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,5 +1,96 @@ =============================================================== +Tag name: cam6_4_028 +Originator(s): fvitt +Date: +One-line Summary: Add capability to use Leung dust emission scheme +Github PR URL: https://github.com/ESCOMP/CAM/pull/1104 + +Purpose of changes (include the issue number and title text for each relevant GitHub issue): + + Add the capability to use Leung_2023 land model dust emission scheme. + Zender_2003 is the default scheme for all F compsets. + (issues #141 and #654) + +Describe any changes made to build system: N/A + +Describe any changes made to the namelist: N/A + +List any changes to the defaults for the boundary datasets: N/A + +Describe any substantial timing or memory changes: N/A + +Code reviewed by: ekluzek, cacraigucar + +List all files eliminated: N/A + +List all files added and what they do: +A cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/shell_commands +A cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_cam +A cime_config/testdefs/testmods_dirs/cam/outfrq9s_Leung_dust/user_nl_clm + - add test for Leung_2023 dust emis scheme + +List all existing files that have been modified, and describe the changes: +M bld/build-namelist +M bld/namelist_files/namelist_defaults_cam.xml + - set default dust emis namelist settings (Zender_2003 is the default scheme) + +M bld/namelist_files/namelist_definition.xml + - new dust emis namelist vars: + . dust_emis_method ('Zender_2003' or 'Leung_2023') + . zend_soil_erod_source ('atm' or 'lnd') + +M cime_config/config_compsets.xml + - override the 'LND_SETS_DUST_EMIS_DRV_FLDS' xml setting to be FALSE for all F compsets + +M cime_config/testdefs/testlist_cam.xml + - increase time for aux_cam HEMCO test + - regression test Leung_2023 dust emis scheme + +M src/chemistry/bulk_aero/dust_model.F90 +M src/chemistry/modal_aero/dust_model.F90 + - use soil_erod only if Zender scheme is used + +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. + +derecho/intel/aux_cam: + +derecho/nvhpc/aux_cam: + +izumi/nag/aux_cam: + +izumi/gnu/aux_cam: + +CAM tag used for the baseline comparison tests if different than previous +tag: + +Summarize any changes to answers, i.e., +- what code configurations: +- what platforms/compilers: +- nature of change (roundoff; larger than roundoff but same climate; new + climate): + +If bitwise differences were observed, how did you show they were no worse +than roundoff? + +If this tag changes climate describe the run(s) done to evaluate the new +climate in enough detail that it(they) could be reproduced, i.e., +- source tag (all code used must be in the repository): +- platform/compilers: +- configure commandline: +- build-namelist command (or complete namelist): +- MSS location of output: + +MSS location of control simulations used to validate new climate: + +URL for AMWG diagnostics output used to validate new climate: + +=============================================================== +=============================================================== + Tag name: cam6_4_027 Originator(s): fvitt Date: 3 Sep 2024 diff --git a/src/chemistry/bulk_aero/dust_model.F90 b/src/chemistry/bulk_aero/dust_model.F90 index d4c96d8d4b..6b559200c6 100644 --- a/src/chemistry/bulk_aero/dust_model.F90 +++ b/src/chemistry/bulk_aero/dust_model.F90 @@ -36,8 +36,8 @@ module dust_model real(r8) :: dust_dmt_vwr(dust_nbin) real(r8) :: dust_stk_crc(dust_nbin) - real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions - character(len=cl) :: soil_erod_file = 'soil_erod_file' ! full pathname for soil erodibility dataset + real(r8) :: dust_emis_fact = -1.e36_r8 ! tuning parameter for dust emissions + character(len=cl) :: soil_erod_file = 'none' ! full pathname for soil erodibility dataset contains @@ -152,7 +152,7 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) soil_erod(i) = soil_erodibility( i, lchnk ) - ! adjust emissions based on soil erosion + ! adjust emissions do m = 1,dust_nbin idst = dust_indices(m) @@ -167,9 +167,7 @@ subroutine dust_emis( ncol, lchnk, dust_flux_in, cflx, soil_erod ) col_loop2: do i =1,ncol - soil_erod(i) = soil_erodibility( i, lchnk ) - - ! adjust emissions based on soil erosion + ! adjust emissions do m = 1,dust_nbin idst = dust_indices(m) From a950faee2464e3bd688c8bfc9d5f939b3ce3158d Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Tue, 3 Sep 2024 17:27:25 -0600 Subject: [PATCH 18/20] change megan setting appease the atm lnd drv_flds_in compare modified: bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml --- bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml b/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml index 6fa2495972..2d34418939 100644 --- a/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml +++ b/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml @@ -79,10 +79,7 @@ .false. - - 'CH2O = formaldehyde', - 'CO = carbon_monoxide' - +'CH2O = formaldehyde','CO = carbon_monoxide' From c424825db0b640f33f0c158dd88161a4d3b657c3 Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Wed, 4 Sep 2024 08:40:51 -0600 Subject: [PATCH 19/20] Override LND_SETS_DUST_EMIS_DRV_FLDS only for cam7/clm6 modified: cime_config/config_compsets.xml modified: bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml --- bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml | 5 ++++- cime_config/config_compsets.xml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml b/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml index 2d34418939..6fa2495972 100644 --- a/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml +++ b/bld/namelist_files/use_cases/sd_waccm_ma_cam4.xml @@ -79,7 +79,10 @@ .false. -'CH2O = formaldehyde','CO = carbon_monoxide' + + 'CH2O = formaldehyde', + 'CO = carbon_monoxide' + diff --git a/cime_config/config_compsets.xml b/cime_config/config_compsets.xml index ff0ff1e10e..64efaabe08 100644 --- a/cime_config/config_compsets.xml +++ b/cime_config/config_compsets.xml @@ -906,7 +906,7 @@ - FALSE + FALSE From e7627ac6bc1531aa84a6b2081b4315fc527f1b7b Mon Sep 17 00:00:00 2001 From: Francis Vitt Date: Wed, 4 Sep 2024 16:24:42 -0600 Subject: [PATCH 20/20] update ChangeLog --- doc/ChangeLog | 142 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 118 insertions(+), 24 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index 8379020742..391de001e2 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -2,16 +2,20 @@ Tag name: cam6_4_028 Originator(s): fvitt -Date: +Date: 4 Sep 2024 One-line Summary: Add capability to use Leung dust emission scheme Github PR URL: https://github.com/ESCOMP/CAM/pull/1104 Purpose of changes (include the issue number and title text for each relevant GitHub issue): - Add the capability to use Leung_2023 land model dust emission scheme. + Add the capability to use Leung_2023 land model dust emission scheme. Zender_2003 is the default scheme for all F compsets. (issues #141 and #654) + NOTE: This reverts cam7 compsets back to Zender_2003 dust emissions. + In tag cam6_4_027 cam7 compsets dust emissions scheme defaulted to + Leung_2023 and where not properly scaled. + Describe any changes made to build system: N/A Describe any changes made to the namelist: N/A @@ -41,7 +45,7 @@ M bld/namelist_files/namelist_definition.xml . zend_soil_erod_source ('atm' or 'lnd') M cime_config/config_compsets.xml - - override the 'LND_SETS_DUST_EMIS_DRV_FLDS' xml setting to be FALSE for all F compsets + - override the 'LND_SETS_DUST_EMIS_DRV_FLDS' xml setting to be FALSE for cam7/clm6 F compsets M cime_config/testdefs/testlist_cam.xml - increase time for aux_cam HEMCO test @@ -57,36 +61,126 @@ then copy the lines from the td.*.status files for the failed tests to the appropriate machine below. All failed tests must be justified. derecho/intel/aux_cam: + PEND SMS_D_Ln9_P1280x1.ne0CONUSne30x8_ne0CONUSne30x8_mt12.FCHIST.derecho_intel.cam-outfrq9s + - pre-existing failures -- need fix in CLM external -derecho/nvhpc/aux_cam: + FAIL ERP_Ln9.f09_f09_mg17.FCSD_HCO.derecho_intel.cam-outfrq9s COMPARE_base_rest + - pre-existing failure due to HEMCO not having reproducible results issues #1018 and #856 -izumi/nag/aux_cam: + DIFF ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s + DIFF ERP_D_Ln9.ne30pg3_ne30pg3_mg17.FLTHIST.derecho_intel.cam-outfrq9s_rrtmgp + DIFF SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FCts4MTHIST.derecho_intel.cam-outfrq9s + DIFF SMS_D_Ln9.ne30pg3_ne30pg3_mg17.FMTHIST.derecho_intel.cam-outfrq9s + - differences due to switching dust emis scheme from Leung_2023 to Zender_2003 -izumi/gnu/aux_cam: + DIFF SMS_D_Ln9_P1280x1.ne30pg3_ne30pg3_mg17.FCLTHIST.derecho_intel.cam-outfrq9s_Leung_dust + - new reg test -- no baseline to compare against -CAM tag used for the baseline comparison tests if different than previous -tag: + NLFAIL ERC_D_Ln9.f19_f19_mg17.QPC6.derecho_intel.cam-outfrq3s_cosp + NLFAIL ERC_D_Ln9.f19_f19_mg17.QPMOZ.derecho_intel.cam-outfrq3s + NLFAIL ERC_D_Ln9.f19_f19_mg17.QPX2000.derecho_intel.cam-outfrq3s + NLFAIL ERC_D_Ln9.ne16_ne16_mg17.FADIAB.derecho_intel.cam-terminator + NLFAIL ERC_D_Ln9.ne16_ne16_mg17.QPC5HIST.derecho_intel.cam-outfrq3s_usecase + NLFAIL ERC_D_Ln9_P144x1.ne16pg3_ne16pg3_mg17.QPC6HIST.derecho_intel.cam-outfrq3s_ttrac_usecase + NLFAIL ERC_D_Ln9.T42_T42_mg17.FDABIP04.derecho_intel.cam-outfrq3s_usecase + NLFAIL ERC_D_Ln9.T42_T42_mg17.FHS94.derecho_intel.cam-outfrq3s_usecase + NLFAIL ERI_D_Ln18.f45_f45_mg37.QPC41850.derecho_intel.cam-co2rmp_usecase + NLFAIL ERP_D_Ln9.f19_f19_mg17.QPC6.derecho_intel.cam-outfrq9s + NLFAIL ERP_D_Ln9_P64x2.f09_f09_mg17.QSC6.derecho_intel.cam-outfrq9s + NLFAIL ERP_Ln9_P24x3.f45_f45_mg37.QPWmaC6.derecho_intel.cam-outfrq9s_mee_fluxes + NLFAIL ERS_Ln9.f19_f19_mg17.FSPCAMS.derecho_intel.cam-outfrq9s + NLFAIL ERS_Ln9.ne0TESTONLYne5x4_ne0TESTONLYne5x4_mg37.FADIAB.derecho_intel.cam-outfrq3s_refined + NLFAIL SCT_D_Ln7.ne3_ne3_mg37.QPC5.derecho_intel.cam-scm_prep + NLFAIL SCT_D_Ln7.T42_T42_mg17.QPC5.derecho_intel.cam-scm_prep + NLFAIL SMS_D_Ld2.f19_f19_mg17.QPC5HIST.derecho_intel.cam-volc_usecase + NLFAIL SMS_D_Ld5.f19_f19_mg17.PC4.derecho_intel.cam-cam4_port5d + NLFAIL SMS_D_Ln9.f19_f19_mg17.QPC2000climo.derecho_intel.cam-outfrq3s_usecase + NLFAIL SMS_D_Ln9.f19_f19_mg17.QPC5M7.derecho_intel.cam-outfrq9s + NLFAIL SMS_D_Ln9.ne16_ne16_mg17.QPX2000.derecho_intel.cam-outfrq9s + NLFAIL SMS_Ld5.f09_f09_mg17.PC6.derecho_intel.cam-cam6_port_f09 + NLFAIL SMS_Ln9.f19_f19_mg17.FHIST.derecho_intel.cam-outfrq9s_nochem + - namelist compare failures due to dust_emis_inparm namelist in drv_flds_in + otherwise bit-for-bit -Summarize any changes to answers, i.e., -- what code configurations: -- what platforms/compilers: -- nature of change (roundoff; larger than roundoff but same climate; new - climate): +derecho/nvhpc/aux_cam: + DIFF ERS_Ln9_G4-a100-openacc.ne30pg3_ne30pg3_mg17.F2000dev.derecho_nvhpc.cam-outfrq9s_mg3_default + - difference due to switching dust emis scheme from Leung_2023 to Zender_2003 -If bitwise differences were observed, how did you show they were no worse -than roundoff? +izumi/nag/aux_cam: + FAIL DAE.f45_f45_mg37.FHS94.izumi_nag.cam-dae + - pre-existing failure - issue #670 -If this tag changes climate describe the run(s) done to evaluate the new -climate in enough detail that it(they) could be reproduced, i.e., -- source tag (all code used must be in the repository): -- platform/compilers: -- configure commandline: -- build-namelist command (or complete namelist): -- MSS location of output: + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-carma_sea_salt + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_cosp + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_subcol + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_am + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_cospsathist + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPWmaC6.izumi_nag.cam-outfrq3s + NLFAIL ERC_D_Ln9.f10_f10_mg37.QSPCAMS.izumi_nag.cam-outfrq3s + NLFAIL ERC_D_Ln9.mpasa480z32_mpasa480.FHS94.izumi_nag.cam-outfrq3s_usecase + NLFAIL ERC_D_Ln9.ne16_ne16_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase + NLFAIL ERC_D_Ln9.ne16pg3_ne16pg3_mg17.QPC4.izumi_nag.cam-outfrq3s_usecase + NLFAIL ERC_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-outfrq3s_ttrac + NLFAIL ERC_D_Ln9.T5_T5_mg37.QPC4.izumi_nag.cam-outfrq3s_usecase + NLFAIL ERI_D_Ln18.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac + NLFAIL ERI_D_Ln18.f19_f19_mg17.QPC6.izumi_nag.cam-ghgrmp_e8 + NLFAIL ERI_D_Ln18.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s_bwic + NLFAIL ERI_D_Ln18.ne5pg3_ne5pg3_mg37.FADIAB.izumi_nag.cam-outfrq3s_bwic + NLFAIL ERP_Ln9.ne5pg3_ne5pg3_mg37.QPC6.izumi_nag.cam-outfrq9s_clubbmf + NLFAIL ERS_Ln27.ne5pg3_ne5pg3_mg37.FKESSLER.izumi_nag.cam-outfrq9s + NLFAIL ERS_Ln9.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq9s + NLFAIL PEM_D_Ln9.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s + NLFAIL PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 + NLFAIL PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 + NLFAIL PLB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 + NLFAIL PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal0 + NLFAIL PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal1 + NLFAIL PLB_D_Ln9.ne5_ne5_mg37.QPC5.izumi_nag.cam-ttrac_loadbal3 + NLFAIL SMS_D_Ld2.f45_f45_mg37.PC5.izumi_nag.cam-outfrq24h_port + NLFAIL SMS_D_Ln3.ne5pg3_ne5pg3_mg37.QPX2000.izumi_nag.cam-outfrq3s + NLFAIL SMS_D_Ln6.ne5_ne5_mg37.QPWmaC4.izumi_nag.cam-outfrq3s_physgrid_tem + NLFAIL SMS_D_Ln7.T42_T42_mg17.QPSCAMC5.izumi_nag.cam-scmarm + NLFAIL SMS_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-rad_diag_mam + NLFAIL SMS_D_Ln9.f10_f10_mg37.QPC6.izumi_nag.cam-outfrq3s_ba + NLFAIL SMS_D_Ln9_P1x1.ne5_ne5_mg37.FADIAB.izumi_nag.cam-outfrq3s + NLFAIL SMS_P48x1_D_Ln3.f09_f09_mg17.QPC6HIST.izumi_nag.cam-outfrq3s_co2cycle_usecase + NLFAIL SUB_D_Ln9.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s + NLFAIL TMC_D.f10_f10_mg37.QPC5.izumi_nag.cam-outfrq3s_eoyttrac + NLFAIL TMC_D.T5_T5_mg37.QPC5.izumi_nag.cam-ghgrmp_e8 + - namelist compare failures due to dust_emis_inparm namelist in drv_flds_in + otherwise bit-for-bit -MSS location of control simulations used to validate new climate: +izumi/gnu/aux_cam: + NLFAIL ERC_D_Ln9.f10_f10_mg37.FADIAB.izumi_gnu.cam-terminator + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC4.izumi_gnu.cam-outfrq3s_diags + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_gnu.cam-outfrq3s_unicon + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPC5.izumi_gnu.cam-rad_diag + NLFAIL ERC_D_Ln9.f10_f10_mg37.QPSPCAMM.izumi_gnu.cam-outfrq3s + NLFAIL ERC_D_Ln9.ne5_ne5_mg37.QPC4.izumi_gnu.cam-outfrq3s_nudging_ne5_L26 + NLFAIL ERC_D_Ln9.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq3s_ba + NLFAIL ERC_D_Ln9.ne5pg2_ne5pg2_mg37.FADIAB.izumi_gnu.cam-outfrq3s + NLFAIL ERC_D_Ln9.ne5pg3_ne5pg3_mg37.FADIAB.izumi_gnu.cam-outfrq3s + NLFAIL ERI_D_Ln18.T5_T5_mg37.QPC4.izumi_gnu.cam-co2rmp + NLFAIL ERP_D_Ln9.C48_C48_mg17.QPC6.izumi_gnu.cam-outfrq9s + NLFAIL ERP_D_Ln9.ne3pg3_ne3pg3_mg37.QPC6.izumi_gnu.cam-outfrq9s_rrtmgp + NLFAIL ERP_Ln9.ne5_ne5_mg37.FHS94.izumi_gnu.cam-outfrq9s + NLFAIL ERP_Ln9.ne5_ne5_mg37.QPC5.izumi_gnu.cam-outfrq9s + NLFAIL PEM_D_Ln9.ne5pg3_ne5pg3_mg37.FADIAB.izumi_gnu.cam-outfrq3s + NLFAIL PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal0 + NLFAIL PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal1 + NLFAIL PLB_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-ttrac_loadbal3 + NLFAIL SCT_D_Ln7.ne3_ne3_mg37.QPC6.izumi_gnu.cam-scm_prep_c6 + NLFAIL SCT_D_Ln7.T42_T42_mg17.QPC4.izumi_gnu.cam-scm_prep + NLFAIL SCT_D_Ln7.T42_T42_mg17.QPC6.izumi_gnu.cam-scm_prep_c6 + NLFAIL SMS_D_Ln3.f10_f10_mg37.QPMOZ.izumi_gnu.cam-outfrq3s_chemproc + NLFAIL SMS_D_Ln9.f10_f10_mg37.QPWmaC4.izumi_gnu.cam-outfrq9s_apmee + NLFAIL SMS_D_Ln9.ne5pg3_ne5pg3_mg37.QPC5.izumi_gnu.cam-outfrq3s_ttrac + NLFAIL SMS_Ld5.f09_f09_mg17.PC6.izumi_gnu.cam-cam6_port_f09_rrtmgp + - namelist compare failures due to dust_emis_inparm namelist in drv_flds_in + otherwise bit-for-bit -URL for AMWG diagnostics output used to validate new climate: +Summarize any changes to answers: larger than roundoff for cam7, otherwise bit-for-bit =============================================================== ===============================================================