<p><b>mpetersen@lanl.gov</b> 2010-05-13 13:32:10 -0600 (Thu, 13 May 2010)</p><p>Remove NCAR formulation from zlevel ocean branch, which computes workpv*vh rather than q+u_diffusion in tend_u.  Change variable name w to wBot, Fv to hFluxBot.<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-13 12:33:31 UTC (rev 268)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/Registry        2010-05-13 19:32:10 UTC (rev 269)
@@ -131,7 +131,6 @@
 var real    pBot ( nVertLevels nCells Time ) o pBot - -
 var real    pMidZLevel ( nVertLevels nCells Time ) o pmidZLevel - -
 var real    MontPot ( nVertLevels nCells Time ) o MontPot - -
-var real    w ( nVertLevels nCells Time ) o w - -
 var real    wBot ( nVertLevels nCells Time ) o wBot - -
 
 # Other diagnostic variables: neither read nor written to any files

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-13 12:33:31 UTC (rev 268)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F        2010-05-13 19:32:10 UTC (rev 269)
@@ -8,10 +8,8 @@
    use vector_reconstruction
    ! xsad 10-02-05 end
 
-
    contains
 
-
    subroutine timestep(domain, dt)
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    ! Advance model state forward in time by the specified time step
@@ -174,14 +172,6 @@
                                                                      ) / 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(:,:)
@@ -242,22 +232,6 @@
          !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
 
@@ -290,8 +264,8 @@
         zMidZLevel 
       real (kind=RKIND), dimension(grid % nVertLevels) :: w_dudzBotEdge
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
-        vh, weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, wBot, &amp;
-        tend_h, tend_u, Fv, circulation, vorticity, ke, pv_edge, &amp;
+        weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, wBot, &amp;
+        tend_h, tend_u, hFluxBot, circulation, vorticity, ke, pv_edge, &amp;
         divergence, MontPot, pmidZLevel, zMidEdge, zBotEdge
 
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
@@ -310,14 +284,13 @@
       u           =&gt; s % u % array
       v           =&gt; s % v % array
       wBot        =&gt; s % wBot % array
-      Fv          =&gt; tend % w % array
+      hFluxBot          =&gt; tend % wBot % array
       h_edge      =&gt; s % h_edge % array
       circulation =&gt; s % circulation % array
       vorticity   =&gt; s % vorticity % array
       divergence  =&gt; s % divergence % array
       ke          =&gt; s % ke % array
       pv_edge     =&gt; s % pv_edge % array
-      vh          =&gt; s % vh % array
       MontPot     =&gt; s % MontPot % array
       pmidZLevel  =&gt; s % pmidZLevel % array
       zBotEdge    =&gt; s % zBotEdge % array
@@ -382,21 +355,21 @@
       end do
 
       if (config_vert_grid_type.eq.'isopycnal') then
-        Fv=0.0  ! vertical fluxes are zero
+        hFluxBot=0.0  ! vertical fluxes are zero
 
       elseif (config_vert_grid_type.eq.'zlevel') then
         do iCell=1,nCells
 
            ! change nvertlevels to kmt later
            ! this next line can be set permanently somewhere upon startup.
-           Fv(nVertLevels,iCell) = 0.0
+           hFluxBot(nVertLevels,iCell) = 0.0
    
            do k=nVertLevels,2,-1
 
               ! F^v_{k-1/2} = 
               ! F^v_{k+1/2} - </font>
<font color="red">abla_h \cdot \left( F^h \right) h_k
               ! note +tend_h because tend_h is -div.(hu)
-              Fv(k-1,iCell) = Fv(k,iCell) + tend_h(k,iCell)*h(k,iCell)
+              hFluxBot(k-1,iCell) = hFluxBot(k,iCell) + tend_h(k,iCell)*h(k,iCell)
     
               ! now tend_h is div.(hu) + d/dz(hw):
               ! - </font>
<font color="gray">abla_h \cdot F^h_k 
@@ -404,28 +377,27 @@
               ! note if you substitute line above this is just tend_h=0.
               ! so this line can be changed to tend_h=0 in the future.
               tend_h(k,iCell) =   tend_h(k,iCell) &amp;
-                              - (Fv(k-1,iCell) - Fv(k,iCell))/h(k,iCell)
+                              - (hFluxBot(k-1,iCell) - hFluxBot(k,iCell))/h(k,iCell)
            end do
 
            k=1
-           ! Surface tracer Fv(k,iCell) = 0.0 is not used
+           ! Surface tracer hFluxBot(k,iCell) = 0.0 is not used
            tend_h(k,iCell) =   tend_h(k,iCell) &amp;
-                             - ( - Fv(k,iCell))/h(k,iCell)
+                             - ( - hFluxBot(k,iCell))/h(k,iCell)
 
         end do
       endif ! coordinate type
       ! mrp 100409 end
 
-!print *, 'ncells,grid % nCellsSolve, size(Fv)',ncells,grid % nCellsSolve, size(Fv,1), size(Fv,2)
+!print *, 'ncells,grid % nCellsSolve, size(hFluxBot)',ncells,grid % nCellsSolve, size(hFluxBot,1), size(hFluxBot,2)
 ! print '(a,i5,f10.5)', &amp;
-!  'k,   min(tend_h(k,2:)),max(tend_h(k,2:)),min(Fv(k,:)),max(Fv(k,:))'
+!  'k,   min(tend_h(k,2:)),max(tend_h(k,2:)),min(hFluxBot(k,:)),max(hFluxBot(k,:))'
 ! do k=1,nVertLevels
 !   print '(i5,10es10.2)', &amp;
 !     k,minval(tend_h(k,1:grid % ncellssolve)),maxval(tend_h(k,1:grid % ncellssolve)), &amp;
-! minval(Fv(k,1:grid % ncellssolve)),maxval(Fv(k,1:grid % ncellssolve))
+! minval(hFluxBot(k,1:grid % ncellssolve)),maxval(hFluxBot(k,1:grid % ncellssolve))
 ! enddo
 
-#ifdef LANL_FORMULATION
       !
       ! Compute u (normal) velocity tendency for each edge (cell face)
       !
@@ -536,8 +508,6 @@
       end do
       deallocate(fluxVert)
 
-#endif
-
 ! print '(a,i5,f10.5)', &amp;
 !  'k,   min(tend_u(k,:)),max(tend_u(k,:))'
 ! do k=1,nVertLevels
@@ -545,32 +515,6 @@
 !     k,minval(tend_u(k,1:grid % nedgessolve)),maxval(tend_u(k,1:grid % nedgessolve))
 ! enddo
 
-#ifdef NCAR_FORMULATION
-      !
-      ! Compute u (normal) velocity tendency for each edge (cell face)
-      !
-      tend_u(:,:) = 0.0
-      do iEdge=1,grid % nEdgesSolve
-         vertex1 = verticesOnEdge(1,iEdge)
-         vertex2 = verticesOnEdge(2,iEdge)
-         cell1 = cellsOnEdge(1,iEdge)
-         cell2 = cellsOnEdge(2,iEdge)
-
-         do k=1,nVertLevels
-            vorticity_abs = fEdge(iEdge) + (circulation(k,vertex1) + circulation(k,vertex2)) / &amp;
-                                           (areaTriangle(vertex1) + areaTriangle(vertex2))
-
-            workpv = 2.0 * vorticity_abs / (h(k,cell1) + h(k,cell2))
-
-            tend_u(k,iEdge) = workpv * vh(k,iEdge) - &amp;
-                              (ke(k,cell2) - ke(k,cell1) + &amp;
-                                 gravity * (h(k,cell2) + h_s(cell2) - h(k,cell1) - h_s(cell1)) &amp;
-                              ) / &amp;
-                              dcEdge(iEdge)
-         end do
-      end do
-#endif
-
    end subroutine compute_tend
 
 
@@ -597,7 +541,7 @@
       real (kind=RKIND), dimension(:), pointer :: &amp;
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, zsurface
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
-        u,h,Fv, h_edge, zmid, zbot
+        u,h,hFluxBot, h_edge, zmid, zbot
       real (kind=RKIND), dimension(:,:,:), pointer :: &amp;
         tracers, tend_tr
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
@@ -609,7 +553,7 @@
       h           =&gt; s % h % array
       tracers     =&gt; s % tracers % array
       h_edge      =&gt; s % h_edge % array
-      Fv          =&gt; tend % w % array
+      hFluxBot          =&gt; tend % wBot % array
       zmid        =&gt; s % zmid % array
       zbot        =&gt; s % zbot % array
       zsurface    =&gt; s % zsurface % array
@@ -699,7 +643,7 @@
          elseif (config_vert_tracer_adv.eq.'upwind') then
 
           do k=1,nVertLevels-1
-            if (Fv(k,iCell)&gt;0.0) then
+            if (hFluxBot(k,iCell)&gt;0.0) then
               upwindCell = k+1
             else
               upwindCell = k
@@ -712,7 +656,7 @@
          elseif (config_vert_tracer_adv.eq.'downwind') then
 
           do k=1,nVertLevels-1
-            if (Fv(k,iCell)&gt;0.0) then
+            if (hFluxBot(k,iCell)&gt;0.0) then
               upwindCell = k
             else
               upwindCell = k+1
@@ -737,19 +681,19 @@
          k=1
             do iTracer=1,num_tracers
                ! this is -div.(huT) - d/dz(hwT) terms.
-               ! note flux at surface is Fv(1,iCell)=0 so index can go to k=1.
+               ! note flux at surface is hFluxBot(1,iCell)=0 so index can go to k=1.
                tend_tr(iTracer,k,iCell) = tend_tr(iTracer,k,iCell) &amp;
-                  - ( - Fv(k,iCell)*Tmid(iTracer,k))/h(k,icell)
+                  - ( - hFluxBot(k,iCell)*Tmid(iTracer,k))/h(k,icell)
             end do
 
          ! change nVertLevels to KMT later
          do k=2,nVertLevels  
             do iTracer=1,num_tracers
                ! this is -div.(huT) - d/dz(hwT) terms.
-               ! note flux at surface is Fv(1,iCell)=0 so index can go to k=1.
+               ! note flux at surface is hFluxBot(1,iCell)=0 so index can go to k=1.
                tend_tr(iTracer,k,iCell) = tend_tr(iTracer,k,iCell) &amp;
-                  - (   Fv(k-1,iCell)*Tmid(iTracer,k-1) &amp;
-                      - Fv(k  ,iCell)*Tmid(iTracer,k  ))/h(k,icell)
+                  - (   hFluxBot(k-1,iCell)*Tmid(iTracer,k-1) &amp;
+                      - hFluxBot(k  ,iCell)*Tmid(iTracer,k  ))/h(k,icell)
             end do
          end do
 
@@ -884,7 +828,7 @@
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &amp;
         zSurface, hZLevel, zSurfaceEdge
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
-        vh, weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, w, wBot, &amp;
+        weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, w, wBot, &amp;
         circulation, vorticity, ke, &amp;
         pv_edge, pv_vertex, pv_cell, gradPVn, gradPVt, divergence, &amp;
         zmid, zbot, zmidEdge, zbotEdge, pmid, pbot, MontPot, rho, temperature, salinity, pmidZLevel
@@ -900,9 +844,7 @@
       h           =&gt; s % h % array
       u           =&gt; s % u % array
       v           =&gt; s % v % array
-      w           =&gt; s % w % array
       wBot        =&gt; s % wBot % array
-      vh          =&gt; s % vh % array
       h_edge      =&gt; s % h_edge % array
       circulation =&gt; s % circulation % array
       vorticity   =&gt; s % vorticity % array
@@ -1059,23 +1001,7 @@
          end do
       end do
 
-#ifdef NCAR_FORMULATION
       !
-      ! Compute mass fluxes tangential to each edge (i.e., through the faces of dual grid cells)
-      !
-      vh(:,:) = 0.0
-      do iEdge=1,grid % nEdgesSolve
-         do j=1,nEdgesOnEdge(iEdge)
-            eoe = edgesOnEdge(j,iEdge)
-            do k=1,nVertLevels
-               vh(k,iEdge) = vh(k,iEdge) + weightsOnEdge(j,iEdge) * u(k,eoe) * h_edge(k,eoe)
-            end do
-         end do
-      end do
-#endif
-
-
-      !
       ! Compute height at vertices, pv at vertices, and average pv to edge locations
       !  ( this computes pv_vertex at all vertices bounding real cells and distance-1 ghost cells )
       !
@@ -1265,39 +1191,33 @@
 
       elseif (config_vert_grid_type.eq.'zlevel') then
 
-      !
-      ! Compute div(u) for each cell
-      ! See Ringler et al. (2010) jcp paper, eqn 19, 21, and fig. 3.
-      !
-      allocate(div_u(nVertLevels,nCells))
-      div_u(:,:) = 0.0
-      do iEdge=1,nEdges
+        !
+        ! Compute div(u) for each cell
+        ! See Ringler et al. (2010) jcp paper, eqn 19, 21, and fig. 3.
+        !
+        allocate(div_u(nVertLevels,nCells))
+        div_u(:,:) = 0.0
+        do iEdge=1,nEdges
             cell1 = cellsOnEdge(1,iEdge)
             cell2 = cellsOnEdge(2,iEdge)
             if (cell1 &lt;= nCells) then
                do k=1,nVertLevels
-! should be this
                   flux = u(k,iEdge) * dvEdge(iEdge) 
-! testing with this
-!                  flux = u(k,iEdge) * dvEdge(iEdge) * h_edge(k,iEdge)
                   div_u(k,cell1) = div_u(k,cell1) + flux
                end do 
             end if
             if (cell2 &lt;= nCells) then
                do k=1,nVertLevels
-! should be this
                   flux = u(k,iEdge) * dvEdge(iEdge) 
-! testing with this
-!                  flux = u(k,iEdge) * dvEdge(iEdge) * h_edge(k,iEdge)
                   div_u(k,cell2) = div_u(k,cell2) - flux
                end do 
             end if
-      end do 
+        end do 
 
-      do iCell=1,nCells
-         do k=1,nVertLevels
-            div_u(k,iCell) = div_u(k,iCell) / areaCell(iCell)
-         end do
+        do iCell=1,nCells
+           do k=1,nVertLevels
+              div_u(k,iCell) = div_u(k,iCell) / areaCell(iCell)
+           end do
 
            ! change nvertlevels to kmt later
            ! this next line can be set permanently somewhere upon startup.
@@ -1308,9 +1228,9 @@
            end do
 
         end do
+        deallocate(div_u)
 
       endif
-      deallocate(div_u)
 
 
    end subroutine compute_solve_diagnostics

</font>
</pre>