!_ ---------------------------------------------------------------------
!_ RCS lines preceded by "c_ "
!_ ---------------------------------------------------------------------
!_
!_ $Revision: 1.1 $
!_ $Date: 1999/11/18 17:20:23 $   ;  $State: Exp $
!_ $Author: rdslater $ ;  $Locker:  $
!_ $Revised for use in Ocean inversion project by sfletcher
!_
!_ ---------------------------------------------------------------------
!_ $Log: write_nc_basisfnctns.f,v $
!_ Revision 1.1  1999/11/18 17:20:23  rdslater
!_ Initial conversion of OCMIP-2 routines.
!_
!_Revision1.5 2003/2/12 sfletcher
!_corrected for some errors
!_
!_ Revision 1.4 2003/2/12 sfletcher
!_Modified to write dye tracers for ocean inversion
!_
!_ Revision 1.3  1999/10/19 10:36:44  jomce
!_ Split RCS file and revision indicator across two lines (< 72 chars)
!_
!_ Revision 1.2  1999/10/19 09:46:26  jomce
!_ Added "a" to end of filename (root) to identify annual files (nt=1)
!_ Added string to identify RCS filename and revision
!_
!_ Revision 1.1  1999/10/04 12:38:48  orr
!_ Initial revision
!_
!_ ---------------------------------------------------------------------
!_ 
!***********************************************************************
!
! NAME: WRITE_NC_basisfnctns
!
! INPUT:
!       group= group code (ex: IPSL)
!       production= production (model and version ex: OPA 8.1) 
!       run=Timedep or Stationary
!       imt= dimension
!       jmt= dimension
!       kmt= dimension
!       ndyetrac=number of dye tracers 
!       year= year of simulation [years]
!       nb_seconds_per_year= following your model year [s]
!       nb_timesteps_per_year= following your model timestep 
!
! 	dye_arr= Concentration of dye tracer [mol/cm^3]
!
! OUTPUT FILE:
!       A netcdf file (clobbed if exists) with
!       the filename group_dye_basisfnctns.nc
!
!***********************************************************************

	SUBROUTINE WRITE_NC_basisfnctns(
     &	group,production,run,
     &	imt,jmt,kmt,ndyetrac,
     &	year,nb_seconds_per_year,nb_timesteps_per_year,
     &  dye_arr)

! No implicit declarations
        IMPLICIT NONE

! Arguments
	CHARACTER*(*) group
	CHARACTER*(*) run
	CHARACTER*(*) production
	INTEGER imt,jmt,kmt,ndyetrac
	INTEGER year
	INTEGER nb_seconds_per_year
	INTEGER nb_timesteps_per_year
	REAL dye_arr(imt,jmt,kmt,ndyetrac)

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

! Local variables
	CHARACTER*256 string256,filename
	CHARACTER*4 string4
	INTEGER I

! Function
!       INTEGER LEN_TRIM

! NetCDF variables
        
        include "netcdf.inc"

	INTEGER NC_ID
	INTEGER STATUS
	INTEGER LON_DIM
	INTEGER LAT_DIM
	INTEGER DEPTH_DIM
        INTEGER TRAC_DIM
	INTEGER DYE_ID
	INTEGER DIMS_4D(4)

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Build the NetCDF filename 
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        WRITE(string4,'(I4.4)') year

                filename=group//'_'//run//'_BasisFNCTNS_'//
     &          string4//'.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,'tracer',ndyetrac,TRAC_DIM)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)



!---------------------------------------------------------
	DIMS_4D(1)=LON_DIM
	DIMS_4D(2)=LAT_DIM
	DIMS_4D(3)=DEPTH_DIM
	DIMS_4D(4)=TRAC_DIM
	STATUS=NF_DEF_VAR(NC_ID,'DYE',NF_FLOAT,
     &	4,DIMS_4D,DYE_ID)
	IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Define global attributes
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        string256='$RCSfile: write_nc_basisfnctns.F,v $'
     &           //'$Revision: 1.1 $'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,
     &  'output_routine',LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
        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 Project'
        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
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        

        STATUS=NF_PUT_ATT_INT(NC_ID,DYE_ID,'nb_seconds_per_year',
     &	NF_INT,1,nb_seconds_per_year)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_PUT_ATT_INT(NC_ID,DYE_ID,'nb_timesteps_per_year',
     &  NF_INT,1,nb_timesteps_per_year)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

!---------------------------------------------------------
	string256='Concentration of Dye Tracer' 
        STATUS=NF_PUT_ATT_TEXT(NC_ID,DYE_ID,'long_name',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
 
	string256='mol/cm^3'
        STATUS=NF_PUT_ATT_TEXT(NC_ID,DYE_ID,'units',
     &	LEN_TRIM(string256),string256)
        IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)

        STATUS=NF_PUT_ATT_REAL(NC_ID,DYE_ID,'missing_value',
     &  NF_FLOAT,1,missing_value)
        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,DYE_ID,dye_arr)
	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
