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

Contents of /MITgcm/pkg/seaice/seaice_solve4temp.F

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


Revision 1.4 - (show annotations) (download)
Mon Sep 27 14:57:42 2010 UTC (13 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint62l
Changes since 1.3: +4 -1 lines
set kSrf=1 (variable freezing point)

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_solve4temp.F,v 1.3 2010/09/26 13:46:28 jmc Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5 #define USE_ORIGINAL_SBI
6
7 CBOP
8 C !ROUTINE: SEAICE_SOLVE4TEMP
9 C !INTERFACE:
10 SUBROUTINE SEAICE_SOLVE4TEMP(
11 I UG, HICE_ACTUAL, HSNOW_ACTUAL,
12 U TSURF,
13 #ifdef SEAICE_ALLOW_TD_IF
14 O F_io_net, F_ia_net,
15 #endif
16 O F_ia, IcePenetSWFlux,
17 I bi, bj, myTime, myIter, myThid )
18
19 C !DESCRIPTION: \bv
20 C *==========================================================*
21 C | SUBROUTINE SOLVE4TEMP
22 C | o Calculate ice growth rate, surface fluxes and
23 C | temperature of ice surface.
24 C | see Hibler, MWR, 108, 1943-1973, 1980
25 C *==========================================================*
26 C \ev
27
28 C !USES:
29 IMPLICIT NONE
30 C === Global variables ===
31 #include "SIZE.h"
32 #include "GRID.h"
33 #include "EEPARAMS.h"
34 #include "PARAMS.h"
35 #include "FFIELDS.h"
36 #include "SEAICE.h"
37 #include "SEAICE_PARAMS.h"
38 #ifdef SEAICE_VARIABLE_FREEZING_POINT
39 #include "DYNVARS.h"
40 #endif /* SEAICE_VARIABLE_FREEZING_POINT */
41 #ifdef ALLOW_EXF
42 # include "EXF_OPTIONS.h"
43 # include "EXF_FIELDS.h"
44 #endif
45
46 C !INPUT/OUTPUT PARAMETERS
47 C === Routine arguments ===
48 C INPUT:
49 C UG :: thermal wind of atmosphere
50 C HICE_ACTUAL :: actual ice thickness
51 C HSNOW_ACTUAL :: actual snow thickness
52 C TSURF :: surface temperature of ice in Kelvin, updated
53 C bi,bj :: loop indices
54 C OUTPUT:
55 C F_io_net :: net upward conductive heat flux through ice at the base of the ice
56 C F_ia_net :: net heat flux divergence at the sea ice/snow surface:
57 C includes ice conductive fluxes and atmospheric fluxes (W/m^2)
58 C F_ia :: upward sea ice/snow surface heat flux to atmosphere (W/m^2)
59 C IcePenetSWFlux :: short wave heat flux under ice
60 _RL UG (1:sNx,1:sNy)
61 _RL HICE_ACTUAL (1:sNx,1:sNy)
62 _RL HSNOW_ACTUAL (1:sNx,1:sNy)
63 _RL TSURF (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
64 _RL F_io_net (1:sNx,1:sNy)
65 _RL F_ia_net (1:sNx,1:sNy)
66 _RL F_ia (1:sNx,1:sNy)
67 _RL IcePenetSWFlux (1:sNx,1:sNy)
68 INTEGER bi, bj
69 _RL myTime
70 INTEGER myIter, myThid
71 CEOP
72
73 C !LOCAL VARIABLES:
74 C === Local variables ===
75 #ifndef USE_ORIGINAL_SBI
76 _RL F_swi (1:sNx,1:sNy)
77 _RL F_lwd (1:sNx,1:sNy)
78 _RL F_lwu (1:sNx,1:sNy)
79 _RL F_lh (1:sNx,1:sNy)
80 _RL F_sens (1:sNx,1:sNy)
81 #endif /* USE_ORIGINAL_SBI */
82 _RL F_c (1:sNx,1:sNy)
83 _RL qhice (1:sNx,1:sNy)
84
85 _RL AbsorbedSWFlux (1:sNx,1:sNy)
86 _RL IcePenetSWFluxFrac (1:sNx,1:sNy)
87
88 C local copies of global variables
89 _RL tsurfLoc (1:sNx,1:sNy)
90 _RL atempLoc (1:sNx,1:sNy)
91 _RL lwdownLoc (1:sNx,1:sNy)
92 _RL ALB (1:sNx,1:sNy)
93 _RL ALB_ICE (1:sNx,1:sNy)
94 _RL ALB_SNOW (1:sNx,1:sNy)
95
96 C i, j :: Loop counters
97 C kSrf :: vertical index of surface layer
98 INTEGER i, j
99 #ifdef SEAICE_VARIABLE_FREEZING_POINT
100 INTEGER kSrf
101 #endif /* SEAICE_VARIABLE_FREEZING_POINT */
102 INTEGER ITER
103
104 _RL TB, D1, D1I, D3
105 _RL TMELT, XKI, XKS, HCUT, XIO
106 _RL SurfMeltTemp
107
108 C Constants to calculate Saturation Vapor Pressure
109 #ifdef USE_ORIGINAL_SBI
110 _RL TMELTP, C1, C2, C3, C4, C5, QS1
111 _RL A2 (1:sNx,1:sNy)
112 _RL A3 (1:sNx,1:sNy)
113 c _RL B (1:sNx,1:sNy)
114 _RL A1 (1:sNx,1:sNy)
115 #else /* USE_ORIGINAL_SBI */
116 _RL dFiDTs1
117 _RL aa1,aa2,bb1,bb2,Ppascals,cc0,cc1,cc2,cc3t
118 C specific humidity at ice surface variables
119 _RL mm_pi,mm_log10pi,dqhice_dTice
120 #endif /* USE_ORIGINAL_SBI */
121
122 C effective conductivity of combined ice and snow
123 _RL effConduct
124
125 C powers of temperature
126 _RL t1, t2, t3, t4
127 _RL TEN
128
129 TEN = 10.0 _d 0
130 #ifdef USE_ORIGINAL_SBI
131 C MAYKUTS CONSTANTS FOR SAT. VAP. PRESSURE TEMP. POLYNOMIAL
132 C1=2.7798202 _d -06
133 C2=-2.6913393 _d -03
134 C3=0.97920849 _d +00
135 C4=-158.63779 _d +00
136 C5=9653.1925 _d +00
137
138 QS1=0.622 _d +00/1013.0 _d +00
139
140 #else /* USE_ORIGINAL_SBI */
141 aa1 = 2663.5 _d 0
142 aa2 = 12.537 _d 0
143 bb1 = 0.622 _d 0
144 bb2 = ONE - bb1
145 Ppascals = 100000. _d 0
146 cc0 = TEN ** aa2
147 cc1 = cc0*aa1*bb1*Ppascals*log(10. _d 0)
148 cc2 = cc0*bb2
149 #endif /* USE_ORIGINAL_SBI */
150
151 C FREEZING TEMPERATURE OF SEAWATER
152 C Use a constant freezing temperature (SEAICE_VARIABLE_FREEZING_POINT undef)
153 #ifdef USE_ORIGINAL_SBI
154 TB=271.2 _d 0
155 #else /* USE_ORIGINAL_SBI */
156 TB = celsius2K + SEAICE_freeze
157 #endif /* USE_ORIGINAL_SBI */
158 #ifdef SEAICE_VARIABLE_FREEZING_POINT
159 kSrf = 1
160 #endif /* SEAICE_VARIABLE_FREEZING_POINT */
161
162 C SENSIBLE HEAT CONSTANT
163 D1=SEAICE_sensHeat
164
165 C ICE LATENT HEAT CONSTANT
166 D1I=SEAICE_latentIce
167
168 C STEFAN BOLTZMAN CONSTANT TIMES 0.97 EMISSIVITY
169 D3=SEAICE_emissivity
170
171 C MELTING TEMPERATURE OF ICE
172 #ifdef USE_ORIGINAL_SBI
173 TMELT=273.16 _d +00
174 TMELTP=273.159 _d +00
175 SurfMeltTemp = TMELTP
176 #else /* USE_ORIGINAL_SBI */
177 TMELT = celsius2K
178 SurfMeltTemp = TMELT
179 #endif /* USE_ORIGINAL_SBI */
180
181 C ICE CONDUCTIVITY
182 XKI=SEAICE_iceConduct
183
184 C SNOW CONDUCTIVITY
185 XKS=SEAICE_snowConduct
186
187 C CUTOFF SNOW THICKNESS
188 HCUT=SEAICE_snowThick
189
190 C PENETRATION SHORTWAVE RADIATION FACTOR
191 XIO=SEAICE_shortwave
192
193 C Initialize variables
194 DO J=1,sNy
195 DO I=1,sNx
196 IcePenetSWFlux (I,J) = 0. _d 0
197 IcePenetSWFluxFrac (I,J) = 0. _d 0
198 AbsorbedSWFlux (I,J) = 0. _d 0
199
200 qhice (I,J) = 0. _d 0
201 F_ia (I,J) = 0. _d 0
202
203 F_io_net (I,J) = 0. _d 0
204 F_ia_net (I,J) = 0. _d 0
205
206 C Reset the snow/ice surface to TMELT and bound the atmospheric temperature
207 #ifdef USE_ORIGINAL_SBI
208 tsurfLoc (I,J) = MIN(273.16 _d 0+MAX_TICE,TSURF(I,J,bi,bj))
209 atempLoc (I,J) = MAX(273.16 _d 0+MIN_ATEMP,ATEMP(I,J,bi,bj))
210 A1(I,J) = ZERO
211 A2(I,J) = ZERO
212 A3(I,J) = ZERO
213 c B(I,J) = ZERO
214 lwdownLoc(I,J) = MAX(MIN_LWDOWN,LWDOWN(I,J,bi,bj))
215 #else /* USE_ORIGINAL_SBI */
216 F_swi (I,J) = 0. _d 0
217 F_lwd (I,J) = 0. _d 0
218 F_lwu (I,J) = 0. _d 0
219 F_lh (I,J) = 0. _d 0
220 F_sens (I,J) = 0. _d 0
221
222 tsurfLoc(I,J) = TSURF(I,J,bi,bj)
223 atempLoc (I,J) = MAX(TMELT + MIN_ATEMP,ATEMP(I,J,bi,bj))
224 lwdownLoc(I,J) = LWDOWN(I,J,bi,bj)
225 #endif /* USE_ORIGINAL_SBI */
226
227 ENDDO
228 ENDDO
229
230 DO J=1,sNy
231 DO I=1,sNx
232
233 C DECIDE ON ALBEDO
234 IF (HICE_ACTUAL(I,J) .GT. ZERO) THEN
235
236 IF ( YC(I,J,bi,bj) .LT. ZERO ) THEN
237 IF (tsurfLoc(I,J) .GE. SurfMeltTemp) THEN
238 ALB_ICE (I,J) = SEAICE_wetIceAlb_south
239 ALB_SNOW(I,J) = SEAICE_wetSnowAlb_south
240 ELSE ! no surface melting
241 ALB_ICE (I,J) = SEAICE_dryIceAlb_south
242 ALB_SNOW(I,J) = SEAICE_drySnowAlb_south
243 ENDIF
244 ELSE !/ Northern Hemisphere
245 IF (tsurfLoc(I,J) .GE. SurfMeltTemp) THEN
246 ALB_ICE (I,J) = SEAICE_wetIceAlb
247 ALB_SNOW(I,J) = SEAICE_wetSnowAlb
248 ELSE ! no surface melting
249 ALB_ICE (I,J) = SEAICE_dryIceAlb
250 ALB_SNOW(I,J) = SEAICE_drySnowAlb
251 ENDIF
252 ENDIF !/ Albedo for snow and ice
253
254 #ifdef USE_ORIGINAL_SBI
255 C If actual snow thickness exceeds the cutoff thickness, use the
256 C snow albedo
257 IF (HSNOW_ACTUAL(I,J) .GT. HCUT) THEN
258 ALB(I,J) = ALB_SNOW(I,J)
259
260 C otherwise, use some combination of ice and snow albedo
261 C (What is the source of this formulation ?)
262 ELSE
263 ALB(I,J) = MIN(ALB_ICE(I,J) + HSNOW_ACTUAL(I,J)/HCUT*
264 & (ALB_SNOW(I,J) -ALB_ICE(I,J)),
265 & ALB_SNOW(I,J))
266 ENDIF
267
268 #else /* USE_ORIGINAL_SBI */
269 IF (HSNOW_ACTUAL(I,J) .GT. ZERO) THEN
270 ALB(I,J) = ALB_SNOW(I,J)
271 ELSE
272 ALB(I,J) = ALB_ICE(I,J)
273 ENDIF
274 #endif /* USE_ORIGINAL_SBI */
275
276 #ifdef USE_ORIGINAL_SBI
277 C NOW DETERMINE FIXED FORCING TERM IN HEAT BUDGET
278
279 #ifdef ALLOW_DOWNWARD_RADIATION
280 IF(HSNOW_ACTUAL(I,J).GT.0.0) THEN
281 C NO SW PENETRATION WITH SNOW
282 A1(I,J)=(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
283 & +lwdownLoc(I,J)*0.97 _d 0
284 & +D1*UG(I,J)*atempLoc(I,J)+D1I*UG(I,J)*AQH(I,J,bi,bj)
285 ELSE
286 C SW PENETRATION UNDER ICE
287 A1(I,J)=(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
288 & *(ONE-XIO*EXP(-1.5 _d 0*HICE_ACTUAL(I,J)))
289 & +lwdownLoc(I,J)*0.97 _d 0
290 & +D1*UG(I,J)*atempLoc(I,J)+D1I*UG(I,J)*AQH(I,J,bi,bj)
291 ENDIF
292 #endif /* ALLOW_DOWNWARD_RADIATION */
293
294 #else /* USE_ORIGINAL_SBI */
295
296 C The longwave radiative flux convergence
297 F_lwd(I,J) = - 0.97 _d 0 * lwdownLoc(I,J)
298
299 C Determine the fraction of shortwave radiative flux
300 C remaining after scattering through the snow and ice at
301 C the ocean interface. If snow is present, no radiation
302 C penetrates to the ocean.
303 IF (HSNOW_ACTUAL(I,J) .GT. ZERO) THEN
304 IcePenetSWFluxFrac(I,J) = ZERO
305 ELSE
306 IcePenetSWFluxFrac(I,J) =
307 & XIO*EXP(-1.5 _d 0 * HICE_ACTUAL(I,J))
308 ENDIF
309
310 C The shortwave radiative flux convergence in the
311 C seaice.
312 AbsorbedSWFlux(I,J) = -(ONE - ALB(I,J))*
313 & (ONE - IcePenetSWFluxFrac(I,J))
314 & *SWDOWN(I,J,bi,bj)
315
316 C The shortwave radiative flux convergence in the
317 C ocean beneath ice.
318 IcePenetSWFlux(I,J) = -(ONE - ALB(I,J))*
319 & IcePenetSWFluxFrac(I,J)
320 & *SWDOWN(I,J,bi,bj)
321
322 F_swi(I,J) = AbsorbedSWFlux(I,J)
323
324 C Set a mininum sea ice thickness of 5 cm to bound
325 C the magnitude of conductive heat fluxes.
326 HICE_ACTUAL(I,J) = max(HICE_ACTUAL(I,J),5. _d -2)
327
328 #endif /* USE_ORIGINAL_SBI */
329
330 #ifdef SEAICE_VARIABLE_FREEZING_POINT
331 C Use a variable seawater freezing point
332 TB = -0.0575 _d 0*salt(I,J,kSrf,bi,bj) + 0.0901 _d 0
333 & + celsius2K
334 #endif /* SEAICE_VARIABLE_FREEZING_POINT */
335
336 C The effective conductivity of the two-layer
337 C snow/ice system.
338 #ifdef USE_ORIGINAL_SBI
339 effConduct=
340 & XKS/(HSNOW_ACTUAL(I,J)/HICE_ACTUAL(I,J) +
341 & XKS/XKI)/HICE_ACTUAL(I,J)
342 #else /* USE_ORIGINAL_SBI */
343 effConduct = XKI * XKS /
344 & (XKS * HICE_ACTUAL(I,J) + XKI * HSNOW_ACTUAL(I,J))
345 #endif /* USE_ORIGINAL_SBI */
346
347 #ifdef SEAICE_DEBUG
348 IF ( (I .EQ. SEAICE_debugPointX) .and.
349 & (J .EQ. SEAICE_debugPointY) ) THEN
350
351 print '(A,i6)','-----------------------------------'
352 print '(A,i6)','ibi merged initialization ', myIter
353
354 print '(A,i6,4(1x,D24.15))',
355 & 'ibi iter, TSL, TS ',myIter,
356 & tsurfLoc(I,J), TSURF(I,J,bi,bj)
357
358 print '(A,i6,4(1x,D24.15))',
359 & 'ibi iter, TMELT ',myIter,TMELT
360
361 print '(A,i6,4(1x,D24.15))',
362 & 'ibi iter, HIA, EFKCON ',myIter,
363 & HICE_ACTUAL(I,J), effConduct
364
365 print '(A,i6,4(1x,D24.15))',
366 & 'ibi iter, HSNOW ',myIter,
367 & HSNOW_ACTUAL(I,J), ALB(I,J)
368
369 print '(A,i6)','-----------------------------------'
370 print '(A,i6)','ibi energy balance iterat ', myIter
371
372 ENDIF
373 #endif /* SEAICE_DEBUG */
374
375 Ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
376 DO ITER=1,IMAX_TICE
377
378 t1 = tsurfLoc(I,J)
379 t2 = t1*t1
380 t3 = t2*t1
381 t4 = t2*t2
382
383 C Calculate the specific humidity in the BL above the snow/ice
384 #ifdef USE_ORIGINAL_SBI
385 C Use the Maykut polynomial
386 qhice(I,J)=QS1*(C1*t4+C2*t3 +C3*t2+C4*t1+C5)
387
388 #else /* USE_ORIGINAL_SBI */
389 C Use an approximation which is more accurate at low temperatures
390
391 C log 10 of the sat vap pressure
392 mm_log10pi = -aa1 / t1 + aa2
393
394 C The saturation vapor pressure (SVP) in the surface
395 C boundary layer (BL) above the snow/ice.
396 mm_pi = TEN **(mm_log10pi)
397
398 qhice(I,J) = bb1*mm_pi / (Ppascals - (ONE - bb1) *
399 & mm_pi)
400 #endif /* USE_ORIGINAL_SBI */
401
402 C Caclulate the flux terms based on the updated tsurfLoc
403 #ifdef USE_ORIGINAL_SBI
404 A2(I,J)=-D1*UG(I,J)*t1-D1I*UG(I,J)*qhice(I,J)-D3*t4
405 A3(I,J) = 4.0 _d 0 * D3 * t3 + effConduct + D1*UG(I,J)
406 F_c(I,J)=-effConduct*(TB-tsurfLoc(I,J))
407 #else /* USE_ORIGINAL_SBI */
408 C A constant for SVP derivative w.r.t TICE
409 cc3t = TEN **(aa1 / t1)
410
411 c d(qh)/d(TICE)
412 dqhice_dTice = cc1*cc3t/((cc2-cc3t*Ppascals)**TWO *t2)
413
414 c d(F_ia)/d(TICE)
415 dFiDTs1 = 4.0 _d 0 * D3*t3 + effConduct + D1*UG(I,J)
416 & + D1I*UG(I,J)*dqhice_dTice
417
418 F_lh(I,J) = D1I*UG(I,J)*(qhice(I,J)-AQH(I,J,bi,bj))
419
420 F_c(I,J) = -effConduct * (TB - t1)
421
422 F_lwu(I,J)= t4 * D3
423
424 F_sens(I,J)= D1 * UG(I,J) * (t1 - atempLoc(I,J))
425
426 F_ia(I,J) = F_lwd(I,J) + F_swi(I,J) + F_lwu(I,J) +
427 & F_c(I,J) + F_sens(I,J) + F_lh(I,J)
428
429 #endif /* USE_ORIGINAL_SBI */
430
431 #ifdef SEAICE_DEBUG
432 IF ( (I .EQ. SEAICE_debugPointX) .and.
433 & (J .EQ. SEAICE_debugPointY) ) THEN
434 print '(A,i6,4(1x,D24.15))',
435 & 'ice-iter qhICE, ', ITER,qhIce(I,J)
436
437 #ifdef USE_ORIGINAL_SBI
438 print '(A,i6,4(1x,D24.15))',
439 & 'ice-iter A1 A2 B ', ITER,A1(I,J), A2(I,J),
440 & -F_c(I,J)
441
442 print '(A,i6,4(1x,D24.15))',
443 & 'ice-iter A3 (-A1+A2) ', ITER, A3(I,J),
444 & -(A1(I,J) + A2(I,J))
445 #else /* USE_ORIGINAL_SBI */
446
447 print '(A,i6,4(1x,D24.15))',
448 & 'ice-iter dFiDTs1 F_ia ', ITER, dFiDTs1,
449 & F_ia(I,J)
450 #endif /* USE_ORIGINAL_SBI */
451
452 ENDIF
453 #endif /* SEAICE_DEBUG */
454
455 C Update tsurfLoc
456 #ifdef USE_ORIGINAL_SBI
457 tsurfLoc(I,J)=tsurfLoc(I,J)
458 & +(A1(I,J)+A2(I,J)-F_c(I,J))/A3(I,J)
459
460 tsurfLoc(I,J) =MAX(273.16 _d 0+MIN_TICE,tsurfLoc(I,J))
461 tsurfLoc(I,J) =MIN(tsurfLoc(I,J),TMELT)
462
463 #else /* USE_ORIGINAL_SBI */
464 tsurfLoc(I,J) = tsurfLoc(I,J) - F_ia(I,J) / dFiDTs1
465
466 C If the search leads to tsurfLoc < 50 Kelvin,
467 C restart the search at tsurfLoc = TMELT. Note that one
468 C solution to the energy balance problem is an
469 C extremely low temperature - a temperature far below
470 C realistic values.
471
472 IF (tsurfLoc(I,J) .LT. 50.0 _d 0 ) THEN
473 tsurfLoc(I,J) = TMELT
474 ENDIF
475 #endif /* USE_ORIGINAL_SBI */
476
477 #ifdef SEAICE_DEBUG
478 IF ( (I .EQ. SEAICE_debugPointX) .and.
479 & (J .EQ. SEAICE_debugPointY) ) THEN
480
481 print '(A,i6,4(1x,D24.15))',
482 & 'ice-iter tsurfLc,|dif|', ITER,
483 & tsurfLoc(I,J),
484 & log10(abs(tsurfLoc(I,J) - t1))
485 ENDIF
486 #endif /* SEAICE_DEBUG */
487
488 ENDDO !/* Iterations */
489 Ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
490
491 C Finalize the flux terms
492 #ifdef USE_ORIGINAL_SBI
493 F_ia(I,J)=-A1(I,J)-A2(I,J)
494 TSURF(I,J,bi,bj)=MIN(tsurfLoc(I,J),TMELT)
495
496 IF (HSNOW_ACTUAL(I,J) .GT. ZERO ) THEN
497 C NO SW PENETRATION WITH SNOW
498 IcePenetSWFlux(I,J)=ZERO
499 ELSE
500 C SW PENETRATION UNDER ICE
501
502 #ifdef ALLOW_DOWNWARD_RADIATION
503 IcePenetSWFlux(I,J)=-(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
504 & *XIO*EXP(-1.5 _d 0*HICE_ACTUAL(I,J))
505 #endif /* ALLOW_DOWNWARD_RADIATION */
506 ENDIF
507
508 #else /* USE_ORIGINAL_SBI */
509 tsurfLoc(I,J) = MIN(tsurfLoc(I,J),TMELT)
510 TSURF(I,J,bi,bj) = tsurfLoc(I,J)
511
512 C Recalculate the fluxes based on the (possibly) adjusted TSURF
513 t1 = tsurfLoc(I,J)
514 t2 = t1*t1
515 t3 = t2*t1
516 t4 = t2*t2
517
518 C log 10 of the sat vap pressure
519 mm_log10pi = -aa1 / t1 + aa2
520
521 C saturation vapor pressure
522 mm_pi = TEN **(mm_log10pi)
523
524 C over ice specific humidity
525 qhice(I,J) = bb1*mm_pi/(Ppascals- (ONE - bb1) * mm_pi)
526
527 F_lh(I,J) = D1I * UG(I,J)*(qhice(I,J)-AQH(I,J,bi,bj))
528 F_c(I,J) = -effConduct * (TB - t1)
529 F_lwu(I,J) = t4 * D3
530 F_sens(I,J) = D1 * UG(I,J) * (t1 - atempLoc(I,J))
531
532 C The flux between the ice/snow surface and the atmosphere.
533 C (excludes upward conductive fluxes)
534 F_ia(I,J) = F_lwd(I,J) + F_swi(I,J) + F_lwu(I,J) +
535 & F_sens(I,J) + F_lh(I,J)
536 #endif /* USE_ORIGINAL_SBI */
537
538 C Caclulate the net ice-ocean and ice-atmosphere fluxes
539 IF (F_c(I,J) .LT. ZERO) THEN
540 F_io_net(I,J) = -F_c(I,J)
541 F_ia_net(I,J) = ZERO
542 ELSE
543 F_io_net(I,J) = ZERO
544 F_ia_net(I,J) = F_ia(I,J)
545 ENDIF !/* conductive fluxes up or down */
546
547 #ifdef SEAICE_DEBUG
548 IF ( (I .EQ. SEAICE_debugPointX) .and.
549 & (J .EQ. SEAICE_debugPointY) ) THEN
550
551 print '(A)','----------------------------------------'
552 print '(A,i6)','ibi complete ', myIter
553
554 print '(A,4(1x,D24.15))',
555 & 'ibi T(SURF, surfLoc,atmos) ',
556 & TSURF(I,J,bi,bj), tsurfLoc(I,J),atempLoc(I,J)
557
558 print '(A,4(1x,D24.15))',
559 & 'ibi LWL ', lwdownLoc(I,J)
560
561 print '(A,4(1x,D24.15))',
562 & 'ibi QSW(Total, Penetrating)',
563 & SWDOWN(I,J,bi,bj), IcePenetSWFlux(I,J)
564
565 print '(A,4(1x,D24.15))',
566 & 'ibi qh(ATM ICE) ',
567 & AQH(I,J,bi,bj),qhice(I,J)
568
569 c print '(A,4(1x,D24.15))',
570 c & 'ibi F(lwd,swi,lwu) ',
571 c & F_lwd(I,J), F_swi(I,J), F_lwu(I,J)
572
573 c print '(A,4(1x,D24.15))',
574 c & 'ibi F(c,lh,sens) ',
575 c & F_c(I,J), F_lh(I,J), F_sens(I,J)
576
577 print '(A,4(1x,D24.15))',
578 & 'ibi F_ia, F_ia_net, F_c ',
579 #ifdef USE_ORIGINAL_SBI
580 & -(A1(I,J)+A2(I,J)),
581 & -(A1(I,J)+A2(I,J)-F_c(I,J)),
582 & F_c(I,J)
583 #else /* USE_ORIGINAL_SBI */
584 & F_ia(I,J),
585 & F_ia_net(I,J),
586 & F_c(I,J)
587 #endif /* USE_ORIGINAL_SBI */
588
589 print '(A)','----------------------------------------'
590
591 ENDIF
592 #endif /* SEAICE_DEBUG */
593
594 ENDIF !/* HICE_ACTUAL > 0 */
595
596 ENDDO !/* i */
597 ENDDO !/* j */
598
599 RETURN
600 END

  ViewVC Help
Powered by ViewVC 1.1.22