<p><b>ringler@lanl.gov</b> 2010-11-27 09:47:30 -0700 (Sat, 27 Nov 2010)</p><p><br>
T and S restoring occurs after final RK4 stage.<br>
<br>
added option to scale del2 and del4 viscosity with grid spacing<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/workspace_tdr/src/core_ocean/Registry
===================================================================
--- branches/ocean_projects/workspace_tdr/src/core_ocean/Registry        2010-11-27 03:57:39 UTC (rev 632)
+++ branches/ocean_projects/workspace_tdr/src/core_ocean/Registry        2010-11-27 16:47:30 UTC (rev 633)
@@ -22,6 +22,7 @@
 namelist real      hmix     config_h_tracer_eddy_diff2  0.0
 namelist real      hmix     config_h_tracer_eddy_diff4  0.0
 namelist real      hmix     config_apvm_upwinding       0.5
+namelist logical   hmix     config_scaleVisc         false
 namelist character vmix     config_vert_visc_type    const
 namelist character vmix     config_vert_diff_type    const
 namelist real      vmix     config_vert_viscosity    2.5e-4
@@ -137,8 +138,9 @@
 var persistent integer boundaryVertex ( nVertLevels nVertices ) 0 iro boundaryVertex mesh - -
 var persistent integer boundaryCell ( nVertLevels nCells ) 0 iro boundaryCell mesh - -
 var persistent real    u_src ( nVertLevels nEdges ) 0 iro u_src mesh - -
-var persistent real    temperatureRestore ( nCells ) 0 iro temperatureRestore mesh - -
-var persistent real    salinityRestore ( nCells ) 0 iro salinityRestore mesh - -
+var persistent real    temperatureRestore ( nCells ) 0 i-o temperatureRestore mesh - -
+var persistent real    salinityRestore ( nCells ) 0 i-o salinityRestore mesh - -
+var persistent real    meshSpacing ( nCells ) 0 i-o meshSpacing mesh - -
 
 # Prognostic variables: read from input, saved in restart, and written to output
 var persistent real    u ( nVertLevels nEdges Time ) 2 iro u state - -
@@ -146,8 +148,8 @@
 var persistent real    rho ( nVertLevels nCells Time ) 2 iro rho state - -
 var persistent real    temperature ( nVertLevels nCells Time ) 2 iro temperature state tracers dynamics
 var persistent real    salinity ( nVertLevels nCells Time ) 2 iro salinity state tracers dynamics
-var persistent real    tracer1 ( nVertLevels nCells Time ) 2 ir- tracer1 state tracers testing
-var persistent real    tracer2 ( nVertLevels nCells Time ) 2 ir- tracer2 state tracers testing
+var persistent real    tracer1 ( nVertLevels nCells Time ) 2 iro tracer1 state tracers testing
+var persistent real    tracer2 ( nVertLevels nCells Time ) 2 iro tracer2 state tracers testing
 
 # Tendency variables: neither read nor written to any files
 var persistent real    tend_u ( nVertLevels nEdges Time ) 1 - u tend - -

Modified: branches/ocean_projects/workspace_tdr/src/core_ocean/module_time_integration.F
===================================================================
--- branches/ocean_projects/workspace_tdr/src/core_ocean/module_time_integration.F        2010-11-27 03:57:39 UTC (rev 632)
+++ branches/ocean_projects/workspace_tdr/src/core_ocean/module_time_integration.F        2010-11-27 16:47:30 UTC (rev 633)
@@ -71,7 +71,7 @@
       type (block_type), pointer :: block
       type (state_type) :: provis
 
-      integer :: rk_step
+      integer :: rk_step, index_temperature, index_salinity
 
       real (kind=RKIND), dimension(4) :: rk_weights, rk_substep_weights
 
@@ -230,6 +230,20 @@
                                                                      block % state % time_levs(2) % state % tracers % array(:,k,iCell)  &amp;
                                                                    / block % state % time_levs(2) % state % h % array(k,iCell)
             end do
+
+            if(config_surface_restore) then
+              index_temperature = block % state % time_levs(2) % state % index_temperature
+              index_salinity = block % state % time_levs(2) % state % index_salinity
+              block % state % time_levs(2) % state % tracers % array(index_temperature,1,iCell) =    &amp;
+                block % state % time_levs(2) % state % tracers % array(index_temperature,1,iCell) -    &amp;
+                  (block % state % time_levs(2) % state % tracers % array(index_temperature,1,iCell) -     &amp;
+                   block % mesh % temperatureRestore % array(iCell)) / (config_restore_timescale * 86400.0) * dt
+              block % state % time_levs(2) % state % tracers % array(index_salinity,1,iCell) =    &amp;
+                block % state % time_levs(2) % state % tracers % array(index_salinity,1,iCell) -    &amp;
+                  (block % state % time_levs(2) % state % tracers % array(index_salinity,1,iCell) -    &amp;
+                   block % mesh % salinityRestore % array(iCell)) / (config_restore_timescale * 86400.0) * dt
+            endif
+
          end do
 
          if (config_test_case == 1) then    ! For case 1, wind field should be fixed
@@ -272,7 +286,7 @@
         upstream_bias, wTopEdge, rho0Inv, r
       real (kind=RKIND), dimension(:), pointer :: &amp;
         h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &amp;
-        zMidZLevel, zTopZLevel 
+        zMidZLevel, zTopZLevel, meshSpacing
       real (kind=RKIND), dimension(:,:), pointer :: &amp;
         weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, pressure, &amp;
         tend_h, tend_u, circulation, vorticity, ke, ke_edge, pv_edge, &amp;
@@ -329,8 +343,9 @@
       zMidZLevel        =&gt; grid % zMidZLevel % array
       zTopZLevel        =&gt; grid % zTopZLevel % array
       maxLevelCell      =&gt; grid % maxLevelCell % array
-      maxLevelEdgeTop      =&gt; grid % maxLevelEdgeTop % array
-      maxLevelVertexBot    =&gt; grid % maxLevelVertexBot % array
+      maxLevelEdgeTop   =&gt; grid % maxLevelEdgeTop % array
+      maxLevelVertexBot =&gt; grid % maxLevelVertexBot % array
+      meshSpacing       =&gt; grid % meshSpacing % array   
 
       tend_h      =&gt; tend % h % array
       tend_u      =&gt; tend % u % array
@@ -466,10 +481,13 @@
 
                u_diffusion = ( divergence(k,cell2)  - divergence(k,cell1) ) / dcEdge(iEdge)  &amp;
                             -( vorticity(k,vertex2) - vorticity(k,vertex1) ) / dvEdge(iEdge)
-               u_diffusion = config_h_mom_eddy_visc2 * u_diffusion
 
-               tend_u(k,iEdge) = tend_u(k,iEdge) + u_diffusion
+               if(config_scaleVisc) then
+                  u_diffusion = u_diffusion*0.5*(meshSpacing(cell1)+meshSpacing(cell2))**2
+               endif
 
+               tend_u(k,iEdge) = tend_u(k,iEdge) + config_h_mom_eddy_visc2 * u_diffusion
+
             end do
          end do
       end if
@@ -558,6 +576,10 @@
                             -(  delsq_vorticity(k,vertex2) &amp;
                               - delsq_vorticity(k,vertex1) ) / dvEdge(iEdge)
  
+               if(config_scaleVisc) then
+                  u_diffusion = u_diffusion*0.5*(meshSpacing(cell1)+meshSpacing(cell2))**3
+               endif
+
                tend_u(k,iEdge) = tend_u(k,iEdge) - config_h_mom_eddy_visc4 * u_diffusion
             end do
          end do
@@ -707,7 +729,7 @@
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge, &amp;
         maxLevelCell, maxLevelEdgeTop, maxLevelVertexBot
       integer, dimension(:,:), pointer :: cellsOnEdge, boundaryCell
-      real (kind=RKIND), dimension(:), pointer :: zTopZLevel, temperatureRestore, salinityRestore
+      real (kind=RKIND), dimension(:), pointer :: zTopZLevel
       real (kind=RKIND), dimension(:,:), allocatable:: fluxVertTop, tracerTop, boundaryMask
       real (kind=RKIND), dimension(:,:,:), allocatable::tr_flux, tr_div, delsq_tracer
 
@@ -744,28 +766,12 @@
 
       deriv_two   =&gt; grid % deriv_two % array
 
-      temperatureRestore =&gt; grid % temperatureRestore % array
-      salinityRestore =&gt; grid % salinityRestore % array
-
       !
       ! initialize tracer tendency (RHS of tracer equation) to zero.
       !
       tend_tr(:,:,:) = 0.0
 
       !
-      ! include surface restore on temperature and salinity
-      !
-      if(config_surface_restore) then
-        r = 1.0 / (config_restore_timescale * 86400.0)
-        do iCell=1,nCells
-          tend_tr(s % index_temperature,1,iCell) = tend_tr(s % index_temperature,1,iCell) - &amp;
-               h(1,iCell)*(tracers(s % index_temperature,1,iCell) - temperatureRestore(iCell))*r
-          tend_tr(s % index_salinity,1,iCell) = tend_tr(s % index_salinity,1,iCell) - &amp;
-               h(1,iCell)*(tracers(s % index_salinity,1,iCell) - salinityRestore(iCell))*r
-        enddo
-      endif
-
-      !
       ! tracer tendency: horizontal advection term -div( h \phi u)
       !
       ! mrp 101115 note: in order to include flux boundary conditions, we will need to 

</font>
</pre>