1 |
C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_growth.F,v 1.10 2007/01/09 13:33:49 mlosch Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "SEAICE_OPTIONS.h" |
5 |
|
6 |
C StartOfInterface |
7 |
SUBROUTINE SEAICE_GROWTH( myTime, myIter, myThid ) |
8 |
C /==========================================================\ |
9 |
C | SUBROUTINE seaice_growth | |
10 |
C | o Updata ice thickness and snow depth | |
11 |
C |==========================================================| |
12 |
C \==========================================================/ |
13 |
IMPLICIT NONE |
14 |
|
15 |
C === Global variables === |
16 |
#include "SIZE.h" |
17 |
#include "EEPARAMS.h" |
18 |
#include "PARAMS.h" |
19 |
#include "DYNVARS.h" |
20 |
#include "GRID.h" |
21 |
#include "FFIELDS.h" |
22 |
#include "SEAICE_PARAMS.h" |
23 |
#include "SEAICE.h" |
24 |
#include "SEAICE_FFIELDS.h" |
25 |
|
26 |
#ifdef ALLOW_AUTODIFF_TAMC |
27 |
# include "tamc.h" |
28 |
#endif |
29 |
C === Routine arguments === |
30 |
C myTime - Simulation time |
31 |
C myIter - Simulation timestep number |
32 |
C myThid - Thread no. that called this routine. |
33 |
_RL myTime |
34 |
INTEGER myIter, myThid |
35 |
C EndOfInterface(global-font-lock-mode 1) |
36 |
|
37 |
C === Local variables === |
38 |
C i,j,bi,bj - Loop counters |
39 |
|
40 |
INTEGER i, j, bi, bj |
41 |
C number of surface interface layer |
42 |
INTEGER kSurface |
43 |
|
44 |
C constants |
45 |
_RL TBC, salinity_ice, SDF, ICE2WATR, ICE2SNOW |
46 |
|
47 |
#ifdef ALLOW_SEAICE_FLOODING |
48 |
_RL hDraft, hFlood |
49 |
#endif /* ALLOW_SEAICE_FLOODING */ |
50 |
|
51 |
C QNETI - net surface heat flux under ice in W/m^2 |
52 |
C QSWO - short wave heat flux over ocean in W/m^2 |
53 |
C QSWI - short wave heat flux under ice in W/m^2 |
54 |
|
55 |
_RL QNETI (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
56 |
_RL QSWO (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
57 |
_RL QSWI (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
58 |
|
59 |
_RL QSWO_IN_FIRST_LAYER |
60 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
61 |
_RL QSWO_BELOW_FIRST_LAYER |
62 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
63 |
|
64 |
_RL QSW_absorb_in_ML (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
65 |
_RL QSW_absorb_below_ML (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
66 |
|
67 |
C actual ice thickness with upper and lower limit |
68 |
_RL HICE_ACTUAL (1-OLx:sNx+OLx, 1-OLy:sNy+OLy) |
69 |
|
70 |
C actual snow thickness |
71 |
_RL HSNOW_ACTUAL(1-OLx:sNx+OLx, 1-OLy:sNy+OLy) |
72 |
|
73 |
C wind speed |
74 |
_RL UG (1-OLx:sNx+OLx, 1-OLy:sNy+OLy) |
75 |
_RL SPEED_SQ |
76 |
|
77 |
C IAN |
78 |
_RL RHOI, RHOFW,CPW,LI,QI,QS,GAMMAT,GAMMA,RHOSW,RHOSN |
79 |
_RL FL_C1,FL_C2,FL_C3,FL_C4,deltaHS,deltaHI |
80 |
|
81 |
_RL NetExistingIceGrowthRate (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
82 |
_RL IceGrowthRateUnderExistingIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
83 |
_RL IceGrowthRateFromSurface (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
84 |
_RL IceGrowthRateOpenWater (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
85 |
_RL IceGrowthRateMixedLayer (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
86 |
|
87 |
_RL PredictedTemperatureChange |
88 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
89 |
_RL PredictedTemperatureChangeFromQSW |
90 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
91 |
_RL PredictedTemperatureChangeFromOA_MQNET |
92 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
93 |
_RL PredictedTemperatureChangeFromFIA |
94 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
95 |
_RL PredictedTemperatureChangeFromNewIceVol |
96 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
97 |
_RL PredictedTemperatureChangeFromF_IA_NET |
98 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
99 |
_RL PredictedTemperatureChangeFromF_IO_NET |
100 |
& (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
101 |
|
102 |
_RL ExpectedIceVolumeChange (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
103 |
_RL ExpectedSnowVolumeChange (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
104 |
_RL ActualNewTotalVolumeChange(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
105 |
_RL ActualNewTotalSnowMelt(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
106 |
|
107 |
_RL EnergyInNewTotalIceVolume (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
108 |
_RL NetEnergyFluxOutOfSystem (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
109 |
|
110 |
_RL ResidualHeatOutOfSystem (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
111 |
|
112 |
_RL SnowAccumulationRateOverIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
113 |
_RL SnowAccumulationOverIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
114 |
_RL PrecipRateOverIceSurfaceToSea (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
115 |
|
116 |
_RL PotSnowMeltRateFromSurf (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
117 |
_RL PotSnowMeltFromSurf (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
118 |
_RL SnowMeltFromSurface (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
119 |
_RL SnowMeltRateFromSurface (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
120 |
|
121 |
_RL FreshwaterContribFromSnowMelt (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
122 |
_RL FreshwaterContribFromIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
123 |
|
124 |
_RL SurfHeatFluxConvergToSnowMelt (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
125 |
_RL EnergyToMeltSnowAndIce (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
126 |
_RL EnergyToMeltSnowAndIce2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
127 |
|
128 |
C dA/dt = S_a |
129 |
_RL S_a (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
130 |
C dh/dt = S_h |
131 |
_RL S_h (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
132 |
_RL S_hsnow (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
133 |
_RL HSNOW_ORIG (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
134 |
|
135 |
C F_ia - heat flux from ice to atmosphere (W/m^2) |
136 |
C >0 causes ice growth, <0 causes snow and sea ice melt |
137 |
_RL F_ia (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
138 |
_RL F_ia_net (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
139 |
_RL F_ia_net_before_snow (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
140 |
_RL F_io_net (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
141 |
|
142 |
C F_ao - heat flux from atmosphere to ocean (W/m^2) |
143 |
_RL F_ao (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
144 |
|
145 |
C F_mi - heat flux from mixed layer to ice (W/m^2) |
146 |
_RL F_mi (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
147 |
|
148 |
c INTEGER IMAX |
149 |
c _RL FACTORM |
150 |
|
151 |
_RL FLUX_TO_DELTA_TEMP,ENERGY_TO_DELTA_TEMP |
152 |
|
153 |
if ( buoyancyRelation .eq. 'OCEANICP' ) then |
154 |
kSurface = Nr |
155 |
else |
156 |
kSurface = 1 |
157 |
endif |
158 |
|
159 |
FLUX_TO_DELTA_TEMP = SEAICE_deltaTtherm* |
160 |
& recip_Cp*recip_rhoConst * recip_drF(1) |
161 |
|
162 |
ENERGY_TO_DELTA_TEMP = recip_Cp*recip_rhoConst*recip_drF(1) |
163 |
|
164 |
C ICE SALINITY (g/kg) |
165 |
salinity_ice = 4.0 |
166 |
|
167 |
C FREEZING TEMP. OF SEA WATER (deg C) |
168 |
TBC = SEAICE_freeze |
169 |
|
170 |
C IAN |
171 |
|
172 |
c Sea ice density (kg m^-3) |
173 |
RHOI = 917.0 |
174 |
|
175 |
c Seawater density (kg m^-3) |
176 |
RHOSW = 1026.0 |
177 |
|
178 |
c Freshwater density (KG M^-3) |
179 |
RHOFW = 1000.0 |
180 |
|
181 |
C Snow density |
182 |
RHOSN = 330.0 |
183 |
|
184 |
C Heat capacity of seawater (J m^-3 K^-1) |
185 |
CPW = 4010.0 |
186 |
|
187 |
c latent heat of fusion for ice (J kg^-1) |
188 |
LI = 3.340e5 |
189 |
c conversion between Joules and m^3 of ice (m^3) |
190 |
QI = 1/rhoi/Li |
191 |
QS = 1/RHOSN/Li |
192 |
|
193 |
c FOR FLOODING |
194 |
FL_C2 = RHOI/RHOSW |
195 |
FL_C2 = RHOSN/RHOSW |
196 |
FL_C3 = (RHOSW-RHOI)/RHOSN |
197 |
FL_C4 = RHOSN/RHOI |
198 |
|
199 |
c Timescale for melting of ice from a warm ML (3 days in seconds) |
200 |
c Damping term for mixed layer heat to melt existing ice |
201 |
GAMMA = dRf(1)/SEAICE_gamma_t |
202 |
|
203 |
DO bj=myByLo(myThid),myByHi(myThid) |
204 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
205 |
c |
206 |
#ifdef ALLOW_AUTODIFF_TAMC |
207 |
act1 = bi - myBxLo(myThid) |
208 |
max1 = myBxHi(myThid) - myBxLo(myThid) + 1 |
209 |
act2 = bj - myByLo(myThid) |
210 |
max2 = myByHi(myThid) - myByLo(myThid) + 1 |
211 |
act3 = myThid - 1 |
212 |
max3 = nTx*nTy |
213 |
act4 = ikey_dynamics - 1 |
214 |
iicekey = (act1 + 1) + act2*max1 |
215 |
& + act3*max1*max2 |
216 |
& + act4*max1*max2*max3 |
217 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
218 |
C |
219 |
C initialise a few fields |
220 |
C |
221 |
#ifdef ALLOW_AUTODIFF_TAMC |
222 |
CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj, |
223 |
CADJ & key = iicekey, byte = isbyte |
224 |
CADJ STORE qnet(:,:,bi,bj) = comlev1_bibj, |
225 |
CADJ & key = iicekey, byte = isbyte |
226 |
CADJ STORE qsw(:,:,bi,bj) = comlev1_bibj, |
227 |
CADJ & key = iicekey, byte = isbyte |
228 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
229 |
DO J=1,sNy |
230 |
DO I=1,sNx |
231 |
F_ia_net (I,J) = 0.0 |
232 |
F_ia_net_before_snow(I,J) = 0.0 |
233 |
F_io_net (I,J) = 0.0 |
234 |
|
235 |
F_ia (I,J) = 0.0 |
236 |
F_ao (I,J) = 0.0 |
237 |
F_mi (I,J) = 0.0 |
238 |
|
239 |
QNETI(I,J) = 0.0 |
240 |
QSWO (I,J) = 0.0 |
241 |
QSWI (I,J) = 0.0 |
242 |
|
243 |
QSWO_BELOW_FIRST_LAYER (I,J) = 0.0 |
244 |
QSWO_IN_FIRST_LAYER (I,J) = 0.0 |
245 |
|
246 |
S_a (I,J) = 0.0 |
247 |
S_h (I,J) = 0.0 |
248 |
|
249 |
IceGrowthRateUnderExistingIce (I,J) = 0.0 |
250 |
IceGrowthRateFromSurface (I,J) = 0.0 |
251 |
NetExistingIceGrowthRate (I,J) = 0.0 |
252 |
|
253 |
PredictedTemperatureChange (I,J) = 0.0 |
254 |
PredictedTemperatureChangeFromQSW (I,J) = 0.0 |
255 |
PredictedTemperatureChangeFromOA_MQNET (I,J) = 0.0 |
256 |
PredictedTemperatureChangeFromFIA (I,J) = 0.0 |
257 |
PredictedTemperatureChangeFromF_IA_NET (I,J) = 0.0 |
258 |
PredictedTemperatureChangeFromF_IO_NET (I,J) = 0.0 |
259 |
PredictedTemperatureChangeFromNewIceVol (I,J) = 0.0 |
260 |
|
261 |
IceGrowthRateOpenWater (I,J) = 0.0 |
262 |
IceGrowthRateMixedLayer (I,J) = 0.0 |
263 |
|
264 |
ExpectedIceVolumeChange (I,J) = 0.0 |
265 |
ExpectedSnowVolumeChange (I,J) = 0.0 |
266 |
ActualNewTotalVolumeChange (I,J) = 0.0 |
267 |
ActualNewTotalSnowMelt (I,J) = 0.0 |
268 |
|
269 |
EnergyInNewTotalIceVolume (I,J) = 0.0 |
270 |
NetEnergyFluxOutOfSystem (I,J) = 0.0 |
271 |
ResidualHeatOutOfSystem (I,J) = 0.0 |
272 |
QSW_absorb_in_ML (I,J) = 0.0 |
273 |
QSW_absorb_below_ML (I,J) = 0.0 |
274 |
|
275 |
SnowAccumulationRateOverIce (I,J) = 0.0 |
276 |
SnowAccumulationOverIce (I,J) = 0.0 |
277 |
PrecipRateOverIceSurfaceToSea (I,J) = 0.0 |
278 |
|
279 |
PotSnowMeltRateFromSurf (I,J) = 0.0 |
280 |
PotSnowMeltFromSurf (I,J) = 0.0 |
281 |
SnowMeltFromSurface (I,J) = 0.0 |
282 |
SnowMeltRateFromSurface (I,J) = 0.0 |
283 |
SurfHeatFluxConvergToSnowMelt (I,J) = 0.0 |
284 |
|
285 |
FreshwaterContribFromSnowMelt (I,J) = 0.0 |
286 |
FreshwaterContribFromIce (I,J) = 0.0 |
287 |
|
288 |
ENDDO |
289 |
ENDDO |
290 |
|
291 |
|
292 |
#ifdef ALLOW_AUTODIFF_TAMC |
293 |
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
294 |
CADJ & key = iicekey, byte = isbyte |
295 |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
296 |
CADJ & key = iicekey, byte = isbyte |
297 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
298 |
|
299 |
DO J=1,sNy |
300 |
DO I=1,sNx |
301 |
IF (AREA(I,J,2,bi,bj) .GT. 0.) THEN |
302 |
HICE_ACTUAL(I,J) = |
303 |
& HEFF(I,J,2,bi,bj)/AREA(I,J,2,bi,bj) |
304 |
|
305 |
HSNOW_ACTUAL(I,J) = HSNOW(I,J,bi,bj)/ |
306 |
& AREA(I,J,2,bi,bj) |
307 |
|
308 |
c ACCUMULATE SNOW |
309 |
c Is the ice/surface below freezing or at the freezing |
310 |
c point (melting). If it is freezing the precip is |
311 |
c felt as snow and will accumulate over the ice. Else, |
312 |
c precip makes its way, like all things in time, to the sea. |
313 |
IF (TICE(I,J,bi,bj) .LT. 273.15) THEN |
314 |
c Snow falls onto freezing surface remaining as snow |
315 |
SnowAccumulationRateOverIce(I,J) = |
316 |
& PRECIP(I,J,bi,bj)*RHOFW/RHOSN |
317 |
|
318 |
c None of the precipitation falls into the sea |
319 |
PrecipRateOverIceSurfaceToSea(I,J) = 0.0 |
320 |
|
321 |
ELSE |
322 |
c The snow melts on impact is is considered |
323 |
c nothing more than rain. Since meltponds are |
324 |
c not explicitly represented,this rain runs |
325 |
c immediately into the sea |
326 |
|
327 |
SnowAccumulationRateOverIce(I,J) = 0.0 |
328 |
C The rate of rainfall over melting ice. |
329 |
PrecipRateOverIceSurfaceToSea(I,J)= |
330 |
& PRECIP(I,J,bi,bj) |
331 |
ENDIF |
332 |
|
333 |
c In m of mean snow thickness. |
334 |
SnowAccumulationOverIce(I,J) = |
335 |
& SnowAccumulationRateOverIce(I,J) |
336 |
& *SEAICE_deltaTtherm*Area(I,J,2,bi,bj) |
337 |
|
338 |
ELSE |
339 |
HEFF(I,J,2,bi,bj) = 0.0 |
340 |
HICE_ACTUAL(I,J) = 0.0 |
341 |
HSNOW_ACTUAL(I,J) = 0.0 |
342 |
HSNOW(I,J,bi,bj) = 0.0 |
343 |
ENDIF |
344 |
HSNOW_ORIG(I,J) = HSNOW(I,J,bi,bj) |
345 |
ENDDO |
346 |
ENDDO |
347 |
|
348 |
C FIND ATM. WIND SPEED |
349 |
DO J=1,sNy |
350 |
DO I=1,sNx |
351 |
#ifdef SEAICE_EXTERNAL_FORCING |
352 |
c USE EXF PACKAGE |
353 |
UG(I,J) = MAX(SEAICE_EPS,wspeed(I,J,bi,bj)) |
354 |
#else |
355 |
C CALCULATE IT HERE |
356 |
SPEED_SQ = UWIND(I,J,bi,bj)**2 + VWIND(I,J,bi,bj)**2 |
357 |
IF ( SPEED_SQ .LE. SEAICE_EPS_SQ ) THEN |
358 |
UG(I,J)=SEAICE_EPS |
359 |
ELSE |
360 |
UG(I,J)=SQRT(SPEED_SQ) |
361 |
ENDIF |
362 |
#endif /* SEAICE_EXTERNAL_FORCING */ |
363 |
ENDDO |
364 |
ENDDO |
365 |
|
366 |
#ifdef ALLOW_AUTODIFF_TAMC |
367 |
cphCADJ STORE heff = comlev1, key = ikey_dynamics |
368 |
cphCADJ STORE hsnow = comlev1, key = ikey_dynamics |
369 |
cphCADJ STORE uwind = comlev1, key = ikey_dynamics |
370 |
cphCADJ STORE vwind = comlev1, key = ikey_dynamics |
371 |
CADJ STORE tice = comlev1, key = ikey_dynamics |
372 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
373 |
|
374 |
C SET LAYER TEMPERATURE IN KELVIN |
375 |
DO J=1,sNy |
376 |
DO I=1,sNx |
377 |
TMIX(I,J,bi,bj)= |
378 |
& theta(I,J,kSurface,bi,bj)+273.15 _d +00 |
379 |
ENDDO |
380 |
ENDDO |
381 |
|
382 |
C NOW DO ICE |
383 |
CALL SEAICE_BUDGET_ICE( |
384 |
I UG, HICE_ACTUAL, HSNOW_ACTUAL, |
385 |
U TICE, |
386 |
O F_io_net,F_ia_net,F_ia, QSWI, |
387 |
I bi, bj) |
388 |
|
389 |
C-- NET HEAT FLUX TO ICE FROM MIXED LAYER (POSITIVE MEANS NET OUT) |
390 |
DO J=1,sNy |
391 |
DO I=1,sNx |
392 |
#ifdef SEAICE_DEBUG |
393 |
print *,'I,J,F_ia,F_ia_net',I,J,F_ia(I,J),F_ia_net(I,J) |
394 |
F_ia_net_before_snow(I,J) = F_ia_net(I,J) |
395 |
#endif |
396 |
|
397 |
|
398 |
IF (Area(I,J,2,bi,bj)*HEFF(I,J,2,bi,bj) .LE. 0.) THEN |
399 |
IceGrowthRateUnderExistingIce(I,J) = 0.0 |
400 |
IceGrowthRateFromSurface(I,J) = 0.0 |
401 |
NetExistingIceGrowthRate(I,J) = 0.0 |
402 |
ELSE |
403 |
c The growth rate under existing ice is given by the upward |
404 |
c ocean-ice conductive flux, F_io_net, and QI, which converts |
405 |
c Joules to meters of ice. This quantity has units of meters |
406 |
c of ice per second. |
407 |
IceGrowthRateUnderExistingIce(I,J)=F_io_net(I,J)*QI |
408 |
|
409 |
c Snow/Ice surface heat convergence is first used to melt |
410 |
c snow. If all of this heat convergence went into melting |
411 |
c snow, this is the rate at which it would do it |
412 |
c F_ia_net must be negative, -> PSMRFW is positive for melting |
413 |
PotSnowMeltRateFromSurf(I,J)= - F_ia_net(I,J)*QS |
414 |
|
415 |
c This is the depth of snow that would be melted at this rate |
416 |
c and the seaice delta t. In meters of snow. |
417 |
PotSnowMeltFromSurf(I,J) = |
418 |
& PotSnowMeltRateFromSurf(I,J)* SEAICE_deltaTtherm |
419 |
|
420 |
c If we can melt MORE than is actually there, then we will |
421 |
c reduce the melt rate so that only that which is there |
422 |
c is melted in one time step. In this case not all of the |
423 |
c heat flux convergence at the surface is used to melt snow, |
424 |
c The leftover energy is going to melt ice. |
425 |
c SurfHeatFluxConvergToSnowMelt is the part of the total heat |
426 |
c flux convergence going to melt snow. |
427 |
|
428 |
IF (PotSnowMeltFromSurf(I,J) .GE. |
429 |
& HSNOW_ACTUAL(I,J)) THEN |
430 |
c Snow melt and melt rate in actual snow thickness. |
431 |
SnowMeltFromSurface(I,J) = HSNOW_ACTUAL(I,J) |
432 |
|
433 |
SnowMeltRateFromSurface(I,J) = |
434 |
& SnowMeltFromSurface(I,J)/ SEAICE_deltaTtherm |
435 |
|
436 |
c Since F_ia_net is focused only over ice, its reduction |
437 |
c requires knowing how much snow is actually melted |
438 |
SurfHeatFluxConvergToSnowMelt(I,J) = |
439 |
& -HSNOW_ACTUAL(I,J)/QS/SEAICE_deltaTtherm |
440 |
ELSE |
441 |
c In this case there will be snow remaining after melting. |
442 |
c All of the surface heat convergence will be redirected to |
443 |
c this effort. |
444 |
SnowMeltFromSurface(I,J)=PotSnowMeltFromSurf(I,J) |
445 |
|
446 |
SnowMeltRateFromSurface(I,J) = |
447 |
& PotSnowMeltRateFromSurf(I,J) |
448 |
|
449 |
SurfHeatFluxConvergToSnowMelt(I,J) =F_ia_net(I,J) |
450 |
ENDIF |
451 |
|
452 |
c Taken across entire cell, this is the amount of freshwater |
453 |
c to add per square meter from melting snow. Positive with |
454 |
c the addition of freshwater to the ocean |
455 |
c FreshwaterContribFromSnowMelt(I,J) = |
456 |
c & AREA(I,J,2,bi,bj)*SnowMeltFromSurface(I,J) |
457 |
c & *RHOSN/RHOFW |
458 |
|
459 |
c Reduce the heat flux convergence available to melt surface |
460 |
c ice by the amount used to melt snow |
461 |
F_ia_net(I,J) = |
462 |
& F_ia_net(I,J)-SurfHeatFluxConvergToSnowMelt(I,J) |
463 |
|
464 |
IceGrowthRateFromSurface(I,J) = F_ia_net(I,J)*QI |
465 |
|
466 |
NetExistingIceGrowthRate(I,J) = |
467 |
& IceGrowthRateUnderExistingIce(I,J) + |
468 |
& IceGrowthRateFromSurface(I,J) |
469 |
ENDIF |
470 |
ENDDO |
471 |
ENDDO |
472 |
|
473 |
c HERE WE WILL MELT SNOW AND ADJUST NET EXISTING ICE GROWTH RATE |
474 |
C TO REFLECT REDUCTION IN SEA ICE MELT. |
475 |
|
476 |
C NOW DETERMINE GROWTH RATES |
477 |
C FIRST DO OPEN WATER |
478 |
CALL SEAICE_BUDGET_OCEAN( |
479 |
I UG, |
480 |
U TMIX, |
481 |
O F_ao, QSWO, |
482 |
I bi, bj) |
483 |
|
484 |
C-- NET HEAT FLUX TO ICE FROM MIXED LAYER (POSITIVE MEANS NET OUT) |
485 |
c-- not all of the sw radiation is absorbed in the first layer, only that |
486 |
c which is absorbed melts ice. SWFRACB is calculated in seaice_init_vari.F |
487 |
DO J=1,sNy |
488 |
DO I=1,sNx |
489 |
QSWO_BELOW_FIRST_LAYER(I,J)= QSWO(I,J)*SWFRACB |
490 |
QSWO_IN_FIRST_LAYER(I,J) = QSWO(I,J)*(1.0 - SWFRACB) |
491 |
c IceGrowthRateOpenWater(I,J)= F_ao(I,J)*QI |
492 |
IceGrowthRateOpenWater(I,J)= QI* |
493 |
& (F_ao(I,J) - QSWO(I,J) + QSWO_IN_FIRST_LAYER(I,J)) |
494 |
ENDDO |
495 |
ENDDO |
496 |
|
497 |
|
498 |
#ifdef ALLOW_AUTODIFF_TAMC |
499 |
CADJ STORE theta(:,:,:,bi,bj)= comlev1_bibj, |
500 |
CADJ & key = iicekey, byte = isbyte |
501 |
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
502 |
CADJ & key = iicekey, byte = isbyte |
503 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
504 |
|
505 |
|
506 |
C-- NET HEAT FLUX TO ICE FROM MIXED LAYER (POSITIVE MEANS FLUX INTO ICE |
507 |
C AND MELTING) |
508 |
DO J=1,sNy |
509 |
DO I=1,sNx |
510 |
|
511 |
C FIND THE FREEZING POINT OF SEAWATER IN THIS CELL |
512 |
#ifdef SEAICE_VARIABLE_FREEZING_POINT |
513 |
TBC = -0.0575 _d 0*salt(I,J,kSurface,bi,bj) + |
514 |
& 0.0901 _d 0 |
515 |
#endif /* SEAICE_VARIABLE_FREEZING_POINT */ |
516 |
|
517 |
c example: theta(i,j,ksurf) = 0, tbc = -2, |
518 |
c fmi = -gamm*rhocpw * (0-(-2)) = - 2 * gamm * rhocpw, |
519 |
c a NEGATIVE number. Heat flux INTO ice. |
520 |
|
521 |
F_mi(I,J) = -GAMMA*RHOSW*CPW * |
522 |
& (theta(I,J,kSurface,bi,bj) - TBC) |
523 |
|
524 |
IceGrowthRateMixedLayer(I,J) = F_mi(I,J)*QI; |
525 |
ENDDO |
526 |
ENDDO |
527 |
|
528 |
#ifdef ALLOW_AUTODIFF_TAMC |
529 |
CADJ STORE S_h(:,:) = comlev1_bibj, |
530 |
CADJ & key = iicekey, byte = isbyte |
531 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
532 |
|
533 |
C CALCULATE THICKNESS DERIVATIVE (S_h) |
534 |
DO J=1,sNy |
535 |
DO I=1,sNx |
536 |
S_h(I,J) = |
537 |
& NetExistingIceGrowthRate(I,J)*AREA(I,J,2,bi,bj)+ |
538 |
& (1. -AREA(I,J,2,bi,bj))* |
539 |
& IceGrowthRateOpenWater(I,J) + |
540 |
& IceGrowthRateMixedLayer(I,J) |
541 |
|
542 |
c Both the accumulation and melt rates are in terms |
543 |
c of actual snow thickness. As with ice, multiplying |
544 |
c with area converts to mean snow thickness. |
545 |
S_hsnow(I,J) = AREA(I,J,2,bi,bj)* ( |
546 |
& SnowAccumulationRateOverIce(I,J) - |
547 |
& SnowMeltRateFromSurface(I,J) ) |
548 |
ENDDO |
549 |
ENDDO |
550 |
|
551 |
#ifdef ALLOW_AUTODIFF_TAMC |
552 |
CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj, |
553 |
CADJ & key = iicekey, byte = isbyte |
554 |
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
555 |
CADJ & key = iicekey, byte = isbyte |
556 |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
557 |
CADJ & key = iicekey, byte = isbyte |
558 |
CADJ STORE S_h(:,:) = comlev1_bibj, |
559 |
CADJ & key = iicekey, byte = isbyte |
560 |
CADJ STORE S_hsnow(:,:) = comlev1_bibj, |
561 |
CADJ & key = iicekey, byte = isbyte |
562 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
563 |
|
564 |
DO J=1,sNy |
565 |
DO I=1,sNx |
566 |
S_a(I,J) = 0.0 |
567 |
C IF THE OPEN WATER GROWTH RATE, F_ao, IS POSITIVE |
568 |
C THEN EXTEND ICE AREAL COVER, S_a > 0 |
569 |
IF (F_ao(I,J) .GT. 0) THEN |
570 |
S_a(I,J) = S_a(I,J) + (ONE - AREA(I,J,2,bi,bj))* |
571 |
& IceGrowthRateOpenWater(I,J)/HO |
572 |
ELSE |
573 |
S_a(I,J) = S_a(I,J) + 0.0 |
574 |
ENDIF |
575 |
|
576 |
|
577 |
C REDUCE THE ICE COVER IF ICE IS PRESENT |
578 |
IF ( (S_h(I,J) .LT. 0.) .AND. |
579 |
& (AREA(I,J,2,bi,bj).GT. 0.) .AND. |
580 |
& (HEFF(I,J,2,bi,bj).NE. 0.) ) THEN |
581 |
|
582 |
S_a(I,J) = S_a(I,J) |
583 |
& + AREA(I,J,2,bi,bj)/(2.0*HEFF(I,J,2,bi,bj))* |
584 |
& IceGrowthRateOpenWater(I,J)* |
585 |
& (1-AREA(I,J,2,bi,bj)) |
586 |
ELSE |
587 |
S_a(I,J) = S_a(I,J) + 0.0 |
588 |
ENDIF |
589 |
|
590 |
C REDUCE THE ICE COVER IF ICE IS PRESENT |
591 |
IF ( (IceGrowthRateMixedLayer(I,J) .LE. 0.) .AND. |
592 |
& (AREA(I,J,2,bi,bj).GT. 0.) .AND. |
593 |
& (HEFF(I,J,2,bi,bj).NE. 0.) ) THEN |
594 |
|
595 |
S_a(I,J) = S_a(I,J) |
596 |
& + AREA(I,J,2,bi,bj)/(2.0*HEFF(I,J,2,bi,bj))* |
597 |
& IceGrowthRateMixedLayer(I,J) |
598 |
|
599 |
ELSE |
600 |
S_a(I,J) = S_a(I,J) + 0.0 |
601 |
ENDIF |
602 |
|
603 |
C REDUCE THE ICE COVER IF ICE IS PRESENT |
604 |
IF ( (NetExistingIceGrowthRate(I,J) .LE. 0.) .AND. |
605 |
& (AREA(I,J,2,bi,bj).GT. 0.) .AND. |
606 |
& (HEFF(I,J,2,bi,bj).NE. 0.) ) THEN |
607 |
|
608 |
S_a(I,J) = S_a(I,J) |
609 |
& + AREA(I,J,2,bi,bj)/(2.0*HEFF(I,J,2,bi,bj))* |
610 |
& NetExistingIceGrowthRate(I,J)*AREA(I,J,2,bi,bj) |
611 |
|
612 |
ELSE |
613 |
S_a(I,J) = S_a(I,J) + 0.0 |
614 |
ENDIF |
615 |
|
616 |
ENDDO |
617 |
ENDDO |
618 |
|
619 |
|
620 |
#ifdef ALLOW_AUTODIFF_TAMC |
621 |
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
622 |
CADJ & key = iicekey, byte = isbyte |
623 |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
624 |
CADJ & key = iicekey, byte = isbyte |
625 |
CADJ STORE S_a(:,:) = comlev1_bibj, |
626 |
CADJ & key = iicekey, byte = isbyte |
627 |
CADJ STORE S_h(:,:) = comlev1_bibj, |
628 |
CADJ & key = iicekey, byte = isbyte |
629 |
CADJ STORE f_ao(:,:) = comlev1_bibj, |
630 |
CADJ & key = iicekey, byte = isbyte |
631 |
CADJ STORE qswi(:,:) = comlev1_bibj, |
632 |
CADJ & key = iicekey, byte = isbyte |
633 |
CADJ STORE qswo(:,:) = comlev1_bibj, |
634 |
CADJ & key = iicekey, byte = isbyte |
635 |
CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj, |
636 |
CADJ & key = iicekey, byte = isbyte |
637 |
#endif |
638 |
|
639 |
C ACTUALLY CHANGE THE AREA AND THICKNESS |
640 |
DO J=1,sNy |
641 |
DO I=1,sNx |
642 |
AREA(I,J,1,bi,bj) = AREA(I,J,2,bi,bj) + |
643 |
& SEAICE_deltaTtherm * S_a(I,J) |
644 |
C SET LIMIT ON AREA |
645 |
AREA(I,J,1,bi,bj) = MIN(1.,AREA(I,J,1,bi,bj)) |
646 |
AREA(I,J,1,bi,bj) = MAX(0.,AREA(I,J,1,bi,bj)) |
647 |
|
648 |
ENDDO |
649 |
ENDDO |
650 |
|
651 |
#ifdef ALLOW_AUTODIFF_TAMC |
652 |
CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj, |
653 |
CADJ & key = iicekey, byte = isbyte |
654 |
#endif |
655 |
DO J=1,sNy |
656 |
DO I=1,sNx |
657 |
HEFF(I,J,1,bi,bj) = HEFF(I,J,2,bi,bj) + |
658 |
& SEAICE_deltaTTherm * S_h(I,J) |
659 |
HEFF(I,J,1,bi,bj) = MAX(0.0, HEFF(I,J,1,bi,bj)) |
660 |
|
661 |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj) + |
662 |
& SEAICE_deltaTTherm * S_hsnow(I,J) |
663 |
HSNOW(I,J,bi,bj) = MAX(0.0, HSNOW(I,J,bi,bj)) |
664 |
|
665 |
IF (AREA(I,J,1,bi,bj) .GT. 0.0) THEN |
666 |
HICE_ACTUAL(I,J) = |
667 |
& HEFF(I,J,1,bi,bj)/AREA(I,J,1,bi,bj) |
668 |
HSNOW_ACTUAL(I,J) = |
669 |
& HSNOW(I,J,bi,bj)/AREA(I,J,1,bi,bj) |
670 |
ELSE |
671 |
HICE_ACTUAL(I,J) = 0.0 |
672 |
HSNOW_ACTUAL(I,J) = 0.0 |
673 |
ENDIF |
674 |
|
675 |
ENDDO |
676 |
ENDDO |
677 |
|
678 |
#ifdef ALLOW_AUTODIFF_TAMC |
679 |
CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj, |
680 |
CADJ & key = iicekey, byte = isbyte |
681 |
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
682 |
CADJ & key = iicekey, byte = isbyte |
683 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
684 |
|
685 |
c constrain area is no thickness and vice versa. |
686 |
DO J=1,sNy |
687 |
DO I=1,sNx |
688 |
IF (HEFF(I,J,1,bi,bj) .LE. 0.0 .OR. |
689 |
& AREA(I,J,1,bi,bj) .LE. 0.0) THEN |
690 |
|
691 |
AREA(I,J,1,bi,bj) = 0.0 |
692 |
HEFF(I,J,1,bi,bj) = 0.0 |
693 |
HICE_ACTUAL(I,J) = 0.0 |
694 |
HSNOW(I,J,bi,bj) = 0.0 |
695 |
HSNOW_ACTUAL(I,J) = 0.0 |
696 |
ENDIF |
697 |
ENDDO |
698 |
ENDDO |
699 |
|
700 |
#ifdef ALLOW_AUTODIFF_TAMC |
701 |
CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj, |
702 |
CADJ & key = iicekey, byte = isbyte |
703 |
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
704 |
CADJ & key = iicekey, byte = isbyte |
705 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
706 |
|
707 |
DO J=1,sNy |
708 |
DO I=1,sNx |
709 |
|
710 |
c The amount of new mean thickness we expect to grow |
711 |
ExpectedIceVolumeChange(I,J) = S_h(I,J) * |
712 |
& SEAICE_deltaTtherm |
713 |
|
714 |
ExpectedSnowVolumeChange(I,J) = S_hsnow(I,J)* |
715 |
& SEAICE_deltaTtherm |
716 |
|
717 |
c THE EFFECTIVE SHORTWAVE HEATING RATE |
718 |
QSW(I,J,bi,bj) = |
719 |
& QSWI(I,J) * ( AREA(I,J,2,bi,bj)) + |
720 |
& QSWO(I,J) * (1. - AREA(I,J,2,bi,bj)) |
721 |
|
722 |
ActualNewTotalVolumeChange(I,J) = |
723 |
& HEFF(I,J,1,bi,bj) - HEFF(I,J,2,bi,bj) |
724 |
|
725 |
ActualNewTotalSnowMelt(I,J) = |
726 |
& HSNOW_ORIG(I,J) + |
727 |
& SnowAccumulationOverIce(I,J) - |
728 |
& HSNOW(I,J,bi,bj) |
729 |
|
730 |
c The latent heat of fusion of the new ice |
731 |
EnergyInNewTotalIceVolume(I,J) = |
732 |
& ActualNewTotalVolumeChange(I,J)/QI |
733 |
|
734 |
c THE EFFECTIVE SHORTWAVE HEATING RATE THE LIQUID OCEAN WILL FEEL |
735 |
NetEnergyFluxOutOfSystem(I,J) = SEAICE_deltaTtherm * |
736 |
& (AREA(I,J,2,bi,bj) * |
737 |
& (F_ia_net(I,J) + F_io_net(I,J) + QSWI(I,J)) |
738 |
& + (1.0 - AREA(I,J,2,bi,bj)) * F_ao(I,J)) |
739 |
|
740 |
c THE QUANTITY OF HEAT WHICH IS THE RESIDUAL TO THE QUANTITY OF |
741 |
c ML temperature. If the net energy flux is exactly balanced by the |
742 |
c latent energy of fusion in the new ice created then we won't |
743 |
c change the ML temperature at all. |
744 |
|
745 |
ResidualHeatOutOfSystem(I,J) = |
746 |
& NetEnergyFluxOutOfSystem(I,J) - |
747 |
& EnergyInNewTotalIceVolume(I,J) |
748 |
|
749 |
c Like snow melt, if there is melting, this quantity is positive. |
750 |
FreshwaterContribFromIce(I,J) = |
751 |
& -ActualNewTotalVolumeChange(I,J)*RHOI/RHOFW |
752 |
|
753 |
c The freshwater contribution from snow comes only in the form of melt |
754 |
c unlike ice, which takes freshwater upon growth and yields freshwater |
755 |
c upon melt. Thus, the actual new total snow melt must be determined. |
756 |
FreshwaterContribFromSnowMelt(I,J) = |
757 |
& ActualNewTotalSnowMelt(I,J)*RHOSN/RHOFW |
758 |
|
759 |
c This seems to be in m/s, original time level 2 for area |
760 |
EmPmR(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*( |
761 |
& ( EVAP(I,J,bi,bj)-PRECIP(I,J,bi,bj) ) |
762 |
& * ( ONE - AREA(I,J,2,bi,bj) ) |
763 |
& - PrecipRateOverIceSurfaceToSea(I,J)* |
764 |
& AREA(I,J,2,bi,bj) |
765 |
& - RUNOFF(I,J,bi,bj) |
766 |
& - (FreshwaterContribFromIce(I,J) + |
767 |
& FreshwaterContribFromSnowMelt(I,J))/ |
768 |
& SEAICE_deltaTtherm) |
769 |
|
770 |
C THE SHORTWAVE ENERGY FLUX ABSORBED IN THE SURFACE LAYER |
771 |
QSW_absorb_in_ML(I,J) = QSW(I,J,bi,bj)* |
772 |
& (1.0 - SWFRACB) |
773 |
|
774 |
C THE SHORTWAVE ENERGY FLUX PENETRATING BELOW THE SURFACE LAYER |
775 |
QSW_absorb_below_ML(I,J) = |
776 |
& QSW(I,J,bi,bj) - QSW_absorb_in_ML(I,J); |
777 |
|
778 |
PredictedTemperatureChangeFromQSW(I,J) = |
779 |
& - QSW_absorb_in_ML(I,J) * FLUX_TO_DELTA_TEMP |
780 |
|
781 |
PredictedTemperatureChangeFromOA_MQNET(I,J) = |
782 |
& -(QNET(I,J,bi,bj) - QSWO(I,J))*(1. -AREA(I,J,2,bi,bj)) |
783 |
& * FLUX_TO_DELTA_TEMP |
784 |
|
785 |
PredictedTemperatureChangeFromF_IO_NET(I,J) = |
786 |
& -F_io_net(I,J)*AREA(I,J,2,bi,bj)*FLUX_TO_DELTA_TEMP |
787 |
|
788 |
PredictedTemperatureChangeFromF_IA_NET(I,J) = |
789 |
& -F_ia_net(I,J)*AREA(I,J,2,bi,bj)*FLUX_TO_DELTA_TEMP |
790 |
|
791 |
PredictedTemperatureChangeFromNewIceVol(I,J) = |
792 |
& EnergyInNewTotalIceVolume(I,J)*ENERGY_TO_DELTA_TEMP |
793 |
|
794 |
PredictedTemperatureChange(I,J) = |
795 |
& PredictedTemperatureChangeFromQSW(I,J) + |
796 |
& PredictedTemperatureChangeFromOA_MQNET(I,J) + |
797 |
& PredictedTemperatureChangeFromF_IO_NET(I,J) + |
798 |
& PredictedTemperatureChangeFromF_IA_NET(I,J) + |
799 |
& PredictedTemperatureChangeFromNewIceVol(I,J) |
800 |
|
801 |
C NOW FORMULATE QNET, which time LEVEL, ORIG 2. |
802 |
C THIS QNET WILL DETERMINE THE TEMPERATURE CHANGE OF THE MIXED LAYER |
803 |
C QNET IS A DEPTH AVERAGED HEAT FLUX FOR THE OCEAN COLUMN |
804 |
C BECAUSE OF THE |
805 |
QNET(I,J,bi,bj) = |
806 |
& ResidualHeatOutOfSystem(I,J) / SEAICE_deltaTtherm |
807 |
|
808 |
ENDDO |
809 |
ENDDO |
810 |
|
811 |
|
812 |
#ifdef ALLOW_AUTODIFF_TAMC |
813 |
CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj, |
814 |
CADJ & key = iicekey, byte = isbyte |
815 |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
816 |
CADJ & key = iicekey, byte = isbyte |
817 |
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
818 |
CADJ & key = iicekey, byte = isbyte |
819 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
820 |
|
821 |
DO J=1,sNy |
822 |
DO I=1,sNx |
823 |
AREA(I,J,1,bi,bj) = AREA(I,J,1,bi,bj)*HEFFM(I,J,bi,bj) |
824 |
HEFF(I,J,1,bi,bj) = HEFF(I,J,1,bi,bj)*HEFFM(I,J,bi,bj) |
825 |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)*HEFFM(I,J,bi,bj) |
826 |
ENDDO |
827 |
ENDDO |
828 |
|
829 |
#ifdef ALLOW_AUTODIFF_TAMC |
830 |
CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj, |
831 |
CADJ & key = iicekey, byte = isbyte |
832 |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
833 |
CADJ & key = iicekey, byte = isbyte |
834 |
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
835 |
CADJ & key = iicekey, byte = isbyte |
836 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
837 |
|
838 |
|
839 |
#ifdef ALLOW_SEAICE_FLOODING |
840 |
DO J = 1,sNy |
841 |
DO I = 1,sNx |
842 |
EnergyToMeltSnowAndIce(I,J) = |
843 |
& HEFF(I,J,1,bi,bj)/QI + |
844 |
& HSNOW(I,J,bi,bj)/QS |
845 |
|
846 |
deltaHS = FL_C2*( HSNOW_ACTUAL(I,J) - |
847 |
& HICE_ACTUAL(I,J)*FL_C3 ) |
848 |
|
849 |
IF (deltaHS .GT. 0.0) THEN |
850 |
deltaHI = FL_C4*deltaHS |
851 |
|
852 |
HICE_ACTUAL(I,J) = HICE_ACTUAL(I,J) |
853 |
& + deltaHI |
854 |
|
855 |
HSNOW_ACTUAL(I,J)= HSNOW_ACTUAL(I,J) |
856 |
& - deltaHS |
857 |
|
858 |
HEFF(I,J,1,bi,bj)= HICE_ACTUAL(I,J) * |
859 |
& AREA(I,J,1,bi,bj) |
860 |
|
861 |
HSNOW(I,J,bi,bj) = HSNOW_ACTUAL(I,J)* |
862 |
& AREA(I,J,1,bi,bj) |
863 |
|
864 |
EnergyToMeltSnowAndIce2(I,J) = |
865 |
& HEFF(I,J,1,bi,bj)/QI + |
866 |
& HSNOW(I,J,bi,bj)/QS |
867 |
|
868 |
#ifdef SEAICE_DEBUG |
869 |
print *,'Energy to melt snow+ice: pre,post,delta', |
870 |
& EnergyToMeltSnowAndIce(I,J), |
871 |
& EnergyToMeltSnowAndIce2(I,J), |
872 |
& EnergyToMeltSnowAndIce(I,J) - |
873 |
& EnergyToMeltSnowAndIce2(I,J) |
874 |
#endif |
875 |
ENDIF |
876 |
ENDDO |
877 |
ENDDO |
878 |
#endif |
879 |
|
880 |
#ifdef ALLOW_AUTODIFF_TAMC |
881 |
CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj, |
882 |
CADJ & key = iicekey, byte = isbyte |
883 |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
884 |
CADJ & key = iicekey, byte = isbyte |
885 |
CADJ STORE heff(:,:,:,bi,bj) = comlev1_bibj, |
886 |
CADJ & key = iicekey, byte = isbyte |
887 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
888 |
|
889 |
|
890 |
#ifdef ATMOSPHERIC_LOADING |
891 |
IF ( useRealFreshWaterFlux ) THEN |
892 |
DO J=1,sNy |
893 |
DO I=1,sNx |
894 |
sIceLoad(i,j,bi,bj) = HEFF(I,J,1,bi,bj)* |
895 |
& SEAICE_rhoIce + HSNOW(I,J,bi,bj)* 330. _d 0 |
896 |
ENDDO |
897 |
ENDDO |
898 |
ENDIF |
899 |
#endif |
900 |
|
901 |
#ifdef SEAICE_DEBUG |
902 |
DO j=1-OLy,sNy+OLy |
903 |
DO i=1-OLx,sNx+OLx |
904 |
IF ((i .EQ. SEAICE_debugPointX .and. |
905 |
& j .EQ. SEAICE_debugPointY)) THEN |
906 |
|
907 |
print *,'ifsig: myTime,myIter:',myTime,myIter |
908 |
|
909 |
print '(A,2i4,2(1x,1P3E15.4))', |
910 |
& 'ifice i j -------------- ',i,j |
911 |
|
912 |
print '(A,2i4,2(1x,1P3E15.4))', |
913 |
& 'ifice i j IGR(ML OW ICE) ',i,j, |
914 |
& IceGrowthRateMixedLayer(i,j), |
915 |
& IceGrowthRateOpenWater(i,j), |
916 |
& NetExistingIceGrowthRate(i,j), |
917 |
& SEAICE_deltaTtherm |
918 |
|
919 |
print '(A,2i4,2(1x,1P3E15.4))', |
920 |
& 'ifice i j F(mi ao) ', |
921 |
& i,j,F_mi(i,j), F_ao(i,j) |
922 |
|
923 |
print '(A,2i4,2(1x,1P3E15.4))', |
924 |
& 'ifice i j Fi(a,ant2/1 ont)', |
925 |
& i,j,F_ia(i,j), |
926 |
& F_ia_net_before_snow(i,j), |
927 |
& F_ia_net(i,j), |
928 |
& F_io_net(i,j) |
929 |
|
930 |
print '(A,2i4,2(1x,1P3E15.4))', |
931 |
& 'ifice i j AREA2/1 HEFF2/1 ',i,j, |
932 |
& AREA(i,j,2,bi,bj), |
933 |
& AREA(i,j,1,bi,bj), |
934 |
& HEFF(i,j,2,bi,bj), |
935 |
& HEFF(i,j,1,bi,bj) |
936 |
|
937 |
print '(A,2i4,2(1x,1P3E15.4))', |
938 |
& 'ifice i j HSNOW2/1 TMX TBC',i,j, |
939 |
& HSNOW_ORIG(I,J), |
940 |
& HSNOW(I,J,bi,bj), |
941 |
& TMIX(i,j,bi,bj)-273.15, |
942 |
& TBC |
943 |
|
944 |
print '(A,2i4,2(1x,1P3E15.4))', |
945 |
& 'ifice i j TI ATP LWD ',i,j, |
946 |
& TICE(i,j,bi,bj)-273.15, |
947 |
& ATEMP(i,j,bi,bj)-273.15, |
948 |
& LWDOWN(i,j,bi,bj) |
949 |
|
950 |
|
951 |
print '(A,2i4,2(1x,1P3E15.4))', |
952 |
& 'ifice i j S_a S_h S_hsnow ',i,j, |
953 |
& S_a(i,j), |
954 |
& S_h(i,j), |
955 |
& S_hsnow(i,j) |
956 |
|
957 |
print '(A,2i4,2(1x,1P3E15.4))', |
958 |
& 'ifice i j IVC(E A ENIN) ',i,j, |
959 |
& ExpectedIceVolumeChange(i,j), |
960 |
& ActualNewTotalVolumeChange(i,j), |
961 |
& EnergyInNewTotalIceVolume(i,j) |
962 |
|
963 |
print '(A,2i4,2(1x,1P3E15.4))', |
964 |
& 'ifice i j EF(NOS RE) QNET ',i,j, |
965 |
& NetEnergyFluxOutOfSystem(i,j), |
966 |
& ResidualHeatOutOfSystem(i,j), |
967 |
& QNET(I,J,bi,bj) |
968 |
|
969 |
print '(A,2i4,3(1x,1P3E15.4))', |
970 |
& 'ifice i j QSW QSWO QSWI ',i,j, |
971 |
& QSW(i,j,bi,bj), |
972 |
& QSWO(i,j), |
973 |
& QSWI(i,j) |
974 |
|
975 |
print '(A,2i4,3(1x,1P3E15.4))', |
976 |
& 'ifice i j SW(BML IML SW) ',i,j, |
977 |
& QSW_absorb_below_ML(i,j), |
978 |
& QSW_absorb_in_ML(i,j), |
979 |
& SWFRACB |
980 |
|
981 |
print '(A,2i4,3(1x,1P3E15.4))', |
982 |
& 'ifice i j ptc(to, qsw, oa)',i,j, |
983 |
& PredictedTemperatureChange(i,j), |
984 |
& PredictedTemperatureChangeFromQSW (i,j), |
985 |
& PredictedTemperatureChangeFromOA_MQNET(i,j) |
986 |
|
987 |
|
988 |
print '(A,2i4,3(1x,1P3E15.4))', |
989 |
& 'ifice i j ptc(fion,ian,ia)',i,j, |
990 |
& PredictedTemperatureChangeFromF_IO_NET(i,j), |
991 |
& PredictedTemperatureChangeFromF_IA_NET(i,j), |
992 |
& PredictedTemperatureChangeFromFIA(i,j) |
993 |
|
994 |
print '(A,2i4,3(1x,1P3E15.4))', |
995 |
& 'ifice i j ptc(niv) ',i,j, |
996 |
& PredictedTemperatureChangeFromNewIceVol(i,j) |
997 |
|
998 |
|
999 |
print '(A,2i4,3(1x,1P3E15.4))', |
1000 |
& 'ifice i j EmPmR EVP PRE RU',i,j, |
1001 |
& EmPmR(I,J,bi,bj), |
1002 |
& EVAP(I,J,bi,bj), |
1003 |
& PRECIP(I,J,bi,bj), |
1004 |
& RUNOFF(I,J,bi,bj) |
1005 |
|
1006 |
print '(A,2i4,3(1x,1P3E15.4))', |
1007 |
& 'ifice i j PRROIS,SAOI(R .)',i,j, |
1008 |
& PrecipRateOverIceSurfaceToSea(I,J), |
1009 |
& SnowAccumulationRateOverIce(I,J), |
1010 |
& SnowAccumulationOverIce(I,J) |
1011 |
|
1012 |
print '(A,2i4,4(1x,1P3E15.4))', |
1013 |
& 'ifice i j SM(PM PMR . .R) ',i,j, |
1014 |
& PotSnowMeltFromSurf(I,J), |
1015 |
& PotSnowMeltRateFromSurf(I,J), |
1016 |
& SnowMeltFromSurface(I,J), |
1017 |
& SnowMeltRateFromSurface(I,J) |
1018 |
|
1019 |
print '(A,2i4,4(1x,1P3E15.4))', |
1020 |
& 'ifice i j TotSnwMlt ExSnVC',i,j, |
1021 |
& ActualNewTotalSnowMelt(I,J), |
1022 |
& ExpectedSnowVolumeChange(I,J) |
1023 |
|
1024 |
|
1025 |
print '(A,2i4,4(1x,1P3E15.4))', |
1026 |
& 'ifice i j fw(CFICE, CFSM) ',i,j, |
1027 |
& FreshwaterContribFromIce(I,J), |
1028 |
& FreshwaterContribFromSnowMelt(I,J) |
1029 |
|
1030 |
print '(A,2i4,2(1x,1P3E15.4))', |
1031 |
& 'ifice i j -------------- ',i,j |
1032 |
|
1033 |
ENDIF |
1034 |
ENDDO |
1035 |
ENDDO |
1036 |
#endif /* SEAICE_DEBUG */ |
1037 |
|
1038 |
|
1039 |
C BI,BJ'S |
1040 |
ENDDO |
1041 |
ENDDO |
1042 |
|
1043 |
RETURN |
1044 |
END |