C $Header: /u/gcmpack/MITgcm/pkg/atm2d/month_end_diags.F,v 1.2 2007/10/08 23:48:28 jmc Exp $
C $Name:  $

#include "ctrparam.h"
#include "ATM2D_OPTIONS.h"

C     !INTERFACE:
      SUBROUTINE MONTH_END_DIAGS(  monid, myTime, myIter, myThid )
C     *==========================================================*
C     | Prints out rolling month-end quantities, and sums these  |
c     | into the tave monthly diagnostic variables.              |
C     *==========================================================*
        IMPLICIT NONE

C     === Global Atmosphere Variables ===
#include "ATMSIZE.h"
#include "SIZE.h"
#include "EEPARAMS.h"
#include "ATM2D_VARS.h"

C     !INPUT/OUTPUT PARAMETERS:
C     === Routine arguments ===
C     monid  - current month of the year
C     myTime - current simulation time (ocean model time)
C     myIter - iteration number (ocean model)
C     myThid - Thread no. that called this routine.
      INTEGER monid
      _RL     myTime
      INTEGER myIter
      INTEGER myThid

C     LOCAL VARIABLES:
      CHARACTER*(MAX_LEN_MBUF) suff
      INTEGER ndmonth(12)
      DATA ndmonth/31,28,31,30,31,30,31,31,30,31,30,31/
      INTEGER i,j
      _RS norm_factor

      norm_factor = ndmonth(monid)*86400.0

      DO j=1,sNy
        DO i=1,sNx

          qnet_atm_ta(i,j,monid)= qnet_atm_ta(i,j,monid) +
     &                            qnet_atm(i,j)
          evap_atm_ta(i,j,monid)= evap_atm_ta(i,j,monid) +
     &                            evap_atm(i,j)
          precip_atm_ta(i,j,monid)= precip_atm_ta(i,j,monid) +
     &                              precip_atm(i,j)
          runoff_atm_ta(i,j,monid)=  runoff_atm_ta(i,j,monid) +
     &                               runoff_atm(i,j)
          sum_qrel_ta(i,j,monid)= sum_qrel_ta(i,j,monid) +
     &                            sum_qrel(i,j)
          sum_frel_ta(i,j,monid)= sum_frel_ta(i,j,monid) +
     &                            sum_frel(i,j)
          sum_iceMask_ta(i,j,monid)= sum_iceMask_ta(i,j,monid) +
     &                               sum_iceMask(i,j)
          sum_iceHeight_ta(i,j,monid)= sum_iceHeight_ta(i,j,monid) +
     &                                 sum_iceHeight(i,j)
          sum_iceTime_ta(i,j,monid)= sum_iceTime_ta(i,j,monid) +
     &                               sum_iceTime(i,j)
          sum_oceMxLT_ta(i,j,monid)= sum_oceMxLT_ta(i,j,monid) +
     &                               sum_oceMxLT(i,j)
          sum_oceMxLS_ta(i,j,monid)= sum_oceMxLS_ta(i,j,monid) +
     &                               sum_oceMxLS(i,j)

          qnet_atm(i,j)=qnet_atm(i,j)/ norm_factor
          evap_atm(i,j)=evap_atm(i,j)/ norm_factor
          precip_atm(i,j)= precip_atm(i,j)/ norm_factor
          runoff_atm(i,j)=  runoff_atm(i,j)/ norm_factor
          sum_qrel(i,j)= sum_qrel(i,j)/ norm_factor
          sum_frel(i,j)= sum_frel(i,j)/ norm_factor
          sum_iceMask(i,j)= sum_iceMask(i,j)/ norm_factor
          sum_iceHeight(i,j)= sum_iceHeight(i,j)/ norm_factor
          sum_iceTime(i,j)= sum_iceTime(i,j)/ norm_factor
          sum_oceMxLT(i,j)= sum_oceMxLT(i,j)/ norm_factor
          sum_oceMxLS(i,j)= sum_oceMxLS(i,j)/ norm_factor

        ENDDO
      ENDDO

      WRITE(suff,'(I2.2)') monid
      CALL WRITE_FLD_XY_RL('mQnetAtmtave.', suff, qnet_atm,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mEvapAtmtave.', suff, evap_atm,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mPrecipAtmtave.', suff, precip_atm,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mRunoffAtmtave.', suff, runoff_atm,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mQrelfluxtave.', suff, sum_qrel,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mFrelfluxtave.', suff, sum_frel,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mIceMasktave.', suff, sum_iceMask,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mIceHeighttave.', suff, sum_iceHeight,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mIceTimetave.', suff, sum_iceTime,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mOceMxLTtave.', suff, sum_oceMxLT,
     &                     myIter, myThid)
      CALL WRITE_FLD_XY_RL('mOceMxLStave.', suff, sum_oceMxLS,
     &                     myIter, myThid)

      DO j=1,sNy
        DO i=1,sNx

          qnet_atm(i,j)= 0. _d 0
          evap_atm(i,j)= 0. _d 0
          precip_atm(i,j)= 0. _d 0
          runoff_atm(i,j)= 0. _d 0
          sum_qrel(i,j)= 0. _d 0
          sum_frel(i,j)= 0. _d 0
          sum_iceMask(i,j)= 0. _d 0
          sum_iceHeight(i,j)= 0. _d 0
          sum_iceTime(i,j)= 0. _d 0
          sum_oceMxLT(i,j)= 0. _d 0
          sum_oceMxLS(i,j)= 0. _d 0

        ENDDO
      ENDDO

      RETURN
      END