C $Header: /u/gcmpack/MITgcm/pkg/cfc/cfc_atmos.F,v 1.5 2013/06/10 02:51:47 jmc Exp $
C $Name:  $

#include "GCHEM_OPTIONS.h"

CBOP
C     !ROUTINE: CFC_ATMOS
C     !INTERFACE:
      SUBROUTINE CFC_ATMOS( myThid )

C     !DESCRIPTION: \bv
C     *==========================================================*
C     | SUBROUTINE CFC_ATMOS
C     | o read in time-series of atmoshperic CFC
C     *==========================================================*

C     !USES:
      IMPLICIT NONE

C     === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "CFC.h"
#include "CFC_ATMOS.h"

C     !INPUT/OUTPUT PARAMETERS:
C     === Routine arguments ===
C     myThid    :: My Thread Id. number
      INTEGER myThid
CEOP

#ifdef ALLOW_CFC
C     !FUNCTIONS:
      INTEGER  ILNBLNK
      EXTERNAL 

C     !LOCAL VARIABLES:
C     msgBuf     :: message buffer
      INTEGER iUnit, i, it, iL
      LOGICAL exst
      _RL tmpVar(5)
      CHARACTER*(MAX_LEN_MBUF) msgBuf

      _BEGIN_MASTER( myThid )

C read in CFC atmospheric timeseries data
      iL = ILNBLNK(atmCFC_inpFile)
      IF ( iL.EQ.0 ) THEN
        WRITE(msgBuf,'(A)')
     &       'CFC_ATMOS: File-name missing for atmos CFC time-series'
        CALL PRINT_ERROR( msgBuf, myThid )
       STOP 'ABNORMAL END: S/R CFC_ATMOS'
      ENDIF
      INQUIRE( FILE=atmCFC_inpFile(1:iL), EXIST=exst )
      IF (exst) THEN
       WRITE(msgBuf,'(3A)')
     &   'CFC_ATMOS: opening file "', atmCFC_inpFile(1:iL), '"'
       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
     &                     SQUEEZE_RIGHT, myThid )
      ELSE
       WRITE(msgBuf,'(3A)')
     &   'CFC_ATMOS: File "', atmCFC_inpFile(1:iL),'" does not exist!'
       CALL PRINT_ERROR( msgBuf, myThid )
       STOP 'ABNORMAL END: S/R CFC_ATMOS'
      ENDIF

C assign a free unit number as the I/O channel for this subroutine
      CALL MDSFINDUNIT( iUnit, myThid )
      OPEN(iUnit,FILE=atmCFC_inpFile(1:iL),STATUS='old')
C skip 6 descriptor lines
      DO i =1,6
        READ(iUnit,*)
      ENDDO
C Read in CFC11 and CFC12, N and S Hemisphere time histories
      it = 0
      DO WHILE ( it.LE.ACFCrecSize )
        READ(iUnit,*,END=1001) (tmpVar(i),i=1,5)
        it = it + 1
        IF ( it .LE. ACFCrecSize ) THEN
          ACFCyear(it) = tmpVar(1)
          ACFC11(it,1) = tmpVar(2)
          ACFC12(it,1) = tmpVar(3)
          ACFC11(it,2) = tmpVar(4)
          ACFC12(it,2) = tmpVar(5)
        ENDIF
      ENDDO
      IF ( it.GT.ACFCrecSize ) THEN
       CLOSE(iUnit)
       WRITE(msgBuf,'(3A)')
     &   'CFC_ATMOS: length of file "',atmCFC_inpFile(1:iL),'"'
       CALL PRINT_ERROR( msgBuf, myThid )
       WRITE(msgBuf,'(2A,I9)') 'CFC_ATMOS: exceeds max num',
     &             ' of records: ACFCrecSize=', ACFCrecSize
       CALL PRINT_ERROR( msgBuf, myThid )
       STOP 'ABNORMAL END: S/R CFC_ATMOS'
      ENDIF
 1001 CONTINUE
      CLOSE(iUnit)
      ACFCnRec = it

C--  Print values to check:
      WRITE(msgBuf,'(A,I8,A)')
     &  'CFC_ATMOS: read', ACFCnRec, ' (=ACFCnRec) time records :'
      CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
     &                    SQUEEZE_RIGHT, myThid )
      WRITE(msgBuf,'(A)')
     &  '  year , cfc11_N, cfc12_N, cfc11_S, cfc12_S'
      CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
     &                    SQUEEZE_RIGHT, myThid )
      DO it = 1,ACFCnRec
        WRITE(msgBuf,'(F7.1,4F9.2)')
     &        ACFCyear(it), ACFC11(it,1),ACFC12(it,1),
     &                      ACFC11(it,2),ACFC12(it,2)
        CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
     &                      SQUEEZE_RIGHT, myThid )
      ENDDO

      WRITE(msgBuf,'(A)')
     &  'CFC_ATMOS: Setting atmos CFC time series: done'
      CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
     &                    SQUEEZE_RIGHT, myThid )

      _END_MASTER(myThid)

C--   Everyone else must wait for the parameters to be loaded
      _BARRIER

#endif /* ALLOW_CFC */

      RETURN
      END