<p><b>duda</b> 2011-03-11 16:38:00 -0700 (Fri, 11 Mar 2011)</p><p>BRANCH COMMIT<br>
<br>
Bug fix for del4 diffusion (both for theta and momentum) when running in parallel: <br>
ensure that we compute quantities far enough into the ghost region so that subsequent<br>
computations in diffusion loops will not use outdated or garbage values.<br>
<br>
<br>
M    src/core_nhyd_atmos/module_time_integration.F<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_physics/src/core_nhyd_atmos/module_time_integration.F
===================================================================
--- branches/atmos_physics/src/core_nhyd_atmos/module_time_integration.F        2011-03-11 21:02:12 UTC (rev 756)
+++ branches/atmos_physics/src/core_nhyd_atmos/module_time_integration.F        2011-03-11 23:38:00 UTC (rev 757)
@@ -1146,8 +1146,8 @@
         cell1 = CellsOnEdge(1,iEdge)
         cell2 = CellsOnEdge(2,iEdge)
 
-        if( cell1 &lt;= nCellsSolve .or. cell2 &lt;= nCellsSolve ) then   ! If using this test, more halo exchanges will be needed
-                                                                    ! Keep for now to avoid division by zero, e.g., rho(:,cell2)
+!        if( cell1 &lt;= nCellsSolve .or. cell2 &lt;= nCellsSolve ) then   ! If using this test, more halo exchanges will be needed,
+                                                                     ! though we can avoid division by zero, e.g., by rho(:,cell2)
           do k = 1, nVertLevels
             ruAvg(k,iEdge) = ru(k,iEdge) + (ruAvg(k,iEdge) / float(ns))
 
@@ -1181,7 +1181,7 @@
             end if
           enddo
 
-        end if
+!        end if
 
       enddo
 
@@ -2309,33 +2309,25 @@
             vertex1 = verticesOnEdge(1,iEdge)
             vertex2 = verticesOnEdge(2,iEdge)
 
-            if (cell1 &lt;= nCellsSolve .or. cell2 &lt;= nCellsSolve) then
-               do k=1,nVertLevels
+            do k=1,nVertLevels
 
-                  !
-                  ! Compute diffusion, computed as </font>
<font color="black">abla divergence - k \times </font>
<font color="red">abla vorticity
-                  !                    only valid for h_mom_eddy_visc4 == constant
-                  !
-                  u_diffusion =   ( divergence(k,cell2)  - divergence(k,cell1) ) / dcEdge(iEdge)  &amp;
-                                 -( vorticity(k,vertex2) - vorticity(k,vertex1) ) / dvEdge(iEdge)
+               !
+               ! Compute diffusion, computed as </font>
<font color="black">abla divergence - k \times </font>
<font color="gray">abla vorticity
+               !                    only valid for h_mom_eddy_visc4 == constant
+               !
+               u_diffusion =   ( divergence(k,cell2)  - divergence(k,cell1) ) / dcEdge(iEdge)  &amp;
+                              -( vorticity(k,vertex2) - vorticity(k,vertex1) ) / dvEdge(iEdge)
 
-                  delsq_u(k,iEdge) = delsq_u(k,iEdge) + u_diffusion
-               end do
-            end if
+               delsq_u(k,iEdge) = delsq_u(k,iEdge) + u_diffusion
+            end do
          end do
 
          delsq_circulation(:,:) = 0.0
          do iEdge=1,nEdges
-            if (verticesOnEdge(1,iEdge) &lt;= grid%nVertices) then
                do k=1,nVertLevels
                   delsq_circulation(k,verticesOnEdge(1,iEdge)) = delsq_circulation(k,verticesOnEdge(1,iEdge)) - dcEdge(iEdge) * delsq_u(k,iEdge)
-               end do
-            end if
-            if (verticesOnEdge(2,iEdge) &lt;= grid%nVertices) then
-               do k=1,nVertLevels
                   delsq_circulation(k,verticesOnEdge(2,iEdge)) = delsq_circulation(k,verticesOnEdge(2,iEdge)) + dcEdge(iEdge) * delsq_u(k,iEdge)
                end do
-            end if
          end do
          do iVertex=1,nVertices
             r = 1.0 / areaTriangle(iVertex)
@@ -2348,16 +2340,10 @@
          do iEdge=1,nEdges
             cell1 = cellsOnEdge(1,iEdge)
             cell2 = cellsOnEdge(2,iEdge)
-            if (cell1 &lt;= nCellsSolve) then 
                do k=1,nVertLevels
                  delsq_divergence(k,cell1) = delsq_divergence(k,cell1) + delsq_u(k,iEdge)*dvEdge(iEdge)
-               end do
-            end if
-            if (cell2 &lt;= nCellsSolve) then
-               do k=1,nVertLevels
                  delsq_divergence(k,cell2) = delsq_divergence(k,cell2) - delsq_u(k,iEdge)*dvEdge(iEdge)
                end do
-            end if
          end do
          do iCell = 1,nCells
             r = 1.0 / areaCell(iCell)
@@ -2885,14 +2871,10 @@
          do iEdge=1,grid % nEdges
             cell1 = grid % cellsOnEdge % array(1,iEdge)
             cell2 = grid % cellsOnEdge % array(2,iEdge)
-            if (cell1 &lt;= nCellsSolve .or. cell2 &lt;= nCellsSolve) then
-           
-               do k=1,grid % nVertLevels
-                  delsq_theta(k,cell1) = delsq_theta(k,cell1) + dvEdge(iEdge)*rho_edge(k,iEdge)*(theta(k,cell2) - theta(k,cell1))/dcEdge(iEdge)
-                  delsq_theta(k,cell2) = delsq_theta(k,cell2) - dvEdge(iEdge)*rho_edge(k,iEdge)*(theta(k,cell2) - theta(k,cell1))/dcEdge(iEdge)
-               end do
-
-            end if
+            do k=1,grid % nVertLevels
+               delsq_theta(k,cell1) = delsq_theta(k,cell1) + dvEdge(iEdge)*rho_edge(k,iEdge)*(theta(k,cell2) - theta(k,cell1))/dcEdge(iEdge)
+               delsq_theta(k,cell2) = delsq_theta(k,cell2) - dvEdge(iEdge)*rho_edge(k,iEdge)*(theta(k,cell2) - theta(k,cell1))/dcEdge(iEdge)
+            end do
          end do
 
          do iCell = 1, nCells

</font>
</pre>