<p><b>mpetersen@lanl.gov</b> 2010-05-24 15:32:04 -0600 (Mon, 24 May 2010)</p><p>A few additional changes to vertical tracer diffusion, h d/dz( \kappa_v d\phi/dz).<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F
===================================================================
--- branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F        2010-05-24 21:00:10 UTC (rev 309)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F        2010-05-24 21:32:04 UTC (rev 310)
@@ -559,11 +559,11 @@
integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
integer, dimension(:,:), pointer :: cellsOnEdge
real (kind=RKIND), dimension(:), pointer :: &
- zMidZLevel
+ zTopZLevel
real (kind=RKIND), dimension(:,:), allocatable:: fluxVertTop, tracerTop
real (kind=RKIND), dimension(:,:,:), allocatable::tr_flux, tr_div
- real (kind=RKIND), dimension(:), allocatable:: vertDiff
+ real (kind=RKIND), dimension(:), allocatable:: vertDiffTop
u => s % u % array
h => s % h % array
@@ -579,10 +579,11 @@
cellsOnEdge => grid % cellsOnEdge % array
dvEdge => grid % dvEdge % array
dcEdge => grid % dcEdge % array
+ zTopZLevel => grid % zTopZLevel % array
+
nEdges = grid % nEdges
nCells = grid % nCells
nVertLevels = grid % nVertLevels
- zMidZLevel => grid % zMidZLevel % array
!
! tracer tendency: horizontal advection term -div( h \phi u)
@@ -736,11 +737,11 @@
deallocate(tr_flux, tr_div)
!
- ! tracer tendency: vertical mixing d/dz(h \kappa_v d\phi/dz))
+ ! tracer tendency: vertical diffusion h d/dz( \kappa_v d\phi/dz)
!
- allocate(vertDiff(nVertLevels))
+ allocate(vertDiffTop(nVertLevels))
if (config_vert_diff_type.eq.'const') then
- vertDiff = config_vert_diffusion
+ vertDiffTop = config_vert_diffusion
elseif (config_vert_diff_type.eq.'tanh') then
if (config_vert_grid_type.ne.'zlevel') then
write(0,*) 'Abort: config_vert_diff_type.eq.tanh may only', &
@@ -749,8 +750,8 @@
endif
do k=1,nVertLevels
- vertDiff(k) = -(config_vmixTanhDiffMax-config_vmixTanhDiffMin)/2.0 &
- *tanh(-(zMidZLevel(k)-config_vmixTanhZMid) &
+ vertDiffTop(k) = -(config_vmixTanhDiffMax-config_vmixTanhDiffMin)/2.0 &
+ *tanh(-(zTopZLevel(k)-config_vmixTanhZMid) &
/config_vmixTanhZWidth) &
+ (config_vmixTanhDiffMax+config_vmixTanhDiffMin)/2
enddo
@@ -765,7 +766,8 @@
do iCell=1,grid % nCellsSolve
do k=2,nVertLevels
do iTracer=1,num_tracers
- fluxVertTop(iTracer,k) = h(k,iCell)*vertDiff(k) &
+ ! compute \kappa_v d\phi/dz
+ fluxVertTop(iTracer,k) = vertDiffTop(k) &
* (tracers(iTracer,k-1,iCell) - tracers(iTracer,k,iCell) )&
/ (zMid(k-1,iCell) -zMid(k,iCell))
enddo
@@ -775,12 +777,12 @@
dist = zTop(k,iCell) - zTop(k+1,iCell)
do iTracer=1,num_tracers
tend_tr(iTracer,k,iCell) = tend_tr(iTracer,k,iCell) &
- + (fluxVertTop(iTracer,k) - fluxVertTop(iTracer,k+1))/dist
+ + h(k,iCell)*(fluxVertTop(iTracer,k) - fluxVertTop(iTracer,k+1))/dist
enddo
enddo
enddo ! iCell loop
- deallocate(fluxVertTop, vertDiff)
+ deallocate(fluxVertTop, vertDiffTop)
! print some diagnostics - for debugging
</font>
</pre>