Soot

From Aerosol
Jump to: navigation, search

Contents

Description

The carma-soot branch of WACCM handles black carbon soot aerosol. Mike Mills developed this branch and used in simulating smoke produced following a nuclear war.

Model Configuration

Tracers

Before building WACCM, instruct WACCM to keep track of one additional tracer (SOOT01), in addition to the default configuration of 63 in WACCM:

setenv WACCM_CONFIGURE_OPTS '-nadv 64'

If your simulations have more than 1 tracer, add 63 to this number and use the command above.

Soot radiative feedback

Radiative properties of soot are known to WACCM. In order to include radiative feedback from CARMA's soot bins in WACCM, we simply need to make a couple of modifications to the routine source/models/atm/cam/src/physics/cam1/aerosol_intr.F90:

line 49, don't use WACCM's carbon aerosol because we want to use CARMA's:

! Set this flag to .TRUE. to turn on carbon
 logical, private, parameter :: def_carbon = .FALSE.    ! default
 logical, private :: carbon = def_carbon

line 53, switch radiative feedback on for carbon:

! Set this flag to .TRUE. to turn on carbon feedback in 
! set_aerosol_from_prognostics()
 logical, private, parameter :: def_feedback_carbon = .TRUE.  ! switch to TRUE for soot feedback, FALSE for control
 logical, private :: feedback_carbon = def_feedback_carbon

line 330:

   ! Allow carbon feedback without prognostic carbon for nuclear soot - MJM 2006.10.14
   ! error check...
   if (.not. chem_is('trop_mozart') ) then
     if (feedback_carbon.and.(.not.carbon)) then
!        write(6,*) 'ERROR:  AEROSOL_SETOPTS:  Feedback of prognostic'
!        write(6,*) 'carbon aerosols is only allowed when these'
!        write(6,*) 'prognostic aerosols are enabled.' 
!        call endrun
       write(6,*)'Soot radiative feedback on'
     endif
   endif

line 871:

      if (feedback_carbon) then    
!          if (trim(cnst_name(m)) == 'BCPHO' .or. trim(cnst_name(m)) == 'CB1' ) then
         if (trim(cnst_name(m)) == 'SOOT' .or. trim(cnst_name(m)) == 'SOOT01' ) then
!             write (6,*) ' Soot found:',state%q(5,54,m)
!            write (6,*) ' BCPHO found '
!            write (6,*) ' SOOT found '
            aeromix(:ncol,:,idxBCPHO) = state%q(:ncol,:,m)

History variables

The following reaction rates affecting ozone were added to the history output:

'J_O2_a', 'J_O2_b', 'R_NO_HO2', 'R_CH3O2_NO', 'R_O3_O', 'R_O_O', 'R_NO2_O', 'R_HO2_O3' , 'R_HO2_O' , 'R_H_O3' , 'R_OH_O' , 'R_CLO_O' , 'J_Cl2O2' , 'R_BrO_ClOa' , 'R_BrO_ClOb', 'R_BrO_BrO' , 'R_BrO_O' , 'J_HOCl' , 'J_HOBr' , 'J_NO3_b', 'R_O2_O', 'J_O3_a', 'J_O3_b', 'R_O1D_H2O', 'R_N_O2', 'R_NO_ON', 'J_NO', 'R_O2_O', 'J_O3_a', 'J_O3_b', 'R_O1D_H2O', 'R_N_O2', 'R_NO_ON', 'J_NO'

The following code was added to mo_gas_phase_chemdr.F90:

!-----------------------------------------------------------------------            
!      ... Output loss rates for Ox = O3 + O
!-----------------------------------------------------------------------            

! O + O + M -> O2 + M
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_usr2)*vmr(:,k,id_o)*vmr(:,k,id_o)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_O_O', wrk, ncol, lchnk )

! Cl2O2 + hv -> 2*Cl      
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_jcl2o2) * vmr(:,k,id_cl2o2)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'J_Cl2O2', wrk, ncol, lchnk )

! ClO + BrO -> Br + Cl + O2      
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_r0184) * vmr(:,k,id_bro) * vmr(:,k,id_clo)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_BrO_ClOa', wrk, ncol, lchnk )

! ClO + BrO -> BrCl + O2      
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_r0185) * vmr(:,k,id_bro) * vmr(:,k,id_clo)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_BrO_ClOb', wrk, ncol, lchnk )

! BrO + BrO -> 2Br + O2      
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_r0186) * vmr(:,k,id_bro) * vmr(:,k,id_bro)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_BrO_BrO', wrk, ncol, lchnk )

! BrO + O -> Br + O2      
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_r0178) * vmr(:,k,id_bro) * vmr(:,k,id_o)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_BrO_O', wrk, ncol, lchnk )

! HOCl + hv -> OH + Cl      
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_jhocl) * vmr(:,k,id_hocl)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'J_HOCl', wrk, ncol, lchnk )

! HOBr + hv -> OH + Br      
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_jhobr) * vmr(:,k,id_hobr)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'J_HOBr', wrk, ncol, lchnk )

! O + O3 -> 2O2      
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_cph1) * vmr(:,k,id_o) * vmr(:,k,id_o3)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_O3_O', wrk, ncol, lchnk )

! Catalytic NOx cycle competition:
!
!          NO + O3 -> NO2 + O2  |        NO + O3 -> NO2 + O2
! (cph13)  NO2 + O -> NO + O2   |       NO2 + hv -> NO + O
!          ------------------   |     O + O2 + M -> O3 + M
!      Net: O + O3 -> 2O2       |     ----------------------
!                               | Net:          Null
!
! Hence the rate of Ox destruction is 2*(cph13)*[NO2]*[O]
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_cph13)*vmr(:,k,id_no2)*vmr(:,k,id_o)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_NO2_O', wrk, ncol, lchnk )

! HO2 + O3 -> OH + 2O2
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_cph9)*vmr(:,k,id_ho2)*vmr(:,k,id_o3)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_HO2_O3', wrk, ncol, lchnk )

! HO2 + O -> OH + O2
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_cph4)*vmr(:,k,id_ho2)*vmr(:,k,id_o)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_HO2_O', wrk, ncol, lchnk )

! H + O3 -> OH + O2
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_cph7)*vmr(:,k,id_h)*vmr(:,k,id_o3)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_H_O3', wrk, ncol, lchnk )

! OH + O -> H + O2
      do k = 1,pver
         wrk(:,k) = reaction_rates(:,k,rid_cph3)*vmr(:,k,id_oh)*vmr(:,k,id_o)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_OH_O', wrk, ncol, lchnk )

! ClO + O -> Cl + O2
      do k = 1,pver
         wrk(:,k) = 2.*reaction_rates(:,k,rid_r0156)*vmr(:,k,id_clo)*vmr(:,k,id_o)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'R_CLO_O', wrk, ncol, lchnk )

! NO3 + hv -> NO + O2
      do k = 1,pver
         wrk(:,k) = 2.*reaction_rates(:,k,rid_jno3_b)*vmr(:,k,id_no3)
         wrk(:,k) = wrk(:,k)*invariants(:,k,indexm)  ! multiply by air density M (molec/cm3)
      end do
      call outfld( 'J_NO3_b', wrk, ncol, lchnk )

Known Issues

  • Simulations were run with an inverted scaling of sedimentation velocities when passing from CARMA to WACCM and back in carma.F90. They should be re-run to ensure this does not affect results.
  • Output of the N+O2 reaction rate used the wrong rate constant. This has been fixed as of March 17, 2008. This reaction is not a rate-limiting step in ozone catalysis, and thereby does not impact the results.
Personal tools