<p><b>dwj07@fsu.edu</b> 2012-01-20 13:43:38 -0700 (Fri, 20 Jan 2012)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Committing a working copy of vadv3 for standard advection scheme.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/advection_routines/src/core_ocean/mpas_ocn_tendency.F
===================================================================
--- branches/ocean_projects/advection_routines/src/core_ocean/mpas_ocn_tendency.F        2012-01-20 16:28:23 UTC (rev 1400)
+++ branches/ocean_projects/advection_routines/src/core_ocean/mpas_ocn_tendency.F        2012-01-20 20:43:38 UTC (rev 1401)
@@ -310,7 +310,7 @@
       type (diag_type), intent(in) :: d
       type (mesh_type), intent(in) :: grid
 
-      real (kind=RKIND), dimension(:), pointer :: hRatioZLevelK, hRatioZLevelKm1, zTopZLevel
+      real (kind=RKIND), dimension(:), pointer :: hRatioZLevelK, hRatioZLevelKm1, zTopZLevel, hMeanTopZLevel
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
         u,h,wTop, h_edge, vertDiffTopOfCell
       real (kind=RKIND), dimension(:,:,:), pointer :: &amp;
@@ -332,6 +332,7 @@
       zTopZLevel =&gt; grid % zTopZLevel % array
       hRatioZLevelK =&gt; grid % hRatioZLevelK % array
       hRatioZLevelKm1 =&gt; grid % hRatioZLevelKm1 % array
+      hMeanTopZLevel =&gt; grid % hMeanTopZLevel % array
 
       tend_tr     =&gt; tend % tracers % array
 
@@ -357,7 +358,7 @@
       ! tracer_edge at the boundary will also need to be defined for flux boundaries.
 
       call mpas_timer_start(&quot;adv&quot;, .false., tracerHadvTimer)
-      call mpas_tracer_advection_tend(tracers, uh, wTop, zTopZlevel, hRatioZLevelk, hRatioZLevelKm1, grid, tend_tr)
+      call mpas_tracer_advection_tend(tracers, uh, wTop, hMeanTopZLevel, hRatioZLevelKm1, hRatioZLevelK, grid, tend_tr)
       call mpas_timer_stop(&quot;adv&quot;, tracerHadvTimer)
 !     call mpas_timer_start(&quot;hadv&quot;, .false., tracerHadvTimer)
 !     call ocn_tracer_hadv_tend(grid, u, h_edge, tracers, tend_tr, err)

Modified: branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_helpers.F
===================================================================
--- branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_helpers.F        2012-01-20 16:28:23 UTC (rev 1400)
+++ branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_helpers.F        2012-01-20 20:43:38 UTC (rev 1401)
@@ -8,13 +8,13 @@
    contains
 
    real function flux4(q_im2, q_im1, q_i, q_ip1, u)!{{{
-        real (kind=RKIND) :: q_im2, q_im1, q_i, q_ip1, u
+        real (kind=RKIND), intent(in) :: q_im2, q_im1, q_i, q_ip1, u
         flux4 = u*( 7.*(q_i + q_im1) - (q_ip1 + q_im2) )/12.0
-!       flux4(q_im2, q_im1, q_i, q_ip1, ua) = ua*( 7.*(q_i + q_im1) - (q_ip1 + q_im2) )/12.0
    end function!}}}
 
    real function flux3( q_im2, q_im1, q_i, q_ip1, u, coef)!{{{
-        real (kind=RKIND) :: q_im2, q_im1, q_i, q_ip1, u, coef
+        real (kind=RKIND), intent(in) :: q_im2, q_im1, q_i, q_ip1, u, coef
+
         flux3 = (u * (7.0 * (q_i + q_im1) - (q_ip1 + q_im2)) + coef * abs(u) * ((q_ip1 - q_im2) - 3.0*(q_i-q_im1)))/12.0
    end function!}}}
 

Modified: branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_hadv.F
===================================================================
--- branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_hadv.F        2012-01-20 16:28:23 UTC (rev 1400)
+++ branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_hadv.F        2012-01-20 20:43:38 UTC (rev 1401)
@@ -67,16 +67,12 @@
       do iEdge=1,grid%nEdges
          cell1 = cellsOnEdge(1,iEdge)
          cell2 = cellsOnEdge(2,iEdge)
-         if (cell1 &lt;= grid%nCells .or. cell2 &lt;= grid%nCells) then  ! only for owned cells
+         if (cell1 &lt;= grid%nCellsSolve .or. cell2 &lt;= grid%nCellsSolve) then  ! only for owned cells
             flux_arr(:,:) = 0.
             do i=1,nAdvCellsForEdge(iEdge)
               iCell = advCellsForEdge(i,iEdge)
               do k=1,grid % nVertLevels
-!               tracer_weight = adv_coefs(i,iEdge) + coef_3rd_order*sign(1.0, uh(k,iEdge))*adv_coefs_3rd(i,iEdge)
-                tracer_weight = sign(1.0, uh(k,iEdge))
-                tracer_weight = adv_coefs_3rd(i,iEdge)*tracer_weight
-                tracer_weight = coef_3rd_order*tracer_weight
-                tracer_weight = adv_coefs(i,iEdge) + tracer_weight
+                tracer_weight = adv_coefs(i,iEdge) + coef_3rd_order*sign(1.0, uh(k,iEdge))*adv_coefs_3rd(i,iEdge)
                 do iTracer=1,num_tracers
                   flux_arr(iTracer,k) = flux_arr(iTracer,k) + tracer_weight* tracers(iTracer,k,iCell)
                 end do

Modified: branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv3.F
===================================================================
--- branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv3.F        2012-01-20 16:28:23 UTC (rev 1400)
+++ branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv3.F        2012-01-20 20:43:38 UTC (rev 1401)
@@ -38,6 +38,7 @@
 !     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
 
       integer, parameter :: hadv_opt = 2
 
@@ -45,20 +46,21 @@
 
       nVertLevels = grid % nVertLevels
       num_tracers = size(tracers, dim=1)
+      maxLevelCell =&gt; grid % maxLevelCell % array
 
       allocate(vert_flux(num_tracers, nVertLevels+1))
 
       vert_flux(:,1) = 0.
-      vert_flux(:,grid % nVertLevels+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 k=3,maxLevelCell(iCell)-1
           do iTracer=1,num_tracers
             vert_flux(iTracer,k) = flux3( tracers(iTracer,k-2,iCell),tracers(iTracer,k-1,iCell),  &amp;
                                      tracers(iTracer,k  ,iCell),tracers(iTracer,k+1,iCell),  &amp;
@@ -66,15 +68,17 @@
           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)

</font>
</pre>