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