<p><b>laura@ucar.edu</b> 2010-06-28 13:27:06 -0600 (Mon, 28 Jun 2010)</p><p>Added latest changes to dynamical core<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-06-28 19:26:56 UTC (rev 365)
+++ branches/atmos_physics/src/core_nhyd_atmos/module_time_integration.F        2010-06-28 19:27:06 UTC (rev 366)
@@ -74,6 +74,7 @@
 !      logical, parameter :: debug = .true.
       logical, parameter :: debug_mass_conservation = .true.
       logical, parameter :: do_microphysics = .false.
+      logical, parameter :: scalar_advection = .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
@@ -173,6 +174,9 @@
 
 !  ************  advection of moist variables here...
 
+
+        if(scalar_advection) then
+
         block =&gt; domain % blocklist
         do while (associated(block))
            !
@@ -193,6 +197,12 @@
            block =&gt; block % next
         end do
 
+        else

+          write(0,*) ' no scalar advection '
+
+        end if
+
         block =&gt; domain % blocklist
         do while (associated(block))
            call compute_solve_diagnostics( dt, block % time_levs(2) % state, block % mesh )
@@ -489,7 +499,7 @@
                                                     wwAvg, rho_pp, cofwt, coftz, zx,      &amp;
                                                     a_tri, alpha_tri, gamma_tri, dss,     &amp;
                                                     tend_ru, tend_rho, tend_rt, tend_rw,  &amp;
-                                                    zgrid, cofwr, cofwz, w
+                                                    zgrid, cofwr, cofwz, w, h_divergence
       real (kind=RKIND), dimension(:), pointer :: fzm, fzp, rdzw, dcEdge, AreaCell, cofrz, dvEdge
 
       real (kind=RKIND) :: smdiv, c2, rcv
@@ -519,6 +529,7 @@
 
       rtheta_pp =&gt; grid % rtheta_pp % array
       rtheta_pp_old =&gt; grid % rtheta_pp_old % array
+      h_divergence =&gt; grid % h_divergence % array
       ru_p =&gt; grid % ru_p % array
       rw_p =&gt; grid % rw_p % array
       exner =&gt; grid % exner % array
@@ -608,7 +619,8 @@
             pgrad =  (rtheta_pp_old(k,cell2)-rtheta_pp_old(k,cell1))/dcEdge(iEdge)  &amp;
                          - rdzw(k)*(dpzx(k+1)-dpzx(k))
             pgrad = 0.5*c2*(exner(k,cell1)+exner(k,cell2))*pgrad
-            du(k) = dts*(tend_ru(k,iEdge) - cqu(k,iEdge) * pgrad)
+            du(k) = dts*(tend_ru(k,iEdge) - cqu(k,iEdge) * pgrad) 
+!                    + (0.005/6.)*dcEdge(iEdge)*(h_divergence(k,cell2)-h_divergence(k,cell1))
 
             ru_p(k,iEdge) = ru_p(k,iEdge) + du(k)
 
@@ -1546,7 +1558,8 @@
       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;
-                                                    h_diabatic, tend_theta, tend_w, w, cqw, rb, rr, pp, pressure_b, zz, zx, cqu
+                                                    h_diabatic, tend_theta, tend_w, w, cqw, rb, rr, pp, pressure_b, zz, zx, cqu, &amp;
+                                                    h_divergence
       real (kind=RKIND), dimension(:,:,:), pointer :: deriv_two
       integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
@@ -1568,7 +1581,10 @@
       logical, parameter :: debug = .false.
       logical, parameter :: mix_full = .false.
 !      logical, parameter :: mix_full = .true.
+      integer :: w_adv_order
 
+      real (kind=RKIND) :: coef_3rd_order
+
       rho          =&gt; s % rho % array
       rho_edge     =&gt; s % rho_edge % array
       rb           =&gt; grid % rho_base % array
@@ -1585,7 +1601,9 @@
       pv_edge      =&gt; s % pv_edge % array
       pp           =&gt; s % pressure % array
       pressure_b   =&gt; grid % pressure_base % array
+      h_divergence =&gt; grid % h_divergence % array
 
+
       weightsOnEdge     =&gt; grid % weightsOnEdge % array
       cellsOnEdge       =&gt; grid % cellsOnEdge % array
       verticesOnEdge    =&gt; grid % verticesOnEdge % array
@@ -1645,9 +1663,14 @@
       allocate(qtot(nVertLevels, nCells))
 
       divergence_ru(:,:) = 0.0
+      h_divergence(:,:) = 0.
       do iEdge=1,grid % nEdges
          cell1 = cellsOnEdge(1,iEdge)
          cell2 = cellsOnEdge(2,iEdge)
+         write(6,*) '--- nCells=', nCells
+         write(6,*) '--- cell1 =', cell1
+         write(6,*) '--- cell2 =', cell2
+
          do k=1,nVertLevels
            flux = ru(k,iEdge)*dvEdge(iEdge)
            divergence_ru(k,cell1) = divergence_ru(k,cell1) + flux
@@ -1660,6 +1683,7 @@
         r = 1.0 / areaCell(iCell)
         do k = 1,nVertLevels
            divergence_ru(k,iCell) = divergence_ru(k,iCell) * r
+           h_divergence(k,iCell) = divergence_ru(k,iCell)
            tend_rho(k,iCell) = -divergence_ru(k,iCell)-rdzw(k)*(rw(k+1,iCell)-rw(k,iCell))
 
            do iq = moist_start, moist_end
@@ -1748,7 +1772,7 @@
             tend_u(k,iEdge) = rho_edge(k,iEdge)* (workpv * rv(k,iEdge) - (ke(k,cell2) - ke(k,cell1)) / dcEdge(iEdge)) &amp;
                               - u(k,iEdge)*0.5*(divergence_ru(k,cell1)+divergence_ru(k,cell2))                        &amp;
                               - cqu(k,iEdge)*( (pp(k,Cell2)/zz(k,cell2) - pp(k,cell1)/zz(k,cell1)) /  dcEdge(iEdge)   &amp;
-                                              -rdzw(k)*(dpzx(k+1)-dpzx(k)) )
+                                              -rdzw(k)*(dpzx(k+1)-dpzx(k)) )                                          
 
          end do
 
@@ -1967,8 +1991,10 @@
       !  horizontal advection for w
       !
 
-      if (config_theta_adv_order == 2) then
+      w_adv_order = 2
 
+      if (w_adv_order == 2) then
+
          do iEdge=1,nEdges
             cell1 = cellsOnEdge(1,iEdge)
             cell2 = cellsOnEdge(2,iEdge)
@@ -1982,7 +2008,7 @@
             end if
          end do
 
-      else if (config_theta_adv_order == 3) then
+      else if (w_adv_order == 3) then
 
          do iEdge=1,nEdges
             cell1 = cellsOnEdge(1,iEdge)
@@ -2020,7 +2046,7 @@
             end if
          end do
 
-      else  if (config_theta_adv_order == 4) then
+      else  if (w_adv_order == 4) then
 
          do iEdge=1,nEdges
             cell1 = cellsOnEdge(1,iEdge)
@@ -2227,14 +2253,26 @@
                   end do
 
 !  3rd order stencil
+
+                  coef_3rd_order = 0.25
+
                   if( u(k,iEdge) &gt; 0) then
-                     flux = dvEdge(iEdge) *  ru(k,iEdge) * (        &amp;
-                                            0.5*(theta(k,cell1) + theta(k,cell2))      &amp;
-                                            -(dcEdge(iEdge) **2) * (d2fdx2_cell1) / 6. )
-                  else
-                     flux = dvEdge(iEdge) *  ru(k,iEdge) * (        &amp;
-                                            0.5*(theta(k,cell1) + theta(k,cell2))      &amp;
-                                            -(dcEdge(iEdge) **2) * (d2fdx2_cell2) / 6. )
+                        flux = dvEdge(iEdge) * ru(k,iEdge) * (          &amp;
+                                               0.5*(theta(k,cell1) + theta(k,cell2))      &amp;
+                                                -(dcEdge(iEdge) **2) * (d2fdx2_cell1 + d2fdx2_cell2) / 12.          &amp;
+                                                -(dcEdge(iEdge) **2) * coef_3rd_order*(d2fdx2_cell1 - d2fdx2_cell2) / 12. )
+                     else
+                        flux = dvEdge(iEdge) *  ru(k,iEdge) * (          &amp;
+                                               0.5*(theta(k,cell1) + theta(k,cell2))      &amp;
+                                                -(dcEdge(iEdge) **2) * (d2fdx2_cell1 + d2fdx2_cell2) / 12.          &amp;
+                                                +(dcEdge(iEdge) **2) * coef_3rd_order*(d2fdx2_cell1 - d2fdx2_cell2) / 12. )
+!                     flux = dvEdge(iEdge) *  ru(k,iEdge) * (        &amp;
+!                                            0.5*(theta(k,cell1) + theta(k,cell2))      &amp;
+!                                            -(dcEdge(iEdge) **2) * (d2fdx2_cell1) / 6. )
+!                  else
+!                     flux = dvEdge(iEdge) *  ru(k,iEdge) * (        &amp;
+!                                            0.5*(theta(k,cell1) + theta(k,cell2))      &amp;
+!                                            -(dcEdge(iEdge) **2) * (d2fdx2_cell2) / 6. )
                   end if
 
                   tend_theta(k,cell1) = tend_theta(k,cell1) - flux

</font>
</pre>