C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_ini_vars.F,v 1.24 2017/03/24 23:51:14 jmc Exp $
C $Name:  $

#include "THSICE_OPTIONS.h"
#ifdef ALLOW_AIM
# include "AIM_OPTIONS.h"
#endif

CBOP
C     !ROUTINE: THSICE_INI_VARS
C     !INTERFACE:
      SUBROUTINE THSICE_INI_VARS( myThid )

C     !DESCRIPTION: \bv
C     *==========================================================*
C     | S/R THSICE_INI_VARS
C     | o initialize THermo_SeaICE variables
C     *==========================================================*
C     \ev

C     !USES:
      IMPLICIT NONE

C     === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "FFIELDS.h"
#include "THSICE_PARAMS.h"
#include "THSICE_VARS.h"
#ifdef ALLOW_AIM
# include "AIM_FFIELDS.h"
#endif

C     !INPUT/OUTPUT PARAMETERS:
C     == Routine arguments ==
C     myThid :: My Thread Id. number
      INTEGER myThid
CEOP

#ifdef ALLOW_THSICE
C     == Local variables ==
C     bi,bj  :: Loop counters
C     i,j    :: Loop counters
      INTEGER bi, bj
      INTEGER i, j
c     CHARACTER*(MAX_LEN_FNAM) fn
      _RL v2Loc
      _RL Tf

c     set up ice arrays to zero if starting ice
      DO bj = myByLo(myThid), myByHi(myThid)
        DO bi = myBxLo(myThid), myBxHi(myThid)
C-        state variables :
          DO j=1-OLy,sNy+OLy
           DO i=1-OLx,sNx+OLx
            iceMask(i,j,bi,bj)  = 0. _d 0
            iceHeight(i,j,bi,bj)= 0. _d 0
            snowHeight(i,j,bi,bj)=0. _d 0
            Tsrf(i,j,bi,bj)     = 0. _d 0
            Tice1(i,j,bi,bj)    = 0. _d 0
            Tice2(i,j,bi,bj)    = 0. _d 0
            Qice1(i,j,bi,bj)    = 0. _d 0
            Qice2(i,j,bi,bj)    = 0. _d 0
            snowAge(i,j,bi,bj)  = 0. _d 0
           ENDDO
          ENDDO
C-        fluxes :
          DO j=1-OLy,sNy+OLy
           DO i=1-OLx,sNx+OLx
            sHeating(i,j,bi,bj) = 0. _d 0
            flxCndBt(i,j,bi,bj) = 0. _d 0
            siceAlb(i,j,bi,bj)  = 0. _d 0
            icFlxSW (i,j,bi,bj) = 0. _d 0
            icFlxAtm(i,j,bi,bj) = 0. _d 0
            icFrwAtm(i,j,bi,bj) = 0. _d 0
C-        needed when using advection/diffusion:
            oceFWfx(i,j,bi,bj)  = 0. _d 0
            oceSflx(i,j,bi,bj)  = 0. _d 0
            oceQnet(i,j,bi,bj)  = 0. _d 0
           ENDDO
          ENDDO
C-        oceanic mixed layer state :
          v2Loc = vMxL_default*vMxL_default
          DO j=1-OLy,sNy+OLy
           DO i=1-OLx,sNx+OLx
             hOceMxL(i,j,bi,bj) = hMxL_default
             tOceMxL(i,j,bi,bj) = 0. _d 0
             sOceMxL(i,j,bi,bj) = sMxL_default
             v2ocMxL(i,j,bi,bj) = v2Loc
           ENDDO
          ENDDO
#ifdef ALLOW_AIM
          IF ( useAIM ) THEN
C-        Mask mixed layer depth : depth is used in thsice slab_ocean
C         and this mask is used in thsice_advdiff and if coupled
           DO j=1-OLy,sNy+OLy
            DO i=1-OLx,sNx+OLx
             IF ( aim_landFr(i,j,bi,bj).EQ.1. _d 0 )
     &       hOceMxL(i,j,bi,bj) = 0.
            ENDDO
           ENDDO
          ENDIF
#endif /* ALLOW_AIM */
        ENDDO
      ENDDO
      adjustFrW = 0. _d 0

C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|

#ifdef ALLOW_OCN_COMPON_INTERF
      IF ( useCoupler .AND. thSIce_skipThermo ) RETURN
#endif /* ALLOW_OCN_COMPON_INTERF */

      IF ( startIceModel.LE.0 .AND.
     &     ( nIter0.NE.0  .OR. pickupSuff.NE.' ' )
     &   ) THEN
C--     Read ice pickup fields
        CALL THSICE_READ_PICKUP( nIter0, myThid )

      ELSE
C--     Read initial conditions:
        IF ( thSIceFract_InitFile .NE. ' ' ) THEN
         CALL READ_REC_XY_RL(thSIceFract_InitFile,iceMask,1,0,myThid)
        ENDIF
        IF ( thSIceThick_InitFile .NE. ' ' ) THEN
         CALL READ_REC_XY_RL(thSIceThick_InitFile,iceHeight,1,0,myThid)
        ENDIF
        IF ( thSIceSnowH_InitFile .NE. ' ' ) THEN
         CALL READ_REC_XY_RL(thSIceSnowH_InitFile,snowHeight,1,0,myThid)
        ENDIF
        IF ( thSIceSnowA_InitFile .NE. ' ' ) THEN
         CALL READ_REC_XY_RL(thSIceSnowA_InitFile,snowAge,1,0,myThid)
        ENDIF
        IF ( thSIceEnthp_InitFile .NE. ' ' ) THEN
         CALL READ_REC_XY_RL(thSIceEnthp_InitFile,Qice1,1,0,myThid)
         CALL READ_REC_XY_RL(thSIceEnthp_InitFile,Qice2,2,0,myThid)
        ENDIF
        IF ( thSIceTsurf_InitFile .NE. ' ' ) THEN
         CALL READ_REC_XY_RL(thSIceTsurf_InitFile,Tsrf,1,0,myThid)
        ENDIF
        IF ( thSIceEnthp_InitFile .EQ. ' ' ) THEN
C-    enthalpy of new ice in J/kg, taken from thsice_extend.F with Tf beeing
C     the freezing Temp of seawater computed from a fixed salinity (31.5 psu)
C     Tf = -mu_Tf*salinity = -1.70 deg C;  Qice1 ~ 3.2e5;  Qice2 ~ 3.4e5
         Tf = -1.70 _d 0
         DO bj = myByLo(myThid), myByHi(myThid)
          DO bi = myBxLo(myThid), myBxHi(myThid)
           DO j=1-OLy,sNy+OLy
            DO i=1-OLx,sNx+OLx
             IF (iceMask(i,j,bi,bj) .NE. 0. _d 0) THEN
              Qice1(i,j,bi,bj) = -cpWater*Tmlt1
     &             + cpIce *(Tmlt1-Tf) + Lfresh*(1. _d 0-Tmlt1/Tf)
              Qice2(i,j,bi,bj) = -cpIce *Tf + Lfresh
             ENDIF
            ENDDO
           ENDDO
          ENDDO
         ENDDO
        ENDIF
      ENDIF

      _EXCH_XY_RL(iceMask,myThid)
      _EXCH_XY_RL(iceHeight, myThid)
      _EXCH_XY_RL(snowHeight,myThid)
      _EXCH_XY_RL(Tsrf,   myThid)
      _EXCH_XY_RL(Tice1,  myThid)
      _EXCH_XY_RL(Tice2,  myThid)
      _EXCH_XY_RL(Qice1,  myThid)
      _EXCH_XY_RL(Qice2,  myThid)
      _EXCH_XY_RL(snowAge,myThid)

C--     Initialise Sea-Ice Loading for SeaIce-Dynamics :
      IF ( useSEAICE ) THEN
       DO bj = myByLo(myThid), myByHi(myThid)
        DO bi = myBxLo(myThid), myBxHi(myThid)
         DO j=1-OLy,sNy+OLy
          DO i=1-OLx,sNx+OLx
           sIceLoad(i,j,bi,bj) = ( snowHeight(i,j,bi,bj)*rhos
     &          + iceHeight(i,j,bi,bj)*rhoi
     &          )*iceMask(i,j,bi,bj)
          ENDDO
         ENDDO
        ENDDO
       ENDDO
      ENDIF

#endif /* ALLOW_THSICE */

      RETURN
      END