C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_check_conserv.F,v 1.5 2013/05/02 20:01:21 jmc Exp $
C $Name: $
#include "THSICE_OPTIONS.h"
C !ROUTINE: THSICE_CHECK_CONSERV
C !INTERFACE:
SUBROUTINE THSICE_CHECK_CONSERV(
I dBugFlag, i, j, bi, bj, iceStart,
I iceFrac, compact, hIce, hSnow, qicen,
I qleft, ffresh, fsalt,
I myTime, myIter, myThid )
C *==========================================================*
C | S/R THSICE_CHECK_CONSERV
C | o Check Conservation of Energy, water and salt
C *==========================================================*
C !USES:
IMPLICIT NONE
C === Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
c #include "PARAMS.h"
#include "THSICE_SIZE.h"
#include "THSICE_PARAMS.h"
#include "THSICE_VARS.h"
#include "THSICE_TAVE.h"
C !INPUT/OUTPUT PARAMETERS:
C === Routine arguments ===
C myIter :: iteration counter for this thread
C myTime :: time counter for this thread
C myThid :: thread number for this instance of the routine.
LOGICAL dBugFlag
INTEGER i,j, bi,bj
INTEGER iceStart
_RL iceFrac
_RL compact, hIce, hSnow, qicen(nlyr)
_RL qleft, fsalt, ffresh
_RL myTime
INTEGER myIter
INTEGER myThid
#ifdef ALLOW_THSICE
C !LOCAL VARIABLES:
C === Local variables ===
_RL dEnerg, dWater, dSalt
_RL flxFrac
_RL flxAtm, frwAtm
LOGICAL dBugLoc
C- define grid-point location where to print debugging values
#include "THSICE_DEBUG.h"
1010 FORMAT(A,1P4E14.6)
dBugLoc = .FALSE.
#ifdef ALLOW_DBUG_THSICE
dBugLoc = dBug(i,j,bi,bj)
#endif
flxFrac = iceFrac
flxAtm = icFlxAtm(i,j,bi,bj)
frwAtm = icFrwAtm(i,j,bi,bj)
IF (iceStart.EQ.1) flxFrac = 1.
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
dEnerg= -rhos*snowHeight(i,j,bi,bj)*qsnow
& -rhoi*iceHeight(i,j,bi,bj)
& *(Qice1(i,j,bi,bj)+Qice2(i,j,bi,bj))*0.5
dWater = rhos*snowheight(i,j,bi,bj)+rhoi*iceHeight(i,j,bi,bj)
dSalt = rhoi*iceHeight(i,j,bi,bj)*saltice
IF (dBugLoc) WRITE(6,1010) 'ThSI_CHK: Ener0,Water0,Salt0 =',
& dEnerg, dWater, dSalt
C--
dEnerg = dEnerg*iceFrac
& + compact*( rhos*hSnow*qsnow
& + rhoi*hIce*(qicen(1)+qicen(2))*0.5
& )
dWater = dWater*iceFrac
& - compact*( rhos*hSnow + rhoi*hIce )
dSalt = dSalt*iceFrac
& - compact* rhoi*hIce*saltice
IF (dBugLoc) WRITE(6,1010) 'ThSI_CHK: dEner,dH20,dSal /dt=',
& dEnerg/thSIce_deltaT,dWater/thSIce_deltaT,dSalt/thSIce_deltaT
IF (dBugLoc) WRITE(6,1010) 'ThSI_CHK: fxH,fxW,fxS=',
& flxAtm-qleft, -ffresh-frwAtm,-fsalt
dEnerg = dEnerg + thSIce_deltaT*flxFrac*(flxAtm-qleft)
dWater = dWater - thSIce_deltaT*flxFrac*(ffresh+frwAtm)
dSalt = dSalt - thSIce_deltaT*flxFrac*fsalt
#ifdef ALLOW_TIMEAVE
ice_flx2oc_Ave(i,j,bi,bj) = ice_flx2oc_Ave(i,j,bi,bj)
& + dEnerg
ice_frw2oc_Ave(i,j,bi,bj) = ice_frw2oc_Ave(i,j,bi,bj)
& + dWater
ice_salFx_Ave(i,j,bi,bj) = ice_salFx_Ave(i,j,bi,bj)
& + dSalt
#endif /*ALLOW_TIMEAVE*/
C--
IF (dBugLoc) WRITE(6,1010) 'ThSI_CHK: resid.H,W,S=',
& dEnerg/thSIce_deltaT,dWater/thSIce_deltaT,dSalt/thSIce_deltaT
IF (dBugLoc) WRITE(6,1010) 'ThSI_CHK: hIc,hSn,snow*dt=',
& hIce, hSnow
c & hIce, hSnow, snowPrc(i,j,bi,bj)*thSIce_deltaT/rhos
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
#endif /*ALLOW_THSICE*/
RETURN
END