C $Header: /u/gcmpack/MITgcm/pkg/ocn_compon_interf/cpl_write_diags.F,v 1.7 2005/05/25 04:03:10 edhill Exp $
C $Name:  $

#include "PACKAGES_CONFIG.h"
#include "CPP_OPTIONS.h"

CStartOfInterFace
      SUBROUTINE CPL_WRITE_DIAGS( myTime, myIter, myThid )
C     /==========================================================\
C     | SUBROUTINE CPL_WRITE_DIAGS                               |
C     | o Calculate CPL diagnostics                              |
C     | - Oceanic version -                                      |
C     \==========================================================/
      IMPLICIT NONE

C     === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "CPL_PARAMS.h"
#include "OCNCPL.h"
#include "CPL_DIAGS.h"

      LOGICAL  DIFFERENT_MULTIPLE
      EXTERNAL 

C     == Routine arguments ==
C     myTime - Current time of simulation ( s )
C     myIter - Iteration number
C     myThid - Number of this instance of the routine
      _RL     myTime
      INTEGER myIter
      INTEGER myThid
CEndOfInterface

#ifdef COMPONENT_MODULE

C     == Local variables ==
C     bi,bj  - Tile index
      INTEGER bi,bj
      CHARACTER*(MAX_LEN_MBUF) fn
      LOGICAL gf

#ifdef ALLOW_TIMEAVE

C     Dump files and restart average computation if needed
      IF ( myIter.NE.nIter0 .AND.
     &     DIFFERENT_MULTIPLE(cpl_taveFreq,myTime,deltaTClock)
     &     ) THEN

C       Normalize by integrated time
        DO bj = myByLo(myThid), myByHi(myThid)
          DO bi = myBxLo(myThid), myBxHi(myThid)
            CALL TIMEAVE_NORMALIZ(SLPtave,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(HFtave ,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(QSWtave,CPL_TimeAve,1,bi,bj,myThid)
c           CALL TIMEAVE_NORMALIZ(QLTtave,CPL_TimeAve,1,bi,bj,myThid)
c           CALL TIMEAVE_NORMALIZ(QSNtave,CPL_TimeAve,1,bi,bj,myThid)
c           CALL TIMEAVE_NORMALIZ(QLWtave,CPL_TimeAve,1,bi,bj,myThid)
c           CALL TIMEAVE_NORMALIZ(UGtave ,CPL_TimeAve,1,bi,bj,myThid)
c           CALL TIMEAVE_NORMALIZ(VGtave ,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(TXtave ,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(TYtave ,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(FWtave ,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(SFxtave,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(SICtave,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(MXLtave,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(SSTtave,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(SSStave,CPL_TimeAve,1,bi,bj,myThid)
            CALL TIMEAVE_NORMALIZ(vSqtave,CPL_TimeAve,1,bi,bj,myThid)
          ENDDO
        ENDDO
        
        IF (cpl_timeave_mdsio) THEN

          _BARRIER
          _BEGIN_MASTER( myThid )
          gf = globalFiles
          WRITE(fn,'(A,I10.10)') 'cplFldtave.',myIter
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, SLPtave ,  1, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, HFtave  ,  2, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, QSWtave ,  3, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, TXtave  ,  4, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, TYtave  ,  5, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, FWtave  ,  6, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, SFxtave ,  7, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, SICtave ,  8, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, MXLtave ,  9, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, SSTtave , 10, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, SSStave , 11, myIter, myThid )
          CALL MDSWRITEFIELD(fn, writeBinaryPrec, gf, 'RL',
     &         1, vSqtave , 12, myIter, myThid )
          _END_MASTER( myThid )
          _BARRIER

        ENDIF

#ifdef ALLOW_MNC
        IF (useMNC .AND. cpl_timeave_mnc) THEN
          CALL MNC_CW_SET_UDIM('cpl_tave', -1, myThid)
          CALL MNC_CW_RL_W_S('D','cpl_tave',0,0,'T',myTime,myThid)
          CALL MNC_CW_SET_UDIM('cpl_tave', 0, myThid)
          CALL MNC_CW_I_W_S('I','cpl_tave',0,0,'iter',myIter,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'SLPtave',SLPtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'HFtave',HFtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'QSWtave',QSWtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'TXtave',TXtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'TYtave',TYtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'FWtave',FWtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'SFxtave',SFxtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'SICtave',SICtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'MXLtave',MXLtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'SSTtave',SSTtave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'SSStave',SSStave,myThid)
          CALL MNC_CW_RL_W('D','cpl_tave',0,0,
     &         'vSqtave',vSqtave,myThid)
        ENDIF
#endif /*  ALLOW_MNC  */

C       Reset diagnostic counters
        DO bj = myByLo(myThid), myByHi(myThid)
          DO bi = myBxLo(myThid), myBxHi(myThid)
            CALL TIMEAVE_RESET(SLPtave,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(HFtave ,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(QSWtave,1,bi,bj,myThid)
c           CALL TIMEAVE_RESET(QLTtave,1,bi,bj,myThid)
c           CALL TIMEAVE_RESET(QSNtave,1,bi,bj,myThid)
c           CALL TIMEAVE_RESET(QLWtave,1,bi,bj,myThid)
c           CALL TIMEAVE_RESET(UGtave ,1,bi,bj,myThid)
c           CALL TIMEAVE_RESET(VGtave ,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(TXtave ,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(TYtave ,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(FWtave ,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(SFxtave,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(SICtave,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(MXLtave,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(SSTtave,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(SSStave,1,bi,bj,myThid)
            CALL TIMEAVE_RESET(vSqtave,1,bi,bj,myThid)
            CPL_TimeAve(1,bi,bj) = 0.
          ENDDO
        ENDDO

      ENDIF

#endif /* ALLOW_TIMEAVE */

#endif /* COMPONENT_MODULE */

      RETURN
      END