! $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