/[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.93 by heimbach, Thu Sep 16 20:10:22 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 ALLOW_CGRID
200  CADJ STORE seaicemaskv         = comlev1, key = ikey_dynamics  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  #  ifdef ATMOSPHERIC_LOADING
224  CADJ STORE siceload            = comlev1, key = ikey_dynamics  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  #  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  # endif
238  #endif  # ifdef ALLOW_DEBUG
 #ifdef ALLOW_DEBUG  
239          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
240       &    CALL DEBUG_CALL('SEAICE_MODEL',myThid)       &    CALL DEBUG_CALL('SEAICE_MODEL',myThid)
241  #endif  # endif
242          CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)          CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
243          CALL SEAICE_MODEL( myTime, myIter, myThid )          CALL SEAICE_MODEL( myTime, myIter, myThid )
244          CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)          CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
245  #ifdef ALLOW_COST_ICE  # ifdef ALLOW_COST
246          CALL COST_ICE_TEST ( myTime, myIter, myThid )          CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
247  #endif  # endif
248        ENDIF        ENDIF
249  #endif /* ALLOW_SEAICE */  #endif /* ALLOW_SEAICE */
250    
251    #ifdef ALLOW_AUTODIFF_TAMC
252    CADJ STORE sst, sss           = comlev1, key = ikey_dynamics,
253    CADJ &     kind = isbyte
254    CADJ STORE qsw                = comlev1, key = ikey_dynamics,
255    CADJ &     kind = isbyte
256    # ifdef ALLOW_SEAICE
257    CADJ STORE area               = comlev1, key = ikey_dynamics,
258    CADJ &     kind = isbyte
259    # endif
260    #endif
261    
262  #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)  #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
263        IF ( useThSIce .AND. fluidIsWater ) THEN        IF ( useThSIce .AND. fluidIsWater ) THEN
264  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
# Line 189  C       and modify forcing terms includi Line 274  C       and modify forcing terms includi
274  #endif /* ALLOW_THSICE */  #endif /* ALLOW_THSICE */
275    
276  #ifdef ALLOW_SHELFICE  #ifdef ALLOW_SHELFICE
277    # ifdef ALLOW_AUTODIFF_TAMC
278    CADJ STORE salt, theta = comlev1, key = ikey_dynamics,
279    CADJ &     kind = isbyte
280    # endif
281        IF ( useShelfIce .AND. fluidIsWater ) THEN        IF ( useShelfIce .AND. fluidIsWater ) THEN
282  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
283          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
284       &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)       &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
285  #endif  #endif
286  C     compute temperature and (virtual) salt flux at the  C     compute temperature and (virtual) salt flux at the
287  C     shelf-ice ocean interface  C     shelf-ice ocean interface
288         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
289       &       myThid)       &       myThid)
# Line 204  C     shelf-ice ocean interface Line 293  C     shelf-ice ocean interface
293        ENDIF        ENDIF
294  #endif /* ALLOW_SHELFICE */  #endif /* ALLOW_SHELFICE */
295    
296    #ifdef ALLOW_ICEFRONT
297          IF ( useICEFRONT .AND. fluidIsWater ) THEN
298    #ifdef ALLOW_DEBUG
299            IF ( debugLevel .GE. debLevB )
300         &    CALL DEBUG_CALL('ICEFRONT_THERMODYNAMICS',myThid)
301    #endif
302    C     compute temperature and (virtual) salt flux at the
303    C     ice-front ocean interface
304           CALL TIMER_START('ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
305         &       myThid)
306           CALL ICEFRONT_THERMODYNAMICS( myTime, myIter, myThid )
307           CALL TIMER_STOP( 'ICEFRONT_THERMODYNAMICS [DO_OCEANIC_PHYS]',
308         &      myThid)
309          ENDIF
310    #endif /* ALLOW_ICEFRONT */
311    
312  C--   Freeze water at the surface  C--   Freeze water at the surface
313  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
314  CADJ STORE theta = comlev1, key = ikey_dynamics  CADJ STORE theta = comlev1, key = ikey_dynamics,
315    CADJ &     kind = isbyte
316  #endif  #endif
317        IF ( allowFreezing        IF ( allowFreezing ) THEN
      &                   .AND. .NOT. useSEAICE  
      &                   .AND. .NOT. useThSIce ) THEN  
318          CALL FREEZE_SURFACE(  myTime, myIter, myThid )          CALL FREEZE_SURFACE(  myTime, myIter, myThid )
319        ENDIF        ENDIF
320    
# Line 225  C jmc: do not know precisely where to pu Line 329  C jmc: do not know precisely where to pu
329  #ifdef ALLOW_BALANCE_FLUXES  #ifdef ALLOW_BALANCE_FLUXES
330  C     balance fluxes  C     balance fluxes
331        IF ( balanceEmPmR )        IF ( balanceEmPmR )
332       &        CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,       &      CALL REMOVE_MEAN_RS( 1, EmPmR, maskInC, maskInC, rA, drF,
333       &        'EmPmR', myTime, myThid )       &        'EmPmR', myTime, myThid )
334        IF ( balanceQnet )        IF ( balanceQnet )
335       &        CALL REMOVE_MEAN_RS( 1, Qnet,  maskH, maskH, rA, drF,       &      CALL REMOVE_MEAN_RS( 1, Qnet,  maskInC, maskInC, rA, drF,
336       &        'Qnet ', myTime, myThid )       &        'Qnet ', myTime, myThid )
337  #endif /* ALLOW_BALANCE_FLUXES */  #endif /* ALLOW_BALANCE_FLUXES */
338    
# Line 255  CHPF$ INDEPENDENT Line 359  CHPF$ INDEPENDENT
359       &                      + act3*max1*max2       &                      + act3*max1*max2
360       &                      + act4*max1*max2*max3       &                      + act4*max1*max2*max3
361  #else  /* ALLOW_AUTODIFF_TAMC */  #else  /* ALLOW_AUTODIFF_TAMC */
362  C     if fluid is not water, by-pass find_rho, gmredi, surfaceForcing  C     if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
363  C     and all vertical mixing schemes, but keep OBCS_CALC  C     and all vertical mixing schemes, but keep OBCS_CALC
364          IF ( fluidIsWater ) THEN          IF ( fluidIsWater ) THEN
365  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
# Line 266  C     just ensure that all memory refere Line 370  C     just ensure that all memory refere
370  C     point numbers. This prevents spurious hardware signals due to  C     point numbers. This prevents spurious hardware signals due to
371  C     uninitialised but inert locations.  C     uninitialised but inert locations.
372    
373    #ifdef ALLOW_AUTODIFF_TAMC
374          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
375           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
376            rhok   (i,j)   = 0. _d 0            rhoKm1 (i,j)   = 0. _d 0
377            rhoKM1 (i,j)   = 0. _d 0            rhoKp1 (i,j)   = 0. _d 0
           rhoKP1 (i,j)   = 0. _d 0  
378           ENDDO           ENDDO
379          ENDDO          ENDDO
380    #endif /* ALLOW_AUTODIFF_TAMC */
381    
382          DO k=1,Nr          DO k=1,Nr
383           DO j=1-OLy,sNy+OLy           DO j=1-OLy,sNy+OLy
384            DO i=1-OLx,sNx+OLx            DO i=1-OLx,sNx+OLx
385  C This is currently also used by IVDC and Diagnostics  C This is currently used by GMRedi, IVDC, MXL-depth  and Diagnostics
386             sigmaX(i,j,k) = 0. _d 0             sigmaX(i,j,k) = 0. _d 0
387             sigmaY(i,j,k) = 0. _d 0             sigmaY(i,j,k) = 0. _d 0
388             sigmaR(i,j,k) = 0. _d 0             sigmaR(i,j,k) = 0. _d 0
389  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
390  cph all the following init. are necessary for TAF  cph all the following init. are necessary for TAF
391  cph although some of these are re-initialised later.  cph although some of these are re-initialised later.
392    c          rhoInSitu(i,j,k,bi,bj) = 0.
393             IVDConvCount(i,j,k,bi,bj) = 0.             IVDConvCount(i,j,k,bi,bj) = 0.
394  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
395             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 411  cph although some of these are re-initia
411             VisbeckK(i,j,bi,bj)   = 0. _d 0             VisbeckK(i,j,bi,bj)   = 0. _d 0
412  #  endif  #  endif
413  # endif /* ALLOW_GMREDI */  # endif /* ALLOW_GMREDI */
414    # ifdef ALLOW_KPP
415               KPPdiffKzS(i,j,k,bi,bj)  = 0. _d 0
416               KPPdiffKzT(i,j,k,bi,bj)  = 0. _d 0
417    # endif /* ALLOW_KPP */
418    # ifdef ALLOW_GGL90
419               GGL90viscArU(i,j,k,bi,bj)  = 0. _d 0
420               GGL90viscArV(i,j,k,bi,bj)  = 0. _d 0
421               GGL90diffKr(i,j,k,bi,bj)  = 0. _d 0
422    # endif /* ALLOW_GGL90 */
423  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
424            ENDDO            ENDDO
425           ENDDO           ENDDO
# Line 316  cph although some of these are re-initia Line 431  cph although some of these are re-initia
431          jMax = sNy+OLy          jMax = sNy+OLy
432    
433  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
434  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
435  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
436    CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
437    CADJ &     kind = isbyte
438  CADJ STORE totphihyd(:,:,:,bi,bj)  CADJ STORE totphihyd(:,:,:,bi,bj)
439  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
440    CADJ &     kind = isbyte
441  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
442  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
443  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
444    CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
445    CADJ &     kind = isbyte
446  # endif  # endif
447  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
448    
# Line 337  C--     Start of diagnostic loop Line 457  C--     Start of diagnostic loop
457  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
458  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?
459  C? Do we still need this?  C? Do we still need this?
460  cph kkey formula corrected.  cph kkey formula corrected.
461  cph Needed for rhok, rhokm1, in the case useGMREDI.  cph Needed for rhoK, rhoKm1, in the case useGMREDI.
462           kkey = (itdkey-1)*Nr + k            kkey = (itdkey-1)*Nr + k
463  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
464    
465  C--       Calculate gradients of potential density for isoneutral  C--   Always compute density (stored in common block) here; even when it is not
466  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  
467  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
468              IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
469       &       CALL DEBUG_CALL('FIND_RHO',myThid)       &       CALL DEBUG_CALL('FIND_RHO_2D',myThid)
470  #endif  #endif
471  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
472  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte            IF ( fluidIsWater ) THEN
473  CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
474    CADJ &     kind = isbyte
475    CADJ STORE salt(:,:,k,bi,bj)  = comlev1_bibj_k, key=kkey,
476    CADJ &     kind = isbyte
477    #endif /* ALLOW_AUTODIFF_TAMC */
478    #ifdef ALLOW_DOWN_SLOPE
479              IF ( useDOWN_SLOPE ) THEN
480                CALL DWNSLP_CALC_RHO(
481         I                  theta, salt,
482         O                  rhoInSitu(1-OLx,1-OLy,k,bi,bj),
483         I                  k, bi, bj, myTime, myIter, myThid )
484              ELSE
485    #endif /* ALLOW_DOWN_SLOPE */
486                CALL FIND_RHO_2D(
487         I                iMin, iMax, jMin, jMax, k,
488         I                theta(1-OLx,1-OLy,k,bi,bj),
489         I                salt (1-OLx,1-OLy,k,bi,bj),
490         O                rhoInSitu(1-OLx,1-OLy,k,bi,bj),
491         I                k, bi, bj, myThid )
492    #ifdef ALLOW_DOWN_SLOPE
493              ENDIF
494    #endif /* ALLOW_DOWN_SLOPE */
495    #ifdef ALLOW_AUTODIFF_TAMC
496              ELSE
497    C-        fluid is not water:
498               DO j=1-OLy,sNy+OLy
499                DO i=1-OLx,sNx+OLx
500                  rhoInSitu(i,j,k,bi,bj) = 0.
501                ENDDO
502               ENDDO
503              ENDIF
504  #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 )  
505    
506    C--       Calculate gradients of potential density for isoneutral
507    C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
508              IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
509         &         .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
510              IF (k.GT.1) THEN              IF (k.GT.1) THEN
511  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
512  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,
513  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ &     kind = isbyte
514  #endif /* ALLOW_AUTODIFF_TAMC */  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
515               CALL FIND_RHO(  CADJ &     kind = isbyte
516       I        bi, bj, iMin, iMax, jMin, jMax, k-1, k,  CADJ STORE rhokm1 (bi,bj)       = comlev1_bibj_k, key=kkey,
517       I        theta, salt,  CADJ &     kind = isbyte
518       O        rhoKm1,  #endif /* ALLOW_AUTODIFF_TAMC */
519       I        myThid )               CALL FIND_RHO_2D(
520         I                 iMin, iMax, jMin, jMax, k,
521         I                 theta(1-OLx,1-OLy,k-1,bi,bj),
522         I                 salt (1-OLx,1-OLy,k-1,bi,bj),
523         O                 rhoKm1,
524         I                 k-1, bi, bj, myThid )
525              ENDIF              ENDIF
526  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
527              IF ( debugLevel .GE. debLevB )              IF ( debugLevel .GE. debLevB )
# Line 378  CADJ STORE salt (:,:,k-1,bi,bj) = comlev Line 530  CADJ STORE salt (:,:,k-1,bi,bj) = comlev
530  cph Avoid variable aliasing for adjoint !!!  cph Avoid variable aliasing for adjoint !!!
531              DO j=jMin,jMax              DO j=jMin,jMax
532               DO i=iMin,iMax               DO i=iMin,iMax
533                rhoKP1(i,j) = rhoK(i,j)                rhoKp1(i,j) = rhoInSitu(i,j,k,bi,bj)
534               ENDDO               ENDDO
535              ENDDO              ENDDO
536              CALL GRAD_SIGMA(              CALL GRAD_SIGMA(
537       I             bi, bj, iMin, iMax, jMin, jMax, k,       I             bi, bj, iMin, iMax, jMin, jMax, k,
538       I             rhoK, rhoKm1, rhoKp1,       I             rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1,
539       O             sigmaX, sigmaY, sigmaR,       O             sigmaX, sigmaY, sigmaR,
540       I             myThid )       I             myThid )
           ENDIF  
   
541  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
542  ctest# ifndef GM_EXCLUDE_CLIPPING  #ifdef GMREDI_WITH_STABLE_ADJOINT
543  CADJ STORE rhok   (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  cgf zero out adjoint fields to stabilize pkg/gmredi adjoint
544  ctest# endif  cgf -> cuts adjoint dependency from slope to state
545  CADJ STORE rhokm1 (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte              CALL ZERO_ADJ_LOC( Nr, sigmaX, myThid)
546                CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid)
547                CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid)
548    #endif
549  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
550              ENDIF
551    
552  C--       Implicit Vertical Diffusion for Convection  C--       Implicit Vertical Diffusion for Convection
553  c ==> should use sigmaR !!!  c ==> should use sigmaR !!!
554            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 558  c ==> should use sigmaR !!!
558  #endif  #endif
559              CALL CALC_IVDC(              CALL CALC_IVDC(
560       I        bi, bj, iMin, iMax, jMin, jMax, k,       I        bi, bj, iMin, iMax, jMin, jMax, k,
561       I        rhoKm1, rhoK,       I        rhoKm1, rhoInSitu(1-OLx,1-OLy,k,bi,bj),
562       I        myTime, myIter, myThid)       I        myTime, myIter, myThid)
563            ENDIF            ENDIF
564    
565  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
566            IF ( doDiagsRho.GE.2 ) THEN            IF ( MOD(doDiagsRho,2).EQ.1 ) THEN
567              CALL DIAGS_RHO( k, bi, bj,              CALL DIAGS_RHO_L( k, bi, bj,
568       I                      rhoK, rhoKm1,       I                        rhoInSitu(1-OLx,1-OLy,k,bi,bj),
569       I                      myTime, myIter, myThid)       I                        rhoKm1, wVel,
570         I                        myTime, myIter, myThid )
571            ENDIF            ENDIF
572  #endif  #endif
573    
574  C--     end of diagnostic k loop (Nr:1)  C--     end of diagnostic k loop (Nr:1)
575          ENDDO          ENDDO
576    
577    #ifdef ALLOW_AUTODIFF_TAMC
578    CADJ STORE IVDConvCount(:,:,:,bi,bj)
579    CADJ &     = comlev1_bibj, key=itdkey,
580    CADJ &     kind = isbyte
581    #endif
582    
583    C--     Diagnose Mixed Layer Depth:
584            IF ( useGMRedi .OR. doDiagsRho.GE.4 ) THEN
585              CALL CALC_OCE_MXLAYER(
586         I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
587         I              bi, bj, myTime, myIter, myThid )
588            ENDIF
589    
590    #ifdef ALLOW_SALT_PLUME
591            IF ( useSALT_PLUME ) THEN
592              CALL SALT_PLUME_CALC_DEPTH(
593         I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
594         I              bi, bj, myTime, myIter, myThid )
595            ENDIF
596    #endif /* ALLOW_SALT_PLUME */
597    
598  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
599          IF ( doDiagsRho.GE.1 ) THEN          IF ( MOD(doDiagsRho,4).GE.2 ) THEN
600            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,
601       &         2, bi, bj, myThid)       &         2, bi, bj, myThid)
602          ENDIF          ENDIF
603  #endif  #endif /* ALLOW_DIAGNOSTICS */
604    
605  C--     Determines forcing terms based on external fields  C--     Determines forcing terms based on external fields
606  C       relaxation terms, etc.  C       relaxation terms, etc.
# Line 433  C       relaxation terms, etc. Line 610  C       relaxation terms, etc.
610  #endif  #endif
611  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
612  CADJ STORE EmPmR(:,:,bi,bj)  CADJ STORE EmPmR(:,:,bi,bj)
613  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
614    CADJ &     kind = isbyte
615  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
616  CADJ STORE PmEpR(:,:,bi,bj)  CADJ STORE PmEpR(:,:,bi,bj)
617  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
618    CADJ &     kind = isbyte
619  # endif  # endif
620  # ifdef NONLIN_FRSURF  # ifdef NONLIN_FRSURF
621  CADJ STORE hFac_surfC(:,:,bi,bj)  CADJ STORE hFac_surfC(:,:,bi,bj)
622  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
623    CADJ &     kind = isbyte
624  CADJ STORE recip_hFacC(:,:,:,bi,bj)  CADJ STORE recip_hFacC(:,:,:,bi,bj)
625  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
626    CADJ &     kind = isbyte
627  # endif  # endif
628  #endif  #endif
629          CALL EXTERNAL_FORCING_SURF(          CALL EXTERNAL_FORCING_SURF(
# Line 452  CADJ &     = comlev1_bibj, key=itdkey, b Line 633  CADJ &     = comlev1_bibj, key=itdkey, b
633  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
634  cph-test  cph-test
635  cphCADJ STORE PmEpR(:,:,bi,bj)  cphCADJ STORE PmEpR(:,:,bi,bj)
636  cphCADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  cphCADJ &     = comlev1_bibj, key=itdkey,
637    cphCADJ &     kind = isbyte
638  # endif  # endif
639  #endif  #endif
640    
641  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
642  cph needed for KPP  cph needed for KPP
643  CADJ STORE surfaceForcingU(:,:,bi,bj)  CADJ STORE surfaceForcingU(:,:,bi,bj)
644  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
645    CADJ &     kind = isbyte
646  CADJ STORE surfaceForcingV(:,:,bi,bj)  CADJ STORE surfaceForcingV(:,:,bi,bj)
647  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
648    CADJ &     kind = isbyte
649  CADJ STORE surfaceForcingS(:,:,bi,bj)  CADJ STORE surfaceForcingS(:,:,bi,bj)
650  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
651    CADJ &     kind = isbyte
652  CADJ STORE surfaceForcingT(:,:,bi,bj)  CADJ STORE surfaceForcingT(:,:,bi,bj)
653  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
654    CADJ &     kind = isbyte
655  CADJ STORE surfaceForcingTice(:,:,bi,bj)  CADJ STORE surfaceForcingTice(:,:,bi,bj)
656  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
657  #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 )  
658  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
         ENDIF  
   
 #endif  /* ALLOW_GMREDI */  
659    
660  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
661  C--     Compute KPP mixing coefficients  C--     Compute KPP mixing coefficients
# Line 512  C--     Compute KPP mixing coefficients Line 664  C--     Compute KPP mixing coefficients
664            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
665       &     CALL DEBUG_CALL('KPP_CALC',myThid)       &     CALL DEBUG_CALL('KPP_CALC',myThid)
666  #endif  #endif
667              CALL TIMER_START('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
668            CALL KPP_CALC(            CALL KPP_CALC(
669       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
670              CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
671  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
672          ELSE          ELSE
673            CALL KPP_CALC_DUMMY(            CALL KPP_CALC_DUMMY(
674       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
675  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
676          ENDIF          ENDIF
677    
# Line 548  C--     Compute MY82 mixing coefficients Line 702  C--     Compute MY82 mixing coefficients
702  #endif /* ALLOW_MY82 */  #endif /* ALLOW_MY82 */
703    
704  #ifdef  ALLOW_GGL90  #ifdef  ALLOW_GGL90
705    #ifdef ALLOW_AUTODIFF_TAMC
706    CADJ STORE GGL90TKE (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
707    CADJ &     kind = isbyte
708    #endif /* ALLOW_AUTODIFF_TAMC */
709  C--     Compute GGL90 mixing coefficients  C--     Compute GGL90 mixing coefficients
710          IF (useGGL90) THEN          IF (useGGL90) THEN
711  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
712            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
713       &     CALL DEBUG_CALL('GGL90_CALC',myThid)       &     CALL DEBUG_CALL('GGL90_CALC',myThid)
714  #endif  #endif
715              CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
716            CALL GGL90_CALC(            CALL GGL90_CALC(
717       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
718              CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
719          ENDIF          ENDIF
720  #endif /* ALLOW_GGL90 */  #endif /* ALLOW_GGL90 */
721    
# Line 569  C--     Compute GGL90 mixing coefficient Line 729  C--     Compute GGL90 mixing coefficient
729          ENDIF          ENDIF
730  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
731    
732  #ifndef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_GMREDI
733  C---  if fluid Is Water: end  #ifdef ALLOW_AUTODIFF_TAMC
734          ENDIF  # ifndef GM_EXCLUDE_CLIPPING
735  #endif  cph storing here is needed only for one GMREDI_OPTIONS:
736    cph define GM_BOLUS_ADVEC
737    cph keep it although TAF says you dont need to.
738    cph but I have avoided the #ifdef for now, in case more things change
739    CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey,
740    CADJ &     kind = isbyte
741    CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey,
742    CADJ &     kind = isbyte
743    CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey,
744    CADJ &     kind = isbyte
745    # endif
746    #endif /* ALLOW_AUTODIFF_TAMC */
747    
748  #ifdef  ALLOW_OBCS  C--     Calculate iso-neutral slopes for the GM/Redi parameterisation
749  C--     Calculate future values on open boundaries          IF (useGMRedi) THEN
         IF (useOBCS) THEN  
750  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
751            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
752       &     CALL DEBUG_CALL('OBCS_CALC',myThid)       &     CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
753  #endif  #endif
754            CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,            CALL GMREDI_CALC_TENSOR(
755       I            uVel, vVel, wVel, theta, salt,       I             iMin, iMax, jMin, jMax,
756       I            myThid )       I             sigmaX, sigmaY, sigmaR,
757         I             bi, bj, myTime, myIter, myThid )
758    #ifdef ALLOW_AUTODIFF_TAMC
759            ELSE
760              CALL GMREDI_CALC_TENSOR_DUMMY(
761         I             iMin, iMax, jMin, jMax,
762         I             sigmaX, sigmaY, sigmaR,
763         I             bi, bj, myTime, myIter, myThid )
764    #endif /* ALLOW_AUTODIFF_TAMC */
765          ENDIF          ENDIF
766  #endif  /* ALLOW_OBCS */  #endif /* ALLOW_GMREDI */
767    
768    #ifdef ALLOW_DOWN_SLOPE
769            IF ( useDOWN_SLOPE ) THEN
770    C--     Calculate Downsloping Flow for Down_Slope parameterization
771             IF ( usingPCoords ) THEN
772              CALL DWNSLP_CALC_FLOW(
773         I                bi, bj, kSurfC, rhoInSitu,
774         I                myTime, myIter, myThid )
775             ELSE
776              CALL DWNSLP_CALC_FLOW(
777         I                bi, bj, kLowC, rhoInSitu,
778         I                myTime, myIter, myThid )
779             ENDIF
780            ENDIF
781    #endif /* ALLOW_DOWN_SLOPE */
782    
783    #ifndef ALLOW_AUTODIFF_TAMC
784    C---  if fluid Is Water: end
785            ENDIF
786    #endif
787    
788  C--   end bi,bj loops.  C--   end bi,bj loops.
789         ENDDO         ENDDO
790        ENDDO        ENDDO
791    
792    #ifdef  ALLOW_KPP
793          IF (useKPP) THEN
794            CALL KPP_DO_EXCH( myThid )
795          ENDIF
796    #endif  /* ALLOW_KPP */
797    
798  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
799        IF ( fluidIsWater .AND. useDiagnostics ) THEN        IF ( fluidIsWater .AND. useDiagnostics ) THEN
800            CALL DIAGS_RHO_G(
801         I                    rhoInSitu, uVel, vVel,
802         I                    myTime, myIter, myThid )
803          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
804        ENDIF        ENDIF
805        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
806          CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',          CALL DIAGNOSTICS_FILL( IVDConvCount, 'CONVADJ ',
807       &                         0, Nr, 0, 1, 1, myThid )       &                               0, Nr, 0, 1, 1, myThid )
808        ENDIF        ENDIF
809  #endif  #endif
810    

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

  ViewVC Help
Powered by ViewVC 1.1.22