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