<p><b>mpetersen@lanl.gov</b> 2011-06-10 07:09:06 -0600 (Fri, 10 Jun 2011)</p><p>Correct the initialization for normal and config_filter_btr_mode = .true..  This conducts a splitting before the first step, in module_mpas_core.F.  For config_filter_btr_mode = .true., the barotropic mode is simply filtered out.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/timesplitting_mrp/src/core_ocean/module_mpas_core.F
===================================================================
--- branches/ocean_projects/timesplitting_mrp/src/core_ocean/module_mpas_core.F        2011-06-09 20:46:23 UTC (rev 892)
+++ branches/ocean_projects/timesplitting_mrp/src/core_ocean/module_mpas_core.F        2011-06-10 13:09:06 UTC (rev 893)
@@ -26,6 +26,8 @@
 
       if (.not. config_do_restart) call setup_sw_test_case(domain)
 
+      call compute_maxLevel(domain)
+
       if (config_vert_grid_type.eq.'isopycnal') then
          print *, ' Using isopycnal coordinates'
       elseif (config_vert_grid_type.eq.'zlevel') then
@@ -37,8 +39,6 @@
          call dmpar_abort(dminfo)
       endif
 
-      call compute_maxLevel(domain)
-
       !
       ! Initialize core
       !
@@ -327,20 +327,11 @@
          hRatioZLevelKm1(k) = 0.5*hZLevel(k-1)/hMeanTopZLevel(k)
       end do
 
-! mrp delete later - probably dont need HTotZLevelEdge variable
-!      do iEdge=1,block % mesh % nEdges
-!         block % mesh % HTotZLevelEdge % array(iEdge) = 0.0
-!         do k=1,block % mesh % maxLevelEdgeTop % array(iEdge)
-!              block % mesh % HTotZLevelEdge % array(iEdge) &amp;
-!            = block % mesh % HTotZLevelEdge % array(iEdge) &amp;
-!            + block % mesh % hZLevel % array(k)
-!         enddo
-!      enddo
-
       ! mrp 110601 For now, h is the variable saved in the restart file
       ! I am computing SSH here.  In the future, could make smaller 
       ! restart files for z-Level runs by saving SSH only.
       do iCell=1,block % mesh % nCells
+
           block % state % time_levs(1) % state % ssh % array(iCell) &amp; 
         = block % state % time_levs(1) % state % h % array(1,iCell) &amp; 
         - block % mesh % hZLevel % array(1)
@@ -350,7 +341,21 @@
          ! This is only done upon start-up.
          if     (trim(config_time_integration) == 'higdon_unsplit') then
             block % state % time_levs(1) % state % uBtr % array(:) = 0.0
+
+              block % state % time_levs(1) % state % uBcl % array(:,:) &amp;
+            = block % state % time_levs(1) % state % u % array(:,:) 
+
          elseif (trim(config_time_integration) == 'higdon_split') then
+
+        if (config_filter_btr_mode) then
+      do iCell=1,block % mesh % nCells
+          block % state % time_levs(1) % state % h % array(1,iCell) &amp; 
+        = block % mesh % hZLevel % array(1)
+
+          block % state % time_levs(1) % state % ssh % array(iCell) = 0.0
+      enddo
+        endif 
+
             do iEdge=1,block % mesh % nEdges
                cell1 = block % mesh % cellsOnEdge % array(1,iEdge)
                cell2 = block % mesh % cellsOnEdge % array(2,iEdge)
@@ -371,9 +376,56 @@
                      + block % mesh % hZLevel % array(k)
                enddo
                block % state % time_levs(1) % state % uBtr % array(iEdge) = uhSum/hsum
+
+               do k=1,block % mesh % maxLevelEdgeTop % array(iEdge)
+                 block % state % time_levs(1) % state % uBcl % array(k,iEdge) &amp;
+                 = block % state % time_levs(1) % state % u % array(k,iEdge) &amp;
+                 - block % state % time_levs(1) % state % uBtr % array(iEdge)
+               enddo
+
+               do k=block % mesh % maxLevelEdgeTop % array(iEdge)+1, block % mesh % nVertLevels
+                 block % state % time_levs(1) % state % uBcl % array(k,iEdge) = 0.0
+                 block % state % time_levs(1) % state % u % array(k,iEdge) = 0.0
+               enddo
             enddo
+
+        if (config_filter_btr_mode) then
+            block % state % time_levs(1) % state % uBtr % array(:) = 0.0
+
+            block % state % time_levs(1) % state % u % array(:,:) &amp;
+          = block % state % time_levs(1) % state % uBcl % array(:,:)
+        endif 
+
          endif
 
+
+!print *, '11 u ',minval(domain % blocklist % state % time_levs(1) % state % u % array(:,1:domain % blocklist % mesh % nEdgesSolve)), &amp;
+!                maxval(domain % blocklist % state % time_levs(1) % state % u % array(:,1:domain % blocklist % mesh % nEdgesSolve))
+!print *, '11 uBtr ',minval(domain % blocklist % state % time_levs(1) % state % uBtr % array(1:domain % blocklist % mesh % nEdgesSolve)), &amp;
+!                    maxval(domain % blocklist % state % time_levs(1) % state % uBtr % array(1:domain % blocklist % mesh % nEdgesSolve))
+!print *, '11 uBcl ',minval(domain % blocklist % state % time_levs(1) % state % uBcl % array(:,1:domain % blocklist % mesh % nEdgesSolve)), &amp;
+!                    maxval(domain % blocklist % state % time_levs(1) % state % uBcl % array(:,1:domain % blocklist % mesh % nEdgesSolve))
+
+
+! mrp temp testing - is uBcl vert sum zero?
+            do iEdge=1,block % mesh % nEdges
+              uhSum = (sshEdge + block % mesh % hZLevel % array(1)) * block % state % time_levs(1) % state % uBcl % array(1,iEdge)
+              hSum  =  sshEdge + block % mesh % hZLevel % array(1)
+
+              do k=2,block % mesh % maxLevelEdgeTop % array(iEdge)
+                 uhSum = uhSum + block % mesh % hZLevel % array(k) *  block % state % time_levs(1) % state % uBcl % array(k,iEdge)
+                 hSum  =  hSum + block % mesh % hZLevel % array(k)
+              enddo
+              block % state % time_levs(1) % state % FBtr % array(iEdge) = uhSum/hSum
+
+           enddo ! iEdge
+
+!print *, 'uBcl vert sum IC',minval(block % state % time_levs(1) % state % FBtr % array(1:block % mesh % nEdgesSolve)), &amp;
+!                            maxval(block % state % time_levs(1) % state % FBtr % array(1:block % mesh % nEdgesSolve))
+
+! mrp temp testing - is uBcl vert sum zero? end
+
+
       block =&gt; block % next
 
    end do

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-06-09 20:46:23 UTC (rev 892)
+++ branches/ocean_projects/timesplitting_mrp/src/core_ocean/module_time_integration.F        2011-06-10 13:09:06 UTC (rev 893)
@@ -402,9 +402,10 @@
 
          do iEdge=1,block % mesh % nEdges
 
-              block % state % time_levs(1) % state % uBcl % array(:,iEdge) &amp;
-            = block % state % time_levs(1) % state % u % array(:,iEdge) &amp;
-            - block % state % time_levs(1) % state % uBtr % array(iEdge)
+           ! mrp delete soon
+           !   block % state % time_levs(1) % state % uBcl % array(:,iEdge) &amp;
+           ! = block % state % time_levs(1) % state % u % array(:,iEdge) &amp;
+           ! - block % state % time_levs(1) % state % uBtr % array(iEdge)
 
               block % state % time_levs(2) % state % u % array(:,iEdge) &amp;
             = block % state % time_levs(1) % state % u % array(:,iEdge)
@@ -544,15 +545,33 @@
                  !{\bf u}'_{k,n+1} = {\bf u}'_{k,n} - \Delta t {\overline {\bf G}}
                  !{\bf u}'_{k,n+1/2} = \frac{1}{2}\left({\bf u}^{'}_{k,n} +{\bf u}'_{k,n+1}\right) 
                  ! so that uBclNew is at time n+1/2
-                 block % state % time_levs(2) % state % uBcl % array(k,iEdge) &amp;
-                   = 0.5*( &amp;
-                   block % state % time_levs(1) % state % uBcl % array(k,iEdge) &amp;
-                   + uTemp(k) - dt * block % state % time_levs(1) % state % GBtrForcing % array(iEdge))
-
+                block % state % time_levs(2) % state % uBcl % array(k,iEdge) &amp;
+                  = 0.5*( &amp;
+                  block % state % time_levs(1) % state % uBcl % array(k,iEdge) &amp;
+                  + uTemp(k) - dt * block % state % time_levs(1) % state % GBtrForcing % array(iEdge))
               enddo
 
+! mrp temp testing - is uBcl vert sum zero?
+!              uhSum = (sshEdge + block % mesh % hZLevel % array(1)) * block % state % time_levs(1) % state % uBcl % array(1,iEdge)
+!              hSum  =  sshEdge + block % mesh % hZLevel % array(1)
+!              do k=2,block % mesh % maxLevelEdgeTop % array(iEdge)
+!                 uhSum = uhSum + block % mesh % hZLevel % array(k) * block % state % time_levs(1) % state % uBcl % array(k,iEdge)
+!                 hSum  =  hSum + block % mesh % hZLevel % array(k)
+!              enddo
+!              block % state % time_levs(1) % state % FBtr % array(iEdge) = uhSum/hSum
+! mrp temp testing end
+
            enddo ! iEdge
 
+! mrp temp testing - is uBcl vert sum zero?
+!print *, '12 uBcl ',minval(domain % blocklist % state % time_levs(1) % state % uBcl % array(:,1:domain % blocklist % mesh % nEdgesSolve)), &amp;
+!                    maxval(domain % blocklist % state % time_levs(1) % state % uBcl % array(:,1:domain % blocklist % mesh % nEdgesSolve))
+
+!print *, 'uBcl vert sum   ',minval(block % state % time_levs(1) % state % FBtr % array(1:block % mesh % nEdgesSolve)), &amp;
+!                            maxval(block % state % time_levs(1) % state % FBtr % array(1:block % mesh % nEdgesSolve))
+! mrp temp testing - is uBcl vert sum zero? end
+
+
            deallocate(uTemp)
 
            block =&gt; block % next
@@ -603,8 +622,6 @@
 
         if (config_filter_btr_mode) then
           block % state % time_levs(1) % state % GBtrForcing % array(:) = 0.0
-          block % state % time_levs(1) % state % ssh % array(:) = 0.0
-          block % state % time_levs(1) % state % uBtr % array(:) = 0.0
         endif
 
             do iCell=1,block % mesh % nCells
@@ -744,10 +761,6 @@
             block =&gt; domain % blocklist
             do while (associated(block))
 
-
-       ! Iterate on u two times.
-
-   
          do iEdge=1,block % mesh % nEdges 
 
                cell1 = block % mesh % cellsOnEdge % array(1,iEdge)
@@ -899,6 +912,10 @@
          end do
          ! Now can compare sshSubcycleNEW (big step using summed fluxes) with
          ! sshSubcycleOLD (individual steps to get there)
+!print *, 'ssh, by substeps',minval(block % state % time_levs(oldBtrSubcycleTime) % state % sshSubcycle % array(1:block % mesh % nCellsSolve)), &amp;
+!                            maxval(block % state % time_levs(oldBtrSubcycleTime) % state % sshSubcycle % array(1:block % mesh % nCellsSolve))
+!print *, 'ssh, by 1 step  ',minval(block % state % time_levs(newBtrSubcycleTime) % state % sshSubcycle % array(1:block % mesh % nCellsSolve)), &amp;
+!                            maxval(block % state % time_levs(newBtrSubcycleTime) % state % sshSubcycle % array(1:block % mesh % nCellsSolve))
 
          ! Correction velocity, u^{corr}:
 !u^{corr} = \left( {\overline {\bf F}} 
@@ -911,6 +928,14 @@
              ucorr_coef = 0
           endif
 
+
+!print *, 'uBtr            ',minval(block % state % time_levs(2) % state % uBtr % array(1:block % mesh % nEdges)), &amp;
+!                            maxval(block % state % time_levs(2) % state % uBtr % array(1:block % mesh % nEdges))
+!print *, 'ssh            ',minval(block % state % time_levs(2) % state % ssh % array(1:block % mesh % nEdges)), &amp;
+!                            maxval(block % state % time_levs(2) % state % ssh % array(1:block % mesh % nEdges))
+!print *, 'FBtr            ',minval(block % state % time_levs(1) % state % FBtr % array(1:block % mesh % nEdges)), &amp;
+!                            maxval(block % state % time_levs(1) % state % FBtr % array(1:block % mesh % nEdges))
+
            do iEdge=1,block % mesh % nEdges
               cell1 = block % mesh % cellsOnEdge % array(1,iEdge)
               cell2 = block % mesh % cellsOnEdge % array(2,iEdge)
@@ -935,6 +960,8 @@
             uCorr =   ucorr_coef*(( block % state % time_levs(1) % state % FBtr % array(iEdge) &amp;
                        /block % mesh % dvEdge % array(iEdge) &amp;
                       - uhSum)/hSum)
+! mrp temp for printing
+!block % state % time_levs(1) % state % GBtrForcing % array(iEdge) = uCorr
 
               ! put u^{tr}, the velocity for tracer transport, in uNew
           ! mrp 060611 not sure if boundary enforcement is needed here.  
@@ -953,9 +980,11 @@
            = block % mesh % hZLevel % array(k)
            enddo
 
-
           end do ! iEdge
 
+!print *, 'uCorr           ',minval(block % state % time_levs(1) % state % GBtrForcing % array(1:block % mesh % nEdgesSolve)), &amp;
+!                            maxval(block % state % time_levs(1) % state % GBtrForcing % array(1:block % mesh % nEdgesSolve))
+
          ! Put new SSH values in h array, for the compute_scalar_tend call below.
          do iCell=1,block % mesh % nCells 
              block % state % time_levs(2) % state % h % array(1,iCell) &amp;

</font>
</pre>