C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_calc_wsurf_tr.F,v 1.4 2016/08/23 18:29:49 jahn Exp $ C $Name: $ #include "PTRACERS_OPTIONS.h" CBOP C !ROUTINE: PTRACERS_CALC_WSURF_TR C !INTERFACE: SUBROUTINE PTRACERS_CALC_WSURF_TR(wVelFld, I myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE CALC_WSURF_TR C | o Compute a correction for the source/sink of tracer C | due to the linear free surface. C | o The source/sink results from W*Tr not summing to C | zero at the free surface. C | o Here, we compute an area-integrated correction C | to be applied in biogeochemistry packages. C *==========================================================* C \ev C !USES: IMPLICIT NONE C == Global variables #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "SURFACE.h" #include "PTRACERS_SIZE.h" #include "PTRACERS_PARAMS.h" #include "PTRACERS_FIELDS.h" C !INPUT PARAMETERS: C wvelFld :: vertical velocity field C myTime :: Current time in simulation C myIter :: Current iteration number in simulation C myThid :: Thread number for this instance of the routine. _RL wVelFld (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy) _RL myTime INTEGER myIter INTEGER myThid CEOP C !LOCAL VARIABLES: INTEGER i,j,bi,bj,ks,itr _RL wT_Tile(nSx,nSy,PTRACERS_num) _RL wT_Mean(PTRACERS_num) C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| DO itr=1,PTRACERS_numInUse totSurfCorPTr(iTr) = 0.0 _d 0 meanSurfCorPTr(iTr) = 0.0 _d 0 wT_mean(iTr) = 0.0 _d 0 ENDDO C-- compute per-tile sums DO bj=myByLo(myThid), myByHi(myThid) DO bi=myBxLo(myThid), myBxHi(myThid) DO itr=1,PTRACERS_numInUse wT_Tile(bi,bj,itr) = 0. DO j=1,sNy DO i=1,sNx ks = ksurfC(i,j,bi,bj) IF (ks.LE.Nr) THEN wT_Tile(bi,bj,itr) = wT_Tile(bi,bj,itr) & + rA(i,j,bi,bj)*wVelFld(i,j,ks,bi,bj) & *ptracer(i,j,ks,bi,bj,iTr) ENDIF ENDDO ENDDO ENDDO ENDDO ENDDO C-- sum over tiles DO itr=1,PTRACERS_numInUse CALL GLOBAL_SUM_TILE_RL( wT_Tile(1,1,itr), wT_Mean(iTr), & myThid ) totSurfCorPTr(iTr) = wT_Mean(iTr) ENDDO IF ( globalArea.GT.0. ) THEN _BEGIN_MASTER( myThid ) DO itr=1,PTRACERS_numInUse meanSurfCorPTr(iTr) = wT_Mean(iTr) / globalArea ENDDO _END_MASTER( myThid ) ENDIF _BARRIER RETURN END