!
! $Id: read_taka.f v 1. 2003/07/25 fletcher Exp $
!
!_ ---------------------------------------------------------------------
!_ $Log: read_taka.f $
!_ Revision 1. 25/07/2003 Sara Fletcher
!_ Started Coding
!_
!***********************************************************************
!
! NAME: READ_TAKA.F
!
! DESCRIPTION: This program demonstrates how to read a 3-D netCDF  
!              Takahashi Cimatology file.
!
! COMPILING: 
!
!          f77-o read_taka.x read_taka.f /usr/appl/lib/libnetcdf_g77.a -lnsl
!
! VARIABLES:
!       imt, jmt, nmonths: indices of the region mask in the input file 
!       filename = Name of Net CDF file
!       flux = 3-D array containing a region index which assigns each 
!                      ocean region to a different index value
!
!***********************************************************************

	PROGRAM read_mask
     
! No implicit declarations
        IMPLICIT NONE
        INCLUDE 'netcdf.inc'

! define variables
	CHARACTER*256 string256,filename
	INTEGER imt,jmt, nmonths 
        PARAMETER (imt= 72, jmt=45,nmonths=12)
        REAL*4 lon(imt)
        REAL*4 lat(jmt)
        REAL*4 flux(imt,jmt,nmonths)
        

        INTEGER*4  NC_ID, STATUS
        INTEGER*4 idlon, idlat, idflux



!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! NetCDF filename
! Either 30reg_regionmask.cdf or 16reg_regionmask.cdf 
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        
          filename='taka02_monthly.cdf'

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Open the NetCDF file
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	
       STATUS=NF_OPEN(filename,NF_NOWRITE,NC_ID)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Get the netCDF variable dimensions 
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	
        STATUS=NF_INQ_DIMID(NC_ID,'lon',idlon)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	STATUS=NF_INQ_DIMID(NC_ID,'lat',idlat)
         IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
        
	STATUS=NF_INQ_VARID(NC_ID,'flux_u2',idflux)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)


!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! READ the netCDF DATA
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

	STATUS=NF_GET_VAR_REAL(NC_ID,idlon, lon)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	STATUS=NF_GET_VAR_REAL(NC_ID,idlat,lat)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	STATUS=NF_GET_VAR_REAL(NC_ID,idflux,flux)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)


!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Close the NetCDF file
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	STATUS=NF_CLOSE(NC_ID)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	END


!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Error handling subroutine
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        SUBROUTINE HANDLE_ERRORS(STATUS)

        INCLUDE 'netcdf.inc'
        INTEGER*4 STATUS

        IF (STATUS .NE. nf_noerr) THEN
                PRINT *, nf_strerror(STATUS)
                STOP 'stopped'
        ENDIF

        END

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

