<p><b>mpetersen@lanl.gov</b> 2011-12-06 14:35:39 -0700 (Tue, 06 Dec 2011)</p><p>Continue with changes required for ALE in vertical:<br>
<br>
 4. Change pressure gradient calculation to not involve hZLevel.<br>
<br>
 5. add - rho g /rho_0  grad z_k^{mid} term to the pressure gradient of the momentum equation.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/ale_vert_coord/src/core_ocean/Registry
===================================================================
--- branches/ocean_projects/ale_vert_coord/src/core_ocean/Registry        2011-12-06 21:00:00 UTC (rev 1239)
+++ branches/ocean_projects/ale_vert_coord/src/core_ocean/Registry        2011-12-06 21:35:39 UTC (rev 1240)
@@ -216,6 +216,7 @@
 var persistent real   u_diffusionBtr ( nEdges Time ) 1 - u_diffusionBtr state - -
 
 # Diagnostic fields: only written to output
+var persistent real    zMid ( nVertLevels nCells Time ) 2 io zMid state - -
 var persistent real    v ( nVertLevels nEdges Time ) 2 - v state - -
 var persistent real    divergence ( nVertLevels nCells Time ) 2 o divergence state - -
 var persistent real    vorticity ( nVertLevels nVertices Time ) 2 o vorticity state - -

Modified: branches/ocean_projects/ale_vert_coord/src/core_ocean/mpas_ocn_tendency.F
===================================================================
--- branches/ocean_projects/ale_vert_coord/src/core_ocean/mpas_ocn_tendency.F        2011-12-06 21:00:00 UTC (rev 1239)
+++ branches/ocean_projects/ale_vert_coord/src/core_ocean/mpas_ocn_tendency.F        2011-12-06 21:35:39 UTC (rev 1240)
@@ -253,7 +253,7 @@
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &amp;
         zMidZLevel, zTopZLevel, meshScalingDel2, meshScalingDel4
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
-        weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, pressure, &amp;
+        weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, rho, zMid, pressure, &amp;
         tend_u, circulation, vorticity, ke, ke_edge, pv_edge, &amp;
         MontPot, wTop, divergence, vertViscTopOfEdge
       type (dm_info) :: dminfo
@@ -279,7 +279,9 @@
       h           =&gt; s % h % array
       u           =&gt; s % u % array
       v           =&gt; s % v % array
+      rho         =&gt; s % rho % array
       wTop        =&gt; s % wTop % array
+      zMid        =&gt; s % zMid % array
       h_edge      =&gt; s % h_edge % array
       circulation =&gt; s % circulation % array
       vorticity   =&gt; s % vorticity % array
@@ -359,9 +361,9 @@
       call mpas_timer_start(&quot;ocn_tend_u-pressure grad&quot;)
 
       if (config_vert_grid_type.eq.'isopycnal') then
-          call ocn_vel_pressure_grad_tend(grid, MontPot, tend_u, err)
+          call ocn_vel_pressure_grad_tend(grid, MontPot,  zMid, rho, tend_u, err)
       elseif (config_vert_grid_type.eq.'zlevel') then
-          call ocn_vel_pressure_grad_tend(grid, pressure, tend_u, err)
+          call ocn_vel_pressure_grad_tend(grid, pressure, zMid, rho, tend_u, err)
       end if
 
       call mpas_timer_stop(&quot;ocn_tend_u-pressure grad&quot;)
@@ -441,7 +443,7 @@
       real (kind=RKIND), dimension(:), pointer :: &amp;
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
-        u,h,wTop, h_edge, vertDiffTopOfCell
+        u,h,rho, wTop, h_edge, vertDiffTopOfCell
       real (kind=RKIND), dimension(:,:,:), pointer :: &amp;
         tracers, tend_tr
       integer, dimension(:,:), pointer :: boundaryEdge
@@ -469,6 +471,7 @@
 
       u           =&gt; s % u % array
       h           =&gt; s % h % array
+      rho         =&gt; s % rho % array
       boundaryCell=&gt; grid % boundaryCell % array
       wTop        =&gt; s % wTop % array
       tracers     =&gt; s % tracers % array
@@ -615,10 +618,10 @@
 
       real (kind=RKIND), dimension(:), pointer :: &amp;
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &amp;
-        hZLevel
+        hZLevel, zTopZLevel
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
         weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, w, pressure,&amp;
-        circulation, vorticity, ke, ke_edge, MontPot, wTop, &amp;
+        circulation, vorticity, ke, ke_edge, MontPot, wTop, zMid, &amp;
         pv_edge, pv_vertex, pv_cell, gradPVn, gradPVt, divergence, &amp;
         rho, temperature, salinity, kev, kevc
       real (kind=RKIND), dimension(:,:,:), pointer :: tracers
@@ -660,6 +663,7 @@
       tracers     =&gt; s % tracers % array
       MontPot     =&gt; s % MontPot % array
       pressure    =&gt; s % pressure % array
+      zMid        =&gt; s % zMid % array
 
       weightsOnEdge     =&gt; grid % weightsOnEdge % array
       kiteAreasOnVertex =&gt; grid % kiteAreasOnVertex % array
@@ -679,6 +683,7 @@
       fVertex           =&gt; grid % fVertex % array
       fEdge             =&gt; grid % fEdge % array
       hZLevel           =&gt; grid % hZLevel % array
+      zTopZLevel        =&gt; grid % zTopZLevel % array
       deriv_two         =&gt; grid % deriv_two % array
       maxLevelCell      =&gt; grid % maxLevelCell % array
       maxLevelEdgeTop   =&gt; grid % maxLevelEdgeTop % array
@@ -1092,15 +1097,36 @@
            ! compute pressure for z-level coordinates
            ! assume atmospheric pressure at the surface is zero for now.
 
+! mrp 111206 pressure for z-level, old
+!           pressure(1,iCell) = rho(1,iCell)*gravity &amp;
+!              * (h(1,iCell)-0.5*hZLevel(1)) 
+!           do k=2,maxLevelCell(iCell)
+!              pressure(k,iCell) = pressure(k-1,iCell)  &amp;
+!                + 0.5*gravity*(  rho(k-1,iCell)*hZLevel(k-1) &amp;
+!                               + rho(k  ,iCell)*hZLevel(k  ))
+!           end do
+
+          ! pressure for generalized coordinates
            pressure(1,iCell) = rho(1,iCell)*gravity &amp;
-              * (h(1,iCell)-0.5*hZLevel(1)) 
+              * 0.5*h(1,iCell)
 
            do k=2,maxLevelCell(iCell)
               pressure(k,iCell) = pressure(k-1,iCell)  &amp;
-                + 0.5*gravity*(  rho(k-1,iCell)*hZLevel(k-1) &amp;
-                               + rho(k  ,iCell)*hZLevel(k  ))
+                + 0.5*gravity*(  rho(k-1,iCell)*h(k-1,iCell) &amp;
+                               + rho(k  ,iCell)*h(k  ,iCell))
            end do
 
+           ! Compute zMid, the z-coordinate of the middle of the layer.
+           k = maxLevelCell(iCell)
+           zMid(k:nVertLevels,iCell) = zTopZLevel(k+1) + 0.5*h(k,iCell)
+
+           do k=maxLevelCell(iCell)-1, 1, -1
+              zMid(k,iCell) = zMid(k+1,iCell)  &amp;
+                + 0.5*(  h(k+1,iCell) &amp;
+                       + h(k  ,iCell))
+           end do
+
+
         end do
 
       endif

Modified: branches/ocean_projects/ale_vert_coord/src/core_ocean/mpas_ocn_vel_pressure_grad.F
===================================================================
--- branches/ocean_projects/ale_vert_coord/src/core_ocean/mpas_ocn_vel_pressure_grad.F        2011-12-06 21:00:00 UTC (rev 1239)
+++ branches/ocean_projects/ale_vert_coord/src/core_ocean/mpas_ocn_vel_pressure_grad.F        2011-12-06 21:35:39 UTC (rev 1240)
@@ -17,6 +17,7 @@
 
    use mpas_grid_types
    use mpas_configure
+   use mpas_constants
 
    implicit none
    private
@@ -43,7 +44,7 @@
    !
    !--------------------------------------------------------------------
 
-   real (kind=RKIND) :: rho0Inv
+   real (kind=RKIND) :: rho0Inv, grho0Inv
 
 
 !***********************************************************************
@@ -64,7 +65,7 @@
 !
 !-----------------------------------------------------------------------
 
-   subroutine ocn_vel_pressure_grad_tend(grid, pressure, tend, err)!{{{
+   subroutine ocn_vel_pressure_grad_tend(grid, pressure, zMid, rho, tend, err)!{{{
 
       !-----------------------------------------------------------------
       !
@@ -73,7 +74,9 @@
       !-----------------------------------------------------------------
 
       real (kind=RKIND), dimension(:,:), intent(in) :: &amp;
-         pressure !&lt; Input: Pressure field or Mongomery potential
+         pressure, &amp; !&lt; Input: Pressure field or Mongomery potential
+         zMid, &amp;     !&lt; Input: z-coordinate at mid-depth of layer
+         rho         !&lt; Input: density
 
       type (mesh_type), intent(in) :: &amp;
          grid          !&lt; Input: grid information
@@ -123,15 +126,33 @@
                - (pressure(k,cell2) - pressure(k,cell1))/dcEdge(iEdge)
            end do
         enddo
-      elseif (config_vert_grid_type.eq.'zlevel') then
+      else 
+! mrp 111206 pressure for z-level, old, delete before trunk merge.
+!        do iEdge=1,nEdgesSolve
+!          cell1 = cellsOnEdge(1,iEdge)
+!          cell2 = cellsOnEdge(2,iEdge)
+!          do k=1,maxLevelEdgeTop(iEdge)
+!            tend(k,iEdge) = tend(k,iEdge)     &amp;
+!              - rho0Inv*(  pressure(k,cell2) &amp;
+!                         - pressure(k,cell1) )/dcEdge(iEdge)
+!          end do
+!        enddo
+
+        ! pressure for generalized coordinates
+        ! -1/rho_0 (grad p_k + rho g grad z_k^{mid})
+        grho0Inv = gravity*rho0Inv
         do iEdge=1,nEdgesSolve
           cell1 = cellsOnEdge(1,iEdge)
           cell2 = cellsOnEdge(2,iEdge)
+
           do k=1,maxLevelEdgeTop(iEdge)
-
             tend(k,iEdge) = tend(k,iEdge)     &amp;
               - rho0Inv*(  pressure(k,cell2) &amp;
-                         - pressure(k,cell1) )/dcEdge(iEdge)
+                         - pressure(k,cell1) )/dcEdge(iEdge) &amp;
+              - grho0Inv*  0.5*(rho(k,cell1)+rho(k,cell2)) &amp;
+                        *(  zMid(k,cell2) &amp;
+                          - zMid(k,cell1) )/dcEdge(iEdge)
+                      
           end do
 
         enddo
@@ -178,11 +199,8 @@
 
       err = 0
 
-      if (config_vert_grid_type.eq.'isopycnal') then
-        rho0Inv = 1.0
-      elseif (config_vert_grid_type.eq.'zlevel') then
-        rho0Inv = 1.0/config_rho0
-      end if
+      rho0Inv = 1.0/config_rho0
+      grho0Inv = gravity/config_rho0
 
    !--------------------------------------------------------------------
 

</font>
</pre>