<p><b>mpetersen@lanl.gov</b> 2010-10-20 08:13:33 -0600 (Wed, 20 Oct 2010)</p><p>BRANCH COMMIT: Change nVertLevels to maxLevelsCells in topography branch.<br>
</p><hr noshade><pre><font color="gray">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-10-19 21:17:20 UTC (rev 571)
+++ branches/ocean_projects/topography2_mrp/src/core_ocean/module_time_integration.F        2010-10-20 14:13:33 UTC (rev 572)
@@ -92,7 +92,7 @@
          block % state % time_levs(2) % state % u % array(:,:) = block % state % time_levs(1) % state % u % array(:,:)
          block % state % time_levs(2) % state % h % array(:,:) = block % state % time_levs(1) % state % h % array(:,:)
          do iCell=1,block % mesh % nCells  ! couple tracers to h
-           do k=1,block % mesh % nVertLevels
+           do k=1,block % mesh % maxLevelCell % array(iCell)
              block % state % time_levs(2) % state % tracers % array(:,k,iCell) = block % state % time_levs(1) % state % tracers % array(:,k,iCell) &amp;
                                                                        * block % state % time_levs(1) % state % h % array(k,iCell)
             end do
@@ -175,7 +175,7 @@
               provis % h % array(:,:)       = block % state % time_levs(1) % state % h % array(:,:)  &amp;
                                          + rk_substep_weights(rk_step) * block % tend % h % array(:,:)
               do iCell=1,block % mesh % nCells
-                 do k=1,block % mesh % nVertLevels
+                 do k=1,block % mesh % maxLevelCell % array(iCell)
                     provis % tracers % array(:,k,iCell) = ( &amp;
                                                                       block % state % time_levs(1) % state % h % array(k,iCell) * &amp;
                                                                       block % state % time_levs(1) % state % tracers % array(:,k,iCell)  &amp;
@@ -204,7 +204,7 @@
                                    + rk_weights(rk_step) * block % tend % h % array(:,:) 
 
            do iCell=1,block % mesh % nCells
-              do k=1,block % mesh % nVertLevels
+              do k=1,block % mesh % maxLevelCell % array(iCell)
                  block % state % time_levs(2) % state % tracers % array(:,k,iCell) =  &amp;
                                                                        block % state % time_levs(2) % state % tracers % array(:,k,iCell) &amp;
                                                + rk_weights(rk_step) * block % tend % tracers % array(:,k,iCell)
@@ -225,7 +225,7 @@
       block =&gt; domain % blocklist
       do while (associated(block))
          do iCell=1,block % mesh % nCells
-            do k=1,block % mesh % nVertLevels
+            do k=1,block % mesh % maxLevelCell % array(iCell)
                block % state % time_levs(2) % state % tracers % array(:,k,iCell) = &amp;
                                                                      block % state % time_levs(2) % state % tracers % array(:,k,iCell)  &amp;
                                                                    / block % state % time_levs(2) % state % h % array(k,iCell)
@@ -279,7 +279,8 @@
         divergence, MontPot, pZLevel, zMidEdge, zTopEdge
       type (dm_info) :: dminfo
 
-      integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
+      integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge, &amp;
+        maxLevelCell, maxLevelEdge, maxLevelVertex
       integer, dimension(:,:), pointer :: &amp;
         cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, &amp;
         edgesOnEdge, edgesOnVertex
@@ -329,6 +330,9 @@
       fEdge             =&gt; grid % fEdge % array
       zMidZLevel        =&gt; grid % zMidZLevel % array
       zTopZLevel        =&gt; grid % zTopZLevel % array
+      maxLevelCell      =&gt; grid % maxLevelCell % array
+      maxLevelEdge      =&gt; grid % maxLevelEdge % array
+      maxLevelVertex    =&gt; grid % maxLevelVertex % array
 
       tend_h      =&gt; tend % h % array
       tend_u      =&gt; tend % u % array
@@ -366,7 +370,7 @@
             end if
       end do 
       do iCell=1,nCells
-         do k=1,nVertLevels
+         do k=1,maxLevelCell(iCell)
             tend_h(k,iCell) = tend_h(k,iCell) / areaCell(iCell)
          end do
       end do
@@ -544,7 +548,7 @@
          end do
          do iCell = 1,nCells
             r = 1.0 / areaCell(iCell)
-            do k = 1,nVertLevels
+            do k = 1,maxLevelCell(iCell)
                delsq_divergence(k,iCell) = delsq_divergence(k,iCell) * r
             end do
          end do
@@ -692,7 +696,8 @@
       integer, dimension(:,:), pointer :: boundaryEdge
       type (dm_info) :: dminfo
 
-      integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
+      integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge, &amp;
+        maxLevelCell, maxLevelEdge, maxLevelVertex
       integer, dimension(:,:), pointer :: cellsOnEdge, boundaryCell
       real (kind=RKIND), dimension(:), pointer :: zTopZLevel
       real (kind=RKIND), dimension(:,:), allocatable:: fluxVertTop, tracerTop, boundaryMask
@@ -722,6 +727,9 @@
       dcEdge            =&gt; grid % dcEdge % array
       zTopZLevel        =&gt; grid % zTopZLevel % array
       boundaryEdge      =&gt; grid % boundaryEdge % array
+      maxLevelCell      =&gt; grid % maxLevelCell % array
+      maxLevelEdge      =&gt; grid % maxLevelEdge % array
+      maxLevelVertex    =&gt; grid % maxLevelVertex % array
 
       nEdges      = grid % nEdges
       nCells      = grid % nCells
@@ -877,7 +885,7 @@
       do iCell=1,grid % nCellsSolve 
 
          if (config_vert_tracer_adv.eq.'centered') then
-           do k=2,nVertLevels
+           do k=2,maxLevelCell(iCell)
              do iTracer=1,num_tracers
                tracerTop(iTracer,k) = ( tracers(iTracer,k-1,iCell) &amp;
                                        +tracers(iTracer,k  ,iCell))/2.0
@@ -885,7 +893,7 @@
            end do
          
          elseif (config_vert_tracer_adv.eq.'upwind') then
-           do k=2,nVertLevels
+           do k=2,maxLevelCell(iCell)
              if (wTop(k,iCell)&gt;0.0) then
                upwindCell = k
              else
@@ -897,8 +905,9 @@
            end do
 
          endif
+         tracerTop(:,maxLevelCell(iCell)+1)=0.0
 
-         do k=1,nVertLevels  
+         do k=1,maxLevelCell(iCell)  
             do iTracer=1,num_tracers
                tend_tr(iTracer,k,iCell) = tend_tr(iTracer,k,iCell) &amp;
                   - (   wTop(k  ,iCell)*tracerTop(iTracer,k  ) &amp;
@@ -987,7 +996,7 @@
 
          do iCell = 1, nCells
             r = 1.0 / areaCell(iCell)
-            do k=1,nVertLevels
+            do k=1,maxLevelCell(iCell)
             do iTracer=1,num_tracers
                delsq_tracer(iTracer,k,iCell) = delsq_tracer(iTracer,k,iCell) * r
             end do
@@ -1050,7 +1059,7 @@
       fluxVertTop(:,1) = 0.0
       fluxVertTop(:,nVertLevels+1) = 0.0
       do iCell=1,grid % nCellsSolve 
-         do k=2,nVertLevels
+         do k=2,maxLevelCell(iCell)
            do iTracer=1,num_tracers
              ! compute \kappa_v d\phi/dz
              fluxVertTop(iTracer,k) = vertDiffTop(k) &amp;
@@ -1058,8 +1067,9 @@
                 / (zMid(k-1,iCell) -zMid(k,iCell))
            enddo
          enddo
+         fluxVertTop(:,maxLevelCell(iCell)+1) = 0.0
 
-         do k=1,nVertLevels
+         do k=1,maxLevelCell(iCell)
            dist = zTop(k,iCell) - zTop(k+1,iCell)
            do iTracer=1,num_tracers
              tend_tr(iTracer,k,iCell) = tend_tr(iTracer,k,iCell) &amp;
@@ -1120,7 +1130,8 @@
       character :: c1*6
 
       integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex, boundaryEdge, boundaryCell
-      integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
+      integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge, &amp;
+        maxLevelCell, maxLevelEdge, maxLevelVertex
       real (kind=RKIND) :: d2fdx2_cell1, d2fdx2_cell2
       real (kind=RKIND), dimension(:,:,:), pointer :: deriv_two
       real (kind=RKIND) :: coef_3rd_order
@@ -1173,6 +1184,9 @@
       fEdge             =&gt; grid % fEdge % array
       hZLevel           =&gt; grid % hZLevel % array
       deriv_two         =&gt; grid % deriv_two % array
+      maxLevelCell      =&gt; grid % maxLevelCell % array
+      maxLevelEdge      =&gt; grid % maxLevelEdge % array
+      maxLevelVertex    =&gt; grid % maxLevelVertex % array
                   
       nCells      = grid % nCells
       nEdges      = grid % nEdges
@@ -1376,11 +1390,11 @@
       do iCell=1,nCells
          do i=1,nEdgesOnCell(iCell)
             iEdge = edgesOnCell(i,iCell)
-            do k=1,nVertLevels
+            do k=1,maxLevelCell(iCell)
                ke(k,iCell) = ke(k,iCell) + 0.25 * dcEdge(iEdge) * dvEdge(iEdge) * u(k,iEdge)**2.0
             end do
          end do
-         do k=1,nVertLevels
+         do k=1,maxLevelCell(iCell)
             ke(k,iCell) = ke(k,iCell) / areaCell(iCell)
          end do
       end do
@@ -1527,7 +1541,7 @@
       ! For a isopycnal model, density should remain constant.
       if (config_vert_grid_type.eq.'zlevel') then
         do iCell=1,nCells
-          do k=1,nVertLevels
+          do k=1,maxLevelCell(iCell)
             ! Linear equation of state, for the time being
             rho(k,iCell) = 1000.0*(  1.0 &amp;
                - 2.5e-4*tracers(s % index_temperature,k,iCell) &amp;
@@ -1634,14 +1648,13 @@
         end do 
 
         do iCell=1,nCells
-           do k=1,nVertLevels
+           do k=1,maxLevelCell(iCell)
               div_u(k,iCell) = div_u(k,iCell) / areaCell(iCell)
            end do
 
            ! Vertical velocity at bottom is zero.
-           ! this next line can be set permanently somewhere upon startup.
-           wTop(nVertLevels+1,iCell) = 0.0
-           do k=nVertLevels,1,-1
+           wTop(maxLevelCell(iCell)+1,iCell) = 0.0
+           do k=maxLevelCell(iCell),1,-1
               wTop(k,iCell) = wTop(k+1,iCell) - div_u(k,iCell)*h(k,iCell)
            end do
 

Modified: branches/ocean_projects/topography2_mrp/src/core_ocean/mpas_interface.F
===================================================================
--- branches/ocean_projects/topography2_mrp/src/core_ocean/mpas_interface.F        2010-10-19 21:17:20 UTC (rev 571)
+++ branches/ocean_projects/topography2_mrp/src/core_ocean/mpas_interface.F        2010-10-20 14:13:33 UTC (rev 572)
@@ -134,6 +134,14 @@
           end do
         end do 
 
+       ! mrp temp printing, can remove later
+       print *, 'min/max MaxLevelCell, min/max MaxLevelEdge, ',&amp;
+         'min/max MaxLevelVertex'
+       print '(20i5)', &amp;
+         minval(maxLevelCell(1:nCells)), maxval(maxLevelCell(1:nCells)), &amp;
+         minval(maxLevelEdge(1:nEdges)), maxval(maxLevelEdge(1:nEdges)), &amp;
+         minval(maxLevelVertex(1:nVertices)), maxval(maxLevelVertex(1:nVertices))
+
          block =&gt; block % next
       end do
 

</font>
</pre>