--- MITgcm/pkg/ptracers/ptracers_integrate.F 2003/08/04 22:53:42 1.8 +++ MITgcm/pkg/ptracers/ptracers_integrate.F 2004/01/07 21:21:26 1.13 @@ -1,4 +1,4 @@ -C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/ptracers/ptracers_integrate.F,v 1.8 2003/08/04 22:53:42 dimitri Exp $ +C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/pkg/ptracers/ptracers_integrate.F,v 1.13 2004/01/07 21:21:26 jmc Exp $ C $Name: $ #include "PTRACERS_OPTIONS.h" @@ -14,8 +14,9 @@ C !INTERFACE: ========================================================== SUBROUTINE PTRACERS_INTEGRATE( I bi,bj,k, - I xA,yA,uTrans,vTrans,rTrans,maskUp, - X KappaRtr, + I xA,yA,uTrans,vTrans,rTrans, + I rTransKp1,maskUp, + X rFlx,KappaRtr, I myIter,myTime,myThid ) C !DESCRIPTION: @@ -27,6 +28,7 @@ #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" +#include "DYNVARS.h" #include "PTRACERS.h" #include "GAD.h" @@ -37,8 +39,10 @@ C yA :: face area at V points in level k C uTrans :: zonal transport in level k C vTrans :: meridional transport in level k -C rTrans :: vertical transport across level k +C rTrans :: vertical volume transport at interface k +C rTransKp1 :: vertical volume transport at interface k+1 C maskUp :: mask for vertical transport +C rFlx :: vertical flux C KappaRtr :: vertical diffusion of passive tracers C NOTE! This is infact KappaRS from thermodynamics() C and is being used only temporarily @@ -53,7 +57,9 @@ _RL uTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL vTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL rTrans (1-OLx:sNx+OLx,1-OLy:sNy+OLy) + _RL rTransKp1(1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RS maskUp (1-OLx:sNx+OLx,1-OLy:sNy+OLy) + _RL rFlx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num) _RL KappaRtr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr) INTEGER myIter _RL myTime @@ -69,12 +75,10 @@ C iMin,iMax,jMin,jMax :: loop ranges C kUp,kDown :: toggle indices for even/odd level fluxes C km1 :: =min(1,k-1) -C rFlx :: vertical flux C GAD_TR :: passive tracer id (GAD_TR1+iTracer-1) INTEGER i,j,iTracer INTEGER iMin,iMax,jMin,jMax INTEGER kUp,kDown,km1 - _RL rFlx(1-OLx:sNx+OLx,1-OLy:sNy+OLy,2,PTRACERS_num) INTEGER GAD_TR LOGICAL calcAdvection CEOP @@ -82,16 +86,6 @@ C Loop over tracers DO iTracer=1,PTRACERS_numInUse -C Initialize vertical flux to zero and set no-flux across k=Nr+1 - IF (k.EQ.Nr) THEN - DO j=1-Oly,sNy+Oly - DO i=1-Olx,sNx+Olx - rFlx(i,j,1,iTracer)=0. - rFlx(i,j,2,iTracer)=0. - ENDDO - ENDDO - ENDIF - C Loop ranges for daughter routines iMin = 1-OLx+2 iMax = sNx+OLx-1 @@ -109,28 +103,39 @@ & .OR. PTRACERS_advScheme(iTracer).EQ.ENUM_UPWIND_3RD & .OR. PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_4TH GAD_TR = GAD_TR1 + iTracer - 1 - CALL GAD_CALC_RHS( - I bi,bj,iMin,iMax,jMin,jMax,k,kM1,kUp,kDown, - I xA,yA,uTrans,vTrans,rTrans,maskUp, - I PTRACERS_diffKh(iTracer), - I PTRACERS_diffK4(iTracer), - I KappaRtr, - I pTracer(1-Olx,1-Oly,1,1,1,iTracer), - I GAD_TR, - I PTRACERS_advScheme(iTracer),calcAdvection, - U rFlx(1-Olx,1-Oly,1,iTracer), - U gPtr(1-Olx,1-Oly,1,1,1,iTracer), - I myThid ) + CALL GAD_CALC_RHS( + I bi,bj,iMin,iMax,jMin,jMax,k,kM1,kUp,kDown, + I xA,yA,uTrans,vTrans,rTrans,rTransKp1,maskUp, + I uVel, vVel, wVel, + I PTRACERS_diffKh(iTracer), + I PTRACERS_diffK4(iTracer), + I KappaRtr, + I pTracer(1-Olx,1-Oly,1,1,1,iTracer), + I GAD_TR, + I PTRACERS_advScheme(iTracer), + I calcAdvection, .FALSE., + U rFlx(1-Olx,1-Oly,1,iTracer), + U gPtr(1-Olx,1-Oly,1,1,1,iTracer), + I myThid ) C External forcing term(s) -cswdptr - add-- -#ifndef PTRACERS_SEPERATE_FORCING +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,k,iTracer, - U gPtr(1-Olx,1-Oly,1,1,1,iTracer), - I myIter,myTime,myThid) + I bi,bj,iMin,iMax,jMin,jMax,k, + U gPtr(1-Olx,1-Oly,1,1,1,iTracer), + I surfaceTendencyPtr(1-Olx,1-Oly,1,1,iTracer), + I myIter,myTime,myThid) cswdptr --add--- #endif cswdptr -- end add --- @@ -148,13 +153,22 @@ C External forcing term(s) cswdptr - add-- -#ifndef PTRACERS_SEPERATE_FORCING +#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,k,iTracer, - U gPtr(1-Olx,1-Oly,1,1,1,iTracer), - I myIter,myTime,myThid) + I bi,bj,iMin,iMax,jMin,jMax,k, + U gPtr(1-Olx,1-Oly,1,1,1,iTracer), + I surfaceTendencyPtr(1-Olx,1-Oly,1,1,iTracer), + I myIter,myTime,myThid) cswdptr - add-- #endif cswdptr -- end add ---