/[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.3 - (show annotations) (download)
Sun Sep 26 13:46:28 2010 UTC (13 years, 8 months ago) by jmc
Branch: MAIN
Changes since 1.2: +65 -65 lines
-fix the USE_ORIGINAL_SBI version (for variable freezing point);
-use "celsius2K" in SEAICE_VARIABLE_FREEZING_POINT and in new
 version (USE_ORIGINAL_SBI undef);
-clean-up unused variables;

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_solve4temp.F,v 1.2 2010/09/24 13:52:07 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
159 C SENSIBLE HEAT CONSTANT
160 D1=SEAICE_sensHeat
161
162 C ICE LATENT HEAT CONSTANT
163 D1I=SEAICE_latentIce
164
165 C STEFAN BOLTZMAN CONSTANT TIMES 0.97 EMISSIVITY
166 D3=SEAICE_emissivity
167
168 C MELTING TEMPERATURE OF ICE
169 #ifdef USE_ORIGINAL_SBI
170 TMELT=273.16 _d +00
171 TMELTP=273.159 _d +00
172 SurfMeltTemp = TMELTP
173 #else /* USE_ORIGINAL_SBI */
174 TMELT = celsius2K
175 SurfMeltTemp = TMELT
176 #endif /* USE_ORIGINAL_SBI */
177
178 C ICE CONDUCTIVITY
179 XKI=SEAICE_iceConduct
180
181 C SNOW CONDUCTIVITY
182 XKS=SEAICE_snowConduct
183
184 C CUTOFF SNOW THICKNESS
185 HCUT=SEAICE_snowThick
186
187 C PENETRATION SHORTWAVE RADIATION FACTOR
188 XIO=SEAICE_shortwave
189
190 C Initialize variables
191 DO J=1,sNy
192 DO I=1,sNx
193 IcePenetSWFlux (I,J) = 0. _d 0
194 IcePenetSWFluxFrac (I,J) = 0. _d 0
195 AbsorbedSWFlux (I,J) = 0. _d 0
196
197 qhice (I,J) = 0. _d 0
198 F_ia (I,J) = 0. _d 0
199
200 F_io_net (I,J) = 0. _d 0
201 F_ia_net (I,J) = 0. _d 0
202
203 C Reset the snow/ice surface to TMELT and bound the atmospheric temperature
204 #ifdef USE_ORIGINAL_SBI
205 tsurfLoc (I,J) = MIN(273.16 _d 0+MAX_TICE,TSURF(I,J,bi,bj))
206 atempLoc (I,J) = MAX(273.16 _d 0+MIN_ATEMP,ATEMP(I,J,bi,bj))
207 A1(I,J) = ZERO
208 A2(I,J) = ZERO
209 A3(I,J) = ZERO
210 c B(I,J) = ZERO
211 lwdownLoc(I,J) = MAX(MIN_LWDOWN,LWDOWN(I,J,bi,bj))
212 #else /* USE_ORIGINAL_SBI */
213 F_swi (I,J) = 0. _d 0
214 F_lwd (I,J) = 0. _d 0
215 F_lwu (I,J) = 0. _d 0
216 F_lh (I,J) = 0. _d 0
217 F_sens (I,J) = 0. _d 0
218
219 tsurfLoc(I,J) = TSURF(I,J,bi,bj)
220 atempLoc (I,J) = MAX(TMELT + MIN_ATEMP,ATEMP(I,J,bi,bj))
221 lwdownLoc(I,J) = LWDOWN(I,J,bi,bj)
222 #endif /* USE_ORIGINAL_SBI */
223
224 ENDDO
225 ENDDO
226
227 DO J=1,sNy
228 DO I=1,sNx
229
230 C DECIDE ON ALBEDO
231 IF (HICE_ACTUAL(I,J) .GT. ZERO) THEN
232
233 IF ( YC(I,J,bi,bj) .LT. ZERO ) THEN
234 IF (tsurfLoc(I,J) .GE. SurfMeltTemp) THEN
235 ALB_ICE (I,J) = SEAICE_wetIceAlb_south
236 ALB_SNOW(I,J) = SEAICE_wetSnowAlb_south
237 ELSE ! no surface melting
238 ALB_ICE (I,J) = SEAICE_dryIceAlb_south
239 ALB_SNOW(I,J) = SEAICE_drySnowAlb_south
240 ENDIF
241 ELSE !/ Northern Hemisphere
242 IF (tsurfLoc(I,J) .GE. SurfMeltTemp) THEN
243 ALB_ICE (I,J) = SEAICE_wetIceAlb
244 ALB_SNOW(I,J) = SEAICE_wetSnowAlb
245 ELSE ! no surface melting
246 ALB_ICE (I,J) = SEAICE_dryIceAlb
247 ALB_SNOW(I,J) = SEAICE_drySnowAlb
248 ENDIF
249 ENDIF !/ Albedo for snow and ice
250
251 #ifdef USE_ORIGINAL_SBI
252 C If actual snow thickness exceeds the cutoff thickness, use the
253 C snow albedo
254 IF (HSNOW_ACTUAL(I,J) .GT. HCUT) THEN
255 ALB(I,J) = ALB_SNOW(I,J)
256
257 C otherwise, use some combination of ice and snow albedo
258 C (What is the source of this formulation ?)
259 ELSE
260 ALB(I,J) = MIN(ALB_ICE(I,J) + HSNOW_ACTUAL(I,J)/HCUT*
261 & (ALB_SNOW(I,J) -ALB_ICE(I,J)),
262 & ALB_SNOW(I,J))
263 ENDIF
264
265 #else /* USE_ORIGINAL_SBI */
266 IF (HSNOW_ACTUAL(I,J) .GT. ZERO) THEN
267 ALB(I,J) = ALB_SNOW(I,J)
268 ELSE
269 ALB(I,J) = ALB_ICE(I,J)
270 ENDIF
271 #endif /* USE_ORIGINAL_SBI */
272
273 #ifdef USE_ORIGINAL_SBI
274 C NOW DETERMINE FIXED FORCING TERM IN HEAT BUDGET
275
276 #ifdef ALLOW_DOWNWARD_RADIATION
277 IF(HSNOW_ACTUAL(I,J).GT.0.0) THEN
278 C NO SW PENETRATION WITH SNOW
279 A1(I,J)=(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
280 & +lwdownLoc(I,J)*0.97 _d 0
281 & +D1*UG(I,J)*atempLoc(I,J)+D1I*UG(I,J)*AQH(I,J,bi,bj)
282 ELSE
283 C SW PENETRATION UNDER ICE
284 A1(I,J)=(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
285 & *(ONE-XIO*EXP(-1.5 _d 0*HICE_ACTUAL(I,J)))
286 & +lwdownLoc(I,J)*0.97 _d 0
287 & +D1*UG(I,J)*atempLoc(I,J)+D1I*UG(I,J)*AQH(I,J,bi,bj)
288 ENDIF
289 #endif /* ALLOW_DOWNWARD_RADIATION */
290
291 #else /* USE_ORIGINAL_SBI */
292
293 C The longwave radiative flux convergence
294 F_lwd(I,J) = - 0.97 _d 0 * lwdownLoc(I,J)
295
296 C Determine the fraction of shortwave radiative flux
297 C remaining after scattering through the snow and ice at
298 C the ocean interface. If snow is present, no radiation
299 C penetrates to the ocean.
300 IF (HSNOW_ACTUAL(I,J) .GT. ZERO) THEN
301 IcePenetSWFluxFrac(I,J) = ZERO
302 ELSE
303 IcePenetSWFluxFrac(I,J) =
304 & XIO*EXP(-1.5 _d 0 * HICE_ACTUAL(I,J))
305 ENDIF
306
307 C The shortwave radiative flux convergence in the
308 C seaice.
309 AbsorbedSWFlux(I,J) = -(ONE - ALB(I,J))*
310 & (ONE - IcePenetSWFluxFrac(I,J))
311 & *SWDOWN(I,J,bi,bj)
312
313 C The shortwave radiative flux convergence in the
314 C ocean beneath ice.
315 IcePenetSWFlux(I,J) = -(ONE - ALB(I,J))*
316 & IcePenetSWFluxFrac(I,J)
317 & *SWDOWN(I,J,bi,bj)
318
319 F_swi(I,J) = AbsorbedSWFlux(I,J)
320
321 C Set a mininum sea ice thickness of 5 cm to bound
322 C the magnitude of conductive heat fluxes.
323 HICE_ACTUAL(I,J) = max(HICE_ACTUAL(I,J),5. _d -2)
324
325 #endif /* USE_ORIGINAL_SBI */
326
327 #ifdef SEAICE_VARIABLE_FREEZING_POINT
328 C Use a variable seawater freezing point
329 TB = -0.0575 _d 0*salt(I,J,kSrf,bi,bj) + 0.0901 _d 0
330 & + celsius2K
331 #endif /* SEAICE_VARIABLE_FREEZING_POINT */
332
333 C The effective conductivity of the two-layer
334 C snow/ice system.
335 #ifdef USE_ORIGINAL_SBI
336 effConduct=
337 & XKS/(HSNOW_ACTUAL(I,J)/HICE_ACTUAL(I,J) +
338 & XKS/XKI)/HICE_ACTUAL(I,J)
339 #else /* USE_ORIGINAL_SBI */
340 effConduct = XKI * XKS /
341 & (XKS * HICE_ACTUAL(I,J) + XKI * HSNOW_ACTUAL(I,J))
342 #endif /* USE_ORIGINAL_SBI */
343
344 #ifdef SEAICE_DEBUG
345 IF ( (I .EQ. SEAICE_debugPointX) .and.
346 & (J .EQ. SEAICE_debugPointY) ) THEN
347
348 print '(A,i6)','-----------------------------------'
349 print '(A,i6)','ibi merged initialization ', myIter
350
351 print '(A,i6,4(1x,D24.15))',
352 & 'ibi iter, TSL, TS ',myIter,
353 & tsurfLoc(I,J), TSURF(I,J,bi,bj)
354
355 print '(A,i6,4(1x,D24.15))',
356 & 'ibi iter, TMELT ',myIter,TMELT
357
358 print '(A,i6,4(1x,D24.15))',
359 & 'ibi iter, HIA, EFKCON ',myIter,
360 & HICE_ACTUAL(I,J), effConduct
361
362 print '(A,i6,4(1x,D24.15))',
363 & 'ibi iter, HSNOW ',myIter,
364 & HSNOW_ACTUAL(I,J), ALB(I,J)
365
366 print '(A,i6)','-----------------------------------'
367 print '(A,i6)','ibi energy balance iterat ', myIter
368
369 ENDIF
370 #endif /* SEAICE_DEBUG */
371
372 Ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
373 DO ITER=1,IMAX_TICE
374
375 t1 = tsurfLoc(I,J)
376 t2 = t1*t1
377 t3 = t2*t1
378 t4 = t2*t2
379
380 C Calculate the specific humidity in the BL above the snow/ice
381 #ifdef USE_ORIGINAL_SBI
382 C Use the Maykut polynomial
383 qhice(I,J)=QS1*(C1*t4+C2*t3 +C3*t2+C4*t1+C5)
384
385 #else /* USE_ORIGINAL_SBI */
386 C Use an approximation which is more accurate at low temperatures
387
388 C log 10 of the sat vap pressure
389 mm_log10pi = -aa1 / t1 + aa2
390
391 C The saturation vapor pressure (SVP) in the surface
392 C boundary layer (BL) above the snow/ice.
393 mm_pi = TEN **(mm_log10pi)
394
395 qhice(I,J) = bb1*mm_pi / (Ppascals - (ONE - bb1) *
396 & mm_pi)
397 #endif /* USE_ORIGINAL_SBI */
398
399 C Caclulate the flux terms based on the updated tsurfLoc
400 #ifdef USE_ORIGINAL_SBI
401 A2(I,J)=-D1*UG(I,J)*t1-D1I*UG(I,J)*qhice(I,J)-D3*t4
402 A3(I,J) = 4.0 _d 0 * D3 * t3 + effConduct + D1*UG(I,J)
403 F_c(I,J)=-effConduct*(TB-tsurfLoc(I,J))
404 #else /* USE_ORIGINAL_SBI */
405 C A constant for SVP derivative w.r.t TICE
406 cc3t = TEN **(aa1 / t1)
407
408 c d(qh)/d(TICE)
409 dqhice_dTice = cc1*cc3t/((cc2-cc3t*Ppascals)**TWO *t2)
410
411 c d(F_ia)/d(TICE)
412 dFiDTs1 = 4.0 _d 0 * D3*t3 + effConduct + D1*UG(I,J)
413 & + D1I*UG(I,J)*dqhice_dTice
414
415 F_lh(I,J) = D1I*UG(I,J)*(qhice(I,J)-AQH(I,J,bi,bj))
416
417 F_c(I,J) = -effConduct * (TB - t1)
418
419 F_lwu(I,J)= t4 * D3
420
421 F_sens(I,J)= D1 * UG(I,J) * (t1 - atempLoc(I,J))
422
423 F_ia(I,J) = F_lwd(I,J) + F_swi(I,J) + F_lwu(I,J) +
424 & F_c(I,J) + F_sens(I,J) + F_lh(I,J)
425
426 #endif /* USE_ORIGINAL_SBI */
427
428 #ifdef SEAICE_DEBUG
429 IF ( (I .EQ. SEAICE_debugPointX) .and.
430 & (J .EQ. SEAICE_debugPointY) ) THEN
431 print '(A,i6,4(1x,D24.15))',
432 & 'ice-iter qhICE, ', ITER,qhIce(I,J)
433
434 #ifdef USE_ORIGINAL_SBI
435 print '(A,i6,4(1x,D24.15))',
436 & 'ice-iter A1 A2 B ', ITER,A1(I,J), A2(I,J),
437 & -F_c(I,J)
438
439 print '(A,i6,4(1x,D24.15))',
440 & 'ice-iter A3 (-A1+A2) ', ITER, A3(I,J),
441 & -(A1(I,J) + A2(I,J))
442 #else /* USE_ORIGINAL_SBI */
443
444 print '(A,i6,4(1x,D24.15))',
445 & 'ice-iter dFiDTs1 F_ia ', ITER, dFiDTs1,
446 & F_ia(I,J)
447 #endif /* USE_ORIGINAL_SBI */
448
449 ENDIF
450 #endif /* SEAICE_DEBUG */
451
452 C Update tsurfLoc
453 #ifdef USE_ORIGINAL_SBI
454 tsurfLoc(I,J)=tsurfLoc(I,J)
455 & +(A1(I,J)+A2(I,J)-F_c(I,J))/A3(I,J)
456
457 tsurfLoc(I,J) =MAX(273.16 _d 0+MIN_TICE,tsurfLoc(I,J))
458 tsurfLoc(I,J) =MIN(tsurfLoc(I,J),TMELT)
459
460 #else /* USE_ORIGINAL_SBI */
461 tsurfLoc(I,J) = tsurfLoc(I,J) - F_ia(I,J) / dFiDTs1
462
463 C If the search leads to tsurfLoc < 50 Kelvin,
464 C restart the search at tsurfLoc = TMELT. Note that one
465 C solution to the energy balance problem is an
466 C extremely low temperature - a temperature far below
467 C realistic values.
468
469 IF (tsurfLoc(I,J) .LT. 50.0 _d 0 ) THEN
470 tsurfLoc(I,J) = TMELT
471 ENDIF
472 #endif /* USE_ORIGINAL_SBI */
473
474 #ifdef SEAICE_DEBUG
475 IF ( (I .EQ. SEAICE_debugPointX) .and.
476 & (J .EQ. SEAICE_debugPointY) ) THEN
477
478 print '(A,i6,4(1x,D24.15))',
479 & 'ice-iter tsurfLc,|dif|', ITER,
480 & tsurfLoc(I,J),
481 & log10(abs(tsurfLoc(I,J) - t1))
482 ENDIF
483 #endif /* SEAICE_DEBUG */
484
485 ENDDO !/* Iterations */
486 Ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
487
488 C Finalize the flux terms
489 #ifdef USE_ORIGINAL_SBI
490 F_ia(I,J)=-A1(I,J)-A2(I,J)
491 TSURF(I,J,bi,bj)=MIN(tsurfLoc(I,J),TMELT)
492
493 IF (HSNOW_ACTUAL(I,J) .GT. ZERO ) THEN
494 C NO SW PENETRATION WITH SNOW
495 IcePenetSWFlux(I,J)=ZERO
496 ELSE
497 C SW PENETRATION UNDER ICE
498
499 #ifdef ALLOW_DOWNWARD_RADIATION
500 IcePenetSWFlux(I,J)=-(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj)
501 & *XIO*EXP(-1.5 _d 0*HICE_ACTUAL(I,J))
502 #endif /* ALLOW_DOWNWARD_RADIATION */
503 ENDIF
504
505 #else /* USE_ORIGINAL_SBI */
506 tsurfLoc(I,J) = MIN(tsurfLoc(I,J),TMELT)
507 TSURF(I,J,bi,bj) = tsurfLoc(I,J)
508
509 C Recalculate the fluxes based on the (possibly) adjusted TSURF
510 t1 = tsurfLoc(I,J)
511 t2 = t1*t1
512 t3 = t2*t1
513 t4 = t2*t2
514
515 C log 10 of the sat vap pressure
516 mm_log10pi = -aa1 / t1 + aa2
517
518 C saturation vapor pressure
519 mm_pi = TEN **(mm_log10pi)
520
521 C over ice specific humidity
522 qhice(I,J) = bb1*mm_pi/(Ppascals- (ONE - bb1) * mm_pi)
523
524 F_lh(I,J) = D1I * UG(I,J)*(qhice(I,J)-AQH(I,J,bi,bj))
525 F_c(I,J) = -effConduct * (TB - t1)
526 F_lwu(I,J) = t4 * D3
527 F_sens(I,J) = D1 * UG(I,J) * (t1 - atempLoc(I,J))
528
529 C The flux between the ice/snow surface and the atmosphere.
530 C (excludes upward conductive fluxes)
531 F_ia(I,J) = F_lwd(I,J) + F_swi(I,J) + F_lwu(I,J) +
532 & F_sens(I,J) + F_lh(I,J)
533 #endif /* USE_ORIGINAL_SBI */
534
535 C Caclulate the net ice-ocean and ice-atmosphere fluxes
536 IF (F_c(I,J) .LT. ZERO) THEN
537 F_io_net(I,J) = -F_c(I,J)
538 F_ia_net(I,J) = ZERO
539 ELSE
540 F_io_net(I,J) = ZERO
541 F_ia_net(I,J) = F_ia(I,J)
542 ENDIF !/* conductive fluxes up or down */
543
544 #ifdef SEAICE_DEBUG
545 IF ( (I .EQ. SEAICE_debugPointX) .and.
546 & (J .EQ. SEAICE_debugPointY) ) THEN
547
548 print '(A)','----------------------------------------'
549 print '(A,i6)','ibi complete ', myIter
550
551 print '(A,4(1x,D24.15))',
552 & 'ibi T(SURF, surfLoc,atmos) ',
553 & TSURF(I,J,bi,bj), tsurfLoc(I,J),atempLoc(I,J)
554
555 print '(A,4(1x,D24.15))',
556 & 'ibi LWL ', lwdownLoc(I,J)
557
558 print '(A,4(1x,D24.15))',
559 & 'ibi QSW(Total, Penetrating)',
560 & SWDOWN(I,J,bi,bj), IcePenetSWFlux(I,J)
561
562 print '(A,4(1x,D24.15))',
563 & 'ibi qh(ATM ICE) ',
564 & AQH(I,J,bi,bj),qhice(I,J)
565
566 c print '(A,4(1x,D24.15))',
567 c & 'ibi F(lwd,swi,lwu) ',
568 c & F_lwd(I,J), F_swi(I,J), F_lwu(I,J)
569
570 c print '(A,4(1x,D24.15))',
571 c & 'ibi F(c,lh,sens) ',
572 c & F_c(I,J), F_lh(I,J), F_sens(I,J)
573
574 print '(A,4(1x,D24.15))',
575 & 'ibi F_ia, F_ia_net, F_c ',
576 #ifdef USE_ORIGINAL_SBI
577 & -(A1(I,J)+A2(I,J)),
578 & -(A1(I,J)+A2(I,J)-F_c(I,J)),
579 & F_c(I,J)
580 #else /* USE_ORIGINAL_SBI */
581 & F_ia(I,J),
582 & F_ia_net(I,J),
583 & F_c(I,J)
584 #endif /* USE_ORIGINAL_SBI */
585
586 print '(A)','----------------------------------------'
587
588 ENDIF
589 #endif /* SEAICE_DEBUG */
590
591 ENDIF !/* HICE_ACTUAL > 0 */
592
593 ENDDO !/* i */
594 ENDDO !/* j */
595
596 RETURN
597 END

  ViewVC Help
Powered by ViewVC 1.1.22