C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_timeave.F,v 1.2 2010/01/03 03:11:21 jmc Exp $
C $Name: $
#include "PTRACERS_OPTIONS.h"
CBOP
C !ROUTINE: PTRACERS_TIMEAVE
C !INTERFACE:
SUBROUTINE PTRACERS_TIMEAVE(
I myTime, myIter, bi, bj, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | S/R PTRACERS_TIMEAVE
C | o Time averaging routine for PTRACERS
C | in model main time-stepping
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "PTRACERS_SIZE.h"
#include "PTRACERS_PARAMS.h"
#include "PTRACERS_FIELDS.h"
#include "PTRACERS_TAVE.h"
C !INPUT/OUTPUT PARAMETERS:
C == Routine arguments ==
C myTime :: Current time in simulation
C myIter :: Iteration number
C bi, bj :: Tile indices
C myThid :: my Thread Id number
_RL myTime
INTEGER myIter
INTEGER bi, bj
INTEGER myThid
CEOP
#ifdef ALLOW_PTRACERS
#ifdef ALLOW_TIMEAVE
C !FUNCTIONS:
LOGICAL DIFFERENT_MULTIPLE
EXTERNAL
C !LOCAL VARIABLES:
INTEGER iTr
_RL DDTT
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C- Initialize fields for the first call ever
IF ( myIter .EQ. nIter0 ) THEN
DO iTr=1,PTRACERS_numInUse
CALL TIMEAVE_RESET( ptracerFluxtave(1-Olx,1-Oly, 1,1,iTr),
& 1 , bi, bj, myThid )
CALL TIMEAVE_RESET( ptracertave (1-Olx,1-Oly,1,1,1,iTr),
& Nr, bi, bj, myThid )
ENDDO
ptracer_half(bi,bj) = 0.
ptracer_full(bi,bj) = 0.
ENDIF
IF ( PTRACERS_taveFreq.GT.0. _d 0 ) THEN
C-- Cumulate state-variables with Half or Full time step :
IF ( myIter .EQ. nIter0 .OR.
& DIFFERENT_MULTIPLE( PTRACERS_taveFreq, myTime, deltaTClock )
& ) THEN
DDTT = 0.5*deltaTclock
ELSE
DDTT = deltaTclock
ENDIF
C- Time Averages of state variables
DO iTr=1,PTRACERS_numInUse
CALL TIMEAVE_CUMULATE( ptracertave(1-Olx,1-Oly,1,1,1,iTr),
& pTracer(1-Olx,1-Oly,1,1,1,iTr),
& Nr, DDTT, bi, bj, myThid )
ENDDO
C- Keep record of how much time has been integrated over
ptracer_half(bi,bj) = ptracer_half(bi,bj)+DDTT
C- Time Averages of "intermediate" fields
IF ( myIter .NE. nIter0 ) THEN
C- Time Averages of surface fluxes
DO iTr=1,PTRACERS_numInUse
CALL TIMEAVE_CUMULATE( ptracerFluxtave(1-Olx,1-Oly,1,1,iTr),
& surfaceForcingPTr(1-Olx,1-Oly,1,1,iTr),
& 1, deltaTclock, bi, bj, myThid )
ENDDO
ptracer_full(bi,bj) = ptracer_full(bi,bj)+deltaTclock
ENDIF
C- end block if PTRACERS_taveFreq > 0
ENDIF
#endif /* ALLOW_TIMEAVE */
#endif /* ALLOW_PTRACERS */
RETURN
END