/[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.57 - (show annotations) (download)
Fri Sep 28 00:52:18 2007 UTC (16 years, 8 months ago) by heimbach
Branch: MAIN
Changes since 1.56: +12 -10 lines
Adding code for seaice export (and others in future)
sensitivity calculation.

1 C $Header: /u/gcmpack/MITgcm/model/src/do_oceanic_phys.F,v 1.56 2007/09/26 04:12:40 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 #ifndef ALLOW_AUTODIFF_TAMC
146 IF ( useSEAICE ) THEN
147 #else
148 CADJ STORE atemp,aqh,precip = comlev1, key = ikey_dynamics
149 CADJ STORE swdown,lwdown = comlev1, key = ikey_dynamics
150 cph# ifdef EXF_READ_EVAP
151 CADJ STORE evap = comlev1, key = ikey_dynamics
152 cph# endif
153 CADJ STORE uvel,vvel = comlev1, key = ikey_dynamics
154 # ifdef SEAICE_ALLOW_EVP
155 CADJ STORE seaice_sigma1 = comlev1, key = ikey_dynamics
156 CADJ STORE seaice_sigma2 = comlev1, key = ikey_dynamics
157 CADJ STORE seaice_sigma12 = comlev1, key = ikey_dynamics
158 # endif
159 # ifdef SEAICE_SALINITY
160 CADJ STORE salt = comlev1, key = ikey_dynamics
161 # endif
162 # ifdef ATMOSPHERIC_LOADING
163 CADJ STORE siceload = comlev1, key = ikey_dynamics
164 # endif
165 # ifdef NONLIN_FRSURF
166 CADJ STORE recip_hfacc = comlev1, key = ikey_dynamics
167 # endif
168 #endif
169 #ifdef ALLOW_DEBUG
170 IF ( debugLevel .GE. debLevB )
171 & CALL DEBUG_CALL('SEAICE_MODEL',myThid)
172 #endif
173 CALL TIMER_START('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
174 CALL SEAICE_MODEL( myTime, myIter, myThid )
175 CALL TIMER_STOP ('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
176 #ifdef ALLOW_COST
177 CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
178 #endif
179 #ifndef ALLOW_AUTODIFF_TAMC
180 ENDIF
181 #endif
182 #endif /* ALLOW_SEAICE */
183
184 #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
185 IF ( useThSIce .AND. fluidIsWater ) THEN
186 #ifdef ALLOW_DEBUG
187 IF ( debugLevel .GE. debLevB )
188 & CALL DEBUG_CALL('THSICE_MAIN',myThid)
189 #endif
190 C-- Step forward Therm.Sea-Ice variables
191 C and modify forcing terms including effects from ice
192 CALL TIMER_START('THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
193 CALL THSICE_MAIN( myTime, myIter, myThid )
194 CALL TIMER_STOP( 'THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
195 ENDIF
196 #endif /* ALLOW_THSICE */
197
198 #ifdef ALLOW_SHELFICE
199 IF ( useShelfIce .AND. fluidIsWater ) THEN
200 #ifdef ALLOW_DEBUG
201 IF ( debugLevel .GE. debLevB )
202 & CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
203 #endif
204 C compute temperature and (virtual) salt flux at the
205 C shelf-ice ocean interface
206 CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
207 & myThid)
208 CALL SHELFICE_THERMODYNAMICS( myTime, myIter, myThid )
209 CALL TIMER_STOP( 'SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
210 & myThid)
211 ENDIF
212 #endif /* ALLOW_SHELFICE */
213
214 C-- Freeze water at the surface
215 #ifdef ALLOW_AUTODIFF_TAMC
216 CADJ STORE theta = comlev1, key = ikey_dynamics
217 #endif
218 IF ( allowFreezing
219 & .AND. .NOT. useSEAICE
220 & .AND. .NOT. useThSIce ) THEN
221 CALL FREEZE_SURFACE( myTime, myIter, myThid )
222 ENDIF
223
224 #ifdef ALLOW_OCN_COMPON_INTERF
225 C-- Apply imported data (from coupled interface) to forcing fields
226 C jmc: do not know precisely where to put this call (bf or af thSIce ?)
227 IF ( useCoupler ) THEN
228 CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
229 ENDIF
230 #endif /* ALLOW_OCN_COMPON_INTERF */
231
232 #ifdef ALLOW_BALANCE_FLUXES
233 C balance fluxes
234 IF ( balanceEmPmR )
235 & CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,
236 & 'EmPmR', myTime, myThid )
237 IF ( balanceQnet )
238 & CALL REMOVE_MEAN_RS( 1, Qnet, maskH, maskH, rA, drF,
239 & 'Qnet ', myTime, myThid )
240 #endif /* ALLOW_BALANCE_FLUXES */
241
242 #ifdef ALLOW_AUTODIFF_TAMC
243 C-- HPF directive to help TAMC
244 CHPF$ INDEPENDENT
245 #endif /* ALLOW_AUTODIFF_TAMC */
246 DO bj=myByLo(myThid),myByHi(myThid)
247 #ifdef ALLOW_AUTODIFF_TAMC
248 C-- HPF directive to help TAMC
249 CHPF$ INDEPENDENT
250 #endif /* ALLOW_AUTODIFF_TAMC */
251 DO bi=myBxLo(myThid),myBxHi(myThid)
252
253 #ifdef ALLOW_AUTODIFF_TAMC
254 act1 = bi - myBxLo(myThid)
255 max1 = myBxHi(myThid) - myBxLo(myThid) + 1
256 act2 = bj - myByLo(myThid)
257 max2 = myByHi(myThid) - myByLo(myThid) + 1
258 act3 = myThid - 1
259 max3 = nTx*nTy
260 act4 = ikey_dynamics - 1
261 itdkey = (act1 + 1) + act2*max1
262 & + act3*max1*max2
263 & + act4*max1*max2*max3
264 #else /* ALLOW_AUTODIFF_TAMC */
265 C if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
266 C and all vertical mixing schemes, but keep OBCS_CALC
267 IF ( fluidIsWater ) THEN
268 #endif /* ALLOW_AUTODIFF_TAMC */
269
270 C-- Set up work arrays with valid (i.e. not NaN) values
271 C These inital values do not alter the numerical results. They
272 C just ensure that all memory references are to valid floating
273 C point numbers. This prevents spurious hardware signals due to
274 C uninitialised but inert locations.
275
276 DO j=1-OLy,sNy+OLy
277 DO i=1-OLx,sNx+OLx
278 rhoK (i,j) = 0. _d 0
279 rhoKm1 (i,j) = 0. _d 0
280 rhoKp1 (i,j) = 0. _d 0
281 ENDDO
282 ENDDO
283
284 DO k=1,Nr
285 DO j=1-OLy,sNy+OLy
286 DO i=1-OLx,sNx+OLx
287 C This is currently also used by IVDC and Diagnostics
288 sigmaX(i,j,k) = 0. _d 0
289 sigmaY(i,j,k) = 0. _d 0
290 sigmaR(i,j,k) = 0. _d 0
291 #ifdef ALLOW_AUTODIFF_TAMC
292 cph all the following init. are necessary for TAF
293 cph although some of these are re-initialised later.
294 IVDConvCount(i,j,k,bi,bj) = 0.
295 # ifdef ALLOW_GMREDI
296 Kwx(i,j,k,bi,bj) = 0. _d 0
297 Kwy(i,j,k,bi,bj) = 0. _d 0
298 Kwz(i,j,k,bi,bj) = 0. _d 0
299 # ifdef GM_NON_UNITY_DIAGONAL
300 Kux(i,j,k,bi,bj) = 0. _d 0
301 Kvy(i,j,k,bi,bj) = 0. _d 0
302 # endif
303 # ifdef GM_EXTRA_DIAGONAL
304 Kuz(i,j,k,bi,bj) = 0. _d 0
305 Kvz(i,j,k,bi,bj) = 0. _d 0
306 # endif
307 # ifdef GM_BOLUS_ADVEC
308 GM_PsiX(i,j,k,bi,bj) = 0. _d 0
309 GM_PsiY(i,j,k,bi,bj) = 0. _d 0
310 # endif
311 # ifdef GM_VISBECK_VARIABLE_K
312 VisbeckK(i,j,bi,bj) = 0. _d 0
313 # endif
314 # endif /* ALLOW_GMREDI */
315 # ifdef ALLOW_KPP
316 KPPdiffKzS(i,j,k,bi,bj) = 0. _d 0
317 KPPdiffKzT(i,j,k,bi,bj) = 0. _d 0
318 # endif /* ALLOW_KPP */
319 #endif /* ALLOW_AUTODIFF_TAMC */
320 ENDDO
321 ENDDO
322 ENDDO
323
324 iMin = 1-OLx
325 iMax = sNx+OLx
326 jMin = 1-OLy
327 jMax = sNy+OLy
328
329 #ifdef ALLOW_AUTODIFF_TAMC
330 CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
331 CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
332 CADJ STORE totphihyd(:,:,:,bi,bj)
333 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
334 # ifdef ALLOW_KPP
335 CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
336 CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
337 # endif
338 #endif /* ALLOW_AUTODIFF_TAMC */
339
340 #ifdef ALLOW_DEBUG
341 IF ( debugLevel .GE. debLevB )
342 & CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)
343 #endif
344
345 C-- Start of diagnostic loop
346 DO k=Nr,1,-1
347
348 #ifdef ALLOW_AUTODIFF_TAMC
349 C? Patrick, is this formula correct now that we change the loop range?
350 C? Do we still need this?
351 cph kkey formula corrected.
352 cph Needed for rhoK, rhoKm1, in the case useGMREDI.
353 kkey = (itdkey-1)*Nr + k
354 #endif /* ALLOW_AUTODIFF_TAMC */
355
356 C-- Calculate gradients of potential density for isoneutral
357 C slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
358 IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
359 & .OR. doDiagsRho.GE.1 ) THEN
360 #ifdef ALLOW_DEBUG
361 IF ( debugLevel .GE. debLevB )
362 & CALL DEBUG_CALL('FIND_RHO',myThid)
363 #endif
364 #ifdef ALLOW_AUTODIFF_TAMC
365 CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
366 CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
367 #endif /* ALLOW_AUTODIFF_TAMC */
368 CALL FIND_RHO(
369 I bi, bj, iMin, iMax, jMin, jMax, k, k,
370 I theta, salt,
371 O rhoK,
372 I myThid )
373
374 IF (k.GT.1) THEN
375 #ifdef ALLOW_AUTODIFF_TAMC
376 CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
377 CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
378 #endif /* ALLOW_AUTODIFF_TAMC */
379 CALL FIND_RHO(
380 I bi, bj, iMin, iMax, jMin, jMax, k-1, k,
381 I theta, salt,
382 O rhoKm1,
383 I myThid )
384 ENDIF
385 #ifdef ALLOW_DEBUG
386 IF ( debugLevel .GE. debLevB )
387 & CALL DEBUG_CALL('GRAD_SIGMA',myThid)
388 #endif
389 cph Avoid variable aliasing for adjoint !!!
390 DO j=jMin,jMax
391 DO i=iMin,iMax
392 rhoKp1(i,j) = rhoK(i,j)
393 ENDDO
394 ENDDO
395 CALL GRAD_SIGMA(
396 I bi, bj, iMin, iMax, jMin, jMax, k,
397 I rhoK, rhoKm1, rhoKp1,
398 O sigmaX, sigmaY, sigmaR,
399 I myThid )
400 ENDIF
401
402 C-- Implicit Vertical Diffusion for Convection
403 c ==> should use sigmaR !!!
404 IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
405 #ifdef ALLOW_DEBUG
406 IF ( debugLevel .GE. debLevB )
407 & CALL DEBUG_CALL('CALC_IVDC',myThid)
408 #endif
409 CALL CALC_IVDC(
410 I bi, bj, iMin, iMax, jMin, jMax, k,
411 I rhoKm1, rhoK,
412 I myTime, myIter, myThid)
413 ENDIF
414
415 #ifdef ALLOW_DIAGNOSTICS
416 IF ( doDiagsRho.GE.2 ) THEN
417 CALL DIAGS_RHO( k, bi, bj,
418 I rhoK, rhoKm1,
419 I myTime, myIter, myThid)
420 ENDIF
421 #endif
422
423 C-- end of diagnostic k loop (Nr:1)
424 ENDDO
425
426 #ifdef ALLOW_AUTODIFF_TAMC
427 CADJ STORE IVDConvCount(:,:,:,bi,bj)
428 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
429 #endif
430
431 C-- Diagnose Mixed Layer Depth:
432 IF ( useGMRedi .OR. doDiagsRho.GE.1 ) THEN
433 CALL CALC_OCE_MXLAYER( rhoK, sigmaR,
434 & bi, bj, myTime, myIter, myThid )
435 ENDIF
436
437 #ifdef ALLOW_SALT_PLUME
438 CALL CALC_SALT_PLUME_DEPTH( rhoK, sigmaR,
439 & bi, bj, myTime, myIter, myThid )
440 #endif
441 #ifdef ALLOW_DIAGNOSTICS
442 IF ( doDiagsRho.GE.1 ) THEN
443 CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR ', 0, Nr,
444 & 2, bi, bj, myThid)
445 ENDIF
446 #endif
447
448 C-- Determines forcing terms based on external fields
449 C relaxation terms, etc.
450 #ifdef ALLOW_DEBUG
451 IF ( debugLevel .GE. debLevB )
452 & CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
453 #endif
454 #ifdef ALLOW_AUTODIFF_TAMC
455 CADJ STORE EmPmR(:,:,bi,bj)
456 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
457 # ifdef EXACT_CONSERV
458 CADJ STORE PmEpR(:,:,bi,bj)
459 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
460 # endif
461 # ifdef NONLIN_FRSURF
462 CADJ STORE hFac_surfC(:,:,bi,bj)
463 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
464 CADJ STORE recip_hFacC(:,:,:,bi,bj)
465 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
466 # endif
467 #endif
468 CALL EXTERNAL_FORCING_SURF(
469 I bi, bj, iMin, iMax, jMin, jMax,
470 I myTime, myIter, myThid )
471 #ifdef ALLOW_AUTODIFF_TAMC
472 # ifdef EXACT_CONSERV
473 cph-test
474 cphCADJ STORE PmEpR(:,:,bi,bj)
475 cphCADJ & = comlev1_bibj, key=itdkey, byte=isbyte
476 # endif
477 #endif
478
479 #ifdef ALLOW_AUTODIFF_TAMC
480 cph needed for KPP
481 CADJ STORE surfaceForcingU(:,:,bi,bj)
482 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
483 CADJ STORE surfaceForcingV(:,:,bi,bj)
484 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
485 CADJ STORE surfaceForcingS(:,:,bi,bj)
486 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
487 CADJ STORE surfaceForcingT(:,:,bi,bj)
488 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
489 CADJ STORE surfaceForcingTice(:,:,bi,bj)
490 CADJ & = comlev1_bibj, key=itdkey, byte=isbyte
491 #endif /* ALLOW_AUTODIFF_TAMC */
492
493 #ifdef ALLOW_KPP
494 C-- Compute KPP mixing coefficients
495 IF (useKPP) THEN
496 #ifdef ALLOW_DEBUG
497 IF ( debugLevel .GE. debLevB )
498 & CALL DEBUG_CALL('KPP_CALC',myThid)
499 #endif
500 CALL KPP_CALC(
501 I bi, bj, myTime, myIter, myThid )
502 #ifdef ALLOW_AUTODIFF_TAMC
503 ELSE
504 CALL KPP_CALC_DUMMY(
505 I bi, bj, myTime, myIter, myThid )
506 #endif /* ALLOW_AUTODIFF_TAMC */
507 ENDIF
508
509 #endif /* ALLOW_KPP */
510
511 #ifdef ALLOW_PP81
512 C-- Compute PP81 mixing coefficients
513 IF (usePP81) THEN
514 #ifdef ALLOW_DEBUG
515 IF ( debugLevel .GE. debLevB )
516 & CALL DEBUG_CALL('PP81_CALC',myThid)
517 #endif
518 CALL PP81_CALC(
519 I bi, bj, myTime, myThid )
520 ENDIF
521 #endif /* ALLOW_PP81 */
522
523 #ifdef ALLOW_MY82
524 C-- Compute MY82 mixing coefficients
525 IF (useMY82) THEN
526 #ifdef ALLOW_DEBUG
527 IF ( debugLevel .GE. debLevB )
528 & CALL DEBUG_CALL('MY82_CALC',myThid)
529 #endif
530 CALL MY82_CALC(
531 I bi, bj, myTime, myThid )
532 ENDIF
533 #endif /* ALLOW_MY82 */
534
535 #ifdef ALLOW_GGL90
536 C-- Compute GGL90 mixing coefficients
537 IF (useGGL90) THEN
538 #ifdef ALLOW_DEBUG
539 IF ( debugLevel .GE. debLevB )
540 & CALL DEBUG_CALL('GGL90_CALC',myThid)
541 #endif
542 CALL GGL90_CALC(
543 I bi, bj, myTime, myThid )
544 ENDIF
545 #endif /* ALLOW_GGL90 */
546
547 #ifdef ALLOW_TIMEAVE
548 IF ( taveFreq.GT. 0. _d 0 ) THEN
549 CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
550 ENDIF
551 IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
552 CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,
553 I Nr, deltaTclock, bi, bj, myThid)
554 ENDIF
555 #endif /* ALLOW_TIMEAVE */
556
557 #ifdef ALLOW_GMREDI
558 #ifdef ALLOW_AUTODIFF_TAMC
559 # ifndef GM_EXCLUDE_CLIPPING
560 cph storing here is needed only for one GMREDI_OPTIONS:
561 cph define GM_BOLUS_ADVEC
562 cph keep it although TAF says you dont need to.
563 cph but I've avoided the #ifdef for now, in case more things change
564 CADJ STORE sigmaX(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte
565 CADJ STORE sigmaY(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte
566 CADJ STORE sigmaR(:,:,:) = comlev1_bibj, key=itdkey, byte=isbyte
567 # endif
568 #endif /* ALLOW_AUTODIFF_TAMC */
569
570 C-- Calculate iso-neutral slopes for the GM/Redi parameterisation
571 IF (useGMRedi) THEN
572 #ifdef ALLOW_DEBUG
573 IF ( debugLevel .GE. debLevB )
574 & CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
575 #endif
576 CALL GMREDI_CALC_TENSOR(
577 c I bi, bj, iMin, iMax, jMin, jMax,
578 c I sigmaX, sigmaY, sigmaR,
579 c I myThid )
580 I iMin, iMax, jMin, jMax,
581 I sigmaX, sigmaY, sigmaR,
582 I bi, bj, myTime, myIter, myThid )
583 #ifdef ALLOW_AUTODIFF_TAMC
584 ELSE
585 CALL GMREDI_CALC_TENSOR_DUMMY(
586 c I bi, bj, iMin, iMax, jMin, jMax,
587 c I sigmaX, sigmaY, sigmaR,
588 c I myThid )
589 I iMin, iMax, jMin, jMax,
590 I sigmaX, sigmaY, sigmaR,
591 I bi, bj, myTime, myIter, myThid )
592 #endif /* ALLOW_AUTODIFF_TAMC */
593 ENDIF
594 #endif /* ALLOW_GMREDI */
595
596 #ifndef ALLOW_AUTODIFF_TAMC
597 C--- if fluid Is Water: end
598 ENDIF
599 #endif
600
601 #ifdef ALLOW_OBCS
602 C-- Calculate future values on open boundaries
603 IF (useOBCS) THEN
604 #ifdef ALLOW_DEBUG
605 IF ( debugLevel .GE. debLevB )
606 & CALL DEBUG_CALL('OBCS_CALC',myThid)
607 #endif
608 CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,
609 I uVel, vVel, wVel, theta, salt,
610 I myThid )
611 ENDIF
612 #endif /* ALLOW_OBCS */
613
614 C-- end bi,bj loops.
615 ENDDO
616 ENDDO
617
618 #ifdef ALLOW_KPP
619 IF (useKPP) THEN
620 CALL KPP_DO_EXCH( myThid )
621 ENDIF
622 #endif /* ALLOW_KPP */
623
624 #ifdef ALLOW_DIAGNOSTICS
625 IF ( fluidIsWater .AND. useDiagnostics ) THEN
626 CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
627 ENDIF
628 IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
629 CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',
630 & 0, Nr, 0, 1, 1, myThid )
631 ENDIF
632 #endif
633
634 #ifdef ALLOW_DEBUG
635 IF ( debugLevel .GE. debLevB )
636 & CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)
637 #endif
638
639 RETURN
640 END

  ViewVC Help
Powered by ViewVC 1.1.22