<p><b>duda</b> 2011-05-11 13:25:16 -0600 (Wed, 11 May 2011)</p><p>BRANCH COMMIT<br>
<br>
Changes to allow registry-defined fields to have a non-decomposed<br>
dimension as their outer-most dimension, i.e., to have a dimension<br>
other than nCells, nEdges, nVertices, or nVertLevels outer-most.<br>
<br>
For example, it is now possible to define the following in the registry:<br>
<br>
namelist integer   physics     noznlev                  59<br>
dim nOznLevels namelist:noznlev<br>
var persistent real  pin  ( nOznLevels ) 0 ro  pin     mesh  - -<br>
<br>
<br>
*** These changes should probably be merged back into the trunk.<br>
<br>
<br>
M    src/registry/gen_inc.c<br>
M    src/framework/module_io_input.F<br>
M    src/framework/module_io_output.F<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_physics/src/framework/module_io_input.F
===================================================================
--- branches/atmos_physics/src/framework/module_io_input.F        2011-05-11 19:01:54 UTC (rev 827)
+++ branches/atmos_physics/src/framework/module_io_input.F        2011-05-11 19:25:16 UTC (rev 828)
@@ -1047,8 +1047,10 @@
       real (kind=RKIND), dimension(:,:), pointer :: super_real2d
       real (kind=RKIND), dimension(:,:,:), pointer :: super_real3d
 
-      integer :: k
+      integer :: i, k
 
+#include &quot;nondecomp_dims.inc&quot;
+
       allocate(int1d % ioinfo)
       allocate(int2d % ioinfo)
       allocate(real0d % ioinfo)
@@ -1059,6 +1061,8 @@
 
 #include &quot;io_input_fields.inc&quot;
 
+#include &quot;nondecomp_dims_dealloc.inc&quot;
+
    end subroutine read_and_distribute_fields
 
 

Modified: branches/atmos_physics/src/framework/module_io_output.F
===================================================================
--- branches/atmos_physics/src/framework/module_io_output.F        2011-05-11 19:01:54 UTC (rev 827)
+++ branches/atmos_physics/src/framework/module_io_output.F        2011-05-11 19:25:16 UTC (rev 828)
@@ -137,6 +137,8 @@
       real (kind=RKIND), dimension(:,:), pointer :: super_real2d
       real (kind=RKIND), dimension(:,:,:), pointer :: super_real3d
 
+#include &quot;nondecomp_outputs.inc&quot;
+
       output_obj % time = itime
 
       allocate(int1d % ioinfo)
@@ -311,6 +313,8 @@
       deallocate(cellsOnVertex)
       deallocate(edgesOnVertex)
 
+#include &quot;nondecomp_outputs_dealloc.inc&quot;
+
    end subroutine output_state_for_domain
 
 

Modified: branches/atmos_physics/src/registry/gen_inc.c
===================================================================
--- branches/atmos_physics/src/registry/gen_inc.c        2011-05-11 19:01:54 UTC (rev 827)
+++ branches/atmos_physics/src/registry/gen_inc.c        2011-05-11 19:25:16 UTC (rev 828)
@@ -803,6 +803,396 @@
    }
 
    fclose(fd);
+
+   /*
+    *  Definitions of read bounds and exchange lists for non-decomposed fields
+    */
+   fd = fopen(&quot;nondecomp_dims.inc&quot;, &quot;w&quot;);
+
+   dim_ptr = dims;
+   while (dim_ptr) {
+
+      if (strncmp(dim_ptr-&gt;name_in_file,&quot;nCells&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nEdges&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertices&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertLevels&quot;,11) != 0
+         ) {
+
+         if (is_derived_dim(dim_ptr-&gt;name_in_code)) {
+            fortprintf(fd, &quot;      integer :: read%sStart</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      integer :: read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: send%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: recv%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+         }
+         else if (dim_ptr-&gt;constant_value &gt; 0) {
+            fortprintf(fd, &quot;      integer :: read%sStart</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      integer :: read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: send%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: recv%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+         }
+         else if (dim_ptr-&gt;namelist_defined) {
+            fortprintf(fd, &quot;      integer :: read%sStart</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      integer :: read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: send%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: recv%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+         }
+         else {
+            fortprintf(fd, &quot;      integer :: read%sStart</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      integer :: read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: send%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: recv%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+         }
+      }
+
+      dim_ptr = dim_ptr-&gt;next;
+   }
+
+   fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+
+   dim_ptr = dims;
+   while (dim_ptr) {
+
+      if (strncmp(dim_ptr-&gt;name_in_file,&quot;nCells&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nEdges&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertices&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertLevels&quot;,11) != 0
+         ) {
+
+         if (is_derived_dim(dim_ptr-&gt;name_in_code)) {
+            fortprintf(fd, &quot;      read%sStart = 1</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      read%sCount = block %% mesh %% %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      allocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      allocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      nullify(send%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      nullify(recv%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      recv%sList %% procID = dminfo %% my_proc_id</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      send%sList %% procID = dminfo %% my_proc_id</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      recv%sList %% nlist = read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      send%sList %% nlist = read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      allocate(recv%sList %% list(read%sCount))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      allocate(send%sList %% list(read%sCount))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      do i=1,read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         recv%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         send%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      end do</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+         }
+         else if (dim_ptr-&gt;constant_value &gt; 0) {
+            fortprintf(fd, &quot;      read%sStart = 1</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      read%sCount = %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      allocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      allocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      nullify(send%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      nullify(recv%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      recv%sList %% procID = dminfo %% my_proc_id</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      send%sList %% procID = dminfo %% my_proc_id</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      recv%sList %% nlist = read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      send%sList %% nlist = read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      allocate(recv%sList %% list(read%sCount))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      allocate(send%sList %% list(read%sCount))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      do i=1,read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         recv%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         send%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      end do</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+         }
+         else if (dim_ptr-&gt;namelist_defined) {
+            fortprintf(fd, &quot;      read%sStart = 1</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      read%sCount = block %% mesh %% %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      allocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      allocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      nullify(send%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      nullify(recv%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      recv%sList %% procID = dminfo %% my_proc_id</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      send%sList %% procID = dminfo %% my_proc_id</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      recv%sList %% nlist = read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      send%sList %% nlist = read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      allocate(recv%sList %% list(read%sCount))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      allocate(send%sList %% list(read%sCount))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      do i=1,read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         recv%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         send%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      end do</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+         }
+         else {
+            fortprintf(fd, &quot;      read%sStart = 1</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      read%sCount = block %% mesh %% %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      allocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      allocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      nullify(send%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      nullify(recv%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      recv%sList %% procID = dminfo %% my_proc_id</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      send%sList %% procID = dminfo %% my_proc_id</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      recv%sList %% nlist = read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      send%sList %% nlist = read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      allocate(recv%sList %% list(read%sCount))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      allocate(send%sList %% list(read%sCount))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      do i=1,read%sCount</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         recv%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         send%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      end do</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+         }
+
+      }
+
+      dim_ptr = dim_ptr-&gt;next;
+   }
+
+   fclose(fd);
+
+
+   /*
+    *  Deallocation of exchange lists for non-decomposed fields
+    */
+   fd = fopen(&quot;nondecomp_dims_dealloc.inc&quot;, &quot;w&quot;);
+
+   dim_ptr = dims;
+   while (dim_ptr) {
+
+      if (strncmp(dim_ptr-&gt;name_in_file,&quot;nCells&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nEdges&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertices&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertLevels&quot;,11) != 0
+         ) {
+
+         if (is_derived_dim(dim_ptr-&gt;name_in_code)) {
+            fortprintf(fd, &quot;      deallocate(recv%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      deallocate(send%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      deallocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      deallocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+         }
+         else if (dim_ptr-&gt;constant_value &gt; 0) {
+            fortprintf(fd, &quot;      deallocate(recv%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      deallocate(send%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      deallocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      deallocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+         }
+         else if (dim_ptr-&gt;namelist_defined) {
+            fortprintf(fd, &quot;      deallocate(recv%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      deallocate(send%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      deallocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      deallocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+         }
+         else {
+            fortprintf(fd, &quot;      deallocate(recv%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      deallocate(send%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      deallocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      deallocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+         }
+
+      }
+
+      dim_ptr = dim_ptr-&gt;next;
+   }
+
+   fclose(fd);
+
+
+   /*
+    *  Definitions of read bounds and exchange lists for non-decomposed fields
+    */
+   fd = fopen(&quot;nondecomp_outputs.inc&quot;, &quot;w&quot;);
+
+   dim_ptr = dims;
+   while (dim_ptr) {
+
+      if (strncmp(dim_ptr-&gt;name_in_file,&quot;nCells&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nEdges&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertices&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertLevels&quot;,11) != 0
+         ) {
+
+         if (is_derived_dim(dim_ptr-&gt;name_in_code)) {
+            fortprintf(fd, &quot;      integer :: %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: send%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: recv%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+         }
+         else if (dim_ptr-&gt;constant_value &gt; 0) {
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: send%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: recv%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+         }
+         else if (dim_ptr-&gt;namelist_defined) {
+            fortprintf(fd, &quot;      integer :: %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: send%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: recv%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+         }
+         else {
+            fortprintf(fd, &quot;      integer :: %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: send%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      type (exchange_list), pointer :: recv%sList</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+         }
+
+      }
+
+      dim_ptr = dim_ptr-&gt;next;
+   }
+
+   fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+
+   dim_ptr = dims;
+   while (dim_ptr) {
+
+      if (strncmp(dim_ptr-&gt;name_in_file,&quot;nCells&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nEdges&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertices&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertLevels&quot;,11) != 0
+         ) {
+
+         if (is_derived_dim(dim_ptr-&gt;name_in_code)) {
+            fortprintf(fd, &quot;      %sGlobal = domain %% blocklist %% mesh %% %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      if (domain %% dminfo %% my_proc_id == 0) then</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         allocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         allocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         nullify(send%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         nullify(recv%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         recv%sList %% procID = 0</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         send%sList %% procID = 0</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         recv%sList %% nlist = %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         send%sList %% nlist = %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         allocate(recv%sList %% list(%sGlobal))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         allocate(send%sList %% list(%sGlobal))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         do i=1,%sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;            recv%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;            send%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         end do</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;      else</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         nullify(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         nullify(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      end if</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+         }
+         else if (dim_ptr-&gt;constant_value &gt; 0) {
+            fortprintf(fd, &quot;      if (domain %% dminfo %% my_proc_id == 0) then</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         allocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         allocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         nullify(send%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         nullify(recv%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         recv%sList %% procID = 0</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         send%sList %% procID = 0</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         recv%sList %% nlist = %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;         send%sList %% nlist = %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;         allocate(recv%sList %% list(%s))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;         allocate(send%sList %% list(%s))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;         do i=1,%s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;            recv%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;            send%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         end do</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;      else</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         nullify(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         nullify(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      end if</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+         }
+         else if (dim_ptr-&gt;namelist_defined) {
+            fortprintf(fd, &quot;      %sGlobal = domain %% blocklist %% mesh %% %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      if (domain %% dminfo %% my_proc_id == 0) then</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         allocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         allocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         nullify(send%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         nullify(recv%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         recv%sList %% procID = 0</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         send%sList %% procID = 0</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         recv%sList %% nlist = %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         send%sList %% nlist = %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         allocate(recv%sList %% list(%sGlobal))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         allocate(send%sList %% list(%sGlobal))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         do i=1,%sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;            recv%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;            send%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         end do</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;      else</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         nullify(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         nullify(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      end if</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+         }
+         else {
+            fortprintf(fd, &quot;      %sGlobal = domain %% blocklist %% mesh %% %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      if (domain %% dminfo %% my_proc_id == 0) then</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         allocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         allocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         nullify(send%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         nullify(recv%sList %% next)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         recv%sList %% procID = 0</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         send%sList %% procID = 0</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         recv%sList %% nlist = %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;         send%sList %% nlist = %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;         allocate(recv%sList %% list(%sGlobal))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;         allocate(send%sList %% list(%sGlobal))</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;         do i=1,%sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;            recv%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;            send%sList %% list(i) = i</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         end do</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;      else</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         nullify(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         nullify(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      end if</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+         }
+
+      }
+
+      dim_ptr = dim_ptr-&gt;next;
+   }
+
+   fclose(fd);
+
+
+   /*
+    *  Deallocation of exchange lists for non-decomposed fields
+    */
+   fd = fopen(&quot;nondecomp_outputs_dealloc.inc&quot;, &quot;w&quot;);
+
+   dim_ptr = dims;
+   while (dim_ptr) {
+
+      if (strncmp(dim_ptr-&gt;name_in_file,&quot;nCells&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nEdges&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertices&quot;,1024) != 0 &amp;&amp;
+          strncmp(dim_ptr-&gt;name_in_file,&quot;nVertLevels&quot;,11) != 0
+         ) {
+
+         if (is_derived_dim(dim_ptr-&gt;name_in_code)) {
+            fortprintf(fd, &quot;      if (domain %% dminfo %% my_proc_id == 0) then</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         deallocate(recv%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         deallocate(send%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         deallocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         deallocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      end if</font>
<font color="blue">&quot;);
+         }
+         else if (dim_ptr-&gt;constant_value &gt; 0) {
+            fortprintf(fd, &quot;      if (domain %% dminfo %% my_proc_id == 0) then</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         deallocate(recv%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         deallocate(send%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         deallocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;         deallocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+            fortprintf(fd, &quot;      end if</font>
<font color="blue">&quot;);
+         }
+         else if (dim_ptr-&gt;namelist_defined) {
+            fortprintf(fd, &quot;      if (domain %% dminfo %% my_proc_id == 0) then</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         deallocate(recv%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         deallocate(send%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         deallocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;         deallocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file+1);
+            fortprintf(fd, &quot;      end if</font>
<font color="blue">&quot;);
+         }
+         else {
+            fortprintf(fd, &quot;      if (domain %% dminfo %% my_proc_id == 0) then</font>
<font color="blue">&quot;);
+            fortprintf(fd, &quot;         deallocate(recv%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         deallocate(send%sList %% list)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         deallocate(send%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;         deallocate(recv%sList)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code+1);
+            fortprintf(fd, &quot;      end if</font>
<font color="gray">&quot;);
+         }
+
+      }
+
+      dim_ptr = dim_ptr-&gt;next;
+   }
+
+   fclose(fd);
    
 
    /*
@@ -845,12 +1235,13 @@
                }
                else {
                   if (is_derived_dim(dimlist_ptr-&gt;dim-&gt;name_in_code)) {
-                     split_derived_dim_string(dimlist_ptr-&gt;dim-&gt;name_in_code, &amp;cp1, &amp;cp2);
-                     fortprintf(fd, &quot;      %s%id %% ioinfo %% start(%i) = read%sStart</font>
<font color="red">&quot;, vtype, var_ptr-&gt;ndims, i, cp1);
-                     fortprintf(fd, &quot;      %s%id %% ioinfo %% count(%i) = read%sCount%s</font>
<font color="red">&quot;, vtype, var_ptr-&gt;ndims, i, cp1, cp2);
-                     free(cp1);
-                     free(cp2);
+                     fortprintf(fd, &quot;      %s%id %% ioinfo %% start(%i) = read%sStart</font>
<font color="blue">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
+                     fortprintf(fd, &quot;      %s%id %% ioinfo %% count(%i) = read%sCount</font>
<font color="blue">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
                   }
+                  else if (dimlist_ptr-&gt;dim-&gt;constant_value &gt; 0) {
+                     fortprintf(fd, &quot;      %s%id %% ioinfo %% start(%i) = read%sStart</font>
<font color="blue">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_file);
+                     fortprintf(fd, &quot;      %s%id %% ioinfo %% count(%i) = read%sCount</font>
<font color="blue">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_file);
+                  }
                   else {
                      if (dimlist_ptr-&gt;dim-&gt;namelist_defined) {
                         fortprintf(fd, &quot;      %s%id %% ioinfo %% start(%i) = read%sStart</font>
<font color="gray">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
@@ -879,12 +1270,10 @@
                   fortprintf(fd, &quot;%s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
             }
             else {
-               if (is_derived_dim(dimlist_ptr-&gt;dim-&gt;name_in_code)) {
-                  split_derived_dim_string(dimlist_ptr-&gt;dim-&gt;name_in_code, &amp;cp1, &amp;cp2);
-                  fortprintf(fd, &quot;read%sCount%s&quot;, cp1, cp2);
-                  free(cp1);
-                  free(cp2);
-               }
+               if (is_derived_dim(dimlist_ptr-&gt;dim-&gt;name_in_code)) 
+                  fortprintf(fd, &quot;read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
+               else if (dimlist_ptr-&gt;dim-&gt;constant_value &gt; 0) 
+                  fortprintf(fd, &quot;read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file);
                else
                   if (dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
                   else fortprintf(fd, &quot;read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
@@ -901,12 +1290,10 @@
                      fortprintf(fd, &quot;, %s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
                }
                else {
-                  if (is_derived_dim(dimlist_ptr-&gt;dim-&gt;name_in_code)) {
-                     split_derived_dim_string(dimlist_ptr-&gt;dim-&gt;name_in_code, &amp;cp1, &amp;cp2);
-                     fortprintf(fd, &quot;, read%sCount%s&quot;, cp1, cp2);
-                     free(cp1);
-                     free(cp2);
-                  }
+                  if (is_derived_dim(dimlist_ptr-&gt;dim-&gt;name_in_code))
+                     fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
+                  else if (dimlist_ptr-&gt;dim-&gt;constant_value &gt; 0)
+                     fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file);
                   else
                      if (!dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
                      else fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
@@ -971,11 +1358,11 @@
             else {
                lastdim = dimlist_ptr;
                if (is_derived_dim(dimlist_ptr-&gt;dim-&gt;name_in_code)) {
-                  split_derived_dim_string(dimlist_ptr-&gt;dim-&gt;name_in_code, &amp;cp1, &amp;cp2);
-                  fortprintf(fd, &quot;                                read%sCount%s&quot;, cp1, cp2);
-                  free(cp1);
-                  free(cp2);
+                  fortprintf(fd, &quot;                                read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
                }
+               else if (dimlist_ptr-&gt;dim-&gt;constant_value &gt; 0) {
+                  fortprintf(fd, &quot;                                read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file);
+               }
                else
                   if (!dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;                                read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
                   else fortprintf(fd, &quot;                                read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
@@ -993,11 +1380,11 @@
                else {
                   lastdim = dimlist_ptr;
                   if (is_derived_dim(dimlist_ptr-&gt;dim-&gt;name_in_code)) {
-                     split_derived_dim_string(dimlist_ptr-&gt;dim-&gt;name_in_code, &amp;cp1, &amp;cp2);
-                     fortprintf(fd, &quot;, read%sCount%s&quot;, cp1, cp2);
-                     free(cp1);
-                     free(cp2);
+                     fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
                   }
+                  else if (dimlist_ptr-&gt;dim-&gt;constant_value &gt; 0) {
+                     fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file);
+                  }
                   else
                      if (!dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
                      else fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file+1);
@@ -1005,11 +1392,14 @@
                dimlist_ptr = dimlist_ptr-&gt;next;
                i++;
             }
-            if (!lastdim-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;, block %% mesh %% %s, &amp;</font>
<font color="red">&quot;, lastdim-&gt;dim-&gt;name_in_code);
-            else fortprintf(fd, &quot;, block %% mesh %% %s, &amp;</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_file);
+            if (lastdim-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;, block %% mesh %% %s, &amp;</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_file);
+            else if (lastdim-&gt;dim-&gt;constant_value &gt; 0) fortprintf(fd, &quot;, %s, &amp;</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_code);
+            else fortprintf(fd, &quot;, block %% mesh %% %s, &amp;</font>
<font color="black">&quot;, lastdim-&gt;dim-&gt;name_in_code);
       
             if (is_derived_dim(lastdim-&gt;dim-&gt;name_in_code)) 
                fortprintf(fd, &quot;                                send%sList, recv%sList)</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_file+1, lastdim-&gt;dim-&gt;name_in_file+1);
+            else if (lastdim-&gt;dim-&gt;constant_value &gt; 0) 
+               fortprintf(fd, &quot;                                send%sList, recv%sList)</font>
<font color="black">&quot;, lastdim-&gt;dim-&gt;name_in_file, lastdim-&gt;dim-&gt;name_in_file);
             else
                if (lastdim-&gt;dim-&gt;namelist_defined) 
                   fortprintf(fd, &quot;                                send%sList, recv%sList)</font>
<font color="gray">&quot;, lastdim-&gt;dim-&gt;name_in_file+1, lastdim-&gt;dim-&gt;name_in_file+1);
@@ -1406,6 +1796,9 @@
                         free(cp1);
                         free(cp2);
                      }
+                     else if (dimlist_ptr-&gt;dim-&gt;constant_value &gt; 0) {
+                        fortprintf(fd, &quot;      %s%id %% ioinfo %% count(%i) = %s</font>
<font color="blue">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_code);
+                     }
                      else
                         if (!dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;      %s%id %% ioinfo %% count(%i) = %sGlobal</font>
<font color="black">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_code);
                         else fortprintf(fd, &quot;      %s%id %% ioinfo %% count(%i) = %sGlobal</font>
<font color="gray">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_file);
@@ -1431,6 +1824,9 @@
                   free(cp1);
                   free(cp2);
                }
+               else if (dimlist_ptr-&gt;dim-&gt;constant_value &gt; 0) {
+                  fortprintf(fd, &quot;%s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
+               }
                else
                   if (!dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;%sGlobal&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
                   else fortprintf(fd, &quot;%sGlobal&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file);
@@ -1452,6 +1848,9 @@
                      free(cp1);
                      free(cp2);
                   }
+                  else if (dimlist_ptr-&gt;dim-&gt;constant_value &gt; 0) {
+                     fortprintf(fd, &quot;, %s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
+                  }
                   else
                      if (!dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;, %sGlobal&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
                      else fortprintf(fd, &quot;, %sGlobal&quot;, dimlist_ptr-&gt;dim-&gt;name_in_file);
@@ -1544,21 +1943,54 @@
                i++;
             }     
       
-            if (is_derived_dim(lastdim-&gt;dim-&gt;name_in_code)) {
-               split_derived_dim_string(lastdim-&gt;dim-&gt;name_in_code, &amp;cp1, &amp;cp2);
-               fortprintf(fd, &quot;, n%sGlobal%s, &amp;</font>
<font color="red">&quot;, cp1, cp2);
-               fortprintf(fd, &quot;                                output_obj %% send%sList, output_obj %% recv%sList)</font>
<font color="red">&quot;, lastdim-&gt;dim-&gt;name_in_file+1, lastdim-&gt;dim-&gt;name_in_file+1);
-               free(cp1);
-               free(cp2);
+            /* 
+             *  Need to avoid output_obj in case this is a non-decomposed dimension, in which case 
+             *   the send/recv lists are local variables 
+             */
+            if (strncmp(lastdim-&gt;dim-&gt;name_in_file,&quot;nCells&quot;,1024) != 0 &amp;&amp;
+                strncmp(lastdim-&gt;dim-&gt;name_in_file,&quot;nEdges&quot;,1024) != 0 &amp;&amp;
+                strncmp(lastdim-&gt;dim-&gt;name_in_file,&quot;nVertices&quot;,1024) != 0 &amp;&amp;
+                strncmp(lastdim-&gt;dim-&gt;name_in_file,&quot;nVertLevels&quot;,11) != 0
+               ) {
+               if (is_derived_dim(lastdim-&gt;dim-&gt;name_in_code)) {
+                  split_derived_dim_string(lastdim-&gt;dim-&gt;name_in_code, &amp;cp1, &amp;cp2);
+                  fortprintf(fd, &quot;, n%sGlobal%s, &amp;</font>
<font color="blue">&quot;, cp1, cp2);
+                  fortprintf(fd, &quot;                                send%sList, recv%sList)</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_file+1, lastdim-&gt;dim-&gt;name_in_file+1);
+                  free(cp1);
+                  free(cp2);
+               }
+               else if (lastdim-&gt;dim-&gt;constant_value &gt; 0) {
+                  fortprintf(fd, &quot;, %s, &amp;</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_code);
+                  fortprintf(fd, &quot;                                send%sList, recv%sList)</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_file, lastdim-&gt;dim-&gt;name_in_file);
+               }
+               else {
+                  if (!lastdim-&gt;dim-&gt;namelist_defined) {
+                     fortprintf(fd, &quot;, %sGlobal, &amp;</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_code);
+                     fortprintf(fd, &quot;                                send%sList, recv%sList)</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_code+1, lastdim-&gt;dim-&gt;name_in_code+1);
+                  }
+                  else {
+                     fortprintf(fd, &quot;, %sGlobal, &amp;</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_file);
+                     fortprintf(fd, &quot;                                send%sList, recv%sList)</font>
<font color="red">&quot;, lastdim-&gt;dim-&gt;name_in_file+1, lastdim-&gt;dim-&gt;name_in_file+1);
+                  }
+               }
             }
             else {
-               if (!lastdim-&gt;dim-&gt;namelist_defined) {
-                  fortprintf(fd, &quot;, %sGlobal, &amp;</font>
<font color="red">&quot;, lastdim-&gt;dim-&gt;name_in_code);
-                  fortprintf(fd, &quot;                                output_obj %% send%sList, output_obj %% recv%sList)</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_code+1, lastdim-&gt;dim-&gt;name_in_code+1);
+               if (is_derived_dim(lastdim-&gt;dim-&gt;name_in_code)) {
+                  split_derived_dim_string(lastdim-&gt;dim-&gt;name_in_code, &amp;cp1, &amp;cp2);
+                  fortprintf(fd, &quot;, n%sGlobal%s, &amp;</font>
<font color="blue">&quot;, cp1, cp2);
+                  fortprintf(fd, &quot;                                output_obj %% send%sList, output_obj %% recv%sList)</font>
<font color="red">&quot;, lastdim-&gt;dim-&gt;name_in_file+1, lastdim-&gt;dim-&gt;name_in_file+1);
+                  free(cp1);
+                  free(cp2);
                }
                else {
-                  fortprintf(fd, &quot;, %sGlobal, &amp;</font>
<font color="red">&quot;, lastdim-&gt;dim-&gt;name_in_file);
-                  fortprintf(fd, &quot;                                output_obj %% send%sList, output_obj %% recv%sList)</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_file+1, lastdim-&gt;dim-&gt;name_in_file+1);
+                  if (!lastdim-&gt;dim-&gt;namelist_defined) {
+                     fortprintf(fd, &quot;, %sGlobal, &amp;</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_code);
+                     fortprintf(fd, &quot;                                output_obj %% send%sList, output_obj %% recv%sList)</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_code+1, lastdim-&gt;dim-&gt;name_in_code+1);
+                  }
+                  else {
+                     fortprintf(fd, &quot;, %sGlobal, &amp;</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_file);
+                     fortprintf(fd, &quot;                                output_obj %% send%sList, output_obj %% recv%sList)</font>
<font color="blue">&quot;, lastdim-&gt;dim-&gt;name_in_file+1, lastdim-&gt;dim-&gt;name_in_file+1);
+                  }
                }
             }
          }

</font>
</pre>