C $Header: /u/gcmpack/MITgcm/pkg/atm_compon_interf/atm_export_fld.F,v 1.3 2015/11/12 01:01:57 jmc Exp $
C $Name:  $

#include "ATM_CPL_OPTIONS.h"

CBOP
C     !ROUTINE: ATM_EXPORT_FLD
C     !INTERFACE:
      SUBROUTINE ATM_EXPORT_FLD(
     I               atmFldName,
     U               atmFld, countTime,
     I               myThid )

C     !DESCRIPTION: \bv
C     *==========================================================*
C     | SUBROUTINE ATM_EXPORT_FLD
C     | o Routine for exporting 1 atmos. field to coupling layer:
C     |   - compute the time-average (if needed)
C     |   - send the field to the coupler
C     |   - reset time and field to zero
C     *==========================================================*
C     | This version talks to the MIT Coupler. It uses the MIT
C     | Coupler "checkpoint1" library calls.
C     | Note: requires arg. array "atmFld" to be shared
C     |       (in common block) to work in multi-threaded.
C     *==========================================================*
C     \ev

C     !USES:
      IMPLICIT NONE
C     == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"

C     !INPUT/OUTPUT PARAMETERS:
C     === Routine arguments ===
C     atmFldName :: atmos. Field identificator name
C     atmFld     :: array containing the atmospheric Field to export
C     countTime  :: fractional integrated time
C     myThid     :: my Thread Id number
      CHARACTER*(*) atmFldName
      _RL     atmFld   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
      _RL     countTime(nSx,nSy)
      INTEGER myThid
CEOP

#ifdef COMPONENT_MODULE
C     !LOCAL VARIABLES:
C     == Local variables ==
C     recipAvT  :: Temp. for holding reciprocal of averaging period.
C     i,j,bi,bj :: Loop counters
      _RL recipAvT
      INTEGER i,j,bi,bj

C     Convert time integrated heatflux to mean value ready for export.
      DO bj=myByLo(myThid),myByHi(myThid)
       DO bi=myBxLo(myThid),myBxHi(myThid)
        IF ( ABS(countTime(bi,bj) -1. _d 0).GT. 1. _d -12
     &     .AND. countTime(bi,bj) .NE. 0. ) THEN
         recipAvT = 1. _d 0/countTime(bi,bj)
         DO j=1,sNy
          DO i=1,sNx
           atmFld(i,j,bi,bj) = atmFld(i,j,bi,bj)*recipAvT
          ENDDO
         ENDDO
         WRITE(errorMessageUnit,'(3A,2I4,1PE15.8)')
     &     'ATM_EXPORT_FLD: ',atmFldName,' : 1-CountTime=',
     &                             bi,bj,1.-countTime(bi,bj)
        ENDIF
       ENDDO
      ENDDO

C     Send atmos. field to coupling layer.
      _BARRIER
      _BEGIN_MASTER( myThid )
      CALL COMPSEND_R8TILES(
     I              atmFldName, sNx, OLx, sNy, OLy, 1, nSx, nSy,
     I              atmFld )
      _END_MASTER( myThid )
      _BARRIER

C     Reset atmos. field & integrated time before accumulating again.
      DO bj=myByLo(myThid),myByHi(myThid)
       DO bi=myBxLo(myThid),myBxHi(myThid)
        countTime(bi,bj) = 0.
        DO j=1,sNy
         DO i=1,sNx
          atmFld(i,j,bi,bj) = 0.
         ENDDO
        ENDDO
       ENDDO
      ENDDO

#endif /* COMPONENT_MODULE */

      RETURN
      END