<p><b>dwj07@fsu.edu</b> 2011-11-16 10:49:12 -0700 (Wed, 16 Nov 2011)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Merging trunk to branch, to fix un-initialized memory. As well as memory leak.<br>
</p><hr noshade><pre><font color="gray">
Property changes on: branches/ocean_projects/performance/src/core_ocean
___________________________________________________________________
Added: svn:mergeinfo
+ /branches/ocean_projects/imp_vert_mix_mrp/src/core_ocean:754-986
/branches/ocean_projects/split_explicit_timestepping/src/core_ocean:1044-1097
/branches/ocean_projects/vert_adv_mrp/src/core_ocean:704-745
/branches/source_renaming/src/core_ocean:1082-1113
/branches/time_manager/src/core_ocean:924-962
/trunk/mpas/src/core_ocean:1109-1199
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_hmix_del4.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_hmix_del4.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_hmix_del4.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -18,6 +18,7 @@
use mpas_grid_types
use mpas_configure
+ use mpas_timer
implicit none
private
@@ -44,7 +45,7 @@
!
!--------------------------------------------------------------------
- integer :: Del4On
+ logical :: Del4On
real (kind=RKIND) :: eddyDiff4
@@ -110,10 +111,12 @@
integer :: iEdge, nEdges, num_tracers, nVertLevels, nCells
integer :: iTracer, k, iCell, cell1, cell2
+ integer, dimension(:,:), allocatable :: boundaryMask
+
integer, dimension(:), pointer :: maxLevelEdgeTop, maxLevelCell
- integer, dimension(:,:), pointer :: edgeMask, cellsOnEdge
+ integer, dimension(:,:), pointer :: boundaryEdge, cellsOnEdge
- real (kind=RKIND) :: invAreaCell1, invAreaCell2, tracer_turb_flux, flux, r_tmp
+ real (kind=RKIND) :: invAreaCell1, invAreaCell2, r, tracer_turb_flux, flux
real (kind=RKIND), dimension(:,:,:), allocatable :: delsq_tracer
@@ -132,6 +135,8 @@
if (.not.Del4On) return
+ call mpas_timer_start("compute_scalar_tend-horiz diff 4")
+
nEdges = grid % nEdges
nCells = grid % nCells
num_tracers = size(tracers, dim=1)
@@ -139,7 +144,7 @@
maxLevelEdgeTop => grid % maxLevelEdgeTop % array
maxLevelCell => grid % maxLevelCell % array
- edgeMask => grid % edgeMask % array
+ boundaryEdge => grid % boundaryEdge % array
cellsOnEdge => grid % cellsOnEdge % array
dcEdge => grid % dcEdge % array
@@ -147,6 +152,10 @@
areaCell => grid % areaCell % array
meshScalingDel4 => grid % meshScalingDel4 % array
+ allocate(boundaryMask(nVertLevels, nEdges+1))
+ boundaryMask = 1.0
+ where(boundaryEdge.eq.1) boundaryMask=0.0
+
allocate(delsq_tracer(num_tracers,nVertLevels, nCells+1))
delsq_tracer(:,:,:) = 0.
@@ -156,24 +165,29 @@
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
- r_tmp = dvEdge(iEdge) / dcEdge(iEdge)
-
- invAreaCell1 = 1.0 / areaCell(cell1)
- invAreaCell2 = 1.0 / areaCell(cell2)
-
do k=1,maxLevelEdgeTop(iEdge)
do iTracer=1,num_tracers
delsq_tracer(iTracer,k,cell1) = delsq_tracer(iTracer,k,cell1) &
- + edgeMask(k,iEdge) * r_tmp * h_edge(k,iEdge) &
- *(tracers(iTracer,k,cell2) - tracers(iTracer,k,cell1)) * invAreaCell1
-
+ + dvEdge(iEdge)*h_edge(k,iEdge) &
+ *(tracers(iTracer,k,cell2) - tracers(iTracer,k,cell1)) &
+ /dcEdge(iEdge) * boundaryMask(k,iEdge)
delsq_tracer(iTracer,k,cell2) = delsq_tracer(iTracer,k,cell2) &
- - edgeMask(k,iEdge) * r_tmp * h_edge(k,iEdge) &
- *(tracers(iTracer,k,cell2) - tracers(iTracer,k,cell1)) * invAreaCell2
+ - dvEdge(iEdge)*h_edge(k,iEdge) &
+ *(tracers(iTracer,k,cell2) - tracers(iTracer,k,cell1)) &
+ /dcEdge(iEdge) * boundaryMask(k,iEdge)
end do
end do
end do
+ do iCell = 1,nCells
+ r = 1.0 / areaCell(iCell)
+ do k=1,maxLevelCell(iCell)
+ do iTracer=1,num_tracers
+ delsq_tracer(iTracer,k,iCell) = delsq_tracer(iTracer,k,iCell) * r
+ end do
+ end do
+ end do
+
! second del2: div(h </font>
<font color="gray">abla [delsq_tracer]) at cell center
do iEdge=1,grid % nEdges
cell1 = grid % cellsOnEdge % array(1,iEdge)
@@ -181,21 +195,25 @@
invAreaCell1 = 1.0 / areaCell(cell1)
invAreaCell2 = 1.0 / areaCell(cell2)
- r_tmp = meshScalingDel4(iEdge) * eddyDiff4 * dvEdge(iEdge) / dcEdge(iEdge)
-
do k=1,maxLevelEdgeTop(iEdge)
do iTracer=1,num_tracers
- tracer_turb_flux = delsq_tracer(iTracer,k,cell2) - delsq_tracer(iTracer,k,cell1)
- flux = tracer_turb_flux * edgeMask(k,iEdge) * r_tmp
+ tracer_turb_flux = meshScalingDel4(iEdge) * eddyDiff4 &
+ *( delsq_tracer(iTracer,k,cell2) &
+ - delsq_tracer(iTracer,k,cell1))/dcEdge(iEdge)
+ flux = dvEdge (iEdge) * tracer_turb_flux
- tend(iTracer,k,cell1) = tend(iTracer,k,cell1) - flux * invAreaCell1
- tend(iTracer,k,cell2) = tend(iTracer,k,cell2) + flux * invAreaCell2
+ tend(iTracer,k,cell1) = tend(iTracer,k,cell1) &
+ - flux * invAreaCell1 * boundaryMask(k,iEdge)
+ tend(iTracer,k,cell2) = tend(iTracer,k,cell2) &
+ + flux * invAreaCell2 * boundaryMask(k,iEdge)
enddo
enddo
end do
deallocate(delsq_tracer)
+ deallocate(boundaryMask)
+ call mpas_timer_stop("compute_scalar_tend-horiz diff 4")
!--------------------------------------------------------------------
end subroutine ocn_tracer_hmix_del4_tend!}}}
@@ -227,10 +245,10 @@
integer, intent(out) :: err !< Output: error flag
err = 0
- Del4on = 0
+ Del4on = .false.
if ( config_h_tracer_eddy_diff4 > 0.0 ) then
- Del4On = 1
+ Del4On = .true.
eddyDiff4 = config_h_tracer_eddy_diff4
endif
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -163,6 +163,8 @@
integer :: err1, err2
+ err = 0
+
splineOn = .false.
if(config_vert_tracer_adv.eq.'spline') then
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline2.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline2.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline2.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -16,6 +16,7 @@
use mpas_grid_types
use mpas_configure
+ use mpas_timer
implicit none
private
@@ -42,7 +43,7 @@
!
!--------------------------------------------------------------------
- integer :: spline2On
+ logical :: spline2On
!***********************************************************************
@@ -124,6 +125,8 @@
if(.not.spline2On) return
! Compute tracerTop using linear interpolation.
+ call mpas_timer_start("compute_scalar_tend-vert adv spline 2")
+
nCells = grid % nCells
nCellsSolve = grid % nCellsSolve
nVertLevels = grid % nVertLevels
@@ -136,6 +139,7 @@
allocate(tracerTop(num_tracers,nVertLevels+1,nCells))
do iCell=1,nCellsSolve
+ tracerTop(:,1,iCell) = tracers(:,1,iCell)
do k=2,maxLevelCell(iCell)
do iTracer=1,num_tracers
! Note hRatio on the k side is multiplied by tracer at k-1
@@ -145,6 +149,7 @@
+ hRatioZLevelKm1(k)*tracers(iTracer,k ,iCell)
end do
end do
+ tracerTop(:,maxLevelCell(iCell)+1,iCell) = tracers(:,maxLevelCell(iCell),iCell)
end do
do iCell=1,nCellsSolve
@@ -159,6 +164,7 @@
deallocate(tracerTop)
+ call mpas_timer_stop("compute_scalar_tend-vert adv spline 2")
!--------------------------------------------------------------------
end subroutine ocn_tracer_vadv_spline2_tend!}}}
@@ -191,10 +197,10 @@
err = 0
- spline2On = 0
+ spline2On = .false.
if(config_vert_tracer_adv_order.eq.2) then
- spline2On = 1
+ spline2On = .true.
endif
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline3.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline3.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_spline3.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -16,6 +16,7 @@
use mpas_grid_types
use mpas_configure
+ use mpas_timer
use mpas_spline_interpolation
implicit none
@@ -43,7 +44,7 @@
!
!--------------------------------------------------------------------
- integer :: spline3On
+ logical :: spline3On
!***********************************************************************
@@ -128,6 +129,8 @@
if(.not.spline3On) return
! Compute tracerTop using linear interpolation.
+ call mpas_timer_start("compute_scalar_tend-vert adv spline 3")
+
nCells = grid % nCells
nCellsSolve = grid % nCellsSolve
nVertLevels = grid % nVertLevels
@@ -169,8 +172,9 @@
posZMidZLevel, tracersIn, tracer2ndDer, maxLevelCell(iCell), &
posZTopZLevel, tracersOut, maxLevelCell(iCell)-1 )
+ tracerTop(itracer,1,iCell) = tracers(iTracer,1,iCell)
tracerTop(iTracer,2:maxLevelCell(iCell),iCell) = tracersOut(1:maxLevelCell(iCell)-1)
-
+ tracerTop(itracer,maxLevelCell(iCell)+1,iCell) = tracers(iTracer,maxLevelCell(iCell),iCell)
end do
end do
@@ -187,6 +191,8 @@
deallocate(tracer2ndDer)
deallocate(tracersIn,tracersOut, posZMidZLevel, posZTopZLevel)
deallocate(tracerTop)
+
+ call mpas_timer_stop("compute_scalar_tend-vert adv spline 3")
!--------------------------------------------------------------------
end subroutine ocn_tracer_vadv_spline3_tend!}}}
@@ -219,10 +225,10 @@
err = 0
- spline3On = 0
+ spline3On = .false.
if(config_vert_tracer_adv_order.eq.3) then
- spline3On = 1
+ spline3On = .true.
endif
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -126,8 +126,8 @@
if(.not. stencilOn) return
call ocn_tracer_vadv_stencil2_tend(grid, wTop, tracers, tend, err1)
- call ocn_tracer_vadv_stencil3_tend(grid, wTop, tracers, tend, err1)
- call ocn_tracer_vadv_stencil4_tend(grid, wTop, tracers, tend, err1)
+ call ocn_tracer_vadv_stencil3_tend(grid, wTop, tracers, tend, err2)
+ call ocn_tracer_vadv_stencil4_tend(grid, wTop, tracers, tend, err3)
err = ior(err1, ior(err2, err3))
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil2.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil2.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil2.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -16,6 +16,7 @@
use mpas_grid_types
use mpas_configure
+ use mpas_timer
implicit none
private
@@ -42,7 +43,7 @@
!
!--------------------------------------------------------------------
- integer :: stencil2On
+ logical :: stencil2On
!***********************************************************************
@@ -123,6 +124,9 @@
if(.not. stencil2On) return
+
+ call mpas_timer_start("compute_scalar_tend-vert adv stencil 2")
+
nCells = grid % nCells
nCellsSolve = grid % nCellsSolve
num_tracers = size(tracers, 1)
@@ -134,13 +138,15 @@
! Compute tracerTop using centered stencil, a simple average.
do iCell=1,nCellsSolve
+ tracerTop(:,1,iCell) = tracers(:,1,iCell)
do k=2,maxLevelCell(iCell)
do iTracer=1,num_tracers
tracerTop(iTracer,k,iCell) = &
( tracers(iTracer,k-1,iCell) &
- +tracers(iTracer,k ,iCell)) * 0.5
+ +tracers(iTracer,k ,iCell))/2.0
end do
end do
+ tracerTop(:,maxLevelCell(iCell)+1,iCell) = tracers(:,maxLevelCell(iCell),iCell)
end do
do iCell=1,nCellsSolve
@@ -154,6 +160,7 @@
end do
deallocate(tracerTop)
+ call mpas_timer_stop("compute_scalar_tend-vert adv stencil 2")
!--------------------------------------------------------------------
@@ -188,10 +195,10 @@
integer :: err1, err2, err3
err = 0
- stencil2On = 0
+ stencil2On = .false.
if(config_vert_tracer_adv_order.eq.2) then
- stencil2On = 1
+ stencil2On = .true.
endif
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil3.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil3.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil3.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -43,7 +43,7 @@
!
!--------------------------------------------------------------------
- integer :: stencil3On
+ logical :: stencil3On
!***********************************************************************
@@ -134,6 +134,8 @@
hRatioZLevelK => grid % hRatioZLevelK % array
hRatioZLevelKm1 => grid % hRatioZLevelKm1 % array
+ call mpas_timer_start("compute_scalar_tend-vert adv stencil 3")
+
allocate(tracerTop(num_tracers,nVertLevels+1,nCells))
! Compute tracerTop using 3rd order stencil. This is the same
@@ -143,6 +145,7 @@
! namelist, if desired.
flux3Coef = 1.0
do iCell=1,nCellsSolve
+ tracerTop(:,1,iCell) = tracers(:,1,iCell)
k=2
do iTracer=1,num_tracers
tracerTop(iTracer,k,iCell) = &
@@ -166,6 +169,7 @@
hRatioZLevelK(k) *tracers(iTracer,k-1,iCell) &
+ hRatioZLevelKm1(k)*tracers(iTracer,k ,iCell)
end do
+ tracerTop(:,maxLevelCell(iCell)+1,iCell) = tracers(:,maxLevelCell(iCell),iCell)
end do
do iCell=1,nCellsSolve
@@ -179,6 +183,8 @@
end do
deallocate(tracerTop)
+ call mpas_timer_stop("compute_scalar_tend-vert adv stencil 3")
+
!--------------------------------------------------------------------
end subroutine ocn_tracer_vadv_stencil3_tend!}}}
@@ -210,10 +216,10 @@
integer, intent(out) :: err !< Output: error flag
err = 0
- stencil3On = 0
+ stencil3On = .false.
if(config_vert_tracer_adv_order.eq.3) then
- stencil3On = 1
+ stencil3On = .true.
endif
Modified: branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil4.F
===================================================================
--- branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil4.F        2011-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_tracer_vadv_stencil4.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -16,6 +16,7 @@
use mpas_grid_types
use mpas_configure
+ use mpas_timer
implicit none
private
@@ -42,7 +43,7 @@
!
!--------------------------------------------------------------------
- integer :: stencil4On
+ logical :: stencil4On
!***********************************************************************
@@ -125,6 +126,8 @@
if(.not. Stencil4On) return
+ call mpas_timer_start("compute_scalar_tend-vert adv stencil 4")
+
nCells = grid % nCells
nCellsSolve = grid % nCellsSolve
num_tracers = size(tracers, 1)
@@ -138,6 +141,7 @@
! Compute tracerTop using 4rd order stencil [-1 7 7 -1]
do iCell=1,nCellsSolve
+ tracerTop(:,1,iCell) = tracers(:,1,iCell)
k=2
do iTracer=1,num_tracers
tracerTop(iTracer,k,iCell) = &
@@ -160,6 +164,7 @@
hRatioZLevelK(k) *tracers(iTracer,k-1,iCell) &
+ hRatioZLevelKm1(k)*tracers(iTracer,k ,iCell)
end do
+ tracerTop(:,maxLevelCell(iCell)+1,iCell) = tracers(:,maxLevelCell(iCell),iCell)
end do
do iCell=1,nCellsSolve
@@ -173,6 +178,8 @@
end do
deallocate(tracerTop)
+ call mpas_timer_stop("compute_scalar_tend-vert adv stencil 4")
+
!--------------------------------------------------------------------
end subroutine ocn_tracer_vadv_stencil4_tend!}}}
@@ -204,10 +211,10 @@
integer, intent(out) :: err !< Output: error flag
err = 0
- stencil4On = 0
+ stencil4On = .false.
if(config_vert_tracer_adv_order.eq.4) then
- stencil4On = 1
+ stencil4On = .true.
endif
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-11-16 15:54:58 UTC (rev 1199)
+++ branches/ocean_projects/performance/src/core_ocean/mpas_ocn_vel_vadv.F        2011-11-16 17:49:12 UTC (rev 1200)
@@ -124,7 +124,7 @@
edgeMask => grid % edgeMask % array
allocate(w_dudzTopEdge(nVertLevels+1))
- w_dudzTopEdge(1) = 0.0
+ w_dudzTopEdge = 0.0
do iEdge=1,nEdgesSolve
cell1 = cellsOnEdge(1,iEdge)
cell2 = cellsOnEdge(2,iEdge)
</font>
</pre>