<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) &
/ 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) = &
- block % state % time_levs(2) % state % tracers % array(index_temperature,1,iCell) - &
- (block % state % time_levs(2) % state % tracers % array(index_temperature,1,iCell) - &
- block % mesh % temperatureRestore % array(iCell)) / (config_restore_timescale * 86400.0) * dt
- block % state % time_levs(2) % state % tracers % array(index_salinity,1,iCell) = &
- block % state % time_levs(2) % state % tracers % array(index_salinity,1,iCell) - &
- (block % state % time_levs(2) % state % tracers % array(index_salinity,1,iCell) - &
- 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,&
- 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 :: &
@@ -729,7 +715,7 @@
integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge, &
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 => grid % temperatureRestore % array(:)
+ salinityRestore => grid % salinityRestore % array(:)
+ tend_tr(index_temperature,1,:) = tend_tr(index_temperature,1,:) - &
+ h(1,:)*( tracers(index_temperature,1,:) - temperatureRestore(:) ) / (config_restore_timescale * 86400.0)
+ tend_tr(index_salinity,1,:) = tend_tr(index_salinity,1,:) - &
+ h(1,:)*( tracers(index_salinity,1,:) - salinityRestore(:) ) / (config_restore_timescale * 86400.0)
+ endif
+
!
! tracer tendency: horizontal advection term -div( h \phi u)
!
</font>
</pre>