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

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

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

revision 1.28 by jmc, Thu Mar 30 02:33:05 2006 UTC revision 1.99 by jmc, Thu Jan 27 20:34:53 2011 UTC
# Line 11  C $Name$ Line 11  C $Name$
11  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
12  #  include "KPP_OPTIONS.h"  #  include "KPP_OPTIONS.h"
13  # endif  # endif
14    # ifdef ALLOW_SEAICE
15    #  include "SEAICE_OPTIONS.h"
16    # endif
17  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
18    
19  CBOP  CBOP
# Line 33  C     == Global variables === Line 36  C     == Global variables ===
36  #include "SIZE.h"  #include "SIZE.h"
37  #include "EEPARAMS.h"  #include "EEPARAMS.h"
38  #include "PARAMS.h"  #include "PARAMS.h"
 #include "DYNVARS.h"  
39  #include "GRID.h"  #include "GRID.h"
40    #include "DYNVARS.h"
41  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
42  #include "TIMEAVE_STATV.h"  #include "TIMEAVE_STATV.h"
43  #endif  #endif
# Line 43  C     == Global variables === Line 46  C     == Global variables ===
46  #endif  #endif
47    
48  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
49    # include "AUTODIFF_MYFIELDS.h"
50  # include "tamc.h"  # include "tamc.h"
51  # include "tamc_keys.h"  # include "tamc_keys.h"
52  # include "FFIELDS.h"  # include "FFIELDS.h"
53    # include "SURFACE.h"
54  # include "EOS.h"  # include "EOS.h"
55  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
56  #  include "KPP.h"  #  include "KPP.h"
57  # endif  # endif
58    # ifdef ALLOW_GGL90
59    #  include "GGL90.h"
60    # endif
61  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
62  #  include "GMREDI.h"  #  include "GMREDI.h"
63  # endif  # endif
64  # ifdef ALLOW_EBM  # ifdef ALLOW_EBM
65  #  include "EBM.h"  #  include "EBM.h"
66  # endif  # endif
67  # ifdef EXACT_CONSERV  # ifdef ALLOW_EXF
68  #  include "SURFACE.h"  #  include "ctrl.h"
69    #  include "EXF_FIELDS.h"
70    #  ifdef ALLOW_BULKFORMULAE
71    #   include "EXF_CONSTANTS.h"
72    #  endif
73    # endif
74    # ifdef ALLOW_SEAICE
75    #  include "SEAICE.h"
76    # endif
77    # ifdef ALLOW_SALT_PLUME
78    #  include "SALT_PLUME.h"
79  # endif  # endif
80  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
81    
# Line 72  C     myThid :: Thread number for this i Line 90  C     myThid :: Thread number for this i
90    
91  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
92  C     == Local variables  C     == Local variables
93  C     rhoK, rhoKM1  :: Density at current level, and level above  C     rhoK, rhoKm1  :: Density at current level, and level above
94  C     iMin, iMax    :: Ranges and sub-block indices on which calculations  C     iMin, iMax    :: Ranges and sub-block indices on which calculations
95  C     jMin, jMax       are applied.  C     jMin, jMax       are applied.
96  C     bi, bj        :: tile indices  C     bi, bj        :: tile indices
97  C     i,j,k         :: loop indices  C     i,j,k         :: loop indices
98        _RL rhokm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
99        _RL rhok    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
100        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
101        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
102        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
# Line 100  C--   dummy statement to end declaration Line 118  C--   dummy statement to end declaration
118  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
119    
120  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
121        IF ( debugLevel .GE. debLevB )        IF (debugMode) CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)
      &    CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)  
122  #endif  #endif
123    
124        doDiagsRho = 0        doDiagsRho = 0
125  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
126        IF ( useDiagnostics .AND. fluidIsWater ) THEN        IF ( useDiagnostics .AND. fluidIsWater ) THEN
127          IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) ) doDiagsRho = 1          IF ( DIAGNOSTICS_IS_ON('WRHOMASS',myThid) )
128          IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.       &       doDiagsRho = doDiagsRho + 1
129       &       DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) )
130       &       DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.       &       doDiagsRho = doDiagsRho + 2
131       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) )
132       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) ) doDiagsRho = 2       &       doDiagsRho = doDiagsRho + 4
133        ENDIF        ENDIF
134  #endif /* ALLOW_DIAGNOSTICS */  #endif /* ALLOW_DIAGNOSTICS */
135    
136  #ifdef ALLOW_THSICE  #ifdef  ALLOW_OBCS
137          IF (useOBCS) THEN
138    C--   Calculate future values on open boundaries
139    C--   moved before SEAICE_MODEL call since SEAICE_MODEL needs seaice-obcs fields
140    #ifdef ALLOW_DEBUG
141           IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid)
142    #endif
143           CALL OBCS_CALC( myTime+deltaTclock, myIter+1,
144         I                 uVel, vVel, wVel, theta, salt, myThid )
145          ENDIF
146    #endif  /* ALLOW_OBCS */
147    
148    #ifdef ALLOW_ADDFLUID
149          IF ( fluidIsWater ) THEN
150            DO bj=myByLo(myThid),myByHi(myThid)
151             DO bi=myBxLo(myThid),myBxHi(myThid)
152              DO k=1,Nr
153               DO j=1-OLy,sNy+OLy
154                DO i=1-OLx,sNx+OLx
155                 addMass(i,j,k,bi,bj) =  0. _d 0
156                ENDDO
157               ENDDO
158              ENDDO
159             ENDDO
160            ENDDO
161          ENDIF
162    #endif /* ALLOW_ADDFLUID */
163    
164    #ifdef ALLOW_AUTODIFF_TAMC
165    # ifdef ALLOW_SALT_PLUME
166          DO bj=myByLo(myThid),myByHi(myThid)
167           DO bi=myBxLo(myThid),myBxHi(myThid)
168            DO j=1-OLy,sNy+OLy
169             DO i=1-OLx,sNx+OLx
170              saltPlumeDepth(i,j,bi,bj) = 0. _d 0
171              saltPlumeFlux(i,j,bi,bj)  = 0. _d 0
172             ENDDO
173            ENDDO
174           ENDDO
175          ENDDO
176    # endif
177    #endif /* ALLOW_AUTODIFF_TAMC */
178    
179    #ifdef ALLOW_SEAICE
180          IF ( useSEAICE ) THEN
181    # ifdef ALLOW_AUTODIFF_TAMC
182    cph-adj-test(
183    CADJ STORE area   = comlev1, key=ikey_dynamics, kind=isbyte
184    CADJ STORE hsnow  = comlev1, key=ikey_dynamics, kind=isbyte
185    CADJ STORE heff   = comlev1, key=ikey_dynamics, kind=isbyte
186    CADJ STORE empmr,qsw,theta   = comlev1, key = ikey_dynamics,
187    CADJ &     kind = isbyte
188    cph-adj-test)
189    CADJ STORE atemp,aqh,precip    = comlev1, key = ikey_dynamics,
190    CADJ &     kind = isbyte
191    CADJ STORE swdown,lwdown       = comlev1, key = ikey_dynamics,
192    CADJ &     kind = isbyte
193    cph# ifdef EXF_READ_EVAP
194    CADJ STORE evap                = comlev1, key = ikey_dynamics,
195    CADJ &     kind = isbyte
196    cph# endif
197    CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics,
198    CADJ &     kind = isbyte
199    #  ifdef SEAICE_CGRID
200    CADJ STORE stressdivergencex   = comlev1, key = ikey_dynamics,
201    CADJ &     kind = isbyte
202    CADJ STORE stressdivergencey   = comlev1, key = ikey_dynamics,
203    CADJ &     kind = isbyte
204    #  endif
205    #  ifdef SEAICE_ALLOW_DYNAMICS
206    CADJ STORE uice                = comlev1, key = ikey_dynamics,
207    CADJ &     kind = isbyte
208    CADJ STORE vice                = comlev1, key = ikey_dynamics,
209    CADJ &     kind = isbyte
210    #   ifdef SEAICE_ALLOW_EVP
211    CADJ STORE seaice_sigma1       = comlev1, key = ikey_dynamics,
212    CADJ &     kind = isbyte
213    CADJ STORE seaice_sigma2       = comlev1, key = ikey_dynamics,
214    CADJ &     kind = isbyte
215    CADJ STORE seaice_sigma12      = comlev1, key = ikey_dynamics,
216    CADJ &     kind = isbyte
217    #   endif
218    #  endif
219    #  ifdef SEAICE_SALINITY
220    CADJ STORE salt                = comlev1, key = ikey_dynamics,
221    CADJ &     kind = isbyte
222    #  endif
223    #  ifdef ATMOSPHERIC_LOADING
224    CADJ STORE pload               = comlev1, key = ikey_dynamics,
225    CADJ &     kind = isbyte
226    CADJ STORE siceload            = comlev1, key = ikey_dynamics,
227    CADJ &     kind = isbyte
228    #  endif
229    #  ifdef NONLIN_FRSURF
230    CADJ STORE recip_hfacc         = comlev1, key = ikey_dynamics,
231    CADJ &     kind = isbyte
232    #  endif
233    #  ifdef ANNUAL_BALANCE
234    CADJ STORE balance_itcount     = comlev1, key = ikey_dynamics,
235    CADJ &     kind = isbyte
236    #  endif /* ANNUAL_BALANCE */
237    # endif
238    # ifdef ALLOW_DEBUG
239            IF (debugMode) CALL DEBUG_CALL('SEAICE_MODEL',myThid)
240    # endif
241            CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
242            CALL SEAICE_MODEL( myTime, myIter, myThid )
243            CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
244    # ifdef ALLOW_COST
245            CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
246    # endif
247          ENDIF
248    #endif /* ALLOW_SEAICE */
249    
250    #ifdef ALLOW_AUTODIFF_TAMC
251    CADJ STORE sst, sss           = comlev1, key = ikey_dynamics,
252    CADJ &     kind = isbyte
253    CADJ STORE qsw                = comlev1, key = ikey_dynamics,
254    CADJ &     kind = isbyte
255    # ifdef ALLOW_SEAICE
256    CADJ STORE area               = comlev1, key = ikey_dynamics,
257    CADJ &     kind = isbyte
258    # endif
259    #endif
260    
261    #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
262        IF ( useThSIce .AND. fluidIsWater ) THEN        IF ( useThSIce .AND. fluidIsWater ) THEN
263  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
264          IF ( debugLevel .GE. debLevB )          IF (debugMode) CALL DEBUG_CALL('THSICE_MAIN',myThid)
      &    CALL DEBUG_CALL('THSICE_MAIN',myThid)  
265  #endif  #endif
266  C--     Step forward Therm.Sea-Ice variables  C--     Step forward Therm.Sea-Ice variables
267  C       and modify forcing terms including effects from ice  C       and modify forcing terms including effects from ice
# Line 131  C       and modify forcing terms includi Line 272  C       and modify forcing terms includi
272  #endif /* ALLOW_THSICE */  #endif /* ALLOW_THSICE */
273    
274  #ifdef ALLOW_SHELFICE  #ifdef ALLOW_SHELFICE
275    # ifdef ALLOW_AUTODIFF_TAMC
276    CADJ STORE salt, theta = comlev1, key = ikey_dynamics,
277    CADJ &     kind = isbyte
278    # endif
279        IF ( useShelfIce .AND. fluidIsWater ) THEN        IF ( useShelfIce .AND. fluidIsWater ) THEN
280  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
281          IF ( debugLevel .GE. debLevB )         IF (debugMode) CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
      &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)  
282  #endif  #endif
283  C     compute temperature and (virtual) salt flux at the  C     compute temperature and (virtual) salt flux at the
284  C     shelf-ice ocean interface  C     shelf-ice ocean interface
285         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
286       &       myThid)       &       myThid)
# Line 146  C     shelf-ice ocean interface Line 290  C     shelf-ice ocean interface
290        ENDIF        ENDIF
291  #endif /* ALLOW_SHELFICE */  #endif /* ALLOW_SHELFICE */
292    
293    #ifdef ALLOW_ICEFRONT
294          IF ( useICEFRONT .AND. fluidIsWater ) THEN
295    #ifdef ALLOW_DEBUG
296           IF (debugMode) CALL DEBUG_CALL('ICEFRONT_THERMODYNAMICS',myThid)
297    #endif
298    C     compute temperature and (virtual) salt flux at the
299    C     ice-front ocean interface
300           CALL TIMER_START('ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
301         &       myThid)
302           CALL ICEFRONT_THERMODYNAMICS( myTime, myIter, myThid )
303           CALL TIMER_STOP( 'ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
304         &      myThid)
305          ENDIF
306    #endif /* ALLOW_ICEFRONT */
307    
308  C--   Freeze water at the surface  C--   Freeze water at the surface
309  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
310  CADJ STORE theta = comlev1, key = ikey_dynamics  CADJ STORE theta = comlev1, key = ikey_dynamics,
311    CADJ &     kind = isbyte
312  #endif  #endif
313        IF ( allowFreezing        IF ( allowFreezing ) THEN
      &                   .AND. .NOT. useSEAICE  
      &                   .AND. .NOT. useThSIce ) THEN  
314          CALL FREEZE_SURFACE(  myTime, myIter, myThid )          CALL FREEZE_SURFACE(  myTime, myIter, myThid )
315        ENDIF        ENDIF
316    
317  #ifdef ALLOW_OCN_COMPON_INTERF  #ifdef ALLOW_OCN_COMPON_INTERF
318  C--    Apply imported data (from coupled interface) to forcing fields  C--    Apply imported data (from coupled interface) to forcing fields
319  C jmc: do not know precisely where to put this call (bf or af thSIce ?)  C jmc: do not know precisely where to put this call (bf or af thSIce ?)
320         IF ( useCoupler ) THEN        IF ( useCoupler ) THEN
321           CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )           CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
322         ENDIF        ENDIF
323  #endif /* ALLOW_OCN_COMPON_INTERF */  #endif /* ALLOW_OCN_COMPON_INTERF */
324    
325  #ifdef ALLOW_BALANCE_FLUXES  #ifdef ALLOW_BALANCE_FLUXES
326  C     balance fluxes  C     balance fluxes
327         IF ( balanceEmPmR )        IF ( balanceEmPmR )
328       &        CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,       &      CALL REMOVE_MEAN_RS( 1, EmPmR, maskInC, maskInC, rA, drF,
329       &        'EmPmR', myTime, myThid )       &        'EmPmR', myTime, myThid )
330         IF ( balanceQnet )        IF ( balanceQnet )
331       &        CALL REMOVE_MEAN_RS( 1, Qnet,  maskH, maskH, rA, drF,       &      CALL REMOVE_MEAN_RS( 1, Qnet,  maskInC, maskInC, rA, drF,
332       &        'Qnet ', myTime, myThid )       &        'Qnet ', myTime, myThid )
333  #endif /* ALLOW_BALANCE_FLUXES */  #endif /* ALLOW_BALANCE_FLUXES */
334    
# Line 196  CHPF$ INDEPENDENT Line 354  CHPF$ INDEPENDENT
354            itdkey = (act1 + 1) + act2*max1            itdkey = (act1 + 1) + act2*max1
355       &                      + act3*max1*max2       &                      + act3*max1*max2
356       &                      + act4*max1*max2*max3       &                      + act4*max1*max2*max3
357    #else  /* ALLOW_AUTODIFF_TAMC */
358    C     if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
359    C     and all vertical mixing schemes, but keep OBCS_CALC
360            IF ( fluidIsWater ) THEN
361  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
362    
363  C--   Set up work arrays with valid (i.e. not NaN) values  C--   Set up work arrays with valid (i.e. not NaN) values
# Line 204  C     just ensure that all memory refere Line 366  C     just ensure that all memory refere
366  C     point numbers. This prevents spurious hardware signals due to  C     point numbers. This prevents spurious hardware signals due to
367  C     uninitialised but inert locations.  C     uninitialised but inert locations.
368    
369    #ifdef ALLOW_AUTODIFF_TAMC
370          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
371           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
372            rhok   (i,j)   = 0. _d 0            rhoKm1 (i,j)   = 0. _d 0
373            rhoKM1 (i,j)   = 0. _d 0            rhoKp1 (i,j)   = 0. _d 0
374           ENDDO           ENDDO
375          ENDDO          ENDDO
376    #endif /* ALLOW_AUTODIFF_TAMC */
377    
378          DO k=1,Nr          DO k=1,Nr
379           DO j=1-OLy,sNy+OLy           DO j=1-OLy,sNy+OLy
380            DO i=1-OLx,sNx+OLx            DO i=1-OLx,sNx+OLx
381  C This is currently also used by IVDC and Diagnostics  C This is currently used by GMRedi, IVDC, MXL-depth  and Diagnostics
382             sigmaX(i,j,k) = 0. _d 0             sigmaX(i,j,k) = 0. _d 0
383             sigmaY(i,j,k) = 0. _d 0             sigmaY(i,j,k) = 0. _d 0
384             sigmaR(i,j,k) = 0. _d 0             sigmaR(i,j,k) = 0. _d 0
385  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
386  cph all the following init. are necessary for TAF  cph all the following init. are necessary for TAF
387  cph although some of these are re-initialised later.  cph although some of these are re-initialised later.
388    c          rhoInSitu(i,j,k,bi,bj) = 0.
389             IVDConvCount(i,j,k,bi,bj) = 0.             IVDConvCount(i,j,k,bi,bj) = 0.
390  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
391             Kwx(i,j,k,bi,bj)  = 0. _d 0             Kwx(i,j,k,bi,bj)  = 0. _d 0
# Line 242  cph although some of these are re-initia Line 407  cph although some of these are re-initia
407             VisbeckK(i,j,bi,bj)   = 0. _d 0             VisbeckK(i,j,bi,bj)   = 0. _d 0
408  #  endif  #  endif
409  # endif /* ALLOW_GMREDI */  # endif /* ALLOW_GMREDI */
410    # ifdef ALLOW_KPP
411               KPPdiffKzS(i,j,k,bi,bj)  = 0. _d 0
412               KPPdiffKzT(i,j,k,bi,bj)  = 0. _d 0
413    # endif /* ALLOW_KPP */
414    # ifdef ALLOW_GGL90
415               GGL90viscArU(i,j,k,bi,bj)  = 0. _d 0
416               GGL90viscArV(i,j,k,bi,bj)  = 0. _d 0
417               GGL90diffKr(i,j,k,bi,bj)  = 0. _d 0
418    # endif /* ALLOW_GGL90 */
419  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
420            ENDDO            ENDDO
421           ENDDO           ENDDO
# Line 253  cph although some of these are re-initia Line 427  cph although some of these are re-initia
427          jMax = sNy+OLy          jMax = sNy+OLy
428    
429  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
430  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
431  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
432    CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
433    CADJ &     kind = isbyte
434  CADJ STORE totphihyd(:,:,:,bi,bj)  CADJ STORE totphihyd(:,:,:,bi,bj)
435  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
436    CADJ &     kind = isbyte
437  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
438  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
439  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
440    CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
441    CADJ &     kind = isbyte
442  # endif  # endif
443  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
444    
445  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
446          IF ( debugLevel .GE. debLevB )          IF (debugMode) CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)
      &    CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)  
447  #endif  #endif
448    
449  C--     Start of diagnostic loop  C--     Start of diagnostic loop
# Line 274  C--     Start of diagnostic loop Line 452  C--     Start of diagnostic loop
452  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
453  C? Patrick, is this formula correct now that we change the loop range?  C? Patrick, is this formula correct now that we change the loop range?
454  C? Do we still need this?  C? Do we still need this?
455  cph kkey formula corrected.  cph kkey formula corrected.
456  cph Needed for rhok, rhokm1, in the case useGMREDI.  cph Needed for rhoK, rhoKm1, in the case useGMREDI.
457           kkey = (itdkey-1)*Nr + k            kkey = (itdkey-1)*Nr + k
458    #endif /* ALLOW_AUTODIFF_TAMC */
459    
460    C--   Always compute density (stored in common block) here; even when it is not
461    C     needed here, will be used anyway in calc_phi_hyd (data flow easier this way)
462    #ifdef ALLOW_DEBUG
463              IF (debugMode) CALL DEBUG_CALL('FIND_RHO_2D',myThid)
464    #endif
465    #ifdef ALLOW_AUTODIFF_TAMC
466              IF ( fluidIsWater ) THEN
467    CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
468    CADJ &     kind = isbyte
469    CADJ STORE salt(:,:,k,bi,bj)  = comlev1_bibj_k, key=kkey,
470    CADJ &     kind = isbyte
471    #endif /* ALLOW_AUTODIFF_TAMC */
472    #ifdef ALLOW_DOWN_SLOPE
473              IF ( useDOWN_SLOPE ) THEN
474                CALL DWNSLP_CALC_RHO(
475         I                  theta, salt,
476         O                  rhoInSitu(1-OLx,1-OLy,k,bi,bj),
477         I                  k, bi, bj, myTime, myIter, myThid )
478              ELSE
479    #endif /* ALLOW_DOWN_SLOPE */
480                CALL FIND_RHO_2D(
481         I                iMin, iMax, jMin, jMax, k,
482         I                theta(1-OLx,1-OLy,k,bi,bj),
483         I                salt (1-OLx,1-OLy,k,bi,bj),
484         O                rhoInSitu(1-OLx,1-OLy,k,bi,bj),
485         I                k, bi, bj, myThid )
486    #ifdef ALLOW_DOWN_SLOPE
487              ENDIF
488    #endif /* ALLOW_DOWN_SLOPE */
489    #ifdef ALLOW_AUTODIFF_TAMC
490              ELSE
491    C-        fluid is not water:
492               DO j=1-OLy,sNy+OLy
493                DO i=1-OLx,sNx+OLx
494                  rhoInSitu(i,j,k,bi,bj) = 0.
495                ENDDO
496               ENDDO
497              ENDIF
498  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
499    
500  C--       Calculate gradients of potential density for isoneutral  C--       Calculate gradients of potential density for isoneutral
501  C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)  C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
 c         IF ( k.GT.1 .AND. (useGMRedi.OR.ivdc_kappa.NE.0.) ) THEN  
502            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
503       &                   .OR. doDiagsRho.GE.1 ) THEN       &         .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
 #ifdef ALLOW_DEBUG  
             IF ( debugLevel .GE. debLevB )  
      &       CALL DEBUG_CALL('FIND_RHO',myThid)  
 #endif  
 #ifdef ALLOW_AUTODIFF_TAMC  
 CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  
 CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  
 #endif /* ALLOW_AUTODIFF_TAMC */  
             CALL FIND_RHO(  
      I        bi, bj, iMin, iMax, jMin, jMax, k, k,  
      I        theta, salt,  
      O        rhoK,  
      I        myThid )  
   
504              IF (k.GT.1) THEN              IF (k.GT.1) THEN
505  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
506  CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
507  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ &     kind = isbyte
508  #endif /* ALLOW_AUTODIFF_TAMC */  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
509               CALL FIND_RHO(  CADJ &     kind = isbyte
510       I        bi, bj, iMin, iMax, jMin, jMax, k-1, k,  CADJ STORE rhokm1 (bi,bj)       = comlev1_bibj_k, key=kkey,
511       I        theta, salt,  CADJ &     kind = isbyte
512       O        rhoKm1,  #endif /* ALLOW_AUTODIFF_TAMC */
513       I        myThid )               CALL FIND_RHO_2D(
514         I                 iMin, iMax, jMin, jMax, k,
515         I                 theta(1-OLx,1-OLy,k-1,bi,bj),
516         I                 salt (1-OLx,1-OLy,k-1,bi,bj),
517         O                 rhoKm1,
518         I                 k-1, bi, bj, myThid )
519              ENDIF              ENDIF
520  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
521              IF ( debugLevel .GE. debLevB )              IF (debugMode) CALL DEBUG_CALL('GRAD_SIGMA',myThid)
      &       CALL DEBUG_CALL('GRAD_SIGMA',myThid)  
522  #endif  #endif
523    cph Avoid variable aliasing for adjoint !!!
524                DO j=jMin,jMax
525                 DO i=iMin,iMax
526                  rhoKp1(i,j) = rhoInSitu(i,j,k,bi,bj)
527                 ENDDO
528                ENDDO
529              CALL GRAD_SIGMA(              CALL GRAD_SIGMA(
530       I             bi, bj, iMin, iMax, jMin, jMax, k,       I             bi, bj, iMin, iMax, jMin, jMax, k,
531       I             rhoK, rhoKm1, rhoK,       I             rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1,
532       O             sigmaX, sigmaY, sigmaR,       O             sigmaX, sigmaY, sigmaR,
533       I             myThid )       I             myThid )
           ENDIF  
   
534  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
535  ctest# ifndef GM_EXCLUDE_CLIPPING  #ifdef GMREDI_WITH_STABLE_ADJOINT
536  CADJ STORE rhok   (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  cgf zero out adjoint fields to stabilize pkg/gmredi adjoint
537  ctest# endif  cgf -> cuts adjoint dependency from slope to state
538  CADJ STORE rhokm1 (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte              CALL ZERO_ADJ_LOC( Nr, sigmaX, myThid)
539                CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid)
540                CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid)
541    #endif
542  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
543              ENDIF
544    
545  C--       Implicit Vertical Diffusion for Convection  C--       Implicit Vertical Diffusion for Convection
546  c ==> should use sigmaR !!!  c ==> should use sigmaR !!!
547            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
548  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
549              IF ( debugLevel .GE. debLevB )              IF (debugMode) CALL DEBUG_CALL('CALC_IVDC',myThid)
      &       CALL DEBUG_CALL('CALC_IVDC',myThid)  
550  #endif  #endif
551              CALL CALC_IVDC(              CALL CALC_IVDC(
552       I        bi, bj, iMin, iMax, jMin, jMax, k,       I        bi, bj, iMin, iMax, jMin, jMax, k,
553       I        rhoKm1, rhoK,       I        rhoKm1, rhoInSitu(1-OLx,1-OLy,k,bi,bj),
554       I        myTime, myIter, myThid)       I        myTime, myIter, myThid)
555            ENDIF            ENDIF
556    
557  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
558            IF ( doDiagsRho.GE.2 ) THEN            IF ( MOD(doDiagsRho,2).EQ.1 ) THEN
559              CALL DIAGS_RHO( k, bi, bj,              CALL DIAGS_RHO_L( k, bi, bj,
560       I                      rhoK, rhoKm1,       I                        rhoInSitu(1-OLx,1-OLy,k,bi,bj),
561       I                      myTime, myIter, myThid)       I                        rhoKm1, wVel,
562         I                        myTime, myIter, myThid )
563            ENDIF            ENDIF
564  #endif  #endif
565    
566  C--     end of diagnostic k loop (Nr:1)  C--     end of diagnostic k loop (Nr:1)
567          ENDDO          ENDDO
568    
569    #ifdef ALLOW_AUTODIFF_TAMC
570    CADJ STORE IVDConvCount(:,:,:,bi,bj)
571    CADJ &     = comlev1_bibj, key=itdkey,
572    CADJ &     kind = isbyte
573    #endif
574    
575    C--     Diagnose Mixed Layer Depth:
576            IF ( useGMRedi .OR. doDiagsRho.GE.4 ) THEN
577              CALL CALC_OCE_MXLAYER(
578         I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
579         I              bi, bj, myTime, myIter, myThid )
580            ENDIF
581    
582    #ifdef ALLOW_SALT_PLUME
583            IF ( useSALT_PLUME ) THEN
584              CALL SALT_PLUME_CALC_DEPTH(
585         I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
586         I              bi, bj, myTime, myIter, myThid )
587            ENDIF
588    #endif /* ALLOW_SALT_PLUME */
589    
590  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
591  c       IF ( useDiagnostics .AND.          IF ( MOD(doDiagsRho,4).GE.2 ) THEN
 c    &       (useGMRedi .OR. ivdc_kappa.NE.0.) ) THEN  
         IF ( doDiagsRho.GE.1 ) THEN  
592            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,
593       &         2, bi, bj, myThid)       &         2, bi, bj, myThid)
594          ENDIF          ENDIF
595  #endif  #endif /* ALLOW_DIAGNOSTICS */
   
 #ifdef  ALLOW_OBCS  
 C--     Calculate future values on open boundaries  
         IF (useOBCS) THEN  
 #ifdef ALLOW_DEBUG  
           IF ( debugLevel .GE. debLevB )  
      &     CALL DEBUG_CALL('OBCS_CALC',myThid)  
 #endif  
           CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,  
      I            uVel, vVel, wVel, theta, salt,  
      I            myThid )  
         ENDIF  
 #endif  /* ALLOW_OBCS */  
596    
 #ifndef ALLOW_AUTODIFF_TAMC  
         IF ( fluidIsWater ) THEN  
 #endif  
597  C--     Determines forcing terms based on external fields  C--     Determines forcing terms based on external fields
598  C       relaxation terms, etc.  C       relaxation terms, etc.
599  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
600          IF ( debugLevel .GE. debLevB )          IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
      &    CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)  
601  #endif  #endif
602  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
603  CADJ STORE EmPmR(:,:,bi,bj)  CADJ STORE EmPmR(:,:,bi,bj)
604  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
605    CADJ &     kind = isbyte
606  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
607  CADJ STORE PmEpR(:,:,bi,bj)  CADJ STORE PmEpR(:,:,bi,bj)
608  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
609    CADJ &     kind = isbyte
610  # endif  # endif
611  # ifdef NONLIN_FRSURF  # ifdef NONLIN_FRSURF
612  CADJ STORE hFac_surfC(:,:,bi,bj)  CADJ STORE hFac_surfC(:,:,bi,bj)
613  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
614    CADJ &     kind = isbyte
615  CADJ STORE recip_hFacC(:,:,:,bi,bj)  CADJ STORE recip_hFacC(:,:,:,bi,bj)
616  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
617  # endif  CADJ &     kind = isbyte
618    #  if (defined (ALLOW_PTRACERS))
619    CADJ STORE surfaceForcingS(:,:,bi,bj)   = comlev1_bibj, key=itdkey,
620    CADJ &     kind = isbyte
621    CADJ STORE surfaceForcingT(:,:,bi,bj)   = comlev1_bibj, key=itdkey,
622    CADJ &     kind = isbyte
623    #  endif /* ALLOW_PTRACERS */
624    # endif /* NONLIN_FRSURF */
625  #endif  #endif
626           CALL EXTERNAL_FORCING_SURF(          CALL EXTERNAL_FORCING_SURF(
627       I             bi, bj, iMin, iMax, jMin, jMax,       I             bi, bj, iMin, iMax, jMin, jMax,
628       I             myTime, myIter, myThid )       I             myTime, myIter, myThid )
 #ifndef ALLOW_AUTODIFF_TAMC  
         ENDIF  
 #endif  
629  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
630  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
631  cph-test  cph-test
632  cphCADJ STORE PmEpR(:,:,bi,bj)  cphCADJ STORE PmEpR(:,:,bi,bj)
633  cphCADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  cphCADJ &     = comlev1_bibj, key=itdkey,
634    cphCADJ &     kind = isbyte
635  # endif  # endif
636  #endif  #endif
637    
638  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
639  cph needed for KPP  cph needed for KPP
640  CADJ STORE surfaceForcingU(:,:,bi,bj)  CADJ STORE surfaceForcingU(:,:,bi,bj)
641  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
642    CADJ &     kind = isbyte
643  CADJ STORE surfaceForcingV(:,:,bi,bj)  CADJ STORE surfaceForcingV(:,:,bi,bj)
644  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
645    CADJ &     kind = isbyte
646  CADJ STORE surfaceForcingS(:,:,bi,bj)  CADJ STORE surfaceForcingS(:,:,bi,bj)
647  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
648    CADJ &     kind = isbyte
649  CADJ STORE surfaceForcingT(:,:,bi,bj)  CADJ STORE surfaceForcingT(:,:,bi,bj)
650  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
651    CADJ &     kind = isbyte
652  CADJ STORE surfaceForcingTice(:,:,bi,bj)  CADJ STORE surfaceForcingTice(:,:,bi,bj)
653  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
654  #endif /* ALLOW_AUTODIFF_TAMC */  CADJ &     kind = isbyte
   
 #ifdef  ALLOW_GMREDI  
   
 #ifdef ALLOW_AUTODIFF_TAMC  
 # ifndef GM_EXCLUDE_CLIPPING  
 cph storing here is needed only for one GMREDI_OPTIONS:  
 cph define GM_BOLUS_ADVEC  
 cph keep it although TAF says you dont need to.  
 cph but I've avoided the #ifdef for now, in case more things change  
 CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  
 CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  
 CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  
 # endif  
 #endif /* ALLOW_AUTODIFF_TAMC */  
   
 C--     Calculate iso-neutral slopes for the GM/Redi parameterisation  
         IF (useGMRedi) THEN  
 #ifdef ALLOW_DEBUG  
           IF ( debugLevel .GE. debLevB )  
      &     CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)  
 #endif  
           CALL GMREDI_CALC_TENSOR(  
      I             bi, bj, iMin, iMax, jMin, jMax,  
      I             sigmaX, sigmaY, sigmaR,  
      I             myThid )  
 #ifdef ALLOW_AUTODIFF_TAMC  
         ELSE  
           CALL GMREDI_CALC_TENSOR_DUMMY(  
      I             bi, bj, iMin, iMax, jMin, jMax,  
      I             sigmaX, sigmaY, sigmaR,  
      I             myThid )  
655  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
         ENDIF  
   
 #endif  /* ALLOW_GMREDI */  
656    
657  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
658  C--     Compute KPP mixing coefficients  C--     Compute KPP mixing coefficients
659          IF (useKPP) THEN          IF (useKPP) THEN
660  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
661            IF ( debugLevel .GE. debLevB )            IF (debugMode) CALL DEBUG_CALL('KPP_CALC',myThid)
      &     CALL DEBUG_CALL('KPP_CALC',myThid)  
662  #endif  #endif
663              CALL TIMER_START('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
664            CALL KPP_CALC(            CALL KPP_CALC(
665       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
666              CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
667  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
668          ELSE          ELSE
669            CALL KPP_CALC_DUMMY(            CALL KPP_CALC_DUMMY(
670       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
671  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
672          ENDIF          ENDIF
673    
# Line 480  C--     Compute KPP mixing coefficients Line 677  C--     Compute KPP mixing coefficients
677  C--     Compute PP81 mixing coefficients  C--     Compute PP81 mixing coefficients
678          IF (usePP81) THEN          IF (usePP81) THEN
679  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
680            IF ( debugLevel .GE. debLevB )            IF (debugMode) CALL DEBUG_CALL('PP81_CALC',myThid)
      &     CALL DEBUG_CALL('PP81_CALC',myThid)  
681  #endif  #endif
682            CALL PP81_CALC(            CALL PP81_CALC(
683       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myThid )
# Line 492  C--     Compute PP81 mixing coefficients Line 688  C--     Compute PP81 mixing coefficients
688  C--     Compute MY82 mixing coefficients  C--     Compute MY82 mixing coefficients
689          IF (useMY82) THEN          IF (useMY82) THEN
690  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
691            IF ( debugLevel .GE. debLevB )            IF (debugMode) CALL DEBUG_CALL('MY82_CALC',myThid)
      &     CALL DEBUG_CALL('MY82_CALC',myThid)  
692  #endif  #endif
693            CALL MY82_CALC(            CALL MY82_CALC(
694       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myThid )
# Line 501  C--     Compute MY82 mixing coefficients Line 696  C--     Compute MY82 mixing coefficients
696  #endif /* ALLOW_MY82 */  #endif /* ALLOW_MY82 */
697    
698  #ifdef  ALLOW_GGL90  #ifdef  ALLOW_GGL90
699    #ifdef ALLOW_AUTODIFF_TAMC
700    CADJ STORE GGL90TKE (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
701    CADJ &     kind = isbyte
702    #endif /* ALLOW_AUTODIFF_TAMC */
703  C--     Compute GGL90 mixing coefficients  C--     Compute GGL90 mixing coefficients
704          IF (useGGL90) THEN          IF (useGGL90) THEN
705  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
706            IF ( debugLevel .GE. debLevB )            IF (debugMode) CALL DEBUG_CALL('GGL90_CALC',myThid)
      &     CALL DEBUG_CALL('GGL90_CALC',myThid)  
707  #endif  #endif
708              CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
709            CALL GGL90_CALC(            CALL GGL90_CALC(
710       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
711              CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
712          ENDIF          ENDIF
713  #endif /* ALLOW_GGL90 */  #endif /* ALLOW_GGL90 */
714    
715  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
716          IF ( taveFreq.GT. 0. _d 0 .AND. fluidIsWater ) THEN          IF ( taveFreq.GT. 0. _d 0 ) THEN
717            CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)            CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
718          ENDIF          ENDIF
719          IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN          IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
# Line 522  C--     Compute GGL90 mixing coefficient Line 722  C--     Compute GGL90 mixing coefficient
722          ENDIF          ENDIF
723  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
724    
725    #ifdef ALLOW_GMREDI
726    #ifdef ALLOW_AUTODIFF_TAMC
727    # ifndef GM_EXCLUDE_CLIPPING
728    cph storing here is needed only for one GMREDI_OPTIONS:
729    cph define GM_BOLUS_ADVEC
730    cph keep it although TAF says you dont need to.
731    cph but I have avoided the #ifdef for now, in case more things change
732    CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey,
733    CADJ &     kind = isbyte
734    CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey,
735    CADJ &     kind = isbyte
736    CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey,
737    CADJ &     kind = isbyte
738    # endif
739    #endif /* ALLOW_AUTODIFF_TAMC */
740    
741    C--     Calculate iso-neutral slopes for the GM/Redi parameterisation
742            IF (useGMRedi) THEN
743    #ifdef ALLOW_DEBUG
744              IF (debugMode) CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
745    #endif
746              CALL GMREDI_CALC_TENSOR(
747         I             iMin, iMax, jMin, jMax,
748         I             sigmaX, sigmaY, sigmaR,
749         I             bi, bj, myTime, myIter, myThid )
750    #ifdef ALLOW_AUTODIFF_TAMC
751            ELSE
752              CALL GMREDI_CALC_TENSOR_DUMMY(
753         I             iMin, iMax, jMin, jMax,
754         I             sigmaX, sigmaY, sigmaR,
755         I             bi, bj, myTime, myIter, myThid )
756    #endif /* ALLOW_AUTODIFF_TAMC */
757            ENDIF
758    #endif /* ALLOW_GMREDI */
759    
760    #ifdef ALLOW_DOWN_SLOPE
761            IF ( useDOWN_SLOPE ) THEN
762    C--     Calculate Downsloping Flow for Down_Slope parameterization
763             IF ( usingPCoords ) THEN
764              CALL DWNSLP_CALC_FLOW(
765         I                bi, bj, kSurfC, rhoInSitu,
766         I                myTime, myIter, myThid )
767             ELSE
768              CALL DWNSLP_CALC_FLOW(
769         I                bi, bj, kLowC, rhoInSitu,
770         I                myTime, myIter, myThid )
771             ENDIF
772            ENDIF
773    #endif /* ALLOW_DOWN_SLOPE */
774    
775    #ifndef ALLOW_AUTODIFF_TAMC
776    C---  if fluid Is Water: end
777            ENDIF
778    #endif
779    
780    #ifdef ALLOW_MYPACKAGE
781            IF ( useMYPACKAGE ) THEN
782             CALL MYPACKAGE_CALC_RHS(
783         I        bi, bj, myTime, myIter, myThid )
784            ENDIF
785    #endif /* ALLOW_MYPACKAGE */
786    
787  C--   end bi,bj loops.  C--   end bi,bj loops.
788         ENDDO         ENDDO
789        ENDDO        ENDDO
790    
791    #ifdef ALLOW_GMREDI
792          IF ( useGMRedi ) THEN
793            CALL GMREDI_DO_EXCH( myTime, myIter, myThid )
794          ENDIF
795    #endif /* ALLOW_GMREDI */
796    
797    #ifdef ALLOW_KPP
798          IF (useKPP) THEN
799            CALL KPP_DO_EXCH( myThid )
800          ENDIF
801    #endif /* ALLOW_KPP */
802    
803  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
804        IF ( fluidIsWater .AND. useDiagnostics ) THEN        IF ( fluidIsWater .AND. useDiagnostics ) THEN
805            CALL DIAGS_RHO_G(
806         I                    rhoInSitu, uVel, vVel,
807         I                    myTime, myIter, myThid )
808          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
809        ENDIF        ENDIF
810        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
811          CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',          CALL DIAGNOSTICS_FILL( IVDConvCount, 'CONVADJ ',
812       &                         0, Nr, 0, 1, 1, myThid )       &                               0, Nr, 0, 1, 1, myThid )
813        ENDIF        ENDIF
814  #endif  #endif
815    
816  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
817           IF ( debugLevel .GE. debLevB )        IF (debugMode) CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)
      &    CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)  
818  #endif  #endif
819    
820        RETURN        RETURN

Legend:
Removed from v.1.28  
changed lines
  Added in v.1.99

  ViewVC Help
Powered by ViewVC 1.1.22