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

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

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


Revision 1.110 - (hide annotations) (download)
Thu Nov 10 21:03:35 2011 UTC (12 years, 7 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63f, checkpoint63g
Changes since 1.109: +52 -38 lines
- change diagnostics WRHOMASS to just the Vertical transport of in-situ density;
- add 2 diagnostics for wVel*delta^k(Rho) at constant pressure (= WdRHO_P)
  and at constant T,S (= WdRHOdP); separated k-loop for rhoInSitu calculation;
- reset addMass to zero only if useICEFRONT.

1 jmc 1.110 C $Header: /u/gcmpack/MITgcm/model/src/do_oceanic_phys.F,v 1.109 2011/08/08 18:10:15 heimbach Exp $
2 jmc 1.1 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 jmc 1.29 # ifdef ALLOW_SEAICE
15     # include "SEAICE_OPTIONS.h"
16     # endif
17 jmc 1.1 #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 jmc 1.28 C | SUBROUTINE DO_OCEANIC_PHYS
26     C | o Controlling routine for oceanic physics and
27 jmc 1.1 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 jmc 1.69 #include "GRID.h"
40 jmc 1.1 #include "DYNVARS.h"
41 jmc 1.20 #ifdef ALLOW_TIMEAVE
42     #include "TIMEAVE_STATV.h"
43     #endif
44 mlosch 1.22 #if defined (ALLOW_BALANCE_FLUXES) && !(defined ALLOW_AUTODIFF_TAMC)
45     #include "FFIELDS.h"
46     #endif
47 jmc 1.1
48     #ifdef ALLOW_AUTODIFF_TAMC
49 heimbach 1.80 # include "AUTODIFF_MYFIELDS.h"
50 jmc 1.1 # include "tamc.h"
51     # include "tamc_keys.h"
52     # include "FFIELDS.h"
53 heimbach 1.54 # include "SURFACE.h"
54 jmc 1.1 # include "EOS.h"
55     # ifdef ALLOW_KPP
56     # include "KPP.h"
57     # endif
58 gforget 1.91 # ifdef ALLOW_GGL90
59     # include "GGL90.h"
60     # endif
61 jmc 1.1 # ifdef ALLOW_GMREDI
62     # include "GMREDI.h"
63     # endif
64     # ifdef ALLOW_EBM
65     # include "EBM.h"
66     # endif
67 jmc 1.29 # ifdef ALLOW_EXF
68     # include "ctrl.h"
69 jmc 1.40 # include "EXF_FIELDS.h"
70 jmc 1.29 # ifdef ALLOW_BULKFORMULAE
71 jmc 1.40 # include "EXF_CONSTANTS.h"
72 jmc 1.29 # endif
73     # endif
74     # ifdef ALLOW_SEAICE
75     # include "SEAICE.h"
76     # endif
77 heimbach 1.105 # ifdef ALLOW_THSICE
78     # include "THSICE_VARS.h"
79     # endif
80 heimbach 1.75 # ifdef ALLOW_SALT_PLUME
81     # include "SALT_PLUME.h"
82     # endif
83 jmc 1.1 #endif /* ALLOW_AUTODIFF_TAMC */
84    
85     C !INPUT/OUTPUT PARAMETERS:
86     C == Routine arguments ==
87 jmc 1.18 C myTime :: Current time in simulation
88     C myIter :: Current iteration number in simulation
89     C myThid :: Thread number for this instance of the routine.
90 jmc 1.1 _RL myTime
91     INTEGER myIter
92     INTEGER myThid
93    
94     C !LOCAL VARIABLES:
95     C == Local variables
96 jmc 1.47 C rhoK, rhoKm1 :: Density at current level, and level above
97 jmc 1.18 C iMin, iMax :: Ranges and sub-block indices on which calculations
98 jmc 1.1 C jMin, jMax are applied.
99 jmc 1.18 C bi, bj :: tile indices
100     C i,j,k :: loop indices
101 jmc 1.47 _RL rhoKp1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
102     _RL rhoKm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
103 jmc 1.1 _RL sigmaX (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
104     _RL sigmaY (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
105     _RL sigmaR (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
106     INTEGER iMin, iMax
107     INTEGER jMin, jMax
108     INTEGER bi, bj
109 jmc 1.18 INTEGER i, j, k
110 jmc 1.17 INTEGER doDiagsRho
111     #ifdef ALLOW_DIAGNOSTICS
112     LOGICAL DIAGNOSTICS_IS_ON
113     EXTERNAL DIAGNOSTICS_IS_ON
114     #endif /* ALLOW_DIAGNOSTICS */
115 jmc 1.1
116     CEOP
117    
118 heimbach 1.12 #ifdef ALLOW_AUTODIFF_TAMC
119     C-- dummy statement to end declaration part
120     itdkey = 1
121     #endif /* ALLOW_AUTODIFF_TAMC */
122    
123 jmc 1.1 #ifdef ALLOW_DEBUG
124 jmc 1.96 IF (debugMode) CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)
125 jmc 1.1 #endif
126 jmc 1.36
127 jmc 1.17 doDiagsRho = 0
128     #ifdef ALLOW_DIAGNOSTICS
129     IF ( useDiagnostics .AND. fluidIsWater ) THEN
130 jmc 1.110 IF ( DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) )
131 jmc 1.71 & doDiagsRho = doDiagsRho + 1
132     IF ( DIAGNOSTICS_IS_ON('DRHODR ',myThid) )
133     & doDiagsRho = doDiagsRho + 2
134 jmc 1.110 IF ( DIAGNOSTICS_IS_ON('WdRHO_P ',myThid) )
135 jmc 1.71 & doDiagsRho = doDiagsRho + 4
136 jmc 1.110 IF ( DIAGNOSTICS_IS_ON('WdRHOdP ',myThid) )
137     & doDiagsRho = doDiagsRho + 8
138 jmc 1.17 ENDIF
139     #endif /* ALLOW_DIAGNOSTICS */
140    
141 jmc 1.82 #ifdef ALLOW_OBCS
142     IF (useOBCS) THEN
143     C-- Calculate future values on open boundaries
144     C-- moved before SEAICE_MODEL call since SEAICE_MODEL needs seaice-obcs fields
145 heimbach 1.100 # ifdef ALLOW_AUTODIFF_TAMC
146     CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte
147     CADJ STORE salt = comlev1, key=ikey_dynamics, kind=isbyte
148     # endif
149     # ifdef ALLOW_DEBUG
150 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
151 heimbach 1.100 # endif
152 jahn 1.83 CALL OBCS_CALC( myTime+deltaTclock, myIter+1,
153     I uVel, vVel, wVel, theta, salt, myThid )
154 jmc 1.82 ENDIF
155     #endif /* ALLOW_OBCS */
156 jmc 1.69
157 jmc 1.98 #ifdef ALLOW_ADDFLUID
158 jmc 1.110 c IF ( fluidIsWater ) THEN
159     IF ( useICEFRONT ) THEN
160 jmc 1.98 DO bj=myByLo(myThid),myByHi(myThid)
161     DO bi=myBxLo(myThid),myBxHi(myThid)
162     DO k=1,Nr
163     DO j=1-OLy,sNy+OLy
164     DO i=1-OLx,sNx+OLx
165     addMass(i,j,k,bi,bj) = 0. _d 0
166     ENDDO
167     ENDDO
168     ENDDO
169     ENDDO
170     ENDDO
171     ENDIF
172     #endif /* ALLOW_ADDFLUID */
173    
174 gforget 1.87 #ifdef ALLOW_AUTODIFF_TAMC
175     # ifdef ALLOW_SALT_PLUME
176     DO bj=myByLo(myThid),myByHi(myThid)
177     DO bi=myBxLo(myThid),myBxHi(myThid)
178     DO j=1-OLy,sNy+OLy
179     DO i=1-OLx,sNx+OLx
180     saltPlumeDepth(i,j,bi,bj) = 0. _d 0
181     saltPlumeFlux(i,j,bi,bj) = 0. _d 0
182     ENDDO
183     ENDDO
184     ENDDO
185     ENDDO
186     # endif
187     #endif /* ALLOW_AUTODIFF_TAMC */
188    
189 jmc 1.29 #ifdef ALLOW_SEAICE
190     IF ( useSEAICE ) THEN
191 heimbach 1.62 # ifdef ALLOW_AUTODIFF_TAMC
192 heimbach 1.65 cph-adj-test(
193 heimbach 1.81 CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte
194     CADJ STORE hsnow = comlev1, key=ikey_dynamics, kind=isbyte
195 heimbach 1.88 CADJ STORE heff = comlev1, key=ikey_dynamics, kind=isbyte
196 heimbach 1.81 CADJ STORE empmr,qsw,theta = comlev1, key = ikey_dynamics,
197 heimbach 1.77 CADJ & kind = isbyte
198 heimbach 1.65 cph-adj-test)
199 heimbach 1.77 CADJ STORE atemp,aqh,precip = comlev1, key = ikey_dynamics,
200     CADJ & kind = isbyte
201     CADJ STORE swdown,lwdown = comlev1, key = ikey_dynamics,
202     CADJ & kind = isbyte
203 heimbach 1.34 cph# ifdef EXF_READ_EVAP
204 heimbach 1.77 CADJ STORE evap = comlev1, key = ikey_dynamics,
205     CADJ & kind = isbyte
206 heimbach 1.34 cph# endif
207 heimbach 1.77 CADJ STORE uvel,vvel = comlev1, key = ikey_dynamics,
208     CADJ & kind = isbyte
209 heimbach 1.95 # ifdef SEAICE_CGRID
210 heimbach 1.93 CADJ STORE stressdivergencex = comlev1, key = ikey_dynamics,
211     CADJ & kind = isbyte
212     CADJ STORE stressdivergencey = comlev1, key = ikey_dynamics,
213     CADJ & kind = isbyte
214     # endif
215 heimbach 1.62 # ifdef SEAICE_ALLOW_DYNAMICS
216 heimbach 1.77 CADJ STORE uice = comlev1, key = ikey_dynamics,
217     CADJ & kind = isbyte
218     CADJ STORE vice = comlev1, key = ikey_dynamics,
219     CADJ & kind = isbyte
220 heimbach 1.62 # ifdef SEAICE_ALLOW_EVP
221 heimbach 1.77 CADJ STORE seaice_sigma1 = comlev1, key = ikey_dynamics,
222     CADJ & kind = isbyte
223     CADJ STORE seaice_sigma2 = comlev1, key = ikey_dynamics,
224     CADJ & kind = isbyte
225     CADJ STORE seaice_sigma12 = comlev1, key = ikey_dynamics,
226     CADJ & kind = isbyte
227 heimbach 1.62 # endif
228     # endif
229 heimbach 1.104 cph# ifdef SEAICE_SALINITY
230 heimbach 1.77 CADJ STORE salt = comlev1, key = ikey_dynamics,
231     CADJ & kind = isbyte
232 heimbach 1.104 cph# endif
233 heimbach 1.62 # ifdef ATMOSPHERIC_LOADING
234 heimbach 1.77 CADJ STORE pload = comlev1, key = ikey_dynamics,
235     CADJ & kind = isbyte
236     CADJ STORE siceload = comlev1, key = ikey_dynamics,
237     CADJ & kind = isbyte
238 heimbach 1.62 # endif
239     # ifdef NONLIN_FRSURF
240 heimbach 1.77 CADJ STORE recip_hfacc = comlev1, key = ikey_dynamics,
241     CADJ & kind = isbyte
242 heimbach 1.62 # endif
243 heimbach 1.78 # ifdef ANNUAL_BALANCE
244     CADJ STORE balance_itcount = comlev1, key = ikey_dynamics,
245     CADJ & kind = isbyte
246     # endif /* ANNUAL_BALANCE */
247 heimbach 1.55 # endif
248 heimbach 1.62 # ifdef ALLOW_DEBUG
249 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('SEAICE_MODEL',myThid)
250 heimbach 1.62 # endif
251 jmc 1.29 CALL TIMER_START('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
252     CALL SEAICE_MODEL( myTime, myIter, myThid )
253     CALL TIMER_STOP ('SEAICE_MODEL [DO_OCEANIC_PHYS]', myThid)
254 heimbach 1.62 # ifdef ALLOW_COST
255 heimbach 1.57 CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
256 heimbach 1.62 # endif
257 heimbach 1.35 ENDIF
258 jmc 1.29 #endif /* ALLOW_SEAICE */
259    
260 heimbach 1.64 #ifdef ALLOW_AUTODIFF_TAMC
261 heimbach 1.77 CADJ STORE sst, sss = comlev1, key = ikey_dynamics,
262     CADJ & kind = isbyte
263     CADJ STORE qsw = comlev1, key = ikey_dynamics,
264     CADJ & kind = isbyte
265 heimbach 1.64 # ifdef ALLOW_SEAICE
266 heimbach 1.77 CADJ STORE area = comlev1, key = ikey_dynamics,
267     CADJ & kind = isbyte
268 heimbach 1.64 # endif
269     #endif
270    
271 jscott 1.30 #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
272 jmc 1.14 IF ( useThSIce .AND. fluidIsWater ) THEN
273 heimbach 1.101 # ifdef ALLOW_AUTODIFF_TAMC
274     cph(
275     # ifdef NONLIN_FRSURF
276     CADJ STORE uice,vice = comlev1, key = ikey_dynamics,
277     CADJ & kind = isbyte
278     CADJ STORE salt,theta = comlev1, key = ikey_dynamics,
279     CADJ & kind = isbyte
280     CADJ STORE qnet,qsw, empmr = comlev1, key = ikey_dynamics,
281     CADJ & kind = isbyte
282     CADJ STORE hFac_surfC = comlev1, key = ikey_dynamics,
283     CADJ & kind = isbyte
284     # endif
285     # endif
286     # ifdef ALLOW_DEBUG
287 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('THSICE_MAIN',myThid)
288 heimbach 1.101 # endif
289 jmc 1.5 C-- Step forward Therm.Sea-Ice variables
290     C and modify forcing terms including effects from ice
291     CALL TIMER_START('THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
292     CALL THSICE_MAIN( myTime, myIter, myThid )
293     CALL TIMER_STOP( 'THSICE_MAIN [DO_OCEANIC_PHYS]', myThid)
294     ENDIF
295     #endif /* ALLOW_THSICE */
296    
297 mlosch 1.21 #ifdef ALLOW_SHELFICE
298 heimbach 1.92 # ifdef ALLOW_AUTODIFF_TAMC
299     CADJ STORE salt, theta = comlev1, key = ikey_dynamics,
300     CADJ & kind = isbyte
301     # endif
302 mlosch 1.21 IF ( useShelfIce .AND. fluidIsWater ) THEN
303     #ifdef ALLOW_DEBUG
304 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
305 mlosch 1.21 #endif
306 jmc 1.47 C compute temperature and (virtual) salt flux at the
307 mlosch 1.21 C shelf-ice ocean interface
308     CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
309     & myThid)
310     CALL SHELFICE_THERMODYNAMICS( myTime, myIter, myThid )
311     CALL TIMER_STOP( 'SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
312     & myThid)
313     ENDIF
314     #endif /* ALLOW_SHELFICE */
315    
316 dimitri 1.85 #ifdef ALLOW_ICEFRONT
317     IF ( useICEFRONT .AND. fluidIsWater ) THEN
318     #ifdef ALLOW_DEBUG
319 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('ICEFRONT_THERMODYNAMICS',myThid)
320 dimitri 1.85 #endif
321     C compute temperature and (virtual) salt flux at the
322     C ice-front ocean interface
323     CALL TIMER_START('ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
324     & myThid)
325     CALL ICEFRONT_THERMODYNAMICS( myTime, myIter, myThid )
326     CALL TIMER_STOP( 'ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
327     & myThid)
328     ENDIF
329     #endif /* ALLOW_ICEFRONT */
330    
331 dimitri 1.102 C-- Freeze water in the ocean interior and let it rise to the surface
332 dimitri 1.103 C temporarily exclude from adjoint computations until
333     C impact has been vetted in forward integrations
334 dimitri 1.102 IF ( allowInteriorFreezing ) THEN
335 heimbach 1.104 #ifdef ALLOW_AUTODIFF_TAMC
336     CADJ STORE theta, salt = comlev1, key = ikey_dynamics,
337     CADJ & kind = isbyte
338 heimbach 1.105 CADJ STORE recip_hfacc = comlev1, key = ikey_dynamics,
339     CADJ & kind = isbyte
340 heimbach 1.104 #endif
341 dimitri 1.102 CALL FREEZE_INTERIOR( myTime, myIter, myThid )
342     ENDIF
343    
344 jmc 1.5 C-- Freeze water at the surface
345 heimbach 1.104 IF ( allowFreezing ) THEN
346 jmc 1.5 #ifdef ALLOW_AUTODIFF_TAMC
347 heimbach 1.77 CADJ STORE theta = comlev1, key = ikey_dynamics,
348     CADJ & kind = isbyte
349 jmc 1.5 #endif
350     CALL FREEZE_SURFACE( myTime, myIter, myThid )
351     ENDIF
352    
353 jmc 1.28 #ifdef ALLOW_OCN_COMPON_INTERF
354 jmc 1.5 C-- Apply imported data (from coupled interface) to forcing fields
355 jmc 1.28 C jmc: do not know precisely where to put this call (bf or af thSIce ?)
356 jmc 1.36 IF ( useCoupler ) THEN
357 jmc 1.5 CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
358 jmc 1.36 ENDIF
359 jmc 1.28 #endif /* ALLOW_OCN_COMPON_INTERF */
360 jmc 1.5
361 jmc 1.25 #ifdef ALLOW_BALANCE_FLUXES
362 jmc 1.36 C balance fluxes
363     IF ( balanceEmPmR )
364 jmc 1.84 & CALL REMOVE_MEAN_RS( 1, EmPmR, maskInC, maskInC, rA, drF,
365 jmc 1.25 & 'EmPmR', myTime, myThid )
366 jmc 1.36 IF ( balanceQnet )
367 jmc 1.84 & CALL REMOVE_MEAN_RS( 1, Qnet, maskInC, maskInC, rA, drF,
368 jmc 1.25 & 'Qnet ', myTime, myThid )
369     #endif /* ALLOW_BALANCE_FLUXES */
370    
371 jmc 1.1 #ifdef ALLOW_AUTODIFF_TAMC
372     C-- HPF directive to help TAMC
373     CHPF$ INDEPENDENT
374 jmc 1.106 #else /* ALLOW_AUTODIFF_TAMC */
375     C if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
376     C and all vertical mixing schemes, but keep OBCS_CALC
377     IF ( fluidIsWater ) THEN
378 jmc 1.1 #endif /* ALLOW_AUTODIFF_TAMC */
379     DO bj=myByLo(myThid),myByHi(myThid)
380     #ifdef ALLOW_AUTODIFF_TAMC
381 heimbach 1.15 C-- HPF directive to help TAMC
382     CHPF$ INDEPENDENT
383 jmc 1.1 #endif /* ALLOW_AUTODIFF_TAMC */
384     DO bi=myBxLo(myThid),myBxHi(myThid)
385    
386     #ifdef ALLOW_AUTODIFF_TAMC
387     act1 = bi - myBxLo(myThid)
388     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
389     act2 = bj - myByLo(myThid)
390     max2 = myByHi(myThid) - myByLo(myThid) + 1
391     act3 = myThid - 1
392     max3 = nTx*nTy
393     act4 = ikey_dynamics - 1
394     itdkey = (act1 + 1) + act2*max1
395     & + act3*max1*max2
396     & + act4*max1*max2*max3
397 jmc 1.74 #endif /* ALLOW_AUTODIFF_TAMC */
398 jmc 1.1
399     C-- Set up work arrays with valid (i.e. not NaN) values
400     C These inital values do not alter the numerical results. They
401     C just ensure that all memory references are to valid floating
402     C point numbers. This prevents spurious hardware signals due to
403     C uninitialised but inert locations.
404    
405 jmc 1.69 #ifdef ALLOW_AUTODIFF_TAMC
406 jmc 1.1 DO j=1-OLy,sNy+OLy
407     DO i=1-OLx,sNx+OLx
408 jmc 1.69 rhoKm1 (i,j) = 0. _d 0
409 jmc 1.47 rhoKp1 (i,j) = 0. _d 0
410 jmc 1.1 ENDDO
411     ENDDO
412 jmc 1.69 #endif /* ALLOW_AUTODIFF_TAMC */
413 jmc 1.1
414     DO k=1,Nr
415     DO j=1-OLy,sNy+OLy
416     DO i=1-OLx,sNx+OLx
417 jmc 1.69 C This is currently used by GMRedi, IVDC, MXL-depth and Diagnostics
418 jmc 1.1 sigmaX(i,j,k) = 0. _d 0
419     sigmaY(i,j,k) = 0. _d 0
420     sigmaR(i,j,k) = 0. _d 0
421     #ifdef ALLOW_AUTODIFF_TAMC
422     cph all the following init. are necessary for TAF
423     cph although some of these are re-initialised later.
424 heimbach 1.109 rhoInSitu(i,j,k,bi,bj) = 0.
425 jmc 1.1 IVDConvCount(i,j,k,bi,bj) = 0.
426     # ifdef ALLOW_GMREDI
427     Kwx(i,j,k,bi,bj) = 0. _d 0
428     Kwy(i,j,k,bi,bj) = 0. _d 0
429     Kwz(i,j,k,bi,bj) = 0. _d 0
430     # ifdef GM_NON_UNITY_DIAGONAL
431     Kux(i,j,k,bi,bj) = 0. _d 0
432     Kvy(i,j,k,bi,bj) = 0. _d 0
433     # endif
434     # ifdef GM_EXTRA_DIAGONAL
435     Kuz(i,j,k,bi,bj) = 0. _d 0
436     Kvz(i,j,k,bi,bj) = 0. _d 0
437     # endif
438     # ifdef GM_BOLUS_ADVEC
439     GM_PsiX(i,j,k,bi,bj) = 0. _d 0
440     GM_PsiY(i,j,k,bi,bj) = 0. _d 0
441     # endif
442     # ifdef GM_VISBECK_VARIABLE_K
443     VisbeckK(i,j,bi,bj) = 0. _d 0
444     # endif
445     # endif /* ALLOW_GMREDI */
446 heimbach 1.42 # ifdef ALLOW_KPP
447     KPPdiffKzS(i,j,k,bi,bj) = 0. _d 0
448     KPPdiffKzT(i,j,k,bi,bj) = 0. _d 0
449     # endif /* ALLOW_KPP */
450 gforget 1.91 # ifdef ALLOW_GGL90
451     GGL90viscArU(i,j,k,bi,bj) = 0. _d 0
452     GGL90viscArV(i,j,k,bi,bj) = 0. _d 0
453     GGL90diffKr(i,j,k,bi,bj) = 0. _d 0
454     # endif /* ALLOW_GGL90 */
455 jmc 1.1 #endif /* ALLOW_AUTODIFF_TAMC */
456     ENDDO
457     ENDDO
458     ENDDO
459    
460     iMin = 1-OLx
461     iMax = sNx+OLx
462     jMin = 1-OLy
463     jMax = sNy+OLy
464    
465     #ifdef ALLOW_AUTODIFF_TAMC
466 jmc 1.96 CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
467 heimbach 1.77 CADJ & kind = isbyte
468 jmc 1.96 CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
469 heimbach 1.77 CADJ & kind = isbyte
470 heimbach 1.12 CADJ STORE totphihyd(:,:,:,bi,bj)
471 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
472 heimbach 1.77 CADJ & kind = isbyte
473 heimbach 1.10 # ifdef ALLOW_KPP
474 jmc 1.96 CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
475 heimbach 1.77 CADJ & kind = isbyte
476 jmc 1.96 CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
477 heimbach 1.77 CADJ & kind = isbyte
478 heimbach 1.10 # endif
479 jmc 1.1 #endif /* ALLOW_AUTODIFF_TAMC */
480    
481 jmc 1.71 C-- Always compute density (stored in common block) here; even when it is not
482     C needed here, will be used anyway in calc_phi_hyd (data flow easier this way)
483     #ifdef ALLOW_DEBUG
484 jmc 1.110 IF (debugMode) CALL DEBUG_CALL('FIND_RHO_2D (xNr)',myThid)
485 jmc 1.71 #endif
486     #ifdef ALLOW_AUTODIFF_TAMC
487 jmc 1.110 IF ( fluidIsWater ) THEN
488 jmc 1.71 #endif /* ALLOW_AUTODIFF_TAMC */
489 jmc 1.69 #ifdef ALLOW_DOWN_SLOPE
490 jmc 1.110 IF ( useDOWN_SLOPE ) THEN
491     DO k=1,Nr
492 jmc 1.69 CALL DWNSLP_CALC_RHO(
493     I theta, salt,
494 jmc 1.71 O rhoInSitu(1-OLx,1-OLy,k,bi,bj),
495 jmc 1.69 I k, bi, bj, myTime, myIter, myThid )
496 jmc 1.110 ENDDO
497     ENDIF
498 jmc 1.71 #endif /* ALLOW_DOWN_SLOPE */
499 dimitri 1.107 #ifdef ALLOW_BBL
500 jmc 1.110 IF ( useBBL ) THEN
501 dimitri 1.108 C pkg/bbl requires in-situ bbl density for depths equal to and deeper than the bbl.
502     C To reduce computation and storage requirement, these densities are stored in the
503     C dry grid boxes of rhoInSitu. See BBL_CALC_RHO for details.
504 jmc 1.110 DO k=Nr,1,-1
505 dimitri 1.107 CALL BBL_CALC_RHO(
506     I theta, salt,
507     O rhoInSitu,
508     I k, bi, bj, myTime, myIter, myThid )
509    
510 jmc 1.110 ENDDO
511     ENDIF
512 dimitri 1.107 #endif /* ALLOW_BBL */
513 jmc 1.110 IF ( .NOT. ( useDOWN_SLOPE .OR. useBBL ) ) THEN
514     DO k=1,Nr
515 jmc 1.71 CALL FIND_RHO_2D(
516     I iMin, iMax, jMin, jMax, k,
517     I theta(1-OLx,1-OLy,k,bi,bj),
518     I salt (1-OLx,1-OLy,k,bi,bj),
519     O rhoInSitu(1-OLx,1-OLy,k,bi,bj),
520     I k, bi, bj, myThid )
521 jmc 1.110 ENDDO
522     ENDIF
523 jmc 1.74 #ifdef ALLOW_AUTODIFF_TAMC
524 jmc 1.110 ELSE
525 jmc 1.74 C- fluid is not water:
526 jmc 1.110 DO k=1,Nr
527 jmc 1.74 DO j=1-OLy,sNy+OLy
528     DO i=1-OLx,sNx+OLx
529     rhoInSitu(i,j,k,bi,bj) = 0.
530     ENDDO
531     ENDDO
532 jmc 1.110 ENDDO
533     ENDIF
534     #endif /* ALLOW_AUTODIFF_TAMC */
535    
536     #ifdef ALLOW_DEBUG
537     IF (debugMode) CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)
538     #endif
539    
540     C-- Start of diagnostic loop
541     DO k=Nr,1,-1
542    
543     #ifdef ALLOW_AUTODIFF_TAMC
544     C? Patrick, is this formula correct now that we change the loop range?
545     C? Do we still need this?
546     cph kkey formula corrected.
547     cph Needed for rhoK, rhoKm1, in the case useGMREDI.
548     kkey = (itdkey-1)*Nr + k
549 jmc 1.74 #endif /* ALLOW_AUTODIFF_TAMC */
550 jmc 1.69
551 jmc 1.110 c#ifdef ALLOW_AUTODIFF_TAMC
552     cCADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
553     cCADJ & kind = isbyte
554     cCADJ STORE salt(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
555     cCADJ & kind = isbyte
556     c#endif /* ALLOW_AUTODIFF_TAMC */
557    
558 jmc 1.1 C-- Calculate gradients of potential density for isoneutral
559     C slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
560 jmc 1.17 IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
561 dimitri 1.61 & .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
562 jmc 1.1 IF (k.GT.1) THEN
563     #ifdef ALLOW_AUTODIFF_TAMC
564 jmc 1.96 CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
565 heimbach 1.77 CADJ & kind = isbyte
566 jmc 1.96 CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
567 heimbach 1.77 CADJ & kind = isbyte
568 jmc 1.96 CADJ STORE rhokm1 (bi,bj) = comlev1_bibj_k, key=kkey,
569 heimbach 1.77 CADJ & kind = isbyte
570 jmc 1.1 #endif /* ALLOW_AUTODIFF_TAMC */
571 jmc 1.68 CALL FIND_RHO_2D(
572     I iMin, iMax, jMin, jMax, k,
573     I theta(1-OLx,1-OLy,k-1,bi,bj),
574     I salt (1-OLx,1-OLy,k-1,bi,bj),
575     O rhoKm1,
576     I k-1, bi, bj, myThid )
577 jmc 1.1 ENDIF
578     #ifdef ALLOW_DEBUG
579 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('GRAD_SIGMA',myThid)
580 jmc 1.1 #endif
581 heimbach 1.31 cph Avoid variable aliasing for adjoint !!!
582     DO j=jMin,jMax
583     DO i=iMin,iMax
584 jmc 1.71 rhoKp1(i,j) = rhoInSitu(i,j,k,bi,bj)
585 heimbach 1.31 ENDDO
586     ENDDO
587 jmc 1.1 CALL GRAD_SIGMA(
588     I bi, bj, iMin, iMax, jMin, jMax, k,
589 jmc 1.71 I rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1,
590 jmc 1.1 O sigmaX, sigmaY, sigmaR,
591     I myThid )
592 gforget 1.66 #ifdef ALLOW_AUTODIFF_TAMC
593 jmc 1.69 #ifdef GMREDI_WITH_STABLE_ADJOINT
594 gforget 1.66 cgf zero out adjoint fields to stabilize pkg/gmredi adjoint
595     cgf -> cuts adjoint dependency from slope to state
596 jmc 1.69 CALL ZERO_ADJ_LOC( Nr, sigmaX, myThid)
597     CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid)
598     CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid)
599 gforget 1.66 #endif
600     #endif /* ALLOW_AUTODIFF_TAMC */
601 jmc 1.1 ENDIF
602    
603     C-- Implicit Vertical Diffusion for Convection
604     c ==> should use sigmaR !!!
605     IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
606     #ifdef ALLOW_DEBUG
607 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('CALC_IVDC',myThid)
608 jmc 1.1 #endif
609     CALL CALC_IVDC(
610     I bi, bj, iMin, iMax, jMin, jMax, k,
611 jmc 1.71 I rhoKm1, rhoInSitu(1-OLx,1-OLy,k,bi,bj),
612 jmc 1.1 I myTime, myIter, myThid)
613     ENDIF
614    
615 jmc 1.17 #ifdef ALLOW_DIAGNOSTICS
616 jmc 1.110 IF ( doDiagsRho.GE.4 ) THEN
617     CALL DIAGS_RHO_L( doDiagsRho, k, bi, bj,
618     I rhoInSitu(1-OLx,1-OLy,1,bi,bj),
619 jmc 1.74 I rhoKm1, wVel,
620 jmc 1.71 I myTime, myIter, myThid )
621 jmc 1.17 ENDIF
622     #endif
623    
624 jmc 1.1 C-- end of diagnostic k loop (Nr:1)
625     ENDDO
626    
627 heimbach 1.57 #ifdef ALLOW_AUTODIFF_TAMC
628 jmc 1.69 CADJ STORE IVDConvCount(:,:,:,bi,bj)
629 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
630 heimbach 1.77 CADJ & kind = isbyte
631 heimbach 1.57 #endif
632    
633 jmc 1.47 C-- Diagnose Mixed Layer Depth:
634 jmc 1.110 IF ( useGMRedi .OR. MOD(doDiagsRho,2).EQ.1 ) THEN
635 jmc 1.71 CALL CALC_OCE_MXLAYER(
636     I rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
637     I bi, bj, myTime, myIter, myThid )
638 jmc 1.47 ENDIF
639 heimbach 1.53
640 dimitri 1.52 #ifdef ALLOW_SALT_PLUME
641 dimitri 1.61 IF ( useSALT_PLUME ) THEN
642 jmc 1.71 CALL SALT_PLUME_CALC_DEPTH(
643     I rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
644     I bi, bj, myTime, myIter, myThid )
645 dimitri 1.60 ENDIF
646 dimitri 1.61 #endif /* ALLOW_SALT_PLUME */
647    
648 jmc 1.8 #ifdef ALLOW_DIAGNOSTICS
649 jmc 1.71 IF ( MOD(doDiagsRho,4).GE.2 ) THEN
650 jmc 1.16 CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR ', 0, Nr,
651     & 2, bi, bj, myThid)
652 jmc 1.8 ENDIF
653 dimitri 1.61 #endif /* ALLOW_DIAGNOSTICS */
654 jmc 1.8
655 jmc 1.1 C-- Determines forcing terms based on external fields
656     C relaxation terms, etc.
657     #ifdef ALLOW_DEBUG
658 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
659 jmc 1.1 #endif
660 heimbach 1.23 #ifdef ALLOW_AUTODIFF_TAMC
661     CADJ STORE EmPmR(:,:,bi,bj)
662 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
663 heimbach 1.77 CADJ & kind = isbyte
664 heimbach 1.26 # ifdef EXACT_CONSERV
665 heimbach 1.23 CADJ STORE PmEpR(:,:,bi,bj)
666 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
667 heimbach 1.77 CADJ & kind = isbyte
668 heimbach 1.26 # endif
669 heimbach 1.27 # ifdef NONLIN_FRSURF
670     CADJ STORE hFac_surfC(:,:,bi,bj)
671 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
672 heimbach 1.77 CADJ & kind = isbyte
673 heimbach 1.27 CADJ STORE recip_hFacC(:,:,:,bi,bj)
674 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
675 heimbach 1.77 CADJ & kind = isbyte
676 heimbach 1.97 # if (defined (ALLOW_PTRACERS))
677     CADJ STORE surfaceForcingS(:,:,bi,bj) = comlev1_bibj, key=itdkey,
678     CADJ & kind = isbyte
679     CADJ STORE surfaceForcingT(:,:,bi,bj) = comlev1_bibj, key=itdkey,
680     CADJ & kind = isbyte
681     # endif /* ALLOW_PTRACERS */
682     # endif /* NONLIN_FRSURF */
683 heimbach 1.23 #endif
684 jmc 1.36 CALL EXTERNAL_FORCING_SURF(
685 jmc 1.1 I bi, bj, iMin, iMax, jMin, jMax,
686     I myTime, myIter, myThid )
687 heimbach 1.27 #ifdef ALLOW_AUTODIFF_TAMC
688     # ifdef EXACT_CONSERV
689     cph-test
690     cphCADJ STORE PmEpR(:,:,bi,bj)
691 jmc 1.96 cphCADJ & = comlev1_bibj, key=itdkey,
692 heimbach 1.77 cphCADJ & kind = isbyte
693 heimbach 1.27 # endif
694     #endif
695 jmc 1.1
696     #ifdef ALLOW_AUTODIFF_TAMC
697     cph needed for KPP
698 jmc 1.4 CADJ STORE surfaceForcingU(:,:,bi,bj)
699 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
700 heimbach 1.77 CADJ & kind = isbyte
701 jmc 1.4 CADJ STORE surfaceForcingV(:,:,bi,bj)
702 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
703 heimbach 1.77 CADJ & kind = isbyte
704 jmc 1.4 CADJ STORE surfaceForcingS(:,:,bi,bj)
705 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
706 heimbach 1.77 CADJ & kind = isbyte
707 jmc 1.4 CADJ STORE surfaceForcingT(:,:,bi,bj)
708 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
709 heimbach 1.77 CADJ & kind = isbyte
710 jmc 1.4 CADJ STORE surfaceForcingTice(:,:,bi,bj)
711 jmc 1.96 CADJ & = comlev1_bibj, key=itdkey,
712 heimbach 1.77 CADJ & kind = isbyte
713 jmc 1.1 #endif /* ALLOW_AUTODIFF_TAMC */
714    
715     #ifdef ALLOW_KPP
716     C-- Compute KPP mixing coefficients
717     IF (useKPP) THEN
718     #ifdef ALLOW_DEBUG
719 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('KPP_CALC',myThid)
720 jmc 1.1 #endif
721 dfer 1.76 CALL TIMER_START('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
722 jmc 1.1 CALL KPP_CALC(
723 jmc 1.44 I bi, bj, myTime, myIter, myThid )
724 dfer 1.76 CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
725 jmc 1.1 #ifdef ALLOW_AUTODIFF_TAMC
726     ELSE
727     CALL KPP_CALC_DUMMY(
728 jmc 1.44 I bi, bj, myTime, myIter, myThid )
729 jmc 1.1 #endif /* ALLOW_AUTODIFF_TAMC */
730     ENDIF
731    
732     #endif /* ALLOW_KPP */
733    
734 mlosch 1.6 #ifdef ALLOW_PP81
735     C-- Compute PP81 mixing coefficients
736     IF (usePP81) THEN
737     #ifdef ALLOW_DEBUG
738 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('PP81_CALC',myThid)
739 mlosch 1.6 #endif
740     CALL PP81_CALC(
741     I bi, bj, myTime, myThid )
742     ENDIF
743     #endif /* ALLOW_PP81 */
744    
745     #ifdef ALLOW_MY82
746     C-- Compute MY82 mixing coefficients
747     IF (useMY82) THEN
748     #ifdef ALLOW_DEBUG
749 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('MY82_CALC',myThid)
750 mlosch 1.6 #endif
751     CALL MY82_CALC(
752     I bi, bj, myTime, myThid )
753     ENDIF
754     #endif /* ALLOW_MY82 */
755    
756 mlosch 1.9 #ifdef ALLOW_GGL90
757 gforget 1.91 #ifdef ALLOW_AUTODIFF_TAMC
758     CADJ STORE GGL90TKE (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
759     CADJ & kind = isbyte
760     #endif /* ALLOW_AUTODIFF_TAMC */
761 mlosch 1.9 C-- Compute GGL90 mixing coefficients
762     IF (useGGL90) THEN
763     #ifdef ALLOW_DEBUG
764 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('GGL90_CALC',myThid)
765 mlosch 1.9 #endif
766 dfer 1.76 CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
767 mlosch 1.9 CALL GGL90_CALC(
768 jmc 1.90 I bi, bj, myTime, myIter, myThid )
769 dfer 1.76 CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
770 mlosch 1.9 ENDIF
771     #endif /* ALLOW_GGL90 */
772    
773 jmc 1.20 #ifdef ALLOW_TIMEAVE
774 jmc 1.36 IF ( taveFreq.GT. 0. _d 0 ) THEN
775 jmc 1.20 CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
776     ENDIF
777     IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
778     CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,
779     I Nr, deltaTclock, bi, bj, myThid)
780     ENDIF
781     #endif /* ALLOW_TIMEAVE */
782    
783 jmc 1.69 #ifdef ALLOW_GMREDI
784 jmc 1.47 #ifdef ALLOW_AUTODIFF_TAMC
785     # ifndef GM_EXCLUDE_CLIPPING
786     cph storing here is needed only for one GMREDI_OPTIONS:
787     cph define GM_BOLUS_ADVEC
788     cph keep it although TAF says you dont need to.
789 jmc 1.86 cph but I have avoided the #ifdef for now, in case more things change
790 jmc 1.96 CADJ STORE sigmaX(:,:,:) = comlev1_bibj, key=itdkey,
791 heimbach 1.77 CADJ & kind = isbyte
792 jmc 1.96 CADJ STORE sigmaY(:,:,:) = comlev1_bibj, key=itdkey,
793 heimbach 1.77 CADJ & kind = isbyte
794 jmc 1.96 CADJ STORE sigmaR(:,:,:) = comlev1_bibj, key=itdkey,
795 heimbach 1.77 CADJ & kind = isbyte
796 jmc 1.47 # endif
797     #endif /* ALLOW_AUTODIFF_TAMC */
798    
799     C-- Calculate iso-neutral slopes for the GM/Redi parameterisation
800     IF (useGMRedi) THEN
801     #ifdef ALLOW_DEBUG
802 jmc 1.96 IF (debugMode) CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
803 jmc 1.47 #endif
804     CALL GMREDI_CALC_TENSOR(
805 jmc 1.51 I iMin, iMax, jMin, jMax,
806 jmc 1.47 I sigmaX, sigmaY, sigmaR,
807 jmc 1.51 I bi, bj, myTime, myIter, myThid )
808 jmc 1.47 #ifdef ALLOW_AUTODIFF_TAMC
809     ELSE
810     CALL GMREDI_CALC_TENSOR_DUMMY(
811 jmc 1.51 I iMin, iMax, jMin, jMax,
812 jmc 1.47 I sigmaX, sigmaY, sigmaR,
813 jmc 1.51 I bi, bj, myTime, myIter, myThid )
814 jmc 1.47 #endif /* ALLOW_AUTODIFF_TAMC */
815     ENDIF
816 jmc 1.69 #endif /* ALLOW_GMREDI */
817    
818     #ifdef ALLOW_DOWN_SLOPE
819     IF ( useDOWN_SLOPE ) THEN
820     C-- Calculate Downsloping Flow for Down_Slope parameterization
821     IF ( usingPCoords ) THEN
822     CALL DWNSLP_CALC_FLOW(
823 jmc 1.71 I bi, bj, kSurfC, rhoInSitu,
824 jmc 1.69 I myTime, myIter, myThid )
825     ELSE
826     CALL DWNSLP_CALC_FLOW(
827 jmc 1.71 I bi, bj, kLowC, rhoInSitu,
828 jmc 1.69 I myTime, myIter, myThid )
829     ENDIF
830     ENDIF
831     #endif /* ALLOW_DOWN_SLOPE */
832 jmc 1.47
833 jmc 1.106 C-- end bi,bj loops.
834     ENDDO
835     ENDDO
836    
837 jmc 1.98 #ifndef ALLOW_AUTODIFF_TAMC
838     C--- if fluid Is Water: end
839 jmc 1.106 ENDIF
840 jmc 1.98 #endif
841    
842 dimitri 1.107 #ifdef ALLOW_BBL
843     IF ( useBBL ) THEN
844     CALL BBL_CALC_RHS(
845     I myTime, myIter, myThid )
846     ENDIF
847     #endif /* ALLOW_BBL */
848    
849 dimitri 1.94 #ifdef ALLOW_MYPACKAGE
850 jmc 1.106 IF ( useMYPACKAGE ) THEN
851     CALL MYPACKAGE_CALC_RHS(
852     I myTime, myIter, myThid )
853     ENDIF
854 dimitri 1.94 #endif /* ALLOW_MYPACKAGE */
855    
856 jmc 1.99 #ifdef ALLOW_GMREDI
857     IF ( useGMRedi ) THEN
858     CALL GMREDI_DO_EXCH( myTime, myIter, myThid )
859     ENDIF
860     #endif /* ALLOW_GMREDI */
861    
862 jmc 1.98 #ifdef ALLOW_KPP
863 jmc 1.45 IF (useKPP) THEN
864     CALL KPP_DO_EXCH( myThid )
865     ENDIF
866 jmc 1.98 #endif /* ALLOW_KPP */
867 jmc 1.45
868 jmc 1.18 #ifdef ALLOW_DIAGNOSTICS
869     IF ( fluidIsWater .AND. useDiagnostics ) THEN
870 jmc 1.74 CALL DIAGS_RHO_G(
871 jmc 1.110 I rhoInSitu, uVel, vVel, wVel,
872 jmc 1.71 I myTime, myIter, myThid )
873 jmc 1.18 CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
874     ENDIF
875 jmc 1.19 IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
876 jmc 1.71 CALL DIAGNOSTICS_FILL( IVDConvCount, 'CONVADJ ',
877     & 0, Nr, 0, 1, 1, myThid )
878 jmc 1.19 ENDIF
879 jmc 1.18 #endif
880    
881 jmc 1.1 #ifdef ALLOW_DEBUG
882 jmc 1.96 IF (debugMode) CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)
883 jmc 1.1 #endif
884    
885     RETURN
886     END

  ViewVC Help
Powered by ViewVC 1.1.22