Add files via upload
This commit is contained in:
197
code/inquireMod.F90
Normal file
197
code/inquireMod.F90
Normal file
@ -0,0 +1,197 @@
|
||||
#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
|
Reference in New Issue
Block a user