C $Header: /u/gcmpack/MITgcm/pkg/rbcs/rbcs_add_tendency.F,v 1.12 2015/10/24 21:20:09 jmc Exp $ C $Name: $ #include "RBCS_OPTIONS.h" CBOP C !ROUTINE: RBCS_ADD_TENDENCY C !INTERFACE: ========================================================== SUBROUTINE RBCS_ADD_TENDENCY( U gTendency, I k, bi, bj, tracerNum, I myTime, myIter, myThid ) C !DESCRIPTION: C Add to tendency array the contribution from 3-D field relaxation C !USES: =============================================================== IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" c#include "GRID.h" #include "DYNVARS.h" #ifdef ALLOW_PTRACERS #include "PTRACERS_SIZE.h" #include "PTRACERS_FIELDS.h" #endif #include "RBCS_SIZE.h" #include "RBCS_PARAMS.h" #include "RBCS_FIELDS.h" C !INPUT/OUTPUT PARAMETERS: ============================================ C gTendency :: the tendency array C k :: vertical level index C bi,bj :: tile indices C tracerNum :: tracer number (1=Temp, 2=Salt, >2 : ptracer) C myTime :: current time C myIter :: current timestep C myThid :: my Thread Id number _RL gTendency(1-OLx:sNx+OLx,1-OLy:sNy+OLy) INTEGER k, bi, bj INTEGER tracerNum _RL myTime INTEGER myIter INTEGER myThid C !LOCAL VARIABLES: ==================================================== C i,j :: loop indices INTEGER i,j INTEGER irbc _RL rbcsVanishingFac _RL rec_tauRlx #ifdef ALLOW_PTRACERS INTEGER iTracer #endif CEOP #ifdef ALLOW_RBCS IF ( rbcsVanishingTime.GT.0. _d 0 ) THEN rbcsVanishingFac = & MAX( 0. _d 0 , 1. _d 0 - myTime / rbcsVanishingTime ) ELSE rbcsVanishingFac = 1. _d 0 ENDIF #ifndef DISABLE_RBCS_MOM IF ( tracerNum.EQ.-1 .AND. useRBCuVel ) THEN rec_tauRlx = rbcsVanishingFac/tauRelaxU DO j=0,sNy+1 DO i=0,sNx+1 gTendency(i,j) = gTendency(i,j) & - RBC_maskU(i,j,k,bi,bj)*rec_tauRlx & *( uVel(i,j,k,bi,bj)- RBCuVel(i,j,k,bi,bj) ) ENDDO ENDDO ENDIF IF ( tracerNum.EQ.-2 .AND. useRBCvVel ) THEN rec_tauRlx = rbcsVanishingFac/tauRelaxV DO j=0,sNy+1 DO i=0,sNx+1 gTendency(i,j) = gTendency(i,j) & - RBC_maskV(i,j,k,bi,bj)*rec_tauRlx & *( vVel(i,j,k,bi,bj)- RBCvVel(i,j,k,bi,bj) ) ENDDO ENDDO ENDIF #endif /* DISABLE_RBCS_MOM */ IF ( tracerNum.EQ.1 .AND. useRBCtemp ) THEN irbc = MIN(maskLEN,tracerNum) rec_tauRlx = rbcsVanishingFac/tauRelaxT DO j=0,sNy+1 DO i=0,sNx+1 gTendency(i,j) = gTendency(i,j) & - RBC_mask(i,j,k,bi,bj,irbc)*rec_tauRlx & *( theta(i,j,k,bi,bj)- RBCtemp(i,j,k,bi,bj) ) ENDDO ENDDO ENDIF IF ( tracerNum.EQ.2 .AND. useRBCsalt ) THEN irbc = MIN(maskLEN,tracerNum) rec_tauRlx = rbcsVanishingFac/tauRelaxS DO j=0,sNy+1 DO i=0,sNx+1 gTendency(i,j) = gTendency(i,j) & - RBC_mask(i,j,k,bi,bj,irbc)*rec_tauRlx & *( salt(i,j,k,bi,bj)- RBCsalt(i,j,k,bi,bj) ) ENDDO ENDDO ENDIF #ifdef ALLOW_PTRACERS IF ( usePTRACERS .AND. tracerNum.GT.2 ) THEN iTracer = tracerNum-2 IF ( useRBCpTrNum(iTracer) ) THEN irbc = MIN(maskLEN,tracerNum) rec_tauRlx = rbcsVanishingFac/tauRelaxPTR(iTracer) DO j=0,sNy+1 DO i=0,sNx+1 gTendency(i,j) = gTendency(i,j) & - RBC_mask(i,j,k,bi,bj,irbc)*rec_tauRlx & *( pTracer(i,j,k,bi,bj,iTracer) & - RBC_ptracers(i,j,k,bi,bj,iTracer) ) ENDDO ENDDO ENDIF ENDIF #endif /* ALLOW_PTRACERS */ #endif /* ALLOW_RBCS */ RETURN END