<p><b>duda</b> 2012-01-11 14:03:47 -0700 (Wed, 11 Jan 2012)</p><p>BRANCH COMMIT<br>
<br>
Change exchange lists in parallel_info type to arrays of head pointers,<br>
and update halo exchange routines in mpas_dmpar.F to accept lists of <br>
head pointers, rather than just a single list head pointer.<br>
<br>
<br>
M    src/core_hyd_atmos/mpas_atmh_time_integration.F<br>
M    src/core_atmos_physics/mpas_atmphys_todynamics.F<br>
M    src/core_nhyd_atmos/mpas_atm_time_integration.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/omp_blocks/ddt_reorg/src/core_atmos_physics/mpas_atmphys_todynamics.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/core_atmos_physics/mpas_atmphys_todynamics.F        2012-01-11 05:40:48 UTC (rev 1353)
+++ branches/omp_blocks/ddt_reorg/src/core_atmos_physics/mpas_atmphys_todynamics.F        2012-01-11 21:03:47 UTC (rev 1354)
@@ -20,7 +20,7 @@
 !----------------
  type(dm_info), intent(in):: dminfo
  type(mesh_type),intent(in):: mesh
- type(exchange_list),pointer:: cellsToSend,cellsToRecv
+ type(exchange_list), dimension(*), intent(inout):: cellsToSend,cellsToRecv
 
  type(state_type),intent(in):: state
  type(diag_type),intent(in):: diag
@@ -191,7 +191,7 @@
 !----------------
  type(dm_info),intent(in):: dminfo
  type(mesh_type),intent(in):: mesh
- type(exchange_list),intent(in),pointer:: cellsToSend,cellsToRecv
+ type(exchange_list),dimension(*),intent(inout):: cellsToSend,cellsToRecv
 
  real(kind=RKIND),intent(in),dimension(:,:):: Ux_tend,Uy_tend 
 

Modified: branches/omp_blocks/ddt_reorg/src/core_hyd_atmos/mpas_atmh_time_integration.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/core_hyd_atmos/mpas_atmh_time_integration.F        2012-01-11 05:40:48 UTC (rev 1353)
+++ branches/omp_blocks/ddt_reorg/src/core_hyd_atmos/mpas_atmh_time_integration.F        2012-01-11 21:03:47 UTC (rev 1354)
@@ -1479,7 +1479,7 @@
       integer, intent(in) :: rk_step, rk_order
       real (kind=RKIND), intent(in) :: dt
       type (dm_info), intent(in) :: dminfo
-      type (exchange_list), pointer :: cellsToSend, cellsToRecv
+      type (exchange_list), dimension(*), intent(inout) :: cellsToSend, cellsToRecv
 
       integer :: i, iCell, iEdge, k, iScalar, cell_upwind, cell1, cell2, num_scalars
       real (kind=RKIND) :: flux, scalar_edge, d2fdx2_cell1, d2fdx2_cell2

Modified: branches/omp_blocks/ddt_reorg/src/core_nhyd_atmos/mpas_atm_time_integration.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/core_nhyd_atmos/mpas_atm_time_integration.F        2012-01-11 05:40:48 UTC (rev 1353)
+++ branches/omp_blocks/ddt_reorg/src/core_nhyd_atmos/mpas_atm_time_integration.F        2012-01-11 21:03:47 UTC (rev 1354)
@@ -1427,7 +1427,7 @@
 
       integer, intent(in) :: rk_step, rk_order
       type (dm_info), intent(in) :: dminfo
-      type (exchange_list), pointer :: cellsToSend, cellsToRecv
+      type (exchange_list), dimension(*), intent(inout) :: cellsToSend, cellsToRecv
 
 
       integer :: i, iCell, iEdge, k, iScalar, cell1, cell2

Modified: branches/omp_blocks/ddt_reorg/src/framework/mpas_dmpar.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/framework/mpas_dmpar.F        2012-01-11 05:40:48 UTC (rev 1353)
+++ branches/omp_blocks/ddt_reorg/src/framework/mpas_dmpar.F        2012-01-11 21:03:47 UTC (rev 1354)
@@ -1479,7 +1479,7 @@
       type (dm_info), intent(in) :: dminfo
       integer, intent(in) :: dim1
       integer, dimension(*), intent(inout) :: array
-      type (exchange_list), pointer :: sendList, recvList
+      type (exchange_list), dimension(*), intent(inout), target :: sendList, recvList
 
       type (exchange_list), pointer :: sendListPtr, recvListPtr
       integer :: lastPackedIdx, lastUnpackedIdx, nPacked, nUnpacked
@@ -1487,7 +1487,7 @@
 
 #ifdef _MPI
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             allocate(recvListPtr % ibuffer(recvListPtr % nlist))
@@ -1497,7 +1497,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
       
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             allocate(sendListPtr % ibuffer(sendListPtr % nlist))
@@ -1508,7 +1508,7 @@
          sendListPtr =&gt; sendListPtr % next
       end do
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(recvListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1518,7 +1518,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
       
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(sendListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1539,7 +1539,7 @@
       type (dm_info), intent(in) :: dminfo
       integer, intent(in) :: dim1, dim2
       integer, dimension(dim1,*), intent(inout) :: array
-      type (exchange_list), pointer :: sendList, recvList
+      type (exchange_list), dimension(*), intent(inout), target :: sendList, recvList
 
       type (exchange_list), pointer :: sendListPtr, recvListPtr
       integer :: lastPackedIdx, lastUnpackedIdx, nPacked, nUnpacked
@@ -1548,7 +1548,7 @@
 
 #ifdef _MPI
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             d2 = dim1 * recvListPtr % nlist
@@ -1559,7 +1559,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
       
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             d2 = dim1 * sendListPtr % nlist
@@ -1571,7 +1571,7 @@
          sendListPtr =&gt; sendListPtr % next
       end do
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(recvListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1582,7 +1582,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
       
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(sendListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1603,7 +1603,7 @@
       type (dm_info), intent(in) :: dminfo
       integer, intent(in) :: dim1, dim2, dim3
       integer, dimension(dim1,dim2,*), intent(inout) :: array
-      type (exchange_list), pointer :: sendList, recvList
+      type (exchange_list), dimension(*), intent(inout), target :: sendList, recvList
 
       type (exchange_list), pointer :: sendListPtr, recvListPtr
       integer :: lastPackedIdx, lastUnpackedIdx, nPacked, nUnpacked
@@ -1612,7 +1612,7 @@
 
 #ifdef _MPI
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             d3 = dim1 * dim2 * recvListPtr % nlist
@@ -1623,7 +1623,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
 
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             d3 = dim1 * dim2 * sendListPtr % nlist
@@ -1636,7 +1636,7 @@
          sendListPtr =&gt; sendListPtr % next
       end do
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(recvListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1648,7 +1648,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
 
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(sendListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1759,7 +1759,7 @@
       type (dm_info), intent(in) :: dminfo
       integer, intent(in) :: dim1
       real (kind=RKIND), dimension(*), intent(inout) :: array
-      type (exchange_list), pointer :: sendList, recvList
+      type (exchange_list), dimension(*), intent(inout), target :: sendList, recvList
 
       type (exchange_list), pointer :: sendListPtr, recvListPtr
       integer :: lastPackedIdx, lastUnpackedIdx, nPacked, nUnpacked
@@ -1767,7 +1767,7 @@
 
 #ifdef _MPI
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             allocate(recvListPtr % rbuffer(recvListPtr % nlist))
@@ -1777,7 +1777,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
       
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             allocate(sendListPtr % rbuffer(sendListPtr % nlist))
@@ -1788,7 +1788,7 @@
          sendListPtr =&gt; sendListPtr % next
       end do
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(recvListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1798,7 +1798,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
       
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(sendListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1819,7 +1819,7 @@
       type (dm_info), intent(in) :: dminfo
       integer, intent(in) :: dim1, dim2
       real (kind=RKIND), dimension(dim1,*), intent(inout) :: array
-      type (exchange_list), pointer :: sendList, recvList
+      type (exchange_list), dimension(*), intent(inout), target :: sendList, recvList
 
       type (exchange_list), pointer :: sendListPtr, recvListPtr
       integer :: lastPackedIdx, lastUnpackedIdx, nPacked, nUnpacked
@@ -1828,7 +1828,7 @@
 
 #ifdef _MPI
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             d2 = dim1 * recvListPtr % nlist
@@ -1839,7 +1839,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
       
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             d2 = dim1 * sendListPtr % nlist
@@ -1851,7 +1851,7 @@
          sendListPtr =&gt; sendListPtr % next
       end do
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(recvListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1862,7 +1862,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
       
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(sendListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1883,7 +1883,7 @@
       type (dm_info), intent(in) :: dminfo
       integer, intent(in) :: dim1, dim2, dim3
       real (kind=RKIND), dimension(dim1,dim2,*), intent(inout) :: array
-      type (exchange_list), pointer :: sendList, recvList
+      type (exchange_list), dimension(*), intent(inout), target :: sendList, recvList
 
       type (exchange_list), pointer :: sendListPtr, recvListPtr
       integer :: lastPackedIdx, lastUnpackedIdx, nPacked, nUnpacked
@@ -1892,7 +1892,7 @@
 
 #ifdef _MPI
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             d3 = dim1 * dim2 * recvListPtr % nlist
@@ -1903,7 +1903,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
 
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             d3 = dim1 * dim2 * sendListPtr % nlist
@@ -1916,7 +1916,7 @@
          sendListPtr =&gt; sendListPtr % next
       end do
 
-      recvListPtr =&gt; recvList
+      recvListPtr =&gt; recvList(1) % next
       do while (associated(recvListPtr))
          if (recvListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(recvListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)
@@ -1928,7 +1928,7 @@
          recvListPtr =&gt; recvListPtr % next
       end do
 
-      sendListPtr =&gt; sendList
+      sendListPtr =&gt; sendList(1) % next
       do while (associated(sendListPtr))
          if (sendListPtr % procID /= dminfo % my_proc_id) then
             call MPI_Wait(sendListPtr % reqID, MPI_STATUS_IGNORE, mpi_ierr)

Modified: branches/omp_blocks/ddt_reorg/src/framework/mpas_grid_types.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/framework/mpas_grid_types.F        2012-01-11 05:40:48 UTC (rev 1353)
+++ branches/omp_blocks/ddt_reorg/src/framework/mpas_grid_types.F        2012-01-11 21:03:47 UTC (rev 1354)
@@ -27,9 +27,9 @@
       integer, dimension(3) :: dims
       logical :: timeDimension
       type (field3DReal), pointer :: prev, next
-      type (exchange_list), pointer :: sendList
-      type (exchange_list), pointer :: recvList
-      type (exchange_list), pointer :: copyList
+      type (exchange_list), dimension(:), pointer :: sendList
+      type (exchange_list), dimension(:), pointer :: recvList
+      type (exchange_list), dimension(:), pointer :: copyList
    end type field3DReal
 
 
@@ -41,9 +41,9 @@
       integer, dimension(2) :: dims
       logical :: timeDimension
       type (field2DReal), pointer :: prev, next
-      type (exchange_list), pointer :: sendList
-      type (exchange_list), pointer :: recvList
-      type (exchange_list), pointer :: copyList
+      type (exchange_list), dimension(:), pointer :: sendList
+      type (exchange_list), dimension(:), pointer :: recvList
+      type (exchange_list), dimension(:), pointer :: copyList
    end type field2DReal
 
 
@@ -55,9 +55,9 @@
       integer, dimension(1) :: dims
       logical :: timeDimension
       type (field1DReal), pointer :: prev, next
-      type (exchange_list), pointer :: sendList
-      type (exchange_list), pointer :: recvList
-      type (exchange_list), pointer :: copyList
+      type (exchange_list), dimension(:), pointer :: sendList
+      type (exchange_list), dimension(:), pointer :: recvList
+      type (exchange_list), dimension(:), pointer :: copyList
    end type field1DReal
 
 
@@ -68,9 +68,9 @@
       type (io_info), pointer :: ioinfo
       logical :: timeDimension
       type (field0DReal), pointer :: prev, next
-      type (exchange_list), pointer :: sendList
-      type (exchange_list), pointer :: recvList
-      type (exchange_list), pointer :: copyList
+      type (exchange_list), dimension(:), pointer :: sendList
+      type (exchange_list), dimension(:), pointer :: recvList
+      type (exchange_list), dimension(:), pointer :: copyList
    end type field0DReal
 
 
@@ -82,9 +82,9 @@
       integer, dimension(2) :: dims
       logical :: timeDimension
       type (field2DInteger), pointer :: prev, next
-      type (exchange_list), pointer :: sendList
-      type (exchange_list), pointer :: recvList
-      type (exchange_list), pointer :: copyList
+      type (exchange_list), dimension(:), pointer :: sendList
+      type (exchange_list), dimension(:), pointer :: recvList
+      type (exchange_list), dimension(:), pointer :: copyList
    end type field2DInteger
 
 
@@ -96,9 +96,9 @@
       integer, dimension(1) :: dims
       logical :: timeDimension
       type (field1DInteger), pointer :: prev, next
-      type (exchange_list), pointer :: sendList
-      type (exchange_list), pointer :: recvList
-      type (exchange_list), pointer :: copyList
+      type (exchange_list), dimension(:), pointer :: sendList
+      type (exchange_list), dimension(:), pointer :: recvList
+      type (exchange_list), dimension(:), pointer :: copyList
    end type field1DInteger
 
 
@@ -110,9 +110,9 @@
       integer, dimension(1) :: dims
       logical :: timeDimension
       type (field1DChar), pointer :: prev, next
-      type (exchange_list), pointer :: sendList
-      type (exchange_list), pointer :: recvList
-      type (exchange_list), pointer :: copyList
+      type (exchange_list), dimension(:), pointer :: sendList
+      type (exchange_list), dimension(:), pointer :: recvList
+      type (exchange_list), dimension(:), pointer :: copyList
    end type field1DChar
 
 
@@ -123,9 +123,9 @@
       type (io_info), pointer :: ioinfo
       logical :: timeDimension
       type (field0DChar), pointer :: prev, next
-      type (exchange_list), pointer :: sendList
-      type (exchange_list), pointer :: recvList
-      type (exchange_list), pointer :: copyList
+      type (exchange_list), dimension(:), pointer :: sendList
+      type (exchange_list), dimension(:), pointer :: recvList
+      type (exchange_list), dimension(:), pointer :: copyList
    end type field0DChar
 
 
@@ -147,17 +147,17 @@
 
    ! Type for storing (possibly architecture specific) information concerning to parallelism
    type parallel_info
-      type (exchange_list), pointer :: cellsToSend            ! List of types describing which cells to send to other blocks
-      type (exchange_list), pointer :: cellsToRecv            ! List of types describing which cells to receive from other blocks
-      type (exchange_list), pointer :: cellsToCopy            ! List of types describing which cells to copy from other blocks
+      type (exchange_list), dimension(:), pointer :: cellsToSend            ! List of types describing which cells to send to other blocks
+      type (exchange_list), dimension(:), pointer :: cellsToRecv            ! List of types describing which cells to receive from other blocks
+      type (exchange_list), dimension(:), pointer :: cellsToCopy            ! List of types describing which cells to copy from other blocks
 
-      type (exchange_list), pointer :: edgesToSend            ! List of types describing which edges to send to other blocks
-      type (exchange_list), pointer :: edgesToRecv            ! List of types describing which edges to receive from other blocks
-      type (exchange_list), pointer :: edgesToCopy            ! List of types describing which edges to copy from other blocks
+      type (exchange_list), dimension(:), pointer :: edgesToSend            ! List of types describing which edges to send to other blocks
+      type (exchange_list), dimension(:), pointer :: edgesToRecv            ! List of types describing which edges to receive from other blocks
+      type (exchange_list), dimension(:), pointer :: edgesToCopy            ! List of types describing which edges to copy from other blocks
 
-      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
-      type (exchange_list), pointer :: verticesToCopy         ! List of types describing which vertices to copy from other blocks
+      type (exchange_list), dimension(:), pointer :: verticesToSend         ! List of types describing which vertices to send to other blocks
+      type (exchange_list), dimension(:), pointer :: verticesToRecv         ! List of types describing which vertices to receive from other blocks
+      type (exchange_list), dimension(:), pointer :: verticesToCopy         ! List of types describing which vertices to copy from other blocks
    end type parallel_info
 
 
@@ -213,6 +213,9 @@
       integer, intent(in) :: blockID
 #include &quot;dim_dummy_decls.inc&quot;
 
+
+      integer, parameter :: nHaloLayers = 1    ! Currently, the only halo layer actually encompasses both halo layers
+
       integer :: i
 
       b % blockID = blockID
@@ -222,6 +225,18 @@
 
       allocate(b % parinfo)
 
+      allocate(b % parinfo % cellsToSend(nHaloLayers))
+      allocate(b % parinfo % cellsToRecv(nHaloLayers))
+      allocate(b % parinfo % cellsToCopy(nHaloLayers))
+
+      allocate(b % parinfo % edgesToSend(nHaloLayers))
+      allocate(b % parinfo % edgesToRecv(nHaloLayers))
+      allocate(b % parinfo % edgesToCopy(nHaloLayers))
+
+      allocate(b % parinfo % verticesToSend(nHaloLayers))
+      allocate(b % parinfo % verticesToRecv(nHaloLayers))
+      allocate(b % parinfo % verticesToCopy(nHaloLayers))
+
       b % domain =&gt; dom
 
 #include &quot;block_allocs.inc&quot;
@@ -259,6 +274,21 @@
 
       integer :: i
 
+      ! BUG: It seems like we should be deallocating the exchange lists before we 
+      !      deallocate the array of head pointers and the parinfo type...
+
+      deallocate(b % parinfo % cellsToSend)
+      deallocate(b % parinfo % cellsToRecv)
+      deallocate(b % parinfo % cellsToCopy)
+
+      deallocate(b % parinfo % edgesToSend)
+      deallocate(b % parinfo % edgesToRecv)
+      deallocate(b % parinfo % edgesToCopy)
+
+      deallocate(b % parinfo % verticesToSend)
+      deallocate(b % parinfo % verticesToRecv)
+      deallocate(b % parinfo % verticesToCopy)
+
       deallocate(b % parinfo)
 
 #include &quot;block_deallocs.inc&quot;

Modified: branches/omp_blocks/ddt_reorg/src/framework/mpas_io_input.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/framework/mpas_io_input.F        2012-01-11 05:40:48 UTC (rev 1353)
+++ branches/omp_blocks/ddt_reorg/src/framework/mpas_io_input.F        2012-01-11 21:03:47 UTC (rev 1354)
@@ -947,21 +947,23 @@
 
       !
       ! Work out halo exchange lists for cells, edges, and vertices
+      ! NB: The next pointer in each element of, e.g., cellsToSend, acts as the head pointer of
+      !     the list, since Fortran does not allow arrays of pointers
       !
       call mpas_dmpar_get_owner_list(domain % dminfo, &amp;
                                 block_graph_2Halo % nVertices, block_graph_2Halo % nVerticesTotal, &amp;
                                 block_graph_2Halo % vertexID(1:block_graph_2Halo % nVertices), block_graph_2Halo % vertexID, &amp;
-                                domain % blocklist % parinfo % cellsToSend, domain % blocklist % parinfo % cellsToRecv)
+                                domain % blocklist % parinfo % cellsToSend(1) % next, domain % blocklist % parinfo % cellsToRecv(1) % next)
 
       call mpas_dmpar_get_owner_list(domain % dminfo, &amp;
                                 ghostEdgeStart-1, nlocal_edges, &amp;
                                 local_edge_list(1:ghostEdgeStart-1), local_edge_list, &amp;
-                                domain % blocklist % parinfo % edgesToSend, domain % blocklist % parinfo % edgesToRecv)
+                                domain % blocklist % parinfo % edgesToSend(1) % next, domain % blocklist % parinfo % edgesToRecv(1) % next)
 
       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 % parinfo % verticesToSend(1) % next, domain % blocklist % parinfo % verticesToRecv(1) % next)
 
       domain % blocklist % mesh % nCellsSolve = block_graph_2Halo % nVertices
       domain % blocklist % mesh % nEdgesSolve = ghostEdgeStart-1

</font>
</pre>