<p><b>mpetersen@lanl.gov</b> 2012-01-23 15:52:28 -0700 (Mon, 23 Jan 2012)</p><p>Change spline3 to conform with ale variables. Remove z-level variables that are no longer used.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_mpas_core.F
===================================================================
--- branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_mpas_core.F        2012-01-23 22:21:15 UTC (rev 1411)
+++ branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_mpas_core.F        2012-01-23 22:52:28 UTC (rev 1412)
@@ -506,7 +506,7 @@
integer :: iTracer, cell, cell1, cell2
real (kind=RKIND) :: uhSum, hSum, hEdge1
real (kind=RKIND), dimension(:), pointer :: &
- hZLevel, zMidZLevel, zTopZLevel
+ hZLevel, zTopZLevel, zMidZLevel
real (kind=RKIND), dimension(:,:), pointer :: h
integer :: nVertLevels
@@ -516,34 +516,25 @@
h => block % state % time_levs(1) % state % h % array
hZLevel => block % mesh % hZLevel % array
- zMidZLevel => block % mesh % zMidZLevel % array
zTopZLevel => block % mesh % zTopZLevel % array
+ zMidZLevel => block % mesh % zMidZLevel % array
nVertLevels = block % mesh % nVertLevels
- ! These should eventually be in an input file. For now
- ! I just read them in from h(:,1).
- ! Upon restart, the correct hZLevel should be in restart.nc
+ ! hZLevel should be in the grid.nc or restart.nc file.
- ! mrp 111206. hZLevel is read in from input file.
- ! if (.not. config_do_restart) hZLevel = h(:,1)
+ ! zTopZLevel is used for the z-coordinate of the bottom of
+ ! the water column. This is used to compute zMid from bottom
+ ! up at each timestep.
- ! hZLevel should be in the grid.nc and restart.nc file,
- ! and h for k=1 must be specified there as well.
-
-!!!!!!!! mrp 111206
-!!!! I still need to change spline3 from hZLevel to h variables
-!!!! then I can remove these variables.
+ ! zMidZLevel is used in the EOS computation to compute pressure.
zTopZLevel(1) = 0.0
do k = 1,nVertLevels
zMidZLevel(k) = zTopZLevel(k)-0.5*hZLevel(k)
zTopZLevel(k+1) = zTopZLevel(k)- hZLevel(k)
end do
- ! mrp 110601 For now, h is the variable saved in the restart file
- ! I am computing SSH here. In the future, could make smaller
- ! restart files for z-Level runs by saving SSH only.
+ ! Compute ssh from h at level 1.
do iCell=1,block % mesh % nCells
-
block % state % time_levs(1) % state % ssh % array(iCell) &
= block % state % time_levs(1) % state % h % array(1,iCell) &
- block % mesh % hZLevel % array(1)
Modified: branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_tendency.F
===================================================================
--- branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_tendency.F        2012-01-23 22:21:15 UTC (rev 1411)
+++ branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_tendency.F        2012-01-23 22:52:28 UTC (rev 1412)
@@ -853,7 +853,6 @@
+ h(k ,iCell))
end do
-
end do
endif
Modified: branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_time_integration_rk4.F
===================================================================
--- branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_time_integration_rk4.F        2012-01-23 22:21:15 UTC (rev 1411)
+++ branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_time_integration_rk4.F        2012-01-23 22:52:28 UTC (rev 1412)
@@ -370,8 +370,8 @@
integer :: nCells, nEdges, nVertices, nVertLevels, nEdgesSolve
real (kind=RKIND) :: vertSum, uhSum, hSum, sshEdge
real (kind=RKIND), dimension(:), pointer :: &
- h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &
- zMidZLevel, zTopZLevel, meshScalingDel2, meshScalingDel4
+ h_s, dvEdge, dcEdge, areaCell, areaTriangle, &
+ meshScalingDel2, meshScalingDel4
real (kind=RKIND), dimension(:,:), pointer :: &
weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, pressure, &
tend_u, circulation, vorticity, ke, ke_edge, pv_edge, &
@@ -426,11 +426,6 @@
areaCell => grid % areaCell % array
areaTriangle => grid % areaTriangle % array
h_s => grid % h_s % array
-! mrp 110516 cleanup fvertex fedge not used in this subroutine
- fVertex => grid % fVertex % array
- fEdge => grid % fEdge % array
- zMidZLevel => grid % zMidZLevel % array
- zTopZLevel => grid % zTopZLevel % array
maxLevelCell => grid % maxLevelCell % array
maxLevelEdgeTop => grid % maxLevelEdgeTop % array
maxLevelVertexBot => grid % maxLevelVertexBot % array
@@ -490,8 +485,8 @@
integer :: nCells, nEdges, nVertices, nVertLevels, nEdgesSolve
real (kind=RKIND) :: vertSum, uhSum, hSum, sshEdge
real (kind=RKIND), dimension(:), pointer :: &
- h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &
- zMidZLevel, zTopZLevel, meshScalingDel2, meshScalingDel4
+ h_s, dvEdge, dcEdge, areaCell, areaTriangle, &
+ meshScalingDel2, meshScalingDel4
real (kind=RKIND), dimension(:,:), pointer :: &
weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, pressure, &
tend_u, circulation, vorticity, ke, ke_edge, pv_edge, &
@@ -545,11 +540,6 @@
areaCell => grid % areaCell % array
areaTriangle => grid % areaTriangle % array
h_s => grid % h_s % array
-! mrp 110516 cleanup fvertex fedge not used in this subroutine
- fVertex => grid % fVertex % array
- fEdge => grid % fEdge % array
- zMidZLevel => grid % zMidZLevel % array
- zTopZLevel => grid % zTopZLevel % array
maxLevelCell => grid % maxLevelCell % array
maxLevelEdgeTop => grid % maxLevelEdgeTop % array
maxLevelVertexBot => grid % maxLevelVertexBot % array
Modified: branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_time_integration_split.F
===================================================================
--- branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_time_integration_split.F        2012-01-23 22:21:15 UTC (rev 1411)
+++ branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_time_integration_split.F        2012-01-23 22:52:28 UTC (rev 1412)
@@ -1054,8 +1054,8 @@
integer :: nCells, nEdges, nVertices, nVertLevels, nEdgesSolve
real (kind=RKIND) :: vertSum, uhSum, hSum, sshEdge
real (kind=RKIND), dimension(:), pointer :: &
- h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &
- zMidZLevel, zTopZLevel, meshScalingDel2, meshScalingDel4
+ h_s, dvEdge, dcEdge, areaCell, areaTriangle, &
+ meshScalingDel2, meshScalingDel4
real (kind=RKIND), dimension(:,:), pointer :: &
weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, pressure, &
tend_u, circulation, vorticity, ke, ke_edge, pv_edge, &
@@ -1110,11 +1110,6 @@
areaCell => grid % areaCell % array
areaTriangle => grid % areaTriangle % array
h_s => grid % h_s % array
-! mrp 110516 cleanup fvertex fedge not used in this subroutine
- fVertex => grid % fVertex % array
- fEdge => grid % fEdge % array
- zMidZLevel => grid % zMidZLevel % array
- zTopZLevel => grid % zTopZLevel % array
maxLevelCell => grid % maxLevelCell % array
maxLevelEdgeTop => grid % maxLevelEdgeTop % array
maxLevelVertexBot => grid % maxLevelVertexBot % array
@@ -1174,8 +1169,8 @@
integer :: nCells, nEdges, nVertices, nVertLevels, nEdgesSolve
real (kind=RKIND) :: vertSum, uhSum, hSum, sshEdge
real (kind=RKIND), dimension(:), pointer :: &
- h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, &
- zMidZLevel, zTopZLevel, meshScalingDel2, meshScalingDel4
+ h_s, dvEdge, dcEdge, areaCell, areaTriangle, &
+ meshScalingDel2, meshScalingDel4
real (kind=RKIND), dimension(:,:), pointer :: &
weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, pressure, &
tend_u, circulation, vorticity, ke, ke_edge, pv_edge, &
@@ -1229,11 +1224,6 @@
areaCell => grid % areaCell % array
areaTriangle => grid % areaTriangle % array
h_s => grid % h_s % array
-! mrp 110516 cleanup fvertex fedge not used in this subroutine
- fVertex => grid % fVertex % array
- fEdge => grid % fEdge % array
- zMidZLevel => grid % zMidZLevel % array
- zTopZLevel => grid % zTopZLevel % array
maxLevelCell => grid % maxLevelCell % array
maxLevelEdgeTop => grid % maxLevelEdgeTop % array
maxLevelVertexBot => grid % maxLevelVertexBot % array
Modified: branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_tracer_vadv_spline3.F
===================================================================
--- branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_tracer_vadv_spline3.F        2012-01-23 22:21:15 UTC (rev 1411)
+++ branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_tracer_vadv_spline3.F        2012-01-23 22:52:28 UTC (rev 1412)
@@ -109,10 +109,8 @@
integer, dimension(:), pointer :: maxLevelCell
- real (kind=RKIND), dimension(:), pointer :: zTopZLevel, zMidZLevel
-
real (kind=RKIND), dimension(:), allocatable :: tracer2ndDer, &
- tracersIn, tracersOut, posZMidZLevel, posZTopZLevel
+ tracersIn, tracersOut, depthTop, depthMid
real (kind=RKIND), dimension(:,:,:), allocatable :: tracerTop
!-----------------------------------------------------------------
@@ -134,26 +132,24 @@
num_tracers = size(tracers, 1)
maxLevelCell => grid % maxLevelCell % array
-!!!!!!!! mrp 111206
-!!!! I still need to change spline3 from hZLevel to h variables
- zMidZLevel => grid % zMidZLevel % array
- zTopZLevel => grid % zTopZLevel % array
-
allocate(tracerTop(num_tracers,nVertLevels+1,nCells))
! Compute tracerTop using cubic spline interpolation.
allocate(tracer2ndDer(nVertLevels))
allocate(tracersIn(nVertLevels),tracersOut(nVertLevels), &
- posZMidZLevel(nVertLevels), posZTopZLevel(nVertLevels-1))
+ depthMid(nVertLevels), depthTop(nVertLevels+1))
- ! For the ocean, zlevel coordinates are negative and decreasing,
- ! but spline functions assume increasing, so flip to positive.
+ do iCell=1,nCellsSolve
- posZMidZLevel = -zMidZLevel(1:nVertLevels)
- posZTopZLevel = -zTopZLevel(2:nVertLevels)
+ ! Here depth considers SSH to be depth=0. We don't need to
+ ! have true z-coordinate depths because it is just for interpolation.
+ depthTop(1) = 0.0
+ do k=1,maxLevelCell(iCell)
+ depthMid(k ) = depthTop(k) + 0.5*h(k,iCell)
+ depthTop(k+1) = depthTop(k) + h(k,iCell)
+ enddo
- do iCell=1,nCellsSolve
! mrp 110201 efficiency note: push tracer loop down
! into spline subroutines to improve efficiency
do iTracer=1,num_tracers
@@ -162,12 +158,12 @@
! subroutine call.
tracersIn(1:maxLevelCell(iCell))=tracers(iTracer,1:maxLevelCell(iCell),iCell)
- call mpas_cubic_spline_coefficients(posZMidZLevel, &
+ call mpas_cubic_spline_coefficients(depthMid, &
tracersIn, maxLevelCell(iCell), tracer2ndDer)
call mpas_interpolate_cubic_spline( &
- posZMidZLevel, tracersIn, tracer2ndDer, maxLevelCell(iCell), &
- posZTopZLevel, tracersOut, maxLevelCell(iCell)-1 )
+ depthMid, tracersIn, tracer2ndDer, maxLevelCell(iCell), &
+ depthTop(2:maxLevelCell(iCell)), tracersOut, maxLevelCell(iCell)-1 )
tracerTop(itracer,1,iCell) = tracers(iTracer,1,iCell)
tracerTop(iTracer,2:maxLevelCell(iCell),iCell) = tracersOut(1:maxLevelCell(iCell)-1)
@@ -186,7 +182,7 @@
end do
deallocate(tracer2ndDer)
- deallocate(tracersIn,tracersOut, posZMidZLevel, posZTopZLevel)
+ deallocate(tracersIn,tracersOut, depthMid, depthTop)
deallocate(tracerTop)
!--------------------------------------------------------------------
Modified: branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_vel_vadv.F
===================================================================
--- branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_vel_vadv.F        2012-01-23 22:21:15 UTC (rev 1411)
+++ branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_vel_vadv.F        2012-01-23 22:52:28 UTC (rev 1412)
@@ -111,7 +111,6 @@
real (kind=RKIND) :: wTopEdge
real (kind=RKIND), dimension(:), allocatable :: w_dudzTopEdge
- real (kind=RKIND), dimension(:), pointer :: zMidZLevel
if(.not.velVadvOn) return
@@ -121,7 +120,6 @@
nEdgesSolve = grid % nEdgesSolve
maxLevelEdgeTop => grid % maxLevelEdgeTop % array
cellsOnEdge => grid % cellsOnEdge % array
- zMidZLevel => grid % zMidZLevel % array
edgeMask => grid % edgeMask % array
allocate(w_dudzTopEdge(nVertLevels+1))
Modified: branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_vmix_coefs_tanh.F
===================================================================
--- branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_vmix_coefs_tanh.F        2012-01-23 22:21:15 UTC (rev 1411)
+++ branches/ocean_projects/ale_vert_coord_new/src/core_ocean/mpas_ocn_vmix_coefs_tanh.F        2012-01-23 22:52:28 UTC (rev 1412)
@@ -186,6 +186,9 @@
nVertLevels = grid % nVertLevels
zTopZLevel => grid % zTopZLevel % array
+ ! zTopZLevel is used here for simplicity. Using zMid and h, which
+ ! vary in time, would give the exact location of the top, but it
+ ! would only change the diffusion value very slightly.
do k=1,nVertLevels+1
vertViscTopOfEdge(k,:) = -(config_max_visc_tanh-config_min_visc_tanh)/2.0 &
*tanh(-(zTopZLevel(k)-config_ZMid_tanh) &
@@ -255,6 +258,9 @@
nVertLevels = grid % nVertLevels
zTopZLevel => grid % zTopZLevel % array
+ ! zTopZLevel is used here for simplicity. Using zMid and h, which
+ ! vary in time, would give the exact location of the top, but it
+ ! would only change the diffusion value very slightly.
do k=1,nVertLevels+1
vertDiffTopOfCell(k,:) = -(config_max_diff_tanh-config_min_diff_tanh)/2.0 &
*tanh(-(zTopZLevel(k)-config_ZMid_tanh) &
@@ -308,14 +314,6 @@
tanhDiffOn = .true.
endif
- if((tanhViscOn) .or. (tanhDiffOn)) then
- if (config_vert_grid_type.ne.'zlevel') then
- write(0,*) 'Abort: config_vert_diff_type.eq.tanh may only', &
- ' use config_vert_grid_type of zlevel at this time'
- err = 1
- endif
- endif
-
!--------------------------------------------------------------------
end subroutine ocn_vmix_coefs_tanh_init!}}}
</font>
</pre>