1 |
gforget |
1.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 |