<p><b>dwj07@fsu.edu</b> 2013-04-12 20:00:46 -0600 (Fri, 12 Apr 2013)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Merging trunk to branch.<br>
</p><hr noshade><pre><font color="gray">Index: branches/history_attribute
===================================================================
--- branches/history_attribute        2013-04-12 16:07:24 UTC (rev 2742)
+++ branches/history_attribute        2013-04-13 02:00:46 UTC (rev 2743)

Property changes on: branches/history_attribute
___________________________________________________________________
Modified: svn:mergeinfo
## -34,3 +34,4 ##
 /branches/source_renaming:1082-1113
 /branches/time_manager:924-962
 /branches/xml_registry:2610-2662
+/trunk/mpas:2698-2742
\ No newline at end of property
Modified: branches/history_attribute/Makefile
===================================================================
--- branches/history_attribute/Makefile        2013-04-12 16:07:24 UTC (rev 2742)
+++ branches/history_attribute/Makefile        2013-04-13 02:00:46 UTC (rev 2743)
@@ -193,9 +193,18 @@
         &quot;USE_PAPI = $(USE_PAPI)&quot; \
         &quot;CPPFLAGS = $(MODEL_FORMULATION) -DUNDERSCORE $(FILE_OFFSET) $(ZOLTAN_DEFINE)&quot; )
 
-CPPINCLUDES = -I../inc -I$(NETCDF)/include -I$(PIO) -I$(PNETCDF)/include
-FCINCLUDES = -I../inc -I$(NETCDF)/include -I$(PIO) -I$(PNETCDF)/include
-LIBS = -L$(PIO) -L$(PNETCDF)/lib -L$(NETCDF)/lib -lpio -lpnetcdf
+CPPINCLUDES = 
+FCINCLUDES = 
+LIBS = 
+ifneq ($(wildcard $(PIO)/lib), ) # Check for newer PIO version
+        CPPINCLUDES = -I../inc -I$(NETCDF)/include -I$(PIO)/include -I$(PNETCDF)/include
+        FCINCLUDES = -I../inc -I$(NETCDF)/include -I$(PIO)/include -I$(PNETCDF)/include
+        LIBS = -L$(PIO)/lib -L$(PNETCDF)/lib -L$(NETCDF)/lib -lpio -lpnetcdf
+else
+        CPPINCLUDES = -I../inc -I$(NETCDF)/include -I$(PIO) -I$(PNETCDF)/include
+        FCINCLUDES = -I../inc -I$(NETCDF)/include -I$(PIO) -I$(PNETCDF)/include
+        LIBS = -L$(PIO) -L$(PNETCDF)/lib -L$(NETCDF)/lib -lpio -lpnetcdf
+endif
 
 NCLIB = -lnetcdf
 NCLIBF = -lnetcdff

Modified: branches/history_attribute/src/framework/mpas_grid_types.F
===================================================================
--- branches/history_attribute/src/framework/mpas_grid_types.F        2013-04-12 16:07:24 UTC (rev 2742)
+++ branches/history_attribute/src/framework/mpas_grid_types.F        2013-04-13 02:00:46 UTC (rev 2743)
@@ -1,3 +1,16 @@
+!***********************************************************************
+!
+!  mpas_grid_types
+!
+!&gt; \brief   MPAS Grid and field type defintion module
+!&gt; \author  Michael Duda, Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This module defines derived data types related to fields, and variable structures.
+!&gt; It also includes routines for allocating and deallocating these types.
+!
+!-----------------------------------------------------------------------
 module mpas_grid_types
 
    use mpas_kind_types
@@ -474,31 +487,54 @@
 
    contains
 
+!***********************************************************************
+!
+!  routine mpas_allocate_domain
+!
+!&gt; \brief   MPAS Domain allocation routine
+!&gt; \author  Michael Duda
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a domain structure.
+!
+!-----------------------------------------------------------------------
+   subroutine mpas_allocate_domain(dom, dminfo)!{{{
 
-   subroutine mpas_allocate_domain(dom, dminfo)
-
       implicit none
 
-      type (domain_type), pointer :: dom
-      type (dm_info), pointer :: dminfo
+      type (domain_type), pointer :: dom !&lt; Input/Output: Domain structure
+      type (dm_info), pointer :: dminfo !&lt; Input: Domain Information
 
       allocate(dom)
       nullify(dom % blocklist)
       dom % dminfo =&gt; dminfo
 
-   end subroutine mpas_allocate_domain
+   end subroutine mpas_allocate_domain!}}}
 
-
-   subroutine mpas_allocate_block(nHaloLayers, b, dom, blockID, &amp;
+!***********************************************************************
+!
+!  routine mpas_allocate_block
+!
+!&gt; \brief   MPAS Block allocation routine
+!&gt; \author  Michael Duda
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a block structure. It calls routines to allocate the variable structures
+!&gt; that are members of the block type.
+!
+!-----------------------------------------------------------------------
+   subroutine mpas_allocate_block(nHaloLayers, b, dom, blockID, &amp;!{{{
 #include &quot;dim_dummy_args.inc&quot;
                             )
 
       implicit none
 
-      integer, intent(in) :: nHaloLayers
-      type (block_type), pointer :: b
-      type (domain_type), pointer :: dom
-      integer, intent(in) :: blockID
+      integer, intent(in) :: nHaloLayers !&lt; Input: Number of halo laters
+      type (block_type), pointer :: b !&lt; Input/Output: Block structure
+      type (domain_type), pointer :: dom !&lt; Input: Domain structure
+      integer, intent(in) :: blockID !&lt; Input: Global ID of block
 #include &quot;dim_dummy_decls.inc&quot;
 
 
@@ -513,19 +549,30 @@
 
 #include &quot;block_allocs.inc&quot;
 
-   end subroutine mpas_allocate_block
+   end subroutine mpas_allocate_block!}}}
 
 
 #include &quot;group_alloc_routines.inc&quot;
 
 #include &quot;provis_alloc_routines.inc&quot;
 
-
+!***********************************************************************
+!
+!  routine mpas_deallocate_domain
+!
+!&gt; \brief   MPAS Domain deallocation routine
+!&gt; \author  Michael Duda
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a domain structure. 
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_domain(dom)!{{{
 
       implicit none
 
-      type (domain_type), pointer :: dom
+      type (domain_type), pointer :: dom !&lt; Input/Output: Domain to deallocate
 
       type (block_type), pointer :: block_ptr
 
@@ -539,9 +586,21 @@
 
    end subroutine mpas_deallocate_domain!}}}
 
+!***********************************************************************
+!
+!  routine mpas_allocate_scratch_field1d_integer
+!
+!&gt; \brief   MPAS 1D Scratch integer allocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a 1D scratch integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_allocate_scratch_field1d_integer(f, single_block_in)!{{{
-       type (field1dInteger), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field1dInteger), pointer :: f !&lt; Input: Field to allocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical flag that determines if a single block should be allocated or all blocks.
        logical :: single_block
        type (field1dInteger), pointer :: f_cursor
 
@@ -571,9 +630,21 @@
 
    end subroutine mpas_allocate_scratch_field1d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_allocate_scratch_field2d_integer
+!
+!&gt; \brief   MPAS 2D Scratch integer allocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a 2D scratch integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_allocate_scratch_field2d_integer(f, single_block_in)!{{{
-       type (field2dInteger), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field2dInteger), pointer :: f !&lt; Input: Field to allocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical flag that determines if a single block should be allocated, or all blocks.
        logical :: single_block
        type (field2dInteger), pointer :: f_cursor
 
@@ -603,9 +674,21 @@
 
    end subroutine mpas_allocate_scratch_field2d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_allocate_scratch_field3d_integer
+!
+!&gt; \brief   MPAS 3D Scratch integer allocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a 3D scratch integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_allocate_scratch_field3d_integer(f, single_block_in)!{{{
-       type (field3dInteger), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field3dInteger), pointer :: f !&lt; Input: Field to allocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical flag that determines if a single block should be allocated, or all blocks.
        logical :: single_block
        type (field3dInteger), pointer :: f_cursor
 
@@ -635,9 +718,21 @@
 
    end subroutine mpas_allocate_scratch_field3d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_allocate_scratch_field1d_real
+!
+!&gt; \brief   MPAS 1D Scratch real allocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a 1D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_allocate_scratch_field1d_real(f, single_block_in)!{{{
-       type (field1dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field1dReal), pointer :: f !&lt; Input: Field to allocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical flag that determines if a single block should be allocated, or all blocks.
        logical :: single_block
        type (field1dReal), pointer :: f_cursor
 
@@ -667,9 +762,21 @@
 
    end subroutine mpas_allocate_scratch_field1d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_allocate_scratch_field2d_real
+!
+!&gt; \brief   MPAS 2D Scratch real allocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a 2D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_allocate_scratch_field2d_real(f, single_block_in)!{{{
-       type (field2dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field2dReal), pointer :: f !&lt; Input: Field to allocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical flag that determines if a single block should be allocated, or all blocks.
        logical :: single_block
        type (field2dReal), pointer :: f_cursor
 
@@ -699,9 +806,21 @@
 
    end subroutine mpas_allocate_scratch_field2d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_allocate_scratch_field3d_real
+!
+!&gt; \brief   MPAS 3D Scratch real allocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a 3D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_allocate_scratch_field3d_real(f, single_block_in)!{{{
-       type (field3dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field3dReal), pointer :: f !&lt; Input: Field to allocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical flag that determines if a single block should be allocated, or all blocks.
        logical :: single_block
        type (field3dReal), pointer :: f_cursor
 
@@ -731,9 +850,21 @@
 
    end subroutine mpas_allocate_scratch_field3d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_allocate_scratch_field4D_real
+!
+!&gt; \brief   MPAS 4D Scratch real allocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a 4D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_allocate_scratch_field4d_real(f, single_block_in)!{{{
-       type (field4dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field4dReal), pointer :: f !&lt; Input: Field to allocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical flag that determines if a single block should be allocated, or all blocks.
        logical :: single_block
        type (field4dReal), pointer :: f_cursor
 
@@ -763,9 +894,21 @@
 
    end subroutine mpas_allocate_scratch_field4d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_allocate_scratch_field5D_real
+!
+!&gt; \brief   MPAS 5D Scratch real allocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a 5D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_allocate_scratch_field5d_real(f, single_block_in)!{{{
-       type (field5dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field5dReal), pointer :: f !&lt; Input: Field to allocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical flag that determines if a single block should be allocated, or all blocks.
        logical :: single_block
        type (field5dReal), pointer :: f_cursor
 
@@ -795,9 +938,21 @@
 
    end subroutine mpas_allocate_scratch_field5d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_allocate_scratch_field1D_char
+!
+!&gt; \brief   MPAS 1D Scratch character deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine allocates a 1D scratch character field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_allocate_scratch_field1d_char(f, single_block_in)!{{{
-       type (field1dChar), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field1dChar), pointer :: f !&lt; Input: Field to allocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical flag that determines if a single block should be allocated, or all blocks.
        logical :: single_block
        type (field1dChar), pointer :: f_cursor
 
@@ -827,9 +982,21 @@
 
    end subroutine mpas_allocate_scratch_field1d_char!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_scratch_field1D_integer
+!
+!&gt; \brief   MPAS 1D Scratch integer deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 1D scratch integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_scratch_field1d_integer(f, single_block_in)!{{{
-       type (field1dInteger), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field1dInteger), pointer :: f !&lt; Input: Field to deallocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical that determines if a single block should be deallocated, or all blocks.
        logical :: single_block
        type (field1dInteger), pointer :: f_cursor
 
@@ -860,9 +1027,21 @@
 
    end subroutine mpas_deallocate_scratch_field1d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_scratch_field2D_integer
+!
+!&gt; \brief   MPAS 2D Scratch integer deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 2D scratch integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_scratch_field2d_integer(f, single_block_in)!{{{
-       type (field2dInteger), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field2dInteger), pointer :: f !&lt; Input: Field to deallocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical that determines if a single block should be deallocated, or all blocks.
        logical :: single_block
        type (field2dInteger), pointer :: f_cursor
 
@@ -893,9 +1072,21 @@
 
    end subroutine mpas_deallocate_scratch_field2d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_scratch_field3D_integer
+!
+!&gt; \brief   MPAS 3D Scratch integer deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 3D scratch integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_scratch_field3d_integer(f, single_block_in)!{{{
-       type (field3dInteger), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field3dInteger), pointer :: f !&lt; Input: Field to deallocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical that determines if a single block should be deallocated, or all blocks.
        logical :: single_block
        type (field3dInteger), pointer :: f_cursor
 
@@ -926,9 +1117,21 @@
 
    end subroutine mpas_deallocate_scratch_field3d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_scratch_field1D_real
+!
+!&gt; \brief   MPAS 1D Scratch real deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 1D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_scratch_field1d_real(f, single_block_in)!{{{
-       type (field1dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field1dReal), pointer :: f !&lt; Input: Field to deallocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical that determines if a single block should be deallocated, or all blocks.
        logical :: single_block
        type (field1dReal), pointer :: f_cursor
 
@@ -959,9 +1162,21 @@
 
    end subroutine mpas_deallocate_scratch_field1d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_scratch_field2D_real
+!
+!&gt; \brief   MPAS 2D Scratch real deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 2D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_scratch_field2d_real(f, single_block_in)!{{{
-       type (field2dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field2dReal), pointer :: f !&lt; Input: Field to deallocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical that determines if a single block should be deallocated, or all blocks.
        logical :: single_block
        type (field2dReal), pointer :: f_cursor
 
@@ -992,9 +1207,21 @@
 
    end subroutine mpas_deallocate_scratch_field2d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_scratch_field3D_real
+!
+!&gt; \brief   MPAS 3D Scratch real deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 3D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_scratch_field3d_real(f, single_block_in)!{{{
-       type (field3dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field3dReal), pointer :: f !&lt; Input: Field to deallocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical that determines if a single block should be deallocated, or all blocks.
        logical :: single_block
        type (field3dReal), pointer :: f_cursor
 
@@ -1025,9 +1252,21 @@
 
    end subroutine mpas_deallocate_scratch_field3d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_scratch_field4D_real
+!
+!&gt; \brief   MPAS 4D Scratch real deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 4D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_scratch_field4d_real(f, single_block_in)!{{{
-       type (field4dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field4dReal), pointer :: f !&lt; Input: Field to deallocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical that determines if a single block should be deallocated, or all blocks.
        logical :: single_block
        type (field4dReal), pointer :: f_cursor
 
@@ -1058,9 +1297,21 @@
 
    end subroutine mpas_deallocate_scratch_field4d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_scratch_field5D_real
+!
+!&gt; \brief   MPAS 5D Scratch real deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 5D scratch real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_scratch_field5d_real(f, single_block_in)!{{{
-       type (field5dReal), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field5dReal), pointer :: f !&lt; Input: Field to deallocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical that determines if a single block should be deallocated, or all blocks.
        logical :: single_block
        type (field5dReal), pointer :: f_cursor
 
@@ -1091,9 +1342,21 @@
 
    end subroutine mpas_deallocate_scratch_field5d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_scratch_field1D_char
+!
+!&gt; \brief   MPAS 1D Scratch character deallocation rotuine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 1D scratch character field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_scratch_field1d_char(f, single_block_in)!{{{
-       type (field1dChar), pointer :: f
-       logical, intent(in), optional :: single_block_in
+       type (field1dChar), pointer :: f !&lt; Input: Field to deallocate
+       logical, intent(in), optional :: single_block_in !&lt; Input: Logical that determines if a single block should be deallocated, or all blocks.
        logical :: single_block
        type (field1dChar), pointer :: f_cursor
 
@@ -1124,9 +1387,20 @@
 
    end subroutine mpas_deallocate_scratch_field1d_char!}}}
 
-
+!***********************************************************************
+!
+!  routine mpas_deallocate_field0d_integer
+!
+!&gt; \brief   MPAS 0D integer deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 0D integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field0d_integer(f)!{{{
-       type (field0dInteger), pointer :: f
+       type (field0dInteger), pointer :: f !&lt; Input: Field to deallocate
        type (field0dInteger), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1148,8 +1422,20 @@
 
    end subroutine mpas_deallocate_field0d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field1D_integer
+!
+!&gt; \brief   MPAS 1D integer deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 1D integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field1d_integer(f)!{{{
-       type (field1dInteger), pointer :: f
+       type (field1dInteger), pointer :: f !&lt; Input: Field to deallocate
        type (field1dInteger), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1175,8 +1461,20 @@
 
    end subroutine mpas_deallocate_field1d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field2D_integer
+!
+!&gt; \brief   MPAS 2D integer deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 2D integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field2d_integer(f)!{{{
-       type (field2dInteger), pointer :: f
+       type (field2dInteger), pointer :: f !&lt; Input: Field to deallocate
        type (field2dInteger), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1202,8 +1500,20 @@
 
    end subroutine mpas_deallocate_field2d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field3D_integer
+!
+!&gt; \brief   MPAS 3D integer deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 3D integer field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field3d_integer(f)!{{{
-       type (field3dInteger), pointer :: f
+       type (field3dInteger), pointer :: f !&lt; Input: Field to deallocate
        type (field3dInteger), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1229,8 +1539,20 @@
 
    end subroutine mpas_deallocate_field3d_integer!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field0d_real
+!
+!&gt; \brief   MPAS 0D real deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 0D real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field0d_real(f)!{{{
-       type (field0dReal), pointer :: f
+       type (field0dReal), pointer :: f !&lt; Input: Field to deallocate
        type (field0dReal), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1253,8 +1575,20 @@
 
    end subroutine mpas_deallocate_field0d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field1D_real
+!
+!&gt; \brief   MPAS 1D real deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 1D real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field1d_real(f)!{{{
-       type (field1dReal), pointer :: f
+       type (field1dReal), pointer :: f !&lt; Input: Field to deallocate
        type (field1dReal), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1280,8 +1614,20 @@
 
    end subroutine mpas_deallocate_field1d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field2D_real
+!
+!&gt; \brief   MPAS 2D real deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 2D real field.
+!
+
    subroutine mpas_deallocate_field2d_real(f)!{{{
-       type (field2dReal), pointer :: f
+       type (field2dReal), pointer :: f !&lt; Input: Field to deallocate
        type (field2dReal), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1307,8 +1653,20 @@
 
    end subroutine mpas_deallocate_field2d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field3D_real
+!
+!&gt; \brief   MPAS 3D real deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 3D real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field3d_real(f)!{{{
-       type (field3dReal), pointer :: f
+       type (field3dReal), pointer :: f !&lt; Input: Field to deallocate
        type (field3dReal), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1334,8 +1692,20 @@
 
    end subroutine mpas_deallocate_field3d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field4D_real
+!
+!&gt; \brief   MPAS 4D real deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 4D real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field4d_real(f)!{{{
-       type (field4dReal), pointer :: f
+       type (field4dReal), pointer :: f !&lt; Input: Field to deallocate
        type (field4dReal), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1361,8 +1731,20 @@
 
    end subroutine mpas_deallocate_field4d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field5D_real
+!
+!&gt; \brief   MPAS 5D real deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 5D real field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field5d_real(f)!{{{
-       type (field5dReal), pointer :: f
+       type (field5dReal), pointer :: f !&lt; Input: Field to deallocate
        type (field5dReal), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1388,8 +1770,20 @@
 
    end subroutine mpas_deallocate_field5d_real!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field0D_char
+!
+!&gt; \brief   MPAS 0D character deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 0D character field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field0d_char(f)!{{{
-       type (field0dChar), pointer :: f
+       type (field0dChar), pointer :: f !&lt; Input: Field to deallocate
        type (field0dChar), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1411,8 +1805,20 @@
 
    end subroutine mpas_deallocate_field0d_char!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_field1D_char
+!
+!&gt; \brief   MPAS 1D character deallocation routine.
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a 1D character field.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_field1d_char(f)!{{{
-       type (field1dChar), pointer :: f
+       type (field1dChar), pointer :: f !&lt; Input: Field to deallocate
        type (field1dChar), pointer :: f_cursor
 
        f_cursor =&gt; f
@@ -1438,16 +1844,29 @@
 
    end subroutine mpas_deallocate_field1d_char!}}}
 
+!***********************************************************************
+!
+!  routine mpas_deallocate_block
+!
+!&gt; \brief   MPAS Block deallocation routine
+!&gt; \author  Doug Jacobsen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This routine deallocates a block structure.
+!
+!-----------------------------------------------------------------------
    subroutine mpas_deallocate_block(b)!{{{
  
       implicit none
 
-      type (block_type), intent(inout) :: b
+      type (block_type), intent(inout) :: b !&lt; Input/Output: Block to be deallocated.
 
       integer :: i
 
       ! BUG: It seems like we should be deallocating the exchange lists before we 
       !      deallocate the array of head pointers and the parinfo type...
+      !      It also seems like these deallocations should happen with mpas_dmpar_destroy_multihalo_exchange_list
 
       deallocate(b % parinfo % cellsToSend)
       deallocate(b % parinfo % cellsToRecv)

Modified: branches/history_attribute/src/framework/streams.c
===================================================================
--- branches/history_attribute/src/framework/streams.c        2013-04-12 16:07:24 UTC (rev 2742)
+++ branches/history_attribute/src/framework/streams.c        2013-04-13 02:00:46 UTC (rev 2743)
@@ -34,14 +34,14 @@
                    return;
            }
    } else {
-           sprintf(fname, &quot;/dev/null&quot;, *id);
+           sprintf(fname, &quot;/dev/null&quot;);
            fd_err = open(fname,O_CREAT|O_WRONLY|O_TRUNC,0644);
            if (dup2(fd_err, 2) &lt; 0) {
                    printf(&quot;Error duplicating STDERR</font>
<font color="red">&quot;);
                    return;
            }
 
-           sprintf(fname, &quot;/dev/null&quot;, *id);
+           sprintf(fname, &quot;/dev/null&quot;);
            fd_out = open(fname,O_CREAT|O_WRONLY|O_TRUNC,0644);
            if (dup2(fd_out, 1) &lt; 0) {
                    printf(&quot;Error duplicating STDOUT</font>
<font color="gray">&quot;);

Modified: branches/history_attribute/src/operators/mpas_spline_interpolation.F
===================================================================
--- branches/history_attribute/src/operators/mpas_spline_interpolation.F        2013-04-12 16:07:24 UTC (rev 2742)
+++ branches/history_attribute/src/operators/mpas_spline_interpolation.F        2013-04-13 02:00:46 UTC (rev 2743)
@@ -1,3 +1,15 @@
+!***********************************************************************
+!
+!  mpas_spline_interpolation
+!
+!&gt; \brief   MPAS Vector reconstruction module
+!&gt; \author  Mark Petersen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt; This module provides routines for performing spline interpolation.
+!
+!-----------------------------------------------------------------------
 module mpas_spline_interpolation
 
   use mpas_kind_types
@@ -13,44 +25,42 @@
               mpas_interpolate_linear, &amp;
               mpas_test_interpolate
 
-! Short Descriptions:
-
-!   mpas_cubic_spline_coefficients: Compute second derivatives at nodes.  
-!      This must be run before any of the other cubic spine functions.
-
-!   mpas_interpolate_cubic_spline: Compute cubic spline interpolation. 
-
-!   mpas_integrate_cubic_spline:  Compute a single integral from spline data.
-
-!   mpas_integrate_column_cubic_spline:  Compute multiple integrals from spline data.
-
-!   mpas_interpolate_linear:  Compute linear interpolation.
-
-!   mpas_test_interpolate:  Test spline interpolation subroutines.
-
   contains
 
- subroutine mpas_cubic_spline_coefficients(x,y,n,y2ndDer)  
+!***********************************************************************
+!
+!  routine mpas_cubic_spline_coefficients
+!
+!&gt; \brief   MPAS Cubic spline coefficients routine
+!&gt; \author  Mark Petersen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt;  This routine computes second derivatives at nodes.  
+!&gt;  This must be run before any of the other cubic spine functions.
+!&gt;
+!&gt;  Given arrays x(1:n) and y(1:n) containing a function,
+!&gt;  i.e., y(i) = f(x(i)), with x monotonically increasing
+!&gt;  this routine returns an array y2ndDer(1:n) that contains 
+!&gt;  the second derivatives of the interpolating function at x(1:n). 
+!&gt;  This routine uses boundary conditions for a natural spline, 
+!&gt;  with zero second derivative on that boundary.
+!
+!-----------------------------------------------------------------------
+ subroutine mpas_cubic_spline_coefficients(x,y,n,y2ndDer)  !{{{
 
-!  Given arrays x(1:n) and y(1:n) containing a function,
-!  i.e., y(i) = f(x(i)), with x monotonically increasing
-!  this routine returns an array y2ndDer(1:n) that contains 
-!  the second derivatives of the interpolating function at x(1:n). 
-!  This routine uses boundary conditions for a natural spline, 
-!  with zero second derivative on that boundary.
-
 ! INPUT PARAMETERS:
 
   integer, intent(in) :: &amp;
-    n     ! number of nodes
+    n     !&lt; Input: number of nodes
   real(kind=RKIND), intent(in), dimension(n) :: &amp;
-    x,   &amp;! location of nodes
-    y     ! value at nodes
+    x,   &amp;!&lt; Input: location of nodes
+    y     !&lt; Input: value at nodes
 
 ! OUTPUT PARAMETERS:
 
   real(kind=RKIND), intent(out), dimension(n) :: &amp;
-    y2ndDer    ! dy^2/dx^2 at each node
+    y2ndDer    !&lt; Output: dy^2/dx^2 at each node
 
 !  local variables:
 
@@ -75,39 +85,48 @@
       y2ndDer(i)=y2ndDer(i)*y2ndDer(i+1)+a(i)  
    enddo
 
-  end subroutine mpas_cubic_spline_coefficients
+  end subroutine mpas_cubic_spline_coefficients!}}}
 
-
-  subroutine mpas_interpolate_cubic_spline( &amp;
+!***********************************************************************
+!
+!  routine mpas_interpolate_cubic_spline
+!
+!&gt; \brief   MPAS Cubic spline interpolation routine
+!&gt; \author  Mark Petersen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt;  Given the arrays x(1:n) and y(1:n), which tabulate a function,
+!&gt;  and given the array y2ndDer(1:n), which is the output from 
+!&gt;  CubicSplineCoefficients above, this routine returns the 
+!&gt;  cubic-spline interpolated values of yOut(1:nOut) at xOut(1:nOut).
+!&gt;  This subroutine assumes that both x and xOut are monotonically
+!&gt;  increasing, and that all values of xOut are within the first and
+!&gt;  last values of x.
+!
+!-----------------------------------------------------------------------
+  subroutine mpas_interpolate_cubic_spline( &amp;!{{{
                 x,y,y2ndDer,n, &amp;
                 xOut,yOut,nOut)  
 
-!  Given the arrays x(1:n) and y(1:n), which tabulate a function,
-!  and given the array y2ndDer(1:n), which is the output from 
-!  CubicSplineCoefficients above, this routine returns the 
-!  cubic-spline interpolated values of yOut(1:nOut) at xOut(1:nOut).
-!  This subroutine assumes that both x and xOut are monotonically
-!  increasing, and that all values of xOut are within the first and
-!  last values of x.
-
 ! INPUT PARAMETERS:
 
   real (kind=RKIND), dimension(n), intent(in) :: &amp;
-    x,         &amp;! node location, input grid
-    y,       &amp;! interpolation variable, input grid
-    y2ndDer     ! 2nd derivative of y at nodes
+    x,         &amp;!&lt; Input: node location, input grid
+    y,       &amp;!&lt; Input: interpolation variable, input grid
+    y2ndDer     !&lt; Input: 2nd derivative of y at nodes
 
   real (kind=RKIND), dimension(nOut), intent(in) :: &amp;
-    xOut          ! node location, output grid
+    xOut          !&lt; Input: node location, output grid
 
   integer, intent(in) :: &amp;
-    n,      &amp;! number of nodes, input grid
-    nOut       ! number of nodes, output grid
+    n,      &amp;!&lt; Input: number of nodes, input grid
+    nOut       !&lt; Input: number of nodes, output grid
 
 ! OUTPUT PARAMETERS:
 
   real (kind=RKIND), dimension(nOut), intent(out) :: &amp;
-    yOut        ! interpolation variable, output grid
+    yOut        !&lt; Output: interpolation variable, output grid
 
 !  local variables:
 
@@ -139,34 +158,43 @@
   
   enddo kInLoop
 
-end subroutine mpas_interpolate_cubic_spline
+end subroutine mpas_interpolate_cubic_spline!}}}
 
+!***********************************************************************
+!
+!  routine mpas_integrate_cubic_spline
+!
+!&gt; \brief   MPAS Cubic spline integration routine
+!&gt; \author  Mark Petersen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt;  Given the arrays x(1:n) and y(1:n), which tabulate a function,
+!&gt;  and given the array y2ndDer(1:n), which is the output from 
+!&gt;  CubicSplineCoefficients above, this routine returns y_integral,
+!&gt;  the integral of y from x1 to x2.  The integration formula was 
+!&gt;  created by analytically integrating a cubic spline between each node.
+!&gt;  This subroutine assumes that x is monotonically increasing, and
+!&gt;  that x1 &lt; x2.
+!
+!-----------------------------------------------------------------------
+subroutine mpas_integrate_cubic_spline(x,y,y2ndDer,n,x1,x2,y_integral)  !{{{
 
-subroutine mpas_integrate_cubic_spline(x,y,y2ndDer,n,x1,x2,y_integral)  
-
-!  Given the arrays x(1:n) and y(1:n), which tabulate a function,
-!  and given the array y2ndDer(1:n), which is the output from 
-!  CubicSplineCoefficients above, this routine returns y_integral,
-!  the integral of y from x1 to x2.  The integration formula was 
-!  created by analytically integrating a cubic spline between each node.
-!  This subroutine assumes that x is monotonically increasing, and
-!  that x1 &lt; x2.
-
 ! INPUT PARAMETERS:
 
   integer, intent(in) :: &amp;
-    n     ! number of nodes
+    n     !&lt; Input: number of nodes
   real(kind=RKIND), intent(in), dimension(n) :: &amp;
-    x,   &amp;! location of nodes
-    y,   &amp;! value at nodes
-    y2ndDer    ! dy^2/dx^2 at each node
+    x,   &amp;!&lt; Input: location of nodes
+    y,   &amp;!&lt; Input: value at nodes
+    y2ndDer    !&lt; Input: dy^2/dx^2 at each node
   real(kind=RKIND), intent(in) :: &amp;
-    x1,x2 ! limits of integration
+    x1,x2 !&lt; Input: limits of integration
 
 ! OUTPUT PARAMETERS:
 
   real(kind=RKIND), intent(out) :: &amp;
-    y_integral  ! integral of y
+    y_integral  !&lt; Output: integral of y
 
 !  local variables:
   
@@ -215,40 +243,49 @@
 
   enddo ! j
 
-  end subroutine mpas_integrate_cubic_spline
+  end subroutine mpas_integrate_cubic_spline!}}}
 
-
-  subroutine mpas_integrate_column_cubic_spline( &amp;
+!***********************************************************************
+!
+!  routine mpas_integrate_column_cubic_spline
+!
+!&gt; \brief   MPAS Cubic spline column integration routine
+!&gt; \author  Mark Petersen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt;  Given the arrays x(1:n) and y(1:n), which tabulate a function,
+!&gt;  and given the array y2ndDer(1:n), which is the output from 
+!&gt;  CubicSplineCoefficients above, this routine returns 
+!&gt;  y_integral(1:nOut), the integral of y.
+!&gt;  This is a cumulative integration, so that
+!&gt;  y_integral(j) holds the integral of y from x(1) to xOut(j).
+!&gt;  The integration formula was created by analytically integrating a 
+!&gt;  cubic spline between each node.
+!&gt;  This subroutine assumes that both x and xOut are monotonically
+!&gt;  increasing, and that all values of xOut are within the first and
+!
+!-----------------------------------------------------------------------
+  subroutine mpas_integrate_column_cubic_spline( &amp;!{{{
                x,y,y2ndDer,n, &amp;
                xOut,y_integral, nOut)  
 
-!  Given the arrays x(1:n) and y(1:n), which tabulate a function,
-!  and given the array y2ndDer(1:n), which is the output from 
-!  CubicSplineCoefficients above, this routine returns 
-!  y_integral(1:nOut), the integral of y.
-!  This is a cumulative integration, so that
-!  y_integral(j) holds the integral of y from x(1) to xOut(j).
-!  The integration formula was created by analytically integrating a 
-!  cubic spline between each node.
-!  This subroutine assumes that both x and xOut are monotonically
-!  increasing, and that all values of xOut are within the first and
-
 ! INPUT PARAMETERS:
 
   integer, intent(in) :: &amp;
-    n,   &amp;! number of nodes
-    nOut  ! number of output locations to compute integral
+    n,   &amp;!&lt; Input: number of nodes
+    nOut  !&lt; Input: number of output locations to compute integral
   real(kind=RKIND), intent(in), dimension(n) :: &amp;
-    x,   &amp;! location of nodes
-    y,   &amp;! value at nodes
-    y2ndDer    ! dy^2/dx^2 at each node
+    x,   &amp;!&lt; Input: location of nodes
+    y,   &amp;!&lt; Input: value at nodes
+    y2ndDer    !&lt; Input: dy^2/dx^2 at each node
   real(kind=RKIND), dimension(nOut), intent(in) :: &amp;
-    xOut  ! output locations to compute integral
+    xOut  !&lt; Input: output locations to compute integral
 
 ! OUTPUT PARAMETERS:
 
   real(kind=RKIND), dimension(nOut), intent(out) :: &amp;
-    y_integral  ! integral from 0 to xOut
+    y_integral  !&lt; Output: integral from 0 to xOut
 
 !  local variables:
 
@@ -295,37 +332,47 @@
 
   enddo k_loop
 
- end subroutine mpas_integrate_column_cubic_spline
+ end subroutine mpas_integrate_column_cubic_spline!}}}
 
-
- subroutine mpas_interpolate_linear( &amp;
+!***********************************************************************
+!
+!  routine mpas_interpolate_linear
+!
+!&gt; \brief   MPAS Linear interpolation routine
+!&gt; \author  Mark Petersen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt;  Given the arrays x(1:n) and y(1:n), which tabulate a function,
+!&gt;  this routine returns the linear interpolated values of yOut(1:nOut)
+!&gt;  at xOut(1:nOut).
+!&gt;  This subroutine assumes that both x and xOut are monotonically
+!&gt;  increasing, and that all values of xOut are within the first and
+!&gt;  last values of x.
+!
+!-----------------------------------------------------------------------
+ subroutine mpas_interpolate_linear( &amp;!{{{
                 x,y,n, &amp;
                 xOut,yOut,nOut)  
 
-!  Given the arrays x(1:n) and y(1:n), which tabulate a function,
-!  this routine returns the linear interpolated values of yOut(1:nOut)
-!  at xOut(1:nOut).
-!  This subroutine assumes that both x and xOut are monotonically
-!  increasing, and that all values of xOut are within the first and
-!  last values of x.
 
 ! !INPUT PARAMETERS:
 
   real (kind=RKIND), dimension(n), intent(in) :: &amp;
-    x,         &amp;! node location, input grid
-    y         ! interpolation variable, input grid
+    x,         &amp;!&lt; Input: node location, input grid
+    y         !&lt; Input: interpolation variable, input grid
 
   real (kind=RKIND), dimension(nOut), intent(in) :: &amp;
-    xOut          ! node location, output grid
+    xOut          !&lt; Input: node location, output grid
 
   integer, intent(in) :: &amp;
-    N,      &amp;! number of nodes, input grid
-    NOut       ! number of nodes, output grid
+    N,      &amp;!&lt; Input: number of nodes, input grid
+    NOut       !&lt; Input: number of nodes, output grid
 
 ! !OUTPUT PARAMETERS:
 
   real (kind=RKIND), dimension(nOut), intent(out) :: &amp;
-    yOut        ! interpolation variable, output grid
+    yOut        !&lt; Output: interpolation variable, output grid
 
 !-----------------------------------------------------------------------
 !
@@ -355,13 +402,22 @@
   
   enddo kInLoop
 
-  end subroutine mpas_interpolate_linear
+  end subroutine mpas_interpolate_linear!}}}
 
+!***********************************************************************
+!
+!  routine mpas_test_interpolate
+!
+!&gt; \brief   MPAS Interpolation test routine
+!&gt; \author  Mark Petersen
+!&gt; \date    04/02/13
+!&gt; \version SVN:$Id$
+!&gt; \details 
+!&gt;  Test routine to show how to operate the cubic spline subroutines
+!
+!-----------------------------------------------------------------------
+  subroutine mpas_test_interpolate!{{{
 
-  subroutine mpas_test_interpolate
-
-!  Test function to show how to operate the cubic spline subroutines
-
   integer, parameter :: &amp;
     n = 10
   real (kind=RKIND), dimension(n) :: &amp;
@@ -426,7 +482,7 @@
    print '(a,100f8.4,a)', 'yOut = [',yOut,'];'
    print *, &quot;plot(x,y,'-*r',xOut,yOut,'x')&quot;
 
-  end subroutine mpas_test_interpolate
+  end subroutine mpas_test_interpolate!}}}
 
 end module mpas_spline_interpolation
 

</font>
</pre>