1103 lines
40 KiB
Fortran
1103 lines
40 KiB
Fortran
!$Id: netcdf_util_mod.f,v 1.1 2012/03/01 22:00:27 daven Exp $
|
|
!------------------------------------------------------------------------------
|
|
! Harvard University Atmospheric Chemistry Modeling Group !
|
|
!------------------------------------------------------------------------------
|
|
!BOP
|
|
!
|
|
! !MODULE: netcdf_util_mod
|
|
!
|
|
!\\
|
|
!\\
|
|
! !INTERFACE:
|
|
!
|
|
MODULE NETCDF_UTIL_MOD
|
|
!
|
|
! !USES:
|
|
!
|
|
USE NETCDF
|
|
IMPLICIT NONE
|
|
PRIVATE
|
|
!
|
|
|
|
!
|
|
! !PUBLIC MEMBER FUNCTIONS:
|
|
!
|
|
! Functions
|
|
PUBLIC :: NCDF_GET_VARID ! Return variable ID
|
|
PUBLIC :: NCDF_GET_DIMID ! Return variable ID
|
|
|
|
! Subroutines
|
|
PUBLIC :: NCDF_OPEN_FOR_READ
|
|
PUBLIC :: NCDF_CLOSE
|
|
|
|
PUBLIC :: NCDF_VAR_EXIST
|
|
PUBLIC :: NCDF_DIM_EXIST
|
|
|
|
PUBLIC :: NCDF_GET_VAR ! Get data from a netCDF file
|
|
|
|
PUBLIC :: NCDF_SYNC ! Push data in buffers to the file ahead of close
|
|
|
|
PUBLIC :: CHECK_NCDF ! Test for error on netCDF API functions
|
|
PUBLIC :: NCDF_INIT ! Set intial variables, etc.
|
|
!
|
|
! !PRIVATE MEMBER FUNCTIONS:
|
|
!
|
|
! !PUBLIC DATA MEMBERS:
|
|
INTEGER, PUBLIC :: NCDF_CHAR
|
|
INTEGER, PUBLIC :: NCDF_INT
|
|
INTEGER, PUBLIC :: NCDF_REAL
|
|
|
|
INTEGER, PUBLIC :: DEF_LEV ! Deflation level
|
|
|
|
! Dimension IDs
|
|
INTEGER, PUBLIC :: LVL_DIMID, LVL_VARID ! Vertical level dimension
|
|
INTEGER, PUBLIC :: LVLE_DIMID, LVLE_VARID ! Vertical edge dimension
|
|
INTEGER, PUBLIC :: LAT_DIMID, LAT_VARID ! Latitude dimension
|
|
INTEGER, PUBLIC :: LON_DIMID, LON_VARID ! Longitude dimension
|
|
INTEGER, PUBLIC :: TRACER_DIMID ! Tracer dimension
|
|
INTEGER, PUBLIC :: STRLEN_8_DIMID ! CHAR(LEN=8) dimension
|
|
INTEGER, PUBLIC :: STRLEN_16_DIMID ! CHAR(LEN=16) dimension
|
|
INTEGER, PUBLIC :: STRLEN_64_DIMID ! CHAR(LEN=64) dimension
|
|
INTEGER, PUBLIC :: PL_DIMID, PL_VARID ! Prod or Loss dimension
|
|
INTEGER, PUBLIC :: REC_DIMID, REC_VARID ! Record dimension (time,unlimited)
|
|
INTEGER, PUBLIC :: TRACER_NAME_VARID
|
|
|
|
!
|
|
! !REMARKS:
|
|
!
|
|
! References:
|
|
! ============================================================================
|
|
! (1 )
|
|
! !REVISION HISTORY:
|
|
! 2 Feb 2011 - L. Murray - Initial version.
|
|
! 1 Jun 2011 - L. Murray - Read-only version of the code.
|
|
!EOP
|
|
!------------------------------------------------------------------------------
|
|
!BOC
|
|
!
|
|
! !PRIVATE TYPES:
|
|
!
|
|
INTERFACE NCDF_GET_VAR
|
|
! Compiler chooses which one is appropriate when called
|
|
MODULE PROCEDURE NCDF_GET_VAR_CHAR
|
|
MODULE PROCEDURE NCDF_GET_VAR_1D_CHAR
|
|
MODULE PROCEDURE NCDF_GET_VAR_2D_CHAR
|
|
MODULE PROCEDURE NCDF_GET_VAR_3D_CHAR
|
|
MODULE PROCEDURE NCDF_GET_VAR_4D_CHAR
|
|
MODULE PROCEDURE NCDF_GET_VAR_5D_CHAR
|
|
MODULE PROCEDURE NCDF_GET_VAR_6D_CHAR
|
|
MODULE PROCEDURE NCDF_GET_VAR_7D_CHAR
|
|
MODULE PROCEDURE NCDF_GET_VAR_INT
|
|
MODULE PROCEDURE NCDF_GET_VAR_1D_INT
|
|
MODULE PROCEDURE NCDF_GET_VAR_2D_INT
|
|
MODULE PROCEDURE NCDF_GET_VAR_3D_INT
|
|
MODULE PROCEDURE NCDF_GET_VAR_4D_INT
|
|
MODULE PROCEDURE NCDF_GET_VAR_5D_INT
|
|
MODULE PROCEDURE NCDF_GET_VAR_6D_INT
|
|
MODULE PROCEDURE NCDF_GET_VAR_7D_INT
|
|
MODULE PROCEDURE NCDF_GET_VAR_REAL
|
|
MODULE PROCEDURE NCDF_GET_VAR_1D_REAL
|
|
MODULE PROCEDURE NCDF_GET_VAR_2D_REAL
|
|
MODULE PROCEDURE NCDF_GET_VAR_3D_REAL
|
|
MODULE PROCEDURE NCDF_GET_VAR_4D_REAL
|
|
MODULE PROCEDURE NCDF_GET_VAR_5D_REAL
|
|
MODULE PROCEDURE NCDF_GET_VAR_6D_REAL
|
|
MODULE PROCEDURE NCDF_GET_VAR_7D_REAL
|
|
MODULE PROCEDURE NCDF_GET_VAR_DBLE
|
|
MODULE PROCEDURE NCDF_GET_VAR_1D_DBLE
|
|
MODULE PROCEDURE NCDF_GET_VAR_2D_DBLE
|
|
MODULE PROCEDURE NCDF_GET_VAR_3D_DBLE
|
|
MODULE PROCEDURE NCDF_GET_VAR_4D_DBLE
|
|
MODULE PROCEDURE NCDF_GET_VAR_5D_DBLE
|
|
MODULE PROCEDURE NCDF_GET_VAR_6D_DBLE
|
|
MODULE PROCEDURE NCDF_GET_VAR_7D_DBLE
|
|
END INTERFACE
|
|
|
|
CONTAINS
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE CHECK_NCDF( STATUS )
|
|
USE ERROR_MOD, ONLY : GEOS_CHEM_STOP
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: STATUS
|
|
|
|
IF ( STATUS /= nf90_noerr ) THEN
|
|
WRITE(6,*) 'Error with netCDF'
|
|
PRINT*,trim( nf90_strerror(status) )
|
|
CALL GEOS_CHEM_STOP
|
|
END IF
|
|
|
|
END SUBROUTINE CHECK_NCDF
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_INIT
|
|
! Call only once
|
|
IMPLICIT NONE
|
|
|
|
! Set type flags
|
|
NCDF_CHAR = NF90_CHAR
|
|
NCDF_INT = NF90_INT
|
|
NCDF_REAL = NF90_REAL
|
|
|
|
END SUBROUTINE NCDF_INIT
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_OPEN_FOR_READ( NCID, FILENAME )
|
|
IMPLICIT NONE
|
|
|
|
CHARACTER(LEN=*), INTENT( IN ) :: FILENAME
|
|
INTEGER, INTENT( OUT ) :: NCID
|
|
|
|
write(6,*) 'netCDF: Opening file for read: ',trim(filename)
|
|
call check_ncdf( nf90_open( trim(filename), nf90_nowrite, ncid ) )
|
|
|
|
END SUBROUTINE NCDF_OPEN_FOR_READ
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
FUNCTION NCDF_DIM_EXIST( NCID, DIMNAME ) RESULT( DIMEXIST )
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
CHARACTER(LEN=*), INTENT( IN ) :: dimName
|
|
LOGICAL :: dimExist
|
|
|
|
INTEGER :: dimid, status
|
|
|
|
dimExist = .false.
|
|
|
|
! Inquire about the the variable id
|
|
status = nf90_inq_dimid( ncid, trim(dimname), dimid )
|
|
if ( status .eq. nf90_NoErr ) dimExist = .true.
|
|
|
|
END FUNCTION NCDF_DIM_EXIST
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
FUNCTION NCDF_VAR_EXIST( NCID, VARNAME ) RESULT( VAREXIST )
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
CHARACTER(LEN=*), INTENT( IN ) :: VARNAME
|
|
LOGICAL :: varExist
|
|
|
|
INTEGER :: varid, status
|
|
|
|
varExist = .false.
|
|
|
|
! Inquire about the the variable id
|
|
status = nf90_inq_varid( ncid, trim(varname), varid )
|
|
if ( status .eq. nf90_NoErr ) varExist = .true.
|
|
! status .eq. -49 is variable not found
|
|
|
|
END FUNCTION NCDF_VAR_EXIST
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
FUNCTION NCDF_GET_DIMID( NCID, DIMNAME ) RESULT( DIMID )
|
|
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
CHARACTER(LEN=*), INTENT( IN ) :: DIMNAME
|
|
INTEGER :: DIMID
|
|
|
|
! Get the dimiable id
|
|
call check_ncdf( nf90_inq_dimid( ncid, trim(dimname), dimid ) )
|
|
|
|
END FUNCTION NCDF_GET_DIMID
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
FUNCTION NCDF_GET_VARID( NCID, VARNAME ) RESULT( VARID )
|
|
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
CHARACTER(LEN=*), INTENT( IN ) :: VARNAME
|
|
INTEGER :: VARID
|
|
|
|
! Get the variable id
|
|
call check_ncdf( nf90_inq_varid( ncid, trim(varname), varid ) )
|
|
|
|
END FUNCTION NCDF_GET_VARID
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_CHAR(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
CHARACTER(LEN=*), INTENT( OUT ) :: ARRAY
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_CHAR
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_1D_CHAR(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
CHARACTER(LEN=*), INTENT( OUT ) :: ARRAY(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_1D_CHAR
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_2D_CHAR(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
CHARACTER(LEN=*), INTENT( OUT ) :: ARRAY(:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_2D_CHAR
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_3D_CHAR(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
CHARACTER(LEN=*), INTENT( OUT ) :: ARRAY(:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_3D_CHAR
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_4D_CHAR(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
CHARACTER(LEN=*), INTENT( OUT ) :: ARRAY(:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_4D_CHAR
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_5D_CHAR(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
CHARACTER(LEN=*), INTENT( OUT ) :: ARRAY(:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_5D_CHAR
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_6D_CHAR(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
CHARACTER(LEN=*), INTENT( OUT ) :: ARRAY(:,:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_6D_CHAR
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_7D_CHAR(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
CHARACTER(LEN=*), INTENT( OUT ) :: ARRAY(:,:,:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_7D_CHAR
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_INT(NCID, VARID, VALUE )
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
INTEGER, INTENT( OUT ) :: VALUE
|
|
|
|
! Get the variable
|
|
call check_ncdf( nf90_get_var( ncid, varID, value ) )
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_INT
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_1D_INT(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
INTEGER, INTENT( OUT ) :: ARRAY(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_1D_INT
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_2D_INT(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
INTEGER, INTENT( OUT ) :: ARRAY(:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_2D_INT
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_3D_INT(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
INTEGER, INTENT( OUT ) :: ARRAY(:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_3D_INT
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_4D_INT(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
INTEGER, INTENT( OUT ) :: ARRAY(:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_4D_INT
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_5D_INT(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
INTEGER, INTENT( OUT ) :: ARRAY(:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_5D_INT
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_6D_INT(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
INTEGER, INTENT( OUT ) :: ARRAY(:,:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_6D_INT
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_7D_INT(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
INTEGER, INTENT( OUT ) :: ARRAY(:,:,:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_7D_INT
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_REAL(NCID, VARID, VALUE )
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*4, INTENT( OUT ) :: VALUE
|
|
|
|
! Get the variable
|
|
call check_ncdf( nf90_get_var( ncid, varID, value ) )
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_REAL
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_1D_REAL(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*4, INTENT( OUT ) :: ARRAY(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_1D_REAL
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_2D_REAL(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*4, INTENT( OUT ) :: ARRAY(:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_2D_REAL
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_3D_REAL(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*4, INTENT( OUT ) :: ARRAY(:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_3D_REAL
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_4D_REAL(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*4, INTENT( OUT ) :: ARRAY(:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_4D_REAL
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_5D_REAL(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*4, INTENT( OUT ) :: ARRAY(:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_5D_REAL
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_6D_REAL(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*4, INTENT( OUT ) :: ARRAY(:,:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_6D_REAL
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_7D_REAL(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*4, INTENT( OUT ) :: ARRAY(:,:,:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_7D_REAL
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_DBLE(NCID, VARID, VALUE )
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*8, INTENT( OUT ) :: VALUE
|
|
|
|
! Get the variable
|
|
call check_ncdf( nf90_get_var( ncid, varID, value ) )
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_DBLE
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_1D_DBLE(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*8, INTENT( OUT ) :: ARRAY(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_1D_DBLE
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_2D_DBLE(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*8, INTENT( OUT ) :: ARRAY(:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_2D_DBLE
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_3D_DBLE(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*8, INTENT( OUT ) :: ARRAY(:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_3D_DBLE
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_4D_DBLE(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*8, INTENT( OUT ) :: ARRAY(:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_4D_DBLE
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_5D_DBLE(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*8, INTENT( OUT ) :: ARRAY(:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_5D_DBLE
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_6D_DBLE(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*8, INTENT( OUT ) :: ARRAY(:,:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_6D_DBLE
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_GET_VAR_7D_DBLE(NCID, VARID, ARRAY, START, COUNT)
|
|
|
|
IMPLICIT NONE
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
INTEGER, INTENT( IN ) :: VARID
|
|
REAL*8, INTENT( OUT ) :: ARRAY(:,:,:,:,:,:,:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: START(:)
|
|
INTEGER, OPTIONAL, INTENT( IN ) :: COUNT(:)
|
|
|
|
! Get the variable
|
|
if ( present( start ) .and. present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start, count=count ) )
|
|
else if ( present( start ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& start=start ) )
|
|
else if ( present( count ) ) then
|
|
call check_ncdf( nf90_get_var( ncid, varID, array,
|
|
& count=count ) )
|
|
else
|
|
call check_ncdf( nf90_get_var( ncid, varID, array ) )
|
|
endif
|
|
|
|
END SUBROUTINE NCDF_GET_VAR_7D_DBLE
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_SYNC( NCID )
|
|
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
call check_ncdf( nf90_sync( NCID ) )
|
|
|
|
END SUBROUTINE NCDF_SYNC
|
|
|
|
!------------------------------------------------------------------------------
|
|
|
|
SUBROUTINE NCDF_CLOSE( NCID )
|
|
USE NETCDF
|
|
|
|
INTEGER, INTENT( IN ) :: NCID
|
|
call check_ncdf( nf90_close( NCID ) )
|
|
|
|
END SUBROUTINE NCDF_CLOSE
|
|
|
|
END MODULE NETCDF_UTIL_MOD
|