Files
GEOS-Chem-adjoint-v35-note/code/modified/acetone_mod.f
2018-08-28 00:37:54 -04:00

1191 lines
47 KiB
Fortran

!$Id: acetone_mod.f,v 1.2 2012/03/01 22:00:26 daven Exp $
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !MODULE: acetone_mod
!
! !DESCRIPTION: Module ACETONE\_MOD contains subroutines to emit the biogenic
! flux of acetone into the full chemistry simulation.
!\\
!\\
! !INTERFACE:
!
MODULE ACETONE_MOD
!
! !USES:
!
IMPLICIT NONE
# include "define.h"
PRIVATE
!
! !PUBLIC MEMBER FUNCTIONS:
!
PUBLIC :: CLEANUP_ACETONE
PUBLIC :: EMISS_BIOACET
PUBLIC :: OCEAN_SOURCE_ACET
PUBLIC :: OCEAN_SINK_ACET
PUBLIC :: READ_JO1D
PUBLIC :: READ_RESP
!
! !REMARKS:
! References:
! ============================================================================
! (1 ) Jacob, D.J., B.D. Field, E. Jin, I. Bey, Q. Li, J.A. Logan, and
! R.M. Yantosca, "Atmospheric budget of acetone", Geophys. Res. Lett.,
! 107(D11), 4100, 2002.
! (2 ) Nightingale et al [2000a], J. Geophys. Res, 14, 373-387
! (3 ) Nightingale et al [2000b], Geophys. Res. Lett, 27, 2117-2120
!
! !REVISION HISTORY:
! NOTES:
! 18 Sep 2001 - B. Field, R. Yantosca - Initial version
! (1 ) Added changes from bdf and updated comments (bmy, 9/5/01)
! (2 ) Updated comments (bmy, 9/12/01)
! (3 ) Removed VERBOSE flag and all "print-to-log-file" diagnostics. The
! ND11 diagnostic produces the same totals. (bdf, bmy, 9/18/01)
! (4 ) Now cal GET_TAU0 w/ 3 arguments instead of 2. Also minor bug
! fix in READ_RESP (bmy, 11/15/01)
! (5 ) Implemented fix for ocean source/sink from Mat Evans. Also deleted
! obsolete code from 11/01. (bmy, 11/26/01)
! (6 ) Eliminated more obsolete code from 11/01 (bmy, 2/27/02)
! (7 ) Removed duplicate variable definitions (bmy, 3/20/02)
! (8 ) Now divide module header into MODULE PRIVATE, MODULE VARIABLES, and
! MODULE ROUTINES sections. Updated comments (bmy, 5/28/02)
! (9 ) Bug fix: Now apply true exponential loss in OCEAN_SINK_ACET, instead
! of just the 1st order approximation. (bdf, bmy, 7/11/02)
! (10) Scale the ocean source of acetone for GEOS-3 meteorology in order to
! match the total listed in Jacob et al 2002. (bdf, bmy, 9/16/02)
! (11) Now references "error_mod.f" (bmy, 10/15/02)
! (12) Minor modifications to READ_JO1D, READ_RESP (bmy, 3/14/03)
! (13) Add surface area scale factor for ocean source for 1x1 nested
! grids. (yxw, bmy, 5/16/03)
! (14) Scale ACET ocean source to Jacob et al 2002 for GEOS-4, and now
! account for surface area ratio for all GEOS grids. (bmy, 3/15/04)
! (15) Now references "directory_mod.f" (bmy, 7/19/04)
! (16) Now can read data from GEOS and GCAP grids. Also now use Nightingale
! et al 2000b formulation for piston velocity KL. (swu, bmy, 8/16/05)
! (17) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
! (18) Remove support for GEOS-1 and GEOS-STRAT met fields (bmy, 8/4/06)
! (19) Updates for nested EU and NA grids (amv, bmy, 12/18/09)
! (20) Updates for GEOS-4 1 x 1.25 grid (lok, bmy, 1/13/10)
! 13 Aug 2010 - R. Yantosca - Add modifications for MERRA (treat like GEOS-5)
! 04 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !PRIVATE TYPES:
!
! Array for J-O1D values
REAL*8, ALLOCATABLE :: JO1D(:,:)
! Array for heterotrophic respiration values
REAL*8, ALLOCATABLE :: XRESP(:,:)
!
! !DEFINED PARAMETERS:
!
! Avogadro's number
REAL*8, PARAMETER :: AVO = 6.022d23
! Molecules C / kg C
REAL*8, PARAMETER :: XNUMOL_C = AVO / 12d-3
CONTAINS
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: read_jo1d
!
! !DESCRIPTION: Subroutine READ\_JO1D reads in the J-Values for O1D from disk
! that are needed for the biogenic acetone fluxes,
!\\
!\\
! !INTERFACE:
!
SUBROUTINE READ_JO1D( THISMONTH )
!
! !USES:
!
USE BPCH2_MOD, ONLY : GET_NAME_EXT_2D
USE BPCH2_MOD, ONLY : GET_RES_EXT
USE BPCH2_MOD, ONLY : GET_TAU0
USE BPCH2_MOD, ONLY : READ_BPCH2
USE DIRECTORY_MOD, ONLY : DATA_DIR
USE ERROR_MOD, ONLY : ALLOC_ERR
USE ERROR_MOD, ONLY : ERROR_STOP
USE TRANSFER_MOD, ONLY : TRANSFER_2D
!USE CMN_SIZE_MOD ! Size parameters
# include "CMN_SIZE"
!
! !INPUT PARAMETERS:
!
INTEGER, INTENT(IN) :: THISMONTH ! Current month
!
! !REMARKS:
! J-values for O1D are are stored in the JO1D module array in [s^-1].
!
! !REVISION HISTORY:
! 14 Sep 2001 - B. Field - Initial version
! (1 ) Now use TRANSFER_2D from "transfer_mod" to cast from REAL*4 to REAL*8
! and to resize data block to (IIPAR,JJPAR). Also use 3-argument
! form of GET_TAU0 (bmy, 11/15/01)
! (2 ) Removed obsolete code from 11/01 (bmy, 11/26/01, bmy, 2/27/02)
! (3 ) Now reference routines ALLOC_ERR and ERROR_STOP from "error_mod.f"
! (bmy, 10/15/02)
! (4 ) Now call READ_BPCH2 with QUIET=.TRUE. to suppress printing of extra
! info to stdout. Also made cosmetic changes. (bmy, 3/14/03)
! (5 ) Now references DATA_DIR from "directory_mod.f" (bmy, 7/19/04)
! (6 ) Now can read data from GEOS and GCAP grids (bmy, 8/16/05)
! (7 ) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
! 04 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
LOGICAL, SAVE :: FIRST = .TRUE.
INTEGER :: AS
REAL*4 :: ARRAY(IIPAR,JJPAR,1)
REAL*8 :: TAU0
CHARACTER(LEN=255) :: FILENAME
!=================================================================
! READ_JO1D begins here!
!=================================================================
! Allocate JO1D only on the first call
IF ( FIRST ) THEN
ALLOCATE( JO1D( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'JO1D' )
JO1D = 0d0
FIRST = .FALSE.
ENDIF
! Construct filename
FILENAME = TRIM( DATA_DIR ) //
& 'acetone_200108/JO1D.' // GET_NAME_EXT_2D() //
& '.' // GET_RES_EXT()
! Echo filename
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( ' - READ_JO1D: Reading ', a )
! Get TAU0 value -- use "generic" year 1985
TAU0 = GET_TAU0( THISMONTH, 1, 1985 )
! Read JO1D data
CALL READ_BPCH2( FILENAME, 'JV-MAP-$', 51,
& TAU0, IIPAR, JJPAR,
& 1, ARRAY(:,:,1), QUIET=.TRUE. )
! Cast from REAL*4 to REAL*8
CALL TRANSFER_2D( ARRAY(:,:,1), JO1D )
! Make sure JO1D is not zero everywhere
IF ( .not. ( SUM( JO1D ) > 0d0 ) ) THEN
CALL ERROR_STOP( 'JO1D is zero everywhere!', 'READ_JO1D' )
ENDIF
! Echo information
WRITE( 6, 110 ) MAXVAL( JO1D )
110 FORMAT( ' - READ_JO1D: Max value of JO1D: ', es13.6 )
END SUBROUTINE READ_JO1D
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: read_resp
!
! !DESCRIPTION: Subroutine READ\_RESP reads in the monthly heterotrophic
! respiration measured in g of plant matter/m\^2 flowing out of the biosphere.
! This is needed for the biogenic acetone fluxes.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE READ_RESP( THISMONTH )
!
! !USES:
!
USE BPCH2_MOD, ONLY : GET_NAME_EXT_2D
USE BPCH2_MOD, ONLY : GET_RES_EXT
USE BPCH2_MOD, ONLY : GET_TAU0
USE BPCH2_MOD, ONLY : READ_BPCH2
USE DIRECTORY_MOD, ONLY : DATA_DIR
USE ERROR_MOD, ONLY : ALLOC_ERR
USE TRANSFER_MOD, ONLY : TRANSFER_2D
!USE CMN_SIZE_MOD ! Size parameters
# include "CMN_SIZE"
!
! !INPUT PARAMETERS:
!
INTEGER, INTENT(IN) :: THISMONTH ! Current month
!
! !REMARKS:
! Respiration values are stored in the RESP module array in [g C/m2/s].
!
! !REVISION HISTORY:
! 14 Sep 2001 - B. Field - Initial version
! (1 ) Now use TRANSFER_2D from "transfer_mod" to cast from REAL*4 to REAL*8
! and to resize data block to (IIPAR,JJPAR). Bug fix: THISMONTH > 12
! is never valid. Also use 3-argument form of GET_TAU0 (bmy, 11/15/01)
! (2 ) Removed obsolete code from 11/01 (bmy, 11/26/01, bmy, 2/27/02)
! (3 ) Now reference ALLOC_ERR from "error_mod.f". Also use version of
! GET_TAU0 w/ 3 arguments. (bmy, 10/15/02)
! (4 ) Now call READ_BPCH2 with QUIET=.TRUE. to suppress printing of extra
! info to stdout. Also made cosmetic changes. (bmy, 3/14/03)
! (5 ) Now references DATA_DIR from "directory_mod.f" (bmy, 7/20/04)
! (6 ) Now can read files for both GEOS and GCAP grids (bmy, 8/16/05)
! (7 ) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
! 04 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
LOGICAL, SAVE :: FIRST = .TRUE.
INTEGER :: AS
REAL*4 :: ARRAY(IIPAR,JJPAR,1)
REAL*8 :: TAU0, TAU1
CHARACTER(LEN=255) :: FILENAME
!=================================================================
! READ_RESP begins here!
!=================================================================
! Allocate XRESP only on the first call
IF ( FIRST ) THEN
ALLOCATE( XRESP( IIPAR, JJPAR ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'XRESP' )
XRESP = 0d0
FIRST = .FALSE.
ENDIF
! Construct filename
FILENAME = TRIM( DATA_DIR ) //
& 'acetone_200108/resp.' // GET_NAME_EXT_2D() //
& '.' // GET_RES_EXT()
! Echo filename
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( ' - READ_RESP: Reading ', a )
! Get TAU0 value -- use "generic" year 1985
TAU0 = GET_TAU0( THISMONTH, 1, 1985 )
! Get TAU1 value -- use generic year 1985
! Be careful -- if Dec then nextmonth is Jan 1986
IF ( THISMONTH == 12 ) THEN
TAU1 = GET_TAU0( 1, 1, 1986 )
ELSE
TAU1 = GET_TAU0( THISMONTH+1, 1, 1985 )
ENDIF
! Read heterotrophic respiration data in [g C/m2/month]
CALL READ_BPCH2( FILENAME, 'HET-RESP', 1,
& TAU0, IIPAR, JJPAR,
& 1, ARRAY(:,:,1), QUIET=.TRUE. )
! Cast from REAL*4 to REAL*8
CALL TRANSFER_2D( ARRAY(:,:,1), XRESP )
! Convert RESP field to [g C/m2/s]
XRESP = XRESP / ( ( TAU1 - TAU0 ) * 3600d0 )
END SUBROUTINE READ_RESP
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: ocean_source_acet
!
! !DESCRIPTION: Subroutine OCEAN\_SOURCE\_ACET specifies the ocean source of
! acetone.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE OCEAN_SOURCE_ACET( I, J, ACETONE )
!
! !USES:
!
USE ERROR_MOD, ONLY : CHECK_VALUE
USE DAO_MOD, ONLY : ALBD, TS
USE DIAG_MOD, ONLY : AD11
USE GRID_MOD, ONLY : GET_AREA_CM2
USE TIME_MOD, ONLY : GET_TS_EMIS
!USE CMN_SIZE_MOD ! Size parameters
!USE CMN_DIAG_MOD ! ND11
!USE CMN_DEP_MOD ! FRCLND
# include "CMN_SIZE"
# include "CMN_DIAG"
# include "CMN_DEP"
!
! !INPUT PARAMETERS:
!
INTEGER, INTENT(IN) :: I ! GEOS-Chem longitude index
INTEGER, INTENT(IN) :: J ! GEOS-Chem latitude index
!
! !INPUT/OUTPUT PARAMETERS:
!
REAL*8, INTENT(INOUT) :: ACETONE ! Acetone emission [atoms C/s]
!
! !REMARKS:
!
! !REVISION HISTORY:
! 14 Sep 2001 - B. Field - Initial version
! (1 ) Now compute u = SQRT( U10M^2 + V10M^2 ) as SQRT( SFCWINDSQR(I,J) ).
! This is necessary since U10M and V10M are missing for 1996, and
! need to be computed from UWND and VWND. (bmy, 9/5/01)
! (2 ) Bug fixes: multiply kg by 360000 and use exponent to the -0.5 power
! in the expression for Kl. Also update value of the OCEAN_SCALE
! factor to 3.63e11. Also updated comments. (bdf, bmy, 9/5/01)
! (3 ) Bug fix: ACETONE has units of [atoms C/box/s], to match those of
! EMISRR. This involves an extra division by DTSRCE. (bmy, 9/14/01)
! (4 ) Removed diagnostic variable OCEAN_SOURCE (bmy, 9/18/01)
! (5 ) JO1D(IREF,JREF) is now JO1D(I,J). Bug fix: Zero the ocean source
! of acetone in grid boxes that are covered by less than 50% ocean.
! Bug fix: make sure -5 <= TC <= 30, in order to prevent the power
! series for Schmidt # from going negative. Also eliminate IREF,
! JREF, we don't need them anymore. (mje, rvm, bmy, 11/26/01)
! (6 ) Eliminated obsolete code from 11/01 (bmy, 2/27/02)
! (7 ) Scale the ocean source of acetone for GEOS-3 meteorology in order to
! match the total listed in Jacob et al 2002. (bdf, bmy, 9/16/02)
! (8 ) Now use function GET_AREA_CM2 of "grid_mod.f" to return the
! grid box area in cm2. Use function GET_TS_EMIS from "time_mod.f".
! Remove reference to CMN header file. (bmy, 2/11/03)
! (9 ) Apply surface area scale factor for 1x1 nested grids, in order to
! make the total ocean source the same as for 4x5. (yxw, bmy, 5/16/03)
! (10) Scale the ocean source to Jacob et al 2002 for GEOS-4. Also account
! for surface area ratio for all GEOS grids. (bmy, 3/15/04)
! (11) Added space in #ifdef block for GEOS-4 x 1x125 grid (bmy, 12/1/04)
! (12) Now use Nightingale et al 2000b formulation for piston velocity KL.
! (swu, bmy, 8/16/05)
! (13) Remove support for GEOS-1 and GEOS-STRAT met fields (bmy, 8/4/06)
! (14) Adjust SCALE_FACTOR for 0.5 x 0.667 grid (dan, bmy, 11/6/08)
! (15) Additional scale factors for NESTED_NA and NESTED_EU calculated and
! included (amv, bmy, 12/18/09)
! (16) Added scale factor for GEOS-4 1 x 1.25 grid (lok, bmy, 1/13/10)
! 13 Aug 2010 - R. Yantosca - Treat MERRA in the same way as GEOS-5
! 04 Nov 2010 - R. Yantosca - Added ProTeX headers
! 04 Nov 2010 - R. Yantosca - Cleaned up #if statements for clarity
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
REAL*8 :: KG, U, TC, SC, kl, KKL, HSTAR, KL600
REAL*8 :: DTSRCE, OCEAN_ACET, AREA_CM2, FOCEAN
REAL*8, EXTERNAL :: SFCWINDSQR
!
! !DEFINED PARAMETERS:
!
! ALPHA scale factor in kg*s^2/cm
REAL*8, PARAMETER :: OCEAN_SCALE = 3.63d11
! Coefficients for fitting the Schmidt number for acetone
REAL*8, PARAMETER :: A0 = 3287.687d0
REAL*8, PARAMETER :: A1 = -136.2176d0
REAL*8, PARAMETER :: A2 = 2.20642d0
REAL*8, PARAMETER :: A3 = -0.01410642d0
!=================================================================
! Since the algorithm below was developed for the 4x5 GEOS-STRAT
! model, we need to scale the emissions to the A Posterioris in
! Jacob et al 2002 = 16.74 Tg C/yr.
!
! This scaling is necessary in order (1) to account for variations
! in surface temperature and wind speed between the different
! GEOS met field versions and (2) to account for the different
! surface areas between the 1x1, 2x2.5 and 4x5 grid boxes.
!=================================================================
#if defined( MERRA ) && defined( GRID4x5 )
!-----------------------------------------------------------------
! %%% MERRA, 4 x 5, global %%%
!
! Acetone produced : 17.0919 Tg C
! Scale factor : 16.74 / 17.0919 = 0.979411
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.979411d0
#elif defined( MERRA ) && defined( GRID2x25 )
!-----------------------------------------------------------------
! %%% MERRA, 2 x 2.5, global %%%
!
! %%% SCALING NEEDS TO BE DONE WHEN MET IS FINALLY AVAILABLE %%%
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 1d0
#elif defined( GEOS_FP ) && defined( GRID4x5 )
!! add geos_fp (lzh, 11/01/2014)
!-----------------------------------------------------------------
! %%% MERRA, 2 x 2.5, global %%%
!
! %%% SCALING NEEDS TO BE DONE WHEN MET IS FINALLY AVAILABLE %%%
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.9551d0
#elif defined( GEOS_FP ) && defined( GRID2x25 )
!-----------------------------------------------------------------
! %%% MERRA, 2 x 2.5, global %%%
!
! %%% SCALING NEEDS TO BE DONE WHEN MET IS FINALLY AVAILABLE %%%
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.2212d0
#elif defined( GEOS_5 ) && defined( GRID4x5 )
!-----------------------------------------------------------------
! %%% GEOS-5, 4 x 5, global %%%
!
! Acetone produced : 17.5272 Tg C
! Scale factor : 16.74 / 17.5272 = 0.9551
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.9551d0
#elif defined( GEOS_5 ) && defined( GRID2x25 )
!-----------------------------------------------------------------
! %%% GEOS-5, 2 x 2.5, global %%%
!
! Acetone produced : 75.6781 Tg C
! Scale factor : 16.74 / 75.6781 = 0.2212
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.2212d0
#elif defined( GEOS_5 ) && defined( GRID05x0666 ) && defined ( NESTED_CH )
!-----------------------------------------------------------------
! %%% GEOS-5, 0.5 x 0.666, NESTED CHINA %%% (May Fu, Dan Chen)
!
! ACET; 4x5 BC region : 2.16838 Tg C
! ACET; 0.5 x 0.666 region : 134.757 Tg C
! Scale factor : 0.9551*(2.16838/134.757) = 0.01537
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.015369d0
#elif defined( GEOS_5 ) && defined( GRID05x0666 ) && defined ( NESTED_NA )
!-----------------------------------------------------------------
! %%% GEOS-5, 0.5 x 0.666, NESTED N. AMERICA %%% (van Donkelaar)
!
! ACET; 2x25 BC region : 1.6794 Tg C
! ACET; 0.5 x 0.666 region : 1.724 Tg C
! Scale factor : 0.015369*(1.6794/1.724) = 0.01497
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.01497d0
#elif defined( GEOS_5 ) && defined( GRID05x0666 ) && defined ( NESTED_EU )
!-----------------------------------------------------------------
! %%% GEOS-5, 0.5 x 0.666, NESTED EUROPE %%% (van Donkelaar)
!
! ACET; 2x25 BC region : 0.2868 Tg C
! ACET; 0.5 x 0.666 region : 0.2689 Tg C
! Scale factor : 0.015369*(0.2868/0.2689) = 0.01639
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.01639d0
#elif defined( GEOS_4 ) && defined( GRID4x5 )
!-----------------------------------------------------------------
! %%% GEOS-4, 4 x 5, global %%%
!
! Acetone produced : 19.0973 Tg C
! Scale factor : 16.74 / 19.0973 = 0.8765
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.8765d0
#elif defined( GEOS_4 ) && defined( GRID2x25 )
!-----------------------------------------------------------------
! %%% GEOS-4, 2 x 2.5, global %%%
!
! Acetone produced : 80.2888 Tg C
! Scale factor : 16.74 / 80.2888 = 0.2085
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.2085d0
#elif defined( GEOS_4 ) && defined( GRID1x125 )
!-----------------------------------------------------------------
! %%% GEOS-4, 1 x 1.25, global %%% (Lok Lamsal)
!
! Acetone produced : 290.4233 Tg C
! Scale factor : 16.74 / 290.4233 = 0.05764
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.05764d0
#elif defined( GEOS_3 ) && defined( GRID4x5 )
!-----------------------------------------------------------------
! %%% GEOS-3, 4 x 5, global %%%
!
! Acetone produced : 20.16 Tg C
! Scale factor : 16.74 / 20.16 = 0.83
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.83d0
#elif defined( GEOS_3 ) && defined( GRID2x25 )
!-----------------------------------------------------------------
! %%% GEOS-3, 2 x 2.5, global %%%
!
! Acetone produced : 80.76 Tg C
! Scale factor : 16.74 / 80.76 = 0.2075
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.2075d0
#elif defined( GEOS_3 ) && defined( GRID1x1 )
!-----------------------------------------------------------------
! %%% GEOS-3, 1 x 1, NESTED ?? %%%
! Acetone produced : 334.8 Tg C
! Scale factor : 16.74 / 334.8 = 0.05
!-----------------------------------------------------------------
REAL*8, PARAMETER :: SCALE_FACTOR = 0.05d0
#else
! Otherwise set to 1
REAL*8, PARAMETER :: SCALE_FACTOR = 1d0
#endif
!=================================================================
! OCEAN_SOURCE_ACET begins here!
!=================================================================
! Emission timestep in seconds
DTSRCE = GET_TS_EMIS() * 60d0
! Fraction of (I,J) that is ocean
FOCEAN = 1d0 - FRCLND(I,J)
! Area of grid box (I,J) in cm^2
AREA_CM2 = GET_AREA_CM2( J )
!=================================================================
! Compute ocean source by Henry's law
! Now make sure only to compute the ocean source if more than
! 50% of the box is covered by water (mje, bdf, bmy, 11/26/01)
!=================================================================
IF ( FOCEAN > 0.5d0 ) THEN
! Henry's law [unitless] using 32 M/atm Henry's law constant
HSTAR = ( 1d0 / 730d0 ) *
& EXP( -5500d0 * ( 298d0 - TS(I,J) ) / ( TS(I,J) * 298d0 ) )
! Magnitude of resultant wind [m/s]
! SFCWINDSQR(I,J) is needed since this will compute the square
! of the surface wind correctly for all GEOS models (bmy, 9/5/01)
U = SQRT( SFCWINDSQR( I, J ) )
! TC is temperature in Celsius
! Also make sure -5 <= TC <= 30 (mje, rvm, bmy, 11/26/01)
TC = TS(I,J) - 273.15d0
TC = MIN( MAX( TC, -5d0 ), 30d0 )
! SC is Schmidt # for acetone [unitless]
SC = A0 + A1*TC + A2*TC**2 + A3*TC**3
! KL is conductance for mass transfer in liquid phase
! (Nightingale et al 2000b), which has units of [cm/hr]
KL = ( 0.24d0*U*U + 0.061d0*U ) * SQRT( 600d0/Sc )
! KG is conductance for mass transfer in gas phase (Asher 1997)
! Multiply KG by 360000 to convert from [m/s] to [cm/hr]
KG = SQRT( 18d0 / 58d0 ) * ( 5.2d-5 + 3.2d-3 * U )
KG = KG * 360000d0
! KKL is the air-to-sea transfer velocity (Liss and Slater 1974)
! Multiply KKL by 3600 to convert from [cm/hr] to [cm/s]
KKL = 1d0 / ( 1d0/KL + 1d0/( HSTAR * KG ) )
KKL = KKL / 3600d0
! Turn off ocean uptake over snow/ice (ALBEDO > 0.4)
IF ( ALBD(I,J) > 0.4d0 ) KKL = 0d0
!==============================================================
! The acetone ocean source [kg C] includes the following terms:
!
! (1) OCEAN_SCALE = 3.63e11 [kg C s^2/cm].
!
! (2) J(O1D), which is a proxy for the UV-B flux [s^-1].
!
! The product of J(O1D) and OCEAN_SCALE reflect the
! photoproduction of acetone by microbes in the ocean
! microlayer.
!
! (3) KKL, the air-to-sea transfer velocity [cm/s], which
! represents uptake of acetone by microbes in the ocean
! microlayer. This term is a net loss.
!
! (4) FOCEAN, the fraction of the grid box that is ocean.
!
! The units of the ocean source (stored in OCEAN_ACET) are:
!
! 1 | kg C | s^2 | 1 | cm kg C |
! ----------+----------+-----+---+---- = ----------+----------
! emission | grid box | cm | s | s grid box | emission
! time step time step
!==============================================================
OCEAN_ACET = OCEAN_SCALE * JO1D(I,J) * KKL * FOCEAN
! Apply further scale factor to account for variations in surface
! temperature wind speed between GEOS met fields -- and also
! surface area between 1x1, 2x2.5, and 4x5 grids. (bmy, 3/15/04)
OCEAN_ACET = OCEAN_ACET * SCALE_FACTOR
ELSE
! If there is less than 50% water in the grid box, zero
! the ocean source from acetone (mje, rvm, bmy, 11/26/01)
OCEAN_ACET = 0d0
ENDIF
! Add ocean source to total biogenic source in [atoms C/box/s]
ACETONE = ACETONE + ( OCEAN_ACET * XNUMOL_C / DTSRCE )
!=================================================================
! ND11 diag -- save ACETONE from the ocean in [atoms C/cm2/s]
!=================================================================
IF ( ND11 > 0 ) THEN
AD11(I,J,6) = AD11(I,J,6) + ( OCEAN_ACET * XNUMOL_C ) /
& ( AREA_CM2 * DTSRCE )
ENDIF
END SUBROUTINE OCEAN_SOURCE_ACET
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: ocean_sink_acet
!
! !DESCRIPTION: Subroutine OCEAN\_SINK\_ACET applies the ocean sink to global
! acetone concentrations.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE OCEAN_SINK_ACET( ACETONE )
!
! !USES:
!
USE DAO_MOD, ONLY : ALBD
USE DAO_MOD, ONLY : TS
USE DIAG_MOD, ONLY : AD11
USE GRID_MOD, ONLY : GET_AREA_CM2
USE TIME_MOD, ONLY : GET_TS_CHEM
!USE CMN_SIZE_MOD ! Size parameters
!USE CMN_DIAG_MOD ! ND11
!USE CMN_DEP_MOD ! FRCLND
# include "CMN_SIZE"
# include "CMN_DIAG"
# include "CMN_DEP"
!
! !INPUT/OUTPUT PARAMETERS:
!
REAL*8, INTENT(INOUT) :: ACETONE(IIPAR,JJPAR) ! Acetone mass [kg C]
!
! !REVISION HISTORY:
! 14 Sep 2001 - B. Field - Initial version
! (1 ) Remove references to F77_CMN_UV10M and F77_CMN_LWI -- these are now
! obsolete in GEOS-CHEM versions 4.18 and higher (bmy, 9/5/01)
! (2 ) Now compute u = SQRT( U10M^2 + V10M^2 ) as SQRT( SFCWINDSQR(I,J) ).
! This is necessary since U10M and V10M are missing for 1996, and
! need to be computed from UWND and VWND. (bmy, 8/2/01)
! (3 ) Now declare OCEANSINK_SCALE = 0.15 as a parameter. This is the
! optimized value of BETA from Emily Jin's analysis. Also updated
! comments. (bdf, bmy, 9/5/01)
! (4 ) Updated comments. Also parallellized DO loops. (bmy, 9/14/01)
! (5 ) Removed diagnostic variable OCEAN_LOSS (bmy, 9/18/01)
! (6 ) Bug fix: Zero the ocean sink of acetone in grid boxes where there
! is less than 50% of ocean, and where there is ice on the surface.
! Bug fix: Make sure -5 <= TC <= 30, in order to prevent the power
! series for Schmidt # from going negative. Also eliminate IREF,
! JREF, we don't need them. (mje, rvm, bmy, 11/26/01)
! (7 ) Eliminated obsolete code from 11/01 (bmy, 2/27/02)
! (8 ) Bug fix: now use true exponential for loss instead of just 1st
! order term. Also added PRE_ACET variable to save previous acetone
! mass for diagnostic, before applying loss. (bdf, bmy, 7/11/02)
! (9 ) Now use function GET_AREA_CM2 of "grid_mod.f" to return the
! grid box area in cm2. Now use function GET_TS_CHEM from
! "time_mod.f". Remove reference to CMN header file. (bmy, 2/11/03)
! (12) Now use Nightingale et al 2000b formulation for piston velocity KL.
! (swu, bmy, 8/16/05)
! 04 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
INTEGER :: I, IREF, J, JREF
REAL*8 :: KH298, DHR, KH, U, TC, SC, KL, KG
REAL*8 :: KKL, CG, F, T1L, H, KL600, FLUX, HSTAR
REAL*8 :: AREA_CM2, DTCHEM, FOCEAN, OCEAN_ACET
REAL*8 :: PRE_ACET
! External functions
REAL*8, EXTERNAL :: BOXVL, SFCWINDSQR
!
! !DEFINED PARAMETERS:
!
! Optimized value of BETA for ocean sink found by
! Emily Jin from inverse modeling analysis
REAL*8, PARAMETER :: OCEANSINK_SCALE = 0.15d0
! Coefficients for fitting the Schmidt number for acetone
REAL*8, PARAMETER :: A0 = 3287.687d0
REAL*8, PARAMETER :: A1 = -136.2176d0
REAL*8, PARAMETER :: A2 = 2.20642d0
REAL*8, PARAMETER :: A3 = -0.01410642d0
!=================================================================
! OCEAN_SINK_ACET begins here!
!
! Compute acetone lost to ocean sink and subtract from STT
!=================================================================
! Chemistry timestep [s]
DTCHEM = GET_TS_CHEM() * 60d0
! Loop over grid boxes
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J, AREA_CM2, FOCEAN, HSTAR, U, TC, SC )
!$OMP+PRIVATE( KL600, KL, KG, KKL, CG, FLUX, OCEAN_ACET, PRE_ACET )
!$OMP+SCHEDULE( DYNAMIC )
DO J = 1, JJPAR
! Grid box area in cm2
AREA_CM2 = GET_AREA_CM2( J )
DO I = 1, IIPAR
! Fraction of grid box that is ocean
FOCEAN = 1d0 - FRCLND(I,J)
!===========================================================
! Only compute ocean sink if there is more than 50% ocean
! in the grid box, and if it is not ice (albedo > 0.4)
! (mje, rvm, bmy, 11/26/01)
!===========================================================
IF ( FOCEAN > 0.5d0 .and. ALBD(I,J) <= 0.4d0 ) THEN
! Henry's law [unitless] using 32 M/atm Henry's law constant
HSTAR = ( 1d0 / 792d0 ) *
& EXP( -5500d0 * ( 298d0 - TS(I,J) ) / ( TS(I,J) * 298d0 ) )
! Magnitude of surface wind [m/s]
! SFCWINDSQR(I,J) is needed since this will compute the
! square of the surface wind correctly for all GEOS models
U = SQRT( SFCWINDSQR( I, J ) )
! TC is temperature in Celsius
! Bug fix: make sure -5 <= TC <= 30 (mje, rvm, bmy, 11/26/01)
TC = TS(I,J) - 273.15d0
TC = MIN( MAX( TC, -5d0 ), 30d0 )
! SC is Schmidt # for acetone [unitless]
SC = A0 + A1*TC + A2*TC**2 + A3*TC**3
! KL is conductance for mass transfer in liquid phase
! (Nightingale et al 2000b), which has units of [cm/hr]
KL = ( 0.24d0*U*U + 0.061d0*U ) * SQRT( 600d0/Sc )
! KG is conductance for mass transfer in gas phase (Asher 1997)
! Multiply KG by 360000 to convert from [m/s] to [cm/hr]
KG = SQRT( 18d0 / 58d0 ) * ( 5.2d-5 + 3.2d-3 * U )
KG = KG * ( 360000d0 )
! KKL is the air-to-sea transfer velocity (Liss and Slater 1974)
! Multiply KKL by 3600 to convert from [cm/hr] to [cm/s]
KKL = 1d0 / ( 1d0/KL + 1d0/( HSTAR * KG ) )
KKL = KKL / 3600d0
! CG is the gas concentration of acetone [kg C/cm3]
! adj_group: don't multiply by ACETONE here or divide
! by ACETONE later, making this routine self adjoint
!(dkh, 03/08/10)
!CG = ACETONE(I,J) / BOXVL(I,J,1)
CG = 1d0 / BOXVL(I,J,1)
! FLUX is the air-to-sea flux of acetone in [kg C/cm2/s].
FLUX = KKL * CG / HSTAR
! Multiply FLUX by OCEANSINK_SCALE, which is the optimized
! BETA value (= 0.15) found from Emily Jin's analysis.
FLUX = FLUX * OCEANSINK_SCALE
!========================================================
! Ocean loss of acetone consists of the following terms:
!
! (1) FLUX, the air-to-sea flux of acetone in [kg C/cm2/s]
!
! (2) AREA_CM2, the grid box surface area
!
! (3) DTCHEM, the number of seconds per chemistry timestep
!
! (4) FOCEAN, the fraction of the grid box that is ocean.
!
! The units of the resultant ocean loss (in OCEAN_ACET) are:
!
! kg C | AREA_CM2 cm2 | DTCHEM s kg C
! ---------+--------------+--------------- = ------------
! cm2 * s | grid box | chem timestep box * step
!========================================================
OCEAN_ACET = ( FLUX * AREA_CM2 * DTCHEM * FOCEAN )
ELSE
! If there is less than 50% water in the grid box, or
! if there is ice on the ocean, then zero the ocean sink
! for acetone (mje, rvm, bmy, 11/26/01)
OCEAN_ACET = 0d0
ENDIF
! Save mass of acetone in tmp variable for diagnostic
PRE_ACET = ACETONE(I,J)
! Apply exponential loss to acetone mass
! adj_group: since we don't multiply by ACETONE above,
! we don't need to divide by ACETONE here (dkh, 03/08/10)
!ACETONE(I,J) = ACETONE(I,J) * EXP(-OCEAN_ACET/ACETONE(I,J))
ACETONE(I,J) = ACETONE(I,J) * EXP(-OCEAN_ACET)
!===========================================================
! Diagnostics: save ACETONE lost to ocean in [atoms C/cm2/s]
!===========================================================
IF ( ND11 > 0 ) THEN
AD11(I,J,7) = AD11(I,J,7) +
& ( ( PRE_ACET - ACETONE(I,J) ) * XNUMOL_C ) /
& ( AREA_CM2 * DTCHEM )
ENDIF
ENDDO
ENDDO
!$OMP END PARALLEL DO
END SUBROUTINE OCEAN_SINK_ACET
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: emiss_bioacet
!
! !DESCRIPTION: Subroutine EMISS\_BIOACET computes the biogenic emissions of
! ACETONE from monoterpenes, isoprene, methyl butenol, dry leaf matter, and
! grasslands.
!\\
!\\
! !INTERFACE:
!
SUBROUTINE EMISS_BIOACET( I, J, TMMP, EMMO,
& EMIS, EMMB, GRASS, ACETONE )
!
! !USES:
!
USE DIAG_MOD, ONLY : AD11
USE GRID_MOD, ONLY : GET_AREA_M2
USE GRID_MOD, ONLY : GET_XMID
USE GRID_MOD, ONLY : GET_YMID
USE TIME_MOD, ONLY : GET_TS_EMIS
!USE CMN_SIZE_MOD ! Size parameters
!USE CMN_DIAG_MOD ! ND11
!USE CMN_MONOT_MOD ! BASEMONOT
# include "CMN_SIZE"
# include "CMN_DIAG"
# include "CMN_DEP"
!
! !INPUT PARAMETERS:
!
INTEGER, INTENT(IN) :: I ! Grid box longitude index
INTEGER, INTENT(IN) :: J ! Grid box latitude index
REAL*8, INTENT(IN) :: TMMP ! Surface temperature [K]
REAL*8, INTENT(IN) :: EMMO ! Monoterpene emission [atoms C]
REAL*8, INTENT(IN) :: EMIS ! Isoprene emission [atoms C]
REAL*8, INTENT(IN) :: EMMB ! Methylbutenol emission [atoms C]
REAL*8, INTENT(IN) :: GRASS ! Isoprene from grasslands [atoms C]
!
! !INPUT/OUTPUT PARAMETERS:
!
REAL*8, INTENT(INOUT) :: ACETONE ! Biogenic acetone [atoms C/s]
!
! !REVISION HISTORY:
! 18 Sep 2001 - B. Field - Initial version
! (1 ) Now pass acetone array (e.g. from STT) thru the argument list, since
! this avoids dependence on IDTACET in this program (bmy, 8/1/01)
! (2 ) Updated scale factors (bdf, bmy, 9/5/01)
! (3 ) Updated comments (bmy, 9/14/01)
! (4 ) Removed diagnostic variables: MONOTERPENES, ISOPRENE, ISOP_TOTAL,
! MONO_TOTAL, NA_TOT, RESP_TOT, GRASS_TOT. These have now been
! supplanted by the ND11 acetone source diagnostic. (bdf, bmy, 9/18/01)
! (5 ) XRESP(I+I0,J+J0) is now XRESP(I,J) (bmy, 11/26/01)
! (6 ) Eliminated obsolete code from 11/01 (bmy, 2/27/02)
! (7 ) Removed duplicate definitions of EMMB and GRASS (bmy, 3/20/02)
! (8 ) Now use functions from "grid_mod.f" to get surface area, lon, and
! lat of grid box (I,J). Use function GET_AREA_M2 to get the grid
! box surface area in m2, then convert to cm2. Now use function
! GET_TS_EMIS from "time_mod.f". Remove reference to CMN header
! file. (bmy, 2/11/03)
! 04 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
!
! !LOCAL VARIABLES:
!
REAL*8 :: EMMO_MOL, YIELD_MO
REAL*8 :: YIELD_RESP, ACET_MOL, ACET_MB
REAL*8 :: ACET_MO, DTSRCE, AREA_CM2
REAL*8 :: YIELD_ISOP, MB_MOL, ACET_RESP
REAL*8 :: ACET_C, ACET_ISOP, YIELD_GRASS
REAL*8 :: ACET_GRASS, ACETSCAL, AREA_M2
REAL*8 :: X, Y
! Scale factors for a posteriori
REAL*8 :: MONO_SCALE, DIRECT_SCALE, MB_SCALE
REAL*8 :: DP_SCALE, GRASS_SCALE
!=================================================================
! EMISS_BIOACET begins here!
!
! The yield for acetone from biogenic sources comes from
! experimental yields from monoterpenes, (Reissell et. al. 1999),
! methyl butenol (Alvarado et. al. 1999) and emissions for
! monoterpenes, methyl butenol, and acetone from Guenther et. al.
! 1999. Guenther's emissions are for North America, and have
! been scaled to the entire globe
!=================================================================
! Emission timestep [s]
DTSRCE = GET_TS_EMIS() * 60d0
! Grid box areas in [m2] and [cm2]
AREA_M2 = GET_AREA_M2( J )
AREA_CM2 = AREA_M2 * 1d4
!=================================================================
! (1) BIOGENIC EMISSIONS OF ACETONE FROM MONOTERPENES
!
! Monoterpenes has same # molecules/kg of carbon as isoprene
! The yield for monoterpenes is .12 mol/mol from Reisell et.al.
! 1999 (this does not includes direct acetone emissions)
!=================================================================
! Convert [atoms C/box/step] to [molec MONOTERPENE/box/step]
! There are 10 C atoms per molecule of MONOTERPENE
EMMO_MOL = EMMO / 10d0
! Apply yield from monoterpenes to get [molec ACET/box/step]
YIELD_MO = 0.116d0
ACET_MOL = EMMO_MOL * YIELD_MO
! Convert acetoneemissions back into [atoms C/box/step]
ACET_MO = ACET_MOL * 3.d0
! Scale to a posteriori source from Jacob et al 2001 (bdf, 9/5/01)
MONO_SCALE = 0.89d0
ACET_MO = ACET_MO * MONO_SCALE
! Convert monoterpene yield to [atoms C/box/s] and
! add to the total biogenic acetone emissions
ACETONE = ACETONE + ( ACET_MO / DTSRCE )
! Diagnostics -- save ACETONE from MONOTERPENES in [atoms C/cm2/s]
IF ( ND11 > 0 ) THEN
AD11(I,J,1) = AD11(I,J,1) +
& ( ACET_MO / ( AREA_CM2 * DTSRCE ) )
ENDIF
!=================================================================
! (2) BIOGENIC ACETONE FROM METHYL BUTENOL -- NORTH AMERICA
!
! Methyl Butenol (a.k.a. MBO) produces acetone with a molar yield
! of 0.6 [Alvarado (1999)]. The biogenic source of MBO is thought
! to be restricted to North America. According to Guenther (1999)
! North america emits 3.2Tg-C of MBO, producing 1.15 Tg-C of
! Acetone in North America.
!=================================================================
ACET_MB = 0D0
! Lon and lat of grid box (I,J) in degrees
X = GET_XMID( I )
Y = GET_YMID( J )
! Methyl butenol is emitted only in North America, where
! ( -167.5 <= lon <= -52.5 ) and ( 16.0 <= lat <= 72.0 )
IF ( ( X >= -167.5d0 .and. X <= -52.5d0 ) .AND.
& ( Y >= 16.0d0 .and. Y <= 72.0d0 ) ) THEN
! Convert from [atoms C/box/step] to [molec MBO/box/step]
! There are 5 C atoms per molecule MBO
MB_MOL = EMMB / 5.d0
! Apply yield from MBO to get [molec ACET/box/step]
MB_SCALE = 0.6d0
ACET_MOL = MB_MOL * MB_SCALE
! Convert from [molec ACET/box/step] to [atoms C/box/step]
! There are 3 C atoms per acetone molecule
ACET_MB = ACET_MOL * 3.d0
! Scale to a posteriori source from Jacob et al 2001 (bdf, 9/5/01)
MB_SCALE = 0.76d0
ACET_MB = ACET_MB * MB_SCALE
! Convert MBO yield to [atoms C/box/s] and add
! to the total biogenic acetone emissions
ACETONE = ACETONE + ( ACET_MB / DTSRCE )
! Diagnostics -- save ACETONE from MBO in [atoms C/cm2/s]
IF ( ND11 > 0 ) THEN
AD11(I,J,2) = AD11(I,J,2) +
& ( ACET_MB / ( AREA_CM2 * DTSRCE ) )
ENDIF
ENDIF
!=================================================================
! (3) BIOGENIC ACETONE -- DIRECT EMISSION
!
! With communication with Singh we have a direct acetone emission
! source of 18 Tg acet/yr that scales to the isoprene emissions.
!=================================================================
! Compute [atoms C/box/step] for ACET, using yield from ISOP
YIELD_ISOP = 0.0282d0
ACET_ISOP = EMIS * YIELD_ISOP
! Scale to a posteriori source from Jacob et al 2001 (bdf, 9/5/01)
DIRECT_SCALE = 1.06d0
ACET_ISOP = ACET_ISOP * DIRECT_SCALE
! Convert isoprene yield to [atoms C/box/s] and
! add to the total biogenic acetone emissions
ACETONE = ACETONE + ( ACET_ISOP / DTSRCE )
! Diagnostics -- save ACETONE from DIRECT EMISSION [atoms C/cm2/s]
IF ( ND11 > 0 ) THEN
AD11(I,J,3) = AD11(I,J,3) +
& ( ACET_ISOP / ( AREA_CM2 * DTSRCE ) )
ENDIF
!=================================================================
! (4) BIOGENIC ACETONE FROM DRY LEAF MATTER / DEAD PLANTS
!
! According to Warneke et al. 1999, 1 g C of dry leaf matter
! produces at least 10^-4 g C in acetone. We use this lower limit
! as our g C -> g C yield. The monthly values of dry leaf matter
! comes from estimates of resp, heterotrophic respiration, from
! Parvada Suntharalingham. XRESP is in units of g C/m2/s.
!=================================================================
! Convert from [g C in dry leaves/m2/s] to [g C in ACETONE/m2/s]
YIELD_RESP = 1d-4
ACET_RESP = XRESP(I,J) * YIELD_RESP
! Scale to a posteriori source from Jacob et al 2001 (bdf, 9/5/01)
DP_SCALE = 0.23d0
ACET_RESP = ACET_RESP * DP_SCALE
! Convert [g C in acetone/m2/s] to [atoms C/box/s]
! and add to the total biogenic ACETONE emissions
! The 1000 is for changing [g C] to [kg C]
ACETONE = ACETONE +
& ( ACET_RESP * AREA_M2 * XNUMOL_C / 1000d0 )
! Diagnostics -- save ACETONE from DRY LEAF MATTER in [atoms C/cm2/s]
! the 1000 is for [g C] to [kg C], the 1d4 is for [m-2] to [cm-2]
IF ( ND11 > 0 ) THEN
AD11(I,J,4) = AD11(I,J,4) +
& ( ACET_RESP * XNUMOL_C / ( 1000 * 1D4 ) )
ENDIF
!=================================================================
! (5) BIOGENIC ACETONE FROM GRASSLANDS
!
! Direct grass emissions should be about 5 TgC/yr from
! Kirstine et al 1998
!=================================================================
! Compute from [atoms C/box/step] of acetone from grass
! for all VOC emissions acetone is about 15%
YIELD_GRASS = 0.15d0
ACET_GRASS = GRASS * YIELD_GRASS
! Scale to a posteriori source from Jacob et al 2001 (bdf, 9/5/01)
GRASS_SCALE = 1.61d0
ACET_GRASS = ACET_GRASS * GRASS_SCALE
! Convert grassland acetone yield to [atoms C/box/s]
! and add to the total biogenic acetone emissions
ACETONE = ACETONE + ( ACET_GRASS / DTSRCE )
! Diagnostics -- save ACETONE from GRASSLANDS in [atoms C/cm2/s]
IF ( ND11 > 0 ) THEN
AD11(I,J,5) = AD11(I,J,5) +
& ( ACET_GRASS / ( AREA_CM2 * DTSRCE ) )
ENDIF
END SUBROUTINE EMISS_BIOACET
!EOC
!------------------------------------------------------------------------------
! Harvard University Atmospheric Chemistry Modeling Group !
!------------------------------------------------------------------------------
!BOP
!
! !IROUTINE: cleanup_acetone
!
! !DESCRIPTION: Subroutine CLEANUP\_ACETONE deallocates module arrays
!\\
!\\
! !INTERFACE:
!
SUBROUTINE CLEANUP_ACETONE
!
! !REVISION HISTORY:
! 14 Sep 2001 - R. Yantosca - Initial version
! 04 Nov 2010 - R. Yantosca - Added ProTeX headers
!EOP
!------------------------------------------------------------------------------
!BOC
IF ( ALLOCATED( JO1D ) ) DEALLOCATE( JO1D )
IF ( ALLOCATED( XRESP ) ) DEALLOCATE( XRESP )
END SUBROUTINE CLEANUP_ACETONE
!EOC
END MODULE ACETONE_MOD