C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_itd_pickup.F,v 1.5 2016/04/29 14:28:38 mlosch Exp $
C $Name: $
#include "SEAICE_OPTIONS.h"
#ifdef ALLOW_AUTODIFF
# include "AUTODIFF_OPTIONS.h"
#endif
C !ROUTINE: SEAICE_ITD_PICKUP
C !INTERFACE: ==========================================================
SUBROUTINE SEAICE_ITD_PICKUP(
I myIter, myThid )
C !DESCRIPTION: \bv
C *===========================================================*
C | SUBROUTINE SEAICE_ITD_PICKUP
C | o called in case pickup file does not contain
C | ITD variables but mean ice thickness and concentration
C |
C | o choose between two schemes:
C |
C | a) a simple scheme where the mean values are just put
C | into the first ITD category and then redustributed
C | into the correct category by SEAICE_ITD_REDIST
C | -> simpleSchemeFlag = .TRUE.
C |
C | b) a scheme that assumes a log-normal distribution based
C | on the mean ice thickness and a standard decviation
C | of LND_sigma=0.25
C | -> simpleSchemeFlag = .FALSE.
C |
C | Torge Martin, Mai 2012, torge@mit.edu
C *===========================================================*
C \ev
C !USES: ===============================================================
IMPLICIT NONE
C === Global variables needed ===
C AREA :: total sea ice area fraction
C HEFF :: mean in-situ sea ice thickness
C HSNOW :: mean in-situ snow layer depth
C
C === Global variables to be changed ===
C AREAITD :: sea ice area by category
C HEFFITD :: sea ice thickness by category
C HSNOWITD :: snow thickness by category
C
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "SEAICE_SIZE.h"
#include "SEAICE_PARAMS.h"
#include "SEAICE.h"
#ifdef ALLOW_AUTODIFF_TAMC
# include "tamc.h"
#endif
C !INPUT PARAMETERS: ===================================================
C === Routine arguments ===
C myIter :: iteration number
C myThid :: Thread no. that called this routine.
INTEGER myIter
INTEGER myThid
CEndOfInterface
#ifdef SEAICE_ITD
C !LOCAL VARIABLES: ====================================================
C === Local variables ===
C i,j,bi,bj,k :: Loop counters
C nITD :: number of sea ice thickness categories
C
INTEGER i, j, bi, bj, k
#ifdef ALLOW_AUTODIFF_TAMC
INTEGER itmpkey
#endif /* ALLOW_AUTODIFF_TAMC */
_RL dummyTime
C local variables for picking up ITD from single category pickup file
INTEGER LND_i, LND_iend
C parameters for log-normal distribution (LND)
_RL LND_sigma, LND_mu
PARAMETER(LND_sigma=0.25)
_RL LND_dx
_RL LND_tmp
C bin width of distribution
PARAMETER( LND_iend = 1000 )
PARAMETER( LND_dx = 100.D0 / LND_iend )
c PARAMETER(LND_dx=0.1)
c PARAMETER(LND_iend=INT(100./LND_dx))
_RL LND_x (LND_iend)
_RL LND_pdf(LND_iend)
C flag for pickup scheme
LOGICAL simpleSchemeFlag
simpleSchemeFlag = .TRUE.
dummyTime = 1.0
C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C reset ITD variables to zero for safety
DO k = 1, nITD
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
AREAITD(i,j,k,bi,bj) = 0. _d 0
HEFFITD(i,j,k,bi,bj) = 0. _d 0
HSNOWITD(i,j,k,bi,bj) = 0. _d 0
ENDDO
ENDDO
ENDDO
ENDDO
ENDDO
IF (simpleSchemeFlag) THEN
C-- Put all ice into one bin:
C
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
AREAITD(i,j,1,bi,bj) = AREA(i,j,bi,bj)
HEFFITD(i,j,1,bi,bj) = HEFF(i,j,bi,bj)
HSNOWITD(i,j,1,bi,bj) = HSNOW(i,j,bi,bj)
ENDDO
ENDDO
ENDDO
ENDDO
C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
ELSE
C-- Assume log-normal ITD:
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
C
C initialize log-normal distribution
LND_mu = log(HEFF(i,j,bi,bj)/AREA(i,j,bi,bj))
& - 0.5*LND_sigma*LND_sigma
LND_x(1) = 0.+LND_dx/2.
C make thickness bins
DO LND_i=2,LND_iend
LND_x(LND_i)=LND_x(LND_i-1)+LND_dx
ENDDO
C log-normal distribution:
DO LND_i=2,LND_iend
LND_tmp = log(LND_x(LND_i))-LND_mu
LND_pdf(LND_i)= 1.
& / (LND_x(LND_i)*LND_sigma*sqrt(2*3.1416))
& * exp( -(LND_tmp*LND_tmp)
& / (2*LND_sigma*LND_sigma) )
& * AREA(i,j,bi,bj)
ENDDO
C assign bins to ice thickness categories
k=1
DO LND_i=1,LND_iend
IF ( LND_x(LND_i).GT.Hlimit(k) ) k=k+1
AREAITD(i,j,k,bi,bj) = AREAITD(i,j,k,bi,bj)
& + LND_pdf(LND_i)*LND_dx
HEFFITD(i,j,k,bi,bj) = HEFFITD(i,j,k,bi,bj)
& + LND_pdf(LND_i)*LND_x(LND_i)*LND_dx
ENDDO
C
ENDDO
ENDDO
ENDDO
ENDDO
ENDIF
C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C finally sort into correct ice thickness category
C and compute bulk variables
C (needed for dynamic solver at beginning of seaice_model.F)
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
CALL SEAICE_ITD_REDIST( bi, bj, dummyTime, myIter, myThid)
CALL SEAICE_ITD_SUM( bi, bj, dummyTime, myIter, myThid)
ENDDO
ENDDO
C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
#endif /* SEAICE_ITD */
RETURN
END