<p><b>dwj07@fsu.edu</b> 2012-01-20 15:12:31 -0700 (Fri, 20 Jan 2012)</p><p><br>
        -- BRANCH COMMIT --<br>
        <br>
        Working version of standard 2nd order vertical advection.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv2.F
===================================================================
--- branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv2.F        2012-01-20 20:43:50 UTC (rev 1402)
+++ branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv2.F        2012-01-20 22:12:31 UTC (rev 1403)
@@ -38,11 +38,13 @@
! real (kind=RKIND), dimension( s_old % num_tracers, grid % nVertLevels + 1 ) :: vert_flux
real (kind=RKIND), dimension(:,:), allocatable :: vert_flux
integer :: nVertLevels, num_tracers
+ integer, dimension(:), pointer :: maxLevelCell
integer, parameter :: hadv_opt = 2
nVertLevels = grid % nVertLevels
num_tracers = size(tracers, dim=1)
+ maxLevelCell => grid % maxLevelCell % array
allocate(vert_flux(num_tracers, nVertLevels+1))
@@ -53,17 +55,19 @@
! zero fluxes at top and bottom
vert_flux(:,1) = 0.
- vert_flux(:,grid % nVertLevels+1) = 0.
do iCell=1,grid % nCellsSolve
- do k = 2, nVertLevels
+ do k = 2, maxLevelCell(iCell)
do iTracer=1,num_tracers
- vert_flux(iTracer,k) = w(k,iCell)*(zWeightDown(k)*tracers(iTracer,k,iCell)+zWeightUp(k)*tracers(iTracer,k-1,iCell))
+ vert_flux(iTracer,k) = w(k,iCell)*(zWeightUp(k)*tracers(iTracer,k,iCell)+zWeightDown(k)*tracers(iTracer,k-1,iCell))
end do
end do
- do k=1,grid % nVertLevelsSolve
+
+ vert_flux(:,maxLevelCell(iCell)+1) = 0
+
+ do k=1,maxLevelCell(iCell)
do iTracer=1,num_tracers
- tend(iTracer, k, iCell) = tend(iTracer, k, iCell) - ( vert_flux(iTracer, k+1) - vert_flux(iTracer, k)) / zDistance(k)
+ tend(iTracer, k, iCell) = tend(iTracer, k, iCell) + ( vert_flux(iTracer, k+1) - vert_flux(iTracer, k))
! tracers(iTracer,k,iCell) = ( tracers(iTracer,k,iCell)*h_old(k,iCell) &
! + dt*( tracer_tend(iTracer,k,iCell) -rdnw(k)*(vert_flux(iTracer,k+1)-vert_flux(iTracer,k)) ) )/h_new(k,iCell)
end do
</font>
</pre>