/[MITgcm]/MITgcm/model/src/thermodynamics.F
ViewVC logotype

Diff of /MITgcm/model/src/thermodynamics.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.80 by jmc, Thu Oct 21 21:25:32 2004 UTC revision 1.81 by jmc, Thu Oct 28 00:30:57 2004 UTC
# Line 129  C     fVer[STUV]               o fVer: V Line 129  C     fVer[STUV]               o fVer: V
129  C                                      is "pipelined" in the vertical  C                                      is "pipelined" in the vertical
130  C                                      so we need an fVer for each  C                                      so we need an fVer for each
131  C                                      variable.  C                                      variable.
132  C     KappaRT,       - Total diffusion in vertical for T and S.  C     kappaRT,       - Total diffusion in vertical at level k, for T and S
133  C     KappaRS          (background + spatially varying, isopycnal term).  C     kappaRS          (background + spatially varying, isopycnal term).
134    C     kappaRTr       - Total diffusion in vertical at level k,
135    C                      for each passive Tracer
136    C     kappaRk        - Total diffusion in vertical, all levels, 1 tracer  
137  C     useVariableK   = T when vertical diffusion is not constant  C     useVariableK   = T when vertical diffusion is not constant
138  C     iMin, iMax     - Ranges and sub-block indices on which calculations  C     iMin, iMax     - Ranges and sub-block indices on which calculations
139  C     jMin, jMax       are applied.  C     jMin, jMax       are applied.
# Line 147  C                      index into fVerTe Line 150  C                      index into fVerTe
150        _RS maskUp  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RS maskUp  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
151        _RL fVerT   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerT   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
152        _RL fVerS   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVerS   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
153          _RL kappaRT (1-Olx:sNx+Olx,1-Oly:sNy+Oly)
154          _RL kappaRS (1-Olx:sNx+Olx,1-Oly:sNy+Oly)
155  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
156        _RL fVerP   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num)        _RL fVerP   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num)
157          _RL kappaRTr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,PTRACERS_num)
158  #endif  #endif
159        _RL KappaRT (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)        _RL kappaRk (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
       _RL KappaRS (1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)  
160        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaX  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
161        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaY  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
162        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)        _RL sigmaR  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
# Line 188  CHPF$ INDEPENDENT Line 193  CHPF$ INDEPENDENT
193  C--    HPF directive to help TAMC  C--    HPF directive to help TAMC
194  CHPF$  INDEPENDENT, NEW (rTrans,fVerT,fVerS  CHPF$  INDEPENDENT, NEW (rTrans,fVerT,fVerS
195  CHPF$&                  ,utrans,vtrans,xA,yA  CHPF$&                  ,utrans,vtrans,xA,yA
196  CHPF$&                  ,KappaRT,KappaRS  CHPF$&                  ,kappaRT,kappaRS
197  CHPF$&                  )  CHPF$&                  )
198  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
199    
# Line 225  C     uninitialised but inert locations. Line 230  C     uninitialised but inert locations.
230            fVerT  (i,j,2) = 0. _d 0            fVerT  (i,j,2) = 0. _d 0
231            fVerS  (i,j,1) = 0. _d 0            fVerS  (i,j,1) = 0. _d 0
232            fVerS  (i,j,2) = 0. _d 0            fVerS  (i,j,2) = 0. _d 0
233              kappaRT(i,j)   = 0. _d 0
234              kappaRS(i,j)   = 0. _d 0
235  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
236            DO ip=1,PTRACERS_num            DO ip=1,PTRACERS_num
237             fVerP  (i,j,1,ip) = 0. _d 0             fVerP  (i,j,1,ip) = 0. _d 0
238             fVerP  (i,j,2,ip) = 0. _d 0             fVerP  (i,j,2,ip) = 0. _d 0
239               kappaRTr(i,j,ip)  = 0. _d 0
240            ENDDO            ENDDO
241  #endif  #endif
242           ENDDO           ENDDO
# Line 238  C     uninitialised but inert locations. Line 246  C     uninitialised but inert locations.
246           DO j=1-OLy,sNy+OLy           DO j=1-OLy,sNy+OLy
247            DO i=1-OLx,sNx+OLx            DO i=1-OLx,sNx+OLx
248  C This is currently also used by IVDC and Diagnostics  C This is currently also used by IVDC and Diagnostics
249             KappaRT(i,j,k)    = 0. _d 0             kappaRk(i,j,k)    = 0. _d 0
            KappaRS(i,j,k)    = 0. _d 0  
250  C- tracer tendency needs to be set to zero (moved here from gad_calc_rhs):  C- tracer tendency needs to be set to zero (moved here from gad_calc_rhs):
251             gT(i,j,k,bi,bj)   = 0. _d 0             gT(i,j,k,bi,bj)   = 0. _d 0
252             gS(i,j,k,bi,bj)   = 0. _d 0             gS(i,j,k,bi,bj)   = 0. _d 0
253  # ifdef ALLOW_PTRACERS  # ifdef ALLOW_PTRACERS
 ceh3 this should have an   IF ( usePTRACERS ) THEN  
254             DO iTracer=1,PTRACERS_numInUse             DO iTracer=1,PTRACERS_numInUse
255              gPTr(i,j,k,bi,bj,itracer) = 0. _d 0              gPTr(i,j,k,bi,bj,itracer) = 0. _d 0
256             ENDDO             ENDDO
# Line 342  C--     Start of thermodynamics loop Line 348  C--     Start of thermodynamics loop
348  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
349  C? Patrick Is this formula correct?  C? Patrick Is this formula correct?
350  cph Yes, but I rewrote it.  cph Yes, but I rewrote it.
351  cph Also, the KappaR? need the index and subscript k!  cph Also, the kappaR? need the index and subscript k!
352           kkey = (itdkey-1)*Nr + k           kkey = (itdkey-1)*Nr + k
353  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
354    
# Line 414  CADJ STORE vTrans(:,:)    = comlev1_bibj Line 420  CADJ STORE vTrans(:,:)    = comlev1_bibj
420    
421  #ifdef  INCLUDE_CALC_DIFFUSIVITY_CALL  #ifdef  INCLUDE_CALC_DIFFUSIVITY_CALL
422  C--      Calculate the total vertical diffusivity  C--      Calculate the total vertical diffusivity
423           CALL CALC_DIFFUSIVITY(            IF ( .NOT.implicitDiffusion ) THEN
424       I        bi,bj,iMin,iMax,jMin,jMax,k,              CALL CALC_DIFFUSIVITY(
425       I        maskUp,       I          bi,bj,iMin,iMax,jMin,jMax,k,
426       O        KappaRT,KappaRS,       I          maskUp,
427       I        myThid)       O          kappaRT,kappaRS,
428         I          myThid)
429              ENDIF
430  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
431  CADJ STORE KappaRT(:,:,k)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE kappaRT(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
432  CADJ STORE KappaRS(:,:,k)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE kappaRS(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
433  # endif /* ALLOW_AUTODIFF_TAMC */  # endif /* ALLOW_AUTODIFF_TAMC */
434  #endif  #endif
435    
# Line 437  C        and step forward storing result Line 445  C        and step forward storing result
445             CALL CALC_GT(             CALL CALC_GT(
446       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,
447       I         xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp,       I         xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp,
448       I         KappaRT(1-Olx,1-Oly,k),       I         kappaRT,
449       U         fVerT,       U         fVerT,
450       I         myTime,myIter,myThid)       I         myTime,myIter,myThid)
451             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
# Line 452  C        and step forward storing result Line 460  C        and step forward storing result
460             CALL CALC_GS(             CALL CALC_GS(
461       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,       I         bi,bj,iMin,iMax,jMin,jMax, k,km1,kup,kDown,
462       I         xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp,       I         xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp,
463       I         KappaRS(1-Olx,1-Oly,k),       I         kappaRS,
464       U         fVerS,       U         fVerS,
465       I         myTime,myIter,myThid)       I         myTime,myIter,myThid)
466             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
# Line 463  C        and step forward storing result Line 471  C        and step forward storing result
471  #endif  #endif
472  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
473           IF ( usePTRACERS ) THEN           IF ( usePTRACERS ) THEN
474               IF ( .NOT.implicitDiffusion ) THEN
475                 CALL PTRACERS_CALC_DIFF(
476         I            bi,bj,iMin,iMax,jMin,jMax,k,
477         I            maskUp,
478         O            kappaRTr,
479         I            myThid)
480               ENDIF
481             CALL PTRACERS_INTEGRATE(             CALL PTRACERS_INTEGRATE(
482       I         bi,bj,k,       I         bi,bj,k,
483       I         xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp,       I         xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp,
484       U         fVerP,       U         fVerP,
485       I         KappaRS(1-Olx,1-Oly,k),       I         kappaRTr,
486       I         myIter,myTime,myThid)       I         myIter,myTime,myThid)
487           ENDIF           ENDIF
488  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */
# Line 496  CADJ &   , key = kkey, byte = isbyte Line 511  CADJ &   , key = kkey, byte = isbyte
511  C--     end of thermodynamic k loop (Nr:1)  C--     end of thermodynamic k loop (Nr:1)
512          ENDDO          ENDDO
513    
514            iMin = 1
515            iMax = sNx
516            jMin = 1
517            jMax = sNy
518    
519  C--     Implicit vertical advection & diffusion  C--     Implicit vertical advection & diffusion
520  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
521            IF ( tempStepping .AND. implicitDiffusion ) THEN
522              CALL CALC_3D_DIFFUSIVITY(
523         I         bi,bj,iMin,iMax,jMin,jMax,
524         I         GAD_TEMPERATURE, useGMredi, useKPP,
525         O         kappaRk,
526         I         myThid)
527            ENDIF
528  #ifdef INCLUDE_IMPLVERTADV_CODE  #ifdef INCLUDE_IMPLVERTADV_CODE
529          IF ( tempImplVertAdv ) THEN          IF ( tempImplVertAdv ) THEN
530            CALL GAD_IMPLICIT_R(            CALL GAD_IMPLICIT_R(
531       I         tempImplVertAdv, tempAdvScheme, GAD_TEMPERATURE,       I         tempImplVertAdv, tempAdvScheme, GAD_TEMPERATURE,
532       I         kappaRT, wVel, theta,       I         kappaRk, wVel, theta,
533       U         gT,       U         gT,
534       I         bi, bj, myTime, myIter, myThid )       I         bi, bj, myTime, myIter, myThid )
535          ELSEIF ( tempStepping .AND. implicitDiffusion ) THEN          ELSEIF ( tempStepping .AND. implicitDiffusion ) THEN
# Line 511  C--     Implicit vertical advection & di Line 537  C--     Implicit vertical advection & di
537          IF     ( tempStepping .AND. implicitDiffusion ) THEN          IF     ( tempStepping .AND. implicitDiffusion ) THEN
538  #endif /* INCLUDE_IMPLVERTADV_CODE */  #endif /* INCLUDE_IMPLVERTADV_CODE */
539  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
540  CADJ STORE KappaRT(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE kappaRk(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte
541  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte
542  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
543            CALL IMPLDIFF(            CALL IMPLDIFF(
544       I         bi, bj, iMin, iMax, jMin, jMax,       I         bi, bj, iMin, iMax, jMin, jMax,
545       I         deltaTtracer, KappaRT, recip_HFacC,       I         deltaTtracer, kappaRk, recip_HFacC,
546       U         gT,       U         gT,
547       I         myThid )       I         myThid )
548          ENDIF          ENDIF
549  #endif  #endif /* ndef ALLOW_OFFLINE */
550    
551    #ifdef ALLOW_TIMEAVE
552    #ifndef HRCUBE
553            useVariableK = useKPP .OR. usePP81 .OR. useMY82 .OR. useGGL90
554         &       .OR. useGMredi .OR. ivdc_kappa.NE.0.
555            IF (taveFreq.GT.0. .AND. useVariableK ) THEN
556             IF (implicitDiffusion) THEN
557               CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, gT, kappaRk,
558         I                        Nr, 3, deltaTclock, bi, bj, myThid)
559    c        ELSE
560    c          CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, theta, kappaRT,
561    c    I                        Nr, 3, deltaTclock, bi, bj, myThid)
562             ENDIF
563            ENDIF
564    #endif /* ndef HRCUBE */
565    #endif /* ALLOW_TIMEAVE */
566    
567  #ifndef ALLOW_OFFLINE  #ifndef ALLOW_OFFLINE
568            IF ( saltStepping .AND. implicitDiffusion ) THEN
569              CALL CALC_3D_DIFFUSIVITY(
570         I         bi,bj,iMin,iMax,jMin,jMax,
571         I         GAD_SALINITY, useGMredi, useKPP,
572         O         kappaRk,
573         I         myThid)
574            ENDIF
575    
576  #ifdef INCLUDE_IMPLVERTADV_CODE  #ifdef INCLUDE_IMPLVERTADV_CODE
577          IF ( saltImplVertAdv ) THEN          IF ( saltImplVertAdv ) THEN
578            CALL GAD_IMPLICIT_R(            CALL GAD_IMPLICIT_R(
579       I         saltImplVertAdv, saltAdvScheme, GAD_SALINITY,       I         saltImplVertAdv, saltAdvScheme, GAD_SALINITY,
580       I         kappaRS, wVel, salt,       I         kappaRk, wVel, salt,
581       U         gS,       U         gS,
582       I         bi, bj, myTime, myIter, myThid )       I         bi, bj, myTime, myIter, myThid )
583          ELSEIF ( saltStepping .AND. implicitDiffusion ) THEN          ELSEIF ( saltStepping .AND. implicitDiffusion ) THEN
# Line 535  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bib Line 585  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bib
585          IF     ( saltStepping .AND. implicitDiffusion ) THEN          IF     ( saltStepping .AND. implicitDiffusion ) THEN
586  #endif /* INCLUDE_IMPLVERTADV_CODE */  #endif /* INCLUDE_IMPLVERTADV_CODE */
587  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
588  CADJ STORE KappaRS(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE kappaRk(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte
589  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte
590  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
591            CALL IMPLDIFF(            CALL IMPLDIFF(
592       I         bi, bj, iMin, iMax, jMin, jMax,       I         bi, bj, iMin, iMax, jMin, jMax,
593       I         deltaTtracer, KappaRS, recip_HFacC,       I         deltaTtracer, kappaRk, recip_HFacC,
594       U         gS,       U         gS,
595       I         myThid )       I         myThid )
596          ENDIF          ENDIF
597  #endif  #endif
598    
599  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
 c #ifdef INCLUDE_IMPLVERTADV_CODE  
 c       IF ( usePTRACERS .AND. ptracerImplVertAdv ) THEN  
 c       ELSEIF ( usePTRACERS .AND. implicitDiffusion ) THEN  
 c #else  
600          IF     ( usePTRACERS .AND. implicitDiffusion ) THEN          IF     ( usePTRACERS .AND. implicitDiffusion ) THEN
601  C--     Vertical diffusion (implicit) for passive tracers  C--     Vertical diffusion (implicit) for passive tracers
602             CALL PTRACERS_IMPLDIFF( bi,bj,KappaRS,myThid )             CALL PTRACERS_IMPLDIFF( bi,bj,kappaRk,myThid )
603          ENDIF          ENDIF
604  #endif /* ALLOW_PTRACERS */  #endif /* ALLOW_PTRACERS */
605    
# Line 578  C--      Apply open boundary conditions Line 624  C--      Apply open boundary conditions
624            CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,            CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount,
625       I                           Nr, deltaTclock, bi, bj, myThid)       I                           Nr, deltaTclock, bi, bj, myThid)
626          ENDIF          ENDIF
         useVariableK = useKPP .OR. usePP81 .OR. useMY82 .OR. useGGL90  
      &       .OR. useGMredi .OR. ivdc_kappa.NE.0.  
         IF (taveFreq.GT.0. .AND. useVariableK ) THEN  
          IF (implicitDiffusion) THEN  
           CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, gT, kappaRT,  
      I                        Nr, 3, deltaTclock, bi, bj, myThid)  
          ELSE  
           CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, theta, kappaRT,  
      I                        Nr, 3, deltaTclock, bi, bj, myThid)  
          ENDIF  
         ENDIF  
627  #endif /* ndef HRCUBE */  #endif /* ndef HRCUBE */
628  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
629    

Legend:
Removed from v.1.80  
changed lines
  Added in v.1.81

  ViewVC Help
Powered by ViewVC 1.1.22