<p><b>dwj07@fsu.edu</b> 2011-10-27 15:01:20 -0600 (Thu, 27 Oct 2011)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Adding some optimizations.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_coriolis.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_coriolis.F        2011-10-27 18:44:03 UTC (rev 1154)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_coriolis.F        2011-10-27 21:01:20 UTC (rev 1155)
@@ -112,7 +112,7 @@
integer :: j, k
integer :: cell1, cell2, nEdgesSolve, iEdge, eoe
- real (kind=RKIND) :: workpv, q
+ real (kind=RKIND) :: workpv, q, invLength
err = 0
@@ -131,6 +131,8 @@
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
+ invLength = 1.0 / dcEdge(iEdgE)
+
do k=1,maxLevelEdgeTop(iEdge)
q = 0.0
@@ -140,7 +142,7 @@
q = q + weightsOnEdge(j,iEdge) * u(k,eoe) * workpv * h_edge(k,eoe)
end do
- tend(k,iEdge) = tend(k,iEdge) + edgeMask(k, iEdge) * (q - ( ke(k,cell2) - ke(k,cell1) ) / dcEdge(iEdge))
+ tend(k,iEdge) = tend(k,iEdge) + edgeMask(k, iEdge) * (q - ( ke(k,cell2) - ke(k,cell1) ) * invLength )
end do
end do
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_forcing_bottomdrag.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_forcing_bottomdrag.F        2011-10-27 18:44:03 UTC (rev 1154)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_forcing_bottomdrag.F        2011-10-27 21:01:20 UTC (rev 1155)
@@ -42,7 +42,7 @@
!
!--------------------------------------------------------------------
- logical :: bottomDragOn
+ integer :: bottomDragOn
real (kind=RKIND) :: bottomDragCoef
@@ -182,10 +182,10 @@
err = 0
- bottomDragOn = .false.
+ bottomDragOn = 0
if (.not.config_implicit_vertical_mix) then
- bottomDragOn = .true.
+ bottomDragOn = 1
bottomDragCoef = config_bottom_drag_coeff
endif
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_forcing_windstress.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_forcing_windstress.F        2011-10-27 18:44:03 UTC (rev 1154)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_forcing_windstress.F        2011-10-27 21:01:20 UTC (rev 1155)
@@ -42,7 +42,7 @@
!
!--------------------------------------------------------------------
- logical :: windStressOn
+ integer :: windStressOn
real (kind=RKIND) :: rho_ref
@@ -171,13 +171,11 @@
integer, intent(out) :: err !< Output: error flag
-
- windStressOn = .true.
+ windStressOn = 1
rho_ref = 1000.0
err = 0
-
!--------------------------------------------------------------------
end subroutine ocn_vel_forcing_windstress_init!}}}
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_hmix_del2.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_hmix_del2.F        2011-10-27 18:44:03 UTC (rev 1154)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_hmix_del2.F        2011-10-27 21:01:20 UTC (rev 1155)
@@ -42,8 +42,7 @@
!
!--------------------------------------------------------------------
- logical :: &
- hmixDel2On !< local flag to determine whether del2 chosen
+ integer :: hmixDel2On !< integer flag to determine whether del2 chosen
real (kind=RKIND) :: &
eddyVisc2, &!< base eddy diffusivity for Laplacian
@@ -117,7 +116,7 @@
integer, dimension(:), pointer :: maxLevelEdgeTop
integer, dimension(:,:), pointer :: cellsOnEdge, verticesOnEdge, edgeMask
- real (kind=RKIND) :: u_diffusion
+ real (kind=RKIND) :: u_diffusion, invLength1, invLength2
real (kind=RKIND), dimension(:), pointer :: meshScalingDel2, &
dcEdge, dvEdge
@@ -146,15 +145,18 @@
vertex1 = verticesOnEdge(1,iEdge)
vertex2 = verticesOnEdge(2,iEdge)
+ invLength1 = 1.0 / dcEdge(iEdge)
+ invLength2 = 1.0 / dvEdge(iEdge)
+
do k=1,maxLevelEdgeTop(iEdge)
! Here -( vorticity(k,vertex2) - vorticity(k,vertex1) ) / dvEdge(iEdge)
! is - </font>
<font color="black">abla vorticity pointing from vertex 2 to vertex 1, or equivalently
! + k \times </font>
<font color="gray">abla vorticity pointing from cell1 to cell2.
- u_diffusion = ( divergence(k,cell2) - divergence(k,cell1) ) / dcEdge(iEdge) &
+ u_diffusion = ( divergence(k,cell2) - divergence(k,cell1) ) * invLength1 &
-viscVortCoef &
- *( vorticity(k,vertex2) - vorticity(k,vertex1) ) / dvEdge(iEdge)
+ *( vorticity(k,vertex2) - vorticity(k,vertex1) ) * invLength2
u_diffusion = meshScalingDel2(iEdge) * eddyVisc2 * u_diffusion
@@ -194,10 +196,10 @@
err = 0
- hmixDel2On = .false.
+ hmixDel2On = 0
if ( config_h_mom_eddy_visc2 > 0.0 ) then
- hmixDel2On = .true.
+ hmixDel2On = 1
eddyVisc2 = config_h_mom_eddy_visc2
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_pressure_grad.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_pressure_grad.F        2011-10-27 18:44:03 UTC (rev 1154)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_pressure_grad.F        2011-10-27 21:01:20 UTC (rev 1155)
@@ -106,6 +106,7 @@
integer, dimension(:,:), pointer :: cellsOnEdge, edgeMask
real (kind=RKIND), dimension(:), pointer :: dcEdge
+ real (kind=RKIND) :: invdcEdge
err = 0
@@ -115,28 +116,20 @@
dcEdge => grid % dcEdge % array
edgeMask => grid % edgeMask % array
-! dwj: 10/25/2011 - Need to explore isopycnal vs zlevel flags
- if (config_vert_grid_type.eq.'isopycnal') then
- do iEdge=1,nEdgesSolve
- cell1 = cellsOnEdge(1,iEdge)
- cell2 = cellsOnEdge(2,iEdge)
- do k=1,maxLevelEdgeTop(iEdge)
- tend(k,iEdge) = tend(k,iEdge) - edgeMask(k, iEdge) * ((pressure(k,cell2) - pressure(k,cell1))/dcEdge(iEdge))
- end do
- enddo
- elseif (config_vert_grid_type.eq.'zlevel') then
- do iEdge=1,nEdgesSolve
- cell1 = cellsOnEdge(1,iEdge)
- cell2 = cellsOnEdge(2,iEdge)
- do k=1,maxLevelEdgeTop(iEdge)
+! dwj: 10/25/2011 - Need to explore isopycnal vs zlevel flags
+ do iEdge=1,nEdgesSolve
+ cell1 = cellsOnEdge(1,iEdge)
+ cell2 = cellsOnEdge(2,iEdge)
- tend(k,iEdge) = tend(k,iEdge) - edgeMask(k,iEdge) * rho0Inv*( pressure(k,cell2) - pressure(k,cell1) )/dcEdge(iEdge)
- end do
+ invdcEdge = 1.0 / dcEdge(iEdge)
+ do k=1,maxLevelEdgeTop(iEdge)
- enddo
- endif
+ tend(k,iEdge) = tend(k,iEdge) - edgeMask(k,iEdge) * rho0Inv*( pressure(k,cell2) - pressure(k,cell1) ) * invdcEdge
+ end do
+ enddo
+
!--------------------------------------------------------------------
end subroutine ocn_vel_pressure_grad_tend!}}}
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_vadv.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_vadv.F        2011-10-27 18:44:03 UTC (rev 1154)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_vadv.F        2011-10-27 21:01:20 UTC (rev 1155)
@@ -43,7 +43,7 @@
!
!--------------------------------------------------------------------
- logical :: velVadvOn
+ integer :: velVadvOn
!***********************************************************************
@@ -177,10 +177,10 @@
integer, intent(out) :: err !< Output: error flag
err = 0
- velVadvOn = .false.
+ velVadvOn = 0
if (config_vert_grid_type.eq.'zlevel') then
- velVadvOn = .true.
+ velVadvOn = 1
end if
!--------------------------------------------------------------------
</font>
</pre>