!
! $Id: write_nc_MaskAreaBathy.F,v 1.1.1.1 2003/05/01 21:25:53 fletcher Exp $
!
!_ ---------------------------------------------------------------------
!_ RCS lines preceded by "c_ "
!_ ---------------------------------------------------------------------
!_
!_ $Source: /usr/data/cvsroot/fletcher/MOM_3/MOM_3/ocmip2/write_nc_MaskAreaBathy.F,v $
!_ $Revision: 1.1.1.1 $
!_ $Date: 2003/05/01 21:25:53 $   ;  $State: Exp $
!_ $Author: fletcher $ ;  $Locker:  $
!_
!_ ---------------------------------------------------------------------
!_ $Log: write_nc_MaskAreaBathy.F,v $
!_ Revision 1.1.1.1  2003/05/01 21:25:53  fletcher
!_ Added code to write inversion variables
!_
!_ Revision 1.1.1.1  2001/01/23 23:01:05  frenzel
!_ MOM 3 Sources from Rick Slater
!_
!_ Revision 1.2  1999/11/18 17:12:03  rdslater
!_ Cosmetic changes: change cmoment character to "!", add $Id string at
!_ top, remove *4 specifier on type statements.
!_
!_ Revision 1.1.1.1  1999/05/19 15:40:41  rdslater
!_ Imported sources: OCN19 OCMIP2 CFC runs
!_
!_ Revision 2.1  1999/04/29 11:44:58  orr
!_ Now GDT 1.2 compatible!!!
!_ Added argument "production"
!_
!_ Revision 1.3  1998/09/10 09:22:26  brocksce
!_ Add missing value attribute for BATHY variable.
!_
!_ Revision 1.2  1998/08/26 12:09:12  brocksce
!_ Fixed convention error on two-dimensional bound arrays
!_ (confusion between C and FORTRAN notations).
!_
!_ Revision 1.1  1998/07/21 16:55:54  jomce
!_ Initial revision
!_
!_ ---------------------------------------------------------------------
!_

!***********************************************************************
!
! NAME: WRITE_NC_MaskAreaBathy
!
! INPUT:
!       group= group code (ex: IPSL)
!       production= production (model and version ex: OPA 8.1)
!       imt= dimension
!       jmt= dimension
!       kmt= dimension
!       lon= longitude axis [degrees East]
!       bounds_lon= boundaries array [degrees East]
!                 = bounds_lon(i,j,1,1) represents the lower left boundary
!                 = bounds_lon(i,j,2,1) represents the lower right boundary
!                 = bounds_lon(i,j,1,2) represents the upper left boundary
!                 = bounds_lon(i,j,2,2) represents the upper right boundary
!       lat= latitude axis [degrees North]
!       bounds_lat= boundaries array [degrees North]
!                 = bounds_lat(i,j,1,1) represents the lower left boundary
!                 = bounds_lat(i,j,2,1) represents the lower right boundary
!                 = bounds_lat(i,j,1,2) represents the upper left boundary
!                 = bounds_lat(i,j,2,2) represents the upper right boundary
!       depth= depth axis [meters]
!       bounds_depth= boundaries array [meters]
!                   = bounds_dept(k,1) represents the lower boundary
!                   = bounds_dept(k,2) represents the upper boundary
!
!       MASK= Mask Land/Ocean at tracer points [0/1]
!       AREA= Surface Area of tracer cells [m^2]
!       BATHY= Bathymetry [m]
!       REG_AREA = Area of each dye region 
!
! OUTPUT FILE:
!       A netcdf file (clobbed if exists) with
!       the filename group_MaskAreaBathy.nc
!
!***********************************************************************

	SUBROUTINE WRITE_NC_MaskAreaBathy(
     &	group,production,
     &	imt,jmt,kmt,ndyetrac,
     &	lon,bounds_lon,lat,bounds_lat,depth,bounds_depth,
     &	MASK,AREA,BATHY,REGION_MASK,REGION_AREA)
     
! No implicit declarations
        IMPLICIT NONE

! Arguments
	CHARACTER*(*) group
	CHARACTER*(*) production
	INTEGER imt,jmt,kmt,ndyetrac
        REAL lon(imt,jmt),bounds_lon(imt,jmt,2,2)
        REAL lat(imt,jmt),bounds_lat(imt,jmt,2,2)
	REAL depth(kmt),bounds_depth(kmt,2)
	REAL MASK(imt,jmt,kmt)
	REAL AREA(imt,jmt)
	REAL BATHY(imt,jmt)
        REAL REGION_MASK(imt,jmt,ndyetrac)
        REAL REGION_AREA(ndyetrac)
    

! Constants
        REAL missing_value
        PARAMETER (missing_value=-1.E+34)

! Local variables
	CHARACTER*256 string256,filename

! Function
!       INTEGER LEN_TRIM

! NetCDF variables
#include "netcdf.inc"
	INTEGER NC_ID
	INTEGER STATUS
	INTEGER LON_DIM,LON_ID
	INTEGER LAT_DIM,LAT_ID
	INTEGER DEPTH_DIM,DEPTH_ID
        INTEGER DYE_DIM, DYE_ID
        INTEGER TWO_DIM
        INTEGER BOUNDS_LON_ID
        INTEGER BOUNDS_LAT_ID
	INTEGER BOUNDS_DEPTH_ID
	INTEGER MASK_ID,AREA_ID,BATHY_ID, REG_MASK_ID, REG_AREA_ID
	INTEGER DIMS_2D(2)
	INTEGER DIMS_3D(3)
	INTEGER DIMS_4D(4)
        INTEGER DIMS_3D_REG(3)

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Build the NetCDF filename
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        filename=group//'_MaskAreaBathy.nc'

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

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Define dimensions 
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	STATUS=NF_DEF_DIM(NC_ID,'x',imt,LON_DIM)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	STATUS=NF_DEF_DIM(NC_ID,'y',jmt,LAT_DIM)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_DEF_DIM(NC_ID,'depth',kmt,DEPTH_DIM)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_DEF_DIM(NC_ID,'dye',ndyetrac,DYE_DIM)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	STATUS=NF_DEF_DIM(NC_ID,'two',2,TWO_DIM)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Define variables
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        DIMS_2D(1)=LON_DIM
        DIMS_2D(2)=LAT_DIM
        STATUS=NF_DEF_VAR(NC_ID,'lon',NF_FLOAT,
     &  2,DIMS_2D,LON_ID)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        DIMS_4D(1)=LON_DIM
        DIMS_4D(2)=LAT_DIM
        DIMS_4D(3)=TWO_DIM
        DIMS_4D(4)=TWO_DIM
        STATUS=NF_DEF_VAR(NC_ID,'bounds_lon',NF_FLOAT,
     &  4,DIMS_4D,BOUNDS_LON_ID)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        STATUS=NF_DEF_VAR(NC_ID,'lat',NF_FLOAT,
     &  2,DIMS_2D,LAT_ID)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        STATUS=NF_DEF_VAR(NC_ID,'bounds_lat',NF_FLOAT,
     &  4,DIMS_4D,BOUNDS_LAT_ID)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        STATUS=NF_DEF_VAR(NC_ID,'depth',NF_FLOAT,
     &	1,DEPTH_DIM,DEPTH_ID)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
	DIMS_2D(1)=DEPTH_DIM
	DIMS_2D(2)=TWO_DIM
	STATUS=NF_DEF_VAR(NC_ID,'bounds_depth',NF_FLOAT,
     &	2,DIMS_2D,BOUNDS_DEPTH_ID)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
	DIMS_3D(1)=LON_DIM
	DIMS_3D(2)=LAT_DIM
	DIMS_3D(3)=DEPTH_DIM
	STATUS=NF_DEF_VAR(NC_ID,'MASK',NF_FLOAT,
     &	3,DIMS_3D,MASK_ID)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
	DIMS_2D(1)=LON_DIM
	DIMS_2D(2)=LAT_DIM
	STATUS=NF_DEF_VAR(NC_ID,'AREA',NF_FLOAT,
     &	2,DIMS_2D,AREA_ID)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
	DIMS_2D(1)=LON_DIM
	DIMS_2D(2)=LAT_DIM
	STATUS=NF_DEF_VAR(NC_ID,'BATHY',NF_FLOAT,
     &	2,DIMS_2D,BATHY_ID)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
      DIMS_3D_REG(1)=LON_DIM
      DIMS_3D_REG(2)=LAT_DIM
      DIMS_3D_REG(3)=DYE_DIM
        STATUS=NF_DEF_VAR(NC_ID,'REGION_MASK',NF_FLOAT,
     &  3,DIMS_3D_REG,REG_MASK_ID)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
      STATUS=NF_DEF_VAR(NC_ID,'REGION_AREA', NF_FLOAT,
     & 1,DYE_DIM, REG_AREA_ID)
      IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Define global attributes
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        string256='GDT 1.2'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'Conventions',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256=filename
        STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'file_name',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256=group//'_grid.nc'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'associate_file',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256='Ocean Inversion'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'project',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256=group
        STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'institution',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256=production
        STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'production',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Define variable attributes
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        string256='Longitude'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,LON_ID,'long_name',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='degrees_east'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,LON_ID,'units',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_PUT_ATT_REAL(NC_ID,LON_ID,'modulo',
     &	NF_FLOAT,1,360.0)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='circular'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,LON_ID,'topology',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='bounds_lon'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,LON_ID,'bounds',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256='Latitude'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,LAT_ID,'long_name',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='degrees_north'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,LAT_ID,'units',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='bounds_lat'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,LAT_ID,'bounds',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256='Depth below the surface'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,DEPTH_ID,'long_name',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='meters'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,DEPTH_ID,'units',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='down'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,DEPTH_ID,'positive',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='bounds_depth'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,DEPTH_ID,'bounds',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256='Mask Land/Ocean'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,MASK_ID,'long_name',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='0/1'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,MASK_ID,'units',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	string256='depth lat lon'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,MASK_ID,'associate',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256='Surface Area of cells'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,AREA_ID,'long_name',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='m^2'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,AREA_ID,'units',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	string256='lat lon'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,AREA_ID,'associate',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        string256='Bathymetry'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,BATHY_ID,'long_name',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	string256='m'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,BATHY_ID,'units',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_PUT_ATT_REAL(NC_ID,BATHY_ID,'missing_value',
     &  NF_FLOAT,1,missing_value)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	string256='lat lon'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,BATHY_ID,'associate',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        string256='Region Mask'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_MASK_ID,'long_name',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='dimensionless'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_MASK_ID,'units',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_PUT_ATT_REAL(NC_ID,REG_MASK_ID,'missing_value',
     &  NF_FLOAT,1,missing_value)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='lat lon dye'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_MASK_ID,'associate',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

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

        string256='Region Area'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_AREA_ID,'long_name',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='m^2'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_AREA_ID,'units',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_PUT_ATT_REAL(NC_ID,REG_AREA_ID,'missing_value',
     &  NF_FLOAT,1,missing_value)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        string256='dye'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,REG_AREA_ID,'associate',
     &  LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

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

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! End of define mode
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	STATUS=NF_ENDDEF(NC_ID)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Write data to file
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	STATUS=NF_PUT_VAR_REAL(NC_ID,LON_ID,lon)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_PUT_VAR_REAL(NC_ID,BOUNDS_LON_ID,bounds_lon)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
	
	STATUS=NF_PUT_VAR_REAL(NC_ID,LAT_ID,lat)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_PUT_VAR_REAL(NC_ID,BOUNDS_LAT_ID,bounds_lat)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	STATUS=NF_PUT_VAR_REAL(NC_ID,DEPTH_ID,depth)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	STATUS=NF_PUT_VAR_REAL(NC_ID,BOUNDS_DEPTH_ID,bounds_depth)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	STATUS=NF_PUT_VAR_REAL(NC_ID,MASK_ID,MASK)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

	STATUS=NF_PUT_VAR_REAL(NC_ID,AREA_ID,AREA)

	STATUS=NF_PUT_VAR_REAL(NC_ID,BATHY_ID,BATHY)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_PUT_VAR_REAL(NC_ID,REG_MASK_ID,REGION_MASK)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

       STATUS=NF_PUT_VAR_REAL(NC_ID,REG_AREA_ID,REGION_AREA)
       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
