<p><b>ringler@lanl.gov</b> 2013-03-18 12:59:14 -0600 (Mon, 18 Mar 2013)</p><p><br>
fixing Euler forward time stepping of del2, del4 and vertical diffusion<br>
</p><hr noshade><pre><font color="gray">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        2013-03-15 23:18:22 UTC (rev 2623)
+++ branches/mpas_cam_coupling/src/core_hyd_atmos/module_time_integration.F        2013-03-18 18:59:14 UTC (rev 2624)
@@ -699,10 +699,8 @@
! tdr
- if (rk_step .eq. 1) then
- write(6,*) ' zeroing euler_tend_u'
- euler_tend_u(:,:) = 0.0
- endif
+ write(6,*) ' zeroing euler_tend_u'
+ euler_tend_u(:,:) = 0.0
! tdr
!
@@ -738,22 +736,24 @@
! resolution!
if (k>=nVertLevels-2) then
- if (k==nVertLevels-2) u_diffusion =h_mom_eddy_visc2*nu_top*u_diffusion
- if (k==nVertLevels-1) u_diffusion =h_mom_eddy_visc2*nu_top*2*u_diffusion
- if (k==nVertLevels) u_diffusion =h_mom_eddy_visc2*nu_top*4*u_diffusion
+ if (k==nVertLevels-2) u_diffusion =h_mom_eddy_visc2*nu_top*u_diffusion
+ if (k==nVertLevels-1) u_diffusion =h_mom_eddy_visc2*nu_top*2*u_diffusion
+ if (k==nVertLevels) u_diffusion =h_mom_eddy_visc2*nu_top*4*u_diffusion
else
- u_diffusion = 0
+ u_diffusion = 0
end if
! end of LDC !!!!!!!!!!!!!!!!!
! CSR
! tdr
+ ! (factor of 2.0 is to compensate for dt=dt/2 on the first RK step)
if(doEuler) then
- if(rk_step.eq.1) euler_tend_u(k,iEdge) = euler_tend_u(k,iEdge) + u_diffusion
+ if(rk_step.eq.1) euler_tend_u(k,iEdge) = euler_tend_u(k,iEdge) + 2.0*u_diffusion
else
tend_u(k,iEdge) = tend_u(k,iEdge) + u_diffusion
endif
! tdr
+
end do
end do
end if
@@ -834,8 +834,9 @@
u_diffusion = meshScalingDel4(iEdge) * h_mom_eddy_visc4 * u_diffusion
! tdr
+ ! (factor of 2.0 is to compensate for dt=dt/2 on the first RK step)
if(doEuler) then
- if(rk_step.eq.1) euler_tend_u(k,iEdge) = euler_tend_u(k,iEdge) - u_diffusion
+ if(rk_step.eq.1) euler_tend_u(k,iEdge) = euler_tend_u(k,iEdge) - 2.0*u_diffusion
else
tend_u(k,iEdge) = tend_u(k,iEdge) - u_diffusion
endif
@@ -873,13 +874,14 @@
zp = 0.5*(z3+z4)
! tdr
+ ! (factor of 2.0 is to compensate for dt=dt/2 on the first RK step)
if(doEuler) then
if(rk_step.eq.1) &
- euler_tend_u(k,iEdge) = euler_tend_u(k,iEdge) + v_mom_eddy_visc2*( &
+ euler_tend_u(k,iEdge) = euler_tend_u(k,iEdge) + 2.0*v_mom_eddy_visc2*( &
(u(k+1,iEdge)-u(k ,iEdge))/(zp-z0) &
-(u(k ,iEdge)-u(k-1,iEdge))/(z0-zm) )/(0.5*(zp-zm))
else
- tend_u(k,iEdge) = tend_u(k,iEdge) + v_mom_eddy_visc2*( &
+ tend_u(k,iEdge)=tend_u(k,iEdge) + v_mom_eddy_visc2*( &
(u(k+1,iEdge)-u(k ,iEdge))/(zp-z0) &
-(u(k ,iEdge)-u(k-1,iEdge))/(z0-zm) )/(0.5*(zp-zm))
endif
@@ -921,7 +923,7 @@
end do
! tdr
- ! for each rk step 1 to 3, maxval(euler_tend_u) should not change
+ ! for each rk step 1 to 3, maxval(euler_tend_u), should be zero for rk_step=2,3
write(6,*) ' euler forward testing ', rk_step, maxval(euler_tend_u)
! tdr
</font>
</pre>