Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:42:59 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
4da58558f5 Oliv*0001 #include "PTRACERS_OPTIONS.h"
                0002 
                0003 CBOP
                0004 C     !ROUTINE: PTRACERS_CALC_WSURF_TR
                0005 C     !INTERFACE:
                0006       SUBROUTINE PTRACERS_CALC_WSURF_TR(wVelFld,
                0007      I                                  myTime, myIter, myThid )
                0008 C     !DESCRIPTION: \bv
                0009 C     *==========================================================*
                0010 C     | SUBROUTINE CALC_WSURF_TR
                0011 C     | o Compute a correction for the source/sink of tracer
                0012 C     |   due to the linear free surface.
                0013 C     | o The source/sink results from W*Tr not summing to
                0014 C     |   zero at the free surface.
                0015 C     | o Here, we compute an area-integrated correction
                0016 C     |   to be applied in biogeochemistry packages.
                0017 C     *==========================================================*
                0018 C     \ev
                0019 
                0020 C     !USES:
                0021       IMPLICIT NONE
                0022 C     == Global variables
                0023 #include "SIZE.h"
                0024 #include "EEPARAMS.h"
                0025 #include "PARAMS.h"
                0026 #include "GRID.h"
                0027 #include "SURFACE.h"
                0028 #include "PTRACERS_SIZE.h"
                0029 #include "PTRACERS_PARAMS.h"
                0030 #include "PTRACERS_FIELDS.h"
                0031 
                0032 C     !INPUT PARAMETERS:
                0033 C     wvelFld  :: vertical velocity field
                0034 C     myTime   :: Current time in simulation
                0035 C     myIter   :: Current iteration number in simulation
                0036 C     myThid   :: Thread number for this instance of the routine.
                0037       _RL wVelFld (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr,nSx,nSy)
                0038       _RL myTime
                0039       INTEGER myIter
                0040       INTEGER myThid
                0041 CEOP
                0042 
                0043 C     !LOCAL VARIABLES:
                0044       INTEGER i,j,bi,bj,ks,itr
                0045       _RL wT_Tile(nSx,nSy,PTRACERS_num)
dbd2954326 Mart*0046       _RL wT_Mean(PTRACERS_num)
4da58558f5 Oliv*0047 
                0048 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0049 
dbd2954326 Mart*0050       DO itr=1,PTRACERS_numInUse
0aacb0e819 Oliv*0051        totSurfCorPTr(iTr)  = 0.0 _d 0
                0052        meanSurfCorPTr(iTr) = 0.0 _d 0
                0053        wT_mean(iTr)        = 0.0 _d 0
dbd2954326 Mart*0054       ENDDO
                0055 
4da58558f5 Oliv*0056 C-- compute per-tile sums
                0057       DO bj=myByLo(myThid), myByHi(myThid)
                0058        DO bi=myBxLo(myThid), myBxHi(myThid)
                0059         DO itr=1,PTRACERS_numInUse
                0060          wT_Tile(bi,bj,itr) = 0.
                0061          DO j=1,sNy
                0062           DO i=1,sNx
                0063            ks = ksurfC(i,j,bi,bj)
                0064            IF (ks.LE.Nr) THEN
                0065             wT_Tile(bi,bj,itr) = wT_Tile(bi,bj,itr)
                0066      &       + rA(i,j,bi,bj)*wVelFld(i,j,ks,bi,bj)
                0067      &                      *ptracer(i,j,ks,bi,bj,iTr)
                0068            ENDIF
                0069           ENDDO
                0070          ENDDO
                0071         ENDDO
                0072        ENDDO
                0073       ENDDO
                0074 
                0075 C-- sum over tiles
                0076       DO itr=1,PTRACERS_numInUse
dbd2954326 Mart*0077        CALL GLOBAL_SUM_TILE_RL( wT_Tile(1,1,itr), wT_Mean(iTr),
4da58558f5 Oliv*0078      &                          myThid )
0aacb0e819 Oliv*0079        totSurfCorPTr(iTr) = wT_Mean(iTr)
4da58558f5 Oliv*0080       ENDDO
                0081 
ab62c4c1c3 Mart*0082       IF ( globalArea.GT.0. ) THEN
                0083        _BEGIN_MASTER( myThid )
                0084        DO itr=1,PTRACERS_numInUse
0aacb0e819 Oliv*0085         meanSurfCorPTr(iTr) = wT_Mean(iTr) / globalArea
ab62c4c1c3 Mart*0086        ENDDO
                0087        _END_MASTER( myThid )
                0088       ENDIF
                0089 
4da58558f5 Oliv*0090       _BARRIER
                0091 
                0092       RETURN
                0093       END