<p><b>croesch@ucar.edu</b> 2011-12-13 16:31:56 -0700 (Tue, 13 Dec 2011)</p><p>BRANCH COMMIT<br>
<br>
Created exclusive halo 2 exchange list, renamed halo objects, updated halo logic for rtheta_pp in atm time integration<br>
<br>
M    src/core_nhyd_atmos/mpas_atm_time_integration.F<br>
M    src/core_nhyd_atmos/mpas_atm_mpas_core.F<br>
M    src/framework/mpas_io_input.F<br>
M    src/framework/mpas_dmpar.F<br>
M    src/framework/mpas_grid_types.F<br>
</p><hr noshade><pre><font color="gray">Modified: branches/halo/src/core_nhyd_atmos/mpas_atm_mpas_core.F
===================================================================
--- branches/halo/src/core_nhyd_atmos/mpas_atm_mpas_core.F        2011-12-12 20:02:40 UTC (rev 1254)
+++ branches/halo/src/core_nhyd_atmos/mpas_atm_mpas_core.F        2011-12-13 23:31:56 UTC (rev 1255)
@@ -192,7 +192,7 @@
 
       call mpas_dmpar_exch_halo_field2d_real(dminfo, block % state % time_levs(1) % state % u % array(:,:), &amp;
                                        block % mesh % nVertLevels, block % mesh % nEdges, &amp;
-                                       block % parinfo % halo2EdgesToSend, block % parinfo % halo2EdgesToRecv)
+                                       block % parinfo % allEdgesToSend, block % parinfo % allEdgesToRecv)
    
       if (.not. config_do_restart .or. (config_do_restart .and. config_do_DAcycling)) then
          call atm_init_coupled_diagnostics( block % state % time_levs(1) % state, block % diag, mesh)
@@ -201,13 +201,13 @@
 
       call mpas_dmpar_exch_halo_field2d_real(dminfo, block % diag % pv_edge % array(:,:), &amp;
                                        block % mesh % nVertLevels, block % mesh % nEdges, &amp;
-                                       block % parinfo % halo2EdgesToSend, block % parinfo % halo2EdgesToRecv)
+                                       block % parinfo % allEdgesToSend, block % parinfo % allEdgesToRecv)
       call mpas_dmpar_exch_halo_field2d_real(dminfo, block % diag % ru % array(:,:), &amp;
                                        block % mesh % nVertLevels, block % mesh % nEdges, &amp;
-                                       block % parinfo % halo2EdgesToSend, block % parinfo % halo2EdgesToRecv)
+                                       block % parinfo % allEdgesToSend, block % parinfo % allEdgesToRecv)
       call mpas_dmpar_exch_halo_field2d_real(dminfo, block % diag % rw % array, &amp;
                                        block % mesh % nVertLevels+1, block % mesh % nCells,  &amp;
-                                       block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                       block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
 
       call mpas_rbf_interp_initialize(mesh)
       call mpas_init_reconstruct(mesh)

Modified: branches/halo/src/core_nhyd_atmos/mpas_atm_time_integration.F
===================================================================
--- branches/halo/src/core_nhyd_atmos/mpas_atm_time_integration.F        2011-12-12 20:02:40 UTC (rev 1254)
+++ branches/halo/src/core_nhyd_atmos/mpas_atm_time_integration.F        2011-12-13 23:31:56 UTC (rev 1255)
@@ -132,23 +132,22 @@
 ! theta_m
          call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % state % time_levs(1) % state % theta_m % array(:,:), &amp;
                                           block % mesh % nVertLevels, block % mesh % nCells, &amp;
-                                          block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                          block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
 ! scalars
          call mpas_dmpar_exch_halo_field3d_real(domain % dminfo, block % state % time_levs(1) % state % scalars % array(:,:,:), &amp;
                                           block % state % time_levs(1) % state % num_scalars, block % mesh % nVertLevels, block % mesh % nCells, &amp;
-                                          block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                          block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
 ! pressure_p
          call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % diag % pressure_p % array(:,:), &amp;
                                           block % mesh % nVertLevels, block % mesh % nCells, &amp;
-                                          block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                          block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
 ! rtheta_p
          call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % diag % rtheta_p % array(:,:), &amp;
                                           block % mesh % nVertLevels, block % mesh % nCells, &amp;
-                                          block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
-!surface_pressure
-!         call mpas_dmpar_exch_halo_field1d_real(domain % dminfo, block % diag % surface_pressure % array(:), &amp;
-!                                          block % mesh % nCells, &amp;
-!                                          block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                          block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
+
+!surface_pressure does not need to be exchanged
+
          block =&gt; block % next
       end do
 
@@ -191,7 +190,7 @@
         if (debug) write(0,*) ' add physics tendencies '
         block =&gt; domain % blocklist
         do while (associated(block))
-           call physics_addtend( domain % dminfo , block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv, &amp;
+           call physics_addtend( domain % dminfo , block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv, &amp;
                         block % mesh , block % state % time_levs(2) % state, block % diag, block % tend, &amp;
                         block % tend_physics , block % state % time_levs(2) % state % rho_zz % array(:,:), &amp;
                         block % diag % rho_edge % array(:,:) )
@@ -210,7 +209,7 @@
 ! tend_u
             call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % tend % u % array(:,:), &amp;
                                              block % mesh % nVertLevels, block % mesh % nEdges, &amp;
-                                             block % parinfo % ownPerimEdgesToSend, block % parinfo % ownPerimEdgesToRecv)
+                                             block % parinfo % ownCellBoundedEdgesToSend, block % parinfo % ownCellBoundedEdgesToRecv)
             block =&gt; block % next
          end do
 
@@ -244,7 +243,7 @@
 ! rtheta_pp
                call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % diag % rtheta_pp % array(:,:), &amp;
                                                 block % mesh % nVertLevels, block % mesh % nCells, &amp;
-                                                block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                                block % parinfo % halo1CellsToSend, block % parinfo % halo1CellsToRecv)
                block =&gt; block % next
             end do
  
@@ -266,22 +265,28 @@
 ! rw_p
             call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % diag % rw_p % array(:,:), &amp;
                                              block % mesh % nVertLevels+1, block % mesh % nCells, &amp;
-                                             block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                             block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
 ! MGD seems necessary
 ! ru_p
             call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % diag % ru_p % array(:,:), &amp;
                                              block % mesh % nVertLevels, block % mesh % nEdges, &amp;
-                                             block % parinfo % halo2EdgesToSend, block % parinfo % halo2EdgesToRecv)
+                                             block % parinfo % allEdgesToSend, block % parinfo % allEdgesToRecv)
 ! rho_pp
             call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % diag % rho_pp % array(:,:), &amp;
                                              block % mesh % nVertLevels, block % mesh % nCells, &amp;
-                                             block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                             block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
             block =&gt; block % next
          end do
 
          block =&gt; domain % blocklist
+
+         ! the second layer of halo cells must be exchanged before calling atm_recover_large_step_variables
+         call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % diag % rtheta_pp % array(:,:), &amp;
+                                                block % mesh % nVertLevels, block % mesh % nCells, &amp;
+                                                block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+
          do while (associated(block))
-            call atm_recover_large_step_variables( block % state % time_levs(2) % state,                     &amp;
+            call atm_recover_large_step_variables( block % state % time_levs(2) % state,                 &amp;
                                                block % diag, block % tend, block % mesh,                 &amp;
                                                rk_timestep(rk_step), number_sub_steps(rk_step), rk_step  )
           
@@ -295,7 +300,7 @@
 ! u
             call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % state % time_levs(2) % state % u % array(:,:), &amp;
                                              block % mesh % nVertLevels, block % mesh % nEdges, &amp;
-                                             block % parinfo % halo2EdgesToSend, block % parinfo % halo2EdgesToRecv)
+                                             block % parinfo % allEdgesToSend, block % parinfo % allEdgesToRecv)
             block =&gt; block % next
          end do
 
@@ -320,7 +325,7 @@
                                           block % state % time_levs(1) % state, block % state % time_levs(2) % state, &amp;
                                           block % diag, &amp;
                                           block % mesh, rk_timestep(rk_step), rk_step, 3,             &amp;
-                                          domain % dminfo, block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv )
+                                          domain % dminfo, block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv )
             end if
             block =&gt; block % next
          end do
@@ -330,10 +335,10 @@
 !         do while (associated(block))
 !            call mpas_dmpar_exch_halo_field3d_real(domain % dminfo, block % tend % scalars % array(:,:,:), &amp;
 !                                             block % tend % num_scalars, block % mesh % nVertLevels, block % mesh % nCells, &amp;
-!                                             block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+!                                             block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
 !            call mpas_dmpar_exch_halo_field3d_real(domain % dminfo, block % state % time_levs(2) % state % scalars % array(:,:,:), &amp;
 !                                             block % state % time_levs(2) % state % num_scalars, block % mesh % nVertLevels, block % mesh % nCells, &amp;
-!                                             block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+!                                             block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
 !            block =&gt; block % next
 !         end do
 
@@ -367,22 +372,22 @@
 ! w
             call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % state % time_levs(2) % state % w % array(:,:), &amp;
                                              block % mesh % nVertLevels+1, block % mesh % nCells, &amp;
-                                             block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                             block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
 ! pv_edge
             call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % diag % pv_edge % array(:,:), &amp;
                                              block % mesh % nVertLevels, block % mesh % nEdges, &amp;
-                                             block % parinfo % halo2EdgesToSend, block % parinfo % halo2EdgesToRecv)
+                                             block % parinfo % allEdgesToSend, block % parinfo % allEdgesToRecv)
 ! rho_edge
             call mpas_dmpar_exch_halo_field2d_real(domain % dminfo, block % diag % rho_edge % array(:,:), &amp;
                                              block % mesh % nVertLevels, block % mesh % nEdges, &amp;
-                                             block % parinfo % halo2EdgesToSend, block % parinfo % halo2EdgesToRecv)
+                                             block % parinfo % allEdgesToSend, block % parinfo % allEdgesToRecv)
 
 !  ****  this will always be needed - perhaps we can cover this with compute_solve_diagnostics
 
 ! scalars
             call mpas_dmpar_exch_halo_field3d_real(domain % dminfo, block % state % time_levs(2) % state % scalars % array(:,:,:), &amp;
                                              block % state % time_levs(2) % state % num_scalars, block % mesh % nVertLevels, block % mesh % nCells, &amp;
-                                             block % parinfo % halo2CellsToSend, block % parinfo % halo2CellsToRecv)
+                                             block % parinfo % allCellsToSend, block % parinfo % allCellsToRecv)
             block =&gt; block % next
          end do
 

Modified: branches/halo/src/framework/mpas_dmpar.F
===================================================================
--- branches/halo/src/framework/mpas_dmpar.F        2011-12-12 20:02:40 UTC (rev 1254)
+++ branches/halo/src/framework/mpas_dmpar.F        2011-12-13 23:31:56 UTC (rev 1255)
@@ -550,6 +550,48 @@
    end subroutine mpas_dmpar_compute_index_range
 
 
+   subroutine mpas_dmpar_get_halo_subset(superSet, innerHalo, outerHalo)
+
+      type (exchange_list), pointer :: superSet, innerHalo  ! in
+      type (exchange_list), pointer :: outerHalo            ! out

+      type (exchange_list), pointer :: superSetPtr, innerHaloPtr, outerHaloPtr 
+      integer :: i
+
+      allocate(outerHalo)
+      nullify(outerHalo % next)
+
+      superSetPtr  =&gt; superSet
+      innerHaloPtr =&gt; innerHalo
+      outerHaloPtr =&gt; outerHalo
+
+      do while(associated(superSetPtr))
+
+         allocate(outerHaloPtr % next)
+         outerHaloPtr =&gt; outerHaloPtr % next
+         outerHaloPtr % procID = superSetPtr % procID
+         outerHaloPtr % nlist = superSetPtr % nlist - innerHaloPtr % nlist
+         allocate(outerHaloPtr % list(outerHaloPtr % nlist))
+         nullify(outerHaloPtr % next)
+
+         do i=1, outerHaloPtr % nlist
+            outerHaloPtr % list(i) = superSetPtr % list(i + innerHaloPtr % nlist)
+         end do
+
+         innerHaloPtr =&gt; innerHaloPtr % next
+         superSetPtr =&gt; superSetPtr % next
+      end do
+
+      nullify(outerHaloPtr % next)
+
+      outerHaloPtr =&gt; outerHalo
+      outerHalo =&gt; outerHalo % next
+      deallocate(outerHaloPtr)
+
+   end subroutine
+
+
+
    subroutine mpas_dmpar_get_owner_list(dminfo, &amp;
                                    nOwnedList, nNeededList, &amp;
                                    ownedList, neededList, &amp;

Modified: branches/halo/src/framework/mpas_grid_types.F
===================================================================
--- branches/halo/src/framework/mpas_grid_types.F        2011-12-12 20:02:40 UTC (rev 1254)
+++ branches/halo/src/framework/mpas_grid_types.F        2011-12-13 23:31:56 UTC (rev 1255)
@@ -104,15 +104,17 @@
    type parallel_info
       type (exchange_list), pointer :: halo1CellsToSend            ! List of types describing which cells to send to other blocks
       type (exchange_list), pointer :: halo1CellsToRecv            ! List of types describing which cells to receive from other blocks
-      type (exchange_list), pointer :: halo2CellsToSend            ! List of types describing which cells to send to other blocks
-      type (exchange_list), pointer :: halo2CellsToRecv            ! List of types describing which cells to receive from other blocks
+      type (exchange_list), pointer :: halo2CellsToSend
+      type (exchange_list), pointer :: halo2CellsToRecv
+      type (exchange_list), pointer :: allCellsToSend
+      type (exchange_list), pointer :: allCellsToRecv
 
-      type (exchange_list), pointer :: ownPerimEdgesToSend            ! List of types describing which edges to send to other blocks
-      type (exchange_list), pointer :: ownPerimEdgesToRecv            ! List of types describing which edges to receive from other blocks
-      type (exchange_list), pointer :: halo1EdgesToSend            ! List of types describing which edges to send to other blocks
-      type (exchange_list), pointer :: halo1EdgesToRecv            ! List of types describing which edges to receive from other blocks
-      type (exchange_list), pointer :: halo2EdgesToSend            ! List of types describing which edges to send to other blocks
-      type (exchange_list), pointer :: halo2EdgesToRecv            ! List of types describing which edges to receive from other blocks
+      type (exchange_list), pointer :: ownCellBoundedEdgesToSend            ! List of types describing edges on the own cell perimeter to send to other blocks
+      type (exchange_list), pointer :: ownCellBoundedEdgesToRecv            ! List of types describing edges on the own cell perimeter to recieve from other blocks
+      type (exchange_list), pointer :: halo1BoundedEdgesToSend          ! List of types describing edges from the own cell perimeter to the halo 1 perimeter to send to other blocks
+      type (exchange_list), pointer :: halo1BoundedEdgesToRecv          ! List of types describing edges from the own cell perimeter to the halo 1 perimeter to receive from other blocks
+      type (exchange_list), pointer :: allEdgesToSend
+      type (exchange_list), pointer :: allEdgesToRecv
 
       type (exchange_list), pointer :: verticesToSend         ! List of types describing which vertices to send to other blocks
       type (exchange_list), pointer :: verticesToRecv         ! List of types describing which vertices to receive from other blocks

Modified: branches/halo/src/framework/mpas_io_input.F
===================================================================
--- branches/halo/src/framework/mpas_io_input.F        2011-12-12 20:02:40 UTC (rev 1254)
+++ branches/halo/src/framework/mpas_io_input.F        2011-12-13 23:31:56 UTC (rev 1255)
@@ -134,7 +134,7 @@
       integer, parameter :: nHalos = 3
       integer, dimension(nHalos) :: nCellsHalo
       integer, dimension(nHalos) :: nEdgesWithinHaloPerimeter
-      integer :: nOwnEdges, cellCount, edgeCount, iEdge
+      integer :: nOwnCells, nOwnEdges, nOwnVertex, cellCount, edgeCount, iEdge
       type (hashtable) :: hash
 
 
@@ -484,7 +484,7 @@
                                 block_graph_0Halo % maxDegree, block_graph_0Halo % nVertices, block_graph_1Halo % nVerticesTotal, &amp;
                                 send1Halo, recv1Halo)
    
-   
+
       !
       ! Work out exchange lists for 2-halo and exchange cell information for 2-halo
       !
@@ -497,6 +497,8 @@
       block_graph_2Halo % nVertices = block_graph_0Halo % nVertices
       block_graph_2Halo % ghostStart = block_graph_2Halo % nVertices + 1
 
+      nOwnCells = block_graph_2Halo % nVertices
+
 #ifdef HAVE_ZOLTAN
 #ifdef _MPI 
       !! For now, only use Zoltan with MPI
@@ -589,21 +591,23 @@
                                 sendVertexList, recvVertexList)
    
    
-      call mpas_block_decomp_partitioned_edge_list(block_graph_2Halo % nVertices, &amp;
-                                              block_graph_2Halo % vertexID(1:block_graph_2Halo % nVertices), &amp;
+      call mpas_block_decomp_partitioned_edge_list(nOwnCells, &amp;
+                                              block_graph_2Halo % vertexID(1:nOwnCells), &amp;
                                               2, nlocal_edges, cellsOnEdge_2Halo, local_edge_list, ghostEdgeStart)
-      call mpas_block_decomp_partitioned_edge_list(block_graph_2Halo % nVertices, &amp;
-                                              block_graph_2Halo % vertexID(1:block_graph_2Halo % nVertices), &amp;
+      call mpas_block_decomp_partitioned_edge_list(nOwnCells, &amp;
+                                              block_graph_2Halo % vertexID(1:nOwnCells), &amp;
                                               vertexDegree, nlocal_vertices, cellsOnVertex_2Halo, local_vertex_list, ghostVertexStart)
 
 
-      nCellsHalo(1) = block_graph_2Halo % nVertices
+      !------- set owned and halo cell indices -------!  
+      
+      nCellsHalo(1) = nOwnCells
       nCellsHalo(2) = block_graph_1Halo % nVerticesTotal
       nCellsHalo(3) = block_graph_2Halo % nVerticesTotal
 
+      !------- determin the perimeter and owned edges of own cells and halos -------!  
+
       nOwnEdges = ghostEdgeStart-1
-
-      !------- determin the perimeter and owned edges of own cells and halos -------!  
  
       ! skip the own edges found at the beginning of local_edge_list
       call mpas_hash_init(hash)
@@ -634,7 +638,7 @@
       end do
 
 
-      ! At this point, local_edge_list(1;ghostEdgeStart-1) contains all of the owned edges for this block
+      ! At this point, local_edge_list(1;nOwnEdges) contains all of the owned edges for this block
       !   and local_edge_list(ghostEdgeStart:nlocal_edges) contains all of the ghost edges
 
       ! At this point, local_vertex_list(1;ghostVertexStart-1) contains all of the owned vertices for this block
@@ -706,7 +710,7 @@
       !!!!!!!!!!!!!!!!!!
       !! Reorder edges
       !!!!!!!!!!!!!!!!!!
-      call mpas_zoltan_order_loc_hsfc_edges(ghostEdgeStart-1,local_edge_list,3,xEdge,yEdge,zEdge)
+      call mpas_zoltan_order_loc_hsfc_edges(nOwnEdges,local_edge_list,3,xEdge,yEdge,zEdge)
       !!!!!!!!!!!!!!!!!!
 
       !!!!!!!!!!!!!!!!!!
@@ -1000,38 +1004,43 @@
       !
 
       call mpas_dmpar_get_owner_list(domain % dminfo, &amp;
-                                block_graph_2Halo % nVertices, nCellsHalo(2), &amp;
-                                block_graph_2Halo % vertexID(1:block_graph_2Halo % nVertices), block_graph_2Halo % vertexID, &amp;
+                                nOwnCells, nCellsHalo(2), &amp;
+                                block_graph_2Halo % vertexID(1:nOwnCells), block_graph_2Halo % vertexID, &amp;
                                 domain % blocklist % parinfo % halo1CellsToSend, domain % blocklist % parinfo % halo1CellsToRecv)
 
       call mpas_dmpar_get_owner_list(domain % dminfo, &amp;
-                                block_graph_2Halo % nVertices, nCellsHalo(3), &amp;
-                                block_graph_2Halo % vertexID(1:block_graph_2Halo % nVertices), block_graph_2Halo % vertexID, &amp;
-                                domain % blocklist % parinfo % halo2CellsToSend, domain % blocklist % parinfo % halo2CellsToRecv)
+                                nOwnCells, nCellsHalo(3), &amp;
+                                block_graph_2Halo % vertexID(1:nOwnCells), block_graph_2Halo % vertexID, &amp;
+                                domain % blocklist % parinfo % allCellsToSend, domain % blocklist % parinfo % allCellsToRecv)
 
+      ! retrieve halo2 exchange lists
+      call mpas_dmpar_get_halo_subset(domain % blocklist % parinfo % allCellsToRecv, domain % blocklist % parinfo % halo1CellsToRecv, domain % blocklist % parinfo % halo2CellsToRecv)
+      call mpas_dmpar_get_halo_subset(domain % blocklist % parinfo % allCellsToSend, domain % blocklist % parinfo % halo1CellsToSend, domain % blocklist % parinfo % halo2CellsToSend)
 
+
       call mpas_dmpar_get_owner_list(domain % dminfo, &amp;
-                                ghostEdgeStart-1, nEdgesWithinHaloPerimeter(1), &amp;
-                                local_edge_list(1:ghostEdgeStart-1), local_edge_list, &amp;
-                                domain % blocklist % parinfo % ownPerimEdgesToSend, domain % blocklist % parinfo % ownPerimEdgesToRecv)
+                                nOwnEdges, nEdgesWithinHaloPerimeter(1), &amp;
+                                local_edge_list(1:nOwnEdges), local_edge_list, &amp;
+                                domain % blocklist % parinfo % ownCellBoundedEdgesToSend, domain % blocklist % parinfo % ownCellBoundedEdgesToRecv)
 
       call mpas_dmpar_get_owner_list(domain % dminfo, &amp;
-                                ghostEdgeStart-1, nEdgesWithinHaloPerimeter(2), &amp;
-                                local_edge_list(1:ghostEdgeStart-1), local_edge_list, &amp;
-                                domain % blocklist % parinfo % halo1EdgesToSend, domain % blocklist % parinfo % halo1EdgesToRecv)
+                                nOwnEdges, nEdgesWithinHaloPerimeter(2), &amp;
+                                local_edge_list(1:nOwnEdges), local_edge_list, &amp;
+                                domain % blocklist % parinfo % halo1BoundedEdgesToSend, domain % blocklist % parinfo % halo1BoundedEdgesToRecv)
 
       call mpas_dmpar_get_owner_list(domain % dminfo, &amp;
-                                ghostEdgeStart-1, nEdgesWithinHaloPerimeter(3), &amp;
-                                local_edge_list(1:ghostEdgeStart-1), local_edge_list, &amp;
-                                domain % blocklist % parinfo % halo2EdgesToSend, domain % blocklist % parinfo % halo2EdgesToRecv)
+                                nOwnEdges, nEdgesWithinHaloPerimeter(3), &amp;
+                                local_edge_list(1:nOwnEdges), local_edge_list, &amp;
+                                domain % blocklist % parinfo % allEdgesToSend, domain % blocklist % parinfo % allEdgesToRecv)
 
+
       call mpas_dmpar_get_owner_list(domain % dminfo, &amp;
                                 ghostVertexStart-1, nlocal_vertices, &amp;
                                 local_vertex_list(1:ghostVertexStart-1), local_vertex_list, &amp;
                                 domain % blocklist % parinfo % verticesToSend, domain % blocklist % parinfo % verticesToRecv)
 
-      domain % blocklist % mesh % nCellsSolve = block_graph_2Halo % nVertices
-      domain % blocklist % mesh % nEdgesSolve = ghostEdgeStart-1
+      domain % blocklist % mesh % nCellsSolve = nOwnCells
+      domain % blocklist % mesh % nEdgesSolve = nOwnEdges
       domain % blocklist % mesh % nVerticesSolve = ghostVertexStart-1
       domain % blocklist % mesh % nVertLevelsSolve = domain % blocklist % mesh % nVertLevels   ! No vertical decomp yet...
 

</font>
</pre>