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