<p><b>duda</b> 2009-10-20 15:44:00 -0600 (Tue, 20 Oct 2009)</p><p>First attempt at registry changes to allow fields to<br>
have a dimension that is derived from another dimension<br>
defined in the input (grid.nc) file. For example:<br>
<br>
   dim nVertLevels nVertLevels<br>
   dim nVertLevelsP1 nVertLevels+1<br>
<br>
   var real    foo ( nVertLevelsP1 nCells ) iro foo<br>
<br>
would define a field 'foo' whose inner-most<br>
dimension is one greater than nVertLevels.<br>
<br>
Right now, creating derived dimensions that vary<br>
by something other than +/- a constant value will<br>
likely not work.<br>
<br>
<br>
M    swmodel/Registry/gen_inc.c<br>
</p><hr noshade><pre><font color="gray">Modified: trunk/swmodel/Registry/gen_inc.c
===================================================================
--- trunk/swmodel/Registry/gen_inc.c        2009-10-20 17:55:44 UTC (rev 59)
+++ trunk/swmodel/Registry/gen_inc.c        2009-10-20 21:44:00 UTC (rev 60)
@@ -6,6 +6,38 @@
 #include &quot;gen_inc.h&quot;
 #include &quot;fortprintf.h&quot;
 
+int is_derived_dim(char * d)
+{
+   if (strchr(d, (int)'+')) return 1;
+   if (strchr(d, (int)'-')) return 1;
+
+   return 0;
+}
+
+void split_derived_dim_string(char * dim, char ** p1, char ** p2)
+{
+   char * cp, * cm, * c;
+   int n;
+
+   cp = strchr(dim, (int)'+');
+   cm = strchr(dim, (int)'-');
+   if (!cp) 
+      c = cm;
+   else if (!cm) 
+      c = cp;
+   else if (cm &lt; cp) 
+      c = cm;
+   else 
+      c = cp;
+
+   n = c - dim;
+   *p1 = (char *)malloc(n*sizeof(char));
+   snprintf(*p1, n, &quot;%s&quot;, dim+1);
+
+   *p2 = (char *)malloc((strlen(dim)-n+1)*sizeof(char));
+   sprintf(*p2, &quot;%s&quot;, dim+n);
+}
+
 void gen_namelists(struct namelist * nls)
 {
    struct namelist * nls_ptr;
@@ -132,12 +164,12 @@
    fd = fopen(&quot;field_dimensions.inc&quot;, &quot;w&quot;);
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;      integer :: %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;      integer :: %s</font>
<font color="red">&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;      integer :: %sSolve</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;      integer :: %sSolve</font>
<font color="gray">&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
 
@@ -149,12 +181,12 @@
     */
    fd = fopen(&quot;dim_dummy_args.inc&quot;, &quot;w&quot;);
    dim_ptr = dims;
-   if (dim_ptr &amp;&amp; dim_ptr-&gt;constant_value &lt; 0) {
+   if (dim_ptr &amp;&amp; dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) {
       fortprintf(fd, &quot;                            %s&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;, %s&quot;, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;, %s&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    fortprintf(fd, &quot; &amp;</font>
<font color="gray">&quot;);
@@ -167,12 +199,12 @@
     */
    fd = fopen(&quot;dim_dummy_decls.inc&quot;, &quot;w&quot;);
    dim_ptr = dims;
-   if (dim_ptr &amp;&amp; dim_ptr-&gt;constant_value &lt; 0) {
+   if (dim_ptr &amp;&amp; dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) {
       fortprintf(fd, &quot;      integer, intent(in) :: %s&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;, %s&quot;, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;, %s&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    fortprintf(fd, &quot;</font>
<font color="gray">&quot;);
@@ -186,7 +218,7 @@
    fd = fopen(&quot;dim_decls.inc&quot;, &quot;w&quot;);
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;      integer :: %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;      integer :: %s</font>
<font color="gray">&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
 
@@ -199,7 +231,7 @@
    fd = fopen(&quot;read_dims.inc&quot;, &quot;w&quot;);
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;      call io_input_get_dimension(input_obj, \'%s\', %s)</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;      call io_input_get_dimension(input_obj, \'%s\', %s)</font>
<font color="gray">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
 
@@ -243,7 +275,7 @@
 
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;      g %% %s = %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;      g %% %s = %s</font>
<font color="black">&quot;, dim_ptr-&gt;name_in_code, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    fortprintf(fd, &quot;</font>
<font color="gray">&quot;);
@@ -414,6 +446,7 @@
    FILE * fd;
    char vtype[5];
    char fname[32];
+   char * cp1, * cp2;
    int i, j;
    int ivtype;
    int has_vert_dim, vert_dim;
@@ -427,7 +460,7 @@
    fortprintf(fd, &quot;      integer :: rdDimIDTime</font>
<font color="red">&quot;);
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;      integer :: rdDimID%s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;      integer :: rdDimID%s</font>
<font color="black">&quot;, dim_ptr-&gt;name_in_file);
       dim_ptr = dim_ptr-&gt;next;
    }
    fortprintf(fd, &quot;</font>
<font color="gray">&quot;);
@@ -435,7 +468,7 @@
    fortprintf(fd, &quot;      integer :: rdLocalTime</font>
<font color="red">&quot;);
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;      integer :: rdLocal%s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_file);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;      integer :: rdLocal%s</font>
<font color="black">&quot;, dim_ptr-&gt;name_in_file);
       dim_ptr = dim_ptr-&gt;next;
    }
    fortprintf(fd, &quot;</font>
<font color="gray">&quot;);
@@ -493,8 +526,17 @@
                }
             }
             else {
-               fortprintf(fd, &quot;      %s%id %% ioinfo %% start(%i) = read%sStart</font>
<font color="red">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_code+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_code+1);
+               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="blue">&quot;, vtype, var_ptr-&gt;ndims, i, cp1);
+                  fortprintf(fd, &quot;      %s%id %% ioinfo %% count(%i) = read%sCount%s</font>
<font color="blue">&quot;, vtype, var_ptr-&gt;ndims, i, cp1, cp2);
+                  free(cp1);
+                  free(cp2);
+               }
+               else {
+                  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_code+1);
+                  fortprintf(fd, &quot;      %s%id %% ioinfo %% count(%i) = read%sCount</font>
<font color="gray">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
+               }
             }
          dimlist_ptr = dimlist_ptr-&gt;next;
          i++;
@@ -505,24 +547,42 @@
          i = 1;
          dimlist_ptr = var_ptr-&gt;dimlist;
    
-         if (i &lt; var_ptr-&gt;ndims)
+         if (i &lt; var_ptr-&gt;ndims) {
             if (dimlist_ptr-&gt;dim-&gt;constant_value &lt; 0)
                fortprintf(fd, &quot;block %% mesh %% %s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
             else
                fortprintf(fd, &quot;%s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
-         else
-            fortprintf(fd, &quot;read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
+         }
+         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);
+            }
+            else
+               fortprintf(fd, &quot;read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
+         }
     
          dimlist_ptr = dimlist_ptr-&gt;next;
          i++;
          while (dimlist_ptr) {
-            if (i &lt; var_ptr-&gt;ndims)
+            if (i &lt; var_ptr-&gt;ndims) {
                if (dimlist_ptr-&gt;dim-&gt;constant_value &lt; 0)
                   fortprintf(fd, &quot;, block %% mesh %% %s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
                else
                   fortprintf(fd, &quot;, %s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
-            else
-               fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
+            }
+            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);
+               }
+               else
+                  fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
+            }
             dimlist_ptr = dimlist_ptr-&gt;next;
             i++;
          }
@@ -571,7 +631,14 @@
                fortprintf(fd, &quot;                                %s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
          else {
             lastdim = dimlist_ptr;
-            fortprintf(fd, &quot;                                read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
+            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);
+            }
+            else
+               fortprintf(fd, &quot;                                read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
          }
     
          dimlist_ptr = dimlist_ptr-&gt;next;
@@ -584,14 +651,28 @@
                   fortprintf(fd, &quot;, %s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
             else {
                lastdim = dimlist_ptr;
-               fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
+               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);
+               }
+               else
+                  fortprintf(fd, &quot;, read%sCount&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code+1);
             }
             dimlist_ptr = dimlist_ptr-&gt;next;
             i++;
          }
          fortprintf(fd, &quot;, block %% mesh %% %s, &amp;</font>
<font color="red">&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);
+         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;                                send%sList, recv%sList)</font>
<font color="blue">&quot;, cp1, cp1);
+            free(cp1);
+            free(cp2);
+         }
+         else
+            fortprintf(fd, &quot;                                send%sList, recv%sList)</font>
<font color="black">&quot;, lastdim-&gt;dim-&gt;name_in_code+1, lastdim-&gt;dim-&gt;name_in_code+1);
          fortprintf(fd, &quot;      deallocate(%s%id %% array)</font>
<font color="gray">&quot;, vtype, var_ptr-&gt;ndims);
       }
       else {
@@ -615,7 +696,7 @@
    fortprintf(fd, &quot;      nferr = nf_inq_dimlen(input_obj %% rd_ncid, input_obj %% rdDimIDTime, input_obj %% rdLocalTime)</font>
<font color="red">&quot;);
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) {
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) {
          fortprintf(fd, &quot;      nferr = nf_inq_dimid(input_obj %% rd_ncid, \'%s\', input_obj %% rdDimID%s)</font>
<font color="black">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_file);
          fortprintf(fd, &quot;      nferr = nf_inq_dimlen(input_obj %% rd_ncid, input_obj %% rdDimID%s, input_obj %% rdLocal%s)</font>
<font color="gray">&quot;, dim_ptr-&gt;name_in_file, dim_ptr-&gt;name_in_file);
       }
@@ -638,12 +719,12 @@
    fd = fopen(&quot;get_dimension_by_name.inc&quot;, &quot;w&quot;);
 
    dim_ptr = dims;
-   while (dim_ptr-&gt;constant_value &gt;= 0) dim_ptr = dim_ptr-&gt;next;
+   while (dim_ptr-&gt;constant_value &gt;= 0 || is_derived_dim(dim_ptr-&gt;name_in_code)) dim_ptr = dim_ptr-&gt;next;
    fortprintf(fd, &quot;      if (trim(dimname) == \'%s\') then</font>
<font color="black">&quot;, dim_ptr-&gt;name_in_code);
    fortprintf(fd, &quot;         dimsize = input_obj %% rdLocal%s</font>
<font color="red">&quot;, dim_ptr-&gt;name_in_file);
    dim_ptr = dim_ptr-&gt;next;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) {
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) {
          fortprintf(fd, &quot;      else if (trim(dimname) == \'%s\') then</font>
<font color="black">&quot;, dim_ptr-&gt;name_in_code);
          fortprintf(fd, &quot;         dimsize = input_obj %% rdLocal%s</font>
<font color="gray">&quot;, dim_ptr-&gt;name_in_file);
       }
@@ -728,6 +809,7 @@
    FILE * fd;
    char vtype[5];
    char fname[32];
+   char * cp1, * cp2;
    int i, j;
    int ivtype;
    
@@ -761,7 +843,7 @@
 
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;      integer :: %sGlobal</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;      integer :: %sGlobal</font>
<font color="black">&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    fortprintf(fd, &quot;</font>
<font color="gray">&quot;);
@@ -776,7 +858,7 @@
 
    dim_ptr = dims;
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;      %sGlobal = block_ptr %% mesh %% %s</font>
<font color="blue">&quot;, dim_ptr-&gt;name_in_code, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;      %sGlobal = block_ptr %% mesh %% %s</font>
<font color="black">&quot;, dim_ptr-&gt;name_in_code, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    fortprintf(fd, &quot;</font>
<font color="gray">&quot;);
@@ -789,12 +871,12 @@
     */
    fd = fopen(&quot;output_dim_actual_args.inc&quot;, &quot;w&quot;);
    dim_ptr = dims;
-   if (dim_ptr &amp;&amp; dim_ptr-&gt;constant_value &lt; 0) {
+   if (dim_ptr &amp;&amp; dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) {
       fortprintf(fd, &quot;                            %sGlobal&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    while (dim_ptr) {
-      if (dim_ptr-&gt;constant_value &lt; 0) fortprintf(fd, &quot;, %sGlobal&quot;, dim_ptr-&gt;name_in_code);
+      if (dim_ptr-&gt;constant_value &lt; 0 &amp;&amp; !is_derived_dim(dim_ptr-&gt;name_in_code)) fortprintf(fd, &quot;, %sGlobal&quot;, dim_ptr-&gt;name_in_code);
       dim_ptr = dim_ptr-&gt;next;
    }
    fortprintf(fd, &quot; &amp;</font>
<font color="gray">&quot;);
@@ -873,7 +955,14 @@
                }
                else {
                   fortprintf(fd, &quot;      %s%id %% ioinfo %% start(%i) = 1</font>
<font color="red">&quot;, vtype, var_ptr-&gt;ndims, i);
-                  fortprintf(fd, &quot;      %s%id %% ioinfo %% count(%i) = %sGlobal</font>
<font color="blue">&quot;, vtype, var_ptr-&gt;ndims, i, dimlist_ptr-&gt;dim-&gt;name_in_code);
+                  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 %% count(%i) = n%sGlobal%s</font>
<font color="blue">&quot;, vtype, var_ptr-&gt;ndims, i, cp1, cp2);
+                     free(cp1);
+                     free(cp2);
+                  }
+                  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_code);
                }
             dimlist_ptr = dimlist_ptr-&gt;next;
             i++;
@@ -889,7 +978,14 @@
             else
                fortprintf(fd, &quot;%s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
          else {
-            fortprintf(fd, &quot;%sGlobal&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
+            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;n%sGlobal%s&quot;, cp1, cp2);
+               free(cp1);
+               free(cp2);
+            }
+            else
+               fortprintf(fd, &quot;%sGlobal&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
             lastdim = dimlist_ptr;
          }
          dimlist_ptr = dimlist_ptr-&gt;next;
@@ -901,7 +997,14 @@
                else
                   fortprintf(fd, &quot;, %s&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
             else {
-               fortprintf(fd, &quot;, %sGlobal&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
+               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;, n%sGlobal%s&quot;, cp1, cp2);
+                  free(cp1);
+                  free(cp2);
+               }
+               else
+                  fortprintf(fd, &quot;, %sGlobal&quot;, dimlist_ptr-&gt;dim-&gt;name_in_code);
                lastdim = dimlist_ptr;
             }
             dimlist_ptr = dimlist_ptr-&gt;next;
@@ -934,9 +1037,18 @@
             dimlist_ptr = dimlist_ptr-&gt;next;
             i++;
          }     
-         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="blue">&quot;, cp1, cp1);
+            free(cp1);
+            free(cp2);
+         }
+         else {
+            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;      %s%id %% ioinfo %% fieldName = \'%s\'</font>
<font color="black">&quot;, vtype, var_ptr-&gt;ndims, var_ptr-&gt;name_in_file);

</font>
</pre>