diff --git a/schemes/chemistry/prescribed_ozone.meta b/schemes/chemistry/prescribed_ozone.meta index 3e0b9d84..6db778a7 100644 --- a/schemes/chemistry/prescribed_ozone.meta +++ b/schemes/chemistry/prescribed_ozone.meta @@ -150,7 +150,7 @@ intent = in [ boltz ] standard_name = boltzmann_constant - units = J K-1 + units = J K-1 molecule-1 type = real | kind = kind_phys dimensions = () intent = in diff --git a/schemes/chemistry/prescribed_volcanic_aerosol.F90 b/schemes/chemistry/prescribed_volcanic_aerosol.F90 new file mode 100644 index 00000000..afabe639 --- /dev/null +++ b/schemes/chemistry/prescribed_volcanic_aerosol.F90 @@ -0,0 +1,356 @@ +! Manages reading and interpolation of prescribed volcanic aerosol concentrations. +! +! This module uses CCPP constituents (non-advected) to store prescribed volcanic aero +! fields: +! 1) volcanic aerosol mass mixing ratio (from prescribed dataset) +! 2) geometric-mean wet aerosol radius (derived from mass) +! +! Based on original CAM version from: Francis Vitt +module prescribed_volcanic_aerosol + use ccpp_kinds, only: kind_phys + + ! CAM-SIMA host model dependency to read aerosol data + use tracer_data, only: trfile ! data information and file read state + use tracer_data, only: trfld ! tracer data container + + implicit none + private + + ! public CCPP-compliant subroutines + public :: prescribed_volcanic_aerosol_register + public :: prescribed_volcanic_aerosol_init + public :: prescribed_volcanic_aerosol_run + + ! fields to store tracer_data state and information + type(trfld), pointer :: tracer_data_fields(:) + type(trfile) :: tracer_data_file + + ! module state variables + logical :: has_prescribed_volcaero = .false. + + ! Constituent names + character(len=*), parameter :: volcaero_const_name = 'VOLC_MMR' + character(len=*), parameter :: volcrad_const_name = 'VOLC_RAD_GEOM' + + ! Molecular weight of volcanic aerosol species (sulfate) [g mol-1] + real(kind_phys), parameter :: molmass_volcaero = 47.9981995_kind_phys + + ! WACCM-derived empirical coefficient relating mass concentration + ! to wet aerosol geometric-mean radius [m (kg m-3)^(-1/3)] + real(kind_phys), parameter :: radius_conversion = 1.9e-4_kind_phys + + ! TODO: infrastructure for writing (and reading) tracer_data restart information. + ! see CAM/prescribed_volcrad_aero::{init,read,write}_prescribed_volcaero_restart + ! !!! Restarts will not be bit-for-bit without this !!! + ! TODO when SIMA implements restarts. + +contains + + ! Register prescribed volcanic aerosol constituents. +!> \section arg_table_prescribed_volcanic_aerosol_register Argument Table +!! \htmlinclude prescribed_volcanic_aerosol_register.html + subroutine prescribed_volcanic_aerosol_register( & + amIRoot, iulog, & + prescribed_volcaero_file, & + volcaero_constituents, & + errmsg, errflg) + + use ccpp_constituent_prop_mod, only: ccpp_constituent_properties_t + + ! Input arguments: + logical, intent(in) :: amIRoot + integer, intent(in) :: iulog + character(len=*), intent(in) :: prescribed_volcaero_file ! input filename from namelist + + ! Output arguments: + type(ccpp_constituent_properties_t), allocatable, intent(out) :: volcaero_constituents(:) + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + + character(len=*), parameter :: subname = 'prescribed_volcanic_aerosol_register' + + errmsg = '' + errflg = 0 + + ! Check if prescribed volcanic aerosols are enabled + if (prescribed_volcaero_file == 'UNSET' .or. & + len_trim(prescribed_volcaero_file) == 0) then + has_prescribed_volcaero = .false. + if (amIRoot) then + write(iulog,*) subname//': No prescribed volcanic aerosols specified' + end if + return + end if + + has_prescribed_volcaero = .true. + + ! Register two constituents: aerosol MMR and geometric-mean radius + allocate(volcaero_constituents(2), stat=errflg, errmsg=errmsg) + if (errflg /= 0) then + errmsg = subname // ": " // trim(errmsg) + return + end if + + ! (1) Volcanic aerosol dry mass mixing ratio + call volcaero_constituents(1)%instantiate( & + std_name = volcaero_const_name, & + diag_name = volcaero_const_name, & + long_name = 'prescribed volcanic aerosol dry mass mixing ratio', & + units = 'kg kg-1', & + vertical_dim = 'vertical_layer_dimension', & + min_value = 0.0_kind_phys, & + advected = .false., & + water_species = .false., & + mixing_ratio_type = 'dry', & + errcode = errflg, & + errmsg = errmsg) + if (errflg /= 0) return + + ! (2) Volcanic aerosol geometric-mean radius (derived quantity) + call volcaero_constituents(2)%instantiate( & + std_name = volcrad_const_name, & + diag_name = volcrad_const_name, & + long_name = 'prescribed volcanic aerosol geometric-mean radius derived from mass', & + units = 'm', & + vertical_dim = 'vertical_layer_dimension', & + min_value = 0.0_kind_phys, & + advected = .false., & + water_species = .false., & + mixing_ratio_type = 'dry', & + errcode = errflg, & + errmsg = errmsg) + if (errflg /= 0) return + + if (amIRoot) then + write(iulog,*) trim(subname)//': Registered 2 prescribed volcanic aerosol constituents' + end if + + end subroutine prescribed_volcanic_aerosol_register + + ! Initialize prescribed volcanic aerosol reading via tracer_data. +!> \section arg_table_prescribed_volcanic_aerosol_init Argument Table +!! \htmlinclude prescribed_volcanic_aerosol_init.html + subroutine prescribed_volcanic_aerosol_init( & + amIRoot, iulog, & + prescribed_volcaero_name, & + prescribed_volcaero_file, & + prescribed_volcaero_filelist, & + prescribed_volcaero_datapath, & + prescribed_volcaero_type, & + prescribed_volcaero_cycle_yr, & + prescribed_volcaero_fixed_ymd, & + prescribed_volcaero_fixed_tod, & + errmsg, errflg) + + ! host model dependency for tracer_data read utility + use tracer_data, only: trcdata_init + + ! host model dependency for history output + use cam_history, only: history_add_field + use cam_history_support, only: horiz_only + + ! Input arguments: + logical, intent(in) :: amIRoot + integer, intent(in) :: iulog + character(len=*), intent(in) :: prescribed_volcaero_name ! netCDF field name for volcanic aerosol + character(len=*), intent(in) :: prescribed_volcaero_file ! input filename from namelist + character(len=*), intent(in) :: prescribed_volcaero_filelist ! input filelist from namelist + character(len=*), intent(in) :: prescribed_volcaero_datapath ! input datapath from namelist + character(len=*), intent(in) :: prescribed_volcaero_type ! data type from namelist + integer, intent(in) :: prescribed_volcaero_cycle_yr ! cycle year from namelist [1] + integer, intent(in) :: prescribed_volcaero_fixed_ymd ! fixed year-month-day from namelist (YYYYMMDD) [1] + integer, intent(in) :: prescribed_volcaero_fixed_tod ! fixed time of day from namelist [s] + + ! Output arguments: + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + + ! Local variables: + character(len=64) :: specifier(1) + + character(len=*), parameter :: subname = 'prescribed_volcanic_aerosol_init' + + errmsg = '' + errflg = 0 + + if (.not. has_prescribed_volcaero) return + + if (amIRoot) then + write(iulog,*) trim(subname)//': volcanic aerosol is prescribed in: '// & + trim(prescribed_volcaero_file) + end if + + ! Build specifier: constituent_name:ncdf_field_name + specifier(1) = trim(volcaero_const_name) // ':' // trim(prescribed_volcaero_name) + + ! Initialize tracer_data module with file and field information + call trcdata_init( & + specifier = specifier, & + filename = prescribed_volcaero_file, & + filelist = prescribed_volcaero_filelist, & + datapath = prescribed_volcaero_datapath, & + flds = tracer_data_fields, & + file = tracer_data_file, & + data_cycle_yr = prescribed_volcaero_cycle_yr, & + data_fixed_ymd = prescribed_volcaero_fixed_ymd, & + data_fixed_tod = prescribed_volcaero_fixed_tod, & + data_type = prescribed_volcaero_type) + + ! Verify tracer_data is correctly initialized + if (.not. associated(tracer_data_fields)) then + errflg = 1 + errmsg = subname//': tracer_data_fields not associated after trcdata_init' + return + end if + + ! Register history fields. + ! No longer need history output for the constituents because, well, + ! they are constituents. + call history_add_field('VOLC_MASS', & + 'volcanic aerosol vertical mass path in layer', & + 'lev', 'inst', 'kg m-2') + call history_add_field('VOLC_MASS_C', & + 'volcanic aerosol column mass', & + horiz_only, 'inst', 'kg m-2') + + if (amIRoot) then + write(iulog,*) trim(subname)//': Initialized volcanic aerosol field from tracer_data' + end if + + end subroutine prescribed_volcanic_aerosol_init + + ! Advance prescribed volcanic aerosol data, convert units, apply tropopause + ! masking, and compute geometric-mean radius. +!> \section arg_table_prescribed_volcanic_aerosol_run Argument Table +!! \htmlinclude prescribed_volcanic_aerosol_run.html + subroutine prescribed_volcanic_aerosol_run( & + ncol, pver, pcnst, & + const_props, & + mwdry, boltz, gravit, & + T, pmiddry, pdel, zm, & + pmid, pint, phis, zi, & + tropLev, & + constituents, & + errmsg, errflg) + + ! host model dependency for tracer_data + use tracer_data, only: advance_trcdata + + ! host model dependency for history output + use cam_history, only: history_out_field + + ! framework dependency for const_props + use ccpp_constituent_prop_mod, only: ccpp_constituent_prop_ptr_t + + ! dependency to get constituent index + use ccpp_const_utils, only: ccpp_const_get_idx + + ! dependency for unit string handling + use string_utils, only: to_lower, get_last_significant_char + + integer, intent(in) :: ncol + integer, intent(in) :: pver + integer, intent(in) :: pcnst + type(ccpp_constituent_prop_ptr_t), & + intent(in) :: const_props(:) + real(kind_phys), intent(in) :: mwdry ! molecular weight of dry air [g mol-1] + real(kind_phys), intent(in) :: boltz ! Boltzmann constant [J K-1 molecule-1] + real(kind_phys), intent(in) :: gravit ! gravitational acceleration [m s-2] + real(kind_phys), intent(in) :: T(:,:) ! air temperature [K] (layer centers) + real(kind_phys), intent(in) :: pmiddry(:,:) ! dry air pressure [Pa] (layer centers) + real(kind_phys), intent(in) :: pdel(:,:) ! air pressure thickness [Pa] (layer centers) + real(kind_phys), intent(in) :: zm(:,:) ! geopotential height wrt surface [m] (layer centers) + real(kind_phys), intent(in) :: pmid(:,:) ! air pressure [Pa] (layer centers) + real(kind_phys), intent(in) :: pint(:,:) ! air pressure at interfaces [Pa] + real(kind_phys), intent(in) :: phis(:) ! surface geopotential [m2 s-2] + real(kind_phys), intent(in) :: zi(:,:) ! geopotential height wrt surface at interfaces [m] + integer, intent(in) :: tropLev(:) ! tropopause vertical layer index [index] + + real(kind_phys), intent(inout) :: constituents(:,:,:) + + character(len=*), intent(out) :: errmsg + integer, intent(out) :: errflg + + ! Local variables + integer :: i, k + integer :: mmr_idx, rad_idx + real(kind_phys) :: to_mmr(ncol, pver) ! unit conversion factor to MMR [1] + real(kind_phys) :: mmrvolc ! volcanic aerosol MMR [kg kg-1] + real(kind_phys) :: concvolc ! mass concentration of volcanic aerosol [kg m-3] + real(kind_phys) :: volcmass(ncol, pver) ! volcanic aerosol mass path in layer [kg m-2] + real(kind_phys) :: columnmass(ncol) ! volcanic aerosol column mass [kg m-2] + + character(len=*), parameter :: subname = 'prescribed_volcanic_aerosol_run' + + errmsg = '' + errflg = 0 + + if (.not. has_prescribed_volcaero) return + + ! Advance tracer_data to current time + call advance_trcdata(tracer_data_fields, tracer_data_file, & + pmid, pint, phis, zi) + + ! Get constituent indices for MMR and radius + call ccpp_const_get_idx(const_props, volcaero_const_name, & + mmr_idx, errmsg, errflg) + if (errflg /= 0) return + + call ccpp_const_get_idx(const_props, volcrad_const_name, & + rad_idx, errmsg, errflg) + if (errflg /= 0) return + + ! Determine unit conversion factor based on units in the input file + select case ( to_lower(trim(tracer_data_fields(1)%units(:get_last_significant_char(tracer_data_fields(1)%units)))) ) + case ("molec/cm3", "/cm3", "molecules/cm3", "cm^-3", "cm**-3") + ! Number density [molecules cm-3] -> MMR [kg kg-1] + ! mmr = (M * 1e6 * k_B * T) / (M_air * p_dry) + to_mmr(:ncol,:) = (molmass_volcaero * 1.0e6_kind_phys * boltz * T(:ncol,:)) & + / (mwdry * pmiddry(:ncol,:)) + case ('kg/kg', 'mmr', 'kg kg-1') + to_mmr(:ncol,:) = 1.0_kind_phys + case ('mol/mol', 'mole/mole', 'vmr', 'fraction') + to_mmr(:ncol,:) = molmass_volcaero / mwdry + case default + errflg = 1 + errmsg = subname//': unrecognized units: '//trim(tracer_data_fields(1)%units) + return + end select + + ! Convert tracer_data field to MMR and store in constituent array. + ! Apply tropopause masking: zero below tropopause. + ! Compute geometric-mean radius where MMR > 0 above tropopause. + constituents(:ncol, :pver, rad_idx) = 0.0_kind_phys + + do k = 1, pver + do i = 1, ncol + ! Apply unit conversion + mmrvolc = to_mmr(i, k) * tracer_data_fields(1)%data(i, k) + + ! Zero below tropopause + if (k >= tropLev(i)) then + mmrvolc = 0.0_kind_phys + end if + + constituents(i, k, mmr_idx) = mmrvolc + + ! Compute geometric-mean wet aerosol radius from mass concentration + if (mmrvolc > 0.0_kind_phys) then + ! concvolc [kg m-3] = mmr [kg kg-1] * pdel [Pa] / (g [m s-2] * zm [m]) + concvolc = (mmrvolc * pdel(i, k)) / (gravit * zm(i, k)) + constituents(i, k, rad_idx) = radius_conversion * (concvolc ** (1.0_kind_phys / 3.0_kind_phys)) + end if + end do + end do + + ! Compute volcanic aerosol mass path in each layer [kg m-2] + volcmass(:ncol, :pver) = constituents(:ncol, :pver, mmr_idx) * pdel(:ncol, :pver) / gravit + columnmass(:ncol) = sum(volcmass(:ncol, :pver), 2) + + ! History output + call history_out_field('VOLC_MASS', volcmass(:, :)) + call history_out_field('VOLC_MASS_C', columnmass(:)) + + end subroutine prescribed_volcanic_aerosol_run + +end module prescribed_volcanic_aerosol diff --git a/schemes/chemistry/prescribed_volcanic_aerosol.meta b/schemes/chemistry/prescribed_volcanic_aerosol.meta new file mode 100644 index 00000000..3123859c --- /dev/null +++ b/schemes/chemistry/prescribed_volcanic_aerosol.meta @@ -0,0 +1,239 @@ +[ccpp-table-properties] + name = prescribed_volcanic_aerosol + type = scheme + +[ccpp-arg-table] + name = prescribed_volcanic_aerosol_register + type = scheme +[ amIRoot ] + standard_name = flag_for_mpi_root + units = flag + type = logical + dimensions = () + intent = in +[ iulog ] + standard_name = log_output_unit + units = 1 + type = integer + dimensions = () + intent = in +[ prescribed_volcaero_file ] + standard_name = filename_for_prescribed_volcanic_aerosol + units = none + type = character | kind = len=* + dimensions = () + intent = in +[ volcaero_constituents ] + # or can this just be the ccpp_constituent_properties? + standard_name = prescribed_volcanic_aerosol_constituents + units = none + type = ccpp_constituent_properties_t + allocatable = True + dimensions = (:) + intent = out +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=* + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out + +[ccpp-arg-table] + name = prescribed_volcanic_aerosol_init + type = scheme +[ amIRoot ] + standard_name = flag_for_mpi_root + units = flag + type = logical + dimensions = () + intent = in +[ iulog ] + standard_name = log_output_unit + units = 1 + type = integer + dimensions = () + intent = in +[ prescribed_volcaero_name ] + standard_name = variable_name_of_volcanic_aerosol_in_file_for_prescribed_volcanic_aerosol + units = none + type = character | kind = len=* + dimensions = () + intent = in +[ prescribed_volcaero_file ] + standard_name = filename_for_prescribed_volcanic_aerosol + units = none + type = character | kind = len=* + dimensions = () + intent = in +[ prescribed_volcaero_filelist ] + standard_name = filename_of_file_list_for_prescribed_volcanic_aerosol + units = none + type = character | kind = len=* + dimensions = () + intent = in +[ prescribed_volcaero_datapath ] + standard_name = datapath_for_prescribed_volcanic_aerosol + units = none + type = character | kind = len=* + dimensions = () + intent = in +[ prescribed_volcaero_type ] + standard_name = time_interpolation_method_for_prescribed_volcanic_aerosol + units = none + type = character | kind = len=* + dimensions = () + intent = in +[ prescribed_volcaero_cycle_yr ] + standard_name = cycle_year_for_prescribed_volcanic_aerosol + units = 1 + type = integer + dimensions = () + intent = in +[ prescribed_volcaero_fixed_ymd ] + standard_name = fixed_date_for_prescribed_volcanic_aerosol + units = 1 + type = integer + dimensions = () + intent = in +[ prescribed_volcaero_fixed_tod ] + standard_name = fixed_time_of_day_for_prescribed_volcanic_aerosol + units = s + type = integer + dimensions = () + intent = in +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=* + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out + +[ccpp-arg-table] + name = prescribed_volcanic_aerosol_run + type = scheme +[ ncol ] + standard_name = horizontal_loop_extent + units = count + type = integer + dimensions = () + intent = in +[ pver ] + standard_name = vertical_layer_dimension + units = count + type = integer + dimensions = () + intent = in +[ pcnst ] + standard_name = number_of_ccpp_constituents + units = count + type = integer + dimensions = () + intent = in +[ const_props ] + standard_name = ccpp_constituent_properties + units = none + type = ccpp_constituent_prop_ptr_t + dimensions = (number_of_ccpp_constituents) + intent = in +[ mwdry ] + standard_name = molecular_weight_of_dry_air + units = g mol-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ boltz ] + standard_name = boltzmann_constant + units = J K-1 molecule-1 + type = real | kind = kind_phys + dimensions = () + intent = in +[ gravit ] + standard_name = standard_gravitational_acceleration + units = m s-2 + type = real | kind = kind_phys + dimensions = () + intent = in +[ T ] + standard_name = air_temperature + units = K + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ pmiddry ] + standard_name = air_pressure_of_dry_air + units = Pa + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ pdel ] + standard_name = air_pressure_thickness + units = Pa + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ zm ] + standard_name = geopotential_height_wrt_surface + units = m + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ pmid ] + standard_name = air_pressure + units = Pa + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension) + intent = in +[ pint ] + standard_name = air_pressure_at_interface + units = Pa + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ phis ] + standard_name = surface_geopotential + units = m2 s-2 + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent) + intent = in +[ zi ] + standard_name = geopotential_height_wrt_surface_at_interface + units = m + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_interface_dimension) + intent = in +[ tropLev ] + standard_name = tropopause_vertical_layer_index + units = index + type = integer + dimensions = (horizontal_loop_extent) + intent = in +[ constituents ] + standard_name = ccpp_constituents + units = none + type = real | kind = kind_phys + dimensions = (horizontal_loop_extent, vertical_layer_dimension, number_of_ccpp_constituents) + intent = inout +[ errmsg ] + standard_name = ccpp_error_message + units = none + type = character | kind = len=* + dimensions = () + intent = out +[ errflg ] + standard_name = ccpp_error_code + units = 1 + type = integer + dimensions = () + intent = out diff --git a/schemes/chemistry/prescribed_volcanic_aerosol_namelist.xml b/schemes/chemistry/prescribed_volcanic_aerosol_namelist.xml new file mode 100644 index 00000000..ad6c343d --- /dev/null +++ b/schemes/chemistry/prescribed_volcanic_aerosol_namelist.xml @@ -0,0 +1,203 @@ + + + + + + + + + char*256 + chemistry + prescribed_volcaero_nl + datapath_for_prescribed_volcanic_aerosol + none + + Full pathname of the directory that contains the files specified in prescribed_volcaero_filelist. + + + UNSET + ${DIN_LOC_ROOT}/atm/cam/volc + ${DIN_LOC_ROOT}/atm/cam/volc + + + + + char*256 + chemistry + prescribed_volcaero_nl + filename_for_prescribed_volcanic_aerosol + none + + Filename of dataset for prescribed volcanic aerosols. + + + UNSET + CCSM4_volcanic_1850-2008_prototype1.nc + CCSM4_volcanic_1850-2008_prototype1.nc + + + + + char*256 + chemistry + prescribed_volcaero_nl + filename_of_file_list_for_prescribed_volcanic_aerosol + none + + Filename of file that contains a sequence of filenames for prescribed volcanic aerosols. + The filenames in this file are relative to the directory specified by prescribed_volcaero_datapath. + + + UNSET + + + + + char*16 + chemistry + prescribed_volcaero_nl + variable_name_of_volcanic_aerosol_in_file_for_prescribed_volcanic_aerosol + none + + Name of variable containing volcanic aerosol data in the prescribed volcanic aerosol datasets. + Default: 'MMRVOLC' + + + MMRVOLC + + + + + char*32 + chemistry + prescribed_volcaero_nl + time_interpolation_method_for_prescribed_volcanic_aerosol + none + CYCLICAL,SERIAL,INTERP_MISSING_MONTHS,FIXED + + Type of time interpolation for data in prescribed_aero files. + Can be set to 'CYCLICAL', 'SERIAL', 'INTERP_MISSING_MONTHS', or 'FIXED'. + Default: 'SERIAL' + + + SERIAL + + + + + integer + chemistry + prescribed_volcaero_nl + cycle_year_for_prescribed_volcanic_aerosol + 1 + + The cycle year of the prescribed volcanic aerosol data if prescribed_volcaero_type is 'CYCLICAL'. + Format: YYYY + Default: 0 + + + 0 + + + + + integer + chemistry + prescribed_volcaero_nl + fixed_date_for_prescribed_volcanic_aerosol + 1 + + The date at which the prescribed volcanic aerosol data is fixed if prescribed_volcaero_type is 'FIXED'. + Format: YYYYMMDD + Default: 0 + + + 0 + + + + + integer + chemistry + prescribed_volcaero_nl + fixed_time_of_day_for_prescribed_volcanic_aerosol + s + + The time of day (seconds) corresponding to prescribed_volcaero_fixed_ymd at which the prescribed volcanic aerosol data is fixed if prescribed_aero_type is 'FIXED'. + Default: 0 seconds + + + 0 + + + diff --git a/test/test_suites/suite_tracer_data_test.xml b/test/test_suites/suite_tracer_data_test.xml index c7f7319d..ca4df619 100644 --- a/test/test_suites/suite_tracer_data_test.xml +++ b/test/test_suites/suite_tracer_data_test.xml @@ -10,5 +10,9 @@ prescribed_aerosol_deposition_flux + + + tropopause_find + prescribed_volcanic_aerosol