<p><b>dwj07@fsu.edu</b> 2012-01-20 15:37:29 -0700 (Fri, 20 Jan 2012)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Working version of 4th order advection.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv4.F
===================================================================
--- branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv4.F        2012-01-20 22:15:12 UTC (rev 1404)
+++ branches/ocean_projects/advection_routines/src/operators/mpas_tracer_advection_std_vadv4.F        2012-01-20 22:37:29 UTC (rev 1405)
@@ -36,9 +36,11 @@
! 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
nVertLevels = grid % nVertLevels
num_tracers = size(tracers, dim=1)
+ maxLevelCell => grid % maxLevelCell % array
allocate(vert_flux(num_tracers, nVertLevels+1))
@@ -48,13 +50,12 @@
! zero fluxes at top and bottom
vert_flux(:,1) = 0.
- vert_flux(:,grid % nVertLevels+1) = 0.
do iCell=1,grid % nCellsSolve
k = 2
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))
enddo
do k=3,nVertLevels-1
do iTracer=1,num_tracers
@@ -63,14 +64,16 @@
end do
end do
- k = nVertLevels
+ k = 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))
enddo
- do k=1,grid % nVertLevelsSolve
+ vert_flux(:,maxLevelCell(iCell)+1) = 0.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>