/[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.122 - (hide annotations) (download)
Tue Jan 22 06:09:02 2013 UTC (11 years, 3 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64e, checkpoint64d
Changes since 1.121: +27 -1 lines
update previous modif by adding few store dir for TAF

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

  ViewVC Help
Powered by ViewVC 1.1.22