--- MITgcm/pkg/ptracers/ptracers_integrate.F 2004/11/23 20:21:13 1.21 +++ MITgcm/pkg/ptracers/ptracers_integrate.F 2005/11/06 22:17:33 1.26 @@ -1,4 +1,4 @@ -C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/ptracers/ptracers_integrate.F,v 1.21 2004/11/23 20:21:13 mlosch Exp $ +C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/ptracers/ptracers_integrate.F,v 1.26 2005/11/06 22:17:33 jmc Exp $ C $Name: $ #include "PTRACERS_OPTIONS.h" @@ -15,7 +15,7 @@ I myIter,myTime,myThid ) C !DESCRIPTION: -C Calculates tendancy for passive tracers and integrates forward +C Calculates tendency for passive tracers and integrates forward C in time. C !USES: =============================================================== @@ -73,6 +73,7 @@ INTEGER kUp,kDown,km1 INTEGER GAD_TR LOGICAL calcAdvection + INTEGER iterNb CEOP C Loop over tracers @@ -103,10 +104,11 @@ I PTRACERS_diffK4(iTracer), I KappaRtr(1-Olx,1-Oly,iTracer), I pTracer(1-Olx,1-Oly,1,1,1,iTracer), + I pTracer(1-Olx,1-Oly,1,1,1,iTracer), I GAD_TR, I PTRACERS_advScheme(iTracer), I PTRACERS_advScheme(iTracer), - I calcAdvection, .FALSE., + I calcAdvection, PTRACERS_ImplVertAdv(iTracer), U rFlx(1-Olx,1-Oly,1,iTracer), U gPtr(1-Olx,1-Oly,1,1,1,iTracer), I myTime, myIter, myThid ) @@ -120,14 +122,25 @@ I myIter,myTime,myThid) C If using Adams-Bashforth II, then extrapolate tendancies +C gPtr is now the tracer tendency for explicit advection/diffusion IF ( PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_2ND & .OR.PTRACERS_advScheme(iTracer).EQ.ENUM_UPWIND_3RD & .OR.PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_4TH ) THEN +#ifdef ALLOW_MATRIX +C If matrix is being computed, block call to S/R ADAMS_BASHFORTH2 to +C prevent gPtr from being replaced by the average of gPtr and gPtrNm1. + IF (.NOT.useMATRIX) THEN +#endif + iterNb = myIter + IF (staggerTimeStep) iterNb = myIter - 1 CALL ADAMS_BASHFORTH2( I bi,bj,K, U gPtr(1-Olx,1-Oly,1,1,1,iTracer), U gPtrNm1(1-Olx,1-Oly,1,1,1,iTracer), - I myIter,myThid ) + I iterNb, myThid ) +#ifdef ALLOW_MATRIX + ENDIF +#endif ENDIF C External forcing term(s) @@ -163,6 +176,15 @@ I gPtr(1-Olx,1-Oly,1,1,1,iTracer), I myIter,myThid ) +#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 ) + END IF +#endif /* ALLOW_OBCS */ C end of tracer loop ENDDO