186 lines
7.4 KiB
Fortran
186 lines
7.4 KiB
Fortran
! $Id: benchmark_mod.f,v 1.1 2009/06/09 21:51:54 daven Exp $
|
|
MODULE BENCHMARK_MOD
|
|
!
|
|
!******************************************************************************
|
|
! Module BENCHMARK_MOD contains routines to save out initial and final
|
|
! tracer masses which are needed for GEOS-CHEM benchmark diagnostics.
|
|
! (bmy, 7/20/04, 10/3/05)
|
|
!
|
|
! Module Variables:
|
|
! ============================================================================
|
|
! (1 ) INITIAL_FILE (CHAR*255) : Name of file w/ initial tracer mass
|
|
! (2 ) FINAL_FILE (CHAR*255) : Name of file w/ final tracer mass
|
|
!
|
|
! Module Routines:
|
|
! ============================================================================
|
|
! (1 ) STDRUN : Saves initial or final tracer mass to bpch file format
|
|
!
|
|
! GEOS-CHEM modules referenced by biomass_mod.f
|
|
! ============================================================================
|
|
! (1 ) bpch2_mod.f : Module containing routines for binary punch file I/O
|
|
! (2 ) file_mod.f : Contains file unit numbers and error checks
|
|
! (3 ) logical_mod.f : Module containing GEOS-CHEM logical switches
|
|
! (4 ) time_mod.f : Module containing routines for computing time & date
|
|
! (5 ) tracer_mod.f : Module containing GEOS-CHEM tracer array STT etc.
|
|
! (6 ) tracerid_mod.f : Module containing pointers to tracers & emissions
|
|
!
|
|
! NOTES:
|
|
! (1 ) Now expand date & time tokens in filenames (bmy, 1/31/05)
|
|
! (2 ) Now modified for GCAP grid (swu, bmy, 6/28/05)
|
|
! (3 ) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
|
|
!******************************************************************************
|
|
!
|
|
IMPLICIT NONE
|
|
|
|
!=================================================================
|
|
! MODULE VARIABLES
|
|
!=================================================================
|
|
CHARACTER(LEN=255) :: INITIAL_FILE
|
|
CHARACTER(LEN=255) :: FINAL_FILE
|
|
|
|
!=================================================================
|
|
! MODULE ROUTINES -- Follow below the "CONTAINS" statement
|
|
!=================================================================
|
|
CONTAINS
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE STDRUN( LBEGIN )
|
|
!
|
|
!******************************************************************************
|
|
! Subroutine STDRUN dumps the mass of either Ox [kg] or 222Rn, 210Pb, and 7Be
|
|
! [kg] at the start & end of each run. This is necessary for GEOS-CHEM
|
|
! benchmarking. (bmy, 8/12/02, 10/3/05)
|
|
!
|
|
! Arguments as Input:
|
|
! ============================================================================
|
|
! (1 ) LBEGIN (LOGICAL) : TRUE denotes beginning of the run;
|
|
! FALSE denotes the end of the run
|
|
!
|
|
! NOTES:
|
|
! (1 ) Changed name from STDRUN_Ox to STDRUN, since we now can also save out
|
|
! Rn/Pb/Be for NSRCX==1. Also deleted obsolete code from 6/02. Added
|
|
! LBEGIN as an argument to determine if this is the start or end of the
|
|
! run. (bmy, 8/12/02)
|
|
! (2 ) Bundled into "benchmark_mod.f" (bmy, 7/20/04)
|
|
! (3 ) Now expand date tokens in the filename (bmy, 1/31/05)
|
|
! (4 ) Now call GET_HALFPOLAR from "bpch2_mod.f" to get the HALFPOLAR flag
|
|
! value for GEOS or GCAP grids . Also removed references to CMN_DIAG
|
|
! and TRCOFFSET. (bmy, 6/28/05)
|
|
! (5 ) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
|
|
!******************************************************************************
|
|
!
|
|
! References to F90 modules
|
|
USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_WRITE, BPCH2
|
|
USE BPCH2_MOD, ONLY : GET_HALFPOLAR, GET_MODELNAME
|
|
USE FILE_MOD, ONLY : IU_FILE, IOERROR
|
|
USE TIME_MOD, ONLY : EXPAND_DATE, GET_NYMD
|
|
USE TIME_MOD, ONLY : GET_NHMS, GET_TAU
|
|
USE TRACER_MOD, ONLY : ITS_A_FULLCHEM_SIM, ITS_A_RnPbBe_SIM
|
|
USE TRACER_MOD, ONLY : STT, N_TRACERS
|
|
USE TRACERID_MOD, ONLY : IDTOX
|
|
|
|
# include "CMN_SIZE" ! Size parameters
|
|
|
|
! Arguments
|
|
LOGICAL, INTENT(IN) :: LBEGIN
|
|
|
|
! Local variables
|
|
INTEGER :: N, NYMD, NHMS
|
|
INTEGER, PARAMETER :: IFIRST=1, JFIRST=1, LFIRST=1
|
|
INTEGER, PARAMETER :: CENTER180=1
|
|
INTEGER :: HALFPOLAR
|
|
REAL*4 :: ARRAY(IIPAR,JJPAR,LLPAR)
|
|
REAL*4 :: LONRES, LATRES
|
|
REAL*8 :: TAU
|
|
CHARACTER(LEN=20) :: MODELNAME
|
|
CHARACTER(LEN=40) :: CATEGORY, RESERVED, UNIT
|
|
CHARACTER(LEN=80) :: TITLE
|
|
CHARACTER(LEN=255) :: FILENAME
|
|
|
|
!=================================================================
|
|
! STDRUN begins here!
|
|
!=================================================================
|
|
|
|
! Return if we are not doing either a radon or fullchem stdrun
|
|
IF ( ( .not. ITS_A_FULLCHEM_SIM() ) .and.
|
|
& ( .not. ITS_A_RnPbBe_SIM() ) ) RETURN
|
|
|
|
! Define variables for binary punch file
|
|
MODELNAME = GET_MODELNAME()
|
|
HALFPOLAR = GET_HALFPOLAR()
|
|
CATEGORY = 'TCMASS-$'
|
|
UNIT = 'kg'
|
|
RESERVED = ''
|
|
LONRES = DISIZE
|
|
LATRES = DJSIZE
|
|
NYMD = GET_NYMD()
|
|
NHMS = GET_NHMS()
|
|
TAU = GET_TAU()
|
|
|
|
! Define filename for beginning or end of benchmark run
|
|
IF ( LBEGIN ) THEN
|
|
TITLE = 'GEOS-CHEM Benchmark: Initial Tracer Mass'
|
|
FILENAME = INITIAL_FILE
|
|
ELSE
|
|
TITLE = 'GEOS-CHEM Benchmark: Final Tracer Mass'
|
|
FILENAME = FINAL_FILE
|
|
ENDIF
|
|
|
|
! Expand any date tokens in the filename
|
|
CALL EXPAND_DATE( FILENAME, NYMD, NHMS )
|
|
|
|
!=================================================================
|
|
! Save the mass of 222Rn, 210Pb, 7Be to a file
|
|
!=================================================================
|
|
IF ( ITS_A_RnPbBE_SIM() ) THEN
|
|
|
|
! Open binary punch file for writing
|
|
CALL OPEN_BPCH2_FOR_WRITE( IU_FILE, FILENAME, TITLE )
|
|
|
|
! Loop over tracers
|
|
DO N = 1, N_TRACERS
|
|
|
|
! Save Rn, Pb, Be as REAL*4
|
|
ARRAY(:,:,:) = STT(:,:,:,N)
|
|
|
|
! Write Rn, Pb, Be to binary punch file
|
|
CALL BPCH2( IU_FILE, MODELNAME, LONRES, LATRES,
|
|
& HALFPOLAR, CENTER180, CATEGORY, N,
|
|
& UNIT, TAU, TAU, RESERVED,
|
|
& IIPAR, JJPAR, LLPAR, IFIRST,
|
|
& JFIRST, LFIRST, ARRAY(:,:,:) )
|
|
|
|
ENDDO
|
|
|
|
!=================================================================
|
|
! Save the mass of Ox to a file
|
|
!=================================================================
|
|
ELSE IF ( ITS_A_FULLCHEM_SIM() .and. IDTOX > 0 ) THEN
|
|
|
|
! Open binary punch file for writing
|
|
CALL OPEN_BPCH2_FOR_WRITE( IU_FILE, FILENAME, TITLE )
|
|
|
|
! Save Ox as REAL*4
|
|
ARRAY(:,:,:) = STT(:,:,:,IDTOX)
|
|
|
|
! Write Ox to binary punch file
|
|
CALL BPCH2( IU_FILE, MODELNAME, LONRES, LATRES,
|
|
& HALFPOLAR, CENTER180, CATEGORY, IDTOX,
|
|
& UNIT, GET_TAU(), GET_TAU(), RESERVED,
|
|
& IIPAR, JJPAR, LLPAR, IFIRST,
|
|
& JFIRST, LFIRST, ARRAY(:,:,:) )
|
|
|
|
ENDIF
|
|
|
|
! Close file
|
|
CLOSE( IU_FILE )
|
|
|
|
! Return to MAIN program
|
|
END SUBROUTINE STDRUN
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
! End of module
|
|
END MODULE BENCHMARK_MOD
|