/[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.24 by mlosch, Fri Mar 3 10:20:34 2006 UTC revision 1.62 by heimbach, Tue Apr 22 15:18:00 2008 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 19  C     !INTERFACE: Line 22  C     !INTERFACE:
22        SUBROUTINE DO_OCEANIC_PHYS(myTime, myIter, myThid)        SUBROUTINE DO_OCEANIC_PHYS(myTime, myIter, myThid)
23  C     !DESCRIPTION: \bv  C     !DESCRIPTION: \bv
24  C     *==========================================================*  C     *==========================================================*
25  C     | SUBROUTINE DO_OCEANIC_PHYS                                  C     | SUBROUTINE DO_OCEANIC_PHYS
26  C     | o Controlling routine for oceanic physics and  C     | o Controlling routine for oceanic physics and
27  C     |   parameterization  C     |   parameterization
28  C     *==========================================================*  C     *==========================================================*
29  C     | o originally, part of S/R thermodynamics  C     | o originally, part of S/R thermodynamics
# Line 46  C     == Global variables === Line 49  C     == Global variables ===
49  # include "tamc.h"  # include "tamc.h"
50  # include "tamc_keys.h"  # include "tamc_keys.h"
51  # include "FFIELDS.h"  # include "FFIELDS.h"
52    # include "SURFACE.h"
53  # include "EOS.h"  # include "EOS.h"
54  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
55  #  include "KPP.h"  #  include "KPP.h"
# Line 56  C     == Global variables === Line 60  C     == Global variables ===
60  # ifdef ALLOW_EBM  # ifdef ALLOW_EBM
61  #  include "EBM.h"  #  include "EBM.h"
62  # endif  # endif
63  # ifdef EXACT_CONSERV  # ifdef ALLOW_EXF
64  #  include "SURFACE.h"  #  include "ctrl.h"
65    #  include "EXF_FIELDS.h"
66    #  ifdef ALLOW_BULKFORMULAE
67    #   include "EXF_CONSTANTS.h"
68    #  endif
69    # endif
70    # ifdef ALLOW_SEAICE
71    #  include "SEAICE.h"
72  # endif  # endif
73  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
74    
# Line 72  C     myThid :: Thread number for this i Line 83  C     myThid :: Thread number for this i
83    
84  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
85  C     == Local variables  C     == Local variables
86  C     rhoK, rhoKM1  :: Density at current level, and level above  C     rhoK, rhoKm1  :: Density at current level, and level above
87  C     iMin, iMax    :: Ranges and sub-block indices on which calculations  C     iMin, iMax    :: Ranges and sub-block indices on which calculations
88  C     jMin, jMax       are applied.  C     jMin, jMax       are applied.
89  C     bi, bj        :: tile indices  C     bi, bj        :: tile indices
90  C     i,j,k         :: loop indices  C     i,j,k         :: loop indices
91        _RL rhokm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
92        _RL rhok    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
93          _RL rhoK    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
94        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
95        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
96        _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 112  C--   dummy statement to end declaration
112  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
113    
114  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
115        IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
116       &    CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)       &     CALL DEBUG_ENTER('DO_OCEANIC_PHYS',myThid)
117  #endif  #endif
118    
119        doDiagsRho = 0        doDiagsRho = 0
120  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
121        IF ( useDiagnostics .AND. fluidIsWater ) THEN        IF ( useDiagnostics .AND. fluidIsWater ) THEN
         IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) ) doDiagsRho = 1  
122          IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.
123       &       DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.       &       DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.
124       &       DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.       &       DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.
125       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.
126       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) ) doDiagsRho = 2       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) ) doDiagsRho = 2
127            IF ( doDiagsRho.EQ.0 .AND.
128         &       DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) ) doDiagsRho = 1
129            IF ( doDiagsRho.EQ.0 .AND.
130         &       DIAGNOSTICS_IS_ON('DRHODR  ',myThid) ) doDiagsRho = 1
131        ENDIF        ENDIF
132  #endif /* ALLOW_DIAGNOSTICS */  #endif /* ALLOW_DIAGNOSTICS */
133    
134  #ifdef ALLOW_THSICE  #ifdef ALLOW_SEAICE
135    C--   Call sea ice model to compute forcing/external data fields.  In
136    C     addition to computing prognostic sea-ice variables and diagnosing the
137    C     forcing/external data fields that drive the ocean model, SEAICE_MODEL
138    C     also sets theta to the freezing point under sea-ice.  The implied
139    C     surface heat flux is then stored in variable surfaceTendencyTice,
140    C     which is needed by KPP package (kpp_calc.F and kpp_transport_t.F)
141    C     to diagnose surface buoyancy fluxes and for the non-local transport
142    C     term.  Because this call precedes model thermodynamics, temperature
143    C     under sea-ice may not be "exactly" at the freezing point by the time
144    C     theta is dumped or time-averaged.
145    # ifndef ALLOW_ECCO_PRODUCTION
146          IF ( useSEAICE ) THEN
147    # endif
148    # ifdef ALLOW_AUTODIFF_TAMC
149    CADJ STORE atemp,aqh,precip    = comlev1, key = ikey_dynamics
150    CADJ STORE swdown,lwdown       = comlev1, key = ikey_dynamics
151    cph# ifdef EXF_READ_EVAP
152    CADJ STORE evap                = comlev1, key = ikey_dynamics
153    cph# endif
154    CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics
155    #  ifdef SEAICE_ALLOW_DYNAMICS
156    CADJ STORE uice                = comlev1, key = ikey_dynamics
157    CADJ STORE vice                = comlev1, key = ikey_dynamics
158    #   ifdef SEAICE_ALLOW_EVP
159    CADJ STORE seaice_sigma1       = comlev1, key = ikey_dynamics
160    CADJ STORE seaice_sigma2       = comlev1, key = ikey_dynamics
161    CADJ STORE seaice_sigma12      = comlev1, key = ikey_dynamics
162    #   endif
163    #  endif
164    #  ifdef SEAICE_SALINITY
165    CADJ STORE salt                = comlev1, key = ikey_dynamics
166    #  endif
167    #  ifdef ATMOSPHERIC_LOADING
168    CADJ STORE siceload            = comlev1, key = ikey_dynamics
169    #  endif
170    #  ifdef NONLIN_FRSURF
171    CADJ STORE recip_hfacc         = comlev1, key = ikey_dynamics
172    #  endif
173    # endif
174    # ifdef ALLOW_DEBUG
175            IF ( debugLevel .GE. debLevB )
176         &    CALL DEBUG_CALL('SEAICE_MODEL',myThid)
177    # endif
178            CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
179            CALL SEAICE_MODEL( myTime, myIter, myThid )
180            CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
181    # ifdef ALLOW_COST
182            CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
183    # endif
184    # ifndef ALLOW_ECCO_PRODUCTION
185          ENDIF
186    # endif
187    #endif /* ALLOW_SEAICE */
188    
189    #if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D)
190        IF ( useThSIce .AND. fluidIsWater ) THEN        IF ( useThSIce .AND. fluidIsWater ) THEN
191  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
192          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
# Line 136  C       and modify forcing terms includi Line 206  C       and modify forcing terms includi
206          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
207       &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)       &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
208  #endif  #endif
209  C     compute temperature and (virtual) salt flux at the  C     compute temperature and (virtual) salt flux at the
210  C     shelf-ice ocean interface  C     shelf-ice ocean interface
211         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
212       &       myThid)       &       myThid)
# Line 156  CADJ STORE theta = comlev1, key = ikey_d Line 226  CADJ STORE theta = comlev1, key = ikey_d
226          CALL FREEZE_SURFACE(  myTime, myIter, myThid )          CALL FREEZE_SURFACE(  myTime, myIter, myThid )
227        ENDIF        ENDIF
228    
229  #ifdef COMPONENT_MODULE  #ifdef ALLOW_OCN_COMPON_INTERF
 # ifndef ALLOW_AIM  
230  C--    Apply imported data (from coupled interface) to forcing fields  C--    Apply imported data (from coupled interface) to forcing fields
231  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 ?)
232         IF ( useCoupler ) THEN        IF ( useCoupler ) THEN
233           CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )           CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
234         ENDIF        ENDIF
235  # endif  #endif /* ALLOW_OCN_COMPON_INTERF */
236  #endif /* COMPONENT_MODULE */  
237    #ifdef ALLOW_BALANCE_FLUXES
238    C     balance fluxes
239          IF ( balanceEmPmR )
240         &        CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,
241         &        'EmPmR', myTime, myThid )
242          IF ( balanceQnet )
243         &        CALL REMOVE_MEAN_RS( 1, Qnet,  maskH, maskH, rA, drF,
244         &        'Qnet ', myTime, myThid )
245    #endif /* ALLOW_BALANCE_FLUXES */
246    
247  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
248  C--   HPF directive to help TAMC  C--   HPF directive to help TAMC
# Line 188  CHPF$ INDEPENDENT Line 266  CHPF$ INDEPENDENT
266            itdkey = (act1 + 1) + act2*max1            itdkey = (act1 + 1) + act2*max1
267       &                      + act3*max1*max2       &                      + act3*max1*max2
268       &                      + act4*max1*max2*max3       &                      + act4*max1*max2*max3
269    #else  /* ALLOW_AUTODIFF_TAMC */
270    C     if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
271    C     and all vertical mixing schemes, but keep OBCS_CALC
272            IF ( fluidIsWater ) THEN
273  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
274    
275  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 198  C     uninitialised but inert locations. Line 280  C     uninitialised but inert locations.
280    
281          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
282           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
283            rhok   (i,j)   = 0. _d 0            rhoK   (i,j)   = 0. _d 0
284            rhoKM1 (i,j)   = 0. _d 0            rhoKm1 (i,j)   = 0. _d 0
285              rhoKp1 (i,j)   = 0. _d 0
286           ENDDO           ENDDO
287          ENDDO          ENDDO
288    
# Line 234  cph although some of these are re-initia Line 317  cph although some of these are re-initia
317             VisbeckK(i,j,bi,bj)   = 0. _d 0             VisbeckK(i,j,bi,bj)   = 0. _d 0
318  #  endif  #  endif
319  # endif /* ALLOW_GMREDI */  # endif /* ALLOW_GMREDI */
320    # ifdef ALLOW_KPP
321               KPPdiffKzS(i,j,k,bi,bj)  = 0. _d 0
322               KPPdiffKzT(i,j,k,bi,bj)  = 0. _d 0
323    # endif /* ALLOW_KPP */
324  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
325            ENDDO            ENDDO
326           ENDDO           ENDDO
# Line 256  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_ Line 343  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_
343  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
344    
345  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
346          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
347       &    CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)       &    CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)
348  #endif  #endif
349    
# Line 267  C--     Start of diagnostic loop Line 354  C--     Start of diagnostic loop
354  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?
355  C? Do we still need this?  C? Do we still need this?
356  cph kkey formula corrected.  cph kkey formula corrected.
357  cph Needed for rhok, rhokm1, in the case useGMREDI.  cph Needed for rhoK, rhoKm1, in the case useGMREDI.
358           kkey = (itdkey-1)*Nr + k           kkey = (itdkey-1)*Nr + k
359  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
360    
361  C--       Calculate gradients of potential density for isoneutral  C--       Calculate gradients of potential density for isoneutral
362  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  
363            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
364       &                   .OR. doDiagsRho.GE.1 ) THEN       &         .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
365  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
366              IF ( debugLevel .GE. debLevB )              IF ( debugLevel .GE. debLevB )
367       &       CALL DEBUG_CALL('FIND_RHO',myThid)       &       CALL DEBUG_CALL('FIND_RHO',myThid)
368  #endif  #endif
369  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 302  CADJ STORE salt (:,:,k-1,bi,bj) = comlev Line 388  CADJ STORE salt (:,:,k-1,bi,bj) = comlev
388       I        myThid )       I        myThid )
389              ENDIF              ENDIF
390  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
391              IF ( debugLevel .GE. debLevB )              IF ( debugLevel .GE. debLevB )
392       &       CALL DEBUG_CALL('GRAD_SIGMA',myThid)       &       CALL DEBUG_CALL('GRAD_SIGMA',myThid)
393  #endif  #endif
394    cph Avoid variable aliasing for adjoint !!!
395                DO j=jMin,jMax
396                 DO i=iMin,iMax
397                  rhoKp1(i,j) = rhoK(i,j)
398                 ENDDO
399                ENDDO
400              CALL GRAD_SIGMA(              CALL GRAD_SIGMA(
401       I             bi, bj, iMin, iMax, jMin, jMax, k,       I             bi, bj, iMin, iMax, jMin, jMax, k,
402       I             rhoK, rhoKm1, rhoK,       I             rhoK, rhoKm1, rhoKp1,
403       O             sigmaX, sigmaY, sigmaR,       O             sigmaX, sigmaY, sigmaR,
404       I             myThid )       I             myThid )
405            ENDIF            ENDIF
406    
 #ifdef ALLOW_AUTODIFF_TAMC  
 ctest# ifndef GM_EXCLUDE_CLIPPING  
 CADJ STORE rhok   (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  
 ctest# endif  
 CADJ STORE rhokm1 (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  
 #endif /* ALLOW_AUTODIFF_TAMC */  
407  C--       Implicit Vertical Diffusion for Convection  C--       Implicit Vertical Diffusion for Convection
408  c ==> should use sigmaR !!!  c ==> should use sigmaR !!!
409            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
410  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
411              IF ( debugLevel .GE. debLevB )              IF ( debugLevel .GE. debLevB )
412       &       CALL DEBUG_CALL('CALC_IVDC',myThid)       &       CALL DEBUG_CALL('CALC_IVDC',myThid)
413  #endif  #endif
414              CALL CALC_IVDC(              CALL CALC_IVDC(
# Line 342  c ==> should use sigmaR !!! Line 428  c ==> should use sigmaR !!!
428  C--     end of diagnostic k loop (Nr:1)  C--     end of diagnostic k loop (Nr:1)
429          ENDDO          ENDDO
430    
431    #ifdef ALLOW_AUTODIFF_TAMC
432    CADJ STORE IVDConvCount(:,:,:,bi,bj)
433    CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
434    #endif
435    
436    C--     Diagnose Mixed Layer Depth:
437            IF ( useGMRedi .OR. doDiagsRho.GE.1 ) THEN
438              CALL CALC_OCE_MXLAYER( rhoK, sigmaR,
439         &              bi, bj, myTime, myIter, myThid )
440            ENDIF
441    
442    #ifdef ALLOW_SALT_PLUME
443            IF ( useSALT_PLUME ) THEN
444              CALL SALT_PLUME_CALC_DEPTH( rhoK, sigmaR,
445         &              bi, bj, myTime, myIter, myThid )
446            ENDIF
447    #endif /* ALLOW_SALT_PLUME */
448    
449  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
 c       IF ( useDiagnostics .AND.  
 c    &       (useGMRedi .OR. ivdc_kappa.NE.0.) ) THEN  
450          IF ( doDiagsRho.GE.1 ) THEN          IF ( doDiagsRho.GE.1 ) THEN
451            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,
452       &         2, bi, bj, myThid)       &         2, bi, bj, myThid)
453          ENDIF          ENDIF
454  #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 */  
455    
 #ifndef ALLOW_AUTODIFF_TAMC  
         IF ( fluidIsWater ) THEN  
 #endif  
 #ifdef ALLOW_BALANCE_FLUXES  
 C     balance fluxes  
          IF ( balanceEmPmR )  
      &        CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,  
      &        'EmPmR', myTime, myThid )  
          IF ( balanceQnet )  
      &        CALL REMOVE_MEAN_RS( 1, Qnet,  maskH, maskH, rA, drF,  
      &        'Qnet ', myTime, myThid )  
 #endif /* ALLOW_BALANCE_FLUXES */  
456  C--     Determines forcing terms based on external fields  C--     Determines forcing terms based on external fields
457  C       relaxation terms, etc.  C       relaxation terms, etc.
458  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
459          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
460       &    CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)       &    CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
461  #endif  #endif
462  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
463  CADJ STORE EmPmR(:,:,bi,bj)  CADJ STORE EmPmR(:,:,bi,bj)
464  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
465    # ifdef EXACT_CONSERV
466  CADJ STORE PmEpR(:,:,bi,bj)  CADJ STORE PmEpR(:,:,bi,bj)
467  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
468    # endif
469    # ifdef NONLIN_FRSURF
470    CADJ STORE hFac_surfC(:,:,bi,bj)
471    CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
472    CADJ STORE recip_hFacC(:,:,:,bi,bj)
473    CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
474    # endif
475  #endif  #endif
476           CALL EXTERNAL_FORCING_SURF(          CALL EXTERNAL_FORCING_SURF(
477       I             bi, bj, iMin, iMax, jMin, jMax,       I             bi, bj, iMin, iMax, jMin, jMax,
478       I             myTime, myIter, myThid )       I             myTime, myIter, myThid )
479  #ifndef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
480          ENDIF  # ifdef EXACT_CONSERV
481    cph-test
482    cphCADJ STORE PmEpR(:,:,bi,bj)
483    cphCADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
484    # endif
485  #endif  #endif
486    
487  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 409  CADJ STORE surfaceForcingTice(:,:,bi,bj) Line 498  CADJ STORE surfaceForcingTice(:,:,bi,bj)
498  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
499  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
500    
 #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 )  
 #endif /* ALLOW_AUTODIFF_TAMC */  
         ENDIF  
   
 #endif  /* ALLOW_GMREDI */  
   
501  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
502  C--     Compute KPP mixing coefficients  C--     Compute KPP mixing coefficients
503          IF (useKPP) THEN          IF (useKPP) THEN
504  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
505            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
506       &     CALL DEBUG_CALL('KPP_CALC',myThid)       &     CALL DEBUG_CALL('KPP_CALC',myThid)
507  #endif  #endif
508            CALL KPP_CALC(            CALL KPP_CALC(
509       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
510  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
511          ELSE          ELSE
512            CALL KPP_CALC_DUMMY(            CALL KPP_CALC_DUMMY(
513       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
514  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
515          ENDIF          ENDIF
516    
# Line 466  C--     Compute KPP mixing coefficients Line 520  C--     Compute KPP mixing coefficients
520  C--     Compute PP81 mixing coefficients  C--     Compute PP81 mixing coefficients
521          IF (usePP81) THEN          IF (usePP81) THEN
522  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
523            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
524       &     CALL DEBUG_CALL('PP81_CALC',myThid)       &     CALL DEBUG_CALL('PP81_CALC',myThid)
525  #endif  #endif
526            CALL PP81_CALC(            CALL PP81_CALC(
# Line 478  C--     Compute PP81 mixing coefficients Line 532  C--     Compute PP81 mixing coefficients
532  C--     Compute MY82 mixing coefficients  C--     Compute MY82 mixing coefficients
533          IF (useMY82) THEN          IF (useMY82) THEN
534  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
535            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
536       &     CALL DEBUG_CALL('MY82_CALC',myThid)       &     CALL DEBUG_CALL('MY82_CALC',myThid)
537  #endif  #endif
538            CALL MY82_CALC(            CALL MY82_CALC(
# Line 490  C--     Compute MY82 mixing coefficients Line 544  C--     Compute MY82 mixing coefficients
544  C--     Compute GGL90 mixing coefficients  C--     Compute GGL90 mixing coefficients
545          IF (useGGL90) THEN          IF (useGGL90) THEN
546  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
547            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
548       &     CALL DEBUG_CALL('GGL90_CALC',myThid)       &     CALL DEBUG_CALL('GGL90_CALC',myThid)
549  #endif  #endif
550            CALL GGL90_CALC(            CALL GGL90_CALC(
# Line 499  C--     Compute GGL90 mixing coefficient Line 553  C--     Compute GGL90 mixing coefficient
553  #endif /* ALLOW_GGL90 */  #endif /* ALLOW_GGL90 */
554    
555  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
556          IF ( taveFreq.GT. 0. _d 0 .AND. fluidIsWater ) THEN          IF ( taveFreq.GT. 0. _d 0 ) THEN
557            CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)            CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
558          ENDIF          ENDIF
559          IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN          IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
# Line 508  C--     Compute GGL90 mixing coefficient Line 562  C--     Compute GGL90 mixing coefficient
562          ENDIF          ENDIF
563  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
564    
565    #ifdef  ALLOW_GMREDI
566    #ifdef ALLOW_AUTODIFF_TAMC
567    # ifndef GM_EXCLUDE_CLIPPING
568    cph storing here is needed only for one GMREDI_OPTIONS:
569    cph define GM_BOLUS_ADVEC
570    cph keep it although TAF says you dont need to.
571    cph but I've avoided the #ifdef for now, in case more things change
572    CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte
573    CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte
574    CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte
575    # endif
576    #endif /* ALLOW_AUTODIFF_TAMC */
577    
578    C--     Calculate iso-neutral slopes for the GM/Redi parameterisation
579            IF (useGMRedi) THEN
580    #ifdef ALLOW_DEBUG
581              IF ( debugLevel .GE. debLevB )
582         &     CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
583    #endif
584              CALL GMREDI_CALC_TENSOR(
585    c    I             bi, bj, iMin, iMax, jMin, jMax,
586    c    I             sigmaX, sigmaY, sigmaR,
587    c    I             myThid )
588         I             iMin, iMax, jMin, jMax,
589         I             sigmaX, sigmaY, sigmaR,
590         I             bi, bj, myTime, myIter, myThid )
591    #ifdef ALLOW_AUTODIFF_TAMC
592            ELSE
593              CALL GMREDI_CALC_TENSOR_DUMMY(
594    c    I             bi, bj, iMin, iMax, jMin, jMax,
595    c    I             sigmaX, sigmaY, sigmaR,
596    c    I             myThid )
597         I             iMin, iMax, jMin, jMax,
598         I             sigmaX, sigmaY, sigmaR,
599         I             bi, bj, myTime, myIter, myThid )
600    #endif /* ALLOW_AUTODIFF_TAMC */
601            ENDIF
602    #endif  /* ALLOW_GMREDI */
603    
604    #ifndef ALLOW_AUTODIFF_TAMC
605    C---  if fluid Is Water: end
606            ENDIF
607    #endif
608    
609    #ifdef  ALLOW_OBCS
610    C--     Calculate future values on open boundaries
611            IF (useOBCS) THEN
612    #ifdef ALLOW_DEBUG
613              IF ( debugLevel .GE. debLevB )
614         &     CALL DEBUG_CALL('OBCS_CALC',myThid)
615    #endif
616              CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,
617         I            uVel, vVel, wVel, theta, salt,
618         I            myThid )
619            ENDIF
620    #endif  /* ALLOW_OBCS */
621    
622  C--   end bi,bj loops.  C--   end bi,bj loops.
623         ENDDO         ENDDO
624        ENDDO        ENDDO
625    
626    #ifdef  ALLOW_KPP
627          IF (useKPP) THEN
628            CALL KPP_DO_EXCH( myThid )
629          ENDIF
630    #endif  /* ALLOW_KPP */
631    
632  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
633        IF ( fluidIsWater .AND. useDiagnostics ) THEN        IF ( fluidIsWater .AND. useDiagnostics ) THEN
634          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
# Line 523  C--   end bi,bj loops. Line 640  C--   end bi,bj loops.
640  #endif  #endif
641    
642  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
643           IF ( debugLevel .GE. debLevB )        IF ( debugLevel .GE. debLevB )
644       &    CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)       &     CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid)
645  #endif  #endif
646    
647        RETURN        RETURN

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.62

  ViewVC Help
Powered by ViewVC 1.1.22