C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/thsice/thsice_slab_ocean.F,v 1.3 2004/06/24 23:46:26 jmc Exp $ C $Name: $ #include "THSICE_OPTIONS.h" CBOP C !ROUTINE: THSICE_SLAB_OCEAN C !INTERFACE: SUBROUTINE THSICE_SLAB_OCEAN( O dTsurf, I bi, bj, myThid ) C !DESCRIPTION: \bv C *==========================================================* C | S/R THSICE_SLAB_OCEAN C | o Slab ocean for atmosphere (and sea-ice) model C *==========================================================* C | o add ocean-surface fluxes + restoring term C | and step forward ocean mixed-layer Temp. & Salinity C *==========================================================* C \ev C !USES: IMPLICIT NONE C == Global variables == C-- MITgcm #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "FFIELDS.h" C-- Sea-Ice package #include "THSICE_PARAMS.h" #include "THSICE_VARS.h" C-- Physics package #ifdef ALLOW_AIM #include "AIM_FFIELDS.h" #endif C !INPUT/OUTPUT PARAMETERS: C == Routine Arguments == _RL dTsurf(sNx,sNy) INTEGER bi,bj INTEGER myThid CEOP #ifdef ALLOW_THSICE C == Local variables == C i,j :: Loop counters _RL dtFac, dtFacR, fwFac, heatFac, locTemp _RL oceTfreez INTEGER i,j IF ( .NOT.stepFwd_oceMxL ) RETURN C-- add heat flux and fresh-water + salt flux : dtFac = ocean_deltaT/rhosw fwFac = ocean_deltaT*sMxL_default*rhofw/rhosw heatFac = ocean_deltaT/(cpwater*rhosw) DO j=1,sNy DO i=1,sNx IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN dTsurf(i,j) = tOceMxL(i,j,bi,bj) tOceMxL(i,j,bi,bj) = tOceMxL(i,j,bi,bj) & - heatFac*Qnet(i,j,bi,bj) / hOceMxL(i,j,bi,bj) sOceMxL(i,j,bi,bj) = sOceMxL(i,j,bi,bj) & + (fwFac*EmPmR(i,j,bi,bj) - dtFac*saltFlux(i,j,bi,bj)) & / hOceMxL(i,j,bi,bj) ENDIF ENDDO ENDDO #ifdef ALLOW_AIM IF ( tauRelax_MxL .GT. 0. _d 0 ) THEN C-- add restoring (backward) toward climatological Temp. & fixed Salinity dtFac = ocean_deltaT/tauRelax_MxL dtFacR = 1. _d 0 /(1. _d 0 + dtFac) oceTfreez = - 1.9 _d 0 DO j=1,sNy DO i=1,sNx IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN sOceMxL(i,j,bi,bj) = & (sOceMxL(i,j,bi,bj) + dtFac*sMxL_default)*dtFacR oceTfreez = -mu_Tf*sOceMxL(i,j,bi,bj) locTemp = ( aim_sWght0*aim_sst0(i,j,bi,bj) & + aim_sWght1*aim_sst1(i,j,bi,bj) & ) - celsius2K locTemp = MAX( locTemp , oceTfreez ) tOceMxL(i,j,bi,bj) = & (tOceMxL(i,j,bi,bj) + dtFac*locTemp)*dtFacR ENDIF ENDDO ENDDO ENDIF #endif /* ALLOW_AIM */ C- Diagnose surf. temp. change DO j=1,sNy DO i=1,sNx IF ( hOceMxL(i,j,bi,bj).NE.0. _d 0 ) THEN dTsurf(i,j) = tOceMxL(i,j,bi,bj) - dTsurf(i,j) ENDIF ENDDO ENDDO #endif /* ALLOW_THSICE */ RETURN END