<p><b>dwj07@fsu.edu</b> 2011-08-30 14:37:08 -0600 (Tue, 30 Aug 2011)</p><p><br>
        Fixing a bug in HmixVelDel4 module.<br>
<br>
        Also fusing some loops, and replacing divisions with multiplications.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/performance/mpas/src/core_ocean/module_OcnHmixVelDel4.F
===================================================================
--- branches/ocean_projects/performance/mpas/src/core_ocean/module_OcnHmixVelDel4.F        2011-08-30 20:18:32 UTC (rev 966)
+++ branches/ocean_projects/performance/mpas/src/core_ocean/module_OcnHmixVelDel4.F        2011-08-30 20:37:08 UTC (rev 967)
@@ -112,7 +112,8 @@
nVertLevels ! array sizes
real (kind=RKIND) :: &
- invArea1, invArea2, &! reciprocal of cell areas
+ invAreaCell1, invAreaCell2, &! reciprocal of cell areas
+ invAreaTri1, invAreaTri2, &! reciprocal of triangle areas
invLength1, invLength2, &! reciprocal of dv and dc edge
flux ! flux across edge
@@ -174,6 +175,10 @@
!
!-----------------------------------------------------------------
+ delsq_u(:,:) = 0.d0
+ delsq_vorticity(:,:) = 0.0
+ delsq_divergence(:,:) = 0.d0
+
do iEdge=1,nEdges
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
@@ -192,51 +197,37 @@
vorticity(k,vertex1)) * invLength2
end do
- do k=maxLevelEdgeTop(iEdge)+1,nVertLevels
- delsq_u(:,:) = 0.d0
- end do
-
end do
- !***
- !*** vorticity using </font>
<font color="red">abla^2 u
- !***
- delsq_vorticity(:,:) = 0.0
-
do iEdge=1,nEdges
-
vertex1 = verticesOnEdge(1,iEdge)
vertex2 = verticesOnEdge(2,iEdge)
- invArea1 = 1.d0 / areaTriangle(vertex1)
- invArea2 = 1.d0 / areaTriangle(vertex2)
+ invAreaTri1 = 1.d0 / areaTriangle(vertex1)
+ invAreaTri2 = 1.d0 / areaTriangle(vertex2)
+ cell1 = cellsOnEdge(1,iEdge)
+ cell2 = cellsOnEdge(2,iEdge)
+ invAreaCell1 = 1.d0 / areaCell(cell1)
+ invAreaCell2 = 1.d0 / areaCell(cell2)
+
do k=1,maxLevelEdgeTop(iEdge)
+ !***
+ !*** vorticity using </font>
<font color="red">abla^2 u
+ !***
delsq_vorticity(k,vertex1) = delsq_vorticity(k,vertex1) &
- - dcEdge(iEdge) * delsq_u(k,iEdge) * invArea1
+ - dcEdge(iEdge) * delsq_u(k,iEdge) * invAreaTri1
delsq_vorticity(k,vertex2) = delsq_vorticity(k,vertex2) &
- + dcEdge(iEdge) * delsq_u(k,iEdge) * invArea2
- end do
- end do
+ + dcEdge(iEdge) * delsq_u(k,iEdge) * invAreaTri2
- !***
- !*** Divergence using </font>
<font color="red">abla^2 u
- !***
- delsq_divergence(:,:) = 0.d0
-
- do iEdge=1,nEdges
-
- cell1 = cellsOnEdge(1,iEdge)
- cell2 = cellsOnEdge(2,iEdge)
- invArea1 = 1.d0 / areaCell(cell1)
- invArea2 = 1.d0 / areaCell(cell2)
-
- do k=1,maxLevelEdgeTop(iEdge)
+ !***
+ !*** Divergence using </font>
<font color="red">abla^2 u
+ !***
delsq_divergence(k,cell1) = delsq_divergence(k,cell1) &
- + delsq_u(k,iEdge)*dvEdge(iEdge)*invArea1
+ + delsq_u(k,iEdge)*dvEdge(iEdge)*invAreaCell1
delsq_divergence(k,cell2) = delsq_divergence(k,cell2) &
- - delsq_u(k,iEdge)*dvEdge(iEdge)*invArea2
+ - delsq_u(k,iEdge)*dvEdge(iEdge)*invAreaCell2
end do
end do
</font>
</pre>