<p><b>mpetersen@lanl.gov</b> 2011-03-24 16:25:27 -0600 (Thu, 24 Mar 2011)</p><p>BRANCH COMMIT Update to implicit vertical mix branch.  Branch is now ready for review.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/imp_vert_mix_mrp/src/core_ocean/module_mpas_core.F
===================================================================
--- branches/ocean_projects/imp_vert_mix_mrp/src/core_ocean/module_mpas_core.F        2011-03-24 21:42:29 UTC (rev 768)
+++ branches/ocean_projects/imp_vert_mix_mrp/src/core_ocean/module_mpas_core.F        2011-03-24 22:25:27 UTC (rev 769)
@@ -81,38 +81,10 @@
    
       call compute_solve_diagnostics(dt, block % state % time_levs(1) % state, mesh)
  
-! mrp causes error Subscript #1 of the array INDX has value 7 which is greater than the upper bound of 6
       call rbfInterp_initialize(mesh)
       call init_reconstruct(mesh)
       call reconstruct(block % state % time_levs(1) % state, mesh)
 
-      ! mrp 110131 testing only
-      block % mesh % u_src % array(:,:) = &amp;
-        block % mesh % u_src % array(:,:) *100
-     print *, 'min,maxval(u_src) ',minval( block % mesh % u_src % array(:,:)),maxval( block % mesh % u_src % array(:,:))
-
-      do iCell=1,block % mesh % nCells
-         do k=1,mesh % nVertLevels
-            !block % state % time_levs(1) % state % tracers % array( &amp;
-            !   1, k ,iCell) =  31-k/1000.0  !31-k
-            !block % state % time_levs(1) % state % tracers % array( &amp;
-            !   2, k ,iCell) =  32 !+ k*0.32
-            !block % state % time_levs(1) % state % tracers % array( &amp;
-            !   3, k ,iCell) =  k
-         enddo
-            block % state % time_levs(1) % state % tracers % array( &amp;
-               3, :,iCell) =  1.
-            block % state % time_levs(1) % state % tracers % array( &amp;
-               4, :,iCell) =  1.
-
-         do k=1,mesh % nVertLevels,2
-            block % state % time_levs(1) % state % tracers % array( &amp;
-               4, k ,iCell) =  0.
-         enddo
-
-      end do
-      ! mrp 110131 testing only end
-
       ! initialize velocities and tracers on land to be -1e34
       ! The reconstructed velocity on land will have values not exactly
       ! -1e34 due to the interpolation of reconstruction.

Modified: branches/ocean_projects/imp_vert_mix_mrp/src/core_ocean/module_time_integration.F
===================================================================
--- branches/ocean_projects/imp_vert_mix_mrp/src/core_ocean/module_time_integration.F        2011-03-24 21:42:29 UTC (rev 768)
+++ branches/ocean_projects/imp_vert_mix_mrp/src/core_ocean/module_time_integration.F        2011-03-24 22:25:27 UTC (rev 769)
@@ -266,8 +266,9 @@
 
             call compute_vertical_mix_coefficients(provis, block % diagnostics, block % mesh)
 
-!print '(a,10es12.4)', 'u1', minval(u(:,1:nEdges)),maxval(u(:,1:nEdges))
-! should I use nEdges or nEdgesSolve here?
+            !
+            !  Implicit vertical solve for momentum
+            !
             do iEdge=1,nEdges
               if (maxLevelEdgeTop(iEdge).gt.0) then
 
@@ -296,25 +297,15 @@
 
                call tridiagonal_solve(A,C,A,u(:,iEdge),uTemp,maxLevelEdgeTop(iEdge))
 
-!print '(a,2i4)', 'iEdge, maxLevelEdgeTop(iEdge))', iEdge,maxLevelEdgeTop(iEdge)
-!print '(a,100es12.4)', 'vertViscTopOfEdge(:,iEdge)', vertViscTopOfEdge(:,iEdge)
-!print '(a,100es12.4)', 'h_edge', h_edge(:,iEdge)
-!print '(a,100es12.4)', 'dt', dt
-!print '(a,100es12.4)', 'A', A
-!print '(a,100es12.4)', 'C', C
-!print '(a,100es12.4)', 'u(:,iEdge)', u(:,iEdge)
-!print '(a,100es12.4)', 'uTemp     ', uTemp
-!stop
-
-! mrp temp, turn off implicit on u:
                u(1:maxLevelEdgeTop(iEdge),iEdge) = uTemp(1:maxLevelEdgeTop(iEdge))
                u(maxLevelEdgeTop(iEdge)+1:nVertLevels,iEdge) = 0.0
 
               end if
             end do
-!print '(a,10es12.4)', 'u2', minval(u(:,1:nEdges)),maxval(u(:,1:nEdges))
 
-
+            !
+            !  Implicit vertical solve for tracers
+            !
             do iCell=1,nCells
                ! Compute A(k), C(k) for tracers
                ! mrp 110315 efficiency note: for z-level, could precompute
@@ -336,19 +327,12 @@
                   tracersTemp, maxLevelCell(iCell), &amp;
                   nVertLevels,num_tracers)
 
-!mrp temp
                tracers(:,1:maxLevelCell(iCell),iCell) = tracersTemp(:,1:maxLevelCell(iCell))
-! mrp temp remove soon:
-!               do k=1,maxLevelCell(iCell)
-!                  tracers(:,k,iCell) = tracers(:,k,iCell) / h(k,iCell)
-!               end do
-! mrp temp end
 ! mrp set as follows
 !               tracers(:,maxLevelCell(iCell)+1:nVertLevels,iCell) = -1e34
                tracers(:,maxLevelCell(iCell)+1:nVertLevels,iCell) = 0
 
             end do
-!print '(a,10es12.4)', 'tracer', minval(tracers(:,:,1:nCells)),maxval(tracers(:,:,1:nCells))
             deallocate(A,C,uTemp,tracersTemp)
          end if
 
@@ -358,7 +342,6 @@
 
          call compute_solve_diagnostics(dt, block % state % time_levs(2) % state, block % mesh)
 
-! mrp causes error Subscript #1 of the array INDX has value 7 which is greater than the upper bound of 6
          call reconstruct(block % state % time_levs(2) % state, block % mesh)
 
          block =&gt; block % next
@@ -762,28 +745,28 @@
       !
       ! velocity tendency: vertical mixing d/dz( nu_v du/dz))
       !
-!mrp indent later
       if (.not.config_implicit_vertical_mix) then
-      allocate(fluxVertTop(nVertLevels+1))
-      fluxVertTop(1) = 0.0
-      do iEdge=1,grid % nEdgesSolve
+         allocate(fluxVertTop(nVertLevels+1))
+         fluxVertTop(1) = 0.0
+         do iEdge=1,grid % nEdgesSolve
          
-         do k=2,maxLevelEdgeTop(iEdge)
-           fluxVertTop(k) = vertViscTopOfEdge(k,iEdge) &amp;
-              * ( u(k-1,iEdge) - u(k,iEdge) ) &amp;
-              * 2 / (h_edge(k-1,iEdge) + h_edge(k,iEdge))
-         enddo
-         fluxVertTop(maxLevelEdgeTop(iEdge)+1) = 0.0
+            do k=2,maxLevelEdgeTop(iEdge)
+              fluxVertTop(k) = vertViscTopOfEdge(k,iEdge) &amp;
+                 * ( u(k-1,iEdge) - u(k,iEdge) ) &amp;
+                 * 2 / (h_edge(k-1,iEdge) + h_edge(k,iEdge))
+            enddo
+            fluxVertTop(maxLevelEdgeTop(iEdge)+1) = 0.0
 
-         do k=1,maxLevelEdgeTop(iEdge)
-           tend_u(k,iEdge) = tend_u(k,iEdge) &amp;
-             + (fluxVertTop(k) - fluxVertTop(k+1)) &amp;
-             / h_edge(k,iEdge)
-         enddo
+            do k=1,maxLevelEdgeTop(iEdge)
+              tend_u(k,iEdge) = tend_u(k,iEdge) &amp;
+                + (fluxVertTop(k) - fluxVertTop(k+1)) &amp;
+                / h_edge(k,iEdge)
+            enddo
 
-      end do
-      deallocate(fluxVertTop)
+         end do
+         deallocate(fluxVertTop)
       endif
+
    end subroutine compute_tend
 
 
@@ -1290,33 +1273,32 @@
       !
       ! tracer tendency: vertical diffusion h d/dz( \kappa_v d\phi/dz)
       !
-!mrp indent later
       if (.not.config_implicit_vertical_mix) then
-      allocate(fluxVertTop(num_tracers,nVertLevels+1))
-      fluxVertTop(:,1) = 0.0
-      do iCell=1,nCellsSolve 
+         allocate(fluxVertTop(num_tracers,nVertLevels+1))
+         fluxVertTop(:,1) = 0.0
+         do iCell=1,nCellsSolve 
 
-         do k=2,maxLevelCell(iCell)
-           do iTracer=1,num_tracers
-             ! compute \kappa_v d\phi/dz
-             fluxVertTop(iTracer,k) = vertDiffTopOfCell(k,iCell) &amp;
-                * (tracers(iTracer,k-1,iCell) - tracers(iTracer,k,iCell) )&amp;
-                * 2 / (h(k-1,iCell) + h(k,iCell))
-           enddo
-         enddo
-         fluxVertTop(:,maxLevelCell(iCell)+1) = 0.0
+            do k=2,maxLevelCell(iCell)
+              do iTracer=1,num_tracers
+                ! compute \kappa_v d\phi/dz
+                fluxVertTop(iTracer,k) = vertDiffTopOfCell(k,iCell) &amp;
+                   * (tracers(iTracer,k-1,iCell) - tracers(iTracer,k,iCell) )&amp;
+                   * 2 / (h(k-1,iCell) + h(k,iCell))
+              enddo
+            enddo
+            fluxVertTop(:,maxLevelCell(iCell)+1) = 0.0
 
-         do k=1,maxLevelCell(iCell)
-           do iTracer=1,num_tracers
-             ! This is h d/dz( fluxVertTop) but h and dz cancel, so 
-             ! reduces to delta( fluxVertTop)
-             tend_tr(iTracer,k,iCell) = tend_tr(iTracer,k,iCell) &amp;
-               + fluxVertTop(iTracer,k) - fluxVertTop(iTracer,k+1)
-           enddo
-         enddo
+            do k=1,maxLevelCell(iCell)
+              do iTracer=1,num_tracers
+                ! This is h d/dz( fluxVertTop) but h and dz cancel, so 
+                ! reduces to delta( fluxVertTop)
+                tend_tr(iTracer,k,iCell) = tend_tr(iTracer,k,iCell) &amp;
+                  + fluxVertTop(iTracer,k) - fluxVertTop(iTracer,k+1)
+              enddo
+            enddo
 
-      enddo ! iCell loop
-      deallocate(fluxVertTop)
+         enddo ! iCell loop
+         deallocate(fluxVertTop)
       endif
 
           ! print some diagnostics - for debugging
@@ -1725,9 +1707,8 @@
       if (config_vert_grid_type.eq.'zlevel') then
          call equation_of_state(s,grid,-1)
 
-! mrp temp, just to visualize rhoDisplaced
-      call equation_of_state(s, grid, 1)
-! mrp temp, just to visualize rhoDisplaced end
+      ! mrp 110324 In order to vissualize rhoDisplaced, include the following
+      !call equation_of_state(s, grid, 1)
 
       endif
 
@@ -1846,11 +1827,9 @@
 
 
 ! mrp clean out these after subroutine complete
-      integer :: iEdge, iCell, iVertex, k, cell1, cell2, vertex1, vertex2, eoe, i, j, cov
-      real (kind=RKIND) :: flux, vorticity_abs, h_vertex, workpv, rho0Inv
+      integer :: iEdge, iCell, iVertex, k, cell1, cell2, i, j
+      integer :: nCells, nEdges, nVertices, nVertLevels
 
-      integer :: nCells, nEdges, nVertices, nVertLevels, vertexDegree
-
       real (kind=RKIND), dimension(:,:), allocatable:: &amp;
         drhoTopOfCell, drhoTopOfEdge, &amp;
         du2TopOfCell, du2TopOfEdge
@@ -1863,22 +1842,13 @@
       real (kind=RKIND), dimension(:), pointer :: &amp;
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &amp;
         hZLevel, zTopZLevel  
-      real (kind=RKIND), dimension(:,:), pointer :: &amp;
-        v, w, pressure,&amp;
-        circulation, vorticity, ke, ke_edge, MontPot, wTop, &amp;
-        pv_edge, pv_vertex, pv_cell, gradPVn, gradPVt, divergence, &amp;
-         temperature, salinity
-      real (kind=RKIND), dimension(:,:,:), pointer :: tracers
-      real (kind=RKIND), dimension(:), allocatable:: pTop
-      real (kind=RKIND), dimension(:,:), allocatable:: div_u
       character :: c1*6
 
-      integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, &amp;
-        verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex, &amp;
-        boundaryEdge, boundaryCell
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge, &amp;
         maxLevelCell, maxLevelEdgeTop, maxLevelEdgeBot, &amp;
         maxLevelVertexBot,  maxLevelVertexTop
+      integer, dimension(:,:), pointer :: &amp;
+        cellsOnEdge
       real (kind=RKIND) :: d2fdx2_cell1, d2fdx2_cell2
       real (kind=RKIND), dimension(:,:,:), pointer :: deriv_two
       real (kind=RKIND) :: coef_3rd_order
@@ -1894,67 +1864,20 @@
       RiTopOfEdge =&gt; d % RiTopOfEdge % array
       RiTopOfCell =&gt; d % RiTopOfCell % array
 
-
-!
-!
-! mmmmmmmmmmmmmmmmmmmmmmm mrp delete variables later
-!
-!
-
-
-      v           =&gt; s % v % array
-      wTop        =&gt; s % wTop % array
-      circulation =&gt; s % circulation % array
-      vorticity   =&gt; s % vorticity % array
-      divergence  =&gt; s % divergence % array
-      ke          =&gt; s % ke % array
-      ke_edge     =&gt; s % ke_edge % array
-      pv_edge     =&gt; s % pv_edge % array
-      pv_vertex   =&gt; s % pv_vertex % array
-      pv_cell     =&gt; s % pv_cell % array
-      gradPVn     =&gt; s % gradPVn % array
-      gradPVt     =&gt; s % gradPVt % array
-      tracers     =&gt; s % tracers % array
-      MontPot     =&gt; s % MontPot % array
-      pressure    =&gt; s % pressure % array
-
-
       zTopZLevel        =&gt; grid % zTopZLevel % array
-
-      kiteAreasOnVertex =&gt; grid % kiteAreasOnVertex % array
+      maxLevelCell      =&gt; grid % maxLevelCell % array
+      maxLevelEdgeTop   =&gt; grid % maxLevelEdgeTop % array
+      maxLevelEdgeBot   =&gt; grid % maxLevelEdgeBot % array
       cellsOnEdge       =&gt; grid % cellsOnEdge % array
-      cellsOnVertex     =&gt; grid % cellsOnVertex % array
-      verticesOnEdge    =&gt; grid % verticesOnEdge % array
-      nEdgesOnCell      =&gt; grid % nEdgesOnCell % array
-      edgesOnCell       =&gt; grid % edgesOnCell % array
-      nEdgesOnEdge      =&gt; grid % nEdgesOnEdge % array
-      edgesOnEdge       =&gt; grid % edgesOnEdge % array
-      edgesOnVertex     =&gt; grid % edgesOnVertex % array
       dcEdge            =&gt; grid % dcEdge % array
       dvEdge            =&gt; grid % dvEdge % array
       areaCell          =&gt; grid % areaCell % array
-      areaTriangle      =&gt; grid % areaTriangle % array
-      h_s               =&gt; grid % h_s % array
-      fVertex           =&gt; grid % fVertex % array
-      fEdge             =&gt; grid % fEdge % array
-      hZLevel           =&gt; grid % hZLevel % array
-      deriv_two         =&gt; grid % deriv_two % array
-      maxLevelCell      =&gt; grid % maxLevelCell % array
-      maxLevelEdgeTop   =&gt; grid % maxLevelEdgeTop % array
-      maxLevelEdgeBot   =&gt; grid % maxLevelEdgeBot % array
-      maxLevelVertexBot =&gt; grid % maxLevelVertexBot % array
-      maxLevelVertexTop =&gt; grid % maxLevelVertexTop % array
-                  
 
       nCells      = grid % nCells
       nEdges      = grid % nEdges
       nVertices   = grid % nVertices
       nVertLevels = grid % nVertLevels
-      vertexDegree = grid % vertexDegree
 
-      boundaryEdge =&gt; grid % boundaryEdge % array
-      boundaryCell =&gt; grid % boundaryCell % array
-
    !
    !  Compute Richardson Number
    !
@@ -1967,11 +1890,6 @@
       ! compute density of parcel displaced to surface, $\rho^*$,
       ! in state % rhoDisplaced
       call equation_of_state(s, grid, 1)
-! mrp delete:
-!print '(a,10es12.4)', 'temperature', minval(tracers(1,2:10,1:nCells)),maxval(tracers(1,2:10,1:nCells))
-!print '(a,10es12.4)', 'salinity', minval(tracers(2,2:10,1:nCells)),maxval(tracers(2,2:10,1:nCells))
-!print '(a,10es12.4)', 'rhoDisplaced', minval(rhoDisplaced(2:10,1:nCells)),maxval(rhoDisplaced(2:10,1:nCells))
-!print '(a,10es12.4)', 'h_edge', minval(h_edge(2:10,1:nEdges)),maxval(h_edge(2:10,1:nEdges))
 
       ! drhoTopOfCell(k) = $\rho^*_{k-1}-\rho^*_k$
       drhoTopOfCell = 0.0
@@ -2018,10 +1936,6 @@
          end do
       end do
 
-!test this interp
-
-! are there issues with updating proc boundaries here?
-
       ! compute RiTopOfEdge using drhoTopOfEdge and du2TopOfEdge
       ! coef = -g/rho_0/2
       RiTopOfEdge = 0.0
@@ -2046,17 +1960,6 @@
          end do
       end do
 
-!print '(a,10es12.4)', 'RiTopOfCell', minval(RiTopOfCell(2:10,1:nCells)),maxval(RiTopOfCell(2:10,1:nCells))
-!print '(a,10es12.4)', 'RiTopOfEdge', minval(RiTopOfEdge(2:10,1:nEdges)),maxval(RiTopOfEdge(2:10,1:nEdges))
-!print *, 'gravity',gravity
-!print '(a,10es12.4)', 'drhoTopOfCell', minval(drhoTopOfCell(2:10,1:nCells)),maxval(drhoTopOfCell(2:10,1:nCells))
-!print '(a,10es12.4)', 'du2TopOfCell', minval(du2TopOfCell(2:10,1:nCells)),maxval(du2TopOfCell(2:10,1:nCells))
-!print '(a,10es12.4)', 'h', minval(h(2:10,1:nCells)),maxval(h(2:10,1:nCells))
-
-      
-! what about boundary update?
-
-
       deallocate(drhoTopOfCell, drhoTopOfEdge, &amp;
         du2TopOfCell, du2TopOfEdge)
    endif
@@ -2162,9 +2065,6 @@
 
    endif
 
-!print '(a,10es12.4)', 'vertDiffTopOfCell', minval(vertDiffTopOfCell(2:10,1:nCells)),maxval(vertDiffTopOfCell(2:10,1:nCells))
-!print '(a,10es12.4)', 'vertViscTopOfEdge', minval(vertViscTopOfEdge(2:10,1:nEdges)),maxval(vertViscTopOfEdge(2:10,1:nEdges))
-
    end subroutine compute_vertical_mix_coefficients
 
 
@@ -2491,26 +2391,12 @@
       DENOMK = 1.0/(BULK_MOD - p(k))
 
       rhoPointer(k,iCell) = (unt0 + RHO_S)*BULK_MOD*DENOMK
-!mrp 
-!   if (k_displaced.gt.0) then
-!print '(a,2i5,10es22.14)', 'eos icell,k,T,S,rho', icell,k,TQ,SQ,rhoPointer(k,iCell)
-!   endif
-!mrp 
 
     end do
   end do
 
-!mrp 
-!   if (k_displaced.gt.0) then
-!print '(a,10es22.14)', 'eos temperature', minval(tracers(1,2:10,1:nCells)),maxval(tracers(1,2:10,1:nCells))
-!print '(a,10es22.14)', 'eos salinity', minval(tracers(2,2:10,1:nCells)),maxval(tracers(2,2:10,1:nCells))
-!print '(a,10es22.14)', 'eos rhoDisplaced', minval(rhoPointer(2:10,1:nCells)),maxval(rhoPointer(2:10,1:nCells))
-!   stop
-!   endif
-!mrp 
+   deallocate(pRefEOS,p,p2)
 
-      deallocate(pRefEOS,p,p2)
-
    end subroutine equation_of_state_jm
 
 

</font>
</pre>