/[MITgcm]/MITgcm/pkg/seaice/seaice_growth.F
ViewVC logotype

Annotation of /MITgcm/pkg/seaice/seaice_growth.F

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


Revision 1.162 - (hide annotations) (download)
Thu Mar 15 03:07:31 2012 UTC (12 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63l, checkpoint63k
Changes since 1.161: +20 -20 lines
fix typo (#idef instead of #ifdef) so that it compiles ; + document
 few "#endif" blocks

1 jmc 1.162 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_growth.F,v 1.161 2012/03/14 22:55:53 heimbach Exp $
2 jmc 1.91 C $Name: $
3    
4 dimitri 1.69 #include "SEAICE_OPTIONS.h"
5 jmc 1.143 #ifdef ALLOW_EXF
6     # include "EXF_OPTIONS.h"
7     #endif
8 dimitri 1.69
9     CBOP
10     C !ROUTINE: SEAICE_GROWTH
11     C !INTERFACE:
12     SUBROUTINE SEAICE_GROWTH( myTime, myIter, myThid )
13     C !DESCRIPTION: \bv
14     C *==========================================================*
15     C | SUBROUTINE seaice_growth
16     C | o Updata ice thickness and snow depth
17     C *==========================================================*
18     C \ev
19    
20     C !USES:
21     IMPLICIT NONE
22     C === Global variables ===
23     #include "SIZE.h"
24     #include "EEPARAMS.h"
25     #include "PARAMS.h"
26     #include "DYNVARS.h"
27     #include "GRID.h"
28     #include "FFIELDS.h"
29 heimbach 1.117 #include "SEAICE_SIZE.h"
30 dimitri 1.69 #include "SEAICE_PARAMS.h"
31     #include "SEAICE.h"
32 heimbach 1.117 #include "SEAICE_TRACER.h"
33 dimitri 1.69 #ifdef ALLOW_EXF
34 jmc 1.143 # include "EXF_PARAM.h"
35 dimitri 1.69 # include "EXF_FIELDS.h"
36     #endif
37     #ifdef ALLOW_SALT_PLUME
38     # include "SALT_PLUME.h"
39     #endif
40     #ifdef ALLOW_AUTODIFF_TAMC
41     # include "tamc.h"
42     #endif
43    
44     C !INPUT/OUTPUT PARAMETERS:
45     C === Routine arguments ===
46     C myTime :: Simulation time
47     C myIter :: Simulation timestep number
48     C myThid :: Thread no. that called this routine.
49     _RL myTime
50     INTEGER myIter, myThid
51 jmc 1.143 CEOP
52 dimitri 1.69
53 jmc 1.104 C !FUNCTIONS:
54     #ifdef ALLOW_DIAGNOSTICS
55     LOGICAL DIAGNOSTICS_IS_ON
56     EXTERNAL DIAGNOSTICS_IS_ON
57     #endif
58    
59 dimitri 1.69 C !LOCAL VARIABLES:
60     C === Local variables ===
61 gforget 1.89 C
62 jmc 1.91 C unit/sign convention:
63     C Within the thermodynamic computation all stocks, except HSNOW,
64 gforget 1.89 C are in 'effective ice meters' units, and >0 implies more ice.
65 jmc 1.91 C This holds for stocks due to ocean and atmosphere heat,
66     C at the outset of 'PART 2: determine heat fluxes/stocks'
67 gforget 1.89 C and until 'PART 7: determine ocean model forcing'
68     C This strategy minimizes the need for multiplications/divisions
69 jmc 1.91 C by ice fraction, heat capacity, etc. The only conversions that
70     C occurs are for the HSNOW (in effective snow meters) and
71     C PRECIP (fresh water m/s).
72 jmc 1.104 C
73     C HEFF is effective Hice thickness (m3/m2)
74     C HSNOW is Heffective snow thickness (m3/m2)
75     C HSALT is Heffective salt content (g/m2)
76     C AREA is the seaice cover fraction (0<=AREA<=1)
77     C Q denotes heat stocks -- converted to ice stocks (m3/m2) early on
78     C
79     C For all other stocks/increments, such as d_HEFFbyATMonOCN
80     C or a_QbyATM_cover, the naming convention is as follows:
81     C The prefix 'a_' means available, the prefix 'd_' means delta
82     C (i.e. increment), and the prefix 'r_' means residual.
83     C The suffix '_cover' denotes a value for the ice covered fraction
84     C of the grid cell, whereas '_open' is for the open water fraction.
85     C The main part of the name states what ice/snow stock is concerned
86     C (e.g. QbyATM or HEFF), and how it is affected (e.g. d_HEFFbyATMonOCN
87     C is the increment of HEFF due to the ATMosphere extracting heat from the
88     C OCeaN surface, or providing heat to the OCeaN surface).
89 gforget 1.89
90 dimitri 1.69 C i,j,bi,bj :: Loop counters
91     INTEGER i, j, bi, bj
92     C number of surface interface layer
93     INTEGER kSurface
94     C constants
95 mlosch 1.153 _RL tempFrz, ICE2SNOW, SNOW2ICE
96     _RL QI, QS, recip_QI
97 dimitri 1.69
98 jmc 1.145 C-- TmixLoc :: ocean surface/mixed-layer temperature (in K)
99     _RL TmixLoc (1:sNx,1:sNy)
100    
101 jmc 1.91 C a_QbyATM_cover :: available heat (in W/m^2) due to the interaction of
102 gforget 1.75 C the atmosphere and the ocean surface - for ice covered water
103 gforget 1.89 C a_QbyATM_open :: same but for open water
104 gforget 1.84 C r_QbyATM_cover :: residual of a_QbyATM_cover after freezing/melting processes
105 gforget 1.89 C r_QbyATM_open :: same but for open water
106 gforget 1.76 _RL a_QbyATM_cover (1:sNx,1:sNy)
107     _RL a_QbyATM_open (1:sNx,1:sNy)
108     _RL r_QbyATM_cover (1:sNx,1:sNy)
109 mlosch 1.109 _RL r_QbyATM_open (1:sNx,1:sNy)
110 gforget 1.75 C a_QSWbyATM_open - short wave heat flux over ocean in W/m^2
111     C a_QSWbyATM_cover - short wave heat flux under ice in W/m^2
112 gforget 1.76 _RL a_QSWbyATM_open (1:sNx,1:sNy)
113     _RL a_QSWbyATM_cover (1:sNx,1:sNy)
114 jmc 1.91 C a_QbyOCN :: available heat (in in W/m^2) due to the
115 gforget 1.76 C interaction of the ice pack and the ocean surface
116 jmc 1.91 C r_QbyOCN :: residual of a_QbyOCN after freezing/melting
117 gforget 1.75 C processes have been accounted for
118 gforget 1.84 _RL a_QbyOCN (1:sNx,1:sNy)
119     _RL r_QbyOCN (1:sNx,1:sNy)
120 gforget 1.76
121 jmc 1.104 C conversion factors to go from Q (W/m2) to HEFF (ice meters)
122 gforget 1.76 _RL convertQ2HI, convertHI2Q
123 jmc 1.104 C conversion factors to go from precip (m/s) unit to HEFF (ice meters)
124 gforget 1.76 _RL convertPRECIP2HI, convertHI2PRECIP
125 gforget 1.75
126 gforget 1.152 #ifdef ALLOW_DIAGNOSTICS
127 jmc 1.104 C ICE/SNOW stocks tendencies associated with the various melt/freeze processes
128 dimitri 1.113 _RL d_AREAbyATM (1:sNx,1:sNy)
129 gforget 1.112 _RL d_AREAbyOCN (1:sNx,1:sNy)
130 dimitri 1.113 _RL d_AREAbyICE (1:sNx,1:sNy)
131 gforget 1.152 #endif
132 jmc 1.104
133 heimbach 1.161 #ifdef SEAICE_ALLOW_AREA_RELAXATION
134     C ICE/SNOW stocks tendency associated with relaxation towards observation
135     _RL d_AREAbyRLX (1:sNx,1:sNy)
136 jmc 1.162 c The change of mean ice thickness due to relaxation
137 heimbach 1.161 _RL d_HEFFbyRLX (1:sNx,1:sNy)
138     #endif
139    
140 dimitri 1.113 c The change of mean ice thickness due to out-of-bounds values following
141     c sea ice dyhnamics
142 gforget 1.87 _RL d_HEFFbyNEG (1:sNx,1:sNy)
143 dimitri 1.113
144     c The change of mean ice thickness due to turbulent ocean-sea ice heat fluxes
145     _RL d_HEFFbyOCNonICE (1:sNx,1:sNy)
146    
147 jmc 1.134 c The sum of mean ice thickness increments due to atmospheric fluxes over the open water
148 dimitri 1.114 c fraction and ice-covered fractions of the grid cell
149 dimitri 1.113 _RL d_HEFFbyATMonOCN (1:sNx,1:sNy)
150     c The change of mean ice thickness due to flooding by snow
151 gforget 1.84 _RL d_HEFFbyFLOODING (1:sNx,1:sNy)
152 jmc 1.104
153 jmc 1.134 c The mean ice thickness increments due to atmospheric fluxes over the open water
154 dimitri 1.114 c fraction and ice-covered fractions of the grid cell, respectively
155     _RL d_HEFFbyATMonOCN_open(1:sNx,1:sNy)
156     _RL d_HEFFbyATMonOCN_cover(1:sNx,1:sNy)
157    
158 gforget 1.87 _RL d_HSNWbyNEG (1:sNx,1:sNy)
159 dimitri 1.113 _RL d_HSNWbyATMonSNW (1:sNx,1:sNy)
160     _RL d_HSNWbyOCNonSNW (1:sNx,1:sNy)
161 gforget 1.84 _RL d_HSNWbyRAIN (1:sNx,1:sNy)
162 jmc 1.104
163 gforget 1.84 _RL d_HFRWbyRAIN (1:sNx,1:sNy)
164 mlosch 1.109 C
165 jmc 1.134 C a_FWbySublim :: fresh water flux implied by latent heat of
166 mlosch 1.109 C sublimation to atmosphere, same sign convention
167     C as EVAP (positive upward)
168     _RL a_FWbySublim (1:sNx,1:sNy)
169 gforget 1.125 _RL r_FWbySublim (1:sNx,1:sNy)
170 mlosch 1.109 _RL d_HEFFbySublim (1:sNx,1:sNy)
171     _RL d_HSNWbySublim (1:sNx,1:sNy)
172 ifenty 1.136
173 gforget 1.150 #ifdef SEAICE_CAP_SUBLIM
174 ifenty 1.136 C The latent heat flux which will sublimate all snow and ice
175     C over one time step
176 ifenty 1.135 _RL latentHeatFluxMax (1:sNx,1:sNy)
177 gforget 1.159 _RL latentHeatFluxMaxMult (1:sNx,1:sNy,MULTDIM)
178 gforget 1.150 #endif
179 gforget 1.71
180 gforget 1.122 C actual ice thickness (with upper and lower limit)
181 gforget 1.83 _RL heffActual (1:sNx,1:sNy)
182 dimitri 1.69 C actual snow thickness
183 gforget 1.83 _RL hsnowActual (1:sNx,1:sNy)
184 gforget 1.122 C actual ice thickness (with lower limit only) Reciprocal
185     _RL recip_heffActual (1:sNx,1:sNy)
186 gforget 1.149 C local value (=1/HO or 1/HO_south)
187     _RL recip_HO
188     C local value (=1/ice thickness)
189     _RL recip_HH
190 gforget 1.87
191     C AREA_PRE :: hold sea-ice fraction field before any seaice-thermo update
192     _RL AREApreTH (1:sNx,1:sNy)
193     _RL HEFFpreTH (1:sNx,1:sNy)
194     _RL HSNWpreTH (1:sNx,1:sNy)
195    
196 dimitri 1.69 C wind speed
197 gforget 1.76 _RL UG (1:sNx,1:sNy)
198 jmc 1.104 #ifdef ALLOW_ATM_WIND
199 dimitri 1.69 _RL SPEED_SQ
200 jmc 1.104 #endif
201 gforget 1.96
202 ifenty 1.131 C Regularization values squared
203     _RL area_reg_sq, hice_reg_sq
204    
205 gforget 1.96 C pathological cases thresholds
206 gforget 1.124 _RL heffTooHeavy
207 dimitri 1.69
208 ifenty 1.135 _RL lhSublim
209    
210 jmc 1.104 C temporary variables available for the various computations
211 gforget 1.149 _RL tmpscal0, tmpscal1, tmpscal2, tmpscal3, tmpscal4
212 gforget 1.76 _RL tmparr1 (1:sNx,1:sNy)
213 gforget 1.75
214 ifenty 1.119 #ifdef SEAICE_VARIABLE_SALINITY
215 gforget 1.83 _RL saltFluxAdjust (1:sNx,1:sNy)
216 gforget 1.75 #endif
217    
218 mlosch 1.98 INTEGER ilockey
219 jmc 1.104 INTEGER it
220     _RL pFac
221 gforget 1.159 _RL ticeInMult (1:sNx,1:sNy,MULTDIM)
222     _RL ticeOutMult (1:sNx,1:sNy,MULTDIM)
223     _RL heffActualMult (1:sNx,1:sNy,MULTDIM)
224     _RL a_QbyATMmult_cover (1:sNx,1:sNy,MULTDIM)
225     _RL a_QSWbyATMmult_cover(1:sNx,1:sNy,MULTDIM)
226     _RL a_FWbySublimMult (1:sNx,1:sNy,MULTDIM)
227 mlosch 1.153 C Helper variables: reciprocal of some constants
228 gforget 1.159 _RL recip_multDim
229 mlosch 1.153 _RL recip_deltaTtherm
230     _RL recip_rhoIce
231 dimitri 1.69
232 jmc 1.134 C Factor by which we increase the upper ocean friction velocity (u*) when
233 dimitri 1.113 C ice is absent in a grid cell (dimensionless)
234     _RL MixedLayerTurbulenceFactor
235    
236 gforget 1.129 #ifdef ALLOW_SITRACER
237     INTEGER iTr
238     CHARACTER*8 diagName
239     #endif
240 dimitri 1.69 #ifdef ALLOW_DIAGNOSTICS
241 dimitri 1.113 c Helper variables for diagnostics
242     _RL DIAGarrayA (1:sNx,1:sNy)
243     _RL DIAGarrayB (1:sNx,1:sNy)
244     _RL DIAGarrayC (1:sNx,1:sNy)
245     _RL DIAGarrayD (1:sNx,1:sNy)
246 dimitri 1.69 #endif
247    
248 gforget 1.148
249 jmc 1.104 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
250    
251     C ===================================================================
252     C =================PART 0: constants and initializations=============
253     C ===================================================================
254 gforget 1.88
255 dimitri 1.69 IF ( buoyancyRelation .EQ. 'OCEANICP' ) THEN
256     kSurface = Nr
257     ELSE
258     kSurface = 1
259     ENDIF
260    
261 mlosch 1.153 C avoid unnecessary divisions in loops
262 gforget 1.159 recip_multDim = SEAICE_multDim
263     recip_multDim = ONE / recip_multDim
264     C above/below: double/single precision calculation of recip_multDim
265     c recip_multDim = 1./float(SEAICE_multDim)
266 jmc 1.154 recip_deltaTtherm = ONE / SEAICE_deltaTtherm
267     recip_rhoIce = ONE / SEAICE_rhoIce
268 ifenty 1.131
269 jmc 1.104 C Cutoff for iceload
270 jmc 1.160 heffTooHeavy=drF(kSurface) / 5. _d 0
271 gforget 1.92
272 dimitri 1.69 C RATIO OF SEA ICE DENSITY to SNOW DENSITY
273 gforget 1.80 ICE2SNOW = SEAICE_rhoIce/SEAICE_rhoSnow
274 jmc 1.154 SNOW2ICE = ONE / ICE2SNOW
275 gforget 1.85
276 dimitri 1.69 C HEAT OF FUSION OF ICE (J/m^3)
277 mlosch 1.101 QI = SEAICE_rhoIce*SEAICE_lhFusion
278 jmc 1.154 recip_QI = ONE / QI
279 dimitri 1.69 C HEAT OF FUSION OF SNOW (J/m^3)
280 mlosch 1.101 QS = SEAICE_rhoSnow*SEAICE_lhFusion
281 ifenty 1.131
282 ifenty 1.135 C ICE LATENT HEAT CONSTANT
283     lhSublim = SEAICE_lhEvap + SEAICE_lhFusion
284    
285 ifenty 1.131 C regularization constants
286     area_reg_sq = SEAICE_area_reg * SEAICE_area_reg
287     hice_reg_sq = SEAICE_hice_reg * SEAICE_hice_reg
288 gforget 1.85
289 jmc 1.104 C conversion factors to go from Q (W/m2) to HEFF (ice meters)
290 gforget 1.84 convertQ2HI=SEAICE_deltaTtherm/QI
291 jmc 1.160 convertHI2Q = ONE/convertQ2HI
292 jmc 1.104 C conversion factors to go from precip (m/s) unit to HEFF (ice meters)
293 gforget 1.76 convertPRECIP2HI=SEAICE_deltaTtherm*rhoConstFresh/SEAICE_rhoIce
294 jmc 1.160 convertHI2PRECIP = ONE/convertPRECIP2HI
295 gforget 1.76
296 dimitri 1.69 DO bj=myByLo(myThid),myByHi(myThid)
297     DO bi=myBxLo(myThid),myBxHi(myThid)
298 jmc 1.104
299 dimitri 1.69 #ifdef ALLOW_AUTODIFF_TAMC
300 mlosch 1.109 act1 = bi - myBxLo(myThid)
301     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
302     act2 = bj - myByLo(myThid)
303     max2 = myByHi(myThid) - myByLo(myThid) + 1
304     act3 = myThid - 1
305     max3 = nTx*nTy
306     act4 = ikey_dynamics - 1
307     iicekey = (act1 + 1) + act2*max1
308     & + act3*max1*max2
309     & + act4*max1*max2*max3
310 dimitri 1.69 #endif /* ALLOW_AUTODIFF_TAMC */
311 gforget 1.75
312    
313     C array initializations
314     C =====================
315    
316 dimitri 1.69 DO J=1,sNy
317     DO I=1,sNx
318 gforget 1.90 a_QbyATM_cover (I,J) = 0.0 _d 0
319     a_QbyATM_open(I,J) = 0.0 _d 0
320     r_QbyATM_cover (I,J) = 0.0 _d 0
321     r_QbyATM_open (I,J) = 0.0 _d 0
322 jmc 1.104
323 gforget 1.71 a_QSWbyATM_open (I,J) = 0.0 _d 0
324 gforget 1.90 a_QSWbyATM_cover (I,J) = 0.0 _d 0
325 jmc 1.104
326 gforget 1.90 a_QbyOCN (I,J) = 0.0 _d 0
327     r_QbyOCN (I,J) = 0.0 _d 0
328 jmc 1.104
329 gforget 1.152 #ifdef ALLOW_DIAGNOSTICS
330 dimitri 1.113 d_AREAbyATM(I,J) = 0.0 _d 0
331     d_AREAbyICE(I,J) = 0.0 _d 0
332 gforget 1.112 d_AREAbyOCN(I,J) = 0.0 _d 0
333 gforget 1.152 #endif
334 jmc 1.104
335 heimbach 1.161 #ifdef SEAICE_ALLOW_AREA_RELAXATION
336     d_AREAbyRLX(I,J) = 0.0 _d 0
337     d_HEFFbyRLX(I,J) = 0.0 _d 0
338     #endif
339    
340 gforget 1.123 d_HEFFbyNEG(I,J) = 0.0 _d 0
341 dimitri 1.113 d_HEFFbyOCNonICE(I,J) = 0.0 _d 0
342     d_HEFFbyATMonOCN(I,J) = 0.0 _d 0
343 gforget 1.84 d_HEFFbyFLOODING(I,J) = 0.0 _d 0
344 jmc 1.104
345 dimitri 1.114 d_HEFFbyATMonOCN_open(I,J) = 0.0 _d 0
346     d_HEFFbyATMonOCN_cover(I,J) = 0.0 _d 0
347    
348 gforget 1.123 d_HSNWbyNEG(I,J) = 0.0 _d 0
349 dimitri 1.113 d_HSNWbyATMonSNW(I,J) = 0.0 _d 0
350     d_HSNWbyOCNonSNW(I,J) = 0.0 _d 0
351 gforget 1.90 d_HSNWbyRAIN(I,J) = 0.0 _d 0
352 mlosch 1.109 a_FWbySublim(I,J) = 0.0 _d 0
353 gforget 1.125 r_FWbySublim(I,J) = 0.0 _d 0
354 mlosch 1.109 d_HEFFbySublim(I,J) = 0.0 _d 0
355     d_HSNWbySublim(I,J) = 0.0 _d 0
356 gforget 1.150 #ifdef SEAICE_CAP_SUBLIM
357 ifenty 1.135 latentHeatFluxMax(I,J) = 0.0 _d 0
358 gforget 1.150 #endif
359 mlosch 1.109 c
360 gforget 1.90 d_HFRWbyRAIN(I,J) = 0.0 _d 0
361 jmc 1.104
362 gforget 1.90 tmparr1(I,J) = 0.0 _d 0
363 jmc 1.104
364 ifenty 1.119 #ifdef SEAICE_VARIABLE_SALINITY
365 gforget 1.90 saltFluxAdjust(I,J) = 0.0 _d 0
366 dimitri 1.69 #endif
367 gforget 1.159 DO IT=1,SEAICE_multDim
368     ticeInMult(I,J,IT) = 0.0 _d 0
369     ticeOutMult(I,J,IT) = 0.0 _d 0
370     a_QbyATMmult_cover(I,J,IT) = 0.0 _d 0
371     a_QSWbyATMmult_cover(I,J,IT) = 0.0 _d 0
372     a_FWbySublimMult(I,J,IT) = 0.0 _d 0
373 jmc 1.162 #ifdef SEAICE_CAP_SUBLIM
374 gforget 1.159 latentHeatFluxMaxMult(I,J,IT) = 0.0 _d 0
375 jmc 1.162 #endif
376 gforget 1.159 ENDDO
377 dimitri 1.69 ENDDO
378     ENDDO
379 heimbach 1.161 #if (defined (ALLOW_MEAN_SFLUX_COST_CONTRIBUTION) || defined (ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION))
380 dimitri 1.69 DO J=1-oLy,sNy+oLy
381     DO I=1-oLx,sNx+oLx
382 gforget 1.90 frWtrAtm(I,J,bi,bj) = 0.0 _d 0
383 dimitri 1.69 ENDDO
384     ENDDO
385 gforget 1.84 #endif
386 dimitri 1.69
387 gforget 1.87
388 jmc 1.104 C =====================================================================
389     C ===========PART 1: treat pathological cases (post advdiff)===========
390     C =====================================================================
391 gforget 1.88
392 jmc 1.104 #ifdef SEAICE_GROWTH_LEGACY
393 gforget 1.88
394 jmc 1.104 DO J=1,sNy
395     DO I=1,sNx
396     HEFFpreTH(I,J)=HEFFNM1(I,J,bi,bj)
397     HSNWpreTH(I,J)=HSNOW(I,J,bi,bj)
398     AREApreTH(I,J)=AREANM1(I,J,bi,bj)
399     d_HEFFbyNEG(I,J)=0. _d 0
400     d_HSNWbyNEG(I,J)=0. _d 0
401 gforget 1.128 #ifdef ALLOW_DIAGNOSTICS
402     DIAGarrayA(I,J) = AREANM1(I,J,bi,bj)
403     DIAGarrayB(I,J) = AREANM1(I,J,bi,bj)
404     DIAGarrayC(I,J) = HEFFNM1(I,J,bi,bj)
405     DIAGarrayD(I,J) = HSNOW(I,J,bi,bj)
406     #endif
407 jmc 1.104 ENDDO
408     ENDDO
409 gforget 1.88
410 jmc 1.104 #else /* SEAICE_GROWTH_LEGACY */
411 gforget 1.87
412 mlosch 1.137 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_MODIFY_GROWTH_ADJ)
413 gforget 1.105 Cgf no dependency through pathological cases treatment
414 jmc 1.160 IF ( SEAICEadjMODE.EQ.0 ) THEN
415 gforget 1.105 #endif
416    
417 heimbach 1.161 #ifdef SEAICE_ALLOW_AREA_RELAXATION
418     CADJ STORE heff(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
419     CADJ STORE area(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
420     C 0) relax sea ice concentration towards observation
421     IF (SEAICE_tauAreaObsRelax .GT. 0.) THEN
422     DO J=1,sNy
423     DO I=1,sNx
424     C d_AREAbyRLX(i,j) = 0. _d 0
425     C d_HEFFbyRLX(i,j) = 0. _d 0
426     IF ( obsSIce(I,J,bi,bj).GT.AREA(I,J,bi,bj)) THEN
427     d_AREAbyRLX(i,j) =
428     & SEAICE_deltaTtherm/SEAICE_tauAreaObsRelax
429     & * (obsSIce(I,J,bi,bj) - AREA(I,J,bi,bj))
430     ENDIF
431 jmc 1.162 IF ( obsSIce(I,J,bi,bj).GT.0. _d 0 .AND.
432 heimbach 1.161 & AREA(I,J,bi,bj).EQ.0. _d 0) THEN
433     C d_HEFFbyRLX(i,j) = 1. _d 1 * siEps * d_AREAbyRLX(i,j)
434     d_HEFFbyRLX(i,j) = 1. _d 1 * siEps
435     ENDIF
436     AREA(I,J,bi,bj) = AREA(I,J,bi,bj) + d_AREAbyRLX(i,j)
437     HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + d_HEFFbyRLX(i,j)
438     ENDDO
439     ENDDO
440     ENDIF
441     #endif /* SEAICE_ALLOW_AREA_RELAXATION */
442    
443 jmc 1.104 C 1) treat the case of negative values:
444 gforget 1.87
445     #ifdef ALLOW_AUTODIFF_TAMC
446 gforget 1.105 CADJ STORE heff(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
447     CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
448     CADJ STORE area(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
449 gforget 1.87 #endif /* ALLOW_AUTODIFF_TAMC */
450     DO J=1,sNy
451     DO I=1,sNx
452 gforget 1.89 d_HEFFbyNEG(I,J)=MAX(-HEFF(I,J,bi,bj),0. _d 0)
453 gforget 1.87 HEFF(I,J,bi,bj)=HEFF(I,J,bi,bj)+d_HEFFbyNEG(I,J)
454 gforget 1.89 d_HSNWbyNEG(I,J)=MAX(-HSNOW(I,J,bi,bj),0. _d 0)
455 gforget 1.87 HSNOW(I,J,bi,bj)=HSNOW(I,J,bi,bj)+d_HSNWbyNEG(I,J)
456     AREA(I,J,bi,bj)=MAX(AREA(I,J,bi,bj),0. _d 0)
457     ENDDO
458     ENDDO
459    
460 jmc 1.104 C 1.25) treat the case of very thin ice:
461    
462 gforget 1.92 #ifdef ALLOW_AUTODIFF_TAMC
463 gforget 1.105 CADJ STORE heff(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
464 gforget 1.92 #endif /* ALLOW_AUTODIFF_TAMC */
465     DO J=1,sNy
466     DO I=1,sNx
467 mlosch 1.140 tmpscal2=0. _d 0
468     tmpscal3=0. _d 0
469 jmc 1.160 IF (HEFF(I,J,bi,bj).LE.siEps) THEN
470 gforget 1.92 tmpscal2=-HEFF(I,J,bi,bj)
471     tmpscal3=-HSNOW(I,J,bi,bj)
472 gforget 1.96 TICE(I,J,bi,bj)=celsius2K
473 gforget 1.159 DO IT=1,SEAICE_multDim
474 gforget 1.158 TICES(I,J,IT,bi,bj)=celsius2K
475     ENDDO
476 jmc 1.160 ENDIF
477 gforget 1.92 HEFF(I,J,bi,bj)=HEFF(I,J,bi,bj)+tmpscal2
478     d_HEFFbyNEG(I,J)=d_HEFFbyNEG(I,J)+tmpscal2
479     HSNOW(I,J,bi,bj)=HSNOW(I,J,bi,bj)+tmpscal3
480     d_HSNWbyNEG(I,J)=d_HSNWbyNEG(I,J)+tmpscal3
481     ENDDO
482     ENDDO
483    
484 jmc 1.104 C 1.5) treat the case of area but no ice/snow:
485    
486 gforget 1.90 #ifdef ALLOW_AUTODIFF_TAMC
487 gforget 1.105 CADJ STORE heff(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
488     CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
489 gforget 1.90 #endif /* ALLOW_AUTODIFF_TAMC */
490     DO J=1,sNy
491     DO I=1,sNx
492     IF ((HEFF(i,j,bi,bj).EQ.0. _d 0).AND.
493     & (HSNOW(i,j,bi,bj).EQ.0. _d 0)) AREA(I,J,bi,bj)=0. _d 0
494     ENDDO
495     ENDDO
496    
497 jmc 1.104 C 2) treat the case of very small area:
498    
499 ifenty 1.131 #ifndef DISABLE_AREA_FLOOR
500 gforget 1.87 #ifdef ALLOW_AUTODIFF_TAMC
501 gforget 1.105 CADJ STORE area(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
502 gforget 1.87 #endif /* ALLOW_AUTODIFF_TAMC */
503     DO J=1,sNy
504     DO I=1,sNx
505 heimbach 1.120 IF ((HEFF(i,j,bi,bj).GT.0).OR.(HSNOW(i,j,bi,bj).GT.0)) THEN
506 ifenty 1.131 AREA(I,J,bi,bj)=MAX(AREA(I,J,bi,bj),SEAICE_area_floor)
507 heimbach 1.120 ENDIF
508 gforget 1.87 ENDDO
509     ENDDO
510 ifenty 1.131 #endif /* DISABLE_AREA_FLOOR */
511 gforget 1.87
512 dimitri 1.115 C 2.5) treat case of excessive ice cover, e.g., due to ridging:
513 jmc 1.104
514 gforget 1.89 #ifdef ALLOW_AUTODIFF_TAMC
515 gforget 1.105 CADJ STORE area(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
516 gforget 1.89 #endif /* ALLOW_AUTODIFF_TAMC */
517     DO J=1,sNy
518     DO I=1,sNx
519 gforget 1.128 #ifdef ALLOW_DIAGNOSTICS
520     DIAGarrayA(I,J) = AREA(I,J,bi,bj)
521     #endif
522 gforget 1.127 #ifdef ALLOW_SITRACER
523     SItrAREA(I,J,bi,bj,1)=AREA(I,J,bi,bj)
524     #endif
525 ifenty 1.131 AREA(I,J,bi,bj)=MIN(AREA(I,J,bi,bj),SEAICE_area_max)
526 gforget 1.89 ENDDO
527     ENDDO
528    
529 mlosch 1.137 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_MODIFY_GROWTH_ADJ)
530     ENDIF
531 gforget 1.105 #endif
532    
533 jmc 1.104 C 3) store regularized values of heff, hsnow, area at the onset of thermo.
534 gforget 1.87 DO J=1,sNy
535     DO I=1,sNx
536     HEFFpreTH(I,J)=HEFF(I,J,bi,bj)
537     HSNWpreTH(I,J)=HSNOW(I,J,bi,bj)
538     AREApreTH(I,J)=AREA(I,J,bi,bj)
539 gforget 1.128 #ifdef ALLOW_DIAGNOSTICS
540     DIAGarrayB(I,J) = AREA(I,J,bi,bj)
541     DIAGarrayC(I,J) = HEFF(I,J,bi,bj)
542     DIAGarrayD(I,J) = HSNOW(I,J,bi,bj)
543     #endif
544 gforget 1.124 #ifdef ALLOW_SITRACER
545     SItrHEFF(I,J,bi,bj,1)=HEFF(I,J,bi,bj)
546 gforget 1.127 SItrAREA(I,J,bi,bj,2)=AREA(I,J,bi,bj)
547 gforget 1.124 #endif
548 gforget 1.87 ENDDO
549     ENDDO
550    
551 jmc 1.104 C 4) treat sea ice salinity pathological cases
552 ifenty 1.119 #ifdef SEAICE_VARIABLE_SALINITY
553 gforget 1.87 #ifdef ALLOW_AUTODIFF_TAMC
554 gforget 1.105 CADJ STORE hsalt(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
555     CADJ STORE heff(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
556 gforget 1.87 #endif /* ALLOW_AUTODIFF_TAMC */
557     DO J=1,sNy
558     DO I=1,sNx
559     IF ( (HSALT(I,J,bi,bj) .LT. 0.0).OR.
560     & (HEFF(I,J,bi,bj) .EQ. 0.0) ) THEN
561     saltFluxAdjust(I,J) = - HEFFM(I,J,bi,bj) *
562 mlosch 1.153 & HSALT(I,J,bi,bj) * recip_deltaTtherm
563 gforget 1.87 HSALT(I,J,bi,bj) = 0.0 _d 0
564     ENDIF
565     ENDDO
566     ENDDO
567 ifenty 1.119 #endif /* SEAICE_VARIABLE_SALINITY */
568 gforget 1.87
569 jmc 1.104 #endif /* SEAICE_GROWTH_LEGACY */
570 jmc 1.91
571 gforget 1.128 #ifdef ALLOW_DIAGNOSTICS
572 mlosch 1.137 IF ( useDiagnostics ) THEN
573     CALL DIAGNOSTICS_FILL(DIAGarrayA,'SIareaPR',0,1,3,bi,bj,myThid)
574     CALL DIAGNOSTICS_FILL(DIAGarrayB,'SIareaPT',0,1,3,bi,bj,myThid)
575     CALL DIAGNOSTICS_FILL(DIAGarrayC,'SIheffPT',0,1,3,bi,bj,myThid)
576     CALL DIAGNOSTICS_FILL(DIAGarrayD,'SIhsnoPT',0,1,3,bi,bj,myThid)
577 gforget 1.129 #ifdef ALLOW_SITRACER
578 gforget 1.155 DO iTr = 1, SItrNumInUse
579 mlosch 1.137 WRITE(diagName,'(A4,I2.2,A2)') 'SItr',iTr,'PT'
580 jmc 1.160 IF (SItrMate(iTr).EQ.'HEFF') THEN
581 mlosch 1.137 CALL DIAGNOSTICS_FRACT_FILL(
582     I SItracer(1-OLx,1-OLy,bi,bj,iTr),HEFF(1-OLx,1-OLy,bi,bj),
583     I ONE, 1, diagName,0,1,2,bi,bj,myThid )
584 jmc 1.160 ELSE
585 mlosch 1.137 CALL DIAGNOSTICS_FRACT_FILL(
586     I SItracer(1-OLx,1-OLy,bi,bj,iTr),AREA(1-OLx,1-OLy,bi,bj),
587     I ONE, 1, diagName,0,1,2,bi,bj,myThid )
588 jmc 1.160 ENDIF
589 mlosch 1.137 ENDDO
590 jmc 1.162 #endif /* ALLOW_SITRACER */
591 mlosch 1.137 ENDIF
592 jmc 1.162 #endif /* ALLOW_DIAGNOSTICS */
593 gforget 1.128
594 mlosch 1.137 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_MODIFY_GROWTH_ADJ)
595 gforget 1.105 Cgf no additional dependency of air-sea fluxes to ice
596 mlosch 1.137 IF ( SEAICEadjMODE.GE.1 ) THEN
597     DO J=1,sNy
598     DO I=1,sNx
599     HEFFpreTH(I,J) = 0. _d 0
600     HSNWpreTH(I,J) = 0. _d 0
601     AREApreTH(I,J) = 0. _d 0
602     ENDDO
603 gforget 1.105 ENDDO
604 mlosch 1.137 ENDIF
605 gforget 1.105 #endif
606 dimitri 1.69
607 heimbach 1.161 #if (defined (ALLOW_MEAN_SFLUX_COST_CONTRIBUTION) || defined (ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION))
608     DO J=1,sNy
609     DO I=1,sNx
610     AREAforAtmFW(I,J,bi,bj) = AREApreTH(I,J)
611     ENDDO
612     ENDDO
613     #endif
614    
615 jmc 1.104 C 4) COMPUTE ACTUAL ICE/SNOW THICKNESS; USE MIN/MAX VALUES
616     C TO REGULARIZE SEAICE_SOLVE4TEMP/d_AREA COMPUTATIONS
617 dimitri 1.69
618     #ifdef ALLOW_AUTODIFF_TAMC
619 gforget 1.105 CADJ STORE AREApreTH = comlev1_bibj, key = iicekey, byte = isbyte
620     CADJ STORE HEFFpreTH = comlev1_bibj, key = iicekey, byte = isbyte
621     CADJ STORE HSNWpreTH = comlev1_bibj, key = iicekey, byte = isbyte
622 dimitri 1.69 #endif /* ALLOW_AUTODIFF_TAMC */
623     DO J=1,sNy
624     DO I=1,sNx
625 ifenty 1.131
626 mlosch 1.137 IF (HEFFpreTH(I,J) .GT. ZERO) THEN
627 gforget 1.122 #ifdef SEAICE_GROWTH_LEGACY
628 ifenty 1.131 tmpscal1 = MAX(SEAICE_area_reg,AREApreTH(I,J))
629     hsnowActual(I,J) = HSNWpreTH(I,J)/tmpscal1
630     tmpscal2 = HEFFpreTH(I,J)/tmpscal1
631     heffActual(I,J) = MAX(tmpscal2,SEAICE_hice_reg)
632 jmc 1.162 #else /* SEAICE_GROWTH_LEGACY */
633 ifenty 1.131 cif regularize AREA with SEAICE_area_reg
634     tmpscal1 = SQRT(AREApreTH(I,J)* AREApreTH(I,J) + area_reg_sq)
635 jmc 1.134 cif heffActual calculated with the regularized AREA
636 ifenty 1.131 tmpscal2 = HEFFpreTH(I,J) / tmpscal1
637     cif regularize heffActual with SEAICE_hice_reg (add lower bound)
638     heffActual(I,J) = SQRT(tmpscal2 * tmpscal2 + hice_reg_sq)
639 jmc 1.134 cif hsnowActual calculated with the regularized AREA
640 ifenty 1.131 hsnowActual(I,J) = HSNWpreTH(I,J) / tmpscal1
641 jmc 1.162 #endif /* SEAICE_GROWTH_LEGACY */
642 jmc 1.134 cif regularize the inverse of heffActual by hice_reg
643 ifenty 1.131 recip_heffActual(I,J) = AREApreTH(I,J) /
644     & sqrt(HEFFpreTH(I,J)*HEFFpreTH(I,J) + hice_reg_sq)
645     cif Do not regularize when HEFFpreTH = 0
646 mlosch 1.137 ELSE
647 ifenty 1.131 heffActual(I,J) = ZERO
648     hsnowActual(I,J) = ZERO
649     recip_heffActual(I,J) = ZERO
650 mlosch 1.137 ENDIF
651 ifenty 1.131
652 dimitri 1.69 ENDDO
653     ENDDO
654    
655 mlosch 1.137 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_MODIFY_GROWTH_ADJ)
656     CALL ZERO_ADJ_1D( sNx*sNy, heffActual, myThid)
657     CALL ZERO_ADJ_1D( sNx*sNy, hsnowActual, myThid)
658     CALL ZERO_ADJ_1D( sNx*sNy, recip_heffActual, myThid)
659 gforget 1.95 #endif
660 gforget 1.87
661 gforget 1.150 #ifdef SEAICE_CAP_SUBLIM
662 ifenty 1.135 C 5) COMPUTE MAXIMUM LATENT HEAT FLUXES FOR THE CURRENT ICE
663     C AND SNOW THICKNESS
664     DO J=1,sNy
665     DO I=1,sNx
666     c The latent heat flux over the sea ice which
667     c will sublimate all of the snow and ice over one time
668     c step (W/m^2)
669 mlosch 1.137 IF (HEFFpreTH(I,J) .GT. ZERO) THEN
670 mlosch 1.153 latentHeatFluxMax(I,J) = lhSublim * recip_deltaTtherm *
671 ifenty 1.135 & (HEFFpreTH(I,J) * SEAICE_rhoIce +
672     & HSNWpreTH(I,J) * SEAICE_rhoSnow)/AREApreTH(I,J)
673 mlosch 1.137 ELSE
674 ifenty 1.135 latentHeatFluxMax(I,J) = ZERO
675 mlosch 1.137 ENDIF
676 ifenty 1.135 ENDDO
677     ENDDO
678 jmc 1.162 #endif /* SEAICE_CAP_SUBLIM */
679 dimitri 1.113
680 jmc 1.104 C ===================================================================
681     C ================PART 2: determine heat fluxes/stocks===============
682     C ===================================================================
683 gforget 1.88
684 gforget 1.75 C determine available heat due to the atmosphere -- for open water
685     C ================================================================
686    
687 jmc 1.145 DO j=1,sNy
688     DO i=1,sNx
689 gforget 1.150 C ocean surface/mixed layer temperature
690 jmc 1.145 TmixLoc(i,j) = theta(i,j,kSurface,bi,bj)+celsius2K
691 gforget 1.75 C wind speed from exf
692 dimitri 1.69 UG(I,J) = MAX(SEAICE_EPS,wspeed(I,J,bi,bj))
693     ENDDO
694     ENDDO
695    
696 gforget 1.105 #ifdef ALLOW_AUTODIFF_TAMC
697     CADJ STORE qnet(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
698     CADJ STORE qsw(:,:,bi,bj) = comlev1_bibj, key = iicekey,byte=isbyte
699     cCADJ STORE UG = comlev1_bibj, key = iicekey,byte=isbyte
700 jmc 1.145 cCADJ STORE TmixLoc = comlev1_bibj, key = iicekey,byte=isbyte
701 gforget 1.105 #endif /* ALLOW_AUTODIFF_TAMC */
702    
703 gforget 1.75 CALL SEAICE_BUDGET_OCEAN(
704     I UG,
705 jmc 1.145 I TmixLoc,
706 gforget 1.75 O a_QbyATM_open, a_QSWbyATM_open,
707     I bi, bj, myTime, myIter, myThid )
708    
709     C determine available heat due to the atmosphere -- for ice covered water
710     C =======================================================================
711 dimitri 1.69
712 gforget 1.89 #ifdef ALLOW_ATM_WIND
713 dimitri 1.69 IF (useRelativeWind) THEN
714     C Compute relative wind speed over sea ice.
715     DO J=1,sNy
716     DO I=1,sNx
717     SPEED_SQ =
718     & (uWind(I,J,bi,bj)
719     & +0.5 _d 0*(uVel(i,j,kSurface,bi,bj)
720     & +uVel(i+1,j,kSurface,bi,bj))
721     & -0.5 _d 0*(uice(i,j,bi,bj)+uice(i+1,j,bi,bj)))**2
722     & +(vWind(I,J,bi,bj)
723     & +0.5 _d 0*(vVel(i,j,kSurface,bi,bj)
724     & +vVel(i,j+1,kSurface,bi,bj))
725     & -0.5 _d 0*(vice(i,j,bi,bj)+vice(i,j+1,bi,bj)))**2
726     IF ( SPEED_SQ .LE. SEAICE_EPS_SQ ) THEN
727     UG(I,J)=SEAICE_EPS
728     ELSE
729     UG(I,J)=SQRT(SPEED_SQ)
730     ENDIF
731     ENDDO
732     ENDDO
733     ENDIF
734 jmc 1.162 #endif /* ALLOW_ATM_WIND */
735 gforget 1.75
736 mlosch 1.98 #ifdef ALLOW_AUTODIFF_TAMC
737 jmc 1.143 CADJ STORE tice(:,:,bi,bj)
738 heimbach 1.139 CADJ & = comlev1_bibj, key = iicekey, byte = isbyte
739 gforget 1.105 CADJ STORE hsnowActual = comlev1_bibj, key = iicekey, byte = isbyte
740 mlosch 1.137 CADJ STORE heffActual = comlev1_bibj, key = iicekey, byte = isbyte
741     CADJ STORE UG = comlev1_bibj, key = iicekey, byte = isbyte
742 jmc 1.143 CADJ STORE tices(:,:,:,bi,bj)
743 heimbach 1.139 CADJ & = comlev1_bibj, key = iicekey, byte = isbyte
744 gforget 1.156 CADJ STORE salt(:,:,kSurface,bi,bj) = comlev1_bibj,
745     CADJ & key = iicekey, byte = isbyte
746 mlosch 1.98 #endif /* ALLOW_AUTODIFF_TAMC */
747    
748 gforget 1.159 C-- Start loop over multi-categories
749     DO IT=1,SEAICE_multDim
750     c homogeneous distribution between 0 and 2 x heffActual
751     pFac = (2.0 _d 0*real(IT)-1.0 _d 0)*recip_multDim
752 dimitri 1.69 DO J=1,sNy
753     DO I=1,sNx
754 gforget 1.159 heffActualMult(I,J,IT)= heffActual(I,J)*pFac
755 gforget 1.150 #ifdef SEAICE_CAP_SUBLIM
756 gforget 1.159 latentHeatFluxMaxMult(I,J,IT) = latentHeatFluxMax(I,J)*pFac
757 ifenty 1.135 #endif
758 gforget 1.159 ticeInMult(I,J,IT)=TICES(I,J,IT,bi,bj)
759     ticeOutMult(I,J,IT)=TICES(I,J,IT,bi,bj)
760     TICE(I,J,bi,bj) = ZERO
761 jmc 1.160 TICES(I,J,IT,bi,bj) = ZERO
762 dimitri 1.69 ENDDO
763     ENDDO
764 gforget 1.159 ENDDO
765    
766     #ifdef ALLOW_AUTODIFF_TAMC
767     CADJ STORE heffActualMult = comlev1_bibj, key = iicekey, byte = isbyte
768     CADJ STORE ticeInMult = comlev1_bibj, key = iicekey, byte = isbyte
769     # ifdef SEAICE_CAP_SUBLIM
770 jmc 1.160 CADJ STORE latentHeatFluxMaxMult
771 gforget 1.159 CADJ & = comlev1_bibj, key = iicekey, byte = isbyte
772     # endif
773 jmc 1.160 CADJ STORE a_QbyATMmult_cover =
774 gforget 1.159 CADJ & comlev1_bibj, key = iicekey, byte = isbyte
775 jmc 1.160 CADJ STORE a_QSWbyATMmult_cover =
776 gforget 1.159 CADJ & comlev1_bibj, key = iicekey, byte = isbyte
777 jmc 1.160 CADJ STORE a_FWbySublimMult =
778 gforget 1.159 CADJ & comlev1_bibj, key = iicekey, byte = isbyte
779     #endif /* ALLOW_AUTODIFF_TAMC */
780    
781     DO IT=1,SEAICE_multDim
782 jmc 1.70 CALL SEAICE_SOLVE4TEMP(
783 gforget 1.159 I UG, heffActualMult(1,1,IT), hsnowActual,
784 gforget 1.150 #ifdef SEAICE_CAP_SUBLIM
785 gforget 1.159 I latentHeatFluxMaxMult(1,1,IT),
786 ifenty 1.135 #endif
787 gforget 1.159 U ticeInMult(1,1,IT), ticeOutMult(1,1,IT),
788     O a_QbyATMmult_cover(1,1,IT), a_QSWbyATMmult_cover(1,1,IT),
789     O a_FWbySublimMult(1,1,IT),
790 dimitri 1.69 I bi, bj, myTime, myIter, myThid )
791 gforget 1.159 ENDDO
792    
793     #ifdef ALLOW_AUTODIFF_TAMC
794     CADJ STORE heffActualMult = comlev1_bibj, key = iicekey, byte = isbyte
795     CADJ STORE ticeOutMult = comlev1_bibj, key = iicekey, byte = isbyte
796     # ifdef SEAICE_CAP_SUBLIM
797 jmc 1.160 CADJ STORE latentHeatFluxMaxMult
798 gforget 1.159 CADJ & = comlev1_bibj, key = iicekey, byte = isbyte
799     # endif
800 jmc 1.160 CADJ STORE a_QbyATMmult_cover =
801 gforget 1.159 CADJ & comlev1_bibj, key = iicekey, byte = isbyte
802 jmc 1.160 CADJ STORE a_QSWbyATMmult_cover =
803 gforget 1.159 CADJ & comlev1_bibj, key = iicekey, byte = isbyte
804 jmc 1.160 CADJ STORE a_FWbySublimMult =
805 gforget 1.159 CADJ & comlev1_bibj, key = iicekey, byte = isbyte
806     #endif /* ALLOW_AUTODIFF_TAMC */
807 jmc 1.160
808 gforget 1.159 DO IT=1,SEAICE_multDim
809 dimitri 1.69 DO J=1,sNy
810     DO I=1,sNx
811 gforget 1.159 C update TICE & TICES
812 jmc 1.160 TICE(I,J,bi,bj) = TICE(I,J,bi,bj)
813 gforget 1.159 & + ticeOutMult(I,J,IT)*recip_multDim
814     TICES(I,J,IT,bi,bj) = ticeOutMult(I,J,IT)
815 gforget 1.75 C average over categories
816 mlosch 1.109 a_QbyATM_cover (I,J) = a_QbyATM_cover(I,J)
817 gforget 1.159 & + a_QbyATMmult_cover(I,J,IT)*recip_multDim
818 jmc 1.104 a_QSWbyATM_cover (I,J) = a_QSWbyATM_cover(I,J)
819 gforget 1.159 & + a_QSWbyATMmult_cover(I,J,IT)*recip_multDim
820 jmc 1.134 a_FWbySublim (I,J) = a_FWbySublim(I,J)
821 gforget 1.159 & + a_FWbySublimMult(I,J,IT)*recip_multDim
822 dimitri 1.69 ENDDO
823     ENDDO
824     ENDDO
825    
826 gforget 1.150 #ifdef SEAICE_CAP_SUBLIM
827     # ifdef ALLOW_DIAGNOSTICS
828 ifenty 1.135 DO J=1,sNy
829     DO I=1,sNx
830 jmc 1.143 c The actual latent heat flux realized by SOLVE4TEMP
831 ifenty 1.135 DIAGarrayA(I,J) = a_FWbySublim(I,J) * lhSublim
832     ENDDO
833     ENDDO
834     cif The actual vs. maximum latent heat flux
835     IF ( useDiagnostics ) THEN
836     CALL DIAGNOSTICS_FILL(DIAGarrayA,
837     & 'SIactLHF',0,1,3,bi,bj,myThid)
838     CALL DIAGNOSTICS_FILL(latentHeatFluxMax,
839     & 'SImaxLHF',0,1,3,bi,bj,myThid)
840     ENDIF
841 jmc 1.162 # endif /* ALLOW_DIAGNOSTICS */
842     #endif /* SEAICE_CAP_SUBLIM */
843 ifenty 1.135
844 gforget 1.156 #ifdef ALLOW_AUTODIFF_TAMC
845     CADJ STORE AREApreTH = comlev1_bibj, key = iicekey, byte = isbyte
846     CADJ STORE a_QbyATM_cover = comlev1_bibj, key = iicekey, byte = isbyte
847     CADJ STORE a_QSWbyATM_cover= comlev1_bibj, key = iicekey, byte = isbyte
848     CADJ STORE a_QbyATM_open = comlev1_bibj, key = iicekey, byte = isbyte
849     CADJ STORE a_QSWbyATM_open = comlev1_bibj, key = iicekey, byte = isbyte
850     CADJ STORE a_FWbySublim = comlev1_bibj, key = iicekey, byte = isbyte
851     #endif /* ALLOW_AUTODIFF_TAMC */
852    
853 jmc 1.104 C switch heat fluxes from W/m2 to 'effective' ice meters
854 gforget 1.83 DO J=1,sNy
855     DO I=1,sNx
856 mlosch 1.109 a_QbyATM_cover(I,J) = a_QbyATM_cover(I,J)
857 gforget 1.87 & * convertQ2HI * AREApreTH(I,J)
858 mlosch 1.109 a_QSWbyATM_cover(I,J) = a_QSWbyATM_cover(I,J)
859 gforget 1.87 & * convertQ2HI * AREApreTH(I,J)
860 mlosch 1.109 a_QbyATM_open(I,J) = a_QbyATM_open(I,J)
861 gforget 1.87 & * convertQ2HI * ( ONE - AREApreTH(I,J) )
862 mlosch 1.109 a_QSWbyATM_open(I,J) = a_QSWbyATM_open(I,J)
863 gforget 1.87 & * convertQ2HI * ( ONE - AREApreTH(I,J) )
864 jmc 1.104 C and initialize r_QbyATM_cover/r_QbyATM_open
865 mlosch 1.109 r_QbyATM_cover(I,J)=a_QbyATM_cover(I,J)
866     r_QbyATM_open(I,J)=a_QbyATM_open(I,J)
867 jmc 1.134 C Convert fresh water flux by sublimation to 'effective' ice meters.
868 mlosch 1.109 C Negative sublimation is resublimation and will be added as snow.
869 gforget 1.150 #ifdef SEAICE_DISABLE_SUBLIM
870     cgf just for those who may need to omit this term to reproduce old results
871     a_FWbySublim(I,J) = ZERO
872     #endif /* SEAICE_CAP_SUBLIM */
873 mlosch 1.153 a_FWbySublim(I,J) = SEAICE_deltaTtherm*recip_rhoIce
874 mlosch 1.109 & * a_FWbySublim(I,J)*AREApreTH(I,J)
875 gforget 1.125 r_FWbySublim(I,J)=a_FWbySublim(I,J)
876 gforget 1.83 ENDDO
877     ENDDO
878 gforget 1.75
879 gforget 1.156 #ifdef ALLOW_AUTODIFF_TAMC
880     CADJ STORE AREApreTH = comlev1_bibj, key = iicekey, byte = isbyte
881     CADJ STORE a_QbyATM_cover = comlev1_bibj, key = iicekey, byte = isbyte
882     CADJ STORE a_QSWbyATM_cover= comlev1_bibj, key = iicekey, byte = isbyte
883     CADJ STORE a_QbyATM_open = comlev1_bibj, key = iicekey, byte = isbyte
884     CADJ STORE a_QSWbyATM_open = comlev1_bibj, key = iicekey, byte = isbyte
885     CADJ STORE a_FWbySublim = comlev1_bibj, key = iicekey, byte = isbyte
886     CADJ STORE r_QbyATM_cover = comlev1_bibj, key = iicekey, byte = isbyte
887     CADJ STORE r_QbyATM_open = comlev1_bibj, key = iicekey, byte = isbyte
888     CADJ STORE r_FWbySublim = comlev1_bibj, key = iicekey, byte = isbyte
889     #endif /* ALLOW_AUTODIFF_TAMC */
890 ifenty 1.135
891 mlosch 1.137 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_MODIFY_GROWTH_ADJ)
892 jmc 1.134 Cgf no additional dependency through ice cover
893 mlosch 1.137 IF ( SEAICEadjMODE.GE.3 ) THEN
894     DO J=1,sNy
895     DO I=1,sNx
896     a_QbyATM_cover(I,J) = 0. _d 0
897     r_QbyATM_cover(I,J) = 0. _d 0
898     a_QSWbyATM_cover(I,J) = 0. _d 0
899     ENDDO
900 gforget 1.105 ENDDO
901 mlosch 1.137 ENDIF
902 gforget 1.105 #endif
903    
904 jmc 1.91 C determine available heat due to the ice pack tying the
905 gforget 1.75 C underlying surface water temperature to freezing point
906     C ======================================================
907    
908 dimitri 1.69 #ifdef ALLOW_AUTODIFF_TAMC
909 gforget 1.156 CADJ STORE theta(:,:,kSurface,bi,bj) = comlev1_bibj,
910     CADJ & key = iicekey, byte = isbyte
911     CADJ STORE salt(:,:,kSurface,bi,bj) = comlev1_bibj,
912     CADJ & key = iicekey, byte = isbyte
913 dimitri 1.69 #endif
914 gforget 1.72
915 dimitri 1.69 DO J=1,sNy
916     DO I=1,sNx
917 mlosch 1.153 c FREEZING TEMP. OF SEA WATER (deg C)
918 jmc 1.154 tempFrz = SEAICE_tempFrz0 +
919 mlosch 1.153 & SEAICE_dTempFrz_dS *salt(I,J,kSurface,bi,bj)
920 gforget 1.148 c efficiency of turbulent fluxes : dependency to sign of THETA-TBC
921 mlosch 1.153 IF ( theta(I,J,kSurface,bi,bj) .GE. tempFrz ) THEN
922 gforget 1.157 tmpscal1 = SEAICE_mcPheePiston
923 mlosch 1.153 ELSE
924 jmc 1.160 tmpscal1 =SEAICE_frazilFrac*drF(kSurface)/SEAICE_deltaTtherm
925 mlosch 1.153 ENDIF
926 gforget 1.148 c efficiency of turbulent fluxes : dependency to AREA (McPhee cases)
927 gforget 1.157 IF ( (AREApreTH(I,J) .GT. 0. _d 0).AND.
928     & (.NOT.SEAICE_mcPheeStepFunc) ) THEN
929 jmc 1.154 MixedLayerTurbulenceFactor = ONE -
930 gforget 1.157 & SEAICE_mcPheeTaper * AREApreTH(I,J)
931     ELSEIF ( (AREApreTH(I,J) .GT. 0. _d 0).AND.
932     & (SEAICE_mcPheeStepFunc) ) THEN
933     MixedLayerTurbulenceFactor = ONE - SEAICE_mcPheeTaper
934 mlosch 1.153 ELSE
935     MixedLayerTurbulenceFactor = ONE
936     ENDIF
937 gforget 1.148 c maximum turbulent flux, in ice meters
938 mlosch 1.153 tmpscal2= - (HeatCapacity_Cp*rhoConst * recip_QI)
939     & * (theta(I,J,kSurface,bi,bj)-tempFrz)
940 gforget 1.157 & * SEAICE_deltaTtherm * maskC(i,j,kSurface,bi,bj)
941 gforget 1.148 c available turbulent flux
942 mlosch 1.153 a_QbyOCN(i,j) =
943     & tmpscal1 * tmpscal2 * MixedLayerTurbulenceFactor
944     r_QbyOCN(i,j) = a_QbyOCN(i,j)
945 gforget 1.72 ENDDO
946     ENDDO
947 jmc 1.134
948 mlosch 1.137 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_MODIFY_GROWTH_ADJ)
949     CALL ZERO_ADJ_1D( sNx*sNy, r_QbyOCN, myThid)
950 gforget 1.96 #endif
951 gforget 1.88
952    
953 jmc 1.104 C ===================================================================
954     C =========PART 3: determine effective thicknesses increments========
955     C ===================================================================
956 gforget 1.88
957 gforget 1.125 C compute snow/ice tendency due to sublimation
958     C ============================================
959 gforget 1.75
960 mlosch 1.109 #ifdef ALLOW_AUTODIFF_TAMC
961     CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
962 gforget 1.125 CADJ STORE r_FWbySublim = comlev1_bibj,key=iicekey,byte=isbyte
963 mlosch 1.109 #endif /* ALLOW_AUTODIFF_TAMC */
964     DO J=1,sNy
965     DO I=1,sNx
966 gforget 1.125 C First sublimate/deposite snow
967 jmc 1.154 tmpscal2 =
968 mlosch 1.153 & MAX(MIN(r_FWbySublim(I,J),HSNOW(I,J,bi,bj)*SNOW2ICE),ZERO)
969 gforget 1.125 d_HSNWbySublim(I,J) = - tmpscal2 * ICE2SNOW
970     HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj) - tmpscal2*ICE2SNOW
971     r_FWbySublim(I,J) = r_FWbySublim(I,J) - tmpscal2
972     ENDDO
973     ENDDO
974     #ifdef ALLOW_AUTODIFF_TAMC
975     CADJ STORE heff(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
976     CADJ STORE r_FWbySublim = comlev1_bibj,key=iicekey,byte=isbyte
977     #endif /* ALLOW_AUTODIFF_TAMC */
978     DO J=1,sNy
979     DO I=1,sNx
980     C If anything is left, sublimate ice
981 jmc 1.154 tmpscal2 =
982 gforget 1.150 & MAX(MIN(r_FWbySublim(I,J),HEFF(I,J,bi,bj)),ZERO)
983 gforget 1.125 d_HEFFbySublim(I,J) = - tmpscal2
984     HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) - tmpscal2
985     r_FWbySublim(I,J) = r_FWbySublim(I,J) - tmpscal2
986 mlosch 1.109 ENDDO
987     ENDDO
988 gforget 1.133 DO J=1,sNy
989     DO I=1,sNx
990     C If anything is left, it will be evaporated from the ocean rather than sublimated.
991     C Since a_QbyATM_cover was computed for sublimation, not simple evapation, we need to
992     C remove the fusion part for the residual (that happens to be precisely r_FWbySublim).
993     a_QbyATM_cover(I,J) = a_QbyATM_cover(I,J)-r_FWbySublim(I,J)
994     r_QbyATM_cover(I,J) = r_QbyATM_cover(I,J)-r_FWbySublim(I,J)
995     ENDDO
996     ENDDO
997 mlosch 1.109
998 ifenty 1.135 C compute ice thickness tendency due to ice-ocean interaction
999     C ===========================================================
1000    
1001     #ifdef ALLOW_AUTODIFF_TAMC
1002     CADJ STORE heff(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1003     CADJ STORE r_QbyOCN = comlev1_bibj,key=iicekey,byte=isbyte
1004     #endif /* ALLOW_AUTODIFF_TAMC */
1005    
1006     DO J=1,sNy
1007     DO I=1,sNx
1008     d_HEFFbyOCNonICE(I,J)=MAX(r_QbyOCN(i,j), -HEFF(I,J,bi,bj))
1009     r_QbyOCN(I,J)=r_QbyOCN(I,J)-d_HEFFbyOCNonICE(I,J)
1010     HEFF(I,J,bi,bj)=HEFF(I,J,bi,bj) + d_HEFFbyOCNonICE(I,J)
1011     #ifdef ALLOW_SITRACER
1012     SItrHEFF(I,J,bi,bj,2)=HEFF(I,J,bi,bj)
1013     #endif
1014     ENDDO
1015     ENDDO
1016    
1017 gforget 1.125 C compute snow melt tendency due to snow-atmosphere interaction
1018     C ==================================================================
1019    
1020 dimitri 1.69 #ifdef ALLOW_AUTODIFF_TAMC
1021 gforget 1.105 CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1022     CADJ STORE r_QbyATM_cover = comlev1_bibj,key=iicekey,byte=isbyte
1023 dimitri 1.69 #endif /* ALLOW_AUTODIFF_TAMC */
1024 gforget 1.75
1025 dimitri 1.69 DO J=1,sNy
1026     DO I=1,sNx
1027 mlosch 1.153 C Convert to standard units (meters of ice) rather than to meters
1028     C of snow. This appears to be more robust.
1029     tmpscal1=MAX(r_QbyATM_cover(I,J),-HSNOW(I,J,bi,bj)*SNOW2ICE)
1030 gforget 1.105 tmpscal2=MIN(tmpscal1,0. _d 0)
1031     #ifdef SEAICE_MODIFY_GROWTH_ADJ
1032     Cgf no additional dependency through snow
1033 mlosch 1.137 IF ( SEAICEadjMODE.GE.2 ) tmpscal2 = 0. _d 0
1034 gforget 1.105 #endif
1035 mlosch 1.153 d_HSNWbyATMonSNW(I,J)= tmpscal2*ICE2SNOW
1036     HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj) + tmpscal2*ICE2SNOW
1037     r_QbyATM_cover(I,J)=r_QbyATM_cover(I,J) - tmpscal2
1038 dimitri 1.69 ENDDO
1039     ENDDO
1040    
1041 gforget 1.89 C compute ice thickness tendency due to the atmosphere
1042     C ====================================================
1043 gforget 1.75
1044 mlosch 1.109 #ifdef ALLOW_AUTODIFF_TAMC
1045     CADJ STORE heff(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1046     CADJ STORE r_QbyATM_cover = comlev1_bibj,key=iicekey,byte=isbyte
1047 gforget 1.105 #endif /* ALLOW_AUTODIFF_TAMC */
1048 gforget 1.75
1049 jmc 1.104 Cgf note: this block is not actually tested by lab_sea
1050     Cgf where all experiments start in January. So even though
1051     Cgf the v1.81=>v1.82 revision would change results in
1052     Cgf warming conditions, the lab_sea results were not changed.
1053 gforget 1.82
1054 dimitri 1.69 DO J=1,sNy
1055     DO I=1,sNx
1056 dimitri 1.113
1057 gforget 1.111 #ifdef SEAICE_GROWTH_LEGACY
1058 gforget 1.84 tmpscal2 = MAX(-HEFF(I,J,bi,bj),r_QbyATM_cover(I,J))
1059 gforget 1.111 #else
1060     tmpscal2 = MAX(-HEFF(I,J,bi,bj),r_QbyATM_cover(I,J)+
1061 jmc 1.134 c Limit ice growth by potential melt by ocean
1062 gforget 1.111 & AREApreTH(I,J) * r_QbyOCN(I,J))
1063 dimitri 1.113 #endif /* SEAICE_GROWTH_LEGACY */
1064    
1065 dimitri 1.114 d_HEFFbyATMonOCN_cover(I,J)=tmpscal2
1066     d_HEFFbyATMonOCN(I,J)=d_HEFFbyATMonOCN(I,J)+tmpscal2
1067 gforget 1.89 r_QbyATM_cover(I,J)=r_QbyATM_cover(I,J)-tmpscal2
1068     HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + tmpscal2
1069 dimitri 1.113
1070 gforget 1.124 #ifdef ALLOW_SITRACER
1071     SItrHEFF(I,J,bi,bj,3)=HEFF(I,J,bi,bj)
1072     #endif
1073 gforget 1.74 ENDDO
1074     ENDDO
1075 dimitri 1.69
1076 jmc 1.91 C attribute precip to fresh water or snow stock,
1077 gforget 1.75 C depending on atmospheric conditions.
1078     C =================================================
1079 dimitri 1.69 #ifdef ALLOW_ATM_TEMP
1080 gforget 1.105 #ifdef ALLOW_AUTODIFF_TAMC
1081     CADJ STORE a_QbyATM_cover = comlev1_bibj,key=iicekey,byte=isbyte
1082     CADJ STORE PRECIP(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1083     CADJ STORE AREApreTH = comlev1_bibj,key=iicekey,byte=isbyte
1084     #endif /* ALLOW_AUTODIFF_TAMC */
1085 gforget 1.74 DO J=1,sNy
1086     DO I=1,sNx
1087 jmc 1.104 C possible alternatives to the a_QbyATM_cover criterium
1088 gforget 1.89 c IF (TICE(I,J,bi,bj) .LT. TMIX) THEN
1089     c IF (atemp(I,J,bi,bj) .LT. celsius2K) THEN
1090     IF ( a_QbyATM_cover(I,J).GE. 0. _d 0 ) THEN
1091 gforget 1.73 C add precip as snow
1092 gforget 1.84 d_HFRWbyRAIN(I,J)=0. _d 0
1093     d_HSNWbyRAIN(I,J)=convertPRECIP2HI*ICE2SNOW*
1094 gforget 1.87 & PRECIP(I,J,bi,bj)*AREApreTH(I,J)
1095 jmc 1.91 ELSE
1096 jmc 1.104 C add precip to the fresh water bucket
1097 gforget 1.84 d_HFRWbyRAIN(I,J)=-convertPRECIP2HI*
1098 gforget 1.87 & PRECIP(I,J,bi,bj)*AREApreTH(I,J)
1099 gforget 1.84 d_HSNWbyRAIN(I,J)=0. _d 0
1100 dimitri 1.69 ENDIF
1101 jmc 1.91 HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj) + d_HSNWbyRAIN(I,J)
1102 dimitri 1.69 ENDDO
1103     ENDDO
1104 jmc 1.104 Cgf note: this does not affect air-sea heat flux,
1105     Cgf since the implied air heat gain to turn
1106     Cgf rain to snow is not a surface process.
1107 gforget 1.74 #endif /* ALLOW_ATM_TEMP */
1108 dimitri 1.69
1109 gforget 1.89 C compute snow melt due to heat available from ocean.
1110 gforget 1.75 C =================================================================
1111 dimitri 1.69
1112 jmc 1.104 Cgf do we need to keep this comment and cpp bracket?
1113     Cph( very sensitive bit here by JZ
1114 dimitri 1.69 #ifndef SEAICE_EXCLUDE_FOR_EXACT_AD_TESTING
1115 gforget 1.105 #ifdef ALLOW_AUTODIFF_TAMC
1116     CADJ STORE HSNOW(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1117     CADJ STORE r_QbyOCN = comlev1_bibj,key=iicekey,byte=isbyte
1118     #endif /* ALLOW_AUTODIFF_TAMC */
1119 dimitri 1.69 DO J=1,sNy
1120     DO I=1,sNx
1121 gforget 1.105 tmpscal1=MAX(r_QbyOCN(i,j)*ICE2SNOW, -HSNOW(I,J,bi,bj))
1122     tmpscal2=MIN(tmpscal1,0. _d 0)
1123     #ifdef SEAICE_MODIFY_GROWTH_ADJ
1124     Cgf no additional dependency through snow
1125     if ( SEAICEadjMODE.GE.2 ) tmpscal2 = 0. _d 0
1126     #endif
1127 dimitri 1.113 d_HSNWbyOCNonSNW(I,J) = tmpscal2
1128 gforget 1.84 r_QbyOCN(I,J)=r_QbyOCN(I,J)
1129 mlosch 1.153 & -d_HSNWbyOCNonSNW(I,J)*SNOW2ICE
1130 dimitri 1.113 HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)+d_HSNWbyOCNonSNW(I,J)
1131 dimitri 1.69 ENDDO
1132     ENDDO
1133 gforget 1.75 #endif /* SEAICE_EXCLUDE_FOR_EXACT_AD_TESTING */
1134 jmc 1.104 Cph)
1135 gforget 1.90
1136     C gain of new ice over open water
1137     C ===============================
1138     #ifdef ALLOW_AUTODIFF_TAMC
1139 gforget 1.105 CADJ STORE heff(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1140     CADJ STORE r_QbyATM_open = comlev1_bibj,key=iicekey,byte=isbyte
1141     CADJ STORE r_QbyOCN = comlev1_bibj,key=iicekey,byte=isbyte
1142 dimitri 1.113 CADJ STORE a_QSWbyATM_cover = comlev1_bibj,key=iicekey,byte=isbyte
1143 gforget 1.105 CADJ STORE a_QSWbyATM_open = comlev1_bibj,key=iicekey,byte=isbyte
1144     #endif /* ALLOW_AUTODIFF_TAMC */
1145 gforget 1.149
1146 gforget 1.90 DO J=1,sNy
1147     DO I=1,sNx
1148 jmc 1.134 c Initial ice growth is triggered by open water
1149 gforget 1.111 c heat flux overcoming potential melt by ocean
1150 jmc 1.134 tmpscal1=r_QbyATM_open(I,J)+r_QbyOCN(i,j) *
1151 jmc 1.160 & (1.0 _d 0 - AREApreTH(I,J))
1152 gforget 1.111 c Penetrative shortwave flux beyond first layer
1153 gforget 1.121 c that is therefore not available to ice growth/melt
1154 jmc 1.145 tmpscal2=SWFracB * a_QSWbyATM_open(I,J)
1155 gforget 1.149 C impose -HEFF as the maxmum melting if SEAICE_doOpenWaterMelt
1156     C or 0. otherwise (no melting if not SEAICE_doOpenWaterMelt)
1157     tmpscal3=facOpenGrow*MAX(tmpscal1-tmpscal2,
1158     & -HEFF(I,J,bi,bj)*facOpenMelt)*HEFFM(I,J,bi,bj)
1159 dimitri 1.114 d_HEFFbyATMonOCN_open(I,J)=tmpscal3
1160 dimitri 1.113 d_HEFFbyATMonOCN(I,J)=d_HEFFbyATMonOCN(I,J)+tmpscal3
1161 gforget 1.90 r_QbyATM_open(I,J)=r_QbyATM_open(I,J)-tmpscal3
1162 jmc 1.134 HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + tmpscal3
1163 gforget 1.90 ENDDO
1164     ENDDO
1165    
1166 gforget 1.124 #ifdef ALLOW_SITRACER
1167     DO J=1,sNy
1168     DO I=1,sNx
1169     c needs to be here to allow use also with LEGACY branch
1170     SItrHEFF(I,J,bi,bj,4)=HEFF(I,J,bi,bj)
1171     ENDDO
1172     ENDDO
1173 jmc 1.162 #endif /* ALLOW_SITRACER */
1174 gforget 1.124
1175 gforget 1.87 C convert snow to ice if submerged.
1176     C =================================
1177    
1178 gforget 1.89 #ifndef SEAICE_GROWTH_LEGACY
1179 jmc 1.104 C note: in legacy, this process is done at the end
1180 gforget 1.105 #ifdef ALLOW_AUTODIFF_TAMC
1181     CADJ STORE heff(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1182     CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1183     #endif /* ALLOW_AUTODIFF_TAMC */
1184 gforget 1.87 IF ( SEAICEuseFlooding ) THEN
1185     DO J=1,sNy
1186     DO I=1,sNx
1187 gforget 1.150 tmpscal0 = (HSNOW(I,J,bi,bj)*SEAICE_rhoSnow
1188 mlosch 1.153 & +HEFF(I,J,bi,bj)*SEAICE_rhoIce)*recip_rhoConst
1189 gforget 1.150 tmpscal1 = MAX( 0. _d 0, tmpscal0 - HEFF(I,J,bi,bj))
1190 gforget 1.87 d_HEFFbyFLOODING(I,J)=tmpscal1
1191     HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj)+d_HEFFbyFLOODING(I,J)
1192     HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)-
1193 jmc 1.91 & d_HEFFbyFLOODING(I,J)*ICE2SNOW
1194 gforget 1.87 ENDDO
1195     ENDDO
1196     ENDIF
1197     #endif /* SEAICE_GROWTH_LEGACY */
1198    
1199 jmc 1.104 C ===================================================================
1200     C ==========PART 4: determine ice cover fraction increments=========-
1201     C ===================================================================
1202 gforget 1.75
1203 dimitri 1.69 #ifdef ALLOW_AUTODIFF_TAMC
1204 dimitri 1.113 CADJ STORE d_HEFFbyATMonOCN = comlev1_bibj,key=iicekey,byte=isbyte
1205 dimitri 1.114 CADJ STORE d_HEFFbyATMonOCN_cover = comlev1_bibj,key=iicekey,byte=isbyte
1206     CADJ STORE d_HEFFbyATMonOCN_open = comlev1_bibj,key=iicekey,byte=isbyte
1207 dimitri 1.113 CADJ STORE d_HEFFbyOCNonICE = comlev1_bibj,key=iicekey,byte=isbyte
1208 ifenty 1.131 CADJ STORE recip_heffActual = comlev1_bibj,key=iicekey,byte=isbyte
1209 gforget 1.156 CADJ STORE d_hsnwbyatmonsnw = comlev1_bibj,key=iicekey,byte=isbyte
1210 heimbach 1.138 cph(
1211 jmc 1.143 cphCADJ STORE d_AREAbyATM = comlev1_bibj,key=iicekey,byte=isbyte
1212     cphCADJ STORE d_AREAbyICE = comlev1_bibj,key=iicekey,byte=isbyte
1213 heimbach 1.138 cphCADJ STORE d_AREAbyOCN = comlev1_bibj,key=iicekey,byte=isbyte
1214     cph)
1215 gforget 1.105 CADJ STORE a_QbyATM_open = comlev1_bibj,key=iicekey,byte=isbyte
1216     CADJ STORE heffActual = comlev1_bibj,key=iicekey,byte=isbyte
1217     CADJ STORE AREApreTH = comlev1_bibj,key=iicekey,byte=isbyte
1218     CADJ STORE HEFF(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1219     CADJ STORE HSNOW(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1220     CADJ STORE AREA(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1221 dimitri 1.69 #endif /* ALLOW_AUTODIFF_TAMC */
1222    
1223     DO J=1,sNy
1224     DO I=1,sNx
1225 jmc 1.104
1226 gforget 1.123 IF ( YC(I,J,bi,bj) .LT. ZERO ) THEN
1227 gforget 1.149 recip_HO=1. _d 0 / HO_south
1228 gforget 1.123 ELSE
1229 gforget 1.149 recip_HO=1. _d 0 / HO
1230 dimitri 1.113 ENDIF
1231 gforget 1.149 #ifdef SEAICE_GROWTH_LEGACY
1232 gforget 1.150 tmpscal0=HEFF(I,J,bi,bj) - d_HEFFbyATMonOCN(I,J)
1233     recip_HH = AREApreTH(I,J) /(tmpscal0+.00001 _d 0)
1234 gforget 1.149 #else
1235     recip_HH = recip_heffActual(I,J)
1236     #endif
1237 dimitri 1.113
1238 jmc 1.154 C gain of ice over open water : computed from
1239 gforget 1.149 C (SEAICE_areaGainFormula.EQ.1) from growth by ATM
1240     C (SEAICE_areaGainFormula.EQ.2) from predicted growth by ATM
1241 jmc 1.160 IF (SEAICE_areaGainFormula.EQ.1) THEN
1242 gforget 1.149 tmpscal4 = MAX(ZERO,d_HEFFbyATMonOCN_open(I,J))
1243 jmc 1.160 ELSE
1244 gforget 1.149 tmpscal4=MAX(ZERO,a_QbyATM_open(I,J))
1245 jmc 1.160 ENDIF
1246 dimitri 1.113
1247 jmc 1.154 C loss of ice cover by melting : computed from
1248 gforget 1.149 C (SEAICE_areaLossFormula.EQ.1) from all but only melt conributions by ATM and OCN
1249     C (SEAICE_areaLossFormula.EQ.2) from net melt-growth>0 by ATM and OCN
1250     C (SEAICE_areaLossFormula.EQ.3) from predicted melt by ATM
1251 jmc 1.160 IF (SEAICE_areaLossFormula.EQ.1) THEN
1252 jmc 1.154 tmpscal3 = MIN( 0. _d 0 , d_HEFFbyATMonOCN_cover(I,J) )
1253 gforget 1.149 & + MIN( 0. _d 0 , d_HEFFbyATMonOCN_open(I,J) )
1254     & + MIN( 0. _d 0 , d_HEFFbyOCNonICE(I,J) )
1255 jmc 1.160 ELSEIF (SEAICE_areaLossFormula.EQ.2) THEN
1256 gforget 1.149 tmpscal3 = MIN( 0. _d 0 , d_HEFFbyATMonOCN_cover(I,J)
1257     & + d_HEFFbyATMonOCN_open(I,J) + d_HEFFbyOCNonICE(I,J) )
1258 jmc 1.160 ELSE
1259 gforget 1.149 C compute heff after ice melt by ocn:
1260     tmpscal0=HEFF(I,J,bi,bj) - d_HEFFbyATMonOCN(I,J)
1261     C compute available heat left after snow melt by atm:
1262     tmpscal1= a_QbyATM_open(I,J)+a_QbyATM_cover(I,J)
1263 mlosch 1.153 & - d_HSNWbyATMonSNW(I,J)*SNOW2ICE
1264 gforget 1.149 C could not melt more than all the ice
1265     tmpscal2 = MAX(-tmpscal0,tmpscal1)
1266     tmpscal3 = MIN(ZERO,tmpscal2)
1267 jmc 1.160 ENDIF
1268 jmc 1.154
1269 jmc 1.104 C apply tendency
1270 gforget 1.90 IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR.
1271     & (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN
1272 jmc 1.160 AREA(I,J,bi,bj)=MAX(0. _d 0,
1273     & MIN( SEAICE_area_max, AREA(I,J,bi,bj)
1274 gforget 1.149 & + recip_HO*tmpscal4+HALF*recip_HH*tmpscal3 ))
1275 gforget 1.90 ELSE
1276     AREA(I,J,bi,bj)=0. _d 0
1277     ENDIF
1278 gforget 1.127 #ifdef ALLOW_SITRACER
1279     SItrAREA(I,J,bi,bj,3)=AREA(I,J,bi,bj)
1280 jmc 1.162 #endif /* ALLOW_SITRACER */
1281 gforget 1.152 #ifdef ALLOW_DIAGNOSTICS
1282     d_AREAbyATM(I,J)=
1283     & recip_HO*MAX(ZERO,d_HEFFbyATMonOCN_open(I,J))
1284     & +HALF*recip_HH*MIN(0. _d 0,d_HEFFbyATMonOCN_open(I,J))
1285     d_AREAbyICE(I,J)=
1286     & HALF*recip_HH*MIN(0. _d 0,d_HEFFbyATMonOCN_cover(I,J))
1287     d_AREAbyOCN(I,J)=
1288     & HALF*recip_HH*MIN( 0. _d 0,d_HEFFbyOCNonICE(I,J) )
1289 jmc 1.162 #endif /* ALLOW_DIAGNOSTICS */
1290 dimitri 1.69 ENDDO
1291     ENDDO
1292    
1293 mlosch 1.137 #if (defined ALLOW_AUTODIFF_TAMC && defined SEAICE_MODIFY_GROWTH_ADJ)
1294 jmc 1.134 Cgf 'bulk' linearization of area=f(HEFF)
1295 mlosch 1.137 IF ( SEAICEadjMODE.GE.1 ) THEN
1296     DO J=1,sNy
1297     DO I=1,sNx
1298 gforget 1.105 C AREA(I,J,bi,bj) = 0.1 _d 0 * HEFF(I,J,bi,bj)
1299 mlosch 1.137 AREA(I,J,bi,bj) = AREApreTH(I,J) + 0.1 _d 0 *
1300 gforget 1.105 & ( HEFF(I,J,bi,bj) - HEFFpreTH(I,J) )
1301 mlosch 1.137 ENDDO
1302 gforget 1.105 ENDDO
1303 mlosch 1.137 ENDIF
1304 gforget 1.105 #endif
1305    
1306 jmc 1.104 C ===================================================================
1307     C =============PART 5: determine ice salinity increments=============
1308     C ===================================================================
1309 gforget 1.88
1310 ifenty 1.119 #ifndef SEAICE_VARIABLE_SALINITY
1311 mlosch 1.137 # if (defined ALLOW_AUTODIFF_TAMC && defined ALLOW_SALT_PLUME)
1312 gforget 1.107 CADJ STORE d_HEFFbyNEG = comlev1_bibj,key=iicekey,byte=isbyte
1313 dimitri 1.113 CADJ STORE d_HEFFbyOCNonICE = comlev1_bibj,key=iicekey,byte=isbyte
1314     CADJ STORE d_HEFFbyATMonOCN = comlev1_bibj,key=iicekey,byte=isbyte
1315 dimitri 1.114 CADJ STORE d_HEFFbyATMonOCN_open = comlev1_bibj,key=iicekey,byte=isbyte
1316     CADJ STORE d_HEFFbyATMonOCN_cover = comlev1_bibj,key=iicekey,byte=isbyte
1317 gforget 1.107 CADJ STORE d_HEFFbyFLOODING = comlev1_bibj,key=iicekey,byte=isbyte
1318 gforget 1.141 CADJ STORE d_HEFFbySublim = comlev1_bibj,key=iicekey,byte=isbyte
1319 gforget 1.107 CADJ STORE salt(:,:,kSurface,bi,bj) = comlev1_bibj,
1320     CADJ & key = iicekey, byte = isbyte
1321 mlosch 1.137 # endif /* ALLOW_AUTODIFF_TAMC and ALLOW_SALT_PLUME */
1322 gforget 1.106 DO J=1,sNy
1323     DO I=1,sNx
1324 jmc 1.134 tmpscal1 = d_HEFFbyNEG(I,J) + d_HEFFbyOCNonICE(I,J) +
1325 gforget 1.150 & d_HEFFbyATMonOCN(I,J) + d_HEFFbyFLOODING(I,J)
1326 gforget 1.141 & + d_HEFFbySublim(I,J)
1327 heimbach 1.161 #ifdef SEAICE_ALLOW_AREA_RELAXATION
1328     + d_HEFFbyRLX(I,J)
1329     #endif
1330 jmc 1.160 tmpscal2 = tmpscal1 * SEAICE_salt0 * HEFFM(I,J,bi,bj)
1331 mlosch 1.153 & * recip_deltaTtherm * SEAICE_rhoIce
1332 gforget 1.107 saltFlux(I,J,bi,bj) = tmpscal2
1333 gforget 1.106 #ifdef ALLOW_SALT_PLUME
1334 jmc 1.160 tmpscal3 = tmpscal1*salt(I,J,kSurface,bi,bj)*HEFFM(I,J,bi,bj)
1335 mlosch 1.153 & * recip_deltaTtherm * SEAICE_rhoIce
1336 gforget 1.106 saltPlumeFlux(I,J,bi,bj) = MAX( tmpscal3-tmpscal2 , 0. _d 0)
1337 gforget 1.126 & *SPsalFRAC
1338 gforget 1.106 #endif /* ALLOW_SALT_PLUME */
1339     ENDDO
1340     ENDDO
1341 jmc 1.162 #endif /* ndef SEAICE_VARIABLE_SALINITY */
1342 gforget 1.106
1343 ifenty 1.119 #ifdef SEAICE_VARIABLE_SALINITY
1344 dimitri 1.69
1345 gforget 1.87 #ifdef SEAICE_GROWTH_LEGACY
1346 gforget 1.88 # ifdef ALLOW_AUTODIFF_TAMC
1347 gforget 1.105 CADJ STORE hsalt(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1348 gforget 1.88 # endif /* ALLOW_AUTODIFF_TAMC */
1349 dimitri 1.69 DO J=1,sNy
1350     DO I=1,sNx
1351     C set HSALT = 0 if HSALT < 0 and compute salt to remove from ocean
1352     IF ( HSALT(I,J,bi,bj) .LT. 0.0 ) THEN
1353     saltFluxAdjust(I,J) = - HEFFM(I,J,bi,bj) *
1354 mlosch 1.153 & HSALT(I,J,bi,bj) * recip_deltaTtherm
1355 dimitri 1.69 HSALT(I,J,bi,bj) = 0.0 _d 0
1356     ENDIF
1357     ENDDO
1358     ENDDO
1359 gforget 1.87 #endif /* SEAICE_GROWTH_LEGACY */
1360 dimitri 1.69
1361     #ifdef ALLOW_AUTODIFF_TAMC
1362 gforget 1.105 CADJ STORE hsalt(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1363 dimitri 1.69 #endif /* ALLOW_AUTODIFF_TAMC */
1364    
1365     DO J=1,sNy
1366     DO I=1,sNx
1367 jmc 1.104 C sum up the terms that affect the salt content of the ice pack
1368 dimitri 1.114 tmpscal1=d_HEFFbyOCNonICE(I,J)+d_HEFFbyATMonOCN(I,J)
1369 dimitri 1.113
1370 jmc 1.160 C recompute HEFF before thermodynamic updates (which is not AREApreTH in legacy code)
1371 gforget 1.87 tmpscal2=HEFF(I,J,bi,bj)-tmpscal1-d_HEFFbyFLOODING(I,J)
1372 gforget 1.84 C tmpscal1 > 0 : m of sea ice that is created
1373     IF ( tmpscal1 .GE. 0.0 ) THEN
1374 dimitri 1.69 saltFlux(I,J,bi,bj) =
1375 mlosch 1.153 & HEFFM(I,J,bi,bj)*recip_deltaTtherm
1376 jmc 1.160 & *SEAICE_saltFrac*salt(I,J,kSurface,bi,bj)
1377 ifenty 1.118 & *tmpscal1*SEAICE_rhoIce
1378 dimitri 1.69 #ifdef ALLOW_SALT_PLUME
1379     C saltPlumeFlux is defined only during freezing:
1380     saltPlumeFlux(I,J,bi,bj)=
1381 mlosch 1.153 & HEFFM(I,J,bi,bj)*recip_deltaTtherm
1382 jmc 1.160 & *(ONE-SEAICE_saltFrac)*salt(I,J,kSurface,bi,bj)
1383 ifenty 1.118 & *tmpscal1*SEAICE_rhoIce
1384 gforget 1.126 & *SPsalFRAC
1385 dimitri 1.69 C if SaltPlumeSouthernOcean=.FALSE. turn off salt plume in Southern Ocean
1386     IF ( .NOT. SaltPlumeSouthernOcean ) THEN
1387     IF ( YC(I,J,bi,bj) .LT. 0.0 _d 0 )
1388     & saltPlumeFlux(i,j,bi,bj) = 0.0 _d 0
1389     ENDIF
1390 jmc 1.104 #endif /* ALLOW_SALT_PLUME */
1391 dimitri 1.69
1392 gforget 1.84 C tmpscal1 < 0 : m of sea ice that is melted
1393 dimitri 1.69 ELSE
1394     saltFlux(I,J,bi,bj) =
1395 mlosch 1.153 & HEFFM(I,J,bi,bj)*recip_deltaTtherm
1396 gforget 1.87 & *HSALT(I,J,bi,bj)
1397     & *tmpscal1/tmpscal2
1398 dimitri 1.69 #ifdef ALLOW_SALT_PLUME
1399     saltPlumeFlux(i,j,bi,bj) = 0.0 _d 0
1400     #endif /* ALLOW_SALT_PLUME */
1401     ENDIF
1402     C update HSALT based on surface saltFlux
1403     HSALT(I,J,bi,bj) = HSALT(I,J,bi,bj) +
1404     & saltFlux(I,J,bi,bj) * SEAICE_deltaTtherm
1405     saltFlux(I,J,bi,bj) =
1406     & saltFlux(I,J,bi,bj) + saltFluxAdjust(I,J)
1407 gforget 1.87 #ifdef SEAICE_GROWTH_LEGACY
1408 dimitri 1.69 C set HSALT = 0 if HEFF = 0 and compute salt to dump into ocean
1409     IF ( HEFF(I,J,bi,bj) .EQ. 0.0 ) THEN
1410 mlosch 1.153 saltFlux(I,J,bi,bj) = saltFlux(I,J,bi,bj) -
1411     & HEFFM(I,J,bi,bj) * HSALT(I,J,bi,bj) * recip_deltaTtherm
1412     HSALT(I,J,bi,bj) = 0.0 _d 0
1413 dimitri 1.69 #ifdef ALLOW_SALT_PLUME
1414 mlosch 1.153 saltPlumeFlux(i,j,bi,bj) = 0.0 _d 0
1415 dimitri 1.69 #endif /* ALLOW_SALT_PLUME */
1416     ENDIF
1417 gforget 1.87 #endif /* SEAICE_GROWTH_LEGACY */
1418 dimitri 1.69 ENDDO
1419     ENDDO
1420 ifenty 1.119 #endif /* SEAICE_VARIABLE_SALINITY */
1421 dimitri 1.69
1422 gforget 1.75
1423 jmc 1.104 C =======================================================================
1424 gforget 1.147 C ==LEGACY PART 6 (LEGACY) treat pathological cases, then do flooding ===
1425 jmc 1.104 C =======================================================================
1426 gforget 1.72
1427 gforget 1.87 #ifdef SEAICE_GROWTH_LEGACY
1428    
1429 jmc 1.91 C treat values of ice cover fraction oustide
1430 gforget 1.75 C the [0 1] range, and other such issues.
1431     C ===========================================
1432    
1433 jmc 1.104 Cgf note: this part cannot be heat and water conserving
1434 gforget 1.76
1435 dimitri 1.69 #ifdef ALLOW_AUTODIFF_TAMC
1436     CADJ STORE area(:,:,bi,bj) = comlev1_bibj,
1437     CADJ & key = iicekey, byte = isbyte
1438     CADJ STORE heff(:,:,bi,bj) = comlev1_bibj,
1439     CADJ & key = iicekey, byte = isbyte
1440     #endif /* ALLOW_AUTODIFF_TAMC */
1441     DO J=1,sNy
1442     DO I=1,sNx
1443 mlosch 1.153 C NOW SET AREA(I,J,bi,bj)=0 WHERE THERE IS NO ICE
1444     CML replaced "/.0001 _d 0" by "*1. _d 4", 1e-4 is probably
1445     CML meant to be something like a minimum thickness
1446     AREA(I,J,bi,bj)=MIN(AREA(I,J,bi,bj),HEFF(I,J,bi,bj)*1. _d 4)
1447 dimitri 1.69 ENDDO
1448     ENDDO
1449 gforget 1.75
1450 dimitri 1.69 #ifdef ALLOW_AUTODIFF_TAMC
1451     CADJ STORE area(:,:,bi,bj) = comlev1_bibj,
1452     CADJ & key = iicekey, byte = isbyte
1453     #endif /* ALLOW_AUTODIFF_TAMC */
1454     DO J=1,sNy
1455     DO I=1,sNx
1456     C NOW TRUNCATE AREA
1457     AREA(I,J,bi,bj)=MIN(ONE,AREA(I,J,bi,bj))
1458     ENDDO
1459     ENDDO
1460 gforget 1.75
1461 dimitri 1.69 #ifdef ALLOW_AUTODIFF_TAMC
1462     CADJ STORE area(:,:,bi,bj) = comlev1_bibj,
1463     CADJ & key = iicekey, byte = isbyte
1464     CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj,
1465     CADJ & key = iicekey, byte = isbyte
1466     #endif /* ALLOW_AUTODIFF_TAMC */
1467     DO J=1,sNy
1468     DO I=1,sNx
1469     AREA(I,J,bi,bj) = MAX(ZERO,AREA(I,J,bi,bj))
1470     HSNOW(I,J,bi,bj) = MAX(ZERO,HSNOW(I,J,bi,bj))
1471     AREA(I,J,bi,bj) = AREA(I,J,bi,bj)*HEFFM(I,J,bi,bj)
1472     HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj)*HEFFM(I,J,bi,bj)
1473     #ifdef SEAICE_CAP_HEFF
1474 mlosch 1.97 C This is not energy conserving, but at least it conserves fresh water
1475 mlosch 1.103 tmpscal0 = -MAX(HEFF(I,J,bi,bj)-MAX_HEFF,0. _d 0)
1476     d_HEFFbyNeg(I,J) = d_HEFFbyNeg(I,J) + tmpscal0
1477     HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + tmpscal0
1478 dimitri 1.69 #endif /* SEAICE_CAP_HEFF */
1479     HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)*HEFFM(I,J,bi,bj)
1480     ENDDO
1481     ENDDO
1482    
1483 gforget 1.75 C convert snow to ice if submerged.
1484     C =================================
1485    
1486 dimitri 1.69 IF ( SEAICEuseFlooding ) THEN
1487     DO J=1,sNy
1488     DO I=1,sNx
1489 gforget 1.150 tmpscal0 = (HSNOW(I,J,bi,bj)*SEAICE_rhoSnow
1490 mlosch 1.153 & +HEFF(I,J,bi,bj)*SEAICE_rhoIce)*recip_rhoConst
1491 gforget 1.150 tmpscal1 = MAX( 0. _d 0, tmpscal0 - HEFF(I,J,bi,bj))
1492 gforget 1.84 d_HEFFbyFLOODING(I,J)=tmpscal1
1493     HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj)+d_HEFFbyFLOODING(I,J)
1494     HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)-
1495 jmc 1.91 & d_HEFFbyFLOODING(I,J)*ICE2SNOW
1496 dimitri 1.69 ENDDO
1497     ENDDO
1498     ENDIF
1499    
1500 gforget 1.87 #endif /* SEAICE_GROWTH_LEGACY */
1501 gforget 1.75
1502 gforget 1.124 #ifdef ALLOW_SITRACER
1503     DO J=1,sNy
1504     DO I=1,sNx
1505     c needs to be here to allow use also with LEGACY branch
1506     SItrHEFF(I,J,bi,bj,5)=HEFF(I,J,bi,bj)
1507     ENDDO
1508     ENDDO
1509 jmc 1.162 #endif /* ALLOW_SITRACER */
1510 gforget 1.75
1511 jmc 1.104 C ===================================================================
1512     C ==============PART 7: determine ocean model forcing================
1513     C ===================================================================
1514 gforget 1.88
1515 jmc 1.91 C compute net heat flux leaving/entering the ocean,
1516 gforget 1.88 C accounting for the part used in melt/freeze processes
1517     C =====================================================
1518    
1519 gforget 1.156 #ifdef ALLOW_AUTODIFF_TAMC
1520     CADJ STORE d_hsnwbyneg = comlev1_bibj,key=iicekey,byte=isbyte
1521     CADJ STORE d_hsnwbyocnonsnw = comlev1_bibj,key=iicekey,byte=isbyte
1522     #endif /* ALLOW_AUTODIFF_TAMC */
1523    
1524 gforget 1.88 DO J=1,sNy
1525     DO I=1,sNx
1526 gforget 1.89 QNET(I,J,bi,bj) = r_QbyATM_cover(I,J) + r_QbyATM_open(I,J)
1527 jmc 1.134 #ifndef SEAICE_GROWTH_LEGACY
1528     C in principle a_QSWbyATM_cover should always be included here, however
1529 gforget 1.121 C for backward compatibility it is left out of the LEGACY branch
1530 dimitri 1.113 & + a_QSWbyATM_cover(I,J)
1531 gforget 1.125 #endif /* SEAICE_GROWTH_LEGACY */
1532 dimitri 1.113 & - ( d_HEFFbyOCNonICE(I,J) +
1533 mlosch 1.153 & d_HSNWbyOCNonSNW(I,J)*SNOW2ICE +
1534 jmc 1.91 & d_HEFFbyNEG(I,J) +
1535 jmc 1.162 #ifdef SEAICE_ALLOW_AREA_RELAXATION
1536 heimbach 1.161 & d_HEFFbyRLX(I,J) +
1537     #endif
1538 mlosch 1.153 & d_HSNWbyNEG(I,J)*SNOW2ICE )
1539 gforget 1.88 & * maskC(I,J,kSurface,bi,bj)
1540     QSW(I,J,bi,bj) = a_QSWbyATM_cover(I,J) + a_QSWbyATM_open(I,J)
1541     ENDDO
1542     ENDDO
1543    
1544 jmc 1.104 C switch heat fluxes from 'effective' ice meters to W/m2
1545 gforget 1.88 C ======================================================
1546 gforget 1.83
1547     DO J=1,sNy
1548     DO I=1,sNx
1549     QNET(I,J,bi,bj) = QNET(I,J,bi,bj)*convertHI2Q
1550     QSW(I,J,bi,bj) = QSW(I,J,bi,bj)*convertHI2Q
1551     ENDDO
1552     ENDDO
1553 jmc 1.91
1554 gforget 1.152 #ifndef SEAICE_DISABLE_HEATCONSFIX
1555     C treat advective heat flux by ocean to ice water exchange (at 0decC)
1556     C ===================================================================
1557 gforget 1.156 # ifdef ALLOW_AUTODIFF_TAMC
1558     CADJ STORE d_HEFFbyNEG = comlev1_bibj,key=iicekey,byte=isbyte
1559     CADJ STORE d_HEFFbyOCNonICE = comlev1_bibj,key=iicekey,byte=isbyte
1560     CADJ STORE d_HEFFbyATMonOCN = comlev1_bibj,key=iicekey,byte=isbyte
1561     CADJ STORE d_HSNWbyNEG = comlev1_bibj,key=iicekey,byte=isbyte
1562     CADJ STORE d_HSNWbyOCNonSNW = comlev1_bibj,key=iicekey,byte=isbyte
1563     CADJ STORE d_HSNWbyATMonSNW = comlev1_bibj,key=iicekey,byte=isbyte
1564     CADJ STORE theta(:,:,kSurface,bi,bj) = comlev1_bibj,
1565     CADJ & key = iicekey, byte = isbyte
1566     # endif /* ALLOW_AUTODIFF_TAMC */
1567 jmc 1.154 IF ( SEAICEheatConsFix ) THEN
1568 jmc 1.143 c Unlike for evap and precip, the temperature of gained/lost
1569 gforget 1.142 c ocean liquid water due to melt/freeze of solid water cannot be chosen
1570 jmc 1.143 c to be e.g. the ocean SST. It must be done at 0degC. The fix below anticipates
1571 gforget 1.142 c on external_forcing_surf.F and applies the correction to QNET.
1572     IF ((convertFW2Salt.EQ.-1.).OR.(temp_EvPrRn.EQ.UNSET_RL)) THEN
1573     c I leave alone the exotic case when onvertFW2Salt.NE.-1 and temp_EvPrRn.NE.UNSET_RL and
1574     c the small error of the synchronous time stepping case (see external_forcing_surf.F).
1575     DO J=1,sNy
1576     DO I=1,sNx
1577 gforget 1.152 #ifdef ALLOW_DIAGNOSTICS
1578 gforget 1.142 c store unaltered QNET for diagnostic purposes
1579 gforget 1.152 DIAGarrayA(I,J)=QNET(I,J,bi,bj)
1580     #endif
1581 gforget 1.142 c compute the ocean water going to ice/snow, in precip units
1582     tmpscal3=rhoConstFresh*maskC(I,J,kSurface,bi,bj)*
1583 mlosch 1.153 & ( d_HSNWbyATMonSNW(I,J)*SNOW2ICE
1584     & + d_HSNWbyOCNonSNW(I,J)*SNOW2ICE
1585 gforget 1.142 & + d_HEFFbyOCNonICE(I,J) + d_HEFFbyATMonOCN(I,J)
1586 mlosch 1.153 & + d_HEFFbyNEG(I,J) + d_HSNWbyNEG(I,J)*SNOW2ICE )
1587 gforget 1.142 & * convertHI2PRECIP
1588     c factor in the heat content that external_forcing_surf.F
1589     c will associate with EMPMR, and remove it from QNET, so that
1590     c melt/freez water is in effect consistently gained/lost at 0degC
1591     IF (temp_EvPrRn.NE.UNSET_RL) THEN
1592     QNET(I,J,bi,bj)=QNET(I,J,bi,bj) - tmpscal3*
1593     & HeatCapacity_Cp * temp_EvPrRn
1594     ELSE
1595     QNET(I,J,bi,bj)=QNET(I,J,bi,bj) - tmpscal3*
1596     & HeatCapacity_Cp * theta(I,J,kSurface,bi,bj)
1597     ENDIF
1598 gforget 1.152 #ifdef ALLOW_DIAGNOSTICS
1599     c back out the eventual TFLUX adjustement and fill diag
1600     DIAGarrayA(I,J)=QNET(I,J,bi,bj)-DIAGarrayA(I,J)
1601     #endif
1602 gforget 1.142 ENDDO
1603     ENDDO
1604 gforget 1.152 ENDIF
1605 gforget 1.142 #ifdef ALLOW_DIAGNOSTICS
1606 gforget 1.152 CALL DIAGNOSTICS_FILL(DIAGarrayA,
1607     & 'SIaaflux',0,1,3,bi,bj,myThid)
1608 gforget 1.142 #endif
1609     ENDIF
1610 jmc 1.162 #endif /* ndef SEAICE_DISABLE_HEATCONSFIX */
1611 gforget 1.142
1612 jmc 1.91 C compute net fresh water flux leaving/entering
1613 gforget 1.88 C the ocean, accounting for fresh/salt water stocks.
1614     C ==================================================
1615    
1616     #ifdef ALLOW_ATM_TEMP
1617     DO J=1,sNy
1618     DO I=1,sNx
1619 mlosch 1.153 tmpscal1= d_HSNWbyATMonSNW(I,J)*SNOW2ICE
1620 mlosch 1.109 & +d_HFRWbyRAIN(I,J)
1621 mlosch 1.153 & +d_HSNWbyOCNonSNW(I,J)*SNOW2ICE
1622 dimitri 1.113 & +d_HEFFbyOCNonICE(I,J)
1623     & +d_HEFFbyATMonOCN(I,J)
1624 mlosch 1.109 & +d_HEFFbyNEG(I,J)
1625 heimbach 1.161 #ifdef SEAICE_ALLOW_AREA_RELAXATION
1626     & +d_HEFFbyRLX(I,J)
1627     #endif
1628 mlosch 1.153 & +d_HSNWbyNEG(I,J)*SNOW2ICE
1629 gforget 1.133 C If r_FWbySublim>0, then it is evaporated from ocean.
1630 gforget 1.125 & +r_FWbySublim(I,J)
1631 gforget 1.88 EmPmR(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*(
1632     & ( EVAP(I,J,bi,bj)-PRECIP(I,J,bi,bj) )
1633     & * ( ONE - AREApreTH(I,J) )
1634     #ifdef ALLOW_RUNOFF
1635     & - RUNOFF(I,J,bi,bj)
1636 mlosch 1.109 #endif /* ALLOW_RUNOFF */
1637 gforget 1.88 & + tmpscal1*convertHI2PRECIP
1638     & )*rhoConstFresh
1639     ENDDO
1640     ENDDO
1641    
1642 heimbach 1.161 #ifdef ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION
1643     C--
1644     DO J=1,sNy
1645     DO I=1,sNx
1646     frWtrAtm(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*(
1647     & PRECIP(I,J,bi,bj)
1648     & - EVAP(I,J,bi,bj)*( ONE - AREApreTH(I,J) )
1649     # ifdef ALLOW_RUNOFF
1650     & + RUNOFF(I,J,bi,bj)
1651     # endif /* ALLOW_RUNOFF */
1652     & )*rhoConstFresh
1653     # ifdef SEAICE_ADD_SUBLIMATION_TO_FWBUDGET
1654     & - a_FWbySublim(I,J)*AREApreTH(I,J)
1655     # endif /* SEAICE_ADD_SUBLIMATION_TO_FWBUDGET */
1656     ENDDO
1657     ENDDO
1658     C--
1659     #else /* ndef ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION */
1660     C--
1661     # ifdef ALLOW_MEAN_SFLUX_COST_CONTRIBUTION
1662 gforget 1.88 DO J=1,sNy
1663     DO I=1,sNx
1664     frWtrAtm(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*(
1665     & PRECIP(I,J,bi,bj)
1666     & - EVAP(I,J,bi,bj)
1667     & *( ONE - AREApreTH(I,J) )
1668 heimbach 1.161 # ifdef ALLOW_RUNOFF
1669 gforget 1.88 & + RUNOFF(I,J,bi,bj)
1670 heimbach 1.161 # endif /* ALLOW_RUNOFF */
1671 gforget 1.88 & )*rhoConstFresh
1672 mlosch 1.153 & - a_FWbySublim(I,J) * SEAICE_rhoIce * recip_deltaTtherm
1673 gforget 1.88 ENDDO
1674     ENDDO
1675 heimbach 1.161 # endif
1676     C--
1677     #endif /* ALLOW_SSH_GLOBMEAN_COST_CONTRIBUTION */
1678    
1679 gforget 1.88 #endif /* ALLOW_ATM_TEMP */
1680    
1681 gforget 1.96 #ifdef SEAICE_DEBUG
1682 mlosch 1.137 CALL PLOT_FIELD_XYRL( QSW,'Current QSW ', myIter, myThid )
1683     CALL PLOT_FIELD_XYRL( QNET,'Current QNET ', myIter, myThid )
1684     CALL PLOT_FIELD_XYRL( EmPmR,'Current EmPmR ', myIter, myThid )
1685 gforget 1.96 #endif /* SEAICE_DEBUG */
1686 gforget 1.88
1687     C Sea Ice Load on the sea surface.
1688     C =================================
1689    
1690 gforget 1.105 #ifdef ALLOW_AUTODIFF_TAMC
1691     CADJ STORE heff(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1692     CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj,key=iicekey,byte=isbyte
1693     #endif /* ALLOW_AUTODIFF_TAMC */
1694    
1695 gforget 1.88 IF ( useRealFreshWaterFlux ) THEN
1696     DO J=1,sNy
1697     DO I=1,sNx
1698 gforget 1.92 #ifdef SEAICE_CAP_ICELOAD
1699     tmpscal1 = HEFF(I,J,bi,bj)*SEAICE_rhoIce
1700     & + HSNOW(I,J,bi,bj)*SEAICE_rhoSnow
1701 jmc 1.160 tmpscal2 = MIN(tmpscal1,heffTooHeavy*rhoConst)
1702 jmc 1.94 #else
1703 gforget 1.92 tmpscal2 = HEFF(I,J,bi,bj)*SEAICE_rhoIce
1704     & + HSNOW(I,J,bi,bj)*SEAICE_rhoSnow
1705     #endif
1706     sIceLoad(i,j,bi,bj) = tmpscal2
1707 gforget 1.88 ENDDO
1708     ENDDO
1709     ENDIF
1710    
1711 gforget 1.125 C ===================================================================
1712     C ======================PART 8: diagnostics==========================
1713     C ===================================================================
1714    
1715     #ifdef ALLOW_DIAGNOSTICS
1716     IF ( useDiagnostics ) THEN
1717 mlosch 1.153 tmpscal1=1. _d 0 * recip_deltaTtherm
1718 gforget 1.130 CALL DIAGNOSTICS_SCALE_FILL(a_QbyATM_cover,
1719     & tmpscal1,1,'SIaQbATC',0,1,3,bi,bj,myThid)
1720     CALL DIAGNOSTICS_SCALE_FILL(a_QbyATM_open,
1721     & tmpscal1,1,'SIaQbATO',0,1,3,bi,bj,myThid)
1722     CALL DIAGNOSTICS_SCALE_FILL(a_QbyOCN,
1723     & tmpscal1,1,'SIaQbOCN',0,1,3,bi,bj,myThid)
1724     CALL DIAGNOSTICS_SCALE_FILL(d_HEFFbyOCNonICE,
1725     & tmpscal1,1,'SIdHbOCN',0,1,3,bi,bj,myThid)
1726     CALL DIAGNOSTICS_SCALE_FILL(d_HEFFbyATMonOCN_cover,
1727     & tmpscal1,1,'SIdHbATC',0,1,3,bi,bj,myThid)
1728     CALL DIAGNOSTICS_SCALE_FILL(d_HEFFbyATMonOCN_open,
1729     & tmpscal1,1,'SIdHbATO',0,1,3,bi,bj,myThid)
1730     CALL DIAGNOSTICS_SCALE_FILL(d_HEFFbyFLOODING,
1731     & tmpscal1,1,'SIdHbFLO',0,1,3,bi,bj,myThid)
1732     CALL DIAGNOSTICS_SCALE_FILL(d_HSNWbyOCNonSNW,
1733     & tmpscal1,1,'SIdSbOCN',0,1,3,bi,bj,myThid)
1734     CALL DIAGNOSTICS_SCALE_FILL(d_HSNWbyATMonSNW,
1735     & tmpscal1,1,'SIdSbATC',0,1,3,bi,bj,myThid)
1736     CALL DIAGNOSTICS_SCALE_FILL(d_AREAbyATM,
1737     & tmpscal1,1,'SIdAbATO',0,1,3,bi,bj,myThid)
1738     CALL DIAGNOSTICS_SCALE_FILL(d_AREAbyICE,
1739     & tmpscal1,1,'SIdAbATC',0,1,3,bi,bj,myThid)
1740     CALL DIAGNOSTICS_SCALE_FILL(d_AREAbyOCN,
1741 jmc 1.134 & tmpscal1,1,'SIdAbOCN',0,1,3,bi,bj,myThid)
1742 gforget 1.125 CALL DIAGNOSTICS_SCALE_FILL(r_QbyATM_open,
1743 gforget 1.130 & convertHI2Q,1, 'SIqneto ',0,1,3,bi,bj,myThid)
1744 gforget 1.125 CALL DIAGNOSTICS_SCALE_FILL(r_QbyATM_cover,
1745 gforget 1.130 & convertHI2Q,1, 'SIqneti ',0,1,3,bi,bj,myThid)
1746 gforget 1.125 C three that actually need intermediate storage
1747     DO J=1,sNy
1748     DO I=1,sNx
1749 jmc 1.134 DIAGarrayA(I,J) = maskC(I,J,kSurface,bi,bj)
1750 mlosch 1.153 & * d_HSNWbyRAIN(I,J)*SEAICE_rhoSnow*recip_deltaTtherm
1751 gforget 1.128 DIAGarrayB(I,J) = AREA(I,J,bi,bj)-AREApreTH(I,J)
1752 gforget 1.125 ENDDO
1753     ENDDO
1754 gforget 1.130 CALL DIAGNOSTICS_FILL(DIAGarrayA,
1755     & 'SIsnPrcp',0,1,3,bi,bj,myThid)
1756     CALL DIAGNOSTICS_SCALE_FILL(DIAGarrayB,
1757     & tmpscal1,1,'SIdA ',0,1,3,bi,bj,myThid)
1758 jmc 1.143 #ifdef ALLOW_ATM_TEMP
1759 gforget 1.132 DO J=1,sNy
1760     DO I=1,sNx
1761 jmc 1.134 CML If I consider the atmosphere above the ice, the surface flux
1762     CML which is relevant for the air temperature dT/dt Eq
1763 gforget 1.132 CML accounts for sensible and radiation (with different treatment
1764     CML according to wave-length) fluxes but not for "latent heat flux",
1765     CML since it does not contribute to heating the air.
1766     CML So this diagnostic is only good for heat budget calculations within
1767     CML the ice-ocean system.
1768     DIAGarrayA(I,J) = maskC(I,J,kSurface,bi,bj)*convertHI2Q*(
1769     #ifndef SEAICE_GROWTH_LEGACY
1770     & a_QSWbyATM_cover(I,J) +
1771 jmc 1.134 #endif /* SEAICE_GROWTH_LEGACY */
1772 gforget 1.132 & a_QbyATM_cover(I,J) + a_QbyATM_open(I,J) )
1773     C
1774     DIAGarrayB(I,J) = maskC(I,J,kSurface,bi,bj) *
1775 mlosch 1.153 & a_FWbySublim(I,J) * SEAICE_rhoIce * recip_deltaTtherm
1776 gforget 1.132 C
1777     DIAGarrayC(I,J) = maskC(I,J,kSurface,bi,bj)*(
1778     & PRECIP(I,J,bi,bj)
1779     & - EVAP(I,J,bi,bj)*( ONE - AREApreTH(I,J) )
1780     #ifdef ALLOW_RUNOFF
1781     & + RUNOFF(I,J,bi,bj)
1782     #endif /* ALLOW_RUNOFF */
1783     & )*rhoConstFresh
1784 mlosch 1.153 & - a_FWbySublim(I,J) * SEAICE_rhoIce * recip_deltaTtherm
1785 gforget 1.132 ENDDO
1786     ENDDO
1787     CALL DIAGNOSTICS_FILL(DIAGarrayA,
1788     & 'SIatmQnt',0,1,3,bi,bj,myThid)
1789     CALL DIAGNOSTICS_FILL(DIAGarrayB,
1790     & 'SIfwSubl',0,1,3,bi,bj,myThid)
1791     CALL DIAGNOSTICS_FILL(DIAGarrayC,
1792     & 'SIatmFW ',0,1,3,bi,bj,myThid)
1793     C
1794 mlosch 1.137 DO J=1,sNy
1795     DO I=1,sNx
1796 jmc 1.134 C the actual Freshwater flux of sublimated ice, >0 decreases ice
1797 mlosch 1.137 DIAGarrayA(I,J) = maskC(I,J,kSurface,bi,bj)
1798 jmc 1.134 & * (a_FWbySublim(I,J)-r_FWbySublim(I,J))
1799 mlosch 1.153 & * SEAICE_rhoIce * recip_deltaTtherm
1800 ifenty 1.135 c the residual Freshwater flux of sublimated ice
1801 mlosch 1.137 DIAGarrayC(I,J) = maskC(I,J,kSurface,bi,bj)
1802 ifenty 1.135 & * r_FWbySublim(I,J)
1803 mlosch 1.153 & * SEAICE_rhoIce * recip_deltaTtherm
1804 gforget 1.132 C the latent heat flux
1805 mlosch 1.137 tmpscal1= EVAP(I,J,bi,bj)*( ONE - AREApreTH(I,J) )
1806     & + r_FWbySublim(I,J)*convertHI2PRECIP
1807     tmpscal2= ( a_FWbySublim(I,J)-r_FWbySublim(I,J) )
1808     & * convertHI2PRECIP
1809     tmpscal3= SEAICE_lhEvap+SEAICE_lhFusion
1810     DIAGarrayB(I,J) = -maskC(I,J,kSurface,bi,bj)*rhoConstFresh
1811     & * ( tmpscal1*SEAICE_lhEvap + tmpscal2*tmpscal3 )
1812     ENDDO
1813 gforget 1.132 ENDDO
1814 mlosch 1.137 CALL DIAGNOSTICS_FILL(DIAGarrayA,'SIacSubl',0,1,3,bi,bj,myThid)
1815     CALL DIAGNOSTICS_FILL(DIAGarrayC,'SIrsSubl',0,1,3,bi,bj,myThid)
1816     CALL DIAGNOSTICS_FILL(DIAGarrayB,'SIhl ',0,1,3,bi,bj,myThid)
1817 gforget 1.142
1818     DO J=1,sNy
1819     DO I=1,sNx
1820     c compute ice/snow water going to atm, in precip units
1821     tmpscal1 = rhoConstFresh*maskC(I,J,kSurface,bi,bj)
1822 mlosch 1.153 & * convertHI2PRECIP * ( - d_HSNWbyRAIN(I,J)*SNOW2ICE
1823 gforget 1.142 & + a_FWbySublim(I,J) - r_FWbySublim(I,J) )
1824     c compute ocean water going to atm, in precip units
1825     tmpscal2=rhoConstFresh*maskC(I,J,kSurface,bi,bj)*
1826     & ( ( EVAP(I,J,bi,bj)-PRECIP(I,J,bi,bj) )
1827 jmc 1.143 & * ( ONE - AREApreTH(I,J) )
1828     #ifdef ALLOW_RUNOFF
1829     & - RUNOFF(I,J,bi,bj)
1830     #endif /* ALLOW_RUNOFF */
1831 gforget 1.142 & + ( d_HFRWbyRAIN(I,J) + r_FWbySublim(I,J) )
1832     & *convertHI2PRECIP )
1833     c factor in the advected specific energy (referenced to 0 for 0deC liquid water)
1834     tmpscal1= - tmpscal1*
1835     & ( -SEAICE_lhFusion + HeatCapacity_Cp * ZERO )
1836     IF (temp_EvPrRn.NE.UNSET_RL) THEN
1837     tmpscal2= - tmpscal2*
1838     & ( ZERO + HeatCapacity_Cp * temp_EvPrRn )
1839     ELSE
1840     tmpscal2= - tmpscal2*
1841     & ( ZERO + HeatCapacity_Cp * theta(I,J,kSurface,bi,bj) )
1842     ENDIF
1843     c add to SIatmQnt, leading to SItflux, which is analogous to TFLUX
1844     DIAGarrayA(I,J)=maskC(I,J,kSurface,bi,bj)*convertHI2Q*(
1845     #ifndef SEAICE_GROWTH_LEGACY
1846     & a_QSWbyATM_cover(I,J) +
1847     #endif
1848     & a_QbyATM_cover(I,J) + a_QbyATM_open(I,J) )
1849     & -tmpscal1-tmpscal2
1850     ENDDO
1851     ENDDO
1852 gforget 1.152 CALL DIAGNOSTICS_FILL(DIAGarrayA,
1853     & 'SItflux ',0,1,3,bi,bj,myThid)
1854 jmc 1.143 #endif /* ALLOW_ATM_TEMP */
1855 gforget 1.142
1856 gforget 1.125 ENDIF
1857 gforget 1.132 #endif /* ALLOW_DIAGNOSTICS */
1858 gforget 1.142
1859 gforget 1.88 C close bi,bj loops
1860 dimitri 1.69 ENDDO
1861     ENDDO
1862 jmc 1.143
1863 dimitri 1.69 RETURN
1864     END

  ViewVC Help
Powered by ViewVC 1.1.22