Add files via upload
This commit is contained in:
185
code/benchmark_mod.f
Normal file
185
code/benchmark_mod.f
Normal file
@ -0,0 +1,185 @@
|
||||
! $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
|
Reference in New Issue
Block a user