diff --git a/components/eam/bld/namelist_files/namelist_definition.xml b/components/eam/bld/namelist_files/namelist_definition.xml index b3ecb5e9290a..8228c7d8d2e3 100644 --- a/components/eam/bld/namelist_files/namelist_definition.xml +++ b/components/eam/bld/namelist_files/namelist_definition.xml @@ -5138,6 +5138,17 @@ Format: YYYY Default: 0 + +The cycle year of the volcanic SO2 forcing (3D emissions) data. +Use this in place of ext_frc_cycle_yr if non-default, to allow different +speciciations volcanic emission and aerosols/precursors, which may be +invoked for single forcing simulation design. +if ext_frc_volc_type is 'CYCLICAL'. +Format: YYYY +Default: -1 + + Default: current model date @@ -5189,6 +5200,13 @@ Can be set to 'CYCLICAL', 'SERIAL', 'INTERP_MISSING_MONTHS', or 'FIXED'. Default: 'CYCLICAL' + +Type of time interpolation for fixed lower boundary data. See also ext_frc_volc_cycle_yr. +Can be set to 'NULL','CYCLICAL', 'SERIAL', 'INTERP_MISSING_MONTHS', or 'FIXED'. +Default: 'NULL' + + The cycle year of the fixed lower boundary data diff --git a/components/eam/src/chemistry/mozart/chemistry.F90 b/components/eam/src/chemistry/mozart/chemistry.F90 index f78ceda1dea7..3412e1b9bf92 100644 --- a/components/eam/src/chemistry/mozart/chemistry.F90 +++ b/components/eam/src/chemistry/mozart/chemistry.F90 @@ -106,6 +106,13 @@ module chemistry integer :: ext_frc_fixed_ymd = 0 integer :: ext_frc_fixed_tod = 0 + ! alternative type and cycle year for volcanic and other SO2 for controlling single forcing experiments + ! if NULL, same treatment as for the other species. + ! Possible in the future to modify further and apply to volcanic sector of SO2 alone + + character(len=24) :: ext_frc_volc_type = 'NULL' !'NULL'|'CYCLICAL'|'SERIAL'|'INTERP_MISSING_MONTHS' + integer :: ext_frc_volc_cycle_yr = -1 + real(r8) :: dms_emis_scale = 1._r8 ! fixed stratosphere @@ -515,7 +522,7 @@ subroutine chem_readnl(nlfile) srf_emis_type, srf_emis_cycle_yr, srf_emis_fixed_ymd, srf_emis_fixed_tod, srf_emis_specifier, & fstrat_file, fstrat_list, fstrat_efold_list, & ext_frc_specifier, ext_frc_type, ext_frc_cycle_yr, ext_frc_fixed_ymd, ext_frc_fixed_tod, & - dms_emis_scale + ext_frc_volc_type, ext_frc_volc_cycle_yr, dms_emis_scale namelist /chem_inparm/ chem_rad_passive @@ -689,6 +696,8 @@ subroutine chem_readnl(nlfile) call mpibcast (ext_frc_cycle_yr, 1, mpiint, 0, mpicom) call mpibcast (ext_frc_fixed_ymd, 1, mpiint, 0, mpicom) call mpibcast (ext_frc_fixed_tod, 1, mpiint, 0, mpicom) + call mpibcast (ext_frc_volc_type, len(ext_frc_volc_type), mpichar, 0, mpicom) + call mpibcast (ext_frc_volc_cycle_yr, 1, mpiint, 0, mpicom) call mpibcast (dms_emis_scale, 1, mpir8, 0, mpicom) @@ -1033,6 +1042,8 @@ subroutine chem_init(phys_state, pbuf2d, species_class) , ext_frc_cycle_yr & , ext_frc_fixed_ymd & , ext_frc_fixed_tod & + , ext_frc_volc_type & + , ext_frc_volc_cycle_yr & , xactive_prates & , exo_coldens_file & , tuv_xsect_file & diff --git a/components/eam/src/chemistry/mozart/mo_chemini.F90 b/components/eam/src/chemistry/mozart/mo_chemini.F90 index ff0eb0df15f1..564855d76dc5 100644 --- a/components/eam/src/chemistry/mozart/mo_chemini.F90 +++ b/components/eam/src/chemistry/mozart/mo_chemini.F90 @@ -43,6 +43,8 @@ subroutine chemini & , ext_frc_cycle_yr & , ext_frc_fixed_ymd & , ext_frc_fixed_tod & + , ext_frc_volc_type & + , ext_frc_volc_cycle_yr & , xactive_prates & , exo_coldens_file & , tuv_xsect_file & @@ -133,6 +135,8 @@ subroutine chemini & integer, intent(in) :: ext_frc_cycle_yr integer, intent(in) :: ext_frc_fixed_ymd integer, intent(in) :: ext_frc_fixed_tod + character(len=*), intent(in) :: ext_frc_volc_type + integer, intent(in) :: ext_frc_volc_cycle_yr character(len=*), intent(in) :: srf_emis_type integer, intent(in) :: srf_emis_cycle_yr integer, intent(in) :: srf_emis_fixed_ymd @@ -183,7 +187,8 @@ subroutine chemini & ! ... initialize external forcings module !----------------------------------------------------------------------- call setext_inti() - call extfrc_inti(ext_frc_specifier, ext_frc_type, ext_frc_cycle_yr, ext_frc_fixed_ymd, ext_frc_fixed_tod) + call extfrc_inti(ext_frc_specifier, ext_frc_type, ext_frc_cycle_yr, ext_frc_fixed_ymd, ext_frc_fixed_tod, & + ext_frc_volc_type, ext_frc_volc_cycle_yr) if (masterproc) write(iulog,*) 'chemini: after extfrc_inti on node ',iam !----------------------------------------------------------------------- diff --git a/components/eam/src/chemistry/mozart/mo_extfrc.F90 b/components/eam/src/chemistry/mozart/mo_extfrc.F90 index 23b3f480882e..d00e0d5673e9 100644 --- a/components/eam/src/chemistry/mozart/mo_extfrc.F90 +++ b/components/eam/src/chemistry/mozart/mo_extfrc.F90 @@ -46,7 +46,8 @@ module mo_extfrc contains - subroutine extfrc_inti( extfrc_specifier, extfrc_type, extfrc_cycle_yr, extfrc_fixed_ymd, extfrc_fixed_tod) + subroutine extfrc_inti( extfrc_specifier, extfrc_type, extfrc_cycle_yr, extfrc_fixed_ymd, extfrc_fixed_tod, & + extfrc_volc_type, extfrc_volc_cycle_yr) !----------------------------------------------------------------------- ! ... initialize the surface forcings @@ -71,6 +72,8 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type, extfrc_cycle_yr, extfrc_f integer , intent(in) :: extfrc_cycle_yr integer , intent(in) :: extfrc_fixed_ymd integer , intent(in) :: extfrc_fixed_tod + character(len=*), intent(in) :: extfrc_volc_type + integer , intent(in) :: extfrc_volc_cycle_yr !----------------------------------------------------------------------- ! ... local variables @@ -204,6 +207,14 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type, extfrc_cycle_yr, extfrc_f else if( extfrc_type == 'CYCLICAL' ) then write(iulog,*) ' cycle year = ',extfrc_cycle_yr end if + if (extfrc_volc_type /= 'NULL' ) then + write(iulog,*) ' ' + write(iulog,*) 'Volcanic SO2 type = ',extfrc_volc_type + if (extfrc_volc_type == 'CYCLICAL' ) then + write(iulog,*) ' ' + write(iulog,*) 'Volcanic SO2 cycle year = ',extfrc_volc_cycle_yr + end if + end if write(iulog,*) ' ' write(iulog,*) 'there are ',extfrc_cnt,' species with external forcing files' do m = 1,extfrc_cnt @@ -264,11 +275,19 @@ subroutine extfrc_inti( extfrc_specifier, extfrc_type, extfrc_cycle_yr, extfrc_f allocate(forcings(m)%file%in_pbuf(size(forcings(m)%sectors))) forcings(m)%file%in_pbuf(:) = .false. - call trcdata_init( forcings(m)%sectors, & - forcings(m)%filename, filelist, datapath, & - forcings(m)%fields, & - forcings(m)%file, & - rmv_file, extfrc_cycle_yr, extfrc_fixed_ymd, extfrc_fixed_tod, extfrc_type) + if (trim(forcings(m)%species) == 'SO2' .and. extfrc_volc_type /= 'NULL') then + call trcdata_init( forcings(m)%sectors, & + forcings(m)%filename, filelist, datapath, & + forcings(m)%fields, & + forcings(m)%file, rmv_file, extfrc_volc_cycle_yr, & + extfrc_fixed_ymd, extfrc_fixed_tod, extfrc_volc_type) + else + call trcdata_init( forcings(m)%sectors, & + forcings(m)%filename, filelist, datapath, & + forcings(m)%fields, & + forcings(m)%file, & + rmv_file, extfrc_cycle_yr, extfrc_fixed_ymd, extfrc_fixed_tod, extfrc_type) + end if enddo frcing_loop diff --git a/components/eam/src/chemistry/utils/tracer_data.F90 b/components/eam/src/chemistry/utils/tracer_data.F90 index 073aacff6e47..62ccbcef8a25 100644 --- a/components/eam/src/chemistry/utils/tracer_data.F90 +++ b/components/eam/src/chemistry/utils/tracer_data.F90 @@ -660,7 +660,7 @@ subroutine advance_trcdata( flds, file, state, pbuf2d ) call t_startf('read_next_trcdata') call read_next_trcdata(state, flds, file ) call t_stopf('read_next_trcdata') - if(masterproc) write(iulog,*) 'READ_NEXT_TRCDATA ', flds%fldnam + if(masterproc) write(iulog,*) 'READ_NEXT_TRCDATA ', flds%fldnam,data_time end if endif