<p><b>duda</b> 2012-01-06 18:18:10 -0700 (Fri, 06 Jan 2012)</p><p>BRANCH COMMIT<br>
<br>
Add new members to field DDTs: dims, timeDimension, prev, next, sendList, recvList, and copyList.<br>
Also add code to set or link these fields appropriately.<br>
<br>
Minor bug fixes: correct the number of time levels in a few variables in the ocean and nhyd_atmos<br>
registries.<br>
<br>
<br>
M    src/core_sw/mpas_sw_time_integration.F<br>
M    src/registry/gen_inc.c<br>
M    src/core_nhyd_atmos/Registry<br>
M    src/core_ocean/mpas_ocn_time_integration_rk4.F<br>
M    src/core_ocean/Registry<br>
M    src/framework/mpas_io_input.F<br>
M    src/framework/mpas_grid_types.F<br>
</p><hr noshade><pre><font color="gray">Modified: branches/omp_blocks/ddt_reorg/src/core_nhyd_atmos/Registry
===================================================================
--- branches/omp_blocks/ddt_reorg/src/core_nhyd_atmos/Registry        2012-01-06 22:48:40 UTC (rev 1317)
+++ branches/omp_blocks/ddt_reorg/src/core_nhyd_atmos/Registry        2012-01-07 01:18:10 UTC (rev 1318)
@@ -280,7 +280,7 @@
 % Space needed for deformation calculation weights
 var persistent real    defc_a ( maxEdges nCells ) 0 iro defc_a mesh - -
 var persistent real    defc_b ( maxEdges nCells ) 0 iro defc_b mesh - -
-var persistent real    kdiff ( nVertLevels nCells Time ) 2 - kdiff diag - -
+var persistent real    kdiff ( nVertLevels nCells Time ) 1 - kdiff diag - -
 
 % Arrays required for reconstruction of velocity field
 var persistent real    coeffs_reconstruct ( R3 maxEdges nCells ) 0 iro coeffs_reconstruct mesh - -

Modified: branches/omp_blocks/ddt_reorg/src/core_ocean/Registry
===================================================================
--- branches/omp_blocks/ddt_reorg/src/core_ocean/Registry        2012-01-06 22:48:40 UTC (rev 1317)
+++ branches/omp_blocks/ddt_reorg/src/core_ocean/Registry        2012-01-07 01:18:10 UTC (rev 1318)
@@ -207,13 +207,13 @@
 var persistent real   ssh ( nCells Time )          2 o  ssh state - - 
 var persistent real   uBtrSubcycle ( nEdges Time ) 2 -  uBtrSubcycle state - -
 var persistent real   sshSubcycle ( nCells Time )  2 -  sshSubcycle state - - 
-var persistent real   FBtr ( nEdges Time )         1 -  FBtr state - - 
-var persistent real   GBtrForcing ( nEdges Time )  1 -  GBtrForcing state - -
+var persistent real   FBtr ( nEdges Time )         2 -  FBtr state - - 
+var persistent real   GBtrForcing ( nEdges Time )  2 -  GBtrForcing state - -
 var persistent real   uBcl ( nVertLevels nEdges Time )  2 - uBcl state - - 
-var persistent real   circulationBtr ( nVertices Time ) 1 - circulationBtr state - -
-var persistent real   divergenceBtr ( nCells Time ) 1 - divergenceBtr state - -
-var persistent real   vorticityBtr ( nVertices Time ) 1 - vorticityBtr state - -
-var persistent real   u_diffusionBtr ( nEdges Time ) 1 - u_diffusionBtr state - -
+var persistent real   circulationBtr ( nVertices Time ) 2 - circulationBtr state - -
+var persistent real   divergenceBtr ( nCells Time ) 2 - divergenceBtr state - -
+var persistent real   vorticityBtr ( nVertices Time ) 2 - vorticityBtr state - -
+var persistent real   u_diffusionBtr ( nEdges Time ) 2 - u_diffusionBtr state - -
 
 % Diagnostic fields: only written to output
 var persistent real    v ( nVertLevels nEdges Time ) 2 - v state - -

Modified: branches/omp_blocks/ddt_reorg/src/core_ocean/mpas_ocn_time_integration_rk4.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/core_ocean/mpas_ocn_time_integration_rk4.F        2012-01-06 22:48:40 UTC (rev 1317)
+++ branches/omp_blocks/ddt_reorg/src/core_ocean/mpas_ocn_time_integration_rk4.F        2012-01-07 01:18:10 UTC (rev 1318)
@@ -95,7 +95,7 @@
 
 
       block =&gt; domain % blocklist
-      call mpas_allocate_state(provis, &amp;
+      call mpas_allocate_state(block, provis, &amp;
                           block % mesh % nCells, block % mesh % nEdges, block % mesh % maxEdges, block % mesh % maxEdges2, &amp;
                           block % mesh % nVertices, block % mesh % vertexDegree, block % mesh % nVertLevels )
 

Modified: branches/omp_blocks/ddt_reorg/src/core_sw/mpas_sw_time_integration.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/core_sw/mpas_sw_time_integration.F        2012-01-06 22:48:40 UTC (rev 1317)
+++ branches/omp_blocks/ddt_reorg/src/core_sw/mpas_sw_time_integration.F        2012-01-07 01:18:10 UTC (rev 1318)
@@ -70,7 +70,7 @@
       real (kind=RKIND), dimension(4) :: rk_weights, rk_substep_weights
 
       block =&gt; domain % blocklist
-      call mpas_allocate_state(provis, &amp;
+      call mpas_allocate_state(block, provis, &amp;
                           block % mesh % nCells, block % mesh % nEdges, block % mesh % maxEdges, block % mesh % maxEdges2, &amp;
                           block % mesh % nVertices, block % mesh % vertexDegree, block % mesh % nVertLevels, &amp;
                           block % mesh % nTracers)

Modified: branches/omp_blocks/ddt_reorg/src/framework/mpas_grid_types.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/framework/mpas_grid_types.F        2012-01-06 22:48:40 UTC (rev 1317)
+++ branches/omp_blocks/ddt_reorg/src/framework/mpas_grid_types.F        2012-01-07 01:18:10 UTC (rev 1318)
@@ -24,6 +24,12 @@
       type (block_type), pointer :: block
       real (kind=RKIND), dimension(:,:,:), pointer :: array
       type (io_info), pointer :: ioinfo
+      integer, dimension(3) :: dims
+      logical :: timeDimension
+      type (field3DReal), pointer :: prev, next
+      type (exchange_list), pointer :: sendList
+      type (exchange_list), pointer :: recvList
+      type (exchange_list), pointer :: copyList
    end type field3DReal
 
 
@@ -32,6 +38,12 @@
       type (block_type), pointer :: block
       real (kind=RKIND), dimension(:,:), pointer :: array
       type (io_info), pointer :: ioinfo
+      integer, dimension(2) :: dims
+      logical :: timeDimension
+      type (field2DReal), pointer :: prev, next
+      type (exchange_list), pointer :: sendList
+      type (exchange_list), pointer :: recvList
+      type (exchange_list), pointer :: copyList
    end type field2DReal
 
 
@@ -40,6 +52,12 @@
       type (block_type), pointer :: block
       real (kind=RKIND), dimension(:), pointer :: array
       type (io_info), pointer :: ioinfo
+      integer, dimension(1) :: dims
+      logical :: timeDimension
+      type (field1DReal), pointer :: prev, next
+      type (exchange_list), pointer :: sendList
+      type (exchange_list), pointer :: recvList
+      type (exchange_list), pointer :: copyList
    end type field1DReal
 
 
@@ -48,6 +66,11 @@
       type (block_type), pointer :: block
       real (kind=RKIND) :: scalar
       type (io_info), pointer :: ioinfo
+      logical :: timeDimension
+      type (field0DReal), pointer :: prev, next
+      type (exchange_list), pointer :: sendList
+      type (exchange_list), pointer :: recvList
+      type (exchange_list), pointer :: copyList
    end type field0DReal
 
 
@@ -56,6 +79,12 @@
       type (block_type), pointer :: block
       integer, dimension(:,:), pointer :: array
       type (io_info), pointer :: ioinfo
+      integer, dimension(2) :: dims
+      logical :: timeDimension
+      type (field2DInteger), pointer :: prev, next
+      type (exchange_list), pointer :: sendList
+      type (exchange_list), pointer :: recvList
+      type (exchange_list), pointer :: copyList
    end type field2DInteger
 
 
@@ -64,6 +93,12 @@
       type (block_type), pointer :: block
       integer, dimension(:), pointer :: array
       type (io_info), pointer :: ioinfo
+      integer, dimension(1) :: dims
+      logical :: timeDimension
+      type (field1DInteger), pointer :: prev, next
+      type (exchange_list), pointer :: sendList
+      type (exchange_list), pointer :: recvList
+      type (exchange_list), pointer :: copyList
    end type field1DInteger
 
 
@@ -72,6 +107,12 @@
       type (block_type), pointer :: block
       character (len=64), dimension(:), pointer :: array
       type (io_info), pointer :: ioinfo
+      integer, dimension(1) :: dims
+      logical :: timeDimension
+      type (field1DChar), pointer :: prev, next
+      type (exchange_list), pointer :: sendList
+      type (exchange_list), pointer :: recvList
+      type (exchange_list), pointer :: copyList
    end type field1DChar
 
 
@@ -80,6 +121,11 @@
       type (block_type), pointer :: block
       character (len=64) :: scalar
       type (io_info), pointer :: ioinfo
+      logical :: timeDimension
+      type (field0DChar), pointer :: prev, next
+      type (exchange_list), pointer :: sendList
+      type (exchange_list), pointer :: recvList
+      type (exchange_list), pointer :: copyList
    end type field0DChar
 
 
@@ -223,4 +269,15 @@
 
 #include &quot;group_shift_level_routines.inc&quot;
 
+
+   subroutine mpas_create_field_links(b)
+
+      implicit none
+
+      type (block_type), pointer :: b
+
+#include &quot;field_links.inc&quot;
+
+   end subroutine mpas_create_field_links
+
 end module mpas_grid_types

Modified: branches/omp_blocks/ddt_reorg/src/framework/mpas_io_input.F
===================================================================
--- branches/omp_blocks/ddt_reorg/src/framework/mpas_io_input.F        2012-01-06 22:48:40 UTC (rev 1317)
+++ branches/omp_blocks/ddt_reorg/src/framework/mpas_io_input.F        2012-01-07 01:18:10 UTC (rev 1318)
@@ -968,6 +968,11 @@
       domain % blocklist % mesh % nVerticesSolve = ghostVertexStart-1
       domain % blocklist % mesh % nVertLevelsSolve = domain % blocklist % mesh % nVertLevels   ! No vertical decomp yet...
 
+      ! Link the sendList and recvList pointers in each field type to the appropriate lists 
+      !   in parinfo, e.g., cellsToSend and cellsToRecv; in future, it can also be extended to 
+      !   link blocks of fields to eachother
+      call mpas_create_field_links(domain % blocklist)
+
    
       !
       ! Deallocate fields, graphs, and other memory

Modified: branches/omp_blocks/ddt_reorg/src/registry/gen_inc.c
===================================================================
--- branches/omp_blocks/ddt_reorg/src/registry/gen_inc.c        2012-01-06 22:48:40 UTC (rev 1317)
+++ branches/omp_blocks/ddt_reorg/src/registry/gen_inc.c        2012-01-07 01:18:10 UTC (rev 1318)
@@ -14,6 +14,18 @@
    return 0;
 }
 
+
+void get_outer_dim(struct variable * var, char * last_dim)
+{
+   struct dimension_list * dimlist_ptr;

+
+   dimlist_ptr = var-&gt;dimlist;
+   while (dimlist_ptr-&gt;next) dimlist_ptr = dimlist_ptr-&gt;next;
+
+   strcpy(last_dim, dimlist_ptr-&gt;dim-&gt;name_in_file);
+}
+
 void split_derived_dim_string(char * dim, char ** p1, char ** p2)
 {
    char * cp, * cm, * c;
@@ -162,6 +174,7 @@
    FILE * fd;
    char super_array[1024];
    char array_class[1024];
+   char outer_dim[1024];
    int i;
    int class_start, class_end;
    int vtype;
@@ -474,13 +487,13 @@
          fortprintf(fd, &quot;      allocate(b %% %s %% time_levs(%i))</font>
<font color="black">&quot;, group_ptr-&gt;name, group_ptr-&gt;vlist-&gt;var-&gt;ntime_levs);
          fortprintf(fd, &quot;      do i=1,b %% %s %% nTimeLevels</font>
<font color="black">&quot;, group_ptr-&gt;name);
          fortprintf(fd, &quot;         allocate(b %% %s %% time_levs(i) %% %s)</font>
<font color="red">&quot;, group_ptr-&gt;name, group_ptr-&gt;name);
-         fortprintf(fd, &quot;         call mpas_allocate_%s(b %% %s %% time_levs(i) %% %s, &amp;</font>
<font color="blue">&quot;, group_ptr-&gt;name, group_ptr-&gt;name, group_ptr-&gt;name);
+         fortprintf(fd, &quot;         call mpas_allocate_%s(b, b %% %s %% time_levs(i) %% %s, &amp;</font>
<font color="black">&quot;, group_ptr-&gt;name, group_ptr-&gt;name, group_ptr-&gt;name);
          fortprintf(fd, &quot;#include \&quot;dim_dummy_args.inc\&quot;</font>
<font color="black">&quot;);
          fortprintf(fd, &quot;                         )</font>
<font color="black">&quot;);
          fortprintf(fd, &quot;      end do</font>
<font color="black"></font>
<font color="red">&quot;);
       }
       else {
-         fortprintf(fd, &quot;      call mpas_allocate_%s(b %% %s, &amp;</font>
<font color="blue">&quot;, group_ptr-&gt;name, group_ptr-&gt;name);
+         fortprintf(fd, &quot;      call mpas_allocate_%s(b, b %% %s, &amp;</font>
<font color="black">&quot;, group_ptr-&gt;name, group_ptr-&gt;name);
          fortprintf(fd, &quot;#include \&quot;dim_dummy_args.inc\&quot;</font>
<font color="black">&quot;);
          fortprintf(fd, &quot;                      )</font>
<font color="black"></font>
<font color="gray">&quot;);
       }
@@ -512,12 +525,13 @@
    fd = fopen(&quot;group_alloc_routines.inc&quot;, &quot;w&quot;);
    group_ptr = groups;
    while (group_ptr) {
-      fortprintf(fd, &quot;   subroutine mpas_allocate_%s(%s, &amp;</font>
<font color="blue">&quot;, group_ptr-&gt;name, group_ptr-&gt;name);
+      fortprintf(fd, &quot;   subroutine mpas_allocate_%s(b, %s, &amp;</font>
<font color="black">&quot;, group_ptr-&gt;name, group_ptr-&gt;name);
       fortprintf(fd, &quot;#include \&quot;dim_dummy_args.inc\&quot;</font>
<font color="black">&quot;);
       fortprintf(fd, &quot;                         )</font>
<font color="black">&quot;);
       fortprintf(fd, &quot;</font>
<font color="black">&quot;);
       fortprintf(fd, &quot;      implicit none</font>
<font color="black">&quot;);
       fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+      fortprintf(fd, &quot;      type (block_type), pointer :: b</font>
<font color="black">&quot;);
       fortprintf(fd, &quot;      type (%s_type), intent(inout) :: %s</font>
<font color="black">&quot;, group_ptr-&gt;name, group_ptr-&gt;name);
       fortprintf(fd, &quot;#include \&quot;dim_dummy_decls.inc\&quot;</font>
<font color="black">&quot;);
       fortprintf(fd, &quot;</font>
<font color="gray">&quot;);
@@ -578,6 +592,29 @@
             else if (var_ptr-&gt;vtype == CHARACTER)
                fortprintf(fd, &quot;      %s %% %s %% array = \'\'</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array ); /* initialize field to zero */
 
+            fortprintf(fd, &quot;      %s %% %s %% dims(1) = %i</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array, i);
+            dimlist_ptr = var_ptr2-&gt;dimlist;
+            i = 2;
+            while (dimlist_ptr) {
+               if (!strncmp(dimlist_ptr-&gt;dim-&gt;name_in_file, &quot;nCells&quot;, 1024) ||
+                   !strncmp(dimlist_ptr-&gt;dim-&gt;name_in_file, &quot;nEdges&quot;, 1024) ||
+                   !strncmp(dimlist_ptr-&gt;dim-&gt;name_in_file, &quot;nVertices&quot;, 1024))
+                  if (!dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;      %s %% %s %% dims(%i) = %s</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array, i, dimlist_ptr-&gt;dim-&gt;name_in_code);
+                  else fortprintf(fd, &quot;      %s %% %s %% dims(%i) = %s</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array, i, dimlist_ptr-&gt;dim-&gt;name_in_file);
+               else
+                  if (dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;      %s %% %s %% dims(%i) = %s</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array, i, dimlist_ptr-&gt;dim-&gt;name_in_file);
+                  else fortprintf(fd, &quot;      %s %% %s %% dims(%i) = %s</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array, i, dimlist_ptr-&gt;dim-&gt;name_in_code);
+               i++;
+               dimlist_ptr = dimlist_ptr-&gt;next;
+            }
+            if (var_ptr2-&gt;timedim) fortprintf(fd, &quot;      %s %% %s %% timeDimension = .true.</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
+            else fortprintf(fd, &quot;      %s %% %s %% timeDimension = .false.</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% prev)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% next)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% sendList)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% recvList)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% copyList)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
+
             if (var_ptr2-&gt;iostreams &amp; INPUT0) 
                fortprintf(fd, &quot;      %s %% %s %% ioinfo %% input = .true.</font>
<font color="gray">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
             else
@@ -597,6 +634,8 @@
                fortprintf(fd, &quot;      %s %% %s %% ioinfo %% output = .true.</font>
<font color="black">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
             else
                fortprintf(fd, &quot;      %s %% %s %% ioinfo %% output = .false.</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
+
+            fortprintf(fd, &quot;      %s %% %s %% block =&gt; b</font>
<font color="black">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array);
             fortprintf(fd, &quot;</font>
<font color="gray">&quot;);
          }
          else {
@@ -633,7 +672,30 @@
                else if (var_ptr-&gt;vtype == CHARACTER)
                   fortprintf(fd, &quot;      %s %% %s %% array = \'\'</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code ); /* initialize field to zero */
 
+               dimlist_ptr = var_ptr-&gt;dimlist;
+               i = 1;
+               while (dimlist_ptr) {
+                  if (!strncmp(dimlist_ptr-&gt;dim-&gt;name_in_file, &quot;nCells&quot;, 1024) ||
+                      !strncmp(dimlist_ptr-&gt;dim-&gt;name_in_file, &quot;nEdges&quot;, 1024) ||
+                      !strncmp(dimlist_ptr-&gt;dim-&gt;name_in_file, &quot;nVertices&quot;, 1024))
+                     if (!dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;      %s %% %s %% dims(%i) = %s</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code, i, dimlist_ptr-&gt;dim-&gt;name_in_code); 
+                     else fortprintf(fd, &quot;      %s %% %s %% dims(%i) = %s</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code, i, dimlist_ptr-&gt;dim-&gt;name_in_file); 
+                  else
+                     if (dimlist_ptr-&gt;dim-&gt;namelist_defined) fortprintf(fd, &quot;      %s %% %s %% dims(%i) = %s</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code, i, dimlist_ptr-&gt;dim-&gt;name_in_file); 
+                     else fortprintf(fd, &quot;      %s %% %s %% dims(%i) = %s</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code, i, dimlist_ptr-&gt;dim-&gt;name_in_code); 
+                  i++;
+                  dimlist_ptr = dimlist_ptr-&gt;next;
+               }
             }
+
+            if (var_ptr-&gt;timedim) fortprintf(fd, &quot;      %s %% %s %% timeDimension = .true.</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
+            else fortprintf(fd, &quot;      %s %% %s %% timeDimension = .false.</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% prev)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% next)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% sendList)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% recvList)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
+            fortprintf(fd, &quot;      nullify(%s %% %s %% copyList)</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
+
             if (var_ptr-&gt;iostreams &amp; INPUT0) 
                fortprintf(fd, &quot;      %s %% %s %% ioinfo %% input = .true.</font>
<font color="gray">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
             else
@@ -653,6 +715,8 @@
                fortprintf(fd, &quot;      %s %% %s %% ioinfo %% output = .true.</font>
<font color="black">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
             else
                fortprintf(fd, &quot;      %s %% %s %% ioinfo %% output = .false.</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
+
+            fortprintf(fd, &quot;      %s %% %s %% block =&gt; b</font>
<font color="black">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code);
             fortprintf(fd, &quot;</font>
<font color="gray">&quot;);
 
             var_list_ptr = var_list_ptr-&gt;next;
@@ -778,6 +842,96 @@
       group_ptr = group_ptr-&gt;next;
    }
    fclose(fd);
+   
+
+   /* Definitions of deallocate subroutines */
+   fd = fopen(&quot;field_links.inc&quot;, &quot;w&quot;);
+   group_ptr = groups;
+   while (group_ptr) {
+      fortprintf(fd, &quot;      ! Create links for fields in %s</font>
<font color="blue">&quot;, group_ptr-&gt;name); 
+      var_list_ptr = group_ptr-&gt;vlist;
+      while (var_list_ptr) {
+         var_ptr = var_list_ptr-&gt;var;
+         if (strncmp(var_ptr-&gt;super_array, &quot;-&quot;, 1024) != 0) {
+            memcpy(super_array, var_ptr-&gt;super_array, 1024);
+            memcpy(array_class, var_ptr-&gt;array_class, 1024);
+            while (var_list_ptr &amp;&amp; strncmp(super_array, var_list_ptr-&gt;var-&gt;super_array, 1024) == 0) {
+               var_list_ptr2 = var_list_ptr;
+               var_list_ptr = var_list_ptr-&gt;next;
+            }
+            var_ptr2 = var_list_ptr2-&gt;var;
+            get_outer_dim(var_ptr2, outer_dim);
+            if (var_ptr2-&gt;ntime_levs &gt; 1) {
+               if (strncmp(&quot;nCells&quot;,outer_dim,1024) == 0) {
+                  for(i=1; i&lt;=var_ptr2-&gt;ntime_levs; i++) {
+                     fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% sendList =&gt; b %% parinfo %% cellsToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr2-&gt;super_array); 
+                     fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% recvList =&gt; b %% parinfo %% cellsToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr2-&gt;super_array); 
+                  }
+               }
+               else if (strncmp(&quot;nEdges&quot;,outer_dim,1024) == 0) {
+                  for(i=1; i&lt;=var_ptr2-&gt;ntime_levs; i++) {
+                     fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% sendList =&gt; b %% parinfo %% edgesToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr2-&gt;super_array); 
+                     fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% recvList =&gt; b %% parinfo %% edgesToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr2-&gt;super_array); 
+                  }
+               }
+               else if (strncmp(&quot;nVertices&quot;,outer_dim,1024) == 0) {
+                  for(i=1; i&lt;=var_ptr2-&gt;ntime_levs; i++) {
+                     fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% sendList =&gt; b %% parinfo %% verticesToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr2-&gt;super_array); 
+                     fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% recvList =&gt; b %% parinfo %% verticesToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr2-&gt;super_array); 
+                  }
+               }
+            }
+            else {
+               if (strncmp(&quot;nCells&quot;,outer_dim,1024) == 0) {
+                  fortprintf(fd, &quot;         b %% %s %% %s %% sendList =&gt; b %% parinfo %% cellsToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array); 
+                  fortprintf(fd, &quot;         b %% %s %% %s %% recvList =&gt; b %% parinfo %% cellsToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr2-&gt;super_array); 
+               }
+            }
+            fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+         }
+         else {
+            if (var_ptr-&gt;ndims &gt; 0) {
+               get_outer_dim(var_ptr, outer_dim);
+               if (var_ptr-&gt;ntime_levs &gt; 1) {
+                  for(i=1; i&lt;=var_ptr-&gt;ntime_levs; i++) {
+                     if (strncmp(&quot;nCells&quot;,outer_dim,1024) == 0) {
+                       fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% sendList =&gt; b %% parinfo %% cellsToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                       fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% recvList =&gt; b %% parinfo %% cellsToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                     }
+                     else if (strncmp(&quot;nEdges&quot;,outer_dim,1024) == 0) {
+                       fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% sendList =&gt; b %% parinfo %% edgesToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                       fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% recvList =&gt; b %% parinfo %% edgesToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                     }
+                     else if (strncmp(&quot;nVertices&quot;,outer_dim,1024) == 0) {
+                       fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% sendList =&gt; b %% parinfo %% verticesToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                       fortprintf(fd, &quot;         b %% %s %% time_levs(%i) %% %s %% %s %% recvList =&gt; b %% parinfo %% verticesToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, i, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                     }
+                  }
+               }
+               else {
+                  if (strncmp(&quot;nCells&quot;,outer_dim,1024) == 0) {
+                     fortprintf(fd, &quot;         b %% %s %% %s %% sendList =&gt; b %% parinfo %% cellsToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                     fortprintf(fd, &quot;         b %% %s %% %s %% recvList =&gt; b %% parinfo %% cellsToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                  }
+                  else if (strncmp(&quot;nEdges&quot;,outer_dim,1024) == 0) {
+                     fortprintf(fd, &quot;         b %% %s %% %s %% sendList =&gt; b %% parinfo %% edgesToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                     fortprintf(fd, &quot;         b %% %s %% %s %% recvList =&gt; b %% parinfo %% edgesToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                  }
+                  else if (strncmp(&quot;nVertices&quot;,outer_dim,1024) == 0) {
+                     fortprintf(fd, &quot;         b %% %s %% %s %% sendList =&gt; b %% parinfo %% verticesToSend</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                     fortprintf(fd, &quot;         b %% %s %% %s %% recvList =&gt; b %% parinfo %% verticesToRecv</font>
<font color="blue">&quot;, group_ptr-&gt;name, var_ptr-&gt;name_in_code); 
+                  }
+               }
+               fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+            }
+            var_list_ptr = var_list_ptr-&gt;next;
+         }
+      }
+
+      fortprintf(fd, &quot;</font>
<font color="blue">&quot;);
+      group_ptr = group_ptr-&gt;next;
+   }
+   fclose(fd);
  
 }
 

</font>
</pre>