<p><b>ringler@lanl.gov</b> 2011-05-25 15:04:15 -0600 (Wed, 25 May 2011)</p><p><br>
added the option to scale del2 and del4 mixing of u and theta based on mesh spacing<br>
</p><hr noshade><pre><font color="gray">Modified: branches/mpas_cam_coupling/src/core_hyd_atmos/Registry
===================================================================
--- branches/mpas_cam_coupling/src/core_hyd_atmos/Registry        2011-05-25 20:48:44 UTC (rev 852)
+++ branches/mpas_cam_coupling/src/core_hyd_atmos/Registry        2011-05-25 21:04:15 UTC (rev 853)
@@ -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 logical   sw_model config_h_ScaleWithMesh      false
 namelist real      sw_model config_h_mom_eddy_visc2     0.0
 namelist real      sw_model config_h_mom_eddy_visc4     0.0
 namelist real      sw_model config_v_mom_eddy_visc2     0.0
@@ -72,6 +73,10 @@
 var real    zVertex ( nVertices ) iro zVertex - -
 var integer indexToVertexID ( nVertices ) iro indexToVertexID - -
 
+var real    meshDensity ( nCells ) iro meshDensity - -
+var real    meshScalingDel2 ( nEdges ) ro meshScalingDel2 - -
+var real    meshScalingDel4 ( nEdges ) ro meshScalingDel4 - -
+
 var integer cellsOnEdge ( TWO nEdges ) iro cellsOnEdge - -
 var integer nEdgesOnCell ( nCells ) iro nEdgesOnCell - -
 var integer nEdgesOnEdge ( nEdges ) iro nEdgesOnEdge - -

Modified: branches/mpas_cam_coupling/src/core_hyd_atmos/module_time_integration.F
===================================================================
--- branches/mpas_cam_coupling/src/core_hyd_atmos/module_time_integration.F        2011-05-25 20:48:44 UTC (rev 852)
+++ branches/mpas_cam_coupling/src/core_hyd_atmos/module_time_integration.F        2011-05-25 21:04:15 UTC (rev 853)
@@ -542,6 +542,7 @@
       real (kind=RKIND) :: h_theta_eddy_visc2, v_theta_eddy_visc2, h_theta_eddy_visc4
       real (kind=RKIND) :: u_diffusion
       real (kind=RKIND), dimension(:), pointer :: h_s, fVertex, fEdge, dvEdge, dcEdge, areaCell, areaTriangle, p_s
+      real (kind=RKIND), dimension(:), pointer :: meshScalingDel2, meshScalingDel4
       real (kind=RKIND), dimension(:,:), pointer :: vh, weightsOnEdge, kiteAreasOnVertex, h_edge, h, u, v, tend_h, tend_u, &amp;
                                                     circulation, divergence, vorticity, ke, pv_edge, geopotential, theta, ww, &amp;
                                                     h_diabatic, tend_theta, theta_phys_tend, u_phys_tend
@@ -617,6 +618,10 @@
       nVertLevels = grid % nVertLevels
       nVertices   = grid % nVertices
 
+
+      meshScalingDel2 =&gt; grid % meshScalingDel2 % array
+      meshScalingDel4 =&gt; grid % meshScalingDel4 % array
+
       h_mom_eddy_visc2 = config_h_mom_eddy_visc2
       h_mom_eddy_visc4 = config_h_mom_eddy_visc4
       v_mom_eddy_visc2 = config_v_mom_eddy_visc2
@@ -699,7 +704,7 @@
                !
                u_diffusion =   ( divergence(k,cell2)  - divergence(k,cell1) ) / dcEdge(iEdge)  &amp;
                               -( vorticity(k,vertex2) - vorticity(k,vertex1) ) / dvEdge(iEdge)
-               u_diffusion = h_mom_eddy_visc2 * u_diffusion
+               u_diffusion = meshScalingDel2(iEdge) * h_mom_eddy_visc2 * u_diffusion
  
                tend_u(k,iEdge) = tend_u(k,iEdge) + u_diffusion
             end do
@@ -779,7 +784,8 @@
                u_diffusion =   ( delsq_divergence(k,cell2)  - delsq_divergence(k,cell1) ) / dcEdge(iEdge)  &amp;
                               -( delsq_vorticity(k,vertex2) - delsq_vorticity(k,vertex1) ) / dvEdge(iEdge)
  
-               tend_u(k,iEdge) = tend_u(k,iEdge) - h_mom_eddy_visc4 * u_diffusion
+               u_diffusion = meshScalingDel4(iEdge) * h_mom_eddy_visc4 * u_diffusion
+               tend_u(k,iEdge) = tend_u(k,iEdge) - u_diffusion
             end do
          end do
 
@@ -867,7 +873,7 @@
             cell2 = grid % cellsOnEdge % array(2,iEdge)
 
             do k=1,grid % nVertLevels
-               theta_turb_flux = h_theta_eddy_visc2*prandtl*(theta(k,cell2) - theta(k,cell1))/dcEdge(iEdge)
+               theta_turb_flux = meshScalingDel2(iEdge)*h_theta_eddy_visc2*prandtl*(theta(k,cell2) - theta(k,cell1))/dcEdge(iEdge)
                flux = dvEdge (iEdge) * h_edge(k,iEdge) * theta_turb_flux
                tend_theta(k,cell1) = tend_theta(k,cell1) + flux
                tend_theta(k,cell2) = tend_theta(k,cell2) - flux
@@ -906,7 +912,7 @@
             cell2 = grid % cellsOnEdge % array(2,iEdge)
 
             do k=1,grid % nVertLevels
-               theta_turb_flux = h_theta_eddy_visc4*prandtl*(delsq_theta(k,cell2) - delsq_theta(k,cell1))/dcEdge(iEdge)
+               theta_turb_flux = meshScalingDel4(iEdge)*h_theta_eddy_visc4*prandtl*(delsq_theta(k,cell2) - delsq_theta(k,cell1))/dcEdge(iEdge)
                flux = dvEdge (iEdge) * theta_turb_flux
 
                tend_theta(k,cell1) = tend_theta(k,cell1) - flux

Modified: branches/mpas_cam_coupling/src/core_hyd_atmos/mpas_interface.F
===================================================================
--- branches/mpas_cam_coupling/src/core_hyd_atmos/mpas_interface.F        2011-05-25 20:48:44 UTC (rev 852)
+++ branches/mpas_cam_coupling/src/core_hyd_atmos/mpas_interface.F        2011-05-25 21:04:15 UTC (rev 853)
@@ -29,6 +29,7 @@
    call compute_solver_constants(block % time_levs(1) % state, mesh)
    call compute_state_diagnostics(block % time_levs(1) % state, mesh)
    call compute_solve_diagnostics(dt, block % time_levs(1) % state, mesh)
+   call compute_mesh_scaling(mesh)
    call initialize_advection_rk(mesh)
    call rbfInterp_initialize(mesh)
    call init_reconstruct(mesh)
@@ -72,3 +73,37 @@
    implicit none
 
 end subroutine mpas_finalize
+
+
+subroutine compute_mesh_scaling(mesh)
+
+      use grid_types
+      use configure
+
+      implicit none
+
+      type (grid_meta), intent(inout) :: mesh
+
+      integer :: iEdge, cell1, cell2
+      real (kind=RKIND), dimension(:), pointer :: meshDensity, meshScalingDel2, meshScalingDel4
+
+      meshDensity =&gt; mesh % meshDensity % array
+      meshScalingDel2 =&gt; mesh % meshScalingDel2 % array
+      meshScalingDel4 =&gt; mesh % meshScalingDel4 % array
+
+      !
+      ! Compute the scaling factors to be used in the del2 and del4 dissipation
+      !
+      meshScalingDel2(:) = 1.0
+      meshScalingDel4(:) = 1.0
+      if (config_h_ScaleWithMesh) then
+         do iEdge=1,mesh%nEdges
+            cell1 = mesh % cellsOnEdge % array(1,iEdge)
+            cell2 = mesh % cellsOnEdge % array(2,iEdge)
+            meshScalingDel2(iEdge) = 1.0 / ( (meshDensity(cell1) + meshDensity(cell2) )/2.0)**(5.0/12.0)
+            meshScalingDel4(iEdge) = 1.0 / ( (meshDensity(cell1) + meshDensity(cell2) )/2.0)**(5.0/6.0)
+         end do
+      end if
+
+end subroutine compute_mesh_scaling
+

</font>
</pre>