/[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.16 by jmc, Tue Dec 14 04:36:33 2004 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 35  C     == Global variables === Line 38  C     == Global variables ===
38  #include "PARAMS.h"  #include "PARAMS.h"
39  #include "DYNVARS.h"  #include "DYNVARS.h"
40  #include "GRID.h"  #include "GRID.h"
41  c #include "GAD.h"  #ifdef ALLOW_TIMEAVE
42  c #ifdef ALLOW_PTRACERS  #include "TIMEAVE_STATV.h"
43  c #include "PTRACERS_SIZE.h"  #endif
44  c #include "PTRACERS.h"  #if defined (ALLOW_BALANCE_FLUXES) && !(defined ALLOW_AUTODIFF_TAMC)
45  c #endif  #include "FFIELDS.h"
46  c #ifdef ALLOW_TIMEAVE  #endif
 c #include "TIMEAVE_STATV.h"  
 c #endif  
47    
48  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
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 58  c #endif Line 60  c #endif
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    
75  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
76  C     == Routine arguments ==  C     == Routine arguments ==
77  C     myTime - Current time in simulation  C     myTime :: Current time in simulation
78  C     myIter - Current iteration number in simulation  C     myIter :: Current iteration number in simulation
79  C     myThid - Thread number for this instance of the routine.  C     myThid :: Thread number for this instance of the routine.
80        _RL myTime        _RL myTime
81        INTEGER myIter        INTEGER myIter
82        INTEGER myThid        INTEGER myThid
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     useVariableK   = T when vertical diffusion is not constant  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  C     bi, bj        :: tile indices
90  C     k, kup,        - Index for layer above and below. kup and kDown  C     i,j,k         :: loop indices
91  C     kDown, km1       are switched with layer to be the appropriate        _RL rhoKp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
92  C                      index into fVerTerm.        _RL rhoKm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
93        _RL rhokm1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoK    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
       _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)
       _RL kp1Msk  
       LOGICAL useVariableK  
97        INTEGER iMin, iMax        INTEGER iMin, iMax
98        INTEGER jMin, jMax        INTEGER jMin, jMax
99        INTEGER bi, bj        INTEGER bi, bj
100        INTEGER i, j        INTEGER i, j, k
101        INTEGER k, km1, kup, kDown        INTEGER doDiagsRho
102        INTEGER iTracer, ip  #ifdef ALLOW_DIAGNOSTICS
103          LOGICAL  DIAGNOSTICS_IS_ON
104          EXTERNAL DIAGNOSTICS_IS_ON
105    #endif /* ALLOW_DIAGNOSTICS */
106    
107  CEOP  CEOP
108    
# Line 104  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  #ifdef ALLOW_THSICE        doDiagsRho = 0
120    #ifdef ALLOW_DIAGNOSTICS
121          IF ( useDiagnostics .AND. fluidIsWater ) THEN
122            IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.
123         &       DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.
124         &       DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.
125         &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.
126         &       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
132    #endif /* ALLOW_DIAGNOSTICS */
133    
134    #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 122  C       and modify forcing terms includi Line 200  C       and modify forcing terms includi
200        ENDIF        ENDIF
201  #endif /* ALLOW_THSICE */  #endif /* ALLOW_THSICE */
202    
203    #ifdef ALLOW_SHELFICE
204          IF ( useShelfIce .AND. fluidIsWater ) THEN
205    #ifdef ALLOW_DEBUG
206            IF ( debugLevel .GE. debLevB )
207         &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
208    #endif
209    C     compute temperature and (virtual) salt flux at the
210    C     shelf-ice ocean interface
211           CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
212         &       myThid)
213           CALL SHELFICE_THERMODYNAMICS( myTime, myIter, myThid )
214           CALL TIMER_STOP( 'SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
215         &      myThid)
216          ENDIF
217    #endif /* ALLOW_SHELFICE */
218    
219  C--   Freeze water at the surface  C--   Freeze water at the surface
220  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
221  CADJ STORE theta = comlev1, key = ikey_dynamics  CADJ STORE theta = comlev1, key = ikey_dynamics
# Line 132  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 164  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 174  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 210  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 229  CADJ &     = comlev1_bibj, key=itdkey, b Line 340  CADJ &     = comlev1_bibj, key=itdkey, b
340  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
341  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
342  # endif  # endif
 # ifdef EXACT_CONSERV  
 CADJ STORE pmepr(:,:,bi,bj)   = comlev1_bibj, key=itdkey, byte=isbyte  
 # endif  
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 246  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)
363  c         IF ( k.GT.1 .AND. (useGMRedi.OR.ivdc_kappa.NE.0.) ) THEN            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
364            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.) ) 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 280  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 309  c ==> should use sigmaR !!! Line 417  c ==> should use sigmaR !!!
417       I        myTime, myIter, myThid)       I        myTime, myIter, myThid)
418            ENDIF            ENDIF
419    
420    #ifdef ALLOW_DIAGNOSTICS
421              IF ( doDiagsRho.GE.2 ) THEN
422                CALL DIAGS_RHO( k, bi, bj,
423         I                      rhoK, rhoKm1,
424         I                      myTime, myIter, myThid)
425              ENDIF
426    #endif
427    
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
450          IF ( useDiagnostics .AND.          IF ( doDiagsRho.GE.1 ) THEN
      &       (useGMRedi .OR. ivdc_kappa.NE.0.) ) 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  
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           CALL EXTERNAL_FORCING_SURF(  #ifdef ALLOW_AUTODIFF_TAMC
463    CADJ STORE EmPmR(:,:,bi,bj)
464    CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
465    # ifdef EXACT_CONSERV
466    CADJ STORE PmEpR(:,:,bi,bj)
467    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
476            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 361  CADJ STORE surfaceForcingT(:,:,bi,bj) Line 496  CADJ STORE surfaceForcingT(:,:,bi,bj)
496  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
497  CADJ STORE surfaceForcingTice(:,:,bi,bj)  CADJ STORE surfaceForcingTice(:,:,bi,bj)
498  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
   
 #endif /* ALLOW_AUTODIFF_TAMC */  
   
 #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 )  
499  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
         ENDIF  
   
 #endif  /* ALLOW_GMREDI */  
500    
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 421  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 433  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 445  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 453  C--     Compute GGL90 mixing coefficient Line 552  C--     Compute GGL90 mixing coefficient
552          ENDIF          ENDIF
553  #endif /* ALLOW_GGL90 */  #endif /* ALLOW_GGL90 */
554    
555    #ifdef ALLOW_TIMEAVE
556            IF ( taveFreq.GT. 0. _d 0 ) THEN
557              CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
558            ENDIF
559            IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
560              CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,
561         I                           Nr, deltaTclock, bi, bj, myThid)
562            ENDIF
563    #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
633          IF ( fluidIsWater .AND. useDiagnostics ) THEN
634            CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
635          ENDIF
636          IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
637            CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',
638         &                         0, Nr, 0, 1, 1, myThid )
639          ENDIF
640    #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.16  
changed lines
  Added in v.1.62

  ViewVC Help
Powered by ViewVC 1.1.22