Files
2018-08-28 00:37:54 -04:00

4070 lines
135 KiB
Fortran

! $Id: gamap_mod.f,v 1.7 2012/03/01 22:00:27 daven Exp $
MODULE GAMAP_MOD
!
!******************************************************************************
! Module GAMAP_MOD contains routines to create GAMAP "tracerinfo.dat" and
! "diaginfo.dat" files which are customized to each particular GEOS-Chem
! simulation. (bmy, 5/3/05, 2/22/08)
!
! Module Variables:
! ============================================================================
! (1 ) MAXCAT (INTEGER ) : Maximum # of GAMAP diagnostic categories
! (2 ) SPACING (INTEGER ) : Spacing between GAMAP diagnostic categories
! (3 ) NCATS (INTEGER ) : Counter for number of defined GAMAP categories
! (4 ) OFFSET (INTEGER ) : GAMAP offset for each diagnostic category
! (5 ) CATEGORY (CHAR*40 ) : GAMAP category name
! (6 ) DESCRIPT (CHAR*40 ) : GAMAP category description
! (7 ) DFILE (CHAR*255) : Path name of the GAMAP "diaginfo.dat" file
! (8 ) MAXDIAG (INTEGER ) : Maximum # of GEOS-CHEM diagnostics
! (9 ) MAXTRACER (INTEGER ) : Maximum # of tracers per GEOS-CHEM diagnostic
! (10) NTRAC (INTEGER ) : Number of tracers for each GEOS-CHEM diagnostic
! (11) INDEX (INTEGER ) : Diagnostic tracer numbers
! (12) MOLC (INTEGER ) : Ratio of (moles C) / (moles tracer)
! (13) MWT (REAL*4 ) : Tracer molecular weights
! (14) SCALE (REAL*4 ) : GAMAP scale factors (e.g. 1e9 for v/v -> ppbv)
! (15) NAME (CHAR*40 ) : Tracer names
! (16) FNAME (CHAR*40 ) : Full tracer names
! (17) UNIT (CHAR*40 ) : Unit string for each tracer
! (18) TFILE (CHAR*255) : Path name of the GAMAP "tracerinfo.dat" file
! (19) STAMP (CHAR*16 ) : Timestamp w/ system date & time
! (20) SIM_NAME (CHAR*40 ) : Name of the GEOS-CHEM simulation
!
! Module Routines:
! ============================================================================
! (1 ) DO_GAMAP : Driver routine
! (2 ) CREATE_DINFO : Writes customized "diaginfo.dat" file
! (3 ) CREATE_TINFO : Writes customized "tracerinfo.dat" file
! (4 ) WRITE_TINFO : Writes one line to disk for "tracerinfo.dat"
! (5 ) WRITE_SEPARATOR : Writes separator blocks to "tracerinfo.dat"
! (6 ) INIT_DIAGINFO : Initializes arrays for diaginfo.dat file
! (7 ) INIT_TRACERINFO : Initializes arrays for tracerinfo.dat file
! (8 ) INIT_GAMAP : Allocates and initializes all module arrays
! (9 ) CLEANUP_GAMAP : Deallocates all module arrays
!
! GEOS-CHEM modules referenced by "gamap_mod.f"
! ============================================================================
! (1 ) diag03_mod.f : Module w/ routines for mercury diagnostics
! (2 ) diag41_mod.f : Module w/ routines for afternoon PBL diag's
! (3 ) diag48_mod.f : Module w/ routines for station timeseries
! (4 ) diag49_mod.f : Module w/ routines for inst timeseries
! (5 ) diag50_mod.f : Module w/ routines for 24hr avg timeseries
! (6 ) diag51_mod.f : Module w/ routines for morning/aft timeseries
! (7 ) diag_pl_mod.f : Module w/ routines for saving family P & L
! (8 ) drydep_mod.f : Module w/ GEOS-CHEM drydep routines
! (9 ) error_mod.f : Module w/ error and NaN check routines
! (10) file_mod.f : Module w/ file unit numbers & I/O error checks
! (11) time_mod.f : Module w/ routines for computing time & date
! (12) tracer_mod.f : Module w/ GEOS-CHEM tracer array STT etc.
! (13) tracerid_mod.f : Module w/ GEOS-CHEM tracer ID flags
! (14) wetscav_mod.f : Module w/ routines for wetdep/scavenging
!
! References:
! ============================================================================
! (1 ) For more information, please see the GAMAP Online Users' Manual:
! http://www-as.harvard.edu/chemistry/trop/gamap/documentation/
!
! NOTES:
! (1 ) Minor bug fix for Rn/Pb/Be simulations (bmy, 5/11/05)
! (2 ) Added ND09 diagnostic for HCN/CH3CN simulation. (bmy, 6/30/05)
! (3 ) Added ND04 diagnostic for CO2 simulation (bmy, 7/25/05)
! (4 ) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
! (5 ) Add MBO to ND46 diagnostic (tmf, bmy, 10/20/05)
! (6 ) Updated for tagged Hg simulation (cdh, bmy, 4/6/06)
! (7 ) Updated for ND56 lightning flash diagnostics (ltm, bmy, 5/5/06)
! (8 ) Updated for ND42 SOA concentration diagnostics (dkh, bmy, 5/22/06)
! (9 ) Updated for ND36 CH3I simulation diagnostics (bmy, 7/25/06)
! (10) Remove support for GEOS-1 and GEOS-STRAT met fields (bmy, 8/4/06)
! (11) Add routines INIT_DIAGINFO, INIT_TRACERINFO for clarity. Added new
! entries for biomass burning (ND28) and time in tropopshere (ND54)
! in INIT_DIAGINFO and INIT_TRACERINFO. (phs, bmy, 10/17/06)
! (12) Now write GPROD & APROD info to diaginfo.dat, tracerinfo.dat files,
! for the SOA restart files (tmf, havala, bmy, 2/6/07)
! (13) Added ND10 diagnostic for H2/HD simulation. (phs, 9/18/07)
! (14) Change category name for ND31 diagnostic (bmy, 11/16/07)
! (15) Add to tracerinfo.dat file for timeseries and Rn-Pb-Be (bmy, 2/22/08)
! (16) Added ND52 diagnostic for gamma HO2 (jaegle 02/26/09)
! (17) Add gamap info for dicarbonyl simulation (tmf, 3/10/09)
! (18) Add C2H4 in ND46 (ccc, 3/10/09)
! (20) Minor bug fixes (bmy, phs, 10/9/09)
! (20) Minor bug fixes (dkh, bmy, 11/19/09)
! (21) Updated for ND59 SIA concentration diagnostics (lz, 10/11/10)
!******************************************************************************
!
IMPLICIT NONE
!=================================================================
! MODULE PRIVATE DECLARATIONS -- keep certain internal variables
! and routines from being seen outside "gamap_mod.f"
!=================================================================
! Make everything PRIVATE ...
PRIVATE
# include "CMN_SIZE" ! Dimensions of arrays
# include "CMN_DIAG" ! Diagnostic parameters
! ... except these routines
PUBLIC :: DO_GAMAP
!=================================================================
! MODULE VARIABLES
!=================================================================
! For "diaginfo.dat"
INTEGER, PARAMETER :: MAXCAT = 150
INTEGER, PARAMETER :: SPACING = 1000
INTEGER :: NCATS
INTEGER, ALLOCATABLE :: OFFSET(:)
CHARACTER(LEN=40), ALLOCATABLE :: CATEGORY(:)
CHARACTER(LEN=40), ALLOCATABLE :: DESCRIPT(:)
CHARACTER(LEN=255) :: DFILE
! For "tracerinfo.dat"
!--------------------------------------------------------------------
! Prior to 8/3/10:
! For consistency, define MAXDIAG and MAXTRACER from the equivalent
! parameters in CMN_DIAG. This will prevent out-of bounds errors
! when these parameters are extended to add more tracers.
! (psk, bmy, 8/3/10)
!INTEGER, PARAMETER :: MAXDIAG = 70
!INTEGER, PARAMETER :: MAXTRACER = 120
!--------------------------------------------------------------------
!--------------------------------------------------------------------
! Prior to 12/7/10:
! Some diagnostics hold up to 2 times the number of tracers (e.g.
! AD44 holds the data for deposition velocity and deposition flux)
! So MAXTRACER must be defined as 2*MAX_TRACER
!INTEGER, PARAMETER :: MAXDIAG = MAX_DIAG
!INTEGER, PARAMETER :: MAXTRACER = MAX_TRACER
!--------------------------------------------------------------------
INTEGER, PARAMETER :: MAXDIAG = MAX_DIAG
INTEGER, PARAMETER :: MAXTRACER = 2 * MAX_TRACER
INTEGER, ALLOCATABLE :: NTRAC(:)
INTEGER, ALLOCATABLE :: INDEX(:,:)
INTEGER, ALLOCATABLE :: MOLC(:,:)
REAL*4, ALLOCATABLE :: MWT(:,:)
REAL*4, ALLOCATABLE :: SCALE(:,:)
CHARACTER(LEN=40), ALLOCATABLE :: NAME(:,:)
CHARACTER(LEN=40), ALLOCATABLE :: FNAME(:,:)
CHARACTER(LEN=40), ALLOCATABLE :: UNIT(:,:)
CHARACTER(LEN=255) :: TFILE
! adj_group
INTEGER, ALLOCATABLE :: NTRAC_ADJ(:)
INTEGER, ALLOCATABLE :: INDEX_ADJ(:,:)
CHARACTER(LEN=40), ALLOCATABLE :: NAME_ADJ(:,:)
CHARACTER(LEN=40), ALLOCATABLE :: FNAME_ADJ(:,:)
CHARACTER(LEN=40), ALLOCATABLE :: UNIT_ADJ(:,:)
! Other variables
CHARACTER(LEN=16) :: STAMP
CHARACTER(LEN=40) :: SIM_NAME
!=================================================================
! MODULE ROUTINES -- follow below the "CONTAINS" statement
!=================================================================
CONTAINS
!------------------------------------------------------------------------------
SUBROUTINE DO_GAMAP( DIAGINFO, TRACERINFO )
!
!******************************************************************************
! Subroutine DO_GAMAP is the driver program for creating the customized GAMAP
! files "diaginfo.dat" and "tracerinfo.dat". (bmy, 5/3/05)
!
! Arguments as Input:
! ============================================================================
! (1 ) DIAGINFO (CHARACTER) : Path name of the GAMAP "diaginfo.dat" file
! (2 ) TRACERINFO (CHARACTER) : Path name of the GAMAP "tracerinfo.dat" file
!
! NOTES:
!******************************************************************************
!
! References to F90 modules
USE TIME_MOD, ONLY : SYSTEM_TIMESTAMP
USE TRACER_MOD, ONLY : GET_SIM_NAME
! Arguments
CHARACTER(LEN=255), INTENT(IN) :: DIAGINFO
CHARACTER(LEN=255), INTENT(IN) :: TRACERINFO
!=================================================================
! DO_GAMAP begins here!
!=================================================================
! Allocate and initialize variables
CALL INIT_GAMAP( DIAGINFO, TRACERINFO )
! Create a timestamp with the system date & time
STAMP = SYSTEM_TIMESTAMP()
! Get simulation name
SIM_NAME = GET_SIM_NAME()
! Write "diaginfo.dat" file
CALL CREATE_DINFO
! Write "tracerinfo.dat" file
CALL CREATE_TINFO
! Deallocate variables
CALL CLEANUP_GAMAP
! Return to calling program
END SUBROUTINE DO_GAMAP
!------------------------------------------------------------------------------
SUBROUTINE CREATE_DINFO
!
!******************************************************************************
! Subroutine CREATE_DINFO writes information about diagnostic categories
! to a customized "diaginfo.dat" file. (bmy, 5/3/05)
!
! NOTES:
!******************************************************************************
!
! References to F90 modules
USE FILE_MOD, ONLY : IOERROR, IU_FILE
! Local variables
INTEGER :: IOS, N
!=================================================================
! CREATE_DINFO begins here!
!=================================================================
! Open "diaginfo.dat" file for output
OPEN( IU_FILE, FILE=TRIM( DFILE ), STATUS='UNKNOWN', IOSTAT=IOS )
IF ( IOS /= 0 ) CALL IOERROR( IOS, IU_FILE, 'create_dinfo:1' )
! Write file header
WRITE( IU_FILE, '(a)' ) '#' // REPEAT( '=', 78 )
WRITE( IU_FILE, 100 ) STAMP
WRITE( IU_FILE, 105 ) TRIM( SIM_NAME )
WRITE( IU_FILE, 110 )
WRITE( IU_FILE, 115 )
WRITE( IU_FILE, '(a)' ) '# File Format:'
WRITE( IU_FILE, '(a)' ) '# ' // REPEAT( '-', 77 )
WRITE( IU_FILE, 120 )
WRITE( IU_FILE, 125 )
WRITE( IU_FILE, 130 )
WRITE( IU_FILE, 135 )
WRITE( IU_FILE, 125 )
WRITE( IU_FILE, '(a)' ) '#'
WRITE( IU_FILE, 140 ) SPACING
WRITE( IU_FILE, '(a)' ) '#' // REPEAT( '=', 78 )
! Loop over categories
DO N = 1, NCATS
! Write one line to "diaginfo.dat" file
WRITE( IU_FILE, 145, IOSTAT=IOS )
& OFFSET(N), ADJUSTL( CATEGORY(N) ), ADJUSTL( DESCRIPT(N) )
! Error check
IF ( IOS /= 0 ) CALL IOERROR( IOS, IU_FILE, 'create_dinfo:1' )
ENDDO
! FORMAT strings
100 FORMAT( '# diaginfo.dat: Created by GEOS-CHEM at ', a, /,'#' )
105 FORMAT( '# ****** CUSTOMIZED FOR ', a, ' SIMULATION *****',/,'#' )
110 FORMAT( '# This file contains category names and the offsets',
& ' which they are stored' )
115 FORMAT( '# in file "tracerinfo.dat". This file is read into',
& ' GAMAP by routine', /, '# "ctm_diaginfo.pro".', /,'#' )
120 FORMAT( '# OFFSET (I8 ) Constant to add to tracer numbers',
& ' in order to distinguish', /, '#', 18x, 'for the given',
& ' diagnostic category, as stored in file', /, '#', 18x,
& '"tracerinfo.dat". OFFSET may be up to 8 digits long.' )
125 FORMAT( '# -- (1X ) 1-character spacer' )
130 FORMAT( '# CATEGORY (A40) Category name for CTM diagnostics.',
& ' NOTE: The category name', /, '#', 18x,
& 'can be up to 40 chars long, but historically the',
& ' GEOS-CHEM', /,'#', 18x, 'and GISS models have used an',
& ' 8-character category name.' )
135 FORMAT( '# COMMENT (A ) Descriptive comment string', /,'#' )
140 FORMAT('##### SPACING BETWEEN DIAGNOSTIC CATEGORY OFFSETS = ',i8 )
145 FORMAT( i8, 1x, a40, 1x, a )
! Close file
CLOSE( IU_FILE )
! Return to calling program
END SUBROUTINE CREATE_DINFO
!------------------------------------------------------------------------------
SUBROUTINE CREATE_TINFO
!
!******************************************************************************
! Subroutine CREATE_TINFO writes information about tracers to a customized
! "tracerinfo.dat" file. (bmy, 4/21/05, 2/6/07)
!
! NOTES:
! (1 ) Now write out tracers in ug/m3 (dkh, bmy, 5/22/06)
! (2 ) Now write out GPROD & APROD info (tmf, havala, bmy, 2/6/07)
!******************************************************************************
!
! References to F90 modules
USE FILE_MOD, ONLY : IOERROR, IU_FILE
USE LOGICAL_MOD, ONLY : LSOA
# include "CMN_SIZE" ! Size parameters
# include "CMN_DIAG" ! NDxx flags
! Local variables
INTEGER :: D, IOS, N, T
REAL*4 :: SCALE_NEW
CHARACTER(LEN=2) :: C
CHARACTER(LEN=40) :: UNIT_NEW, NAME_NEW
!=================================================================
! CREATE_TINFO begins here!
!=================================================================
! Open "tracerinfo.dat" file for output
OPEN( IU_FILE, FILE=TRIM( TFILE ), STATUS='UNKNOWN', IOSTAT=IOS )
IF ( IOS /= 0 ) CALL IOERROR( IOS, IU_FILE, 'create_tinfo:1' )
! Write file header
WRITE( IU_FILE, '(a)' ) '#' // REPEAT( '=', 78 )
WRITE( IU_FILE, 100 ) STAMP
WRITE( IU_FILE, 105 ) TRIM( SIM_NAME )
WRITE( IU_FILE, 110 )
WRITE( IU_FILE, 115 )
WRITE( IU_FILE, '(a)' ) '# File Format:'
WRITE( IU_FILE, '(a)' ) '# ' // REPEAT( '-', 77 )
WRITE( IU_FILE, 120 )
WRITE( IU_FILE, 125 )
WRITE( IU_FILE, 130 )
WRITE( IU_FILE, 135 )
WRITE( IU_FILE, 140 )
WRITE( IU_FILE, 145 )
WRITE( IU_FILE, 150 )
WRITE( IU_FILE, 125 )
WRITE( IU_FILE, 155 )
! FORMAT strings
100 FORMAT( '# tracerinfo.dat: Created by GEOS-CHEM at ', a, /,'#' )
105 FORMAT( '# ****** CUSTOMIZED FOR ', a, ' SIMULATION *****',/,'#' )
110 FORMAT( '# This file contains name weight and index',
& ' information about GEOS-CHEM' )
115 FORMAT( '# tracers. It is read by routine ',
& '"ctm_tracerinfo.pro" of the GAMAP package.', /,'#' )
120 FORMAT( '# NAME (A8 ) Tracer name (up to 8 chars)' )
125 FORMAT( '# -- (1X ) 1-character spacer' )
130 FORMAT( '# FULLNAME (A30 ) Full tracer name (up to 30 chars)' )
135 FORMAT( '# MOLWT (E10.0) Molecular weight (kg/mole)' )
140 FORMAT( '# C (I3 ) For HC''s: # moles C/moles tracer;',
& ' otherwise set=1' )
145 FORMAT( '# TRACER (I9 ) Tracer number (up to 9 digits)' )
150 FORMAT( '# SCALE (E10.3) Standard scale factor to convert',
& ' to unit given below' )
155 FORMAT( '# UNIT (A40 ) Unit string', /,'#' )
!-----------------------------------
! 0: Tracers [ppbv]
!-----------------------------------
! Write separator line
CALL WRITE_SEPARATOR( 0 )
! Loop over tracers
DO T = 1, NTRAC(45)
! GAMAP tracer number
N = ( SPACING * 0 ) + T
! Write tracers [ppbv] to "tracerinfo.dat" file
CALL WRITE_TINFO( NAME(T,45), FNAME(T,45), MWT(T,45),
& MOLC(T,45), SCALE(T,45), UNIT(T,45), N )
ENDDO
!-----------------------------------
! SPACING*1: Tracers [molec/cm2/s]
!-----------------------------------
! Write separator line
CALL WRITE_SEPARATOR( 100 )
! Loop over tracers
DO T = 1, NTRAC(45)
! GAMAP tracer number
N = ( SPACING * 1 ) + T
! New scale
SCALE_NEW = 1.0e0
! New unit
IF ( TRIM( UNIT(T,45) ) == 'ppbC' ) THEN
UNIT_NEW = 'atoms C/cm2/s'
ELSE
UNIT_NEW = 'molec/cm2/s'
ENDIF
! Write tracers [molec/cm2/s] to "tracerinfo.dat"
CALL WRITE_TINFO( NAME(T,45), FNAME(T,45), MWT(T,45),
& MOLC(T,45), SCALE_NEW, UNIT_NEW, N )
ENDDO
!-----------------------------------
! SPACING*2: Tracers [molec/cm2]
!-----------------------------------
! Write separator line
CALL WRITE_SEPARATOR( 200 )
! Loop over tracers
DO T = 1, NTRAC(45)
! GAMAP tracer number
N = ( SPACING * 2 ) + T
! New scale
SCALE_NEW = 1.0e0
! New unit
IF ( TRIM( UNIT(T,45) ) == 'ppbC' ) THEN
UNIT_NEW = 'atoms C/cm2'
ELSE
UNIT_NEW = 'molec/cm2'
ENDIF
! Write tracers [molec/cm2] to "tracerinfo.dat"
CALL WRITE_TINFO( NAME(T,45), FNAME(T,45), MWT(T,45),
& MOLC(T,45), SCALE_NEW, UNIT_NEW, N )
ENDDO
!-----------------------------------
! SPACING*3: Tracers [kg/s]
!-----------------------------------
! Write separator line
CALL WRITE_SEPARATOR( 300 )
! Loop over tracers
DO T = 1, NTRAC(45)
! GAMAP tracer number
N = ( SPACING * 3 ) + T
! New scale
SCALE_NEW = 1.0e0
! New unit
IF ( TRIM( UNIT(T,45) ) == 'ppbC' ) THEN
UNIT_NEW = 'kg C/s'
ELSE
UNIT_NEW = 'kg/s'
ENDIF
! Write tracers [kg/s] to "tracerinfo.dat"
CALL WRITE_TINFO( NAME(T,45), FNAME(T,45), MWT(T,45),
& MOLC(T,45), SCALE_NEW, UNIT_NEW, N )
ENDDO
!-----------------------------------
! SPACING*4: Tracers [kg]
!-----------------------------------
! Write separator line
CALL WRITE_SEPARATOR( 400 )
! Loop over tracers
DO T = 1, NTRAC(45)
! GAMAP tracer number
N = ( SPACING * 4 ) + T
! New scale
SCALE_NEW = 1.0e0
! New unit
IF ( TRIM( UNIT(T,45) ) == 'ppbC' ) THEN
UNIT_NEW = 'kg C'
ELSE
UNIT_NEW = 'kg'
ENDIF
! Write tracers [kg] to "tracerinfo.dat"
CALL WRITE_TINFO( NAME(T,45), FNAME(T,45), MWT(T,45),
& MOLC(T,45), SCALE_NEW, UNIT_NEW, N )
ENDDO
! Add this later on (bmy, 5/22/06)
! !-----------------------------------
! ! SPACING*5: Tracers [ug/m3]
! !-----------------------------------
!
! ! Write separator line
! CALL WRITE_SEPARATOR( 500 )
!
! ! Loop over tracers
! DO T = 1, NTRAC(45)
!
! ! GAMAP tracer number
! N = ( SPACING * 5 ) + T
!
! ! New scale
! SCALE_NEW = 1.0e0
!
! ! New unit
! IF ( TRIM( UNIT(T,45) ) == 'ppbC' ) THEN
! UNIT_NEW = 'ug C/m3'
! ELSE
! UNIT_NEW = 'ug/m3'
! ENDIF
!
! ! Write tracers [kg] to "tracerinfo.dat"
! CALL WRITE_TINFO( NAME(T,45), FNAME(T,45), MWT(T,45),
! & MOLC(T,45), SCALE_NEW, UNIT_NEW, N )
! ENDDO
!-----------------------------------
! SPACING*6: GPROD & APROD [kg/kg]
!-----------------------------------
IF ( LSOA ) THEN
! Write separator line
CALL WRITE_SEPARATOR( 600 )
! Loop over tracers
DO T = 1, 18
! GAMAP tracer number
N = ( SPACING * 6 ) + T
! Make a character
WRITE( C, '(i2.2)' ) T
! Tracer name
NAME_NEW = 'PROD' // C
! Write tracers [kg] to "tracerinfo.dat"
CALL WRITE_TINFO( NAME_NEW, NAME_NEW, 1e0,
& 1, 1e0, 'kg/kg', N )
ENDDO
ENDIF
!------------------------------
! All other diagnostics
!------------------------------
DO D = 1, MAXDIAG
! If tracers are defined then...
IF ( NTRAC(D) > 0 ) THEN
! Skip ND45, we already wrote tracers above
IF ( D == 45 ) CYCLE
! Write separator
CALL WRITE_SEPARATOR( D )
! Write tracers to file
DO T = 1, NTRAC(D)
CALL WRITE_TINFO( NAME(T,D), FNAME(T,D), MWT(T,D),
& MOLC(T,D), SCALE(T,D), UNIT(T,D),
& INDEX(T,D) )
ENDDO
ENDIF
ENDDO
!------------------------------------------
! adj_group: adjoint output (dkh, 02/08/10)
!------------------------------------------
DO D = 1, MAXDIAG
! If tracers are defined then...
IF ( NTRAC_ADJ(D) > 0 ) THEN
! Write separator for adjoint (need to make this routine!!)
!CALL WRITE_SEPARATOR_ADJ( D )
! Write tracers to file
DO T = 1, NTRAC_ADJ(D)
CALL WRITE_TINFO( NAME_ADJ(T,D), FNAME_ADJ(T,D), 0e0,
& 1, 1e0, UNIT_ADJ(T,D),
& INDEX_ADJ(T,D) )
ENDDO
ENDIF
ENDDO
! Return to calling program
END SUBROUTINE CREATE_TINFO
!------------------------------------------------------------------------------
SUBROUTINE WRITE_TINFO( NAME, FNAME, MWT, MOLC, SCALE, UNIT, N )
!
!******************************************************************************
! Subroutine WRITE_TINFO writes one line to the customized "tracerinfo.dat"
! file. (bmy, 5/3/05)
!
! Arguments as Input:
! ============================================================================
! (1 ) NAME (CHARACTER) : GAMAP short tracer name
! (2 ) FNAME (CHARACTER) : GAMAP long tracer name
! (3 ) MWT (REAL*8 ) : Molecular weight [kg/mole]
! (4 ) MOLC (REAL*8 ) : Moles C per mole tracer (for hydrocarbons)
! (5 ) SCALE (REAL*8 ) : GAMAP scale factor (e.g. 1e+9 scales v/v --> ppbv)
! (6 ) UNIT (CHARACTER) : Unit string
! (7 ) N (INTEGER ) : Tracer number
!
! NOTES:
!******************************************************************************
!
! References to F90 modules
USE FILE_MOD, ONLY : IU_FILE, IOERROR
! Argumetns
INTEGER, INTENT(IN) :: MOLC, N
REAL*4, INTENT(IN) :: MWT, SCALE
CHARACTER(LEN=*), INTENT(IN) :: NAME, FNAME, UNIT
! Local variables
INTEGER :: IOS
!=================================================================
! WRITE_TINFO begins here!
!=================================================================
! Write one line to "tracerinfo.dat" file
WRITE( IU_FILE, 100, IOSTAT=IOS )
& ADJUSTL( NAME ), ADJUSTL( FNAME ), MWT,
& MOLC, N, SCALE, TRIM( UNIT )
! Error check
IF ( IOS /= 0 ) CALL IOERROR( IOS, IU_FILE, 'write_tinfo:1' )
! FORMAT string
100 FORMAT( a8, 1x, a30, es10.3, i3, i9, es10.3, 1x, a )
! Return to calling program
END SUBROUTINE WRITE_TINFO
!------------------------------------------------------------------------------
SUBROUTINE WRITE_SEPARATOR( DIAG )
!
!******************************************************************************
! Subroutine WRITE_SEPARATOR writes a separator block to the customized
! "tracerinfo.dat" file. (bmy, 5/3/05, 2/6/07)
!
! Arguments as Input:
! ============================================================================
! (1 ) DIAG (INTEGER) : GEOS-CHEM diagnostic number
!
! NOTES:
! (1 ) Added new header for GPROD & APROD info (bmy, 2/6/07)
!******************************************************************************
!
! References to F90 modules
USE FILE_MOD, ONLY : IU_FILE, IOERROR
! Arguments
INTEGER, INTENT(IN) :: DIAG
! Local variables
INTEGER :: IOS
CHARACTER(LEN=79) :: SEPARATOR
!=================================================================
! WRITE_SEPARATOR begins here!
!=================================================================
! Create separator string
SEPARATOR = '#' // REPEAT( '=', 78 )
! Write separator string
WRITE( IU_FILE, '(a)', IOSTAT=IOS ) SEPARATOR
IF ( IOS /= 0 ) CALL IOERROR( IOS, IU_FILE, 'write_separator:1' )
! Write the appropriate message
SELECT CASE( DIAG )
CASE( 0 )
WRITE( IU_FILE, 100, IOSTAT=IOS )
CASE( 100 )
WRITE( IU_FILE, 110, IOSTAT=IOS )
CASE( 200 )
WRITE( IU_FILE, 120, IOSTAT=IOS )
CASE( 300 )
WRITE( IU_FILE, 130, IOSTAT=IOS )
CASE( 400 )
WRITE( IU_FILE, 140, IOSTAT=IOS )
CASE( 500 )
WRITE( IU_FILE, 150, IOSTAT=IOS )
CASE( 600 )
WRITE( IU_FILE, 160, IOSTAT=IOS )
CASE DEFAULT
WRITE( IU_FILE, 170, IOSTAT=IOS ) DIAG
END SELECT
! Error check
IF ( IOS /= 0 ) CALL IOERROR( IOS, IU_FILE, 'write_separator:2' )
! Write separator string
WRITE( IU_FILE, '(a)', IOSTAT=IOS ) SEPARATOR
IF ( IOS /= 0 ) CALL IOERROR( IOS, IU_FILE, 'write_separator:3' )
! FORMAT strings
100 FORMAT( '# GEOS-CHEM tracers [ppbv]' )
110 FORMAT( '# GEOS-CHEM tracers [molec/cm2/s]' )
120 FORMAT( '# GEOS-CHEM tracers [molec/cm2]' )
130 FORMAT( '# GEOS-CHEM tracers [kg/s]' )
140 FORMAT( '# GEOS-CHEM tracers [kg]' )
150 FORMAT( '# GEOS-CHEM tracers [ug/m3]' )
160 FORMAT( '# SOA GPROD & APROD [kg/kg]' )
170 FORMAT( '# ND', i2.2, ' diagnostic quantities' )
! Return to calling program
END SUBROUTINE WRITE_SEPARATOR
!------------------------------------------------------------------------------
SUBROUTINE INIT_DIAGINFO
!
!******************************************************************************
! Subroutine INIT_DIAGINFO initializes the CATEGORY, DESCRIPT, and OFFSET
! variables, which are used to define the "diaginfo.dat" file for GAMAP.
! (bmy, 10/17/06, 11/16/07)
!
! NOTES:
! (1 ) Split this code off from INIT_GAMAP, for clarity. Now declare biomass
! burning emissions w/ offset of 45000. Now declare time in the
! troposphere diagnostic with offset of 46000. (phs, bmy, 10/17/06)
! (2 ) Now add IJ-GPROD & IJ-APROD w/ offset of SPACING*6, for the SOA
! GPROD & APROD restart file. (tmf, havala, bmy, 2/6/07)
! (3 ) Now declare H2-HD sources w/ offset of 48000. Now declare H2-HD
! production/loss w/ offset of 47000. (phs, 9/18/07)
! (4 ) Change diagnostic category for ND31 diagnostic from "PS-PTOP"
! to "PEDGE-$" (bmy, 11/16/07)
!******************************************************************************
!
! Local variables
INTEGER :: N
!=================================================================
! INIT_DIAGINFO begins here!
!=================================================================
N = 1
CATEGORY(N) = 'IJ-AVG-$'
DESCRIPT(N) = 'Tracer concentration'
OFFSET(N) = SPACING * 0
N = N + 1
CATEGORY(N) = 'IJ-24H-$'
DESCRIPT(N) = '24-hr avg tracer conc.'
OFFSET(N) = SPACING * 0
N = N + 1
CATEGORY(N) = 'INST-MAP'
DESCRIPT(N) = 'Instantaneous tracer'
OFFSET(N) = SPACING * 0
N = N + 1
CATEGORY(N) = 'ANTHSRCE'
DESCRIPT(N) = 'Anthropogenic emissions'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'BIOFSRCE'
DESCRIPT(N) = 'Biofuel emissions'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'NOX-AC-$'
DESCRIPT(N) = 'Aircraft NOx'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'NOX-AN-$'
DESCRIPT(N) = 'Anthropogenic NOx'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'NOX-BIOB'
DESCRIPT(N) = 'Biomass NOx'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'NOX-BIOF'
DESCRIPT(N) = 'Biofuel NOx'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'NOX-LI-$'
DESCRIPT(N) = 'Lightning NOx'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'NOX-SOIL'
DESCRIPT(N) = 'Soil NOx'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'NOX-FERT'
DESCRIPT(N) = 'Fertilizer NOx'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'NOX-STRT'
DESCRIPT(N) = 'Stratopsheric NOx'
OFFSET(N) = SPACING * 1
N = N + 1
CATEGORY(N) = 'INST_COL'
DESCRIPT(N) = 'Instantaneous columns'
OFFSET(N) = SPACING * 2
N = N + 1
CATEGORY(N) = 'CV-FLX-$'
DESCRIPT(N) = 'Convective mass flux'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'TURBMC-$'
DESCRIPT(N) = 'PBL mixing mass flux'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'EW-FLX-$'
DESCRIPT(N) = 'E/W transport flux'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'NS-FLX-$'
DESCRIPT(N) = 'N/S transport flux'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'UP-FLX-$'
DESCRIPT(N) = 'Up/down transport flux'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'STRT-FLX'
DESCRIPT(N) = 'Flux from stratosphere'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'RN--SRCE'
DESCRIPT(N) = 'Rn-Pb-Be source'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'RN-DECAY'
DESCRIPT(N) = 'Rn-Pb-Be loss'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'WETDCV-$'
DESCRIPT(N) = 'Conv wet scavenging'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'WETDLS-$'
DESCRIPT(N) = 'Wet deposition'
OFFSET(N) = SPACING * 3
N = N + 1
CATEGORY(N) = 'DMS-BIOG'
DESCRIPT(N) = 'Biogenic DMS'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'DUSTSRCE'
DESCRIPT(N) = 'Dust emission'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'NVOCSRCE'
DESCRIPT(N) = 'NVOC emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SALTSRCE'
DESCRIPT(N) = 'Seasalt emission'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SO2-AC-$'
DESCRIPT(N) = 'Aircraft SO2 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SO2-AN-$'
DESCRIPT(N) = 'Anthro SO2 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SO2-BIOB'
DESCRIPT(N) = 'Biomass SO2 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SO2-BIOF'
DESCRIPT(N) = 'Biofuel SO2 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SO2-EV-$'
DESCRIPT(N) = 'Erup. Volcano SO2'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SO2-NV-$'
DESCRIPT(N) = 'Non-Erup. Volcano SO2'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SO2-SHIP'
DESCRIPT(N) = 'SO2 from ship exhaust'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SO4-AN-$'
DESCRIPT(N) = 'Anthro SO4 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'SO4-BIOF'
DESCRIPT(N) = 'Biofuel SO4 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'NH3-ANTH'
DESCRIPT(N) = 'Anthro NH3 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'NH3-NATU'
DESCRIPT(N) = 'Natural NH3 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'NH3-BIOB'
DESCRIPT(N) = 'Biomass NH3 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'NH3-BIOF'
DESCRIPT(N) = 'Biofuel NH3 emissions'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'TROPO-AV'
DESCRIPT(N) = 'Trop avg''d tracer'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'TCMASS-$'
DESCRIPT(N) = 'Tracer mass (kg)'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'CV-FLX-$'
DESCRIPT(N) = 'Upward flux from wet conv'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'TURBMC-$'
DESCRIPT(N) = 'Upward flux from PBL mixing'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'EW-FLX-$'
DESCRIPT(N) = 'E/W transport flux'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'NS-FLX-$'
DESCRIPT(N) = 'N/S transport flux'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'UP-FLX-$'
DESCRIPT(N) = 'Up/down transport flux'
OFFSET(N) = SPACING * 4
N = N + 1
CATEGORY(N) = 'IJ-GPROD'
DESCRIPT(N) = 'SOA GPROD restart'
OFFSET(N) = SPACING * 6
N = N + 1
CATEGORY(N) = 'IJ-APROD'
DESCRIPT(N) = 'SOA APROD restart'
OFFSET(N) = SPACING * 6
N = N + 1
CATEGORY(N) = 'PEDGE-$'
DESCRIPT(N) = 'Pressure at level edges'
OFFSET(N) = SPACING * 10
N = N + 1
CATEGORY(N) = 'DAO-FLDS'
DESCRIPT(N) = 'GMAO 2-D met fields'
OFFSET(N) = SPACING * 11
N = N + 1
CATEGORY(N) = 'DAO-3D-$'
DESCRIPT(N) = 'GMAO 3-D met fields'
OFFSET(N) = SPACING * 12
N = N + 1
CATEGORY(N) = 'JV-MAP-$'
DESCRIPT(N) = 'Photolysis rates'
OFFSET(N) = SPACING * 13
N = N + 1
CATEGORY(N) = 'OD-MAP-$'
DESCRIPT(N) = 'Optical Depths'
OFFSET(N) = SPACING * 14
N = N + 1
CATEGORY(N) = 'LANDMAP'
DESCRIPT(N) = 'Land type map'
OFFSET(N) = SPACING * 15
N = N + 1
CATEGORY(N) = 'CHEM-L=$'
DESCRIPT(N) = 'Chemical Prod/Loss'
OFFSET(N) = SPACING * 16
N = N + 1
CATEGORY(N) = 'PORL-L=$'
DESCRIPT(N) = 'ND65 P/L family diagnostics'
OFFSET(N) = SPACING * 17
N = N + 1
CATEGORY(N) = 'PL-SUL=$'
DESCRIPT(N) = 'P/L of sulfur species'
OFFSET(N) = SPACING * 18
N = N + 1
CATEGORY(N) = 'TIME-SER'
DESCRIPT(N) = 'Timeseries quantities'
OFFSET(N) = SPACING * 19
N = N + 1
CATEGORY(N) = 'CO--SRCE'
DESCRIPT(N) = 'CO Source diagnostic'
OFFSET(N) = SPACING * 20
N = N + 1
CATEGORY(N) = 'BIOGSRCE'
DESCRIPT(N) = 'Biogenic emissions'
OFFSET(N) = SPACING * 21
N = N + 1
CATEGORY(N) = 'ACETSRCE'
DESCRIPT(N) = 'Acetone emissions'
OFFSET(N) = SPACING * 22
N = N + 1
CATEGORY(N) = 'EMDIS-BL'
DESCRIPT(N) = 'Emissions in PBL'
OFFSET(N) = SPACING * 23
N = N + 1
CATEGORY(N) = 'BXHGHT-$'
DESCRIPT(N) = 'Boxheight, airmass, etc'
OFFSET(N) = SPACING * 24
N = N + 1
CATEGORY(N) = 'DXYP'
DESCRIPT(N) = 'Surface area'
OFFSET(N) = SPACING * 25
N = N + 1
CATEGORY(N) = 'TR-PAUSE'
DESCRIPT(N) = 'Annual mean tropopause'
OFFSET(N) = SPACING * 26
N = N + 1
CATEGORY(N) = 'PBLDEPTH'
DESCRIPT(N) = 'Afternoon PBL height'
OFFSET(N) = SPACING * 27
N = N + 1
CATEGORY(N) = 'WD-FRC-$'
DESCRIPT(N) = 'Wet dep fraction'
OFFSET(N) = SPACING * 28
N = N + 1
CATEGORY(N) = 'WD-LSR-$'
DESCRIPT(N) = 'Large-scale rainout'
OFFSET(N) = SPACING * 29
N = N + 1
CATEGORY(N) = 'WD-CVR-$'
DESCRIPT(N) = 'Convective rainout'
OFFSET(N) = SPACING * 29
N = N + 1
CATEGORY(N) = 'WD-LSW-$'
DESCRIPT(N) = 'Large-scale washout'
OFFSET(N) = SPACING * 29
N = N + 1
CATEGORY(N) = 'WD-CVW-$'
DESCRIPT(N) = 'Convective washout'
OFFSET(N) = SPACING * 29
N = N + 1
CATEGORY(N) = 'MC-FRC-$'
DESCRIPT(N) = 'Moist conv fraction'
OFFSET(N) = SPACING * 30
N = N + 1
CATEGORY(N) = 'COBUDGET'
DESCRIPT(N) = 'bnd CO-OH budget'
OFFSET(N) = SPACING * 31
N = N + 1
CATEGORY(N) = 'CH4-LOSS'
DESCRIPT(N) = 'CH4 Loss by OH'
OFFSET(N) = SPACING * 32
N = N + 1
CATEGORY(N) = 'BC-ANTH'
DESCRIPT(N) = 'Anthro BC emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'BC-BIOB'
DESCRIPT(N) = 'Biomass BC emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'BC-BIOF'
DESCRIPT(N) = 'Biofuel BC emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'OC-ANTH'
DESCRIPT(N) = 'Anthro OC emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'OC-BIOB'
DESCRIPT(N) = 'Biomass OC emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'OC-BIOF'
DESCRIPT(N) = 'Biofuel OC emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'OC-BIOG'
DESCRIPT(N) = 'Biogenic OC emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'OC-ALPH'
DESCRIPT(N) = 'Biogenic ALPH emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'OC-LIMO'
DESCRIPT(N) = 'Biogenic ALPH emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'OC-TERP'
DESCRIPT(N) = 'Biogenic TERP emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'OC-ALCO'
DESCRIPT(N) = 'Biogenic ALCO emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'OC-SESQ'
DESCRIPT(N) = 'Biogenic SESQ emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'PL-BC=$'
DESCRIPT(N) = 'H-philic from H-phobic BC'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'PL-OC=$'
DESCRIPT(N) = 'H-philic from H-phobic OC'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'SALT-SR$'
DESCRIPT(N) = 'Sea salt emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'BLKC-SR$'
DESCRIPT(N) = 'Black carbon emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'ORGC-SR$'
DESCRIPT(N) = 'Organic Carbon emission'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'SOAGM=$'
DESCRIPT(N) = 'Dicarbonyl SOA production'
OFFSET(N) = SPACING * 33
N = N + 1
CATEGORY(N) = 'HG-SRCE'
DESCRIPT(N) = 'Hg emissions'
OFFSET(N) = SPACING * 34
N = N + 1
CATEGORY(N) = 'PL-HG2-$'
DESCRIPT(N) = 'Prod / loss of Hg2'
OFFSET(N) = SPACING * 35
N = N + 1
CATEGORY(N) = 'DRYD-FLX'
DESCRIPT(N) = 'Drydep fluxes'
OFFSET(N) = SPACING * 36
N = N + 1
CATEGORY(N) = 'DRYD-VEL'
DESCRIPT(N) = 'Drydep velocities'
OFFSET(N) = SPACING * 37
N = N + 1
CATEGORY(N) = 'HCN-PL-$'
DESCRIPT(N) = 'HCN & CH3CN sinks'
OFFSET(N) = SPACING * 38
N = N + 1
CATEGORY(N) = 'HCN-SRCE'
DESCRIPT(N) = 'HCN & CH3CN sources'
OFFSET(N) = SPACING * 39
N = N + 1
CATEGORY(N) = 'CO2-SRCE'
DESCRIPT(N) = 'CO2 fluxes'
OFFSET(N) = SPACING * 40
N = N + 1
CATEGORY(N) = 'OCEAN-HG'
DESCRIPT(N) = 'Oceanic Hg emissions'
OFFSET(N) = SPACING * 41
N = N + 1
CATEGORY(N) = 'LFLASH-$'
DESCRIPT(N) = 'Lightning flash rates'
OFFSET(N) = SPACING * 42
N = N + 1
CATEGORY(N) = 'IJ-SOA-$'
DESCRIPT(N) = 'SOA concentrations'
OFFSET(N) = SPACING * 43
N = N + 1
CATEGORY(N) = 'CH3ISRCE'
DESCRIPT(N) = 'CH3I emissions'
OFFSET(N) = SPACING * 44
N = N + 1
CATEGORY(N) = 'BIOBSRCE'
DESCRIPT(N) = 'Biomass emissions'
OFFSET(N) = SPACING * 45
N = N + 1
CATEGORY(N) = 'TIME-TPS'
DESCRIPT(N) = 'Fraction of time in troposphere'
OFFSET(N) = SPACING * 46
N = N + 1
CATEGORY(N) = 'PL-H2HD-'
DESCRIPT(N) = 'Prod / loss of H2-HD'
OFFSET(N) = SPACING * 47
N = N + 1
CATEGORY(N) = 'H2HD-SRC'
DESCRIPT(N) = 'H2 HD emissions'
OFFSET(N) = SPACING * 48
! New ND52 diagnostic for gamma(HO2). (jaegle, 2/29/09)
N = N + 1
CATEGORY(N) = 'GAMMA'
DESCRIPT(N) = 'gamma HO2'
OFFSET(N) = SPACING * 49
! New CH4 diagnostics (kjw,03/04/10)
N = N + 1
CATEGORY(N) = 'CH4-EMIS'
DESCRIPT(N) = 'CH4 Emissions'
OFFSET(N) = SPACING * 50
N = N + 1
CATEGORY(N) = 'WET-FRAC'
DESCRIPT(N) = 'Wetland Fraction'
OFFSET(N) = SPACING * 51
! adj_group: add categories for adjoint output files (dkh, 02/08/10)
N = N + 1
CATEGORY(N) = 'IJ-GDT-$'
DESCRIPT(N) = 'Gradients w.r.t. tracers'
OFFSET(N) = SPACING * 90
N = N + 1
CATEGORY(N) = 'IJ-GDE-$'
DESCRIPT(N) = 'Gradients w.r.t. emissions'
OFFSET(N) = SPACING * 91
N = N + 1
CATEGORY(N) = 'IJ-GDEN$'
DESCRIPT(N) = 'Gradients w.r.t. emissions'
OFFSET(N) = SPACING * 91
N = N + 1
CATEGORY(N) = 'FD-TEST'
DESCRIPT(N) = 'FD test results'
! for backwards compatability
OFFSET(N) = SPACING * 92
N = N + 1
CATEGORY(N) = 'IJ-ICS-$'
DESCRIPT(N) = 'Initial conditions scale factors'
OFFSET(N) = SPACING * 93
N = N + 1
CATEGORY(N) = 'IJ-EMS-$'
DESCRIPT(N) = 'Emissions scale factors'
OFFSET(N) = SPACING * 94
N = N + 1
CATEGORY(N) = 'IJ-ADJ-$'
DESCRIPT(N) = 'Adjoint tracer values'
OFFSET(N) = SPACING * 95
! Add new category for reaction rate sensitivities (tww, 05/08/12)
N = N + 1
CATEGORY(N) = 'IJ-RATE$'
DESCRIPT(N) = 'Rate'
OFFSET(N) = SPACING * 82
! Add new category for normalized reaction rate sensitivities (tww, 05/08/12)
N = N + 1
CATEGORY(N) = 'IJ-RATEN'
DESCRIPT(N) = 'Rate'
OFFSET(N) = SPACING * 83
N = N + 1
CATEGORY(N) = 'IJ-RATSF'
DESCRIPT(N) = 'Rate SF'
OFFSET(N) = SPACING * 84
! adj_group: put these here for now, still need
! to make entries in INIT_TRACERINFO
N = N + 1
CATEGORY(N) = 'IJ-CHK-$'
DESCRIPT(N) = 'Checkpoints'
OFFSET(N) = SPACING * 52
N = N + 1
CATEGORY(N) = 'IJ-OBS-$'
DESCRIPT(N) = 'Pseudo Obs'
OFFSET(N) = SPACING * 53
N = N + 1
CATEGORY(N) = 'IJ-OBS-$'
DESCRIPT(N) = 'Pseudo Obs'
OFFSET(N) = SPACING * 54
N = N + 1
CATEGORY(N) = 'IJ-CHKD$'
DESCRIPT(N) = 'Checkpoints'
OFFSET(N) = SPACING * 55
N = N + 1
CATEGORY(N) = 'IJ-DOF-$'
DESCRIPT(N) = 'Degrees Of Freedom'
OFFSET(N) = SPACING * 58
!N = N + 1
!CATEGORY(N) = 'COSTF'
!DESCRIPT(N) = 'ask mak?'
!OFFSET(N) = SPACING * 59
! for new ND59 (diag59 added, lz,10/11/10)
N = N + 1
CATEGORY(N) = 'IJ-ugm3'
DESCRIPT(N) = 'Tracer concentrations in ug/m3'
OFFSET(N) = SPACING * 59
N = N + 1
CATEGORY(N) = 'OBSCT'
DESCRIPT(N) = 'ask mak?'
OFFSET(N) = SPACING * 60
N = N + 1
CATEGORY(N) = 'OBSHR'
DESCRIPT(N) = 'ask mak?'
OFFSET(N) = SPACING * 61
N = N + 1
CATEGORY(N) = 'IJ-AOD-$'
DESCRIPT(N) = 'aerosol optical depth'
OFFSET(N) = SPACING * 96
N = N + 1
CATEGORY(N) = 'dJ_dEMS'
DESCRIPT(N) = 'Gradients w.r.t. emissions'
OFFSET(N) = SPACING * 97
! For stratospheric prod and loss gradient (hml, 08/10/11)
N = N + 1
CATEGORY(N) = 'IJ-GDP-$'
DESCRIPT(N) = 'Gradients w.r.t. strat prod scaling factor'
OFFSET(N) = SPACING * 98
N = N + 1
CATEGORY(N) = 'IJ-GDL-$'
DESCRIPT(N) = 'Gradients w.r.t. strat loss scaling factor'
OFFSET(N) = SPACING * 99
! Number of categories
NCATS = N
! Return to calling program
END SUBROUTINE INIT_DIAGINFO
!------------------------------------------------------------------------------
SUBROUTINE INIT_TRACERINFO
!
!******************************************************************************
! Subroutine INIT_TRACERINFO initializes the NAME, FNAME, MWT, MOLC, INDEX,
! MOLC, UNIT arrays which are used to define the "tracerinfo.dat" file.
! (bmy, phs, 10/17/06, 2/22/08)
!
! NOTES:
! (1 ) Split this code off from INIT_GAMAP, for clarity. Also now declare
! biomass burning emissions w/ offset of 45000. Bug fix: write out
! 26 tracers for ND48, ND49, ND50, ND51 timeseries. Also define
! ND54 diagnostic with offset of 46000. (bmy, 10/17/06)
! (2 ) Modifications for H2/HD in ND10, ND44 diagnostics (phs, 9/18/07)
! (3 ) Now write out PBLDEPTH diagnostic information to "tracerinfo.dat" if
! any of ND41, ND48, ND49, ND50, ND51 are turned on. Also set the
! unit to "kg/s" for the Rn-Pb-Be ND44 drydep diag. (cdh, bmy, 2/22/08)
! (4 ) Added C2H4 in ND46 (ccc, 2/2/09)
! (5 ) Add EFLUX to ND67 (lin, ccc, 5/29/08)
! (6 ) Bug fix in ND28: ALD2 should have 2 carbons, not 3. Also bug fix
! in ND66 to print out the name of ZMMU correctly. (dbm, bmy, 10/9/09)
! (7 ) Previous bug fix was erroneous; now corrected (dkh, bmy, 11/19/09)
! (8 ) Now support strat fluxes LADJ_STRAT (hml, dkh, 02/20/12, adj32_025)
!******************************************************************************
!
! References to F90 modules
USE DIAG03_MOD, ONLY : ND03
USE DIAG04_MOD, ONLY : ND04
USE DIAG41_MOD, ONLY : ND41
USE DIAG42_MOD, ONLY : ND42
USE DIAG48_MOD, ONLY : DO_SAVE_DIAG48
USE DIAG49_MOD, ONLY : DO_SAVE_DIAG49
USE DIAG50_MOD, ONLY : DO_SAVE_DIAG50
USE DIAG51_MOD, ONLY : DO_SAVE_DIAG51
USE DIAG56_MOD, ONLY : ND56
! diag59 added, (lz,10/11/10)
USE DIAG59_MOD, ONLY : ND59, PD59
USE DIAG_PL_MOD, ONLY : DO_SAVE_PL, GET_NFAM
USE DIAG_PL_MOD, ONLY : GET_FAM_MWT, GET_FAM_NAME
USE DRYDEP_MOD, ONLY : DEPNAME, NUMDEP, NTRAIND
USE LOGICAL_MOD, ONLY : LSOA
USE TRACER_MOD, ONLY : ITS_A_CO2_SIM, ITS_A_H2HD_SIM
USE TRACER_MOD, ONLY : ITS_A_CH3I_SIM, ITS_A_FULLCHEM_SIM
USE TRACER_MOD, ONLY : ITS_A_HCN_SIM, ITS_A_MERCURY_SIM
USE TRACER_MOD, ONLY : ITS_A_RnPbBe_SIM, ITS_A_TAGOX_SIM
USE TRACER_MOD, ONLY : N_TRACERS, TRACER_COEFF
USE TRACER_MOD, ONLY : TRACER_MW_KG, TRACER_NAME
USE TRACERID_MOD, ONLY : IDTBCPI, IDTOCPI, IDTALPH, IDTLIMO
USE TRACERID_MOD, ONLY : IDTSOA1, IDTSOA2, IDTSOA3, NEMANTHRO
USE TRACERID_MOD, ONLY : IDTSOA4, IDTSOAM, IDTSOAG
USE WETSCAV_MOD, ONLY : GET_WETDEP_IDWETD, GET_WETDEP_NSOL
! adj_group
USE ADJ_ARRAYS_MOD, ONLY : NNEMS
USE ADJ_ARRAYS_MOD, ONLY : ADEMS_NAME
USE ADJ_ARRAYS_MOD, ONLY : NSTPL
USE ADJ_ARRAYS_MOD, ONLY : PROD_NAME
USE ADJ_ARRAYS_MOD, ONLY : LOSS_NAME
USE CHARPAK_MOD, ONLY : STRREPL
USE LOGICAL_ADJ_MOD, ONLY : LADJ
USE LOGICAL_ADJ_MOD, ONLY : LICS
USE LOGICAL_ADJ_MOD, ONLY : LADJ_EMS
USE LOGICAL_ADJ_MOD, ONLY : LFD_GLOB
USE LOGICAL_ADJ_MOD, ONLY : LADJ_TRAJ
USE LOGICAL_ADJ_MOD, ONLY : LTRAJ_SCALE
USE LOGICAL_ADJ_MOD, ONLY : LEMS_ABS
USE LOGICAL_ADJ_MOD, ONLY : LADJ_STRAT
! for reaction rate sensitivities (tww, 05/08/12)
USE ADJ_ARRAYS_MOD, ONLY : RRATES_NAME
USE LOGICAL_ADJ_MOD, ONLY : LADJ_RRATE
USE GCKPP_ADJ_GLOBAL, ONLY : NCOEFF_RATE, NCOEFF_EM, JCOEFF
USE GCKPP_ADJ_UTIL, ONLY : INIT_KPP
# include "CMN_SIZE" ! Size parameters
# include "CMN_DIAG" ! NDxx flags
# include "adjoint/define_adj.h" ! TES_O3_OBS
! Local variables
INTEGER :: N, NN, NYMDb, NHMSb, T
LOGICAL :: DO_TIMESERIES
! adj_group
CHARACTER(LEN=30) :: ADNAME
!=================================================================
! INIT_TRACERINFO begins here!
!=================================================================
! Set a flag if any timeseries diagnostics are turned on
DO_TIMESERIES = ( DO_SAVE_DIAG48 .or. DO_SAVE_DIAG49 .or.
& DO_SAVE_DIAG50 .or. DO_SAVE_DIAG51 )
!----------------------------------
! General tracer information
!----------------------------------
DO T = 1, N_TRACERS
! Store quantities for each tracer
NAME (T,45) = TRACER_NAME(T)
FNAME(T,45) = TRIM( NAME(T,45) ) // ' tracer'
MOLC (T,45) = INT( TRACER_COEFF(T,1) )
SCALE(T,45) = 1.0e+9
INDEX(T,45) = T !changed from N (phs, 3/19/03)
! We usually report NOx as Tg N
IF ( TRIM( NAME(T,45) ) == 'NOx' .or.
& TRIM( NAME(T,45) ) == 'NOX' ) THEN
MWT(T,45) = 14e-3
ELSE
MWT(T,45) = TRACER_MW_KG(T)
ENDIF
! Special handling for hydrocarbons
IF ( MOLC(T,45) > 1 ) THEN
UNIT(T,45) = 'ppbC'
ELSE
UNIT(T,45) = 'ppbv'
ENDIF
! Special handling for Rn-Pb-Be simulation (bmy, 5/11/05)
IF ( ITS_A_RnPbBe_SIM() ) THEN
SELECT CASE( T )
CASE( 1 )
UNIT (T,45) = 'pCi/SCM'
SCALE(T,45) = 1.5243e21
CASE( 2 )
UNIT (T,45) = 'fCi/SCM'
SCALE(T,45) = 7.0651e20
CASE( 3 )
UNIT (T,45) = 'fCi/SCM'
SCALE(T,45) = 1.0938e23
CASE DEFAULT
! Nothing
END SELECT
ENDIF
! For mercury, print as pptv (bmy, 1/24/06)
IF ( ITS_A_MERCURY_SIM() ) THEN
UNIT(T,45) = 'pptv'
SCALE(T,45) = 1.0e+12
ENDIF
ENDDO
! Number of ND45 tracers
NTRAC(45) = N_TRACERS
!-------------------------------------
! FULL-CHEMISTRY RUNS ONLY:
! Pure O3 is stored as N_TRACERS+1
!-------------------------------------
IF ( ITS_A_FULLCHEM_SIM() ) THEN
NTRAC(45) = N_TRACERS + 1
T = N_TRACERS + 1
NAME (T,45) = 'O3'
FNAME(T,45) = 'Pure O3 tracer'
UNIT (T,45) = 'ppbv'
MWT (T,45) = TRACER_MW_KG(2) ! Ox is tracer 2
MOLC (T,45) = INT( TRACER_COEFF(2,1) ) ! Ox is tracer 2
SCALE(T,45) = 1.0e+9
INDEX(T,45) = T
ENDIF
!-------------------------------------
! Hg source, production & loss (ND03)
!
! Updated for tagged Hg simulation
! (cdh, bmy, 1/9/06)
!-------------------------------------
IF ( ND03 > 0 ) THEN
! Number of tracers
NTRAC(03) = 16 + N_TRACERS
! Loop over tracers for HG-SRCE, PL-HG2-$, OCEAN-HG
DO T = 1, NTRAC(03)
! Define quantities
UNIT (T,03) = 'kg'
MOLC (T,03) = 1
MWT (T,03) = 201e-3
SCALE(T,03) = 1e0
! Get name, long-name, index, and new units
SELECT CASE( T )
CASE( 1 )
NAME (T,03) = 'Hg0_an'
FNAME(T,03) = 'Anthro elemental Hg'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 2 )
NAME (T,03) = 'Hg0_aq'
FNAME(T,03) = 'Ocean mass of elemental Hg'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 3 )
NAME (T,03) = 'Hg0_oc'
FNAME(T,03) = 'Ocean-emitted elemental Hg'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 4 )
NAME (T,03) = 'Hg0_ln'
FNAME(T,03) = 'Land re-emitted elemental Hg'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 5 )
NAME (T,03) = 'Hg0_na'
FNAME(T,03) = 'Natural land source'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 6 )
NAME (T,03) = 'Hg2_an'
FNAME(T,03) = 'Anthro divalent Hg'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 7 )
NAME (T,03) = 'Hg2_aq'
FNAME(T,03) = 'Ocean mass of divalent Hg'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 8 )
NAME (T,03) = 'Hg2_sk'
FNAME(T,03) = 'Mass of Hg2 sunk in ocean'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 9 )
NAME (T,03) = 'HgP_an'
FNAME(T,03) = 'Anthro particulate Hg'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 10 )
NAME (T,03) = 'KwHg'
FNAME(T,03) = 'Henry''s Law exchange constant'
UNIT (T,03) = 'cm/h'
INDEX(T,03) = T + ( SPACING * 34 )
MWT (T,03) = 0e0
CASE( 11 )
NAME (T,03) = 'HgC'
FNAME(T,03) = 'Hg in Colloidal phase'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 12 )
NAME (T,03) = 'Hg_to_C'
FNAME(T,03) = 'Hg converted to colloidal'
UNIT (T,03) = 'kg/m2/s'
INDEX(T,03) = T + ( SPACING * 34 )
CASE( 13 )
NAME (T,03) = 'Hg2_Hg0'
FNAME(T,03) = 'Prod of Hg2 from Hg0'
INDEX(T,03) = ( T - 12 ) + ( SPACING * 35 )
CASE( 14 )
NAME (T,03) = 'Hg2_OH'
FNAME(T,03) = 'Prod of Hg2 from OH'
INDEX(T,03) = ( T - 12 ) + ( SPACING * 35 )
CASE( 15 )
NAME (T,03) = 'Hg2_O3'
FNAME(T,03) = 'Prod of Hg2 from O3'
INDEX(T,03) = ( T - 12 ) + ( SPACING * 35 )
CASE( 16 )
NAME (T,03) = 'Hg2_SS'
FNAME(T,03) = 'Loss of Hg2 from sea salt'
INDEX(T,03) = ( T - 12 ) + ( SPACING * 35 )
CASE ( 17: )
NAME (T,03) = TRACER_NAME(T-16)
! Tracer 3 should be "HgC" instead of "HgP"
IF ( TRIM( NAME(T,03) ) == 'HgP' ) THEN
NAME(T,03) = 'HgC'
ENDIF
FNAME(T,03) = 'Oceanic ' // TRIM( NAME(T,03) )
INDEX(T,03) = ( T - 16 ) + ( SPACING * 41 )
CASE DEFAULT
! Nothing
END SELECT
ENDDO
ENDIF
!-------------------------------------
! CO2 sources
!-------------------------------------
IF ( ND04 > 0 ) THEN
! Number of tracers
NTRAC(04) = 10
! Loop over tracers: CO2-SRCE
DO T = 1, NTRAC(04)
! Define quantities
UNIT (T,04) = 'atoms C/cm2/s'
INDEX(T,04) = T + ( SPACING * 40 )
MOLC (T,04) = 1
MWT (T,04) = 12e-3
SCALE(T,04) = 1e0
! Get name, long-name
SELECT CASE( T )
CASE( 1 )
NAME (T,04) = 'CO2ff'
FNAME(T,04) = 'CO2 fossil fuel emiss'
CASE( 2 )
NAME (T,04) = 'CO2ocn'
FNAME(T,04) = 'CO2 ocean exchange'
CASE( 3 )
NAME (T,04) = 'CO2bal'
FNAME(T,04) = 'CO2 balanced biosphere'
CASE( 4 )
NAME (T,04) = 'CO2bb'
FNAME(T,04) = 'CO2 biomass burning emiss'
CASE( 5 )
NAME (T,04) = 'CO2bf'
FNAME(T,04) = 'CO2 biofuel emissions'
CASE( 6 )
NAME (T,04) = 'CO2nte'
FNAME(T,04) = 'CO2 net terr exchange'
CASE( 7 )
NAME (T,04) = 'CO2shp'
FNAME(T,04) = 'CO2 ship emissions'
CASE( 8 )
NAME (T,04) = 'CO2pln'
FNAME(T,04) = 'CO2 aircraft emissions'
CASE( 9 )
NAME (T,04) = 'CO2che'
FNAME(T,04) = 'CO2 chemical oxidation'
CASE( 10 )
NAME (T,04) = 'CO2sur'
FNAME(T,04) = 'CO2 chem surf correction'
CASE DEFAULT
! Nothing
END SELECT
ENDDO
ENDIF
!-------------------------------------
! Sulfur production & loss (ND05)
!-------------------------------------
IF ( ND05 > 0 ) THEN
! Number of tracers
NTRAC(05) = 10
! Loop over tracers
DO T = 1, NTRAC(05)
! Get name, long-name, unit, molecular weight
SELECT CASE( T )
CASE( 1 )
NAME (T,05) = 'SO2dms'
FNAME(T,05) = 'P(SO2) from DMS+OH'
UNIT (T,05) = 'kg S'
MWT (T,05) = 32e-3
CASE( 2 )
NAME (T,05) = 'SO2no3'
FNAME(T,05) = 'P(SO2) from DMS+NO3'
UNIT (T,05) = 'kg S'
MWT (T,05) = 32e-3
CASE( 3 )
NAME (T,05) = 'SO2tot'
FNAME(T,05) = 'Total P(SO2)'
UNIT (T,05) = 'kg S'
MWT (T,05) = 32e-3
CASE( 4 )
NAME (T,05) = 'MSAdms'
FNAME(T,05) = 'P(MSA) from DMS'
UNIT (T,05) = 'kg S'
MWT (T,05) = 32e-3
CASE( 5 )
NAME (T,05) = 'SO4gas'
FNAME(T,05) = 'P(SO4) by gas phase'
UNIT (T,05) = 'kg S'
MWT (T,05) = 32e-3
CASE( 6 )
NAME (T,05) = 'SO4h2o2'
FNAME(T,05) = 'P(SO4) by cloud H2O2'
UNIT (T,05) = 'kg S'
MWT (T,05) = 32e-3
CASE( 7 )
NAME (T,05) = 'SO4o3'
FNAME(T,05) = 'P(SO4) by cloud O3'
UNIT (T,05) = 'kg S'
MWT (T,05) = 32e-3
CASE( 8 )
NAME (T,05) = 'SO4ss'
FNAME(T,05) = 'P(SO4) by seasalt O3'
UNIT (T,05) = 'kg S'
MWT (T,05) = 32e-3
CASE( 9 )
NAME (T,05) = 'LOH'
FNAME(T,05) = 'L(OH) by DMS'
UNIT (T,05) = 'kg OH'
MWT (T,05) = 17e-3
CASE( 10 )
NAME (T,05) = 'LNO3'
FNAME(T,05) = 'L(NO3) by DMS'
UNIT (T,05) = 'kg NO3'
MWT (T,05) = 62e-3
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
INDEX(T,05) = T + ( SPACING * 18 )
MOLC (T,05) = 1
SCALE(T,05) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Carbon aerosol emissions (ND07)
!-------------------------------------
IF ( ND07 > 0 ) THEN
! Number of tracers
IF ( LSOA ) THEN
NTRAC(07) = 15
ELSE
NTRAC(07) = 2
ENDIF
! Loop over tracers
DO T = 1, NTRAC(07)
! Define the default quantities
UNIT (T,07) = 'kg'
MOLC (T,07) = 1
MWT (T,07) = 12e-3
SCALE(T,07) = 1e0
! Get name, long-name, tracern umber
SELECT CASE( T )
CASE( 1 )
NAME (T,07) = 'BLKC'
FNAME(T,07) = 'Black (Elemental) Carbon'
INDEX(T,07) = IDTBCPI + ( SPACING * 33 )
CASE( 2 )
NAME (T,07) = 'ORGC'
FNAME(T,07) = 'Organic Carbon'
INDEX(T,07) = IDTOCPI + ( SPACING * 33 )
CASE( 3 )
NAME (T,07) = 'ALPH'
FNAME(T,07) = 'Alpha-Pinene'
MWT (T,07) = 136e-3
INDEX(T,07) = IDTALPH + ( SPACING * 33 )
CASE( 4 )
NAME (T,07) = 'LIMO'
FNAME(T,07) = 'Limonene'
MWT (T,07) = 136e-3
INDEX(T,07) = IDTLIMO + ( SPACING * 33 )
CASE( 5 )
NAME (T,07) = 'TERP'
FNAME(T,07) = 'Terpenes'
MWT (T,07) = 136e-3
INDEX(T,07) = IDTLIMO + 1 + ( SPACING * 33 )
CASE( 6 )
NAME (T,07) = 'ALCO'
FNAME(T,07) = 'Alcohols'
MWT (T,07) = 142e-3 ! Actually carbon_mod.f uses 154.25
INDEX(T,07) = IDTLIMO + 2 + ( SPACING * 33 )
CASE( 7 )
NAME (T,07) = 'SESQ'
FNAME(T,07) = 'Sesqterpene'
MWT (T,07) = 204e-3
INDEX(T,07) = IDTLIMO + 3 + ( SPACING * 33 )
CASE( 8 )
NAME (T,07) = 'SOA1'
FNAME(T,07) = 'Aer prods of ALPH+LIMO+TERP ox'
MWT (T,07) = 150e-3
INDEX(T,07) = IDTSOA1 + ( SPACING * 33 )
CASE( 9 )
NAME (T,07) = 'SOA2'
FNAME(T,07) = 'Aerosol prod of ALCO ox'
MWT (T,07) = 160e-3
INDEX(T,07) = IDTSOA2 + ( SPACING * 33 )
CASE( 10 )
NAME (T,07) = 'SOA3'
FNAME(T,07) = 'Aerosol prod of SESQ ox'
MWT (T,07) = 220e-3
INDEX(T,07) = IDTSOA3 + ( SPACING * 33 )
CASE( 11 )
NAME (T,07) = 'SOA4'
FNAME(T,07) = 'Aerosol prod of ISOP ox'
MWT (T,07) = 130e-3
INDEX(T,07) = IDTSOA4 + ( SPACING * 33 )
CASE( 12 )
NAME (T,07) = 'SOAG'
FNAME(T,07) = 'SOAG production in aq. aerosol'
MWT (T,07) = 58e-3
INDEX(T,07) = IDTSOAG + ( SPACING * 33 )
CASE( 13 )
NAME (T,07) = 'SOAM'
FNAME(T,07) = 'SOAM production in aq. aerosol'
MWT (T,07) = 72e-3
INDEX(T,07) = IDTSOAM + ( SPACING * 33 )
CASE( 14 )
NAME (T,07) = 'SOAG'
FNAME(T,07) = 'SOAG production in clouds'
MWT (T,07) = 58e-3
INDEX(T,07) = 91 + ( SPACING * 33 )
CASE( 15 )
NAME (T,07) = 'SOAM'
FNAME(T,07) = 'SOAM production in clouds'
MWT (T,07) = 72e-3
INDEX(T,07) = 92 + ( SPACING * 33 )
CASE DEFAULT
! Nothing
END SELECT
ENDDO
ENDIF
!-------------------------------------
! HCN & CH3CN sources & sinks (ND09)
!-------------------------------------
IF ( ND09 > 0 ) THEN
! Number of tracers
NTRAC(09) = N_TRACERS + 6
! Loop over tracers: HCN-PL-$
DO T = 1, NTRAC(09)-6
NAME (T,09) = TRACER_NAME(T)
FNAME(T,09) = TRIM( TRACER_NAME(T) ) // ' lost via OH rxn'
UNIT (T,09) = 'kg'
INDEX(T,09) = T + ( SPACING * 38 )
MOLC (T,09) = 1
MWT (T,09) = TRACER_MW_KG(T)
SCALE(T,09) = 1e0
ENDDO
! Loop over tracers: HCN-SRCE
DO T = NTRAC(09)-6+1, NTRAC(09)
! Get tracer number, C number, scale factor, unit
INDEX(T,09) = ( T - N_TRACERS ) + ( SPACING * 39 )
MOLC (T,09) = 1
SCALE(T,09) = 1e0
UNIT (T,09) = 'molec/cm2/s'
! Get name, longname, unit, mwt
IF ( T == N_TRACERS+1 ) THEN
NAME (T,09) = 'HCNbb'
FNAME(T,09) = 'HCN biomass emissions'
MWT (T,09) = 27d-3
ELSE IF ( T == N_TRACERS+2 ) THEN
NAME (T,09) = 'CH3CNbb'
FNAME(T,09) = 'CH3CN biomass emissions'
MWT (T,09) = 41d-3
ELSE IF ( T == N_TRACERS+3 ) THEN
NAME (T,09) = 'HCNdf'
FNAME(T,09) = 'HCN domestic FF emiss'
MWT (T,09) = 27d-3
ELSE IF ( T == N_TRACERS+4 ) THEN
NAME (T,09) = 'CH3CNdf'
FNAME(T,09) = 'CH3CN domestic FF emiss'
MWT (T,09) = 41d-3
ELSE IF ( T == N_TRACERS+5 ) THEN
NAME (T,09) = 'HCNoc'
FNAME(T,09) = 'HCN ocean uptake'
MWT (T,09) = 27d-3
ELSE IF ( T == N_TRACERS+6 ) THEN
NAME (T,09) = 'CH3CNoc'
FNAME(T,09) = 'CH3CN ocean uptake'
MWT (T,09) = 41d-3
ENDIF
ENDDO
ENDIF
!-------------------------------------
! H2-HD source, production & loss (ND10)
!-------------------------------------
IF ( ND10 > 0 ) THEN
! Number of tracers
NTRAC(10) = 20
! Loop over tracers
DO T = 1, NTRAC(10)
! Define quantities
UNIT (T,10) = 'molec/cm3/s' ! overwrite below when needed
MOLC (T,10) = 1
SCALE(T,10) = 1e0
! Get name, long-name, index, and new units
SELECT CASE( T )
CASE( 1 )
NAME (T,10) = 'H2oh'
FNAME(T,10) = 'Loss of H2 by OH'
MWT (T,10) = 2e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 2 )
NAME (T,10) = 'H2iso'
FNAME(T,10) = 'Prod of H2 from Isoprene'
MWT (T,10) = 2e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 3 )
NAME (T,10) = 'H2ch4'
FNAME(T,10) = 'Prod of H2 from CH4'
MWT (T,10) = 2e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 4 )
NAME (T,10) = 'H2ch3oh'
FNAME(T,10) = 'Prod of H2 from CH3OH'
MWT (T,10) = 2e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 5 )
NAME (T,10) = 'H2mono'
FNAME(T,10) = 'Prod of H2 from MONO'
MWT (T,10) = 2e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 6 )
NAME (T,10) = 'H2acet'
FNAME(T,10) = 'Prod of H2 from ACET'
MWT (T,10) = 2e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 7 )
NAME (T,10) = 'H2o1d'
FNAME(T,10) = 'Loss of H2 by strat O1D'
MWT (T,10) = 2e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 8 )
NAME (T,10) = 'HDoh'
FNAME(T,10) = 'Loss of HD by OH'
UNIT (T,10) = 's-1'
MWT (T,10) = 3e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 9 )
NAME (T,10) = 'HDiso'
FNAME(T,10) = 'Prod of HD from Isoprene'
MWT (T,10) = 3e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 10 )
NAME (T,10) = 'HDch4'
FNAME(T,10) = 'Prod of HD from CH4'
MWT (T,10) = 3e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 11 )
NAME (T,10) = 'HDch3oh'
FNAME(T,10) = 'Prod of HD from CH3OH'
MWT (T,10) = 3e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 12 )
NAME (T,10) = 'HDmono'
FNAME(T,10) = 'Prod of HD from MONO'
MWT (T,10) = 3e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 13 )
NAME (T,10) = 'HDacet'
FNAME(T,10) = 'Prod of HD from ACET'
MWT (T,10) = 3e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 14 )
NAME (T,10) = 'HDo1d'
FNAME(T,10) = 'Loss of HD by strat O1D'
MWT (T,10) = 3e-3
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 15 )
NAME (T,10) = 'Alpha'
FNAME(T,10) = 'Ratio of OH k rates kHD/kH2'
UNIT (T,10) = 'unitless'
INDEX(T,10) = T + ( SPACING * 47 )
CASE( 16 )
NAME (T,10) = 'H2anth'
FNAME(T,10) = 'Fossil Fuel H2 (anthropogenic)'
UNIT (T,10) = 'molec/cm2/s'
MWT (T,10) = 2e-3
INDEX(T,10) = ( T - 15 ) + ( SPACING * 48 )
CASE( 17 )
NAME (T,10) = 'H2bb'
FNAME(T,10) = 'Biomass Burning of H2'
UNIT (T,10) = 'molec/cm2/s'
MWT (T,10) = 2e-3
INDEX(T,10) = ( T - 15 ) + ( SPACING * 48 )
CASE( 18 )
NAME (T,10) = 'H2bf'
FNAME(T,10) = 'Biofuel Burning of H2'
UNIT (T,10) = 'molec/cm2/s'
MWT (T,10) = 2e-3
INDEX(T,10) = ( T - 15 ) + ( SPACING * 48 )
CASE( 19 )
NAME (T,10) = 'H2ocean'
FNAME(T,10) = 'Ocean emissions of H2'
UNIT (T,10) = 'molec/cm2/s'
MWT (T,10) = 2e-3
INDEX(T,10) = ( T - 15 ) + ( SPACING * 48 )
CASE( 20 )
NAME (T,10) = 'HDocean'
FNAME(T,10) = 'Ocean emissions of HD'
UNIT (T,10) = 'molec/cm2/s'
MWT (T,10) = 3e-3
INDEX(T,10) = ( T - 15 ) + ( SPACING * 48 )
CASE DEFAULT
! Nothing
END SELECT
ENDDO
ENDIF
!-------------------------------------
! Acetone sources & sinks (ND11)
!-------------------------------------
IF ( ND11 > 0 ) THEN
! Number of tracers
NTRAC(11) = 7
! Loop over tracers
DO T = 1, NTRAC(11)
! Get name and long-name
SELECT CASE( T )
CASE( 1 )
NAME (T,11) = 'ACETmo'
FNAME(T,11) = 'ACET from monoterpenes'
CASE( 2 )
NAME (T,11) = 'ACETmb'
FNAME(T,11) = 'ACET from methyl butenol'
CASE( 3 )
NAME (T,11) = 'ACETbg'
FNAME(T,11) = 'ACET from direct emissions'
CASE( 4 )
NAME (T,11) = 'ACETdl'
FNAME(T,11) = 'ACET from dry leaf matter'
CASE( 5 )
NAME (T,11) = 'ACETgr'
FNAME(T,11) = 'ACET from grasslands'
CASE( 6 )
NAME (T,11) = 'ACETop'
FNAME(T,11) = 'ACET from ocean source'
CASE( 7 )
NAME (T,11) = 'ACETol'
FNAME(T,11) = 'ACET from ocean sink'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
UNIT (T,11) = 'atoms C/cm2/s'
INDEX(T,11) = T + ( SPACING * 22 )
MOLC (T,11) = 3
MWT (T,11) = 12e-3
SCALE(T,11) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Distrib of emissions in PBL (ND12)
!-------------------------------------
IF ( ND12 > 0 ) THEN
T = 1
NTRAC(12) = T
NAME (T,12) = 'BLfrac'
FNAME(T,12) = 'Boundary layer fraction'
UNIT (T,12) = 'unitless'
INDEX(T,12) = T + ( SPACING * 23 )
MOLC (T,12) = 1
MWT (T,12) = 0e0
SCALE(T,12) = 1e0
ENDIF
!-------------------------------------
! Fraction of grid box experiencing
! LS or conv precipitation (ND16)
!-------------------------------------
IF ( ND16 > 0 ) THEN
! Number of tracers
NTRAC(16) = 2
! Loop over tracers
DO T = 1, NTRAC(16)
! Get name, longname
SELECT CASE( T )
CASE( 1 )
NAME (T,16) = 'LS-f'
FNAME(T,16) = 'Large scale fraction'
CASE( 2 )
NAME (T,16) = 'CV-f'
FNAME(T,16) = 'Convective fraction'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
UNIT (T,16) = 'unitless'
INDEX(T,16) = T + ( SPACING * 28 )
MOLC (T,16) = 1
MWT (T,16) = 0e0
SCALE(T,16) = 1e0
ENDDO
ENDIF
!-------------------------------------
! F/f ratios for LS & convective
! rainout (ND17) & washout (ND18)
!-------------------------------------
IF ( ND17 + ND18 > 0 ) THEN
! Number of tracers
NTRAC(17) = GET_WETDEP_NSOL()
! Loop over tracers
DO N = 1, NTRAC(17)
! Tracer number for Nth wetdep species
T = GET_WETDEP_IDWETD(N)
! Define quantities
NAME (N,17) = 'Ff_' // TRIM( TRACER_NAME(T) )
FNAME(N,17) = 'F/f ratio for ' // TRIM( TRACER_NAME(T) )
UNIT (N,17) = 'unitless'
INDEX(N,17) = T + ( SPACING * 29 )
MWT (N,17) = TRACER_MW_KG(T)
MOLC (N,17) = INT( TRACER_COEFF(T,1) )
SCALE(N,17) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Optical depths (ND21)
!-------------------------------------
IF ( ND21 > 0 .or. DO_TIMESERIES ) THEN
! Number of tracers
NTRAC(21) = 20
! Loop over tracers
DO T = 1, NTRAC(21)
! Define quantities
UNIT (T,21) = 'unitless'
INDEX(T,21) = T + ( SPACING * 14 )
MOLC (T,21) = 1
MWT (T,21) = 0e0
SCALE(T,21) = 1e0
! Get name long-name (and sometimes, unit)
SELECT CASE( T )
CASE( 1 )
NAME (T,21) = 'OPTD'
FNAME(T,21) = 'Cloud optical depth'
CASE( 2 )
! GEOS-3, GEOS-4: CLDTOT
NAME (T,21) = 'CLDTOT'
FNAME(T,21) = '3-D cloud frc'
CASE( 4 )
NAME (T,21) = 'OPD'
FNAME(T,21) = 'Mineral dust opt depth'
CASE( 5 )
NAME (T,21) = 'SD'
FNAME(T,21) = 'Mineral dust surface area'
UNIT (T,21) = 'cm2/cm3'
CASE( 6 )
NAME (T,21) = 'OPSO4'
FNAME(T,21) = 'Sulfate opt depth (400 nm)'
CASE( 7 )
NAME (T,21) = 'HGSO4'
FNAME(T,21) = 'Hygr growth of SO4'
CASE( 8 )
NAME (T,21) = 'SSO4'
FNAME(T,21) = 'Sulfate surface area'
UNIT (T,21) = 'cm2/cm3'
CASE( 9 )
NAME (T,21) = 'OPBC'
FNAME(T,21) = 'Black carbon opt depth (400 nm)'
CASE( 10 )
NAME (T,21) = 'HGBC'
FNAME(T,21) = 'Hygr growth of BC'
CASE( 11 )
NAME (T,21) = 'SBC'
FNAME(T,21) = 'BC surface area'
UNIT (T,21) = 'cm2/cm3'
CASE( 12 )
NAME (T,21) = 'OPOC'
FNAME(T,21) = 'Org carbon opt depth (400 nm)'
CASE( 13 )
NAME (T,21) = 'HGOC'
FNAME(T,21) = 'Hygr growth of OC'
CASE( 14 )
NAME (T,21) = 'SOC'
FNAME(T,21) = 'OC surface area'
UNIT (T,21) = 'cm2/cm3'
CASE( 15 )
NAME (T,21) = 'OPSSa'
FNAME(T,21) = 'Seasalt (accum) opt depth (400 nm)'
CASE( 16 )
NAME (T,21) = 'HGSSa'
FNAME(T,21) = 'Hygr growth of seasalt (accum)'
CASE( 17 )
NAME (T,21) = 'SSSa'
FNAME(T,21) = 'Seasalt (accum) surface area'
UNIT (T,21) = 'cm2/cm3'
CASE( 18 )
NAME (T,21) = 'OPSSc'
FNAME(T,21) = 'Seasalt (coarse) opt depth (400 nm)'
CASE( 19 )
NAME (T,21) = 'HGSSc'
FNAME(T,21) = 'Hygr growth of seasalt (coarse)'
CASE( 20 )
NAME (T,21) = 'SSSc'
FNAME(T,21) = 'Seasalt (coarse) surface area'
UNIT (T,21) = 'cm2/cm3'
CASE DEFAULT
! Nothing
END SELECT
ENDDO
ENDIF
!-------------------------------------
! Optical depths (ND22)
!-------------------------------------
IF ( ND22 > 0 ) THEN
IF ( ITS_A_FULLCHEM_SIM() ) THEN
!------------------
! Full-chem run
!------------------
! Number of tracers
NTRAC(22) = 8
! Loop over tracers
DO T = 1, NTRAC(22)
! Get name
SELECT CASE( T )
CASE( 1 )
NAME(T,22) = 'JNO2'
CASE( 2 )
NAME(T,22) = 'JHNO3'
CASE( 3 )
NAME(T,22) = 'JH2O2'
CASE( 4 )
NAME(T,22) = 'JCH2O'
CASE( 5 )
NAME(T,22) = 'JO3'
CASE( 6 )
NAME(T,22) = 'POH'
CASE( 7 )
NAME(T,22) = 'JGLYX'
CASE( 8 )
NAME(T,22) = 'JMGLY'
CASE DEFAULT
! Nothing
END SELECT
! Define quantities
FNAME(T,22) = TRIM( NAME(T,22) ) // ' photolysis rate'
UNIT (T,22) = 's-1'
INDEX(T,22) = T + ( SPACING * 13 )
MOLC (T,22) = 1
MWT (T,22) = 0e0
SCALE(T,22) = 1e0
ENDDO
ELSE IF ( ITS_A_CH3I_SIM() ) THEN
!------------------
! CH3I run
!------------------
NTRAC(22) = 1
NAME (T,22) = 'JCH3I'
FNAME(T,22) = TRIM( NAME(T,22) ) // ' photolysis rate'
UNIT (T,22) = 's-1'
INDEX(T,22) = T + ( SPACING * 13 )
MOLC (T,22) = 1
MWT (T,22) = 0e0
SCALE(T,22) = 1e0
ELSE IF ( ITS_A_HCN_SIM() ) THEN
!------------------
! HCN run
!------------------
NTRAC(22) = 1
NAME (T,22) = 'JHCN'
FNAME(T,22) = TRIM( NAME(T,22) ) // ' photolysis rate'
UNIT (T,22) = 's-1'
INDEX(T,22) = T + ( SPACING * 13 )
MOLC (T,22) = 1
MWT (T,22) = 0e0
SCALE(T,22) = 1e0
ENDIF
ENDIF
!-------------------------------------
! Biomass emissions (ND28)
!-------------------------------------
IF ( ND28 > 0 ) THEN
IF ( ITS_A_CO2_SIM() ) THEN
!---------------------------
! CO2 simulation only
!---------------------------
! Number of tracers
NTRAC(28) = 1
! Define quantities
NAME (T,28) = 'CO2'
FNAME(T,28) = TRIM( NAME(T,28) ) // ' biomass'
INDEX(T,28) = 1 + ( SPACING * 45 )
MWT (T,28) = 44e-3
MOLC (T,28) = 1
UNIT (T,28) = 'molec/cm2/s'
SCALE(T,28) = 1e0
ELSE
!---------------------------
! Full-chemistry simulation
!---------------------------
! Number of tracers
! Add GLYX, MGLY, GLYC, HAC, C2H2,BENZ, TOLU, XYLE, C2H4
NTRAC(28) = 23
! Loop over tracers
DO T = 1, NTRAC(28)
! Case statement
SELECT CASE( T )
CASE( 1 )
NAME (T,28) = 'NOx'
INDEX(T,28) = 1 + ( SPACING * 45 )
MWT (T,28) = 14e-3
MOLC (T,28) = 1
UNIT (T,28) = 'molec/cm2/s'
CASE( 2 )
NAME (T,28) = 'CO'
INDEX(T,28) = 4 + ( SPACING * 45 )
MWT (T,28) = 28e-3
MOLC (T,28) = 1
UNIT (T,28) = 'molec/cm2/s'
CASE( 3 )
NAME (T,28) = 'ALK4'
INDEX(T,28) = 5 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 4
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 4 )
NAME (T,28) = 'ACET'
INDEX(T,28) = 9 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 3
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 5 )
NAME (T,28) = 'MEK'
INDEX(T,28) = 10 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 4
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 6 )
NAME (T,28) = 'ALD2'
INDEX(T,28) = 11 + ( SPACING * 45 )
MWT (T,28) = 12e-3
!---------------------------------------------------
! Prior to 11/19/09:
! Oops, bug fix applied to PRPE, not ALD2.
! ALD2 should have 2 carbons (dkh, bmy, 11/19/09)
!MOLC (T,28) = 3
!---------------------------------------------------
MOLC (T,28) = 2
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 7 )
NAME (T,28) = 'PRPE'
INDEX(T,28) = 18 + ( SPACING * 45 )
MWT (T,28) = 12e-3
!---------------------------------------------------
! Prior to 11/19/09:
! Oops, bug fix applied to PRPE, not ALD2.
! PRPE should have 3 carbons (dkh, bmy, 11/19/09)
!MOLC (T,28) = 2
!---------------------------------------------------
MOLC (T,28) = 3
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 8 )
NAME (T,28) = 'C3H8'
INDEX(T,28) = 19 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 3
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 9 )
NAME (T,28) = 'CH2O'
INDEX(T,28) = 20 + ( SPACING * 45 )
MWT (T,28) = 30e-3
MOLC (T,28) = 1
UNIT (T,28) = 'molec/cm2/s'
CASE( 10 )
NAME (T,28) = 'C2H6'
INDEX(T,28) = 21 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 2
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 11 )
NAME (T,28) = 'SO2'
INDEX(T,28) = 26 + ( SPACING * 45 )
MWT (T,28) = 32e-3
MOLC (T,28) = 1
UNIT (T,28) = 'atoms S/cm2/s'
CASE( 12 )
NAME (T,28) = 'NH3'
INDEX(T,28) = 30 + ( SPACING * 45 )
MWT (T,28) = 17e-3
MOLC (T,28) = 1
UNIT (T,28) = 'molec/cm2/s'
CASE( 13 )
NAME (T,28) = 'BC'
INDEX(T,28) = 34 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 1
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 14 )
NAME (T,28) = 'OC'
INDEX(T,28) = 35 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 1
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 15 )
NAME (T,28) = 'GLYX'
INDEX(T,28) = 55 + ( SPACING * 45 )
MWT (T,28) = 58e-3
MOLC (T,28) = 1
UNIT (T,28) = 'molec/cm2/s'
CASE( 16 )
NAME (T,28) = 'MGLY'
INDEX(T,28) = 56 + ( SPACING * 45 )
MWT (T,28) = 72e-3
MOLC (T,28) = 1
UNIT (T,28) = 'molec/cm2/s'
CASE( 17 )
NAME (T,28) = 'BENZ'
INDEX(T,28) = 57 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 6
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 18 )
NAME (T,28) = 'TOLU'
INDEX(T,28) = 58 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 7
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 19 )
NAME (T,28) = 'XYLE'
INDEX(T,28) = 59 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 8
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 20 )
NAME (T,28) = 'C2H4'
INDEX(T,28) = 63 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 2
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 21 )
NAME (T,28) = 'C2H2'
INDEX(T,28) = 64 + ( SPACING * 45 )
MWT (T,28) = 12e-3
MOLC (T,28) = 2
UNIT (T,28) = 'atoms C/cm2/s'
CASE( 22 )
NAME (T,28) = 'GLYC'
INDEX(T,28) = 66 + ( SPACING * 45 )
MWT (T,28) = 60e-3
MOLC (T,28) = 1
UNIT (T,28) = 'molec/cm2/s'
CASE( 23 )
NAME (T,28) = 'HAC'
INDEX(T,28) = 67 + ( SPACING * 45 )
MWT (T,28) = 74e-3
MOLC (T,28) = 1
UNIT (T,28) = 'molec/cm2/s'
CASE DEFAULT
! Nothing
END SELECT
! Define other quantities
FNAME(T,28) = TRIM( NAME(T,28) ) // ' biomass'
SCALE(T,28) = 1e0
ENDDO
ENDIF
ENDIF
!-------------------------------------
! CO emissions (ND29)
!-------------------------------------
IF ( ND29 > 0 ) THEN
! Number of tracers
NTRAC(29) = 5
! Loop over tracers
DO T = 1, NTRAC(29)
! Get name, longname
SELECT CASE( T )
CASE( 1 )
NAME (T,29) = 'COanth'
FNAME(T,29) = 'Anthropogenic CO'
CASE( 2 )
NAME (T,29) = 'CObb'
FNAME(T,29) = 'Biomass CO'
CASE( 3 )
NAME (T,29) = 'CObf'
FNAME(T,29) = 'Biofuel CO'
CASE( 4 )
NAME (T,29) = 'COmeth'
FNAME(T,29) = 'CO from methanol'
CASE( 5 )
NAME (T,29) = 'COmono'
FNAME(T,29) = 'CO from monoterpenes'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
UNIT (T,29) = 'molec/cm2/s'
INDEX(T,29) = T + ( SPACING * 20 )
MOLC (T,29) = 1
MWT (T,29) = 28e-3
SCALE(T,29) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Land map (ND30)
!-------------------------------------
IF ( ND30 > 0 ) THEN
T = 1
NTRAC(30) = T
NAME (T,30) = 'LWI'
FNAME(T,30) = 'GMAO Land-water indices'
UNIT (T,30) = 'unitless'
INDEX(T,30) = T + ( SPACING * 15 )
MOLC (T,30) = 1
MWT (T,30) = 0e0
SCALE(T,30) = 1e0
ENDIF
!-------------------------------------
! Surface pressure (ND31)
!-------------------------------------
IF ( ND31 > 0 ) THEN
T = 1
NTRAC(31) = T
NAME (T,31) = 'PSURF'
FNAME(T,31) = 'Surface pressure'
UNIT (T,31) = 'hPa'
INDEX(T,31) = T + ( SPACING * 10 )
MOLC (T,31) = 1
MWT (T,31) = 0e0
SCALE(T,31) = 1e0
ENDIF
!-------------------------------------
! CH3I emissions sources (ND36)
!-------------------------------------
IF ( ND36 > 0 .and. ITS_A_CH3I_SIM() ) THEN
! Number of tracers
NTRAC(36) = NEMANTHRO
! The first few are tracers
DO T = 1, NTRAC(36)
IF ( T <= N_TRACERS ) THEN
NAME (T,36) = TRACER_NAME(T)
FNAME(T,36) = TRIM( NAME(T,36) ) // ' tracer'
ELSE IF ( T == 6 ) THEN
NAME (T,36) = 'CH3Iof'
FNAME(T,36) = 'CH3I ocean flux??'
ELSE IF ( T == 7 ) THEN
NAME (T,36) = 'CH3Igf'
FNAME(T,36) = 'CH3I gas flux??'
ELSE IF ( T == 8 ) THEN
NAME (T,36) = 'CH3Itf'
FNAME(T,36) = 'CH3I total flux??'
ENDIF
! Define other quantities
MOLC (T,36) = 1
SCALE(T,36) = 1e0
INDEX(T,36) = T + ( SPACING * 44 )
MWT (T,36) = 141.9e-3
UNIT (T,36) = 'ng/m2/s'
ENDDO
ENDIF
!-------------------------------------
! Afternoon-average boundary
! layer heights (ND41) + timeseries
!-------------------------------------
IF ( ND41 > 0 .or. DO_TIMESERIES ) THEN
! Number of tracers
NTRAC(41) = 2
! Loop over tracers
DO T = 1, NTRAC(41)
! Get name and unit for each met field
SELECT CASE( T )
CASE( 1 )
NAME(T,41) = 'PBL-M'
UNIT(T,41) = 'm'
CASE( 2 )
NAME(T,41) = 'PBL-L'
UNIT(T,41) = 'levels'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
FNAME(T,41) = 'PBL depth'
INDEX(T,41) = T + ( SPACING * 27 )
MOLC (T,41) = 1
MWT (T,41) = 0e0
SCALE(T,41) = 1e0
ENDDO
ENDIF
!-------------------------------------
! SOA concentrations (ND42)
!-------------------------------------
IF ( ND42 > 0 ) THEN
! Number of tracers
NTRAC(42) = 8
! Loop over tracers
DO T = 1, NTRAC(42)
! Get name, long name, unit, and mol wt for each field
SELECT CASE( T )
CASE( 1 )
NAME (T,42) = 'SOA1'
FNAME(T,42) = 'Aer prods of ALPH+LIMO+TERP ox'
UNIT (T,42) = 'ug/m3'
MWT (T,42) = 150e-3
CASE( 2 )
NAME (T,42) = 'SOA2'
FNAME(T,42) = 'Aerosol prod of ALCO ox'
UNIT (T,42) = 'ug/m3'
MWT (T,42) = 160e-3
CASE( 3 )
NAME (T,42) = 'SOA3'
FNAME(T,42) = 'Aerosol prod of SESQ ox'
UNIT (T,42) = 'ug/m3'
MWT (T,42) = 220e-3
CASE( 4 )
NAME (T,42) = 'SOA4'
FNAME(T,42) = 'Aerosol prod of ISOP ox'
UNIT (T,42) = 'ug/m3'
MWT (T,42) = 130e-3
CASE( 5 )
NAME (T,42) = 'SOA1-3'
FNAME(T,42) = 'SOA1 + SOA2 + SOA3'
UNIT (T,42) = 'ug/m3'
MWT (T,42) = 177d-3
CASE( 6 )
NAME (T,42) = 'SOA1-4'
FNAME(T,42) = 'SOA1 + SOA2 + SOA3 + SOA4'
UNIT (T,42) = 'ug/m3'
MWT (T,42) = 165e-3
CASE( 7 )
NAME (T,42) = 'sumOC'
FNAME(T,42) = 'Sum of organic carbon'
UNIT (T,42) = 'ug C/m3'
MWT (T,42) = 12e-3
CASE( 8 )
NAME (T,42) = 'sumOCstp'
FNAME(T,42) = 'Sum of organic carbon @ STP'
UNIT (T,42) = 'ug C/sm3'
MWT (T,42) = 12e-3
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
INDEX(T,42) = T + ( SPACING * 43 )
MOLC (T,42) = 1
SCALE(T,42) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Chemically-produced OH, etc (ND43)
!-------------------------------------
IF ( ND43 > 0 ) THEN
! Number of tracers
NTRAC(43) = 5
! Loop over tracers
DO T = 1, NTRAC(43)
! Get name and unit for each met field
SELECT CASE( T )
CASE( 1 )
NAME(T,43) = 'OH'
UNIT(T,43) = 'molec/cm3'
MWT (T,43) = 17e-3
CASE( 2 )
NAME(T,43) = 'NO'
UNIT(T,43) = 'v/v'
MWT (T,43) = 30e-3
CASE( 3 )
NAME(T,43) = 'HO2'
UNIT(T,43) = 'v/v'
MWT (T,43) = 33e-3
CASE( 4 )
NAME(T,43) = 'NO2'
UNIT(T,43) = 'v/v'
MWT (T,43) = 46e-3
CASE( 5 )
NAME(T,43) = 'NO3'
UNIT(T,43) = 'v/v'
MWT (T,43) = 62e-3
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
FNAME(T,43) = 'Chemically produced ' // TRIM( NAME(T,43) )
INDEX(T,43) = T + ( SPACING * 16 )
MOLC (T,43) = 1
SCALE(T,43) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Dry deposition fluxes (ND44)
! Dry deposition velocities (ND44)
!-------------------------------------
IF ( ND44 > 0 ) THEN
! Special handling for tagged simulations
IF ( ITS_A_TAGOX_SIM() .or.
& ITS_A_MERCURY_SIM() .or. ITS_A_H2HD_SIM() ) THEN
!----------------------------------------------------
! Tagged runs: Save drydep flux for all tracers
! but drydep velocity for only NUMDEP species
!----------------------------------------------------
! Drydep flux (all tracers)
DO T = 1, N_TRACERS
NAME (T,44) = TRIM( TRACER_NAME(T) ) // 'df'
FNAME(T,44) = TRIM( TRACER_NAME(T) ) // ' drydep flux'
UNIT (T,44) = 'molec/cm2/s'
MWT (T,44) = TRACER_MW_KG(T)
MOLC (T,44) = INT( TRACER_COEFF(T,1) )
SCALE(T,44) = 1.0e0
INDEX(T,44) = T + ( SPACING * 36 )
NTRAC(44) = NTRAC(44) + 1
ENDDO
! Drydep velocity (only deposited species)
DO N = 1, NUMDEP
T = NTRAIND(N)
NN = N + N_TRACERS
NAME (NN,44) = TRIM( DEPNAME(N) ) // 'dv'
FNAME(NN,44) = TRIM( DEPNAME(N) ) // ' drydep velocity'
UNIT (NN,44) = 'cm/s'
MWT (NN,44) = TRACER_MW_KG(T)
MOLC (NN,44) = INT( TRACER_COEFF(T,1) )
SCALE(NN,44) = 1.0e0
INDEX(NN,44) = T + ( SPACING * 37 )
NTRAC(44) = NTRAC(44) + 1
ENDDO
ELSE
!----------------------------------------------------
! Otherwise save drydep flux for NUMDEP species only
!----------------------------------------------------
! Loop over drydep species
DO N = 1, NUMDEP
! GEOS-CHEM tracer #
T = NTRAIND(N)
! Drydep flux (deposited species only)
NAME (N,44) = TRIM( DEPNAME(N) ) // 'df'
FNAME(N,44) = TRIM( DEPNAME(N) ) // ' drydep flux'
UNIT (N,44) = 'molec/cm2/s'
MWT (N,44) = TRACER_MW_KG(T)
MOLC (N,44) = INT( TRACER_COEFF(T,1) )
SCALE(N,44) = 1.0e0
INDEX(N,44) = T + ( SPACING * 36 )
NTRAC(44) = NTRAC(44) + 1
! For the Rn simulation, unit is kg/s (bmy, 2/22/08)
IF ( ITS_A_RnPbBe_SIM() ) UNIT(N,44) = 'kg/s'
! Drydep velocity (deposited species only)
NN = N + NUMDEP
NAME (NN,44) = TRIM( DEPNAME(N) ) // 'dv'
FNAME(NN,44) = TRIM( DEPNAME(N) ) // ' drydep velocity'
UNIT (NN,44) = 'cm/s'
MWT (NN,44) = TRACER_MW_KG(T)
MOLC (NN,44) = INT( TRACER_COEFF(T,1) )
SCALE(NN,44) = 1.0e0
INDEX(NN,44) = T + ( SPACING * 37 )
NTRAC(44) = NTRAC(44) + 1
ENDDO
ENDIF
ENDIF
!-------------------------------------
! Biogenic emissions (ND46)
!-------------------------------------
IF ( ND46 > 0 ) THEN
! Number of tracers
NTRAC(46) = 6
! Loop over tracers
DO T = 1, NTRAC(46)
! Get name and unit for each met field
SELECT CASE( T )
CASE( 1 )
NAME(T,46) = 'ISOP'
MOLC(T,46) = 5
CASE( 2 )
NAME(T,46) = 'ACET'
MOLC(T,46) = 3
CASE( 3 )
NAME(T,46) = 'PRPE'
MOLC(T,46) = 3
CASE( 4 )
NAME(T,46) = 'MONOT'
MOLC(T,46) = 10
CASE( 5 )
NAME(T,46) = 'MBO'
MOLC(T,46) = 5
CASE( 6 )
NAME(T,46) = 'C2H4'
MOLC(T,46) = 2
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
INDEX(T,46) = T + ( SPACING * 21 )
FNAME(T,46) = TRIM( NAME(T,46) ) // ' emissions'
UNIT (T,46) = 'atoms C/cm2/s'
MWT (T,46) = 12e-3
SCALE(T,46) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Time series diags (ND{48,49,50,51})
!-------------------------------------
IF ( DO_TIMESERIES ) THEN
! Number of tracers
NTRAC(48) = 26
! Loop over tracers
DO T = 1, NTRAC(48)
! Define quantities
INDEX(T,48) = T + ( SPACING * 19 )
MOLC (T,48) = 1
MWT (T,48) = 0e0
SCALE(T,48) = 1e0
! Get name, long-name (and others where necessary)
SELECT CASE( T )
CASE( 1 )
NAME (T,48) = 'O3'
FNAME(T,48) = 'O3 time series'
UNIT (T,48) = 'ppbv'
MWT (T,48) = 48e-3
SCALE(T,48) = 1.0e+9
CASE( 2 )
NAME (T,48) = 'OH'
FNAME(T,48) = 'OH time series'
UNIT (T,48) = 'molec/cm3'
CASE( 3 )
NAME (T,48) = 'NOy'
FNAME(T,48) = 'NOy time series'
UNIT (T,48) = 'ppbv'
SCALE(T,48) = 1.0e+9
CASE( 4 )
NAME (T,48) = 'NO2dv'
FNAME(T,48) = 'NO2 drydep vel'
UNIT (T,48) = 'cm/s'
CASE( 5 )
NAME (T,48) = 'O3dv'
FNAME(T,48) = 'O3 drydep vel'
UNIT (T,48) = 'cm/s'
CASE( 6 )
NAME (T,48) = 'PANdv'
FNAME(T,48) = 'PAN drydep vel'
UNIT (T,48) = 'cm/s'
CASE( 7 )
NAME (T,48) = 'HNO3dv'
FNAME(T,48) = 'HNO3 drydep vel'
UNIT (T,48) = 'cm/s'
CASE( 8 )
NAME (T,48) = 'H2O2dv'
FNAME(T,48) = 'H2O2 drydep vel'
UNIT (T,48) = 'cm/s'
CASE( 9 )
NAME (T,48) = 'NO'
FNAME(T,48) = 'NO time series'
UNIT (T,48) = 'ppbv'
MWT (T,48) = 30e-3
SCALE(T,48) = 1.0e+9
CASE( 10 )
NAME (T,48) = 'PBLTOP'
FNAME(T,48) = 'PBL top pressure'
UNIT (T,48) = 'hPa'
CASE( 11 )
NAME (T,48) = 'LT'
FNAME(T,48) = 'Station local time'
UNIT (T,48) = 'h'
CASE( 12 )
NAME (T,48) = 'ISOPf'
FNAME(T,48) = 'ISOP emission flux'
UNIT (T,48) = 'molec/cm2/s'
MWT (T,48) = 12e-3
CASE( 13 )
NAME (T,48) = 'MOLEN'
FNAME(T,48) = 'Monin-Obhukov length'
UNIT (T,48) = 'm'
CASE( 14 )
NAME (T,48) = 'NO3'
FNAME(T,48) = 'NO3 time series'
UNIT (T,48) = 'ppbv'
MWT (T,48) = 62e-3
SCALE(T,48) = 1.0e+9
CASE( 15 )
NAME (T,48) = 'PS'
FNAME(T,48) = 'Surface pressure'
UNIT (T,48) = 'hPa'
CASE( 16 )
NAME (T,48) = 'AVGW'
FNAME(T,48) = 'Water vapor mixing ratio'
UNIT (T,48) = 'ppbv'
MWT (T,48) = 33e-3
SCALE(T,48) = 1.0e+9
CASE( 17 )
NAME (T,48) = 'RH'
FNAME(T,48) = 'Relative humidity'
UNIT (T,48) = '%'
CASE( 18 )
NAME (T,48) = 'HCNcol'
FNAME(T,48) = 'HCN column density'
UNIT (T,48) = 'molec/cm2'
CASE( 19 )
NAME (T,48) = 'CF'
FNAME(T,48) = 'Cloud fraction'
UNIT (T,48) = 'unitless'
CASE( 20 )
NAME (T,48) = 'ODCOL'
FNAME(T,48) = 'Cloud optical depth'
UNIT (T,48) = 'unitless'
CASE( 21 )
NAME (T,48) = 'CThgt'
FNAME(T,48) = 'Cloud top height'
UNIT (T,48) = 'hPa'
CASE( 22 )
NAME (T,48) = 'AIRDEN'
FNAME(T,48) = 'Air density'
UNIT (T,48) = 'molec/cm3'
CASE( 23 )
NAME (T,48) = 'TOTDUST'
FNAME(T,48) = 'Total dust opt depth'
UNIT (T,48) = 'unitless'
CASE( 24 )
NAME (T,48) = 'TOTSALT'
FNAME(T,48) = 'Total seasalt tracer'
UNIT (T,48) = 'ppbv'
MWT (T,48) = 36e-3
SCALE(T,48) = 1.0e+9
CASE( 25 )
NAME (T,48) = 'NO2'
FNAME(T,48) = 'NO2 concentration'
UNIT (T,48) = 'ppbv'
MWT (T,48) = 46e-3
SCALE(T,48) = 1.0e+9
CASE( 26 )
NAME (T,48) = 'TOTAOD'
FNAME(T,48) = 'Total aerosol opt depth'
UNIT (T,48) = 'unitless'
CASE DEFAULT
! Nothing
END SELECT
ENDDO
ENDIF
!-----------------------------------
! gamma HO2 (ND52) jaegle (02/26/09)
!-----------------------------------
IF ( ND52 > 0 ) THEN
T = 1
NTRAC(52) = T
NAME (T,52) = 'GAMMAHO2'
FNAME(T,52) = 'Gamma HO2'
UNIT (T,52) = 'unitless'
INDEX(T,52) = T + ( SPACING * 46 )
MOLC (T,52) = 1
MWT (T,52) = 0e0
SCALE(T,52) = 1e0
ENDIF
!-------------------------------------
! Time in the troposphere (ND54)
!-------------------------------------
IF ( ND54 > 0 ) THEN
T = 1
NTRAC(54) = T
NAME (T,54) = 'TIMETROP'
FNAME(T,54) = 'Time in the troposphere'
UNIT (T,54) = 'unitless'
INDEX(T,54) = T + ( SPACING * 46 )
MOLC (T,54) = 1
MWT (T,54) = 0e0
SCALE(T,54) = 1e0
ENDIF
!-------------------------------------
! Tropopause quantities (ND55)
!-------------------------------------
IF ( ND55 > 0 ) THEN
! Number of tracers
NTRAC(55) = 3
! Loop over tracers
DO T = 1, NTRAC(55)
! Get name and unit for each met field
SELECT CASE( T )
CASE( 1 )
NAME (T,55) = 'TP-LEVEL'
FNAME(T,55) = 'Tropopause level'
UNIT (T,55) = 'level'
CASE( 2 )
NAME (T,55) = 'TP-HGHT'
FNAME(T,55) = 'Tropopause height'
UNIT (T,55) = 'km'
CASE( 3 )
NAME (T,55) = 'TP-PRESS'
FNAME(T,55) = 'Tropopause pressure'
UNIT (T,55) = 'hPa'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
INDEX(T,55) = T + ( SPACING * 26 )
MOLC (T,55) = 1
MWT (T,55) = 0e0
SCALE(T,55) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Lightning flash rates (ND56)
!-------------------------------------
IF ( ND56 > 0 ) THEN
! Number of tracers
NTRAC(56) = 3
! Loop over tracers
DO T = 1, NTRAC(56)
! Get name and long name for each met field
SELECT CASE( T )
CASE( 1 )
NAME (T,56) = 'L-RATE'
FNAME(T,56) = 'Total lightning flash rate'
CASE( 2 )
NAME (T,56) = 'IC-RATE'
FNAME(T,56) = 'Intra-cloud flash rate'
CASE( 3 )
NAME (T,56) = 'CG-RATE'
FNAME(T,56) = 'Cloud-ground flash rate'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
UNIT (T,56) = 'flashes/min/km2'
INDEX(T,56) = T + ( SPACING * 42 )
MOLC (T,56) = 1
MWT (T,56) = 0e0
SCALE(T,56) = 1e0
ENDDO
ENDIF
!-------------------------------------
! CH4 Emissions
! (kjw, dkh, 02/12/12, adj32_023)
!-------------------------------------
IF ( ND58 > 0 ) THEN
! Number of tracers
NTRAC(58) = 12
! Loop over tracers
DO T = 1, NTRAC(58)
! Get name and long name for each tracer
SELECT CASE( T )
CASE( 1 )
NAME (T,58) = 'CH4-TOT'
FNAME(T,58) = 'CH4 Emissions total (w/o sab)'
CASE( 2 )
NAME (T,58) = 'CH4-GAO'
FNAME(T,58) = 'CH4 Emissions gas & oil'
CASE( 3 )
NAME (T,58) = 'CH4-COL'
FNAME(T,58) = 'CH4 Emissions coal'
CASE( 4 )
NAME (T,58) = 'CH4-LIV'
FNAME(T,58) = 'CH4 Emissions livestock'
CASE( 5 )
NAME (T,58) = 'CH4-WST'
FNAME(T,58) = 'CH4 Emissions waste'
CASE( 6 )
NAME (T,58) = 'CH4-BFL'
FNAME(T,58) = 'CH4 Emissions biofuel'
CASE( 7 )
NAME (T,58) = 'CH4-RIC'
FNAME(T,58) = 'CH4 Emissions rice'
CASE( 8 )
NAME (T,58) = 'CH4-OTA'
FNAME(T,58) = 'CH4 Emissions other anthro'
CASE( 9 )
NAME (T,58) = 'CH4-BBN'
FNAME(T,58) = 'CH4 Emissions bioburn'
CASE( 10 )
NAME (T,58) = 'CH4-WTL'
FNAME(T,58) = 'CH4 Emissions wetlands'
CASE( 11 )
NAME (T,58) = 'CH4-SAB'
FNAME(T,58) = 'CH4 Emissions soil abs'
CASE( 12 )
NAME (T,58) = 'CH4-OTN'
FNAME(T,58) = 'CH4 Emissions other natural'
CASE( 13 )
NAME (T,58) = 'CH4-Loss'
FNAME(T,58) = 'CH4 Loss by Reaction w/ OH'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
UNIT (T,58) = 'kg'
INDEX(T,58) = T + ( SPACING * 50 )
MOLC (T,58) = 1
MWT (T,58) = 1.6e-3
SCALE(T,58) = 1e0
ENDDO
ENDIF
!-------------------------------------
! PM concentrations (ND59) (diag59 added, lz,10/11/10)
!-------------------------------------
IF ( ND59 > 0 ) THEN
! Number of tracers
NTRAC(59) = PD59
! Loop over tracers
DO T = 1, NTRAC(59)
! Get name, long name, unit, and mol wt for each field
SELECT CASE( T )
CASE( 1 )
NAME (T,59) = 'NH3'
FNAME(T,59) = 'NH3 concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 17e-3
CASE( 2)
NAME (T,59) = 'NH4'
FNAME(T,59) = 'NH4 concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 18e-3
CASE( 3 )
NAME (T,59) = 'NIT'
FNAME(T,59) = 'NIT concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 62e-3
CASE( 4 )
NAME (T,59) = 'SO4'
FNAME(T,59) = 'SO4 concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 96e-3
CASE( 5 )
NAME (T,59) = 'BCPI'
FNAME(T,59) = 'BCPI concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 12e-3
CASE( 6 )
NAME (T,59) = 'BCPO'
FNAME(T,59) = 'BCPO concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 12e-3
CASE( 7 )
NAME (T,59) = 'OCPI'
FNAME(T,59) = 'OMPI concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 12e-3
CASE( 8 )
NAME (T,59) = 'OCPO'
FNAME(T,59) = 'OMPO concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 12e-3
CASE( 9 )
NAME (T,59) = 'DST1'
FNAME(T,59) = 'DST1 concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 12e-3
CASE( 10 )
NAME (T,59) = 'DST2'
FNAME(T,59) = 'DST2 concentration'
UNIT (T,59) = 'ug/m3'
MWT (T,59) = 12e-3
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
INDEX(T,59) = T + ( SPACING * 59 )
MOLC (T,59) = 1
SCALE(T,59) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Wetland Fraction (ND60)
! (kjw, dkh, 02/12/12, adj32_023)
!-------------------------------------
IF ( ND60 > 0 ) THEN
! Number of tracers
NTRAC(60) = 1
T = 1
NAME (T,60) = 'WETFRAC'
FNAME(T,60) = 'Wetland Fraction'
INDEX(T,60) = T + ( SPACING * 51 )
MOLC (T,60) = 0
MWT (T,60) = 0e0
SCALE(T,60) = 1e0
UNIT(T,60) = 'unitless'
ENDIF
!-------------------------------------
! Family prod & loss (ND65)
!-------------------------------------
IF ( DO_SAVE_PL ) THEN
! Number of P/L families
NTRAC(65) = GET_NFAM()
! Loop over each P/L family
DO T = 1, NTRAC(65)
NAME (T,65) = GET_FAM_NAME( T )
FNAME(T,65) = TRIM( NAME(T,65) ) // ' P/L family'
INDEX(T,65) = T + ( SPACING * 17 )
MOLC (T,65) = 1
MWT (T,65) = GET_FAM_MWT( T )
SCALE(T,65) = 1e0
! Unit for Tag Ox is kg/s, otherwise molec/cm3/s
IF ( ITS_A_TAGOX_SIM() ) THEN
UNIT(T,65) = 'kg/s'
ELSE
UNIT(T,65) = 'molec/cm3/s'
ENDIF
ENDDO
ENDIF
!-------------------------------------
! 3-D GMAO met fields (ND66)
! also for timeseries diagnostics
!-------------------------------------
IF ( ND66 > 0 .or. DO_TIMESERIES ) THEN
! Number of tracers
NTRAC(66) = 6
! Loop over tracers
DO T = 1, NTRAC(66)
! Get name and unit for each met field
SELECT CASE( T )
CASE( 1 )
NAME(T,66) = 'UWND'
UNIT(T,66) = 'm/s'
CASE( 2 )
NAME(T,66) = 'VWND'
UNIT(T,66) = 'm/s'
CASE( 3 )
NAME(T,66) = 'TMPU'
UNIT(T,66) = 'K'
CASE( 4 )
NAME(T,66) = 'SPHU'
UNIT(T,66) = 'g/kg'
CASE( 5 )
NAME(T,66) = 'CLDMAS'
UNIT(T,66) = 'kg/m2/s'
CASE( 6 )
NAME(T,66) = 'DTRAIN'
UNIT(T,66) = 'kg/m2/s'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
FNAME(T,66) = 'GMAO ' // TRIM( NAME(T,66) ) // ' field'
INDEX(T,66) = T + ( SPACING * 12 )
MOLC (T,66) = 1
MWT (T,66) = 0e0
SCALE(T,66) = 1e0
ENDDO
ENDIF
!-------------------------------------
! 2-D GMAO met fields (ND67)
!-------------------------------------
IF ( ND67 > 0 .or. DO_TIMESERIES ) THEN
! Number of tracers
NTRAC(67) = 22
! Loop over tracers
DO T = 1, NTRAC(67)
! Get name and unit for each met field
SELECT CASE( T )
CASE( 1 )
NAME(T,67) = 'HFLUX'
UNIT(T,67) = 'W/m2'
CASE( 2 )
NAME(T,67) = 'RADSWG'
UNIT(T,67) = 'W/m2'
CASE( 3 )
NAME(T,67) = 'PREACC'
UNIT(T,67) = 'W/m2'
CASE( 4 )
NAME(T,67) = 'PRECON'
UNIT(T,67) = 'W/m2'
CASE( 5 )
NAME(T,67) = 'TS'
UNIT(T,67) = 'K'
CASE( 6 )
NAME(T,67) = 'RADSWT'
UNIT(T,67) = 'W/m2'
CASE( 7 )
NAME(T,67) = 'USTAR'
UNIT(T,67) = 'm/s'
CASE( 8 )
NAME(T,67) = 'Z0'
UNIT(T,67) = 'm'
CASE( 9 )
NAME(T,67) = 'PBL'
#if defined( GEOS_4 )
UNIT(T,67) = 'm'
#else
UNIT(T,67) = 'hPa'
#endif
CASE( 10 )
NAME(T,67) = 'CLDFRC'
UNIT(T,67) = 'unitless'
CASE( 11 )
NAME(T,67) = 'U10M'
UNIT(T,67) = 'm/s'
CASE( 12 )
NAME(T,67) = 'V10M'
UNIT(T,67) = 'm/s'
CASE( 13 )
NAME(T,67) = 'PS-PBL'
UNIT(T,67) = 'hPa'
CASE( 14 )
NAME(T,67) = 'ALBD'
UNIT(T,67) = 'unitless'
CASE( 15 )
NAME(T,67) = 'PHIS'
UNIT(T,67) = 'm'
CASE( 16 )
NAME(T,67) = 'CLDTOP'
UNIT(T,67) = 'level'
CASE( 17 )
NAME(T,67) = 'TROPP'
UNIT(T,67) = 'hPa'
CASE( 18 )
NAME(T,67) = 'SLP'
UNIT(T,67) = 'hPa'
CASE( 19 )
NAME(T,67) = 'TSKIN'
UNIT(T,67) = 'K'
CASE( 20 )
NAME(T,67) = 'PARDF'
UNIT(T,67) = 'W/m2'
CASE( 21 )
NAME(T,67) = 'PARDR'
UNIT(T,67) = 'W/m2'
CASE( 22 )
NAME(T,67) = 'GWET'
UNIT(T,67) = 'unitless'
CASE( 23 )
! Add EFLUX (Lin, 05/16/08)
NAME(T,67) = 'EFLUX'
UNIT(T,67) = 'W/m2'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
FNAME(T,67) = 'GMAO ' // TRIM( NAME(T,67) ) // ' field'
INDEX(T,67) = T + ( SPACING * 11 )
MOLC (T,67) = 1
MWT (T,67) = 0e0
SCALE(T,67) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Grid box heights and related
! quantities (ND68) + timeseries
!-------------------------------------
IF ( ND68 > 0 .or. DO_TIMESERIES ) THEN
! Number of tracers
NTRAC(68) = 4
! Loop over tracers
DO T = 1, NTRAC(68)
! Get name and unit for each met field
SELECT CASE( T )
CASE( 1 )
NAME (T,68) = 'BXHEIGHT'
FNAME(T,68) = 'Grid box height'
UNIT (T,68) = 'm'
CASE( 2 )
NAME (T,68) = 'AD'
FNAME(T,68) = 'Air mass in grid box'
UNIT (T,68) = 'kg'
CASE( 3 )
NAME (T,68) = 'AVGW'
FNAME(T,68) = 'Mixing ratio of H2O vapor'
UNIT (T,68) = 'v/v'
CASE( 4 )
NAME (T,68) = 'N(AIR)'
FNAME(T,68) = 'Number density of air'
UNIT (T,68) = 'molec/m3'
CASE DEFAULT
! Nothing
END SELECT
! Define the rest of the quantities
INDEX(T,68) = T + ( SPACING * 24 )
MOLC (T,68) = 1
MWT (T,68) = 0e0
SCALE(T,68) = 1e0
ENDDO
ENDIF
!-------------------------------------
! Grid box surface area (ND69)
!-------------------------------------
IF ( ND69 > 0 ) THEN
T = 1
NTRAC(69) = T
NAME (T,69) = 'DXYP'
FNAME(T,69) = 'Grid box surface area'
UNIT (T,69) = 'm2'
INDEX(T,69) = T + ( SPACING * 25 )
MOLC (T,69) = 1
MWT (T,69) = 0e0
SCALE(T,69) = 1e0
ENDIF
!-------------------------------------
! adj_group: define for adjoint (dkh, 02/08/10)
!-------------------------------------
IF ( LADJ ) THEN
IF ( LICS ) THEN
! IJ-GDT-$
NTRAC_ADJ(1) = N_TRACERS
! Loop over tracers
DO T = 1, NTRAC_ADJ(1)
NAME_ADJ (T,1) = NAME(T,45)
FNAME_ADJ(T,1) = 'Adj of IC scaling factors'
UNIT_ADJ (T,1) = 'J'
INDEX_ADJ(T,1) = T + ( SPACING * 90 )
ENDDO
! IJ-ICS-$
NTRAC_ADJ(4) = N_TRACERS
! Loop over tracers
DO T = 1, NTRAC_ADJ(4)
NAME_ADJ (T,4) = NAME_ADJ(T,1)
FNAME_ADJ(T,4) = 'Tracer IC scaling factors'
UNIT_ADJ (T,4) = 'none'
INDEX_ADJ(T,4) = T + ( SPACING * 93 )
ENDDO
ENDIF
IF ( LADJ_EMS ) THEN
! IJ-GDE-$
NTRAC_ADJ(2) = NNEMS
! Loop over emissions
DO T = 1, NTRAC_ADJ(2)
! only use the part of the name after the IDADJ_E prefix
ADNAME = ADEMS_NAME(T)
ADNAME = ADNAME(8:30)
NAME_ADJ (T,2) = TRIM(ADNAME)
FNAME_ADJ(T,2) = 'Adj of emission scaling factors'
UNIT_ADJ (T,2) = 'J'
INDEX_ADJ(T,2) = T + ( SPACING * 91 )
ENDDO
! IJ-EMS-$
NTRAC_ADJ(5) = NNEMS
! Loop over emissions
DO T = 1, NTRAC_ADJ(5)
NAME_ADJ (T,5) = NAME_ADJ(T,2)
FNAME_ADJ(T,5) = 'emission scaling factors'
UNIT_ADJ (T,5) = 'none'
INDEX_ADJ(T,5) = T + ( SPACING * 94 )
ENDDO
! dJ_dEMS
IF ( LEMS_ABS ) THEN
NTRAC_ADJ(8) = NNEMS
! Loop over emissions
DO T = 1, NTRAC_ADJ(8)
NAME_ADJ (T,8) = NAME_ADJ(T,2)
FNAME_ADJ(T,8) = 'Adj of emission'
INDEX_ADJ(T,8) = T + ( SPACING * 97 )
UNIT_ADJ (T,8) = 'J/kg'
ENDDO
ENDIF
! For strat prod & loss gradient (hml)
IF ( LADJ_STRAT ) THEN
! IJ-GDP-$ (dJ_dPRODSF)
NTRAC_ADJ(9) = NSTPL
! Loop over strat PROD tracers
DO T = 1, NTRAC_ADJ(9)
ADNAME = PROD_NAME(T)
NAME_ADJ (T,9) = TRIM(ADNAME)
FNAME_ADJ(T,9) = 'Adj of strat prod scaling factors'
UNIT_ADJ (T,9) = 'J'
INDEX_ADJ(T,9) = T + ( SPACING * 98 )
ENDDO
!IJ-GDL-$ (dJ_dLOSSSF)
NTRAC_ADJ(10) = NSTPL
! Loop over strat LOSS tracers
DO T = 1, NTRAC_ADJ(10)
ADNAME = LOSS_NAME(T)
NAME_ADJ (T,10) = TRIM(ADNAME)
FNAME_ADJ(T,10) = 'Adj of strat loss scaling factors'
UNIT_ADJ (T,10) = 'J'
INDEX_ADJ(T,10) = T + ( SPACING * 99 )
ENDDO
ENDIF
ENDIF
! Added block to output reaction rate sensitivities (tww, 05/08/12)
IF ( LADJ_RRATE ) THEN
! IJ-RATE$::
CALL INIT_KPP
NTRAC_ADJ(11) = NCOEFF_RATE
DO T = 1, NTRAC_ADJ(11)
ADNAME = RRATES_NAME(T)
NAME_ADJ(T,11) = TRIM(ADNAME)
FNAME_ADJ(T,11) = 'rate gradients'
UNIT_ADJ(T,11) = 'none'
INDEX_ADJ(T,11) = JCOEFF(NCOEFF_EM+T)+(SPACING*82)
ENDDO
NTRAC_ADJ(12) = NCOEFF_RATE
DO T = 1, NTRAC_ADJ(12)
ADNAME = RRATES_NAME(T)
NAME_ADJ(T,12) = TRIM(ADNAME)
FNAME_ADJ(T,12) = 'norm rate gradients'
UNIT_ADJ(T,12) = 'none'
INDEX_ADJ(T,12) = JCOEFF(NCOEFF_EM+T)+(SPACING*83)
ENDDO
NTRAC_ADJ(13) = NCOEFF_RATE
DO T = 1, NTRAC_ADJ(13)
ADNAME = RRATES_NAME(T)
NAME_ADJ(T,13) = TRIM(ADNAME)
FNAME_ADJ(T,13) = 'rate SF'
UNIT_ADJ(T,13) = 'none'
INDEX_ADJ(T,13) = JCOEFF(NCOEFF_EM+T)+(SPACING*84)
ENDDO
ENDIF
IF ( LFD_GLOB ) THEN
! FD-TEST
NTRAC_ADJ(3) = 6
NAME_ADJ (1,3) = 'FD2nd'
FNAME_ADJ(1,3) = 'Second order FD sens'
INDEX_ADJ(1,3) = 1 + ( SPACING * 92)
NAME_ADJ (2,3) = 'ADJ'
FNAME_ADJ(2,3) = 'Adjoint sens'
INDEX_ADJ(2,3) = 2 + ( SPACING * 92 )
NAME_ADJ (3,3) = 'RATIO'
FNAME_ADJ(3,3) = 'FD2nd / ADJ '
INDEX_ADJ(3,3) = 3 + ( SPACING * 92 )
NAME_ADJ (4,3) = 'FDp1st'
FNAME_ADJ(4,3) = 'Positive pert FD sens'
INDEX_ADJ(4,3) = 4 + ( SPACING * 92 )
NAME_ADJ (5,3) = 'VAL'
FNAME_ADJ(5,3) = 'Unperturbed CFunction value'
INDEX_ADJ(5,3) = 5 + ( SPACING * 92 )
NAME_ADJ (6,3) = 'FDn1st'
FNAME_ADJ(6,3) = 'Negative pert FD sens'
INDEX_ADJ(6,3) = 6 + ( SPACING * 92 )
UNIT_ADJ (:,3) = 'J'
UNIT_ADJ (3,3) = 'none'
ENDIF
IF ( LADJ_TRAJ ) THEN
! IJ-ADJ-$
NTRAC_ADJ(6) = N_TRACERS
! Loop over tracers
DO T = 1, NTRAC_ADJ(6)
NAME_ADJ (T,6) = NAME(T,45)
FNAME_ADJ(T,6) = 'Adj of tracer scaling factors'
IF ( LTRAJ_SCALE ) THEN
UNIT_ADJ (T,6) = 'J'
ELSE
UNIT_ADJ (T,6) = 'J/(kg/box)'
ENDIF
INDEX_ADJ(T,6) = T + ( SPACING * 95 )
ENDDO
ENDIF
#if defined( LIDORT )
! IJ-AOD-$
NTRAC_ADJ(7) = 17
! Loop over tracers
DO T = 1, NTRAC_ADJ(7)
! aerosol optical depths at each wavelength
IF ( T < 6 ) THEN
NAME_ADJ (T,7) = 'AOD'
FNAME_ADJ(T,7) = 'Aerosol optical depths'
UNIT_ADJ (T,7) = 'none'
! TOA reflectances at each wavelength
ELSEIF ( T > 5 .and. T < 11 ) THEN
NAME_ADJ (T,7) = 'REFL'
FNAME_ADJ(T,7) = 'TOA reflectances'
UNIT_ADJ (T,7) = '%'
! TOA reflectance sensitivities at each wavelength
ELSEIF ( T > 10 .and. T < 16 ) THEN
NAME_ADJ (T,7) = 'DREFL'
FNAME_ADJ(T,7) = 'TOA reflectance sens'
UNIT_ADJ (T,7) = '%'
! Radiative flux
ELSEIF ( T == 16 ) THEN
NAME_ADJ (T,7) = 'FLUX'
FNAME_ADJ(T,7) = 'Radiative flux'
UNIT_ADJ (T,7) = 'W/m2'
! Radiative forcing
ELSEIF ( T == 17 ) THEN
NAME_ADJ (T,7) = 'RF'
FNAME_ADJ(T,7) = 'Radiative forcing'
UNIT_ADJ (T,7) = 'W/m2'
ENDIF
INDEX_ADJ(T,7) = T + ( SPACING * 96 )
ENDDO
#endif
ENDIF
! Return to calling program
END SUBROUTINE INIT_TRACERINFO
!------------------------------------------------------------------------------
SUBROUTINE INIT_GAMAP( DIAGINFO, TRACERINFO )
!
!******************************************************************************
! Subroutine INIT_GAMAP allocates and initializes all module variables.
! (bmy, 4/22/05, 8/4/06)
!
! Arguments as Input:
! ============================================================================
! (1 ) DIAGINFO (CHARACTER) : Path name of the GAMAP "diaginfo.dat" file
! (2 ) TRACERINFO (CHARACTER) : Path name of the GAMAP "tracerinfo.dat" file
!
! NOTES:
! (1 ) Now add proper UNIT & SCALE for Rn/Pb/Be simulations (bmy, 5/11/05)
! (2 ) Added HCN & CH3CN source & sink info for ND09 (bmy, 6/27/05)
! (3 ) Bug fix: removed duplicate category names. Updated for CO2-SRCE
! diagnostic. Now references ND04 from "diag04_mod.f.
! (pns, bmy, 7/25/05)
! (4 ) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
! (5 ) Now save MBO as tracer #5 for ND46 (tmf, bmy, 10/20/05)
! (6 ) Now add categories CV-FLX-$, TURBMC-$, EW-FLX-$, NS-FLX-$, UP-FLX-$
! which had been inadvertently omitted. Also add OCEAN-HG category.
! Rewrote do loop and case statement to add new diagnostics to ND03.
! Now make units of Hg tracers "pptv", not "ppbv". Now remove
! restriction on printing out cloud mass flux in GEOS-4 for the ND66
! diagnostic. Added new sea salt category. (cdh, eck, bmy, 4/6/06)
! (7 ) Now references ND56 from "diag56_mod.f" (ltm, bmy, 5/5/06)
! (8 ) Now references ND42 from "diag42_mod.f". Also updated for extra SOA
! tracers in ND07 diagnostic. (dkh, bmy, 5/22/06)
! (9 ) Updated ND36 for CH3I simulation (bmy, 7/25/06)
! (10) Remove support for GEOS-1 and GEOS-STRAT met fields (bmy, 8/4/06)
! (11) Split into INIT_DIAGINFO, INIT_TRACERINFO for clarity (bmy, 9/28/06)
!******************************************************************************
!
! References to F90 modules
USE ERROR_MOD, ONLY : ALLOC_ERR
USE TIME_MOD, ONLY : EXPAND_DATE, GET_NHMSb, GET_NYMDb
# include "CMN_SIZE" ! Size parameters
# include "CMN_DIAG" ! NDxx flags
! Arguments
CHARACTER(LEN=255), INTENT(IN) :: DIAGINFO
CHARACTER(LEN=255), INTENT(IN) :: TRACERINFO
! Local variables
INTEGER :: AS, NYMDb, NHMSb
!=================================================================
! INIT_GAMAP begins here!
!=================================================================
! Save from arguments to module variables
DFILE = DIAGINFO
TFILE = TRACERINFO
! Get starting date & time
NYMDb = GET_NYMDb()
NHMSb = GET_NHMSb()
! Replace any date/time tokens in the file names
CALL EXPAND_DATE( DFILE, NYMDb, NHMSb )
CALL EXPAND_DATE( TFILE, NYMDb, NHMSb )
!=================================================================
! Allocate module arrays
!=================================================================
ALLOCATE( OFFSET( MAXCAT ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'OFFSET' )
OFFSET = 0
ALLOCATE( CATEGORY( MAXCAT ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'CATEGORY' )
CATEGORY = ''
ALLOCATE( DESCRIPT( MAXCAT ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'DESCRIPT' )
DESCRIPT = ''
ALLOCATE( NTRAC( MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'NTRAC' )
NTRAC = 0
ALLOCATE( INDEX( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'INDEX' )
INDEX = 0
ALLOCATE( MOLC( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'MOLC' )
MOLC = 0
ALLOCATE( MWT( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'MWT' )
MWT = 0.0
ALLOCATE( SCALE( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'SCALE' )
SCALE = 0.0
ALLOCATE( NAME( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'NAME' )
NAME = ''
ALLOCATE( FNAME( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'FNAME' )
FNAME = ''
ALLOCATE( UNIT( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'UNIT' )
UNIT = ''
! adj_group: define arrays for adjoint output (dkh, 02/08/10)
ALLOCATE( NTRAC_ADJ( MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'NTRAC_ADJ' )
NTRAC_ADJ = 0
ALLOCATE( INDEX_ADJ( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'INDEX_ADJ' )
INDEX_ADJ = 0
ALLOCATE( NAME_ADJ( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'NAME_ADJ' )
NAME_ADJ = ''
ALLOCATE( FNAME_ADJ( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'FNAME_ADJ' )
FNAME_ADJ = ''
ALLOCATE( UNIT_ADJ( MAXTRACER, MAXDIAG ), STAT=AS )
IF ( AS /= 0 ) CALL ALLOC_ERR( 'UNIT_ADJ' )
UNIT_ADJ = ''
!=================================================================
! Initialize arrays for "diaginfo.dat" & "tracerinfo.dat" files
!=================================================================
! Initialize arrays for "diaginfo.dat"
CALL INIT_DIAGINFO
! Initialize arrays for "tracerinfo.dat"
CALL INIT_TRACERINFO
! Return to calling program
END SUBROUTINE INIT_GAMAP
!------------------------------------------------------------------------------
SUBROUTINE CLEANUP_GAMAP
!
!******************************************************************************
! Subroutine CLEANUP_GAMAP deallocates all module arrays (bmy, 4/25/05)
!
! NOTES:
!******************************************************************************
!
!===================================================================
! CLEANUP_GAMAP begins here!
!===================================================================
IF ( ALLOCATED( CATEGORY ) ) DEALLOCATE( CATEGORY )
IF ( ALLOCATED( DESCRIPT ) ) DEALLOCATE( DESCRIPT )
IF ( ALLOCATED( FNAME ) ) DEALLOCATE( FNAME )
IF ( ALLOCATED( INDEX ) ) DEALLOCATE( INDEX )
IF ( ALLOCATED( MOLC ) ) DEALLOCATE( MOLC )
IF ( ALLOCATED( MWT ) ) DEALLOCATE( MWT )
IF ( ALLOCATED( NAME ) ) DEALLOCATE( NAME )
IF ( ALLOCATED( NTRAC ) ) DEALLOCATE( NTRAC )
IF ( ALLOCATED( OFFSET ) ) DEALLOCATE( OFFSET )
IF ( ALLOCATED( SCALE ) ) DEALLOCATE( SCALE )
IF ( ALLOCATED( UNIT ) ) DEALLOCATE( UNIT )
! adj_group (dkh, 02/09/10)
IF ( ALLOCATED( FNAME_ADJ) ) DEALLOCATE( FNAME_ADJ)
IF ( ALLOCATED( INDEX_ADJ) ) DEALLOCATE( INDEX_ADJ)
IF ( ALLOCATED( NAME_ADJ ) ) DEALLOCATE( NAME_ADJ )
IF ( ALLOCATED( NTRAC_ADJ) ) DEALLOCATE( NTRAC_ADJ)
IF ( ALLOCATED( UNIT_ADJ ) ) DEALLOCATE( UNIT_ADJ )
! Return to calling program
END SUBROUTINE CLEANUP_GAMAP
!------------------------------------------------------------------------------
! End of module
END MODULE GAMAP_MOD