<p><b>dwj07@fsu.edu</b> 2012-07-06 08:19:01 -0600 (Fri, 06 Jul 2012)</p><p><br>
        -- TRUNK COMMIT --<br>
        core_ocean only<br>
<br>
        Adding a halo update for high_order_horizontal_flux with the monotonic tracer advection code.<br>
        This addition fixes the issue with tracer_edge not being correct on halo edges.<br>
</p><hr noshade><pre><font color="gray">Modified: trunk/mpas/src/core_ocean/mpas_ocn_tracer_advection_mono.F
===================================================================
--- trunk/mpas/src/core_ocean/mpas_ocn_tracer_advection_mono.F        2012-07-03 17:40:48 UTC (rev 2009)
+++ trunk/mpas/src/core_ocean/mpas_ocn_tracer_advection_mono.F        2012-07-06 14:19:01 UTC (rev 2010)
@@ -77,6 +77,8 @@
real (kind=RKIND), parameter :: eps = 1.e-10
+ type (field2dReal), pointer :: high_order_horiz_flux_field
+
! Initialize pointers
dvEdge => grid % dvEdge % array
cellsOnEdge => grid % cellsOnEdge % array
@@ -100,6 +102,17 @@
nVertLevels = grid % nVertLevels
num_tracers = size(tracers,dim=1)
+ allocate(high_order_horiz_flux_field)
+ nullify(high_order_horiz_flux_field % next)
+ high_order_horiz_flux_field % block => grid % block
+ high_order_horiz_flux_field % sendList => grid % xEdge % sendList
+ high_order_horiz_flux_field % recvList => grid % xEdge % recvList
+ high_order_horiz_flux_field % copyList => grid % xEdge % copyList
+ high_order_horiz_flux_field % dimSizes(1) = nVertLevels
+ high_order_horiz_flux_field % dimSizes(2) = nEdges+1
+ allocate(high_order_horiz_flux_field % array(high_order_horiz_flux_field % dimSizes(1), high_order_horiz_flux_field % dimSizes(2)))
+ high_order_horiz_flux => high_order_horiz_flux_field % array
+
! allocate nCells arrays
allocate(tracer_new(nVertLevels, nCells+1))
@@ -112,7 +125,7 @@
allocate(flux_outgoing(nVertLevels, nCells+1))
! allocate nEdges arrays
- allocate(high_order_horiz_flux(nVertLevels, nEdges))
+! allocate(high_order_horiz_flux(nVertLevels, nEdges))
! allocate nVertLevels+1 and nCells arrays
allocate(high_order_vert_flux(nVertLevels+1, nCells))
@@ -192,6 +205,8 @@
end do ! i loop over nAdvCellsForEdge
end do ! iEdge loop
+ call mpas_dmpar_exch_halo_field(high_order_horiz_flux_field)
+
! low order upwind vertical flux (monotonic and diffused)
! Remove low order flux from the high order flux.
! Store left over high order flux in high_order_vert_flux array.
@@ -348,6 +363,7 @@
deallocate(flux_outgoing)
deallocate(high_order_horiz_flux)
deallocate(high_order_vert_flux)
+ deallocate(high_order_horiz_flux_field)
end subroutine mpas_ocn_tracer_advection_mono_tend!}}}
!|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
</font>
</pre>