Files
GEOS-Chem-adjoint-v35-note/code/adjoint/checkpoint_mod.f
2018-08-28 00:33:48 -04:00

8485 lines
336 KiB
Fortran

! $Id: checkpoint_mod.f,v 1.6 2012/03/01 22:00:26 daven Exp $
MODULE CHECKPOINT_MOD
!
!******************************************************************************
! Module CHECKPOINT_MOD contains variables and routines which are used to read
! and write GEOS-CHEM restart files, which contain tracer concentrations
! in [v/v] mixing ratio. (bmy, 6/25/02, 12/16/05)
!
! Module Variables:
! ============================================================================
! (1 ) INPUT_CHECKPOINT_FILE : Full path name of the restart file to be read
! (2 ) OUTPUT_CHECKPOINT_FILE : Full path name (w/ tokens!) of output file
!
! Module Routines:
! ============================================================================
! (1 ) MAKE_CHECKPOINT_FILE : Writes restart file to disk
! (2 ) READ_CHECKPOINT_FILE : Reads restart file from disk
! (3 ) CONVERT_TRACER_TO_VV : Converts from [ppbv], [ppmv], etc to [v/v]
! (4 ) CHECK_DIMENSIONS : Ensures that restart file contains global data
! (5 ) COPY_STT : Converts [v/v] to [kg] and stores in STT
! (6 ) CHECK_DATA_BLOCKS : Makes sure we have read in data for each tracer
! (7 ) SET_CHECKPOINT : Gets restart filenames from "input_mod.f"
!
! GEOS-CHEM modules referenced by restart_mod.f
! ============================================================================
! (1 ) bpch2_mod.f : Module w/ routines for binary punch file I/O
! (2 ) error_mod.f : Module w/ NaN and other error check routines
! (3 ) file_mod.f : Module w/ file unit numbers and error checks
! (4 ) grid_mod.f : Module w/ horizontal grid information
! (5 ) logical_mod.f : Module w/ GEOS-CHEM logical switches
! (6 ) time_mod.f : Module w/ routines for computing time & date
! (7 ) tracer_mod.f : Module w/ GEOS-CHEM tracer array STT etc.
!
! NOTES:
! (1 ) Moved routines "make_restart_file.f"" and "read_restart_file.f" into
! this module. Also now internal routines to "read_restart_file.f"
! are now a part of this module. Now reference "file_mod.f" to get
! file unit numbers and error checking routines. (bmy, 6/25/02)
! (2 ) Now reference AD from "dao_mod.f". Now reference "error_mod.f".
! Also added minor bug fix for ALPHA platform. (bmy, 10/15/02)
! (3 ) Now references "grid_mod.f" and the new "time_mod.f" (bmy, 2/11/03)
! (4 ) Added error-check and cosmetic changes (bmy, 4/29/03)
! (5 ) Removed call to COPY_STT_FOR_OX, it's obsolete (bmy, 8/18/03)
! (6 ) Add fancy output (bmy, 4/26/04)
! (7 ) Added routine SET_CHECKPOINT. Now reference "logical_mod.f" and
! "tracer_mod.f" (bmy, 7/20/04)
! (8 ) Removed obsolete routines TRUE_TRACER_INDEX and COPY_DATA_FOR_CO_OH
! (bmy, 6/28/05)
! (9 ) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
! (10) Now pass TAU via the arg list in MAKE_CHECKPOINT_FILE (bmy, 12/15/05)
!******************************************************************************
!
IMPLICIT NONE
!=================================================================
! MODULE VARIABLES
!=================================================================
CHARACTER(LEN=255) :: INPUT_CHECKPOINT_FILE
CHARACTER(LEN=255) :: OUTPUT_CHECKPOINT_FILE
!=================================================================
! MODULE ROUTINES -- follow below the "CONTAINS" statement
!=================================================================
CONTAINS
!------------------------------------------------------------------------------
SUBROUTINE MAKE_CONVECTION_CHKFILE( YYYYMMDD, HHMMSS, TAU )
!
!******************************************************************************
! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
!
! Arguments as Input:
! ============================================================================
! (1 ) YYYYMMDD : Year-Month-Date
! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
!
! NOTES:
! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
! Y2K compliant string for all data sets. (bmy, 6/22/00)
! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
! BPCH2, and GET_MODELNAME for writing data to binary punch files.
! (bmy, 6/22/00)
! (3 ) Now do not write more than NTRACE data blocks to disk.
! Also updated comments. (bmy, 7/17/00)
! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
! restart file. (bmy, 6/24/02)
! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
! Now references function GET_TAU from "time_mod.f". Now added a call
! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
! (8 ) Cosmetic changes (bmy, 4/29/03)
! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
! remove hardwired output restart filename. Now references LPRT
! from "logical_mod.f". (bmy, 7/20/04)
! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
! grids. (bmy, 6/28/05)
! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
! (12) Add TAU to the argument list (bmy, 12/16/05)
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
USE DAO_MOD, ONLY : AD
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FILE_MOD, ONLY : IU_RST, IOERROR
USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
USE LOGICAL_MOD, ONLY : LPRT
USE TIME_MOD, ONLY : EXPAND_DATE
USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
REAL*8, INTENT(IN) :: TAU
! Local Variables
INTEGER :: I, I0, IOS, J, J0, L, N
INTEGER :: YYYY, MM, DD, HH, SS
REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
CHARACTER(LEN=255) :: FILENAME
! For binary punch file, version 2.0
REAL*4 :: LONRES, LATRES
INTEGER :: HALFPOLAR
INTEGER, PARAMETER :: CENTER180 = 1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED = ''
CHARACTER(LEN=80) :: TITLE
CHARACTER*10 :: SUFFIX1
CHARACTER*1 :: SUFFIX2(4)
INTEGER :: T,MULT,IT,LT
REAL*8, PARAMETER :: SMALLNUM = 1d-12
!=================================================================
! MAKE_CHECKPOINT_FILE begins here!
!=================================================================
WRITE (SUFFIX1,'(I8)')YYYYMMDD
T = HHMMSS/100
DO IT = 1, 4
LT = T-(T/10)*10
WRITE (SUFFIX2(4-IT+1),'(I1)')LT
T = T/10
END DO
OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
& //TRIM('CONV_CHK.')//TRIM(SUFFIX1)//TRIM('.')
& //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
& //TRIM(SUFFIX2(4))
! Define variables for BINARY PUNCH FILE OUTPUT
TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
& 'Instantaneous Tracer Concentrations (v/v)'
UNIT = 'v/v'
CATEGORY = 'IJ-AVG-$'
LONRES = DISIZE
LATRES = DJSIZE
! Call GET_MODELNAME to return the proper model name for
! the given met data being used (bmy, 6/22/00)
MODELNAME = GET_MODELNAME()
! Call GET_HALFPOLAR to return the proper value
! for either GCAP or GEOS grids (bmy, 6/28/05)
HALFPOLAR = GET_HALFPOLAR()
! Get the nested-grid offsets
I0 = GET_XOFFSET( GLOBAL=.TRUE. )
J0 = GET_YOFFSET( GLOBAL=.TRUE. )
!=================================================================
! Open the restart file for output -- binary punch format
!=================================================================
! Copy the output restart file name into a local variable
FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
! Open restart file for output
CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
!=================================================================
! Write each tracer to the restart file
!=================================================================
DO N = 1, N_TRACERS
! Convert from [kg] to [v/v] and store in the TRACER array
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J, L )
DO L = 1, LLPAR
DO J = 1, JJPAR
DO I = 1, IIPAR
TRACER(I,J,L) = STT(I,J,L,N) * TCVV(N) / AD(I,J,L)
ENDDO
ENDDO
ENDDO
!$OMP END PARALLEL DO
! Convert STT from [kg] to [v/v] mixing ratio
! and store in temporary variable TRACER
CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
& HALFPOLAR, CENTER180, CATEGORY, N,
& UNIT, TAU, TAU, RESERVED,
& IIPAR, JJPAR, LLPAR, I0+1,
& J0+1, 1, TRACER )
ENDDO
! Close file
CLOSE( IU_RST )
!### Debug
IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
! Return to calling program
END SUBROUTINE MAKE_CONVECTION_CHKFILE
!------------------------------------------------------------------------------
SUBROUTINE READ_CONVECTION_CHKFILE( YYYYMMDD, HHMMSS )
!
!******************************************************************************
! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
!
! Arguments as input:
! ============================================================================
! (1 ) YYYYMMDD : Year-Month-Day
! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
!
! NOTES:
! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
! Also reorganize some print statements (bmy, 10/25/99)
! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
! Y2K compliant string for all data sets. (bmy, 6/22/00)
! (5 ) Broke up sections of code into internal subroutines. Also updated
! comments & cleaned up a few things. (bmy, 7/17/00)
! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
! (10) Added updates from amf for tagged Ox run. Also updated comments
! and made some cosmetic changes (bmy, 7/3/01)
! (11) Bug fix: if starting from multiox restart file, then NTRACER
! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
! accordingly. (amf, bmy, 9/6/01)
! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
! (13) Updated comments (bmy, 1/25/02)
! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
! (17) Add fancy output string (bmy, 4/26/04)
! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
! and "tracer_mod.f" (bmy, 7/20/04)
! (19) Remove code for obsolete CO-OH simulation. Also remove references
! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
! (bmy, 6/24/05)
! (20) Updated comments (bmy, 12/16/05)
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
USE DAO_MOD, ONLY : AD
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FILE_MOD, ONLY : IU_RST, IOERROR
USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
USE TIME_MOD, ONLY : EXPAND_DATE
USE TRACER_MOD, ONLY : N_TRACERS, STT
USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
! Local Variables
INTEGER :: I, IOS, J, L, N
INTEGER :: NCOUNT(NNPAR)
REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
REAL*8 :: SUMTC
CHARACTER(LEN=255) :: FILENAME
! For binary punch file, version 2.0
INTEGER :: NI, NJ, NL
INTEGER :: IFIRST, JFIRST, LFIRST
INTEGER :: NTRACER, NSKIP
INTEGER :: HALFPOLAR, CENTER180
REAL*4 :: LONRES, LATRES
REAL*8 :: ZTAU0, ZTAU1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED
CHARACTER*10 :: SUFFIX1
CHARACTER*1 :: SUFFIX2(4)
INTEGER :: T,MULT,IT,LT
!=================================================================
! READ_CHECKPOINT_FILE begins here!
!=================================================================
! Initialize some variables
NCOUNT(:) = 0
TRACER(:,:,:) = 0e0
!=================================================================
! Open restart file and read top-of-file header
!=================================================================
WRITE (SUFFIX1,'(I8)')YYYYMMDD
T = HHMMSS/100
DO IT = 1, 4
LT = T-(T/10)*10
WRITE (SUFFIX2(4-IT+1),'(I1)')LT
T = T/10
END DO
INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
& //TRIM('CONV_CHK.')//TRIM(SUFFIX1)//TRIM('.')
& //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
& //TRIM(SUFFIX2(4))
! Copy input file name to a local variable
FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
! Echo some input to the screen
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
! Open the binary punch file for input
CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
! Echo more output
WRITE( 6, 110 )
110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
& /, '(in volume mixing ratio units: v/v)' )
!=================================================================
! Read concentrations -- store in the TRACER array
!=================================================================
DO
READ( IU_RST, IOSTAT=IOS )
& MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
! IOS < 0 is end-of-file, so exit
IF ( IOS < 0 ) EXIT
! IOS > 0 is a real I/O error -- print error message
IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:4' )
READ( IU_RST, IOSTAT=IOS )
& CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
& NI, NJ, NL, IFIRST, JFIRST, LFIRST,
& NSKIP
IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
READ( IU_RST, IOSTAT=IOS )
& ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
!==============================================================
! Assign data from the TRACER array to the STT array.
!==============================================================
! Only process concentration data (i.e. mixing ratio)
IF ( CATEGORY(1:8) == 'IJ-AVG-$' ) THEN
! Convert TRACER from [v/v] to [kg] and copy into STT array
CALL COPY_STT( NTRACER, TRACER, NCOUNT )
ENDIF
ENDDO
!=================================================================
! Examine data blocks, print totals, and return
!=================================================================
! Check for missing or duplicate data blocks
CALL CHECK_DATA_BLOCKS( N_TRACERS, NCOUNT )
! Close file
CLOSE( IU_RST )
! Print totals atmospheric mass for each tracer
WRITE( 6, 120 )
120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
! Fancy output
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
!### Debug
IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
! Return to calling program
END SUBROUTINE READ_CONVECTION_CHKFILE
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_CHEMISTRY_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CHK, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Convert from [kg] to [v/v] and store in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Convert STT from [kg] to [v/v] mixing ratio
c$$$ ! and store in temporary variable TRACER
c$$$ CALL BPCH2_CHK( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_CHEMISTRY_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
SUBROUTINE READ_CHEMISTRY_CHKFILE( YYYYMMDD, HHMMSS )
!
!******************************************************************************
! Subroutine READ_CHEMISTRY_CHKFILE (ks, ???)
!
! Arguments as input:
! ============================================================================
! (1 ) YYYYMMDD : Year-Month-Day
! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
!
! NOTES:
! (1 ) Based on READ_RESTART_FILE
! (2 ) Updated for v8 adjoint (mak, dkh, 06/23/09)
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
USE DAO_MOD, ONLY : AD
USE DIRECTORY_ADJ_MOD,ONLY : ADJTMP_DIR
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FILE_MOD, ONLY : IU_RST, IOERROR
USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
USE TIME_MOD, ONLY : EXPAND_DATE
USE TRACER_MOD, ONLY : N_TRACERS, STT
USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
! Local Variables
INTEGER :: I, IOS, J, L, N
INTEGER :: NCOUNT(NNPAR)
REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
REAL*8 :: SUMTC
CHARACTER(LEN=255) :: FILENAME
! For binary punch file, version 2.0
INTEGER :: NI, NJ, NL
INTEGER :: IFIRST, JFIRST, LFIRST
INTEGER :: NTRACER, NSKIP
INTEGER :: HALFPOLAR, CENTER180
REAL*4 :: LONRES, LATRES
REAL*8 :: ZTAU0, ZTAU1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED
CHARACTER*10 :: SUFFIX1
CHARACTER*1 :: SUFFIX2(4)
INTEGER :: T,MULT,IT,LT
!=================================================================
! READ_CHEMISTRY_CHKFILE begins here!
!=================================================================
! Initialize some variables
NCOUNT(:) = 0
TRACER(:,:,:) = 0e0
!=================================================================
! Open restart file and read top-of-file header
!=================================================================
! Use EXPAND_DATE instead of this (dkh, 06/23/09)
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
! & //TRIM('CHEM_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
INPUT_CHECKPOINT_FILE = TRIM('CHECK_CHK.YYYYMMDD.hhmm')
! Copy input file name to a local variable
FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
FILENAME = TRIM( ADJTMP_DIR )
& // TRIM( FILENAME )
! Echo some input to the screen
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
WRITE( 6, '(a,/)' ) 'C H E C K P O I N T F I L E I N P U T'
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( 'READ_CHEMISTRY_CHKFILE: Reading ', a )
! Open the binary punch file for input
CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
! Echo more output
WRITE( 6, 110 )
110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
& /, '(in volume mixing ratio units: v/v)' )
!=================================================================
! Read concentrations -- store in the TRACER array
!=================================================================
DO
READ( IU_RST, IOSTAT=IOS )
& MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
! IOS < 0 is end-of-file, so exit
IF ( IOS < 0 ) EXIT
! IOS > 0 is a real I/O error -- print error message
IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_chemistry_chk:4')
READ( IU_RST, IOSTAT=IOS )
& CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
& NI, NJ, NL, IFIRST, JFIRST, LFIRST,
& NSKIP
IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'readchemistry_chk:5')
READ( IU_RST, IOSTAT=IOS )
& ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
!-------------------------------------------
! *****TESTING CHECKPOINTING*****
!-------------------------------------------
!PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'readchemistry_chk:6')
!==============================================================
! Assign data from the TRACER array to the STT array.
!==============================================================
CALL COPY_STT( NTRACER, TRACER, NCOUNT )
ENDDO
!=================================================================
! Examine data blocks, print totals, and return
!=================================================================
! Check for missing or duplicate data blocks
CALL CHECK_DATA_BLOCKS( N_TRACERS, NCOUNT )
! Close file
CLOSE( IU_RST )
! Print totals atmospheric mass for each tracer
WRITE( 6, 120 )
120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
! Fancy output
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
!### Debug
IF ( LPRT )
& CALL DEBUG_MSG('### READ_CHEMISTRY_CHKFILE: read file')
! Return to calling program
END SUBROUTINE READ_CHEMISTRY_CHKFILE
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_CHEMISTRY_CHKFILE_CSP1( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CSP, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$ USE COMODE_MOD, ONLY : CSPEC
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$# include "comode.h"
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ INTEGER :: JLOOP,JJ, KK
c$$$ REAL*4 :: TRACER(ITLOOP,IGAS)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_CSP1.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ !PRINT*,'ITLOOP, IGAS = ',ITLOOP,IGAS
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J )
c$$$ DO J = 1, IGAS
c$$$ DO I = 1, ITLOOP
c$$$ ! Compute tracer concentration [molec/cm3/box] by
c$$$ ! looping over all species belonging to this tracer
c$$$ TRACER(I,J) = CSPEC(I,J)
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$
c$$$ CALL BPCH2_CSP( IU_RST, ITLOOP, IGAS, TRACER )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_CHEMISTRY_CHKFILE_CSP1
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_CHEMISTRY_CHKFILE_CSP1( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
c$$$! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
c$$$! Also reorganize some print statements (bmy, 10/25/99)
c$$$! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
c$$$! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
c$$$! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (5 ) Broke up sections of code into internal subroutines. Also updated
c$$$! comments & cleaned up a few things. (bmy, 7/17/00)
c$$$! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
c$$$! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
c$$$! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
c$$$! (10) Added updates from amf for tagged Ox run. Also updated comments
c$$$! and made some cosmetic changes (bmy, 7/3/01)
c$$$! (11) Bug fix: if starting from multiox restart file, then NTRACER
c$$$! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
c$$$! accordingly. (amf, bmy, 9/6/01)
c$$$! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
c$$$! (13) Updated comments (bmy, 1/25/02)
c$$$! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
c$$$! (17) Add fancy output string (bmy, 4/26/04)
c$$$! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
c$$$! and "tracer_mod.f" (bmy, 7/20/04)
c$$$! (19) Remove code for obsolete CO-OH simulation. Also remove references
c$$$! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
c$$$! (bmy, 6/24/05)
c$$$! (20) Updated comments (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$ USE COMODE_MOD, ONLY : CSPEC, JLOP
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$# include "comode.h"
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ REAL*4 :: TRACER(ITLOOP,IGAS)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_CSP1.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & NI, NJ
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( TRACER(I,J), I=1,ITLOOP ), J=1,IGAS )
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$ !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J )
c$$$ DO J = 1, IGAS
c$$$ DO I = 1, ITLOOP
c$$$ ! Compute tracer concentration [molec/cm3/box] by
c$$$ ! looping over all species belonging to this tracer
c$$$ CSPEC(I,J) = TRACER(I,J)
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_CHEMISTRY_CHKFILE_CSP1
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_CHEMISTRY_CHKFILE_CSP2( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CSP, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$ USE COMODE_MOD, ONLY : CSPEC
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$# include "comode.h"
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ INTEGER :: JLOOP,JJ, KK
c$$$ REAL*4 :: TRACER(ITLOOP,IGAS)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_CSP2.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ !PRINT*,'ITLOOP, IGAS = ',ITLOOP,IGAS
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J )
c$$$ DO J = 1, IGAS
c$$$ DO I = 1, ITLOOP
c$$$ ! Compute tracer concentration [molec/cm3/box] by
c$$$ ! looping over all species belonging to this tracer
c$$$ TRACER(I,J) = CSPEC(I,J)
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$
c$$$ CALL BPCH2_CSP( IU_RST, ITLOOP, IGAS, TRACER )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_CHEMISTRY_CHKFILE_CSP2
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_CHEMISTRY_CHKFILE_CSP2( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
c$$$! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
c$$$! Also reorganize some print statements (bmy, 10/25/99)
c$$$! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
c$$$! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
c$$$! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (5 ) Broke up sections of code into internal subroutines. Also updated
c$$$! comments & cleaned up a few things. (bmy, 7/17/00)
c$$$! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
c$$$! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
c$$$! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
c$$$! (10) Added updates from amf for tagged Ox run. Also updated comments
c$$$! and made some cosmetic changes (bmy, 7/3/01)
c$$$! (11) Bug fix: if starting from multiox restart file, then NTRACER
c$$$! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
c$$$! accordingly. (amf, bmy, 9/6/01)
c$$$! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
c$$$! (13) Updated comments (bmy, 1/25/02)
c$$$! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
c$$$! (17) Add fancy output string (bmy, 4/26/04)
c$$$! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
c$$$! and "tracer_mod.f" (bmy, 7/20/04)
c$$$! (19) Remove code for obsolete CO-OH simulation. Also remove references
c$$$! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
c$$$! (bmy, 6/24/05)
c$$$! (20) Updated comments (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$ USE COMODE_MOD, ONLY : CSPEC, JLOP
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$# include "comode.h"
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ REAL*4 :: TRACER(ITLOOP,IGAS)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_CSP2.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & NI, NJ
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( TRACER(I,J), I=1,ITLOOP ), J=1,IGAS )
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$ !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J )
c$$$ DO J = 1, IGAS
c$$$ DO I = 1, ITLOOP
c$$$ ! Compute tracer concentration [molec/cm3/box] by
c$$$ ! looping over all species belonging to this tracer
c$$$ CSPEC(I,J) = TRACER(I,J)
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_CHEMISTRY_CHKFILE_CSP2
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE CONVERT_TRACER_TO_VV( NTRACER, TRACER, UNIT )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine CONVERT_TRACER_TO_VV converts the TRACER array from its
c$$$! natural units (e.g. ppbv, ppmv) as read from the restart file to v/v
c$$$! mixing ratio. (bmy, 6/25/02, 6/24/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) NTRACER (INTEGER) : Tracer number
c$$$! (2 ) TRACER (REAL*4 ) : Array containing tracer concentrations
c$$$! (3 ) UNIT (CHARACTER) : Unit of tracer as read in from restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Added to "restart_mod.f". Can now also convert from ppm or ppmv
c$$$! to v/v mixing ratio. (bmy, 6/25/02)
c$$$! (2 ) Now reference GEOS_CHEM_STOP from "error_mod.f", which frees all
c$$$! allocated memory before stopping the run. (bmy, 10/15/02)
c$$$! (3 ) Remove obsolete reference to CMN (bmy, 6/24/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE CHARPAK_MOD, ONLY : TRANUC
c$$$ USE ERROR_MOD, ONLY : GEOS_CHEM_STOP
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: NTRACER
c$$$ REAL*8, INTENT(INOUT) :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=*), INTENT(IN) :: UNIT
c$$$
c$$$ !=================================================================
c$$$ ! CONVERT_TRACER_TO_VV begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Convert UNIT to uppercase
c$$$ CALL TRANUC( UNIT )
c$$$
c$$$ ! Convert from the current unit to v/v
c$$$ SELECT CASE ( TRIM( UNIT ) )
c$$$
c$$$ CASE ( '', 'V/V' )
c$$$ ! Do nothing, TRACER is already in v/v
c$$$
c$$$ CASE ( 'PPM', 'PPMV', 'PPMC' )
c$$$ TRACER = TRACER * 1d-6
c$$$
c$$$ CASE ( 'PPB', 'PPBV', 'PPBC' )
c$$$ TRACER = TRACER * 1d-9
c$$$
c$$$ CASE ( 'PPT', 'PPTV', 'PPTC' )
c$$$ TRACER = TRACER * 1d-12
c$$$
c$$$ CASE DEFAULT
c$$$ WRITE( 6, '(a)' ) 'Incompatible units in punch file!'
c$$$ WRITE( 6, '(a)' ) 'STOP in CONVERT_TRACER_TO_VV'
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ CALL GEOS_CHEM_STOP
c$$$
c$$$ END SELECT
c$$$
c$$$ ! Print the min & max of each tracer as it is read from the file
c$$$ WRITE( 6, 110 ) NTRACER, MINVAL( TRACER ), MAXVAL( TRACER )
c$$$ 110 FORMAT( 'Tracer ', i3, ': Min = ', es12.5, ' Max = ', es12.5 )
c$$$
c$$$ ! Return to READ_CHECKPOINT_FILE
c$$$ END SUBROUTINE CONVERT_TRACER_TO_VV
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE CHECK_DIMENSIONS( NI, NJ, NL )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine CHECK_DIMENSIONS makes sure that the dimensions of the
c$$$! restart file extend to cover the entire grid. (bmy, 6/25/02, 10/15/02)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) NI (INTEGER) : Number of longitudes read from restart file
c$$$! (2 ) NJ (INTEGER) : Number of latitudes read from restart file
c$$$! (3 ) NL (INTEGER) : Numbef of levels read from restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Added to "restart_mod.f". Now no longer allow initialization with
c$$$! less than a globally-sized data block. (bmy, 6/25/02)
c$$$! (2 ) Now reference GEOS_CHEM_STOP from "error_mod.f", which frees all
c$$$! allocated memory before stopping the run. (bmy, 10/15/02)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE ERROR_MOD, ONLY : GEOS_CHEM_STOP
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: NI, NJ, NL
c$$$
c$$$# include "CMN_SIZE"
c$$$
c$$$ !=================================================================
c$$$ ! CHECK_DIMENSIONS begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Error check longitude dimension: NI must equal IIPAR
c$$$ IF ( NI /= IIPAR ) THEN
c$$$ WRITE( 6, '(a)' ) 'ERROR reading in restart file!'
c$$$ WRITE( 6, '(a)' ) 'Wrong number of longitudes encountered!'
c$$$ WRITE( 6, '(a)' ) 'STOP in CHECK_DIMENSIONS (restart_mod.f)'
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ CALL GEOS_CHEM_STOP
c$$$ ENDIF
c$$$
c$$$ ! Error check latitude dimension: NJ must equal JJPAR
c$$$ IF ( NJ /= JJPAR ) THEN
c$$$ WRITE( 6, '(a)' ) 'ERROR reading in restart file!'
c$$$ WRITE( 6, '(a)' ) 'Wrong number of latitudes encountered!'
c$$$ WRITE( 6, '(a)' ) 'STOP in CHECK_DIMENSIONS (restart_mod.f)'
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ CALL GEOS_CHEM_STOP
c$$$ ENDIF
c$$$
c$$$ ! Error check vertical dimension: NL must equal LLPAR
c$$$ IF ( NL /= LLPAR ) THEN
c$$$ WRITE( 6, '(a)' ) 'ERROR reading in restart file!'
c$$$ WRITE( 6, '(a)' ) 'Wrong number of levels encountered!'
c$$$ WRITE( 6, '(a)' ) 'STOP in CHECK_DIMENSIONS (restart_mod.f)'
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ CALL GEOS_CHEM_STOP
c$$$ ENDIF
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE CHECK_DIMENSIONS
c$$$
!------------------------------------------------------------------------------
SUBROUTINE COPY_STT( NTRACER, TRACER, NCOUNT )
!
!******************************************************************************
! Subroutine COPY_STT copies the results into the STT tracer array.
! (Kumaresh, 01/24/08)
!
! Arguments as Input:
! ============================================================================
! (1 ) NTRACER (INTEGER) : Tracer number
! (2 ) NCOUNT (INTEGER) : Ctr array - # of data blocks read for each tracer
! (3 ) TRACER (REAL*4 ) : Tracer concentrations from restart file [v/v]
!
! NOTES:
! (1 ) Added to "restart_mod.f". Also added parallel loops. (bmy, 6/25/02)
! (2 ) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
! (3 ) Now exit if N is out of range (bmy, 4/29/03)
! (4 ) Now references N_TRACERS, STT & TCVV from "tracer_mod.f" (bmy, 7/20/04)
! (5 ) Remove call to TRUE_TRACER_INDEX (bmy, 6/24/05)
!******************************************************************************
!
! References to F90 modules
USE DAO_MOD, ONLY : AD
USE TRACER_MOD, ONLY : N_TRACERS, STT, TCVV
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: NTRACER
REAL*4, INTENT(IN) :: TRACER(IIPAR,JJPAR,LLPAR)
INTEGER, INTENT(INOUT) :: NCOUNT(NNPAR)
! Local variables
INTEGER :: I, J, L, N
!=================================================================
! COPY_STT begins here!
!=================================================================
! Tracer number
N = NTRACER
! Exit if N is out of range
IF ( N < 1 .or. N > N_TRACERS ) RETURN
! store Tracers into GEOS-CHEM tracer arry
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J, L )
DO L = 1, LLPAR
DO J = 1, JJPAR
DO I = 1, IIPAR
STT(I,J,L,N) = TRACER(I,J,L) * AD(I,J,L) / TCVV(N)
ENDDO
ENDDO
ENDDO
!$OMP END PARALLEL DO
! Increment the # of records found for tracer N
NCOUNT(N) = NCOUNT(N) + 1
END SUBROUTINE COPY_STT
!------------------------------------------------------------------------------
SUBROUTINE COPY_STT_TMP( NTRACER, TRACER, NCOUNT )
!
!******************************************************************************
! Subroutine COPY_STT copies the results into the STT tracer array.
! (Kumaresh, 01/24/08)
!
! Arguments as Input:
! ============================================================================
! (1 ) NTRACER (INTEGER) : Tracer number
! (2 ) NCOUNT (INTEGER) : Ctr array - # of data blocks read for each tracer
! (3 ) TRACER (REAL*4 ) : Tracer concentrations from restart file [v/v]
!
! NOTES:
! (1 ) Added to "restart_mod.f". Also added parallel loops. (bmy, 6/25/02)
! (2 ) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
! (3 ) Now exit if N is out of range (bmy, 4/29/03)
! (4 ) Now references N_TRACERS, STT & TCVV from "tracer_mod.f" (bmy, 7/20/04)
! (5 ) Remove call to TRUE_TRACER_INDEX (bmy, 6/24/05)
!******************************************************************************
!
! References to F90 modules
USE DAO_MOD, ONLY : AD
USE TRACER_MOD, ONLY : N_TRACERS, STT_TMP, TCVV
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: NTRACER
REAL*4, INTENT(IN) :: TRACER(IIPAR,JJPAR,LLPAR)
INTEGER, INTENT(INOUT) :: NCOUNT(NNPAR)
! Local variables
INTEGER :: I, J, L, N
!=================================================================
! COPY_STT begins here!
!=================================================================
! Tracer number
N = NTRACER
! Exit if N is out of range
IF ( N < 1 .or. N > N_TRACERS ) RETURN
! store Tracers into GEOS-CHEM tracer arry
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J, L )
DO L = 1, LLPAR
DO J = 1, JJPAR
DO I = 1, IIPAR
STT_TMP(I,J,L,N) = TRACER(I,J,L)
ENDDO
ENDDO
ENDDO
!$OMP END PARALLEL DO
! Increment the # of records found for tracer N
NCOUNT(N) = NCOUNT(N) + 1
END SUBROUTINE COPY_STT_TMP
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE COPY_STT_ADJ( NTRACER, TRACER, NCOUNT )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine COPY_STT_ADJ converts tracer concetrations copies the results into
c$$$! the STT_ADJ tracer array. (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) NTRACER (INTEGER) : Tracer number
c$$$! (2 ) NCOUNT (INTEGER) : Ctr array - # of data blocks read for each tracer
c$$$! (3 ) TRACER (REAL*4 ) : Tracer concentrations from restart file [v/v]
c$$$!
c$$$! NOTES:
c$$$! (1 ) Added to "restart_mod.f". Also added parallel loops. (bmy, 6/25/02)
c$$$! (2 ) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (3 ) Now exit if N is out of range (bmy, 4/29/03)
c$$$! (4 ) Now references N_TRACERS, STT & TCVV from "tracer_mod.f" (bmy, 7/20/04)
c$$$! (5 ) Remove call to TRUE_TRACER_INDEX (bmy, 6/24/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT_ADJ, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: NTRACER
c$$$ REAL*8, INTENT(IN) :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ INTEGER, INTENT(INOUT) :: NCOUNT(NNPAR)
c$$$
c$$$ ! Local variables
c$$$ INTEGER :: I, J, L, N
c$$$
c$$$ !=================================================================
c$$$ ! COPY_STT_ADJ begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Tracer number
c$$$ N = NTRACER
c$$$
c$$$ ! Exit if N is out of range
c$$$ IF ( N < 1 .or. N > N_TRACERS ) RETURN
c$$$
c$$$ ! Store Tracer values in GEOS-CHEM tracers
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ STT_ADJ(I,J,L,N) = TRACER(I,J,L) !* AD(I,J,L) / TCVV(N)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Increment the # of records found for tracer N
c$$$ NCOUNT(N) = NCOUNT(N) + 1
c$$$
c$$$ END SUBROUTINE COPY_STT_ADJ
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE COPY_F( NTRACER, TRACER, NCOUNT )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine COPY_STT copies the results into the STT tracer array.
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) NTRACER (INTEGER) : Tracer number
c$$$! (2 ) NCOUNT (INTEGER) : Ctr array - # of data blocks read for each tracer
c$$$! (3 ) TRACER (REAL*4 ) : Tracer concentrations from restart file [v/v]
c$$$!
c$$$! NOTES:
c$$$! (1 ) Added to "restart_mod.f". Also added parallel loops. (bmy, 6/25/02)
c$$$! (2 ) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (3 ) Now exit if N is out of range (bmy, 4/29/03)
c$$$! (4 ) Now references N_TRACERS, STT & TCVV from "tracer_mod.f" (bmy, 7/20/04)
c$$$! (5 ) Remove call to TRUE_TRACER_INDEX (bmy, 6/24/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, F, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: NTRACER
c$$$ REAL*8, INTENT(IN) :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ INTEGER, INTENT(INOUT) :: NCOUNT(NNPAR)
c$$$
c$$$ ! Local variables
c$$$ INTEGER :: I, J, L, N
c$$$
c$$$ !=================================================================
c$$$ ! COPY_STT begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Tracer number
c$$$ N = NTRACER
c$$$
c$$$ ! Exit if N is out of range
c$$$ IF ( N < 1 .or. N > N_TRACERS ) RETURN
c$$$
c$$$ ! store Tracers into GEOS-CHEM tracer arry
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ F(I,J,L,N) = TRACER(I,J,L) !* AD(I,J,L) / TCVV(N)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Increment the # of records found for tracer N
c$$$ NCOUNT(N) = NCOUNT(N) + 1
c$$$
c$$$ END SUBROUTINE COPY_F
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_RRATE_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CSP, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$ USE COMODE_MOD, ONLY : R_KPP
c$$$ USE gckpp_Global, ONLY : NTT, IND
c$$$ USE gckpp_Parameters
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ INTEGER :: JLOOP,JJ, KK
c$$$ REAL*4 :: TRACER(NTT,NREACT)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('RRATE_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ !PRINT*,'ITLOOP, IGAS = ',ITLOOP,IGAS
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J )
c$$$ DO J = 1, NREACT
c$$$ DO I = 1, NTT
c$$$ ! Compute tracer concentration [molec/cm3/box] by
c$$$ ! looping over all species belonging to this tracer
c$$$ TRACER(I,J) = R_KPP(I,IND(J))
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$
c$$$ CALL BPCH2_CSP( IU_RST, NTT, NREACT, TRACER )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_RRATE_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_RRATE_CHKFILE( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
c$$$! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
c$$$! Also reorganize some print statements (bmy, 10/25/99)
c$$$! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
c$$$! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
c$$$! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (5 ) Broke up sections of code into internal subroutines. Also updated
c$$$! comments & cleaned up a few things. (bmy, 7/17/00)
c$$$! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
c$$$! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
c$$$! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
c$$$! (10) Added updates from amf for tagged Ox run. Also updated comments
c$$$! and made some cosmetic changes (bmy, 7/3/01)
c$$$! (11) Bug fix: if starting from multiox restart file, then NTRACER
c$$$! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
c$$$! accordingly. (amf, bmy, 9/6/01)
c$$$! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
c$$$! (13) Updated comments (bmy, 1/25/02)
c$$$! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
c$$$! (17) Add fancy output string (bmy, 4/26/04)
c$$$! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
c$$$! and "tracer_mod.f" (bmy, 7/20/04)
c$$$! (19) Remove code for obsolete CO-OH simulation. Also remove references
c$$$! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
c$$$! (bmy, 6/24/05)
c$$$! (20) Updated comments (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$ USE COMODE_MOD, ONLY : R_KPP
c$$$ USE gckpp_Global
c$$$ USE gckpp_Parameters
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ REAL*4 :: TRACER(NTT,NREACT)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: II, JJ
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('RRATE_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & II, JJ
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( TRACER(I,J), I=1,NTT ), J=1,NREACT )
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$ !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J )
c$$$ DO J = 1, NREACT
c$$$ DO I = 1, NTT
c$$$ ! Compute tracer concentration [molec/cm3/box] by
c$$$ ! looping over all species belonging to this tracer
c$$$ R_KPP(I,IND(J)) = TRACER(I,J)
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_RRATE_CHKFILE
c$$$
!------------------------------------------------------------------------------
SUBROUTINE CHECK_DATA_BLOCKS( NTRACE, NCOUNT )
!
!******************************************************************************
! Subroutine CHECK_DATA_BLOCKS checks to see if we have multiple or
! missing data blocks for a given tracer. (bmy, 6/25/02, 10/15/02)
!
! Arguments as Input:
! ============================================================================
! (1 ) NTRACE (INTEGER) : Number of tracers
! (2 ) NCOUNT (INTEGER) : Ctr array - # of data blocks found per tracer
!
! NOTES:
! (1 ) Added to "restart_mod.f". Also now use F90 intrinsic REPEAT to
! write a long line of "="'s to the screen. (bmy, 6/25/02)
! (2 ) Now reference GEOS_CHEM_STOP from "error_mod.f", which frees all
! allocated memory before stopping the run. (bmy, 10/15/02)
!******************************************************************************
!
! References to F90 modules
USE ERROR_MOD, ONLY : GEOS_CHEM_STOP
USE LOGICAL_MOD, ONLY : LLINOZ
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: NTRACE, NCOUNT(NNPAR)
! Local variables
INTEGER :: N
!=================================================================
! CHECK_DATA_BLOCKS begins here!
!=================================================================
! Loop over all tracers
DO N = 1, NTRACE
! Stop if a tracer has more than one data block
IF ( NCOUNT(N) > 1 ) THEN
WRITE( 6, 100 ) N
WRITE( 6, 120 )
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
CALL GEOS_CHEM_STOP
ENDIF
! Stop if a tracer has no data blocks
IF ( NCOUNT(N) == 0 ) THEN
WRITE( 6, 110 ) N
WRITE( 6, 120 )
WRITE( 6, '(a)' ) REPEAT( '=', 79 )
CALL GEOS_CHEM_STOP
ENDIF
ENDDO
! FORMAT statements
100 FORMAT( 'More than one record found for tracer : ', i4 )
110 FORMAT( 'No records found for tracer : ', i4 )
120 FORMAT( 'STOP in CHECK_DATA_BLOCKS (checkpoint_mod.f)' )
! Return to calling program
END SUBROUTINE CHECK_DATA_BLOCKS
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_ADJOINT_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT_ADJ, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ REAL*8, PARAMETER :: SMALLOX = 1d-6
c$$$ REAL*8, PARAMETER :: SMALLNOX = 1d-8
c$$$ REAL*8, PARAMETER :: SMALLCO = 1d-9
c$$$
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('ADJ.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_ADJ_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Convert from [kg] to [v/v] and store in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT_ADJ(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$c$$$ IF(N==1)THEN
c$$$c$$$ IF(STT_ADJ(I,J,L,N).ne.0d0) THEN
c$$$c$$$ IF( STT_ADJ(I,J,L,N) < SMALLNOX )THEN
c$$$c$$$ TRACER(I,J,L) = 0d0
c$$$c$$$ ENDIF
c$$$c$$$ ENDIF
c$$$c$$$ ELSEIF(N==2)THEN
c$$$c$$$ IF(STT_ADJ(I,J,L,N).ne.0d0) THEN
c$$$c$$$ IF( STT_ADJ(I,J,L,N) < SMALLOX )THEN
c$$$c$$$ TRACER(I,J,L) = 0d0
c$$$c$$$ ENDIF
c$$$c$$$ ENDIF
c$$$c$$$ ELSE
c$$$c$$$ IF(STT_ADJ(I,J,L,N).ne.0d0) THEN
c$$$c$$$ IF( STT_ADJ(I,J,L,N) < SMALLCO )THEN
c$$$c$$$ TRACER(I,J,L) = 0d0
c$$$c$$$ ENDIF
c$$$c$$$ ENDIF
c$$$c$$$ ENDIF
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Convert STT from [kg] to [v/v] mixing ratio
c$$$ ! and store in temporary variable TRACER
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_ADJOINT_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_CHEMISTRY_CHKFILE_P( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHEMISTRY_CHKFILE_P creates GEOS-CHEM restart files of tracers
c$$$! in binary punch file format for perturbed chemistry concentrations.
c$$$! (Kumaresh, 01/24/08)
c$$$
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CHK, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_P.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Store GEOS-CHEM tracers in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2_CHK( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_CHEMISTRY_CHKFILE_P
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_CHEMISTRY_CHKFILE_P( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHEMISTRY_CHKFILE_P initializes GEOS-CHEM tracer concentrations
c$$$! from a binary punch file for perturbed chemistry concentrations.
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_P.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ DO
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
c$$$
c$$$ ! IOS < 0 is end-of-file, so exit
c$$$ IF ( IOS < 0 ) EXIT
c$$$
c$$$ ! IOS > 0 is a real I/O error -- print error message
c$$$ IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:4' )
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
c$$$ & NI, NJ, NL, IFIRST, JFIRST, LFIRST,
c$$$ & NSKIP
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$ !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$ CALL COPY_STT( NTRACER, TRACER, NCOUNT )
c$$$
c$$$ ENDDO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Check for missing or duplicate data blocks
c$$$ CALL CHECK_DATA_BLOCKS( N_TRACERS, NCOUNT )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_CHEMISTRY_CHKFILE_P
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_CHEMISTRY_CHKFILE_P1( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHEMISTRY_CHKFILE_P1 creates GEOS-CHEM restart files of tracers
c$$$! in binary punch file format for chemistry checkpoints of type1 information.
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CHK, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_P1.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Store GEOS-CHEM tracers in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2_CHK( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_CHEMISTRY_CHKFILE_P1
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_CHEMISTRY_CHKFILE_P1( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHEMISTRY_CHKFILE_P1 initializes GEOS-CHEM tracer concentrations
c$$$! from a binary punch file for chemistry checkpoints of type1 informations.
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_P1.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ DO
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
c$$$
c$$$ ! IOS < 0 is end-of-file, so exit
c$$$ IF ( IOS < 0 ) EXIT
c$$$
c$$$ ! IOS > 0 is a real I/O error -- print error message
c$$$ IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:4' )
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
c$$$ & NI, NJ, NL, IFIRST, JFIRST, LFIRST,
c$$$ & NSKIP
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$ CALL COPY_STT( NTRACER, TRACER, NCOUNT )
c$$$
c$$$ ENDDO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Check for missing or duplicate data blocks
c$$$ CALL CHECK_DATA_BLOCKS( N_TRACERS, NCOUNT )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_CHEMISTRY_CHKFILE_P1
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_HSAVE_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_HSAVE_CHKFILE creates GEOS-CHEM restart files of KPP chemistry
c$$$! step size in binary punch file format. (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE COMODE_MOD, ONLY : IXSAVE, IYSAVE, IZSAVE, HSAVE_KPP
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$ USE GCKPP_Global
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS, JJLOOP
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('HSAVE_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ N = 1
c$$$
c$$$ ! Store KPP Chemistry step size in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( JJLOOP )
c$$$ DO JJLOOP = 1,NTT
c$$$ I = IXSAVE(JJLOOP)
c$$$ J = IYSAVE(JJLOOP)
c$$$ L = IZSAVE(JJLOOP)
c$$$ TRACER(I,J,L) = HSAVE_KPP(I,J,L)
c$$$ END DO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_HSAVE_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_HSAVE_CHKFILE( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_HSAVE_CHKFILE initializes GEOS-CHEM tracer concentrations
c$$$! from a binary punch file with KPP chemistry step size. (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$ USE GCKPP_Global
c$$$ USE COMODE_MOD, ONLY : IXSAVE, IYSAVE, IZSAVE, HSAVE_KPP
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR), JJLOOP
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('HSAVE_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
c$$$
c$$$ ! IOS > 0 is a real I/O error -- print error message
c$$$ IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:4' )
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
c$$$ & NI, NJJ, NL, IFIRST, JFIRST, LFIRST,
c$$$ & NSKIP
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJJ ), L=1,NL )
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( JJLOOP )
c$$$ DO JJLOOP = 1,NTT
c$$$ I = IXSAVE(JJLOOP)
c$$$ J = IYSAVE(JJLOOP)
c$$$ L = IZSAVE(JJLOOP)
c$$$ HSAVE_KPP(I,J,L) = TRACER(I,J,L) !* TCVV(N) / AD(I,J,L)
c$$$ END DO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_HSAVE_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_PART_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_HSAVE_CHKFILE creates GEOS-CHEM restart files of KPP chemistry
c$$$! step size in binary punch file format. (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE COMODE_MOD, ONLY : IXSAVE, IYSAVE, IZSAVE, PART_CASE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$ USE GCKPP_Global
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS, JJLOOP
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('PART_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ N = 1
c$$$
c$$$ ! Store KPP Chemistry step size in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( JJLOOP )
c$$$ DO JJLOOP = 1,NTT
c$$$ I = IXSAVE(JJLOOP)
c$$$ J = IYSAVE(JJLOOP)
c$$$ L = IZSAVE(JJLOOP)
c$$$ TRACER(I,J,L) = PART_CASE(JJLOOP)
c$$$ END DO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_PART_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_PART_CHKFILE( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_HSAVE_CHKFILE initializes GEOS-CHEM tracer concentrations
c$$$! from a binary punch file with KPP chemistry step size. (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$ USE GCKPP_Global
c$$$ USE COMODE_MOD, ONLY : IXSAVE, IYSAVE, IZSAVE, PART_CASE
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR), JJLOOP
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('PART_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
c$$$
c$$$ ! IOS > 0 is a real I/O error -- print error message
c$$$ IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:4' )
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
c$$$ & NI, NJJ, NL, IFIRST, JFIRST, LFIRST,
c$$$ & NSKIP
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJJ ), L=1,NL )
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( JJLOOP )
c$$$ DO JJLOOP = 1,NTT
c$$$ I = IXSAVE(JJLOOP)
c$$$ J = IYSAVE(JJLOOP)
c$$$ L = IZSAVE(JJLOOP)
c$$$ PART_CASE(JJLOOP) = TRACER(I,J,L) !* TCVV(N) / AD(I,J,L)
c$$$ END DO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_PART_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_CHEMISTRY_CHKFILE_P2( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHEMISTRY_CHKFILE_P3 creates GEOS-CHEM restart files of tracers
c$$$! in binary punch file format. Used to checkpoint tracers for type2 information
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_P2.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Store GEOS-CHEM tracers in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_CHEMISTRY_CHKFILE_P2
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_CHEMISTRY_CHKFILE_P3( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHEMISTRY_CHKFILE_P3 creates GEOS-CHEM restart files of tracers
c$$$! in binary punch file format. Used to checkpoint tracers for type3 information
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CHEM_CHK_P3.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! store GEOS-CHEM tracer in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_CHEMISTRY_CHKFILE_P3
c$$$
!------------------------------------------------------------------------------
SUBROUTINE MAKE_PRESSURE_CHKFILE( YYYYMMDD, HHMMSS, TAU )
!
!******************************************************************************
! Subroutine MAKE_PRESSURE_CHKFILE make pressure checkpoint file.
! Originally from v7 adj (ks), updated (dkh, 03/07/10)
!
! Based on fwd model code MAKE_RESTART_FILE
!
! Arguments as Input:
! ============================================================================
! (1 ) YYYYMMDD : Year-Month-Date
! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
!
! NOTES:
! (1 )
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
USE DAO_MOD, ONLY : AD
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FILE_MOD, ONLY : IU_RST, IOERROR
USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
USE LOGICAL_MOD, ONLY : LPRT
USE TIME_MOD, ONLY : EXPAND_DATE, GET_TAU
USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV, TMP_PRESS
USE DIRECTORY_ADJ_MOD, ONLY : ADJTMP_DIR
# include "CMN_SIZE" ! Size parameters
# include "comode.h"
! Arguments
INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
REAL*8, INTENT(IN) :: TAU
! Local Variables
INTEGER :: I, I0, IOS, J, J0, L, N
INTEGER :: YYYY, MM, DD, HH, SS
INTEGER :: JLOOP,JJ, KK
REAL*4 :: TRACER(IIPAR,JJPAR,1)
CHARACTER(LEN=255) :: FILENAME
! For binary punch file, version 2.0
REAL*4 :: LONRES, LATRES
INTEGER :: HALFPOLAR
INTEGER, PARAMETER :: CENTER180 = 1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED = ''
CHARACTER(LEN=80) :: TITLE
CHARACTER*10 :: SUFFIX1
CHARACTER*1 :: SUFFIX2(4)
INTEGER :: T,MULT,IT,LT
!=================================================================
! MAKE_PRESSURE_CHKFILE begins here!
!=================================================================
! v7 adj kludge
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
! & //TRIM('PRESS_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
OUTPUT_CHECKPOINT_FILE = TRIM('press.chk.YYYYMMDD.hhmm')
! Define variables for BINARY PUNCH FILE OUTPUT
TITLE = 'GEOS-CHEM CHECKPOINT File: '
CATEGORY = 'IJ-CHK-$'
LONRES = DISIZE
LATRES = DJSIZE
! Call GET_MODELNAME to return the proper model name for
! the given met data being used (bmy, 6/22/00)
MODELNAME = GET_MODELNAME()
UNIT = 'hPa'
! Get the nested-grid offsets
I0 = GET_XOFFSET( GLOBAL=.TRUE. )
J0 = GET_YOFFSET( GLOBAL=.TRUE. )
!=================================================================
! Open the restart file for output -- binary punch format
!=================================================================
! Copy the output restart file name into a local variable
FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
FILENAME = TRIM( ADJTMP_DIR ) // TRIM( FILENAME )
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( ' - MAKE_PRESSURE_CHKFILE: Writing ', a )
! Open restart file for output
CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
!=================================================================
! Write each tracer to the restart file
!=================================================================
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J )
DO J = 1, JJPAR
DO I = 1, IIPAR
! Compute tracer concentration [molec/cm3/box] by
! looping over all species belonging to this tracer
TRACER(I,J,1) = TMP_PRESS(I,J)
ENDDO
ENDDO
!$OMP END PARALLEL DO
CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
& HALFPOLAR, CENTER180, CATEGORY, 1,
& UNIT, GET_TAU(), GET_TAU(), RESERVED,
& IIPAR, JJPAR, 1, I0+1,
& J0+1, 1, TRACER )
! Close file
CLOSE( IU_RST )
!### Debug
IF ( LPRT )CALL DEBUG_MSG('### MAKE_PRESSURE_CHKFILE: wrote file')
! Return to calling program
END SUBROUTINE MAKE_PRESSURE_CHKFILE
!------------------------------------------------------------------------------
SUBROUTINE READ_PRESSURE_CHKFILE( YYYYMMDD, HHMMSS )
!
!******************************************************************************
! Subroutine READ_PRESSURE_CHKFILE reads PRESS_CHK files.
! (ks, 2008; dkh, 03/07/10)
!
! Based on READ_RESTART_FILE from fwd model
!
! Arguments as input:
! ============================================================================
! (1 ) YYYYMMDD : Year-Month-Day
! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
!
! NOTES:
! (1 ) Now remove files after they have been read (dkh, 05/02/10)
! (2 ) Now delete the press.chk.* files after reading (dkh, 05/02/10)
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
USE DAO_MOD, ONLY : AD
USE DIRECTORY_ADJ_MOD, ONLY : ADJTMP_DIR
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FILE_MOD, ONLY : IU_RST, IOERROR
USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
USE LOGICAL_ADJ_MOD, ONLY : LDEL_CHKPT
USE TIME_MOD, ONLY : EXPAND_DATE, GET_TAU
USE TRACER_MOD, ONLY : N_TRACERS, STT, TMP_PRESS
USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
USE COMODE_MOD, ONLY : JLOP
USE UNIX_CMDS_MOD, ONLY : REMOVE_CMD
# include "CMN_SIZE" ! Size parameters
# include "comode.h"
! Arguments
INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
! Local Variables
INTEGER :: I, IOS, J, L, N
INTEGER :: NCOUNT(NNPAR)
REAL*4 :: TRACER(IIPAR,JJPAR,1)
REAL*8 :: SUMTC
CHARACTER(LEN=255) :: FILENAME
CHARACTER(LEN=255) :: REMOVE_CHK_FILE_CMD
! For binary punch file, version 2.0
INTEGER :: NI, NJ, NL
INTEGER :: IFIRST, JFIRST, LFIRST
INTEGER :: NTRACER, NSKIP
INTEGER :: HALFPOLAR, CENTER180
REAL*4 :: LONRES, LATRES
REAL*8 :: ZTAU0, ZTAU1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED
CHARACTER*10 :: SUFFIX1
CHARACTER*1 :: SUFFIX2(4)
INTEGER :: T,MULT,IT,LT
!=================================================================
! READ_PRESSURE_CHKFILE begins here!
!=================================================================
! Initialize some variables
NCOUNT(:) = 0
TRACER(:,:,:) = 0e0
!=================================================================
! Open restart file and read top-of-file header
!=================================================================
! v7 adjoint kludge
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
! & //TRIM('PRESS_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
INPUT_CHECKPOINT_FILE = TRIM('press.chk.YYYYMMDD.hhmm')
! Copy input file name to a local variable
FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
! Echo some input to the screen
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
! Open the binary punch file for input
CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
! ! Echo more output
! WRITE( 6, 110 )
! 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
! & /, '(in volume mixing ratio units: v/v)' )
!=================================================================
! Read concentrations -- store in the TRACER array
!=================================================================
READ( IU_RST, IOSTAT=IOS )
& MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
! IOS > 0 is a real I/O error -- print error message
IF ( IOS > 0 )
& CALL IOERROR( IOS,IU_RST,'READ_PRESSURE_CHKFILE:4' )
READ( IU_RST, IOSTAT=IOS )
& CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
& NI, NJ, NL, IFIRST, JFIRST, LFIRST,
& NSKIP
IF ( IOS /= 0 )
& CALL IOERROR( IOS,IU_RST,'READ_PRESSURE_CHKFILE:5')
READ( IU_RST, IOSTAT=IOS )
& ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
IF ( IOS /= 0 )
& CALL IOERROR( IOS,IU_RST,'READ_PRESSURE_CHKFILE:6')
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J )
DO J = 1, JJPAR
DO I = 1, IIPAR
! Compute tracer concentration [molec/cm3/box] by
! looping over all species belonging to this tracer
TMP_PRESS(I,J) = TRACER(I,J,1)
ENDDO
ENDDO
!$OMP END PARALLEL DO
!=================================================================
! Examine data blocks, print totals, and return
!=================================================================
! Close file
CLOSE( IU_RST )
! Remove files if L_CHK_DEL = TRUE
IF ( LDEL_CHKPT ) THEN
REMOVE_CHK_FILE_CMD = TRIM ( REMOVE_CMD ) // ' ' //
& TRIM ( FILENAME )
CALL SYSTEM( TRIM( REMOVE_CHK_FILE_CMD ) )
WRITE( 6, 102 ) TRIM( REMOVE_CHK_FILE_CMD )
102 FORMAT( ' - READ_PRESSURE_CHKFILE: Executing: ',a )
ENDIF
!### Debug
IF ( LPRT ) CALL DEBUG_MSG('### READ_PRESSURE_CHKFILE: read file')
! Return to calling program
END SUBROUTINE READ_PRESSURE_CHKFILE
! now obsolete (dkh, 03/07/10)
!!------------------------------------------------------------------------------
!
! SUBROUTINE MAKE_FPBL_CHKFILE( YYYYMMDD, HHMMSS, TAU )
!!
!!******************************************************************************
!! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
!! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
!!
!! Arguments as Input:
!! ============================================================================
!! (1 ) YYYYMMDD : Year-Month-Date
!! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
!! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
!!
!! NOTES:
!! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
!! Y2K compliant string for all data sets. (bmy, 6/22/00)
!! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
!! BPCH2, and GET_MODELNAME for writing data to binary punch files.
!! (bmy, 6/22/00)
!! (3 ) Now do not write more than NTRACE data blocks to disk.
!! Also updated comments. (bmy, 7/17/00)
!! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
!! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
!! restart file. (bmy, 6/24/02)
!! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
!! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
!! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
!! Now references function GET_TAU from "time_mod.f". Now added a call
!! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
!! (8 ) Cosmetic changes (bmy, 4/29/03)
!! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
!! remove hardwired output restart filename. Now references LPRT
!! from "logical_mod.f". (bmy, 7/20/04)
!! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
!! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
!! grids. (bmy, 6/28/05)
!! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
!! (12) Add TAU to the argument list (bmy, 12/16/05)
!!******************************************************************************
!!
! ! References to F90 modules
! USE BPCH2_MOD, ONLY : BPCH2_CSP, GET_MODELNAME
! USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
! USE DAO_MOD, ONLY : AD
! USE ERROR_MOD, ONLY : DEBUG_MSG
! USE FILE_MOD, ONLY : IU_RST, IOERROR
! USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
! USE LOGICAL_MOD, ONLY : LPRT
! USE TIME_MOD, ONLY : EXPAND_DATE
! USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV, FP
!
!# include "CMN_SIZE" ! Size parameters
!# include "comode.h"
!
! ! Arguments
! INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
! REAL*8, INTENT(IN) :: TAU
!
! ! Local Variables
! INTEGER :: I, I0, IOS, J, J0, L, N
! INTEGER :: YYYY, MM, DD, HH, SS
! INTEGER :: JLOOP,JJ, KK
! REAL*4 :: TRACER(IIPAR,JJPAR)
! CHARACTER(LEN=255) :: FILENAME
!
! ! For binary punch file, version 2.0
! REAL*4 :: LONRES, LATRES
! INTEGER :: HALFPOLAR
! INTEGER, PARAMETER :: CENTER180 = 1
!
! CHARACTER(LEN=20) :: MODELNAME
! CHARACTER(LEN=40) :: CATEGORY
! CHARACTER(LEN=40) :: UNIT
! CHARACTER(LEN=40) :: RESERVED = ''
! CHARACTER(LEN=80) :: TITLE
! CHARACTER*10 :: SUFFIX1
! CHARACTER*1 :: SUFFIX2(4)
! INTEGER :: T,MULT,IT,LT
! !=================================================================
! ! MAKE_CHECKPOINT_FILE begins here!
! !=================================================================
!
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
! & //TRIM('FPBL_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
!
! !PRINT*,'ITLOOP, IGAS = ',ITLOOP,IGAS
!
! ! Define variables for BINARY PUNCH FILE OUTPUT
! TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
! & 'Instantaneous Tracer Concentrations (v/v)'
! !=================================================================
! ! Open the restart file for output -- binary punch format
! !=================================================================
!
! ! Copy the output restart file name into a local variable
! FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
!
! ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
! CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
!
! WRITE( 6, 100 ) TRIM( FILENAME )
! 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
!
! ! Open restart file for output
! CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
!
! !=================================================================
! ! Write each tracer to the restart file
! !=================================================================
!
!!$OMP PARALLEL DO
!!$OMP+DEFAULT( SHARED )
!!$OMP+PRIVATE( I, J )
! DO J = 1, JJPAR
! DO I = 1, IIPAR
! ! Compute tracer concentration [molec/cm3/box] by
! ! looping over all species belonging to this tracer
! TRACER(I,J) = FP(I,J)
! ENDDO
! ENDDO
!!$OMP END PARALLEL DO
!
! !-------------------------------------------
! ! *****TESTING CHECKPOINTING*****
! !-------------------------------------------
!
! CALL BPCH2_CSP( IU_RST, IIPAR, JJPAR, TRACER )
!
! ! Close file
! CLOSE( IU_RST )
!
! !### Debug
! IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
!
!
! ! Return to calling program
! END SUBROUTINE MAKE_FPBL_CHKFILE
!
!!------------------------------------------------------------------------------
!
! SUBROUTINE READ_FPBL_CHKFILE( YYYYMMDD, HHMMSS )
!!
!!******************************************************************************
!! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
!! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
!!
!! Arguments as input:
!! ============================================================================
!! (1 ) YYYYMMDD : Year-Month-Day
!! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
!!
!! NOTES:
!! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
!! Also reorganize some print statements (bmy, 10/25/99)
!! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
!! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
!! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
!! Y2K compliant string for all data sets. (bmy, 6/22/00)
!! (5 ) Broke up sections of code into internal subroutines. Also updated
!! comments & cleaned up a few things. (bmy, 7/17/00)
!! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
!! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
!! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
!! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
!! (10) Added updates from amf for tagged Ox run. Also updated comments
!! and made some cosmetic changes (bmy, 7/3/01)
!! (11) Bug fix: if starting from multiox restart file, then NTRACER
!! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
!! accordingly. (amf, bmy, 9/6/01)
!! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
!! (13) Updated comments (bmy, 1/25/02)
!! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
!! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
!! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
!! (17) Add fancy output string (bmy, 4/26/04)
!! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
!! and "tracer_mod.f" (bmy, 7/20/04)
!! (19) Remove code for obsolete CO-OH simulation. Also remove references
!! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
!! (bmy, 6/24/05)
!! (20) Updated comments (bmy, 12/16/05)
!!******************************************************************************
!!
! ! References to F90 modules
! USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
! USE DAO_MOD, ONLY : AD
! USE ERROR_MOD, ONLY : DEBUG_MSG
! USE FILE_MOD, ONLY : IU_RST, IOERROR
! USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
! USE TIME_MOD, ONLY : EXPAND_DATE
! USE TRACER_MOD, ONLY : N_TRACERS
! USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G, FP
! USE COMODE_MOD, ONLY : JLOP
!
!# include "CMN_SIZE" ! Size parameters
!# include "comode.h"
!
! ! Arguments
! INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
!
! ! Local Variables
! INTEGER :: I, IOS, J, L, N
! INTEGER :: NCOUNT(NNPAR)
! REAL*4 :: TRACER(IIPAR,JJPAR)
! REAL*8 :: SUMTC
! CHARACTER(LEN=255) :: FILENAME
!
! ! For binary punch file, version 2.0
! INTEGER :: NI, NJ, NL
! INTEGER :: IFIRST, JFIRST, LFIRST
! INTEGER :: NTRACER, NSKIP
! INTEGER :: HALFPOLAR, CENTER180
! REAL*4 :: LONRES, LATRES
! REAL*8 :: ZTAU0, ZTAU1
! CHARACTER(LEN=20) :: MODELNAME
! CHARACTER(LEN=40) :: CATEGORY
! CHARACTER(LEN=40) :: UNIT
! CHARACTER(LEN=40) :: RESERVED
! CHARACTER*10 :: SUFFIX1
! CHARACTER*1 :: SUFFIX2(4)
! INTEGER :: T,MULT,IT,LT
!
! !=================================================================
! ! READ_CHECKPOINT_FILE begins here!
! !=================================================================
!
! ! Initialize some variables
! NCOUNT(:) = 0
! TRACER(:,:) = 0e0
!
! !=================================================================
! ! Open restart file and read top-of-file header
! !=================================================================
!
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
! & //TRIM('FPBL_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
!
! ! Copy input file name to a local variable
! FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
!
! ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
! CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
!
! ! Echo some input to the screen
! WRITE( 6, '(a)' ) REPEAT( '=', 79 )
! WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
! WRITE( 6, 100 ) TRIM( FILENAME )
! 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
!
! ! Open the binary punch file for input
! CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
!
! ! Echo more output
! WRITE( 6, 110 )
! 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
! & /, '(in volume mixing ratio units: v/v)' )
!
! !=================================================================
! ! Read concentrations -- store in the TRACER array
! !=================================================================
!
! READ( IU_RST, IOSTAT=IOS )
! & NI, NJ
!
! IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
!
! READ( IU_RST, IOSTAT=IOS )
! & ( ( TRACER(I,J), I=1,IIPAR ), J=1,JJPAR )
!
! !-------------------------------------------
! ! *****TESTING CHECKPOINTING*****
! !-------------------------------------------
! !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
!
! IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
!
! !==============================================================
! ! Assign data from the TRACER array to the STT array.
! !==============================================================
!
!!$OMP PARALLEL DO
!!$OMP+DEFAULT( SHARED )
!!$OMP+PRIVATE( I, J )
! DO J = 1, JJPAR
! DO I = 1, IIPAR
! ! Compute tracer concentration [molec/cm3/box] by
! ! looping over all species belonging to this tracer
! FP(I,J) = TRACER(I,J)
! ENDDO
! ENDDO
!!$OMP END PARALLEL DO
!
! !=================================================================
! ! Examine data blocks, print totals, and return
! !=================================================================
!
! ! Close file
! CLOSE( IU_RST )
!
! ! Print totals atmospheric mass for each tracer
! WRITE( 6, 120 )
! 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
!
! ! Fancy output
! WRITE( 6, '(a)' ) REPEAT( '=', 79 )
!
! !### Debug
! IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
!
! ! Return to calling program
! END SUBROUTINE READ_FPBL_CHKFILE
!
!!------------------------------------------------------------------------------
!
! SUBROUTINE MAKE_IMIX_CHKFILE( YYYYMMDD, HHMMSS, TAU )
!!
!!******************************************************************************
!! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
!! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
!!
!! Arguments as Input:
!! ============================================================================
!! (1 ) YYYYMMDD : Year-Month-Date
!! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
!! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
!!
!! NOTES:
!! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
!! Y2K compliant string for all data sets. (bmy, 6/22/00)
!! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
!! BPCH2, and GET_MODELNAME for writing data to binary punch files.
!! (bmy, 6/22/00)
!! (3 ) Now do not write more than NTRACE data blocks to disk.
!! Also updated comments. (bmy, 7/17/00)
!! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
!! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
!! restart file. (bmy, 6/24/02)
!! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
!! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
!! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
!! Now references function GET_TAU from "time_mod.f". Now added a call
!! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
!! (8 ) Cosmetic changes (bmy, 4/29/03)
!! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
!! remove hardwired output restart filename. Now references LPRT
!! from "logical_mod.f". (bmy, 7/20/04)
!! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
!! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
!! grids. (bmy, 6/28/05)
!! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
!! (12) Add TAU to the argument list (bmy, 12/16/05)
!!******************************************************************************
!!
! ! References to F90 modules
! USE BPCH2_MOD, ONLY : BPCH2_INT, GET_MODELNAME
! USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
! USE DAO_MOD, ONLY : AD
! USE ERROR_MOD, ONLY : DEBUG_MSG
! USE FILE_MOD, ONLY : IU_RST, IOERROR
! USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
! USE LOGICAL_MOD, ONLY : LPRT
! USE TIME_MOD, ONLY : EXPAND_DATE
! USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV, IM
!
!# include "CMN_SIZE" ! Size parameters
!# include "comode.h"
!
! ! Arguments
! INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
! REAL*8, INTENT(IN) :: TAU
!
! ! Local Variables
! INTEGER :: I, I0, IOS, J, J0, L, N
! INTEGER :: YYYY, MM, DD, HH, SS
! INTEGER :: JLOOP,JJ, KK
! INTEGER :: TRACER(IIPAR,JJPAR)
! CHARACTER(LEN=255) :: FILENAME
!
! ! For binary punch file, version 2.0
! REAL*4 :: LONRES, LATRES
! INTEGER :: HALFPOLAR
! INTEGER, PARAMETER :: CENTER180 = 1
!
! CHARACTER(LEN=20) :: MODELNAME
! CHARACTER(LEN=40) :: CATEGORY
! CHARACTER(LEN=40) :: UNIT
! CHARACTER(LEN=40) :: RESERVED = ''
! CHARACTER(LEN=80) :: TITLE
! CHARACTER*10 :: SUFFIX1
! CHARACTER*1 :: SUFFIX2(4)
! INTEGER :: T,MULT,IT,LT
! !=================================================================
! ! MAKE_CHECKPOINT_FILE begins here!
! !=================================================================
!
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
! & //TRIM('IMIX_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
!
! !PRINT*,'ITLOOP, IGAS = ',ITLOOP,IGAS
!
! ! Define variables for BINARY PUNCH FILE OUTPUT
! TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
! & 'Instantaneous Tracer Concentrations (v/v)'
! !=================================================================
! ! Open the restart file for output -- binary punch format
! !=================================================================
!
! ! Copy the output restart file name into a local variable
! FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
!
! ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
! CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
!
! WRITE( 6, 100 ) TRIM( FILENAME )
! 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
!
! ! Open restart file for output
! CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
!
! !=================================================================
! ! Write each tracer to the restart file
! !=================================================================
!
!!$OMP PARALLEL DO
!!$OMP+DEFAULT( SHARED )
!!$OMP+PRIVATE( I, J )
! DO J = 1, JJPAR
! DO I = 1, IIPAR
! ! Compute tracer concentration [molec/cm3/box] by
! ! looping over all species belonging to this tracer
! TRACER(I,J) = IM(I,J)
! ENDDO
! ENDDO
!!$OMP END PARALLEL DO
!
! !-------------------------------------------
! ! *****TESTING CHECKPOINTING*****
! !-------------------------------------------
!
! CALL BPCH2_INT( IU_RST, IIPAR, JJPAR, TRACER )
!
! ! Close file
! CLOSE( IU_RST )
!
! !### Debug
! IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
!
!
! ! Return to calling program
! END SUBROUTINE MAKE_IMIX_CHKFILE
!
!!------------------------------------------------------------------------------
!
! SUBROUTINE READ_IMIX_CHKFILE( YYYYMMDD, HHMMSS )
!!
!!******************************************************************************
!! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
!! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
!!
!! Arguments as input:
!! ============================================================================
!! (1 ) YYYYMMDD : Year-Month-Day
!! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
!!
!! NOTES:
!! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
!! Also reorganize some print statements (bmy, 10/25/99)
!! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
!! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
!! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
!! Y2K compliant string for all data sets. (bmy, 6/22/00)
!! (5 ) Broke up sections of code into internal subroutines. Also updated
!! comments & cleaned up a few things. (bmy, 7/17/00)
!! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
!! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
!! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
!! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
!! (10) Added updates from amf for tagged Ox run. Also updated comments
!! and made some cosmetic changes (bmy, 7/3/01)
!! (11) Bug fix: if starting from multiox restart file, then NTRACER
!! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
!! accordingly. (amf, bmy, 9/6/01)
!! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
!! (13) Updated comments (bmy, 1/25/02)
!! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
!! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
!! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
!! (17) Add fancy output string (bmy, 4/26/04)
!! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
!! and "tracer_mod.f" (bmy, 7/20/04)
!! (19) Remove code for obsolete CO-OH simulation. Also remove references
!! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
!! (bmy, 6/24/05)
!! (20) Updated comments (bmy, 12/16/05)
!!******************************************************************************
!!
! ! References to F90 modules
! USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
! USE DAO_MOD, ONLY : AD
! USE ERROR_MOD, ONLY : DEBUG_MSG
! USE FILE_MOD, ONLY : IU_RST, IOERROR
! USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
! USE TIME_MOD, ONLY : EXPAND_DATE
! USE TRACER_MOD, ONLY : N_TRACERS
! USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G, IM
! USE COMODE_MOD, ONLY : JLOP
!
!# include "CMN_SIZE" ! Size parameters
!# include "comode.h"
!
! ! Arguments
! INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
!
! ! Local Variables
! INTEGER :: I, IOS, J, L, N
! INTEGER :: NCOUNT(NNPAR)
! INTEGER :: TRACER(IIPAR,JJPAR)
! REAL*8 :: SUMTC
! CHARACTER(LEN=255) :: FILENAME
!
! ! For binary punch file, version 2.0
! INTEGER :: NI, NJ, NL
! INTEGER :: IFIRST, JFIRST, LFIRST
! INTEGER :: NTRACER, NSKIP
! INTEGER :: HALFPOLAR, CENTER180
! REAL*4 :: LONRES, LATRES
! REAL*8 :: ZTAU0, ZTAU1
! CHARACTER(LEN=20) :: MODELNAME
! CHARACTER(LEN=40) :: CATEGORY
! CHARACTER(LEN=40) :: UNIT
! CHARACTER(LEN=40) :: RESERVED
! CHARACTER*10 :: SUFFIX1
! CHARACTER*1 :: SUFFIX2(4)
! INTEGER :: T,MULT,IT,LT
!
! !=================================================================
! ! READ_CHECKPOINT_FILE begins here!
! !=================================================================
!
! ! Initialize some variables
! NCOUNT(:) = 0
! TRACER(:,:) = 0
!
! !=================================================================
! ! Open restart file and read top-of-file header
! !=================================================================
!
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
! & //TRIM('IMIX_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
!
! ! Copy input file name to a local variable
! FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
!
! ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
! CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
!
! ! Echo some input to the screen
! WRITE( 6, '(a)' ) REPEAT( '=', 79 )
! WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
! WRITE( 6, 100 ) TRIM( FILENAME )
! 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
!
! ! Open the binary punch file for input
! CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
!
! ! Echo more output
! WRITE( 6, 110 )
! 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
! & /, '(in volume mixing ratio units: v/v)' )
!
! !=================================================================
! ! Read concentrations -- store in the TRACER array
! !=================================================================
!
! READ( IU_RST, IOSTAT=IOS )
! & NI, NJ
!
! IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
!
! READ( IU_RST, IOSTAT=IOS )
! & ( ( TRACER(I,J), I=1,IIPAR ), J=1,JJPAR )
!
! !-------------------------------------------
! ! *****TESTING CHECKPOINTING*****
! !-------------------------------------------
! !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
!
! IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
!
! !==============================================================
! ! Assign data from the TRACER array to the STT array.
! !==============================================================
!
!!$OMP PARALLEL DO
!!$OMP+DEFAULT( SHARED )
!!$OMP+PRIVATE( I, J )
! DO J = 1, JJPAR
! DO I = 1, IIPAR
! ! Compute tracer concentration [molec/cm3/box] by
! ! looping over all species belonging to this tracer
! IM(I,J) = TRACER(I,J)
! ENDDO
! ENDDO
!!$OMP END PARALLEL DO
!
! !=================================================================
! ! Examine data blocks, print totals, and return
! !=================================================================
!
! ! Close file
! CLOSE( IU_RST )
!
! ! Print totals atmospheric mass for each tracer
! WRITE( 6, 120 )
! 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
!
! ! Fancy output
! WRITE( 6, '(a)' ) REPEAT( '=', 79 )
!
! !### Debug
! IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
!
! ! Return to calling program
! END SUBROUTINE READ_IMIX_CHKFILE
!
!------------------------------------------------------------------------------
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_EMISRATE_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CSP, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$ USE COMODE_MOD, ONLY : EMIS_RATE
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$# include "comode.h"
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ INTEGER :: JLOOP,JJ, KK
c$$$ INTEGER, PARAMETER :: IND = 40
c$$$ REAL*4 :: TRACER(ITLOOP,IND)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('EMISRATE_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ !PRINT*,'ITLOOP, IGAS = ',ITLOOP,IGAS
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_EMISRATE_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J )
c$$$ DO J = 1, IND
c$$$ DO I = 1, ITLOOP
c$$$ ! Compute tracer concentration [molec/cm3/box] by
c$$$ ! looping over all species belonging to this tracer
c$$$ TRACER(I,J) = EMIS_RATE(I,J)
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$
c$$$ CALL BPCH2_CSP( IU_RST, ITLOOP, IND, TRACER )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_EMISRATE_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_EMISRATE_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_EMISRATE_CHKFILE( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
c$$$! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
c$$$! Also reorganize some print statements (bmy, 10/25/99)
c$$$! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
c$$$! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
c$$$! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (5 ) Broke up sections of code into internal subroutines. Also updated
c$$$! comments & cleaned up a few things. (bmy, 7/17/00)
c$$$! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
c$$$! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
c$$$! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
c$$$! (10) Added updates from amf for tagged Ox run. Also updated comments
c$$$! and made some cosmetic changes (bmy, 7/3/01)
c$$$! (11) Bug fix: if starting from multiox restart file, then NTRACER
c$$$! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
c$$$! accordingly. (amf, bmy, 9/6/01)
c$$$! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
c$$$! (13) Updated comments (bmy, 1/25/02)
c$$$! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
c$$$! (17) Add fancy output string (bmy, 4/26/04)
c$$$! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
c$$$! and "tracer_mod.f" (bmy, 7/20/04)
c$$$! (19) Remove code for obsolete CO-OH simulation. Also remove references
c$$$! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
c$$$! (bmy, 6/24/05)
c$$$! (20) Updated comments (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$ USE COMODE_MOD, ONLY : EMIS_RATE, JLOP
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$# include "comode.h"
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ INTEGER, PARAMETER :: IND = 40
c$$$ REAL*4 :: TRACER(ITLOOP,IND)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('EMISRATE_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_EMISRATE_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & NI, NJ
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( TRACER(I,J), I=1,ITLOOP ), J=1,IND )
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$ !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J )
c$$$ DO J = 1, IND
c$$$ DO I = 1, ITLOOP
c$$$ ! Compute tracer concentration [molec/cm3/box] by
c$$$ ! looping over all species belonging to this tracer
c$$$ EMIS_RATE(I,J) = TRACER(I,J)
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_EMISRATE_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_EMISRATE_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_F_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CHK, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : F, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ REAL*8, PARAMETER :: SMALLNUM = 1d-12
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('F_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Convert from [kg] to [v/v] and store in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = F(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Convert STT from [kg] to [v/v] mixing ratio
c$$$ ! and store in temporary variable TRACER
c$$$ CALL BPCH2_CHK( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_F_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_F_CHKFILE( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
c$$$! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
c$$$! Also reorganize some print statements (bmy, 10/25/99)
c$$$! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
c$$$! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
c$$$! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (5 ) Broke up sections of code into internal subroutines. Also updated
c$$$! comments & cleaned up a few things. (bmy, 7/17/00)
c$$$! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
c$$$! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
c$$$! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
c$$$! (10) Added updates from amf for tagged Ox run. Also updated comments
c$$$! and made some cosmetic changes (bmy, 7/3/01)
c$$$! (11) Bug fix: if starting from multiox restart file, then NTRACER
c$$$! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
c$$$! accordingly. (amf, bmy, 9/6/01)
c$$$! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
c$$$! (13) Updated comments (bmy, 1/25/02)
c$$$! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
c$$$! (17) Add fancy output string (bmy, 4/26/04)
c$$$! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
c$$$! and "tracer_mod.f" (bmy, 7/20/04)
c$$$! (19) Remove code for obsolete CO-OH simulation. Also remove references
c$$$! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
c$$$! (bmy, 6/24/05)
c$$$! (20) Updated comments (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, F
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('F_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$ DO
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
c$$$
c$$$ ! IOS < 0 is end-of-file, so exit
c$$$ IF ( IOS < 0 ) EXIT
c$$$
c$$$ ! IOS > 0 is a real I/O error -- print error message
c$$$ IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:4' )
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
c$$$ & NI, NJ, NL, IFIRST, JFIRST, LFIRST,
c$$$ & NSKIP
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$
c$$$ ! Only process concentration data (i.e. mixing ratio)
c$$$ IF ( CATEGORY(1:8) == 'IJ-AVG-$' ) THEN
c$$$
c$$$ ! Convert TRACER from [v/v] to [kg] and copy into STT array
c$$$ CALL COPY_F( NTRACER, TRACER, NCOUNT )
c$$$
c$$$ ENDIF
c$$$ ENDDO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Check for missing or duplicate data blocks
c$$$ CALL CHECK_DATA_BLOCKS( N_TRACERS, NCOUNT )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_F_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_EMISDEP_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ REAL*8, PARAMETER :: SMALLOX = 1d-6
c$$$ REAL*8, PARAMETER :: SMALLNOX = 1d-8
c$$$ REAL*8, PARAMETER :: SMALLCO = 1d-9
c$$$
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('EMISDEP.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_ADJ_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Convert from [kg] to [v/v] and store in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Convert STT from [kg] to [v/v] mixing ratio
c$$$ ! and store in temporary variable TRACER
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_EMISDEP_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_SRCEMIS_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ REAL*8, PARAMETER :: SMALLOX = 1d-6
c$$$ REAL*8, PARAMETER :: SMALLNOX = 1d-8
c$$$ REAL*8, PARAMETER :: SMALLCO = 1d-9
c$$$
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('SRCEMIS.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_ADJ_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Convert from [kg] to [v/v] and store in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Convert STT from [kg] to [v/v] mixing ratio
c$$$ ! and store in temporary variable TRACER
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_SRCEMIS_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_OBS_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CHK, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('OBS_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Convert from [kg] to [v/v] and store in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Convert STT from [kg] to [v/v] mixing ratio
c$$$ ! and store in temporary variable TRACER
c$$$ CALL BPCH2_CHK( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_OBS_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_OBS_CHKFILE( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
c$$$! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
c$$$! Also reorganize some print statements (bmy, 10/25/99)
c$$$! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
c$$$! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
c$$$! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (5 ) Broke up sections of code into internal subroutines. Also updated
c$$$! comments & cleaned up a few things. (bmy, 7/17/00)
c$$$! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
c$$$! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
c$$$! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
c$$$! (10) Added updates from amf for tagged Ox run. Also updated comments
c$$$! and made some cosmetic changes (bmy, 7/3/01)
c$$$! (11) Bug fix: if starting from multiox restart file, then NTRACER
c$$$! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
c$$$! accordingly. (amf, bmy, 9/6/01)
c$$$! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
c$$$! (13) Updated comments (bmy, 1/25/02)
c$$$! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
c$$$! (17) Add fancy output string (bmy, 4/26/04)
c$$$! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
c$$$! and "tracer_mod.f" (bmy, 7/20/04)
c$$$! (19) Remove code for obsolete CO-OH simulation. Also remove references
c$$$! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
c$$$! (bmy, 6/24/05)
c$$$! (20) Updated comments (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('OBS_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ DO
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
c$$$
c$$$ ! IOS < 0 is end-of-file, so exit
c$$$ IF ( IOS < 0 ) EXIT
c$$$
c$$$ ! IOS > 0 is a real I/O error -- print error message
c$$$ IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:4' )
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
c$$$ & NI, NJ, NL, IFIRST, JFIRST, LFIRST,
c$$$ & NSKIP
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$ !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$
c$$$ CALL COPY_STT( NTRACER, TRACER, NCOUNT )
c$$$
c$$$ ENDDO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Check for missing or duplicate data blocks
c$$$ CALL CHECK_DATA_BLOCKS( N_TRACERS, NCOUNT )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_OBS_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_CURR_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CHK, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CURR_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Convert from [kg] to [v/v] and store in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Convert STT from [kg] to [v/v] mixing ratio
c$$$ ! and store in temporary variable TRACER
c$$$ CALL BPCH2_CHK( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_CURR_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_CURR_CHKFILE( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
c$$$! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
c$$$! Also reorganize some print statements (bmy, 10/25/99)
c$$$! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
c$$$! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
c$$$! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (5 ) Broke up sections of code into internal subroutines. Also updated
c$$$! comments & cleaned up a few things. (bmy, 7/17/00)
c$$$! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
c$$$! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
c$$$! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
c$$$! (10) Added updates from amf for tagged Ox run. Also updated comments
c$$$! and made some cosmetic changes (bmy, 7/3/01)
c$$$! (11) Bug fix: if starting from multiox restart file, then NTRACER
c$$$! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
c$$$! accordingly. (amf, bmy, 9/6/01)
c$$$! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
c$$$! (13) Updated comments (bmy, 1/25/02)
c$$$! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
c$$$! (17) Add fancy output string (bmy, 4/26/04)
c$$$! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
c$$$! and "tracer_mod.f" (bmy, 7/20/04)
c$$$! (19) Remove code for obsolete CO-OH simulation. Also remove references
c$$$! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
c$$$! (bmy, 6/24/05)
c$$$! (20) Updated comments (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('CURR_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ DO
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
c$$$
c$$$ ! IOS < 0 is end-of-file, so exit
c$$$ IF ( IOS < 0 ) EXIT
c$$$
c$$$ ! IOS > 0 is a real I/O error -- print error message
c$$$ IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:4' )
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
c$$$ & NI, NJ, NL, IFIRST, JFIRST, LFIRST,
c$$$ & NSKIP
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$ !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$
c$$$ CALL COPY_STT( NTRACER, TRACER, NCOUNT )
c$$$
c$$$ ENDDO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Check for missing or duplicate data blocks
c$$$ CALL CHECK_DATA_BLOCKS( N_TRACERS, NCOUNT )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_CURR_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_BG_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHECKPOINT_FILE creates GEOS-CHEM restart files of tracer
c$$$! mixing ratios (v/v), in binary punch file format. (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (2 ) Reference F90 module "bpch2_mod.f" which contains routines BPCH2_HDR,
c$$$! BPCH2, and GET_MODELNAME for writing data to binary punch files.
c$$$! (bmy, 6/22/00)
c$$$! (3 ) Now do not write more than NTRACE data blocks to disk.
c$$$! Also updated comments. (bmy, 7/17/00)
c$$$! (4 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (5 ) Added to "restart_mod.f". Also now save the entire grid to the
c$$$! restart file. (bmy, 6/24/02)
c$$$! (6 ) Bug fix: Remove duplicate definition of MM. This causes compile-time
c$$$! problems on the ALPHA platform. (gcc, bmy, 11/6/02)
c$$$! (7 ) Now references functions GET_OFFSET, GET_YOFFSET from "grid_mod.f".
c$$$! Now references function GET_TAU from "time_mod.f". Now added a call
c$$$! to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (8 ) Cosmetic changes (bmy, 4/29/03)
c$$$! (9 ) Now reference STT, N_TRACERS, TCVV from "tracer_mod.f". Also now
c$$$! remove hardwired output restart filename. Now references LPRT
c$$$! from "logical_mod.f". (bmy, 7/20/04)
c$$$! (10) Remove references to CMN_DIAG and TRCOFFSET. Now call GET_HALFPOLAR
c$$$! from "bpch2_mod.f" to get the HALFPOLAR flag value for GEOS or GCAP
c$$$! grids. (bmy, 6/28/05)
c$$$! (11) Now make sure all USE statements are USE, ONLY (bmy, 10/3/05)
c$$$! (12) Add TAU to the argument list (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2_CHK, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('BG_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Convert from [kg] to [v/v] and store in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) !* TCVV(N) / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ! Convert STT from [kg] to [v/v] mixing ratio
c$$$ ! and store in temporary variable TRACER
c$$$ CALL BPCH2_CHK( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_BG_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE READ_BG_CHKFILE( YYYYMMDD, HHMMSS )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine READ_CHECKPOINT_FILE initializes GEOS-CHEM tracer concentrations
c$$$! from a restart file (binary punch file format) (bmy, 5/27/99, 12/16/05)
c$$$!
c$$$! Arguments as input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Day
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
c$$$!
c$$$! NOTES:
c$$$! (1 ) Now check that N = NTRACER - TRCOFFSET is valid.
c$$$! Also reorganize some print statements (bmy, 10/25/99)
c$$$! (2 ) Now pass LFORCE, LSPLIT via CMN_SETUP. (bmy, 11/4/99)
c$$$! (3 ) Cosmetic changes, added comments (bmy, 3/17/00)
c$$$! (4 ) Now use function NYMD_STRING from "time_mod.f" to generate a
c$$$! Y2K compliant string for all data sets. (bmy, 6/22/00)
c$$$! (5 ) Broke up sections of code into internal subroutines. Also updated
c$$$! comments & cleaned up a few things. (bmy, 7/17/00)
c$$$! (6 ) Now use IOS /= 0 to trap both I/O errors and EOF. (bmy, 9/13/00)
c$$$! (7 ) Print max & min of tracer regardless of the units (bmy, 10/5/00)
c$$$! (8 ) Removed obsolete code from 10/00 (bmy, 12/21/00)
c$$$! (9 ) Removed obsolete commented out code (bmy, 4/23/01)
c$$$! (10) Added updates from amf for tagged Ox run. Also updated comments
c$$$! and made some cosmetic changes (bmy, 7/3/01)
c$$$! (11) Bug fix: if starting from multiox restart file, then NTRACER
c$$$! will be greater than 40 but less than 60. Adjust COPY_STT_FOR_OX
c$$$! accordingly. (amf, bmy, 9/6/01)
c$$$! (12) Now reference TRANUC from "charpak_mod.f" (bmy, 11/15/01)
c$$$! (13) Updated comments (bmy, 1/25/02)
c$$$! (14) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
c$$$! (15) Now added a call to DEBUG_MSG from "error_mod.f" (bmy, 2/11/03)
c$$$! (16) Remove call to COPY_STT_FOR_OX, it's obsolete. (bmy, 8/18/03)
c$$$! (17) Add fancy output string (bmy, 4/26/04)
c$$$! (18) No longer use hardwired filename. Also now reference "logical_mod.f"
c$$$! and "tracer_mod.f" (bmy, 7/20/04)
c$$$! (19) Remove code for obsolete CO-OH simulation. Also remove references
c$$$! to CMN_DIAG and TRCOFFSET. Change tracer name format string to A10.
c$$$! (bmy, 6/24/05)
c$$$! (20) Updated comments (bmy, 12/16/05)
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : N_TRACERS, STT, TCVV
c$$$ USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, IOS, J, L, N
c$$$ INTEGER :: NCOUNT(NNPAR)
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ REAL*8 :: SUMTC
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ INTEGER :: NI, NJ, NL
c$$$ INTEGER :: IFIRST, JFIRST, LFIRST
c$$$ INTEGER :: NTRACER, NSKIP
c$$$ INTEGER :: HALFPOLAR, CENTER180
c$$$ REAL*4 :: LONRES, LATRES
c$$$ REAL*8 :: ZTAU0, ZTAU1
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$
c$$$ !=================================================================
c$$$ ! READ_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ ! Initialize some variables
c$$$ NCOUNT(:) = 0
c$$$ TRACER(:,:,:) = 0e0
c$$$
c$$$ !=================================================================
c$$$ ! Open restart file and read top-of-file header
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
c$$$ & //TRIM('BG_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Copy input file name to a local variable
c$$$ FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ ! Echo some input to the screen
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$ WRITE( 6, '(a,/)' ) 'R E S T A R T F I L E I N P U T'
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( 'READ_CHECKPOINT_FILE: Reading ', a )
c$$$
c$$$ ! Open the binary punch file for input
c$$$ CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
c$$$
c$$$ ! Echo more output
c$$$ WRITE( 6, 110 )
c$$$ 110 FORMAT( /, 'Min and Max of each tracer, as read from the file:',
c$$$ & /, '(in volume mixing ratio units: v/v)' )
c$$$
c$$$ !=================================================================
c$$$ ! Read concentrations -- store in the TRACER array
c$$$ !=================================================================
c$$$
c$$$ DO
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
c$$$
c$$$ ! IOS < 0 is end-of-file, so exit
c$$$ IF ( IOS < 0 ) EXIT
c$$$
c$$$ ! IOS > 0 is a real I/O error -- print error message
c$$$ IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:4' )
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
c$$$ & NI, NJ, NL, IFIRST, JFIRST, LFIRST,
c$$$ & NSKIP
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:5')
c$$$
c$$$ READ( IU_RST, IOSTAT=IOS )
c$$$ & ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
c$$$
c$$$ !-------------------------------------------
c$$$ ! *****TESTING CHECKPOINTING*****
c$$$ !-------------------------------------------
c$$$ !PRINT*,'TRACER(2,2,2)=',TRACER(2,2,2)
c$$$
c$$$ IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'read_restart_file:6')
c$$$
c$$$ !==============================================================
c$$$ ! Assign data from the TRACER array to the STT array.
c$$$ !==============================================================
c$$$
c$$$ CALL COPY_STT( NTRACER, TRACER, NCOUNT )
c$$$
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ STT(I,J,L,NTRACER) = STT(I,J,L,NTRACER) !* AD(I,J,L) /
c$$$! & TCVV(NTRACER)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ ENDDO
c$$$
c$$$ !=================================================================
c$$$ ! Examine data blocks, print totals, and return
c$$$ !=================================================================
c$$$
c$$$ ! Check for missing or duplicate data blocks
c$$$ CALL CHECK_DATA_BLOCKS( N_TRACERS, NCOUNT )
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ ! Print totals atmospheric mass for each tracer
c$$$ WRITE( 6, 120 )
c$$$ 120 FORMAT( /, 'Total atmospheric masses for each tracer: ' )
c$$$
c$$$ ! Fancy output
c$$$ WRITE( 6, '(a)' ) REPEAT( '=', 79 )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### READ_CHECKPOINT_FILE: read file')
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE READ_BG_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
! This still needs updating, plus I don't think it's even used
! (dkh, 06/23/09)
! SUBROUTINE MAKE_ORIG_CHKFILE( YYYYMMDD, HHMMSS, TAU )
!!
!!******************************************************************************
!! Subroutine MAKE_ORIG_CHKFILE ??? ks ???
!!
!!
!! Arguments as Input:
!! ============================================================================
!! (1 ) YYYYMMDD : Year-Month-Date
!! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
!! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
!!******************************************************************************
!!
! ! References to F90 modules
! USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
! USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
! USE DAO_MOD, ONLY : AD
! USE ERROR_MOD, ONLY : DEBUG_MSG
! USE FILE_MOD, ONLY : IU_RST, IOERROR
! USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
! USE LOGICAL_MOD, ONLY : LPRT
! USE TIME_MOD, ONLY : EXPAND_DATE
! USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
!
!# include "CMN_SIZE" ! Size parameters
!
! ! Arguments
! INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
! REAL*8, INTENT(IN) :: TAU
!
! ! Local Variables
! INTEGER :: I, I0, IOS, J, J0, L, N
! INTEGER :: YYYY, MM, DD, HH, SS
! REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
! CHARACTER(LEN=255) :: FILENAME
!
! ! For binary punch file, version 2.0
! REAL*4 :: LONRES, LATRES
! INTEGER :: HALFPOLAR
! INTEGER, PARAMETER :: CENTER180 = 1
!
! CHARACTER(LEN=20) :: MODELNAME
! CHARACTER(LEN=40) :: CATEGORY
! CHARACTER(LEN=40) :: UNIT
! CHARACTER(LEN=40) :: RESERVED = ''
! CHARACTER(LEN=80) :: TITLE
! CHARACTER*10 :: SUFFIX1
! CHARACTER*1 :: SUFFIX2(4)
! INTEGER :: T,MULT,IT,LT
! !=================================================================
! ! MAKE_CHECKPOINT_FILE begins here!
! !=================================================================
!
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! OUTPUT_CHECKPOINT_FILE = TRIM('opt/')
! & //TRIM('ORIG_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
!
! ! Define variables for BINARY PUNCH FILE OUTPUT
! TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
! & 'Instantaneous Tracer Concentrations (v/v)'
! UNIT = 'v/v'
! CATEGORY = 'IJ-AVG-$'
! LONRES = DISIZE
! LATRES = DJSIZE
!
! ! Call GET_MODELNAME to return the proper model name for
! ! the given met data being used (bmy, 6/22/00)
! MODELNAME = GET_MODELNAME()
!
! ! Call GET_HALFPOLAR to return the proper value
! ! for either GCAP or GEOS grids (bmy, 6/28/05)
! HALFPOLAR = GET_HALFPOLAR()
!
! ! Get the nested-grid offsets
! I0 = GET_XOFFSET( GLOBAL=.TRUE. )
! J0 = GET_YOFFSET( GLOBAL=.TRUE. )
!
! !=================================================================
! ! Open the restart file for output -- binary punch format
! !=================================================================
!
! ! Copy the output restart file name into a local variable
! FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
!
! ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
! CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
!
! WRITE( 6, 100 ) TRIM( FILENAME )
! 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
!
! ! Open restart file for output
! CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
!
! !=================================================================
! ! Write each tracer to the restart file
! !=================================================================
!
! DO N = 1, N_TRACERS
!
! ! Store GEOS-CHEM tracers in the TRACER array
!!$OMP PARALLEL DO
!!$OMP+DEFAULT( SHARED )
!!$OMP+PRIVATE( I, J, L )
! DO L = 1, LLPAR
! DO J = 1, JJPAR
! DO I = 1, IIPAR
! TRACER(I,J,L) = STT(I,J,L,N) * TCVV(N) * 1d9 / AD(I,J,L)
! ENDDO
! ENDDO
! ENDDO
!!$OMP END PARALLEL DO
!
! CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
! & HALFPOLAR, CENTER180, CATEGORY, N,
! & UNIT, TAU, TAU, RESERVED,
! & IIPAR, JJPAR, LLPAR, I0+1,
! & J0+1, 1, TRACER )
! ENDDO
!
! ! Close file
! CLOSE( IU_RST )
!
! !### Debug
! IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
!
!
! ! Return to calling program
! END SUBROUTINE MAKE_ORIG_CHKFILE
!
!!------------------------------------------------------------------------------
c$$$ SUBROUTINE MAKE_PERT_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHEMISTRY_CHKFILE_P3 creates GEOS-CHEM restart files of tracers
c$$$! in binary punch file format. Used to checkpoint tracers for type2 information
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('opt/')
c$$$ & //TRIM('PERT_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Store GEOS-CHEM tracers in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) * TCVV(N) * 1d9 / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_PERT_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_OPTZ_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHEMISTRY_CHKFILE_P3 creates GEOS-CHEM restart files of tracers
c$$$! in binary punch file format. Used to checkpoint tracers for type2 information
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('opt/')
c$$$ & //TRIM('OPTZ_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Store GEOS-CHEM tracers in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) * TCVV(N) * 1d9 / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_OPTZ_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_DIFFPERT_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHEMISTRY_CHKFILE_P3 creates GEOS-CHEM restart files of tracers
c$$$! in binary punch file format. Used to checkpoint tracers for type2 information
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('opt/')
c$$$ & //TRIM('DIFFPERT_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Store GEOS-CHEM tracers in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) * TCVV(N) * 1d9 / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_DIFFPERT_CHKFILE
c$$$
c$$$!------------------------------------------------------------------------------
c$$$
c$$$ SUBROUTINE MAKE_DIFFOPTZ_CHKFILE( YYYYMMDD, HHMMSS, TAU )
c$$$!
c$$$!******************************************************************************
c$$$! Subroutine MAKE_CHEMISTRY_CHKFILE_P3 creates GEOS-CHEM restart files of tracers
c$$$! in binary punch file format. Used to checkpoint tracers for type2 information
c$$$! (Kumaresh, 01/24/08)
c$$$!
c$$$! Arguments as Input:
c$$$! ============================================================================
c$$$! (1 ) YYYYMMDD : Year-Month-Date
c$$$! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
c$$$! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
c$$$!******************************************************************************
c$$$!
c$$$ ! References to F90 modules
c$$$ USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
c$$$ USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
c$$$ USE DAO_MOD, ONLY : AD
c$$$ USE ERROR_MOD, ONLY : DEBUG_MSG
c$$$ USE FILE_MOD, ONLY : IU_RST, IOERROR
c$$$ USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
c$$$ USE LOGICAL_MOD, ONLY : LPRT
c$$$ USE TIME_MOD, ONLY : EXPAND_DATE
c$$$ USE TRACER_MOD, ONLY : STT, N_TRACERS, TCVV
c$$$
c$$$# include "CMN_SIZE" ! Size parameters
c$$$
c$$$ ! Arguments
c$$$ INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
c$$$ REAL*8, INTENT(IN) :: TAU
c$$$
c$$$ ! Local Variables
c$$$ INTEGER :: I, I0, IOS, J, J0, L, N
c$$$ INTEGER :: YYYY, MM, DD, HH, SS
c$$$ REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
c$$$ CHARACTER(LEN=255) :: FILENAME
c$$$
c$$$ ! For binary punch file, version 2.0
c$$$ REAL*4 :: LONRES, LATRES
c$$$ INTEGER :: HALFPOLAR
c$$$ INTEGER, PARAMETER :: CENTER180 = 1
c$$$
c$$$ CHARACTER(LEN=20) :: MODELNAME
c$$$ CHARACTER(LEN=40) :: CATEGORY
c$$$ CHARACTER(LEN=40) :: UNIT
c$$$ CHARACTER(LEN=40) :: RESERVED = ''
c$$$ CHARACTER(LEN=80) :: TITLE
c$$$ CHARACTER*10 :: SUFFIX1
c$$$ CHARACTER*1 :: SUFFIX2(4)
c$$$ INTEGER :: T,MULT,IT,LT
c$$$ !=================================================================
c$$$ ! MAKE_CHECKPOINT_FILE begins here!
c$$$ !=================================================================
c$$$
c$$$ WRITE (SUFFIX1,'(I8)')YYYYMMDD
c$$$
c$$$ T = HHMMSS/100
c$$$
c$$$ DO IT = 1, 4
c$$$ LT = T-(T/10)*10
c$$$ WRITE (SUFFIX2(4-IT+1),'(I1)')LT
c$$$ T = T/10
c$$$ END DO
c$$$
c$$$ OUTPUT_CHECKPOINT_FILE = TRIM('opt/')
c$$$ & //TRIM('DIFFOPTZ_CHK.')//TRIM(SUFFIX1)//TRIM('.')
c$$$ & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
c$$$ & //TRIM(SUFFIX2(4))
c$$$
c$$$ ! Define variables for BINARY PUNCH FILE OUTPUT
c$$$ TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
c$$$ & 'Instantaneous Tracer Concentrations (v/v)'
c$$$ UNIT = 'v/v'
c$$$ CATEGORY = 'IJ-AVG-$'
c$$$ LONRES = DISIZE
c$$$ LATRES = DJSIZE
c$$$
c$$$ ! Call GET_MODELNAME to return the proper model name for
c$$$ ! the given met data being used (bmy, 6/22/00)
c$$$ MODELNAME = GET_MODELNAME()
c$$$
c$$$ ! Call GET_HALFPOLAR to return the proper value
c$$$ ! for either GCAP or GEOS grids (bmy, 6/28/05)
c$$$ HALFPOLAR = GET_HALFPOLAR()
c$$$
c$$$ ! Get the nested-grid offsets
c$$$ I0 = GET_XOFFSET( GLOBAL=.TRUE. )
c$$$ J0 = GET_YOFFSET( GLOBAL=.TRUE. )
c$$$
c$$$ !=================================================================
c$$$ ! Open the restart file for output -- binary punch format
c$$$ !=================================================================
c$$$
c$$$ ! Copy the output restart file name into a local variable
c$$$ FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
c$$$
c$$$ ! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
c$$$ CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
c$$$
c$$$ WRITE( 6, 100 ) TRIM( FILENAME )
c$$$ 100 FORMAT( ' - MAKE_CHECKPOINT_FILE: Writing ', a )
c$$$
c$$$ ! Open restart file for output
c$$$ CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
c$$$
c$$$ !=================================================================
c$$$ ! Write each tracer to the restart file
c$$$ !=================================================================
c$$$
c$$$ DO N = 1, N_TRACERS
c$$$
c$$$ ! Store GEOS-CHEM tracers in the TRACER array
c$$$!$OMP PARALLEL DO
c$$$!$OMP+DEFAULT( SHARED )
c$$$!$OMP+PRIVATE( I, J, L )
c$$$ DO L = 1, LLPAR
c$$$ DO J = 1, JJPAR
c$$$ DO I = 1, IIPAR
c$$$ TRACER(I,J,L) = STT(I,J,L,N) * TCVV(N) * 1d9 / AD(I,J,L)
c$$$ ENDDO
c$$$ ENDDO
c$$$ ENDDO
c$$$!$OMP END PARALLEL DO
c$$$
c$$$ CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
c$$$ & HALFPOLAR, CENTER180, CATEGORY, N,
c$$$ & UNIT, TAU, TAU, RESERVED,
c$$$ & IIPAR, JJPAR, LLPAR, I0+1,
c$$$ & J0+1, 1, TRACER )
c$$$ ENDDO
c$$$
c$$$ ! Close file
c$$$ CLOSE( IU_RST )
c$$$
c$$$ !### Debug
c$$$ IF ( LPRT ) CALL DEBUG_MSG('### MAKE_CHECKPOINT_FILE: wrote file')
c$$$
c$$$
c$$$ ! Return to calling program
c$$$ END SUBROUTINE MAKE_DIFFOPTZ_CHKFILE
!------------------------------------------------------------------------------
SUBROUTINE MAKE_UPBDFLX_CHKFILE( YYYYMMDD, HHMMSS, TAU )
!
!******************************************************************************
! Subroutine MAKE_UPBDFLX_CHKFILE saves STT values for LINOZE adjoint
! (ks, dkh, 05/02/10)
!
! Based on MAKE_RESTART_FILE (bmy, 5/27/99, 12/16/05)
!
! Arguments as Input:
! ============================================================================
! (1 ) YYYYMMDD : Year-Month-Date
! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
!
! NOTES:
! ( 1) Add date tokens, clean up (dkh, 05/02/10)
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
USE DAO_MOD, ONLY : AD
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FILE_MOD, ONLY : IU_RST, IOERROR
USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
USE LOGICAL_MOD, ONLY : LPRT
USE TIME_MOD, ONLY : EXPAND_DATE
USE TRACER_MOD, ONLY : STT_TMP, N_TRACERS, TCVV
USE DIRECTORY_ADJ_MOD, ONLY : ADJTMP_DIR
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
REAL*8, INTENT(IN) :: TAU
! Local Variables
INTEGER :: I, I0, IOS, J, J0, L, N
INTEGER :: YYYY, MM, DD, HH, SS
REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
CHARACTER(LEN=255) :: FILENAME
! For binary punch file, version 2.0
REAL*4 :: LONRES, LATRES
INTEGER :: HALFPOLAR
INTEGER, PARAMETER :: CENTER180 = 1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED = ''
CHARACTER(LEN=80) :: TITLE
! old code from ks
! CHARACTER*10 :: SUFFIX1
! CHARACTER*1 :: SUFFIX2(4)
! INTEGER :: T,MULT,IT,LT
! REAL*8, PARAMETER :: SMALLNUM = 1d-12
!=================================================================
! MAKE_UPBDFLX_CHKFILE begins here!
!=================================================================
! old code from ks
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! OUTPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
! & //TRIM('UPBD_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
! now use date tokens (dkh, 05/02/10)
OUTPUT_CHECKPOINT_FILE = 'upbd.chk.YYYYMMDD.hhmm'
! Define variables for BINARY PUNCH FILE OUTPUT
TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
& 'Instantaneous Tracer Concentrations (v/v)'
UNIT = 'v/v'
CATEGORY = 'IJ-AVG-$'
LONRES = DISIZE
LATRES = DJSIZE
! Call GET_MODELNAME to return the proper model name for
! the given met data being used (bmy, 6/22/00)
MODELNAME = GET_MODELNAME()
! Call GET_HALFPOLAR to return the proper value
! for either GCAP or GEOS grids (bmy, 6/28/05)
HALFPOLAR = GET_HALFPOLAR()
! Get the nested-grid offsets
I0 = GET_XOFFSET( GLOBAL=.TRUE. )
J0 = GET_YOFFSET( GLOBAL=.TRUE. )
!=================================================================
! Open the restart file for output -- binary punch format
!=================================================================
! Copy the output restart file name into a local variable
FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
FILENAME = TRIM( ADJTMP_DIR ) //
& TRIM( FILENAME )
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( ' - MAKE_UPBDFLX_CHKFILE: Writing ', a )
! Open restart file for output
CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
!=================================================================
! Write each tracer to the restart file
!=================================================================
DO N = 1, 2
! Convert from [kg] to [v/v] and store in the TRACER array
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J, L )
DO L = 1, LLPAR
DO J = 1, JJPAR
DO I = 1, IIPAR
TRACER(I,J,L) = STT_TMP(I,J,L,N)
ENDDO
ENDDO
ENDDO
!$OMP END PARALLEL DO
! Convert STT from [kg] to [v/v] mixing ratio
! and store in temporary variable TRACER
CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
& HALFPOLAR, CENTER180, CATEGORY, N,
& UNIT, TAU, TAU, RESERVED,
& IIPAR, JJPAR, LLPAR, I0+1,
& J0+1, 1, TRACER )
ENDDO
! Close file
CLOSE( IU_RST )
!### Debug
IF ( LPRT ) CALL DEBUG_MSG('### MAKE_UPBDFLX_CHKFILE: wrote file')
! Return to calling program
END SUBROUTINE MAKE_UPBDFLX_CHKFILE
!------------------------------------------------------------------------------
SUBROUTINE READ_UPBDFLX_CHKFILE( YYYYMMDD, HHMMSS )
!
!******************************************************************************
! Subroutine READ_UPBDFLX_CHKFILE reads in STT_TMP for LINOZE.
! (ks, dkh, 05/02/10)
!
! Based on READ_RESTART_FILE (bmy, 5/27/99, 12/16/05)
!
! Arguments as input:
! ============================================================================
! (1 ) YYYYMMDD : Year-Month-Day
! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
!
! NOTES:
! ( 1) Now use date tokens to make filename (dkh, 05/02/10)
! ( 2) Now delete the upbd.chk.* files after reading (dkh, 05/02/10)
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
USE DAO_MOD, ONLY : AD
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FILE_MOD, ONLY : IU_RST, IOERROR
USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
USE LOGICAL_ADJ_MOD, ONLY : LDEL_CHKPT
USE TIME_MOD, ONLY : EXPAND_DATE
USE TRACER_MOD, ONLY : N_TRACERS, STT_TMP
USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
USE DIRECTORY_ADJ_MOD, ONLY : ADJTMP_DIR
USE UNIX_CMDS_MOD, ONLY : REMOVE_CMD
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
! Local Variables
INTEGER :: I, IOS, J, L, N
INTEGER :: NCOUNT(NNPAR)
REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
REAL*8 :: SUMTC
CHARACTER(LEN=255) :: FILENAME
CHARACTER(LEN=255) :: REMOVE_CHK_FILE_CMD
! For binary punch file, version 2.0
INTEGER :: NI, NJ, NL
INTEGER :: IFIRST, JFIRST, LFIRST
INTEGER :: NTRACER, NSKIP
INTEGER :: HALFPOLAR, CENTER180
REAL*4 :: LONRES, LATRES
REAL*8 :: ZTAU0, ZTAU1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED
!=================================================================
! READ_UPBDFLX_CHKFILE begins here!
!=================================================================
! Initialize some variables
NCOUNT(:) = 0
TRACER(:,:,:) = 0e0
!=================================================================
! Open restart file and read top-of-file header
!=================================================================
! WRITE (SUFFIX1,'(I8)')YYYYMMDD
!
! T = HHMMSS/100
!
! DO IT = 1, 4
! LT = T-(T/10)*10
! WRITE (SUFFIX2(4-IT+1),'(I1)')LT
! T = T/10
! END DO
!
! INPUT_CHECKPOINT_FILE = TRIM('adjtmp/')
! & //TRIM('UPBD_CHK.')//TRIM(SUFFIX1)//TRIM('.')
! & //TRIM(SUFFIX2(1))//TRIM(SUFFIX2(2))//TRIM(SUFFIX2(3))
! & //TRIM(SUFFIX2(4))
INPUT_CHECKPOINT_FILE = 'upbd.chk.YYYYMMDD.hhmm'
! Copy input file name to a local variable
FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
FILENAME = TRIM( ADJTMP_DIR ) // TRIM( FILENAME )
! Echo some input to the screen
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( 'READ_UPBDFLX_CHKFILE: Reading ', a )
! Open the binary punch file for input
CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
!=================================================================
! Read concentrations -- store in the TRACER array
!=================================================================
DO
READ( IU_RST, IOSTAT=IOS )
& MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
! IOS < 0 is end-of-file, so exit
IF ( IOS < 0 ) EXIT
! IOS > 0 is a real I/O error -- print error message
IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'READ_UPBDFLX:4' )
READ( IU_RST, IOSTAT=IOS )
& CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
& NI, NJ, NL, IFIRST, JFIRST, LFIRST,
& NSKIP
IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'READ_UPBDFLX:5')
READ( IU_RST, IOSTAT=IOS )
& ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'READ_UPBDFLX:6')
!==============================================================
! Assign data from the TRACER array to the STT array.
!==============================================================
! Only process concentration data (i.e. mixing ratio)
IF ( CATEGORY(1:8) == 'IJ-AVG-$' ) THEN
! Convert TRACER from [v/v] to [kg] and copy into STT array
CALL COPY_STT_TMP( NTRACER, TRACER, NCOUNT )
ENDIF
ENDDO
!=================================================================
! Examine data blocks, print totals, and return
!=================================================================
! Check for missing or duplicate data blocks
CALL CHECK_DATA_BLOCKS( 2, NCOUNT )
! Close file
CLOSE( IU_RST )
! Remove files if L_CHK_DEL = TRUE
IF ( LDEL_CHKPT ) THEN
REMOVE_CHK_FILE_CMD = TRIM ( REMOVE_CMD ) // ' ' //
& TRIM ( FILENAME )
CALL SYSTEM( TRIM( REMOVE_CHK_FILE_CMD ) )
WRITE( 6, 102 ) TRIM( REMOVE_CHK_FILE_CMD )
102 FORMAT( ' - READ_UPBDFLX_CHKFILE: Executing: ',a )
ENDIF
!### Debug
IF ( LPRT ) CALL DEBUG_MSG('### READ_UPBDFLX_CHKFILE: read file')
! Return to calling program
END SUBROUTINE READ_UPBDFLX_CHKFILE
!------------------------------------------------------------------------------
SUBROUTINE MAKE_BEFSTRAT_CHKFILE( YYYYMMDD, HHMMSS, TAU )
!
!******************************************************************************
! Subroutine MAKE_BEFSTRAT_CHKFILE saves STT values for STRAT_CHEM adjoint
! (hml, 07/28/11, adj32_025)
!
! Based on MAKE_UPBDFLX_FILE (bmy, 5/27/99, 12/16/05)
!
! Arguments as Input:
! ============================================================================
! (1 ) YYYYMMDD : Year-Month-Date
! (2 ) HHMMSS : and Hour-Min-Sec for which to create a restart file
! (3 ) TAU : GEOS-CHEM TAU value corresponding to YYYYMMDD, HHMMSS
!
! NOTES:
! ( 1) Add date tokens, clean up (dkh, 05/02/10)
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD, ONLY : BPCH2, GET_MODELNAME
USE BPCH2_MOD, ONLY : GET_HALFPOLAR, OPEN_BPCH2_FOR_WRITE
USE DAO_MOD, ONLY : AD
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FILE_MOD, ONLY : IU_RST, IOERROR
USE GRID_MOD, ONLY : GET_XOFFSET, GET_YOFFSET
USE LOGICAL_MOD, ONLY : LPRT
USE TIME_MOD, ONLY : EXPAND_DATE
USE TRACER_MOD, ONLY : STT_STRAT_TMP, N_TRACERS, TCVV
USE DIRECTORY_ADJ_MOD, ONLY : ADJTMP_DIR
USE TROPOPAUSE_MOD, ONLY : GET_MIN_TPAUSE_LEVEL
USE TROPOPAUSE_MOD, ONLY : ITS_IN_THE_STRAT
! for new strat chem (hml, 10/07/11)
USE TRACER_MOD, ONLY : ITS_A_FULLCHEM_SIM, ITS_A_TAGOX_SIM
USE TRACERID_MOD, ONLY : IDTOX
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
REAL*8, INTENT(IN) :: TAU
! Local Variables
INTEGER :: I, I0, IOS, J, J0, L, N
INTEGER :: YYYY, MM, DD, HH, SS
INTEGER :: LMIN
REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
CHARACTER(LEN=255) :: FILENAME
! For binary punch file, version 2.0
REAL*4 :: LONRES, LATRES
INTEGER :: HALFPOLAR
INTEGER, PARAMETER :: CENTER180 = 1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED = ''
CHARACTER(LEN=80) :: TITLE
!=================================================================
! MAKE_BEFSTRAT_CHKFILE begins here!
!=================================================================
! now use date tokens (hml, 07/31/11)
OUTPUT_CHECKPOINT_FILE = 'befstrat.chk.YYYYMMDD.hhmm'
! Define variables for BINARY PUNCH FILE OUTPUT
TITLE = 'GEOS-CHEM CHECKPOINT File: ' //
& 'Instantaneous Tracer Concentrations (v/v)'
UNIT = 'v/v'
CATEGORY = 'IJ-AVG-$'
LONRES = DISIZE
LATRES = DJSIZE
! Call GET_MODELNAME to return the proper model name for
! the given met data being used (bmy, 6/22/00)
MODELNAME = GET_MODELNAME()
! Call GET_HALFPOLAR to return the proper value
! for either GCAP or GEOS grids (bmy, 6/28/05)
HALFPOLAR = GET_HALFPOLAR()
! Get the nested-grid offsets
I0 = GET_XOFFSET( GLOBAL=.TRUE. )
J0 = GET_YOFFSET( GLOBAL=.TRUE. )
!=================================================================
! Open the restart file for output -- binary punch format
!=================================================================
! Copy the output restart file name into a local variable
FILENAME = TRIM( OUTPUT_CHECKPOINT_FILE )
! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
FILENAME = TRIM( ADJTMP_DIR ) //
& TRIM( FILENAME )
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( ' - MAKE_BEFSTRAT_CHKFILE: Writing ', a )
! Open restart file for output
CALL OPEN_BPCH2_FOR_WRITE( IU_RST, FILENAME, TITLE )
!=================================================================
! Write each tracer to the restart file
!=================================================================
DO N = 1,N_TRACERS
! Now use GMI rate for Ox (hml)
! IF ( ( ITS_A_FULLCHEM_SIM() .or. ITS_A_TAGOX_SIM() ) .and.
! & ( N .eq. IDTOx ) ) CYCLE
! Get the minimum level extent of the tropopause
LMIN = GET_MIN_TPAUSE_LEVEL()
! Convert from [kg] to [v/v] and store in the TRACER array
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J, L )
DO L = LMIN, LLPAR
DO J = 1, JJPAR
DO I = 1, IIPAR
TRACER(I,J,L) = STT_STRAT_TMP(I,J,L,N)
ENDDO
ENDDO
ENDDO
!$OMP END PARALLEL DO
! Convert STT from [kg] to [v/v] mixing ratio
! and store in temporary variable TRACER
CALL BPCH2( IU_RST, MODELNAME, LONRES, LATRES,
& HALFPOLAR, CENTER180, CATEGORY, N,
& UNIT, TAU, TAU, RESERVED,
& IIPAR, JJPAR, LLPAR, I0+1,
& J0+1, 1, TRACER )
ENDDO
! Close file
CLOSE( IU_RST )
!### Debug
IF ( LPRT ) CALL DEBUG_MSG
& ('### MAKE_BEFSTRAT_CHKFILE: wrote file')
! Return to calling program
END SUBROUTINE MAKE_BEFSTRAT_CHKFILE
!------------------------------------------------------------------------------
SUBROUTINE READ_BEFSTRAT_CHKFILE( YYYYMMDD, HHMMSS )
!
!******************************************************************************
! Subroutine READ_BEFSTRAT_CHKFILE reads in STT_STRAT_TMP for STRAT_CHEM_ADJ.
! (hml, 07/28/11, adj32_025)
!
! Based on READ_UPDBFLX_FILE (hml, 07/28/11)
!
! Arguments as input:
! ============================================================================
! (1 ) YYYYMMDD : Year-Month-Day
! (2 ) HHMMSS : and Hour-Min-Sec for which to read restart file
!
! NOTES:
! ( 1) Now use date tokens to make filename (dkh, 05/02/10)
! ( 2) Now delete the upbd.chk.* files after reading (dkh, 05/02/10)
!******************************************************************************
!
! References to F90 modules
USE BPCH2_MOD, ONLY : OPEN_BPCH2_FOR_READ
USE DAO_MOD, ONLY : AD
USE ERROR_MOD, ONLY : DEBUG_MSG
USE FILE_MOD, ONLY : IU_RST, IOERROR
USE LOGICAL_MOD, ONLY : LSPLIT, LPRT
USE LOGICAL_ADJ_MOD, ONLY : LDEL_CHKPT
USE TIME_MOD, ONLY : EXPAND_DATE
USE TRACER_MOD, ONLY : N_TRACERS, STT_STRAT_TMP
USE TRACER_MOD, ONLY : TRACER_NAME, TRACER_MW_G
USE DIRECTORY_ADJ_MOD, ONLY : ADJTMP_DIR
USE UNIX_CMDS_MOD, ONLY : REMOVE_CMD
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: YYYYMMDD, HHMMSS
! Local Variables
INTEGER :: I, IOS, J, L, N
INTEGER :: NCOUNT(NNPAR)
REAL*4 :: TRACER(IIPAR,JJPAR,LLPAR)
REAL*8 :: SUMTC
CHARACTER(LEN=255) :: FILENAME
CHARACTER(LEN=255) :: REMOVE_CHK_FILE_CMD
! For binary punch file, version 2.0
INTEGER :: NI, NJ, NL
INTEGER :: IFIRST, JFIRST, LFIRST
INTEGER :: NTRACER, NSKIP
INTEGER :: HALFPOLAR, CENTER180
REAL*4 :: LONRES, LATRES
REAL*8 :: ZTAU0, ZTAU1
CHARACTER(LEN=20) :: MODELNAME
CHARACTER(LEN=40) :: CATEGORY
CHARACTER(LEN=40) :: UNIT
CHARACTER(LEN=40) :: RESERVED
!=================================================================
! READ_BEFSTRAT_CHKFILE begins here!
!=================================================================
! Initialize some variables
NCOUNT(:) = 0
TRACER(:,:,:) = 0e0
!=================================================================
! Open restart file and read top-of-file header
!=================================================================
INPUT_CHECKPOINT_FILE = 'befstrat.chk.YYYYMMDD.hhmm'
! Copy input file name to a local variable
FILENAME = TRIM( INPUT_CHECKPOINT_FILE )
! Replace YYYY, MM, DD, HH tokens in FILENAME w/ actual values
CALL EXPAND_DATE( FILENAME, YYYYMMDD, HHMMSS )
FILENAME = TRIM( ADJTMP_DIR ) // TRIM( FILENAME )
! Echo some input to the screen
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( 'READ_BEFSTRAT_CHKFILE: Reading ', a )
! Open the binary punch file for input
CALL OPEN_BPCH2_FOR_READ( IU_RST, FILENAME )
!=================================================================
! Read concentrations -- store in the TRACER array
!=================================================================
DO
READ( IU_RST, IOSTAT=IOS )
& MODELNAME, LONRES, LATRES, HALFPOLAR, CENTER180
! IOS < 0 is end-of-file, so exit
IF ( IOS < 0 ) EXIT
! IOS > 0 is a real I/O error -- print error message
IF ( IOS > 0 ) CALL IOERROR( IOS,IU_RST,'READ_BEFSTRAT:4' )
READ( IU_RST, IOSTAT=IOS )
& CATEGORY, NTRACER, UNIT, ZTAU0, ZTAU1, RESERVED,
& NI, NJ, NL, IFIRST, JFIRST, LFIRST,
& NSKIP
IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'READ_BEFSTRAT:5')
READ( IU_RST, IOSTAT=IOS )
& ( ( ( TRACER(I,J,L), I=1,NI ), J=1,NJ ), L=1,NL )
IF ( IOS /= 0 ) CALL IOERROR( IOS,IU_RST,'READ_BEFSTRAT:6')
!==============================================================
! Assign data from the TRACER array to the STT array.
!==============================================================
! Only process concentration data (i.e. mixing ratio)
IF ( CATEGORY(1:8) == 'IJ-AVG-$' ) THEN
! Convert TRACER from [v/v] to [kg] and copy into STT array
CALL COPY_STT_STRAT_TMP( NTRACER, TRACER, NCOUNT )
ENDIF
ENDDO
!=================================================================
! Examine data blocks, print totals, and return
!=================================================================
! Check for missing or duplicate data blocks
CALL CHECK_DATA_BLOCKS( N_TRACERS, NCOUNT )
! Close file
CLOSE( IU_RST )
! Remove files if L_CHK_DEL = TRUE
IF ( LDEL_CHKPT ) THEN
REMOVE_CHK_FILE_CMD = TRIM ( REMOVE_CMD ) // ' ' //
& TRIM ( FILENAME )
CALL SYSTEM( TRIM( REMOVE_CHK_FILE_CMD ) )
WRITE( 6, 102 ) TRIM( REMOVE_CHK_FILE_CMD )
102 FORMAT( ' - READ_BEFSTRAT_CHKFILE: Executing: ',a )
ENDIF
!### Debug
IF ( LPRT ) CALL DEBUG_MSG('### READ_BEFSTRAT_CHKFILE: read file')
! Return to calling program
END SUBROUTINE READ_BEFSTRAT_CHKFILE
!------------------------------------------------------------------------------
SUBROUTINE COPY_STT_STRAT_TMP( NTRACER, TRACER, NCOUNT )
!
!******************************************************************************
! Subroutine COPY_STT copies the results into the STT tracer array.
! Based on code by Kumaresh, 01/24/08.
! (hml, dkh, 02/14/12, adj32_025)
!
! Arguments as Input:
! ============================================================================
! (1 ) NTRACER (INTEGER) : Tracer number
! (2 ) NCOUNT (INTEGER) : Ctr array - # of data blocks read for each tracer
! (3 ) TRACER (REAL*4 ) : Tracer concentrations from restart file [v/v]
!
! NOTES:
! (1 ) Added to "restart_mod.f". Also added parallel loops. (bmy, 6/25/02)
! (2 ) Now reference AD from "dao_mod.f" (bmy, 9/18/02)
! (3 ) Now exit if N is out of range (bmy, 4/29/03)
! (4 ) Now references N_TRACERS, STT & TCVV from "tracer_mod.f" (bmy, 7/20/04)
! (5 ) Remove call to TRUE_TRACER_INDEX (bmy, 6/24/05)
!******************************************************************************
!
! References to F90 modules
USE DAO_MOD, ONLY : AD
USE TRACER_MOD, ONLY : N_TRACERS, STT_STRAT_TMP, TCVV
! for new strat chem (hml, 10/07/11)
USE TRACER_MOD, ONLY : ITS_A_FULLCHEM_SIM, ITS_A_TAGOX_SIM
USE TRACERID_MOD, ONLY : IDTOX
# include "CMN_SIZE" ! Size parameters
! Arguments
INTEGER, INTENT(IN) :: NTRACER
REAL*4, INTENT(IN) :: TRACER(IIPAR,JJPAR,LLPAR)
INTEGER, INTENT(INOUT) :: NCOUNT(NNPAR)
! Local variables
INTEGER :: I, J, L, N
!=================================================================
! COPY_STT begins here!
!=================================================================
! Tracer number
N = NTRACER
! Exit if N is out of range
IF ( N < 1 .or. N > N_TRACERS ) RETURN
! Now use GMI rate for Ox (hml)
! IF ( ( ITS_A_FULLCHEM_SIM() .or. ITS_A_TAGOX_SIM() ) .and.
! & ( N .eq. IDTOx ) ) RETURN
! store Tracers into GEOS-CHEM tracer arry
!$OMP PARALLEL DO
!$OMP+DEFAULT( SHARED )
!$OMP+PRIVATE( I, J, L )
DO L = 1, LLPAR
DO J = 1, JJPAR
DO I = 1, IIPAR
STT_STRAT_TMP(I,J,L,N) = TRACER(I,J,L)
ENDDO
ENDDO
ENDDO
!$OMP END PARALLEL DO
! Increment the # of records found for tracer N
NCOUNT(N) = NCOUNT(N) + 1
END SUBROUTINE COPY_STT_STRAT_TMP
!------------------------------------------------------------------------------
! End of module
END MODULE CHECKPOINT_MOD