C $Header: /u/gcmpack/MITgcm/model/src/convective_weights.F,v 1.6 2012/03/05 01:17:42 jmc 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) + A * ( T(k) - T(k-1) ) C T(k) = T(k) + B * ( 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 level k-1 C rhoK :: rho in level k C weightA :: weight for tracer @ level k-1 C weightB :: weight for tracer @ level k C convectCount :: counter to diagnose where convection occurs C myThid :: my Thread Id 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. & (rhok(i,j)-rhokm1(i,j))*rkSign*gravitySign .LT. 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) = 1. ELSE C Where statically stable, do nothing weightA(i,j) = 0. weightB(i,j) = 0. convectCount(i,j,k) = 0. ENDIF ENDDO ENDDO #endif /* INCLUDE_CONVECT_CALL */ RETURN END