<p><b>ringler@lanl.gov</b> 2009-10-27 13:49:10 -0600 (Tue, 27 Oct 2009)</p><p><br>
added option for del2 mixing on velocity<br>
        u_diffusion is a RHS source term in the velocity tendency equation<br>
        coefficient visc is in Registry and namelist, default is zero<br>
        added diagnostic field (as output) called divergence, this is computed in compute_solve_diagnostics<br>
<br>
NOTE: The del2 source term is insided &quot;LANL_FORMULATION&quot;<br>
</p><hr noshade><pre><font color="gray">Modified: trunk/swmodel/Registry/Registry
===================================================================
--- trunk/swmodel/Registry/Registry        2009-10-27 16:21:59 UTC (rev 63)
+++ trunk/swmodel/Registry/Registry        2009-10-27 19:49:10 UTC (rev 64)
@@ -6,6 +6,7 @@
 namelist real      sw_model config_dt                172.8
 namelist integer   sw_model config_ntimesteps        7500
 namelist integer   sw_model config_output_interval   500
+namelist real      sw_model config_visc              0.0
 namelist integer   restart  config_restart_interval  0
 namelist logical   restart  config_do_restart        false
 namelist real      restart  config_restart_time      172800.0
@@ -79,6 +80,7 @@
 
 # Diagnostic fields: only written to output
 var real    v ( nVertLevels nEdges Time ) o v
+var real    divergence ( nVertLevels nCells Time ) o divergence
 var real    vorticity ( nVertLevels nVertices Time ) o vorticity
 var real    pv_edge ( nVertLevels nEdges Time ) o pv_edge
 var real    h_edge ( nVertLevels nEdges Time ) o h_edge

Modified: trunk/swmodel/namelist.input
===================================================================
--- trunk/swmodel/namelist.input        2009-10-27 16:21:59 UTC (rev 63)
+++ trunk/swmodel/namelist.input        2009-10-27 19:49:10 UTC (rev 64)
@@ -4,6 +4,7 @@
    config_dt = 172.8
    config_ntimesteps = 7500
    config_output_interval = 500
+   config_visc  = 0.0
 /
 
 &amp;restart

Modified: trunk/swmodel/src/module_time_integration.F
===================================================================
--- trunk/swmodel/src/module_time_integration.F        2009-10-27 16:21:59 UTC (rev 63)
+++ trunk/swmodel/src/module_time_integration.F        2009-10-27 19:49:10 UTC (rev 64)
@@ -242,17 +242,21 @@
       integer :: nCells, nEdges, nVertices, nVertLevels
       real (kind=RKIND), dimension(:), pointer :: h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle
       real (kind=RKIND), dimension(:,:), pointer :: vh, weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, tend_h, tend_u, &amp;
-                                                    circulation, vorticity, ke, pv_edge
+                                                    circulation, vorticity, ke, pv_edge, divergence
       integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
+      real (kind=RKIND) :: u_diffusion, visc
 
 
+      visc = config_visc
+
       h           =&gt; s % h % array
       u           =&gt; s % u % array
       v           =&gt; s % v % array
       h_edge      =&gt; s % h_edge % array
       circulation =&gt; s % circulation % array
       vorticity   =&gt; s % vorticity % array
+      divergence  =&gt; s % divergence % array
       ke          =&gt; s % ke % array
       pv_edge     =&gt; s % pv_edge % array
 
@@ -318,19 +322,31 @@
       do iEdge=1,grid % nEdgesSolve
          cell1 = cellsOnEdge(1,iEdge)
          cell2 = cellsOnEdge(2,iEdge)
+         vertex1 = verticesOnEdge(1,iEdge)
+         vertex2 = verticesOnEdge(2,iEdge)
          
          do k=1,nVertLevels
+
+         !
+         ! Compute diffusion, computed as </font>
<font color="black">abla divergence - k \times </font>
<font color="gray">abla vorticity
+         !                    only valid for visc == constant
+         !
+            u_diffusion =   ( divergence(k,cell2)  -  divergence(k,cell1) ) / dcEdge(iEdge) &amp;
+                           -(vorticity(k,vertex2)  - vorticity(k,vertex1) ) / dvEdge(iEdge)
+            u_diffusion = visc * u_diffusion
+
             q = 0.0
             do j = 1,nEdgesOnEdge(iEdge)
                eoe = edgesOnEdge(j,iEdge)
                workpv = 0.5 * (pv_edge(k,iEdge) + pv_edge(k,eoe))
                q = q + weightsOnEdge(j,iEdge) * u(k,eoe) * workpv * h_edge(k,eoe) 
             end do
-            tend_u(k,iEdge) = q - &amp;
-                              (ke(k,cell2) - ke(k,cell1) + &amp;
-                                 gravity * (h(k,cell2) + h_s(cell2) - h(k,cell1) - h_s(cell1)) &amp;
-                              ) / &amp;
-                              dcEdge(iEdge)
+            tend_u(k,iEdge) =       &amp;
+                              q     &amp;
+                              + u_diffusion &amp;
+                              - (   ke(k,cell2) - ke(k,cell1) + &amp;
+                                    gravity * (h(k,cell2) + h_s(cell2) - h(k,cell1) - h_s(cell1)) &amp;
+                                  ) / dcEdge(iEdge)
          end do
       end do
 #endif
@@ -444,9 +460,10 @@
       integer :: nCells, nEdges, nVertices, nVertLevels
       real (kind=RKIND), dimension(:), pointer :: h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle
       real (kind=RKIND), dimension(:,:), pointer :: vh, weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, tend_h, tend_u, &amp;
-                                                    circulation, vorticity, ke, pv_edge, pv_vertex, pv_cell, gradPVn, gradPVt
+                                                    circulation, vorticity, ke, pv_edge, pv_vertex, pv_cell, gradPVn, gradPVt, divergence
       integer, dimension(:,:), pointer :: cellsOnEdge, cellsOnVertex, verticesOnEdge, edgesOnCell, edgesOnEdge, edgesOnVertex
       integer, dimension(:), pointer :: nEdgesOnCell, nEdgesOnEdge
+      real (kind=RKIND) :: r
 
 
       h           =&gt; s % h % array
@@ -458,6 +475,7 @@
       tend_u      =&gt; s % u % array
       circulation =&gt; s % circulation % array
       vorticity   =&gt; s % vorticity % array
+      divergence  =&gt; s % divergence % array
       ke          =&gt; s % ke % array
       pv_edge     =&gt; s % pv_edge % array
       pv_vertex   =&gt; s % pv_vertex % array
@@ -524,6 +542,31 @@
       end do
 
       !
+      ! Compute the divergence at each cell center
+      !
+      divergence(:,:) = 0.0
+      do iEdge=1,nEdges
+         cell1 = cellsOnEdge(1,iEdge)
+         cell2 = cellsOnEdge(2,iEdge)
+         if (cell1 &gt; 0) then
+            do k=1,nVertLevels
+              divergence(k,cell1) = divergence(k,cell1) + u(k,iEdge)*dvEdge(iEdge)
+            enddo
+         endif
+         if(cell2 &gt; 0) then
+            do k=1,nVertLevels
+              divergence(k,cell2) = divergence(k,cell2) - u(k,iEdge)*dvEdge(iEdge)
+            enddo
+         end if
+      end do
+      do iCell = 1,nCells
+        r = 1.0 / areaCell(iCell)
+        do k = 1,nVertLevels
+           divergence(k,iCell) = divergence(k,iCell) * r
+        enddo
+      enddo
+
+      !
       ! Compute kinetic energy in each cell
       !
       ke(:,:) = 0.0

</font>
</pre>