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

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

  ViewVC Help
Powered by ViewVC 1.1.22