<p><b>mpetersen@lanl.gov</b> 2011-05-18 09:02:58 -0600 (Wed, 18 May 2011)</p><p>Higdon unsplit now works.  This is without baroclinic iterations.  Tracer3=1.0 and is conserved to 14 digits.  Works on hex 120km mesh and quad x3 mesh.  Tested with config_n_ts_iter=1,10,100.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/timesplitting_mrp/namelist.input.ocean
===================================================================
--- branches/ocean_projects/timesplitting_mrp/namelist.input.ocean        2011-05-17 19:25:13 UTC (rev 839)
+++ branches/ocean_projects/timesplitting_mrp/namelist.input.ocean        2011-05-18 15:02:58 UTC (rev 840)
@@ -1,16 +1,13 @@
 &amp;sw_model
    config_test_case = 0
-   config_time_integration = 'RK4'
-   config_dt = 120.0
-   config_ntimesteps = 100
+   config_time_integration = 'higdon_unsplit'
+   config_dt = 10.0
+   config_ntimesteps =100 
    config_output_interval = 100 
    config_stats_interval = 100 
 /
 
 &amp;io
-   config_input_name = grid.nc
-   config_output_name = output.nc
-   config_restart_name = restart.nc
 /
 
 &amp;restart
@@ -23,6 +20,14 @@
    config_vert_grid_type = 'zlevel'
    config_rho0 = 1000
 /
+
+&amp;timestep_higdon
+   config_n_ts_iter  =  10 
+   config_n_bcl_iter_beg =  1
+   config_n_bcl_iter_mid =  1
+   config_n_bcl_iter_end =  1
+   config_compute_tr_midstage = .true.
+/
 &amp;hmix
    config_h_mom_eddy_visc2 = 1.0e5
    config_h_mom_eddy_visc4 = 0.0
@@ -30,15 +35,15 @@
    config_h_tracer_eddy_diff4 = 0.0
 /
 &amp;vmix
-   config_vert_visc_type  = 'rich'
-   config_vert_diff_type  = 'rich'
-   config_implicit_vertical_mix = .true.
+   config_vert_visc_type  = 'const'
+   config_vert_diff_type  = 'const'
+   config_implicit_vertical_mix = .false.
    config_convective_visc       = 1.0
    config_convective_diff       = 1.0
 /
 &amp;vmix_const
-   config_vert_visc       = 2.5e-5
-   config_vert_diff       = 2.5e-5 
+   config_vert_visc  = 2.5e-5
+   config_vert_diff  = 2.5e-5 
 /
 &amp;vmix_rich
    config_bkrd_vert_visc  = 1.0e-4
@@ -57,15 +62,15 @@
    config_eos_type = 'jm'
 /
 &amp;advection
-   config_vert_tracer_adv = 'spline'
-   config_vert_tracer_adv_order = 3
+   config_vert_tracer_adv = 'stencil'
+   config_vert_tracer_adv_order = 2
    config_tracer_adv_order = 2
    config_thickness_adv_order = 2
    config_positive_definite = .false.
    config_monotonic = .false.
 /
 &amp;restore
-config_restoreTS = .false.
-config_restoreT_timescale = 90.0
-config_restoreS_timescale = 90.0
+   config_restoreTS = .false.
+   config_restoreT_timescale = 90.0
+   config_restoreS_timescale = 90.0
 /

Modified: branches/ocean_projects/timesplitting_mrp/src/core_ocean/module_time_integration.F
===================================================================
--- branches/ocean_projects/timesplitting_mrp/src/core_ocean/module_time_integration.F        2011-05-17 19:25:13 UTC (rev 839)
+++ branches/ocean_projects/timesplitting_mrp/src/core_ocean/module_time_integration.F        2011-05-18 15:02:58 UTC (rev 840)
@@ -430,13 +430,6 @@
            ! change to maxLevelCell % array(iCell) ?
            do k=1,block % mesh % nVertLevels
 
-              ! mrp 110516 efficiency note: Can we get rid of all this mult and divide
-              ! of tracers by h here?  Is it needed?
-              ! here the tracer array now has tracer*h.
-                block % state % time_levs(1) % state % tracers % array(:,k,iCell) &amp; 
-              = block % state % time_levs(1) % state % tracers % array(:,k,iCell) &amp;
-              * block % state % time_levs(1) % state % h % array(k,iCell)
-
                 block % state % time_levs(2) % state % tracers % array(:,k,iCell) &amp; 
               = block % state % time_levs(1) % state % tracers % array(:,k,iCell) 
             end do
@@ -449,9 +442,9 @@
 !print *, '2'
 
 
-      !
-      !  Begin iteration
-      !
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+      ! BEGIN large iteration loop 
+      !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       do higdon_step = 1, config_n_ts_iter
 ! ---  update halos for diagnostic variables
 
@@ -528,9 +521,9 @@
 
               do k=1,block % mesh % maxLevelEdgeTop % array(iEdge)
                  !{\bf u}'_{k,n+1} = {\bf u}'_{k,n} + \Delta t \left({\bf G}_k - {\overline {\bf G}}\right)
-                 block % state % time_levs(2) % state % uBcl % array(k,iEdge) &amp;
-                   = block % state % time_levs(1) % state % uBcl % array(k,iEdge) &amp;
-                     + dt * (G(k) - block % state % time_levs(1) % state % GBtrForcing % array(iEdge))
+                   block % state % time_levs(2) % state % uBcl % array(k,iEdge) &amp;
+                 = block % state % time_levs(1) % state % uBcl % array(k,iEdge) &amp;
+                 + dt * (G(k) - block % state % time_levs(1) % state % GBtrForcing % array(iEdge))
               enddo
            enddo
 
@@ -576,9 +569,11 @@
          do while (associated(block))
 
            do iEdge=1,block % mesh % nEdges
-               block % state % time_levs(2) % state % u % array(:,iEdge) &amp;
+               block % state % time_levs(2) % state % u    % array(:,iEdge) &amp;
              = block % state % time_levs(2) % state % uBtr % array(iEdge) &amp;
-             + block % state % time_levs(2) % state % uBcl % array(:,iEdge) 
+             + 0.5*( &amp;
+               block % state % time_levs(1) % state % uBcl % array(:,iEdge) &amp;
+             + block % state % time_levs(2) % state % uBcl % array(:,iEdge) )
 
            end do ! iEdge
 
@@ -591,7 +586,9 @@
            call compute_scalar_tend(block % tend, block % state % time_levs(2) % state , block % diagnostics, block % mesh)
 
 ! printing:
-         nCells      = block % mesh % nCells
+!         nCells      = block % mesh % nCells
+print *, 'h_tend ',minval(block % tend % h % array(1,1:nCells)),&amp;
+                   maxval(block % tend % h % array(1,1:nCells))
 print *, 'tr_tend',minval(block % tend % tracers % array(3,1,1:nCells)),&amp;
                    maxval(block % tend % tracers % array(3,1,1:nCells))
 
@@ -639,8 +636,9 @@
            do iCell=1,block % mesh % nCells
               do k=1,block % mesh % maxLevelCell % array(iCell)
                    block % state % time_levs(2) % state % tracers % array(:,k,iCell)  &amp;
-                = (block % state % time_levs(1) % state % tracers % array(:,k,iCell) &amp;
-                   + dt * block % tend % tracers % array(:,k,iCell) &amp;
+                = (  block % state % time_levs(1) % state % tracers % array(:,k,iCell) &amp;
+                   * block % state % time_levs(1) % state % h % array(k,iCell) &amp;
+                 + dt * block % tend % tracers % array(:,k,iCell) &amp;
                   ) / block % state % time_levs(2) % state % h % array(k,iCell)
               end do
            end do
@@ -652,7 +650,7 @@
          block =&gt; block % next
        end do
 
-      end do
+      end do  ! higdon_step = 1, config_n_ts_iter
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
       ! END large iteration loop 
       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -662,7 +660,7 @@
       !
       block =&gt; domain % blocklist
       do while (associated(block))
-print *, '9'
+!print *, '9'
 ! printing:
          nCells      = block % mesh % nCells
          nEdges      = block % mesh % nEdges
@@ -679,18 +677,18 @@
 !                   maxval(block % state % time_levs(1) % state % tracers % array(2,:,1:nCells))
 print *, 'unew   ',minval(block % state % time_levs(2) % state % u % array(:,1:nEdges)),&amp;
                    maxval(block % state % time_levs(2) % state % u % array(:,1:nEdges))
-print *, 'hnew   ',minval(block % state % time_levs(2) % state % h % array(:,1:nCells)),&amp;
-                   maxval(block % state % time_levs(2) % state % h % array(:,1:nCells))
+!print *, 'hnew   ',minval(block % state % time_levs(2) % state % h % array(:,1:nCells)),&amp;
+!                   maxval(block % state % time_levs(2) % state % h % array(:,1:nCells))
 print *, 'hnew1  ',minval(block % state % time_levs(2) % state % h % array(1,1:nCells)),&amp;
                    maxval(block % state % time_levs(2) % state % h % array(1,1:nCells))
 print *, 'Tnew   ',minval(block % state % time_levs(2) % state % tracers % array(1,:,1:nCells)),&amp;
                    maxval(block % state % time_levs(2) % state % tracers % array(1,:,1:nCells))
 print *, 'Snew   ',minval(block % state % time_levs(2) % state % tracers % array(2,:,1:nCells)),&amp;
                    maxval(block % state % time_levs(2) % state % tracers % array(2,:,1:nCells))
-print *, 'Tr1Old1',minval(block % state % time_levs(1) % state % tracers % array(3,1,1:nCells)),&amp;
-                   maxval(block % state % time_levs(1) % state % tracers % array(3,1,1:nCells))
-print *, 'Tr1New1',minval(block % state % time_levs(2) % state % tracers % array(3,1,1:nCells)),&amp;
-                   maxval(block % state % time_levs(2) % state % tracers % array(3,1,1:nCells))
+!print *, 'Tr1Old1',minval(block % state % time_levs(1) % state % tracers % array(3,1,1:nCells)),&amp;
+!                   maxval(block % state % time_levs(1) % state % tracers % array(3,1,1:nCells))
+!print *, 'Tr1New1',minval(block % state % time_levs(2) % state % tracers % array(3,1,1:nCells)),&amp;
+!                   maxval(block % state % time_levs(2) % state % tracers % array(3,1,1:nCells))
 !  block % state % time_levs(2) % state % tracers % array(3,1,1:nCells) = domain % dminfo % my_proc_id
 ! printing end
 
@@ -931,13 +929,11 @@
             cell2 = cellsOnEdge(2,iEdge)
             do k=1,min(1,maxLevelEdgeTop(iEdge))
                flux = u(k,iEdge) * dvEdge(iEdge) * h_edge(k,iEdge)
-! mrp temp
-              tend_h(k,cell1) = tend_h(k,cell1) - flux
+               tend_h(k,cell1) = tend_h(k,cell1) - flux
                tend_h(k,cell2) = tend_h(k,cell2) + flux
             end do
          end do
          do iCell=1,nCells
-! mrp temp
            tend_h(1,iCell) = tend_h(1,iCell) / areaCell(iCell)
          end do
 
@@ -949,11 +945,10 @@
       ! Vertical advection computed for top layer of a z grid only.
       if (config_vert_grid_type.eq.'zlevel') then
         do iCell=1,nCells
-! mrp temp
-!           tend_h(1,iCell) =   tend_h(1,iCell) + wTop(2,iCell)
+           tend_h(1,iCell) =   tend_h(1,iCell) + wTop(2,iCell)
         end do
       endif ! coordinate type
-
+   
    end subroutine compute_tend_h
 
    subroutine compute_tend_u(tend, s, d, grid)
@@ -1326,6 +1321,8 @@
    !
    ! Input: s - current model state
    !        grid - grid metadata
+   !        note: the variable s % tracers really contains the tracers, 
+   !              not tracers*h
    !
    ! Output: tend - computed scalar tendencies
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -1432,7 +1429,6 @@
                do iTracer=1,num_tracers
                   tracer_edge = 0.5 * (tracers(iTracer,k,cell1) + tracers(iTracer,k,cell2))
                   flux = u(k,iEdge) * dvEdge(iEdge) * h_edge(k,iEdge) * tracer_edge
-! mrp temp
                   tend_tr(iTracer,k,cell1) = tend_tr(iTracer,k,cell1) - flux/areaCell(cell1)
                   tend_tr(iTracer,k,cell2) = tend_tr(iTracer,k,cell2) + flux/areaCell(cell2)
                end do
@@ -1709,10 +1705,9 @@
          do iCell=1,nCellsSolve 
             do k=1,maxLevelCell(iCell)  
                do iTracer=1,num_tracers
-! mrp temp
-!                  tend_tr(iTracer,k,iCell) = tend_tr(iTracer,k,iCell) &amp;
-!                     - (   wTop(k  ,iCell)*tracerTop(iTracer,k  ,iCell) &amp;
-!                         - wTop(k+1,iCell)*tracerTop(iTracer,k+1,iCell))
+                  tend_tr(iTracer,k,iCell) = tend_tr(iTracer,k,iCell) &amp;
+                     - (   wTop(k  ,iCell)*tracerTop(iTracer,k  ,iCell) &amp;
+                         - wTop(k+1,iCell)*tracerTop(iTracer,k+1,iCell))
                end do
             end do
          end do
@@ -1742,11 +1737,6 @@
             do k=1,maxLevelEdgeTop(iEdge)
               do iTracer=1,num_tracers
                  ! \kappa_2 </font>
<font color="gray">abla \phi on edge
-! my new one:
-!                 tracer_turb_flux = config_h_tracer_eddy_diff2 &amp;
-!                    *(  tracers(iTracer,k,cell2)/h(k,cell2) &amp;
-!                      - tracers(iTracer,k,cell1)/h(k,cell1))/dcEdge(iEdge)
-! orig:
                  tracer_turb_flux = config_h_tracer_eddy_diff2 &amp;
                     *(  tracers(iTracer,k,cell2) &amp;
                       - tracers(iTracer,k,cell1))/dcEdge(iEdge)
@@ -1791,11 +1781,11 @@
               do iTracer=1,num_tracers
                  delsq_tracer(iTracer,k,cell1) = delsq_tracer(iTracer,k,cell1) &amp;
                     + dvEdge(iEdge)*h_edge(k,iEdge) &amp;
-                      *(tracers(iTracer,k,cell2)/h(k,cell2) - tracers(iTracer,k,cell1)/h(k,cell1)) &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;
                     - dvEdge(iEdge)*h_edge(k,iEdge) &amp;
-                    *(tracers(iTracer,k,cell2)/h(k,cell2) - tracers(iTracer,k,cell1)/h(k,cell1)) &amp;
+                    *(tracers(iTracer,k,cell2) - tracers(iTracer,k,cell1)) &amp;
                     /dcEdge(iEdge) * boundaryMask(k,iEdge)
               end do
             end do
@@ -1857,9 +1847,10 @@
               do iTracer=1,num_tracers
                 ! compute \kappa_v d\phi/dz
                 fluxVertTop(iTracer,k) = vertDiffTopOfCell(k,iCell) &amp;
-                   * (   tracers(iTracer,k-1,iCell)/h(k-1,iCell)    &amp;
-                       - tracers(iTracer,k  ,iCell)/h(k  ,iCell) )  &amp;
+                   * (   tracers(iTracer,k-1,iCell)    &amp;
+                       - tracers(iTracer,k  ,iCell) )  &amp;
                    * 2 / (h(k-1,iCell) + h(k,iCell))
+
               enddo
             enddo
             fluxVertTop(:,maxLevelCell(iCell)+1) = 0.0

</font>
</pre>