/[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.31 by heimbach, Sun Oct 22 01:11:44 2006 UTC revision 1.60 by dimitri, Wed Nov 28 00:18:17 2007 UTC
# Line 49  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 59  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
 # ifdef EXACT_CONSERV  
 #  include "SURFACE.h"  
 # endif  
63  # ifdef ALLOW_EXF  # ifdef ALLOW_EXF
64  #  include "ctrl.h"  #  include "ctrl.h"
65  #  include "exf_fields.h"  #  include "EXF_FIELDS.h"
 #  include "exf_clim_fields.h"  
66  #  ifdef ALLOW_BULKFORMULAE  #  ifdef ALLOW_BULKFORMULAE
67  #   include "exf_constants.h"  #   include "EXF_CONSTANTS.h"
68  #  endif  #  endif
69  # endif  # endif
70  # ifdef ALLOW_SEAICE  # ifdef ALLOW_SEAICE
# Line 86  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 rhokp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
92        _RL rhokm1  (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)        _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 118  C--   dummy statement to end declaration Line 115  C--   dummy statement to end declaration
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    
# Line 144  C     under sea-ice may not be "exactly" Line 144  C     under sea-ice may not be "exactly"
144  C     theta is dumped or time-averaged.  C     theta is dumped or time-averaged.
145        IF ( useSEAICE ) THEN        IF ( useSEAICE ) THEN
146  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
147  CADJ STORE qnet,qsw            = comlev1, key = ikey_dynamics  CADJ STORE atemp,aqh,precip    = comlev1, key = ikey_dynamics
148  CADJ STORE aqh,precip,swdown   = comlev1, key = ikey_dynamics  CADJ STORE swdown,lwdown       = comlev1, key = ikey_dynamics
149  CADJ STORE theta               = comlev1, key = ikey_dynamics  cph# ifdef EXF_READ_EVAP
150  # ifdef SEAICE_ALLOW_DYNAMICS  CADJ STORE evap                = comlev1, key = ikey_dynamics
151    cph# endif
152  CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics  CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics
153    # ifdef SEAICE_ALLOW_EVP
154    CADJ STORE seaice_sigma1       = comlev1, key = ikey_dynamics
155    CADJ STORE seaice_sigma2       = comlev1, key = ikey_dynamics
156    CADJ STORE seaice_sigma12      = comlev1, key = ikey_dynamics
157    # endif
158    # ifdef SEAICE_SALINITY
159    CADJ STORE salt                = comlev1, key = ikey_dynamics
160    # endif
161    # ifdef ATMOSPHERIC_LOADING
162    CADJ STORE siceload            = comlev1, key = ikey_dynamics
163    # endif
164    # ifdef NONLIN_FRSURF
165    CADJ STORE recip_hfacc         = comlev1, key = ikey_dynamics
166  # endif  # endif
167  #endif  #endif
168  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
# Line 158  CADJ STORE uvel,vvel           = comlev1 Line 172  CADJ STORE uvel,vvel           = comlev1
172          CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)          CALL TIMER_START('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
173          CALL SEAICE_MODEL( myTime, myIter, myThid )          CALL SEAICE_MODEL( myTime, myIter, myThid )
174          CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)          CALL TIMER_STOP ('SEAICE_MODEL    [DO_OCEANIC_PHYS]', myThid)
175  #ifdef ALLOW_COST_ICE  #ifdef ALLOW_COST
176          CALL COST_ICE_TEST ( myTime, myIter, myThid )          CALL SEAICE_COST_SENSI ( myTime, myIter, myThid )
177  #endif  #endif
178        ENDIF        ENDIF
179  #endif /* ALLOW_SEAICE */  #endif /* ALLOW_SEAICE */
# Line 184  C       and modify forcing terms includi Line 198  C       and modify forcing terms includi
198          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
199       &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)       &    CALL DEBUG_CALL('SHELFICE_THERMODYNAMICS',myThid)
200  #endif  #endif
201  C     compute temperature and (virtual) salt flux at the  C     compute temperature and (virtual) salt flux at the
202  C     shelf-ice ocean interface  C     shelf-ice ocean interface
203         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',         CALL TIMER_START('SHELFICE_THERMODYNAMICS [DO_OCEANIC_PHYS]',
204       &       myThid)       &       myThid)
# Line 207  CADJ STORE theta = comlev1, key = ikey_d Line 221  CADJ STORE theta = comlev1, key = ikey_d
221  #ifdef ALLOW_OCN_COMPON_INTERF  #ifdef ALLOW_OCN_COMPON_INTERF
222  C--    Apply imported data (from coupled interface) to forcing fields  C--    Apply imported data (from coupled interface) to forcing fields
223  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 ?)
224         IF ( useCoupler ) THEN        IF ( useCoupler ) THEN
225           CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )           CALL OCN_APPLY_IMPORT( .TRUE., myTime, myIter, myThid )
226         ENDIF        ENDIF
227  #endif /* ALLOW_OCN_COMPON_INTERF */  #endif /* ALLOW_OCN_COMPON_INTERF */
228    
229  #ifdef ALLOW_BALANCE_FLUXES  #ifdef ALLOW_BALANCE_FLUXES
230  C     balance fluxes  C     balance fluxes
231         IF ( balanceEmPmR )        IF ( balanceEmPmR )
232       &        CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,       &        CALL REMOVE_MEAN_RS( 1, EmPmR, maskH, maskH, rA, drF,
233       &        'EmPmR', myTime, myThid )       &        'EmPmR', myTime, myThid )
234         IF ( balanceQnet )        IF ( balanceQnet )
235       &        CALL REMOVE_MEAN_RS( 1, Qnet,  maskH, maskH, rA, drF,       &        CALL REMOVE_MEAN_RS( 1, Qnet,  maskH, maskH, rA, drF,
236       &        'Qnet ', myTime, myThid )       &        'Qnet ', myTime, myThid )
237  #endif /* ALLOW_BALANCE_FLUXES */  #endif /* ALLOW_BALANCE_FLUXES */
# Line 244  CHPF$ INDEPENDENT Line 258  CHPF$ INDEPENDENT
258            itdkey = (act1 + 1) + act2*max1            itdkey = (act1 + 1) + act2*max1
259       &                      + act3*max1*max2       &                      + act3*max1*max2
260       &                      + act4*max1*max2*max3       &                      + act4*max1*max2*max3
261    #else  /* ALLOW_AUTODIFF_TAMC */
262    C     if fluid is not water, by-pass find_rho, gmredi, surfaceForcing
263    C     and all vertical mixing schemes, but keep OBCS_CALC
264            IF ( fluidIsWater ) THEN
265  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
266    
267  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 254  C     uninitialised but inert locations. Line 272  C     uninitialised but inert locations.
272    
273          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
274           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
275            rhok   (i,j)   = 0. _d 0            rhoK   (i,j)   = 0. _d 0
276            rhoKM1 (i,j)   = 0. _d 0            rhoKm1 (i,j)   = 0. _d 0
277            rhoKP1 (i,j)   = 0. _d 0            rhoKp1 (i,j)   = 0. _d 0
278           ENDDO           ENDDO
279          ENDDO          ENDDO
280    
# Line 291  cph although some of these are re-initia Line 309  cph although some of these are re-initia
309             VisbeckK(i,j,bi,bj)   = 0. _d 0             VisbeckK(i,j,bi,bj)   = 0. _d 0
310  #  endif  #  endif
311  # endif /* ALLOW_GMREDI */  # endif /* ALLOW_GMREDI */
312    # ifdef ALLOW_KPP
313               KPPdiffKzS(i,j,k,bi,bj)  = 0. _d 0
314               KPPdiffKzT(i,j,k,bi,bj)  = 0. _d 0
315    # endif /* ALLOW_KPP */
316  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
317            ENDDO            ENDDO
318           ENDDO           ENDDO
# Line 313  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_ Line 335  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_
335  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
336    
337  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
338          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
339       &    CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)       &    CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid)
340  #endif  #endif
341    
# Line 324  C--     Start of diagnostic loop Line 346  C--     Start of diagnostic loop
346  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?
347  C? Do we still need this?  C? Do we still need this?
348  cph kkey formula corrected.  cph kkey formula corrected.
349  cph Needed for rhok, rhokm1, in the case useGMREDI.  cph Needed for rhoK, rhoKm1, in the case useGMREDI.
350           kkey = (itdkey-1)*Nr + k           kkey = (itdkey-1)*Nr + k
351  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
352    
353  C--       Calculate gradients of potential density for isoneutral  C--       Calculate gradients of potential density for isoneutral
354  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  
355            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
356       &                   .OR. doDiagsRho.GE.1 ) THEN       &         .OR. useSaltPlume .OR. doDiagsRho.GE.1 ) THEN
357  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
358              IF ( debugLevel .GE. debLevB )              IF ( debugLevel .GE. debLevB )
359       &       CALL DEBUG_CALL('FIND_RHO',myThid)       &       CALL DEBUG_CALL('FIND_RHO',myThid)
360  #endif  #endif
361  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 359  CADJ STORE salt (:,:,k-1,bi,bj) = comlev Line 380  CADJ STORE salt (:,:,k-1,bi,bj) = comlev
380       I        myThid )       I        myThid )
381              ENDIF              ENDIF
382  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
383              IF ( debugLevel .GE. debLevB )              IF ( debugLevel .GE. debLevB )
384       &       CALL DEBUG_CALL('GRAD_SIGMA',myThid)       &       CALL DEBUG_CALL('GRAD_SIGMA',myThid)
385  #endif  #endif
386  cph Avoid variable aliasing for adjoint !!!  cph Avoid variable aliasing for adjoint !!!
387              DO j=jMin,jMax              DO j=jMin,jMax
388               DO i=iMin,iMax               DO i=iMin,iMax
389                rhoKP1(i,j) = rhoK(i,j)                rhoKp1(i,j) = rhoK(i,j)
390               ENDDO               ENDDO
391              ENDDO              ENDDO
392              CALL GRAD_SIGMA(              CALL GRAD_SIGMA(
# Line 375  cph Avoid variable aliasing for adjoint Line 396  cph Avoid variable aliasing for adjoint
396       I             myThid )       I             myThid )
397            ENDIF            ENDIF
398    
 #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 */  
399  C--       Implicit Vertical Diffusion for Convection  C--       Implicit Vertical Diffusion for Convection
400  c ==> should use sigmaR !!!  c ==> should use sigmaR !!!
401            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
402  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
403              IF ( debugLevel .GE. debLevB )              IF ( debugLevel .GE. debLevB )
404       &       CALL DEBUG_CALL('CALC_IVDC',myThid)       &       CALL DEBUG_CALL('CALC_IVDC',myThid)
405  #endif  #endif
406              CALL CALC_IVDC(              CALL CALC_IVDC(
# Line 405  c ==> should use sigmaR !!! Line 420  c ==> should use sigmaR !!!
420  C--     end of diagnostic k loop (Nr:1)  C--     end of diagnostic k loop (Nr:1)
421          ENDDO          ENDDO
422    
423    #ifdef ALLOW_AUTODIFF_TAMC
424    CADJ STORE IVDConvCount(:,:,:,bi,bj)
425    CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
426    #endif
427    
428    C--     Diagnose Mixed Layer Depth:
429            IF ( useGMRedi .OR. doDiagsRho.GE.1 ) THEN
430              CALL CALC_OCE_MXLAYER( rhoK, sigmaR,
431         &              bi, bj, myTime, myIter, myThid )
432            ENDIF
433    
434    #ifdef ALLOW_SALT_PLUME
435            IF ( useSaltPlume ) THEN
436              CALL SALT_PLUME_CALC_DEPTH( rhoK, sigmaR,
437         &              bi, bj, myTime, myIter, myThid )
438            ENDIF
439    #endif
440  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
 c       IF ( useDiagnostics .AND.  
 c    &       (useGMRedi .OR. ivdc_kappa.NE.0.) ) THEN  
441          IF ( doDiagsRho.GE.1 ) THEN          IF ( doDiagsRho.GE.1 ) THEN
442            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,
443       &         2, bi, bj, myThid)       &         2, bi, bj, myThid)
444          ENDIF          ENDIF
445  #endif  #endif
446    
 #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 */  
   
 #ifndef ALLOW_AUTODIFF_TAMC  
         IF ( fluidIsWater ) THEN  
 #endif  
447  C--     Determines forcing terms based on external fields  C--     Determines forcing terms based on external fields
448  C       relaxation terms, etc.  C       relaxation terms, etc.
449  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
450          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
451       &    CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)       &    CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid)
452  #endif  #endif
453  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 450  CADJ STORE recip_hFacC(:,:,:,bi,bj) Line 464  CADJ STORE recip_hFacC(:,:,:,bi,bj)
464  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
465  # endif  # endif
466  #endif  #endif
467           CALL EXTERNAL_FORCING_SURF(          CALL EXTERNAL_FORCING_SURF(
468       I             bi, bj, iMin, iMax, jMin, jMax,       I             bi, bj, iMin, iMax, jMin, jMax,
469       I             myTime, myIter, myThid )       I             myTime, myIter, myThid )
 #ifndef ALLOW_AUTODIFF_TAMC  
         ENDIF  
 #endif  
470  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
471  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
472  cph-test  cph-test
# Line 478  CADJ STORE surfaceForcingTice(:,:,bi,bj) Line 489  CADJ STORE surfaceForcingTice(:,:,bi,bj)
489  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
490  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
491    
 #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 */  
   
492  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
493  C--     Compute KPP mixing coefficients  C--     Compute KPP mixing coefficients
494          IF (useKPP) THEN          IF (useKPP) THEN
495  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
496            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
497       &     CALL DEBUG_CALL('KPP_CALC',myThid)       &     CALL DEBUG_CALL('KPP_CALC',myThid)
498  #endif  #endif
499            CALL KPP_CALC(            CALL KPP_CALC(
500       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
501  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
502          ELSE          ELSE
503            CALL KPP_CALC_DUMMY(            CALL KPP_CALC_DUMMY(
504       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myIter, myThid )
505  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
506          ENDIF          ENDIF
507    
# Line 535  C--     Compute KPP mixing coefficients Line 511  C--     Compute KPP mixing coefficients
511  C--     Compute PP81 mixing coefficients  C--     Compute PP81 mixing coefficients
512          IF (usePP81) THEN          IF (usePP81) THEN
513  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
514            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
515       &     CALL DEBUG_CALL('PP81_CALC',myThid)       &     CALL DEBUG_CALL('PP81_CALC',myThid)
516  #endif  #endif
517            CALL PP81_CALC(            CALL PP81_CALC(
# Line 547  C--     Compute PP81 mixing coefficients Line 523  C--     Compute PP81 mixing coefficients
523  C--     Compute MY82 mixing coefficients  C--     Compute MY82 mixing coefficients
524          IF (useMY82) THEN          IF (useMY82) THEN
525  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
526            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
527       &     CALL DEBUG_CALL('MY82_CALC',myThid)       &     CALL DEBUG_CALL('MY82_CALC',myThid)
528  #endif  #endif
529            CALL MY82_CALC(            CALL MY82_CALC(
# Line 559  C--     Compute MY82 mixing coefficients Line 535  C--     Compute MY82 mixing coefficients
535  C--     Compute GGL90 mixing coefficients  C--     Compute GGL90 mixing coefficients
536          IF (useGGL90) THEN          IF (useGGL90) THEN
537  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
538            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
539       &     CALL DEBUG_CALL('GGL90_CALC',myThid)       &     CALL DEBUG_CALL('GGL90_CALC',myThid)
540  #endif  #endif
541            CALL GGL90_CALC(            CALL GGL90_CALC(
# Line 568  C--     Compute GGL90 mixing coefficient Line 544  C--     Compute GGL90 mixing coefficient
544  #endif /* ALLOW_GGL90 */  #endif /* ALLOW_GGL90 */
545    
546  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
547          IF ( taveFreq.GT. 0. _d 0 .AND. fluidIsWater ) THEN          IF ( taveFreq.GT. 0. _d 0 ) THEN
548            CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)            CALL TIMEAVE_SURF_FLUX( bi, bj, myTime, myIter, myThid)
549          ENDIF          ENDIF
550          IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN          IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
# Line 577  C--     Compute GGL90 mixing coefficient Line 553  C--     Compute GGL90 mixing coefficient
553          ENDIF          ENDIF
554  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
555    
556    #ifdef  ALLOW_GMREDI
557    #ifdef ALLOW_AUTODIFF_TAMC
558    # ifndef GM_EXCLUDE_CLIPPING
559    cph storing here is needed only for one GMREDI_OPTIONS:
560    cph define GM_BOLUS_ADVEC
561    cph keep it although TAF says you dont need to.
562    cph but I've avoided the #ifdef for now, in case more things change
563    CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte
564    CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte
565    CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte
566    # endif
567    #endif /* ALLOW_AUTODIFF_TAMC */
568    
569    C--     Calculate iso-neutral slopes for the GM/Redi parameterisation
570            IF (useGMRedi) THEN
571    #ifdef ALLOW_DEBUG
572              IF ( debugLevel .GE. debLevB )
573         &     CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
574    #endif
575              CALL GMREDI_CALC_TENSOR(
576    c    I             bi, bj, iMin, iMax, jMin, jMax,
577    c    I             sigmaX, sigmaY, sigmaR,
578    c    I             myThid )
579         I             iMin, iMax, jMin, jMax,
580         I             sigmaX, sigmaY, sigmaR,
581         I             bi, bj, myTime, myIter, myThid )
582    #ifdef ALLOW_AUTODIFF_TAMC
583            ELSE
584              CALL GMREDI_CALC_TENSOR_DUMMY(
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    #endif /* ALLOW_AUTODIFF_TAMC */
592            ENDIF
593    #endif  /* ALLOW_GMREDI */
594    
595    #ifndef ALLOW_AUTODIFF_TAMC
596    C---  if fluid Is Water: end
597            ENDIF
598    #endif
599    
600    #ifdef  ALLOW_OBCS
601    C--     Calculate future values on open boundaries
602            IF (useOBCS) THEN
603    #ifdef ALLOW_DEBUG
604              IF ( debugLevel .GE. debLevB )
605         &     CALL DEBUG_CALL('OBCS_CALC',myThid)
606    #endif
607              CALL OBCS_CALC( bi, bj, myTime+deltaTclock, myIter+1,
608         I            uVel, vVel, wVel, theta, salt,
609         I            myThid )
610            ENDIF
611    #endif  /* ALLOW_OBCS */
612    
613  C--   end bi,bj loops.  C--   end bi,bj loops.
614         ENDDO         ENDDO
615        ENDDO        ENDDO
616    
617    #ifdef  ALLOW_KPP
618          IF (useKPP) THEN
619            CALL KPP_DO_EXCH( myThid )
620          ENDIF
621    #endif  /* ALLOW_KPP */
622    
623  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
624        IF ( fluidIsWater .AND. useDiagnostics ) THEN        IF ( fluidIsWater .AND. useDiagnostics ) THEN
625          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.60

  ViewVC Help
Powered by ViewVC 1.1.22