C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_monitor.F,v 1.8 2005/05/15 03:06:01 jmc Exp $
C $Name:  $

#include "PTRACERS_OPTIONS.h"

CBOP
C !ROUTINE: PTRACERS_MONITOR

C !INTERFACE: ==========================================================
      SUBROUTINE PTRACERS_MONITOR(
     I                myIter, myTime, myThid )

C !DESCRIPTION:
C writes out ptracer statistics

C !USES: ===============================================================
      IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "EESUPPORT.h"
#include "DYNVARS.h"
#include "GRID.h"
#include "PTRACERS_SIZE.h"
#include "PTRACERS.h"
#ifdef ALLOW_MONITOR
#include "MONITOR.h"
#endif

C !INPUT PARAMETERS: ===================================================
C  myThid               :: thread number
C  myIter               :: current timestep
C  myTime               :: current time
      INTEGER myIter
      _RL myTime
      INTEGER myThid

C     === Functions ====
      LOGICAL  DIFFERENT_MULTIPLE
      EXTERNAL 

#ifdef ALLOW_PTRACERS
#ifdef ALLOW_MONITOR

C !LOCAL VARIABLES: ====================================================
C  i,j                  :: loop indices
C  ip                   :: ptracer number
      CHARACTER*(MAX_LEN_MBUF) msgBuf   
      CHARACTER*(MAX_LEN_MBUF) suff
      _RL dT
      INTEGER time_as_int
      integer ip
CEOP

      dT=deltaTclock

      IF ( DIFFERENT_MULTIPLE( PTRACERS_monitorFreq,myTime,dT ) ) THEN
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

C     Ptracers field monitor start 
       _BEGIN_MASTER(myThid)
#ifdef ALLOW_USE_MPI
       IF ( .NOT. useSingleCPUIO .OR. mpiMyId .EQ. 0 ) THEN
#endif /* ALLOW_USE_MPI */
        
        IF (monitor_stdio) THEN
         WRITE(msgBuf,'(2A)') '// ==========================',
     &        '============================='
         CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
         WRITE(msgBuf,'(A)')
     &        '// Begin MONITOR ptracer field statistics'
         CALL PRINT_MESSAGE( msgBuf, mon_ioUnit,
     &        SQUEEZE_RIGHT , 1)
         WRITE(msgBuf,'(2A)') '// ==========================',
     &        '============================='
         CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
         mon_write_stdout = .TRUE.
        ENDIF
        
#ifdef ALLOW_USE_MPI
       ENDIF
#endif /* ALLOW_USE_MPI */
        _END_MASTER(myThid)

        IF ( PTRACERS_monitorFreq .NE. monitorFreq ) THEN
C     repeat printing of time to make grepping easier, default is not
C     to do this, because the default is to use the same monitorFreq
C     for ptracers as for the dynamics variables.
         CALL MON_SET_PREF('trctime',myThid)
         CALL MON_OUT_I( '_tsnumber', myIter,mon_string_none,myThid)
         CALL MON_OUT_RL('_secondsf', myTime,mon_string_none,myThid)
        ENDIF
C       Print the basic statistics of ptracer variables
       CALL MON_SET_PREF('trcstat_',myThid)
       DO ip = 1, PTRACERS_numInUse
         WRITE(suff,'(A7,I2.2)') 'ptracer',ip
         CALL MON_PRINTSTATS_RL(
     &        Nr, ptracer(1-Olx,1-Oly,1,1,1,ip),
     &        suff, maskC,hFacC,rA ,drF,myThid)
       ENDDO

       IF (mon_write_stdout) THEN
C     Ptracers field monitor finish
        _BEGIN_MASTER(myThid)
#ifdef ALLOW_USE_MPI
        IF ( .NOT. useSingleCPUIO .OR. mpiMyId .EQ. 0 ) THEN
#endif /* ALLOW_USE_MPI */
         WRITE(msgBuf,'(2A)') '// ==========================',
     &        '============================='
         CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
         WRITE(msgBuf,'(A)') 
     &        '// End MONITOR ptracers field statistics'
         CALL PRINT_MESSAGE( msgBuf, mon_ioUnit,
     &        SQUEEZE_RIGHT , 1)
         WRITE(msgBuf,'(2A)') '// ==========================',
     &        '============================='
         CALL PRINT_MESSAGE( msgBuf, mon_ioUnit, SQUEEZE_RIGHT , 1)
#ifdef ALLOW_USE_MPI
        ENDIF
#endif /* ALLOW_USE_MPI */

        mon_write_stdout = .FALSE.
        
        _END_MASTER(myThid)
       ENDIF
C     endif different multiple
      ENDIF

#endif /* ALLOW_MONITOR */
#endif /* ALLOW_PTRACERS */

      RETURN
      END