<p><b>gaw06e@fsu.edu</b> 2011-05-28 17:34:25 -0600 (Sat, 28 May 2011)</p><p>- changed compute_scalar_tend() to use cellArea approximation at boundaryCells<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/triangle_border_swm/src/core_sw/module_time_integration.F
===================================================================
--- branches/ocean_projects/triangle_border_swm/src/core_sw/module_time_integration.F        2011-05-28 21:48:34 UTC (rev 857)
+++ branches/ocean_projects/triangle_border_swm/src/core_sw/module_time_integration.F        2011-05-28 23:34:25 UTC (rev 858)
@@ -329,7 +329,7 @@
end do
end do
do iCell=1,grid % nCellsSolve
-         if (boundaryCell(1,iCell).eq.1) then
+ if (boundaryCell(1,iCell).eq.1) then
r = 1.0 / ( areaCell(iCell) * 2.0 )
else
r = 1.0 / areaCell(iCell)
@@ -595,12 +595,22 @@
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
if (cell1 <= grid%nCells .and. cell2 <= grid%nCells) then
+ if (boundaryCell(1,cell1).eq.1) then
+ invAreaCell1 = 1.0 / ( areaCell(cell1) * 2.0 )
+ else
+ invAreaCell1 = 1.0 / areaCell(cell1)
+ end if
+ if (boundaryCell(1,cell2).eq.1) then
+ invAreaCell2 = 1.0 / ( areaCell(cell2) * 2.0 )
+ else
+ invAreaCell2 = 1.0 / areaCell(cell2)
+ end if
do k=1,grid % nVertLevels
do iTracer=1,grid % nTracers
tracer_edge = 0.5 * (tracers(iTracer,k,cell1) + tracers(iTracer,k,cell2))
flux = u(k,iEdge) * dvEdge(iEdge) * h_edge(k,iEdge) * tracer_edge
- 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)
+ tracer_tend(iTracer,k,cell1) = tracer_tend(iTracer,k,cell1) - flux * invAreaCell1
+ tracer_tend(iTracer,k,cell2) = tracer_tend(iTracer,k,cell2) + flux * invAreaCell2
end do
end do
end if
@@ -724,14 +734,21 @@
!
allocate(boundaryMask(grid % nVertLevels, grid % nEdges+1))
boundaryMask = 1.0
- where(boundaryEdge.eq.1) boundaryMask=0.0
+ where(boundaryEdge.gt.0) boundaryMask=0.0
do iEdge=1,grid % nEdges
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
- invAreaCell1 = 1.0/areaCell(cell1)
- invAreaCell2 = 1.0/areaCell(cell2)
-
+ if (boundaryCell(1,cell1).eq.1) then
+ invAreaCell1 = 1.0 / ( areaCell(cell1) * 2.0 )
+ else
+ invAreaCell1 = 1.0 / areaCell(cell1)
+ end if
+ if (boundaryCell(1,cell2).eq.1) then
+ invAreaCell2 = 1.0 / ( areaCell(cell2) * 2.0 )
+ else
+ invAreaCell2 = 1.0 / areaCell(cell2)
+ end if
do k=1,grid % nVertLevels
do iTracer=1, grid % nTracers
! \kappa_2 </font>
<font color="gray">abla \phi on edge
@@ -762,7 +779,7 @@
!
allocate(boundaryMask(grid % nVertLevels, grid % nEdges+1))
boundaryMask = 1.0
- where(boundaryEdge.eq.1) boundaryMask=0.0
+ where(boundaryEdge.gt.0) boundaryMask=0.0
allocate(delsq_tracer(grid % nTracers, grid % nVertLevels, grid % nCells+1))
@@ -785,7 +802,12 @@
end do
do iCell = 1, grid % nCells
- r = 1.0 / grid % areaCell % array(iCell)
+ if (boundaryCell(1,cell1).eq.1) then
+ r = 1.0 / ( areaCell(cell1) * 2.0 )
+ else
+ r = 1.0 / areaCell(cell1)
+ end if
+ !r = 1.0 / grid % areaCell % array(iCell)
do k=1,grid % nVertLevels
do iTracer=1,grid % nTracers
delsq_tracer(iTracer,k,iCell) = delsq_tracer(iTracer,k,iCell) * r
@@ -797,8 +819,18 @@
do iEdge=1,grid % nEdges
cell1 = grid % cellsOnEdge % array(1,iEdge)
cell2 = grid % cellsOnEdge % array(2,iEdge)
- invAreaCell1 = 1.0 / grid % areaCell % array(cell1)
- invAreaCell2 = 1.0 / grid % areaCell % array(cell2)
+ if (boundaryCell(1,cell1).eq.1) then
+ invAreaCell1 = 1.0 / ( areaCell(cell1) * 2.0 )
+ else
+ invAreaCell1 = 1.0 / areaCell(cell1)
+ end if
+ if (boundaryCell(1,cell2).eq.1) then
+ invAreaCell2 = 1.0 / ( areaCell(cell2) * 2.0 )
+ else
+ invAreaCell2 = 1.0 / areaCell(cell2)
+ end if
+ !invAreaCell1 = 1.0 / grid % areaCell % array(cell1)
+ !invAreaCell2 = 1.0 / grid % areaCell % array(cell2)
do k=1,grid % nVertLevels
do iTracer=1,grid % nTracers
</font>
</pre>