<p><b>duda</b> 2009-09-09 12:07:25 -0600 (Wed, 09 Sep 2009)</p><p>Simplify registry using loops to replace replicated code.<br>
<br>
M    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-09-08 22:23:56 UTC (rev 47)
+++ trunk/swmodel/Registry/gen_inc.c        2009-09-09 18:07:25 UTC (rev 48)
@@ -413,7 +413,9 @@
    struct dtable * dictionary;
    FILE * fd;
    char vtype[5];
-   int i;
+   char fname[32];
+   int i, j;
+   int ivtype;
    int has_vert_dim, vert_dim;
 
 
@@ -653,222 +655,67 @@
    
    
    /*
-    *  Generate code to read 1d real fields
+    *  Generate code to read 1d, 2d, 3d time-invariant fields
     */
-   fd = fopen(&quot;input_field1dreal.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 1 || var_ptr-&gt;vtype != REAL || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 1 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
+   for(j=0; j&lt;2; j++) {
+      for(i=1; i&lt;=3; i++) {
+         if (j == 0) {
+            sprintf(fname, &quot;input_field%idinteger.inc&quot;, i);
+            ivtype = INTEGER;
          }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);
-   
-   
-   /*
-    *  Generate code to read 2d real fields
-    */
-   fd = fopen(&quot;input_field2dreal.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 2 || var_ptr-&gt;vtype != REAL || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 2 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
+         else {
+            sprintf(fname, &quot;input_field%idreal.inc&quot;, i);
+            ivtype = REAL;
          }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);
+         fd = fopen(fname, &quot;w&quot;);
    
-   
-   /*
-    *  Generate code to read 3d real fields
-    */
-   fd = fopen(&quot;input_field3dreal.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 3 || var_ptr-&gt;vtype != REAL || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 3 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+         var_ptr = vars;
+         while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != i || var_ptr-&gt;vtype != ivtype || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
+         if (var_ptr) {
+            fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="black">&quot;, var_ptr-&gt;name_in_file);
             fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+            var_ptr = var_ptr-&gt;next;
+            while (var_ptr) {
+               if (var_ptr-&gt;ndims == i &amp;&amp; var_ptr-&gt;vtype == ivtype &amp;&amp; !var_ptr-&gt;timedim) {
+                  fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+                  fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+               }
+               var_ptr = var_ptr-&gt;next;
+            }
+            fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
          }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);
+      
+         fclose(fd);
+      } 
+   } 
    
    
    /*
-    *  Generate code to read 0d time-varying real fields
+    *  Generate code to read 0d, 1d, 2d, 3d time-varying real fields
     */
-   fd = fopen(&quot;input_field0dreal_time.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 0 || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 0 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);
+   for(i=0; i&lt;=3; i++) { 
+      sprintf(fname, &quot;input_field%idreal_time.inc&quot;, i);
+      fd = fopen(fname, &quot;w&quot;);
    
-   
-   /*
-    *  Generate code to read 1d time-varying real fields
-    */
-   fd = fopen(&quot;input_field1dreal_time.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 1 || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 1 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
+      var_ptr = vars;
+      while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != i || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
+      if (var_ptr) {
+         fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+         fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
          var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);
-
-    
-   
-   /*
-    *  Generate code to read 2d time-varying real fields
-    */
-   fd = fopen(&quot;input_field2dreal_time.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 2 || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 2 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+         while (var_ptr) {
+            if (var_ptr-&gt;ndims == i &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
+               fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+               fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
+            }
+            var_ptr = var_ptr-&gt;next;
          }
-         var_ptr = var_ptr-&gt;next;
+         fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
       }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);   
-      
    
-   /*
-    *  Generate code to read 3d time-varying real fields
-    */
-   fd = fopen(&quot;input_field3dreal_time.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 3 || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 3 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd); 
-
+      fclose(fd);
+   } 
    
-   
-   /*
-    *  Generate code to read 1d integer fields
-    */
-   fd = fopen(&quot;input_field1dinteger.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 1 || var_ptr-&gt;vtype != INTEGER || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 1 &amp;&amp; var_ptr-&gt;vtype == INTEGER &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);
-   
-   
-   /*
-    *  Generate code to read 2d integer fields
-    */
-   fd = fopen(&quot;input_field2dinteger.inc&quot;, &quot;w&quot;);
-   
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 2 || var_ptr-&gt;vtype != INTEGER || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 2 &amp;&amp; var_ptr-&gt;vtype == INTEGER &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = input_obj %% rdVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="gray">&quot;);
-   }
-
-   fclose(fd); 
-   
 }
 
 
@@ -880,7 +727,9 @@
    struct dtable * dictionary;
    FILE * fd;
    char vtype[5];
-   int i;
+   char fname[32];
+   int i, j;
+   int ivtype;
    
    
    /*
@@ -1107,223 +956,68 @@
    }
 
    fclose(fd);
-
    
-   /*
-    *  Generate code to write 0d real fields
-    */
-   fd = fopen(&quot;output_field0dreal_time.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 0 || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 0 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);
-
    
    /*
-    *  Generate code to write 1d real fields
+    *  Generate code to write 1d, 2d, 3d time-invariant fields
     */
-   fd = fopen(&quot;output_field1dreal.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 1 || var_ptr-&gt;vtype != REAL || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 1 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
+   for(j=0; j&lt;2; j++) {
+      for(i=1; i&lt;=3; i++) {
+         if (j == 0) {
+            sprintf(fname, &quot;output_field%idinteger.inc&quot;, i);
+            ivtype = INTEGER;
          }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);
-   
-   
-   /*
-    *  Generate code to write 2d real fields
-    */
-   fd = fopen(&quot;output_field2dreal.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 2 || var_ptr-&gt;vtype != REAL || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 2 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
+         else {
+            sprintf(fname, &quot;output_field%idreal.inc&quot;, i);
+            ivtype = REAL;
          }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);   
+         fd = fopen(fname, &quot;w&quot;);
    
-   
-   /*
-    *  Generate code to write 3d real fields
-    */
-   fd = fopen(&quot;output_field3dreal.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 3 || var_ptr-&gt;vtype != REAL || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 3 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+         var_ptr = vars;
+         while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != i || var_ptr-&gt;vtype != ivtype || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
+         if (var_ptr) {
+            fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="black">&quot;, var_ptr-&gt;name_in_file);
             fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+            var_ptr = var_ptr-&gt;next;
+            while (var_ptr) {
+               if (var_ptr-&gt;ndims == i &amp;&amp; var_ptr-&gt;vtype == ivtype &amp;&amp; !var_ptr-&gt;timedim) {
+                  fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+                  fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+               }
+               var_ptr = var_ptr-&gt;next;
+            }
+            fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
          }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
+      
+         fclose(fd);
+      } 
+   } 
 
-   fclose(fd);   
-
-
    
    /*
-    *  Generate code to write 1d real fields
+    *  Generate code to write 0d, 1d, 2d, 3d real time-varying fields
     */
-   fd = fopen(&quot;output_field1dreal_time.inc&quot;, &quot;w&quot;);
+   for(i=0; i&lt;=3; i++) {
+      sprintf(fname, &quot;output_field%idreal_time.inc&quot;, i);
+      fd = fopen(fname, &quot;w&quot;);
 
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 1 || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 1 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
+      var_ptr = vars;
+      while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != i || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
+      if (var_ptr) {
+         fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+         fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
          var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);

-   
-   /*
-    *  Generate code to write 2d real fields
-    */
-   fd = fopen(&quot;output_field2dreal_time.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 2 || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 2 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+         while (var_ptr) {
+            if (var_ptr-&gt;ndims == i &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
+               fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="blue">&quot;, var_ptr-&gt;name_in_file);
+               fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
+            }
+            var_ptr = var_ptr-&gt;next;
          }
-         var_ptr = var_ptr-&gt;next;
+         fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
       }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd); 
    
-   
-   /*
-    *  Generate code to write 3d real fields
-    */
-   fd = fopen(&quot;output_field3dreal_time.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 3 || var_ptr-&gt;vtype != REAL || !var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 3 &amp;&amp; var_ptr-&gt;vtype == REAL &amp;&amp; var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
+      fclose(fd);
    }
-
-   fclose(fd); 
-
    
-   
-   /*
-    *  Generate code to write 1d integer fields
-    */
-   fd = fopen(&quot;output_field1dinteger.inc&quot;, &quot;w&quot;);
-
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 1 || var_ptr-&gt;vtype != INTEGER || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 1 &amp;&amp; var_ptr-&gt;vtype == INTEGER &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd);
-   
-   
-   /*
-    *  Generate code to write 2d integer fields
-    */
-   fd = fopen(&quot;output_field2dinteger.inc&quot;, &quot;w&quot;);
-   
-   var_ptr = vars;
-   while (var_ptr &amp;&amp; (var_ptr-&gt;ndims != 2 || var_ptr-&gt;vtype != INTEGER || var_ptr-&gt;timedim)) var_ptr = var_ptr-&gt;next;
-   if (var_ptr) {
-      fortprintf(fd, &quot;      if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-      var_ptr = var_ptr-&gt;next;
-      while (var_ptr) {
-         if (var_ptr-&gt;ndims == 2 &amp;&amp; var_ptr-&gt;vtype == INTEGER &amp;&amp; !var_ptr-&gt;timedim) {
-            fortprintf(fd, &quot;      else if (trim(field %% ioinfo %% fieldName) == \'%s\') then</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-            fortprintf(fd, &quot;         varID = output_obj %% wrVarID%s</font>
<font color="red">&quot;, var_ptr-&gt;name_in_file);
-         }
-         var_ptr = var_ptr-&gt;next;
-      }
-      fortprintf(fd, &quot;      end if</font>
<font color="red">&quot;);
-   }
-
-   fclose(fd); 
-
 }

</font>
</pre>