C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_impl_temp.F,v 1.2 2004/05/07 21:33:34 jmc Exp $
C $Name: $
#include "THSICE_OPTIONS.h"
C !ROUTINE: THSICE_IMPL_TEMP
C !INTERFACE:
SUBROUTINE THSICE_IMPL_TEMP(
I netSW, sFlx,
O dTsurf,
I bi, bj, myTime, myIter, myThid)
C *==========================================================*
C | S/R THSICE_IMPL_TEMP
C | o Calculate sea-ice and surface temp. implicitly
C *==========================================================*
C | o return surface fluxes for atmosphere boundary layer
C | physics (and therefore called within atmospheric physics)
C *==========================================================*
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "FFIELDS.h"
#include "THSICE_SIZE.h"
#include "THSICE_PARAMS.h"
#include "THSICE_VARS.h"
C !INPUT/OUTPUT PARAMETERS:
C === Routine arguments ===
C netSW :: net Short Wave surf. flux (+=down) [W/m2]
C sFlx :: surf. heat flux (+=down) except SW, function of surf. temp Ts:
C 0: Flx(Ts=0) ; 1: Flx(Ts=Ts^n) ; 2: d.Flx/dTs(Ts=Ts^n)
C dTsurf :: surf. temp adjusment: Ts^n+1 - Ts^n
C bi,bj :: Tile index
C myIter :: iteration counter for this thread
C myTime :: time counter for this thread
C myThid :: thread number for this instance of the routine.
_RL netSW (sNx,sNy)
_RL sFlx (sNx,sNy,0:2)
_RL dTsurf (sNx,sNy)
INTEGER bi,bj
_RL myTime
INTEGER myIter
INTEGER myThid
#ifdef ALLOW_THSICE
C !LOCAL VARIABLES:
C === Local variables ===
C flxSW :: net Short-Wave (+=down) at surface [W/m2]
C flxExcSw :: surf. heat flux (+=down) except SW, function of surf. temp Ts:
C 0: Flx(Ts=0) ; 1: Flx(Ts=Ts^n) ; 2: d.Flx/dTs(Ts=Ts^n)
C sHeating :: surf heating left to melt snow or ice (= Atmos-conduction)
C flxCnB :: heat flux conducted through the ice to bottom surface
C flxtmp :: net heat flux from the atmosphere ( >0 downward)
C evptmp :: evaporation to the atmosphere [kg/m2/s] (>0 if evaporate)
INTEGER i,j
INTEGER iMin, iMax
INTEGER jMin, jMax
_RL flxSW
_RL Tf
_RL flxtmp, evptmp
_RL flxExcSw(0:2)
_RL hIce, hSnow, Tsf, Tice(nlyr), qicen(nlyr)
LOGICAL dBug
iMin = 1
iMax = sNx
jMin = 1
jMax = sNy
dBug = .FALSE.
1010 FORMAT(A,1P4E11.3)
DO j = jMin, jMax
DO i = iMin, iMax
c dBug = ( bi.EQ.3 .AND. i.EQ.15 .AND. j.EQ.11 )
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C part.1 : ice-covered fraction ;
C Solve for surface and ice temperature (implicitly) ; compute surf. fluxes
C-------
IF (iceMask(i,j,bi,bj).GT.0. _d 0) THEN
Tf = -mu_Tf*sOceMxL(i,j,bi,bj)
hIce = iceHeight(i,j,bi,bj)
hSnow = snowHeight(i,j,bi,bj)
flxExcSw(0) = sFlx(i,j,0)
flxExcSw(1) = sFlx(i,j,1)
flxExcSw(2) = sFlx(i,j,2)
flxSW = netSW(i,j)
Tsf = Tsrf(i,j,bi,bj)
qicen(1)= Qice1(i,j,bi,bj)
qicen(2)= Qice2(i,j,bi,bj)
IF ( dBug ) THEN
WRITE(6,'(A,2I4,2I2)') 'ThSI_IMPL_T: i,j=',i,j,bi,bj
WRITE(6,1010) 'ThSI_IMPL_T:-0- iceMask,hIc,hSn,Tsf=',
& iceMask(i,j,bi,bj), hIce, hSnow, Tsf
ENDIF
CALL THSICE_SOLVE4TEMP(
I useBulkforce, flxExcSw, Tf, hIce, hSnow,
U flxSW, Tsf, qicen,
O Tice, sHeating(i,j,bi,bj), flxCndBt(i,j,bi,bj),
O dTsurf(i,j), flxtmp, evptmp,
I i,j, bi,bj, myThid)
C-- Update Fluxes :
Qsw(i,j,bi,bj) = -flxSW
C-- Update Sea-Ice state :
Tsrf(i,j,bi,bj) =Tsf
Tice1(i,j,bi,bj)=Tice(1)
Tice2(i,j,bi,bj)=Tice(2)
Qice1(i,j,bi,bj)=qicen(1)
Qice2(i,j,bi,bj)=qicen(2)
IF ( dBug ) THEN
WRITE(6,1010) 'ThSI_IMPL_T: Tsf, Tice(1,2), dTsurf=',
& Tsf, Tice, dTsurf(i,j)
WRITE(6,1010) 'ThSI_IMPL_T: sHeat, flxCndBt, Qice =',
& sHeating(i,j,bi,bj), flxCndBt(i,j,bi,bj), qicen
ENDIF
ELSE
dTsurf(i,j) = 0. _d 0
Qsw(i,j,bi,bj) = 0. _d 0
ENDIF
ENDDO
ENDDO
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
#endif /* ALLOW_THSICE */
RETURN
END