/[MITgcm]/MITgcm/pkg/bbl/bbl_calc_rhs.F
ViewVC logotype

Contents of /MITgcm/pkg/bbl/bbl_calc_rhs.F

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


Revision 1.8 - (show annotations) (download)
Tue Aug 27 21:34:21 2013 UTC (12 years, 5 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64o, checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.7: +430 -146 lines
update formulation to reduce dispersion of tracer properties in bbl
replaced horizontal and vertical transport parameters with velocities
changes results for verification/global_with_exf.yearly
details in pkg/bbl/bbl_description.tex

1 C $Header: /u/gcmpack/MITgcm/pkg/bbl/bbl_calc_rhs.F,v 1.7 2012/04/03 16:45:45 jmc Exp $
2 C $Name: $
3
4 #include "BBL_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: BBL_CALC_RHS
8
9 C !INTERFACE:
10 SUBROUTINE BBL_CALC_RHS(
11 I myTime, myIter, myThid )
12
13 C !DESCRIPTION:
14 C Calculate tendency of tracers due to bottom boundary layer.
15
16 C !USES:
17 IMPLICIT NONE
18 #include "SIZE.h"
19 #include "EEPARAMS.h"
20 #include "PARAMS.h"
21 #include "GRID.h"
22 #include "DYNVARS.h"
23 #include "BBL.h"
24
25 C !INPUT PARAMETERS:
26 C myTime :: Current time in simulation
27 C myIter :: Current time-step number
28 C myThid :: my Thread Id number
29 _RL myTime
30 INTEGER myIter, myThid
31
32 C !OUTPUT PARAMETERS:
33
34 C !LOCAL VARIABLES:
35 C bi,bj :: Tile indices
36 C i,j :: Loop indices
37 C d,r :: Donnor/Receiver indices
38 C kBot :: k index of bottommost wet grid box
39 C kLowC1 :: k index of bottommost (i,j) cell
40 C kLowC2 :: k index of bottommost (i+1,j) or (i,j+1) cell
41 C kl :: k index at which to compare 2 cells
42 C thk_d :: thickness of donnor bottommost wet grid cell
43 C thk_r :: thickness of receiver bottommost wet grid cell
44 C bblEta_d :: bbl_eta of donnor cell
45 C bblEta_r :: bbl_eta of receiver cell
46 C resThk_r :: thk_r - bblEta_r
47 C Theta_r :: Theta of receiver cell
48 C bblTheta_d:: Theta of donnor bbl
49 C bblTheta_r:: Theta of receiver bbl
50 C resTheta_r:: Theta of resThk_r
51 C Salt_r :: Salt of receiver cell
52 C bblSalt_d :: Salt of donnor bbl
53 C bblSalt_r :: Salt of receiver bbl
54 C resSalt_r :: Salt of resThk_r
55 C deltaRho :: density change
56 C deltaDpt :: depth change
57 C dVol :: horizontal volume transport
58 C bbl_tend :: temporary variable for tendency terms
59 C sloc :: salinity of bottommost wet grid box
60 C tloc :: temperature of bottommost wet grid box
61 C rholoc :: in situ density of bottommost wet grid box
62 C rhoBBL :: in situ density of bottom boundary layer
63 C bbl_rho1 :: local (i,j) density
64 C bbl_rho2 :: local (i+1, j) or (i,j+1) density
65 INTEGER bi, bj
66 INTEGER i, j, d, r, kBot, kLowC1, kLowC2, kl
67 _RL thk_d, thk_r, bblEta_d, bblEta_r, resThk_r
68 _RL Theta_r, bblTheta_d, bblTheta_r, resTheta_r
69 _RL Salt_r, bblSalt_d, bblSalt_r, resSalt_r
70 _RL deltaRho, deltaDpt, dVol, bbl_tend
71 _RL sloc ( 0:sNx+1, 0:sNy+1 )
72 _RL tloc ( 0:sNx+1, 0:sNy+1 )
73 _RL rholoc ( 0:sNx+1, 0:sNy+1 )
74 _RL rhoBBL ( 0:sNx+1, 0:sNy+1 )
75 _RL bbl_rho1, bbl_rho2
76 CEOP
77
78 C-- Loops on tile indices bi,bj
79 DO bj=myByLo(myThid),myByHi(myThid)
80 DO bi=myBxLo(myThid),myBxHi(myThid)
81
82 C Initialize tendency terms, make local copy of
83 C bottomost temperature, salinity, in-situ density
84 C and in-situ BBL density.
85 DO j=0,sNy+1
86 DO i=0,sNx+1
87 bbl_TendTheta(i,j,bi,bj) = 0. _d 0
88 bbl_TendSalt (i,j,bi,bj) = 0. _d 0
89 kBot = max(1,kLowC(i,j,bi,bj))
90 tLoc(i,j) = theta(i,j,kBot,bi,bj)
91 sLoc(i,j) = salt (i,j,kBot,bi,bj)
92 rholoc(i,j) = rhoInSitu(i,j,kBot,bi,bj)
93 IF ( kBot .EQ. Nr ) THEN
94 rhoBBL(i,j) = bbl_rho_nr(i,j,bi,bj)
95 ELSE
96 rhoBBL(i,j) = rhoInSitu(i,j,kBot+1,bi,bj)
97 ENDIF
98 ENDDO
99 ENDDO
100
101 C==== Compute and apply vertical exchange between BBL and
102 C residual volume of botommost wet grid box.
103 C This operation does not change total tracer quantity
104 C in botommost wet grid box.
105
106 DO j=0,sNy+1
107 DO i=0,sNx+1
108 c DO j=-oly,sNy+oly
109 c DO i=-olx,sNx+olx
110 kBot = kLowC(i,j,bi,bj)
111 IF ( kBot .GT. 0 ) THEN
112 C If model density is lower than BBL, slowly diffuse upward.
113 IF ( rhoLoc(i,j) .LT. rhoBBL(i,j) )
114 & bbl_eta(i,j,bi,bj) = max ( 0. _d 0 ,
115 & bbl_eta(i,j,bi,bj) - bbl_wvel * dTtracerLev(kBot) )
116 C If model density is higher than BBL then mix instantly.
117 IF ( rhoLoc(i,j) .GE. rhoBBL(i,j) .OR.
118 & bbl_eta(i,j,bi,bj) .EQ. 0. _d 0 ) THEN
119 bbl_theta(i,j,bi,bj) = tLoc(i,j)
120 bbl_salt (i,j,bi,bj) = sLoc(i,j)
121 bbl_eta (i,j,bi,bj) = 0. _d 0
122 ENDIF
123 ENDIF
124 ENDDO
125 ENDDO
126
127 C==== Compute meridional bbl exchange at northern edge.
128 j=sNy
129 DO i=0,sNx+1
130 kLowC1 = kLowC(i,j ,bi,bj)
131 kLowC2 = kLowC(i,j+1,bi,bj)
132 IF ((kLowC1.GT.0).AND.(kLowC2.GT.0)) THEN
133
134 C Compare the bbl densities at the higher pressure
135 C (highest possible density of given t,s)
136 C bbl in situ density is stored in k > kLowC indices
137 kl = MAX(kLowC1,kLowC2) + 1
138 deltaDpt = R_low(i,j,bi,bj) + bbl_eta(i,j,bi,bj) -
139 & R_low(i,j+1,bi,bj) - bbl_eta(i,j+1,bi,bj)
140 IF ( deltaDpt .GT. 0. ) THEN
141 IF ( kl .GT. Nr ) THEN
142 bbl_rho1 = bbl_rho_nr(i,j,bi,bj)
143 ELSE
144 bbl_rho1 = rhoInSitu(i,j,kl,bi,bj)
145 ENDIF
146 bbl_rho2 = rhoInSitu(i,j+1,kLowC2,bi,bj)
147 ELSE
148 bbl_rho1 = rhoInSitu(i,j,kLowC1,bi,bj)
149 IF ( kl .GT. Nr ) THEN
150 bbl_rho2 = bbl_rho_nr(i,j+1,bi,bj)
151 ELSE
152 bbl_rho2 = rhoInSitu(i,j+1,kl,bi,bj)
153 ENDIF
154 ENDIF
155 deltaRho = bbl_rho2 - bbl_rho1
156 IF ( (deltaRho*deltaDpt) .LT. 0. ) THEN
157 C If heavy BBL water is higher than light BBL water,
158 C exchange properties laterally.
159
160 C Determine donnor and receiver cells.
161 IF ( bbl_rho1 .GT. bbl_rho2 ) THEN
162 d = j
163 r = j + 1
164 ELSE
165 d = j + 1
166 r = j
167 ENDIF
168
169 C Replenish thickness of donor cell, if needed.
170 thk_d = drF(kLowC(i,d,bi,bj)) *
171 & hFacC(i,d,kLowC(i,d,bi,bj),bi,bj)
172 IF ( ( bbl_theta(i,d,bi,bj) .EQ. tloc(i,d) ) .AND.
173 & ( bbl_salt (i,d,bi,bj) .EQ. sloc(i,d) ) .AND.
174 & ( bbl_eta (i,d,bi,bj) .LT. bbl_initEta ) )
175 & bbl_eta(i,d,bi,bj) = min ( bbl_initEta, thk_d )
176
177 C Compute some donnor and receiver cell properties.
178 thk_r = drF(kLowC(i,r,bi,bj)) *
179 & hFacC(i,r,kLowC(i,r,bi,bj),bi,bj)
180 Theta_r = tLoc(i,r)
181 Salt_r = sLoc(i,r)
182 bblTheta_d = bbl_theta(i,d,bi,bj)
183 bblTheta_r = bbl_theta(i,r,bi,bj)
184 bblSalt_d = bbl_salt (i,d,bi,bj)
185 bblSalt_r = bbl_salt (i,r,bi,bj)
186 bblEta_d = bbl_eta (i,d,bi,bj)
187 bblEta_r = bbl_eta (i,r,bi,bj)
188 resThk_r = thk_r - bblEta_r
189 resTheta_r = (Theta_r*thk_r-bblTheta_r*bblEta_r)/resThk_r
190 resSalt_r = (Salt_r *thk_r-bblSalt_r *bblEta_r)/resThk_r
191
192 C Compute volume transport from donnor to receiver.
193 dVol = min ( bblEta_d * rA(i,d,bi,bj) / 2. _d 0,
194 & resThk_r * rA(i,r,bi,bj) / 2. _d 0,
195 & dxG(i,j+1,bi,bj) * bblEta_d * bbl_hvel * deltaT )
196
197 C Compute temperature tracer tendencies for donor and receiver cell.
198 bbl_tend = dVol * (bblTheta_d - resTheta_r) / deltaT
199 bbl_TendTheta(i,d,bi,bj) = bbl_TendTheta(i,d,bi,bj) -
200 & bbl_tend / rA(i,d,bi,bj) / thk_d
201 bbl_TendTheta(i,r,bi,bj) = bbl_TendTheta(i,r,bi,bj) +
202 & bbl_tend / rA(i,r,bi,bj) / thk_r
203
204 C Compute salinity tracer tendencies for donor and receiver cell.
205 bbl_tend = dVol * (bblSalt_d - resSalt_r) / deltaT
206 bbl_TendSalt(i,d,bi,bj) = bbl_TendSalt(i,d,bi,bj) -
207 & bbl_tend / rA(i,d,bi,bj) / thk_d
208 bbl_TendSalt(i,r,bi,bj) = bbl_TendSalt(i,r,bi,bj) +
209 & bbl_tend / rA(i,r,bi,bj) / thk_r
210
211 C Adjust pbl thickness and tracer properties.
212 bbl_eta(i,d,bi,bj) = bblEta_d - dVol / rA(i,d,bi,bj)
213 IF ( bbl_eta(i,d,bi,bj) .LT. 0.0001 ) THEN
214 bbl_eta(i,d,bi,bj) = 0. _d 0
215 bbl_theta(i,d,bi,bj) = tLoc(i,d)
216 bbl_salt (i,d,bi,bj) = sLoc(i,d)
217 ENDIF
218 bbl_eta(i,r,bi,bj) = bblEta_r + dVol / rA(i,r,bi,bj)
219 bbl_theta(i,r,bi,bj) = ( dVol * bblTheta_d +
220 & bblEta_r * rA(i,r,bi,bj) * bblTheta_r ) /
221 & ( bbl_eta(i,r,bi,bj) * rA(i,r,bi,bj) )
222 bbl_salt(i,r,bi,bj) = ( dVol * bblSalt_d +
223 & bblEta_r * rA(i,r,bi,bj) * bblSalt_r ) /
224 & ( bbl_eta(i,r,bi,bj) * rA(i,r,bi,bj) )
225 ENDIF
226 ENDIF
227 ENDDO
228
229 C==== Compute meridional bbl exchange inside tile.
230 DO j=0,sNy-1
231 DO i=0,sNx+1
232 kLowC1 = kLowC(i,j ,bi,bj)
233 kLowC2 = kLowC(i,j+1,bi,bj)
234 IF ((kLowC1.GT.0).AND.(kLowC2.GT.0)) THEN
235
236 C Compare the bbl densities at the higher pressure
237 C (highest possible density of given t,s)
238 C bbl in situ density is stored in k > kLowC indices
239 kl = MAX(kLowC1,kLowC2) + 1
240 deltaDpt = R_low(i,j,bi,bj) + bbl_eta(i,j,bi,bj) -
241 & R_low(i,j+1,bi,bj) - bbl_eta(i,j+1,bi,bj)
242 IF ( deltaDpt .GT. 0. ) THEN
243 IF ( kl .GT. Nr ) THEN
244 bbl_rho1 = bbl_rho_nr(i,j,bi,bj)
245 ELSE
246 bbl_rho1 = rhoInSitu(i,j,kl,bi,bj)
247 ENDIF
248 bbl_rho2 = rhoInSitu(i,j+1,kLowC2,bi,bj)
249 ELSE
250 bbl_rho1 = rhoInSitu(i,j,kLowC1,bi,bj)
251 IF ( kl .GT. Nr ) THEN
252 bbl_rho2 = bbl_rho_nr(i,j+1,bi,bj)
253 ELSE
254 bbl_rho2 = rhoInSitu(i,j+1,kl,bi,bj)
255 ENDIF
256 ENDIF
257 deltaRho = bbl_rho2 - bbl_rho1
258 IF ( (deltaRho*deltaDpt) .LT. 0. ) THEN
259 C If heavy BBL water is higher than light BBL water,
260 C exchange properties laterally.
261
262 C Determine donnor and receiver cells.
263 IF ( bbl_rho1 .GT. bbl_rho2 ) THEN
264 d = j
265 r = j + 1
266 ELSE
267 d = j + 1
268 r = j
269 ENDIF
270
271 C Replenish thickness of donor cell, if needed.
272 thk_d = drF(kLowC(i,d,bi,bj)) *
273 & hFacC(i,d,kLowC(i,d,bi,bj),bi,bj)
274 IF ( ( bbl_theta(i,d,bi,bj) .EQ. tloc(i,d) ) .AND.
275 & ( bbl_salt (i,d,bi,bj) .EQ. sloc(i,d) ) .AND.
276 & ( bbl_eta (i,d,bi,bj) .LT. bbl_initEta ) )
277 & bbl_eta(i,d,bi,bj) = min ( bbl_initEta, thk_d )
278
279 C Compute some donnor and receiver cell properties.
280 thk_r = drF(kLowC(i,r,bi,bj)) *
281 & hFacC(i,r,kLowC(i,r,bi,bj),bi,bj)
282 Theta_r = tLoc(i,r)
283 Salt_r = sLoc(i,r)
284 bblTheta_d = bbl_theta(i,d,bi,bj)
285 bblTheta_r = bbl_theta(i,r,bi,bj)
286 bblSalt_d = bbl_salt (i,d,bi,bj)
287 bblSalt_r = bbl_salt (i,r,bi,bj)
288 bblEta_d = bbl_eta (i,d,bi,bj)
289 bblEta_r = bbl_eta (i,r,bi,bj)
290 resThk_r = thk_r - bblEta_r
291 resTheta_r = (Theta_r*thk_r-bblTheta_r*bblEta_r)/resThk_r
292 resSalt_r = (Salt_r *thk_r-bblSalt_r *bblEta_r)/resThk_r
293
294 C Compute volume transport from donnor to receiver.
295 dVol = min ( bblEta_d * rA(i,d,bi,bj) / 2. _d 0,
296 & resThk_r * rA(i,r,bi,bj) / 2. _d 0,
297 & dxG(i,j+1,bi,bj) * bblEta_d * bbl_hvel * deltaT )
298
299 C Compute temperature tracer tendencies for donor and receiver cell.
300 bbl_tend = dVol * (bblTheta_d - resTheta_r) / deltaT
301 bbl_TendTheta(i,d,bi,bj) = bbl_TendTheta(i,d,bi,bj) -
302 & bbl_tend / rA(i,d,bi,bj) / thk_d
303 bbl_TendTheta(i,r,bi,bj) = bbl_TendTheta(i,r,bi,bj) +
304 & bbl_tend / rA(i,r,bi,bj) / thk_r
305
306 C Compute salinity tracer tendencies for donor and receiver cell.
307 bbl_tend = dVol * (bblSalt_d - resSalt_r) / deltaT
308 bbl_TendSalt(i,d,bi,bj) = bbl_TendSalt(i,d,bi,bj) -
309 & bbl_tend / rA(i,d,bi,bj) / thk_d
310 bbl_TendSalt(i,r,bi,bj) = bbl_TendSalt(i,r,bi,bj) +
311 & bbl_tend / rA(i,r,bi,bj) / thk_r
312
313 C Adjust pbl thickness and tracer properties.
314 bbl_eta(i,d,bi,bj) = bblEta_d - dVol / rA(i,d,bi,bj)
315 IF ( bbl_eta(i,d,bi,bj) .LT. 0.0001 ) THEN
316 bbl_eta(i,d,bi,bj) = 0. _d 0
317 bbl_theta(i,d,bi,bj) = tLoc(i,d)
318 bbl_salt (i,d,bi,bj) = sLoc(i,d)
319 ENDIF
320 bbl_eta(i,r,bi,bj) = bblEta_r + dVol / rA(i,r,bi,bj)
321 bbl_theta(i,r,bi,bj) = ( dVol * bblTheta_d +
322 & bblEta_r * rA(i,r,bi,bj) * bblTheta_r ) /
323 & ( bbl_eta(i,r,bi,bj) * rA(i,r,bi,bj) )
324 bbl_salt(i,r,bi,bj) = ( dVol * bblSalt_d +
325 & bblEta_r * rA(i,r,bi,bj) * bblSalt_r ) /
326 & ( bbl_eta(i,r,bi,bj) * rA(i,r,bi,bj) )
327 ENDIF
328 ENDIF
329 ENDDO
330 ENDDO
331
332 C==== Compute zonal bbl exchange at Eastern edge.
333 i=sNx
334 DO j=1,sNy
335 kLowC1 = kLowC(i ,j,bi,bj)
336 kLowC2 = kLowC(i+1,j,bi,bj)
337 IF ((kLowC1.GT.0).AND.(kLowC2.GT.0)) THEN
338
339 C Compare the bbl densities at the higher pressure
340 C (highest possible density of given t,s)
341 C bbl in situ density is stored in k > kLowC indices
342 kl = MAX(kLowC1,kLowC2) + 1
343 deltaDpt = R_low(i,j,bi,bj) + bbl_eta(i,j,bi,bj) -
344 & R_low(i+1,j,bi,bj) - bbl_eta(i+1,j,bi,bj)
345 IF ( deltaDpt .GT. 0. ) THEN
346 IF ( kl .GT. Nr ) THEN
347 bbl_rho1 = bbl_rho_nr(i,j,bi,bj)
348 ELSE
349 bbl_rho1 = rhoInSitu(i,j,kl,bi,bj)
350 ENDIF
351 bbl_rho2 = rhoInSitu(i+1,j,kLowC2,bi,bj)
352 ELSE
353 bbl_rho1 = rhoInSitu(i,j,kLowC1,bi,bj)
354 IF ( kl .GT. Nr ) THEN
355 bbl_rho2 = bbl_rho_nr(i+1,j,bi,bj)
356 ELSE
357 bbl_rho2 = rhoInSitu(i+1,j,kl,bi,bj)
358 ENDIF
359 ENDIF
360 deltaRho = bbl_rho2 - bbl_rho1
361 IF ( (deltaRho*deltaDpt) .LT. 0. ) THEN
362 C If heavy BBL water is higher than light BBL water,
363 C exchange properties laterally.
364
365 C Determine donnor and receiver cells.
366 IF ( bbl_rho1 .GT. bbl_rho2 ) THEN
367 d = i
368 r = i + 1
369 ELSE
370 d = i + 1
371 r = i
372 ENDIF
373
374 C Replenish thickness of donor cell, if needed.
375 thk_d = drF(kLowC(d,j,bi,bj)) *
376 & hFacC(d,j,kLowC(d,j,bi,bj),bi,bj)
377 IF ( ( bbl_theta(d,j,bi,bj) .EQ. tloc(d,j) ) .AND.
378 & ( bbl_salt (d,j,bi,bj) .EQ. sloc(d,j) ) .AND.
379 & ( bbl_eta (d,j,bi,bj) .LT. bbl_initEta ) )
380 & bbl_eta(d,j,bi,bj) = min ( bbl_initEta, thk_d )
381
382 C Compute some donnor and receiver cell properties.
383 thk_r = drF(kLowC(r,j,bi,bj)) *
384 & hFacC(r,j,kLowC(r,j,bi,bj),bi,bj)
385 Theta_r = tLoc(r,j)
386 Salt_r = sLoc(r,j)
387 bblTheta_d = bbl_theta(d,j,bi,bj)
388 bblTheta_r = bbl_theta(r,j,bi,bj)
389 bblSalt_d = bbl_salt (d,j,bi,bj)
390 bblSalt_r = bbl_salt (r,j,bi,bj)
391 bblEta_d = bbl_eta (d,j,bi,bj)
392 bblEta_r = bbl_eta (r,j,bi,bj)
393 resThk_r = thk_r - bblEta_r
394 resTheta_r = (Theta_r*thk_r-bblTheta_r*bblEta_r)/resThk_r
395 resSalt_r = (Salt_r *thk_r-bblSalt_r *bblEta_r)/resThk_r
396
397 C Compute volume transport from donnor to receiver.
398 dVol = min ( bblEta_d * rA(d,j,bi,bj) / 2. _d 0,
399 & resThk_r * rA(r,j,bi,bj) / 2. _d 0,
400 & dxG(i+1,j,bi,bj) * bblEta_d * bbl_hvel * deltaT )
401
402 C Compute temperature tracer tendencies for donor and receiver cell.
403 bbl_tend = dVol * (bblTheta_d - resTheta_r) / deltaT
404 bbl_TendTheta(d,j,bi,bj) = bbl_TendTheta(d,j,bi,bj) -
405 & bbl_tend / rA(d,j,bi,bj) / thk_d
406 bbl_TendTheta(r,j,bi,bj) = bbl_TendTheta(r,j,bi,bj) +
407 & bbl_tend / rA(r,j,bi,bj) / thk_r
408
409 C Compute salinity tracer tendencies for donor and receiver cell.
410 bbl_tend = dVol * (bblSalt_d - resSalt_r) / deltaT
411 bbl_TendSalt(d,j,bi,bj) = bbl_TendSalt(d,j,bi,bj) -
412 & bbl_tend / rA(d,j,bi,bj) / thk_d
413 bbl_TendSalt(r,j,bi,bj) = bbl_TendSalt(r,j,bi,bj) +
414 & bbl_tend / rA(r,j,bi,bj) / thk_r
415
416 C Adjust pbl thickness and tracer properties.
417 bbl_eta(d,j,bi,bj) = bblEta_d - dVol / rA(d,j,bi,bj)
418 IF ( bbl_eta(d,j,bi,bj) .LT. 0.0001 ) THEN
419 bbl_eta(d,j,bi,bj) = 0. _d 0
420 bbl_theta(d,j,bi,bj) = tLoc(d,j)
421 bbl_salt (d,j,bi,bj) = sLoc(d,j)
422 ENDIF
423 bbl_eta(r,j,bi,bj) = bblEta_r + dVol / rA(r,j,bi,bj)
424 bbl_theta(r,j,bi,bj) = ( dVol * bblTheta_d +
425 & bblEta_r * rA(r,j,bi,bj) * bblTheta_r ) /
426 & ( bbl_eta(r,j,bi,bj) * rA(r,j,bi,bj) )
427 bbl_salt(r,j,bi,bj) = ( dVol * bblSalt_d +
428 & bblEta_r * rA(r,j,bi,bj) * bblSalt_r ) /
429 & ( bbl_eta(r,j,bi,bj) * rA(r,j,bi,bj) )
430 ENDIF
431 ENDIF
432 ENDDO
433
434 C==== Compute zonal bbl exchange inside tile.
435 DO j=1,sNy
436 DO i=0,sNx-1
437 kLowC1 = kLowC(i ,j,bi,bj)
438 kLowC2 = kLowC(i+1,j,bi,bj)
439 IF ((kLowC1.GT.0).AND.(kLowC2.GT.0)) THEN
440
441 C Compare the bbl densities at the higher pressure
442 C (highest possible density of given t,s)
443 C bbl in situ density is stored in k > kLowC indices
444 kl = MAX(kLowC1,kLowC2) + 1
445 deltaDpt = R_low(i,j,bi,bj) + bbl_eta(i,j,bi,bj) -
446 & R_low(i+1,j,bi,bj) - bbl_eta(i+1,j,bi,bj)
447 IF ( deltaDpt .GT. 0. ) THEN
448 IF ( kl .GT. Nr ) THEN
449 bbl_rho1 = bbl_rho_nr(i,j,bi,bj)
450 ELSE
451 bbl_rho1 = rhoInSitu(i,j,kl,bi,bj)
452 ENDIF
453 bbl_rho2 = rhoInSitu(i+1,j,kLowC2,bi,bj)
454 ELSE
455 bbl_rho1 = rhoInSitu(i,j,kLowC1,bi,bj)
456 IF ( kl .GT. Nr ) THEN
457 bbl_rho2 = bbl_rho_nr(i+1,j,bi,bj)
458 ELSE
459 bbl_rho2 = rhoInSitu(i+1,j,kl,bi,bj)
460 ENDIF
461 ENDIF
462 deltaRho = bbl_rho2 - bbl_rho1
463 IF ( (deltaRho*deltaDpt) .LT. 0. ) THEN
464 C If heavy BBL water is higher than light BBL water,
465 C exchange properties laterally.
466
467 C Determine donnor and receiver cells.
468 IF ( bbl_rho1 .GT. bbl_rho2 ) THEN
469 d = i
470 r = i + 1
471 ELSE
472 d = i + 1
473 r = i
474 ENDIF
475
476 C Replenish thickness of donor cell, if needed.
477 thk_d = drF(kLowC(d,j,bi,bj)) *
478 & hFacC(d,j,kLowC(d,j,bi,bj),bi,bj)
479 IF ( ( bbl_theta(d,j,bi,bj) .EQ. tloc(d,j) ) .AND.
480 & ( bbl_salt (d,j,bi,bj) .EQ. sloc(d,j) ) .AND.
481 & ( bbl_eta (d,j,bi,bj) .LT. bbl_initEta ) )
482 & bbl_eta(d,j,bi,bj) = min ( bbl_initEta, thk_d )
483
484 C Compute some donnor and receiver cell properties.
485 thk_r = drF(kLowC(r,j,bi,bj)) *
486 & hFacC(r,j,kLowC(r,j,bi,bj),bi,bj)
487 Theta_r = tLoc(r,j)
488 Salt_r = sLoc(r,j)
489 bblTheta_d = bbl_theta(d,j,bi,bj)
490 bblTheta_r = bbl_theta(r,j,bi,bj)
491 bblSalt_d = bbl_salt (d,j,bi,bj)
492 bblSalt_r = bbl_salt (r,j,bi,bj)
493 bblEta_d = bbl_eta (d,j,bi,bj)
494 bblEta_r = bbl_eta (r,j,bi,bj)
495 resThk_r = thk_r - bblEta_r
496 resTheta_r = (Theta_r*thk_r-bblTheta_r*bblEta_r)/resThk_r
497 resSalt_r = (Salt_r *thk_r-bblSalt_r *bblEta_r)/resThk_r
498
499 C Compute volume transport from donnor to receiver.
500 dVol = min ( bblEta_d * rA(d,j,bi,bj) / 2. _d 0,
501 & resThk_r * rA(r,j,bi,bj) / 2. _d 0,
502 & dxG(i+1,j,bi,bj) * bblEta_d * bbl_hvel * deltaT )
503
504 C Compute temperature tracer tendencies for donor and receiver cell.
505 bbl_tend = dVol * (bblTheta_d - resTheta_r) / deltaT
506 bbl_TendTheta(d,j,bi,bj) = bbl_TendTheta(d,j,bi,bj) -
507 & bbl_tend / rA(d,j,bi,bj) / thk_d
508 bbl_TendTheta(r,j,bi,bj) = bbl_TendTheta(r,j,bi,bj) +
509 & bbl_tend / rA(r,j,bi,bj) / thk_r
510
511 C Compute salinity tracer tendencies for donor and receiver cell.
512 bbl_tend = dVol * (bblSalt_d - resSalt_r) / deltaT
513 bbl_TendSalt(d,j,bi,bj) = bbl_TendSalt(d,j,bi,bj) -
514 & bbl_tend / rA(d,j,bi,bj) / thk_d
515 bbl_TendSalt(r,j,bi,bj) = bbl_TendSalt(r,j,bi,bj) +
516 & bbl_tend / rA(r,j,bi,bj) / thk_r
517
518 C Adjust pbl thickness and tracer properties.
519 bbl_eta(d,j,bi,bj) = bblEta_d - dVol / rA(d,j,bi,bj)
520 IF ( bbl_eta(d,j,bi,bj) .LT. 0.0001 ) THEN
521 bbl_eta(d,j,bi,bj) = 0. _d 0
522 bbl_theta(d,j,bi,bj) = tLoc(d,j)
523 bbl_salt (d,j,bi,bj) = sLoc(d,j)
524 ENDIF
525 bbl_eta(r,j,bi,bj) = bblEta_r + dVol / rA(r,j,bi,bj)
526 bbl_theta(r,j,bi,bj) = ( dVol * bblTheta_d +
527 & bblEta_r * rA(r,j,bi,bj) * bblTheta_r ) /
528 & ( bbl_eta(r,j,bi,bj) * rA(r,j,bi,bj) )
529 bbl_salt(r,j,bi,bj) = ( dVol * bblSalt_d +
530 & bblEta_r * rA(r,j,bi,bj) * bblSalt_r ) /
531 & ( bbl_eta(r,j,bi,bj) * rA(r,j,bi,bj) )
532 ENDIF
533 ENDIF
534 ENDDO
535 ENDDO
536
537 C-- end bi,bj loops.
538 ENDDO
539 ENDDO
540
541 CALL EXCH_XY_RL( bbl_eta , myThid )
542 CALL EXCH_XY_RL( bbl_theta , myThid )
543 CALL EXCH_XY_RL( bbl_salt , myThid )
544 CALL EXCH_XY_RL( bbl_TendTheta, myThid )
545 CALL EXCH_XY_RL( bbl_TendSalt , myThid )
546
547 RETURN
548 END

  ViewVC Help
Powered by ViewVC 1.1.22