C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_statvars.F,v 1.8 2005/05/15 03:06:01 jmc Exp $ C $Name: $ #include "PTRACERS_OPTIONS.h" #ifdef ALLOW_GCHEM # include "GCHEM_OPTIONS.h" #endif SUBROUTINE PTRACERS_STATVARS( I myTime, myIter, bi, bj, myThid) C /==========================================================\ C | SUBROUTINE PTRACERS_STATVARS | C | o Time averaging routine for PTRACERS | C | in model main time-stepping | C \==========================================================/ IMPLICIT NONE C == Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "PTRACERS_SIZE.h" #include "PTRACERS.h" #include "PTRACERS_STATV.h" LOGICAL DIFFERENT_MULTIPLE EXTERNAL C == Routine arguments == C myThid - Thread number for this instance of the routine. C myIter - Iteration number C myTime - Current time of simulation ( s ) INTEGER myThid INTEGER myIter, bi, bj _RL myTime #ifdef ALLOW_PTRACERS #ifdef ALLOW_TIMEAVE C == Local variables == INTEGER iTracer, i, j, k _RL DDTT c _RL tempArray (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) C- Initialize fields for the first call ever IF ( myIter .EQ. nIter0 ) THEN DO iTracer=1,PTRACERS_numInUse CALL TIMEAVE_RESET(ptracerFluxtave(1-Olx,1-Oly, 1,1,iTracer), & 1 ,bi,bj,myThid) CALL TIMEAVE_RESET(ptracertave (1-Olx,1-Oly,1,1,1,iTracer), & Nr,bi,bj,myThid) ENDDO DO K=1,Nr ptracer_half(k,bi,bj)=0. ptracer_full(k,bi,bj)=0. ENDDO ENDIF 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 single fields (no hFactor) DO iTracer=1,PTRACERS_numInUse CALL TIMEAVE_CUMULATE(ptracertave(1-Olx,1-Oly,1,1,1,iTracer), & ptracer(1-Olx,1-Oly,1,1,1,iTracer), & Nr, DDTT, bi, bj, myThid) ENDDO C- Keep record of how much time has been integrated over DO K=1,Nr ptracer_half(k,bi,bj)=ptracer_half(k,bi,bj)+DDTT ENDDO C- Time Averages of "intermediate" fields (no hFactor) IF ( myIter .NE. nIter0 ) THEN C- Time Averages of surface fluxes c IF ( buoyancyRelation .EQ. 'OCEANICP' ) THEN c k=Nr c ELSE c k=1 c ENDIF C ptracerFlux DO iTracer=1,PTRACERS_numInUse c DO j=1,sNy c DO i=1,sNx c tempArray(i,j,bi,bj)=maskC(i,j,k,bi,bj)* c & surfaceForcingPtr(i,j,bi,bj,iTracer)* c & drF(k)*hFacC(i,j,k,bi,bj) c ENDDO c ENDDO c CALL TIMEAVE_CUMULATE(ptracerFluxtave(1-Olx,1-Oly,1,1,iTracer), c & tempArray,1,deltaTclock,bi,bj,myThid) CALL TIMEAVE_CUMULATE(ptracerFluxtave(1-Olx,1-Oly,1,1,iTracer), & surfaceForcingPtr(1-Olx,1-Oly,1,1,iTracer), & 1,deltaTclock,bi,bj,myThid) ENDDO DO K=1,Nr ptracer_full(k,bi,bj)=ptracer_full(k,bi,bj)+deltaTclock ENDDO ENDIF #endif /* ALLOW_TIMEAVE */ #endif /* ALLOW_PTRACERS */ RETURN END