<p><b>laura@ucar.edu</b> 2010-10-07 12:52:52 -0600 (Thu, 07 Oct 2010)</p><p>reconciled with module_time_integration.F from /branches/atmos_nonhydrostatic version 520, except for stuff related to the reorganized registry, and stuff related to physics<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_physics/src/core_nhyd_atmos/module_time_integration.F
===================================================================
--- branches/atmos_physics/src/core_nhyd_atmos/module_time_integration.F        2010-10-07 18:50:32 UTC (rev 524)
+++ branches/atmos_physics/src/core_nhyd_atmos/module_time_integration.F        2010-10-07 18:52:52 UTC (rev 525)
@@ -4,9 +4,11 @@
    use configure
    use constants
    use dmpar
+   use vector_reconstruction
 
 #ifdef DO_PHYSICS
    use module_microphysics
+   use module_physics_todynamics
 #endif
 
    contains
@@ -25,8 +27,8 @@
       implicit none
 
       type (domain_type), intent(inout) :: domain
+      integer, intent(in):: itimestep
       real (kind=RKIND), intent(in) :: dt
-      integer, intent(in) :: itimestep
 
       type (block_type), pointer :: block
 
@@ -64,14 +66,14 @@
 
       type (domain_type), intent(inout) :: domain
       real (kind=RKIND), intent(in) :: dt
-      integer, intent(in) :: itimestep
+      integer, intent(in):: itimestep
 
-      integer :: iq
       integer :: iCell, k, iEdge
       type (block_type), pointer :: block
 
       integer, parameter :: TEND   = 1
       integer :: rk_step, number_of_sub_steps
+      integer :: iScalar
 
       real (kind=RKIND), dimension(3) :: rk_timestep, rk_sub_timestep
       integer, dimension(3) :: number_sub_steps
@@ -79,8 +81,9 @@
       logical, parameter :: debug = .false.
 !      logical, parameter :: debug = .true.
       logical, parameter :: debug_mass_conservation = .true.
-      logical, parameter :: do_microphysics  = .false.
-      logical, parameter :: scalar_advection = .true.
+!      logical, parameter :: do_microphysics = .true.
+      logical, parameter :: do_microphysics = .false.
+
       real (kind=RKIND) :: domain_mass, scalar_mass, scalar_min, scalar_max
       real (kind=RKIND) :: global_domain_mass, global_scalar_mass, global_scalar_min, global_scalar_max
 
@@ -174,6 +177,18 @@
         end do
         if (debug) write(0,*) ' finished compute_dyn_tend '
 
+
+!#ifdef DO_PHYSICS
+!       if (debug) write(0,*) ' add physics tendencies '
+!       block =&gt; domain % blocklist
+!       do while (associated(block))
+!          call physics_addtend( block % intermediate_step(TEND), block % time_levs(2) % state, &amp;
+!                                block % time_levs(2) % state % rho % array(:,:), block % mesh )
+!          block =&gt; block % next
+!       end do
+!       if (debug) write(0,*) ' finished add physics tendencies '
+!#endif
+
 !***********************************
 !  we will need to communicate the momentum tendencies here - we want tendencies for all edges of owned cells
 !  because we are solving for all edges of owned cells
@@ -245,8 +260,9 @@
         block =&gt; domain % blocklist
         do while (associated(block))
            call recover_large_step_variables( block % time_levs(2) % state,             &amp;
-                                              block % mesh, rk_sub_timestep(rk_step),   &amp;
-                                              number_sub_steps(rk_step)  )
+                                              block % mesh, rk_timestep(rk_step),       &amp;
+                                              number_sub_steps(rk_step), rk_step  )
+
            block =&gt; block % next
         end do
 
@@ -358,28 +374,38 @@
 
       end do ! rk_step loop
 
-!  microphysics here...
+!...  compute full velocity vectors at cell centers:
+      block =&gt; domain % blocklist
+        do while (associated(block))
+           call reconstruct(block % time_levs(2) % state, block % mesh)
+           block =&gt; block % next
+        end do
 
+!... call to parameterizations of cloud microphysics:
 #ifdef DO_PHYSICS
-      if(config_microp_scheme .ne. 'off') then
-         block =&gt; domain % blocklist
-         do while(associated(block))
+      block =&gt; domain % blocklist
+      do while(associated(block))
 
-            call microphysics_driver ( block % intermediate_step(TEND), block % time_levs(2) % state, &amp;
-                                       block % mesh, itimestep )
+         !simply set to zero negative mixing ratios of different water species (for now):
+         where ( block % time_levs(2) % state % scalars % array(:,:,:) .lt. 0.) &amp;
+            block % time_levs(2) % state % scalars % array(:,:,:) = 0.
 
-            block =&gt; block % next
-         end do
-      endif
+         !call microphysics schemes:
+         if(config_microp_scheme .ne. 'off') &amp;
+            call microphysics_driver ( block % time_levs(2) % state, block % mesh, itimestep )
+
+         block =&gt; block % next
+      end do
 #endif
-      if(do_microphysics) then
-      block =&gt; domain % blocklist
-        do while (associated(block))
-           call qd_kessler( block % time_levs(1) % state, block % time_levs(2) % state, block % mesh, dt )
-           block =&gt; block % next
-        end do
-      end if
 
+!     if(do_microphysics) then
+!     block =&gt; domain % blocklist
+!       do while (associated(block))
+!          call qd_kessler( block % time_levs(1) % state, block % time_levs(2) % state, block % mesh, dt )
+!          block =&gt; block % next
+!       end do
+!     end if
+
       block =&gt; domain % blocklist
       do while (associated(block))
          call dmpar_exch_halo_field2dReal(domain % dminfo, block % mesh % rtheta_p % array(:,:), &amp;
@@ -426,16 +452,17 @@
              enddo
              write(0,*) ' min, max u ',scalar_min, scalar_max
 
-             scalar_min = 0.
-             scalar_max = 0.
-             do iCell = 1, block % mesh % nCellsSolve
-             do k = 1, block % mesh % nVertLevels
-               scalar_min = min(scalar_min, block % time_levs(2) % state % scalars % array(index_qc,k,iCell))
-               scalar_max = max(scalar_max, block % time_levs(2) % state % scalars % array(index_qc,k,iCell))
+             do iScalar = 1, num_scalars
+                scalar_min = 0.
+                scalar_max = 0.
+                do iCell = 1, block % mesh % nCellsSolve
+                do k = 1, block % mesh % nVertLevels
+                   scalar_min = min(scalar_min, block % time_levs(2) % state % scalars % array(iScalar,k,iCell))
+                   scalar_max = max(scalar_max, block % time_levs(2) % state % scalars % array(iScalar,k,iCell))
+                enddo
+                enddo
+                write(0,*) ' min, max scalar ',iScalar, scalar_min, scalar_max
              enddo
-             enddo
-             write(0,*) ' min, max qc ',scalar_min, scalar_max
-
              block =&gt; block % next
 
           end do
@@ -465,9 +492,16 @@
      s_old % rho % array = s_new % rho % array
      s_old % pressure % array = s_new % pressure % array
 
-
      s_old % scalars % array = s_new % scalars % array
 
+     s_old % rho_edge % array = s_new % rho_edge % array
+     s_old % v % array = s_new % v % array
+     s_old % circulation % array = s_new % circulation % array
+     s_old % vorticity % array = s_new % vorticity % array
+     s_old % divergence % array = s_new % divergence % array
+     s_old % ke % array = s_new % ke % array
+     s_old % pv_edge % array = s_new % pv_edge % array
+
    end subroutine rk_integration_setup
 
 !-----
@@ -496,7 +530,7 @@
             grid % cqw % array(k,iCell) = 1./(1.+qtot)
           end do
         end do
-        
+
         do iEdge = 1, nEdges
           cell1 = grid % cellsOnEdge % array(1,iEdge)
           cell2 = grid % cellsOnEdge % array(2,iEdge)
@@ -587,11 +621,13 @@
         do k=2,nVertLevels
           cofwr(k,i) =.5*dtseps*gravity*(fzm(k)*zz(k,i)+fzp(k)*zz(k-1,i))
         end do
+        coftz(1,i) = 0.0
         do k=2,nVertLevels
            cofwz(k,i) = dtseps*c2*(fzm(k)*zz(k,i)+fzp(k)*zz(k-1,i))  &amp;
                 *rdzu(k)*cqw(k,i)*(fzm(k)*p (k,i)+fzp(k)*p (k-1,i))
            coftz(k,i) = dtseps*   (fzm(k)*t (k,i)+fzp(k)*t (k-1,i))
         end do
+        coftz(nVertLevels+1,i) = 0.0
         do k=1,nVertLevels
 
           qtot = 0.
@@ -639,8 +675,20 @@
       implicit none
       type (grid_state) :: s_new, s_old, tend
       type (grid_meta) :: grid
-      integer :: iCell, k
+      integer :: iCell, iEdge, k, cell1, cell2
+      integer, dimension(:,:), pointer :: cellsOnEdge
+      real, dimension(:,:,:), pointer :: zf, zf3
+      real (kind=RKIND), dimension(:), pointer :: fzm, fzp, dvEdge, areaCell
+      real (kind=RKIND) :: flux
 
+      zf =&gt; grid % zf % array
+      zf3 =&gt; grid % zf3 % array
+      fzm =&gt; grid % fzm % array
+      fzp =&gt; grid % fzp % array
+      dvEdge =&gt; grid % dvEdge % array
+      areaCell =&gt; grid % areaCell % array
+      cellsOnEdge =&gt; grid % cellsOnEdge % array
+
       grid % rho_pp % array = grid % rho_p_save % array - s_new % rho_p % array
 
       grid % ru_p % array = grid % ru_save % array - grid % ru % array
@@ -650,12 +698,33 @@
 
       do iCell = 1, grid % nCellsSolve
       do k = 2, grid % nVertLevels
-        tend % w % array(k,iCell) = ( grid % fzm % array (k) * grid % zz % array(k  ,iCell) +   &amp;
-                                      grid % fzp % array (k) * grid % zz % array(k-1,iCell)   ) &amp;
+        tend % w % array(k,iCell) = ( fzm(k) * grid % zz % array(k  ,iCell) +   &amp;
+                                      fzp(k) * grid % zz % array(k-1,iCell)   ) &amp;
                                      * tend % w % array(k,iCell)
       end do
       end do
 
+      do iEdge = 1,grid % nEdges
+
+         cell1 = cellsOnEdge(1,iEdge)
+         cell2 = cellsOnEdge(2,iEdge)
+
+         do k = 2, grid%nVertLevels
+            flux = fzm(k) * tend % u % array(k,iEdge) + fzp(k) * tend % u % array(k-1,iEdge)
+            tend % w % array(k,cell2) = tend % w % array(k,cell2) + zf(k,2,iEdge)*flux
+            tend % w % array(k,cell1) = tend % w % array(k,cell1) - zf(k,1,iEdge)*flux
+!3rd order stencil
+            if (config_theta_adv_order == 3) then
+               tend % w % array(k,cell2) = tend % w % array(k,cell2) + sign(1.,tend % u % array(k,iEdge))  &amp;
+                                                               *config_coef_3rd_order*zf3(k,2,iEdge)*flux
+               tend % w % array(k,cell1) = tend % w % array(k,cell1) - sign(1.,tend % u % array(k,iEdge))  &amp;
+                                                               *config_coef_3rd_order*zf3(k,1,iEdge)*flux
+            end if
+               
+         end do
+
+      end do
+
       grid % ruAvg % array = 0.
       grid % wwAvg % array = 0.
 
@@ -683,7 +752,6 @@
       real (kind=RKIND), dimension( grid % nVertLevels ) :: du
       real (kind=RKIND), dimension( grid % nVertLevels + 1 ) :: dpzx
       real (kind=RKIND), dimension( grid % nVertLevels, grid % nCells+1 ) :: ts, rs
-      real (kind=RKIND), dimension( grid % nVertLevels + 1 , grid % nCells+1 ) :: ws
 
       integer :: cell1, cell2, iEdge, iCell, k
       real (kind=RKIND) :: pgrad, flux1, flux2, flux, resm, epssm
@@ -759,7 +827,6 @@
 
       ts = 0.
       rs = 0.
-      ws = 0.
 
       ! acoustic step divergence damping - forward weight rtheta_pp
       rtheta_pp_old = rtheta_pp + smdiv*(rtheta_pp - rtheta_pp_old)
@@ -817,14 +884,6 @@
 
           end do
 
-          do k=2,nVertLevels
-            flux =  dts*0.5*dvEdge(iEdge)*((zgrid(k,cell2)-zgrid(k,cell1))*(fzm(k)*du(k)+fzp(k)*du(k-1))  )
-            flux2 =  - (fzm(k)*zz(k  ,cell2) +fzp(k)*zz(k-1,cell2))*flux/AreaCell(cell2)
-            flux1 =  - (fzm(k)*zz(k  ,cell1) +fzp(k)*zz(k-1,cell1))*flux/AreaCell(cell1)
-            ws(k,cell2) = ws(k,cell2) + flux2
-            ws(k,cell1) = ws(k,cell1) + flux1
-          enddo
-
         end if ! end test for block-owned cells
 
       end do ! end loop over edges
@@ -846,7 +905,7 @@
 
           wwavg(k,iCell) = wwavg(k,iCell) + 0.5*(1.-epssm)*rw_p(k,iCell)
 
-          rw_p(k,iCell) = rw_p(k,iCell) + ws(k,iCell) + dts*tend_rw(k,iCell)          &amp;
+          rw_p(k,iCell) = rw_p(k,iCell) +  dts*tend_rw(k,iCell)                       &amp;
                      - cofwz(k,iCell)*((zz(k  ,iCell)*ts (k  ,iCell)                  &amp;
                                    -zz(k-1,iCell)*ts (k-1,iCell))                     &amp;
                              +resm*(zz(k  ,iCell)*rtheta_pp(k  ,iCell)                &amp;
@@ -887,21 +946,22 @@
 
 !------------------------
 
-      subroutine recover_large_step_variables( s, grid, dt, ns )
+      subroutine recover_large_step_variables( s, grid, dt, ns, rk_step )
 
       implicit none
       type (grid_state) :: s
       type (grid_meta) :: grid
-      integer, intent(in) :: ns
+      integer, intent(in) :: ns, rk_step
       real (kind=RKIND), intent(in) :: dt
 
       real (kind=RKIND), dimension(:,:), pointer :: wwAvg, rw_save, w, rw, rw_p, rtheta_p, rtheta_pp,   &amp;
-                                                    rtheta_p_save, rt_diabatic, rho_p, rho_p_save, &amp;
+                                                    rtheta_p_save, rt_diabatic_tend, rho_p, rho_p_save, &amp;
                                                     rho_pp, rho, rho_base, ruAvg, ru_save, ru_p, u, ru, &amp;
                                                     exner, exner_base, rtheta_base, pressure_p,         &amp;
-                                                    zz, theta, zgrid
+                                                    zz, theta
       real (kind=RKIND), dimension(:), pointer :: fzm, fzp, dvEdge, AreaCell
-      integer, dimension(:,:), pointer :: CellsOnEdge
+      real (kind=RKIND), dimension(:,:,:), pointer :: zb, zb3 
+      integer, dimension(:,:), pointer :: cellsOnEdge
 
       integer :: iCell, iEdge, k, cell1, cell2
       integer :: nVertLevels, nCells, nCellsSolve, nEdges, nEdgesSolve
@@ -922,7 +982,7 @@
        rtheta_p_save =&gt; grid % rtheta_p_save % array
        rtheta_pp =&gt; grid % rtheta_pp % array
        rtheta_base =&gt; grid % rtheta_base % array
-       rt_diabatic =&gt; grid % rt_diabatic_tend % array
+       rt_diabatic_tend =&gt; grid % rt_diabatic_tend % array
        theta =&gt; s % theta % array
 
        rho =&gt; s % rho % array
@@ -943,7 +1003,8 @@
        pressure_p =&gt; s % pressure % array
 
        zz =&gt; grid % zz % array
-       zgrid =&gt; grid % zgrid % array
+       zb =&gt; grid % zb % array
+       zb3 =&gt; grid % zb3 % array
        fzm =&gt; grid % fzm % array
        fzp =&gt; grid % fzp % array
        dvEdge =&gt; grid % dvEdge % array
@@ -1021,8 +1082,14 @@
 
           do k = 1, nVertLevels
 
-            rtheta_p(k,iCell) = rtheta_p(k,iCell) + rtheta_pp(k,iCell) - dt*rho(k,iCell)*rt_diabatic(k,iCell)
+            if (rk_step==3) then
+               rtheta_p(k,iCell) = rtheta_p(k,iCell) + rtheta_pp(k,iCell) &amp;
+                                 - dt * rho(k,iCell) * rt_diabatic_tend(k,iCell)
+            else
+               rtheta_p(k,iCell) = rtheta_p(k,iCell) + rtheta_pp(k,iCell)
+            end if
 
+
             theta(k,iCell) = (rtheta_p(k,iCell) + rtheta_base(k,iCell))/rho(k,iCell)
             exner(k,iCell) = (zz(k,iCell)*(rgas/p0)*(rtheta_p(k,iCell)+rtheta_base(k,iCell)))**rcv
              ! pressure below is perturbation pressure - perhaps we should rename it in the Registry????
@@ -1053,14 +1120,29 @@
             u(k,iEdge) = 2.*ru(k,iEdge)/(rho(k,cell1)+rho(k,cell2))
           enddo
 
-          flux = dvEdge(iEdge)*0.5*(cf1*u(1,iEdge)+cf2*u(2,iEdge)+cf3*u(3,iEdge))*(zgrid(1,cell2)-zgrid(1,cell1))
-          w(1,cell2) = w(1,cell2)+flux/AreaCell(cell2) 
-          w(1,cell1) = w(1,cell1)+flux/AreaCell(cell1) 
+          !SHP-mtn
+          flux = cf1*ru(1,iEdge) + cf2*ru(2,iEdge) + cf3*ru(3,iEdge)
+          w(1,cell2) = w(1,cell2) - zb(1,2,iEdge)*flux/(cf1*rho(1,cell2)+cf2*rho(2,cell2)+cf3*rho(3,cell2))
+          w(1,cell1) = w(1,cell1) + zb(1,1,iEdge)*flux/(cf1*rho(1,cell1)+cf2*rho(2,cell1)+cf3*rho(3,cell1))
+!3rd order stencil
+          if (config_theta_adv_order == 3) then
+             w(1,cell2) = w(1,cell2) - sign(1.,ru(1,iEdge))*config_coef_3rd_order      &amp;
+                                      *zb3(1,2,iEdge)*flux/(cf1*rho(1,cell2)+cf2*rho(2,cell2)+cf3*rho(3,cell2))
+             w(2,cell1) = w(2,cell1) + sign(1.,ru(1,iEdge))*config_coef_3rd_order      &amp;
+                                      *zb3(1,1,iEdge)*flux/(cf1*rho(1,cell1)+cf2*rho(2,cell1)+cf3*rho(3,cell1))
+          end if
 
           do k = 2, nVertLevels
-            flux = dvEdge(iEdge)*0.5*(fzm(k)*u(k,iEdge)+fzp(k)*u(k-1,iEdge))*(zgrid(k,cell2)-zgrid(k,cell1))
-            w(k,cell2) = w(k,cell2)+flux/AreaCell(cell2) 
-            w(k,cell1) = w(k,cell1)+flux/AreaCell(cell1) 
+            flux = (fzm(k)*ru(k,iEdge)+fzp(k)*ru(k-1,iEdge))
+            w(k,cell2) = w(k,cell2) - zb(k,2,iEdge)*flux/(fzm(k)*rho(k,cell2)+fzp(k)*rho(k-1,cell2))
+            w(k,cell1) = w(k,cell1) + zb(k,1,iEdge)*flux/(fzm(k)*rho(k,cell1)+fzp(k)*rho(k-1,cell1))
+!3rd order! stencil
+            if (config_theta_adv_order ==3) then
+               w(k,cell2) = w(k,cell2) - sign(1.,ru(k,iEdge))*config_coef_3rd_order    &amp;
+                                        *zb3(k,2,iEdge)*flux/(fzm(k)*rho(k,cell2)+fzp(k)*rho(k-1,cell2)) 
+               w(k,cell1) = w(k,cell1) + sign(1.,ru(k,iEdge))*config_coef_3rd_order    &amp;
+                                        *zb3(k,1,iEdge)*flux/(fzm(k)*rho(k,cell1)+fzp(k)*rho(k-1,cell1)) 
+            end if
           enddo
 
 !        end if
@@ -1113,7 +1195,7 @@
 
       flux3(q_im2, q_im1, q_i, q_ip1, ua, coef3) =              &amp;
                 flux4(q_im2, q_im1, q_i, q_ip1, ua) +           &amp;
-                coef3*ua*((q_ip1 - q_im2)-3.*(q_i-q_im1))/12.0
+                coef3*abs(ua)*((q_ip1 - q_im2)-3.*(q_i-q_im1))/12.0
 
 !      coef_3rd_order = 0.
 !      if (config_scalar_adv_order == 3) coef_3rd_order = 1.0
@@ -1449,7 +1531,7 @@
 
       flux3(q_im2, q_im1, q_i, q_ip1, ua, coef3) =              &amp;
                 flux4(q_im2, q_im1, q_i, q_ip1, ua) +           &amp;
-                coef3*ua*((q_ip1 - q_im2)-3.*(q_i-q_im1))/12.0
+                coef3*abs(ua)*((q_ip1 - q_im2)-3.*(q_i-q_im1))/12.0
 
 !------
 
@@ -1812,7 +1894,7 @@
       real (kind=RKIND), dimension(:), pointer ::  fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle
       real (kind=RKIND), dimension(:,:), pointer :: weightsOnEdge, kiteAreasOnVertex, zgrid, rho_edge, rho, ru, u, v, tend_u, &amp;
                                                     circulation, divergence, vorticity, ke, pv_edge, theta, rw, tend_rho, &amp;
-                                                    rt_diabatic, tend_theta, tend_w, w, cqw, rb, rr, pp, pressure_b, zz, zx, cqu, &amp;
+                                                    rt_diabatic_tend, tend_theta, tend_w, w, cqw, rb, rr, pp, pressure_b, zz, zx, cqu, &amp; 
                                                     h_divergence, kdiff
       real (kind=RKIND), dimension(:,:,:), pointer :: deriv_two
       integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex
@@ -1823,7 +1905,8 @@
       real (kind=RKIND) :: theta_edge, theta_turb_flux, z1, z2, z3, z4, zm, z0, zp, r
       real (kind=RKIND) :: d2fdx2_cell1, d2fdx2_cell2, pgrad
 
-      real (kind=RKIND), dimension(:), pointer :: rdzu, rdzw, fzm, fzp, t_init
+      real (kind=RKIND), dimension(:), pointer :: rdzu, rdzw, fzm, fzp, qv_init
+      real (kind=RKIND), dimension(:,:), pointer :: t_init 
 
       real (kind=RKIND), allocatable, dimension(:,:) :: rv, divergence_ru, qtot 
       real (kind=RKIND), allocatable, dimension(:,:) :: delsq_theta, delsq_divergence
@@ -1850,7 +1933,7 @@
 
       flux3(q_im2, q_im1, q_i, q_ip1, ua, coef3) =              &amp;
                 flux4(q_im2, q_im1, q_i, q_ip1, ua) +           &amp;
-                coef3*ua*((q_ip1 - q_im2)-3.*(q_i-q_im1))/12.0
+                coef3*abs(ua)*((q_ip1 - q_im2)-3.*(q_i-q_im1))/12.0
 
 !-----------
 
@@ -1900,9 +1983,10 @@
       tend_theta  =&gt; tend % theta % array
       tend_w      =&gt; tend % w % array
       tend_rho    =&gt; tend % rho % array
-      rt_diabatic =&gt; grid % rt_diabatic_tend % array
+      rt_diabatic_tend  =&gt; grid % rt_diabatic_tend % array
 
       t_init      =&gt; grid % t_init % array
+      qv_init     =&gt; grid % qv_init % array
 
       rdzu        =&gt; grid % rdzu % array
       rdzw        =&gt; grid % rdzw % array
@@ -2115,12 +2199,6 @@
 
          wduz(nVertLevels+1) = 0.
 
-         wduz(1) = 0.
-         do k=2,nVertLevels
-            wduz(k) = 0.5*( rw(k,cell1)+rw(k,cell2) )*(fzm(k)*u(k,iEdge)+fzp(k)*u(k-1,iEdge))  
-         end do
-         wduz(nVertLevels+1) = 0.
-
          do k=1,nVertLevels
             tend_u(k,iEdge) = tend_u(k,iEdge) - rdzw(k)*(wduz(k+1)-wduz(k)) 
          end do
@@ -2564,23 +2642,25 @@
          do k=2,nVertLevels
 
             tend_w(k,iCell) = tend_w(k,iCell)/areaCell(iCell) -rdzu(k)*(wdwz(k+1)-wdwz(k))    &amp;
+!SHP-w
                                   - cqw(k,iCell)*( rdzu(k)*(pp(k,iCell)-pp(k-1,iCell))        &amp;
                                   + gravity*  &amp;
-!shpark
-                                   ( fzm(k)*rr(k,iCell) + fzm(k)*(rb(k,iCell)+rr(k,iCell))*qtot(k,iCell) &amp; 
-                                    +fzp(k)*rr(k-1,iCell) + fzp(k)*(rb(k-1,iCell)+rr(k-1,iCell))*qtot(k-1,iCell) )) 
-        
+                                   ( fzm(k)*(rb(k,iCell)*(qtot(k,iCell)) +         &amp;
+                                             rr(k,iCell)*(1.+qtot(k,iCell)))                  &amp;
+                                    +fzp(k)*(rb(k-1,iCell)*(qtot(k-1,iCell))  +  &amp;
+                                             rr(k-1,iCell)*(1.+qtot(k-1,iCell))) ))
+!SHP-old version
+!                                   ( fzm(k)*rr(k,iCell) + fzm(k)*(rb(k,iCell)+rr(k,iCell))*qtot(k,iCell) &amp; 
+!                                    +fzp(k)*rr(k-1,iCell) + fzp(k)*(rb(k-1,iCell)+rr(k-1,iCell))*qtot(k-1,iCell) )) 
+
+
 !                                  - gravity*(fzm(k)*rb(k,iCell)+fzp(k)*rb(k-1,iCell)) )       &amp;
 !                                  - gravity*( fzm(k)*(rr(k,iCell)+rb(k,iCell)) + fzp(k)*(rr(k-1,iCell)+rb(k-1,iCell)) )
 
-
-
 !                               - cqw(k,iCell)*rdzu(k)*(pp(k,iCell)-pp(k-1,iCell))                            &amp;
 !                                - gravity*( fzm(k)*rr(k,iCell)+fzp(k)*rr(k-1,iCell) &amp;
 !                                           +(1.-cqw(k,iCell))*(fzm(k)*rb(k,iCell)+fzp(k)*rb(k-1,iCell)))
 
-
-
 ! WCS version                               - cqw(k,iCell)*rdzu(k)*(pp(k,iCell)-pp(k-1,iCell))                            &amp;
 !                                - gravity*0.5*(rr(k,iCell)+rr(k-1,iCell)+(1.-cqw(k,iCell))*(rb(k,iCell)+rb(k-1,iCell)))
 
@@ -2598,7 +2678,7 @@
       if ( v_mom_eddy_visc2 &gt; 0.0 ) then
 
          do iCell = 1, grid % nCellsSolve
-            do k=2,nVertLevels-1
+            do k=2,nVertLevels
                tend_w(k,iCell) = tend_w(k,iCell) + v_mom_eddy_visc2*0.5*(rho(k,iCell)+rho(k-1,iCell))*(  &amp;
                                         (w(k+1,iCell)-w(k  ,iCell))*rdzw(k)                              &amp;
                                        -(w(k  ,iCell)-w(k-1,iCell))*rdzw(k-1) )*rdzu(k)
@@ -2842,7 +2922,7 @@
 
          do k=1,nVertLevels
             tend_theta(k,iCell) = tend_theta(k,iCell)/areaCell(iCell) -rdzw(k)*(wdtz(k+1)-wdtz(k))
-            tend_theta(k,iCell) = tend_theta(k,iCell) + rho(k,iCell)*rt_diabatic(k,iCell)
+            tend_theta(k,iCell) = tend_theta(k,iCell) + rho(k,iCell)*rt_diabatic_tend(k,iCell)
          end do
       end do
 
@@ -2884,8 +2964,8 @@
                zp = 0.5*(z3+z4)
 
                tend_theta(k,iCell) = tend_theta(k,iCell) + v_theta_eddy_visc2*prandtl*rho(k,iCell)*(&amp;
-                                        ((theta(k+1,iCell)-t_init(k+1))-(theta(k  ,iCell)-t_init(k)))/(zp-z0)                 &amp;
-                                       -((theta(k  ,iCell)-t_init(k))-(theta(k-1,iCell)-t_init(k-1)))/(z0-zm) )/(0.5*(zp-zm))
+                                        ((theta(k+1,iCell)-t_init(k+1,iCell))-(theta(k  ,iCell)-t_init(k,iCell)))/(zp-z0)      &amp;
+                                       -((theta(k  ,iCell)-t_init(k,iCell))-(theta(k-1,iCell)-t_init(k-1,iCell)))/(z0-zm) )/(0.5*(zp-zm))
             end do
          end do
 
@@ -3190,12 +3270,6 @@
         enddo
       enddo
 
-      do i=1,grid%nCellsSolve
-        do k=1,grid % nVertLevels + 1
-          grid % rw % array (k,i) = 0.
-        enddo
-      enddo
-
    end subroutine init_coupled_diagnostics
 
 ! ------------------------
@@ -3242,11 +3316,7 @@
 
      do k = 1, grid % nVertLevels
 
-       grid % rt_diabatic_tend % array(k,iCell) = state_new % theta % array(k,iCell)
-
        state_new % theta % array(k,iCell) = t(k)*(1.+1.61*qv(k))
-!      grid % rt_diabatic_tend % array(k,iCell) = state_new % rho % array(k,iCell) *  &amp;
-!                 (state_new % theta % array(k,iCell) - grid % rt_diabatic_tend % array(k,iCell))/dt
        grid % rt_diabatic_tend % array(k,iCell) = &amp;
                   (state_new % theta % array(k,iCell) - grid % rt_diabatic_tend % array(k,iCell))/dt
        grid % rtheta_p % array(k,iCell) = state_new % rho % array(k,iCell) * state_new % theta % array(k,iCell)  &amp;

</font>
</pre>