--- MITgcm/pkg/ptracers/ptracers_integrate.F 2004/10/28 00:33:56 1.19 +++ MITgcm/pkg/ptracers/ptracers_integrate.F 2005/10/10 05:53:48 1.25 @@ -1,12 +1,7 @@ -C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/ptracers/ptracers_integrate.F,v 1.19 2004/10/28 00:33:56 jmc Exp $ +C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/ptracers/ptracers_integrate.F,v 1.25 2005/10/10 05:53:48 mlosch Exp $ C $Name: $ #include "PTRACERS_OPTIONS.h" -cswdptr -- add --- -#ifdef ALLOW_GCHEM -# include "GCHEM_OPTIONS.h" -#endif -cswdptr -- end add --- CBOP C !ROUTINE: PTRACERS_INTEGRATE @@ -78,6 +73,7 @@ INTEGER kUp,kDown,km1 INTEGER GAD_TR LOGICAL calcAdvection + INTEGER iterNb CEOP C Loop over tracers @@ -111,65 +107,48 @@ 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 ) C External forcing term(s) -cswdptr --add -- -#ifdef ALLOW_GCHEM -#ifndef PTRACERS_SEPARATE_FORCING - IF ( forcing_In_AB ) - & CALL GCHEM_FORCING_INT( - I bi,bj,iMin,iMax,jMin,jMax,k, - I iTracer, - I myTime,myIter, myThid) -#endif -#else -cswdptr - end add --- IF ( forcing_In_AB ) & CALL PTRACERS_FORCING( - I bi,bj,iMin,iMax,jMin,jMax,k, + I bi,bj,iMin,iMax,jMin,jMax,k,iTracer, U gPtr(1-Olx,1-Oly,1,1,1,iTracer), I surfaceForcingPtr(1-Olx,1-Oly,1,1,iTracer), I myIter,myTime,myThid) -cswdptr --add--- -#endif -cswdptr -- end add --- 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) -cswdptr - add-- -#ifdef ALLOW_GCHEM -#ifndef PTRACERS_SEPARATE_FORCING - IF ( .NOT.forcing_In_AB ) - & CALL GCHEM_FORCING_INT( - I bi,bj,iMin,iMax,jMin,jMax,k, - I iTracer, - I myTime,myIter, myThid) -#endif -#else -cswdptr - end add --- IF ( .NOT.forcing_In_AB ) & CALL PTRACERS_FORCING( - I bi,bj,iMin,iMax,jMin,jMax,k, + I bi,bj,iMin,iMax,jMin,jMax,k,iTracer, U gPtr(1-Olx,1-Oly,1,1,1,iTracer), I surfaceForcingPtr(1-Olx,1-Oly,1,1,iTracer), I myIter,myTime,myThid) -cswdptr - add-- -#endif -cswdptr -- end add --- #ifdef NONLIN_FRSURF C Account for change in level thickness @@ -196,6 +175,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