C $Header: /u/gcmpack/MITgcm/pkg/bbl/bbl_calc_rho.F,v 1.4 2012/04/03 16:46:58 jmc Exp $ C $Name: $ #include "BBL_OPTIONS.h" CBOP C !ROUTINE: BBL_CALC_RHO C !INTERFACE: SUBROUTINE BBL_CALC_RHO( I tFld, sFld, O rhoLoc, I k, bi, bj, myTime, myIter, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | SUBROUTINE BBL_CALC_RHO C | o Calculates [rho(S,T,z)-rhoConst] of a 2-D slice C | filling land-points with BBL density. C | pkg/bbl requires in-situ bbl density for depths equal to C | and deeper than the bbl. To reduce computation and C | storage requirement, these densities are stored in the C | dry grid boxes of rhoInSitu: C | Top cell to kLowC computes rhoLoc at level k based on C | tFld(k) and sFld(k). This is identical to FIND_RHO_2D. C | kLowC+1 to Nr computes rhoLoc at level k-1 based on C | bbl_theta and bbl_salt. C | There is one level missing, bbl density at depth Nr, C | which is intead stored in bbl_rho_nr. C *==========================================================* C \ev C !USES: IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GRID.h" #include "BBL.h" C !INPUT/OUTPUT PARAMETERS: C === Routine arguments === C tFld :: Pot.Temperature (3-D array) C sFld :: Salinity (3-D array) C rhoLoc :: In-situ density [kg/m3] (2-D array) computed at z=rC ; C k :: current vertical index C bi,bj :: Tile indices C myTime :: Current time in simulation C myIter :: Current time-step number C myThid :: my Thread Id number _RL tFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) _RL sFld (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) _RL rhoLoc (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy) INTEGER k, bi, bj _RL myTime INTEGER myIter, myThid CEOP C !LOCAL VARIABLES: C === Local variables === C msgBuf :: Informational/error message buffer c CHARACTER*(MAX_LEN_MBUF) msgBuf _RL rBBL (1-OLx:sNx+OLx,1-OLy:sNy+OLy) INTEGER i,j,kl C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C- Compute rhoLoc at level k based on tFld(k) and sFld(k). CALL FIND_RHO_2D( I 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, k, I tFld(1-OLx,1-OLy,k,bi,bj), I sFld(1-OLx,1-OLy,k,bi,bj), O rhoLoc(1-OLx,1-OLy,k,bi,bj), I k, bi, bj, myThid ) C- Compute rBBL at level k-1 based on bbl_theta and bbl_salt. kl = MAX(k-1,1) CALL FIND_RHO_2D( I 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, kl, I bbl_theta(1-OLx,1-OLy,bi,bj), I bbl_salt(1-OLx,1-OLy,bi,bj), O rBBL, I kl, bi, bj, myThid ) C- For k > kLowC replace rhoLoc with rBBL DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx IF ( k .GT. kLowC(i,j,bi,bj) ) & rhoLoc(i,j,k,bi,bj) = rBBL(i,j) ENDDO ENDDO C- Compute bbl_rho_nr at level Nr based on bbl_theta and bbl_salt. IF ( k .EQ. Nr ) THEN CALL FIND_RHO_2D( I 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, Nr, I bbl_theta(1-OLx,1-OLy,bi,bj), I bbl_salt(1-OLx,1-OLy,bi,bj), O bbl_rho_nr(1-OLx,1-OLy,bi,bj), I Nr, bi, bj, myThid ) ENDIF C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| RETURN END