<p><b>duda</b> 2010-10-20 12:03:40 -0600 (Wed, 20 Oct 2010)</p><p>BRANCH COMMIT<br>
<br>
More cleanup in non-hydrostatic code:<br>
<br>
1) Update ncl scripts to read theta_base and pressure_base<br>
as time-varying fields<br>
<br>
2) Move the pressure field to diag (and accordingly reducing<br>
it to a single time level)<br>
<br>
3) Add computation of rho_p, rtheta_base, and rtheta_p to<br>
init_coupled_diagnostics, which allows us to remove these<br>
variables from input files<br>
<br>
4) Further cleanup in the non-hydrostatic Registry regarding<br>
which field come from input files and which go to <br>
restart files <br>
<br>
<br>
M graphics/ncl/cells_nhyd_sphere.ncl<br>
M graphics/ncl/cells_nhyd_sph1.ncl<br>
M src/core_nhyd_atmos/module_test_cases.F<br>
M src/core_nhyd_atmos/Registry<br>
M src/core_nhyd_atmos/module_time_integration.F<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_nonhydrostatic/graphics/ncl/cells_nhyd_sph1.ncl
===================================================================
--- branches/atmos_nonhydrostatic/graphics/ncl/cells_nhyd_sph1.ncl        2010-10-20 14:13:33 UTC (rev 572)
+++ branches/atmos_nonhydrostatic/graphics/ncl/cells_nhyd_sph1.ncl        2010-10-20 18:03:40 UTC (rev 573)
@@ -123,7 +123,7 @@
; h = (f->surface_pressure(t,:) + 219.4)/100.
; h = f->geopotential(t,:,18)
; h = f->theta(t,:,25)-f->theta(0,:,25)
-; h = f->theta(t,:,0)-f->theta_base(:,0)
+; h = f->theta(t,:,0)-f->theta_base(t,:,0)
; h = f->surface_pressure(t,:)/100.
; h = (f->surface_pressure(t,:)-f->surface_pressure(0,:))/100.
; h = f->pressure(t,:,0)/100.
@@ -137,9 +137,9 @@
; cf2 = 0.
; cf3 = 0.
- pfirst = f->pressure(t,:,0)+f->pressure_base(:,0)
- psecond = f->pressure(t,:,1)+f->pressure_base(:,1)
- pthird = f->pressure(t,:,2)+f->pressure_base(:,2)
+ pfirst = f->pressure(t,:,0)+f->pressure_base(t,:,0)
+ psecond = f->pressure(t,:,1)+f->pressure_base(t,:,1)
+ pthird = f->pressure(t,:,2)+f->pressure_base(t,:,2)
; fld = (cf1*pfirst + cf2*psecond + cf3*pthird)/100.
rhofirst = f->rho(t,:,0)
@@ -156,7 +156,7 @@
; -.25*(rr(2,i)+rb(2,i))*(1.+qv(2,i)))
-; fld = f->pressure(t,:,25)+f->pressure_base(:,25)
+; fld = f->pressure(t,:,25)+f->pressure_base(t,:,25)
; fld = f->kdiff(t,:,0)
Modified: branches/atmos_nonhydrostatic/graphics/ncl/cells_nhyd_sphere.ncl
===================================================================
--- branches/atmos_nonhydrostatic/graphics/ncl/cells_nhyd_sphere.ncl        2010-10-20 14:13:33 UTC (rev 572)
+++ branches/atmos_nonhydrostatic/graphics/ncl/cells_nhyd_sphere.ncl        2010-10-20 18:03:40 UTC (rev 573)
@@ -130,7 +130,7 @@
; h = (f->surface_pressure(t,:) + 219.4)/100.
; h = f->geopotential(t,:,18)
; h = f->theta(t,:,25)-f->theta(0,:,25)
-; h = f->theta(t,:,0)-f->theta_base(:,0)
+; h = f->theta(t,:,0)-f->theta_base(t,:,0)
; h = f->surface_pressure(t,:)/100.
; h = (f->surface_pressure(t,:)-f->surface_pressure(0,:))/100.
; h = f->pressure(t,:,0)/100.
@@ -144,9 +144,9 @@
; cf2 = 0.
; cf3 = 0.
- pfirst = f->pressure(t,:,0)+f->pressure_base(:,0)
- psecond = f->pressure(t,:,1)+f->pressure_base(:,1)
- pthird = f->pressure(t,:,2)+f->pressure_base(:,2)
+ pfirst = f->pressure(t,:,0)+f->pressure_base(t,:,0)
+ psecond = f->pressure(t,:,1)+f->pressure_base(t,:,1)
+ pthird = f->pressure(t,:,2)+f->pressure_base(t,:,2)
fld = (cf1*pfirst + cf2*psecond + cf3*pthird)/100.
rhofirst = f->rho(t,:,0)
@@ -163,7 +163,7 @@
; -.25*(rr(2,i)+rb(2,i))*(1.+qv(2,i)))
-; fld = f->pressure(t,:,25)+f->pressure_base(:,25)
+; fld = f->pressure(t,:,25)+f->pressure_base(t,:,25)
; zg = f->zgrid
; csizes = dimsizes(pfirst)
Modified: branches/atmos_nonhydrostatic/src/core_nhyd_atmos/Registry
===================================================================
--- branches/atmos_nonhydrostatic/src/core_nhyd_atmos/Registry        2010-10-20 14:13:33 UTC (rev 572)
+++ branches/atmos_nonhydrostatic/src/core_nhyd_atmos/Registry        2010-10-20 18:03:40 UTC (rev 573)
@@ -168,7 +168,7 @@
var persistent real rt_diabatic_tend ( nVertLevels nCells Time ) 1 - rt_diabatic_tend tend - -
# state variables diagnosed from prognostic state
-var persistent real pressure ( nVertLevels nCells Time ) 2 iro pressure state - -
+var persistent real pressure ( nVertLevels nCells Time ) 1 iro pressure diag - -
var persistent real u_init ( nVertLevels ) 0 iro u_init mesh - -
var persistent real t_init ( nVertLevels nCells ) 0 iro t_init mesh - -
@@ -198,7 +198,7 @@
var persistent real exner ( nVertLevels nCells Time ) 1 iro exner diag - -
var persistent real exner_base ( nVertLevels nCells Time ) 1 iro exner_base diag - -
-var persistent real rtheta_base ( nVertLevels nCells Time ) 1 iro rtheta_base diag - -
+var persistent real rtheta_base ( nVertLevels nCells Time ) 1 r rtheta_base diag - -
var persistent real pressure_base ( nVertLevels nCells Time ) 1 iro pressure_base diag - -
var persistent real rho_base ( nVertLevels nCells Time ) 1 iro rho_base diag - -
var persistent real theta_base ( nVertLevels nCells Time ) 1 iro theta_base diag - -
@@ -207,7 +207,7 @@
var persistent real ruAvg ( nVertLevels nEdges Time ) 1 - ruAvg diag - -
var persistent real wwAvg ( nVertLevelsP1 nCells Time ) 1 - wwAvg diag - -
var persistent real cqu ( nVertLevels nEdges Time ) 1 - cqu diag - -
-var persistent real cqw ( nVertLevels nCells Time ) 1 r cqw diag - -
+var persistent real cqw ( nVertLevels nCells Time ) 1 - cqw diag - -
# coupled variables needed by the solver, but not output...
@@ -220,13 +220,13 @@
var persistent real rw_p ( nVertLevelsP1 nCells Time ) 1 r rw_p diag - -
var persistent real rw_save ( nVertLevelsP1 nCells Time ) 1 r rw_save diag - -
-var persistent real rtheta_p ( nVertLevels nCells Time ) 1 iro rtheta_p diag - -
-var persistent real rtheta_pp ( nVertLevels nCells Time ) 1 r rtheta_pp diag - -
+var persistent real rtheta_p ( nVertLevels nCells Time ) 1 r rtheta_p diag - -
+var persistent real rtheta_pp ( nVertLevels nCells Time ) 1 - rtheta_pp diag - -
var persistent real rtheta_p_save ( nVertLevels nCells Time ) 1 r rtheta_p_save diag - -
-var persistent real rtheta_pp_old ( nVertLevels nCells Time ) 1 r rtheta_pp_old diag - -
+var persistent real rtheta_pp_old ( nVertLevels nCells Time ) 1 - rtheta_pp_old diag - -
-var persistent real rho_p ( nVertLevels nCells Time ) 1 iro rho_p diag - -
-var persistent real rho_pp ( nVertLevels nCells Time ) 1 r rho_pp diag - -
+var persistent real rho_p ( nVertLevels nCells Time ) 1 r rho_p diag - -
+var persistent real rho_pp ( nVertLevels nCells Time ) 1 - rho_pp diag - -
var persistent real rho_p_save ( nVertLevels nCells Time ) 1 r rho_p_save diag - -
var persistent real qv_old ( nVertLevels nCells Time ) 1 r rqv diag scalars_old moist_old
Modified: branches/atmos_nonhydrostatic/src/core_nhyd_atmos/module_test_cases.F
===================================================================
--- branches/atmos_nonhydrostatic/src/core_nhyd_atmos/module_test_cases.F        2010-10-20 14:13:33 UTC (rev 572)
+++ branches/atmos_nonhydrostatic/src/core_nhyd_atmos/module_test_cases.F        2010-10-20 18:03:40 UTC (rev 573)
@@ -217,7 +217,7 @@
p => diag % exner % array
ppb => diag % pressure_base % array
- pp => state % pressure % array
+ pp => diag % pressure % array
rho => state % rho % array
rr => diag % rho_p % array
@@ -908,7 +908,7 @@
rho => state % rho % array
- pp => state % pressure % array
+ pp => diag % pressure % array
rr => diag % rho_p % array
t => state % theta % array
rt => diag % rtheta_p % array
@@ -1451,7 +1451,7 @@
rho => state % rho % array
- pp => state % pressure % array
+ pp => diag % pressure % array
rr => diag % rho_p % array
t => state % theta % array
rt => diag % rtheta_p % array
Modified: branches/atmos_nonhydrostatic/src/core_nhyd_atmos/module_time_integration.F
===================================================================
--- branches/atmos_nonhydrostatic/src/core_nhyd_atmos/module_time_integration.F        2010-10-20 14:13:33 UTC (rev 572)
+++ branches/atmos_nonhydrostatic/src/core_nhyd_atmos/module_time_integration.F        2010-10-20 18:03:40 UTC (rev 573)
@@ -109,7 +109,7 @@
block % state % time_levs(1) % state % num_scalars, block % mesh % nVertLevels, block % mesh % nCells, &
block % parinfo % cellsToSend, block % parinfo % cellsToRecv)
! pressure
- call dmpar_exch_halo_field2dReal(domain % dminfo, block % state % time_levs(1) % state % pressure % array(:,:), &
+ call dmpar_exch_halo_field2dReal(domain % dminfo, block % diag % pressure % array(:,:), &
block % mesh % nVertLevels, block % mesh % nCells, &
block % parinfo % cellsToSend, block % parinfo % cellsToRecv)
! vorticity
@@ -331,7 +331,7 @@
call dmpar_exch_halo_field2dReal(domain % dminfo, block % state % time_levs(2) % state % theta % array(:,:), &
block % mesh % nVertLevels, block % mesh % nCells, &
block % parinfo % cellsToSend, block % parinfo % cellsToRecv)
- call dmpar_exch_halo_field2dReal(domain % dminfo, block % state % time_levs(2) % state % pressure % array(:,:), &
+ call dmpar_exch_halo_field2dReal(domain % dminfo, block % diag % pressure % array(:,:), &
block % mesh % nVertLevels, block % mesh % nCells, &
block % parinfo % cellsToSend, block % parinfo % cellsToRecv)
call dmpar_exch_halo_field2dReal(domain % dminfo, block % state % time_levs(2) % state % rho % array(:,:), &
@@ -396,7 +396,7 @@
call dmpar_exch_halo_field2dReal(domain % dminfo, block % state % time_levs(2) % state % theta % array(:,:), &
block % mesh % nVertLevels, block % mesh % nCells, &
block % parinfo % cellsToSend, block % parinfo % cellsToRecv)
- call dmpar_exch_halo_field2dReal(domain % dminfo, block % state % time_levs(2) % state % pressure % array(:,:), &
+ call dmpar_exch_halo_field2dReal(domain % dminfo, block % diag % pressure % array(:,:), &
block % mesh % nVertLevels, block % mesh % nCells, &
block % parinfo % cellsToSend, block % parinfo % cellsToRecv)
call dmpar_exch_halo_field2dReal(domain % dminfo, block % tend % rt_diabatic_tend % array(:,:), &
@@ -468,7 +468,6 @@
s_old % w % array = s_new % w % array
s_old % theta % array = s_new % theta % array
s_old % rho % array = s_new % rho % array
- s_old % pressure % array = s_new % pressure % array
s_old % scalars % array = s_new % scalars % array
end subroutine rk_integration_setup
@@ -977,7 +976,7 @@
exner => diag % exner % array
exner_base => diag % exner_base % array
- pressure_p => s % pressure % array
+ pressure_p => diag % pressure % array
zz => grid % zz % array
zb => grid % zb % array
@@ -1934,7 +1933,7 @@
vorticity => diag % vorticity % array
ke => diag % ke % array
pv_edge => diag % pv_edge % array
- pp => s % pressure % array
+ pp => diag % pressure % array
pressure_b => diag % pressure_base % array
h_divergence => diag % h_divergence % array
@@ -3231,22 +3230,41 @@
subroutine init_coupled_diagnostics( state, diag, grid )
- implicit none
+ implicit none
- type (state_type), intent(inout) :: state
- type (diag_type), intent(inout) :: diag
- type (mesh_type), intent(inout) :: grid
+ type (state_type), intent(inout) :: state
+ type (diag_type), intent(inout) :: diag
+ type (mesh_type), intent(inout) :: grid
- integer :: k,iEdge,i,iCell1,iCell2
+ integer :: k,iCell,iEdge,i,iCell1,iCell2
- do iEdge = 1, grid%nEdges
- iCell1 = grid % cellsOnEdge % array(1,iEdge)
- iCell2 = grid % cellsOnEdge % array(2,iEdge)
- do k=1,grid % nVertLevels
- diag % ru % array(k,iEdge) = 0.5 * state % u % array(k,iEdge)*(state % rho % array(k,iCell1)+state % rho % array(k,iCell2))
- enddo
- enddo
+ do iEdge = 1, grid % nEdges
+ iCell1 = grid % cellsOnEdge % array(1,iEdge)
+ iCell2 = grid % cellsOnEdge % array(2,iEdge)
+ do k=1,grid % nVertLevels
+ diag % ru % array(k,iEdge) = 0.5 * state % u % array(k,iEdge) * (state % rho % array(k,iCell1) + state % rho % array(k,iCell2))
+ end do
+ end do
+ do iCell = 1, grid % nCells
+ do k=1,grid % nVertLevels
+ diag % rho_p % array(k,iCell) = state % rho % array(k,iCell) - diag % rho_base % array(k,iCell)
+ end do
+ end do
+
+ do iCell = 1, grid % nCells
+ do k=1,grid % nVertLevels
+ diag % rtheta_base % array(k,iCell) = diag % theta_base % array(k,iCell) * diag % rho_base % array(k,iCell)
+ end do
+ end do
+
+ do iCell = 1, grid % nCells
+ do k=1,grid % nVertLevels
+ diag % rtheta_p % array(k,iCell) = state % theta % array(k,iCell) * diag % rho_p % array(k,iCell) &
+ + diag % rho_base % array(k,iCell) * (state % theta % array(k,iCell) - diag % theta_base % array(k,iCell))
+ end do
+ end do
+
end subroutine init_coupled_diagnostics
! ------------------------
@@ -3309,7 +3327,7 @@
diag % rtheta_p % array(k,iCell) &
+ diag % rtheta_base % array(k,iCell) ) )**rcv
- state_new % pressure % array(k,iCell) = &
+ diag % pressure % array(k,iCell) = &
grid % zz % array(k,iCell) * rgas * ( &
diag % exner % array(k,iCell)*diag % rtheta_p % array(k,iCell) &
+diag % rtheta_base % array(k,iCell) * &
</font>
</pre>