/[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.105 by jmc, Sun Jun 18 23:22:43 2006 UTC revision 1.114 by jmc, Tue Jan 16 04:40:05 2007 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  #include "PACKAGES_CONFIG.h"  #include "PACKAGES_CONFIG.h"
5  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
6    #ifdef ALLOW_GENERIC_ADVDIFF
7    # include "GAD_OPTIONS.h"
8    #endif
9    
10  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
11  # ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
# Line 78  C     == Global variables === Line 81  C     == Global variables ===
81  #include "DYNVARS.h"  #include "DYNVARS.h"
82  #include "GRID.h"  #include "GRID.h"
83  #ifdef ALLOW_GENERIC_ADVDIFF  #ifdef ALLOW_GENERIC_ADVDIFF
84  #include "GAD.h"  # include "GAD.h"
85    # include "GAD_SOM_VARS.h"
86  #endif  #endif
87  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
88  #include "PTRACERS_SIZE.h"  # include "PTRACERS_SIZE.h"
89  #include "PTRACERS.h"  # include "PTRACERS.h"
90  #endif  #endif
91  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
92  #include "TIMEAVE_STATV.h"  # include "TIMEAVE_STATV.h"
93  #endif  #endif
94    
95  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 177  C                      index into fVerTe Line 181  C                      index into fVerTe
181  CEOP  CEOP
182    
183  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
184           IF ( debugLevel .GE. debLevB )           IF ( debugLevel .GE. debLevB )
185       &    CALL DEBUG_ENTER('THERMODYNAMICS',myThid)       &    CALL DEBUG_ENTER('THERMODYNAMICS',myThid)
186  #endif  #endif
187    
# Line 192  C--   HPF directive to help TAMC Line 196  C--   HPF directive to help TAMC
196  CHPF$ INDEPENDENT  CHPF$ INDEPENDENT
197  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
198    
199    C-- Compute correction at the surface for Lin Free Surf.
200          IF (linFSConserveTr)
201         &   CALL CALC_WSURF_TR(theta,salt,wVel,
202         &                      myTime,myIter,myThid)
203    
204        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
205    
206  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 316  CADJ STORE theta(:,:,:,bi,bj) = comlev1_ Line 325  CADJ STORE theta(:,:,:,bi,bj) = comlev1_
325  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
326  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
327  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
 cph-test  
328  # ifdef ALLOW_DEPTH_CONTROL  # ifdef ALLOW_DEPTH_CONTROL
329  CADJ STORE gtnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE gtnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
330  CADJ STORE gsnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte  CADJ STORE gsnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
# Line 334  C to be able to exclude this scheme to a Line 342  C to be able to exclude this scheme to a
342  C recomputation. It *is* differentiable, if you need it.  C recomputation. It *is* differentiable, if you need it.
343  C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to  C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to
344  C disable this section of code.  C disable this section of code.
345    #ifdef GAD_ALLOW_SOM_ADVECT
346            IF ( tempSOM_Advection ) THEN
347    #ifdef ALLOW_DEBUG
348              IF ( debugLevel .GE. debLevB )
349         &     CALL DEBUG_CALL('GAD_SOM_ADVECT',myThid)
350    #endif
351              CALL GAD_SOM_ADVECT(
352         I             tempImplVertAdv, tempAdvScheme, tempVertAdvScheme,
353         I             GAD_TEMPERATURE,
354         I             uVel, vVel, wVel, theta,
355         U             som_T,
356         O             gT,
357         I             bi,bj,myTime,myIter,myThid)
358            ELSEIF (tempMultiDimAdvec) THEN
359    #else /* GAD_ALLOW_SOM_ADVECT */
360          IF (tempMultiDimAdvec) THEN          IF (tempMultiDimAdvec) THEN
361    #endif /* GAD_ALLOW_SOM_ADVECT */
362  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
363            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
364       &     CALL DEBUG_CALL('GAD_ADVECTION',myThid)       &     CALL DEBUG_CALL('GAD_ADVECTION',myThid)
365  #endif  #endif
366            CALL GAD_ADVECTION(            CALL GAD_ADVECTION(
# Line 346  C disable this section of code. Line 370  C disable this section of code.
370       O             gT,       O             gT,
371       I             bi,bj,myTime,myIter,myThid)       I             bi,bj,myTime,myIter,myThid)
372          ENDIF          ENDIF
373    #ifdef GAD_ALLOW_SOM_ADVECT
374            IF ( saltSOM_Advection ) THEN
375    #ifdef ALLOW_DEBUG
376              IF ( debugLevel .GE. debLevB )
377         &     CALL DEBUG_CALL('GAD_SOM_ADVECT',myThid)
378    #endif
379              CALL GAD_SOM_ADVECT(
380         I             saltImplVertAdv, saltAdvScheme, saltVertAdvScheme,
381         I             GAD_SALINITY,
382         I             uVel, vVel, wVel, salt,
383         U             som_S,
384         O             gS,
385         I             bi,bj,myTime,myIter,myThid)
386            ELSEIF (saltMultiDimAdvec) THEN
387    #else /* GAD_ALLOW_SOM_ADVECT */
388          IF (saltMultiDimAdvec) THEN          IF (saltMultiDimAdvec) THEN
389    #endif /* GAD_ALLOW_SOM_ADVECT */
390  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
391            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
392       &     CALL DEBUG_CALL('GAD_ADVECTION',myThid)       &     CALL DEBUG_CALL('GAD_ADVECTION',myThid)
393  #endif  #endif
394            CALL GAD_ADVECTION(            CALL GAD_ADVECTION(
# Line 365  C of whether multiDimAdvection is set or Line 405  C of whether multiDimAdvection is set or
405  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
406          IF ( usePTRACERS ) THEN          IF ( usePTRACERS ) THEN
407  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
408            IF ( debugLevel .GE. debLevB )            IF ( debugLevel .GE. debLevB )
409       &     CALL DEBUG_CALL('PTRACERS_ADVECTION',myThid)       &     CALL DEBUG_CALL('PTRACERS_ADVECTION',myThid)
410  #endif  #endif
411           CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid )           CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid )
# Line 374  C of whether multiDimAdvection is set or Line 414  C of whether multiDimAdvection is set or
414  #endif /* DISABLE_MULTIDIM_ADVECTION */  #endif /* DISABLE_MULTIDIM_ADVECTION */
415    
416  #ifdef ALLOW_DEBUG  #ifdef ALLOW_DEBUG
417          IF ( debugLevel .GE. debLevB )          IF ( debugLevel .GE. debLevB )
418       &    CALL DEBUG_MSG('ENTERING DOWNWARD K LOOP',myThid)       &    CALL DEBUG_MSG('ENTERING DOWNWARD K LOOP',myThid)
419  #endif  #endif
420    
# Line 419  CADJ STORE rTransKp1(:,:) = comlev1_bibj Line 459  CADJ STORE rTransKp1(:,:) = comlev1_bibj
459    
460  C--       Get temporary terms used by tendency routines :  C--       Get temporary terms used by tendency routines :
461  C-        Calculate horizontal "volume transport" through tracer cell face  C-        Calculate horizontal "volume transport" through tracer cell face
462    C         anelastic: uTrans,vTrans are scaled by rhoFacC (~ mass transport)
463            CALL CALC_COMMON_FACTORS (            CALL CALC_COMMON_FACTORS (
464       I         uVel, vVel,       I         uVel, vVel,
465       O         uFld, vFld, uTrans, vTrans, xA, yA,       O         uFld, vFld, uTrans, vTrans, xA, yA,
# Line 436  C-         Surface interface : Line 477  C-         Surface interface :
477             ENDDO             ENDDO
478            ELSE            ELSE
479  C-         Interior interface :  C-         Interior interface :
480    C          anelastic: rTrans is scaled by rhoFacF (~ mass transport)
481             DO j=1-Oly,sNy+Oly             DO j=1-Oly,sNy+Oly
482              DO i=1-Olx,sNx+Olx              DO i=1-Olx,sNx+Olx
483               wFld(i,j)   = wVel(i,j,k,bi,bj)               wFld(i,j)   = wVel(i,j,k,bi,bj)
484               maskUp(i,j) = maskC(i,j,k-1,bi,bj)*maskC(i,j,k,bi,bj)               maskUp(i,j) = maskC(i,j,k-1,bi,bj)*maskC(i,j,k,bi,bj)
485               rTrans(i,j) = wFld(i,j)*rA(i,j,bi,bj)*maskUp(i,j)               rTrans(i,j) = wFld(i,j)*rA(i,j,bi,bj)*maskUp(i,j)
486         &                              *deepFac2F(k)*rhoFacF(k)
487              ENDDO              ENDDO
488             ENDDO             ENDDO
489            ENDIF            ENDIF
# Line 451  C--   Residual transp = Bolus transp + E Line 494  C--   Residual transp = Bolus transp + E
494              CALL GMREDI_CALC_UVFLOW(              CALL GMREDI_CALC_UVFLOW(
495       U                  uFld, vFld, uTrans, vTrans,       U                  uFld, vFld, uTrans, vTrans,
496       I                  k, bi, bj, myThid )       I                  k, bi, bj, myThid )
497              IF (K.GE.2) CALL GMREDI_CALC_WFLOW(              IF (K.GE.2) THEN
498                  CALL GMREDI_CALC_WFLOW(
499       U                  wFld, rTrans,       U                  wFld, rTrans,
500       I                  k, bi, bj, myThid )       I                  k, bi, bj, myThid )
501                ENDIF
502            ENDIF            ENDIF
503  # ifdef ALLOW_AUTODIFF_TAMC  # ifdef ALLOW_AUTODIFF_TAMC
504  CADJ STORE rTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE rTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
505    CADJ STORE wfld(:,:)      = comlev1_bibj_k, key=kkey, byte=isbyte
506  # ifdef GM_BOLUS_ADVEC  # ifdef GM_BOLUS_ADVEC
507    CADJ STORE ufld(:,:)      = comlev1_bibj_k, key=kkey, byte=isbyte
508    CADJ STORE vfld(:,:)      = comlev1_bibj_k, key=kkey, byte=isbyte
509  CADJ STORE uTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE uTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
510  CADJ STORE vTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE vTrans(:,:)    = comlev1_bibj_k, key=kkey, byte=isbyte
511  # endif  # endif
# Line 497  CADJ STORE kvz(:,:,k,bi,bj) = comlev1_bi Line 545  CADJ STORE kvz(:,:,k,bi,bj) = comlev1_bi
545  #   endif  #   endif
546  #  endif  #  endif
547  # endif /* ALLOW_AUTODIFF_TAMC */  # endif /* ALLOW_AUTODIFF_TAMC */
548    C
549    #ifdef ALLOW_AUTODIFF_TAMC
550    # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
551    cph-test
552    CADJ STORE uFld(:,:), vFld(:,:), wFld(:,:)
553    CADJ &     = comlev1_bibj_k, key=kkey, byte=isbyte
554    CADJ STORE uTrans(:,:), vTrans(:,:)
555    CADJ &     = comlev1_bibj_k, key=kkey, byte=isbyte
556    CADJ STORE xA(:,:), yA(:,:)
557    CADJ &     = comlev1_bibj_k, key=kkey, byte=isbyte
558    # endif
559    #endif /* ALLOW_AUTODIFF_TAMC */
560    C
561           IF ( tempStepping ) THEN           IF ( tempStepping ) THEN
562  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
563  CADJ STORE gTnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE gTnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
564  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
565  CADJ STORE gT(:,:,k,bi,bj)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE fvert(:,:,:) = comlev1_bibj_k, key=kkey, byte=isbyte
566  # endif  # endif
567  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
568            CALL CALC_GT(            CALL CALC_GT(
# Line 534  CADJ STORE gT(:,:,k,bi,bj)    = comlev1_ Line 595  CADJ STORE gT(:,:,k,bi,bj)    = comlev1_
595  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
596  CADJ STORE gSnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE gSnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
597  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)  # if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL)
598  CADJ STORE gS(:,:,k,bi,bj)    = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE fvers(:,:,:)       = comlev1_bibj_k, key=kkey, byte=isbyte
599  # endif  # endif
600  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
601            CALL CALC_GS(            CALL CALC_GS(

Legend:
Removed from v.1.105  
changed lines
  Added in v.1.114

  ViewVC Help
Powered by ViewVC 1.1.22