C $Header: /u/gcmpack/MITgcm/pkg/aim_v23/aim_sice2aim.F,v 1.15 2015/07/29 00:43:17 jmc Exp $ C $Name: $ #include "AIM_OPTIONS.h" #ifdef ALLOW_THSICE #include "THSICE_OPTIONS.h" #endif CBOP C !ROUTINE: AIM_SICE2AIM C !INTERFACE: SUBROUTINE AIM_SICE2AIM( I land_frc, U aimTsoce, aimSIfrc, O aimTsice, aimAlb, I myTime, myIter, bi, bj, myThid ) C !DESCRIPTION: \bv C *================================================================* C | S/R AIM_SICE2AIM C | provide surface Boundary Conditions over sea-ice C | (from thsice pkg) to atmospheric physics package AIM C *================================================================* C *================================================================* C \ev C !USES: IMPLICIT NONE C == Global variables === C-- size for MITgcm & Physics package : #include "AIM_SIZE.h" C-- MITgcm #include "EEPARAMS.h" #include "PARAMS.h" C-- Physics package #include "AIM_PARAMS.h" #include "com_forcon.h" #ifdef ALLOW_THSICE C-- Sea-Ice package #include "THSICE_SIZE.h" #include "THSICE_PARAMS.h" #include "THSICE_VARS.h" INTEGER siLo, siHi, sjLo, sjHi PARAMETER ( siLo = 1-OLx , siHi = sNx+OLx ) PARAMETER ( sjLo = 1-OLy , sjHi = sNy+OLy ) #endif /* ALLOW_THSICE */ C !INPUT/OUTPUT PARAMETERS: C == Routine arguments == C land_frc :: land fraction [0-1] C aimTsoce :: sea surface temp [K], used in AIM C aimSIfrc :: sea-ice fraction [0-1] C aimTsice :: sea-ice (or snow) surface temp (K), used in AIM C aimAlb :: sea-ice albedo [0-1], used in AIM C myTime :: Current time of simulation ( s ) C myIter :: Current iteration number in simulation C bi,bj :: Tile index C myThid :: Number of this instance of the routine _RS land_frc(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL aimTsoce(sNx,sNy) _RL aimSIfrc(sNx,sNy) _RL aimTsice(sNx,sNy) _RL aimAlb(sNx,sNy) INTEGER myIter, bi, bj, myThid _RL myTime CEOP C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| #ifdef ALLOW_AIM #ifdef ALLOW_THSICE C == Local variables == C i,j :: Loop counters INTEGER i,j IF ( .TRUE. ) THEN C- Use thsice-pkg output instead of prescribed Temp & ice fraction DO j=1,sNy DO i=1,sNx aimTsice(i,j) = Tsrf(i,j,bi,bj)+celsius2K aimSIfrc(i,j) = iceMask(i,j,bi,bj) ENDDO ENDDO ELSE C- Fill in thsice-pkg Temp. using AIM surf. fields DO j=1,sNy DO i=1,sNx Tsrf (i,j,bi,bj) = aimTsice(i,j)-celsius2K Tice1(i,j,bi,bj) = Tsrf (i,j,bi,bj) Tice2(i,j,bi,bj) = Tsrf (i,j,bi,bj) iceMask(i,j,bi,bj) = aimSIfrc(i,j) ENDDO ENDDO ENDIF IF ( .TRUE. ) THEN C- Compute albedo over sea-ice CALL THSICE_ALBEDO( I bi, bj, siLo, siHi, sjLo, sjHi, I 1, sNx, 1, sNy, I iceMask(siLo,sjLo,bi,bj), iceHeight(siLo,sjLo,bi,bj), I snowHeight(siLo,sjLo,bi,bj), Tsrf(siLo,sjLo,bi,bj), I snowAge(siLo,sjLo,bi,bj), O siceAlb(siLo,sjLo,bi,bj), icAlbNIR(siLo,sjLo,bi,bj), I myTime, myIter, myThid ) DO j=1,sNy DO i=1,sNx aimAlb(i,j) = siceAlb(i,j,bi,bj) ENDDO ENDDO ELSE C- Surface Albedo : (from F.M. FORDATE S/R) DO j=1,sNy DO i=1,sNx aimAlb(i,j) = ALBICE ENDDO ENDDO ENDIF C-- fill in ocean mixed layer variables C notes: this replace reading initial conditions from files. C needs to be done before call to phy_driver (since freezing C temp. is fct of salinity) ; but would be better somewhere else. IF ( tauRelax_MxL .EQ. -1. _d 0 & .OR. ( stepFwd_oceMxL .AND. StartIceModel.NE.0 & .AND. myIter.EQ.nIter0 ) & .OR. ( myIter.EQ.0 .AND. myTime.EQ.baseTime & .AND. .NOT.useCoupler ) & ) THEN DO j=1,sNy DO i=1,sNx IF ( land_frc(i,j,bi,bj) .LT. 1. _d 0 ) THEN tOceMxL(i,j,bi,bj) = aimTsoce(i,j)-celsius2K sOceMxL(i,j,bi,bj) = sMxL_default ENDIF ENDDO ENDDO IF ( myIter.EQ.nIter0 ) THEN C-- Over-write the initial T,S_MxL files with the correct fields CALL WRITE_LOCAL_RL( 'ice_tOceMxL', 'I10', 1, & tOceMxL(1-OLx,1-OLy,bi,bj), & bi, bj, 1, myIter, myThid ) CALL WRITE_LOCAL_RL( 'ice_sOceMxL', 'I10', 1, & sOceMxL(1-OLx,1-OLy,bi,bj), & bi, bj, 1, myIter, myThid ) ENDIF ELSE C-- Use ocean mixed layer Temp as Atmos. SST (instead of prescribed Temp) DO j=1,sNy DO i=1,sNx IF ( land_frc(i,j,bi,bj) .LT. 1. _d 0 ) THEN aimTsoce(i,j) = tOceMxL(i,j,bi,bj)+celsius2K ENDIF ENDDO ENDDO ENDIF #endif /* ALLOW_THSICE */ #endif /* ALLOW_AIM */ RETURN END