<p><b>mhecht@lanl.gov</b> 2010-06-17 13:00:55 -0600 (Thu, 17 Jun 2010)</p><p>Some use of new lateral boundary support through cellsOnEdge.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/port_adv_mwh/src/core_sw/module_time_integration.F
===================================================================
--- branches/ocean_projects/port_adv_mwh/src/core_sw/module_time_integration.F        2010-06-16 21:51:04 UTC (rev 357)
+++ branches/ocean_projects/port_adv_mwh/src/core_sw/module_time_integration.F        2010-06-17 19:00:55 UTC (rev 358)
@@ -452,8 +452,7 @@
do iEdge=1,grid % nEdges
cell1 = grid % cellsOnEdge % array(1,iEdge)
cell2 = grid % cellsOnEdge % array(2,iEdge)
- if (cell1 > 0 .and. cell2 > 0) then
-!!$ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
+ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
do k=1,grid % nVertLevels
do iTracer=1,2
tracer_edge = 0.5 * (s % tracers % array(iTracer,k,cell1) + s % tracers % array(iTracer,k,cell2))
@@ -522,8 +521,7 @@
!!$ do iEdge=1,grid % nEdges
!!$ cell1 = cellsOnEdge(1,iEdge)
!!$ cell2 = cellsOnEdge(2,iEdge)
-!!$ if (cell1 > 0 .and. cell2 > 0) then
-!!!$ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
+!!$ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
!!$ do k=1,grid % nVertLevels
!!$ do iTracer=3,grid % nTracers
!!$ tracer_edge = 0.5 * (tracer_new(iTracer,k,cell1) + tracer_new(iTracer,k,cell2))
@@ -549,8 +547,7 @@
do iEdge=1,grid%nEdges
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
- if (cell1 > 0 .and. cell2 > 0) then
-!!$ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
+ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
do k=1,grid % nVertLevels
do iTracer=3,grid % nTracers
tracer_edge = 0.5 * (tracer_new(iTracer,k,cell1) + tracer_new(iTracer,k,cell2))
@@ -567,30 +564,39 @@
do iEdge=1,grid%nEdges
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
- if (cell1 > 0 .and. cell2 > 0) then
-!!$ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
+ !-- if interior edge
+ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
+
do k=1,grid % nVertLevels
do iTracer=3,grid % nTracers
d2fdx2_cell1 = deriv_two(1,1,iEdge) * tracer_new(iTracer,k,cell1)
d2fdx2_cell2 = deriv_two(1,2,iEdge) * tracer_new(iTracer,k,cell2)
+
+ !-- all edges of cell 1
do i=1, grid % nEdgesOnCell % array (cell1)
+ !-- check neighbor, across edge i of cell 1
if ( grid % CellsOnCell % array (i,cell1) > 0) &
d2fdx2_cell1 = d2fdx2_cell1 + &
deriv_two(i+1,1,iEdge) * tracer_new(iTracer,k,grid % CellsOnCell % array (i,cell1))
end do
+
+ !-- all edges of cell 2
do i=1, grid % nEdgesOnCell % array (cell2)
+ !-- check neighbor, across edge i of cell 2?
if ( grid % CellsOnCell % array (i,cell2) > 0) &
d2fdx2_cell2 = d2fdx2_cell2 + &
deriv_two(i+1,2,iEdge) * tracer_new(iTracer,k,grid % CellsOnCell % array (i,cell2))
end do
+ !-- look one way
if (s % u % array(k,iEdge) * s % h_edge % array(k,iEdge) > 0) then
flux = dvEdge(iEdge) * s % u % array(k,iEdge) * s % h_edge % array(k,iEdge) * ( &
0.5*(tracer_new(iTracer,k,cell1) + tracer_new(iTracer,k,cell2)) &
-(dcEdge(iEdge) **2) * (d2fdx2_cell1 + d2fdx2_cell2) / 12. &
-(dcEdge(iEdge) **2) * coef_3rd_order*(d2fdx2_cell1 - d2fdx2_cell2) / 12. )
+ !-- look the other way
else
flux = dvEdge(iEdge) * s % u % array(k,iEdge) * s % h_edge % array(k,iEdge) * ( &
0.5*(tracer_new(iTracer,k,cell1) + tracer_new(iTracer,k,cell2)) &
@@ -598,6 +604,7 @@
+(dcEdge(iEdge) **2) * coef_3rd_order*(d2fdx2_cell1 - d2fdx2_cell2) / 12. )
end if
+ !-- update tendency
tracer_tend(iTracer,k,cell1) = tracer_tend(iTracer,k,cell1) - flux/areaCell(cell1)
tracer_tend(iTracer,k,cell2) = tracer_tend(iTracer,k,cell2) + flux/areaCell(cell2)
@@ -611,8 +618,7 @@
do iEdge=1,grid%nEdges
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
- if (cell1 > 0 .and. cell2 > 0) then
-!!$ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
+ if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
do k=1,grid % nVertLevels
</font>
</pre>