/[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.67 by gforget, Wed Jun 11 18:29:08 2008 UTC revision 1.77 by heimbach, Fri Feb 13 21:56:48 2009 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 70  C     == Global variables === Line 70  C     == Global variables ===
70  # ifdef ALLOW_SEAICE  # ifdef ALLOW_SEAICE
71  #  include "SEAICE.h"  #  include "SEAICE.h"
72  # endif  # endif
73    # ifdef ALLOW_SALT_PLUME
74    #  include "SALT_PLUME.h"
75    # endif
76  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
77    
78  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
# Line 90  C     bi, bj        :: tile indices Line 93  C     bi, bj        :: tile indices
93  C     i,j,k         :: loop indices  C     i,j,k         :: loop indices
94        _RL rhoKp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL rhoKp1  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
95        _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)  
96        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
97        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
98        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
# Line 119  C--   dummy statement to end declaration Line 121  C--   dummy statement to end declaration
121        doDiagsRho = 0        doDiagsRho = 0
122  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
123        IF ( useDiagnostics .AND. fluidIsWater ) THEN        IF ( useDiagnostics .AND. fluidIsWater ) THEN
124          IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('WRHOMASS',myThid) )
125       &       DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.       &       doDiagsRho = doDiagsRho + 1
126       &       DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) )
127       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.       &       doDiagsRho = doDiagsRho + 2
128       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) ) doDiagsRho = 2          IF ( DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) )
129          IF ( doDiagsRho.EQ.0 .AND.       &       doDiagsRho = doDiagsRho + 4
      &       DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) ) doDiagsRho = 1  
         IF ( doDiagsRho.EQ.0 .AND.  
      &       DIAGNOSTICS_IS_ON('DRHODR  ',myThid) ) doDiagsRho = 1  
130        ENDIF        ENDIF
131  #endif /* ALLOW_DIAGNOSTICS */  #endif /* ALLOW_DIAGNOSTICS */
132    
133    
134  #ifdef ALLOW_SEAICE  #ifdef ALLOW_SEAICE
135        IF ( useSEAICE ) THEN        IF ( useSEAICE ) THEN
136  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
137  cph-adj-test(  cph-adj-test(
138  CADJ STORE area,empmr,qsw,theta   = comlev1, key = ikey_dynamics  CADJ STORE area,empmr,qsw,theta   = comlev1, key = ikey_dynamics,
139    CADJ &     kind = isbyte
140  cph-adj-test)  cph-adj-test)
141  CADJ STORE atemp,aqh,precip    = comlev1, key = ikey_dynamics  CADJ STORE atemp,aqh,precip    = comlev1, key = ikey_dynamics,
142  CADJ STORE swdown,lwdown       = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
143    CADJ STORE swdown,lwdown       = comlev1, key = ikey_dynamics,
144    CADJ &     kind = isbyte
145  cph# ifdef EXF_READ_EVAP  cph# ifdef EXF_READ_EVAP
146  CADJ STORE evap                = comlev1, key = ikey_dynamics  CADJ STORE evap                = comlev1, key = ikey_dynamics,
147    CADJ &     kind = isbyte
148  cph# endif  cph# endif
149  CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics  CADJ STORE uvel,vvel           = comlev1, key = ikey_dynamics,
150    CADJ &     kind = isbyte
151  #  ifdef SEAICE_ALLOW_DYNAMICS  #  ifdef SEAICE_ALLOW_DYNAMICS
152  CADJ STORE uice                = comlev1, key = ikey_dynamics  CADJ STORE uice                = comlev1, key = ikey_dynamics,
153  CADJ STORE vice                = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
154    CADJ STORE vice                = comlev1, key = ikey_dynamics,
155    CADJ &     kind = isbyte
156  #   ifdef SEAICE_ALLOW_EVP  #   ifdef SEAICE_ALLOW_EVP
157  CADJ STORE seaice_sigma1       = comlev1, key = ikey_dynamics  CADJ STORE seaice_sigma1       = comlev1, key = ikey_dynamics,
158  CADJ STORE seaice_sigma2       = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
159  CADJ STORE seaice_sigma12      = comlev1, key = ikey_dynamics  CADJ STORE seaice_sigma2       = comlev1, key = ikey_dynamics,
160    CADJ &     kind = isbyte
161    CADJ STORE seaice_sigma12      = comlev1, key = ikey_dynamics,
162    CADJ &     kind = isbyte
163  #   endif  #   endif
164  #  endif  #  endif
165  #  ifdef SEAICE_SALINITY  #  ifdef SEAICE_SALINITY
166  CADJ STORE salt                = comlev1, key = ikey_dynamics  CADJ STORE salt                = comlev1, key = ikey_dynamics,
167    CADJ &     kind = isbyte
168  #  endif  #  endif
169  #  ifdef ATMOSPHERIC_LOADING  #  ifdef ATMOSPHERIC_LOADING
170  CADJ STORE pload               = comlev1, key = ikey_dynamics  CADJ STORE pload               = comlev1, key = ikey_dynamics,
171  CADJ STORE siceload            = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
172    CADJ STORE siceload            = comlev1, key = ikey_dynamics,
173    CADJ &     kind = isbyte
174  #  endif  #  endif
175  #  ifdef NONLIN_FRSURF  #  ifdef NONLIN_FRSURF
176  CADJ STORE recip_hfacc         = comlev1, key = ikey_dynamics  CADJ STORE recip_hfacc         = comlev1, key = ikey_dynamics,
177    CADJ &     kind = isbyte
178  #  endif  #  endif
179  # endif  # endif
180  # ifdef ALLOW_DEBUG  # ifdef ALLOW_DEBUG
# Line 177  CADJ STORE recip_hfacc         = comlev1 Line 191  CADJ STORE recip_hfacc         = comlev1
191  #endif /* ALLOW_SEAICE */  #endif /* ALLOW_SEAICE */
192    
193  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
194  CADJ STORE sst, sss           = comlev1, key = ikey_dynamics  CADJ STORE sst, sss           = comlev1, key = ikey_dynamics,
195  CADJ STORE qsw                = comlev1, key = ikey_dynamics  CADJ &     kind = isbyte
196    CADJ STORE qsw                = comlev1, key = ikey_dynamics,
197    CADJ &     kind = isbyte
198  # ifdef ALLOW_SEAICE  # ifdef ALLOW_SEAICE
199  CADJ STORE area               = comlev1, key = ikey_dynamics  CADJ STORE area               = comlev1, key = ikey_dynamics,
200    CADJ &     kind = isbyte
201  # endif  # endif
202  #endif  #endif
203    
# Line 216  C     shelf-ice ocean interface Line 233  C     shelf-ice ocean interface
233    
234  C--   Freeze water at the surface  C--   Freeze water at the surface
235  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
236  CADJ STORE theta = comlev1, key = ikey_dynamics  CADJ STORE theta = comlev1, key = ikey_dynamics,
237    CADJ &     kind = isbyte
238  #endif  #endif
239        IF ( allowFreezing        IF ( allowFreezing ) THEN
      &                   .AND. .NOT. useSEAICE  
      &                   .AND. .NOT. useThSIce ) THEN  
240          CALL FREEZE_SURFACE(  myTime, myIter, myThid )          CALL FREEZE_SURFACE(  myTime, myIter, myThid )
241        ENDIF        ENDIF
242    
# Line 276  C     just ensure that all memory refere Line 292  C     just ensure that all memory refere
292  C     point numbers. This prevents spurious hardware signals due to  C     point numbers. This prevents spurious hardware signals due to
293  C     uninitialised but inert locations.  C     uninitialised but inert locations.
294    
295    #ifdef ALLOW_AUTODIFF_TAMC
296          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
297           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
           rhoK   (i,j)   = 0. _d 0  
298            rhoKm1 (i,j)   = 0. _d 0            rhoKm1 (i,j)   = 0. _d 0
299            rhoKp1 (i,j)   = 0. _d 0            rhoKp1 (i,j)   = 0. _d 0
300           ENDDO           ENDDO
301          ENDDO          ENDDO
302    #endif /* ALLOW_AUTODIFF_TAMC */
303    
304          DO k=1,Nr          DO k=1,Nr
305           DO j=1-OLy,sNy+OLy           DO j=1-OLy,sNy+OLy
306            DO i=1-OLx,sNx+OLx            DO i=1-OLx,sNx+OLx
307  C This is currently also used by IVDC and Diagnostics  C This is currently used by GMRedi, IVDC, MXL-depth  and Diagnostics
308             sigmaX(i,j,k) = 0. _d 0             sigmaX(i,j,k) = 0. _d 0
309             sigmaY(i,j,k) = 0. _d 0             sigmaY(i,j,k) = 0. _d 0
310             sigmaR(i,j,k) = 0. _d 0             sigmaR(i,j,k) = 0. _d 0
311  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
312  cph all the following init. are necessary for TAF  cph all the following init. are necessary for TAF
313  cph although some of these are re-initialised later.  cph although some of these are re-initialised later.
314    c          rhoInSitu(i,j,k,bi,bj) = 0.
315             IVDConvCount(i,j,k,bi,bj) = 0.             IVDConvCount(i,j,k,bi,bj) = 0.
316  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
317             Kwx(i,j,k,bi,bj)  = 0. _d 0             Kwx(i,j,k,bi,bj)  = 0. _d 0
# Line 323  cph although some of these are re-initia Line 341  cph although some of these are re-initia
341            ENDDO            ENDDO
342           ENDDO           ENDDO
343          ENDDO          ENDDO
344            DO j=1-OLy,sNy+OLy
345             DO i=1-OLx,sNx+OLx
346    #ifdef ALLOW_AUTODIFF_TAMC
347    # ifdef ALLOW_SALT_PLUME
348              saltPlumeDepth(i,j,bi,bj) = 0. _d 0
349              saltPlumeFlux(i,j,bi,bj)  = 0. _d 0
350    # endif
351    #endif /* ALLOW_AUTODIFF_TAMC */
352             ENDDO
353            ENDDO
354    
355          iMin = 1-OLx          iMin = 1-OLx
356          iMax = sNx+OLx          iMax = sNx+OLx
# Line 330  cph although some of these are re-initia Line 358  cph although some of these are re-initia
358          jMax = sNy+OLy          jMax = sNy+OLy
359    
360  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
361  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
362  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
363    CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
364    CADJ &     kind = isbyte
365  CADJ STORE totphihyd(:,:,:,bi,bj)  CADJ STORE totphihyd(:,:,:,bi,bj)
366  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
367    CADJ &     kind = isbyte
368  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
369  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
370  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
371    CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey,
372    CADJ &     kind = isbyte
373  # endif  # endif
374  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
375    
# Line 351  C--     Start of diagnostic loop Line 384  C--     Start of diagnostic loop
384  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
385  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?
386  C? Do we still need this?  C? Do we still need this?
387  cph kkey formula corrected.  cph kkey formula corrected.
388  cph Needed for rhoK, rhoKm1, in the case useGMREDI.  cph Needed for rhoK, rhoKm1, in the case useGMREDI.
389           kkey = (itdkey-1)*Nr + k            kkey = (itdkey-1)*Nr + k
390  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
391    
392  C--       Calculate gradients of potential density for isoneutral  C--   Always compute density (stored in common block) here; even when it is not
393  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. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN  
394  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
395              IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
396       &       CALL DEBUG_CALL('FIND_RHO',myThid)       &       CALL DEBUG_CALL('FIND_RHO_2D',myThid)
397  #endif  #endif
398  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
399  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte            IF ( fluidIsWater ) THEN
400  CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,
401    CADJ &     kind = isbyte
402    CADJ STORE salt(:,:,k,bi,bj)  = comlev1_bibj_k, key=kkey,
403    CADJ &     kind = isbyte
404    #endif /* ALLOW_AUTODIFF_TAMC */
405    #ifdef ALLOW_DOWN_SLOPE
406              IF ( useDOWN_SLOPE ) THEN
407                CALL DWNSLP_CALC_RHO(
408         I                  theta, salt,
409         O                  rhoInSitu(1-OLx,1-OLy,k,bi,bj),
410         I                  k, bi, bj, myTime, myIter, myThid )
411              ELSE
412    #endif /* ALLOW_DOWN_SLOPE */
413                CALL FIND_RHO_2D(
414         I                iMin, iMax, jMin, jMax, k,
415         I                theta(1-OLx,1-OLy,k,bi,bj),
416         I                salt (1-OLx,1-OLy,k,bi,bj),
417         O                rhoInSitu(1-OLx,1-OLy,k,bi,bj),
418         I                k, bi, bj, myThid )
419    #ifdef ALLOW_DOWN_SLOPE
420              ENDIF
421    #endif /* ALLOW_DOWN_SLOPE */
422    #ifdef ALLOW_AUTODIFF_TAMC
423              ELSE
424    C-        fluid is not water:
425               DO j=1-OLy,sNy+OLy
426                DO i=1-OLx,sNx+OLx
427                  rhoInSitu(i,j,k,bi,bj) = 0.
428                ENDDO
429               ENDDO
430              ENDIF
431  #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 )  
432    
433    C--       Calculate gradients of potential density for isoneutral
434    C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
435              IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
436         &         .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
437              IF (k.GT.1) THEN              IF (k.GT.1) THEN
438  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
439  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,
440  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ &     kind = isbyte
441  #endif /* ALLOW_AUTODIFF_TAMC */  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey,
442               CALL FIND_RHO(  CADJ &     kind = isbyte
443       I        bi, bj, iMin, iMax, jMin, jMax, k-1, k,  CADJ STORE rhokm1 (bi,bj)       = comlev1_bibj_k, key=kkey,
444       I        theta, salt,  CADJ &     kind = isbyte
445       O        rhoKm1,  #endif /* ALLOW_AUTODIFF_TAMC */
446       I        myThid )               CALL FIND_RHO_2D(
447         I                 iMin, iMax, jMin, jMax, k,
448         I                 theta(1-OLx,1-OLy,k-1,bi,bj),
449         I                 salt (1-OLx,1-OLy,k-1,bi,bj),
450         O                 rhoKm1,
451         I                 k-1, bi, bj, myThid )
452              ENDIF              ENDIF
453  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
454              IF ( debugLevel .GE. debLevB )              IF ( debugLevel .GE. debLevB )
# Line 392  CADJ STORE salt (:,:,k-1,bi,bj) = comlev Line 457  CADJ STORE salt (:,:,k-1,bi,bj) = comlev
457  cph Avoid variable aliasing for adjoint !!!  cph Avoid variable aliasing for adjoint !!!
458              DO j=jMin,jMax              DO j=jMin,jMax
459               DO i=iMin,iMax               DO i=iMin,iMax
460                rhoKp1(i,j) = rhoK(i,j)                rhoKp1(i,j) = rhoInSitu(i,j,k,bi,bj)
461               ENDDO               ENDDO
462              ENDDO              ENDDO
463              CALL GRAD_SIGMA(              CALL GRAD_SIGMA(
464       I             bi, bj, iMin, iMax, jMin, jMax, k,       I             bi, bj, iMin, iMax, jMin, jMax, k,
465       I             rhoK, rhoKm1, rhoKp1,       I             rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1,
466       O             sigmaX, sigmaY, sigmaR,       O             sigmaX, sigmaY, sigmaR,
467       I             myThid )       I             myThid )
468  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
469  #ifdef GMREDI_WITH_STABLE_ADJOINT  #ifdef GMREDI_WITH_STABLE_ADJOINT
470  cgf zero out adjoint fields to stabilize pkg/gmredi adjoint  cgf zero out adjoint fields to stabilize pkg/gmredi adjoint
471  cgf -> cuts adjoint dependency from slope to state  cgf -> cuts adjoint dependency from slope to state
472        CALL ZERO_ADJ_LOC( Nr, sigmaX, myThid)              CALL ZERO_ADJ_LOC( Nr, sigmaX, myThid)
473        CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid)              CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid)
474        CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid)              CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid)
475  #endif  #endif
476  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
477            ENDIF            ENDIF
# Line 420  c ==> should use sigmaR !!! Line 485  c ==> should use sigmaR !!!
485  #endif  #endif
486              CALL CALC_IVDC(              CALL CALC_IVDC(
487       I        bi, bj, iMin, iMax, jMin, jMax, k,       I        bi, bj, iMin, iMax, jMin, jMax, k,
488       I        rhoKm1, rhoK,       I        rhoKm1, rhoInSitu(1-OLx,1-OLy,k,bi,bj),
489       I        myTime, myIter, myThid)       I        myTime, myIter, myThid)
490            ENDIF            ENDIF
491    
492  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
493            IF ( doDiagsRho.GE.2 ) THEN            IF ( MOD(doDiagsRho,2).EQ.1 ) THEN
494              CALL DIAGS_RHO( k, bi, bj,              CALL DIAGS_RHO_L( k, bi, bj,
495       I                      rhoK, rhoKm1,       I                        rhoInSitu(1-OLx,1-OLy,k,bi,bj),
496       I                      myTime, myIter, myThid)       I                        rhoKm1, wVel,
497         I                        myTime, myIter, myThid )
498            ENDIF            ENDIF
499  #endif  #endif
500    
# Line 436  C--     end of diagnostic k loop (Nr:1) Line 502  C--     end of diagnostic k loop (Nr:1)
502          ENDDO          ENDDO
503    
504  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
505  CADJ STORE IVDConvCount(:,:,:,bi,bj)  CADJ STORE IVDConvCount(:,:,:,bi,bj)
506  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
507    CADJ &     kind = isbyte
508  #endif  #endif
509    
510  C--     Diagnose Mixed Layer Depth:  C--     Diagnose Mixed Layer Depth:
511          IF ( useGMRedi .OR. doDiagsRho.GE.1 ) THEN          IF ( useGMRedi .OR. doDiagsRho.GE.4 ) THEN
512            CALL CALC_OCE_MXLAYER( rhoK, sigmaR,            CALL CALC_OCE_MXLAYER(
513       &              bi, bj, myTime, myIter, myThid )       I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
514         I              bi, bj, myTime, myIter, myThid )
515          ENDIF          ENDIF
516    
517  #ifdef ALLOW_SALT_PLUME  #ifdef ALLOW_SALT_PLUME
518          IF ( useSALT_PLUME ) THEN          IF ( useSALT_PLUME ) THEN
519            CALL SALT_PLUME_CALC_DEPTH( rhoK, sigmaR,            CALL SALT_PLUME_CALC_DEPTH(
520       &              bi, bj, myTime, myIter, myThid )       I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
521         I              bi, bj, myTime, myIter, myThid )
522          ENDIF          ENDIF
523  #endif /* ALLOW_SALT_PLUME */  #endif /* ALLOW_SALT_PLUME */
524    
525  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
526          IF ( doDiagsRho.GE.1 ) THEN          IF ( MOD(doDiagsRho,4).GE.2 ) THEN
527            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,
528       &         2, bi, bj, myThid)       &         2, bi, bj, myThid)
529          ENDIF          ENDIF
# Line 468  C       relaxation terms, etc. Line 537  C       relaxation terms, etc.
537  #endif  #endif
538  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
539  CADJ STORE EmPmR(:,:,bi,bj)  CADJ STORE EmPmR(:,:,bi,bj)
540  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
541    CADJ &     kind = isbyte
542  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
543  CADJ STORE PmEpR(:,:,bi,bj)  CADJ STORE PmEpR(:,:,bi,bj)
544  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
545    CADJ &     kind = isbyte
546  # endif  # endif
547  # ifdef NONLIN_FRSURF  # ifdef NONLIN_FRSURF
548  CADJ STORE hFac_surfC(:,:,bi,bj)  CADJ STORE hFac_surfC(:,:,bi,bj)
549  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
550    CADJ &     kind = isbyte
551  CADJ STORE recip_hFacC(:,:,:,bi,bj)  CADJ STORE recip_hFacC(:,:,:,bi,bj)
552  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
553    CADJ &     kind = isbyte
554  # endif  # endif
555  #endif  #endif
556          CALL EXTERNAL_FORCING_SURF(          CALL EXTERNAL_FORCING_SURF(
# Line 487  CADJ &     = comlev1_bibj, key=itdkey, b Line 560  CADJ &     = comlev1_bibj, key=itdkey, b
560  # ifdef EXACT_CONSERV  # ifdef EXACT_CONSERV
561  cph-test  cph-test
562  cphCADJ STORE PmEpR(:,:,bi,bj)  cphCADJ STORE PmEpR(:,:,bi,bj)
563  cphCADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  cphCADJ &     = comlev1_bibj, key=itdkey,
564    cphCADJ &     kind = isbyte
565  # endif  # endif
566  #endif  #endif
567    
568  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
569  cph needed for KPP  cph needed for KPP
570  CADJ STORE surfaceForcingU(:,:,bi,bj)  CADJ STORE surfaceForcingU(:,:,bi,bj)
571  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
572    CADJ &     kind = isbyte
573  CADJ STORE surfaceForcingV(:,:,bi,bj)  CADJ STORE surfaceForcingV(:,:,bi,bj)
574  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
575    CADJ &     kind = isbyte
576  CADJ STORE surfaceForcingS(:,:,bi,bj)  CADJ STORE surfaceForcingS(:,:,bi,bj)
577  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
578    CADJ &     kind = isbyte
579  CADJ STORE surfaceForcingT(:,:,bi,bj)  CADJ STORE surfaceForcingT(:,:,bi,bj)
580  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
581    CADJ &     kind = isbyte
582  CADJ STORE surfaceForcingTice(:,:,bi,bj)  CADJ STORE surfaceForcingTice(:,:,bi,bj)
583  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey,
584    CADJ &     kind = isbyte
585  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
586    
587  #ifdef  ALLOW_KPP  #ifdef  ALLOW_KPP
# Line 512  C--     Compute KPP mixing coefficients Line 591  C--     Compute KPP mixing coefficients
591            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
592       &     CALL DEBUG_CALL('KPP_CALC',myThid)       &     CALL DEBUG_CALL('KPP_CALC',myThid)
593  #endif  #endif
594              CALL TIMER_START('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
595            CALL KPP_CALC(            CALL KPP_CALC(
596       I                  bi, bj, myTime, myIter, myThid )       I                  bi, bj, myTime, myIter, myThid )
597              CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid)
598  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
599          ELSE          ELSE
600            CALL KPP_CALC_DUMMY(            CALL KPP_CALC_DUMMY(
# Line 554  C--     Compute GGL90 mixing coefficient Line 635  C--     Compute GGL90 mixing coefficient
635            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
636       &     CALL DEBUG_CALL('GGL90_CALC',myThid)       &     CALL DEBUG_CALL('GGL90_CALC',myThid)
637  #endif  #endif
638              CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
639            CALL GGL90_CALC(            CALL GGL90_CALC(
640       I                  bi, bj, myTime, myThid )       I                  bi, bj, myTime, myThid )
641              CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid)
642          ENDIF          ENDIF
643  #endif /* ALLOW_GGL90 */  #endif /* ALLOW_GGL90 */
644    
# Line 569  C--     Compute GGL90 mixing coefficient Line 652  C--     Compute GGL90 mixing coefficient
652          ENDIF          ENDIF
653  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
654    
655  #ifdef  ALLOW_GMREDI  #ifdef ALLOW_GMREDI
656  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
657  # ifndef GM_EXCLUDE_CLIPPING  # ifndef GM_EXCLUDE_CLIPPING
658  cph storing here is needed only for one GMREDI_OPTIONS:  cph storing here is needed only for one GMREDI_OPTIONS:
659  cph define GM_BOLUS_ADVEC  cph define GM_BOLUS_ADVEC
660  cph keep it although TAF says you dont need to.  cph keep it although TAF says you dont need to.
661  cph but I've avoided the #ifdef for now, in case more things change  cph but I've avoided the #ifdef for now, in case more things change
662  CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE sigmaX(:,:,:)        = comlev1_bibj, key=itdkey,
663  CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  CADJ &     kind = isbyte
664  CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE sigmaY(:,:,:)        = comlev1_bibj, key=itdkey,
665    CADJ &     kind = isbyte
666    CADJ STORE sigmaR(:,:,:)        = comlev1_bibj, key=itdkey,
667    CADJ &     kind = isbyte
668  # endif  # endif
669  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
670    
# Line 589  C--     Calculate iso-neutral slopes for Line 675  C--     Calculate iso-neutral slopes for
675       &     CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)       &     CALL DEBUG_CALL('GMREDI_CALC_TENSOR',myThid)
676  #endif  #endif
677            CALL GMREDI_CALC_TENSOR(            CALL GMREDI_CALC_TENSOR(
 c    I             bi, bj, iMin, iMax, jMin, jMax,  
 c    I             sigmaX, sigmaY, sigmaR,  
 c    I             myThid )  
678       I             iMin, iMax, jMin, jMax,       I             iMin, iMax, jMin, jMax,
679       I             sigmaX, sigmaY, sigmaR,       I             sigmaX, sigmaY, sigmaR,
680       I             bi, bj, myTime, myIter, myThid )       I             bi, bj, myTime, myIter, myThid )
681  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
682          ELSE          ELSE
683            CALL GMREDI_CALC_TENSOR_DUMMY(            CALL GMREDI_CALC_TENSOR_DUMMY(
 c    I             bi, bj, iMin, iMax, jMin, jMax,  
 c    I             sigmaX, sigmaY, sigmaR,  
 c    I             myThid )  
684       I             iMin, iMax, jMin, jMax,       I             iMin, iMax, jMin, jMax,
685       I             sigmaX, sigmaY, sigmaR,       I             sigmaX, sigmaY, sigmaR,
686       I             bi, bj, myTime, myIter, myThid )       I             bi, bj, myTime, myIter, myThid )
687  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
688          ENDIF          ENDIF
689  #endif  /* ALLOW_GMREDI */  #endif /* ALLOW_GMREDI */
690    
691    #ifdef ALLOW_DOWN_SLOPE
692            IF ( useDOWN_SLOPE ) THEN
693    C--     Calculate Downsloping Flow for Down_Slope parameterization
694             IF ( usingPCoords ) THEN
695              CALL DWNSLP_CALC_FLOW(
696         I                bi, bj, kSurfC, rhoInSitu,
697         I                myTime, myIter, myThid )
698             ELSE
699              CALL DWNSLP_CALC_FLOW(
700         I                bi, bj, kLowC, rhoInSitu,
701         I                myTime, myIter, myThid )
702             ENDIF
703            ENDIF
704    #endif /* ALLOW_DOWN_SLOPE */
705    
706  #ifndef ALLOW_AUTODIFF_TAMC  #ifndef ALLOW_AUTODIFF_TAMC
707  C---  if fluid Is Water: end  C---  if fluid Is Water: end
# Line 638  C--   end bi,bj loops. Line 733  C--   end bi,bj loops.
733    
734  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
735        IF ( fluidIsWater .AND. useDiagnostics ) THEN        IF ( fluidIsWater .AND. useDiagnostics ) THEN
736            CALL DIAGS_RHO_G(
737         I                    rhoInSitu, uVel, vVel,
738         I                    myTime, myIter, myThid )
739          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
740        ENDIF        ENDIF
741        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
742          CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',          CALL DIAGNOSTICS_FILL( IVDConvCount, 'CONVADJ ',
743       &                         0, Nr, 0, 1, 1, myThid )       &                               0, Nr, 0, 1, 1, myThid )
744        ENDIF        ENDIF
745  #endif  #endif
746    

Legend:
Removed from v.1.67  
changed lines
  Added in v.1.77

  ViewVC Help
Powered by ViewVC 1.1.22