<p><b>dwj07@fsu.edu</b> 2011-11-16 10:49:12 -0700 (Wed, 16 Nov 2011)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Merging trunk to branch, to fix un-initialized memory. As well as memory leak.<br>
</p><hr noshade><pre><font color="gray">
Property changes on: branches/ocean_projects/performance/src/core_ocean
___________________________________________________________________
Added: svn:mergeinfo
   + /branches/ocean_projects/imp_vert_mix_mrp/src/core_ocean:754-986
/branches/ocean_projects/split_explicit_timestepping/src/core_ocean:1044-1097
/branches/ocean_projects/vert_adv_mrp/src/core_ocean:704-745
/branches/source_renaming/src/core_ocean:1082-1113
/branches/time_manager/src/core_ocean:924-962
/trunk/mpas/src/core_ocean:1109-1199

Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_hmix_del4.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_hmix_del4.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_hmix_del4.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -18,6 +18,7 @@
 
    use mpas_grid_types
    use mpas_configure
+   use mpas_timer
 
    implicit none
    private
@@ -44,7 +45,7 @@
    !
    !--------------------------------------------------------------------
 
-   integer :: Del4On
+   logical :: Del4On
 
    real (kind=RKIND) :: eddyDiff4
 
@@ -110,10 +111,12 @@
       integer :: iEdge, nEdges, num_tracers, nVertLevels, nCells
       integer :: iTracer, k, iCell, cell1, cell2
 
+      integer, dimension(:,:), allocatable :: boundaryMask
+
       integer, dimension(:), pointer :: maxLevelEdgeTop, maxLevelCell
-      integer, dimension(:,:), pointer :: edgeMask, cellsOnEdge
+      integer, dimension(:,:), pointer :: boundaryEdge, cellsOnEdge
 
-      real (kind=RKIND) :: invAreaCell1, invAreaCell2, tracer_turb_flux, flux, r_tmp
+      real (kind=RKIND) :: invAreaCell1, invAreaCell2, r, tracer_turb_flux, flux
 
       real (kind=RKIND), dimension(:,:,:), allocatable :: delsq_tracer
 
@@ -132,6 +135,8 @@
 
       if (.not.Del4On) return
 
+      call mpas_timer_start(&quot;compute_scalar_tend-horiz diff 4&quot;)
+
       nEdges = grid % nEdges
       nCells = grid % nCells
       num_tracers = size(tracers, dim=1)
@@ -139,7 +144,7 @@
 
       maxLevelEdgeTop =&gt; grid % maxLevelEdgeTop % array
       maxLevelCell =&gt; grid % maxLevelCell % array
-      edgeMask =&gt; grid % edgeMask % array
+      boundaryEdge =&gt; grid % boundaryEdge % array
       cellsOnEdge =&gt; grid % cellsOnEdge % array
 
       dcEdge =&gt; grid % dcEdge % array
@@ -147,6 +152,10 @@
       areaCell =&gt; grid % areaCell % array
       meshScalingDel4 =&gt; grid % meshScalingDel4 % array
 
+      allocate(boundaryMask(nVertLevels, nEdges+1))
+      boundaryMask = 1.0
+      where(boundaryEdge.eq.1) boundaryMask=0.0
+
       allocate(delsq_tracer(num_tracers,nVertLevels, nCells+1))
 
       delsq_tracer(:,:,:) = 0.
@@ -156,24 +165,29 @@
          cell1 = cellsOnEdge(1,iEdge)
          cell2 = cellsOnEdge(2,iEdge)
 
-         r_tmp = dvEdge(iEdge) / dcEdge(iEdge)
-
-         invAreaCell1 = 1.0 / areaCell(cell1)
-         invAreaCell2 = 1.0 / areaCell(cell2)
-
          do k=1,maxLevelEdgeTop(iEdge)
            do iTracer=1,num_tracers
               delsq_tracer(iTracer,k,cell1) = delsq_tracer(iTracer,k,cell1) &amp;
-                 + edgeMask(k,iEdge) * r_tmp * h_edge(k,iEdge) &amp;
-                 *(tracers(iTracer,k,cell2) - tracers(iTracer,k,cell1)) * invAreaCell1
-                   
+                 + dvEdge(iEdge)*h_edge(k,iEdge) &amp;
+                   *(tracers(iTracer,k,cell2) - tracers(iTracer,k,cell1)) &amp;
+                   /dcEdge(iEdge) * boundaryMask(k,iEdge)
               delsq_tracer(iTracer,k,cell2) = delsq_tracer(iTracer,k,cell2) &amp;
-                 - edgeMask(k,iEdge) * r_tmp * h_edge(k,iEdge) &amp;
-                 *(tracers(iTracer,k,cell2) - tracers(iTracer,k,cell1)) * invAreaCell2
+                 - dvEdge(iEdge)*h_edge(k,iEdge) &amp;
+                 *(tracers(iTracer,k,cell2) - tracers(iTracer,k,cell1)) &amp;
+                 /dcEdge(iEdge) * boundaryMask(k,iEdge)
            end do
          end do
       end do
 
+      do iCell = 1,nCells
+         r = 1.0 / areaCell(iCell)
+         do k=1,maxLevelCell(iCell)
+            do iTracer=1,num_tracers
+               delsq_tracer(iTracer,k,iCell) = delsq_tracer(iTracer,k,iCell) * r
+            end do
+         end do
+      end do
+
       ! second del2: div(h </font>
<font color="gray">abla [delsq_tracer]) at cell center
       do iEdge=1,grid % nEdges
          cell1 = grid % cellsOnEdge % array(1,iEdge)
@@ -181,21 +195,25 @@
          invAreaCell1 = 1.0 / areaCell(cell1)
          invAreaCell2 = 1.0 / areaCell(cell2)
 
-         r_tmp = meshScalingDel4(iEdge) * eddyDiff4 * dvEdge(iEdge) / dcEdge(iEdge)
-
          do k=1,maxLevelEdgeTop(iEdge)
             do iTracer=1,num_tracers
-               tracer_turb_flux = delsq_tracer(iTracer,k,cell2) - delsq_tracer(iTracer,k,cell1)
-               flux = tracer_turb_flux * edgeMask(k,iEdge) * r_tmp
+               tracer_turb_flux = meshScalingDel4(iEdge) * eddyDiff4 &amp;
+                  *(  delsq_tracer(iTracer,k,cell2)  &amp;
+                    - delsq_tracer(iTracer,k,cell1))/dcEdge(iEdge)
+               flux = dvEdge (iEdge) * tracer_turb_flux
 
-               tend(iTracer,k,cell1) = tend(iTracer,k,cell1) - flux * invAreaCell1
-               tend(iTracer,k,cell2) = tend(iTracer,k,cell2) + flux * invAreaCell2
+               tend(iTracer,k,cell1) = tend(iTracer,k,cell1) &amp; 
+                  - flux * invAreaCell1 * boundaryMask(k,iEdge)
+               tend(iTracer,k,cell2) = tend(iTracer,k,cell2) &amp;
+                  + flux * invAreaCell2 * boundaryMask(k,iEdge)
 
             enddo
          enddo
       end do
 
       deallocate(delsq_tracer)
+      deallocate(boundaryMask)
+      call mpas_timer_stop(&quot;compute_scalar_tend-horiz diff 4&quot;)
    !--------------------------------------------------------------------
 
    end subroutine ocn_tracer_hmix_del4_tend!}}}
@@ -227,10 +245,10 @@
       integer, intent(out) :: err !&lt; Output: error flag
 
       err = 0
-      Del4on = 0
+      Del4on = .false.
 
       if ( config_h_tracer_eddy_diff4 &gt; 0.0 ) then
-          Del4On = 1
+          Del4On = .true.
           eddyDiff4 = config_h_tracer_eddy_diff4
       endif
 

Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -163,6 +163,8 @@
 
       integer :: err1, err2
 
+      err = 0
+
       splineOn = .false.
 
       if(config_vert_tracer_adv.eq.'spline') then

Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline2.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline2.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline2.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -16,6 +16,7 @@
 
    use mpas_grid_types
    use mpas_configure
+   use mpas_timer
 
    implicit none
    private
@@ -42,7 +43,7 @@
    !
    !--------------------------------------------------------------------
 
-   integer :: spline2On
+   logical :: spline2On
 
 
 !***********************************************************************
@@ -124,6 +125,8 @@
       if(.not.spline2On) return
       ! Compute tracerTop using linear interpolation.
 
+      call mpas_timer_start(&quot;compute_scalar_tend-vert adv spline 2&quot;)
+
       nCells = grid % nCells
       nCellsSolve = grid % nCellsSolve
       nVertLevels = grid % nVertLevels
@@ -136,6 +139,7 @@
       allocate(tracerTop(num_tracers,nVertLevels+1,nCells))
 
       do iCell=1,nCellsSolve 
+         tracerTop(:,1,iCell) = tracers(:,1,iCell) 
          do k=2,maxLevelCell(iCell)
             do iTracer=1,num_tracers
                ! Note hRatio on the k side is multiplied by tracer at k-1
@@ -145,6 +149,7 @@
                   + hRatioZLevelKm1(k)*tracers(iTracer,k  ,iCell)
             end do
          end do
+         tracerTop(:,maxLevelCell(iCell)+1,iCell) = tracers(:,maxLevelCell(iCell),iCell)
       end do
 
       do iCell=1,nCellsSolve 
@@ -159,6 +164,7 @@
 
       deallocate(tracerTop)
 
+      call mpas_timer_stop(&quot;compute_scalar_tend-vert adv spline 2&quot;)
    !--------------------------------------------------------------------
 
    end subroutine ocn_tracer_vadv_spline2_tend!}}}
@@ -191,10 +197,10 @@
 
       err = 0
 
-      spline2On = 0
+      spline2On = .false.
 
       if(config_vert_tracer_adv_order.eq.2) then
-        spline2On = 1
+        spline2On = .true.
       endif
 
 

Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline3.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline3.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline3.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -16,6 +16,7 @@
 
    use mpas_grid_types
    use mpas_configure
+   use mpas_timer
    use mpas_spline_interpolation
 
    implicit none
@@ -43,7 +44,7 @@
    !
    !--------------------------------------------------------------------
 
-   integer :: spline3On
+   logical :: spline3On
 
 
 !***********************************************************************
@@ -128,6 +129,8 @@
       if(.not.spline3On) return
       ! Compute tracerTop using linear interpolation.
 
+      call mpas_timer_start(&quot;compute_scalar_tend-vert adv spline 3&quot;)
+
       nCells = grid % nCells
       nCellsSolve = grid % nCellsSolve
       nVertLevels = grid % nVertLevels
@@ -169,8 +172,9 @@
                posZMidZLevel, tracersIn, tracer2ndDer, maxLevelCell(iCell), &amp;
                posZTopZLevel, tracersOut, maxLevelCell(iCell)-1 )
 
+            tracerTop(itracer,1,iCell) = tracers(iTracer,1,iCell)
             tracerTop(iTracer,2:maxLevelCell(iCell),iCell) = tracersOut(1:maxLevelCell(iCell)-1)
-
+            tracerTop(itracer,maxLevelCell(iCell)+1,iCell) = tracers(iTracer,maxLevelCell(iCell),iCell)
          end do
       end do
 
@@ -187,6 +191,8 @@
       deallocate(tracer2ndDer)
       deallocate(tracersIn,tracersOut, posZMidZLevel, posZTopZLevel)
       deallocate(tracerTop)
+
+      call mpas_timer_stop(&quot;compute_scalar_tend-vert adv spline 3&quot;)
    !--------------------------------------------------------------------
 
    end subroutine ocn_tracer_vadv_spline3_tend!}}}
@@ -219,10 +225,10 @@
 
       err = 0
 
-      spline3On = 0
+      spline3On = .false.
 
       if(config_vert_tracer_adv_order.eq.3) then
-        spline3On = 1
+        spline3On = .true.
       endif
 
 

Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -126,8 +126,8 @@
       if(.not. stencilOn) return
 
       call ocn_tracer_vadv_stencil2_tend(grid, wTop, tracers, tend, err1)
-      call ocn_tracer_vadv_stencil3_tend(grid, wTop, tracers, tend, err1)
-      call ocn_tracer_vadv_stencil4_tend(grid, wTop, tracers, tend, err1)
+      call ocn_tracer_vadv_stencil3_tend(grid, wTop, tracers, tend, err2)
+      call ocn_tracer_vadv_stencil4_tend(grid, wTop, tracers, tend, err3)
 
       err = ior(err1, ior(err2, err3))
 

Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil2.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil2.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil2.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -16,6 +16,7 @@
 
    use mpas_grid_types
    use mpas_configure
+   use mpas_timer
 
    implicit none
    private
@@ -42,7 +43,7 @@
    !
    !--------------------------------------------------------------------
 
-   integer :: stencil2On
+   logical :: stencil2On
 
 
 !***********************************************************************
@@ -123,6 +124,9 @@
 
       if(.not. stencil2On) return
 
+
+      call mpas_timer_start(&quot;compute_scalar_tend-vert adv stencil 2&quot;)
+
       nCells = grid % nCells
       nCellsSolve = grid % nCellsSolve
       num_tracers = size(tracers, 1)
@@ -134,13 +138,15 @@
       ! Compute tracerTop using centered stencil, a simple average.
 
       do iCell=1,nCellsSolve 
+         tracerTop(:,1,iCell) = tracers(:,1,iCell)
          do k=2,maxLevelCell(iCell)
             do iTracer=1,num_tracers
                tracerTop(iTracer,k,iCell) = &amp;
                   ( tracers(iTracer,k-1,iCell) &amp;
-                   +tracers(iTracer,k  ,iCell)) * 0.5
+                   +tracers(iTracer,k  ,iCell))/2.0
             end do
          end do
+        tracerTop(:,maxLevelCell(iCell)+1,iCell) = tracers(:,maxLevelCell(iCell),iCell)
       end do
 
       do iCell=1,nCellsSolve 
@@ -154,6 +160,7 @@
       end do
 
       deallocate(tracerTop)
+      call mpas_timer_stop(&quot;compute_scalar_tend-vert adv stencil 2&quot;)
 
    !--------------------------------------------------------------------
 
@@ -188,10 +195,10 @@
       integer :: err1, err2, err3
 
       err = 0
-      stencil2On = 0
+      stencil2On = .false.
 
       if(config_vert_tracer_adv_order.eq.2) then
-          stencil2On = 1
+          stencil2On = .true.
       endif
 
 

Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil3.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil3.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil3.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -43,7 +43,7 @@
    !
    !--------------------------------------------------------------------
 
-   integer :: stencil3On
+   logical :: stencil3On
 
 
 !***********************************************************************
@@ -134,6 +134,8 @@
       hRatioZLevelK =&gt; grid % hRatioZLevelK % array
       hRatioZLevelKm1 =&gt; grid % hRatioZLevelKm1 % array
 
+      call mpas_timer_start(&quot;compute_scalar_tend-vert adv stencil 3&quot;)
+
       allocate(tracerTop(num_tracers,nVertLevels+1,nCells))
 
       ! Compute tracerTop using 3rd order stencil.  This is the same
@@ -143,6 +145,7 @@
       ! namelist, if desired.
       flux3Coef = 1.0
       do iCell=1,nCellsSolve 
+         tracerTop(:,1,iCell) = tracers(:,1,iCell)
          k=2
          do iTracer=1,num_tracers
            tracerTop(iTracer,k,iCell) = &amp;
@@ -166,6 +169,7 @@
                    hRatioZLevelK(k)  *tracers(iTracer,k-1,iCell) &amp;
                  + hRatioZLevelKm1(k)*tracers(iTracer,k  ,iCell)
             end do
+        tracerTop(:,maxLevelCell(iCell)+1,iCell) = tracers(:,maxLevelCell(iCell),iCell)
       end do
 
       do iCell=1,nCellsSolve 
@@ -179,6 +183,8 @@
       end do
 
       deallocate(tracerTop)
+      call mpas_timer_stop(&quot;compute_scalar_tend-vert adv stencil 3&quot;)
+
    !--------------------------------------------------------------------
 
    end subroutine ocn_tracer_vadv_stencil3_tend!}}}
@@ -210,10 +216,10 @@
       integer, intent(out) :: err !&lt; Output: error flag
 
       err = 0
-      stencil3On = 0
+      stencil3On = .false.
 
       if(config_vert_tracer_adv_order.eq.3) then
-          stencil3On = 1
+          stencil3On = .true.
       endif
 
 

Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil4.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil4.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil4.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -16,6 +16,7 @@
 
    use mpas_grid_types
    use mpas_configure
+   use mpas_timer
 
    implicit none
    private
@@ -42,7 +43,7 @@
    !
    !--------------------------------------------------------------------
 
-   integer :: stencil4On
+   logical :: stencil4On
 
 
 !***********************************************************************
@@ -125,6 +126,8 @@
 
       if(.not. Stencil4On) return
 
+      call mpas_timer_start(&quot;compute_scalar_tend-vert adv stencil 4&quot;)
+
       nCells = grid % nCells
       nCellsSolve = grid % nCellsSolve
       num_tracers = size(tracers, 1)
@@ -138,6 +141,7 @@
       ! Compute tracerTop using 4rd order stencil [-1 7 7 -1]
 
       do iCell=1,nCellsSolve 
+         tracerTop(:,1,iCell) = tracers(:,1,iCell)
          k=2
             do iTracer=1,num_tracers
               tracerTop(iTracer,k,iCell) = &amp;
@@ -160,6 +164,7 @@
                    hRatioZLevelK(k)  *tracers(iTracer,k-1,iCell) &amp;
                  + hRatioZLevelKm1(k)*tracers(iTracer,k  ,iCell)
             end do
+        tracerTop(:,maxLevelCell(iCell)+1,iCell) = tracers(:,maxLevelCell(iCell),iCell)
       end do
 
       do iCell=1,nCellsSolve 
@@ -173,6 +178,8 @@
       end do
 
       deallocate(tracerTop)
+      call mpas_timer_stop(&quot;compute_scalar_tend-vert adv stencil 4&quot;)
+
    !--------------------------------------------------------------------
 
    end subroutine ocn_tracer_vadv_stencil4_tend!}}}
@@ -204,10 +211,10 @@
       integer, intent(out) :: err !&lt; Output: error flag
 
       err = 0
-      stencil4On = 0
+      stencil4On = .false.
 
       if(config_vert_tracer_adv_order.eq.4) then
-          stencil4On = 1
+          stencil4On = .true.
       endif
 
 

Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_vadv.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_vadv.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_vadv.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -124,7 +124,7 @@
       edgeMask =&gt; grid % edgeMask % array
 
       allocate(w_dudzTopEdge(nVertLevels+1))
-      w_dudzTopEdge(1) = 0.0
+      w_dudzTopEdge = 0.0
       do iEdge=1,nEdgesSolve
         cell1 = cellsOnEdge(1,iEdge)
         cell2 = cellsOnEdge(2,iEdge)

</font>
</pre>