<p><b>ringler@lanl.gov</b> 2010-12-09 20:15:31 -0700 (Thu, 09 Dec 2010)</p><p><br>
change order of operations in computation of coriolis force<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/profiling/src/core_ocean/module_time_integration.F
===================================================================
--- branches/ocean_projects/profiling/src/core_ocean/module_time_integration.F        2010-12-09 23:42:58 UTC (rev 643)
+++ branches/ocean_projects/profiling/src/core_ocean/module_time_integration.F        2010-12-10 03:15:31 UTC (rev 644)
@@ -250,6 +250,7 @@
       !
       !  A little clean up at the end: decouple new scalar fields and compute diagnostics for new state
       !
+      call timer_start(&quot;ts_rk4_cleanup&quot;)
       block =&gt; domain % blocklist
       do while (associated(block))
          do iCell=1,block % mesh % nCells
@@ -270,6 +271,7 @@
 
          block =&gt; block % next
       end do
+      call timer_stop(&quot;ts_rk4_cleanup&quot;)
 
       call deallocate_state(provis)
 
@@ -322,6 +324,7 @@
 
       real (kind=RKIND), dimension(:,:), pointer :: u_src
       real (kind=RKIND), parameter :: rho_ref = 1000.0
+      real (kind=RKIND), allocatable :: qq(:)
 
       call timer_start(&quot;ts_rk4_stage_tend_hu_pointer&quot;)
       h           =&gt; s % h % array
@@ -338,28 +341,28 @@
       MontPot     =&gt; s % MontPot % array
       pressure    =&gt; s % pressure % array
 
-      weightsOnEdge     =&gt; grid % weightsOnEdge % array
-      kiteAreasOnVertex =&gt; grid % kiteAreasOnVertex % array
-      cellsOnEdge       =&gt; grid % cellsOnEdge % array
-      cellsOnVertex     =&gt; grid % cellsOnVertex % array
-      verticesOnEdge    =&gt; grid % verticesOnEdge % array
-      nEdgesOnCell      =&gt; grid % nEdgesOnCell % array
-      edgesOnCell       =&gt; grid % edgesOnCell % array
-      nEdgesOnEdge      =&gt; grid % nEdgesOnEdge % array
-      edgesOnEdge       =&gt; grid % edgesOnEdge % array
-      edgesOnVertex     =&gt; grid % edgesOnVertex % array
-      dcEdge            =&gt; grid % dcEdge % array
-      dvEdge            =&gt; grid % dvEdge % array
-      areaCell          =&gt; grid % areaCell % array
-      areaTriangle      =&gt; grid % areaTriangle % array
-      h_s               =&gt; grid % h_s % array
-      fVertex           =&gt; grid % fVertex % array
-      fEdge             =&gt; grid % fEdge % array
-      zMidZLevel        =&gt; grid % zMidZLevel % array
-      zTopZLevel        =&gt; grid % zTopZLevel % array
-      maxLevelCell      =&gt; grid % maxLevelCell % array
-      maxLevelEdgeTop      =&gt; grid % maxLevelEdgeTop % array
-      maxLevelVertexBot    =&gt; grid % maxLevelVertexBot % array
+      weightsOnEdge       =&gt; grid % weightsOnEdge % array
+      kiteAreasOnVertex   =&gt; grid % kiteAreasOnVertex % array
+      cellsOnEdge         =&gt; grid % cellsOnEdge % array
+      cellsOnVertex       =&gt; grid % cellsOnVertex % array
+      verticesOnEdge      =&gt; grid % verticesOnEdge % array
+      nEdgesOnCell        =&gt; grid % nEdgesOnCell % array
+      edgesOnCell         =&gt; grid % edgesOnCell % array
+      nEdgesOnEdge        =&gt; grid % nEdgesOnEdge % array
+      edgesOnEdge         =&gt; grid % edgesOnEdge % array
+      edgesOnVertex       =&gt; grid % edgesOnVertex % array
+      dcEdge              =&gt; grid % dcEdge % array
+      dvEdge              =&gt; grid % dvEdge % array
+      areaCell            =&gt; grid % areaCell % array
+      areaTriangle        =&gt; grid % areaTriangle % array
+      h_s                 =&gt; grid % h_s % array
+      fVertex             =&gt; grid % fVertex % array
+      fEdge               =&gt; grid % fEdge % array
+      zMidZLevel          =&gt; grid % zMidZLevel % array
+      zTopZLevel          =&gt; grid % zTopZLevel % array
+      maxLevelCell        =&gt; grid % maxLevelCell % array
+      maxLevelEdgeTop     =&gt; grid % maxLevelEdgeTop % array
+      maxLevelVertexBot   =&gt; grid % maxLevelVertexBot % array
 
       tend_h      =&gt; tend % h % array
       tend_u      =&gt; tend % u % array
@@ -371,6 +374,7 @@
       nVertLevels = grid % nVertLevels
 
       u_src =&gt; grid % u_src % array
+      allocate(qq(nVertLevels)
 
       call timer_stop(&quot;ts_rk4_stage_tend_hu_pointer&quot;)
 
@@ -614,27 +618,54 @@
       !
       ! velocity tendency: nonlinear Coriolis term and grad of kinetic energy
       !
+  !   call timer_start(&quot;ts_rk4_stage_tend_hu_u_coriolis&quot;)
+  !   do iEdge=1,grid % nEdgesSolve
+  !      cell1 = cellsOnEdge(1,iEdge)
+  !      cell2 = cellsOnEdge(2,iEdge)
+  !
+  !      do k=1,maxLevelEdgeTop(iEdge)
+  !
+  !         q = 0.0
+  !         do j = 1,nEdgesOnEdge(iEdge)
+  !            eoe = edgesOnEdge(j,iEdge)
+  !            workpv = 0.5 * (pv_edge(k,iEdge) + pv_edge(k,eoe))
+  !            q = q + weightsOnEdge(j,iEdge) * u(k,eoe) * workpv * h_edge(k,eoe) 
+  !         end do
+  !         tend_u(k,iEdge) = tend_u(k,iEdge)     &amp;
+  !                + q     &amp;
+  !                - (   ke(k,cell2) - ke(k,cell1) ) / dcEdge(iEdge)
+  !
+  !      end do
+  !   end do
+  !   call timer_stop(&quot;ts_rk4_stage_tend_hu_u_coriolis&quot;)
+
       call timer_start(&quot;ts_rk4_stage_tend_hu_u_coriolis&quot;)
       do iEdge=1,grid % nEdgesSolve
          cell1 = cellsOnEdge(1,iEdge)
          cell2 = cellsOnEdge(2,iEdge)
 
+         qq(:) = 0.0
+         do j = 1,nEdgesOnEdge(iEdge)
+           eoe = edgesOnEdge(j,iEdge)
+
+           do k=1,maxLevelEdgeTop(iEdge)
+              workpv = 0.5 * (pv_edge(k,iEdge) + pv_edge(k,eoe))
+              qq(k) = qq(k) + weightsOnEdge(j,iEdge) * u(k,eoe) * workpv * h_edge(k,eoe)
+           enddo
+
+         end do
+
          do k=1,maxLevelEdgeTop(iEdge)
-
-            q = 0.0
-            do j = 1,nEdgesOnEdge(iEdge)
-               eoe = edgesOnEdge(j,iEdge)
-               workpv = 0.5 * (pv_edge(k,iEdge) + pv_edge(k,eoe))
-               q = q + weightsOnEdge(j,iEdge) * u(k,eoe) * workpv * h_edge(k,eoe) 
-            end do
             tend_u(k,iEdge) = tend_u(k,iEdge)     &amp;
-                   + q     &amp;
+                   + qq(k)     &amp;
                    - (   ke(k,cell2) - ke(k,cell1) ) / dcEdge(iEdge)
 
          end do
+
       end do
       call timer_stop(&quot;ts_rk4_stage_tend_hu_u_coriolis&quot;)
 
+
       !
       ! velocity tendency: forcing and bottom drag
       !
@@ -722,6 +753,8 @@
       call timer_stop(&quot;ts_rk4_stage_tend_hu_u_vmix&quot;)
       call timer_stop(&quot;ts_rk4_stage_tend_hu_u&quot;)
 
+      deallocate(qq)
+
    end subroutine compute_tend
 
 

</font>
</pre>