/[MITgcm]/MITgcm/pkg/ptracers/ptracers_integrate.F
ViewVC logotype

Diff of /MITgcm/pkg/ptracers/ptracers_integrate.F

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

revision 1.37 by jmc, Wed Jan 23 15:30:12 2008 UTC revision 1.44 by jmc, Mon Nov 7 20:23:04 2011 UTC
# Line 25  C !USES: =============================== Line 25  C !USES: ===============================
25  #include "EEPARAMS.h"  #include "EEPARAMS.h"
26  #include "PARAMS.h"  #include "PARAMS.h"
27  #include "DYNVARS.h"  #include "DYNVARS.h"
28    #ifdef ALLOW_LONGSTEP
29    #include "LONGSTEP_PARAMS.h"
30    #endif
31  #include "PTRACERS_SIZE.h"  #include "PTRACERS_SIZE.h"
32  #include "PTRACERS_PARAMS.h"  #include "PTRACERS_PARAMS.h"
33  #include "PTRACERS_RESTART.h"  #include "PTRACERS_RESTART.h"
# Line 85  C  GAD_TR               :: passive trace Line 88  C  GAD_TR               :: passive trace
88        INTEGER GAD_TR        INTEGER GAD_TR
89        LOGICAL calcAdvection        LOGICAL calcAdvection
90        INTEGER iterNb        INTEGER iterNb
91          _RL gTr_AB (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
92    #ifdef ALLOW_DIAGNOSTICS
93          CHARACTER*8 diagName
94          CHARACTER*4 diagSufx
95    C-    Functions:
96          CHARACTER*4 GAD_DIAG_SUFX
97          EXTERNAL    GAD_DIAG_SUFX
98    #endif /* ALLOW_DIAGNOSTICS */
99  CEOP  CEOP
100    
101  C Loop ranges for daughter routines  C Loop ranges for daughter routines
# Line 119  C Loop over tracers Line 130  C Loop over tracers
130  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
131    
132  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
133        rFlx(1,1,kDown,iTracer) = rFlx(1,1,kDown,iTracer)         rFlx(1,1,kDown,iTracer) = rFlx(1,1,kDown,iTracer)
134  c  c
135  CADJ STORE pTracer(:,:,k,bi,bj,iTracer)  CADJ STORE pTracer(:,:,k,bi,bj,iTracer)
136  CADJ &      = comlev1_bibj_k_ptracers, key=kkey, byte=isbyte  CADJ &      = comlev1_bibj_k_ptracers, key=kkey, byte=isbyte
137  CADJ STORE gpTrNm1(:,:,k,bi,bj,iTracer)  CADJ STORE gpTrNm1(:,:,k,bi,bj,iTracer)
138  CADJ &      = comlev1_bibj_k_ptracers, key=kkey, byte=isbyte  CADJ &      = comlev1_bibj_k_ptracers, key=kkey, byte=isbyte
139    # ifdef NONLIN_FRSURF
140    CADJ STORE gpTr(:,:,k,bi,bj,iTracer)
141    CADJ &      = comlev1_bibj_k_ptracers, key=kkey, byte=isbyte
142    CADJ STORE rFlx(:,:,:,iTracer)
143    CADJ &      = comlev1_bibj_k_ptracers, key=kkey, byte=isbyte
144    # endif
145  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
146    
147  C Calculate active tracer tendencies (gPtr) due to internal processes  C Calculate active tracer tendencies (gPtr) due to internal processes
# Line 140  C (advection, [explicit] diffusion, para Line 157  C (advection, [explicit] diffusion, para
157       I                   KappaRtr(1-Olx,1-Oly,iTracer),       I                   KappaRtr(1-Olx,1-Oly,iTracer),
158       I                   gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer),       I                   gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer),
159       I                   pTracer(1-Olx,1-Oly,1,1,1,iTracer),       I                   pTracer(1-Olx,1-Oly,1,1,1,iTracer),
160       I                   GAD_TR,       I                   PTRACERS_dTLev, GAD_TR,
161       I                   PTRACERS_advScheme(iTracer),       I                   PTRACERS_advScheme(iTracer),
162       I                   PTRACERS_advScheme(iTracer),       I                   PTRACERS_advScheme(iTracer),
163       I                   calcAdvection, PTRACERS_ImplVertAdv(iTracer),       I                   calcAdvection, PTRACERS_ImplVertAdv(iTracer),
# Line 161  C External forcing term(s) Line 178  C External forcing term(s)
178    
179  C If using Adams-Bashforth II, then extrapolate tendencies  C If using Adams-Bashforth II, then extrapolate tendencies
180  C gPtr is now the tracer tendency for explicit advection/diffusion  C gPtr is now the tracer tendency for explicit advection/diffusion
       IF ( PTRACERS_AdamsBashGtr(iTracer) ) THEN  
181  #ifdef ALLOW_MATRIX  #ifdef ALLOW_MATRIX
182  C  If matrix is being computed, block call to S/R ADAMS_BASHFORTH2 to  C  If matrix is being computed, skip call to S/R ADAMS_BASHFORTH2 to
183  C  prevent gPtr from being replaced by the average of gPtr and gpTrNm1.  C  prevent gPtr from being replaced by the average of gPtr and gpTrNm1.
184          IF (.NOT.useMATRIX) THEN         IF ( .NOT.useMATRIX .AND.
185  #endif       &      PTRACERS_AdamsBashGtr(iTracer) ) THEN
186    #else /* ALLOW_MATRIX */
187           IF ( PTRACERS_AdamsBashGtr(iTracer) ) THEN
188    #endif /* ALLOW_MATRIX */
189    C       compute iter at beginning of ptracer time step
190    #ifdef ALLOW_LONGSTEP
191            iterNb = myIter - LS_nIter + 1
192            IF (LS_whenToSample.GE.2) iterNb = myIter - LS_nIter
193    #else
194          iterNb = myIter          iterNb = myIter
195          IF (staggerTimeStep) iterNb = myIter - 1          IF (staggerTimeStep) iterNb = myIter - 1
196    #endif
197          CALL ADAMS_BASHFORTH2(          CALL ADAMS_BASHFORTH2(
198       I                      bi,bj,K,       I                      bi,bj,k,
199       U                      gPtr(1-Olx,1-Oly,1,1,1,iTracer),       U                      gPtr(1-Olx,1-Oly,1,1,1,iTracer),
200       U                      gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer),       U                      gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer),
201         U                      gTr_AB,
202       I                      PTRACERS_startAB(iTracer), iterNb, myThid )       I                      PTRACERS_startAB(iTracer), iterNb, myThid )
203  #ifdef ALLOW_MATRIX  #ifdef ALLOW_DIAGNOSTICS
204            IF ( useDiagnostics ) THEN
205              diagSufx = GAD_DIAG_SUFX( GAD_TR, myThid )
206              diagName = 'AB_g'//diagSufx
207              CALL DIAGNOSTICS_FILL(gTr_AB,diagName,k,1,2,bi,bj,myThid)
208          ENDIF          ENDIF
209  #endif  #endif /* ALLOW_DIAGNOSTICS */
210        ENDIF         ENDIF
211    
212  C External forcing term(s)  C External forcing term(s)
213         IF ( tracForcingOutAB.EQ.1 )         IF ( tracForcingOutAB.EQ.1 )
# Line 191  C External forcing term(s) Line 221  C External forcing term(s)
221  C Account for change in level thickness  C Account for change in level thickness
222        IF (nonlinFreeSurf.GT.0) THEN        IF (nonlinFreeSurf.GT.0) THEN
223          CALL FREESURF_RESCALE_G(          CALL FREESURF_RESCALE_G(
224       I                          bi,bj,K,       I                          bi,bj,k,
225       U                          gPtr(1-Olx,1-Oly,1,1,1,iTracer),       U                          gPtr(1-Olx,1-Oly,1,1,1,iTracer),
226       I                          myThid )       I                          myThid )
227          IF ( PTRACERS_AdamsBashGtr(iTracer) )          IF ( PTRACERS_AdamsBashGtr(iTracer) )
228       &  CALL FREESURF_RESCALE_G(       &  CALL FREESURF_RESCALE_G(
229       I                          bi,bj,K,       I                          bi,bj,k,
230       U                          gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer),       U                          gpTrNm1(1-Olx,1-Oly,1,1,1,iTracer),
231       I                          myThid )       I                          myThid )
232        ENDIF        ENDIF
# Line 204  C Account for change in level thickness Line 234  C Account for change in level thickness
234    
235  C Integrate forward in time, storing in gPtr:  G=T+dt*G  C Integrate forward in time, storing in gPtr:  G=T+dt*G
236           CALL TIMESTEP_TRACER(           CALL TIMESTEP_TRACER(
237       I                        bi,bj,iMin,iMax,jMin,jMax,k,       I                        bi, bj, k, PTRACERS_dTLev(k),
      I                        PTRACERS_advScheme(iTracer),  
238       I                        pTracer(1-Olx,1-Oly,1,1,1,iTracer),       I                        pTracer(1-Olx,1-Oly,1,1,1,iTracer),
239       I                        gPtr(1-Olx,1-Oly,1,1,1,iTracer),       U                        gPtr(1-Olx,1-Oly,1,1,1,iTracer),
240       I                        myIter,myThid )       I                        myIter, myThid )
241    
 #ifdef   ALLOW_OBCS  
 C Apply open boundary conditions  
          IF (useOBCS) THEN  
           CALL OBCS_APPLY_PTRACER(  
      I         bi, bj, k, iTracer,  
      U         gPtr(1-Olx,1-Oly,k,bi,bj,iTracer),  
      I         myThid )  
          ENDIF  
 #endif   /* ALLOW_OBCS */  
242  C end of tracer loop  C end of tracer loop
243        ENDDO        ENDDO
244    

Legend:
Removed from v.1.37  
changed lines
  Added in v.1.44

  ViewVC Help
Powered by ViewVC 1.1.22