/[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.70 by jmc, Sun Aug 24 21:44:56 2008 UTC revision 1.71 by jmc, Mon Sep 22 17:55:16 2008 UTC
# Line 90  C     bi, bj        :: tile indices Line 90  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)
       _RL rhoK    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)  
93        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
94        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
95        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
# Line 103  C     i,j,k         :: loop indices Line 102  C     i,j,k         :: loop indices
102        LOGICAL  DIAGNOSTICS_IS_ON        LOGICAL  DIAGNOSTICS_IS_ON
103        EXTERNAL DIAGNOSTICS_IS_ON        EXTERNAL DIAGNOSTICS_IS_ON
104  #endif /* ALLOW_DIAGNOSTICS */  #endif /* ALLOW_DIAGNOSTICS */
 #ifdef ALLOW_DOWN_SLOPE  
       _RL rhoInSitu(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)  
 #endif /* ALLOW_DOWN_SLOPE */  
105    
106  CEOP  CEOP
107    
# Line 122  C--   dummy statement to end declaration Line 118  C--   dummy statement to end declaration
118        doDiagsRho = 0        doDiagsRho = 0
119  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
120        IF ( useDiagnostics .AND. fluidIsWater ) THEN        IF ( useDiagnostics .AND. fluidIsWater ) THEN
121          IF ( DIAGNOSTICS_IS_ON('RHOANOSQ',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('WRHOMASS',myThid) )
122       &       DIAGNOSTICS_IS_ON('URHOMASS',myThid) .OR.       &       doDiagsRho = doDiagsRho + 1
123       &       DIAGNOSTICS_IS_ON('VRHOMASS',myThid) .OR.          IF ( DIAGNOSTICS_IS_ON('DRHODR  ',myThid) )
124       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) .OR.       &       doDiagsRho = doDiagsRho + 2
125       &       DIAGNOSTICS_IS_ON('WRHOMASS',myThid) ) doDiagsRho = 2          IF ( DIAGNOSTICS_IS_ON('MXLDEPTH',myThid) )
126          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  
127        ENDIF        ENDIF
128  #endif /* ALLOW_DIAGNOSTICS */  #endif /* ALLOW_DIAGNOSTICS */
129    
# Line 282  C     uninitialised but inert locations. Line 275  C     uninitialised but inert locations.
275          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
276           DO i=1-OLx,sNx+OLx           DO i=1-OLx,sNx+OLx
277            rhoKm1 (i,j)   = 0. _d 0            rhoKm1 (i,j)   = 0. _d 0
           rhoK   (i,j)   = 0. _d 0  
278            rhoKp1 (i,j)   = 0. _d 0            rhoKp1 (i,j)   = 0. _d 0
279           ENDDO           ENDDO
280          ENDDO          ENDDO
# Line 298  C This is currently used by GMRedi, IVDC Line 290  C This is currently used by GMRedi, IVDC
290  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
291  cph all the following init. are necessary for TAF  cph all the following init. are necessary for TAF
292  cph although some of these are re-initialised later.  cph although some of these are re-initialised later.
293    c          rhoInSitu(i,j,k,bi,bj) = 0.
294             IVDConvCount(i,j,k,bi,bj) = 0.             IVDConvCount(i,j,k,bi,bj) = 0.
295  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
296             Kwx(i,j,k,bi,bj)  = 0. _d 0             Kwx(i,j,k,bi,bj)  = 0. _d 0
# Line 357  C? Patrick, is this formula correct now Line 350  C? Patrick, is this formula correct now
350  C? Do we still need this?  C? Do we still need this?
351  cph kkey formula corrected.  cph kkey formula corrected.
352  cph Needed for rhoK, rhoKm1, in the case useGMREDI.  cph Needed for rhoK, rhoKm1, in the case useGMREDI.
353           kkey = (itdkey-1)*Nr + k            kkey = (itdkey-1)*Nr + k
354  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
355    
356    C--   Always compute density (stored in common block) here; even when it is not
357    C     needed here, will be used anyway in calc_phi_hyd (data flow easier this way)
358    #ifdef ALLOW_DEBUG
359              IF ( debugLevel .GE. debLevB )
360         &       CALL DEBUG_CALL('FIND_RHO_2D',myThid)
361    #endif
362    #ifdef ALLOW_AUTODIFF_TAMC
363    CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
364    CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
365    #endif /* ALLOW_AUTODIFF_TAMC */
366  #ifdef ALLOW_DOWN_SLOPE  #ifdef ALLOW_DOWN_SLOPE
367            IF ( useDOWN_SLOPE ) THEN            IF ( useDOWN_SLOPE ) THEN
368              CALL DWNSLP_CALC_RHO(              CALL DWNSLP_CALC_RHO(
369       I                  theta, salt,       I                  theta, salt,
370       O                  rhoK, rhoInSitu,       O                  rhoInSitu(1-OLx,1-OLy,k,bi,bj),
371       I                  k, bi, bj, myTime, myIter, myThid )       I                  k, bi, bj, myTime, myIter, myThid )
372              ELSE
373    #endif /* ALLOW_DOWN_SLOPE */
374                CALL FIND_RHO_2D(
375         I                iMin, iMax, jMin, jMax, k,
376         I                theta(1-OLx,1-OLy,k,bi,bj),
377         I                salt (1-OLx,1-OLy,k,bi,bj),
378         O                rhoInSitu(1-OLx,1-OLy,k,bi,bj),
379         I                k, bi, bj, myThid )
380    #ifdef ALLOW_DOWN_SLOPE
381            ENDIF            ENDIF
382  #endif /* ALLOW_DOWN_SLOPE */  #endif /* ALLOW_DOWN_SLOPE */
383    
# Line 373  C--       Calculate gradients of potenti Line 385  C--       Calculate gradients of potenti
385  C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)  C         slope terms (e.g. GM/Redi tensor or IVDC diffusivity)
386            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)            IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.)
387       &         .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN       &         .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN
 #ifdef ALLOW_DEBUG  
             IF ( debugLevel .GE. debLevB )  
      &       CALL DEBUG_CALL('FIND_RHO_2D',myThid)  
 #endif  
             IF ( .NOT.useDOWN_SLOPE ) THEN  
 #ifdef ALLOW_AUTODIFF_TAMC  
 CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  
 CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  
 #endif /* ALLOW_AUTODIFF_TAMC */  
              CALL FIND_RHO_2D(  
      I                 iMin, iMax, jMin, jMax, k,  
      I                 theta(1-OLx,1-OLy,k,bi,bj),  
      I                 salt (1-OLx,1-OLy,k,bi,bj),  
      O                 rhoK,  
      I                 k, bi, bj, myThid )  
   
             ENDIF  
388              IF (k.GT.1) THEN              IF (k.GT.1) THEN
389  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
390  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, byte=isbyte
# Line 409  CADJ STORE salt (:,:,k-1,bi,bj) = comlev Line 404  CADJ STORE salt (:,:,k-1,bi,bj) = comlev
404  cph Avoid variable aliasing for adjoint !!!  cph Avoid variable aliasing for adjoint !!!
405              DO j=jMin,jMax              DO j=jMin,jMax
406               DO i=iMin,iMax               DO i=iMin,iMax
407                rhoKp1(i,j) = rhoK(i,j)                rhoKp1(i,j) = rhoInSitu(i,j,k,bi,bj)
408               ENDDO               ENDDO
409              ENDDO              ENDDO
410              CALL GRAD_SIGMA(              CALL GRAD_SIGMA(
411       I             bi, bj, iMin, iMax, jMin, jMax, k,       I             bi, bj, iMin, iMax, jMin, jMax, k,
412       I             rhoK, rhoKm1, rhoKp1,       I             rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1,
413       O             sigmaX, sigmaY, sigmaR,       O             sigmaX, sigmaY, sigmaR,
414       I             myThid )       I             myThid )
415  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 437  c ==> should use sigmaR !!! Line 432  c ==> should use sigmaR !!!
432  #endif  #endif
433              CALL CALC_IVDC(              CALL CALC_IVDC(
434       I        bi, bj, iMin, iMax, jMin, jMax, k,       I        bi, bj, iMin, iMax, jMin, jMax, k,
435       I        rhoKm1, rhoK,       I        rhoKm1, rhoInSitu(1-OLx,1-OLy,k,bi,bj),
436       I        myTime, myIter, myThid)       I        myTime, myIter, myThid)
437            ENDIF            ENDIF
438    
439  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
440            IF ( doDiagsRho.GE.2 ) THEN            IF ( MOD(doDiagsRho,2).EQ.1 ) THEN
441              CALL DIAGS_RHO( k, bi, bj,              CALL DIAGS_RHO_L( k, bi, bj,
442       I                      rhoK, rhoKm1,       I                        rhoInSitu(1-OLx,1-OLy,k,bi,bj),
443       I                      myTime, myIter, myThid)       I                        rhoKm1, wVel,
444         I                        myTime, myIter, myThid )
445            ENDIF            ENDIF
446  #endif  #endif
447    
# Line 458  CADJ &     = comlev1_bibj, key=itdkey, b Line 454  CADJ &     = comlev1_bibj, key=itdkey, b
454  #endif  #endif
455    
456  C--     Diagnose Mixed Layer Depth:  C--     Diagnose Mixed Layer Depth:
457          IF ( useGMRedi .OR. doDiagsRho.GE.1 ) THEN          IF ( useGMRedi .OR. doDiagsRho.GE.4 ) THEN
458            CALL CALC_OCE_MXLAYER( rhoK, sigmaR,            CALL CALC_OCE_MXLAYER(
459       &              bi, bj, myTime, myIter, myThid )       I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
460         I              bi, bj, myTime, myIter, myThid )
461          ENDIF          ENDIF
462    
463  #ifdef ALLOW_SALT_PLUME  #ifdef ALLOW_SALT_PLUME
464          IF ( useSALT_PLUME ) THEN          IF ( useSALT_PLUME ) THEN
465            CALL SALT_PLUME_CALC_DEPTH( rhoK, sigmaR,            CALL SALT_PLUME_CALC_DEPTH(
466       &              bi, bj, myTime, myIter, myThid )       I              rhoInSitu(1-OLx,1-OLy,1,bi,bj), sigmaR,
467         I              bi, bj, myTime, myIter, myThid )
468          ENDIF          ENDIF
469  #endif /* ALLOW_SALT_PLUME */  #endif /* ALLOW_SALT_PLUME */
470    
471  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
472          IF ( doDiagsRho.GE.1 ) THEN          IF ( MOD(doDiagsRho,4).GE.2 ) THEN
473            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,            CALL DIAGNOSTICS_FILL (sigmaR, 'DRHODR  ', 0, Nr,
474       &         2, bi, bj, myThid)       &         2, bi, bj, myThid)
475          ENDIF          ENDIF
# Line 624  C--     Calculate iso-neutral slopes for Line 622  C--     Calculate iso-neutral slopes for
622  C--     Calculate Downsloping Flow for Down_Slope parameterization  C--     Calculate Downsloping Flow for Down_Slope parameterization
623           IF ( usingPCoords ) THEN           IF ( usingPCoords ) THEN
624            CALL DWNSLP_CALC_FLOW(            CALL DWNSLP_CALC_FLOW(
625       I                bi, bj, kSurfC,       I                bi, bj, kSurfC, rhoInSitu,
      I                rhoInSitu,  
626       I                myTime, myIter, myThid )       I                myTime, myIter, myThid )
627           ELSE           ELSE
628            CALL DWNSLP_CALC_FLOW(            CALL DWNSLP_CALC_FLOW(
629       I                bi, bj, kLowC,       I                bi, bj, kLowC, rhoInSitu,
      I                rhoInSitu,  
630       I                myTime, myIter, myThid )       I                myTime, myIter, myThid )
631           ENDIF           ENDIF
632          ENDIF          ENDIF
# Line 666  C--   end bi,bj loops. Line 662  C--   end bi,bj loops.
662    
663  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
664        IF ( fluidIsWater .AND. useDiagnostics ) THEN        IF ( fluidIsWater .AND. useDiagnostics ) THEN
665            CALL DIAGS_RHO_G(
666         I                    rhoInSitu, uVel, vVel,
667         I                    myTime, myIter, myThid )
668          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )          CALL DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
669        ENDIF        ENDIF
670        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN        IF ( ivdc_kappa.NE.0 .AND. useDiagnostics ) THEN
671          CALL DIAGNOSTICS_FILL( IVDConvCount,'CONVADJ ',          CALL DIAGNOSTICS_FILL( IVDConvCount, 'CONVADJ ',
672       &                         0, Nr, 0, 1, 1, myThid )       &                               0, Nr, 0, 1, 1, myThid )
673        ENDIF        ENDIF
674  #endif  #endif
675    

Legend:
Removed from v.1.70  
changed lines
  Added in v.1.71

  ViewVC Help
Powered by ViewVC 1.1.22