<p><b>mpetersen@lanl.gov</b> 2010-04-22 15:22:15 -0600 (Thu, 22 Apr 2010)</p><p>Added vertical advection term to momentum equation.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_test_cases.F
===================================================================
--- branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_test_cases.F        2010-04-22 14:51:06 UTC (rev 201)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_test_cases.F        2010-04-22 21:22:15 UTC (rev 202)
@@ -78,8 +78,6 @@
          stop
       end if
 
-print *, 'index_temperature',index_temperature
-
       ! mrp 100121:
       !
       ! Initialize u_src, rho, alpha
@@ -123,9 +121,12 @@
 !             tracers(2,iLevel,iCell) = 5.0  ! temperature
 !             tracers(3,iLevel,iCell) = 35.0  ! salinity
              tracers(index_temperature,iLevel,iCell) = &amp;
-               10.0* xCell(iCell)/2500e3 ! temperature
+               10.0* xCell(iCell)/2500.e3 
              tracers(index_salinity,iLevel,iCell) = &amp;
-               34.0 + 2* yCell(iCell)/4000e3! salinity
+               34.0 + 2* yCell(iCell)/4000.e3 
+             tracers(index_tracer1,iLevel,iCell) = 1.0
+             tracers(index_tracer2,iLevel,iCell) = &amp;
+               (yCell(iCell)/4000.e3 + xCell(iCell)/2500.e3 )/2.0
            enddo
          enddo
 

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-04-22 14:51:06 UTC (rev 201)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F        2010-04-22 21:22:15 UTC (rev 202)
@@ -114,9 +114,9 @@
       rk_substep_weights(4) = 0.
 
 
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       ! BEGIN RK loop 
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       do rk_step = 1, 4
 
 ! ---  update halos for diagnostic variables
@@ -173,6 +173,15 @@
                                       + rk_substep_weights(rk_step) * block % intermediate_step(TEND) % tracers % array(:,k,iCell) &amp;
                                                                      ) / block % intermediate_step(PROVIS) % h % array(k,iCell)
                  end do
+
+                 ! mrp 100415 compute vertical velocity
+                 do k=1,block % mesh % nVertLevels-1
+                    block % time_levs(PROVIS) % state % w % array(k,iCell) = &amp;
+                      block % intermediate_step(TEND) % w % array(k,iCell) &amp;
+                       / block % time_levs(PROVIS) % state % h % array(k+1,iCell)
+                 end do
+                ! mrp 100415 compute vertical velocity end
+
               end do
               if (config_test_case == 1) then    ! For case 1, wind field should be fixed
                  block % intermediate_step(PROVIS) % u % array(:,:) = block % time_levs(1) % state % u % array(:,:)
@@ -182,6 +191,8 @@
            end do
         end if
 
+
+
 !--- accumulate update (for RK4)
 
         block =&gt; domain % blocklist
@@ -191,18 +202,6 @@
            block % time_levs(2) % state % h % array(:,:) = block % time_levs(2) % state % h % array(:,:) &amp;
                                    + rk_weights(rk_step) * block % intermediate_step(TEND) % h % array(:,:) 
 
-           ! mrp 100415 compute vertical velocity
-           do iCell=1,block % mesh % nCellsSolve
-              do k=1,block % mesh % nVertLevels-1
-                 block % time_levs(2) % state % w % array(k,iCell) = &amp;
-                   block % intermediate_step(TEND) % w % array(k,iCell) &amp;
-                   / block % time_levs(2) % state % h % array(k+1,iCell)
-              end do
-           end do
-
-           block % time_levs(2) % state % w % array(:,:) = block % intermediate_step(TEND) % w % array(:,:) 
-           ! mrp 100415 compute vertical velocity end
-
            do iCell=1,block % mesh % nCells
               do k=1,block % mesh % nVertLevels
                  block % time_levs(2) % state % tracers % array(:,k,iCell) =  &amp;
@@ -214,11 +213,10 @@
         end do
 
       end do
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       ! END RK loop 
-      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-
       !
       !  A little clean up at the end: decouple new scalar fields and compute diagnostics for new state
       !
@@ -243,6 +241,22 @@
          !call reconstruct(block % time_levs(2) % state, block % mesh)
          ! xsad 10-02-09 end
 
+         ! mrp 100415 compute vertical velocity
+         ! I am cheating here a little bit.  Because I only compute the 
+         ! vertical flux within the compute_tend subroutine, it only shows
+         ! up in the intermediate_step(TEND) % w variable.  So this is
+         ! w at the last stage of RK4.  To fix it, I would need to compute
+         ! the vertical flux within diagnostics to obtain w there using
+         ! time_levs(2) for the horizontal velocity.
+         do iCell=1,block % mesh % nCellsSolve
+            do k=1,block % mesh % nVertLevels-1
+               block % time_levs(2) % state % w % array(k,iCell) = &amp;
+                 block % intermediate_step(TEND) % w % array(k,iCell) &amp;
+                 / block % time_levs(PROVIS) % state % h % array(k+1,iCell)
+            end do
+         end do
+         ! mrp 100415 compute vertical velocity end
+
          block =&gt; block % next
       end do
 
@@ -266,11 +280,13 @@
       type (grid_meta), intent(in) :: grid
 
       integer :: iEdge, iCell, iVertex, k, cell1, cell2, vertex1, vertex2, eoe, i, j
-      real (kind=RKIND) :: flux, vorticity_abs, h_vertex, workpv, q, upstream_bias
+      integer :: nCells, nEdges, nVertices, nVertLevels
 
-      integer :: nCells, nEdges, nVertices, nVertLevels
+      real (kind=RKIND) :: flux, vorticity_abs, h_vertex, workpv, q, &amp;
+        upstream_bias, wHat, areaSumInv
       real (kind=RKIND), dimension(:), pointer :: &amp;
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle
+      real (kind=RKIND), dimension(grid % nVertLevels) :: w_dudz
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
         vh, weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, &amp;
         tend_h, tend_u, Fv, circulation, vorticity, ke, pv_edge, &amp;
@@ -364,7 +380,7 @@
       !end do
       ! mrp 100409 replace with
 
-      if (1==1) then ! isopycnal coordinates
+      if (1==2) then ! isopycnal coordinates
       Fv=0.0  ! vertical fluxes are zero
       do iCell=1,grid % nCellsSolve
          do k=1,nVertLevels
@@ -427,7 +443,28 @@
          cell2 = cellsOnEdge(2,iEdge)
          vertex1 = verticesOnEdge(1,iEdge)
          vertex2 = verticesOnEdge(2,iEdge)
-         
+
+         ! mrp 100422 add -w*dudz term to tendancy
+         ! For isopycnal mode, Fv should be zero.
+         areaSumInv = 1.0/(areaCell(cell1)+areaCell(cell2))
+         ! change nvertlevels to kmt later
+         do k=1,nVertLevels-1
+           ! w =Fv/h.  Also average w from cell center to edge
+           wHat = (  areaCell(cell1)*Fv(k,cell1)/h(k+1,cell1) &amp;
+                   + areaCell(cell2)*Fv(k,cell2)/h(k+1,cell2)) &amp;
+                   *areaSumInv
+           ! compute dudz at vertical interface with first order derivative.
+           w_dudz(k) = wHat * (u(k-1,iEdge)-u(k,iEdge)) &amp;
+                       * 2.0 / (h_edge(k-1,iEdge) + h_edge(k,iEdge))
+         end do
+         w_dudz(nVertLevels) = 0.0
+
+         tend_u(1,iEdge) = - 0.5 * w_dudz(1)
+         do k=2,nVertLevels
+            tend_u(k,iEdge) = - 0.5 * (w_dudz(k-1) + w_dudz(k))
+         enddo
+         ! mrp 100422 end: add -w*dudz term to tendancy
+
          do k=1,nVertLevels
 
          !
@@ -452,8 +489,8 @@
             !           gravity * (h(k,cell2) + h_s(cell2) - h(k,cell1) - h_s(cell1)) &amp;
             !           ) / dcEdge(iEdge)
             ! mrp 100112, changed to grad Montgomery potential:
-            tend_u(k,iEdge) =       &amp;
-                    q     &amp;
+            tend_u(k,iEdge) = tend_u(k,iEdge)     &amp;
+                   + q     &amp;
                    + u_diffusion &amp;
                    - (   ke(k,cell2) - ke(k,cell1)  &amp;
                        + MontPot(k,cell2) - MontPot(k,cell1) &amp;
@@ -951,14 +988,14 @@
       !
       ! equation of state
       !
-      do iCell=1,nCells
-         do k=1,nVertLevels
-            ! Linear equation of state, for the time being
-            rho(k,iCell) = 1000.0*(  1.0 &amp;
-                                  - 2.5e-4*temperature(k,iCell) &amp;
-                                  + 7.6e-4*salinity(k,iCell))
-         end do
-      end do
+!      do iCell=1,nCells
+!         do k=1,nVertLevels
+!            ! Linear equation of state, for the time being
+!            rho(k,iCell) = 1000.0*(  1.0 &amp;
+!                                  - 2.5e-4*temperature(k,iCell) &amp;
+!                                  + 7.6e-4*salinity(k,iCell))
+!         end do
+!      end do
       !mrp 100324 end
 
 

</font>
</pre>