<p><b>mpetersen@lanl.gov</b> 2010-05-07 08:00:22 -0600 (Fri, 07 May 2010)</p><p>Corrected indexing error in vertical momentum advection term.<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-06 21:22:50 UTC (rev 258)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F        2010-05-07 14:00:22 UTC (rev 259)
@@ -284,7 +284,7 @@
integer :: nCells, nEdges, nVertices, nVertLevels
real (kind=RKIND) :: flux, vorticity_abs, h_vertex, workpv, q, &
- upstream_bias, wHat, areaSumInv, rho0Inv
+ upstream_bias, wHat, rho0Inv
real (kind=RKIND), dimension(:), pointer :: &
h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, zSurfaceEdge
real (kind=RKIND), dimension(grid % nVertLevels) :: w_dudz
@@ -455,19 +455,18 @@
! mrp 100422 add -w*dudz term to tendancy
! For isopycnal mode, Fv should be zero.
- areaSumInv = 1.0/(areaCell(cell1)+areaCell(cell2))
! change nvertlevels to kmt later
do k=1,nVertLevels-1
! w =Fv/h. Also average w from cell center to edge
- wHat = ( areaCell(cell1)*Fv(k,cell1)/h(k+1,cell1) &
- + areaCell(cell2)*Fv(k,cell2)/h(k+1,cell2)) &
- *areaSumInv
+ wHat = ( Fv(k,cell1)/h(k+1,cell1) &
+ + Fv(k,cell2)/h(k+1,cell2))/2.0
! compute dudz at vertical interface with first order derivative.
- w_dudz(k) = wHat * (u(k-1,iEdge)-u(k,iEdge)) &
- * 2.0 / (h_edge(k-1,iEdge) + h_edge(k,iEdge))
+ w_dudz(k) = wHat * (u(k,iEdge)-u(k+1,iEdge)) &
+ * 2.0 / (h_edge(k,iEdge) + h_edge(k+1,iEdge))
end do
w_dudz(nVertLevels) = 0.0
+ ! Average w*du/dz from vertical edges to vertical middle of cell
tend_u(1,iEdge) = - 0.5 * w_dudz(1)
do k=2,nVertLevels
tend_u(k,iEdge) = - 0.5 * (w_dudz(k-1) + w_dudz(k))
@@ -710,6 +709,19 @@
end do
end do
+ elseif (config_vert_tracer_adv.eq.'downwind') then
+
+ do k=1,nVertLevels-1
+ if (Fv(k,iCell)>0.0) then
+ upwindCell = k
+ else
+ upwindCell = k+1
+ endif
+ do iTracer=1,num_tracers
+ Tmid(iTracer,k) = tracers(iTracer,upwindCell,iCell)
+ end do
+ end do
+
endif
! The next loop could be combined with the later two for better efficiency.
</font>
</pre>