<p><b>dwj07@fsu.edu</b> 2012-01-20 15:37:29 -0700 (Fri, 20 Jan 2012)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Working version of 4th order advection.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv4.F
===================================================================
--- branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv4.F        2012-01-20 22:15:12 UTC (rev 1404)
+++ branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv4.F        2012-01-20 22:37:29 UTC (rev 1405)
@@ -36,9 +36,11 @@
 !     real (kind=RKIND), dimension( s_old % num_tracers, grid % nVertLevels + 1 ) :: vert_flux
       real (kind=RKIND), dimension(:,:), allocatable :: vert_flux
       integer :: nVertLevels, num_tracers
+      integer, dimension(:), pointer :: maxLevelCell
 
       nVertLevels = grid % nVertLevels
       num_tracers = size(tracers, dim=1)
+      maxLevelCell =&gt; grid % maxLevelCell % array
 
       allocate(vert_flux(num_tracers, nVertLevels+1))
 
@@ -48,13 +50,12 @@
       ! zero fluxes at top and bottom
 
       vert_flux(:,1) = 0.
-      vert_flux(:,grid % nVertLevels+1) = 0.
 
       do iCell=1,grid % nCellsSolve
 
         k = 2
         do iTracer=1,num_tracers
-          vert_flux(iTracer,k) = w(k,iCell)*(zWeightDown(k)*tracers(iTracer,k,iCell)+zWeightUp(k)*tracers(iTracer,k-1,iCell))
+          vert_flux(iTracer,k) = w(k,iCell)*(zWeightUp(k)*tracers(iTracer,k,iCell)+zWeightDown(k)*tracers(iTracer,k-1,iCell))
         enddo
         do k=3,nVertLevels-1
           do iTracer=1,num_tracers
@@ -63,14 +64,16 @@
           end do
         end do
 
-        k = nVertLevels
+        k = maxLevelCell(iCell)
         do iTracer=1,num_tracers
-          vert_flux(iTracer,k) = w(k,iCell)*(zWeightDown(k)*tracers(iTracer,k,iCell)+zWeightUp(k)*tracers(iTracer,k-1,iCell))
+          vert_flux(iTracer,k) = w(k,iCell)*(zWeightUp(k)*tracers(iTracer,k,iCell)+zWeightDown(k)*tracers(iTracer,k-1,iCell))
         enddo
 
-        do k=1,grid % nVertLevelsSolve
+        vert_flux(:,maxLevelCell(iCell)+1) = 0.0
+
+        do k=1,maxLevelCell(iCell)
            do iTracer=1,num_tracers
-             tend(iTracer, k, iCell) = tend(iTracer, k, iCell) - (vert_flux(iTracer, k+1) - vert_flux(iTracer, k)) / zDistance(k)
+             tend(iTracer, k, iCell) = tend(iTracer, k, iCell) + (vert_flux(iTracer, k+1) - vert_flux(iTracer, k))
 !            tracers(iTracer,k,iCell) = (   tracers(iTracer,k,iCell)*h_old(k,iCell) &amp;
 !                  + dt*( tracer_tend(iTracer,k,iCell) -rdnw(k)*(vert_flux(iTracer,k+1)-vert_flux(iTracer,k)) ) )/h_new(k,iCell)
            end do

</font>
</pre>