8485 lines
336 KiB
Fortran
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
|