<p><b>mpetersen@lanl.gov</b> 2010-05-04 21:51:01 -0600 (Tue, 04 May 2010)</p><p>Added upwind tracer advection to z-level branch.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/Registry
===================================================================
--- branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/Registry        2010-05-05 00:32:23 UTC (rev 247)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/Registry        2010-05-05 03:51:01 UTC (rev 248)
@@ -19,6 +19,8 @@
 namelist real      hmix     config_hor_diffusion     2000.0
 namelist real      vmix     config_vert_viscosity    2.5e-4
 namelist real      vmix     config_vert_diffusion    2.5e-5
+namelist character advection  config_hor_tracer_adv  'centered'
+namelist character advection  config_vert_tracer_adv 'centered'
 
 
 #

Modified: branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F
===================================================================
--- branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F        2010-05-05 00:32:23 UTC (rev 247)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F        2010-05-05 03:51:01 UTC (rev 248)
@@ -588,7 +588,7 @@
       type (grid_state), intent(in) :: s
       type (grid_meta), intent(in) :: grid
 
-      integer :: iCell, iEdge, k, iTracer, cell1, cell2, &amp;
+      integer :: iCell, iEdge, k, iTracer, cell1, cell2, upwindCell,&amp;
         nEdges, nCells, nVertLevels
       real (kind=RKIND) :: flux, tracer_edge, r, &amp;
         Tmid(num_tracers,grid % nVertLevels)
@@ -626,7 +626,9 @@
 
       ! Horizontal advection of tracers
       tend_tr(:,:,:) = 0.0
-      do iEdge=1,nEdges
+      if (config_hor_tracer_adv.eq.'centered') then
+
+       do iEdge=1,nEdges
          cell1 = cellsOnEdge(1,iEdge)
          cell2 = cellsOnEdge(2,iEdge)
          if (cell1 &gt; 0 .and. cell2 &gt; 0) then
@@ -641,9 +643,33 @@
                end do 
             end do 
          end if
-      end do 
+       end do 
 
+      elseif (config_hor_tracer_adv.eq.'upwind') then
 
+       do iEdge=1,nEdges
+         cell1 = cellsOnEdge(1,iEdge)
+         cell2 = cellsOnEdge(2,iEdge)
+         if (cell1 &gt; 0 .and. cell2 &gt; 0) then
+            do k=1,nVertLevels
+               if (u(k,iEdge)&gt;0.0) then
+                 upwindCell = cell1
+               else
+                 upwindCell = cell2
+               endif
+               do iTracer=1,num_tracers
+                  flux = u(k,iEdge) * dvEdge(iEdge) * h_edge(k,iEdge) &amp;
+                         * tracers(iTracer,k,upwindCell)
+                  tend_tr(iTracer,k,cell1) = tend_tr(iTracer,k,cell1) - flux
+                  tend_tr(iTracer,k,cell2) = tend_tr(iTracer,k,cell2) + flux
+               end do 
+            end do 
+         end if
+       end do 
+
+      endif
+
+
       ! mrp 100409 computation of h tendency was, only had div.(huT) term
       !do iCell=1,grid % nCellsSolve
       !   do k=1,grid % nVertLevelsSolve
@@ -662,13 +688,30 @@
          ! For now, Tmid is just the average of the upper and lower points.
          ! Can use a fancier interpolation later.
          ! change nVertLevels to KMT later
-         do k=1,nVertLevels-1
+         if (config_vert_tracer_adv.eq.'centered') then
+
+          do k=1,nVertLevels-1
             do iTracer=1,num_tracers
                Tmid(iTracer,k) = (   tracers(iTracer,k  ,iCell) &amp;
                                    + tracers(iTracer,k+1,iCell))/2.0
             end do
-         end do
+          end do
+         
+         elseif (config_vert_tracer_adv.eq.'upwind') then
 
+          do k=1,nVertLevels-1
+            if (Fv(k,iCell)&gt;0.0) then
+              upwindCell = k+1
+            else
+              upwindCell = k
+            endif
+            do iTracer=1,num_tracers
+               Tmid(iTracer,k) = tracers(iTracer,upwindCell,iCell)
+            end do
+          end do
+
+         endif
+
          ! The next loop could be combined with the later two for better efficiency.
          ! Keep separate now for clarity.
          do k=1,grid % nVertLevelsSolve

</font>
</pre>