<p><b>ringler@lanl.gov</b> 2010-11-29 13:28:21 -0700 (Mon, 29 Nov 2010)</p><p><br>
corrections to surface restoring of T and S<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 16:47:30 UTC (rev 633)
+++ branches/ocean_projects/workspace_tdr/src/core_ocean/Registry        2010-11-29 20:28:21 UTC (rev 634)
@@ -138,9 +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 i-o temperatureRestore mesh - -
-var persistent real    salinityRestore ( nCells ) 0 i-o salinityRestore mesh - -
-var persistent real    meshSpacing ( nCells ) 0 i-o meshSpacing mesh - -
+var persistent real    temperatureRestore ( nCells ) 0 iro temperatureRestore mesh - -
+var persistent real    salinityRestore ( nCells ) 0 iro salinityRestore mesh - -
+var persistent real    meshSpacing ( nCells ) 0 iro 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 - -

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 16:47:30 UTC (rev 633)
+++ branches/ocean_projects/workspace_tdr/src/core_ocean/module_time_integration.F        2010-11-29 20:28:21 UTC (rev 634)
@@ -230,20 +230,6 @@
                                                                      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
@@ -714,7 +700,7 @@
       type (mesh_type), intent(in) :: grid
 
       integer :: i, k, iCell, iEdge, iTracer, cell1, cell2, upwindCell,&amp;
-        nEdges, nCells, nVertLevels, num_tracers
+        nEdges, nCells, nVertLevels, num_tracers, index_temperature, index_salinity
       real (kind=RKIND) :: invAreaCell1, invAreaCell2, tracer_turb_flux
       real (kind=RKIND) :: flux, tracer_edge, r
       real (kind=RKIND), dimension(:), pointer :: &amp;
@@ -729,7 +715,7 @@
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge, &amp;
         maxLevelCell, maxLevelEdgeTop, maxLevelVertexBot
       integer, dimension(:,:), pointer :: cellsOnEdge, boundaryCell
-      real (kind=RKIND), dimension(:), pointer :: zTopZLevel
+      real (kind=RKIND), dimension(:), pointer :: zTopZLevel, temperatureRestore, salinityRestore
       real (kind=RKIND), dimension(:,:), allocatable:: fluxVertTop, tracerTop, boundaryMask
       real (kind=RKIND), dimension(:,:,:), allocatable::tr_flux, tr_div, delsq_tracer
 
@@ -771,6 +757,18 @@
       !
       tend_tr(:,:,:) = 0.0
 
+      ! restore to surface T and S if desired
+      if(config_surface_restore) then
+        index_temperature = s % index_temperature
+        index_salinity = s % index_salinity
+        temperatureRestore =&gt; grid % temperatureRestore % array(:)
+        salinityRestore =&gt; grid % salinityRestore % array(:)
+        tend_tr(index_temperature,1,:) = tend_tr(index_temperature,1,:) - &amp;
+             h(1,:)*( tracers(index_temperature,1,:) - temperatureRestore(:) ) / (config_restore_timescale * 86400.0)
+        tend_tr(index_salinity,1,:) = tend_tr(index_salinity,1,:) - &amp;
+             h(1,:)*( tracers(index_salinity,1,:) - salinityRestore(:) ) / (config_restore_timescale * 86400.0)
+       endif
+
       !
       ! tracer tendency: horizontal advection term -div( h \phi u)
       !

</font>
</pre>