198 lines
5.2 KiB
Fortran
198 lines
5.2 KiB
Fortran
#if defined( ESMF_ )
|
|
! We only need to refer to this include file if we are connecting
|
|
! to the GEOS-5 GCM via the ESMF/MAPL framework (bmy, 8/3/12)
|
|
#include "MAPL_Generic.h"
|
|
#endif
|
|
!------------------------------------------------------------------------
|
|
! NASA/GSFC, Global Modeling and Assimilation Office, Code 910.1 !
|
|
!------------------------------------------------------------------------
|
|
!BOP
|
|
!
|
|
! !MODULE: inquireMod
|
|
!
|
|
! !DESCRIPTION: Module inquireMod contains functions to find free and
|
|
! unopened logical file units (LUNs) for Fortran I/O.
|
|
!
|
|
! !INTERFACE:
|
|
!
|
|
MODULE inquireMod
|
|
!
|
|
! !USES:
|
|
!
|
|
#if defined( ESMF_ )
|
|
! We only need to refer to these modules if we are connecting
|
|
! to the GEOS-5 GCM via the ESMF/MAPL framework (bmy, 8/3/12)
|
|
USE ESMF_Mod
|
|
USE MAPL_Mod
|
|
#endif
|
|
|
|
IMPLICIT NONE
|
|
PRIVATE
|
|
!
|
|
! !PUBLIC MEMBER FUNCTIONS:
|
|
!
|
|
PUBLIC :: findFreeLUN
|
|
PUBLIC :: I_Am_UnOPENed
|
|
!
|
|
! !REVISION HISTORY:
|
|
! 14 Jun 2012 - E. Nielsen - Initial version
|
|
! 03 Aug 2012 - R. Yantosca - Block off ESMF-specific code with #ifdefs
|
|
! 03 Aug 2012 - R. Yantosca - Cosmetic changes
|
|
!EOP
|
|
!------------------------------------------------------------------------------
|
|
!BOC
|
|
CONTAINS
|
|
!EOC
|
|
!------------------------------------------------------------------------
|
|
! NASA/GSFC, Global Modeling and Assimilation Office, Code 910.1 !
|
|
!------------------------------------------------------------------------
|
|
!BOP
|
|
!
|
|
! !IROUTINE: findFreeLUN
|
|
!
|
|
! !DESCRIPTION: Inquire for an existing, but unopened, logical unit number
|
|
!\\
|
|
!\\
|
|
! !INTERFACE:
|
|
!
|
|
FUNCTION findFreeLUN( b ) RESULT( lun )
|
|
!
|
|
! !USES:
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
! !INPUT PARAMETERS:
|
|
!
|
|
INTEGER, INTENT(IN), OPTIONAL :: b ! Not really used here
|
|
!
|
|
! !RETURN VALUE:
|
|
!
|
|
INTEGER :: lun
|
|
!
|
|
! !REVISION HISTORY:
|
|
! 14 Jun 2012 - E. Nielsen - Initial version
|
|
! 03 Aug 2012 - R. Yantosca - Block off ESMF-specific code with #ifdefs
|
|
! 03 Aug 2012 - R. Yantosca - Cosmetic changes
|
|
! 06 Aug 2012 - R. Yantosca - Now make LUN range 11..199
|
|
!EOP
|
|
!------------------------------------------------------------------------------
|
|
!BOC
|
|
!
|
|
! !LOCAL VARIABLES:
|
|
!
|
|
INTEGER :: i, rc, status
|
|
LOGICAL :: exists ! File existence
|
|
LOGICAL :: found ! Detect unused logical unit
|
|
LOGICAL :: open ! Is open?
|
|
|
|
#if defined( ESMF_ )
|
|
CHARACTER(LEN=ESMF_MAXSTR) :: Iam
|
|
#else
|
|
CHARACTER(LEN=255) :: Iam
|
|
#endif
|
|
!
|
|
! !DEFINED PARAMETERS
|
|
!
|
|
INTEGER, PARAMETER :: iTop = 199 ! Maximum LUN limit
|
|
|
|
!======================================================================
|
|
! Initialization
|
|
!======================================================================
|
|
Iam = "GEOSCHEMCHEM::findFreeLUN"
|
|
status = 0
|
|
rc = 0
|
|
|
|
!======================================================================
|
|
! Find an available logical unit
|
|
!======================================================================
|
|
found = .FALSE.
|
|
i = 11
|
|
|
|
DO WHILE ( .NOT. found .AND. i <= iTop )
|
|
INQUIRE( UNIT=i, EXIST=exists, OPENED=open )
|
|
IF ( exists .AND. .NOT. open ) THEN
|
|
found = .TRUE.
|
|
lun = i
|
|
ENDIF
|
|
i = i + 1
|
|
ENDDO
|
|
|
|
IF ( .NOT. found ) THEN
|
|
status = 1
|
|
PRINT *,TRIM( Iam ) // ": No available logical units"
|
|
ENDIF
|
|
|
|
#if defined( ESMF_ )
|
|
VERIFY_(status)
|
|
#endif
|
|
|
|
END FUNCTION findFreeLUN
|
|
!EOC
|
|
!------------------------------------------------------------------------
|
|
! NASA/GSFC, Global Modeling and Assimilation Office, Code 910.1 !
|
|
!------------------------------------------------------------------------
|
|
!BOP
|
|
!
|
|
! !IROUTINE: I_Am_UnOPENed
|
|
!
|
|
! !DESCRIPTION: Inquire as to the availability of a given logical unit
|
|
!\\
|
|
!\\
|
|
! !INTERFACE:
|
|
!
|
|
FUNCTION I_Am_UnOPENed( n ) RESULT( TorF )
|
|
!
|
|
! !USES:
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
! !INPUT PARAMETERS:
|
|
!
|
|
INTEGER :: n ! Logical unit # to test
|
|
!
|
|
! !RETURN VALUE:
|
|
!
|
|
LOGICAL :: TorF ! .TRUE. means the file is unopened
|
|
!
|
|
! !REVISION HISTORY:
|
|
! 14 Jun 2012 - E. Nielsen - Initial version
|
|
! 03 Aug 2012 - R. Yantosca - Block off ESMF-specific code with #ifdefs
|
|
! 03 Aug 2012 - R. Yantosca - Cosmetic changes
|
|
!EOP
|
|
!------------------------------------------------------------------------------
|
|
!BOC
|
|
!
|
|
! !LOCAL VARIABLES:
|
|
!
|
|
INTEGER :: rc, status
|
|
LOGICAL :: exists ! File existence
|
|
LOGICAL :: open ! Is open?
|
|
|
|
#if defined( ESMF_ )
|
|
CHARACTER(LEN=ESMF_MAXSTR) :: Iam
|
|
#else
|
|
CHARACTER(LEN=255) :: Iam
|
|
#endif
|
|
|
|
!======================================================================
|
|
! Initialization
|
|
!======================================================================
|
|
Iam = "GEOSCHEMCHEM::I_Am_UnOPENed"
|
|
status = 0
|
|
rc = 0
|
|
|
|
!======================================================================
|
|
! Inquire if the LUN is available
|
|
!======================================================================
|
|
INQUIRE( UNIT=n, EXIST=exists, OPENED=open )
|
|
|
|
IF ( exists .AND. .NOT. open ) THEN
|
|
TorF = .TRUE.
|
|
ELSE
|
|
TorF = .FALSE.
|
|
ENDIF
|
|
|
|
END FUNCTION I_Am_UnOPENed
|
|
!EOC
|
|
END MODULE inquireMod
|