Files
2018-08-28 00:46:26 -04:00

144 lines
4.9 KiB
Fortran

! $Id: readlai.f,v 1.1 2009/06/09 21:51:52 daven Exp $
SUBROUTINE READLAI( MM )
!
!******************************************************************************
! Subroutine READLAI reads the leaf area indices from disk for two months.
! (yhw, gmg, djj, 1994; bmy, 12/20/04)
!
! Arguments as Input:
! ============================================================================
! (1 ) MM (INTEGER) : Current month number (1-12)
!
! NOTES:
! (1 ) Be sure to force double precision with the DBLE function and the "D"
! exponent, wherever necessary (bmy, 10/6/99)
! (2 ) Now reads the LAI files directly from the data directory, so you don't
! have to create symbolic links anymore (bmy, 7/5/01)
! (3 ) Deleted obsolete code (bmy, 9/4/01, 2/27/02)
! (4 ) Replaced IMX with IGLOB and JMX with JGLOB (bmy, 6/25/02)
! (5 ) Now reference IU_FILE from "file_mod.f" (bmy, 7/31/02)
! (6 ) Now define FILENAME and echo FILENAME to stdout. Now use F90 style
! declaration statements. Cleaned up old code. (bmy, 11/13/02)
! (7 ) Now references DATA_DIR from "directory_mod.f" (bmy, 7/20/04)
! (8 ) Now use AVHRR LAI derived leaf-area index data (stored in the
! leaf_area_index_200412 subdir of DATA_DIR) if the logical switch
! LAVHRRLAI=T. Otherwise use the old LAI data. (tmf, bmy, 12/20/04)
!******************************************************************************
!
! References to F90 modules
USE DIRECTORY_MOD, ONLY : DATA_DIR
USE FILE_MOD, ONLY : IU_FILE
USE LOGICAL_MOD, ONLY : LAVHRRLAI
IMPLICIT NONE
# include "CMN_SIZE" ! Size parameters
# include "CMN_DEP" ! IREG, ILAND, IUSE
# include "CMN_VEL" ! XLAI, XLAI2
! Arguments
INTEGER, INTENT(IN) :: MM
! Local variables
INTEGER :: I, INDEX, J, K, MMM
CHARACTER(LEN=2) :: CMONTH(12) = (/ '01','02','03','04',
& '05','06','07','08',
& '09','10','11','12'/)
CHARACTER(LEN=255) :: FILENAME
!=================================================================
! READLAI begins here!
!=================================================================
! Zero XLAI, XLAI2
DO J = 1, JGLOB
DO I = 1, IGLOB
DO K = 1, IREG(I,J)
XLAI(I,J,K) = 0.D0
XLAI2(I,J,K) = 0.D0
ENDDO
ENDDO
ENDDO
!=================================================================
! Read current month's lai (XLAI) at (I,J) and for landtype K
!=================================================================
! Pick proper filename for the old Yuhang Wang LAI, or
! for AVHRR satellite-derived LAI (tmf, bmy, 12/20/04)
IF ( LAVHRRLAI ) THEN
FILENAME = TRIM( DATA_DIR ) // 'leaf_area_index_200412/lai' //
& CMONTH(MM) // '.global'
ELSE
FILENAME = TRIM( DATA_DIR ) // 'leaf_area_index_200202/lai' //
& CMONTH(MM) // '.global'
ENDIF
! Echo filename
WRITE( 6, 100 ) TRIM( FILENAME )
100 FORMAT( ' - READLAI: Reading ', a )
! Open file
OPEN( IU_FILE, FILE=TRIM( FILENAME ), STATUS='OLD' )
! Read until EOF
! (lzh,02/01/2015) for 0.25 nested
#if defined( GRID025x03125 )
10 READ( IU_FILE, '(3i3,20f5.1)', END=20 )
& I, J, INDEX, ( XLAI(I,J,K), K=1,INDEX )
GOTO 10
#else
10 READ( IU_FILE, '(3i3,20f5.1)', END=20 )
& I, J, INDEX, ( XLAI(I,J,K), K=1,INDEX )
GOTO 10
#endif
! Close file
20 CLOSE( IU_FILE )
! Save for next month
MMM = MM
IF(MMM .EQ. 12) MMM = 0
!=================================================================
! Read following month's lai (XLAI2) at (I,J) and for landtype K
!=================================================================
! Pick proper filename for the old Yuhang Wang LAI, or
! for AVHRR satellite-derived LAI (tmf, bmy, 12/20/04)
IF ( LAVHRRLAI ) THEN
FILENAME = TRIM( DATA_DIR ) // 'leaf_area_index_200412/lai' //
& CMONTH(MMM+1) // '.global'
ELSE
FILENAME = TRIM( DATA_DIR ) // 'leaf_area_index_200202/lai' //
& CMONTH(MMM+1) // '.global'
ENDIF
! Echo filename
WRITE( 6, 100 ) TRIM( FILENAME )
! Open file
OPEN( IU_FILE, FILE=TRIM( FILENAME ), STATUS='OLD' )
! Read until EOF
! 30 READ( IU_FILE, '(3i3,20f5.1)', END=40 )
! & I, J, INDEX, ( XLAI2(I,J,K), K=1,INDEX )
! GOTO 30
! (lzh,02/01/2015) for 0.25 nested
#if defined( GRID025x03125 )
30 READ( IU_FILE, '(3i3,20f5.1)', END=40 )
& I, J, INDEX, ( XLAI2(I,J,K), K=1,INDEX )
GOTO 30
#else
30 READ( IU_FILE, '(3i3,20f5.1)', END=40 )
& I, J, INDEX, ( XLAI2(I,J,K), K=1,INDEX )
GOTO 30
#endif
! Close file
40 CLOSE( IU_FILE )
! Return to calling program
END SUBROUTINE READLAI