/[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.139 - (show annotations) (download)
Fri May 23 20:04:13 2014 UTC (9 years, 11 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint65, checkpoint65a
Changes since 1.138: +1 -2 lines
remove unused variables

1 C $Header: /u/gcmpack/MITgcm/model/src/do_oceanic_phys.F,v 1.138 2014/05/23 01:18:07 atn Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6 #ifdef ALLOW_AUTODIFF
7 # include "AUTODIFF_OPTIONS.h"
8 #endif
9 #ifdef ALLOW_CTRL
10 # include "CTRL_OPTIONS.h"
11 #endif
12 #ifdef ALLOW_SALT_PLUME
13 # include "SALT_PLUME_OPTIONS.h"
14 #endif
15
16 #ifdef ALLOW_AUTODIFF
17 # ifdef ALLOW_GMREDI
18 # include "GMREDI_OPTIONS.h"
19 # endif
20 # ifdef ALLOW_KPP
21 # include "KPP_OPTIONS.h"
22 # endif
23 # ifdef ALLOW_SEAICE
24 # include "SEAICE_OPTIONS.h"
25 # endif
26 # ifdef ALLOW_EXF
27 # include "EXF_OPTIONS.h"
28 # endif
29 #endif /* ALLOW_AUTODIFF */
30
31 CBOP
32 C !ROUTINE: DO_OCEANIC_PHYS
33 C !INTERFACE:
34 SUBROUTINE DO_OCEANIC_PHYS(myTime, myIter, myThid)
35 C !DESCRIPTION: \bv
36 C *==========================================================*
37 C | SUBROUTINE DO_OCEANIC_PHYS
38 C | o Controlling routine for oceanic physics and
39 C | parameterization
40 C *==========================================================*
41 C | o originally, part of S/R thermodynamics
42 C *==========================================================*
43 C \ev
44
45 C !USES:
46 IMPLICIT NONE
47 C == Global variables ===
48 #include "SIZE.h"
49 #include "EEPARAMS.h"
50 #include "PARAMS.h"
51 #include "GRID.h"
52 #include "DYNVARS.h"
53 #ifdef ALLOW_TIMEAVE
54 # include "TIMEAVE_STATV.h"
55 #endif
56 #ifdef ALLOW_OFFLINE
57 # include "OFFLINE_SWITCH.h"
58 #endif
59
60 #ifdef ALLOW_AUTODIFF
61 # include "AUTODIFF_MYFIELDS.h"
62 # include "tamc.h"
63 # include "tamc_keys.h"
64 # include "FFIELDS.h"
65 # include "SURFACE.h"
66 # include "EOS.h"
67 # ifdef ALLOW_KPP
68 # include "KPP.h"
69 # endif
70 # ifdef ALLOW_GGL90
71 # include "GGL90.h"
72 # endif
73 # ifdef ALLOW_GMREDI
74 # include "GMREDI.h"
75 # endif
76 # ifdef ALLOW_EBM
77 # include "EBM.h"
78 # endif
79 # ifdef ALLOW_EXF
80 # include "ctrl.h"
81 # include "EXF_FIELDS.h"
82 # ifdef ALLOW_BULKFORMULAE
83 # include "EXF_CONSTANTS.h"
84 # endif
85 # endif
86 # ifdef ALLOW_SEAICE
87 # include "SEAICE_SIZE.h"
88 # include "SEAICE.h"
89 # include "SEAICE_PARAMS.h"
90 # endif
91 # ifdef ALLOW_THSICE
92 # include "THSICE_VARS.h"
93 # endif
94 # ifdef ALLOW_SALT_PLUME
95 # include "SALT_PLUME.h"
96 # endif
97 #endif /* ALLOW_AUTODIFF */
98
99 C !INPUT/OUTPUT PARAMETERS:
100 C == Routine arguments ==
101 C myTime :: Current time in simulation
102 C myIter :: Current iteration number in simulation
103 C myThid :: Thread number for this instance of the routine.
104 _RL myTime
105 INTEGER myIter
106 INTEGER myThid
107
108 C !LOCAL VARIABLES:
109 C == Local variables
110 C rhoK, rhoKm1 :: Density at current level, and level above
111 C iMin, iMax :: Ranges and sub-block indices on which calculations
112 C jMin, jMax are applied.
113 C bi, bj :: tile indices
114 C i,j,k :: loop indices
115 _RL rhoKp1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
116 _RL rhoKm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
117 _RL sigmaX (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
118 _RL sigmaY (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
119 _RL sigmaR (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
120 INTEGER iMin, iMax
121 INTEGER jMin, jMax
122 INTEGER bi, bj
123 INTEGER i, j, k
124 INTEGER doDiagsRho
125 LOGICAL calcGMRedi, calcKPP, calcConvect
126 #ifdef ALLOW_DIAGNOSTICS
127 LOGICAL DIAGNOSTICS_IS_ON
128 EXTERNAL DIAGNOSTICS_IS_ON
129 #endif /* ALLOW_DIAGNOSTICS */
130
131 CEOP
132
133 #ifdef ALLOW_AUTODIFF_TAMC
134 C-- dummy statement to end declaration part
135 itdkey = 1
136 #endif /* ALLOW_AUTODIFF_TAMC */
137
138 #ifdef ALLOW_DEBUG
139 IF (debugMode) CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)
140 #endif
141
142 doDiagsRho = 0
143 #ifdef ALLOW_DIAGNOSTICS
144 IF ( useDiagnostics .AND. fluidIsWater ) THEN
145 IF ( DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) )
146 & doDiagsRho = doDiagsRho + 1
147 IF ( DIAGNOSTICS_IS_ON('DRHODR ',myThid) )
148 & doDiagsRho = doDiagsRho + 2
149 IF ( DIAGNOSTICS_IS_ON('WdRHO_P ',myThid) )
150 & doDiagsRho = doDiagsRho + 4
151 IF ( DIAGNOSTICS_IS_ON('WdRHOdP ',myThid) )
152 & doDiagsRho = doDiagsRho + 8
153 ENDIF
154 #endif /* ALLOW_DIAGNOSTICS */
155
156 calcGMRedi = useGMRedi
157 calcKPP = useKPP
158 calcConvect = ivdc_kappa.NE.0.
159 #ifdef ALLOW_OFFLINE
160 IF ( useOffLine ) THEN
161 calcGMRedi = useGMRedi .AND. .NOT.offlineLoadGMRedi
162 calcKPP = useKPP .AND. .NOT.offlineLoadKPP
163 calcConvect=calcConvect.AND. .NOT.offlineLoadConvec
164 ENDIF
165 #endif /* ALLOW_OFFLINE */
166
167 #ifdef ALLOW_OBCS
168 IF (useOBCS) THEN
169 C-- Calculate future values on open boundaries
170 C-- moved before SEAICE_MODEL call since SEAICE_MODEL needs seaice-obcs fields
171 # ifdef ALLOW_AUTODIFF_TAMC
172 CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte
173 CADJ STORE salt = comlev1, key=ikey_dynamics, kind=isbyte
174 # endif
175 # ifdef ALLOW_DEBUG
176 IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
177 # endif
178 CALL OBCS_CALC( myTime+deltaTClock, myIter+1,
179 I uVel, vVel, wVel, theta, salt, myThid )
180 ENDIF
181 #endif /* ALLOW_OBCS */
182
183 #ifdef ALLOW_AUTODIFF
184 # ifdef ALLOW_SALT_PLUME
185 DO bj=myByLo(myThid),myByHi(myThid)
186 DO bi=myBxLo(myThid),myBxHi(myThid)
187 DO j=1-OLy,sNy+OLy
188 DO i=1-OLx,sNx+OLx
189 saltPlumeDepth(i,j,bi,bj) = 0. _d 0
190 saltPlumeFlux(i,j,bi,bj) = 0. _d 0
191 ENDDO
192 ENDDO
193 ENDDO
194 ENDDO
195 # endif
196 #endif /* ALLOW_AUTODIFF */
197
198 #ifdef ALLOW_FRAZIL
199 IF ( useFRAZIL ) THEN
200 C-- Freeze water in the ocean interior and let it rise to the surface
201 CALL FRAZIL_CALC_RHS( myTime, myIter, myThid )
202 ENDIF
203 #endif /* ALLOW_FRAZIL */
204
205 #ifndef OLD_THSICE_CALL_SEQUENCE
206 #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
207 IF ( useThSIce .AND. fluidIsWater ) THEN
208 # ifdef ALLOW_AUTODIFF_TAMC
209 CADJ STORE uice,vice = comlev1, key = ikey_dynamics,
210 CADJ & kind = isbyte
211 CADJ STORE iceMask,iceHeight = comlev1, key = ikey_dynamics,
212 CADJ & kind = isbyte
213 CADJ STORE snowHeight, Tsrf = comlev1, key = ikey_dynamics,
214 CADJ & kind = isbyte
215 CADJ STORE Qice1, Qice2 = comlev1, key = ikey_dynamics,
216 CADJ & kind = isbyte
217 CADJ STORE sHeating, snowAge = comlev1, key = ikey_dynamics,
218 CADJ & kind = isbyte
219 CADJ STORE hocemxl = comlev1, key = ikey_dynamics,
220 CADJ & kind = isbyte
221 CADJ STORE icflxsw = comlev1, key = ikey_dynamics,
222 CADJ & kind = isbyte
223 CADJ STORE salt,theta = comlev1, key = ikey_dynamics,
224 CADJ & kind = isbyte
225 CADJ STORE uvel,vvel = comlev1, key = ikey_dynamics,
226 CADJ & kind = isbyte
227 CADJ STORE qnet,qsw, empmr = comlev1, key = ikey_dynamics,
228 CADJ & kind = isbyte
229 CADJ STORE atemp,aqh,precip = comlev1, key = ikey_dynamics,
230 CADJ & kind = isbyte
231 CADJ STORE swdown,lwdown = comlev1, key = ikey_dynamics,
232 CADJ & kind = isbyte
233 # ifdef NONLIN_FRSURF
234 CADJ STORE hFac_surfC = comlev1, key = ikey_dynamics,
235 CADJ & kind = isbyte
236 # endif
237 # endif /* ALLOW_AUTODIFF_TAMC */
238 # ifdef ALLOW_DEBUG
239 IF (debugMode) CALL DEBUG_CALL('THSICE_MAIN',myThid)
240 # endif
241 C-- Step forward Therm.Sea-Ice variables
242 C and modify forcing terms including effects from ice
243 CALL TIMER_START('THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
244 CALL THSICE_MAIN( myTime, myIter, myThid )
245 CALL TIMER_STOP( 'THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
246 ENDIF
247 #endif /* ALLOW_THSICE */
248 #endif /* ndef OLD_THSICE_CALL_SEQUENCE */
249
250 #ifdef ALLOW_SEAICE
251 # ifdef ALLOW_AUTODIFF
252 CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte
253 CADJ STORE fu,fv = comlev1, key=ikey_dynamics, kind=isbyte
254 CADJ STORE qnet = comlev1, key=ikey_dynamics, kind=isbyte
255 CADJ STORE qsw = comlev1, key=ikey_dynamics, kind=isbyte
256 CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte
257 CADJ STORE salt = comlev1, key=ikey_dynamics, kind=isbyte
258 #if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP)
259 CADJ STORE evap = comlev1, key=ikey_dynamics, kind=isbyte
260 #endif
261 IF ( .NOT.useSEAICE .AND. SEAICEadjMODE .EQ. -1 ) THEN
262 CALL SEAICE_FAKE( myTime, myIter, myThid )
263 ENDIF
264 CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte
265 CADJ STORE fu,fv = comlev1, key=ikey_dynamics, kind=isbyte
266 CADJ STORE qnet = comlev1, key=ikey_dynamics, kind=isbyte
267 CADJ STORE qsw = comlev1, key=ikey_dynamics, kind=isbyte
268 CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte
269 CADJ STORE salt = comlev1, key=ikey_dynamics, kind=isbyte
270 #if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP)
271 CADJ STORE evap = comlev1, key=ikey_dynamics, kind=isbyte
272 #endif
273 # endif /* ALLOW_AUTODIFF */
274 #endif /* ALLOW_SEAICE */
275
276 #ifdef ALLOW_SEAICE
277 IF ( useSEAICE ) THEN
278 # ifdef ALLOW_AUTODIFF_TAMC
279 cph-adj-test(
280 CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte
281 CADJ STORE hsnow = comlev1, key=ikey_dynamics, kind=isbyte
282 CADJ STORE heff = comlev1, key=ikey_dynamics, kind=isbyte
283 CADJ STORE tices = comlev1, key=ikey_dynamics, kind=isbyte
284 CADJ STORE empmr, qnet = comlev1, key=ikey_dynamics, kind=isbyte
285 CADJ STORE qsw,saltflux = comlev1, key=ikey_dynamics, kind=isbyte
286 CADJ STORE fu, fv = comlev1, key=ikey_dynamics, kind=isbyte
287 cCADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte
288 cCADJ STORE salt = comlev1, key=ikey_dynamics, kind=isbyte
289 cph-adj-test)
290 c#ifdef ALLOW_EXF
291 CADJ STORE atemp,aqh,precip = comlev1, key = ikey_dynamics,
292 CADJ & kind = isbyte
293 CADJ STORE swdown,lwdown = comlev1, key = ikey_dynamics,
294 CADJ & kind = isbyte
295 CADJ STORE evap = comlev1, key = ikey_dynamics,
296 CADJ & kind = isbyte
297 CADJ STORE uwind,vwind = comlev1, key = ikey_dynamics,
298 CADJ & kind = isbyte
299 c#endif
300 CADJ STORE uvel,vvel = comlev1, key = ikey_dynamics,
301 CADJ & kind = isbyte
302 # ifdef SEAICE_CGRID
303 CADJ STORE stressdivergencex = comlev1, key = ikey_dynamics,
304 CADJ & kind = isbyte
305 CADJ STORE stressdivergencey = comlev1, key = ikey_dynamics,
306 CADJ & kind = isbyte
307 # endif
308 # ifdef SEAICE_ALLOW_DYNAMICS
309 CADJ STORE uice = comlev1, key = ikey_dynamics,
310 CADJ & kind = isbyte
311 CADJ STORE vice = comlev1, key = ikey_dynamics,
312 CADJ & kind = isbyte
313 CADJ STORE dwatn = comlev1, key = ikey_dynamics,
314 CADJ & kind = isbyte
315 # ifdef SEAICE_ALLOW_EVP
316 CADJ STORE seaice_sigma1 = comlev1, key = ikey_dynamics,
317 CADJ & kind = isbyte
318 CADJ STORE seaice_sigma2 = comlev1, key = ikey_dynamics,
319 CADJ & kind = isbyte
320 CADJ STORE seaice_sigma12 = comlev1, key = ikey_dynamics,
321 CADJ & kind = isbyte
322 # endif
323 # endif
324 # ifdef SEAICE_VARIABLE_SALINITY
325 CADJ STORE hsalt = comlev1, key = ikey_dynamics,
326 CADJ & kind = isbyte
327 # endif
328 # ifdef ATMOSPHERIC_LOADING
329 CADJ STORE pload = comlev1, key = ikey_dynamics,
330 CADJ & kind = isbyte
331 CADJ STORE siceload = comlev1, key = ikey_dynamics,
332 CADJ & kind = isbyte
333 # endif
334 # ifdef NONLIN_FRSURF
335 CADJ STORE recip_hfacc = comlev1, key = ikey_dynamics,
336 CADJ & kind = isbyte
337 # endif
338 # ifdef ANNUAL_BALANCE
339 CADJ STORE balance_itcount = comlev1, key = ikey_dynamics,
340 CADJ & kind = isbyte
341 # endif /* ANNUAL_BALANCE */
342 # ifdef ALLOW_THSICE
343 C-- store thSIce vars before advection (called from SEAICE_MODEL) update them:
344 CADJ STORE iceMask,iceHeight = comlev1, key = ikey_dynamics,
345 CADJ & kind = isbyte
346 CADJ STORE snowHeight, hOceMxL = comlev1, key = ikey_dynamics,
347 CADJ & kind = isbyte
348 CADJ STORE Qice1, Qice2 = comlev1, key = ikey_dynamics,
349 CADJ & kind = isbyte
350 # endif /* ALLOW_THSICE */
351 # endif /* ALLOW_AUTODIFF_TAMC */
352 # ifdef ALLOW_DEBUG
353 IF (debugMode) CALL DEBUG_CALL('SEAICE_MODEL',myThid)
354 # endif
355 CALL TIMER_START('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
356 CALL SEAICE_MODEL( myTime, myIter, myThid )
357 CALL TIMER_STOP ('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
358 # ifdef ALLOW_COST
359 CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
360 # endif
361 ENDIF
362 #endif /* ALLOW_SEAICE */
363
364 #ifdef ALLOW_AUTODIFF_TAMC
365 CADJ STORE sst, sss = comlev1, key = ikey_dynamics,
366 CADJ & kind = isbyte
367 CADJ STORE qsw = comlev1, key = ikey_dynamics,
368 CADJ & kind = isbyte
369 # ifdef ALLOW_SEAICE
370 CADJ STORE area = comlev1, key = ikey_dynamics,
371 CADJ & kind = isbyte
372 # endif
373 #endif
374
375 #ifdef OLD_THSICE_CALL_SEQUENCE
376 #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
377 IF ( useThSIce .AND. fluidIsWater ) THEN
378 # ifdef ALLOW_AUTODIFF_TAMC
379 cph(
380 # ifdef NONLIN_FRSURF
381 CADJ STORE uice,vice = comlev1, key = ikey_dynamics,
382 CADJ & kind = isbyte
383 CADJ STORE salt,theta = comlev1, key = ikey_dynamics,
384 CADJ & kind = isbyte
385 CADJ STORE qnet,qsw, empmr = comlev1, key = ikey_dynamics,
386 CADJ & kind = isbyte
387 CADJ STORE hFac_surfC = comlev1, key = ikey_dynamics,
388 CADJ & kind = isbyte
389 # endif
390 # endif
391 # ifdef ALLOW_DEBUG
392 IF (debugMode) CALL DEBUG_CALL('THSICE_MAIN',myThid)
393 # endif
394 C-- Step forward Therm.Sea-Ice variables
395 C and modify forcing terms including effects from ice
396 CALL TIMER_START('THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
397 CALL THSICE_MAIN( myTime, myIter, myThid )
398 CALL TIMER_STOP( 'THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
399 ENDIF
400 #endif /* ALLOW_THSICE */
401 #endif /* OLD_THSICE_CALL_SEQUENCE */
402
403 #ifdef ALLOW_SHELFICE
404 # ifdef ALLOW_AUTODIFF_TAMC
405 CADJ STORE salt, theta = comlev1, key = ikey_dynamics,
406 CADJ & kind = isbyte
407 # endif
408 IF ( useShelfIce .AND. fluidIsWater ) THEN
409 #ifdef ALLOW_DEBUG
410 IF (debugMode) CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
411 #endif
412 C compute temperature and (virtual) salt flux at the
413 C shelf-ice ocean interface
414 CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
415 & myThid)
416 CALL SHELFICE_THERMODYNAMICS( myTime, myIter, myThid )
417 CALL TIMER_STOP( 'SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
418 & myThid)
419 ENDIF
420 #endif /* ALLOW_SHELFICE */
421
422 #ifdef ALLOW_ICEFRONT
423 IF ( useICEFRONT .AND. fluidIsWater ) THEN
424 #ifdef ALLOW_DEBUG
425 IF (debugMode) CALL DEBUG_CALL('ICEFRONT_THERMODYNAMICS',myThid)
426 #endif
427 C compute temperature and (virtual) salt flux at the
428 C ice-front ocean interface
429 CALL TIMER_START('ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
430 & myThid)
431 CALL ICEFRONT_THERMODYNAMICS( myTime, myIter, myThid )
432 CALL TIMER_STOP( 'ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
433 & myThid)
434 ENDIF
435 #endif /* ALLOW_ICEFRONT */
436
437 #ifdef ALLOW_SALT_PLUME
438 IF ( useSALT_PLUME ) THEN
439 Catn: exchanging saltPlumeFlux:
440 CALL SALT_PLUME_DO_EXCH( myTime, myIter, myThid )
441 ENDIF
442 #endif /* ALLOW_SALT_PLUME */
443
444 C-- Freeze water at the surface
445 IF ( allowFreezing ) THEN
446 #ifdef ALLOW_AUTODIFF_TAMC
447 CADJ STORE theta = comlev1, key = ikey_dynamics,
448 CADJ & kind = isbyte
449 #endif
450 CALL FREEZE_SURFACE( myTime, myIter, myThid )
451 ENDIF
452
453 #ifdef ALLOW_OCN_COMPON_INTERF
454 C-- Apply imported data (from coupled interface) to forcing fields
455 C jmc: do not know precisely where to put this call (bf or af thSIce ?)
456 IF ( useCoupler ) THEN
457 CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
458 ENDIF
459 #endif /* ALLOW_OCN_COMPON_INTERF */
460
461 iMin = 1-OLx
462 iMax = sNx+OLx
463 jMin = 1-OLy
464 jMax = sNy+OLy
465
466 C--- Determines forcing terms based on external fields
467 C relaxation terms, etc.
468 #ifdef ALLOW_DEBUG
469 IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
470 #endif
471 #ifdef ALLOW_AUTODIFF
472 CADJ STORE salt, theta = comlev1, key = ikey_dynamics,
473 CADJ & kind = isbyte
474 #else /* ALLOW_AUTODIFF */
475 C-- if fluid is not water, by-pass surfaceForcing, find_rho, gmredi
476 C and all vertical mixing schemes, but keep OBCS_CALC
477 IF ( fluidIsWater ) THEN
478 #endif /* ALLOW_AUTODIFF */
479 CALL EXTERNAL_FORCING_SURF(
480 I iMin, iMax, jMin, jMax,
481 I myTime, myIter, myThid )
482
483 #ifdef ALLOW_AUTODIFF_TAMC
484 C-- HPF directive to help TAMC
485 CHPF$ INDEPENDENT
486 #endif /* ALLOW_AUTODIFF_TAMC */
487 DO bj=myByLo(myThid),myByHi(myThid)
488 #ifdef ALLOW_AUTODIFF_TAMC
489 C-- HPF directive to help TAMC
490 CHPF$ INDEPENDENT
491 #endif /* ALLOW_AUTODIFF_TAMC */
492 DO bi=myBxLo(myThid),myBxHi(myThid)
493
494 #ifdef ALLOW_AUTODIFF_TAMC
495 act1 = bi - myBxLo(myThid)
496 max1 = myBxHi(myThid) - myBxLo(myThid) + 1
497 act2 = bj - myByLo(myThid)
498 max2 = myByHi(myThid) - myByLo(myThid) + 1
499 act3 = myThid - 1
500 max3 = nTx*nTy
501 act4 = ikey_dynamics - 1
502 itdkey = (act1 + 1) + act2*max1
503 & + act3*max1*max2
504 & + act4*max1*max2*max3
505 #endif /* ALLOW_AUTODIFF_TAMC */
506
507 C-- Set up work arrays with valid (i.e. not NaN) values
508 C These inital values do not alter the numerical results. They
509 C just ensure that all memory references are to valid floating
510 C point numbers. This prevents spurious hardware signals due to
511 C uninitialised but inert locations.
512 DO k=1,Nr
513 DO j=1-OLy,sNy+OLy
514 DO i=1-OLx,sNx+OLx
515 C This is currently used by GMRedi, IVDC, MXL-depth and Diagnostics
516 sigmaX(i,j,k) = 0. _d 0
517 sigmaY(i,j,k) = 0. _d 0
518 sigmaR(i,j,k) = 0. _d 0
519 ENDDO
520 ENDDO
521 ENDDO
522
523 #ifdef ALLOW_AUTODIFF
524 DO j=1-OLy,sNy+OLy
525 DO i=1-OLx,sNx+OLx
526 rhoKm1 (i,j) = 0. _d 0
527 rhoKp1 (i,j) = 0. _d 0
528 ENDDO
529 ENDDO
530 cph all the following init. are necessary for TAF
531 cph although some of these are re-initialised later.
532 DO k=1,Nr
533 DO j=1-OLy,sNy+OLy
534 DO i=1-OLx,sNx+OLx
535 rhoInSitu(i,j,k,bi,bj) = 0.
536 # ifdef ALLOW_GGL90
537 GGL90viscArU(i,j,k,bi,bj) = 0. _d 0
538 GGL90viscArV(i,j,k,bi,bj) = 0. _d 0
539 GGL90diffKr(i,j,k,bi,bj) = 0. _d 0
540 # endif /* ALLOW_GGL90 */
541 # ifdef ALLOW_SALT_PLUME
542 # ifdef SALT_PLUME_VOLUME
543 SPforcingS(i,j,k,bi,bj) = 0. _d 0
544 SPforcingT(i,j,k,bi,bj) = 0. _d 0
545 # endif
546 # endif /* ALLOW_SALT_PLUME */
547 ENDDO
548 ENDDO
549 ENDDO
550 #ifdef ALLOW_OFFLINE
551 IF ( calcConvect ) THEN
552 #endif
553 DO k=1,Nr
554 DO j=1-OLy,sNy+OLy
555 DO i=1-OLx,sNx+OLx
556 IVDConvCount(i,j,k,bi,bj) = 0.
557 ENDDO
558 ENDDO
559 ENDDO
560 #ifdef ALLOW_OFFLINE
561 ENDIF
562 IF ( calcGMRedi ) THEN
563 #endif
564 # ifdef ALLOW_GMREDI
565 DO k=1,Nr
566 DO j=1-OLy,sNy+OLy
567 DO i=1-OLx,sNx+OLx
568 Kwx(i,j,k,bi,bj) = 0. _d 0
569 Kwy(i,j,k,bi,bj) = 0. _d 0
570 Kwz(i,j,k,bi,bj) = 0. _d 0
571 # ifdef GM_NON_UNITY_DIAGONAL
572 Kux(i,j,k,bi,bj) = 0. _d 0
573 Kvy(i,j,k,bi,bj) = 0. _d 0
574 # endif
575 # ifdef GM_EXTRA_DIAGONAL
576 Kuz(i,j,k,bi,bj) = 0. _d 0
577 Kvz(i,j,k,bi,bj) = 0. _d 0
578 # endif
579 # ifdef GM_BOLUS_ADVEC
580 GM_PsiX(i,j,k,bi,bj) = 0. _d 0
581 GM_PsiY(i,j,k,bi,bj) = 0. _d 0
582 # endif
583 # ifdef GM_VISBECK_VARIABLE_K
584 VisbeckK(i,j,bi,bj) = 0. _d 0
585 # endif
586 ENDDO
587 ENDDO
588 ENDDO
589 # endif /* ALLOW_GMREDI */
590 #ifdef ALLOW_OFFLINE
591 ENDIF
592 IF ( calcKPP ) THEN
593 #endif
594 # ifdef ALLOW_KPP
595 DO k=1,Nr
596 DO j=1-OLy,sNy+OLy
597 DO i=1-OLx,sNx+OLx
598 KPPdiffKzS(i,j,k,bi,bj) = 0. _d 0
599 KPPdiffKzT(i,j,k,bi,bj) = 0. _d 0
600 ENDDO
601 ENDDO
602 ENDDO
603 # endif /* ALLOW_KPP */
604 #ifdef ALLOW_OFFLINE
605 ENDIF
606 #endif
607 #endif /* ALLOW_AUTODIFF */
608
609 #ifdef ALLOW_AUTODIFF_TAMC
610 CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
611 CADJ & kind = isbyte
612 CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
613 CADJ & kind = isbyte
614 CADJ STORE totphihyd(:,:,:,bi,bj)
615 CADJ & = comlev1_bibj, key=itdkey,
616 CADJ & kind = isbyte
617 # ifdef ALLOW_KPP
618 CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
619 CADJ & kind = isbyte
620 CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
621 CADJ & kind = isbyte
622 # endif
623 # ifdef ALLOW_SALT_PLUME
624 CADJ STORE saltplumedepth(:,:,bi,bj) = comlev1_bibj, key=itdkey,
625 CADJ & kind = isbyte
626 CADJ STORE saltplumeflux(:,:,bi,bj) = comlev1_bibj, key=itdkey,
627 CADJ & kind = isbyte
628 # endif
629 #endif /* ALLOW_AUTODIFF_TAMC */
630
631 C-- Always compute density (stored in common block) here; even when it is not
632 C needed here, will be used anyway in calc_phi_hyd (data flow easier this way)
633 #ifdef ALLOW_DEBUG
634 IF (debugMode) CALL DEBUG_CALL('FIND_RHO_2D (xNr)',myThid)
635 #endif
636 #ifdef ALLOW_AUTODIFF
637 IF ( fluidIsWater ) THEN
638 #endif /* ALLOW_AUTODIFF */
639 #ifdef ALLOW_DOWN_SLOPE
640 IF ( useDOWN_SLOPE ) THEN
641 DO k=1,Nr
642 CALL DWNSLP_CALC_RHO(
643 I theta, salt,
644 O rhoInSitu(1-OLx,1-OLy,k,bi,bj),
645 I k, bi, bj, myTime, myIter, myThid )
646 ENDDO
647 ENDIF
648 #endif /* ALLOW_DOWN_SLOPE */
649 #ifdef ALLOW_BBL
650 IF ( useBBL ) THEN
651 C pkg/bbl requires in-situ bbl density for depths equal to and deeper than the bbl.
652 C To reduce computation and storage requirement, these densities are stored in the
653 C dry grid boxes of rhoInSitu. See BBL_CALC_RHO for details.
654 DO k=Nr,1,-1
655 CALL BBL_CALC_RHO(
656 I theta, salt,
657 O rhoInSitu,
658 I k, bi, bj, myTime, myIter, myThid )
659
660 ENDDO
661 ENDIF
662 #endif /* ALLOW_BBL */
663 IF ( .NOT. ( useDOWN_SLOPE .OR. useBBL ) ) THEN
664 DO k=1,Nr
665 CALL FIND_RHO_2D(
666 I iMin, iMax, jMin, jMax, k,
667 I theta(1-OLx,1-OLy,k,bi,bj),
668 I salt (1-OLx,1-OLy,k,bi,bj),
669 O rhoInSitu(1-OLx,1-OLy,k,bi,bj),
670 I k, bi, bj, myThid )
671 ENDDO
672 ENDIF
673 #ifdef ALLOW_AUTODIFF
674 ELSE
675 C- fluid is not water:
676 DO k=1,Nr
677 DO j=1-OLy,sNy+OLy
678 DO i=1-OLx,sNx+OLx
679 rhoInSitu(i,j,k,bi,bj) = 0.
680 ENDDO
681 ENDDO
682 ENDDO
683 ENDIF
684 #endif /* ALLOW_AUTODIFF */
685
686 #ifdef ALLOW_DEBUG
687 IF (debugMode) CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)
688 #endif
689
690 C-- Start of diagnostic loop
691 DO k=Nr,1,-1
692
693 #ifdef ALLOW_AUTODIFF_TAMC
694 C? Patrick, is this formula correct now that we change the loop range?
695 C? Do we still need this?
696 cph kkey formula corrected.
697 cph Needed for rhoK, rhoKm1, in the case useGMREDI.
698 kkey = (itdkey-1)*Nr + k
699 #endif /* ALLOW_AUTODIFF_TAMC */
700
701 c#ifdef ALLOW_AUTODIFF_TAMC
702 cCADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
703 cCADJ & kind = isbyte
704 cCADJ STORE salt(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
705 cCADJ & kind = isbyte
706 c#endif /* ALLOW_AUTODIFF_TAMC */
707
708 C-- Calculate gradients of potential density for isoneutral
709 C slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
710 IF ( calcGMRedi .OR. (k.GT.1 .AND. calcConvect)
711 & .OR. usePP81 .OR. useMY82 .OR. useGGL90
712 & .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
713 IF (k.GT.1) THEN
714 #ifdef ALLOW_AUTODIFF_TAMC
715 CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
716 CADJ & kind = isbyte
717 CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
718 CADJ & kind = isbyte
719 CADJ STORE rhokm1 (bi,bj) = comlev1_bibj_k, key=kkey,
720 CADJ & kind = isbyte
721 #endif /* ALLOW_AUTODIFF_TAMC */
722 CALL FIND_RHO_2D(
723 I iMin, iMax, jMin, jMax, k,
724 I theta(1-OLx,1-OLy,k-1,bi,bj),
725 I salt (1-OLx,1-OLy,k-1,bi,bj),
726 O rhoKm1,
727 I k-1, bi, bj, myThid )
728 ENDIF
729 #ifdef ALLOW_DEBUG
730 IF (debugMode) CALL DEBUG_CALL('GRAD_SIGMA',myThid)
731 #endif
732 cph Avoid variable aliasing for adjoint !!!
733 DO j=jMin,jMax
734 DO i=iMin,iMax
735 rhoKp1(i,j) = rhoInSitu(i,j,k,bi,bj)
736 ENDDO
737 ENDDO
738 CALL GRAD_SIGMA(
739 I bi, bj, iMin, iMax, jMin, jMax, k,
740 I rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1,
741 O sigmaX, sigmaY, sigmaR,
742 I myThid )
743 #ifdef ALLOW_AUTODIFF
744 #ifdef GMREDI_WITH_STABLE_ADJOINT
745 cgf zero out adjoint fields to stabilize pkg/gmredi adjoint
746 cgf -> cuts adjoint dependency from slope to state
747 CALL ZERO_ADJ_LOC( Nr, sigmaX, myThid)
748 CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid)
749 CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid)
750 #endif
751 #endif /* ALLOW_AUTODIFF */
752 ENDIF
753
754 C-- Implicit Vertical Diffusion for Convection
755 IF (k.GT.1 .AND. calcConvect) THEN
756 #ifdef ALLOW_DEBUG
757 IF (debugMode) CALL DEBUG_CALL('CALC_IVDC',myThid)
758 #endif
759 CALL CALC_IVDC(
760 I bi, bj, iMin, iMax, jMin, jMax, k,
761 I sigmaR,
762 I myTime, myIter, myThid)
763 ENDIF
764
765 #ifdef ALLOW_DIAGNOSTICS
766 IF ( doDiagsRho.GE.4 ) THEN
767 CALL DIAGS_RHO_L( doDiagsRho, k, bi, bj,
768 I rhoInSitu(1-OLx,1-OLy,1,bi,bj),
769 I rhoKm1, wVel,
770 I myTime, myIter, myThid )
771 ENDIF
772 #endif
773
774 C-- end of diagnostic k loop (Nr:1)
775 ENDDO
776
777 #ifdef ALLOW_AUTODIFF_TAMC
778 CADJ STORE IVDConvCount(:,:,:,bi,bj)
779 CADJ & = comlev1_bibj, key=itdkey,
780 CADJ & kind = isbyte
781 #endif
782
783 C-- Diagnose Mixed Layer Depth:
784 IF ( calcGMRedi .OR. MOD(doDiagsRho,2).EQ.1 ) THEN
785 CALL CALC_OCE_MXLAYER(
786 I rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
787 I bi, bj, myTime, myIter, myThid )
788 ENDIF
789
790 #ifdef ALLOW_SALT_PLUME
791 IF ( useSALT_PLUME ) THEN
792 CALL SALT_PLUME_CALC_DEPTH(
793 I rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
794 I bi, bj, myTime, myIter, myThid )
795 #ifdef SALT_PLUME_VOLUME
796 CALL SALT_PLUME_VOLFRAC(
797 I bi, bj, myTime, myIter, myThid )
798 C-- get forcings for kpp
799 CALL SALT_PLUME_APPLY(
800 I 1, bi, bj, recip_hFacC(1-OLx,1-OLy,1,bi,bj),
801 I theta, 0,
802 I myTime, myIter, myThid )
803 CALL SALT_PLUME_APPLY(
804 I 2, bi, bj, recip_hFacC(1-OLx,1-OLy,1,bi,bj),
805 I salt, 0,
806 I myTime, myIter, myThid )
807 C-- need to call this S/R from here to apply just before kpp
808 CALL SALT_PLUME_FORCING_SURF(
809 I bi, bj, iMin, iMax, jMin, jMax,
810 I myTime, myIter, myThid )
811 #endif /* SALT_PLUME_VOLUME */
812 ENDIF
813 #endif /* ALLOW_SALT_PLUME */
814
815 #ifdef ALLOW_DIAGNOSTICS
816 IF ( MOD(doDiagsRho,4).GE.2 ) THEN
817 CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR ', 0, Nr,
818 & 2, bi, bj, myThid)
819 ENDIF
820 #endif /* ALLOW_DIAGNOSTICS */
821
822 C-- This is where EXTERNAL_FORCING_SURF(bi,bj) used to be called;
823 C now called earlier, before bi,bj loop.
824
825 #ifdef ALLOW_AUTODIFF_TAMC
826 cph needed for KPP
827 CADJ STORE surfaceForcingU(:,:,bi,bj)
828 CADJ & = comlev1_bibj, key=itdkey,
829 CADJ & kind = isbyte
830 CADJ STORE surfaceForcingV(:,:,bi,bj)
831 CADJ & = comlev1_bibj, key=itdkey,
832 CADJ & kind = isbyte
833 CADJ STORE surfaceForcingS(:,:,bi,bj)
834 CADJ & = comlev1_bibj, key=itdkey,
835 CADJ & kind = isbyte
836 CADJ STORE surfaceForcingT(:,:,bi,bj)
837 CADJ & = comlev1_bibj, key=itdkey,
838 CADJ & kind = isbyte
839 CADJ STORE surfaceForcingTice(:,:,bi,bj)
840 CADJ & = comlev1_bibj, key=itdkey,
841 CADJ & kind = isbyte
842 #endif /* ALLOW_AUTODIFF_TAMC */
843
844 #ifdef ALLOW_KPP
845 C-- Compute KPP mixing coefficients
846 IF ( calcKPP ) THEN
847 #ifdef ALLOW_DEBUG
848 IF (debugMode) CALL DEBUG_CALL('KPP_CALC',myThid)
849 #endif
850 CALL TIMER_START('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
851 CALL KPP_CALC(
852 I bi, bj, myTime, myIter, myThid )
853 CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
854 #if (defined ALLOW_AUTODIFF) && !(defined ALLOW_OFFLINE)
855 ELSE
856 CALL KPP_CALC_DUMMY(
857 I bi, bj, myTime, myIter, myThid )
858 #endif /* ALLOW_AUTODIFF and not ALLOW_OFFLINE */
859 ENDIF
860 #endif /* ALLOW_KPP */
861
862 #ifdef ALLOW_PP81
863 C-- Compute PP81 mixing coefficients
864 IF (usePP81) THEN
865 #ifdef ALLOW_DEBUG
866 IF (debugMode) CALL DEBUG_CALL('PP81_CALC',myThid)
867 #endif
868 CALL PP81_CALC(
869 I bi, bj, sigmaR, myTime, myIter, myThid )
870 ENDIF
871 #endif /* ALLOW_PP81 */
872
873 #ifdef ALLOW_MY82
874 C-- Compute MY82 mixing coefficients
875 IF (useMY82) THEN
876 #ifdef ALLOW_DEBUG
877 IF (debugMode) CALL DEBUG_CALL('MY82_CALC',myThid)
878 #endif
879 CALL MY82_CALC(
880 I bi, bj, sigmaR, myTime, myIter, myThid )
881 ENDIF
882 #endif /* ALLOW_MY82 */
883
884 #ifdef ALLOW_GGL90
885 #ifdef ALLOW_AUTODIFF_TAMC
886 CADJ STORE GGL90TKE (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
887 CADJ & kind = isbyte
888 #endif /* ALLOW_AUTODIFF_TAMC */
889 C-- Compute GGL90 mixing coefficients
890 IF (useGGL90) THEN
891 #ifdef ALLOW_DEBUG
892 IF (debugMode) CALL DEBUG_CALL('GGL90_CALC',myThid)
893 #endif
894 CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
895 CALL GGL90_CALC(
896 I bi, bj, sigmaR, myTime, myIter, myThid )
897 CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
898 ENDIF
899 #endif /* ALLOW_GGL90 */
900
901 #ifdef ALLOW_TIMEAVE
902 IF ( taveFreq.GT. 0. _d 0 ) THEN
903 CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
904 ENDIF
905 IF ( taveFreq.GT.0. .AND. calcConvect ) THEN
906 CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,
907 I Nr, deltaTClock, bi, bj, myThid)
908 ENDIF
909 #endif /* ALLOW_TIMEAVE */
910
911 #ifdef ALLOW_GMREDI
912 #ifdef ALLOW_AUTODIFF_TAMC
913 # ifndef GM_EXCLUDE_CLIPPING
914 cph storing here is needed only for one GMREDI_OPTIONS:
915 cph define GM_BOLUS_ADVEC
916 cph keep it although TAF says you dont need to.
917 cph but I have avoided the #ifdef for now, in case more things change
918 CADJ STORE sigmaX(:,:,:) = comlev1_bibj, key=itdkey,
919 CADJ & kind = isbyte
920 CADJ STORE sigmaY(:,:,:) = comlev1_bibj, key=itdkey,
921 CADJ & kind = isbyte
922 CADJ STORE sigmaR(:,:,:) = comlev1_bibj, key=itdkey,
923 CADJ & kind = isbyte
924 # endif
925 #endif /* ALLOW_AUTODIFF_TAMC */
926
927 C-- Calculate iso-neutral slopes for the GM/Redi parameterisation
928 IF ( calcGMRedi ) THEN
929 #ifdef ALLOW_DEBUG
930 IF (debugMode) CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
931 #endif
932 CALL GMREDI_CALC_TENSOR(
933 I iMin, iMax, jMin, jMax,
934 I sigmaX, sigmaY, sigmaR,
935 I bi, bj, myTime, myIter, myThid )
936 #if (defined ALLOW_AUTODIFF) && !(defined ALLOW_OFFLINE)
937 ELSE
938 CALL GMREDI_CALC_TENSOR_DUMMY(
939 I iMin, iMax, jMin, jMax,
940 I sigmaX, sigmaY, sigmaR,
941 I bi, bj, myTime, myIter, myThid )
942 #endif /* ALLOW_AUTODIFF and not ALLOW_OFFLINE */
943 ENDIF
944 #endif /* ALLOW_GMREDI */
945
946 #ifdef ALLOW_DOWN_SLOPE
947 IF ( useDOWN_SLOPE ) THEN
948 C-- Calculate Downsloping Flow for Down_Slope parameterization
949 IF ( usingPCoords ) THEN
950 CALL DWNSLP_CALC_FLOW(
951 I bi, bj, kSurfC, rhoInSitu,
952 I myTime, myIter, myThid )
953 ELSE
954 CALL DWNSLP_CALC_FLOW(
955 I bi, bj, kLowC, rhoInSitu,
956 I myTime, myIter, myThid )
957 ENDIF
958 ENDIF
959 #endif /* ALLOW_DOWN_SLOPE */
960
961 C-- end bi,bj loops.
962 ENDDO
963 ENDDO
964
965 #ifndef ALLOW_AUTODIFF
966 C--- if fluid Is Water: end
967 ENDIF
968 #endif
969
970 #ifdef ALLOW_BBL
971 IF ( useBBL ) THEN
972 CALL BBL_CALC_RHS(
973 I myTime, myIter, myThid )
974 ENDIF
975 #endif /* ALLOW_BBL */
976
977 #ifdef ALLOW_MYPACKAGE
978 IF ( useMYPACKAGE ) THEN
979 CALL MYPACKAGE_CALC_RHS(
980 I myTime, myIter, myThid )
981 ENDIF
982 #endif /* ALLOW_MYPACKAGE */
983
984 #ifdef ALLOW_GMREDI
985 IF ( calcGMRedi ) THEN
986 CALL GMREDI_DO_EXCH( myTime, myIter, myThid )
987 ENDIF
988 #endif /* ALLOW_GMREDI */
989
990 #ifdef ALLOW_KPP
991 IF ( calcKPP ) THEN
992 CALL KPP_DO_EXCH( myThid )
993 ENDIF
994 #endif /* ALLOW_KPP */
995
996 #ifdef ALLOW_DIAGNOSTICS
997 IF ( fluidIsWater .AND. useDiagnostics ) THEN
998 CALL DIAGS_RHO_G(
999 I rhoInSitu, uVel, vVel, wVel,
1000 I myTime, myIter, myThid )
1001 ENDIF
1002 IF ( useDiagnostics ) THEN
1003 CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
1004 ENDIF
1005 IF ( calcConvect .AND. useDiagnostics ) THEN
1006 CALL DIAGNOSTICS_FILL( IVDConvCount, 'CONVADJ ',
1007 & 0, Nr, 0, 1, 1, myThid )
1008 ENDIF
1009 #ifdef ALLOW_SALT_PLUME
1010 IF ( useDiagnostics )
1011 & CALL SALT_PLUME_DIAGNOSTICS_FILL(bi,bj,myThid)
1012 #endif
1013 #endif
1014
1015 #ifdef ALLOW_ECCO
1016 CALL ECCO_PHYS( myThid )
1017 #endif
1018
1019 #ifdef ALLOW_DEBUG
1020 IF (debugMode) CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)
1021 #endif
1022
1023 RETURN
1024 END

  ViewVC Help
Powered by ViewVC 1.1.22