/[MITgcm]/MITgcm/model/src/do_oceanic_phys.F
ViewVC logotype

Contents of /MITgcm/model/src/do_oceanic_phys.F

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


Revision 1.63 - (show annotations) (download)
Wed Apr 30 01:44:12 2008 UTC (16 years, 1 month ago) by heimbach
Branch: MAIN
Changes since 1.62: +1 -5 lines
Remove this silly ifdef (what was I sinking...)

1 C $Header: /u/gcmpack/MITgcm/model/src/do_oceanic_phys.F,v 1.62 2008/04/22 15:18:00 heimbach Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 #ifdef ALLOW_AUTODIFF_TAMC
8 # ifdef ALLOW_GMREDI
9 # include "GMREDI_OPTIONS.h"
10 # endif
11 # ifdef ALLOW_KPP
12 # include "KPP_OPTIONS.h"
13 # endif
14 # ifdef ALLOW_SEAICE
15 # include "SEAICE_OPTIONS.h"
16 # endif
17 #endif /* ALLOW_AUTODIFF_TAMC */
18
19 CBOP
20 C !ROUTINE: DO_OCEANIC_PHYS
21 C !INTERFACE:
22 SUBROUTINE DO_OCEANIC_PHYS(myTime, myIter, myThid)
23 C !DESCRIPTION: \bv
24 C *==========================================================*
25 C | SUBROUTINE DO_OCEANIC_PHYS
26 C | o Controlling routine for oceanic physics and
27 C | parameterization
28 C *==========================================================*
29 C | o originally, part of S/R thermodynamics
30 C *==========================================================*
31 C \ev
32
33 C !USES:
34 IMPLICIT NONE
35 C == Global variables ===
36 #include "SIZE.h"
37 #include "EEPARAMS.h"
38 #include "PARAMS.h"
39 #include "DYNVARS.h"
40 #include "GRID.h"
41 #ifdef ALLOW_TIMEAVE
42 #include "TIMEAVE_STATV.h"
43 #endif
44 #if defined (ALLOW_BALANCE_FLUXES) && !(defined ALLOW_AUTODIFF_TAMC)
45 #include "FFIELDS.h"
46 #endif
47
48 #ifdef ALLOW_AUTODIFF_TAMC
49 # include "tamc.h"
50 # include "tamc_keys.h"
51 # include "FFIELDS.h"
52 # include "SURFACE.h"
53 # include "EOS.h"
54 # ifdef ALLOW_KPP
55 # include "KPP.h"
56 # endif
57 # ifdef ALLOW_GMREDI
58 # include "GMREDI.h"
59 # endif
60 # ifdef ALLOW_EBM
61 # include "EBM.h"
62 # endif
63 # ifdef ALLOW_EXF
64 # include "ctrl.h"
65 # include "EXF_FIELDS.h"
66 # ifdef ALLOW_BULKFORMULAE
67 # include "EXF_CONSTANTS.h"
68 # endif
69 # endif
70 # ifdef ALLOW_SEAICE
71 # include "SEAICE.h"
72 # endif
73 #endif /* ALLOW_AUTODIFF_TAMC */
74
75 C !INPUT/OUTPUT PARAMETERS:
76 C == Routine arguments ==
77 C myTime :: Current time in simulation
78 C myIter :: Current iteration number in simulation
79 C myThid :: Thread number for this instance of the routine.
80 _RL myTime
81 INTEGER myIter
82 INTEGER myThid
83
84 C !LOCAL VARIABLES:
85 C == Local variables
86 C rhoK, rhoKm1 :: Density at current level, and level above
87 C iMin, iMax :: Ranges and sub-block indices on which calculations
88 C jMin, jMax are applied.
89 C bi, bj :: tile indices
90 C i,j,k :: loop indices
91 _RL rhoKp1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
92 _RL rhoKm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
93 _RL rhoK (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
94 _RL sigmaX (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
95 _RL sigmaY (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
96 _RL sigmaR (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
97 INTEGER iMin, iMax
98 INTEGER jMin, jMax
99 INTEGER bi, bj
100 INTEGER i, j, k
101 INTEGER doDiagsRho
102 #ifdef ALLOW_DIAGNOSTICS
103 LOGICAL DIAGNOSTICS_IS_ON
104 EXTERNAL DIAGNOSTICS_IS_ON
105 #endif /* ALLOW_DIAGNOSTICS */
106
107 CEOP
108
109 #ifdef ALLOW_AUTODIFF_TAMC
110 C-- dummy statement to end declaration part
111 itdkey = 1
112 #endif /* ALLOW_AUTODIFF_TAMC */
113
114 #ifdef ALLOW_DEBUG
115 IF ( debugLevel .GE. debLevB )
116 & CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)
117 #endif
118
119 doDiagsRho = 0
120 #ifdef ALLOW_DIAGNOSTICS
121 IF ( useDiagnostics .AND. fluidIsWater ) THEN
122 IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.
123 & DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.
124 & DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.
125 & DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.
126 & DIAGNOSTICS_IS_ON('WRHOMASS',myThid) ) doDiagsRho = 2
127 IF ( doDiagsRho.EQ.0 .AND.
128 & DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) ) doDiagsRho = 1
129 IF ( doDiagsRho.EQ.0 .AND.
130 & DIAGNOSTICS_IS_ON('DRHODR ',myThid) ) doDiagsRho = 1
131 ENDIF
132 #endif /* ALLOW_DIAGNOSTICS */
133
134 #ifdef ALLOW_SEAICE
135 C-- Call sea ice model to compute forcing/external data fields. In
136 C addition to computing prognostic sea-ice variables and diagnosing the
137 C forcing/external data fields that drive the ocean model, SEAICE_MODEL
138 C also sets theta to the freezing point under sea-ice. The implied
139 C surface heat flux is then stored in variable surfaceTendencyTice,
140 C which is needed by KPP package (kpp_calc.F and kpp_transport_t.F)
141 C to diagnose surface buoyancy fluxes and for the non-local transport
142 C term. Because this call precedes model thermodynamics, temperature
143 C under sea-ice may not be "exactly" at the freezing point by the time
144 C theta is dumped or time-averaged.
145 IF ( useSEAICE ) THEN
146 # ifdef ALLOW_AUTODIFF_TAMC
147 CADJ STORE atemp,aqh,precip = comlev1, key = ikey_dynamics
148 CADJ STORE swdown,lwdown = comlev1, key = ikey_dynamics
149 cph# ifdef EXF_READ_EVAP
150 CADJ STORE evap = comlev1, key = ikey_dynamics
151 cph# endif
152 CADJ STORE uvel,vvel = comlev1, key = ikey_dynamics
153 # ifdef SEAICE_ALLOW_DYNAMICS
154 CADJ STORE uice = comlev1, key = ikey_dynamics
155 CADJ STORE vice = comlev1, key = ikey_dynamics
156 # ifdef SEAICE_ALLOW_EVP
157 CADJ STORE seaice_sigma1 = comlev1, key = ikey_dynamics
158 CADJ STORE seaice_sigma2 = comlev1, key = ikey_dynamics
159 CADJ STORE seaice_sigma12 = comlev1, key = ikey_dynamics
160 # endif
161 # endif
162 # ifdef SEAICE_SALINITY
163 CADJ STORE salt = comlev1, key = ikey_dynamics
164 # endif
165 # ifdef ATMOSPHERIC_LOADING
166 CADJ STORE siceload = comlev1, key = ikey_dynamics
167 # endif
168 # ifdef NONLIN_FRSURF
169 CADJ STORE recip_hfacc = comlev1, key = ikey_dynamics
170 # endif
171 # endif
172 # ifdef ALLOW_DEBUG
173 IF ( debugLevel .GE. debLevB )
174 & CALL DEBUG_CALL('SEAICE_MODEL',myThid)
175 # endif
176 CALL TIMER_START('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
177 CALL SEAICE_MODEL( myTime, myIter, myThid )
178 CALL TIMER_STOP ('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
179 # ifdef ALLOW_COST
180 CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
181 # endif
182 ENDIF
183 #endif /* ALLOW_SEAICE */
184
185 #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
186 IF ( useThSIce .AND. fluidIsWater ) THEN
187 #ifdef ALLOW_DEBUG
188 IF ( debugLevel .GE. debLevB )
189 & CALL DEBUG_CALL('THSICE_MAIN',myThid)
190 #endif
191 C-- Step forward Therm.Sea-Ice variables
192 C and modify forcing terms including effects from ice
193 CALL TIMER_START('THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
194 CALL THSICE_MAIN( myTime, myIter, myThid )
195 CALL TIMER_STOP( 'THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
196 ENDIF
197 #endif /* ALLOW_THSICE */
198
199 #ifdef ALLOW_SHELFICE
200 IF ( useShelfIce .AND. fluidIsWater ) THEN
201 #ifdef ALLOW_DEBUG
202 IF ( debugLevel .GE. debLevB )
203 & CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
204 #endif
205 C compute temperature and (virtual) salt flux at the
206 C shelf-ice ocean interface
207 CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
208 & myThid)
209 CALL SHELFICE_THERMODYNAMICS( myTime, myIter, myThid )
210 CALL TIMER_STOP( 'SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
211 & myThid)
212 ENDIF
213 #endif /* ALLOW_SHELFICE */
214
215 C-- Freeze water at the surface
216 #ifdef ALLOW_AUTODIFF_TAMC
217 CADJ STORE theta = comlev1, key = ikey_dynamics
218 #endif
219 IF ( allowFreezing
220 & .AND. .NOT. useSEAICE
221 & .AND. .NOT. useThSIce ) THEN
222 CALL FREEZE_SURFACE( myTime, myIter, myThid )
223 ENDIF
224
225 #ifdef ALLOW_OCN_COMPON_INTERF
226 C-- Apply imported data (from coupled interface) to forcing fields
227 C jmc: do not know precisely where to put this call (bf or af thSIce ?)
228 IF ( useCoupler ) THEN
229 CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
230 ENDIF
231 #endif /* ALLOW_OCN_COMPON_INTERF */
232
233 #ifdef ALLOW_BALANCE_FLUXES
234 C balance fluxes
235 IF ( balanceEmPmR )
236 & CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,
237 & 'EmPmR', myTime, myThid )
238 IF ( balanceQnet )
239 & CALL REMOVE_MEAN_RS( 1, Qnet, maskH, maskH, rA, drF,
240 & 'Qnet ', myTime, myThid )
241 #endif /* ALLOW_BALANCE_FLUXES */
242
243 #ifdef ALLOW_AUTODIFF_TAMC
244 C-- HPF directive to help TAMC
245 CHPF$ INDEPENDENT
246 #endif /* ALLOW_AUTODIFF_TAMC */
247 DO bj=myByLo(myThid),myByHi(myThid)
248 #ifdef ALLOW_AUTODIFF_TAMC
249 C-- HPF directive to help TAMC
250 CHPF$ INDEPENDENT
251 #endif /* ALLOW_AUTODIFF_TAMC */
252 DO bi=myBxLo(myThid),myBxHi(myThid)
253
254 #ifdef ALLOW_AUTODIFF_TAMC
255 act1 = bi - myBxLo(myThid)
256 max1 = myBxHi(myThid) - myBxLo(myThid) + 1
257 act2 = bj - myByLo(myThid)
258 max2 = myByHi(myThid) - myByLo(myThid) + 1
259 act3 = myThid - 1
260 max3 = nTx*nTy
261 act4 = ikey_dynamics - 1
262 itdkey = (act1 + 1) + act2*max1
263 & + act3*max1*max2
264 & + act4*max1*max2*max3
265 #else /* ALLOW_AUTODIFF_TAMC */
266 C if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
267 C and all vertical mixing schemes, but keep OBCS_CALC
268 IF ( fluidIsWater ) THEN
269 #endif /* ALLOW_AUTODIFF_TAMC */
270
271 C-- Set up work arrays with valid (i.e. not NaN) values
272 C These inital values do not alter the numerical results. They
273 C just ensure that all memory references are to valid floating
274 C point numbers. This prevents spurious hardware signals due to
275 C uninitialised but inert locations.
276
277 DO j=1-OLy,sNy+OLy
278 DO i=1-OLx,sNx+OLx
279 rhoK (i,j) = 0. _d 0
280 rhoKm1 (i,j) = 0. _d 0
281 rhoKp1 (i,j) = 0. _d 0
282 ENDDO
283 ENDDO
284
285 DO k=1,Nr
286 DO j=1-OLy,sNy+OLy
287 DO i=1-OLx,sNx+OLx
288 C This is currently also used by IVDC and Diagnostics
289 sigmaX(i,j,k) = 0. _d 0
290 sigmaY(i,j,k) = 0. _d 0
291 sigmaR(i,j,k) = 0. _d 0
292 #ifdef ALLOW_AUTODIFF_TAMC
293 cph all the following init. are necessary for TAF
294 cph although some of these are re-initialised later.
295 IVDConvCount(i,j,k,bi,bj) = 0.
296 # ifdef ALLOW_GMREDI
297 Kwx(i,j,k,bi,bj) = 0. _d 0
298 Kwy(i,j,k,bi,bj) = 0. _d 0
299 Kwz(i,j,k,bi,bj) = 0. _d 0
300 # ifdef GM_NON_UNITY_DIAGONAL
301 Kux(i,j,k,bi,bj) = 0. _d 0
302 Kvy(i,j,k,bi,bj) = 0. _d 0
303 # endif
304 # ifdef GM_EXTRA_DIAGONAL
305 Kuz(i,j,k,bi,bj) = 0. _d 0
306 Kvz(i,j,k,bi,bj) = 0. _d 0
307 # endif
308 # ifdef GM_BOLUS_ADVEC
309 GM_PsiX(i,j,k,bi,bj) = 0. _d 0
310 GM_PsiY(i,j,k,bi,bj) = 0. _d 0
311 # endif
312 # ifdef GM_VISBECK_VARIABLE_K
313 VisbeckK(i,j,bi,bj) = 0. _d 0
314 # endif
315 # endif /* ALLOW_GMREDI */
316 # ifdef ALLOW_KPP
317 KPPdiffKzS(i,j,k,bi,bj) = 0. _d 0
318 KPPdiffKzT(i,j,k,bi,bj) = 0. _d 0
319 # endif /* ALLOW_KPP */
320 #endif /* ALLOW_AUTODIFF_TAMC */
321 ENDDO
322 ENDDO
323 ENDDO
324
325 iMin = 1-OLx
326 iMax = sNx+OLx
327 jMin = 1-OLy
328 jMax = sNy+OLy
329
330 #ifdef ALLOW_AUTODIFF_TAMC
331 CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
332 CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
333 CADJ STORE totphihyd(:,:,:,bi,bj)
334 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
335 # ifdef ALLOW_KPP
336 CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
337 CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
338 # endif
339 #endif /* ALLOW_AUTODIFF_TAMC */
340
341 #ifdef ALLOW_DEBUG
342 IF ( debugLevel .GE. debLevB )
343 & CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)
344 #endif
345
346 C-- Start of diagnostic loop
347 DO k=Nr,1,-1
348
349 #ifdef ALLOW_AUTODIFF_TAMC
350 C? Patrick, is this formula correct now that we change the loop range?
351 C? Do we still need this?
352 cph kkey formula corrected.
353 cph Needed for rhoK, rhoKm1, in the case useGMREDI.
354 kkey = (itdkey-1)*Nr + k
355 #endif /* ALLOW_AUTODIFF_TAMC */
356
357 C-- Calculate gradients of potential density for isoneutral
358 C slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
359 IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
360 & .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
361 #ifdef ALLOW_DEBUG
362 IF ( debugLevel .GE. debLevB )
363 & CALL DEBUG_CALL('FIND_RHO',myThid)
364 #endif
365 #ifdef ALLOW_AUTODIFF_TAMC
366 CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
367 CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
368 #endif /* ALLOW_AUTODIFF_TAMC */
369 CALL FIND_RHO(
370 I bi, bj, iMin, iMax, jMin, jMax, k, k,
371 I theta, salt,
372 O rhoK,
373 I myThid )
374
375 IF (k.GT.1) THEN
376 #ifdef ALLOW_AUTODIFF_TAMC
377 CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
378 CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
379 #endif /* ALLOW_AUTODIFF_TAMC */
380 CALL FIND_RHO(
381 I bi, bj, iMin, iMax, jMin, jMax, k-1, k,
382 I theta, salt,
383 O rhoKm1,
384 I myThid )
385 ENDIF
386 #ifdef ALLOW_DEBUG
387 IF ( debugLevel .GE. debLevB )
388 & CALL DEBUG_CALL('GRAD_SIGMA',myThid)
389 #endif
390 cph Avoid variable aliasing for adjoint !!!
391 DO j=jMin,jMax
392 DO i=iMin,iMax
393 rhoKp1(i,j) = rhoK(i,j)
394 ENDDO
395 ENDDO
396 CALL GRAD_SIGMA(
397 I bi, bj, iMin, iMax, jMin, jMax, k,
398 I rhoK, rhoKm1, rhoKp1,
399 O sigmaX, sigmaY, sigmaR,
400 I myThid )
401 ENDIF
402
403 C-- Implicit Vertical Diffusion for Convection
404 c ==> should use sigmaR !!!
405 IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
406 #ifdef ALLOW_DEBUG
407 IF ( debugLevel .GE. debLevB )
408 & CALL DEBUG_CALL('CALC_IVDC',myThid)
409 #endif
410 CALL CALC_IVDC(
411 I bi, bj, iMin, iMax, jMin, jMax, k,
412 I rhoKm1, rhoK,
413 I myTime, myIter, myThid)
414 ENDIF
415
416 #ifdef ALLOW_DIAGNOSTICS
417 IF ( doDiagsRho.GE.2 ) THEN
418 CALL DIAGS_RHO( k, bi, bj,
419 I rhoK, rhoKm1,
420 I myTime, myIter, myThid)
421 ENDIF
422 #endif
423
424 C-- end of diagnostic k loop (Nr:1)
425 ENDDO
426
427 #ifdef ALLOW_AUTODIFF_TAMC
428 CADJ STORE IVDConvCount(:,:,:,bi,bj)
429 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
430 #endif
431
432 C-- Diagnose Mixed Layer Depth:
433 IF ( useGMRedi .OR. doDiagsRho.GE.1 ) THEN
434 CALL CALC_OCE_MXLAYER( rhoK, sigmaR,
435 & bi, bj, myTime, myIter, myThid )
436 ENDIF
437
438 #ifdef ALLOW_SALT_PLUME
439 IF ( useSALT_PLUME ) THEN
440 CALL SALT_PLUME_CALC_DEPTH( rhoK, sigmaR,
441 & bi, bj, myTime, myIter, myThid )
442 ENDIF
443 #endif /* ALLOW_SALT_PLUME */
444
445 #ifdef ALLOW_DIAGNOSTICS
446 IF ( doDiagsRho.GE.1 ) THEN
447 CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR ', 0, Nr,
448 & 2, bi, bj, myThid)
449 ENDIF
450 #endif /* ALLOW_DIAGNOSTICS */
451
452 C-- Determines forcing terms based on external fields
453 C relaxation terms, etc.
454 #ifdef ALLOW_DEBUG
455 IF ( debugLevel .GE. debLevB )
456 & CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
457 #endif
458 #ifdef ALLOW_AUTODIFF_TAMC
459 CADJ STORE EmPmR(:,:,bi,bj)
460 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
461 # ifdef EXACT_CONSERV
462 CADJ STORE PmEpR(:,:,bi,bj)
463 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
464 # endif
465 # ifdef NONLIN_FRSURF
466 CADJ STORE hFac_surfC(:,:,bi,bj)
467 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
468 CADJ STORE recip_hFacC(:,:,:,bi,bj)
469 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
470 # endif
471 #endif
472 CALL EXTERNAL_FORCING_SURF(
473 I bi, bj, iMin, iMax, jMin, jMax,
474 I myTime, myIter, myThid )
475 #ifdef ALLOW_AUTODIFF_TAMC
476 # ifdef EXACT_CONSERV
477 cph-test
478 cphCADJ STORE PmEpR(:,:,bi,bj)
479 cphCADJ & = comlev1_bibj, key=itdkey, byte=isbyte
480 # endif
481 #endif
482
483 #ifdef ALLOW_AUTODIFF_TAMC
484 cph needed for KPP
485 CADJ STORE surfaceForcingU(:,:,bi,bj)
486 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
487 CADJ STORE surfaceForcingV(:,:,bi,bj)
488 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
489 CADJ STORE surfaceForcingS(:,:,bi,bj)
490 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
491 CADJ STORE surfaceForcingT(:,:,bi,bj)
492 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
493 CADJ STORE surfaceForcingTice(:,:,bi,bj)
494 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
495 #endif /* ALLOW_AUTODIFF_TAMC */
496
497 #ifdef ALLOW_KPP
498 C-- Compute KPP mixing coefficients
499 IF (useKPP) THEN
500 #ifdef ALLOW_DEBUG
501 IF ( debugLevel .GE. debLevB )
502 & CALL DEBUG_CALL('KPP_CALC',myThid)
503 #endif
504 CALL KPP_CALC(
505 I bi, bj, myTime, myIter, myThid )
506 #ifdef ALLOW_AUTODIFF_TAMC
507 ELSE
508 CALL KPP_CALC_DUMMY(
509 I bi, bj, myTime, myIter, myThid )
510 #endif /* ALLOW_AUTODIFF_TAMC */
511 ENDIF
512
513 #endif /* ALLOW_KPP */
514
515 #ifdef ALLOW_PP81
516 C-- Compute PP81 mixing coefficients
517 IF (usePP81) THEN
518 #ifdef ALLOW_DEBUG
519 IF ( debugLevel .GE. debLevB )
520 & CALL DEBUG_CALL('PP81_CALC',myThid)
521 #endif
522 CALL PP81_CALC(
523 I bi, bj, myTime, myThid )
524 ENDIF
525 #endif /* ALLOW_PP81 */
526
527 #ifdef ALLOW_MY82
528 C-- Compute MY82 mixing coefficients
529 IF (useMY82) THEN
530 #ifdef ALLOW_DEBUG
531 IF ( debugLevel .GE. debLevB )
532 & CALL DEBUG_CALL('MY82_CALC',myThid)
533 #endif
534 CALL MY82_CALC(
535 I bi, bj, myTime, myThid )
536 ENDIF
537 #endif /* ALLOW_MY82 */
538
539 #ifdef ALLOW_GGL90
540 C-- Compute GGL90 mixing coefficients
541 IF (useGGL90) THEN
542 #ifdef ALLOW_DEBUG
543 IF ( debugLevel .GE. debLevB )
544 & CALL DEBUG_CALL('GGL90_CALC',myThid)
545 #endif
546 CALL GGL90_CALC(
547 I bi, bj, myTime, myThid )
548 ENDIF
549 #endif /* ALLOW_GGL90 */
550
551 #ifdef ALLOW_TIMEAVE
552 IF ( taveFreq.GT. 0. _d 0 ) THEN
553 CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
554 ENDIF
555 IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
556 CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,
557 I Nr, deltaTclock, bi, bj, myThid)
558 ENDIF
559 #endif /* ALLOW_TIMEAVE */
560
561 #ifdef ALLOW_GMREDI
562 #ifdef ALLOW_AUTODIFF_TAMC
563 # ifndef GM_EXCLUDE_CLIPPING
564 cph storing here is needed only for one GMREDI_OPTIONS:
565 cph define GM_BOLUS_ADVEC
566 cph keep it although TAF says you dont need to.
567 cph but I've avoided the #ifdef for now, in case more things change
568 CADJ STORE sigmaX(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte
569 CADJ STORE sigmaY(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte
570 CADJ STORE sigmaR(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte
571 # endif
572 #endif /* ALLOW_AUTODIFF_TAMC */
573
574 C-- Calculate iso-neutral slopes for the GM/Redi parameterisation
575 IF (useGMRedi) THEN
576 #ifdef ALLOW_DEBUG
577 IF ( debugLevel .GE. debLevB )
578 & CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
579 #endif
580 CALL GMREDI_CALC_TENSOR(
581 c I bi, bj, iMin, iMax, jMin, jMax,
582 c I sigmaX, sigmaY, sigmaR,
583 c I myThid )
584 I iMin, iMax, jMin, jMax,
585 I sigmaX, sigmaY, sigmaR,
586 I bi, bj, myTime, myIter, myThid )
587 #ifdef ALLOW_AUTODIFF_TAMC
588 ELSE
589 CALL GMREDI_CALC_TENSOR_DUMMY(
590 c I bi, bj, iMin, iMax, jMin, jMax,
591 c I sigmaX, sigmaY, sigmaR,
592 c I myThid )
593 I iMin, iMax, jMin, jMax,
594 I sigmaX, sigmaY, sigmaR,
595 I bi, bj, myTime, myIter, myThid )
596 #endif /* ALLOW_AUTODIFF_TAMC */
597 ENDIF
598 #endif /* ALLOW_GMREDI */
599
600 #ifndef ALLOW_AUTODIFF_TAMC
601 C--- if fluid Is Water: end
602 ENDIF
603 #endif
604
605 #ifdef ALLOW_OBCS
606 C-- Calculate future values on open boundaries
607 IF (useOBCS) THEN
608 #ifdef ALLOW_DEBUG
609 IF ( debugLevel .GE. debLevB )
610 & CALL DEBUG_CALL('OBCS_CALC',myThid)
611 #endif
612 CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,
613 I uVel, vVel, wVel, theta, salt,
614 I myThid )
615 ENDIF
616 #endif /* ALLOW_OBCS */
617
618 C-- end bi,bj loops.
619 ENDDO
620 ENDDO
621
622 #ifdef ALLOW_KPP
623 IF (useKPP) THEN
624 CALL KPP_DO_EXCH( myThid )
625 ENDIF
626 #endif /* ALLOW_KPP */
627
628 #ifdef ALLOW_DIAGNOSTICS
629 IF ( fluidIsWater .AND. useDiagnostics ) THEN
630 CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
631 ENDIF
632 IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
633 CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',
634 & 0, Nr, 0, 1, 1, myThid )
635 ENDIF
636 #endif
637
638 #ifdef ALLOW_DEBUG
639 IF ( debugLevel .GE. debLevB )
640 & CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)
641 #endif
642
643 RETURN
644 END

  ViewVC Help
Powered by ViewVC 1.1.22