Files
GEOS-Chem-adjoint-v35-note/code/inquireMod.F90
2018-08-28 00:46:26 -04:00

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