/[MITgcm]/MITgcm/pkg/thsice/thsice_extend.F
ViewVC logotype

Annotation of /MITgcm/pkg/thsice/thsice_extend.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (hide annotations) (download)
Thu May 25 18:03:24 2006 UTC (18 years ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58l_post, mitgcm_mapl_00, checkpoint58u_post, checkpoint58w_post, checkpoint58r_post, checkpoint58n_post, checkpoint58x_post, checkpoint58t_post, checkpoint58h_post, checkpoint58q_post, checkpoint58j_post, checkpoint58f_post, checkpoint58i_post, checkpoint58g_post, checkpoint58o_post, checkpoint58y_post, checkpoint58k_post, checkpoint58v_post, checkpoint58s_post, checkpoint58p_post, checkpoint58m_post
Changes since 1.3: +130 -49 lines
- put i,j loops inside S/R: THSICE_ALBEDO, THSICE_SOLVE4TEMP, THSICE_EXTEND
   and THSICE_CALC_THICKN
- split thsice_step_fwd.F in 2 S/R: thsice_step_temp.F & thsice_step_fwd.F

1 jmc 1.4 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_extend.F,v 1.3 2006/02/10 00:30:32 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "THSICE_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: THSICE_EXTEND
8     C !INTERFACE:
9     SUBROUTINE THSICE_EXTEND(
10 jmc 1.4 I bi, bj, siLo, siHi, sjLo, sjHi,
11     I iMin,iMax, jMin,jMax, dBugFlag,
12     I fzMlOc, tFrz, tOce,
13     U icFrac, hIce, hSnow,
14     U tSrf, tIc1, tIc2, qIc1, qIc2,
15     O flx2oc, frw2oc, fsalt,
16     I myTime, myIter, myThid )
17 jmc 1.1 C !DESCRIPTION: \bv
18     C *==========================================================*
19 jmc 1.4 C | S/R THSICE_EXTEND
20 jmc 1.1 C | o Extend sea-ice area incresing ice fraction
21     C *==========================================================*
22 jmc 1.4 C | o incorporate surplus of energy to
23     C | make new ice or make ice grow laterally
24 jmc 1.1 C *==========================================================*
25     C \ev
26    
27     C !USES:
28     IMPLICIT NONE
29    
30     C == Global variables ==
31 jmc 1.2 #include "EEPARAMS.h"
32 jmc 1.1 #include "THSICE_SIZE.h"
33     #include "THSICE_PARAMS.h"
34    
35     C !INPUT/OUTPUT PARAMETERS:
36     C == Routine Arguments ==
37 jmc 1.4 C siLo,siHi :: size of input/output array: 1rst dim. lower,higher bounds
38     C sjLo,sjHi :: size of input/output array: 2nd dim. lower,higher bounds
39     C bi,bj :: tile indices
40     C iMin,iMax :: computation domain: 1rst index range
41     C jMin,jMax :: computation domain: 2nd index range
42     C dBugFlag :: allow to print debugging stuff (e.g. on 1 grid point).
43     C--- Input:
44     C iceMask :: sea-ice fractional mask [0-1]
45     C fzMlOc (esurp) :: ocean mixed-layer freezing/melting potential [W/m2]
46     C tFrz (Tf) :: sea-water freezing temperature [oC] (function of S)
47     C tOce (sst) :: surface level oceanic temperature [oC]
48     C--- Modified (input&output):
49     C icFrac(iceFrac):: fraction of grid area covered in ice
50     C hIce (iceThick):: ice height [m]
51     C hSnow(snowThick):: snow height [m]
52     C tSrf :: surface (ice or snow) temperature [oC]
53     C tIc1 :: temperature of ice layer 1 [oC]
54     C tIc2 :: temperature of ice layer 2 [oC]
55     C qIc1 (qicen) :: ice enthalpy (J/kg), 1rst level
56     C qIc2 (qicen) :: ice enthalpy (J/kg), 2nd level
57     C--- Output
58     C flx2oc (=) :: (additional) heat flux to ocean [W/m2] (+=dwn)
59     C frw2oc (=) :: (additional) fresh water flux to ocean [kg/m2/s] (+=dwn)
60     C fsalt (=) :: (additional) salt flux to ocean [g/m2/s] (+=dwn)
61     C--- Input:
62     C myTime :: current Time of simulation [s]
63     C myIter :: current Iteration number in simulation
64     C myThid :: my Thread Id number
65     INTEGER siLo, siHi, sjLo, sjHi
66     INTEGER bi,bj
67     INTEGER iMin, iMax
68     INTEGER jMin, jMax
69     LOGICAL dBugFlag
70     c _RL iceMask(siLo:siHi,sjLo:sjHi)
71     _RL fzMlOc (siLo:siHi,sjLo:sjHi)
72     _RL tFrz (siLo:siHi,sjLo:sjHi)
73     _RL tOce (siLo:siHi,sjLo:sjHi)
74     _RL icFrac (siLo:siHi,sjLo:sjHi)
75     _RL hIce (siLo:siHi,sjLo:sjHi)
76     _RL hSnow (siLo:siHi,sjLo:sjHi)
77     _RL tSrf (siLo:siHi,sjLo:sjHi)
78     _RL tIc1 (siLo:siHi,sjLo:sjHi)
79     _RL tIc2 (siLo:siHi,sjLo:sjHi)
80     _RL qIc1 (siLo:siHi,sjLo:sjHi)
81     _RL qIc2 (siLo:siHi,sjLo:sjHi)
82     _RL flx2oc (siLo:siHi,sjLo:sjHi)
83     _RL frw2oc (siLo:siHi,sjLo:sjHi)
84     _RL fsalt (siLo:siHi,sjLo:sjHi)
85     _RL myTime
86     INTEGER myIter
87     INTEGER myThid
88     CEOP
89    
90     #ifdef ALLOW_THSICE
91     C !LOCAL VARIABLES:
92     C--- local copy of input/output argument list variables (see description above)
93 jmc 1.1 _RL esurp
94     _RL Tf
95     _RL sst
96 jmc 1.4 _RL iceFrac
97 jmc 1.1 _RL iceThick
98     _RL snowThick
99     _RL qicen(nlyr)
100    
101     C == Local variables ==
102 jmc 1.3 C qicAv :: mean enthalpy of ice (layer 1 & 2) [J/m^3]
103 jmc 1.1 _RL deltaTice ! time-step for ice model
104     _RL newIce
105     _RL newIceFrac
106     _RL qicAv
107 jmc 1.4 INTEGER i,j ! loop indices
108    
109     C- define grid-point location where to print debugging values
110     #include "THSICE_DEBUG.h"
111 jmc 1.1
112     1010 FORMAT(A,I3,3F8.3)
113     1020 FORMAT(A,1P4E11.3)
114    
115 jmc 1.4 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
116     deltaTice = thSIce_deltaT
117    
118    
119     DO j = jMin, jMax
120     DO i = iMin, iMax
121     IF (fzMlOc(i,j).GT.0. _d 0) THEN
122     esurp = fzMlOc(i,j)
123     Tf = tFrz(i,j)
124     sst = tOce(i,j)
125     iceFrac = icFrac(i,j)
126     iceThick= hIce(i,j)
127     snowThick=hSnow(i,j)
128     qicen(1)= qIc1(i,j)
129     qicen(2)= qIc2(i,j)
130     C---
131 jmc 1.1 C-- start ice
132     newIceFrac = 0. _d 0
133    
134     C- enthalpy of new ice to form :
135 jmc 1.4 IF ( iceFrac.LE.0. _d 0 ) THEN
136 jmc 1.1 qicen(1)= -cpwater*Tmlt1
137     & + cpice *(Tmlt1-Tf) + Lfresh*(1. _d 0-Tmlt1/Tf)
138     qicen(2)= -cpice *Tf + Lfresh
139     ENDIF
140     qicAv = rhoi*(qicen(1)+qicen(2))*0.5 _d 0
141     newIce = esurp*deltaTice/qicAv
142    
143 jmc 1.4 IF (icFrac(i,j).EQ.0. _d 0) THEN
144 jmc 1.1 c IF (newIce.GE.himin*iceMaskmax) THEN
145     C- jmc: above is the original version, but below seems more logical:
146     IF (newIce.GE.himin0*iceMaskmin) THEN
147     C- if there is no ice in grid and enough ice to form:
148     iceThick = MAX(himin0,newIce/iceMaskmax)
149     newIceFrac = MIN(newIce/himin0,iceMaskmax)
150 jmc 1.4 iceFrac = newIceFrac
151 jmc 1.1 sst=Tf
152     ENDIF
153     ELSE
154     C- if there is already some ice
155 jmc 1.4 newIceFrac=MIN(newIce/iceThick,iceMaskmax-icFrac(i,j))
156     iceFrac = icFrac(i,j) + newIceFrac
157 jmc 1.1 C- spread snow out over ice
158 jmc 1.4 snowThick = snowThick*icFrac(i,j)/iceFrac
159     sst=(1. _d 0-newIceFrac)*sst+newIceFrac*Tf
160 jmc 1.1 ENDIF
161 jmc 1.4 C- oceanic fluxes:
162     flx2oc(i,j)= iceThick*newIceFrac*qicAv/deltaTice
163     frw2oc(i,j)=-(rhoi*iceThick)*newIceFrac/deltaTice
164     fsalt(i,j)= -(rhoi*iceThick*saltice)*newIceFrac/deltaTice
165    
166     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
167     #ifdef ALLOW_DBUG_THSICE
168     IF ( dBug(i,j,bi,bj) ) THEN
169     WRITE(6,1020) 'ThSI_EXT: iceH, newIce, newIceFrac=',
170     & iceThick, newIce, newIceFrac
171     WRITE(6,1020) 'ThSI_EXT: iceFrac,flx2oc,fsalt,frw2oc=',
172     & iceFrac,flx2oc(i,j),fsalt(i,j),frw2oc(i,j)
173     ENDIF
174     #endif
175     #ifdef CHECK_ENERGY_CONSERV
176     CALL THSICE_CHECK_CONSERV( dBugFlag, i, j, bi, bj, 1,
177     I icFrac(i,j), iceFrac, iceThick, snowThick, qicen,
178     I flx2oc(i,j), frw2oc(i,j), fsalt(i,j),
179     I myTime, myIter, myThid )
180     #endif /* CHECK_ENERGY_CONSERV */
181     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
182     C-- Update Sea-Ice state output:
183     IF ( iceFrac.GT.0. _d 0 .AND. icFrac(i,j).EQ.0. _d 0) THEN
184     tSrf(i,j) = tFrz(i,j)
185     tIc1(i,j) = tFrz(i,j)
186     tIc2(i,j) = tFrz(i,j)
187     qIc1(i,j) = qicen(1)
188     qIc2(i,j) = qicen(2)
189     ENDIF
190     icFrac(i,j) = iceFrac
191     hIce(i,j) = iceThick
192     hSnow(i,j ) = snowThick
193     ENDIF
194     ENDDO
195     ENDDO
196 jmc 1.1
197     #endif /* ALLOW_THSICE */
198    
199     RETURN
200     END

  ViewVC Help
Powered by ViewVC 1.1.22