<p><b>mpetersen@lanl.gov</b> 2010-11-02 17:03:02 -0600 (Tue, 02 Nov 2010)</p><p>BRANCH COMMIT: Merge MontPot for isopycnal mode and pZLevel for z-level mode into a single p variable.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/topography2_mrp/src/core_ocean/Registry
===================================================================
--- branches/ocean_projects/topography2_mrp/src/core_ocean/Registry        2010-11-02 22:11:00 UTC (rev 590)
+++ branches/ocean_projects/topography2_mrp/src/core_ocean/Registry        2010-11-02 23:03:02 UTC (rev 591)
@@ -168,11 +168,7 @@
 var persistent real    uReconstructZonal ( nVertLevels nCells Time ) 2 o uReconstructZonal state - -
 var persistent real    uReconstructMeridional ( nVertLevels nCells Time ) 2 o uReconstructMeridional state - -
 var persistent real    p ( nVertLevels nCells Time ) 2 o p state - -
-var persistent real    pZLevel ( nVertLevels nCells Time ) 2 - pZLevel state - -
-var persistent real    MontPot ( nVertLevels nCells Time ) 2 o MontPot state - -
 var persistent real    wTop ( nVertLevelsP1 nCells Time ) 2 o wTop state - -
-var persistent real    pgrad ( nVertLevels nCells Time ) 2 o pgrad state - -
-var persistent real    pgrad_edge ( nVertLevels nEdges Time ) 2 o pgrad_edge state - -
 
 # Other diagnostic variables: neither read nor written to any files
 var persistent real    vh ( nVertLevels nEdges Time ) 2 - vh state - -
@@ -180,7 +176,6 @@
 var persistent real    gradPVt ( nVertLevels nEdges Time ) 2 - gradPVt state - -
 var persistent real    gradPVn ( nVertLevels nEdges Time ) 2 - gradPVn state - -
 
-# xsad 10-02-05:
 # Globally reduced diagnostic variables: only written to output
 var persistent real    areaCellGlobal ( Time ) 2 o areaCellGlobal state - -
 var persistent real    areaEdgeGlobal ( Time ) 2 o areaEdgeGlobal state - -
@@ -189,5 +184,4 @@
 var persistent real    volumeCellGlobal ( Time ) 2 o volumeCellGlobal state - -
 var persistent real    volumeEdgeGlobal ( Time ) 2 o volumeEdgeGlobal state - -
 var persistent real    CFLNumberGlobal ( Time ) 2 o CFLNumberGlobal state - -
-# xsad 10-02-05 end
 

Modified: branches/ocean_projects/topography2_mrp/src/core_ocean/module_global_diagnostics.F
===================================================================
--- branches/ocean_projects/topography2_mrp/src/core_ocean/module_global_diagnostics.F        2010-11-02 22:11:00 UTC (rev 590)
+++ branches/ocean_projects/topography2_mrp/src/core_ocean/module_global_diagnostics.F        2010-11-02 23:03:02 UTC (rev 591)
@@ -37,7 +37,7 @@
       real (kind=RKIND) ::  areaCellGlobal, areaEdgeGlobal, areaTriangleGlobal
       real (kind=RKIND), dimension(:), pointer ::  areaCell, dcEdge, dvEdge, areaTriangle, areaEdge
       real (kind=RKIND), dimension(:,:), pointer :: h, u, v, h_edge, circulation, vorticity, ke, pv_edge, pv_vertex, &amp;
-         pv_cell, gradPVn, gradPVt, p, MontPot, wTop, rho, tracerTemp
+         pv_cell, gradPVn, gradPVt, p, wTop, rho, tracerTemp
       real (kind=RKIND), dimension(:,:,:), pointer :: tracers
 
       real (kind=RKIND) :: volumeCellGlobal, volumeEdgeGlobal, CFLNumberGlobal
@@ -81,7 +81,6 @@
       gradPVn =&gt; state % gradPVn % array
       gradPVt =&gt; state % gradPVt % array
       p =&gt; state % p % array
-      MontPot =&gt; state % MontPot % array
 
       variableIndex = 0
       ! h
@@ -159,12 +158,6 @@
         p(:,1:nCellsSolve), sums(variableIndex), mins(variableIndex), maxes(variableIndex), verticalSumMins(variableIndex), &amp;
         verticalSumMaxes(variableIndex))
 
-      ! MontPot
-      variableIndex = variableIndex + 1
-      call computeFieldVolumeWeightedLocalStats(dminfo, nVertLevels, nCellsSolve, areaCell(1:nCellsSolve), h(:,1:nCellsSolve), &amp;
-        MontPot(:,1:nCellsSolve), sums(variableIndex), mins(variableIndex), maxes(variableIndex), verticalSumMins(variableIndex), &amp;
-        verticalSumMaxes(variableIndex))
-
       ! wTop vertical velocity
       variableIndex = variableIndex + 1
       call computeFieldVolumeWeightedLocalStats(dminfo, nVertLevels+1, nCellsSolve, areaCell(1:nCellsSolve), h(:,1:nCellsSolve), &amp;
@@ -292,10 +285,6 @@
       variableIndex = variableIndex + 1
       averages(variableIndex) = sums(variableIndex)/volumeCellGlobal
 
-      ! MontPot
-      variableIndex = variableIndex + 1
-      averages(variableIndex) = sums(variableIndex)/volumeCellGlobal
-
       ! wTop vertical velocity
       variableIndex = variableIndex + 1
       averages(variableIndex) = sums(variableIndex)/volumeCellGlobal

Modified: branches/ocean_projects/topography2_mrp/src/core_ocean/module_time_integration.F
===================================================================
--- branches/ocean_projects/topography2_mrp/src/core_ocean/module_time_integration.F        2010-11-02 22:11:00 UTC (rev 590)
+++ branches/ocean_projects/topography2_mrp/src/core_ocean/module_time_integration.F        2010-11-02 23:03:02 UTC (rev 591)
@@ -275,9 +275,9 @@
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &amp;
         zMidZLevel, zTopZLevel 
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
-        weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, wTop, &amp;
+        weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, p, wTop, &amp;
         tend_h, tend_u, circulation, vorticity, ke, ke_edge, pv_edge, &amp;
-        divergence, MontPot, pZLevel
+        divergence
       type (dm_info) :: dminfo
 
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge, &amp;
@@ -307,8 +307,7 @@
       ke          =&gt; s % ke % array
       ke_edge     =&gt; s % ke_edge % array
       pv_edge     =&gt; s % pv_edge % array
-      MontPot     =&gt; s % MontPot % array
-      pZLevel     =&gt; s % pZLevel % array
+      p           =&gt; s % p % array
 
       weightsOnEdge     =&gt; grid % weightsOnEdge % array
       kiteAreasOnVertex =&gt; grid % kiteAreasOnVertex % array
@@ -435,7 +434,7 @@
           cell2 = cellsOnEdge(2,iEdge)
           do k=1,maxLevelEdgeTop(iEdge)
              tend_u(k,iEdge) = tend_u(k,iEdge)     &amp;
-               - (MontPot(k,cell2) - MontPot(k,cell1))/dcEdge(iEdge)
+               - (p(k,cell2) - p(k,cell1))/dcEdge(iEdge)
            end do
         enddo
       elseif (config_vert_grid_type.eq.'zlevel') then
@@ -444,8 +443,8 @@
           cell2 = cellsOnEdge(2,iEdge)
           do k=1,maxLevelEdgeTop(iEdge)
              tend_u(k,iEdge) = tend_u(k,iEdge)     &amp;
-               - rho0Inv*(  pZLevel(k,cell2) &amp;
-                          - pZLevel(k,cell1) )/dcEdge(iEdge)
+               - rho0Inv*(  p(k,cell2) &amp;
+                          - p(k,cell1) )/dcEdge(iEdge)
           end do
         enddo
       endif
@@ -1113,7 +1112,7 @@
 
 
       integer :: iEdge, iCell, iVertex, k, cell1, cell2, vertex1, vertex2, eoe, i, j, cov
-      real (kind=RKIND) :: flux, vorticity_abs, h_vertex, workpv, delta_p, rho0Inv
+      real (kind=RKIND) :: flux, vorticity_abs, h_vertex, workpv, pTop, rho0Inv
 
       integer :: nCells, nEdges, nVertices, nVertLevels, vertexDegree
 
@@ -1122,13 +1121,12 @@
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &amp;
         hZLevel
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
-        weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, w, wTop, &amp;
-        circulation, vorticity, ke, ke_edge,  pgrad, pgrad_edge, &amp;
+        weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, w, p, wTop, &amp;
+        circulation, vorticity, ke, ke_edge, &amp;
         pv_edge, pv_vertex, pv_cell, gradPVn, gradPVt, divergence, &amp;
-        MontPot, rho, temperature, salinity, pZLevel
+        rho, temperature, salinity
       real (kind=RKIND), dimension(:,:,:), pointer :: tracers
       real (kind=RKIND), dimension(:,:), allocatable:: div_u
-      real (kind=RKIND), dimension(:), allocatable::  pTop
       character :: c1*6
 
       integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, &amp;
@@ -1159,10 +1157,7 @@
       gradPVt     =&gt; s % gradPVt % array
       rho         =&gt; s % rho % array
       tracers     =&gt; s % tracers % array
-      pZLevel     =&gt; s % pZLevel % array
-      MontPot     =&gt; s % MontPot % array
-      pgrad       =&gt; s % pgrad % array
-      pgrad_edge  =&gt; s % pgrad_edge % array
+      p           =&gt; s % p % array
 
       weightsOnEdge     =&gt; grid % weightsOnEdge % array
       kiteAreasOnVertex =&gt; grid % kiteAreasOnVertex % array
@@ -1505,50 +1500,46 @@
       ! This section must be after computing rho
       !
       if (config_vert_grid_type.eq.'isopycnal') then
-        allocate(pTop(nVertLevels+1))
 
         ! For Isopycnal model.
         ! Compute pressure at top of each layer, and then
         ! Montgomery Potential.
         do iCell=1,nCells
 
-          ! assume atmospheric pressure at the surface is zero for now.
-          pTop(1) = 0.0
-          do k=1,nVertLevels
-            delta_p = rho(k,iCell)*gravity* h(k,iCell)
-            pTop(k+1) = pTop(k) + delta_p
-          end do
+           ! assume atmospheric pressure at the surface is zero for now.
+           pTop = 0.0
+           ! For isopycnal mode, p is the Montgomery Potential.
+           ! At top layer it is g*SSH, where SSH may be off by a 
+           ! constant (ie, h_s can be relative to top or bottom)
+           p(1,iCell) = gravity &amp;
+              * (h_s(iCell) + sum(h(1:nVertLevels,iCell)))
 
-          ! MontPot at top layer is g*SSH, where SSH may be off by a 
-          ! constant i the horizontal.
-          MontPot(1,iCell) = gravity &amp;
-             * (h_s(iCell) + sum(h(1:nVertLevels,iCell)))
-          do k=2,nVertLevels
-            ! from delta M = p delta / rho
-            MontPot(k,iCell) = MontPot(k-1,iCell) &amp;
-               + pTop(k)*(1.0/rho(k,iCell) - 1.0/rho(k-1,iCell)) 
-          end do
+           do k=2,nVertLevels
+              pTop = pTop + rho(k-1,iCell)*gravity* h(k-1,iCell)
 
+              ! from delta M = p delta / rho
+              p(k,iCell) = p(k-1,iCell) &amp;
+                 + pTop*(1.0/rho(k,iCell) - 1.0/rho(k-1,iCell)) 
+           end do
+
         end do
-        deallocate(pTop)
 
       elseif (config_vert_grid_type.eq.'zlevel') then
 
         ! For z-level model.
         ! Compute pressure at middle of each level.  
-        ! pZLevel and p should only differ at k=1, where p is 
-        ! pressure at middle of layer including SSH, and pZLevel is
-        ! pressure at a depth of hZLevel(1)/2.
+        ! At k=1, where p is pressure at a depth of hZLevel(1)/2, not
+        ! pressure at middle of layer including SSH.
 
         do iCell=1,nCells
            ! compute pressure for z-level coordinates
            ! assume atmospheric pressure at the surface is zero for now.
 
-           pZLevel(1,iCell) = rho(1,iCell)*gravity &amp;
+           p(1,iCell) = rho(1,iCell)*gravity &amp;
               * (h(1,iCell)-0.5*hZLevel(1)) 
 
            do k=2,maxLevelCell(iCell)
-              pZLevel(k,iCell) = pZLevel(k-1,iCell)  &amp;
+              p(k,iCell) = p(k-1,iCell)  &amp;
                 + 0.5*gravity*(  rho(k-1,iCell)*hZLevel(k-1) &amp;
                                + rho(k  ,iCell)*hZLevel(k  ))
            end do
@@ -1598,39 +1589,6 @@
 
       endif
 
-      !
-      ! Compute pressure gradient in each cell
-      !
-      ! This is for output and testing only.  We could eventually
-      ! remove the variables pgrad and pgrad_edge.
-      rho0Inv = 1.0/config_rho0
-        do iEdge=1,grid % nEdgesSolve
-          cell1 = cellsOnEdge(1,iEdge)
-          cell2 = cellsOnEdge(2,iEdge)
-          do k=1,maxLevelEdgeTop(iEdge)
-             pgrad_edge(k,iEdge) =  - rho0Inv*(  pZLevel(k,cell2) &amp;
-                          - pZLevel(k,cell1) )/dcEdge(iEdge)
-          end do
-        end do
-
-      pgrad(:,:) = 0.0
-      do iCell=1,nCells
-         do i=1,nEdgesOnCell(iCell)
-            iEdge = edgesOnCell(i,iCell)
-            do k=1,maxLevelEdgeTop(iEdge)
-              ! mrp first attempt, I think it is wrong:
-              !pgrad(k,iCell) = pgrad(k,iCell) + 0.5 * dcEdge(iEdge) * dvEdge(iEdge) * abs(pgrad_edge(k,iEdge))
-              pgrad(k,iCell) = pgrad(k,iCell) + abs(pgrad_edge(k,iEdge))
-            end do
-         end do
-         do k=1,maxLevelCell(iCell)
-             ! mrp first attempt, I think it is wrong:
-!            pgrad(k,iCell) = pgrad(k,iCell) / areaCell(iCell)
-            pgrad(k,iCell) = pgrad(k,iCell) / nEdgesOnCell(iCell)
-         end do
-      end do
-
-
    end subroutine compute_solve_diagnostics
 
 

</font>
</pre>