<p><b>mpetersen@lanl.gov</b> 2010-05-04 21:51:01 -0600 (Tue, 04 May 2010)</p><p>Added upwind tracer advection to z-level branch.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/Registry
===================================================================
--- branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/Registry        2010-05-05 00:32:23 UTC (rev 247)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/Registry        2010-05-05 03:51:01 UTC (rev 248)
@@ -19,6 +19,8 @@
namelist real hmix config_hor_diffusion 2000.0
namelist real vmix config_vert_viscosity 2.5e-4
namelist real vmix config_vert_diffusion 2.5e-5
+namelist character advection config_hor_tracer_adv 'centered'
+namelist character advection config_vert_tracer_adv 'centered'
#
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-05 00:32:23 UTC (rev 247)
+++ branches/ocean_projects/z_level_mrp/mpas/src/core_ocean/module_time_integration.F        2010-05-05 03:51:01 UTC (rev 248)
@@ -588,7 +588,7 @@
type (grid_state), intent(in) :: s
type (grid_meta), intent(in) :: grid
- integer :: iCell, iEdge, k, iTracer, cell1, cell2, &
+ integer :: iCell, iEdge, k, iTracer, cell1, cell2, upwindCell,&
nEdges, nCells, nVertLevels
real (kind=RKIND) :: flux, tracer_edge, r, &
Tmid(num_tracers,grid % nVertLevels)
@@ -626,7 +626,9 @@
! Horizontal advection of tracers
tend_tr(:,:,:) = 0.0
- do iEdge=1,nEdges
+ if (config_hor_tracer_adv.eq.'centered') then
+
+ do iEdge=1,nEdges
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
if (cell1 > 0 .and. cell2 > 0) then
@@ -641,9 +643,33 @@
end do
end do
end if
- end do
+ end do
+ elseif (config_hor_tracer_adv.eq.'upwind') then
+ do iEdge=1,nEdges
+ cell1 = cellsOnEdge(1,iEdge)
+ cell2 = cellsOnEdge(2,iEdge)
+ if (cell1 > 0 .and. cell2 > 0) then
+ do k=1,nVertLevels
+ if (u(k,iEdge)>0.0) then
+ upwindCell = cell1
+ else
+ upwindCell = cell2
+ endif
+ do iTracer=1,num_tracers
+ flux = u(k,iEdge) * dvEdge(iEdge) * h_edge(k,iEdge) &
+ * tracers(iTracer,k,upwindCell)
+ tend_tr(iTracer,k,cell1) = tend_tr(iTracer,k,cell1) - flux
+ tend_tr(iTracer,k,cell2) = tend_tr(iTracer,k,cell2) + flux
+ end do
+ end do
+ end if
+ end do
+
+ endif
+
+
! mrp 100409 computation of h tendency was, only had div.(huT) term
!do iCell=1,grid % nCellsSolve
! do k=1,grid % nVertLevelsSolve
@@ -662,13 +688,30 @@
! For now, Tmid is just the average of the upper and lower points.
! Can use a fancier interpolation later.
! change nVertLevels to KMT later
- do k=1,nVertLevels-1
+ if (config_vert_tracer_adv.eq.'centered') then
+
+ do k=1,nVertLevels-1
do iTracer=1,num_tracers
Tmid(iTracer,k) = ( tracers(iTracer,k ,iCell) &
+ tracers(iTracer,k+1,iCell))/2.0
end do
- end do
+ end do
+
+ elseif (config_vert_tracer_adv.eq.'upwind') then
+ do k=1,nVertLevels-1
+ if (Fv(k,iCell)>0.0) then
+ upwindCell = k+1
+ else
+ upwindCell = k
+ 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.
! Keep separate now for clarity.
do k=1,grid % nVertLevelsSolve
</font>
</pre>