C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/model/src/convective_weights.F,v 1.3.4.1 2003/03/07 23:10:20 heimbach Exp $ C $Name: $ #include "CPP_OPTIONS.h" CBOP C !ROUTINE: CONVECTIVE_WEIGHTS C !INTERFACE: SUBROUTINE CONVECTIVE_WEIGHTS( I bi,bj,k,rhoKm1,rhoK, O weightA,weightB,ConvectCount, I myThid) C !DESCRIPTION: C Calculates the weights used to represent convective mixing C between two layers. C C Mixing is represented by: C T(k-1) = T(k-1) + B * ( T(k) - T(k-1) ) C T(k) = T(k) + A * ( T(k-1) - T(k) ) C C In the stable case, A = B = 0 C In the unstable case, A and B are non-zero and are chosen so as to C conserve total volume of T. C !USES: IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" C !INPUT/OUTPUT PARAMETERS: C bi,bj,k - indices C rhoKm1 - rho in layer above C rhoK - rho in layer below C weightA - weight for level K C weightB - weight for level K+1 C ConvectCount - counter to diagnose where convection occurs C myThid - thread number INTEGER bi,bj,k _RL rhoKm1(1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL rhoK(1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL weightA(1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL weightB(1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL ConvectCount(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) INTEGER myThid #ifdef INCLUDE_CONVECT_CALL C !LOCAL VARIABLES: C i,j :: Loop counter C dS,d1,d2 :: Layer thicknesses INTEGER i,j _RL dS,d1,d2 CEOP DO j=1-Oly,sNy+Oly DO i=1-Olx,sNx+Olx IF ( _hFacC(i,j,k-1,bi,bj) & *_hFacC(i,j,k,bi,bj) .GT. 0. & .AND. (rhokm1(i,j)-rhok(i,j))*rKfac*gravitySign .GT. 0. & ) THEN C Where statically unstable, mix the tracers conserving volume d1 = _hFacC(i,j,k-1,bi,bj)*drF(k-1) d2 = _hFacC(i,j, k ,bi,bj)*drF( k ) dS = d1+d2 weightA(i,j) = d2/dS weightB(i,j) = d1/dS ConvectCount(i,j,k) = ConvectCount(i,j,k) + 1. ELSE C Where statically stable, do nothing weightA(i,j) = 0. weightB(i,j) = 0. ENDIF ENDDO ENDDO #endif /* INCLUDE_CONVECT_CALL */ RETURN END