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

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

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

revision 1.6 by adcroft, Tue Sep 4 14:53:10 2001 UTC revision 1.11 by jmc, Fri Dec 3 15:39:11 2004 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
5    
6    CBOP
7    C     !ROUTINE: TIMESTEP_TRACER
8    C     !INTERFACE:
9        SUBROUTINE TIMESTEP_TRACER(        SUBROUTINE TIMESTEP_TRACER(
10       I                     bi, bj, iMin, iMax, jMin, jMax, K,       I                     bi, bj, iMin, iMax, jMin, jMax, K,
11       I                     advection_scheme,       I                     advection_scheme,
12       I                     tracer, gTracer,       I                     tracer, gTracer,
      O                     gTrNm1,  
13       I                     myIter, myThid )       I                     myIter, myThid )
14  C     /==========================================================\  C     !DESCRIPTION: \bv
15  C     | S/R TIMESTEP_TRACER                                      |  C     *==========================================================*
16  C     | o Step model tracer field forward in time                |  C     | S/R TIMESTEP_TRACER                                      
17  C     \==========================================================/  C     | o Step model tracer field forward in time                
18        IMPLICIT NONE  C     *==========================================================*
19    C     \ev
20    
21    C     !USES:
22          IMPLICIT NONE
23  C     == Global variables ===  C     == Global variables ===
24  #include "SIZE.h"  #include "SIZE.h"
25  #include "EEPARAMS.h"  #include "EEPARAMS.h"
26  #include "PARAMS.h"  #include "PARAMS.h"
 #include "GAD.h"  
 #include "GRID.h"  
 #include "SURFACE.h"  
27    
28    C     !INPUT/OUTPUT PARAMETERS:
29  C     == Routine Arguments ==  C     == Routine Arguments ==
30        INTEGER bi,bj,iMin,iMax,jMin,jMax,K        INTEGER bi,bj,iMin,iMax,jMin,jMax,K
31        INTEGER advection_scheme        INTEGER advection_scheme
32        _RL  tracer (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)        _RL  tracer (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
33        _RL  gTracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)        _RL  gTracer(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
       _RL  gTrNm1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)  
34        INTEGER myIter, myThid        INTEGER myIter, myThid
35    
36    C     !LOCAL VARIABLES:
37  C     == Local variables ==  C     == Local variables ==
38        INTEGER i,j        INTEGER i,j
39        _RL ab15,ab05  CEOP
       _RL gTrtmp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)  
   
 C     Adams-Bashforth timestepping weights  
       IF (myIter .EQ. 0) THEN  
        ab15=1.0  
        ab05=0.0  
       ELSE  
        ab15=1.5+abEps  
        ab05=-(0.5+abEps)  
       ENDIF  
40    
41  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
 C     Compute effective G-term:  
       IF ( advection_scheme.EQ.ENUM_CENTERED_2ND  
      & .OR.advection_scheme.EQ.ENUM_UPWIND_3RD  
      & .OR.advection_scheme.EQ.ENUM_CENTERED_4TH ) THEN  
   
 C-    with Adams-Bashforth weights:  
        DO j=jMin,jMax  
         DO i=iMin,iMax  
          gTrtmp(i,j) = ab15*gTracer(i,j,k,bi,bj)  
      &               + ab05*gTrNm1(i,j,k,bi,bj)  
         ENDDO  
        ENDDO  
   
       ELSEIF (advection_scheme.EQ.ENUM_FLUX_LIMIT  
      &    .OR.advection_scheme.EQ.ENUM_DST3  
      &    .OR.advection_scheme.EQ.ENUM_DST3_FLUX_LIMIT ) THEN  
   
 C-    with no Adams-Bashforth weights:  
        DO j=jMin,jMax  
         DO i=iMin,iMax  
          gTrtmp(i,j) = gTracer(i,j,k,bi,bj)  
         ENDDO  
        ENDDO  
   
       ELSE  
        STOP 'TIMESTEP_TRACER: Bad advection_scheme'  
       ENDIF  
   
 #ifdef NONLIN_FRSURF  
       IF (nonlinFreeSurf.GT.0) THEN  
        DO j=jMin,jMax  
         DO i=iMin,iMax  
          IF (k.EQ.ksurfC(i,j,bi,bj)) THEN  
           gTrtmp(i,j) = gTrtmp(i,j)  
      &          *hFacC(i,j,k,bi,bj)/hFac_surfC(i,j,bi,bj)  
          ENDIF  
         ENDDO  
        ENDDO  
       ENDIF  
 #endif /* NONLIN_FRSURF */  
42    
43  C-    Step forward tracer  C-    Extrapolate tendancies to mid-time level (n+1/2)
44        DO j=jMin,jMax        DO j=jMin,jMax
45         DO i=iMin,iMax         DO i=iMin,iMax
46           gTrNm1(i,j,k,bi,bj)=tracer(i,j,k,bi,bj)           gTracer(i,j,k,bi,bj)=tracer(i,j,k,bi,bj)
47       &            +deltaTtracer*gTrtmp(i,j)       &            +deltaTtracer*gTracer(i,j,k,bi,bj)
48         ENDDO         ENDDO
49        ENDDO        ENDDO
50    

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.11

  ViewVC Help
Powered by ViewVC 1.1.22