<p><b>dwj07@fsu.edu</b> 2012-06-01 13:50:54 -0600 (Fri, 01 Jun 2012)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Fixing some issues in block_decomp module, to prepare for processors with 0 blocks.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/omp_blocks/multiple_blocks/src/framework/mpas_block_decomp.F
===================================================================
--- branches/omp_blocks/multiple_blocks/src/framework/mpas_block_decomp.F        2012-06-01 19:09:43 UTC (rev 1953)
+++ branches/omp_blocks/multiple_blocks/src/framework/mpas_block_decomp.F        2012-06-01 19:50:54 UTC (rev 1954)
@@ -141,6 +141,9 @@
            call mpas_dmpar_scatter_ints(dminfo, dminfo % nprocs, local_nvertices(dminfo % my_proc_id + 1), &amp;
                                    global_start, local_nvertices, global_block_list, local_block_list)
         end if
+
+        write(6,*) 'NUM BLOCKS',blocks_per_proc
+        write(6,*) 'NUM CELLS', local_nvertices(dminfo % my_proc_id + 1)
   
         allocate(sorted_local_cell_list(2, local_nvertices(dminfo % my_proc_id + 1)))
         allocate(block_id(blocks_per_proc))
@@ -399,27 +402,35 @@
      integer :: blocks_per_proc_min, even_blocks, remaining_blocks
      integer :: i, owning_proc, local_block_id
 
-!    if(.not. explicitDecomp) then
-       blocks_per_proc_min = total_blocks / dminfo % nProcs
-       remaining_blocks = total_blocks - (blocks_per_proc_min * dminfo % nProcs)
-       even_blocks = total_blocks - remaining_blocks
+     if(.not. explicitDecomp) then
+       if(total_blocks &gt; dminfo % nProcs) then
+         blocks_per_proc_min = total_blocks / dminfo % nProcs
+         remaining_blocks = total_blocks - (blocks_per_proc_min * dminfo % nProcs)
+         even_blocks = total_blocks - remaining_blocks
+  
+         blocks_per_proc = blocks_per_proc_min
+  
+         if(proc_number &lt; remaining_blocks) then
+           blocks_per_proc = blocks_per_proc + 1
+         end if
+       else
+         if(dminfo % my_proc_id &lt; total_blocks) then
+           blocks_per_proc = 1
+         else
+           blocks_per_proc = 0
+         end if
+       end if
+     else
+       blocks_per_proc = 0
+       do i = 1, total_blocks
+         call mpas_get_owning_proc(dminfo, i, owning_proc)
+         if(owning_proc == proc_number) then
+           call mpas_get_local_block_id(dminfo, i, local_block_id)
+           blocks_per_proc = max(blocks_per_proc, local_block_id)
+         end if
+       end do
+     end if
 
-       blocks_per_proc = blocks_per_proc_min
-
-       if(proc_number .le. remaining_blocks) then
-         block_per_proc = blocks_per_proc + 1
-       endif
-!    else
-!      blocks_per_proc = 0
-!      do i = 1, total_blocks
-!        call mpas_get_owning_proc(dminfo, i, owning_proc)
-!        if(owning_proc == proc_number) then
-!          call mpas_get_local_block_id(dminfo, i, local_block_id)
-!          blocks_per_proc = integer(max(real(block_per_proc), real(local_block_id)))
-!        end if
-!      end do
-!    end if
-
    end subroutine mpas_get_blocks_per_proc!}}}
 
    subroutine mpas_get_local_block_id(dminfo, global_block_number, local_block_number)!{{{
@@ -430,14 +441,18 @@
      integer :: blocks_per_proc_min, even_blocks, remaining_blocks
 
      if(.not.explicitDecomp) then
-       blocks_per_proc_min = total_blocks / dminfo % nProcs
-       remaining_blocks = total_blocks - (blocks_per_proc_min * dminfo % nProcs)
-       even_blocks = total_blocks - remaining_blocks
-
-       if(global_block_number &gt; even_blocks) then
-           local_block_number = blocks_per_proc_min
+       if(total_blocks &gt; dminfo % nProcs) then
+         blocks_per_proc_min = total_blocks / dminfo % nProcs
+         remaining_blocks = total_blocks - (blocks_per_proc_min * dminfo % nProcs)
+         even_blocks = total_blocks - remaining_blocks
+  
+         if(global_block_number &gt; even_blocks) then
+             local_block_number = blocks_per_proc_min
+         else
+             local_block_number = mod(global_block_number, blocks_per_proc_min)
+         end if
        else
-           local_block_number = mod(global_block_number, blocks_per_proc_min)
+         local_block_number = 0
        end if
      else
        local_block_number = block_local_id_list(global_block_number+1)
@@ -452,14 +467,18 @@
      integer :: blocks_per_proc_min, even_blocks, remaining_blocks
 
      if(.not.explicitDecomp) then
-       blocks_per_proc_min = total_blocks / dminfo % nProcs
-       remaining_blocks = total_blocks - (blocks_per_proc_min * dminfo % nProcs)
-       even_blocks = total_blocks - remaining_blocks
+       if(total_blocks &gt;= dminfo % nProcs) then
+         blocks_per_proc_min = total_blocks / dminfo % nProcs
+         remaining_blocks = total_blocks - (blocks_per_proc_min * dminfo % nProcs)
+         even_blocks = total_blocks - remaining_blocks
   
-       if(global_block_number &gt; even_blocks) then
-           owning_proc = global_block_number - even_blocks
+         if(global_block_number &gt; even_blocks) then
+             owning_proc = global_block_number - even_blocks
+         else
+             owning_proc = global_block_number / blocks_per_proc_min
+         end if
        else
-           owning_proc = global_block_number / blocks_per_proc_min
+         owning_proc = global_block_number
        end if
      else
        owning_proc = block_proc_list(global_block_number+1)

</font>
</pre>