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

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

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


Revision 1.16 - (hide annotations) (download)
Mon Sep 14 20:54:33 2009 UTC (14 years, 9 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint61v, checkpoint61w, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.15: +53 -30 lines
change comments

1 jmc 1.16 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_calc_thickn.F,v 1.15 2008/04/11 21:31:14 dfer Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "THSICE_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: THSICE_CALC_THICKN
8     C !INTERFACE:
9     SUBROUTINE THSICE_CALC_THICKN(
10 jmc 1.6 I bi, bj, siLo, siHi, sjLo, sjHi,
11     I iMin,iMax, jMin,jMax, dBugFlag,
12     I iceMask, tFrz, tOce, v2oc,
13     I snowP, prcAtm, sHeat, flxCnB,
14     U icFrac, hIce, hSnow, tSrf, qIc1, qIc2,
15     U frwAtm, fzMlOc, flx2oc,
16     O frw2oc, fsalt,
17     I myTime, myIter, myThid )
18 jmc 1.1 C !DESCRIPTION: \bv
19     C *==========================================================*
20     C | S/R THSICE_CALC_THICKN
21     C | o Calculate ice & snow thickness changes
22     C *==========================================================*
23     C \ev
24 jmc 1.6 C ADAPTED FROM:
25     C LANL CICE.v2.0.2
26     C-----------------------------------------------------------------------
27     C.. thermodynamics (vertical physics) based on M. Winton 3-layer model
28     C.. See Bitz, C. M. and W. H. Lipscomb, 1999: "An energy-conserving
29     C.. thermodynamic sea ice model for climate study." J. Geophys.
30     C.. Res., 104, 15669 - 15677.
31     C.. Winton, M., 1999: "A reformulated three-layer sea ice model."
32     C.. Submitted to J. Atmos. Ocean. Technol.
33     C.. authors Elizabeth C. Hunke and William Lipscomb
34     C.. Fluid Dynamics Group, Los Alamos National Laboratory
35     C-----------------------------------------------------------------------
36     Cc****subroutine thermo_winton(n,fice,fsnow,dqice,dTsfc)
37     C.. Compute temperature change using Winton model with 2 ice layers, of
38     C.. which only the top layer has a variable heat capacity.
39 jmc 1.1
40 jmc 1.9 C---------------------------------
41     C parameters that control the partitioning between lateral (ice area) and
42     C vertical (ice thickness) ice volume changes.
43 jmc 1.13 C a) surface melting and bottom melting (runtime parameter: fracEnMelt):
44 jmc 1.9 C frace is the fraction of available heat that is used for
45     C lateral melting (and 1-frace reduces the thickness ) when
46 jmc 1.13 C o hi < hThinIce & frac > lowIcFrac2 : frace=1 (lateral melting only)
47     C o hThinIce < hi < hThickIce & frac > lowIcFrac1 : frace=fracEnMelt
48     C o hi > hThickIce or frac < lowIcFrac1 : frace=0 (thinning only)
49 jmc 1.9 C b) ocean freezing (and ice forming):
50 jmc 1.13 C - conductive heat flux (below sea-ice) always increases thickness.
51     C - under sea-ice, freezing potential (x iceFraction) is used to increase ice
52     C thickness or ice fraction (lateral growth), according to:
53     C o hi < hThinIce : use freezing potential to grow ice vertically;
54     C o hThinIce < hi < hThickIce : use partition factor fracEnFreez for lateral growth
55     c and (1-fracEnFreez) to increase thickness.
56     C o hi > hThickIce : use all freezing potential to grow ice laterally
57     C (up to areaMax)
58     C - over open ocean, use freezing potential [x(1-iceFraction)] to grow ice laterally
59     C - lateral growth forms ice of the same or =hNewIceMax thickness, the less of the 2.
60     C - starts to form sea-ice over fraction iceMaskMin, as minimum ice-volume is reached
61 jmc 1.9 C---------------------------------
62 jmc 1.1 C !USES:
63     IMPLICIT NONE
64    
65     C == Global variables ===
66 jmc 1.4 #include "EEPARAMS.h"
67 jmc 1.1 #include "THSICE_SIZE.h"
68     #include "THSICE_PARAMS.h"
69 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
70     # include "SIZE.h"
71     # include "tamc.h"
72     # include "tamc_keys.h"
73     #endif
74 jmc 1.1
75     C !INPUT/OUTPUT PARAMETERS:
76     C == Routine Arguments ==
77 jmc 1.6 C siLo,siHi :: size of input/output array: 1rst dim. lower,higher bounds
78     C sjLo,sjHi :: size of input/output array: 2nd dim. lower,higher bounds
79     C bi,bj :: tile indices
80     C iMin,iMax :: computation domain: 1rst index range
81     C jMin,jMax :: computation domain: 2nd index range
82     C dBugFlag :: allow to print debugging stuff (e.g. on 1 grid point).
83     C--- Input:
84     C iceMask :: sea-ice fractional mask [0-1]
85     C tFrz (Tf) :: sea-water freezing temperature [oC] (function of S)
86     C tOce (oceTs) :: surface level oceanic temperature [oC]
87     C v2oc (oceV2s) :: square of ocean surface-level velocity [m2/s2]
88     C snowP (snowPr) :: snow precipitation [kg/m2/s]
89     C prcAtm (=) :: total precip from the atmosphere [kg/m2/s]
90     C sHeat(sHeating):: surf heating flux left to melt snow or ice (= Atmos-conduction)
91     C flxCnB (=) :: heat flux conducted through the ice to bottom surface
92     C--- Modified (input&output):
93     C icFrac(iceFrac):: fraction of grid area covered in ice
94     C hIce (hi) :: ice height [m]
95     C hSnow (hs) :: snow height [m]
96     C tSrf (Tsf) :: surface (ice or snow) temperature
97     C qIc1 (qicen) :: ice enthalpy (J/kg), 1rst level
98     C qIc2 (qicen) :: ice enthalpy (J/kg), 2nd level
99     C frwAtm (evpAtm):: evaporation to the atmosphere [kg/m2/s] (>0 if evaporate)
100     C fzMlOc (frzmlt):: ocean mixed-layer freezing/melting potential [W/m2]
101     C flx2oc (qleft) :: net heat flux to ocean [W/m2] (> 0 downward)
102     C--- Output
103     C frw2oc (fresh) :: Total fresh water flux to ocean [kg/m2/s] (> 0 downward)
104     C fsalt (=) :: salt flux to ocean [g/m2/s] (> 0 downward)
105     C--- Input:
106     C myTime :: current Time of simulation [s]
107     C myIter :: current Iteration number in simulation
108     C myThid :: my Thread Id number
109     INTEGER siLo, siHi, sjLo, sjHi
110     INTEGER bi,bj
111     INTEGER iMin, iMax
112     INTEGER jMin, jMax
113     LOGICAL dBugFlag
114     _RL iceMask(siLo:siHi,sjLo:sjHi)
115     _RL tFrz (siLo:siHi,sjLo:sjHi)
116     _RL tOce (siLo:siHi,sjLo:sjHi)
117     _RL v2oc (siLo:siHi,sjLo:sjHi)
118     _RL snowP (siLo:siHi,sjLo:sjHi)
119     _RL prcAtm (siLo:siHi,sjLo:sjHi)
120     _RL sHeat (siLo:siHi,sjLo:sjHi)
121     _RL flxCnB (siLo:siHi,sjLo:sjHi)
122     _RL icFrac (siLo:siHi,sjLo:sjHi)
123     _RL hIce (siLo:siHi,sjLo:sjHi)
124     _RL hSnow (siLo:siHi,sjLo:sjHi)
125     _RL tSrf (siLo:siHi,sjLo:sjHi)
126     _RL qIc1 (siLo:siHi,sjLo:sjHi)
127     _RL qIc2 (siLo:siHi,sjLo:sjHi)
128     _RL frwAtm (siLo:siHi,sjLo:sjHi)
129     _RL fzMlOc (siLo:siHi,sjLo:sjHi)
130     _RL flx2oc (siLo:siHi,sjLo:sjHi)
131     _RL frw2oc (siLo:siHi,sjLo:sjHi)
132     _RL fsalt (siLo:siHi,sjLo:sjHi)
133     _RL myTime
134     INTEGER myIter
135     INTEGER myThid
136     CEOP
137    
138     #ifdef ALLOW_THSICE
139    
140     C !LOCAL VARIABLES:
141     C--- local copy of input/output argument list variables (see description above)
142 jmc 1.1 _RL frzmlt
143     _RL Tf
144     _RL oceTs, oceV2s, snowPr
145     _RL sHeating
146 jmc 1.6 c _RL flxCnB
147     c _RL evpAtm
148     _RL iceFrac
149 jmc 1.1 _RL hi
150     _RL hs
151     _RL Tsf
152     _RL qicen(nlyr)
153     _RL qleft
154     _RL fresh
155 jmc 1.6 c _RL fsalt
156 jmc 1.16
157 jmc 1.1 C == Local Variables ==
158 jmc 1.16 C i,j,k :: loop indices
159     C rec_nlyr :: reciprocal of number of ice layers (real value)
160     C evap :: evaporation over snow/ice [kg/m2/s] (>0 if evaporate)
161     C Fbot :: oceanic heat flux used to melt/form ice [W/m2]
162     C etop :: energy for top melting (J m-2)
163     C ebot :: energy for bottom melting (J m-2)
164     C etope :: energy (from top) for lateral melting (J m-2)
165     C ebote :: energy (from bottom) for lateral melting (J m-2)
166     C extend :: total energy for lateral melting (J m-2)
167     C hnew(nlyr) :: new ice layer thickness (m)
168     C hlyr :: individual ice layer thickness (m)
169     C dhi :: change in ice thickness
170     C dhs :: change in snow thickness
171     C rq :: rho * q for a layer
172     C rqh :: rho * q * h for a layer
173     C qbot :: enthalpy for new ice at bottom surf (J/kg)
174     C dt :: timestep
175     C esurp :: surplus energy from melting (J m-2)
176     C mwater0 :: fresh water mass gained/lost (kg/m^2)
177     C msalt0 :: salt gained/lost (kg/m^2)
178     C freshe :: fresh water gain from extension melting
179     C salte :: salt gained from extension melting
180     C lowIcFrac1 :: ice-fraction lower limit above which partial (lowIcFrac1)
181     C lowIcFrac2 :: or full (lowIcFrac2) lateral melting is allowed.
182     INTEGER i,j,k
183     _RL rec_nlyr
184 jmc 1.1 _RL evap
185 jmc 1.6 _RL Fbot
186 jmc 1.16 _RL etop
187     _RL ebot
188     _RL etope
189     _RL ebote
190     _RL extend
191     _RL hnew(nlyr)
192     _RL hlyr
193     _RL dhi
194     _RL dhs
195     _RL rq
196     _RL rqh
197     _RL qbot
198     _RL dt
199     _RL esurp
200     _RL mwater0
201     _RL msalt0
202     _RL freshe
203     _RL salte
204     _RL lowIcFrac1, lowIcFrac2
205 jmc 1.1
206     _RL ustar, cpchr
207 jmc 1.16 _RL chi
208 jmc 1.1 _RL frace, rs, hq
209 jmc 1.14 #ifdef THSICE_FRACEN_POWERLAW
210     INTEGER powerLaw
211     _RL rec_pLaw
212     _RL c1Mlt, c2Mlt, aMlt, hMlt
213     _RL c1Frz, c2Frz, aFrz, hFrz
214     _RL enFrcMlt, xxMlt, tmpMlt
215     _RL enFrcFrz, xxFrz, tmpFrz
216     #endif
217 jmc 1.6
218     C- define grid-point location where to print debugging values
219     #include "THSICE_DEBUG.h"
220 jmc 1.1
221     1010 FORMAT(A,I3,3F8.3)
222     1020 FORMAT(A,1P4E11.3)
223    
224 jmc 1.6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
225    
226 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
227     act1 = bi - myBxLo(myThid)
228     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
229     act2 = bj - myByLo(myThid)
230     max2 = myByHi(myThid) - myByLo(myThid) + 1
231     act3 = myThid - 1
232     max3 = nTx*nTy
233     act4 = ikey_dynamics - 1
234     #endif /* ALLOW_AUTODIFF_TAMC */
235    
236 jmc 1.6 rec_nlyr = nlyr
237     rec_nlyr = 1. _d 0 / rec_nlyr
238 jmc 1.1 dt = thSIce_deltaT
239    
240 jmc 1.13 C for now, use hard coded threshold (iceMaskMin +1.% and +10.%)
241     lowIcFrac1 = iceMaskMin*1.01 _d 0
242     lowIcFrac2 = iceMaskMin*1.10 _d 0
243 jmc 1.14 #ifdef THSICE_FRACEN_POWERLAW
244     IF ( powerLawExp2 .GE. 1 ) THEN
245     powerLaw = 1 + 2**powerLawExp2
246     rec_pLaw = powerLaw
247     rec_pLaw = 1. _d 0 / rec_pLaw
248     C- Coef for melting:
249     C lateral-melting energy fraction = fracEnMelt - [ aMlt*(hi-hMlt) ]^powerLaw
250     c1Mlt = fracEnMelt**rec_pLaw
251     c2Mlt = (1. _d 0 - fracEnMelt)**rec_pLaw
252     aMlt = (c1Mlt+c2Mlt)/(hThickIce-hThinIce)
253     hMlt = hThinIce+c2Mlt/aMlt
254     C- Coef for freezing:
255     C thickening energy fraction = fracEnFreez - [ aFrz*(hi-hFrz) ]^powerLaw
256     c1Frz = fracEnFreez**rec_pLaw
257     c2Frz = (1. _d 0 -fracEnFreez)**rec_pLaw
258     aFrz = (c1Frz+c2Frz)/(hThickIce-hThinIce)
259     hFrz = hThinIce+c2Frz/aFrz
260     ELSE
261     C- Linear relation
262     powerLaw = 1
263     aMlt = -1. _d 0 /(hThickIce-hThinIce)
264     hMlt = hThickIce
265     aFrz = -1. _d 0 /(hThickIce-hThinIce)
266     hFrz = hThickIce
267     ENDIF
268     #endif /* THSICE_FRACEN_POWERLAW */
269    
270 jmc 1.13
271 jmc 1.6 DO j = jMin, jMax
272     DO i = iMin, iMax
273 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
274     ikey_1 = i
275     & + sNx*(j-1)
276     & + sNx*sNy*act1
277     & + sNx*sNy*max1*act2
278     & + sNx*sNy*max1*max2*act3
279     & + sNx*sNy*max1*max2*max3*act4
280     #endif /* ALLOW_AUTODIFF_TAMC */
281     C--
282     #ifdef ALLOW_AUTODIFF_TAMC
283     CADJ STORE frwatm(i,j) = comlev1_thsice_1, key=ikey_1
284     CADJ STORE fzmloc(i,j) = comlev1_thsice_1, key=ikey_1
285     CADJ STORE hice(i,j) = comlev1_thsice_1, key=ikey_1
286     CADJ STORE hsnow(i,j) = comlev1_thsice_1, key=ikey_1
287     CADJ STORE icfrac(i,j) = comlev1_thsice_1, key=ikey_1
288     CADJ STORE qic1(i,j) = comlev1_thsice_1, key=ikey_1
289     CADJ STORE qic2(i,j) = comlev1_thsice_1, key=ikey_1
290     #endif
291    
292 jmc 1.6 IF (iceMask(i,j).GT.0. _d 0) THEN
293     Tf = tFrz(i,j)
294     oceTs = tOce(i,j)
295     oceV2s = v2oc(i,j)
296     snowPr = snowP(i,j)
297     c prcAtm = prcAtm(i,j)
298     sHeating= sHeat(i,j)
299     c flxCnB = flxCnB(i,j)
300     iceFrac = icFrac(i,j)
301     hi = hIce(i,j)
302     hs = hSnow(i,j)
303     Tsf = tSrf(i,j)
304     qicen(1)= qIc1(i,j)
305     qicen(2)= qIc2(i,j)
306     c evpAtm = frwAtm(i,j)
307     frzmlt = fzMlOc(i,j)
308     qleft = flx2oc(i,j)
309     c fresh = frw2oc(i,j)
310     c fsalt = fsalt(i,j)
311     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
312 jmc 1.1 C initialize energies
313     esurp = 0. _d 0
314    
315 jmc 1.6 evap = frwAtm(i,j)
316 jmc 1.1
317     C......................................................................
318     C.. Compute growth and/or melting at the top and bottom surfaces.......
319     C......................................................................
320    
321 jmc 1.14 #ifdef THSICE_FRACEN_POWERLAW
322     xxMlt = aMlt*(hi-hMlt)
323     xxFrz = aFrz*(hi-hFrz)
324     c--
325     IF ( powerLawExp2 .GE. 1 ) THEN
326     tmpMlt = xxMlt
327     tmpFrz = xxFrz
328     DO k=1,powerLawExp2
329     tmpMlt = tmpMlt*tmpMlt
330     tmpFrz = tmpFrz*tmpFrz
331     ENDDO
332     xxMlt = xxMlt*tmpMlt
333     xxFrz = xxFrz*tmpFrz
334     c xxMlt = xxMlt**powerLaw
335     c xxFrz = xxFrz**powerLaw
336     xxMlt = fracEnMelt -xxMlt
337     xxFrz = fracEnFreez-xxFrz
338     ENDIF
339     enFrcMlt = MAX( 0. _d 0, MIN( xxMlt, 1. _d 0 ) )
340     enFrcFrz = MAX( 0. _d 0, MIN( xxFrz, 1. _d 0 ) )
341     #endif /* THSICE_FRACEN_POWERLAW */
342    
343 jmc 1.5 IF (frzmlt.GE. 0. _d 0) THEN
344 jmc 1.1 C !-----------------------------------------------------------------
345     C ! freezing conditions
346     C !-----------------------------------------------------------------
347 jmc 1.10 Fbot = frzmlt
348 jmc 1.11 IF ( iceFrac.LT.iceMaskMax ) THEN
349 jmc 1.14 #ifdef THSICE_FRACEN_POWERLAW
350     Fbot = enFrcFrz*frzmlt
351     #else /* THSICE_FRACEN_POWERLAW */
352 jmc 1.10 IF (hi.GT.hThickIce) THEN
353 jmc 1.8 C if higher than hThickIce, use all frzmlt energy to grow extra ice
354 jmc 1.10 Fbot = 0. _d 0
355     ELSEIF (hi.GE.hThinIce) THEN
356     C between hThinIce & hThickIce, use partition factor fracEnFreez
357     Fbot = (1. _d 0 - fracEnFreez)*frzmlt
358     ENDIF
359 jmc 1.14 #endif /* THSICE_FRACEN_POWERLAW */
360 jmc 1.5 ENDIF
361     ELSE
362 jmc 1.1 C !-----------------------------------------------------------------
363     C ! melting conditions
364     C !-----------------------------------------------------------------
365 jmc 1.16 C for no currents:
366     ustar = 5. _d -2
367 jmc 1.1 C frictional velocity between ice and water
368 jmc 1.5 ustar = SQRT(0.00536 _d 0*oceV2s)
369 jmc 1.1 ustar=max(5. _d -3,ustar)
370 jmc 1.8 cpchr =cpWater*rhosw*bMeltCoef
371 jmc 1.16 Fbot = cpchr*(Tf-oceTs)*ustar
372     C frzmlt < Fbot < 0
373     Fbot = max(Fbot,frzmlt)
374 jmc 1.1 Fbot = min(Fbot,0. _d 0)
375 jmc 1.5 ENDIF
376 jmc 1.1
377     C mass of fresh water and salt initially present in ice
378     mwater0 = rhos*hs + rhoi*hi
379 jmc 1.8 msalt0 = rhoi*hi*saltIce
380 jmc 1.1
381 jmc 1.6 #ifdef ALLOW_DBUG_THSICE
382 jmc 1.9 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
383 jmc 1.6 & 'ThSI_CALC_TH: evpAtm, frzmlt, Fbot =', frwAtm(i,j),frzmlt,Fbot
384     #endif
385 jmc 1.1
386     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
387    
388     C Compute energy available for melting/growth.
389    
390 jmc 1.14 #ifdef THSICE_FRACEN_POWERLAW
391     IF ( fracEnMelt.EQ.0. _d 0 ) THEN
392     frace = 0. _d 0
393     ELSE
394     frace = (iceFrac - lowIcFrac1)/(lowIcFrac2-iceMaskMin)
395     frace = MIN( enFrcMlt, MAX( 0. _d 0, frace ) )
396     ENDIF
397     #else /* THSICE_FRACEN_POWERLAW */
398 jmc 1.10 IF ( hi.GT.hThickIce .OR. fracEnMelt.EQ.0. _d 0 ) THEN
399     C above certain height (or when no ice fractionation), only melt from top
400     frace = 0. _d 0
401 jmc 1.11 ELSEIF (hi.LT.hThinIce) THEN
402 jmc 1.1 C below a certain height, all energy goes to changing ice extent
403 jmc 1.11 frace = 1. _d 0
404 jmc 1.5 ELSE
405 jmc 1.10 frace = fracEnMelt
406 jmc 1.5 ENDIF
407 jmc 1.13 C Reduce lateral melting when ice fraction is low : the purpose is to avoid
408     C disappearing of (up to hThinIce thick) sea-ice by over doing lateral melting
409     C (which would bring iceFrac below iceMaskMin).
410     IF ( iceFrac.LE.lowIcFrac1 ) THEN
411     frace = 0. _d 0
412     ELSEIF (iceFrac.LE.lowIcFrac2 ) THEN
413     frace = MIN( frace, fracEnMelt )
414     ENDIF
415 jmc 1.14 #endif /* THSICE_FRACEN_POWERLAW */
416 jmc 1.1
417 jmc 1.5 c IF (Tsf .EQ. 0. _d 0 .AND. sHeating.GT.0. _d 0) THEN
418     IF ( sHeating.GT.0. _d 0 ) THEN
419 jmc 1.1 etop = (1. _d 0-frace)*sHeating * dt
420     etope = frace*sHeating * dt
421 jmc 1.5 ELSE
422 jmc 1.1 etop = 0. _d 0
423     etope = 0. _d 0
424     C jmc: found few cases where Tsf=0 & sHeating < 0 : add this line to conserv energy:
425     esurp = sHeating * dt
426 jmc 1.5 ENDIF
427 jmc 1.6 C-- flux at the base of sea-ice:
428 jmc 1.1 C conduction H.flx= flxCnB (+ =down); oceanic turbulent H.flx= Fbot (+ =down).
429     C- ==> energy available(+ => melt)= (flxCnB-Fbot)*dt
430 jmc 1.5 c IF (frzmlt.LT.0. _d 0) THEN
431 jmc 1.1 c ebot = (1. _d 0-frace)*(flxCnB-Fbot) * dt
432     c ebote = frace*(flxCnB-Fbot) * dt
433 jmc 1.5 c ELSE
434 jmc 1.1 c ebot = (flxCnB-Fbot) * dt
435     c ebote = 0. _d 0
436 jmc 1.5 c ENDIF
437 jmc 1.1 C- original formulation(above): Loose energy when flxCnB < Fbot < 0
438 jmc 1.6 ebot = (flxCnB(i,j)-Fbot) * dt
439 jmc 1.5 IF (ebot.GT.0. _d 0) THEN
440 jmc 1.1 ebote = frace*ebot
441     ebot = ebot-ebote
442 jmc 1.5 ELSE
443 jmc 1.1 ebote = 0. _d 0
444 jmc 1.5 ENDIF
445 jmc 1.6 #ifdef ALLOW_DBUG_THSICE
446 jmc 1.9 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
447 jmc 1.6 & 'ThSI_CALC_TH: etop,etope,ebot,ebote=', etop,etope,ebot,ebote
448     #endif
449 jmc 1.1
450     C Initialize layer thicknesses.
451     C Make sure internal ice temperatures do not exceed Tmlt.
452     C If they do, then eliminate the layer. (Dont think this will happen
453     C for reasonable values of i0.)
454    
455 jmc 1.6 hlyr = hi * rec_nlyr
456 jmc 1.5 DO k = 1, nlyr
457 jmc 1.1 hnew(k) = hlyr
458 jmc 1.5 ENDDO
459 jmc 1.1
460     C Top melt: snow, then ice.
461    
462 jmc 1.5 IF (etop .GT. 0. _d 0) THEN
463 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
464     CADJ STORE etop = comlev1_thsice_1, key=ikey_1
465     #endif
466 jmc 1.5 IF (hs. gt. 0. _d 0) THEN
467 jmc 1.1 rq = rhos * qsnow
468     rqh = rq * hs
469 jmc 1.5 IF (etop .LT. rqh) THEN
470 jmc 1.1 hs = hs - etop/rq
471     etop = 0. _d 0
472 jmc 1.5 ELSE
473 jmc 1.6 etop = etop - rqh
474 jmc 1.1 hs = 0. _d 0
475 jmc 1.5 ENDIF
476     ENDIF
477 jmc 1.6
478 jmc 1.5 DO k = 1, nlyr
479 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
480     ikey_2 = k
481     & + nlyr*(i-1)
482     & + nlyr*sNx*(j-1)
483     & + nlyr*sNx*sNy*act1
484     & + nlyr*sNx*sNy*max1*act2
485     & + nlyr*sNx*sNy*max1*max2*act3
486     & + nlyr*sNx*sNy*max1*max2*max3*act4
487     #endif
488     C--
489     #ifdef ALLOW_AUTODIFF_TAMC
490     CADJ STORE etop = comlev1_thsice_2, key=ikey_2
491     CADJ STORE hnew(k) = comlev1_thsice_2, key=ikey_2
492     #endif
493 jmc 1.5 IF (etop .GT. 0. _d 0) THEN
494 jmc 1.1 rq = rhoi * qicen(k)
495     rqh = rq * hnew(k)
496 jmc 1.5 IF (etop .LT. rqh) THEN
497 jmc 1.1 hnew(k) = hnew(k) - etop / rq
498     etop = 0. _d 0
499 jmc 1.5 ELSE
500 jmc 1.1 etop = etop - rqh
501     hnew(k) = 0. _d 0
502 jmc 1.5 ENDIF
503     ENDIF
504     ENDDO
505     ELSE
506 jmc 1.1 etop=0. _d 0
507 jmc 1.5 ENDIF
508 jmc 1.1 C If ice is gone and melting energy remains
509 jmc 1.5 c IF (etop .GT. 0. _d 0) THEN
510     c WRITE (6,*) 'QQ All ice melts from top ', i,j
511 jmc 1.1 c hi=0. _d 0
512     c go to 200
513 jmc 1.5 c ENDIF
514 jmc 1.1
515    
516 jmc 1.6 C Bottom melt/growth.
517 jmc 1.1
518 jmc 1.5 IF (ebot .LT. 0. _d 0) THEN
519 jmc 1.1 C Compute enthalpy of new ice growing at bottom surface.
520 jmc 1.8 qbot = -cpIce *Tf + Lfresh
521 jmc 1.1 dhi = -ebot / (qbot * rhoi)
522     ebot = 0. _d 0
523 heimbach 1.7 cph k = nlyr
524     #ifdef ALLOW_AUTODIFF_TAMC
525     CADJ STORE hnew(:) = comlev1_thsice_1, key=ikey_1
526     CADJ STORE qicen(:) = comlev1_thsice_1, key=ikey_1
527     #endif
528 jmc 1.9 qicen(nlyr) = (hnew(nlyr)*qicen(nlyr)+dhi*qbot) /
529 heimbach 1.7 & (hnew(nlyr)+dhi)
530     hnew(nlyr) = hnew(nlyr) + dhi
531 jmc 1.6 ELSE
532 jmc 1.5 DO k = nlyr, 1, -1
533 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
534     ikey_2 = (nlyr-k+1)
535     & + nlyr*(i-1)
536     & + nlyr*sNx*(j-1)
537     & + nlyr*sNx*sNy*act1
538     & + nlyr*sNx*sNy*max1*act2
539     & + nlyr*sNx*sNy*max1*max2*act3
540     & + nlyr*sNx*sNy*max1*max2*max3*act4
541     #endif
542     C--
543     #ifdef ALLOW_AUTODIFF_TAMC
544     CADJ STORE ebot = comlev1_thsice_2, key=ikey_2
545     CADJ STORE hnew(k) = comlev1_thsice_2, key=ikey_2
546     CADJ STORE qicen(k) = comlev1_thsice_2, key=ikey_2
547     #endif
548 jmc 1.5 IF (ebot.GT.0. _d 0 .AND. hnew(k).GT.0. _d 0) THEN
549 jmc 1.1 rq = rhoi * qicen(k)
550     rqh = rq * hnew(k)
551 jmc 1.5 IF (ebot .LT. rqh) THEN
552 jmc 1.1 hnew(k) = hnew(k) - ebot / rq
553     ebot = 0. _d 0
554 jmc 1.5 ELSE
555 jmc 1.1 ebot = ebot - rqh
556     hnew(k) = 0. _d 0
557 jmc 1.5 ENDIF
558     ENDIF
559     ENDDO
560 jmc 1.1
561 jmc 1.6 C If ice melts completely and snow is left, remove the snow with
562 jmc 1.1 C energy from the mixed layer
563    
564 jmc 1.5 IF (ebot.GT.0. _d 0 .AND. hs.GT.0. _d 0) THEN
565 jmc 1.1 rq = rhos * qsnow
566     rqh = rq * hs
567 jmc 1.5 IF (ebot .LT. rqh) THEN
568 jmc 1.1 hs = hs - ebot / rq
569     ebot = 0. _d 0
570 jmc 1.5 ELSE
571 jmc 1.1 ebot = ebot - rqh
572     hs = 0. _d 0
573 jmc 1.5 ENDIF
574     ENDIF
575     c IF (ebot .GT. 0. _d 0) THEN
576 jmc 1.1 c IF (dBug) WRITE(6,*) 'All ice (& snow) melts from bottom'
577     c hi=0. _d 0
578     c go to 200
579 jmc 1.5 c ENDIF
580     ENDIF
581 jmc 1.1
582     C Compute new total ice thickness.
583     hi = 0. _d 0
584 jmc 1.5 DO k = 1, nlyr
585 jmc 1.1 hi = hi + hnew(k)
586 jmc 1.5 ENDDO
587 jmc 1.6 #ifdef ALLOW_DBUG_THSICE
588 jmc 1.9 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
589 jmc 1.6 & 'ThSI_CALC_TH: etop, ebot, hi, hs =', etop, ebot, hi, hs
590     #endif
591 jmc 1.1
592 jmc 1.8 C If hi < hIceMin, melt the ice.
593     IF ( hi.LT.hIceMin .AND. (hi+hs).GT.0. _d 0 ) THEN
594 jmc 1.1 esurp = esurp - rhos*qsnow*hs
595 jmc 1.5 DO k = 1, nlyr
596 jmc 1.1 esurp = esurp - rhoi*qicen(k)*hnew(k)
597 jmc 1.5 ENDDO
598 jmc 1.1 hi = 0. _d 0
599     hs = 0. _d 0
600     Tsf=0. _d 0
601 jmc 1.6 iceFrac = 0. _d 0
602 jmc 1.5 DO k = 1, nlyr
603 jmc 1.1 qicen(k) = 0. _d 0
604 jmc 1.5 ENDDO
605 jmc 1.6 #ifdef ALLOW_DBUG_THSICE
606 jmc 1.9 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
607 jmc 1.6 & 'ThSI_CALC_TH: -1 : esurp=',esurp
608     #endif
609 jmc 1.5 ENDIF
610 jmc 1.1
611     C-- do a mass-budget of sea-ice to compute "fresh" = the fresh-water flux
612     C that is returned to the ocean ; needs to be done before snow/evap
613     fresh = (mwater0 - (rhos*hs + rhoi*hi))/dt
614    
615 jmc 1.6 IF ( hi .LE. 0. _d 0 ) THEN
616 jmc 1.5 C- return snow to the ocean (account for Latent heat of freezing)
617 jmc 1.1 fresh = fresh + snowPr
618     qleft = qleft - snowPr*Lfresh
619 jmc 1.5
620     ELSE
621     C- else: hi > 0
622 jmc 1.1
623     C Let it snow
624    
625     hs = hs + dt*snowPr/rhos
626    
627     C If ice evap is used to sublimate surface snow/ice or
628     C if no ice pass on to ocean
629 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
630     CADJ STORE evap = comlev1_thsice_1, key=ikey_1
631     CADJ STORE hs = comlev1_thsice_1, key=ikey_1
632     #endif
633 jmc 1.5 IF (hs.GT.0. _d 0) THEN
634     IF (evap/rhos *dt.GT.hs) THEN
635 jmc 1.1 evap=evap-hs*rhos/dt
636     hs=0. _d 0
637 jmc 1.5 ELSE
638 jmc 1.1 hs = hs - evap/rhos *dt
639     evap=0. _d 0
640 jmc 1.5 ENDIF
641     ENDIF
642 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
643     CADJ STORE evap = comlev1_thsice_1, key=ikey_1
644     CADJ STORE hi = comlev1_thsice_1, key=ikey_1
645     CADJ STORE hnew(:) = comlev1_thsice_1, key=ikey_1
646     CADJ STORE qicen(:) = comlev1_thsice_1, key=ikey_1
647     #endif
648 jmc 1.5 IF (hi.GT.0. _d 0.AND.evap.GT.0. _d 0) THEN
649     DO k = 1, nlyr
650 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
651     ikey_2 = k
652     & + nlyr*(i-1)
653     & + nlyr*sNx*(j-1)
654     & + nlyr*sNx*sNy*act1
655     & + nlyr*sNx*sNy*max1*act2
656     & + nlyr*sNx*sNy*max1*max2*act3
657     & + nlyr*sNx*sNy*max1*max2*max3*act4
658     #endif
659     C--
660     #ifdef ALLOW_AUTODIFF_TAMC
661     CADJ STORE evap = comlev1_thsice_2, key=ikey_2
662     CADJ STORE hnew(k) = comlev1_thsice_2, key=ikey_2
663     CADJ STORE qicen(k) = comlev1_thsice_2, key=ikey_2
664     #endif
665 jmc 1.5 IF (evap .GT. 0. _d 0) THEN
666 jmc 1.1 C-- original scheme, does not care about ice temp.
667     C- this can produce small error (< 1.W/m2) in the Energy budget
668 jmc 1.5 c IF (evap/rhoi *dt.GT.hnew(k)) THEN
669 jmc 1.1 c evap=evap-hnew(k)*rhoi/dt
670     c hnew(k)=0. _d 0
671 jmc 1.5 c ELSE
672 jmc 1.1 c hnew(k) = hnew(k) - evap/rhoi *dt
673     c evap=0. _d 0
674 jmc 1.5 c ENDIF
675 jmc 1.1 C-- modified scheme. taking into account Ice enthalpy
676 jmc 1.6 dhi = evap/rhoi*dt
677 jmc 1.5 IF (dhi.GE.hnew(k)) THEN
678 jmc 1.1 evap=evap-hnew(k)*rhoi/dt
679     esurp = esurp - hnew(k)*rhoi*(qicen(k)-Lfresh)
680     hnew(k)=0. _d 0
681 jmc 1.5 ELSE
682 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
683     CADJ STORE hnew(k) = comlev1_thsice_2, key=ikey_2
684     #endif
685 jmc 1.1 hq = hnew(k)*qicen(k)-dhi*Lfresh
686     hnew(k) = hnew(k) - dhi
687     qicen(k)=hq/hnew(k)
688     evap=0. _d 0
689 jmc 1.5 ENDIF
690 jmc 1.1 C-------
691 jmc 1.5 ENDIF
692     ENDDO
693     ENDIF
694     c IF (evap .GT. 0. _d 0) THEN
695     c WRITE (6,*) 'BB All ice sublimates', i,j
696 jmc 1.1 c hi=0. _d 0
697     c go to 200
698 jmc 1.5 c ENDIF
699 jmc 1.1
700     C Compute new total ice thickness.
701    
702 jmc 1.5 hi = 0. _d 0
703     DO k = 1, nlyr
704 jmc 1.1 hi = hi + hnew(k)
705 jmc 1.5 ENDDO
706 jmc 1.1
707 jmc 1.8 C If hi < hIceMin, melt the ice.
708     IF ( hi.GT.0. _d 0 .AND. hi.LT.hIceMin ) THEN
709 jmc 1.1 fresh = fresh + (rhos*hs + rhoi*hi)/dt
710     esurp = esurp - rhos*qsnow*hs
711 jmc 1.5 DO k = 1, nlyr
712 jmc 1.1 esurp = esurp - rhoi*qicen(k)*hnew(k)
713 jmc 1.5 ENDDO
714 jmc 1.1 hi = 0. _d 0
715     hs = 0. _d 0
716     Tsf=0. _d 0
717 jmc 1.6 iceFrac = 0. _d 0
718 jmc 1.5 DO k = 1, nlyr
719 jmc 1.1 qicen(k) = 0. _d 0
720 jmc 1.5 ENDDO
721 jmc 1.6 #ifdef ALLOW_DBUG_THSICE
722 jmc 1.9 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
723 jmc 1.6 & 'ThSI_CALC_TH: -2 : esurp,fresh=', esurp, fresh
724     #endif
725 jmc 1.5 ENDIF
726    
727     C- else hi > 0: end
728     ENDIF
729    
730     IF ( hi .GT. 0. _d 0 ) THEN
731 jmc 1.1
732 jmc 1.6 C If there is enough snow to lower the ice/snow interface below
733     C freeboard, convert enough snow to ice to bring the interface back
734 dfer 1.15 C to sea-level OR if snow height is larger than hsMax, snow is
735     C converted to ice to bring hs down to hsMax. Largest change is
736     C applied and enthalpy of top ice layer adjusted accordingly.
737 jmc 1.1
738 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
739     CADJ STORE hi = comlev1_thsice_1, key=ikey_1
740     CADJ STORE hs = comlev1_thsice_1, key=ikey_1
741     CADJ STORE hnew(:) = comlev1_thsice_1, key=ikey_1
742     CADJ STORE qicen(:) = comlev1_thsice_1, key=ikey_1
743     #endif
744 dfer 1.15 IF ( hs .GT. hi*floodFac .OR. hs .GT. hsMax ) THEN
745 jmc 1.5 cBB WRITE (6,*) 'Freeboard adjusts'
746 dfer 1.15 c dhi = (hs * rhos - hi * rhoiw) / rhosw
747     c dhs = dhi * rhoi / rhos
748     dhs = (hs - hi*floodFac) * rhoi / rhosw
749     dhs = MAX( hs - hsMax, dhs )
750     dhi = dhs * rhos / rhoi
751 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
752     CADJ STORE hnew(:) = comlev1_thsice_1, key=ikey_1
753     #endif
754 jmc 1.1 rqh = rhoi*qicen(1)*hnew(1) + rhos*qsnow*dhs
755     hnew(1) = hnew(1) + dhi
756     qicen(1) = rqh / (rhoi*hnew(1))
757     hi = hi + dhi
758     hs = hs - dhs
759 jmc 1.5 ENDIF
760 jmc 1.1
761    
762     C limit ice height
763     C- NOTE: this part does not conserve Energy ;
764     C but surplus of fresh water and salt are taken into account.
765 jmc 1.5 IF (hi.GT.hiMax) THEN
766 jmc 1.1 cBB print*,'BBerr, hi>hiMax',i,j,hi
767     chi=hi-hiMax
768 jmc 1.5 DO k=1,nlyr
769 jmc 1.1 hnew(k)=hnew(k)-chi/2. _d 0
770 jmc 1.5 ENDDO
771 jmc 1.1 fresh = fresh + chi*rhoi/dt
772 jmc 1.5 ENDIF
773 dfer 1.15 c IF (hs.GT.hsMax) THEN
774     cc print*,'BBerr, hs>hsMax',i,j,hs
775     c chs=hs-hsMax
776     c hs=hsMax
777     c fresh = fresh + chs*rhos/dt
778     c ENDIF
779 jmc 1.1
780     C Compute new total ice thickness.
781    
782 jmc 1.5 hi = 0. _d 0
783     DO k = 1, nlyr
784 jmc 1.1 hi = hi + hnew(k)
785 jmc 1.5 ENDDO
786 jmc 1.1
787 jmc 1.6 #ifdef ALLOW_DBUG_THSICE
788 jmc 1.9 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
789 jmc 1.6 & 'ThSI_CALC_TH: b-Winton: hnew, qice =', hnew, qicen
790     #endif
791    
792     hlyr = hi * rec_nlyr
793 jmc 1.1 CALL THSICE_RESHAPE_LAYERS(
794     U qicen,
795     I hlyr, hnew, myThid )
796    
797 jmc 1.6 #ifdef ALLOW_DBUG_THSICE
798     IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
799     & 'ThSI_CALC_TH: iceFrac,hi, qtot, hs =', iceFrac,hi,
800     & (qicen(1)+qicen(2))*0.5, hs
801     #endif
802 jmc 1.1
803 jmc 1.5 C- if hi > 0 : end
804     ENDIF
805     200 CONTINUE
806 jmc 1.1
807     C- Compute surplus energy left over from melting.
808    
809 jmc 1.6 IF (hi.LE.0. _d 0) iceFrac=0. _d 0
810 jmc 1.1
811     C.. heat fluxes left over for ocean
812     qleft = qleft + (Fbot+(esurp+etop+ebot)/dt)
813 jmc 1.6 #ifdef ALLOW_DBUG_THSICE
814 jmc 1.9 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
815 jmc 1.6 & 'ThSI_CALC_TH: [esurp,etop+ebot]/dt =',esurp/dt,etop/dt,ebot/dt
816     #endif
817 jmc 1.1
818     C-- Evaporation left to the ocean :
819     fresh = fresh - evap
820     C- Correct Atmos. fluxes for this different latent heat:
821     C evap was computed over freezing surf.(Tsf<0), latent heat = Lvap+Lfresh
822 jmc 1.6 C but should be Lvap only for the fraction "evap" that is left to the ocean.
823 jmc 1.1 qleft = qleft + evap*Lfresh
824    
825     C fresh and salt fluxes
826     c fresh = (mwater0 - (rhos*(hs) + rhoi*(hi)))/dt-evap
827 jmc 1.8 c fsalt = (msalt0 - rhoi*hi*saltIce)/35. _d 0/dt ! for same units as fresh
828 jmc 1.6 C note (jmc): fresh is computed from a sea-ice mass budget that already
829 jmc 1.1 C contains, at this point, snow & evaporation (of snow & ice)
830     C but are not meant to be part of ice/ocean fresh-water flux.
831     C fix: a) like below or b) by making the budget before snow/evap is added
832     c fresh = (mwater0 - (rhos*(hs) + rhoi*(hi)))/dt
833 jmc 1.6 c & + snow(i,j,bi,bj)*rhos - frwAtm
834 jmc 1.8 fsalt(i,j) = (msalt0 - rhoi*hi*saltIce)/dt
835 jmc 1.1
836 jmc 1.6 #ifdef ALLOW_DBUG_THSICE
837     IF (dBug(i,j,bi,bj) ) THEN
838     WRITE(6,1020)'ThSI_CALC_TH:dH2O,Ev[kg],fresh,fsalt',
839     & (mwater0-(rhos*hs+rhoi*hi))/dt,evap,fresh,fsalt(i,j)
840     WRITE(6,1020)'ThSI_CALC_TH: Qleft,Fbot,extend/dt =',
841 jmc 1.1 & Qleft,Fbot,(etope+ebote)/dt
842 jmc 1.6 ENDIF
843     #endif
844 jmc 1.1
845 jmc 1.6 C-- add remaining liquid Precip (rain+RunOff) directly to ocean:
846     fresh = fresh + (prcAtm(i,j)-snowPr)
847    
848     C-- note: at this point, iceFrac has not been changed (unless reset to zero)
849 jmc 1.1 C and it can only be reduced by lateral melting in the following part:
850    
851     C calculate extent changes
852     extend=etope+ebote
853 jmc 1.6 IF (iceFrac.GT.0. _d 0.AND.extend.GT.0. _d 0) THEN
854 jmc 1.1 rq = rhoi * 0.5 _d 0*(qicen(1)+qicen(2))
855     rs = rhos * qsnow
856     rqh = rq * hi + rs * hs
857     freshe=(rhos*hs+rhoi*hi)/dt
858 jmc 1.8 salte=(rhoi*hi*saltIce)/dt
859 jmc 1.12 IF ( extend.LT.rqh ) THEN
860 jmc 1.6 iceFrac=(1. _d 0-extend/rqh)*iceFrac
861 jmc 1.12 ENDIF
862     IF ( extend.LT.rqh .AND. iceFrac.GE.iceMaskMin ) THEN
863 jmc 1.1 fresh=fresh+extend/rqh*freshe
864 jmc 1.6 fsalt(i,j)=fsalt(i,j)+extend/rqh*salte
865 jmc 1.5 ELSE
866 jmc 1.6 iceFrac=0. _d 0
867     hi=0. _d 0
868     hs=0. _d 0
869 jmc 1.1 qleft=qleft+(extend-rqh)/dt
870     fresh=fresh+freshe
871 jmc 1.6 fsalt(i,j)=fsalt(i,j)+salte
872 jmc 1.5 ENDIF
873     ELSEIF (extend.GT.0. _d 0) THEN
874 jmc 1.1 qleft=qleft+extend/dt
875 jmc 1.5 ENDIF
876 jmc 1.6
877     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
878     C-- Update output variables :
879    
880     C- Diagnostic of Atmos. fresh water flux (E-P) over sea-ice :
881     C substract precip from Evap (<- stored in frwAtm array)
882     frwAtm(i,j) = frwAtm(i,j) - prcAtm(i,j)
883    
884     C- update Mixed-Layer Freezing potential heat flux by substracting the
885     C part which has already been accounted for (Fbot):
886     fzMlOc(i,j) = frzmlt - Fbot*iceMask(i,j)
887    
888     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
889     #ifdef ALLOW_DBUG_THSICE
890 jmc 1.9 IF (dBug(i,j,bi,bj) ) WRITE(6,1020)
891 jmc 1.6 & 'ThSI_CALC_TH: iceFrac,flx2oc,fsalt,frw2oc=',
892     & iceFrac, qleft, fsalt(i,j), fresh
893     #endif
894     #ifdef CHECK_ENERGY_CONSERV
895     CALL THSICE_CHECK_CONSERV( dBugFlag, i, j, bi, bj, 0,
896     I iceMask(i,j), iceFrac, hi, hs, qicen,
897     I qleft, fresh, fsalt,
898     I myTime, myIter, myThid )
899     #endif /* CHECK_ENERGY_CONSERV */
900     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
901     C-- Update Sea-Ice state output:
902     icFrac(i,j) = iceFrac
903     hIce(i,j) = hi
904     hSnow(i,j ) = hs
905     tSrf(i,j) = Tsf
906     qIc1(i,j) = qicen(1)
907     qIc2(i,j) = qicen(2)
908     C-- Update oceanic flux output:
909     flx2oc(i,j) = qleft
910     frw2oc(i,j) = fresh
911     c fsalt(i,j) = fsalt
912     ENDIF
913     ENDDO
914     ENDDO
915 jmc 1.1 #endif /* ALLOW_THSICE */
916    
917     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
918    
919     RETURN
920     END

  ViewVC Help
Powered by ViewVC 1.1.22