/[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.41 by heimbach, Wed Apr 18 19:54:06 2007 UTC revision 1.92 by heimbach, Wed Sep 15 03:41:59 2010 UTC
# Line 36  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 46  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
 # ifdef EXACT_CONSERV  
 #  include "SURFACE.h"  
 # endif  
67  # ifdef ALLOW_EXF  # ifdef ALLOW_EXF
68  #  include "ctrl.h"  #  include "ctrl.h"
69  #  include "EXF_FIELDS.h"  #  include "EXF_FIELDS.h"
# Line 72  C     == Global variables === Line 74  C     == Global variables ===
74  # ifdef ALLOW_SEAICE  # ifdef ALLOW_SEAICE
75  #  include "SEAICE.h"  #  include "SEAICE.h"
76  # endif  # endif
77    # ifdef ALLOW_SALT_PLUME
78    #  include "SALT_PLUME.h"
79    # endif
80  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
81    
82  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
# Line 85  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 rhokp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
99        _RL rhokm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
       _RL rhok    (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 121  C--   dummy statement to end declaration Line 125  C--   dummy statement to end declaration
125        doDiagsRho = 0        doDiagsRho = 0
126  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
127        IF ( useDiagnostics .AND. fluidIsWater ) THEN        IF ( useDiagnostics .AND. fluidIsWater ) THEN
128          IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) ) doDiagsRho = 1          IF ( DIAGNOSTICS_IS_ON('WRHOMASS',myThid) )
129          IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.       &       doDiagsRho = doDiagsRho + 1
130       &       DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) )
131       &       DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.       &       doDiagsRho = doDiagsRho + 2
132       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) )
133       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) ) doDiagsRho = 2       &       doDiagsRho = doDiagsRho + 4
134        ENDIF        ENDIF
135  #endif /* ALLOW_DIAGNOSTICS */  #endif /* ALLOW_DIAGNOSTICS */
136    
137    #ifdef ALLOW_ADDFLUID
138          DO bj=myByLo(myThid),myByHi(myThid)
139           DO bi=myBxLo(myThid),myBxHi(myThid)
140            DO K=1,Nr
141             DO j=1-OLy,sNy+OLy
142              DO i=1-OLx,sNx+OLx
143               addmass(I,J,K,bi,bj) =  0. _d 0
144              ENDDO
145             ENDDO
146            ENDDO
147           ENDDO
148          ENDDO
149    #endif /* ALLOW_ADDFLUID */
150    
151    #ifdef  ALLOW_OBCS
152          IF (useOBCS) THEN
153    C--   Calculate future values on open boundaries
154    C--   moved before SEAICE_MODEL call since SEAICE_MODEL needs seaice-obcs fields
155    #ifdef ALLOW_DEBUG
156           IF ( debugLevel .GE. debLevB )
157         &     CALL DEBUG_CALL('OBCS_CALC',myThid)
158    #endif
159           CALL OBCS_CALC( myTime+deltaTclock, myIter+1,
160         I                 uVel, vVel, wVel, theta, salt, myThid )
161          ENDIF
162    #endif  /* ALLOW_OBCS */
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  #ifdef ALLOW_SEAICE
 C--   Call sea ice model to compute forcing/external data fields.  In  
 C     addition to computing prognostic sea-ice variables and diagnosing the  
 C     forcing/external data fields that drive the ocean model, SEAICE_MODEL  
 C     also sets theta to the freezing point under sea-ice.  The implied  
 C     surface heat flux is then stored in variable surfaceTendencyTice,  
 C     which is needed by KPP package (kpp_calc.F and kpp_transport_t.F)  
 C     to diagnose surface buoyancy fluxes and for the non-local transport  
 C     term.  Because this call precedes model thermodynamics, temperature  
 C     under sea-ice may not be "exactly" at the freezing point by the time  
 C     theta is dumped or time-averaged.  
180        IF ( useSEAICE ) THEN        IF ( useSEAICE ) THEN
181  #ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
182  CADJ STORE atemp,aqh,precip    = comlev1, key = ikey_dynamics  cph-adj-test(
183  CADJ STORE swdown,lwdown       = comlev1, key = ikey_dynamics  CADJ STORE area   = comlev1, key=ikey_dynamics, kind=isbyte
184  CADJ STORE theta               = comlev1, key = ikey_dynamics  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  cph# ifdef EXF_READ_EVAP
194  CADJ STORE evap                = comlev1, key = ikey_dynamics  CADJ STORE evap                = comlev1, key = ikey_dynamics,
195  cph# endif  CADJ &     kind = isbyte
 cph# ifdef SEAICE_ALLOW_DYNAMICS  
 CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics  
196  cph# endif  cph# endif
197  # ifdef SEAICE_CGRID  CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics,
198  CADJ STORE fu, fv              = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
199  CADJ STORE seaicemasku         = comlev1, key = ikey_dynamics  #  ifdef SEAICE_ALLOW_DYNAMICS
200  CADJ STORE seaicemaskv         = comlev1, key = ikey_dynamics  CADJ STORE uice                = comlev1, key = ikey_dynamics,
201    CADJ &     kind = isbyte
202    CADJ STORE vice                = comlev1, key = ikey_dynamics,
203    CADJ &     kind = isbyte
204    CADJ STORE stressdivergencex   = comlev1, key = ikey_dynamics,
205    CADJ &     kind = isbyte
206    CADJ STORE stressdivergencey   = comlev1, key = ikey_dynamics,
207    CADJ &     kind = isbyte
208    #   ifdef SEAICE_ALLOW_EVP
209    CADJ STORE seaice_sigma1       = comlev1, key = ikey_dynamics,
210    CADJ &     kind = isbyte
211    CADJ STORE seaice_sigma2       = comlev1, key = ikey_dynamics,
212    CADJ &     kind = isbyte
213    CADJ STORE seaice_sigma12      = comlev1, key = ikey_dynamics,
214    CADJ &     kind = isbyte
215    #   endif
216    #  endif
217    #  ifdef SEAICE_SALINITY
218    CADJ STORE salt                = comlev1, key = ikey_dynamics,
219    CADJ &     kind = isbyte
220    #  endif
221  #  ifdef ATMOSPHERIC_LOADING  #  ifdef ATMOSPHERIC_LOADING
222  CADJ STORE siceload            = comlev1, key = ikey_dynamics  CADJ STORE pload               = comlev1, key = ikey_dynamics,
223    CADJ &     kind = isbyte
224    CADJ STORE siceload            = comlev1, key = ikey_dynamics,
225    CADJ &     kind = isbyte
226    #  endif
227    #  ifdef NONLIN_FRSURF
228    CADJ STORE recip_hfacc         = comlev1, key = ikey_dynamics,
229    CADJ &     kind = isbyte
230  #  endif  #  endif
231    #  ifdef ANNUAL_BALANCE
232    CADJ STORE balance_itcount     = comlev1, key = ikey_dynamics,
233    CADJ &     kind = isbyte
234    #  endif /* ANNUAL_BALANCE */
235  # endif  # endif
236  #endif  # ifdef ALLOW_DEBUG
 #ifdef ALLOW_DEBUG  
237          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
238       &    CALL DEBUG_CALL('SEAICE_MODEL',myThid)       &    CALL DEBUG_CALL('SEAICE_MODEL',myThid)
239  #endif  # endif
240          CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)          CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
241          CALL SEAICE_MODEL( myTime, myIter, myThid )          CALL SEAICE_MODEL( myTime, myIter, myThid )
242          CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)          CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
243  #ifdef ALLOW_COST_ICE  # ifdef ALLOW_COST
244          CALL COST_ICE_TEST ( myTime, myIter, myThid )          CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
245  #endif  # endif
246        ENDIF        ENDIF
247  #endif /* ALLOW_SEAICE */  #endif /* ALLOW_SEAICE */
248    
249    #ifdef ALLOW_AUTODIFF_TAMC
250    CADJ STORE sst, sss           = comlev1, key = ikey_dynamics,
251    CADJ &     kind = isbyte
252    CADJ STORE qsw                = comlev1, key = ikey_dynamics,
253    CADJ &     kind = isbyte
254    # ifdef ALLOW_SEAICE
255    CADJ STORE area               = comlev1, key = ikey_dynamics,
256    CADJ &     kind = isbyte
257    # endif
258    #endif
259    
260  #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)  #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
261        IF ( useThSIce .AND. fluidIsWater ) THEN        IF ( useThSIce .AND. fluidIsWater ) THEN
262  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
# Line 189  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 ( debugLevel .GE. debLevB )
282       &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)       &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
283  #endif  #endif
284  C     compute temperature and (virtual) salt flux at the  C     compute temperature and (virtual) salt flux at the
285  C     shelf-ice ocean interface  C     shelf-ice ocean interface
286         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
287       &       myThid)       &       myThid)
# Line 204  C     shelf-ice ocean interface Line 291  C     shelf-ice ocean interface
291        ENDIF        ENDIF
292  #endif /* ALLOW_SHELFICE */  #endif /* ALLOW_SHELFICE */
293    
294    #ifdef ALLOW_ICEFRONT
295          IF ( useICEFRONT .AND. fluidIsWater ) THEN
296    #ifdef ALLOW_DEBUG
297            IF ( debugLevel .GE. debLevB )
298         &    CALL DEBUG_CALL('ICEFRONT_THERMODYNAMICS',myThid)
299    #endif
300    C     compute temperature and (virtual) salt flux at the
301    C     ice-front ocean interface
302           CALL TIMER_START('ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
303         &       myThid)
304           CALL ICEFRONT_THERMODYNAMICS( myTime, myIter, myThid )
305           CALL TIMER_STOP( 'ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
306         &      myThid)
307          ENDIF
308    #endif /* ALLOW_ICEFRONT */
309    
310  C--   Freeze water at the surface  C--   Freeze water at the surface
311  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
312  CADJ STORE theta = comlev1, key = ikey_dynamics  CADJ STORE theta = comlev1, key = ikey_dynamics,
313    CADJ &     kind = isbyte
314  #endif  #endif
315        IF ( allowFreezing        IF ( allowFreezing ) THEN
      &                   .AND. .NOT. useSEAICE  
      &                   .AND. .NOT. useThSIce ) THEN  
316          CALL FREEZE_SURFACE(  myTime, myIter, myThid )          CALL FREEZE_SURFACE(  myTime, myIter, myThid )
317        ENDIF        ENDIF
318    
# Line 225  C jmc: do not know precisely where to pu Line 327  C jmc: do not know precisely where to pu
327  #ifdef ALLOW_BALANCE_FLUXES  #ifdef ALLOW_BALANCE_FLUXES
328  C     balance fluxes  C     balance fluxes
329        IF ( balanceEmPmR )        IF ( balanceEmPmR )
330       &        CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,       &      CALL REMOVE_MEAN_RS( 1, EmPmR, maskInC, maskInC, rA, drF,
331       &        'EmPmR', myTime, myThid )       &        'EmPmR', myTime, myThid )
332        IF ( balanceQnet )        IF ( balanceQnet )
333       &        CALL REMOVE_MEAN_RS( 1, Qnet,  maskH, maskH, rA, drF,       &      CALL REMOVE_MEAN_RS( 1, Qnet,  maskInC, maskInC, rA, drF,
334       &        'Qnet ', myTime, myThid )       &        'Qnet ', myTime, myThid )
335  #endif /* ALLOW_BALANCE_FLUXES */  #endif /* ALLOW_BALANCE_FLUXES */
336    
# Line 255  CHPF$ INDEPENDENT Line 357  CHPF$ INDEPENDENT
357       &                      + act3*max1*max2       &                      + act3*max1*max2
358       &                      + act4*max1*max2*max3       &                      + act4*max1*max2*max3
359  #else  /* ALLOW_AUTODIFF_TAMC */  #else  /* ALLOW_AUTODIFF_TAMC */
360  C     if fluid is not water, by-pass find_rho, gmredi, surfaceForcing  C     if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
361  C     and all vertical mixing schemes, but keep OBCS_CALC  C     and all vertical mixing schemes, but keep OBCS_CALC
362          IF ( fluidIsWater ) THEN          IF ( fluidIsWater ) THEN
363  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
# Line 266  C     just ensure that all memory refere Line 368  C     just ensure that all memory refere
368  C     point numbers. This prevents spurious hardware signals due to  C     point numbers. This prevents spurious hardware signals due to
369  C     uninitialised but inert locations.  C     uninitialised but inert locations.
370    
371    #ifdef ALLOW_AUTODIFF_TAMC
372          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
373           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
374            rhok   (i,j)   = 0. _d 0            rhoKm1 (i,j)   = 0. _d 0
375            rhoKM1 (i,j)   = 0. _d 0            rhoKp1 (i,j)   = 0. _d 0
           rhoKP1 (i,j)   = 0. _d 0  
376           ENDDO           ENDDO
377          ENDDO          ENDDO
378    #endif /* ALLOW_AUTODIFF_TAMC */
379    
380          DO k=1,Nr          DO k=1,Nr
381           DO j=1-OLy,sNy+OLy           DO j=1-OLy,sNy+OLy
382            DO i=1-OLx,sNx+OLx            DO i=1-OLx,sNx+OLx
383  C This is currently also used by IVDC and Diagnostics  C This is currently used by GMRedi, IVDC, MXL-depth  and Diagnostics
384             sigmaX(i,j,k) = 0. _d 0             sigmaX(i,j,k) = 0. _d 0
385             sigmaY(i,j,k) = 0. _d 0             sigmaY(i,j,k) = 0. _d 0
386             sigmaR(i,j,k) = 0. _d 0             sigmaR(i,j,k) = 0. _d 0
387  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
388  cph all the following init. are necessary for TAF  cph all the following init. are necessary for TAF
389  cph although some of these are re-initialised later.  cph although some of these are re-initialised later.
390    c          rhoInSitu(i,j,k,bi,bj) = 0.
391             IVDConvCount(i,j,k,bi,bj) = 0.             IVDConvCount(i,j,k,bi,bj) = 0.
392  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
393             Kwx(i,j,k,bi,bj)  = 0. _d 0             Kwx(i,j,k,bi,bj)  = 0. _d 0
# Line 305  cph although some of these are re-initia Line 409  cph although some of these are re-initia
409             VisbeckK(i,j,bi,bj)   = 0. _d 0             VisbeckK(i,j,bi,bj)   = 0. _d 0
410  #  endif  #  endif
411  # endif /* ALLOW_GMREDI */  # endif /* ALLOW_GMREDI */
412    # ifdef ALLOW_KPP
413               KPPdiffKzS(i,j,k,bi,bj)  = 0. _d 0
414               KPPdiffKzT(i,j,k,bi,bj)  = 0. _d 0
415    # endif /* ALLOW_KPP */
416    # ifdef ALLOW_GGL90
417               GGL90viscArU(i,j,k,bi,bj)  = 0. _d 0
418               GGL90viscArV(i,j,k,bi,bj)  = 0. _d 0
419               GGL90diffKr(i,j,k,bi,bj)  = 0. _d 0
420    # endif /* ALLOW_GGL90 */
421  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
422            ENDDO            ENDDO
423           ENDDO           ENDDO
# Line 316  cph although some of these are re-initia Line 429  cph although some of these are re-initia
429          jMax = sNy+OLy          jMax = sNy+OLy
430    
431  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
432  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
433  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
434    CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
435    CADJ &     kind = isbyte
436  CADJ STORE totphihyd(:,:,:,bi,bj)  CADJ STORE totphihyd(:,:,:,bi,bj)
437  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
438    CADJ &     kind = isbyte
439  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
440  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
441  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
442    CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
443    CADJ &     kind = isbyte
444  # endif  # endif
445  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
446    
# Line 337  C--     Start of diagnostic loop Line 455  C--     Start of diagnostic loop
455  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
456  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?
457  C? Do we still need this?  C? Do we still need this?
458  cph kkey formula corrected.  cph kkey formula corrected.
459  cph Needed for rhok, rhokm1, in the case useGMREDI.  cph Needed for rhoK, rhoKm1, in the case useGMREDI.
460           kkey = (itdkey-1)*Nr + k            kkey = (itdkey-1)*Nr + k
461  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
462    
463  C--       Calculate gradients of potential density for isoneutral  C--   Always compute density (stored in common block) here; even when it is not
464  C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)  C     needed here, will be used anyway in calc_phi_hyd (data flow easier this way)
           IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)  
      &                   .OR. doDiagsRho.GE.1 ) THEN  
465  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
466              IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
467       &       CALL DEBUG_CALL('FIND_RHO',myThid)       &       CALL DEBUG_CALL('FIND_RHO_2D',myThid)
468  #endif  #endif
469  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
470  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte            IF ( fluidIsWater ) THEN
471  CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
472    CADJ &     kind = isbyte
473    CADJ STORE salt(:,:,k,bi,bj)  = comlev1_bibj_k, key=kkey,
474    CADJ &     kind = isbyte
475    #endif /* ALLOW_AUTODIFF_TAMC */
476    #ifdef ALLOW_DOWN_SLOPE
477              IF ( useDOWN_SLOPE ) THEN
478                CALL DWNSLP_CALC_RHO(
479         I                  theta, salt,
480         O                  rhoInSitu(1-OLx,1-OLy,k,bi,bj),
481         I                  k, bi, bj, myTime, myIter, myThid )
482              ELSE
483    #endif /* ALLOW_DOWN_SLOPE */
484                CALL FIND_RHO_2D(
485         I                iMin, iMax, jMin, jMax, k,
486         I                theta(1-OLx,1-OLy,k,bi,bj),
487         I                salt (1-OLx,1-OLy,k,bi,bj),
488         O                rhoInSitu(1-OLx,1-OLy,k,bi,bj),
489         I                k, bi, bj, myThid )
490    #ifdef ALLOW_DOWN_SLOPE
491              ENDIF
492    #endif /* ALLOW_DOWN_SLOPE */
493    #ifdef ALLOW_AUTODIFF_TAMC
494              ELSE
495    C-        fluid is not water:
496               DO j=1-OLy,sNy+OLy
497                DO i=1-OLx,sNx+OLx
498                  rhoInSitu(i,j,k,bi,bj) = 0.
499                ENDDO
500               ENDDO
501              ENDIF
502  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
             CALL FIND_RHO(  
      I        bi, bj, iMin, iMax, jMin, jMax, k, k,  
      I        theta, salt,  
      O        rhoK,  
      I        myThid )  
503    
504    C--       Calculate gradients of potential density for isoneutral
505    C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
506              IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
507         &         .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
508              IF (k.GT.1) THEN              IF (k.GT.1) THEN
509  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
510  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,
511  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ &     kind = isbyte
512  #endif /* ALLOW_AUTODIFF_TAMC */  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
513               CALL FIND_RHO(  CADJ &     kind = isbyte
514       I        bi, bj, iMin, iMax, jMin, jMax, k-1, k,  CADJ STORE rhokm1 (bi,bj)       = comlev1_bibj_k, key=kkey,
515       I        theta, salt,  CADJ &     kind = isbyte
516       O        rhoKm1,  #endif /* ALLOW_AUTODIFF_TAMC */
517       I        myThid )               CALL FIND_RHO_2D(
518         I                 iMin, iMax, jMin, jMax, k,
519         I                 theta(1-OLx,1-OLy,k-1,bi,bj),
520         I                 salt (1-OLx,1-OLy,k-1,bi,bj),
521         O                 rhoKm1,
522         I                 k-1, bi, bj, myThid )
523              ENDIF              ENDIF
524  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
525              IF ( debugLevel .GE. debLevB )              IF ( debugLevel .GE. debLevB )
# Line 378  CADJ STORE salt (:,:,k-1,bi,bj) = comlev Line 528  CADJ STORE salt (:,:,k-1,bi,bj) = comlev
528  cph Avoid variable aliasing for adjoint !!!  cph Avoid variable aliasing for adjoint !!!
529              DO j=jMin,jMax              DO j=jMin,jMax
530               DO i=iMin,iMax               DO i=iMin,iMax
531                rhoKP1(i,j) = rhoK(i,j)                rhoKp1(i,j) = rhoInSitu(i,j,k,bi,bj)
532               ENDDO               ENDDO
533              ENDDO              ENDDO
534              CALL GRAD_SIGMA(              CALL GRAD_SIGMA(
535       I             bi, bj, iMin, iMax, jMin, jMax, k,       I             bi, bj, iMin, iMax, jMin, jMax, k,
536       I             rhoK, rhoKm1, rhoKp1,       I             rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1,
537       O             sigmaX, sigmaY, sigmaR,       O             sigmaX, sigmaY, sigmaR,
538       I             myThid )       I             myThid )
           ENDIF  
   
539  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
540  ctest# ifndef GM_EXCLUDE_CLIPPING  #ifdef GMREDI_WITH_STABLE_ADJOINT
541  CADJ STORE rhok   (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  cgf zero out adjoint fields to stabilize pkg/gmredi adjoint
542  ctest# endif  cgf -> cuts adjoint dependency from slope to state
543  CADJ STORE rhokm1 (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte              CALL ZERO_ADJ_LOC( Nr, sigmaX, myThid)
544                CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid)
545                CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid)
546    #endif
547  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
548              ENDIF
549    
550  C--       Implicit Vertical Diffusion for Convection  C--       Implicit Vertical Diffusion for Convection
551  c ==> should use sigmaR !!!  c ==> should use sigmaR !!!
552            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
# Line 403  c ==> should use sigmaR !!! Line 556  c ==> should use sigmaR !!!
556  #endif  #endif
557              CALL CALC_IVDC(              CALL CALC_IVDC(
558       I        bi, bj, iMin, iMax, jMin, jMax, k,       I        bi, bj, iMin, iMax, jMin, jMax, k,
559       I        rhoKm1, rhoK,       I        rhoKm1, rhoInSitu(1-OLx,1-OLy,k,bi,bj),
560       I        myTime, myIter, myThid)       I        myTime, myIter, myThid)
561            ENDIF            ENDIF
562    
563  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
564            IF ( doDiagsRho.GE.2 ) THEN            IF ( MOD(doDiagsRho,2).EQ.1 ) THEN
565              CALL DIAGS_RHO( k, bi, bj,              CALL DIAGS_RHO_L( k, bi, bj,
566       I                      rhoK, rhoKm1,       I                        rhoInSitu(1-OLx,1-OLy,k,bi,bj),
567       I                      myTime, myIter, myThid)       I                        rhoKm1, wVel,
568         I                        myTime, myIter, myThid )
569            ENDIF            ENDIF
570  #endif  #endif
571    
572  C--     end of diagnostic k loop (Nr:1)  C--     end of diagnostic k loop (Nr:1)
573          ENDDO          ENDDO
574    
575    #ifdef ALLOW_AUTODIFF_TAMC
576    CADJ STORE IVDConvCount(:,:,:,bi,bj)
577    CADJ &     = comlev1_bibj, key=itdkey,
578    CADJ &     kind = isbyte
579    #endif
580    
581    C--     Diagnose Mixed Layer Depth:
582            IF ( useGMRedi .OR. doDiagsRho.GE.4 ) THEN
583              CALL CALC_OCE_MXLAYER(
584         I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
585         I              bi, bj, myTime, myIter, myThid )
586            ENDIF
587    
588    #ifdef ALLOW_SALT_PLUME
589            IF ( useSALT_PLUME ) THEN
590              CALL SALT_PLUME_CALC_DEPTH(
591         I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
592         I              bi, bj, myTime, myIter, myThid )
593            ENDIF
594    #endif /* ALLOW_SALT_PLUME */
595    
596  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
597          IF ( doDiagsRho.GE.1 ) THEN          IF ( MOD(doDiagsRho,4).GE.2 ) THEN
598            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,
599       &         2, bi, bj, myThid)       &         2, bi, bj, myThid)
600          ENDIF          ENDIF
601  #endif  #endif /* ALLOW_DIAGNOSTICS */
602    
603  C--     Determines forcing terms based on external fields  C--     Determines forcing terms based on external fields
604  C       relaxation terms, etc.  C       relaxation terms, etc.
# Line 433  C       relaxation terms, etc. Line 608  C       relaxation terms, etc.
608  #endif  #endif
609  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
610  CADJ STORE EmPmR(:,:,bi,bj)  CADJ STORE EmPmR(:,:,bi,bj)
611  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
612    CADJ &     kind = isbyte
613  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
614  CADJ STORE PmEpR(:,:,bi,bj)  CADJ STORE PmEpR(:,:,bi,bj)
615  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
616    CADJ &     kind = isbyte
617  # endif  # endif
618  # ifdef NONLIN_FRSURF  # ifdef NONLIN_FRSURF
619  CADJ STORE hFac_surfC(:,:,bi,bj)  CADJ STORE hFac_surfC(:,:,bi,bj)
620  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
621    CADJ &     kind = isbyte
622  CADJ STORE recip_hFacC(:,:,:,bi,bj)  CADJ STORE recip_hFacC(:,:,:,bi,bj)
623  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
624    CADJ &     kind = isbyte
625  # endif  # endif
626  #endif  #endif
627          CALL EXTERNAL_FORCING_SURF(          CALL EXTERNAL_FORCING_SURF(
# Line 452  CADJ &     = comlev1_bibj, key=itdkey, b Line 631  CADJ &     = comlev1_bibj, key=itdkey, b
631  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
632  cph-test  cph-test
633  cphCADJ STORE PmEpR(:,:,bi,bj)  cphCADJ STORE PmEpR(:,:,bi,bj)
634  cphCADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  cphCADJ &     = comlev1_bibj, key=itdkey,
635    cphCADJ &     kind = isbyte
636  # endif  # endif
637  #endif  #endif
638    
639  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
640  cph needed for KPP  cph needed for KPP
641  CADJ STORE surfaceForcingU(:,:,bi,bj)  CADJ STORE surfaceForcingU(:,:,bi,bj)
642  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
643    CADJ &     kind = isbyte
644  CADJ STORE surfaceForcingV(:,:,bi,bj)  CADJ STORE surfaceForcingV(:,:,bi,bj)
645  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
646    CADJ &     kind = isbyte
647  CADJ STORE surfaceForcingS(:,:,bi,bj)  CADJ STORE surfaceForcingS(:,:,bi,bj)
648  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
649    CADJ &     kind = isbyte
650  CADJ STORE surfaceForcingT(:,:,bi,bj)  CADJ STORE surfaceForcingT(:,:,bi,bj)
651  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
652    CADJ &     kind = isbyte
653  CADJ STORE surfaceForcingTice(:,:,bi,bj)  CADJ STORE surfaceForcingTice(:,:,bi,bj)
654  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
655  #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 )  
656  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
         ENDIF  
   
 #endif  /* ALLOW_GMREDI */  
657    
658  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
659  C--     Compute KPP mixing coefficients  C--     Compute KPP mixing coefficients
# Line 512  C--     Compute KPP mixing coefficients Line 662  C--     Compute KPP mixing coefficients
662            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
663       &     CALL DEBUG_CALL('KPP_CALC',myThid)       &     CALL DEBUG_CALL('KPP_CALC',myThid)
664  #endif  #endif
665              CALL TIMER_START('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
666            CALL KPP_CALC(            CALL KPP_CALC(
667       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
668              CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
669  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
670          ELSE          ELSE
671            CALL KPP_CALC_DUMMY(            CALL KPP_CALC_DUMMY(
672       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
673  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
674          ENDIF          ENDIF
675    
# Line 548  C--     Compute MY82 mixing coefficients Line 700  C--     Compute MY82 mixing coefficients
700  #endif /* ALLOW_MY82 */  #endif /* ALLOW_MY82 */
701    
702  #ifdef  ALLOW_GGL90  #ifdef  ALLOW_GGL90
703    #ifdef ALLOW_AUTODIFF_TAMC
704    CADJ STORE GGL90TKE (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
705    CADJ &     kind = isbyte
706    #endif /* ALLOW_AUTODIFF_TAMC */
707  C--     Compute GGL90 mixing coefficients  C--     Compute GGL90 mixing coefficients
708          IF (useGGL90) THEN          IF (useGGL90) THEN
709  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
710            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
711       &     CALL DEBUG_CALL('GGL90_CALC',myThid)       &     CALL DEBUG_CALL('GGL90_CALC',myThid)
712  #endif  #endif
713              CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
714            CALL GGL90_CALC(            CALL GGL90_CALC(
715       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
716              CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
717          ENDIF          ENDIF
718  #endif /* ALLOW_GGL90 */  #endif /* ALLOW_GGL90 */
719    
# Line 569  C--     Compute GGL90 mixing coefficient Line 727  C--     Compute GGL90 mixing coefficient
727          ENDIF          ENDIF
728  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
729    
730  #ifndef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_GMREDI
731  C---  if fluid Is Water: end  #ifdef ALLOW_AUTODIFF_TAMC
732          ENDIF  # ifndef GM_EXCLUDE_CLIPPING
733  #endif  cph storing here is needed only for one GMREDI_OPTIONS:
734    cph define GM_BOLUS_ADVEC
735    cph keep it although TAF says you dont need to.
736    cph but I have avoided the #ifdef for now, in case more things change
737    CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey,
738    CADJ &     kind = isbyte
739    CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey,
740    CADJ &     kind = isbyte
741    CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey,
742    CADJ &     kind = isbyte
743    # endif
744    #endif /* ALLOW_AUTODIFF_TAMC */
745    
746  #ifdef  ALLOW_OBCS  C--     Calculate iso-neutral slopes for the GM/Redi parameterisation
747  C--     Calculate future values on open boundaries          IF (useGMRedi) THEN
         IF (useOBCS) THEN  
748  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
749            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
750       &     CALL DEBUG_CALL('OBCS_CALC',myThid)       &     CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
751  #endif  #endif
752            CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,            CALL GMREDI_CALC_TENSOR(
753       I            uVel, vVel, wVel, theta, salt,       I             iMin, iMax, jMin, jMax,
754       I            myThid )       I             sigmaX, sigmaY, sigmaR,
755         I             bi, bj, myTime, myIter, myThid )
756    #ifdef ALLOW_AUTODIFF_TAMC
757            ELSE
758              CALL GMREDI_CALC_TENSOR_DUMMY(
759         I             iMin, iMax, jMin, jMax,
760         I             sigmaX, sigmaY, sigmaR,
761         I             bi, bj, myTime, myIter, myThid )
762    #endif /* ALLOW_AUTODIFF_TAMC */
763          ENDIF          ENDIF
764  #endif  /* ALLOW_OBCS */  #endif /* ALLOW_GMREDI */
765    
766    #ifdef ALLOW_DOWN_SLOPE
767            IF ( useDOWN_SLOPE ) THEN
768    C--     Calculate Downsloping Flow for Down_Slope parameterization
769             IF ( usingPCoords ) THEN
770              CALL DWNSLP_CALC_FLOW(
771         I                bi, bj, kSurfC, rhoInSitu,
772         I                myTime, myIter, myThid )
773             ELSE
774              CALL DWNSLP_CALC_FLOW(
775         I                bi, bj, kLowC, rhoInSitu,
776         I                myTime, myIter, myThid )
777             ENDIF
778            ENDIF
779    #endif /* ALLOW_DOWN_SLOPE */
780    
781    #ifndef ALLOW_AUTODIFF_TAMC
782    C---  if fluid Is Water: end
783            ENDIF
784    #endif
785    
786  C--   end bi,bj loops.  C--   end bi,bj loops.
787         ENDDO         ENDDO
788        ENDDO        ENDDO
789    
790    #ifdef  ALLOW_KPP
791          IF (useKPP) THEN
792            CALL KPP_DO_EXCH( myThid )
793          ENDIF
794    #endif  /* ALLOW_KPP */
795    
796  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
797        IF ( fluidIsWater .AND. useDiagnostics ) THEN        IF ( fluidIsWater .AND. useDiagnostics ) THEN
798            CALL DIAGS_RHO_G(
799         I                    rhoInSitu, uVel, vVel,
800         I                    myTime, myIter, myThid )
801          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
802        ENDIF        ENDIF
803        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
804          CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',          CALL DIAGNOSTICS_FILL( IVDConvCount, 'CONVADJ ',
805       &                         0, Nr, 0, 1, 1, myThid )       &                               0, Nr, 0, 1, 1, myThid )
806        ENDIF        ENDIF
807  #endif  #endif
808    

Legend:
Removed from v.1.41  
changed lines
  Added in v.1.92

  ViewVC Help
Powered by ViewVC 1.1.22