/[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.136 - (show annotations) (download)
Wed May 21 10:44:59 2014 UTC (10 years ago) by heimbach
Branch: MAIN
Changes since 1.135: +43 -1 lines
An Nguyen's extensions to salt_plume package
(carry corresponding heat flux along with salt redistribution)

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

  ViewVC Help
Powered by ViewVC 1.1.22